Alter : 29 Ort : Deutschland/Frankfurt Main Anmeldedatum : 07.07.10
Thema: Unzerstörbarer NPC Do Jul 08, 2010 10:31 pm
Wie setzt man am esten um, dass ein NPC nicht verbrennt, oder stirbt?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Unzerstörbarer NPC Do Jul 08, 2010 10:48 pm
Ganz neu beim Programmieren und schon wilst du dich an Effekte wagen ?
Ihn nicht anbrennen zu lassen geht noch relativ leicht. Wenn ein Objekt entzündet wird, wird darin die Funktion Incineration() von der Engine aufgerufen. In diesem Aufruf kannst du das Objekt ganz einfach wieder löschen.
Code:
protected func Incineration() { Extinguish(); }
Damit es keinen Schaden erhält, müssen aber schon schwerere Geschütze aufgefahren werden. Zuerst sollte es von Objekten nicht getroffen werden. Sobald man zB einen Stein auf einen Clonk wirft, wird im Clonk QueryCatchBlow() aufgerufen. Wenn diese Funktion einen Wert != 0 zurückgibt, wird er nicht getroffen.
Code:
protected func QueryCatchBlow() { return true; }
Weiterhin sollte er nicht von Explosionen verschleudert werden. Wird ein Objekt von einer Explosion getroffen, wird OnShockwaveHit() aufgerufen. Gibt diese Funktion einen Wert != 0 zurück, bleibt es von der Explosion unbehelligt.
Code:
public func OnShockwaveHit() { return true; }
Alternativ gehts auch über Effekte. Siehe dazu den Bild-Link in meiner Signatur. Du kannst dem NPC einen Unverwundbarkeitseffekt anhängen und alles abblocken (Schaden, Feuer, wegschleudern), wenn es diesen Effekt hat. Ich poste dir hier einfach mal den Script. Um ihn vollkommen zu verstehen, musst du dich wohl durchs Tutorial wühlen. x)
Optimal wäre es noch ein paar globale Funktionen auszuhebeln, aber das sollte man bestenfalls unterlassen
Dark Oberst
Alter : 29 Ort : Deutschland/Frankfurt Main Anmeldedatum : 07.07.10
Thema: Re: Unzerstörbarer NPC Do Jul 08, 2010 11:01 pm
ich machs erstmal ohne effekte und setz mich ans tut
Dark Oberst
Alter : 29 Ort : Deutschland/Frankfurt Main Anmeldedatum : 07.07.10
Thema: Re: Unzerstörbarer NPC Do Jul 08, 2010 11:11 pm
das
Code:
protected func Incineration() { Extinguish(); }
geht bei mir nicht. Ich habe den Code in die Script.c vom Szerario kopiert. dann hab ich einfach mal den Spieler per Brandbombe angezünded, aus dem Feuer gelaufen und er ist weiter gebrannt. was mache ich falsch?
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Unzerstörbarer NPC Do Jul 08, 2010 11:16 pm
Die Funktion muss im anbrennenden Objekt sein.
Gamer Staatsrat
Alter : 28 Ort : In einem kleinen Dorf in Unterfranken (Bayern) Anmeldedatum : 10.02.09
Diese Methode ist aber nicht kompatibel mit vielen Dingen... manches funktioniert dann nicht korrekt. Das Lebewesenradar zum Beispiel wird dann wimni nicht mehr auf den unverwundbaren Clonk reagieren, und andere Dinge, die auf nahe Lebewesen ansprechen sollen, auch nicht. Deshalb sind imo die Methoden mit Effekt und die mit CatchBlow in den meisten Fällen doch besser.
Es gibt auch eine andere Methode, die nicht dokumentiert ist und genau auf diesen Fall passt: Jedes Objekt hat einen "Layer", in welchem es mit anderen Objekten interagieren kann. Standardmäßig sind alle Objekte im Standardlayer "0". Aus unerfindlichen Gründen sind die Namen aller Layer Verweise auf Objektexemplare, oder 0. Wenn du also willst, dass ein Objekt nicht von Feuer angesteckt wird, nicht von Objekten getroffen und nicht einem von Explosionen betroffen, setze es mit obj->SetObjectLayer(obj) in den Layer, dessen Bezeichnung das Objekt selber ist. mit Materialien würde der NPC genauso interagieren wie sonst, also zB in Lava durchaus auch verbrennen. Vorsicht, viele Schadenzufüger wie Hazard (da bin ich mir nicht ganz sicher) und Eke ignorieren das Layersystem, aber wenn du solche Packs nicht benutzt, werden die die Layer sicher zufriedenstellen.