29. Mär 2024, 07:54 Hallo Gast.
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge. Hierbei werden gemäß Datenschutzerklärung Benutzername und Passwort verschlüsselt für die gewählte Dauer in einem Cookie abgelegt.


Select Boards:
 
Language:
 


Autor Thema: Snagaargs Codingfragen  (Gelesen 3789 mal)

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Snagaargs Codingfragen
« am: 11. Sep 2012, 18:52 »
Hallo zusammen ;)

Durch diese absolut geniale Seite bin ich nun auch unter die Modder gegangen. Leider scheine ich mir da mit SuM I ein etwas schwieriges Feld gesucht zu haben, aber vielleicht komm ich mit eurer Hilfe da weiter, wo ich aktuell noch Grenzen sehe....

Das Problem an dem ich jetzt seit Stunden hänge, ist folgendes:

Ich will einem Helden die Fähigkeit geben die Rüstung eines Gebäudes permanent zu erhöhen, bzw. falls möglich (was ich aber eigentlich schon aufgegeben habe) die LP zu erhöhen.

Ich hab mir jetzt einiges angeschaut und dachte erst ich könnte über die Upgrade.ini gehen, also quasi ähnlich dem Numenormauerwerk einem Gebäude ein Upgrade verpassen. Das funktioniert aber mit einem einzelnen Gebäude nicht, da "CastleUpgrade" als Behavior-Typ auf die gesamte Festung wirkt...

Zweiter (, ähnlicher) Gedanke war, dass ich es über eine neue Gebäuderüstung löse, ähnlich wie es bei Einheiten mit Schweren Rüstungen gelöst ist...
Nur stellt sich mir die Frage ob es eine Condition gibt, dass die Fähigkeit des Helden gewirkt wurde, da ich immer nur PLAYER_UPGRADE als Condition sehe. Kennt da jemand weitere Conditions für Rüstung oder ist das die einzige?

Würde mich über Hilfe sehr freuen, da ich der Verzweiflung schon sehr nahe bin  [ugly]

lg Snagaarg

PS: Ist es eher erwünscht für einzelne Fragen einzelne Themen zu erstellen oder soll man besser ein Sammelthema für seine Fragen erstellen?
« Letzte Änderung: 11. Sep 2012, 20:43 von Snagaarg »

Sanalf 2

  • Gast
Re:Wertänderungen durch Heldenfähigkeit
« Antwort #1 am: 11. Sep 2012, 19:10 »
Hallo, Snagaarg!

Willkommen im Forum und herzlichen Glückwunsch zum Modding-Einstieg!

Ich beantworte zunächst einmal deine PS-Frage. An und für sich dürftest du schon für jede Frage ein eigenes Thema aufmachen, allerdings müsstest du da vorher sicherstellen, dass sie nicht schon mal wo gestellt worden is und vor allem solltest du das ganze nicht in kurzen Abständen machen, da sonst das Forum leicht zugepflastert wird. Von daher wär meine Empfehlung, dass du dir hier einen Sammelthread anlegst. Das is für alle übersichtlicher und angenehmer.

So, aber jetzt zu deiner Frage. Ich würde das ganze über zwei Attributemodifier und ein Upgrade lösen. Dabei gibst du zuerst dem Helden einen solchen Modifier, der sofort wirksam wird, also keine "TriggeredBy = ..."-Zeile aufweist und bei "StartsActive =" ein "Yes" stehen hat. Dort gibst du auch an, dass von diesem Modifier nur dein Zielgebäude betroffen sein soll.
Der Modifier vergibt dann ein Upgrade an das Gebäude. Dieses Upgrade wiederum löst beim Gebäude einen zweiten Modifier aus, der auf es selbst wirkt. Dort kannst du dann Rüstung und Lebenspunkte ganz nach belieben erhöhen.

Falls du da noch Detailfragen dazu haben solltest, dann stehen/stehe wir/ich dir natürlich gern zur Verfügung!

mfg
sanalf 2

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #2 am: 11. Sep 2012, 21:40 »
Wow, so flott hätte ich nicht mit Hilfe gerechnet  :o Danke für das nette Willkommen.

Hab das Thema jetzt zum Sammelthread umfunktioniert :) Hatte nur beim Durchstöbern des Forums festgestellt, dass es für Antwortsuchende angenehmer ist, wenn man schon am Threadtitel grob erkennen kann worum es geht. Naja, ich kann ja die groben Themen vielleicht immer in den ersten Post übernehmen, damit man sehen kann, was man hier so findet.

Kommen wir zum eigentlichen Problem :D
Also so weit ich das verstehe geb ich dem Helden ein Behavior in dem ein AttributeModifier drin ist. Dieser Modifier beinhaltet, dass das Ziel ein Upgrade erhält. Das mache ich über Upgrade = Upgrade_XY, nehme ich an. Dieses Upgrade beinhaltet dann alles was ich am Gebäude ändern will und fertig ist die Geschichte...

Was ich mich jetzt Frage ist, wie genau der Teil beim Helden aussieht.
Wie mach ich das mit dem Zielgebäude? Also woher bekommt er die Info, dass es sich um genau das ausgewähle Gebäude handelt? Kann ich dem Modifier ein genaues Ziel geben?

Vielen, vielen Dank für die Hilfe ;) Ich stehe leider noch seeeehr am Anfang...

lg Snagaarg

Edit: Ok, wie das mit dem Zielgebäude läuft ist mir jetzt klar. Denken hilft dann doch  8-| Allerdings ist mir dein Satz jetzt nicht klar, was ich bezüglich des Zielobjektes beim Helden angeben muss. Wär cool, wenn du mir das nochmal erklären kannst.
Edit2: Schön, wenn sich die Probleme von selbst lösen  xD Hab jetzt alles verstanden, denke ich und werd jetzt gleich testen. [uglybunti]
« Letzte Änderung: 11. Sep 2012, 23:47 von Snagaarg »

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #3 am: 17. Sep 2012, 12:57 »
Hallo nochmal,

nachdem ich jetzt einiges probiert hab, werfe ich das Handtuch. Ich kann zwar mit der Fähigkeit eine beliebige Verbündete Einheit auswählen (was ja auch schon zu viel ist, da ich eigentlich nur Gebäude haben will...), aber es hat schlicht und einfach keinen Effekt. Der Timer löst aus, die LP bleiben die gleichen und so weit ich beobachten konnte die Rüstung auch (wäre auch komisch wenns anders wäre). Ich vermute stark, dass das Problem beim Helden liegt...

Ich hab es mit folgendem Block beim Helden versucht:

   
Behavior = SpecialPowerModule ModuleTag_LukeBuilderUpdate   
        SpecialPowerTemplate      = SpecialAbilityBuilder
        StartsPaused = No
        AttributeModifier = LukeUseBuilder
    End

Nach meiner Logik (bzw. dem was ich bisher verstanden hab) ist die Fähigkeit "SpecialAbilityBuilder" dadurch an einen Modifier geknüpft. In diesem Modifier steht einfach drin:

ModifierList LukeUseBuilder
    Category = STRUCTURE
    Upgrade = Upgrade_ImproveBuilding
End

Das löst beim Gebäude dann folgendes aus:
   
Behavior = AttributeModifierUpgrade ModuleTag_ImproveBuilding
        TriggeredBy = Upgrade_ImproveBuilding
        AttributeModifier = LukeBuilder
End

Also folgenden Modifier:
ModifierList LukeBuilder
    Category = STRUCTURE
    Modifier = HEALTH 1000
    Modifier = ARMOR 50%
End

Falls das auch von Bedeutung ist, hier noch deer Button dazu:
CommandButton Command_LukeBuilder
  Command        = SPECIAL_POWER
  SpecialPower   = SpecialAbilityBuilder
  Options        = NEED_TARGET_ALLY_OBJECT
  TextLabel               = CONTROLBAR:LukeBuilder
  ButtonImage        = HSLukeBuilder
  CursorName              = Bombard
  ButtonBorderType    = ACTION
  DescriptLabel           = CONTROLBAR:ToolTipLukeBuilder
  InvalidCursorName    = GenericInvalid
  InPalantir        = Yes
End

Die Upgrades sind auch angelegt:
Upgrade Upgrade_LukeBuilder
  Type              = OBJECT
End

Upgrade Upgrade_ImproveBuilding
  Type              = OBJECT
End

Also entweder ich hab die Funktionsweise von Fähigkeiten einfach wesentlich weniger verstanden, als ich angenommen hab oder ich bin zu doof den Fehler zu finden  [ugly]

Bin für jede Hilfe dankbar  :)

lg Snagaarg

Sanalf 2

  • Gast
Re:Snagaargs Codingfragen
« Antwort #4 am: 17. Sep 2012, 18:45 »
Also erstmal Respekt, dass du wirklich sechs Tage die Nerven gehabt hast, das zu probieren...ich hätt in deiner Situation schon nach der hälfte der Zeit alles hingeschmissen^^

Das Problem liegt wohl wirklich am Helden. Ich schreib dir jetzt ganz einfach einmal auf, wie ich das alles Coden würde.
Beim Helden würd ich diesen Code einfügen (anstelle von dem, den du geposted hast):
Behavior = AttributeModifierAuraUpdate ModuleTag_XYZ
        StartsActive    = Yes
        BonusName    = LukeUseBuilder
        RefreshDelay   = 2000
        Range           = 999999
        ObjectFilter    = NONE +NameDesGebäudes
    End
"StartsActive" hab ich auf "Yes" gestellt, das heißt, der Modifier ist automatisch aktiv. Den BonusName hab ich mal von dir übernommen, er gibt den Modifier an. Die Range solltest du auf einen sehr hohen Wert setzen, damit der Modifier über die ganze Karte wirkt. 999999 sollte hier reichenn. Und bei "NameDesGebäudes" gibst du natürlich ebendiesen an^^ So ist eingestellt, dass nur dein Gebäude getroffen wird.

Den Modifier würde ich so aufbauen:
ModifierList LukeUseBuilder
    Category = SPELL
    Duration = 0
    Upgrade  = Upgrade_ImproveBuilding Delay:100
End

Upgrades werden immer mit einem kleinen Delay vergeben, frag mich bitte nicht, wieso.

Beim Gebäude fügst du dann diesen Code hier ein:
Behavior = AttributeModifierAuraUpdate ModuleTag_Improve
        StartsActive    = No
        BonusName       = LukeBuilder
        TriggeredBy     = Upgrade_ImproveBuilding
        RefreshDelay    = 2000
        Range           = 1
        AllowSelf       = Yes
        ObjectFilter    = NONE +NameDesGebäudes
    End

Hier muss "StartsActive" natürlich auf "No" gestellt sein. Und du musst angeben, welches Upgrade den neuen Modifier auslöst. Die Range solltest du auf 1 setzen, damit wirklich nur das Gebäude getroffen is. Die Zeile "AllowSelf" is ebenfalls wichtig. Und der ObjectFilter ist eh selbsterklärend.

ModifierList LukeBuilder
            Category = STRUCTURE
Modifier = HEALTH 1000
            Modifier  = ARMOR 50%
Duration = 0
End

So müsste es eigentlich funktionieren. Ich geh weiter davon aus, dass du das ganze dann noch im Palantir des Helden anzeigen möchtest. Dazu verwendet das AttributeMofidier-System traditionell folgenden Code, den du in der Ini des Helden über dem Modifier einfügst:
Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
TriggeredBy = ...
End

Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate   
SpecialPowerTemplate      = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack  = No
StartsPaused = Yes
End
Diese Codes aktivieren rein gar nichts, denn "FakeLeadership" hat keinen Effekt. Es dient lediglich dazu, dass dem Spiel vorgegaukelt wird, dass ab einem bestimmten Level eine Fähigkeit freigeschaltet wird. Bei "TriggeredBy = ..." musst du das Upgrade angeben, das dein Held auf dem Level erhält, auf dem er dann die Fähigkeit erlernen soll. Also z.B. "Upgrade_ObjectLevel2" oder ähnliches.

Den CommandButton solltest du dann so aufbauen (mehr braucht er nicht zu beinhalten):
CommandButton Command_LukeBuilder
  Command                 = SPECIAL_POWER
  SpecialPower            = SpecialAbilityFakeLeadership
  Options   = NONPRESSABLE
  TextLabel               = CONTROLBAR:LukeBuilder
  ButtonImage             = HSLukeBuilder
  RadiusCursorType        = TrainingRadiusCursor
  ButtonBorderType        = ACTION
  DescriptLabel           = CONTROLBAR:ToolTipLukeBuilder
  InPalantir = Yes
End

So, is wieder etwas länger geworden, aber ich versuch immer, alles so ausführlich wie möglich zu erklären, damit du in Zukunft dann selbst eigene Systeme entwerfen kannst. Ich hoffe, dass alles passt!

mfg
sanalf 2

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #5 am: 17. Sep 2012, 20:33 »
Zunächst vielen Dank für deine erneute Hilfe.

Also ich hab das jetzt so umgesetzt, wie du gepostet hast. Allerdings hab ich entweder irgendwo noch nen kleinen Fehler gemacht oder ich hab mich in meinem ersten Post einfach zu unklar ausgedrückt.  :o

Ich hatte es so gemeint, dass man ein einzelnes Gebäude auswählt mit der Fähigkeit, das dann den Bonus erhält. Du hast scheinbar angenommen, dass ich einem bestimmten Gebäudetyp auf der ganzen Karte als Führerschaft einen dauerhaften Bonus geben will (also der auch nach Tod des Helden bestehen bleibt).

Tut mir echt leid für das Missverständnis, als ich grade nochmal nachgelesen hab, wurde mir klar, dass man das durchaus auch anders verstehen kann. Nächstes mal werd ich mein Vorhaben präziser Formulieren  8-|

Vergeblich war deine Mühe aber nicht, denn wir haben die Fähigkeit jetzt entsprechend deines Plans geändert, da sie dann einer lvl 10 Fähigkeit wesentlich gerechter wird.

Die Erklärung war keinesfalls zu ausführlich. Einige Sachen wusste ich natürlich schon, aber jetzt hab ich die Bestätigung, dass ich das auch richtig verstanden hab mit der Aktivierung von Fähigkeiten.

Wäre der ursprüngliche Plan deiner Meinung nach überhaupt umsetzbar gewesen oder sieht SuM I solche Fähigkeiten einfach nicht vor? Ich hab nämlich so unendlich viel probiert und es hat einfach nichts geholfen ... mein neuster Plan war, dass ich dem Helden für die Fähigkeit eine Waffe gebe, die keinen Schaden macht und nur Verbündete Gebäude angreifen kann (daran hings dann auch schon  xD ). Der Waffe hab ich dann über n Nugget nen Modifier zugewiesen, der eben die Effekte hat, die ich wollte. Vielleicht hätte es so funktioniert...

Nochmal vielen Dank  8-)

lg Snagaarg

Sanalf 2

  • Gast
Re:Snagaargs Codingfragen
« Antwort #6 am: 17. Sep 2012, 21:22 »
Bitte, bitte. Ich helf immer gern.

Ja, da hab ich dich wohl missverstanden, ich hab angenommen, dass du das als passiven Effekt von Anfang an einbauen willst. Ob das jetzt an mangelnder Formulierung oder Missverstehen meiner Seits liegt, spielt ja keine Rolle  xD

Ihr könnt natürlich die Fähigkeit gern so einbauen, wie ich es vorgeschlagen habe. Deine Variante würde aber auch funktionieren, zweifellos.
Die Weapon ist an und für sich recht einfach erstellt. Ich hätt hier mal ein Beispiel, wie die aussehen könnte:
Weapon XYZWeapon
    RadiusDamageAffects = ALLIES NEUTRALS SELF
    LeechRangeWeapon    = Yes
    AttackRange         = 400.0
    MeleeWeapon         = No
    DelayBetweenShots   = 200         
    PreAttackDelay      = 0
    PreAttackType       = PER_SHOT
    FiringDuration      = 0

    AttributeModifierNugget
        AttributeModifier    = LukeUseBuilder
        Radius               = 1
        SpecialObjectFilter  = NONE +DeinGebäude
    End
End

Wie du siehst, kann der "Schaden" der Weapon nur Verbündete, Neutrale und den Spieler selbst treffen. Ich würde diese drei Formulierungen immer so gemeinsam verwenden. Das Wichtige ist hier nun das AttributeModifierNugget. Den Radius hab ich mal auf 1 gesetzt, damit nur ein Gebäude betroffen ist. Es könnte sein, dass das ein wenig zu klein ist, müsstest du testen.

Bis jetzt kannst du aber den Effekt theoretisch auf jedes Gebäude wirken, betroffen wär aber eben nur das eine. Um jetzt noch einzustellen, dass die Fähigkeit auch nur auf dieses eine Gebäude gewirkt werden kann und bei allen anderen der Nicht-Erlaub-Cursor erscheint, musst du in der specialpower.ini bei der Fähigkeit folgende Zeile einfügen:
ObjectFilter = NONE + DeinGebäudeUnd zusätzlich musst du in die "Flags ="-Zeile noch "NEEDS_OBJECT_FILTER" einfügen.

mfg
sanalf 2

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #7 am: 17. Sep 2012, 22:40 »
Wunderbar :) Wir werden es jetzt erstmal mit deiner Variante testen. Sollte die zu schwer ins Balancing eingreifen, werd ich mich nochmal an der Waffe versuchen, bzw. wir haben einige ähnliche Fähigkeiten vor, wo ich das sehr gut gebrauchen kann. Da hab ich jetzt auf jeden Fall schonmal was gelernt  8-)

Bis (wahrscheinlich) bald,

lg Snagaarg

Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #8 am: 25. Sep 2012, 21:06 »
Inzwischen haben sich ein paar Fragen angesammelt (teilweise allgemein, teilweise speziell...):

1. Beim durchstöbern des Forums bin ich irgendwo darauf gestoßen, dass man durch bearbeiten der bse-Dateien der Base-ini die Festungen überarbeiten kann (Bauplätze hinzufügen/verschieben, weitere Objekte einbauen...). Ich hab das dann versucht und das einzige Ergebnis war, dass man als Mordorspieler plötzlich garkeine Base mehr hatte :D Ich vermute, dass es damit zusammenhängt, dass der Worldbuilder nicht ordentlich im bse-Format speichert. Weiß da jemand Rat?

2. Auch zum Thema Helden in Gebäude auslagern hab ich einiges gelesen, aber das scheint sich meist auf SuM II zu beziehen, da ich mit den Methoden, die ich gefunden hab nicht weiterkomme. Ich hab jetzt versucht einfach selbst Fake-Revive-Buttons zu machen, da die in SuM I ja nicht existieren. Im Grunde funktioniert das auch, allerdings ist die Belegung der Fake-Buttons nicht an die Heldenreihenfolge in der Playertemplates.ini geknüpft, sondern gefallene Helden werden scheinbar hinten angereiht bzw. gebaute Helden aus der Nummerierung genommen, d.h. Held Nr. 5 rutscht bei Rekrutierung von Held Nr. 4 auf den 4. Slot. Ist das Auslagern von Helden in Gebäude einfach nicht möglich oder muss man anders tricksen? ;)

3. Kann man einen per Upgrade aktivierten Button über das gleiche (oder auch ein anderes...) Upgrade auch wieder deaktivieren? Quasi ein Upgrade-Toggle?

Danke im Voraus ;) Die ganze Geschichte wird irgendwie doch komplizierter und umfangreicher, als ursprünglich geplant  [ugly]

lg Snagaarg

Sanalf 2

  • Gast
Re:Snagaargs Codingfragen
« Antwort #9 am: 26. Sep 2012, 13:22 »
1) Dein Problem scheint hier wirklich der Worldbuilder zu sein. Versuch mal folgendes:
    Lade dir mal diesen Hex-Editor hier runter (alles kostenlos und ungefährlich, ich benutze ihn
    selbst auch): http://www.the3rdage.net/item-105?addview
    Mit diesem öffnest du jetzt die .bse-Datei mit deiner überarbeiteten Festung. Jetzt müsstest du
    im rechten der beiden Fenster gleich ziemlich am Anfang den Namen der Datei sehen, also sowas
    wie "fortress_mordor" oder dergleichen (können auch ein paar unleserliche Zeichen dazwischen
    liegen). Ändere jetzt mal die Anfangsbuchstaben dieser beiden Wörter in Großbuchstaben, also in
    "Fortress_Mordor". Dann speicherst du als .bse ab und es sollte klappen. Wenn nicht, dann hast
    du im Worldbuilder einen Hund drin.
3) Nein, leider nicht. Wenn du eine Fähigkeit nur solange verfügbar machen willst, wie eine
    bestimmte Bedingung gegeben ist, z.B. eine andere Einheit auf dem Feld ist oder sowas, dann
    löst du das am besten über ModelConditions. In der CommandButton.ini brauchst du dann nur
    noch bei dem Button die Zeile "DisableOnModelCondition" oder "EnableOnModelCondition"
    einfügen.

Zu 2) kann ich leider nichts sagen, da ich mich mit dem Heldensystem in SuM I noch nicht beschäftigt habe.

mfg
sanalf 2

Elessar Telcontar

  • Gardist von Meduseld
  • ***
  • Beiträge: 1.059
Re:Snagaargs Codingfragen
« Antwort #10 am: 26. Sep 2012, 17:05 »
1.) ist so nicht ganz richtig, den Hex-Editor braucht man nicht. Wichtig ist aber, dass die Datei als z.B. CastleGondor_NW.bse gespeichert wird, ABER die Datei beim Einfügen in die big-file dann im Kleinbuchstabenformat umbenannt wird.

bei 2.) gibt es wirklich keine elegante Lösung, entweder man hat Helden wie vorgesehen in der Zitadelle oder man hat eine Heldeneinheit mit normalem Button wie bei Baumbart, die dann aber keinen Revive hat, sondern jedesmal neu gebaut wird.
--- Edain I Team ---
Nicht jeder Verirrte verliert sich, Nicht alles, was Gold ist, glänzt;
Die tiefe Wurzel erfriert nicht, Was alt ist wird nicht zum Gespenst.
Aus Schatten ein Licht entspringe! Aus Asche soll Feuer loh'n!
Heil wird die zerbrochene Klinge, Der Kronlose steigt auf den Thron.



Snagaarg

  • Bilbos Festgast
  • *
  • Beiträge: 7
Re:Snagaargs Codingfragen
« Antwort #11 am: 26. Sep 2012, 18:49 »
Vielen, vielen Dank euch beiden.  ;)

Die Bases funktionieren jetzt.  [uglybunti] Was man da für Tricks anwenden muss...

Mit dem Helden werden wir uns dann noch mal konzeptionell Gedanken machen müssen... Baumbart ist ein guter Hinweis. Den schau ich mir mal an. Problem an dem Helden ist halt, dass es sich um einen Mumakil handelt, dessen erscheinen aus der Mordorzitadelle noch wesentlich merkwürdiger aussieht, als bei den anderen Helden sowieso schon und einfach besser in den Pferch passt. Denke aber, dass ich das mit euren Hinweisen jetzt hinbekommen sollte.

lg Snagaarg