17. Dez 2017, 14:42 Hallo Gast.
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge


Select Boards:
 
Language:
 

News:



Autor Thema: Silberdornpfeil-Upgrade für die Elbenfestung  (Gelesen 1074 mal)

Offline DarkAtra

  • Gastwirt zu Bree
  • **
  • Beiträge: 134
  • «|*Dark*|Atra»
Silberdornpfeil-Upgrade für die Elbenfestung
« am: 29. Nov 2015, 01:48 »
Hallo MU,

ich dachte mir, dass es nichts schadet mal was reinzustellen. Darum fang ich mal damit an der Elbenfestung ein Upgrade für Silberdornpfeile zu geben, da ich erstens finde, dass es sinn macht dieser Festung ebenfalls ein Upgrade für Pfeile zur Verfügungs zu stellen und ich zweites damit gleich mal diese Frage kläre:

1000 Dank euch beiden, ihr habt mir wirklich sehr weiter geholfen.

Mal eine andere Frage. Lässt sich von den Elben die Festung selbst und die Erweiterungs-Wachtürme mit Silberdornpfeilen bestücken? Falls ja, welche ini und was müsste man genau umschreiben?

Was brauche ich für dieses Tutorial?

Als erstes benennen wir das Big-Archiv aus dem Download um in __mod.big.
Dann Erstellen wir die Upgrades die wir später verwenden werden. Dazu gehen wir in unserer __mod.big in die Datei 'data\ini\mod\upgrade.inc' und fügen den folgenden Code ein:
Upgrade Upgrade_ElvenFortressSilverthornMunitions
Type = OBJECT
End

Upgrade Upgrade_ElvenFortressSilverthornMunitionsTrigger
Type = OBJECT
BuildCost = 1500 ; Die Kosten für das Upgrade in der Festung
BuildTime = 30 ; Die Zeit, die benötigt wird um das Upgrade zu erforschen
ResearchSound = UpgradeSilverThornArrows ; der Sound der abgespielt wird denn das Upgrade erforscht wurde. Ich habe hier das von den Elbeneinheiten genommen.
DisplayName = UPGRADE:ElvenSilverthornArrows ; der Name vom Upgrade (ebenfalls von den Einheiten übernommen)
SkirmishAIHeuristic = AI_UPGRADEHEURISTIC_FORTRESS ; Wie wichtig ist es für die AI? (Übernommen von den Feuerpfeilupgrade der Menschenfestung)
End

Danach fangen wir mit den Veränderungen in der ini der Elbenfestung an.
Dazu schauen wir uns 'data\ini\object\goodfaction\structures\elven\elvenfortress.ini' (ini.big) an und kopieren diese Datei auch gleich mal in unsere __mod.big.
Dann implementieren wir die neuen Behavior. Dazu suchen wir in der kopierten Datei nach "ModuleTag_AI" und fügen darüber den folgenden Code ein.
    ;// Neues Upgrade für Silberdornpfeile
    Behavior = CastleUpgrade ModuleTag_PassOutSilverthornMunitionsUpgrade
        TriggeredBy    = Upgrade_ElvenFortressSilverthornMunitionsTrigger
        Upgrade        = Upgrade_ElvenFortressSilverthornMunitions
    End
   
    Behavior = StatusBitsUpgrade ModuleTag_FakeOut ; I need to react to the upgrade, so I can have it for when new construction asks me for all the upgrades
        TriggeredBy    = Upgrade_ElvenFortressSilverthornMunitions
    End

Zusätzlich müssen wir noch das Weaponset der Festung ändern. Dazu suchen wir in der ini der Festung nach "WeaponSet" und ändern es so ab:
    WeaponSet
        Weapon                = PRIMARY ElvenFortressArrowTowerBow
        AutoChooseSources    = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
    End

Als nächstes erstellen wir unsere Weapons für die Festung. Dazu gehen wir in die 'data\ini\mod\weapon.inc' und fügen den folgenden Code ein:
Weapon ElvenFortressArrowTowerBow ; eine Kopie der orginalen Festungswaffe
  AttackRange               = KEEP_ARCHER_RANGE
  WeaponSpeed               = 321       ; dist/sec
  MinWeaponSpeed            = 241
  MaxWeaponSpeed            = 481 ; dist/sec Upper limit on scaling, when attacking past nominal "max" range
  FireFX                    = FX_RohanArcherBowWeapon
  ScaleWeaponSpeed          = Yes ; Used for lob weapons, scales speed proportional to range
  HitPercentage             = 100 ;When this weapon is used it will hit exactly 50% of the time.
  ScatterRadius             = 16.0 ;When this weapon misses it can randomly miss by as much as this distance.
  DelayBetweenShots         = Min:KEEP_BOW_DELAYBETWEENSHOTS_MIN Max:KEEP_BOW_DELAYBETWEENSHOTS_MAX
  PreAttackDelay            = KEEP_BOW_PREATTACKDELAY   ; 1467 is the prep time for archer.
  PreAttackType             = PER_SHOT ; Do the delay each time we attack a new target
  FiringDuration            = KEEP_BOW_DELAYBETWEENSHOTS_MAX    ; Duration of the archer firing shot is 500ms.
  IsAimingWeapon            = Yes
  AntiAirborneVehicle = Yes
  AntiAirborneMonster = Yes
  HitPassengerPercentage = 20%
  AcceptableAimDelta = 180.0 ; We want to be able to shoot all round, as we canit move.

  CanBeDodged = Yes ; Will check for a DodgePercent on the target to have a second chance at failing HitPercent

  ProjectileNugget          ; Default arrow
    ProjectileTemplateName  = GoodFactionArrow
    WarheadTemplateName     = FortressArrowTowerBowWarhead
    ForbiddenUpgradeNames   = Upgrade_ElvenFortressSilverthornMunitions
  End

  ProjectileNugget          ; Upgraded arrow (neu)
    ProjectileTemplateName  = MirkwoodArcherSilverthornProjectile
    WarheadTemplateName     = ElvenFortressArrowTowerBowUpgradedWarhead ; Der neue Warhead (siehe unten)
    RequiredUpgradeNames = Upgrade_ElvenFortressSilverthornMunitions ; das Upgrade, welches den neuen Warhead aktiviert.
  End
End

; Der neue Warhead für die Projektile
; Es ist im Prinzip eine Kopie des MirkwoodWarheads mit Silberdornpfeilen
Weapon ElvenFortressArrowTowerBowUpgradedWarhead
ProjectileCollidesWith = ENEMIES NEUTRAL STRUCTURES WALLS
RadiusDamageAffects = ENEMIES NEUTRALS NOT_SIMILAR ;ALLIES
HitStoredTarget = Yes ; Always hits initial target.

DamageNugget                        ; A basic Nugget that just does damage
Damage        = ELVEN_MIRKWOOD_ARCHER_DAMAGE_UPGRADE_PIERCE
Radius        = 0.0 ; HitStoredTarget means we hurt the person we launched at.  And nobody else.  So a miss hurts nobody.
DelayTime     = 0
DamageType    = PIERCE
DamageFXType  = GOOD_ARROW_PIERCE
DeathType     = EXPLODED
End

; Damage to everything else is increased
  DamageNugget
  ;SpecialObjectFilter = ALL -STRUCTURE
    Damage        = ELVEN_MIRKWOOD_ARCHER_DAMAGE_UPGRADE_MAGIC
Radius        = 0.0
    DelayTime      = 0
DamageType = MAGIC
DamageFXType = MAGIC
    DeathType      = EXPLODED
    DamageScalar  = 25% NONE +STRUCTURE
End

; ..and meta impact damage on infantry
MetaImpactNugget
SpecialObjectFilter = NONE +INFANTRY
ShockWaveAmount   = 50.0
ShockWaveRadius   = 10.0
ShockWaveArc      = 90 ; in degrees to each side 180 is full circle
ShockWaveTaperOff = 1.0
ShockWaveSpeed    = 0.0
ShockWaveZMult    = 1.0
OnlyWhenJustDied = Yes
End
End

Als nächstes legen wir das neue Commandset der Festung an:
; Eigentlich das gleiche Commandset der orginalen Festung nur mit unserem neuen Commandbutton (zu dem wir gleich kommen)
CommandSet ModElvenFortressCommandSet
InitialVisible = 6
//Main Menu
1 = Command_ConstructElvenPorter
; 2 = Command_ConstructNoldorWarriorHorde ; Added for BFME2 Expansion
2   = Command_SelectRevivablesElvenFortress
3 = Command_SelectUpgradesElvenFortress
4 = Command_PurchaseNewEagle
6 = Command_Sell

//Improvements
7 = Command_PurchaseUpgradeElvenFortressEnchantedAnvil
8 = Command_PurchaseUpgradeElvenFortressBlessedMist
9 = Command_PurchaseUpgradeElvenFortressCrystalMoat
10 = Command_PurchaseUpgradeElvenFortressSilverthornMunitions ; der neue Commandbutton für die Silberdornpfeile
11 = Command_PurchaseUpgradeElvenFortressMysticFountains
12 = Command_PurchaseUpgradeElvenFortressEncasingVines
13 = Command_PurchaseUpgradeElvenFortressEaglesNest
14 = Command_RadialBack

//Heroes
15 = Command_RingHeroReviveSlot
16 = Command_CreateAHeroReviveSlot // Note we also need an extra slot for the Create A Hero
17 = Command_GenericReviveSlot1 //Revives any hero. Use Slot1-Slot8 and keep them UNIQUE within the same commandset!
18 = Command_GenericReviveSlot2
19 = Command_GenericReviveSlot3
20 = Command_GenericReviveSlot4
21 = Command_GenericReviveSlot5
22 = Command_GenericReviveSlot6
23 = Command_GenericReviveSlot7
24 = Command_RadialBack
End

Nun also den neuen Button für die 'data\ini\mod\commandbutton.inc':
CommandButton Command_PurchaseUpgradeElvenFortressSilverthornMunitions
  Command           = OBJECT_UPGRADE
  Upgrade           = Upgrade_ElvenFortressSilverthornMunitionsTrigger ; das Upgrade mit den Kosten usw...
  Options = CANCELABLE
  TextLabel         = CONTROLBAR:ElvenFortressSilverthornMinitions ; unser Buttonname (dazu kommen wir gleich ;D)
  ButtonImage       = BEEregionForge_SilverthornArrows ; Das Icon des Buttons (das selbe wie in der Elbenschmiede)
  ButtonBorderType  = UPGRADE
  DescriptLabel     = CONTROLBAR:ToolTipElvenFortressSilverthornMinitions ; unser Buttontooltip (dazu kommen wir gleich ;D)
  Radial            = Yes
  InPalantir     = No
End

und die Veränderung an den bereits vorhandenen Menüknöpfen in der 'data\ini\commandbutton.ini':
CommandButton Command_SelectRevivablesElvenFortress
    Command                 = PUSH_VISIBLE_COMMAND_RANGE
    TextLabel               = CONTROLBAR:SelectRevivablesElvenFortress
    ButtonImage             = UCCommon_GoodHeroes
    ButtonBorderType        = SYSTEM
    DescriptLabel           = CONTROLBAR:ToolTipCommandSelectRevivablesElvenFortress
    Radial                  = Yes
    CommandRangeStart    = 14 ; erhöht auf 14
    CommandRangeCount    = 10
End

und:

CommandButton Command_SelectUpgradesElvenFortress
    Command                 = PUSH_VISIBLE_COMMAND_RANGE
    TextLabel               = CONTROLBAR:SelectUpgradesElvenFortress
    ButtonImage             = UCCommon_UpgradeStructureNew
    ButtonBorderType        = SYSTEM
    DescriptLabel           = CONTROLBAR:ToolTipCommandSelectUpgradesElvenFortress
    Radial                  = Yes
    CommandRangeStart    = 6
    CommandRangeCount    = 8 ; Erhöht auf 8
End

Als letztes Fügen wir noch die folgenden Einträge in die lotr.str ein:
CONTROLBAR:ElvenFortressSilverthornMinitions
"Silberdornpfeile kaufen (&W)"
End

CONTROLBAR:ToolTipElvenFortressSilverthornMinitions
"Rüstet die Festung und alle angeschlossenen Türme mit Silberdornpfeilen aus."
End

Damit wären wir soweit fertig!
Ich hoffe ich konnte helfen.