Modding Union
Modderecke => Coding => Thema gestartet von: Vermilion am 26. Jul 2011, 15:24
-
Ich möchte für die HeldenMod die ich hier auch gepostet habe ein neues Konzept erstellen:
Und zwar gibt es in der Mod keine Ringhelden (weil die RIngmechanik zu Problemen führt). Möchte aber, dass der Ring doch irgendwie genutzt wird. Meine Idee: Sammelt irgendeine Einheit (egal ob Katapult oder Held) den Ring auf dann sollen Rüstungs und Angriffswert verdoppelt werden (jetzt als Beispiel). Die KI soll den Ring NICHT zur Festung bringen!
Geht das und wo muss ich es deaktivieren damit die EInheit nicht zur Festung rennt wenn sie den Ring hat?
Ich denke mal das mit den Werten, da muss ich nur ein Powerupdate und als Trigger "TheOneRing" oder so ähnlich eingeben.
-
Geht das und wo muss ich es deaktivieren damit die EInheit nicht zur Festung rennt wenn sie den Ring hat?
Geht nicht.
Zum rest kann ich leider nichts sagen.
-
Doch ich habe es in der crate.ini abgestellt. Die Einheiten rennen nicht mehr mit dem Ring zur Festung sondern kämpfen normal weiter. Aber die KI-Helden fliehen fleissig wenn angeschlagen. Soweit so gut. Nun möchte ich gerne dass der Ring der tragenden EInheit einen BOnus verleiht.
Ich hab folgende EInträge versucht hinzuzufügen:
1.)
Behavior = SpecialPowerModule ModuleTag_LurtzCarnageSt arter SpecialPowerTemplate = SpecialAbilityLurtzCarna ge
StartsPaused = Yes
AttributeModifier = LurtzCarnage
AttributeModifierAffects Self = Yes
End
Behavior = HeroModeSpecialAbilityUp date ModuleTag_CarnageUpdate ; So the difference in SpecialAbility is that it takes timing from this Update, instead of simply firing.
SpecialPowerTemplate = SpecialAbilityLurtzCarna ge
HeroEffectDuration = 0 ; ;30000
UnpackTime = 1 ; how long the weaponset is active
End
nachdem das nicht geklappt hat (muss wohl was mit Auraupdate sein)
2.)
Behavior = AttributeModifierAuraUpd ate ModuleTag_RingLeadership Update
StartsActive = Yes
BonusName = RingLeadership
;RefreshDelay = 0
Range = 0
;ObjectFilter = GENERIC_BUFF_RECIPIENT_O BJECT_FILTER
End
Hat beides leider nicht geklappt. Nix abgestürtzt aber kein Effekt. :-(
-
Mir ist grade nicht ganz klar wo du definiert hast das der Ring auslöst, dass die stärker werden.
-
Hat er auch nicht^^
Also du könntest es schon über deinen zweiten Versuchsweg probieren. Bin mir nicht 100%ig sicher, ob das dann alles so klappt, wie du es willst, aber es wäre eine Möglichkeit.
Du nimmst also diesen Block, den du eh schon verwendet hast:
Behavior = AttributeModifierAuraUpd ate ModuleTag_RingLeadership Update
StartsActive = Yes
BonusName = RingLeadership
;RefreshDelay = 0
Range = 0
;ObjectFilter = GENERIC_BUFF_RECIPIENT_O BJECT_FILTER
End
Und fügst den beim Ring ein. Ja, beim Ring, nicht bei der Einheit, die den Bonus kriegen soll!
Leider hast du hier ein paar wichtige Dinge weggelassen. Erstens: Warum hast du das "RefreshDelay" auskommentiert? Setz das einfach mal auf 2000, wie bei den anderen Leaderships auch.
Dann stellst du die Range auf etwas eher Geringes ein...probiers mal mit 50. Eigentlich "klammert" sich der Ring ja an die Einheit, die ihn aufnimmt, ich bin mir aber nicht ganz sicher, ob du für den Fall, dass eine Horde ihn aufnimmt, 1 bei der Range verwenden kannst...versuchs lieber mit 50.
Und beim ObjectFilter gibts du am besten das an, was beim Ring in seinem "AttachModule" beim ObjectFilter steht. Du könntest dann dahinter noch ein "ALLIES" schreiben, damit nur du und deine Verbündeten betroffen werden.
Also ich würde das so machen:
StartsActive = Yes
BonusName = RingLeadership
RefreshDelay = 2000
Range = 0
ObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE -WORKING_PASSENGER -NO_COLLIDE -INERT -IGNORED_IN_GUI -PROJECTILE -NEUTRALGOLLUM -NOT_AUTOACQUIRABLE -WildSpiderling_Slaved -IsengardExplosiveMine -Wyrm -WargSentry NOT_FLYING_UNITS ALLIES
Wenn's dann noch immer nicht geht, müssen wir uns mal deine "RingLeadership" anschauen.
mfg
sanalf 2
-
Danke Sanalf das du mir helfen willst :-)
So im "Ring" Eintrag der crate.ini hab ich folgenden EIntrag hinzugefügt bzw bearbeitet:
Behavior = AttributeModifierAuraUpd ate ModuleTag_RingLeadership Update
StartsActive = Yes
BonusName = RingLeadership
RefreshDelay = 2000
Range = 50
ObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE -WORKING_PASSENGER -NO_COLLIDE -INERT -IGNORED_IN_GUI -PROJECTILE -NEUTRALGOLLUM -NOT_AUTOACQUIRABLE -WildSpiderling_Slaved -IsengardExplosiveMine -Wyrm -WargSentry NOT_FLYING_UNITS
End
Und der "RingLeadership" Block in der attributemodifier.ini sieht so aus:
ModifierList RingLeadership
Category = SPELL ; ;LEADERSHIP
Modifier = EXPERIENCE 200% ; ;200%
Modifier = ARMOR 25% ; ;50%
Modifier = DAMAGE_MULT 200% ; ;150%
Duration = 3000
End
Nutzt leider nix. Funzt nicht.
-
Büdde...irgendwie werden wir da auch schon was zusammenbringen.
Also in deinem Attributemodifier würde ich das "SPELL" wieder durch ein "LEADERSHIP" ersetzen, weil du ja eine Leadership erstellt hast.
Und woher weißt du eigentlich, dass nichts funktioniert? Woran erkennst du das? Siehst du mit bloßem Auge deine verbesserten Werte?
mfg
sanalf 2
-
Kleiner Tipp von mir zum testen von Modifiers:
Füge folgendes im Attributemodifier ein:
Modifier = SPEED 999%
Da sollte man dan für normal sofort sehen können ob der Modifier geht oder nicht ;)
mfg
Pini
-
Büdde...irgendwie werden wir da auch schon was zusammenbringen.
Also in deinem Attributemodifier würde ich das "SPELL" wieder durch ein "LEADERSHIP" ersetzen, weil du ja eine Leadership erstellt hast.
Und woher weißt du eigentlich, dass nichts funktioniert? Woran erkennst du das? Siehst du mit bloßem Auge deine verbesserten Werte?
mfg
sanalf 2
Beim probespiel hatte ein held den ring, er machte keinen doppelten schaden (z.b. am gebäude)
@Pini: Danke für den tipp
-
Funzt ned! :-(
Hab Spell durch Leadership ersetzt, bringt nix. Sarumans Leadership Bonus ist auch n Spell.
Muss ich da etwa noch ein Update erstellen (Update.ini?) und dann bei jeder Einheit ein Behavior dazu?
-
Du musst einen PassiveAreaBehaviour anstelle eines AttributeBehaviours einbauen. Codes dafür findest du in jeder Statuen.ini.
Ansonsten würde ich es über eine FireWeapon (Stichwort Karsh) regeln, die einen Attribuitemodifier per Nugget an Verbündete abgibt.
-
Hab das mit der Karsh Weapon versucht, das mit PassiveAreaBehaviour hab ich net ganz verstanden. Welche Statuen.ini meinst du? Die gibts nicht und keine ini enthält den Begriff "PassiveAreaBehaviour"
Also ich hab bei "Ring" in der "crate.ini folgendes eingefügt:
WeaponSet
Conditions = None
Weapon = PRIMARY TheRingWeapon
AutoChooseSources = TERTIARY NONE
End
Dann bei Weapon:
Weapon TheRingWeapon
RadiusDamageAffects = ALLIES
LeechRangeWeapon = Yes
AttackRange = 0.0
MeleeWeapon = Yes
DelayBetweenShots = 0 ; Bad Things happen if delay between shots is less than Preattack+Firing times. You are ready to fire before you are done firing.
PreAttackDelay = 0 ;KARSH_SWORD_PREATTACKDEL AY ; 400 is sword swing delay time before contact with target.
PreAttackType = PER_SHOT ; Do the delay each time we attack a new target
;FireFX = FX_BarrowWightHit ;FX_GondorSwordHit
;FiringDuration = 2000
;DOTNugget // A basic Nugget that just does damage
;Damage = 0
;AcceptDamageAdd = Yes
;Radius = 1.0
;DelayTime = 0
;DamageType = HERO
;DamageFXType = SWORD_SLASH
;DeathType = NORMAL
;DamageInterval = 500
;DamageDuration = 1500
;DrainLife = Yes
;DrainLifeMultiplier = 0.2
;End
DamageNugget ; A basic Nugget that just does damage
Damage = 0
Radius = 1.0
DelayTime = 0
DamageType = MAGIC
;DamageFXType = SWORD_SLASH
DeathType = NORMAL
DrainLife = Yes
DrainLifeMultiplier = 0.2
End
AttributeModifierNugget
AttributeModifier = TheRingBuff
;AntiCategories = LEADERSHIP BUFF
SpecialObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE -WORKING_PASSENGER -NO_COLLIDE -INERT -IGNORED_IN_GUI -PROJECTILE -NEUTRALGOLLUM -NOT_AUTOACQUIRABLE -WildSpiderling_Slaved -IsengardExplosiveMine -Wyrm -WargSentry NOT_FLYING_UNITS
End
End
Dann noch folgenden Eintrag bei der attributmodifier.ini:
ModifierList TheRingBuff
Category = BUFF ;SPELL ; ;LEADERSHIP
Modifier = EXPERIENCE 200% ; ;200%
Modifier = ARMOR 50% ; ;50%
Modifier = SPEED 900%
Modifier = DAMAGE_MULT 200% ; ;150% // Multiplicitive. Damage multiplied by this, will compound in multiple bonuses
Duration = 0
End
Bringt nichts :-(
Gr Verm
-
Das kann auch nicht funktionieren:
Du hast die Waffe mit dem Modifier als Standartwaffe angegeben, und nicht wie Ea sagte per FireWeapon. So wie du das eingebaut hast, würde das nur was bringen wen der Ring angreifen würde, was er nicht tut, da ihm die AI dazu fehlt selbstständig angreifen zu können.
Das FireWeapon das Ea meinte geht so:
Behavior = FireWeaponUpdate ModuleTag_Einfachdrauflosballern
FireWeaponNugget
WeaponName = TheRingWeapon
OneShot = No ;feuert die weapon immer ab wen sie wieder aufgeladen ist
End
End
Das ist ziemlich nützlich, und wird dir bestimmt später nochmal von nutzen sein
mfg
Pini
-
Ja sorry hab da wohl gepennt. Habs abgeändert und auch bei der weapon.ini im entsprechenden Block "MeleeWeaopon = NO" gesetzt. Aber funzt immer noch nicht. Ich poste mal alle EInträge in der crate.ini (die den Ring betreffen)
Object TheDroppedRing
Draw = W3DScriptedModelDraw ModuleTag_01
DefaultModelConditionState
Model = TheRing
ParticleSysBone NONE OneRing
;ParticleSysBone NONE OneRingAura
Shadow = SHADOW_ADDITIVE_DECAL
ShadowSizeX = 200
ShadowSizeY = 200
ShadowTexture = MUCatapultFP02
ShadowMaxHeight = 200
ShadowOverrideLODVisibility = yes
End
IdleAnimationState
Animation
AnimationName = THERING.THERING
AnimationMode = LOOP
End
End
End
EditorSorting = MISC_MAN_MADE
DisplayName = OBJECT:TheOneRing
Side = Civilian
KindOf = SELECTABLE IMMOBILE NOT_AUTOACQUIRABLE UNATTACKABLE REVEAL_TO_ALL CRATE ONE_RING ; Only Salvage crates are marked Selectable so the Mouse can interact with them and give Salvage voices. Being dead makes them not actually selectable
ThreatLevel = 0.0
ShroudClearingRange = 100
Body = HighlanderBody ModuleTag_Body ;Can take damage, but won't die. Can only die from ::kill() or other unresistable damage
MaxHealth = 1.0
End
; *** AUDIO Parameters ***;
EvaEnemyObjectSightedEvent = DiscoveredRing ; This is so that we get the DiscoveredRing event if it is unstealthed when we first see it
ClientUpdate = EvaAnnounceClientCreate ModuleTag_AnnounceCreate
; And this covers the case where the Ring spawns in while in sight of the player's troops
AnnouncementEventEnemy = DiscoveredRing
AnnouncementEventAlly = DiscoveredRing
AnnouncementEventOwner = DiscoveredRing
OnlyIfVisible = Yes ; Don't announce if hidden in the shroud
UseObjectsPosition = Yes ; Play from the Ring's position
CreateFakeRadarEvent = Yes ; Allow player to jump to the Ring after hearing annoucement
DelayBeforeAnnouncementMS = 1000 ; Allow 1 second before announcing. This is mostly so that if someone is right on top of the ring, we can use the pickup event to block the discovered event
; and not get two announcements
; CountAsFirstSightedAnnoucement = Yes ; Doesn't matter since this unit doesn't use EvaOnFirstSightingEventEnemy/NonEnemy
End
ClientUpdate = RadarMarkerClientUpdate ModuleTag_RadarMarker
MarkerType = PingOneRing
End
;---------------------------
;Behavior = AttributeModifierAuraUpdate ModuleTag_RegisteratFortress1
;StartsActive = Yes
;BonusName = PrepareFortressForRing
;RefreshDelay = 500
;Range = 100
;TargetEnemy = Yes
;ObjectFilter = ANY +COMMANDCENTER
;End
;Behavior = AttributeModifierAuraUpdate ModuleTag_RegisteratFortress2
;StartsActive = Yes
;BonusName = PrepareFortressForRing
;RefreshDelay = 500
;Range = 100
; TargetEnemy = Yes
;ObjectFilter = ANY +COMMANDCENTER
;End
Behavior = FireWeaponUpdate ModuleTag_Einfachdrauflosballern
FireWeaponNugget
WeaponName = TheRingWeapon
OneShot = No ;feuert die weapon immer ab wen sie wieder aufgeladen ist
End
End
Behavior = AttachUpdate ModuleTag_Attach
ObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE -WORKING_PASSENGER -NO_COLLIDE -INERT -IGNORED_IN_GUI -PROJECTILE -NEUTRALGOLLUM -NOT_AUTOACQUIRABLE -WildSpiderling_Slaved -IsengardExplosiveMine -Wyrm -WargSentry NOT_FLYING_UNITS
ScanRange = 10
;ParentStatus = HOLDING_THE_RING
AlwaysTeleport = No
AnchorToTopOfGeometry = Yes
// Eva events to play when the Ring is picked up by the local player / an ally / an enemy
ParentOwnerAttachmentEvaEvent = RingPickedUpLocal
;ParentAllyAttachmentEvaEvent = Nothing for now! (Are we sure???)
ParentEnemyAttachmentEvaEvent = RingPickedUpEnemy
ParentOwnerDiedEvaEvent = LocalPlayerLosesRing ; E.g. the unit carrying the ring died, so we lost it.
;ParentAllyDiedEvaEvent = Nothing (for now)
;ParentEnemyDiedEvaEvent = Nothing (for now)
End
; Remove the ring hero upgrade from which ever player created us. This is to remove the ability to build
; the ring heroes when out fortress holding the ring has been nuked.
Behavior = RemoveUpgradeUpgrade ModuleTag_RemoveRingFromPlayer
TriggeredBy = Upgrade_IsengardFaction Upgrade_MordorFaction Upgrade_WildFaction Upgrade_MenFaction Upgrade_ElfFaction Upgrade_DwarfFaction
UpgradeToRemove = Upgrade_RingHero
SuppressEvaEventForRemoval = Yes
End
Behavior = DestroyDie ModuleTag_Die
End
Behavior = CreateObjectDie ModuleTag_DropTheRing
CreationList = OCL_TheOneRing
End
Geometry = CYLINDER
GeometryMajorRadius = 10.0
GeometryHeight = 10.0
GeometryIsSmall = Yes
//Shadow = SHADOW_VOLUME
Shadow = SHADOW_DECAL
End
Gr Verm
-
bitte, poste deine Codes im "code" format....
Das sieht so aus:
(code) Dein ewig langer Code (/code)
die runden Klammern einfach durch eckige ersetzen, das macht das ganze etwas übersichtlicher...
Versuch mal beim AttributemodifierNugget eine Range anzugeben...
mfg
Pini
-
Range führt zum Absturz, Radius bringt auch nichts (stürzt nicht ab aber hat keinen Effekt).
Zwischendurch ein Grosses Danke für euere Vorschläge :-)
LG Verm
-
Dann hast du den wohl falsch gesetzt, denn bei mir funktioniert Radius
Hier mal ein beispiel für ein AttributemodifierNugget angepasst für dich:
AttributeModifierNugget
AttributeModifier = TheRingBuff
Radius = 100
SpecialObjectFilter = ANY +INFANTRY +CAVALRY +HERO +MONSTER +MACHINE -WORKING_PASSENGER -NO_COLLIDE -INERT -IGNORED_IN_GUI -PROJECTILE -NEUTRALGOLLUM -NOT_AUTOACQUIRABLE -WildSpiderling_Slaved -IsengardExplosiveMine -Wyrm -WargSentry NOT_FLYING_UNITS
End
Sollte das weiterhin zum absturz führen, poste bitte die Fehlermeldung
mfg
Pini
-
Funktioniert nicht. Wie bislang geschieht nix wenn der Ring aufgesammelt wird.
-
Kommentier das mal weg:
RadiusDamageAffects = ALLIES
und mach eventuell die Duration beim Attributemodifier mal höher als 0... klar dass das so nicht gehen kann, sry das es mir nicht früher aufgefallen ist. Setz die mal auf 3000 und DelayBetweenShots auf 2000, und lass die fire fx anzeigen, damit du wenigstens siehst, ob die Weapon feuert oder nicht ;)
mfg
Pini
-
Jaaa, endlich bin ich n Schritt weiter! Soweit klappt es. Aber es werden auch die Gegnerischen Einheiten beeinflusst wenn sie direkt neben dem Helden stehen. Hab den Radius auf 0 gesetzt, das hilft ein wenig aber es wäre gut wenn ich es irgendwie coden könnte dass nur meine Verbündeten von dem Ring profitieren. Vielleicht unter ObjectFilter noch -ENEMIES ?
-
Gut das es klappt
Probier es doch einfach aus, ich bin mir nämlich grad nicht sicher wem der Ring "gehört" und ob ein -ENEMIES funktioniert. Du wirst es eh an der geschwindigkeit erkennen obs geht oder nicht ;)
-
Nee geht leider nicht. (Absturz der game.dat) Das Problem ist dass zu dicht stehende Einheiten des Gegners (so auch Helden) gleichzeitig von dem Ring profitieren
-
Sry mein Fehler... ich glaube -ENEMIES gibts nicht, deswegen vermutlich auch der Crash.
Häng am Ende des Filters einfach ein ALLIES dran
Ps.: Wenn du postest was in der Fehlermeldung stand, kann man dir effizenter helfen
mfg
Pini