Ich dachte mir einfach mal, dass es ganz sinnvoll wäre eine kleine Sammlung von Funktionen zu erstellen, welche nützlich für die Arbeit mit Skripten werden könnten.
Die meisten unten aufgelisteten Funktionen benötigen SKSE und falls dies nicht der Fall sein sollte sind die betroffenen Funktionen mit einer comment line ähnlich dieser: ";NO SKSE" markiert.
Desweiteren plane ich für jede Funktionen ein kleines Beispiel, für besseres Verständniss hinzuzufügen.
Keyword Function GetCostliestMagicEffectKeyword(Spell S, int KeywordIndex = 0) Global
bool Function Spell_MagicEffectHasKeyword(Spell S, Keyword K) Global
String Function GetAssociatedSkillFromSpell(Spell akSource) Global
bool Function IsOneHandedWeaponEquipped(Actor Player = None) Global ;NO SKSE
{Wenn der Actor nicht angegeben wird bezieht sich die Funktion auf den Spieler (leider nicht getestet sollte aber klappen)}
bool Function IsTwoHandedWeaponEquipped(Actor Player = None) Global ;NO SKSE
{Wenn der Actor nicht angegeben wird bezieht sich die Funktion auf den Spieler (leider nicht getestet sollte aber klappen)}
int Function Actor_UsesArmorWithKeywordAsString(Actor Player, String S) Global
Alle angegebnen Funktionen sind vollkommen frei zuverwenden. Falls ihr selber eine Funktion mit der Modding Community teilen wollt, schreibt diese doch entweder hier in den thread und/oder mir per PM, dann werde ich diese Funktion der Liste hinzufügen. Ich hoffe es hilft jemanden weiter .
Die meisten unten aufgelisteten Funktionen benötigen SKSE und falls dies nicht der Fall sein sollte sind die betroffenen Funktionen mit einer comment line ähnlich dieser: ";NO SKSE" markiert.
Desweiteren plane ich für jede Funktionen ein kleines Beispiel, für besseres Verständniss hinzuzufügen.
Keyword Function GetCostliestMagicEffectKeyword(Spell S, int KeywordIndex = 0) Global
Code:
Keyword Function GetCostliestMagicEffectKeyword(Spell S, int KeywordIndex = 0) Global
if (S)
int Index = S.GetCostliestEffectIndex()
MagicEffect mEffect = S.GetNthEffectMagicEffect(Index)
if (mEffect)
return mEffect.GetNthKeyword(KeywordIndex)
else
return None
endif
else
;
endif
EndFunction
Code:
Spell Property Zauber Auto
Keyword Property A Auto
Keyword K = GetCostliestMagicEffectKeyword(Zauber)
If A == K
debug.messagebox("Der teuerste MagicEffect des Zaubers hat den selben Keyword wie die Keyword Property")
EndIf
Code:
bool Function Spell_MagicEffectHasKeyword(Spell S, Keyword K) Global
if (S)
int index = 0
int max = S.GetNumEffects()
While(index < max)
MagicEffect mEffect = S.GetNthEffectMagicEffect(Index)
if mEffect.HasKeyword(K)
return True
EndIf
index +=1
endWhile
return False
else
;
endif
EndFunction
Code:
Spell Property Zauber Auto
Keyword Property A Auto
if (Spell_MagicEffectHasKeyword(Zauber, A) == True)
debug.Messagebox("Der Zauber besitzt Keyword A!")
Else
debug.Messagebox("Der Zauber besitzt NICHT keyword A!")
endif
Code:
String Function GetAssociatedSkillFromSpell(Spell akSource) Global
if (akSource)
int Index = akSource.GetCostliestEffectIndex()
MagicEffect mEffect = akSource.GetNthEffectMagicEffect(Index)
if (mEffect)
return mEffect.GetAssociatedSkill()
else
;
endif
endif
EndFunction
Code:
Spell Property MySpell Auto
if GetAssociatedSkillFromSpell(MySpell) == "Destruction"
debug.messagebox("MySpell is a destruction spell!")
else
debug.messagebox("MySpell is NOT a destruction spell!")
endif
{Wenn der Actor nicht angegeben wird bezieht sich die Funktion auf den Spieler (leider nicht getestet sollte aber klappen)}
Code:
bool Function IsOneHandedWeaponEquipped(Actor Player = None) Global ;No SKSE
if (Player == None)
Player = Game.GetPlayer()
endif
if ((Player.GetEquippedItemType(0) >= 1) && (Player.GetEquippedItemType(0) <= 4)) || ((Player.GetEquippedItemType(1) >= 1) && (Player.GetEquippedItemType(1) <= 4))
return True
else
return False
EndIf
EndFunction
Code:
Actor Property MyActor Auto
if (IsOneHandedWeaponEquipped(MyActor) == True)
debug.messagebox("MyActor benutzt eine einhändige Waffe!")
Else
debug.Messagebox("MyActor benutzt KEINE einhändige Waffe!")
endif
if (IsOneHandedWeaponEquipped() == True)
debug.Messagebox("Der Spieler benutzt eine einhändige Waffe!")
endif
{Wenn der Actor nicht angegeben wird bezieht sich die Funktion auf den Spieler (leider nicht getestet sollte aber klappen)}
Code:
bool Function IsTwoHandedWeaponEquipped(Actor Player = None) Global ;NO SKSE
if (Player == None)
Player = Game.GetPlayer()
endif
if ((Player.GetEquippedItemType(0) >= 5) && (Player.GetEquippedItemType(0) <= 6)) || ((Player.GetEquippedItemType(1) >= 5) && (Player.GetEquippedItemType(1) <= 6))
return True
else
return False
EndIf
EndFunction
Code:
Actor Property MyActor Auto
if (IsTwoHandedWeaponEquipped(MyActor) == True)
debug.messagebox("MyActor benutzt eine zweihändige Waffe!")
Else
debug.Messagebox("MyActor benutzt KEINE zweihändige Waffe!")
endif
if (IsTwoHandedWeaponEquipped() == True)
debug.Messagebox("Der Spieler benutzt eine zweihändige Waffe!")
endif
Code:
int Function Actor_UsesArmorWithKeywordAsString(Actor Player, String S) Global
int min = 0
Armor Boots = Player.GetWornForm(0x00000080) as Armor
Armor Cuirass = Player.GetWornForm(0x00000004) as Armor
Armor Gauntlets = Player.GetWornForm(0x00000008) as Armor
Armor Helmet = Player.GetWornForm(0x00000001) as Armor
Armor Shield = Player.GetWornForm(0x00000200) as Armor
if (Boots.HasKeywordString(S))
min += 1
endif
if Cuirass.HasKeywordString(S)
min += 1
EndIf
if Gauntlets.HasKeywordString(S)
min += 1
EndIf
if Helmet.HasKeywordString(S)
min += 1
EndIf
if Shield.HasKeywordString(S)
min += 1
EndIf
return min
EndFunction
Code:
If Actor_UsesArmorWithKeywordAsString(Game.GetPlayer(), "ArmorHeavy") >= 3
debug.messagebox("Der großteil der benutzten Rüstung des Spielers ist schwere Rüstung!")
EndIf
Alle angegebnen Funktionen sind vollkommen frei zuverwenden. Falls ihr selber eine Funktion mit der Modding Community teilen wollt, schreibt diese doch entweder hier in den thread und/oder mir per PM, dann werde ich diese Funktion der Liste hinzufügen. Ich hoffe es hilft jemanden weiter .
Zuletzt bearbeitet: