Haedshot mit extra Kopfentity!

Posted By: DexLoomer

Haedshot mit extra Kopfentity! - 07/05/06 07:49

Hi Leute, hab´ne Frage zu einer Headshot Idee:
Ich möchte ein Entity mit einem Attachscript an den Kopf meines Gegners "kleben", welches bei entsprechendem Treffer diesen Gegner killt.
Bisher funktioniert das anhängen der Entety an den Gegner gut, nur kann ich sie nicht sensibel für Schüsse machen. Die Entity steht auf passable da sie sonst den Gegner stopt!
Frage: Kann ich obwohl die Entity auf Passable steht, sie sensible für meine Template6 Waffen machen?
Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/05/06 08:15

Verwende Push-Werte. Der Kopf hat einen niedrigeren Push-Wert als der Körper, die Kugel hingegen verwendet keinen Push. Damit könnte es gehen.
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/05/06 09:09

Danke für den Tip, klappt aber leider noch nicht so richtig, die Kugeln fliegen einfach durch! Muss noch ein bischen testen!
Werde es heute abend weiter ausprobieren. Melde mich wenn ich genaueres weiss ..

Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/05/06 09:52

Wie bewegst du die Kugeln? Falls mit c_move solltest du noch den Parameter "ignore_push" verwenden und den Kugeln einen höheren Push-Wert zuweisen, als Kopf und Körper haben.
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/05/06 18:47

Hi Lord,
derzeit benutze ich leider noch die Template6 für die Waffen! Ich bin im Scripten noch Newbie und arbeite mich erst so langsam, mit Scripten die die Templates ergänzen, ein.
Hier das Headshotscript soweit wie ich es hab:

Code:
   

string Head_entity,<Head_entity.mdl>; //Definiert das eigene MDL-Model

function ent_headshot();
function entity_bewegen();
function headshotkill();

//------------------------------------------

function ent_headshot()
{
ent_create(Head_entity,nullvector,Entity_Bewegen);
}


function entity_bewegen()
{
my.push = 10;
my.passable = on;
while(you) // Solange Hauptentity besteht Schleife ausgeführen
{

my.enable_shoot = on; //Wurde Entity getroffen?
//my.enable_scan = on;
my.event = headshotkill;

my.invisible = off;
vec_set(my.x,you.x);
vec_set(my.pan,you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
wait(1);
}
ent_remove(my); // Löschen der Entity
}



function headshotkill()
{
temp.pan = 360;
temp.tilt = 180;
temp.z = 200;
//scan_entity(my.x, temp);
//if ((result > 0) && (result < 200)) // detected an entity
//{
BEEP();
you._health__003 -= 2000; //KILL!!!
//}
}




Die Funktion ent_headshot() wird von der Action der AIFPS01 aufgerufen. Das geht, der Typ rennt mit einem Würfel am Kopf rum, nur abschießen läßst sich das Ding nicht!
Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/05/06 19:03

Achso, du verwendest die Templates. Mal sehen, ob ich da was zusammenbekomme. In diesem Fall brauchen wir wohl keinen Push-Wert.

Code:
   

string Head_entity,<Head_entity.mdl>; //Definiert das eigene MDL-Model

function ent_headshot();
function entity_bewegen();
function headshotkill();

//------------------------------------------

function ent_headshot()
{
ent_create(Head_entity,nullvector,Entity_Bewegen);
}


function entity_bewegen()
{
proc_late(); //Diese Funktion wird am Ende ausgeführt, nach der erstellenden Entity
my.health = 1; //Pseudowert
my.passable = on; //Passable, damit es nicht an der erstellenden Entity hängt
my.enable_shoot = on; //Ich bin empfänglich für das Shoot-Event
//my.enable_scan = on;
my.event = headshotkill; //Falls ich von dem Shoot-Event getroffen werde, führe mein Event "headshotkill" aus
my.invisible = off; //ich bin sichtbar
while(my.health > 0) // Solange meine Gesundheit größer als 0 ist
{
vec_set(my.x,you.x);
vec_set(my.pan,you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
wait(1);
}
ent_remove(my); // Löschen der Entity
}



function headshotkill()
{
if(event_type == event_shoot) //Falls ich vom Shoot-Event getroffen wurde...
{
my.health -= damage; //...ziehe den Waffenschaden von meinem Leben ab
}
}




Das könnte helfen. Wir geben also dem Kopf einen Pseudolebenspunkt, damit wir eine Bedingung haben, um die While-Schleife beenden zu können.

"my.enable_shoot = on;" muss nur einmal aufgerufen werden, dann ist es gültig, bis wir etwas anderes bestimmen. Es muss also nicht in die While-Schleife.

Die While-Schleife führen wir solange aus, bis der Health-Wert des Kopfes <= 0 ist. Bei einem Lebenspunkt ist das schnell erreicht. Wenn du mehrere Treffer auf den Kopf zulassen möchtest, dann erhöhe einfach den Wert bei "my.health".

Probier es mal aus und schreib, falls es nicht funktioniert.

mfg
Lordi
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/05/06 20:59

Hi Lord,
sorry das es etwas gedauert hat. Leider funktioniert das Script noch nicht, die Box am Kopf lässt alle Schüsse durch! Hab´s überprüft, dass Script kommt nie bis zur headshotkill() Funktion!
Was ich nicht verstehe, denn in meinem Level hab ich Beispielsweise auch Fässer mit einer anderen Action. Auf diese schiess ich mit den selben Waffen und sie fragt ebenfalls my.enable_shoot=on, um die Fässer zum explodieren zu bringen, und das klappt.
Kann es daran liegen, dass die Head_entity erst durch Script erzeugt wird und nicht schon im Level steht??

PS: Die Zeile my.health-=damage; bezieht sich doch auf die Head_entity, oder?
Darunter hab ich noch den Code eingefügt der dann den Gegner killen soll!

Code:
 

string Head_entity,<Head_entity.mdl>; //Definiert das eigene MDL-Model

function ent_headshot();
function entity_bewegen();
function headshotkill();

//------------------------------------------

function ent_headshot()
{
ent_create(Head_entity,nullvector,Entity_Bewegen);
}


function entity_bewegen()
{
proc_late(); //Diese Funktion wird am Ende ausgeführt, nach der erstellenden Entity
my.health = 1; //Pseudowert
my.passable = on; //Passable, damit es nicht an der erstellenden Entity hängt
my.enable_shoot = on; //Ich bin empfänglich für das Shoot-Event
//my.enable_scan = on;
my.event = headshotkill; //Falls ich von dem Shoot-Event getroffen werde, führe mein Event "headshotkill" aus
my.invisible = off; //ich bin sichtbar
while(my.health > 0) // Solange meine Gesundheit größer als 0 ist
{
vec_set(my.x,you.x);
vec_set(my.pan,you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
wait(1);
}
ent_remove(my); // Löschen der Entity
}



function headshotkill()
{
if(event_type == event_shoot) //Falls ich vom Shoot-Event getroffen wurde...
{
my.health -= 100; //...ziehe den Waffenschaden von meinem Leben ab

//Diese Zeilen brauche ich um den Gegner zu Killen!!
temp.pan = 360;
temp.tilt = 180;
temp.z = 200;
my.enable_scan = on;
scan_entity(my.x, temp);
if ((result > 0) && (result < 200)) // detected an entity
{
BEEP(); //Zur Kontrolle!!
you._health__003 -= 2000; //Schaden am Gegner !!!
}

}
}



Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/06/06 04:00

Mir fällt da gerade noch auf, dass der you-Pointer eigentlich nicht auf den dazugehörigen Körper verweist. Das macht er IMO nur in dem Frame, in dem der Kopf erstellt wurde.

Diese Funktion brauchen wir so nicht:

Code:

function ent_headshot()
{
ent_create(Head_entity,nullvector,Entity_Bewegen);
}



Statt dessen schreiben wir die ent_create-Zeile in die aiFPS01-Action und zwar vor der letzten Zeile:

Code:


my.handle_ID = handle(my); //erstelle eine unique Nummer und speicher sie in Skill70
you = ent_create(Head_entity, my.x, Entity_Bewegen); //erstelle den Kopf und weise ihm den Pointer "You" zu
you.handle_ID = my.handle_ID; //übergebe die unique Nummer an den erstellten Kopf


// Call the update loop
AIFPS01_Guard_Update();



Die "handle_ID" definieren wir am Anfang des Skriptes.

Code:

DEFINE handle_ID, skill70 //Skill70 könnte noch frei sein, ich kenne mich bei den Templates nicht so aus.



Jetzt modifizieren wir noch die "entity_bewegen"-Funktion
Code:

function entity_bewegen()
{
proc_late(); //Diese Funktion wird am Ende ausgeführt, nach der erstellenden Entity
my.health = 1; //Pseudowert
my.passable = off; //Falls passable Objekte vom c_trace ignoriert werden (was, glaube ich, in den Templates der Fall ist)
my.enable_shoot = on; //Ich bin empfänglich für das Shoot-Event
//my.enable_scan = on;
my.event = headshotkill; //Falls ich von dem Shoot-Event getroffen werde, führe mein Event "headshotkill" aus
my.invisible = off; //ich bin sichtbar
while(my.health > 0) // Solange meine Gesundheit größer als 0 ist
{
you = ptr_for_handle(my.handle_ID); // Wir ordnen dem You-Pointer das entsprechende Parent-Modell zu
vec_set(my.x,you.x);
vec_set(my.pan,you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
wait(1);
}
ent_remove(my); // Löschen der Entity
}



Versuche es mal mit diesen Änderungen. Ich glaube, dass das Passable-Flag daran schuld war, dass es nicht ging.
Bevor du die ganzen Handle-Änderungen durchführst kannst du ja mal versuchen nur das Passable-Flag der Head-Entity auf "off" zu stellen.
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/06/06 17:46

Hi, hab gerade die erst die Änderungen ausprobiert. (Ich komme immer erst abends nach der Arbeit an meinen Rechner!) Leider bekomme ich einige Errors ..

1. Im AIFPS01-Script muss ich zusätzlich noch den String
string Head_entity,<Head_entity.mdl>;
angeben, der unten benutzt wird. Ist erledigt!

2. Ich bekomme noch die Fehlermeldung "Parameter unknown entity_bewegen" aus der Zeile
you=ent_create(Head_entity,my.x,entity_bewegen);
Hab ich noch nicht gelöst. Das bezieht sich doch auf die Funktion aus dem Headshotscript. Kann man von dem AIFPS01 nicht auf Funktionen des Headshotscrips zugreifen?

Ausserdem habe ich zuvor mit verschiedenen Passable-Einstellungen getestet. Aber ohne Erfolg!

Soweit bin ich ersteinmal
Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/06/06 18:20

Hmhm, schreib mal am Anfang deines Scripts "function entity_bewegen();". Damit definierst du diese Funktion als Prototyp und sie ist bekannt.
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/06/06 18:30

OK, jetzt bekomme ich nach start des Levels die Meldung:

Malfunction W1501
Empty pointer in entity_bewegen: vec_set(my.x,you.x)
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/06/06 22:15

Nachtrag:
Hab mal auskommentiert um zu sehen ob die Kopfentity sich abschiessen lässt,
selbst wenn sie sich nicht bewegt.
Code:
 function entity_bewegen()
{
proc_late(); //Diese Funktion wird am Ende ausgeführt, nach der erstellenden Entity
my.health = 1; //Pseudowert
my.passable = off; //Falls passable Objekte vom c_trace ignoriert werden (was, glaube ich, in den Templates der Fall ist)
my.enable_shoot = on; //Ich bin empfänglich für das Shoot-Event
//my.enable_scan = on;
my.event = headshotkill; //Falls ich von dem Shoot-Event getroffen werde, führe mein Event "headshotkill" aus
my.invisible = off; //ich bin sichtbar
while(my.health > 0) // Solange meine Gesundheit größer als 0 ist
{ /*
you = ptr_for_handle(my.handle_ID); // Wir ordnen dem You-Pointer das entsprechende Parent-Modell zu
vec_set(my.x, you.x);
vec_set(my.pan, you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
*/

wait(1);
}
ent_remove(my); // Löschen der Entity
}



Aber auch hier gehen die Schüsse durch!
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/07/06 08:57

HI,
bin noch mal zu meinem erten Script zurückgekehrt und hab das Problem mit den Schüssen gelösst!! Sie treffen jetzt !!
Hab noch ein Problem mit der Auswirkung des Schadens den ich nur auf ein bestimmten Bereich bzw. nur auf den Gegner beschränken möchte.
Ich bekomme aber immer eine Fehlermeldung vom scan_entity event.
Werde mich übers Wochenende damit beschäftigen und melde mich dann wieder!
Posted By: LordRathan

Re: Haedshot mit extra Kopfentity! - 07/07/06 17:50

Ah, gut, dass du es gelöst hast. Ich wäre noch neugierig, wie du es gemacht hast.
Posted By: DexLoomer

Re: Haedshot mit extra Kopfentity! - 07/10/06 09:16

Hi Lord,
hier der Code (Funktioniert bei mir gut!):


Code:
  

string Head_entity,<Head_entity.mdl>; //Model muss grosszügig gößer als der Kopf sein!

function ent_headshot();
function entity_bewegen();
function headshotkill();

//------------------------------------------

function ent_headshot()
{
ent_create(Head_entity,nullvector,Entity_Bewegen);
}


function entity_bewegen()
{
you.push = 10;
my.polygon = ON;
my.passable = off;
while(you) // Solange Hauptentity besteht Schleife ausgeführen
{
my.enable_shoot = on; //Wurde Entity getroffen?
my.event = headshotkill;

my.invisible = on; // Man soll den Head_entity ja nicht sehen!
vec_set(my.x,you.x);
vec_set(my.pan,you.pan);
my.frame = you.frame; // Koordinieren der Animationen
my.next_frame = you.next_frame; // Koordinieren der Animationen
wait(1);
}
ent_remove(my); // Löschen der Entity
}



function headshotkill()
{ wait(1);

temp.pan = 360;
temp.tilt = 180;
temp.z = 200;
scan_entity (my.x, temp);
if ((result > 0) && (result < 50)) // Feststellen der Trägerentity
{
//BEEP();
you._health__003 -= 2000; //KILL!!!
}
}





Die Funktion ent_headshot rufe ich von der AIFPS direkt vor der Zeile:

Code:
   
// Call the update loop
AIFPS01_Guard_Update();


auf. Was jetzt noch fehlt ist eine Beschänkung auf eine bestimmte Distanze, damit der Sieler es nicht zu leicht hat. Außerdem natürlich eine Beschränkung auf bestimmte Waffen (Snipergewehr usw..)
Das erste Problem ist einfach zu lösen, dass mach ich demnächst. Wie ich das zweite Problem mit der Waffenbeschränkung löse, weiss ich noch nicht. Denn auch hier hab ich die Template-Waffen und wie man die abfragt weiss ich noch nicht.
Falls jemand dies liest und eine Ahnung hat, würde ich mich über ´nen Tip freuen!
© 2024 lite-C Forums