145 lines
3.0 KiB
Plaintext
145 lines
3.0 KiB
Plaintext
Scriptname _00E_FS_Entropy_BoneSpiritMonitorSC extends activemagiceffect
|
|
|
|
Event OnEffectStart(Actor akTarget, Actor akCaster)
|
|
|
|
akCheckActor = akTarget
|
|
UpdateDamage()
|
|
fLastDamageMod = 0.0 ; Force damage updae on next UpdateDamage, just in case
|
|
|
|
EndEvent
|
|
|
|
Event OnEffectFinish(Actor akTarget, Actor akCaster)
|
|
|
|
bEffectFinished = True
|
|
|
|
; Wait for UpdateDamage to stop meddling with the magnitudes
|
|
While bUpdatingDamage
|
|
Utility.WaitMenuMode(0.1)
|
|
EndWhile
|
|
|
|
If fLastDamageMod != 1.0
|
|
If spell1
|
|
spell1.SetNthEffectMagnitude(0, fOriginalDamage1)
|
|
EndIf
|
|
If spell2
|
|
spell2.SetNthEffectMagnitude(0, fOriginalDamage2)
|
|
EndIf
|
|
EndIf
|
|
|
|
EndEvent
|
|
|
|
Event OnPlayerLoadGame()
|
|
|
|
; Force delayed update after player load game
|
|
fLastDamageMod = 0.0
|
|
RegisterForSingleUpdate(1.0)
|
|
|
|
EndEvent
|
|
|
|
Event OnUpdate()
|
|
|
|
UpdateDamage()
|
|
|
|
EndEvent
|
|
|
|
Function UpdateDamage()
|
|
|
|
If bEffectFinished
|
|
Return
|
|
EndIf
|
|
|
|
bUpdatingDamage = True
|
|
|
|
Bool bUpdateSpellDamage = False
|
|
|
|
; Get equipped bone spirits
|
|
Spell spellNew1 = None
|
|
Spell spellNew2 = None
|
|
|
|
Spell spellRight = akCheckActor.GetEquippedSpell(1) ; Right hand
|
|
If spellRight && ((spellRight == spell1) || (spellRight == spell2) || _00E_FS_Entropy_BoneSpiritSpells.HasForm(spellRight))
|
|
spellNew1 = spellRight
|
|
EndIf
|
|
|
|
Spell spellLeft = akCheckActor.GetEquippedSpell(0) ; Left hand
|
|
If spellLeft && (spellLeft != spellRight) && ((spellLeft == spell1) || (spellLeft == spell2) || _00E_FS_Entropy_BoneSpiritSpells.HasForm(spellLeft))
|
|
If spellNew1 == None
|
|
spellNew1 = spellLeft
|
|
Else
|
|
spellNew2 = spellLeft
|
|
EndIf
|
|
EndIf
|
|
|
|
; New spell1?
|
|
If spell1 != spellNew1
|
|
If spell1 && spell1 != spellNew2
|
|
spell1.SetNthEffectMagnitude(0, fOriginalDamage1)
|
|
EndIf
|
|
|
|
spell1 = spellNew1
|
|
If spell1
|
|
fOriginalDamage1 = ControlQuest.GetOriginalSpellDamage(spell1)
|
|
EndIf
|
|
|
|
bUpdateSpellDamage = True
|
|
EndIf
|
|
|
|
; New spell2?
|
|
If spell2 != spellNew2
|
|
If spell2 && spell2 != spellNew1
|
|
spell2.SetNthEffectMagnitude(0, fOriginalDamage2)
|
|
EndIf
|
|
|
|
spell2 = spellNew2
|
|
if spell2
|
|
fOriginalDamage2 = ControlQuest.GetOriginalSpellDamage(spell2)
|
|
EndIf
|
|
|
|
bUpdateSpellDamage = True
|
|
EndIf
|
|
|
|
; Calculate damage modifier (+13% of damage for every 10% of health lost)
|
|
Float fDamageMod = 1.0
|
|
Float fDamageMult = Math.Floor(10.0 - (akCheckActor.GetAVPercentage("Health") * 10.0)) as Float
|
|
If fDamageMult > 0.0
|
|
fDamageMod += (0.13 * fDamageMult)
|
|
EndIf
|
|
If fDamageMod != fLastDamageMod
|
|
fLastDamageMod = fDamageMod
|
|
bUpdateSpellDamage = True
|
|
EndIf
|
|
|
|
; Update spells' damage
|
|
If bUpdateSpellDamage
|
|
If spell1
|
|
spell1.SetNthEffectMagnitude(0, fOriginalDamage1 * fDamageMod)
|
|
EndIf
|
|
If spell2
|
|
spell2.SetNthEffectMagnitude(0, fOriginalDamage2 * fDamageMod)
|
|
EndIf
|
|
EndIf
|
|
|
|
|
|
bUpdatingDamage = False
|
|
|
|
If bEffectFinished == False
|
|
RegisterForSingleUpdate(1.0)
|
|
EndIf
|
|
|
|
EndFunction
|
|
|
|
|
|
Spell spell1 = None
|
|
Spell spell2 = None
|
|
|
|
Float fOriginalDamage1
|
|
Float fOriginalDamage2
|
|
Float fLastDamageMod
|
|
|
|
Actor akCheckActor
|
|
Bool bUpdatingDamage
|
|
Bool bEffectFinished
|
|
|
|
Formlist Property _00E_FS_Entropy_BoneSpiritSpells Auto
|
|
_00E_BoneSpiritControlScript Property ControlQuest Auto
|