Selbstauslösende Fähigkeiten

Dieses Tutorial umfasst ein Logik-System bei bestimmten Fähigkeiten. Eine Fähigkeit, die durch einen Befehl ausgelöst wird, kann einem Script-System zugeordnet werden, das sich unter besonderen Situationen selbstauslöst.

Voraussetzungen für dieses Tutorial:
-Passive Spells Tutorial
-"Zwillings-Führerschaft" Tutorial
-Umgang mit aktiven Fähigkeiten

Ihr benötigt folgende Inis und Scripts für dieses Tutorial:
-Helden.ini
-Specialpower.ini
-Attirbutemodifier.ini
-CommandButton.ini
-CommandSet.ini
-Scriptevents.xml
-Scripts.lua

Ich erkläre die Vorgehensweise anhand 2 verschiedener Fähigkeiten von Gandalf: 
1) Passive uneingebundene Fähigkeit: Lichtsphäre
2) Magiestoß

Vorweg möchte ich euch eine Kleinigkeit erklären, die euch für den weiteren Verlauf des Moddings von großem Nutzen sein kann:
-Passive Fähigkeiten müssen nicht im CommandSet, sprich Palantir eingebaut werden. Sie sind dort nur zum Fake, um anzugeben, das etwas aktiviert wurde.
Sie verfolgen keinen Befehl, sondern sind nur der Schöhnheit wegen im Palantir.

 Lichtsphäre: Eine Fähigkeit, die sich aktiviert sobald eine starke Attacke Gandalf trifft. Es wird automatisch eine Lichtsphäre aktiviert, die den ankommenden Schaden abmildert. Ist eine Armee aus Einheiten um Gandalf herum versammelt, so aktiviert er anstatt des Lichtschildes automatisch seinen Magiestoß.

Als erstes gehen wir in die Ini von Gandalf und fügen diese Parameter ein:

    Behavior = SpecialPowerModule ModuleTag_ShieldBubbleStarterEdain
        SpecialPowerTemplate         = SpecialPowerShieldBubbleEdain
        UpdateModuleStartsAttack     = No
        AttributeModifier            = GandalfShieldBubbleBonusEdain
        AttributeModifierRange       = 1
        AttributeModifierAffectsSelf = Yes
        AttributeModifierAffects     = ANY +CAVALRY +INFANTRY
        SetModelCondition            = ModelConditionState:USER_3
        SetModelConditionTime        = 2.5
    End
    Behavior = SpecialAbilityUpdate ModuleTag_ShieldBubbleUpdateEdain           
        SpecialPowerTemplate         = SpecialPowerShieldBubbleEdain
        UnpackTime                   = 0
        PreparationTime              = 0.1
        PackTime                     = 0.15
        AwardXPForTriggering         = 0
    End
    Behavior = AutoAbilityBehavior ModuleTag_AutoAbilitySpecialPowerShieldBubbleEdain
        SpecialAbility               = SpecialPowerShieldBubbleEdain
        StartsActive                 = Yes
        MaxScanRange                 = 50
        Query                        = 1 ANY ENEMIES +MONSTER +HERO
    End
    Behavior = SpecialPowerModule ModuleTag_LeadershipEdainShieldBubble
        SpecialPowerTemplate         = SpecialAbilityFakeLeadership
        UpdateModuleStartsAttack     = No
        StartsPaused                 = No
    End

Wie ihr seht ist hier ein Attributemodifier angegeben, den ihr nach euren Wünschen gestalten könnt.
Geht dazu in die Attributemoifier.ini und fügt dies ein:

ModifierList GandalfShieldBubbleBonusEdain
	Category = SPELL
	Modifier = ARMOR 200%
	Modifier = RESIST_KNOCKBACK 100%
	Duration = 2500
End

Als nächstes geht ihr in die Specialpower.ini und fügt dies ein:

SpecialPower SpecialPowerShieldBubbleEdain
  Enum              = SPECIAL_SHIELD_BUBBLE
  ReloadTime        = 14000
End

Nun müsst ihr zurück in die Ini von Gandalf und diesen Bezug hier angeben, damit auch ein Effeckt angezeigt wird:

        SetModelCondition            = ModelConditionState:USER_3
        SetModelConditionTime        = 2.5

Fügt dies in seine ini vor dem Default-Parametern ein:

    Draw = W3DScriptedModelDraw ModuleTag_ShieldBubbleEdain
        DefaultModelConditionState
            Model = None
        End
        ModelConditionState = USER_3
            Model = GUGANDALFCRSTL
            ParticleSysBone     = ROOTTRANSFORM GandalfCrystalSphere FollowBone:Yes
            ParticleSysBone     = ROOTTRANSFORM GandalfBeamGlow2 FollowBone:Yes
        End
    End

Erklärung dazu:
Wir haben hier ein extra Model, das sich indirekt auf Gandalf bezieht. Wird der Modelcondition "USER_3" über Gandalfs Fähigkeit ausgelöst, so erscheint dieses Model um Gandalf herum: GUGANDALFCRSTL

Nun kommt der wichtigste Part meines Tutorials, das Logik-System. Hierzu müsst ihr Gandalf-AI-Behaviour verfolgen und editiert seinen jetzigen hiermit:

    Behavior = AIUpdateInterface ModuleTag_04
        AutoAcquireEnemiesWhenIdle = Yes ATTACK_BUILDINGS
        AILuaEventsList            = GandalfEdainFunctions
    End

Nun verfolgt ihr in dem Scriptsevent.xml diesen Code:

<EventList Name="GandalfEdainFunctions" Inherit="BaseScriptFunctions">
<EventHandler EventName="DamageIncoming" ScriptFunctionName="GandalfConsiderUsingDefensePowerEdain" DebugSingleStep="false"/>

<!-- Das hier braucht euch nicht zu interessieren, also lasst es einfach aus ;-) 
<!-- <EventHandler EventName="ModelConditionUSER_6" ScriptFunctionName="OnRingStolen" DebugSingleStep="false"/>
<!-- <EventHandler EventName="ModelConditionNOTUSER_6" ScriptFunctionName="OnRingStolenAftermath" DebugSingleStep="false"/>
     
</EventList>

Geht nun ins lua.script und fügt dies ein:

function GandalfConsiderUsingDefensePowerEdain(self, other, delay, amount)
    -- Put up the shield if a big attack is coming and we have time to block it
    if tonumber(delay) > 1 then
        if tonumber(amount) >= 300 then
            ObjectDoSpecialPower(self, "SpecialPowerShieldBubbleEdain")
            return
        end
    end
    
    -- Or, if we are being hit and there are alot of guys arround, do our cool pushback power
    if tonumber(ObjectCountNearbyEnemies(self, 50)) >= 4 then
        ObjectDoSpecialPower(self, "SpecialAbilityWizardBlast")
        return
    end
end

Erklärung: Treffen bestimmte Bedingungen ein, aktivieren sich die Fähigkeiten von alleine. Liegt ein Angriffswert über 300, so wird ein Schild ausgelöst.
SpecialAbilityWizardBlast
Dies ist die Specialpower, die ausgelöst wird, sobald eine Horde von Einheiten Gandalf umzingelt. SIe bzeiht sich auf seine Magiestoß-Fähigkeit, muss also mit der Specialpower in seiner Ini übereinstimmen.

Nun gehen wir noch in die CommandButton.ini und fügen dies ein:

CommandButton Command_GandalfShieldBubbleEdain
	Command		= SPECIAL_POWER
	SpecialPower	= SpecialPowerShieldBubbleEdain
	TextLabel		= CONTROLBAR:ShieldBubbleEdain
	ButtonImage		= Gandolf_sphere
	RadiusCursorType	= TrainingRadiusCursor
	ButtonBorderType	= ACTION
	DescriptLabel	= CONTROLBAR:ToolTipShieldBubbleEdain
	InPalantir		= Yes
	AutoAbility		= Yes
	UnitSpecificSound	= GenericSpell
End

Nun fügen wir noch den Parameter in Gandalfs-CommandSet ein und sind fertig.

CommandSet GondorGandalfCommandSet
    1    = Command_ToggleStance
    2      = Command_SpecialAbilityWizardBlast
    3      = Command_GondorGandalfLightningSword
    4      = Command_GandalfShadowfax
    5      = Command_GondorGandalfIstariLight
    6      = Command_SpecialAbilityWordOfPower
    7      = Command_GandalfShieldBubbleEdain
    12     = Command_CaptureBuilding
    13     = Command_AttackMove
    14     = Command_Stop
    16  = Command_SetStanceBattle
    17  = Command_SetStanceAggressive
    18  = Command_SetStanceHoldGround
End

Falls ihr irgendwelche Rückfragen oder dergleichen bezüglich meines Tutorials habt, so könnt ihr einen Thread unter: www.modding-union.com öffnen.
Bitte gebt die Credits für mich an, sobald ihr diese Parameter in eure Mod einbaut, Danke.
MfG Ealendril der Dunkle