Wurde eine Ability genutzt

» Siedler Map Source Forum » Siedler DEdK Script Forum » Wurde eine Ability genutzt

Seiten: 1

mundn
#1
17.11.2018 12:54
Beiträge: 83

Wurde eine Ability genutzt

Hallo,

Gibt es eine Möglichkeit eine Funktion aufzurufen, sobald ein Held seine Fähigkeit benutzt hat?
Konkretes Beispiel:
Erec benutzt seinen Rundum-Schlag -> Script mach etwas

____________________
Scripten bei Master pewe in DEdK Script-Wiki gelernt ich habe.

mcb
#2
17.11.2018 15:09
Beiträge: 1472

Dazu hast du 2 Möglichkeiten:
1) GUIAction_Hero4CircularAttack
Diese Funktion wird aufgerufen, wenn der Spieler auf den Button für Erecs Wirbelschlag klickt und löst dann den eigentlichen Wirbelschlag aus.

GUIAction_Hero4CircularAttackOrig = GUIAction_Hero4CircularAttack
function GUIAction_Hero4CircularAttack()
   GUIAction_Hero4CircularAttackOrig()
   -- your code
end


Nachteile: Es funktioniert nur für vom Spieler ausgelöste Spezialangriffe die sofort ausgelöst werden, und ist im MP nicht Synchron.

2) S5Hook.SetNetEventTrigger (mcbEMan.AddCNetEventCallback)
Über die neueste Version des Hooks lässt sich eine Funktion aufrufen, wenn eine zu Synchronisierende Aktion ausgeführt wird (Bau, Kauf, Bewegung, Spezialangriffe... ) . Wenn du dadrüber mehr wissen Willst, schreib mir nochmal.
Nachteile: Du brauchst den Hook (und zwar die neueste Version) was natürlich bedeutet, das die Map nicht in der History-Edition funktionieren wird.

mundn
#3
17.11.2018 15:56
Beiträge: 83

Ich denke ich benutze erstere Version.
Heißt nicht synchron, dass auch globale Variablen nicht synchron verändert werden können? Oder ist ein klassischer Desync beim Aufruf gemeint?

(edit)
Mit dem S5hook hab ich noch nicht gearbeitet. Warum klappt das bei der neueren Version nicht? (was macht das S5Hook überhaupt)

____________________
Scripten bei Master pewe in DEdK Script-Wiki gelernt ich habe.

mcb
#4
17.11.2018 16:12
Beiträge: 1472

Nicht synchron heißt in diesem Fall, das die Funktion nur auf einem der PCs aufgerufen wird, das heißt alles was den Spielstatus verändert führt zu einem Desync. Eine Message zu nutzen ist kein Problem, aber ein Entity zu erzeugen oder eines zu bewegen schon. (Es sei denn, du synchronisierst das extra über einen Tribut).

Hook: Der Hook funktioniert, in dem der assembler code von Siedler geändert wird. Da aber die exe für die History-Edition neu kompiliert wurde ist dieser assembler code vollkommen anders und der Hook müsste dafür praktisch neu geschrieben werden.

Dieser Beitrag wurde von mcb am 17.11.2018 um 16:20 editiert.

warrior1024
#5
18.11.2018 11:24
Beiträge: 345

Alternativ könntest du auch abfragen, ob die Fähigkeit auf Cooldown ist, dann musst du nichts synchronisieren und auch nicht den S5Hook verwenden.
Wenn ich http://www.siedler-games.de/si...d=utilfunctions:useheroability richtig lese, müsste die richtige Abfrage

Logic.HeroGetAbilityRechargeTime( _erecId, Abilities.AbilityCircularAttack) ~= 0

sein.

____________________
"Banken machen keine Fehlentscheidungen! Haben Euch das Eure Eltern nicht beigebracht?"
- Bankier Samael Silren, Enderal

mcb
#6
19.11.2018 16:02
Beiträge: 1472

Das hat nur das kleine Problem, das die Fähigkeiten auch auf Cooldown gehen, wenn der Held stirbt. Ist zwar nicht unmöglich zu lösen, aber etwas komplizierter als nur die eine Abfrage.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum