From: Laszlo T. <ave...@us...> - 2012-04-09 20:39:57
|
gemrb: Infinity Engine emulator The branch master has been updated via c0b663e09641467961164d97373d90c7131e5dc5 (commit) Summary of changes: gemrb/core/GUI/GameControl.cpp | 2 +- gemrb/core/Scriptable/Actor.cpp | 10 +++++++++- gemrb/core/Scriptable/Actor.h | 4 +++- 3 files changed, 13 insertions(+), 3 deletions(-) from e87b7a9a449700be16cc880beb1ba2f83fff2ec5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=c0b663e09641467961164d97373d90c7131e5dc5 commit c0b663e09641467961164d97373d90c7131e5dc5 Author: Avenger <ave...@so...> Date: Mon Apr 9 22:39:09 2012 +0200 handle the proper pst invis flag in gui targeting diff --git a/gemrb/core/GUI/GameControl.cpp b/gemrb/core/GUI/GameControl.cpp index 267cfe7..f975258 100644 --- a/gemrb/core/GUI/GameControl.cpp +++ b/gemrb/core/GUI/GameControl.cpp @@ -1742,7 +1742,7 @@ void GameControl::TryToCast(Actor *source, Actor *tgt) // cannot target spells on invisible or sanctuaried creatures // invisible actors are invisible, so this is usually impossible by itself, but improved invisibility changes that - if (source != tgt && ((tgt->GetStat(IE_STATE_ID)&STATE_INVISIBLE) || tgt->HasSpellState(SS_SANCTUARY))) { + if (source != tgt && tgt->Untargetable() ) { displaymsg->DisplayConstantStringName(STR_NOSEE_NOCAST, DMC_RED, source); ResetTargetMode(); return; diff --git a/gemrb/core/Scriptable/Actor.cpp b/gemrb/core/Scriptable/Actor.cpp index 374bc4b..fd6627e 100644 --- a/gemrb/core/Scriptable/Actor.cpp +++ b/gemrb/core/Scriptable/Actor.cpp @@ -2491,6 +2491,7 @@ void Actor::DisablePortraitIcon(ieByte icon) } } + //hack to get the proper casting sounds of copied images ieDword Actor::GetCGGender() { @@ -8352,9 +8353,16 @@ bool Actor::TryToHide() { return true; } +//cannot target actor (used by GUI) +bool Actor::Untargetable() +{ + return (GetSafeStat(IE_STATE_ID)&state_invisible) || HasSpellState(SS_SANCTUARY); +} + +//it is futile to try to harm target (used by AI scripts) bool Actor::InvalidSpellTarget() const { - if (GetStat(IE_STATE_ID) & (STATE_DEAD)) return true; + if (GetSafeStat(IE_STATE_ID) & STATE_DEAD) return true; if (HasSpellState(SS_SANCTUARY)) return true; return false; } diff --git a/gemrb/core/Scriptable/Actor.h b/gemrb/core/Scriptable/Actor.h index 7be2537..012c9fa 100644 --- a/gemrb/core/Scriptable/Actor.h +++ b/gemrb/core/Scriptable/Actor.h @@ -791,7 +791,9 @@ public: bool TryToHide(); /* checks if the alignment matches one of the masking constants */ //bool MatchesAlignmentMask(ieDword mask); - /* returns true if this actor is untargetable */ + /** untargetable by spells/attack due to invisibility or sanctuary */ + bool Untargetable(); + /* returns true if this it is futile to try to harm actor (dead/sanctuaried) */ bool InvalidSpellTarget() const; /* returns true if the spell is useless to cast on target or the spell's range is smaller than range */ ----------------------------------------------------------------------- This is an automated email from the git hooks/post-receive script. -- gemrb: Infinity Engine emulator |