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 Spoiler: Code 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 Spoiler: Beispiel 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 bool Function Spell_MagicEffectHasKeyword(Spell S, Keyword K) Global Spoiler: Code 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 Spoiler: Beispiel 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 String Function GetAssociatedSkillFromSpell(Spell akSource) Global Spoiler: Code 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 Spoiler: Beispiel 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 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)} Spoiler: Code 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 Spoiler: Beispiel 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 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)} Spoiler: Code 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 Spoiler: Beispiel 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 int Function Actor_UsesArmorWithKeywordAsString(Actor Player, String S) Global Spoiler: Code 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 Spoiler: Beispiel 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 .