World of Gothic Archiv > Editing
NPC per Skript töten
Seite 1 von 1  1 
02.10.2003, 21:20 #1
Makador
Beiträge: 431
NPC per Skript töten
Also folgendes Problem ergibt sich:

Ich habe einen NPC, der nur einen Hp hat und meinem Helden noch sterbend den Auftrag gibt einen Gegenstand zu überbringen. Aber nun soll er am Ende das Gesprächs auch noch sterben.

Per Paramaterübergabe:
Kj_2610_Sandro.attributes[ATR_HITPOINTS] = 0;
will es ja leider schonmal nicht funzen, weil er die Instanz irgendwie nicht findet.

Kennt jmd. von euch eine Möglichkeit dem NPC irgendwie Schaden zuzufügen oder die Hps auf 0 zu setzen? Hab alle Skripts abgesucht und nichts ähnliches gefunden.
02.10.2003, 21:41 #2
Makador
Beiträge: 431

Habs hinbekommen:

B_RaiseAttribute (ATR_HITPOINTS, -1);

:D
02.10.2003, 22:11 #3
Makador
Beiträge: 431

Weiteres Problem:

code\:

[...]
AI_StopProcessInfos ( self );
B_RaiseAttribute (ATR_HITPOINTS, -1);
};



Er ruft leider zuerst die zweite Funktion auf, wodurch der NPC getötet wird, bevor der Dialog beendet wird. Kann ich das irgendwie ändern?

Mir fällt gerade ein, dass gleiche passiert sogar beim Tutorial. Der NPC zieht dort auch schon die Waffe bevor der Dialog beendet wird und steckt sie dann direkt wieder weg.
02.10.2003, 23:48 #4
bollerwagen
Beiträge: 49

schon mal versucht ein Wait dazwischen zu schieben?
03.10.2003, 08:43 #5
Makador
Beiträge: 431

code\:

FUNC VOID DIA_Sandro_Dieing_Kill() {

AI_StopProcessInfos (self);
AI_Wait (self, 2);
B_RaiseAttribute (ATR_HITPOINTS, -1);

};



Es passiert folgendes:
Er wartet 2 Sekunden, beendet das Gespräch und dass wars.

:(
03.10.2003, 13:13 #6
Cool Moe Di
Beiträge: 120

Hi,

schonmal versucht, den Npc in einer Funktion zu töten, die du aufrufst? Gothic führt dann die Funktion parallel aus, d.h. es könnte zuerst den Dialog beenden.

ciao
Moe

PS: Töten geht auch einfacher mit
B_KillNpc (Kdf_400_Rodriguez);
03.10.2003, 13:56 #7
GülleMüller
Beiträge: 472

High,
scheint fast so, als ob in den Dias nur AI_ Funktionen in der "richtigen" Reihenfolge abgehandelt werden. Irgendwo gab es schonmal ein Thema darüber... werd bei Gelegenheit mal danach suchen.
(Jaja, Moe, ich sollte mehr scripten ;))

[EDIT]
Autsch... hab Schwachsinn verzapft...
Also: Bisher hatte nur AI_StartState() das Problem gelöst. Ergo, erstelle dir nen neuen TA, der einfach den NPC tötet. Du solltest dazu alle Wahrnehmungen ausschalten.
Die Dialogfunk sieht dann so aus:
code\:
func void DIA_Sonstwas_KILL() {
AI_StopProcessInfos(self);
AI_StartState(self, ZS_Tötemich, 0 , "");
};


Was besseres ist mir auf die Schnelle net eingefallen.
[/EDIT]

Axo:
quote:
Kj_2610_Sandro.attributes[ATR_HITPOINTS] = 0;


Das kann auch nicht gehen, da der Name nur anhand eines Instanzwertes (= ID?) gespeichert wird. Also ein Integer.
Mittels Hlp_GetNpc[NPC_INSTANCE_NAME]); bekommst du den C_NPC zurück, worauf du deine Wertzuweisungen anwenden kannst.

gl
GüMü
04.10.2003, 09:28 #8
Makador
Beiträge: 431

Danke, mit dem AI_StartState funktioniert es einwandfrei! :)
Seite 1 von 1  1