Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT?

Posted By: CocaCola

Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/19/14 15:27

In meinem Player Code hab ich:
Code:
c_trace(player.x,your.x,IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT);


und auf eine Tür:
Code:
function shoot_event() 
{
  while (event_type == EVENT_SHOOT) 
  {
    {
               set (scanning_txt, VISIBLE);
               wait (1);
       }
       reset (scanning_txt, VISIBLE);
  }
}
action my_entity() 
{
//  my.ENABLE_SHOOT = ON;
  my.emask |= ENABLE_SHOOT;
  my.event = shoot_event;
}


ich dachte wenn ich die Tür sehe, wird der Text angezeigt
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/19/14 15:32

Bitte benutz Code - Tags, danke ( hab die mal ergänzt ).

Auf keinen Fall (!) die while ins Event. Vllt solltest Du Dir mal
Code:
c_scan

oder
Code:
vec_dist

ansehen.

Dieses tut zeigt Dir, wie ein
Code:
c_trace

aussehen sollte.
http://www.opserver.de/ubb7/ubbthreads.php?ubb=showflat&Number=421831#Post421831

Beispiel eines Events ( Entity nach SHOOT's entfernen ):
Code:
#define health skill100

action myPlayer(){
   ..
   ...
   my.group = 1;   // vorm c_trace bietet sich c_ignore an
   player   = me;
   ...
   ..
}

void _event_from_me(){
   if (event_type == EVENT_SHOOT) if (you) if (you == player){
      my.health -= 25; // vom Spieler getroffen?
   }
}

action MyEntity_WED(){
   my.emask |= ENABLE_SHOOT;
   my.event  = _event_from_me;
   my.health = 100;
   while (my.health) wait (1);
   wait (1);
   ptr_remove (me);
}



Info ( ähnliches Thema : Türen ):
http://www.opserver.de/ubb7/ubbthreads.php?ubb=showflat&Number=404132

MfG
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/19/14 18:36

Code:
vec_dist

Werde ich noch nutzen und mit
Code:
c_scan

hab ichs schon probiert das klappt auch ganz gut, ich kann auch den Sichtwinkel einstellen aber leider geht die funktion auch durch Wände und ich will die Tür nur öffnen wenn ich sie sehe.
Posted By: Uhrwerk

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/19/14 19:41

Und da kommt dann c_trace in Spiel... =)
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/20/14 11:06

Code:
c_trace

scheint keine Wirkung zu haben. warum?
Code:
var  scanning;
TEXT* scanning_txt =
{
       string("[E] druecken]");
}

function got_scanned()
{
//scanning= c_trace (player.x,my.x,IGNORE_ME|IGNORE_PASSABLE);
       while (event_type == EVENT_SCAN && scanning=1)
       {
 set (scanning_txt, VISIBLE);
               wait (1);}
       reset (scanning_txt, VISIBLE);
}

action my_entity() // attach this action to your entities
{
scanning= c_trace (player.x,my.x,IGNORE_ME|IGNORE_PASSABLE);
       my.emask |= ENABLE_SCAN; // make the entity sensitive to scanning
       my.event = got_scanned;
}

Ich kann immernoch aus dem nebenzimmer die tür aktivieren obwol ne Wand zwischen ist und ich die Tür nicht sehe frown
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/20/14 16:08

Ich gehe davon aus, das Du das hier gelesen hast ja ?
http://www.opserver.de/ubb7/ubbthreads.php?ubb=showflat&Number=421831#Post421831
Denn dort sieht man ( im getesteten Beispiel ), wie man die Vektoren zum Trace'n ausrichtet, was nicht unerheblich für einen erfolgreichen Trace ist.

Des weiteren, warum fragst Du wies geht, ignorierst dann aber alle Ratschläge? Die While ist immer noch im Event. Irgendwie kommt man sich da leicht v* vor...sorry
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/20/14 17:39

Deshalb habe ich den Wert extern in eine Variable ausgelegt. Ich hab auch versucht die Funktion als If Schleife zu schreiben aber wenn ich das richtig verstehe wird die If Schleife nur 1 mal beim Start vom Entety aufgerufen und das was ich geschrieben habe schien mir irgendwie logisch aber es funktioniert eben nicht
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 08:23

Du hast ja das geschrieben:
Code:
void boxerplayer_ctrace(){
	VECTOR trace_target;
   var scale = 150;      
   vec_for_angle (trace_target,vector(my.pan,my.tilt,my.roll));
   vec_scale     (trace_target,scale);
   vec_add       (trace_target,vector(my.x,my.y,my.z)); 
   c_ignore (1, 0); 
   trace_mode = IGNORE_PASSABLE | USE_BOX| SCAN_TEXTURE |IGNORE_SPRITES | IGNORE_ME;
   c_trace(my.x,trace_target, trace_mode);
   if(you) if(you.id == id_boxerenemy) {
   	you.health -= 25;
   }


aber bei c_trace steht als ziel Element der VECTOR trace_target, wie kann das sein? wird das Ergebniss von c_trace in den Vector kopiert? Ich dachte da muss z.B. Ein Modell stehen wie BoxerEnemy. Und die C_trace steht einfach nur so im Text, was für ein Ergebniss liefert denn die Zeile und wohin? Und Da ja die Funktion in BoxerPlayer in einer while-Schleife aufgerufen wird nehme ich an, dass das dan geht aber mit meiner Variablen nicht? Tut mir leid, dass das so läuft aber ich wäre für weitere Hilfe Dankbar.
Posted By: LemmyTheSlayer

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 09:54

Quote:
wird die If Schleife nur 1 mal beim Start vom Entety aufgerufen

Siehe dazu http://www.if-schleife.de/

Die Antworten auf deine Fragen stehen übrigens alle im Handbuch. Vielleicht solltest du es mal lesen. Das soll helfen.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 12:05

...ich hab Vector mit var vertauscht...
kann das sein, dass das so funktioniert: c_trace prüft ob ein Entity zwischen my.x und trace_target (die Armlänge), welches nicht zur Gruppe 1 gehört, ist. Das Resultat wird in die nächste Zeile übergeben
Code:
if(you) if(you.id == id_boxerenemy)

Und
Code:
you

ist ein entity nicht aus Gruppe 1. Würde passieren, wenn ich nach der c_trace anweisung irgend eine andere codezeile stehen haben würde? Geht dan das Ergebniss verloren? Kann ich das in eine Variable speichern? smile
Posted By: Abarudra

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 12:56

Kleiner Auszug aus dem Online Handbuch

Code:
// trace 200 units in direction the my entity is facing
c_trace(my.x,vec_rotate(vector(200,0,0),my.pan),IGNORE_ME|IGNORE_PASSABLE|ACTIVATE_SHOOT|IGNORE_CONTENT);



Wenn du diese Zeile in den Code deines Players hinzufügst brauchst du nur noch in der event_function der Tür das EVENT_SHOOT abfragen.

c_trace kann man sich in etwa so vorstellen. Es wird ein "Strahl" vom ersten Vektor zum zweiten Vektor geschickt. Trifft er auf diesem Weg auf ein Hindernis (z.B Block oder Entity) liefert er zum einen je nach Einstellung verschiedene Informationen zurück an die funktion die ihn aufgerufen hat (Distanz zum Hindernis, Treffervektor, Pointer der getroffenen Entity, uvm.), zum anderen löst er in der getroffenen Entity z.B das event_shoot aus.
Das war jetzt sehr laienhaft erklärt, wenn ich Fehler drin haben sollte bitte korrigiert mich.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 12:56

Das mit der Variable brauche ich dann doch nicht, ich glaub das war wieder ne doofe Frage...Sorry
Posted By: Abarudra

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/21/14 13:36

Ich weis jetzt leider nicht welche Variable du genau meinst.
Wenn du folgendes schreibst
Code:
var test = c_trace(...


dann wird in test die Distanz zum getroffenen Objekt gespeichert oder eben 0 wenn nichts getroffen wurde.
Das sollte aber hier nicht notwendig sein.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 07:53

Jetzt weiß ichs mit Sicherheit...sorry hab nicht gesehen, dass da schon posts auf Seite 2 sind, bin deshalb nicht auf deine Frage eingegangen... Ja den Auszug aus dem Handbuch hab ich schon gelesen, hat aber nicht geklappt, ich probiers jetzt nochmal, vielleicht bin ich ja schlauer geworden. danke für die Antwort!
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 08:35

ich habs ja schon amanfang probiert mit:
Code:
function shoot_event() 
{
  if (event_type == EVENT_SHOOT) //if (my) //if (you == player) 
  {
    
               set (scanning_txt, VISIBLE);
               wait (1);
       }
       else {
       reset (scanning_txt, VISIBLE);
  }
}
action my_entity() 
{
//  my.ENABLE_SHOOT = ON;
  my.emask |= ENABLE_SHOOT;
  my.event = shoot_event;
}

aber irgendwie scheint das doch nicht so einfach zu sein wie ich dachte: funktioniert nicht was mach ich falsch?
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 08:38

Die zeile verstehe ich nicht
Code:
if (event_type == EVENT_SHOOT) if (you) if (you == player)

Posted By: Uhrwerk

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 13:30

Die ist auch bescheuert eingerückt. Zudem ist das meiste davon auskommentiert in Deinem vorherigen Post.
Code:
if (event_type == EVENT_SHOOT) // Wenn event_type EVENT_SHOOT ist.
	if (you) // Wenn you nicht NULL ist.
		if (you == player) // Wenn you und player Pointer auf die gleiche Adresse zeigen.

Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 14:24

Danke aber warum you und nicht my? und wer ist you? alle Gruppen?
Posted By: Uhrwerk

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 14:45

You ist ein pointer auf eine bestimmte Entity.

Das Handbuch hilft: http://www.conitec.net/beta/ayou.htm
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 16:05

Quote:
Die ist auch bescheuert eingerückt.
Sagst Du.

Noch einfacher zu lesen, mir persönlich aber immer zu viel:
Code:
if (event_type == EVENT_SHOOT){ // wurde getroffen?
   if (you){                    // das was mich beschossen hat ist da?
      if (you == player){       // es ist da, ist es der Player?
         my.health -= 25;       // ja, dann zieh mir Energie ab
      }
   }
}

Liegt, wie so oft, immer im Auge des Betrachters.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 16:20

Ich konnte das schon lesen aber selber hatte ich noch nirgens so eine kurzschreibweise gesehen. Übrigens, ich versuche grad deinen ersten post umzu schreiben und zu Testen aber noch keine reaktion oder Rückmeldung von den Versuchen...
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 16:34

Ich hab das eben mal verfasst aber nicht getestet, es ist der c_trace-Aufruf. Er lasert nach vorne, in die Richtung in die der Player bzw. die Cam blickt, in einer per "range" definierten Reichweite. Erfasst er eine Tür ( per my.id = a_door markiert ) würde er dann Deine Tür - Öffnungs - function / void aufrufen. Hilft Dir das? ^^
Code:
#define id skill100
#define a_door 1000
action Door_WED(){ // gib diese Aktion einer Tuer in WED ( oder per ent_create )
   set (my, POLYGON);
   my.id = a_door;
   ...
   ..
   .
}
void interact_with_doors(){
   var    range = 50;
   VECTOR tpos;
   vec_for_angle (tpos, vector (camera.pan, camera.tilt, camera.roll));
   vec_scale     (tpos, range);
   vec_add       (tpos, vector (camera.x,camera.y,camera.z));
   trace_mode = IGNORE_ME | IGNORE_PASSABLE | USE_POLYGON | SCAN_TEXTURE | IGNORE_SPRITES;
   c_ignore (1, 0);
   c_trace  (vector (camera.x, camera.y, camera.z), tpos, trace_mode);
   draw_point3d (target.x, vector (50,50,255), 100, 3); // debug
   if (HIT_TARGET) if (you) if (you.id == a_door){
   	// Tuer gefunden! Ruf hier Deine TuerOeffnungs function / void auf
   }
}
action HeroOrPlayer(){
	my.group = 1; // Beim tracen ignorierte Gruppe
	while (1){
		...
		..
		.
		if (key_space) interact_with_doors(); // Leertaste? dann Tracen!
	   wait (1);
   }
}

Bedenke bitte, falls das alles mal klappt, das Du die function, die die Tür dann öffnet ( z.B. ne Schleife die my.pan addiert oder sowas ) gegen doppeltes Starten / aufrufen absichern solltest. Sowas wie z.B.
Code:
#define moving skill99
...
...
.
{ 
   if (my.moving) return; // bewege mich bereits, abbrechen
   my.moving = 1; // beginne mich zu bewegen
   while (my){
      c_rotate (me, vector(5*time_step, 0, 0), IGNORE_ME|IGNORE_PASSABLE);
      wait (1);
   }
   my.moving = 0; // fertig mit bewegen
}


Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 17:00

JAU! DANKE! blush
Ich musste nur noch
Code:
()

hinter
Code:
interact_with_doors

sätzen aber es funktioniert Besten dank! nur kann ich leider immer noch nicht selbst ständig sowas coden besonders HIT_TARGET wird ja im HB nicht so ausfürlich erklärt.. und noch mal sorry wegen am Anfang ich brauchte erst ein Paar TAGE um es überhaupt lesen zu können
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 17:01

Ja mist sry, habs grad auch gemerkt und oben für weitere Leser ergänzt. ^^

Kein Ding, gerne wieder!
( Aber das was nun da steht, ist so ziemlich das selbe wie aus meinem C-Trace-Beispiel Link grin )

Viel Spaß noch.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 17:13

Ja kannte ich auch schon aber
Code:
HIT_TARGET

ist neu daruf wäre ich nie gekommen. und ich mache eine Schiebe Tür laugh

Wenn das enity eine andere id ha brauch ich doch nur
Code:
if (HIT_TARGET) if (you) if (you.id == a_door){
   	...// Tuer gefunden! Ruf hier Deine TuerOeffnungs function / void auf
   }
if (HIT_TARGET) if (you) if (you.id == b_door){
   	...// Tuer gefunden! Ruf hier Deine TuerOeffnungs function / void auf
   }
.
.
.

schreiben, oder?z.B wenn b_door einen dialog startet
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 17:52

Ich habe per define der Zahl 1000 das Wort a_door gegeben. Dann habe ich den entity.skill100 mit "id" was einfach für identification stehen sollte "maskiert". Genau so kannst Du weitere erstellen. Das dient nur der Leserlichkeit.

Doof
Code:
my.skill100 = 8989; // häh? was?
...
...
if (you.skill100 == 8989) blabla(); // was soll das bedeuten? mhhh...



Leserlich, toll und bildhübsch
Code:
#define wasbinich skill100
#define zuckerwatte 8989
...
...
my.wasbinich = zuckerwatte; // ich bin Zuckerwatte
...
...
if (you.wasbinich == zuckerwatte) blabla(); // ahh, es ist Zuckerwatte



Also müsstest Du in Deinem Fall nun folgendes ergänzen
Code:
#define b_door 1001
...
my.id = b_door;
...



Auch kann man, sehe ich grad, die IF Abfrage so gestalten
Code:
if (HIT_TARGET && you) if (you.id == a_door)

Vorsicht, das hier sollte man nicht tun, wie ich finde
Code:
if (HIT_TARGET && you && you.id == a_door)



edit:
Falls Du diesem "a_door-Prinzip" nenn ich's jetzt mal folgen willst, wäre b_door aber zu umständig. Wenns da um z.B. Schlüssel geht, wäre sowas hier sinnvoller
Code:
#define id        skill100;
#define keynr      skill99;
#define a_door        1000; // markiert eine ent als Tuer
#define id_red_card   1234; // brauch / bin ne rote Karte wa?!
var red_card        =    0; // 1 = Karte eingesammelt, Spieler hat se!
...
//skill1 KeyCardNr 1 // nun hat Skill1 in WED-Prop's eine Bezeichnung
action Door_WED(){
   if (my.skill1 == 1) my.keynr = id_red_card; // fuer mich brauchste ne rote Karte
   ...
}
...
if (HIT_TARGET && you) if (you == a_door){ // Tracehit Tuer
   if (you.keynr == id_red_card && red_card){
      // rote Karte benoetigt? rote Karte vorhanden? dann...
   }
}



Peace
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 18:19

Nein, nicht um Schlüssel. Ich wollte die LeerTaste dan als AktionsTaste nutzen also andere Figuren ansprechen oder in Fahrzeuge einsteigen oder ...
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 18:22

Ich dachte eigentlich das mein ewig langer Beispielpost das nun geklärt haben sollte. Spätestens bei dem "Zuckerwatte" - Beispiel, sollte der Groschen fallen oder? Ob das eine Tür, ein Auto, ein Medikit ist, juckt den c_trace und Deine if-Abfrage nicht wirklich. Also ja, das geht, und ist eine gute Idee. So kannst Du quasi interact_with_doors zu "interact_with_all" machen.
Code:
if (HIT_TARGET && you){
   if (you.id == id_car){     // trace hit car
   }
   if (you.id == id_medikit){ // trace hit medikit
   }
   ...
   ..
   .
}


usw.
Posted By: Uhrwerk

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 19:12

Originally Posted By: rayp
Liegt, wie so oft, immer im Auge des Betrachters.
Leider nicht. Falsch eingerückter Code wird immer wieder misinterpretiert. So wäre es beispielsweise deutlich übersichtlicher.
Code:
if ((event_type == EVENT_SHOOT) && (you == player))
   my.health -= 25;


Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/22/14 19:19

Ja, aber eben nicht von allen, somit im Auge des Betrachters.
Gut das es nun geklärt ist, was am einfachsten zu lesen ist. Denn das war das wichtigste in diesem Thread. Die Goldwaagen laufen heute wieder heiß

edit:
you auf != null vor you == player zu checken macht natürlich nur Sinn, wenn man noch z.B. if (you.id... - Kram in einer if nutzen will, das stimmt wohl.

edit2:
Falls Du, Coca, ACTIVATE_SHOOT nutzt, brauchst Du logischerweise HIT_TARGET und .id nicht mehr. Könntest ja im EVENT_SHOOT reagieren.
Posted By: CocaCola

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/23/14 16:14

Ja es ist mir auch endlich eingeleuchtet, die Beispiele sind würklich gut, ich bin dann fürs erste versorgt DANKE! Mit SHOOT hatte ich meine Probleme, es hat irgendwie nicht geklappt, deshalb bleib ich erstmal bei HIT.
Posted By: rayp

Re: Will Tür aufmachen, wenn ich sie "sehe"?EVENT_SHOOT? - 03/26/14 22:45

For other newcomers:
http://www.opserver.de/ubb7/ubbthreads.php?ubb=showflat&Number=439108#Post439108

Greets
© 2024 lite-C Forums