Irgendwie kann ich die Satzstellung nicht ganz nachvollziehen.
Aber ja, das ist eine neue Funktion. Wenn man eine Kreatur beschwört, erhält man automatisch einen Rufzauber, der alle beschworenen Kreaturen (außer die von Set-Gegenständen) zum Spieler teleportiert.
Mit Beschwörung auf 100 sind das maximal 3.
Sobald man keine Beschworenen Kreaturen mehr hat, verschwindet der Zauber wieder.
Bei dem zum Teil "geladen", verstehe ich aber nicht was du meinst
ZickiBiT wrote:Traue mich auch irgendwie nicht nun weiter zu testen bevor es die Saves wieder "verkrumpelt".
Die Funktion für den Rufzauber ist genauestens geskriptet wurde mir versichert.
Ich hatte da selber keine Ahnung wie das funktionieren würde, aber offenbar wurde da mit OBSE Arrays gearbeitet.
Ich hab mir den Code mal angesehen:
- [+]
scn 001BeschworeneKreaturenScript
float fquestdelaytime
long index
long effectKey
ref BeschwKRef1
ref BeschwKRef2
ref BeschwKRef3
ref CheckRef
array_var AlleEffekte
Begin GameMode
set fQuestDelayTime to 0.1
if BeschwKRef1 != 0
if Player.HasSpell zzCallBeschwKreaturen == 0
Player.AddSpell zzCallBeschwKreaturen
endif
if BeschwKRef1.GetAv Health <= 0
Set BeschwKRef1 to 0
endif
endif
if BeschwKRef2 != 0
if Player.HasSpell zzCallBeschwKreaturen == 0
Player.AddSpell zzCallBeschwKreaturen
endif
if BeschwKRef2.GetAv Health <= 0
Set BeschwKRef2 to 0
endif
endif
if BeschwKRef3 != 0
if Player.HasSpell zzCallBeschwKreaturen == 0
Player.AddSpell zzCallBeschwKreaturen
endif
if BeschwKRef3.GetAv Health <= 0
Set BeschwKRef3 to 0
endif
endif
if BeschwKRef1 == 0 && BeschwKRef2 == 0 && BeschwKRef3 == 0 && Player.HasSpell zzCallBeschwKreaturen
Player.RemoveSpell zzCallBeschwKreaturen
endif
ForEach AlleEffekte <- (Player.GetActiveEffectCodes)
let index := AlleEffekte["value"]
if (MagicEffectUsesCreatureC index)
let effectKey := AlleEffekte["key"]
let CheckRef := Player.GetNthActiveEffectSummonRef effectKey
if BeschwKRef1 == 0 && CheckRef != 0
if BeschwKRef2 == 0 && BeschwKRef3 == 0
Let BeschwKRef1 := CheckRef
elseif BeschwKRef2 != CheckRef && BeschwKRef3 != CheckRef
Let BeschwKRef1 := CheckRef
endif
endif
if BeschwKRef2 == 0 && CheckRef != 0
if BeschwKRef1 == 0 && BeschwKRef3 == 0
Let BeschwKRef2 := CheckRef
elseif BeschwKRef1 != CheckRef && BeschwKRef3 != CheckRef
Let BeschwKRef2 := CheckRef
endif
endif
if BeschwKRef3 == 0 && CheckRef != 0
if BeschwKRef1 == 0 && BeschwKRef2 == 0
Let BeschwKRef3 := CheckRef
elseif BeschwKRef1 != CheckRef && BeschwKRef2 != CheckRef
Let BeschwKRef3 := CheckRef
endif
endif
Set CheckRef to 0
endif
Loop
End
Ich krieg zwar Kopfweh davon, aber ich probier es mal aufzuschlüsseln...
Es werden 3 Referenzvariablen festgelegt, die für die beschworenen Kreaturen stehen.
Gleich zu Beginn des GameMode-Blocks, wird abgefragt ob die Variablen einen Wert haben oder nicht.
Wenn ja, wird abgefragt ob der Spieler den Rufzauber hat und sollte er ihn nicht besitzen, erhält er ihn.
Als nächstes wird abgefragt, wieviel Lebenspunkte die Kreatur hat, die in der Variable steht.
Wenn es null oder weniger sind ist die Kreatur tot was bedeutet der Beschwörungszauber ist beendet und die Variable wird wieder freigegeben und geleert.
Nachdem dieser Vorgang bei allen 3 Variablen duchgeführt wurde, wird abgefragt ob zumindestens eine Variable noch einen Wert hat.
Wenn das nicht zutrifft und der Spieler hat noch immer den Rufzauber, wird dieser wieder entfernt.
Das war ja noch leicht, dann fangen bei mir aber die Kopfschmerzen an
Es wird eine Arrayvariable namens "AlleEffekte" offenbar dazu verwendet eben alle aktiven Zaubereffekte des Spielers durchzugehen.
Dabei wird ein Index erstellt, der mit dem Wert (dem Effekt-Code des Zaubers) gleichgesetzt wird.
Es wird überprüft ob dieser Zauber-Code mit einer Kreatur zum Beschwören verknüpft ist.
Dabei sollte man beachten, dass dies nur für tatsächliche Beschwörungszauber aus Nehrim gilt.
Geskriptete Zauber von Set-Gegenständen (Feuerelementar, Untotes Fleischmonster, Schattenwolf, Kampftiger) fallen nicht darunter.
Wenn es sich tatsächlich um einen Beschwörungszauber handelt, wird der Zähler der für den aktiven Beschwörungseffekt steht genommen und die Kreaturenreferenz für diesen aktiven Effekt in eine Variable zum Überprüfen gespeichert.
Diese Variable wird mit den 3 fixen Referenzvariablen abgeglichen
Dabei wird zuerst einmal überprüft ob die betreffende Variable überhaupt frei ist und in der Variable die für den neuen Wert steht überhaupt ein zulässiger Eintrag steht.
Wenn eine Zuweisung möglich ist, wird noch überprüft ob die anderen Variablen überhaupt einen Wert haben und wenn ja, ob die Variable welche zugewiesen werden soll vielleicht bereits in einer anderen gespeichert ist.
Trifft beides nicht zu wird die Referenz der Variable zugewiesen.
Neu: Zu guter Letzt wird auf jedenfall die Variable mit der die fixen Referenzvariablen verglichen werden geleert!
Den Rufzauber zu programmieren ist eigentlich leicht:
- [+]
ScriptName zzCallBeschwKreaturenSCRIPT
ref KreaturRef1
ref KreaturRef2
ref KreaturRef3
Begin ScriptEffectFinish
set KreaturRef1 to zzzzBeschworeneKreaturen.BeschwKRef1
set KreaturRef2 to zzzzBeschworeneKreaturen.BeschwKRef2
set KreaturRef3 to zzzzBeschworeneKreaturen.BeschwKRef3
if KreaturRef1 != 0
KreaturRef1.pms effectSummonMythicDawn 1
KreaturRef1.moveto Player 30 30 10
endif
if KreaturRef2 != 0
KreaturRef2.pms effectSummonMythicDawn 1
KreaturRef2.moveto Player 90 30 10
endif
if KreaturRef3 != 0
KreaturRef3.pms effectSummonMythicDawn 1
KreaturRef3.moveto Player 30 90 10
endif
End
Man muss sich eben nur die richtigen Referenzen holen.
Aber danke nochmal für den Hinweis auf den Rufzauber. Da wurde nun noch eine kleine Schranke eingebaut.
Sicher ist sicher...
Allerdings hatte ich bisher absolut keine Probleme mit dem Zauber.
Thalon wrote:Sobald ich das Spiel mit RealSleepExtended starte lässt sich Timescale nicht mehr permanent ändern und bei jedem Neuladen springt der Zeitverlauf wieder auf 30 zurück.
Real Sleep ist ein ziemlich arges Plugin. Die Skripts dafür, mit denen kenne ich mich selber nicht aus

Das wurde nur grob übersetzt. Mich stört der Rythmus nicht, aber wers nicht mag kann es ohne Probleme weglassen.
Ist schließlich vollkommen optional.
