Das Problem: Ich hab mich an einem kleinen PI versucht, dass den HP-Bonus durch Ausdauer beim Level-Up aufsummiert, d.h. man soll soviele Trefferpunkte haben als hätte man immer den Momentan Ausdauerwert. (so wie z.B. bei Oblivion Improved möglich falls das jemanden was sagt)
Nun kann man leider nicht leicht feststellen, wieviel Ausdauer der Char wirklich hat und was von Tränken und Zaubern kommt. Ich stelle das fest, indem ich dem HP zuwachs beim Levelup messe und dann durch 10 teile (~fLevelUpHealthEndMult)
EDIT: ich multiplizieren natürlich mit 10, die konstande entspricht im Vanilla-Game 1/10
was eingentlich auch wunderbar geht
fall nun aber ein anderes Script den Char weckt (TR assasine, Vampirtraum oder Sleeper), schlägt das fehl und mir scheint Scripts die aus den esm Files kommen werden immer zuerst ausgeführt.
also hab ich ein weiters geschrieben:
und rufe dass in den oben genannt als Ersatz auf, was gut geht (der aufwecker wird um 1 Frame verzögert)
das finde ich aber nicht ideal, weil es 3 Scripts modifiziert die nicht damit zu tun haben was ich eigentlich wollte :?
mein "sicherer" Ausweg ist:
der läuft aber immer im Invantar usw. und ist somit etwas performance-kritisch.
Weiss jemand wie man sich da anderweitig helfen kann oder ob ich vielleicht einen ganz andere Methode nehmen sollte den Levelup festzustellen?
Nun kann man leider nicht leicht feststellen, wieviel Ausdauer der Char wirklich hat und was von Tränken und Zaubern kommt. Ich stelle das fest, indem ich dem HP zuwachs beim Levelup messe und dann durch 10 teile (~fLevelUpHealthEndMult)
EDIT: ich multiplizieren natürlich mit 10, die konstande entspricht im Vanilla-Game 1/10
Code:
begin LevelUp
short lvl
short doOnce
short endu
float h1
float h2
If ( charGenState != -1 )
return
Endif
If ( lvl == 0 )
set lvl to ( Player->GetLevel )
return
Endif
If ( GetPCSleep == 1 )
set doOnce to 1
return
elseif ( doOnce == 1 )
if ( Menumode == 0 )
if ( ( Player->GetLevel ) > lvl)
set lvl to ( Player->GetLevel )
set endu to ( 10 * ( h2 - h1 ) + .5 )
set h1 to ( .1 * ( ( endu - IDV_oldEndu ) * ( lvl - 2) ) )
set IDV_oldEndu to endu
set IDV_totHealthBonus to ( IDV_totHealthBonus + h1 )
Player->ModHealth, h1
MessageBox, "Level: %g, +HP: %g", lvl, h1
endif
set doOnce to 0
else
set h1 to h2
set h2 to ( Player->GetHealth )
endif
endif
end
was eingentlich auch wunderbar geht
fall nun aber ein anderes Script den Char weckt (TR assasine, Vampirtraum oder Sleeper), schlägt das fehl und mir scheint Scripts die aus den esm Files kommen werden immer zuerst ausgeführt.
also hab ich ein weiters geschrieben:
Code:
Begin WakeupScript
;call StartScript, WakeupScript instead of WakeUpPC to fix other Scripts that use GetPCSleep
WakeUpPC
StopScript, WakeupScript
End
und rufe dass in den oben genannt als Ersatz auf, was gut geht (der aufwecker wird um 1 Frame verzögert)
das finde ich aber nicht ideal, weil es 3 Scripts modifiziert die nicht damit zu tun haben was ich eigentlich wollte :?
mein "sicherer" Ausweg ist:
Code:
begin LevelUp
short lvl
short doOnce
short endu
float h1
float h2
If ( charGenState != -1 )
return
Endif
If ( lvl == 0 )
set lvl to ( Player->GetLevel )
set h2 to 0.0
return
Endif
If ( Menumode == 1 )
set h1 to h2
set h2 to ( Player->GetHealth )
set doOnce to 1
return
elseif ( doOnce == 1 )
if ( ( Player->GetLevel ) > lvl)
set lvl to ( Player->GetLevel )
set endu to ( 10 * ( h2 - h1 ) + .5 )
set h1 to ( .1 * ( ( endu - IDV_oldEndu ) * ( lvl - 2) ) )
set IDV_oldEndu to endu
Player->ModHealth, h1
MessageBox, "Level: %g, +HP: %g", lvl, h1
endif
set doOnce to 0
endif
end
der läuft aber immer im Invantar usw. und ist somit etwas performance-kritisch.
Weiss jemand wie man sich da anderweitig helfen kann oder ob ich vielleicht einen ganz andere Methode nehmen sollte den Levelup festzustellen?
Zuletzt bearbeitet: