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)
EndDanach 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
    EndZusä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
    EndAls 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
EndAls 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			
EndNun 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
Endund 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
Endund:
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
EndAls 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."
EndDamit wären wir soweit fertig!
Ich hoffe ich konnte helfen.