|
journeyman
|
OP
journeyman
Joined: Sep 2016
|
With Baardvaark's permission I've adapted his saving throw script to make your chance to resist a status equal to the percentage of physical or magical armor you have left. I've gotten it to work exactly how I want it to (!!) except for this one little problem I'm hoping someone here can help me figure out. The mod works by overriding the status entries for every debuff with a physical or magic armor check and deleting the 'saving throw' for each, so disables will pass right through armor. Then, the following events are added to the top of Statuses.gamescript, which controls status interactions (i.e. wet + chilled = frozen). For physical armor debuffs: EVENT ResistPhysStatuses VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result FLOAT:_PhysArmor ON FetchCharacterApplyStatusData(_Character, _Result) ACTIONS ListClear(_RemoveList)
IF "c1|c2|c3|c4|c5|c6|c7|c8"
IsEqual(_Result,CRIPPLED) IsEqual(_Result,DISEASED) IsEqual(_Result,TAUNTED) IsEqual(_Result,BLEEDING) IsEqual(_Result,TAUNTED) IsEqual(_Result,DISARMED) IsEqual(_Result,KNOCKED_DOWN) IsEqual(_Result,CHICKEN)
THEN IF "!c1&c2&c3" CharacterHasTalent(_Character,Raistlin) CharacterGetStat(_PhysArmor,_Character,PhysicalArmor) IsRandom(_PhysArmor)
THEN ListAdd(_RemoveList, _Result) Set(_Result,null) StatusText(_Character,"Effect resisted by physical armor") ENDIF ENDIF RETURN(_RemoveList,_Result,null)
For magic armor debuffs: EVENT ResistMagicStatuses VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result FLOAT:_MagicArmor ON FetchCharacterApplyStatusData(_Character, _Result) ACTIONS ListClear(_RemoveList)
IF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10|c11|c12|c13|c14|c15|c16|c17|c18|c19|c20"
IsEqual(_Result,BLIND) IsEqual(_Result,CURSED) IsEqual(_Result,WEAK) IsEqual(_Result,CHILLED) IsEqual(_Result,SHOCKED) IsEqual(_Result,NULL_RESISTANCE) IsEqual(_Result,FIREBLOOD) IsEqual(_Result,MADNESS) IsEqual(_Result,FLAMING_CRESCENDO) IsEqual(_Result,DEAF) IsEqual(_Result,POISONED) IsEqual(_Result,BURNING) IsEqual(_Result,NECROFIRE) IsEqual(_Result,FEAR) IsEqual(_Result,FROZEN) IsEqual(_Result,PETRIFIED) IsEqual(_Result,STUNNED) IsEqual(_Result,SLEEPING) IsEqual(_Result,MUTED) IsEqual(_Result,ENTANGLED)
THEN IF "!c1&c2&c3" CharacterHasTalent(_Character,Raistlin) CharacterGetStat(_MagicArmor,_Character,MagicArmor) IsRandom(_MagicArmor)
THEN ListAdd(_RemoveList, _Result) Set(_Result,null) StatusText(_Character,"Effect resisted by magic armor")
ENDIF ENDIF RETURN(_RemoveList,_Result,null)
So if the status is any one of the statuses we've removed saves from, we do a random roll based on the percentage of the corresponding armor type remaining, and if we roll under that percentage the status is 'blocked,' and the text 'Effect resisted by ____ armor" is shown above the character. The problem I'm having now is that of the two events (physical and magic saves), whichever I put at the top of this file works correctly. The one I put second lets the statuses it governs right through armor. It still returns the 'Effect resisted by ____ armor' text, which indicates to me that the armor percentage check is still occuring, but the status is never 'blocked.' This works the same no matter which event comes second, physical or magic. I assume this problem has something to do with the 'remove list.' If I had a better understanding of how the scripts here work I might be able to figure it out, but my coding process is pretty much all intuition and trial and error. Oh, and the reason I do this in Statuses.gamescript and not a character script is that FetchCharacterApplyStatusData is the only way I've found to 'grab' a status right before it's applied. (The character script this is based on has to remove statuses immediately after application, which returns a bunch of unsightly status set, status removed notifications.) Here's what the rest of Statuses.gamescript (the base game code) looks like: EVENTS EVENT CharacterSetWarm VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, WARM) ACTIONS Set(_Result,WARM) ListClear(_RemoveList) ListAdd(_RemoveList,WET) IF "c1" CharacterHasStatus(_Character, WARM) THEN ListAdd(_RemoveList,WARM) Set(_Result,BURNING) ELIF "c1|c2|c3" CharacterHasStatus(_Character, BURNING) CharacterHasStatus(_Character, NECROFIRE) CharacterHasStatus(_Character, HOLY_FIRE) THEN Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, CHILLED) THEN ListAdd(_RemoveList,CHILLED) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, FROZEN) THEN ListAdd(_RemoveList,FROZEN) Set(_Result,CHILLED) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetBurning VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, BURNING) ACTIONS Set(_Result,BURNING) ListClear(_RemoveList) IF "c1&!c2" CharacterHasStatus(_Character, WARM) CharacterHasStatus(_Character, WET) THEN ListAdd(_RemoveList, WARM) ELIF "c1&!c2" CharacterHasStatus(_Character, WET) CharacterHasStatus(_Character, WARM) THEN ListAdd(_RemoveList, WET) Set(_Result, WARM) ELIF "c1&c2" CharacterHasStatus(_Character, WET) CharacterHasStatus(_Character, WARM) THEN ListAdd(_RemoveList, WET) ELIF "c1" CharacterHasStatus(_Character, CHILLED) THEN ListAdd(_RemoveList, CHILLED) Set(_Result, WARM) ELIF "c1" CharacterHasStatus(_Character, FROZEN) THEN ListAdd(_RemoveList, FROZEN) Set(_Result, WET) ELIF "c1|c2" CharacterHasStatus(_Character, NECROFIRE) CharacterHasStatus(_Character, HOLY_FIRE) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetNecrofire VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, NECROFIRE) ACTIONS Set(_Result,NECROFIRE) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, PETRIFIED) THEN Set(_Result,null) ELSE ListAdd(_RemoveList, WARM) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, WET) ListAdd(_RemoveList, FROZEN) IF "c1" CharacterHasStatus(_Character, HOLY_FIRE) THEN ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, BURNING) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result, BURNING) ENDIF ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetHolyFire VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, HOLY_FIRE) ACTIONS Set(_Result,HOLY_FIRE) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, PETRIFIED) THEN Set(_Result,null) ELSE ListAdd(_RemoveList, WARM) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, WET) ListAdd(_RemoveList, FROZEN) IF "c1" CharacterHasStatus(_Character, NECROFIRE) THEN ListAdd(_RemoveList, NECROFIRE) Set(_Result, BURNING) ENDIF ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetWet VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchCharacterApplyStatusData(_Character, WET) ACTIONS Set(_Result,WET) Set(_Turns,null) ListClear(_RemoveList) ListAdd(_RemoveList, WARM) ListAdd(_RemoveList, INVISIBLE) IF "c1" CharacterHasStatus(_Character, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, WARM) ELIF "c1" CharacterHasStatus(_Character, HOLY_FIRE) THEN ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, WARM) ELIF "c1" CharacterHasStatus(_Character, CHILLED) THEN ListAdd(_RemoveList, CHILLED) Set(_Result,FROZEN) Set(_Turns,1) ELIF "c1|c2|c3" CharacterHasStatus(_Character, FROZEN) CharacterHasStatus(_Character, NECROFIRE) CharacterHasStatus(_Character, HOLY_FIRE) THEN Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, SHOCKED) THEN ListAdd(_RemoveList, SHOCKED) Set(_Result,STUNNED) Set(_Turns,1) ENDIF RETURN(_RemoveList,_Result,_Turns) EVENT CharacterSetChilled VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchCharacterApplyStatusData(_Character, CHILLED) ACTIONS Set(_Result,CHILLED) Set(_Turns,null) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, WARM) ELIF "c1" CharacterHasStatus(_Character, HOLY_FIRE) THEN ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, WARM) ELIF "c1" CharacterHasStatus(_Character, WARM) THEN ListAdd(_RemoveList, WARM) Set(_Result,null) ELIF "c1|c2" CharacterHasStatus(_Character, CHILLED) CharacterHasStatus(_Character, WET) THEN ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, WET) Set(_Result, FROZEN) Set(_Turns,1) ELIF "c1|c2|c3" CharacterHasStatus(_Character, FROZEN) CharacterHasStatus(_Character, NECROFIRE) CharacterHasStatus(_Character, HOLY_FIRE) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,_Turns) EVENT CharacterSetFrozen VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, FROZEN) ACTIONS Set(_Result,FROZEN) ListClear(_RemoveList) ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, WET) ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) IF "c1" CharacterHasStatus(_Character, MAGIC_SHELL) THEN ListClear(_RemoveList) ListAdd(_RemoveList, MAGIC_SHELL) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, WET) ELIF "c1" CharacterHasStatus(_Character, HOLY_FIRE) THEN ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, WET) ELIF "c1|c2" CharacterHasStatus(_Character, NECROFIRE) CharacterHasStatus(_Character, HOLY_FIRE) THEN Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, WARM) THEN ListAdd(_RemoveList, WARM) Set(_Result, CHILLED) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetPetrified VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, PETRIFIED) ACTIONS Set(_Result,PETRIFIED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, MAGIC_SHELL) THEN ListClear(_RemoveList) ListAdd(_RemoveList, MAGIC_SHELL) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListClear(_RemoveList) ListAdd(_RemoveList, BLESSED) Set(_Result,null) ENDIF IF "c1" IsEqual(_Result, PETRIFIED) THEN ListAdd(_RemoveList, STUNNED) ListAdd(_RemoveList, SHOCKED) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, CRIPPLED) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, POISONED) ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetShocked VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchCharacterApplyStatusData(_Character, SHOCKED) ACTIONS Set(_Result,SHOCKED) Set(_Turns,null) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, MAGIC_SHELL) THEN ListAdd(_RemoveList, MAGIC_SHELL) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, STUNNED) THEN ListAdd(_RemoveList, SHOCKED) Set(_Result,null) ELIF "c1|c2" CharacterHasStatus(_Character, SHOCKED) CharacterHasStatus(_Character, WET) THEN ListAdd(_RemoveList, SHOCKED) Set(_Result,STUNNED) Set(_Turns,1) ENDIF ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) RETURN(_RemoveList,_Result,_Turns) EVENT CharacterSetStunned VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, STUNNED) ACTIONS Set(_Result,STUNNED) ListClear(_RemoveList) ListAdd(_RemoveList, SHOCKED) ListAdd(_RemoveList, PETRIFIED) ListAdd(_RemoveList, WET) ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) IF "c1" CharacterHasStatus(_Character, MAGIC_SHELL) THEN ListClear(_RemoveList) ListAdd(_RemoveList, MAGIC_SHELL) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListClear(_RemoveList) ListAdd(_RemoveList, BLESSED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetDrunk VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchCharacterApplyStatusData(_Character, DRUNK) ACTIONS Set(_Result,DRUNK) Set(_Turns,null) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, CLEAR_MINDED) THEN ListAdd(_RemoveList, CLEAR_MINDED) Set(_Result, null) ELIF "c1" CharacterHasStatus(_Character, DRUNK) THEN ListAdd(_RemoveList, DRUNK) Set(_Result, SLEEPING) Set(_Turns,2) ENDIF RETURN(_RemoveList,_Result,_Turns) EVENT CharacterSetSlowed VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, SLOWED) ACTIONS Set(_Result,SLOWED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, HASTED) THEN ListAdd(_RemoveList, HASTED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetHasted VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, HASTED) ACTIONS Set(_Result,HASTED) ListClear(_RemoveList) ListAdd(_RemoveList, SLOWED) ListAdd(_RemoveList, CRIPPLED) RETURN(_RemoveList,_Result,null) EVENT CharacterSetFeared VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, FEAR) ACTIONS Set(_Result,FEAR) ListClear(_RemoveList) IF "c1|c2" CharacterHasStatus(_Character, CLEAR_MINDED) CharacterHasStatus(_Character, ENRAGED) THEN ListAdd(_RemoveList, CLEAR_MINDED) ListAdd(_RemoveList, ENRAGED) Set(_Result,null) ELSE ListAdd(_RemoveList, CHARMED) ListAdd(_RemoveList, TAUNTED) ListAdd(_RemoveList, SLEEPING) ListAdd(_RemoveList, MADNESS) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetCharmed VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CHARMED) ACTIONS Set(_Result,CHARMED) ListClear(_RemoveList) IF "c1|c2" CharacterHasStatus(_Character, CLEAR_MINDED) CharacterHasStatus(_Character, ENRAGED) THEN ListAdd(_RemoveList, CLEAR_MINDED) ListAdd(_RemoveList, ENRAGED) Set(_Result,null) ELSE ListAdd(_RemoveList, FEAR) ListAdd(_RemoveList, TAUNTED) ListAdd(_RemoveList, SLEEPING) ListAdd(_RemoveList, MADNESS) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetTaunted VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, TAUNTED) ACTIONS Set(_Result,TAUNTED) ListClear(_RemoveList) ListAdd(_RemoveList, INVISIBLE) IF "c1|c2" CharacterHasStatus(_Character, CLEAR_MINDED) CharacterHasStatus(_Character, ENRAGED) THEN ListAdd(_RemoveList, CLEAR_MINDED) ListAdd(_RemoveList, ENRAGED) Set(_Result,null) ELSE ListAdd(_RemoveList, CHARMED) ListAdd(_RemoveList, FEAR) ListAdd(_RemoveList, SLEEPING) ListAdd(_RemoveList, MADNESS) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetSleeping VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, SLEEPING) ACTIONS Set(_Result,SLEEPING) ListClear(_RemoveList) ListAdd(_RemoveList, INVISIBLE) IF "c1|c2" CharacterHasStatus(_Character, CLEAR_MINDED) CharacterHasStatus(_Character, ENRAGED) THEN ListAdd(_RemoveList, CLEAR_MINDED) ListAdd(_RemoveList, ENRAGED) Set(_Result,null) ELSE ListAdd(_RemoveList, CHARMED) ListAdd(_RemoveList, TAUNTED) ListAdd(_RemoveList, FEAR) ListAdd(_RemoveList, MADNESS) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetMadness VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, MADNESS) ACTIONS Set(_Result,MADNESS) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, CLEAR_MINDED) THEN ListAdd(_RemoveList, CLEAR_MINDED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetClearMinded VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CLEAR_MINDED) ACTIONS Set(_Result,CLEAR_MINDED) ListClear(_RemoveList) ListAdd(_RemoveList, FEAR) ListAdd(_RemoveList, CHARMED) ListAdd(_RemoveList, TAUNTED) ListAdd(_RemoveList, SLEEPING) ListAdd(_RemoveList, ENRAGED) ListAdd(_RemoveList, BLIND) ListAdd(_RemoveList, DRUNK) ListAdd(_RemoveList, MADNESS) RETURN(_RemoveList,_Result,null) EVENT CharacterSetEnraged VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, ENRAGED) ACTIONS Set(_Result,ENRAGED) ListClear(_RemoveList) ListAdd(_RemoveList, FEAR) ListAdd(_RemoveList, CHARMED) ListAdd(_RemoveList, TAUNTED) ListAdd(_RemoveList, SLEEPING) ListAdd(_RemoveList, MADNESS) ListAdd(_RemoveList, CLEAR_MINDED) RETURN(_RemoveList,_Result,null) EVENT CharacterSetRested VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, RESTED) ACTIONS Set(_Result,RESTED) ListClear(_RemoveList) ListAdd(_RemoveList, MUTED) ListAdd(_RemoveList, BLIND) ListAdd(_RemoveList, CRIPPLED) ListAdd(_RemoveList, KNOCKED_DOWN) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, PLAGUE) RETURN(_RemoveList,_Result,null) EVENT CharacterSetMuted VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, MUTED) ACTIONS Set(_Result,MUTED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, RESTED) THEN ListAdd(_RemoveList, RESTED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetBlind VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, BLIND) ACTIONS Set(_Result,BLIND) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, RESTED) THEN ListAdd(_RemoveList, RESTED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetCrippled VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CRIPPLED) ACTIONS Set(_Result,CRIPPLED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, RESTED) THEN ListAdd(_RemoveList, RESTED) Set(_Result,null) ENDIF IF "c1" CharacterHasStatus(_Character, HASTED) THEN ListAdd(_RemoveList, HASTED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetKnockedDown VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, KNOCKED_DOWN) ACTIONS Set(_Result,KNOCKED_DOWN) ListClear(_RemoveList) ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) IF "c1" CharacterHasStatus(_Character, RESTED) THEN ListAdd(_RemoveList, RESTED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetRegeneration VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, REGENERATION) ACTIONS Set(_Result,REGENERATION) ListClear(_RemoveList) ListAdd(_RemoveList, ACID) ListAdd(_RemoveList, POISONED) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, SUFFOCATING) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, INFESTED) RETURN(_RemoveList,_Result,null) EVENT CharacterSetFortified VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, FORTIFIED) ACTIONS Set(_Result,FORTIFIED) ListClear(_RemoveList) ListAdd(_RemoveList, ACID) ListAdd(_RemoveList, POISONED) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, INFECTIOUS_DISEASED) ListAdd(_RemoveList, DECAYING_TOUCH) RETURN(_RemoveList,_Result,null) EVENT CharacterSetAcid VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, ACID) ACTIONS Set(_Result,ACID) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, FORTIFIED) THEN ListAdd(_RemoveList, FORTIFIED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetPoisoned VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, POISONED) ACTIONS Set(_Result,POISONED) ListClear(_RemoveList) RETURN(_RemoveList,_Result,null) EVENT CharacterSetBleeding VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, BLEEDING) ACTIONS Set(_Result,BLEEDING) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, REGENERATION) THEN ListAdd(_RemoveList, REGENERATION) Set(_Result,null) ENDIF IF "c1" CharacterHasStatus(_Character, FORTIFIED) THEN ListAdd(_RemoveList, FORTIFIED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetBlessed VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, BLESSED) ACTIONS Set(_Result,BLESSED) ListClear(_RemoveList) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, INFECTIOUS_DISEASED) ListAdd(_RemoveList, DECAYING_TOUCH) ListAdd(_RemoveList, PETRIFIED) ListAdd(_RemoveList, STUNNED) ListAdd(_RemoveList, FROZEN) ListAdd(_RemoveList, INFESTED) ListAdd(_RemoveList, PLAGUE) IF "c1" CharacterHasStatus(_Character, FROZEN) THEN ListAdd(_RemoveList, FROZEN) Set(_Result, CHILLED) ENDIF IF "c1" CharacterHasStatus(_Character, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, HOLY_FIRE) ENDIF IF "c1" CharacterHasStatus(_Character, NECROFIRE) THEN ListAdd(_RemoveList, NECROFIRE) Set(_Result, BURNING) ENDIF IF "c1" CharacterHasStatus(_Character, CURSED) THEN ListAdd(_RemoveList, CURSED) Set(_Result,null) ENDIF IF "c1" CharacterHasStatus(_Character, VOIDHOWL) THEN ListAdd(_RemoveList, VOIDHOWL) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetVoidHowl VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, VOIDHOWL) ACTIONS Set(_Result,VOIDHOWL) RETURN(_RemoveList,_Result,null) EVENT CharacterSetMagicShell VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, MAGIC_SHELL) ACTIONS Set(_Result,MAGIC_SHELL) ListClear(_RemoveList) ListAdd(_RemoveList, FROZEN) ListAdd(_RemoveList, STUNNED) ListAdd(_RemoveList, PETRIFIED) ListAdd(_RemoveList, PLAGUE) ListAdd(_RemoveList, SUFFOCATING) ListAdd(_RemoveList, POISONED) ListAdd(_RemoveList, BURNING) RETURN(_RemoveList,_Result,null) EVENT CharacterSetCursed VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CURSED) ACTIONS Set(_Result,CURSED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, CHILLED) THEN ListAdd(_RemoveList, CHILLED) Set(_Result, FROZEN) ENDIF IF "c1" CharacterHasStatus(_Character, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, NECROFIRE) ENDIF IF "c1|c2" CharacterHasStatus(_Character, WARM) CharacterHasStatus(_Character, HOLY_FIRE) THEN ListAdd(_RemoveList, WARM) ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, BURNING) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetDiseased VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, DISEASED) ACTIONS Set(_Result,DISEASED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, FORTIFIED) THEN ListAdd(_RemoveList, FORTIFIED) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetInfectiousDiseased VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, INFECTIOUS_DISEASED) ACTIONS Set(_Result,INFECTIOUS_DISEASED) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, FORTIFIED) THEN ListAdd(_RemoveList, FORTIFIED) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetDecaying VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, DECAYING_TOUCH) ACTIONS Set(_Result,DECAYING_TOUCH) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, FORTIFIED) THEN ListAdd(_RemoveList, FORTIFIED) Set(_Result,null) ELIF "c1" CharacterHasStatus(_Character, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetInvisible VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, INVISIBLE) ACTIONS Set(_Result,INVISIBLE) ListClear(_RemoveList) IF "c1" CharacterHasStatus(_Character, MARKED) THEN ListAdd(_RemoveList, INVISIBLE) Set(_Result,null) ELSE ListAdd(_RemoveList, WET) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetDeathfog VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, DEATH_FOG) ACTIONS Set(_Result,DEATH_FOG) ListClear(_RemoveList) IF "c1|c2|c3|c4|c5|c6|c7|c8" CharacterHasTalent(_Character, Zombie) IsTagged(_Character, UNDEAD) IsTagged(_Character, UNDEAD_BEAST) IsTagged(_Character, DEATHFOG_IMMUNE) IsTagged(_Character, DRAGON) IsTagged(_Character, VOIDWOKEN) IsTagged(_Character, DEMON) IsTagged(_Character, CONSTRUCT) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetChicken VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CHICKEN) ACTIONS Set(_Result, CHICKEN) ListClear(_RemoveList) ListAdd(_RemoveList, WINGS) IF "c1" CharacterHasStatus(_Character, CHICKEN) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT CharacterSetHealingElixir VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, HEALING_ELIXIR) ACTIONS Set(_Result,HEALING_ELIXIR) ListClear(_RemoveList) ListAdd(_RemoveList, WEAK) ListAdd(_RemoveList, SLOWED) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, POISONED) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, CRIPPLED) ListAdd(_RemoveList, CURSED) ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, DRUNK) ListAdd(_RemoveList, BURNING) ListAdd(_RemoveList, BLEEDING) ListAdd(_RemoveList, NECROFIRE) ListAdd(_RemoveList, ACID) ListAdd(_RemoveList, SUFFOCATING) ListAdd(_RemoveList, DECAYING_TOUCH) ListAdd(_RemoveList, INFECTIOUS_DISEASED) ListAdd(_RemoveList, PLAGUE) RETURN(_RemoveList,_Result,null) EVENT CharacterSetChainHeal VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CHAIN_HEAL) ACTIONS Set(_Result,CHAIN_HEAL) ListClear(_RemoveList) ListAdd(_RemoveList, INFESTED) RETURN(_RemoveList,_Result,null) EVENT CharacterSetCleanseWounds VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, CLEANSE_WOUNDS) ACTIONS Set(_Result,CLEANSE_WOUNDS) ListClear(_RemoveList) ListAdd(_RemoveList, INFESTED) ListAdd(_RemoveList, PLAGUE) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, INFECTIOUS_DISEASED) RETURN(_RemoveList,_Result,null) EVENT CharacterSetSteamLance VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, STEAM_LANCE) ACTIONS Set(_Result,STEAM_LANCE) ListClear(_RemoveList) ListAdd(_RemoveList, FROZEN) ListAdd(_RemoveList, CHILLED) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, INFECTIOUS_DISEASED) ListAdd(_RemoveList, DECAYING_TOUCH) ListAdd(_RemoveList, PLAGUE) IF "c1" CharacterHasStatus(_Character, PLAGUE) THEN ListAdd(_RemoveList, PLAGUE) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null)
EVENT CharacterSetWeb VARS CHARACTER:_Character LIST<STATUS>:_RemoveList STATUS:_Result ON FetchCharacterApplyStatusData(_Character, WEB) ACTIONS Set(_Result,WEB) ListClear(_RemoveList) IF "c1&!c2" CharacterHasStatus(_Character, SPIDER_LEGS) CharacterHasStatus(_Character, HASTED) THEN Set(_Result,HASTED) ELIF "c1" CharacterHasStatus(_Character, SPIDER_LEGS) THEN ListAdd(_RemoveList, null) /* Don't reapply Haste to avoid spam */ ELIF "c1&!c2" CharacterHasStatus(_Character, HASTED) CharacterHasStatus(_Character, SPIDER_LEGS) THEN ListAdd(_RemoveList, HASTED) ENDIF RETURN(_RemoveList,_Result,null) // ITEMS ================================================================================================ EVENT ItemSetWarm VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, WARM) ACTIONS Set(_Result,WARM) ListClear(_RemoveList) ListAdd(_RemoveList,WET) IF "c1" ItemHasStatus(_Item, WARM) THEN ListAdd(_RemoveList,WARM) Set(_Result,BURNING) ELIF "c1|c2|c3" ItemHasStatus(_Item, BURNING) ItemHasStatus(_Item, NECROFIRE) ItemHasStatus(_Item, HOLY_FIRE) THEN Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, CHILLED) THEN ListAdd(_RemoveList,CHILLED) Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, FROZEN) THEN ListAdd(_RemoveList,FROZEN) Set(_Result, CHILLED) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetBurning VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, BURNING) ACTIONS Set(_Result,BURNING) ListClear(_RemoveList) ListAdd(_RemoveList,WARM) IF "c1" ItemHasStatus(_Item, CHILLED) THEN ListAdd(_RemoveList,CHILLED) Set(_Result, WARM) ELIF "c1" ItemHasStatus(_Item, WET) THEN ListAdd(_RemoveList,WET) Set(_Result, WARM) ELIF "c1" ItemHasStatus(_Item, FROZEN) THEN ListAdd(_RemoveList,FROZEN) Set(_Result, WET) ELIF "c1|c2" ItemHasStatus(_Item, NECROFIRE) ItemHasStatus(_Item, HOLY_FIRE) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetNecrofire VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, NECROFIRE) ACTIONS Set(_Result,NECROFIRE) ListClear(_RemoveList) ListAdd(_RemoveList,WARM) ListAdd(_RemoveList,BURNING) ListAdd(_RemoveList,CHILLED) ListAdd(_RemoveList,WET) ListAdd(_RemoveList,FROZEN) IF "c1" ItemHasStatus(_Item, HOLY_FIRE) THEN ListAdd(_RemoveList,HOLY_FIRE) Set(_Result, BURNING) ELIF "c1" ItemHasStatus(_Item, BLESSED) THEN ListAdd(_RemoveList,BLESSED) Set(_Result, BURNING) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetHolyFire VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, HOLY_FIRE) ACTIONS Set(_Result,HOLY_FIRE) ListClear(_RemoveList) ListAdd(_RemoveList,WARM) ListAdd(_RemoveList,BURNING) ListAdd(_RemoveList,CHILLED) ListAdd(_RemoveList,WET) ListAdd(_RemoveList,FROZEN) IF "c1" ItemHasStatus(_Item, NECROFIRE) THEN ListAdd(_RemoveList,NECROFIRE) Set(_Result, BURNING) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetWet VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchItemApplyStatusData(_Item, WET) ACTIONS Set(_Result,WET) Set(_Turns,null) ListClear(_RemoveList) ListAdd(_RemoveList,WARM) ListAdd(_RemoveList, INVISIBLE) IF "c1" ItemHasStatus(_Item, BURNING) THEN ListAdd(_RemoveList,BURNING) Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, CHILLED) THEN ListAdd(_RemoveList,CHILLED) Set(_Result, FROZEN) Set(_Turns, 1) ELIF "c1|c2|c3" ItemHasStatus(_Item, FROZEN) ItemHasStatus(_Item, NECROFIRE) ItemHasStatus(_Item, HOLY_FIRE) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,_Turns) EVENT ItemSetChilled VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchItemApplyStatusData(_Item, CHILLED) ACTIONS Set(_Result,CHILLED) Set(_Turns,null) ListClear(_RemoveList) IF "c1" ItemHasStatus(_Item, BURNING) THEN ListAdd(_RemoveList,BURNING) Set(_Result, WARM) ELIF "c1" ItemHasStatus(_Item, WARM) THEN ListAdd(_RemoveList,WARM) Set(_Result,null) ELIF "c1|c2" ItemHasStatus(_Item, CHILLED) ItemHasStatus(_Item, WET) THEN ListAdd(_RemoveList,CHILLED) ListAdd(_RemoveList,WET) Set(_Result, FROZEN) Set(_Turns, 1) ELIF "c1|c2|c3" ItemHasStatus(_Item, FROZEN) ItemHasStatus(_Item, NECROFIRE) ItemHasStatus(_Item, HOLY_FIRE) THEN Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,_Turns) EVENT ItemSetFrozen VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, FROZEN) ACTIONS Set(_Result,FROZEN) ListClear(_RemoveList) ListAdd(_RemoveList,CHILLED) ListAdd(_RemoveList,WET) ListAdd(_RemoveList, INVISIBLE) IF "c1" ItemHasStatus(_Item, BURNING) THEN ListAdd(_RemoveList,BURNING) Set(_Result, WET) ELIF "c1|c2" ItemHasStatus(_Item, NECROFIRE) ItemHasStatus(_Item, HOLY_FIRE) THEN Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, WARM) THEN ListAdd(_RemoveList,WARM) Set(_Result, CHILLED) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetBlessed VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, BLESSED) ACTIONS Set(_Result,BLESSED) ListClear(_RemoveList) ListAdd(_RemoveList, DISEASED) ListAdd(_RemoveList, INFECTIOUS_DISEASED) ListAdd(_RemoveList, DECAYING_TOUCH) ListAdd(_RemoveList, PETRIFIED) ListAdd(_RemoveList, STUNNED) ListAdd(_RemoveList, PLAGUE) IF "c1" ItemHasStatus(_Item, FROZEN) THEN ListAdd(_RemoveList, FROZEN) Set(_Result, CHILLED) ENDIF IF "c1" ItemHasStatus(_Item, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, HOLY_FIRE) ENDIF IF "c1" ItemHasStatus(_Item, NECROFIRE) THEN ListAdd(_RemoveList, NECROFIRE) Set(_Result, BURNING) ENDIF IF "c1" ItemHasStatus(_Item, CURSED) THEN ListAdd(_RemoveList, CURSED) Set(_Result,null) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetCursed VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result ON FetchItemApplyStatusData(_Item, CURSED) ACTIONS Set(_Result,CURSED) ListClear(_RemoveList) IF "c1" ItemHasStatus(_Item, BLESSED) THEN ListAdd(_RemoveList, BLESSED) Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, CHILLED) THEN ListAdd(_RemoveList, CHILLED) Set(_Result, FROZEN) ENDIF IF "c1" ItemHasStatus(_Item, BURNING) THEN ListAdd(_RemoveList, BURNING) Set(_Result, NECROFIRE) ENDIF IF "c1|c2" ItemHasStatus(_Item, WARM) ItemHasStatus(_Item, HOLY_FIRE) THEN ListAdd(_RemoveList, WARM) ListAdd(_RemoveList, HOLY_FIRE) Set(_Result, BURNING) ENDIF RETURN(_RemoveList,_Result,null) EVENT ItemSetShocked VARS ITEM:_Item LIST<STATUS>:_RemoveList STATUS:_Result INT:_Turns ON FetchItemApplyStatusData(_Item, SHOCKED) ACTIONS Set(_Result,SHOCKED) Set(_Turns,null) ListClear(_RemoveList) IF "c1" ItemHasStatus(_Item, MAGIC_SHELL) THEN ListAdd(_RemoveList, MAGIC_SHELL) Set(_Result,null) ELIF "c1" ItemHasStatus(_Item, STUNNED) THEN ListAdd(_RemoveList, SHOCKED) Set(_Result,null) ELIF "c1|c2" ItemHasStatus(_Item, SHOCKED) ItemHasStatus(_Item, WET) THEN ListAdd(_RemoveList, SHOCKED) Set(_Result,STUNNED) Set(_Turns,1) ENDIF ListAdd(_RemoveList, INVISIBLE) ListAdd(_RemoveList, SLEEPING) RETURN(_RemoveList,_Result,_Turns) EVENT CharRemoveFrozen VARS CHARACTER:_Character STATUS:_StatusRemoved ON OnCharacterStatusRemoved(_Character, FROZEN) ACTIONS CharacterApplyStatus(_Character, POST_MAGIC_CONTROL, 0) EVENT CharRemoveStunned VARS CHARACTER:_Character STATUS:_StatusRemoved ON OnCharacterStatusRemoved(_Character, STUNNED) ACTIONS CharacterApplyStatus(_Character, POST_MAGIC_CONTROL, 0) IF "c1" IsTagged(_Character,"AUTOMATON") THEN CharacterApplyStatus(_Character, HYPERCHARGED, 3, 1) ENDIF EVENT CharRemovePetrified VARS CHARACTER:_Character STATUS:_StatusRemoved ON OnCharacterStatusRemoved(_Character, PETRIFIED) ACTIONS CharacterApplyStatus(_Character, POST_PHYS_CONTROL, 0) EVENT CharRemoveKnockedDown VARS CHARACTER:_Character STATUS:_StatusRemoved ON OnCharacterStatusRemoved(_Character, KNOCKED_DOWN) ACTIONS CharacterApplyStatus(_Character, POST_PHYS_CONTROL, 0) EVENT CharRemoveInnerDemon VARS CHARACTER:_Character STATUS:_StatusRemoved ON OnCharacterStatusRemoved(_Character, INNER_DEMON) ACTIONS IF "!c1" CharacterHasStatus(_Character,INNER_DEMON) THEN CharacterRemoveStatus(_Character, DEMONIC_TUTELAGE) ENDIF EVENT InfernalLizard_RemoveNecroFire VARS CHARACTER:_Character ON OnCharacterStatusRemoved(_Character, NECROFIRE) ACTIONS IF "c1&!c2" IsTagged(_Character,"INFERNAL_LIZARD") CharacterHasStatus(_Character,WEAK) THEN CharacterApplyStatus(_Character,WEAK,2,1) ENDIF EVENT InfernalLizard_NecroFireReApply VARS CHARACTER:_Character ON OnCharacterStatusRemoved(_Character, WEAK) ACTIONS IF "c1&!c2" IsTagged(_Character,"INFERNAL_LIZARD") CharacterHasStatus(_Character,NECROFIRE) THEN CharacterApplyStatus(_Character,NECROFIRE,-1,1) ENDIF
|
|
|
|
apprentice
|
apprentice
Joined: Sep 2017
|
Sorry i am not able to help you. Would there be a way to make saves vs statuses (knocked prone, charmed, etc) use ability scores like strength as opposed to armor?
So lets say someone uses battering ram.-Can the person use the skill get a bonus from strength? The save to be knocked prone won't go off of armor but a random roll using bonuses from either the player's strength OR finesse scores. (either hold their ground by being strong enough or dodge essentially).
Since D&D uses a d20 to determine the results i dont know how to implement this into the system. maybe a flat result for all skills, lets say normally it would work about 50% of the time without bonuses. Then with bonuses since the cap in divinity is 30 for every point above 10 it would add about 3% to the rammer or subtract for the defender.
I am asking because of how D&D works.
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
Hey Smarmbot, I haven't done any D:OS 2 scripting yet (no time for it until next year), so this looks partly unfamiliar. But your problem is probably caused by the first event block always getting executed (ListClear + RETURN...), even if _Result isn't equal to the statuses you define as conditions, so the engine gets an 'Okay' to apply the status (because _Result isn't set to null), regardless of your other event block following which seems to be second in the execution order. The solution (if I'm guessing right) would be to put everything into one event block. Edit: EVENT ResistPhysStatuses
VARS
CHARACTER:_Character
LIST<STATUS>:_RemoveList
STATUS:_Result
FLOAT:_Armor
ON
FetchCharacterApplyStatusData(_Character, _Result)
ACTIONS
ListClear(_RemoveList)
IF "c1|c2|c3|c4|c5|c6|c7|c8"
IsEqual(_Result,CRIPPLED)
IsEqual(_Result,DISEASED)
IsEqual(_Result,TAUNTED)
IsEqual(_Result,BLEEDING)
IsEqual(_Result,TAUNTED)
IsEqual(_Result,DISARMED)
IsEqual(_Result,KNOCKED_DOWN)
IsEqual(_Result,CHICKEN)
THEN
IF "!c1&c2&c3"
CharacterHasTalent(_Character,Raistlin)
CharacterGetStat(_Armor,_Character,PhysicalArmor)
IsRandom(_Armor)
THEN
ListAdd(_RemoveList, _Result)
Set(_Result,null)
StatusText(_Character,"Effect resisted by physical armor")
ENDIF
ELIF "c1|c2|c3|c4|c5|c6|c7|c8|c9|c10|c11|c12|c13|c14|c15|c16|c17|c18|c19|c20"
IsEqual(_Result,BLIND)
IsEqual(_Result,CURSED)
IsEqual(_Result,WEAK)
IsEqual(_Result,CHILLED)
IsEqual(_Result,SHOCKED)
IsEqual(_Result,NULL_RESISTANCE)
IsEqual(_Result,FIREBLOOD)
IsEqual(_Result,MADNESS)
IsEqual(_Result,FLAMING_CRESCENDO)
IsEqual(_Result,DEAF)
IsEqual(_Result,POISONED)
IsEqual(_Result,BURNING)
IsEqual(_Result,NECROFIRE)
IsEqual(_Result,FEAR)
IsEqual(_Result,FROZEN)
IsEqual(_Result,PETRIFIED)
IsEqual(_Result,STUNNED)
IsEqual(_Result,SLEEPING)
IsEqual(_Result,MUTED)
IsEqual(_Result,ENTANGLED)
THEN
IF "!c1&c2&c3"
CharacterHasTalent(_Character,Raistlin)
CharacterGetStat(_Armor,_Character,MagicArmor)
IsRandom(_Armor)
THEN
ListAdd(_RemoveList, _Result)
Set(_Result,null)
StatusText(_Character,"Effect resisted by magic armor")
ENDIF
ENDIF
RETURN(_RemoveList,_Result,null)
Last edited by Abraxas*; 01/10/17 04:14 PM.
|
|
|
|
journeyman
|
OP
journeyman
Joined: Sep 2016
|
@Abraxas: Aaaaand that did it! Thanks! The soon-to-be CC'd party members of my subscribers are cursing your name. Next year can't come quickly enough. @Belligerence: You could use this code as a basis to do just that. First couple tweaks might look something like: FetchCharacterApplyStatusData(_Character, KNOCKED_DOWN) .... CharacterGetStat(_STR,_Character,STRENGTH)
Knockdown would bypass phys armor and check strength.
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
Glad I could be of help. I wouldn't have bet on it here!  Before I answered I had a look into D:OS 1 and noticed that OnCharacterApplyStatus (which is similar to FetchCharacterApplyStatusData in D:OS 2) can prevent status applications. RETURN requires an integer here and tells the engine if to apply or not apply the status (and apply another status instead, for example). I wouldn't have noticed that without your question. Also nice to see you working on D:OS 2!
|
|
|
|
addict
|
addict
Joined: Sep 2015
|
One more thing: Have you checked if the functionality of your event block is also affected by the other event blocks of the original script and vice versa (depending on the order)? From my understanding this should be the case as long as you have empty status variables in FetchCharacterApplyStatusData (so the event block will always return the catched status to apply it) or two FetchCharacterApplyStatusData events for the same status (so two events interfere). You probably have to add your resist code to every existing FetchCharacterApplyStatusData event (if you want to regard this status) and create new events for your statuses that aren't regarded already. Example for the FROZEN status:
EVENT CharacterSetFrozen
VARS
CHARACTER:_Character
LIST<STATUS>:_RemoveList
STATUS:_Result
FLOAT:_MagicArmor
ON
FetchCharacterApplyStatusData(_Character, FROZEN)
ACTIONS
Set(_Result,FROZEN)
ListClear(_RemoveList)
IF "!c1&c2&c3"
CharacterHasTalent(_Character,Raistlin)
CharacterGetStat(_MagicArmor,_Character,MagicArmor)
IsRandom(_MagicArmor)
THEN
ListAdd(_RemoveList, _Result)
Set(_Result,null)
StatusText(_Character,"Effect resisted by magic armor")
ELSE
ListAdd(_RemoveList, CHILLED)
ListAdd(_RemoveList, WET)
ListAdd(_RemoveList, INVISIBLE)
ListAdd(_RemoveList, SLEEPING)
IF "c1"
CharacterHasStatus(_Character, MAGIC_SHELL)
THEN
ListClear(_RemoveList)
ListAdd(_RemoveList, MAGIC_SHELL)
Set(_Result,null)
ELIF "c1"
CharacterHasStatus(_Character, BURNING)
THEN
ListAdd(_RemoveList, BURNING)
Set(_Result, WET)
ELIF "c1"
CharacterHasStatus(_Character, HOLY_FIRE)
THEN
ListAdd(_RemoveList, HOLY_FIRE)
Set(_Result, WET)
ELIF "c1|c2"
CharacterHasStatus(_Character, NECROFIRE)
CharacterHasStatus(_Character, HOLY_FIRE)
THEN
Set(_Result,null)
ELIF "c1"
CharacterHasStatus(_Character, WARM)
THEN
ListAdd(_RemoveList, WARM)
Set(_Result, CHILLED)
ENDIF
ENDIF
RETURN(_RemoveList,_Result,null)
|
|
|
|
journeyman
|
OP
journeyman
Joined: Sep 2016
|
You're intuition is correct--putting this process up top did break status interactions where one replaces the other.
Looks like I've got a lot more work to do!
|
|
|
|
stranger
|
stranger
Joined: Oct 2017
|
Just found the thread because I was wondering if someone was already working on something like this. I went poking around in the editor (this being my first time) and my heart sank when I saw the way too simple "100" there for status effects on skills and realized the task would be much harder to "fix" the armor CC issue than I thought it would be. Editing the statuses themselves, like you did, is probably too far over my head as I have been out of coding practice for a while, but as a game design/math issue, I have a couple suggestions.
Straight percentages are a good stopgap to making sure the system works (and it was going to be my first step), but in the end, you want to reward characters who have high armor values. For example, if someone has max armor 10 and another has max armor 100, both would be "equally good" at stopping the crowd control. Clearly, the one with 100 should be "better" in some fashion, so tweaking the numbers in their favor could be implemented.
Similarly, the chief complaint many people had (and based on the new system Larian agrees) is that CC was too unavoidable. Their new fix simply delays the same negative gameplay until armor is gone, so maybe a flat x% (let's say 20%) is always able to be resisted. Conversely, that same x% could also always be possible, even if they are sitting at full armor. This would mean that nothing is ever beyond hope, or ever a sure thing, something I think would be a better design. It could offer "war stories" and "stand up and cheer moments" that a story-heavy game could really benefit from, and some number crunch to prevent stun-locking as well.
Finally, and this doesn't exactly pertain to your mod, but it is adjacent, is to have armor only prevent SOME of the damage. Having % chance to have the CC go through just means that stuff happens faster. If, for example, 50% of the damage went to the appropriate armor and the other half went to Vitality, it might keep people in that "maybe-maybe not" sweet spot for longer. It also has the benefit of making healing spells more beneficial throughout the entire fight, rather than just the last half. Armor gaining spells are helpful the whole way through, and so should regular old healing be as well (I'm looking at you, necromancy!). If you really wanted to go crazy, you could have it not be a 50-50 split, and have it based on how they are in proportion to their full value and each other (so someone who is low health but has full armor takes more armor damage and less vitality). But that is probably making it more complicated than it needs to be, and is just more math for math sake (even if it's cool).
|
|
|
|
|