Not logged inClonkspot Forum
Forum Home Help Search Register Login
Up Topic Deutsch / Hilfestellung / [Gelöst]Zugriff auf Items von toten Clonk
- - By Serpens66 (More than 200 posts.) Date 03.01.2015 10:22
Hey,

wie kann ich den Inhalt eines sterbenden Clonks erfassen?

Ziel ist es, dass beim Tod des Clonks ein Leichenobjekt erzeugt wird, welches dann die Items enthält und die man der Leiche dann eben entnehmen kann.

Nur leider verliert ein Clonk beim Tod sofort alle Objekte. Dies wird offensichtlich schon vor dem Aufruf der "Death()" Funktion gemacht, denn wenn ich am Anfang der Deathfunktion auf Contents zugreifen will, hat der Clonk keinen Inhalt mehr.
Wisst ihr, wie ich das ändern/dem zuvorkommen kann?
Parent - - By Sven2 (More than 500 posts.) Date 03.01.2015 10:41
Effekte kriegen vorher Remove-Calls mit entsprechenden Parametern. Die kann man dafuer benutzen.

Und in OpenClonk wurde es natuerlich genau aus diesem Grund umgedreht (erst Death-Callback, dann Ejection).
Parent - By Zapper (More than 500 posts.) Date 03.01.2015 12:01

>Und in OpenClonk wurde es natuerlich genau aus diesem Grund umgedreht (erst Death-Callback, dann Ejection).


.. the more you know!
Parent - - By Serpens66 (More than 200 posts.) Date 03.01.2015 15:13
Wo finde ich diese Effekte? Bzw. wie kann ich das Ausleeren des Toten nun verhindern?
Parent - - By ClonkGeist (More than 50 posts.) Date 03.01.2015 15:59
In Initialize des Clonks setzt du einfach einen Effekt per AddEffect auf den Clonk. Wenn der Effekt gestoppt wird, prüfst du auf iReason == 4, erstellst das Leichenobjekt und legst die Items dort rein:

#appendto CLNK

protected func Initialize() {
  AddEffect("FakeDeath", this, 1, 0, this);
 
  return _inherited(...);
}

protected func FxFakeDeathStop(object pTarget, int iNr, int iReason) {
  if(iReason == 4) {
    //Leichenobjekt erstellen und Items reinverschieben
  }
}
Parent - - By Zapper (More than 500 posts.) Date 03.01.2015 16:02 Edited 03.01.2015 16:05
Am besten aber nicht in Initialize sondern in Construction oder Recruitment :)

PS: und wenn man in Fx*Stop nicht zwingend auf iReason prüfen will, sollte man den temp-Aufruf abfangen!
Parent - - By ClonkGeist (More than 50 posts.) Date 03.01.2015 16:24
Wo liegt der Vorteil darin, die Effekte in Construction/Recruitment zu erstellen? CMC und Hazard machen das zumindest auch in Initialize.
Parent - By Zapper (More than 500 posts.) Date 03.01.2015 21:22
Construction wird einmalig aufgerufen, wenn das Objekt erzeugt wird.
Initialize wird jedes Mal aufgerufen, wenn das Objekt vollständig gebaut ist.
Recruitment wird immer aufgerufen, wenn der Clonk einer Crew hinzugefügt wird.

Wenn du also zB einen magischen Schrumpftrank benutzt, der den Clonk kurzzeitig schrumpft, wird jedes Mal, wenn er wieder groß wird, neu Initialize aufgerufen. Und jedes Mal hast du dann einen neuen Effekt am Clonk.

PS: von den drei Möglichkeiten scheint mir Initialize die schlechteste Wahl :)
Parent - By Serpens66 (More than 200 posts.) Date 03.01.2015 16:29
Danke Clonkgeist,Zapper und Sven2 :)

Hat wunderbar geklappt :) :)

(Ich vermute dass Zapper nur vorsichtshalber schreibt, dass man es lieber nicht im Initialize macht, weil das oft zu Problemen führen kann, je nach dem was man dort einfügt. Ob es hier auch Probleme verursachen könnte weiß ich nicht, aber es schadet ja nicht es kurz nach Initialize auszuführen)
Parent - - By alex (More than 200 posts.) Date 03.01.2015 16:00
Soweit ich weiß wird, bevor der Clonk gelöscht wird, folgende Funktion aufgerufen:

OnClonkDeath(object pClonk, int iKilledBy)

Vermutlich könnte man dort noch das Inventar retten
Parent - By Serpens66 (More than 200 posts.) Date 03.01.2015 16:06
danke für die Antwort.
Allerdings steht der GameCall von OnClonkDeath in der Death Funktion. Deshalb gehe ich mal davon aus, dass dies auch erst nach der Entleerung aufgerufen wird. Also werde ich es wohl mit den Effekten machen müssen.
Up Topic Deutsch / Hilfestellung / [Gelöst]Zugriff auf Items von toten Clonk

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill