Event OnUpdate();Timescale adjuster so that the math is right no matter what scale player has set float TSAdjust = TimeScale.GetValue()/60;Active and Natural detorioration levels (I don't care how it's spelled!);Natural detorioration is equal to 1 blood point every minute (default) and fraction of that is subtracted every second;Active detorioration is modified by toggleable powers and equals 0 if none are active float DetActVar = DetAct.GetValue()*TSAdjust float DetNatVar = DetNat.GetValue()*TSAdjust;Maximum and Current blood levels float BloodCurVar = BloodCur.GetValue()-DetNatVar-DetActVar float BloodMaxVar = BloodMax.GetValue();Updating globals BloodCur.SetValue(BloodCurVar);Imposing bottom and top limits If (BloodCurVar > BloodMaxVar) BloodCur.SetValue(BloodMaxVar) Elseif (BloodCurVar < 0) BloodCur.SetValue(0) Endif;Manage hunger state abilities If (BloodCurVar <= 0 && Game.GetPlayer().HasSpell(HungerState5) == 0) Game.GetPlayer().RemoveSpell(HungerState1) Game.GetPlayer().RemoveSpell(HungerState2) Game.GetPlayer().RemoveSpell(HungerState3) Game.GetPlayer().RemoveSpell(HungerState4) Game.GetPlayer().AddSpell(HungerState5, false) VampireStatus = 4 VampireProgression(Game.GetPlayer(), 4) VampireStage4Message.Show() Elseif (BloodCurVar <= 15*BloodMaxVar/100 && BloodCurVar > 0*BloodMaxVar/100 && Game.GetPlayer().HasSpell(HungerState4) == 0) Game.GetPlayer().RemoveSpell(HungerState1) Game.GetPlayer().RemoveSpell(HungerState2) Game.GetPlayer().RemoveSpell(HungerState3) Game.GetPlayer().AddSpell(HungerState4, false) Game.GetPlayer().RemoveSpell(HungerState5) VampireStatus = 3 VampireProgression(Game.GetPlayer(), 3) VampireStageProgressionMessage.Show() Elseif (BloodCurVar <= 30*BloodMaxVar/100 && BloodCurVar > 15*BloodMaxVar/100 && Game.GetPlayer().HasSpell(HungerState3) == 0) Game.GetPlayer().RemoveSpell(HungerState1) Game.GetPlayer().RemoveSpell(HungerState2) Game.GetPlayer().AddSpell(HungerState3, false) Game.GetPlayer().RemoveSpell(HungerState4) Game.GetPlayer().RemoveSpell(HungerState5) VampireStatus = 2 VampireProgression(Game.GetPlayer(), 2) VampireStageProgressionMessage.Show() Elseif (BloodCurVar <= 50*BloodMaxVar/100 && BloodCurVar > 30*BloodMaxVar/100 && Game.GetPlayer().HasSpell(HungerState2) == 0) Game.GetPlayer().RemoveSpell(HungerState1) Game.GetPlayer().AddSpell(HungerState2, false) Game.GetPlayer().RemoveSpell(HungerState3) Game.GetPlayer().RemoveSpell(HungerState4) Game.GetPlayer().RemoveSpell(HungerState5) VampireStatus = 2 VampireProgression(Game.GetPlayer(), 2) VampireStageProgressionMessage.Show() Elseif (BloodCurVar < 90*BloodMaxVar/100 && BloodCurVar > 50*BloodMaxVar/100 && (Game.GetPlayer().HasSpell(HungerState1) || Game.GetPlayer().HasSpell(HungerState2) || Game.GetPlayer().HasSpell(HungerState3) || Game.GetPlayer().HasSpell(HungerState4) || Game.GetPlayer().HasSpell(HungerState5))) Game.GetPlayer().RemoveSpell(HungerState1) Game.GetPlayer().RemoveSpell(HungerState2) Game.GetPlayer().RemoveSpell(HungerState3) Game.GetPlayer().RemoveSpell(HungerState4) Game.GetPlayer().RemoveSpell(HungerState5) VampireStatus = 1 VampireProgression(Game.GetPlayer(), 1) Elseif (BloodCurVar >= 90*BloodMaxVar/100 && Game.GetPlayer().HasSpell(HungerState1) == 0) Game.GetPlayer().AddSpell(HungerState1, false) Game.GetPlayer().RemoveSpell(HungerState2) Game.GetPlayer().RemoveSpell(HungerState3) Game.GetPlayer().RemoveSpell(HungerState4) Game.GetPlayer().RemoveSpell(HungerState5) VampireStatus = 1 VampireProgression(Game.GetPlayer(), 1) Endif RegisterForSingleUpdate(1) EndEvent
It's a single update chain (I tried normal update and GameTime update events but it made no difference ._.) that subtracts the current values of "DetNat" and "DetAct" from "BloodCur" every second.
Everything is alright during normal gameplay: every second the "BloodCur" global is modified.
But it stops working right while I wait, rest or fast travel: the script just stops during those events. I can sleep for 24 hours and "BloodCur" won't budge an inch during all that time! Only when fast travel or waiting is over it starts deteriorating again completely ignoring the time that passed during waiting!
Please can someone explain what I'm doing wrong?
