Modding Union
Modderecke => Coding => Thema gestartet von: Only True Witchking am 6. Mai 2018, 09:47
-
Hallo Edain Community!
Ich bin schon seit längerem ein großer Fan der Mod. In letzter Zeit habe ich mich Intensiv mit Mapping beschäftigt, und auch schon einige kleinere Maps erstellt.
Mein neuestes Projekt ist eine Map mit dem Namen "Das Tor von Minas Tirith", bei der es darum geht, das Tor von Minas Tirith so lange gegen Mordororks und Mordor-Bogenschützen zu halten, bis Grond, einige Kampftrolle und eine Masse Morgulorks auftauchen. Nachdem Grond das Tor einrammt, ist das Ziel, alle Trolle und Morgulorks zu töten, bevor Gandalf stirbt.
Ich habe versucht, die normalen Mordororks etwas zu schwächen, damit es mehr an die Extended Edition vom Film erinnert, wo die Gondor-Bogenschützen hunderte von Orks niederschießen. Dazu habe ich in der map.ini, mit Hilfe der Gamedata.ini, folgenden Code gebaut:
;------------------------FIGHTER-------------
Object Mordor_Fighter
ReplaceModule ModuleTag_0222
#define MORDOR_FIGHTER_BUILDCOST 100 ; originally 100
#define MORDOR_FIGHTER_BUILDTIME 25
#define MORDOR_FIGHTER_HEALTH 40 ; originally 125
#define MORDOR_FIGHTER_HEALTH_DAMAGED 50
#define MORDOR_FIGHTER_HEALTH_RECOVERY_TIME 10000
#define MORDOR_FIGHTER_VISION_RANGE 175
#define MORDOR_FIGHTER_HORDE_VISION_RANGE 175
#define MORDOR_FIGHTER_HORDE_SHROUDCLEAR_RANGE 400
#define MORDOR_FIGHTER_DAMAGE 20 ; our initial faction level 30
#define MORDOR_FIGHTER_DAMAGE_UPGRADE 60
#define MORDOR_FIGHTER_PREATTACKDELAY 633
#define MORDOR_FIGHTER_DELAYBETWEENSHOTS 1000
#define MORDOR_FIGHTER_FIRINGDURATION 1000
#define MORDOR_FIGHTER_BOUNTY_VALUE 1
End
Wenn ich dann im Spiel versuche, die Map zu starten, stürzt das Spiel sofort mit folgender Meldung ab: "ReplaceModule ModuleTag_0222 was not found for Mordor_Fighter, cannot continue. (Blablabla.)"
Ich habe dem ModuleTag schon 20 verschiedene Namen gegeben, und es funktioniert immer noch nicht.
Kann mir jemand sagen, was ich falsch gemacht habe?
Allerdings habe ich bisher keine Erfahrung mit Coding, nur mit Skripten, deshalb kann es auch sein, dass ich völligen Müll gecodet habe. Auch dann würde ich gerne wissen, was ich machen muss.
Schonmal Danke im Vorraus,
TheOnlyTrueWitchking
-
ReplaceModule ersetzt ein vorhandenes Module. Wenn du sagst:
ReplaceModule ModuleTag_02
Module ModuleTag_New
[..]
End
End
Dann muss es ein Module mit dem Namen ModuleTag_02 geben, dieses wird gelöscht und dafür das Module mit dem Namen ModuleTag_New eingefügt. (also quasi "ersetzt", darum auch Replace)
Dein Fehler ist also, dass du ein nicht vorhandenes Module ersetzen willst. Die Fehlermeldung besagt dann auch das: "Can't find Module"
Ebenso ist die sache mit dem "define" bei dir falsch.
Diese defines stehen NICHT in der Einheit drinnen, sondern in einer eigenen Ini. (und die defines funktionieren auch in einer map.ini nicht)
Schau dir Mal die ini der Mordororks an.
Willst du das Leben von Orks ersetzen?
Dann such dir das Module für das Leben raus und ersetze es über ReplaceModule und schreib einfach bei maxHealth einen neuen Eintrag rein.
Willst du den Schaden verändern? Mach eine neue weapon und sag per weaponset in dem object mordorfighter, dass er sie verwenden soll.
Das könnte zum Beispiel so aussehen:
Weapon MordorWarriorAxeGruenMap_Edain ; BALANCE Orc Warrior Weapon ;Orc Fighter
LeechRangeWeapon = Yes
AttackRange = STANDARD_MELEE_ATTACK_RANGE
MeleeWeapon = Yes
DelayBetweenShots = MORDOR_FIGHTER_DELAYBETWEENSHOTS ; time between shots, msec
PreAttackDelay = MORDOR_FIGHTER_PREATTACKDELAY ; 300 is mace swing delay time before contact with target.
PreAttackType = PER_SHOT ; Do the delay each time we attack
FireFX = FX_GondorSwordHit
FiringDuration = MORDOR_FIGHTER_FIRINGDURATION ; Duration of the mace swing
DamageNugget ; A basic Nugget that just does damage
Damage = 150 ; balanced from 8
Radius = 0.0
DelayTime = 0
DamageType = SLASH
DamageFXType = SWORD_SLASH
DeathType = NORMAL
End
End
Object Mordorfighter
ReplaceModule ModuleTag_02 ; ActiveBody
Body = ActiveBody ModuleTag_Overide
CheerRadius = EMOTION_CHEER_RADIUS
MaxHealth = 1200 ; balanced from 100
MaxHealthDamaged = 50 ;MORDOR_FIGHTER_HEALTH_DAMAGED
BurningDeathBehavior = Yes
BurningDeathFX = FX_InfantryBurningFlame
End
End
WeaponSet
Conditions = None
Weapon = PRIMARY MordorWarriorAxeGruenMap_Edain ;MordorWarriorAxeGruenMap_EdainGoth
AutoChooseSources = PRIMARY FROM_PLAYER FROM_SCRIPT FROM_AI
End
End
[\code]
Genauso kannst du auch Armor etc. verändern.
Bedenke aber: Bei Fernkämpfern lässt sich [b]nicht[/b] die Weapon durch eine map.ini verändern.
-
Danke für die Antwort, Gnomi.
Ich habe jetzt folgendes in die Map.ini geschrieben:
Object Mordorfighter
ReplaceModule ModuleTag_02
Body = ActiveBody ModuleTag_Overide
CheerRadius = EMOTION_CHEER_RADIUS
MaxHealth = 50
MaxHealthDamaged = 165
BurningDeathBehavior = Yes
BurningDeathFX = FX_InfantryBurningFlame
End
End
Allerdings kommt die Warnung "ModuleTag_02 was not found", obwohl in der Mordorfighter.ini doch ganz klar ein ModuleTag_02 definiert ist. Ich weiß also wieder nicht weiter. Wie gesagt, ich habe noch nie etwas gecodet.
Außerdem noch eine Frage: Wofür steht eigentlich MaxHealthDamaged = 165?
Und muss ich das auch verändern?
-
Mein Fehler. Die Einheit heißt MordorFighter, nicht Mordorfighter. Groß und Kleinschreibung ist wichtig - bei MordorFighter sollte es das geben, bei Mordorfighter (da die Einheit nicht im Grundspiel existiert) natürlich nicht.
Sowas passiert, wenn man schnell sowas selbst schreibt. :D
MaxHealthdamaged kann (vor allem bei Gebäuden) dafür benutzt werden, dass sich das Modell dort ändert - Viele Gebäude fallen ja bei 50% Leben etwas zusammen - das ist weil die Leben eben unter MaxHealthdamaged drunter ist. (Systeme ala "Wenn Einheiten nur noch 50% Leben haben werden sie stärker" müssten auch alle darüber funktionieren)
-
Vielen Dank! Es funktioniert jetzt wie gewünscht!
Außerdem war es nicht dein Fehler, ich hab ja sogar in die mordorfighter.ini geschaut, wo ich ganz klar hätte lesen können: Object MordorFighter
8-|
-
Während ich noch ein paar Veränderungen in der Map.ini vorgenommen habe, um die ganze Map etwas schwieriger zu machen (Die normalen Mordororks sind jetzt ja keine Herausforderung mehr), bin ich auf einige "weapons" gestoßen, die folgendes Upgrade benötigen:
Upgrade_TestBuilding_2
Ich habe dann in der upgrade.ini nach dem Upgrade gesucht, und schon ganz oben steht folgender Eintrag:
Upgrade Upgrade_TestBuilding_2
DisplayName = UPGRADE:TestBaseUpgrade
Type = OBJECT
BuildTime = 10.0
BuildCost = 0
ButtonImage = SCGrabPassenger
// ResearchSound = RedGuardVoiceUpgradePatriotism
End
Allerdings Frage ich mich jetzt, welches Upgrade das ist - gibt es vielleicht jemanden, der das weiß?
-
Wo bist du denn darauf gestoßen? Weil ich seh das zwar bei manchen Einheiten, jedoch nciht bei den Mordororks. das wirkt auf mich wie so ein Standardupgrade, was verschiedene Sachen (je nach Einheit) verursacht - z.B: bei Trollen den Waffenwechsel, beim HK jedoch einen anderen Bonus.
Habs nicht direkt getestet, aber auf die schnelle würde ich denken, dass es jetzt nicht nur einen Zweck hat.^^
-
Ich hab es zum Beispiel bei einer weapon für Durmarth gefunden:
Weapon DurmarthSwordKriegerGruft
LeechRangeWeapon = Yes
AttackRange = STANDARD_MELEE_ATTACK_RANGE
MeleeWeapon = Yes
DelayBetweenShots = ARAGORN_DELAYBETWEENSHOTS ; time between shots, msec
PreAttackDelay = ARAGORN_PREATTACKDELAY ; 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_GondorSwordHit
FiringDuration = ARAGORN_FIRINGDURATION ; Duration of the sword swing
DamageNugget ; A basic Nugget that just does damage
Damage = 300
Radius = 0.0
DelayTime = 0
DamageType = HERO
DamageFXType = SWORD_SLASH
DeathType = NORMAL
DrainLife = Yes
DrainLifeMultiplier = 0.15
ForbiddenUpgradeNames = Upgrade_TestBuilding_2
End
DamageNugget
Damage = 100
Radius = 0.0
DelayTime = 0
DamageType = MAGIC
DamageFXType = MAGIC
DeathType = EXPLODED
DrainLife = Yes
DrainLifeMultiplier = 0.1
ForbiddenUpgradeNames = Upgrade_TestBuilding_2
End
DamageNugget ; A basic Nugget that just does damage
Damage = 300
Radius = 0.0
DelayTime = 0
DamageType = HERO
DamageFXType = SWORD_SLASH
DeathType = NORMAL
DrainLife = Yes
DrainLifeMultiplier = 0.30
RequiredUpgradeNames = Upgrade_TestBuilding_2
End
DamageNugget
Damage = 100
Radius = 0.0
DelayTime = 0
DamageType = MAGIC
DamageFXType = MAGIC
DeathType = EXPLODED
DrainLife = Yes
DrainLifeMultiplier = 0.2
RequiredUpgradeNames = Upgrade_TestBuilding_2
End
Allerdings hab ich es mir nochmal angeschaut, und anscheinend ist die einzige Änderung, dass er mehr Leben entzieht. Dazu muss ich sagen, dass ich für diese map Edain 3.8.1 benutze, so dass ich auch auf die 3.8.1 Werte von Durmarth gestoßen bin, wo er ja noch seine 4 Siegel besitzt:
Lvl4 + 100 Magieschaden
Lvl6 Entzieht pro Schlag Leben (Siegel der Gruft)
Lvl8 Op Immunität gegen Pfeile von allem, was kein Gebäude ist
Lvl10 Noch mehr Op: 25%Chance dass alles im Umkreis eingefroren wird
Und alle diese Siegel wirken sich unterschiedlich auf seine Fluchklinge aus.
Jedenfalls besitzt er als Krieger folgende weaponsets:
WeaponSet
Conditions = None
Weapon = PRIMARY DurmarthSwordKrieger
End
WeaponSet
Conditions = PLAYER_UPGRADE
Weapon = PRIMARY DurmarthSwordKriegerGruft
End
Das zweite Weaponset wird also offensichtlich durch Lvl6 bzw. Siegel der Gruft aktiviert, allerdings erklärt das immer noch nicht, was denn jetzt dieses Upgrade ist, dass anscheinend das Siegel noch mal verbessert. Irgendwo muss das doch eigentlich definiert sein?
Es ist jedenfalls nicht in der ini für Durmarth erklärt, und bei seiner Standardweapon ist der ganz normale Eintrag, dass Lvl 4 benötigt wird um 100 Magieschaden hinzu zu fügen.
Es gab noch zwei oder drei andere Einheiten bzw. Weapons, wo ich es gesehen habe, aber als großer Durmarth-Fan interessiert es mich bei ihm am meisten.
-
Wie gesagt:
das wirkt auf mich wie so ein Standardupgrade, was verschiedene Sachen (je nach Einheit) verursacht
Ich hab das Upgrade rgad bei einer Vielzahl von Einheiten entdeckt.^^
Die Sache ist folgendes:
Upgrades können bugs verursachen. Früher gab es bei Edain ja einen Speicherbug, wo man Spiele nicht abspeichern und laden konnte - Grund dafür war, dass es zu viele Upgrades im Spiel gab, die das Spiel überanspruchten.
Viele der neuen Fähigkeiten bzw. einzigartigen Systeme bei Helden benötigen Upgrades, so auch bei Durmarth. Die Upgrades werdend a nicht vom Spieler gekauft, sondern vom Spiel vergeben.
Um die Instabilität des Mods etwas zu bekämpfen, wurden solche Systeme insofern angepasst, dass sie alle das gleiche Upgrade verwenden. Dieses Test Upgrade von dir ist halt eines davon - man hat ein Upgrade, welches je nach Einheit unterschiedliche Sachen bewirkt. So hat man anstelle von 20 Upgrades nur ein einziges.
Ich weiß nicht wie genau das bei Dûrmarth ausgelöst wird - könnte viele verschiedene Sachen geben.
Du hast ja gesagt, dass er diese Fähigkeit durch ein Level erhält - dann wird vermutlich auf Level 6 das Upgrade vergeben und es wird wohl in dem ExperienceLevel sein.
-
Ich konnte es nicht finden, aber ist ja auch nicht so wichtig.
Für meine map brauche ich es jedenfalls nicht.
-
Endlich ist die Map so ziemlich fertig, allerdings fehlt noch eine wichtige Sache. Eigene Audio-Dateien. Die Frage danach wurde zwar schon mehrmals gestellt, aber nie so beantwortet, dass ich persönlich damit was anfangen kann.
Bisher weiß ich nur 2 Dinge:
1. Ich brauche eine wav-Datei. (Die habe ich auch schon- GandalfTestSound.wav
2. Ich muss das ganze direkt in mein komplettes Spiel einfügen.
Was Ich jetzt gerne wissen möchte:
1. Um die Sound-Datei im Worldbuilder nutzen zu können, wo genau muss die wav-Datei hin?
2. Muss ich dazu noch irgendwo eine Referenz zu besagter Audio-Datei reinschreiben? Wenn ja, wo?
Wäre nett wenn mir das jemand sagen kann. Danke im voraus, schon mal.
-
Die Waw Datei muss in eine big rein (z.B. Audio.big) mit dem Pfad:
lang\German\Data\audio\sounds\GandalfTestSound.waw
Die Referenz dazu muss dann in die voice.ini mit folgendem Eintrag z.B.:
AudioEvent GandalfTest
Sounds = GandalfTestSound
Volume = 150
MinVolume = 130
Limit = 1
Type = world player voice
SubmixSlider = voice
End
Das Audioevent kannst du dann in einer anderen ini aufrufen. Das sollte es eigentlich gewesen sein. :)
-
Danke.
Es hat funktioniert.