Modderecke > Coding
Snagaargs Codingfragen
Snagaarg:
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?
Sanalf 2:
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:
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]
Snagaarg:
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:
--- Code: ---
Behavior = SpecialPowerModule ModuleTag_LukeBuilderUpdate
SpecialPowerTemplate = SpecialAbilityBuilder
StartsPaused = No
AttributeModifier = LukeUseBuilder
End
--- Ende Code ---
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:
--- Code: ---ModifierList LukeUseBuilder
Category = STRUCTURE
Upgrade = Upgrade_ImproveBuilding
End
--- Ende Code ---
Das löst beim Gebäude dann folgendes aus:
--- Code: ---
Behavior = AttributeModifierUpgrade ModuleTag_ImproveBuilding
TriggeredBy = Upgrade_ImproveBuilding
AttributeModifier = LukeBuilder
End
--- Ende Code ---
Also folgenden Modifier:
--- Code: ---ModifierList LukeBuilder
Category = STRUCTURE
Modifier = HEALTH 1000
Modifier = ARMOR 50%
End
--- Ende Code ---
Falls das auch von Bedeutung ist, hier noch deer Button dazu:
--- Code: ---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
--- Ende Code ---
Die Upgrades sind auch angelegt:
--- Code: ---Upgrade Upgrade_LukeBuilder
Type = OBJECT
End
Upgrade Upgrade_ImproveBuilding
Type = OBJECT
End
--- Ende Code ---
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:
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):
--- Code: ---Behavior = AttributeModifierAuraUpdate ModuleTag_XYZ
StartsActive = Yes
BonusName = LukeUseBuilder
RefreshDelay = 2000
Range = 999999
ObjectFilter = NONE +NameDesGebäudes
End
--- Ende Code ---
"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:
--- Code: ---ModifierList LukeUseBuilder
Category = SPELL
Duration = 0
Upgrade = Upgrade_ImproveBuilding Delay:100
End
--- Ende Code ---
Upgrades werden immer mit einem kleinen Delay vergeben, frag mich bitte nicht, wieso.
Beim Gebäude fügst du dann diesen Code hier ein:
--- Code: ---Behavior = AttributeModifierAuraUpdate ModuleTag_Improve
StartsActive = No
BonusName = LukeBuilder
TriggeredBy = Upgrade_ImproveBuilding
RefreshDelay = 2000
Range = 1
AllowSelf = Yes
ObjectFilter = NONE +NameDesGebäudes
End
--- Ende Code ---
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.
--- Code: ---ModifierList LukeBuilder
Category = STRUCTURE
Modifier = HEALTH 1000
Modifier = ARMOR 50%
Duration = 0
End
--- Ende Code ---
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:
--- Code: --- Behavior = UnpauseSpecialPowerUpgrade ModuleTag_TheodenLeadership
SpecialPowerTemplate = SpecialAbilityFakeLeadership
TriggeredBy = ...
End
Behavior = SpecialPowerModule ModuleTag_TheodenLeadershipUpdate
SpecialPowerTemplate = SpecialAbilityFakeLeadership
UpdateModuleStartsAttack = No
StartsPaused = Yes
End
--- Ende Code ---
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):
--- Code: ---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
--- Ende Code ---
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
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln