[Utility]Funktionen

Quad2Core

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