2 registered members (Akow, tomaslolo),
1,536
guests, and 12
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
hilfe, while-schleife von entities wird beendet
#189375
03/18/08 21:10
03/18/08 21:10
|
Joined: Sep 2003
Posts: 271 Germany
Chris3D
OP
Member
|
OP
Member
Joined: Sep 2003
Posts: 271
Germany
|
Hi, Ich habe folgende Funktion: Code:
function good_crystals() { VECTOR rotator; var my_player; set(my,PASSABLE,TRANSLUCENT); my.scale_x=0; my.scale_y=0; my.scale_z=0; my.material=mat_crystal; my.alpha=75; vec_set(rotator,vector(random(3),random(2),random(1))); while(!p1_vehicle){wait(1);}
while(1) { if(my.scale_x<5) { my.scale_x+=0.1; my.scale_y+=0.1; my.scale_z+=0.1; } ent_bonerotate(my,"bone",rotator); ent_bonerotate(my,"bone1",vector(random(0.5)+1,0,0)); if(del_item==0){ if(vec_dist(my.x,p1_vehicle.x)<150){my_player=1;break;} if(vec_dist(my.x,p2_vehicle.x)<150){my_player=2;break;} } if(del_item==1){ptr_remove(me);return;} wait(1); } ent_create("crystal_exp.mdl",vector(1,0,my.z),crystal_explosion); ptr_remove(me); weapon_menu(my_player,0); } .... function entscreate_startup() { wait(-3); ent_create("crystal.mdl",vector(map.x+5600,map.y+400,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x+5600,map.y-400,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x+5100,map.y,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x-5600,map.y+400,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x-5600,map.y-400,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x-5100,map.y,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x+400,map.y+5600,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x-400,map.y+5600,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x,map.y+5100,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x+400,map.y-5600,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x-400,map.y-5600,map.z+2000),good_crystals); ent_create("crystal.mdl",vector(map.x,map.y-5100,map.z+2000),good_crystals); }
Ok, das Problem ist, dass mit C-Lite die while schleife(siehe oben) unterbrochen wird, und zwar für alle entity! Das war beim alten C-Script (wdl) nicht so. Ich denke mal das liegt daran dass der my pointer in C-Lite global ist. Hat jemand eine Idee wie ich mit C-Lite jedes entity unabhängig mache, ohne dass ich lauter einzele pointer erstellen muss? Gruß Chris
|
|
|
Re: Help, the new pointer style
[Re: Chris3D]
#189376
03/18/08 21:14
03/18/08 21:14
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Was ist p1_vehicle denn? Der Code nach ent_create("crystal_exp.mdl",vector(1,0,my.z),crystal_explosion); kann übrigens niemals erreicht werden.
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Help, the new pointer style
[Re: Uhrwerk]
#189377
03/18/08 21:16
03/18/08 21:16
|
Joined: Sep 2003
Posts: 271 Germany
Chris3D
OP
Member
|
OP
Member
Joined: Sep 2003
Posts: 271
Germany
|
p1_vehicle ist ein ENTITY* pointer, und der code nach dem create wird erreicht, glaub mir. (weapon_menu(my_player,0); wird ausgeführt)
Der Code funktioniert, das einzige was mich stört ist die tatsache, dass wenn bei einem entity mit der function good_crystal() the while-schleife per break; beendet wird, passiert das auch bei allen anderen entities mit dieser funktion.
Last edited by Chris3D; 03/18/08 21:20.
|
|
|
Re: Help, the new pointer style
[Re: Chris3D]
#189379
03/18/08 21:29
03/18/08 21:29
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Sorry, hatte die breaks übersehen. Du hast natürlich recht.
Bist Du sicher, dass alle die while schleife beenden? Vielleicht einfach mal ein printf("Jo"); vor die breaks setzen um da sicher zu gehen?
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Help, the new pointer style
[Re: Uhrwerk]
#189380
03/19/08 13:46
03/19/08 13:46
|
Joined: Sep 2003
Posts: 271 Germany
Chris3D
OP
Member
|
OP
Member
Joined: Sep 2003
Posts: 271
Germany
|
ja ich habs ausprobiert, aber die if-funktion mit dem break wird wirklich nur einmal ausgeführt, wenn sie für das entsprechende entity zutrifft. d.h. die anderen entities mit dieser funktion müssten eigentlich noch in der while schleife sein, aber sie trotzdem stoppen, das ist echt strange.
Ich kann ja mal beschreiben was passiert: Also der player p1_vehicle fährt auf einen crystal zu, solang er noch keinen berührt hat (vec_dist(my.x,p1_vehicle.x)<150) drehen sich alle crystals (ent_bonerotate). Sobald er nun in der richtigen Reichweite ist und die if-funktion erfüllt, beendet er die while-schleife und macht mit dem code weiter. Die anderen dagegen hören einfach auf sich zu drehen und es ist nicht mehr möglich die if-funktion für diese auszuführen. Als würden sie einfach mitten in der while-schleife stehen bleiben.
Du hattest also damit recht, dass sie noch in der while schleife sind aber wahrscheinlich verlieren sie den my pointer und können deswegen nicht mehr die funktionen richtig ausführen oder?
Edit: Ich habs mal mit einem lokalen ENTITY* pointer versucht, aber es ändert sich nichts, so ein [censored]
Last edited by Chris3D; 03/19/08 13:55.
|
|
|
Re: Help, the new pointer style
[Re: Chris3D]
#189381
03/19/08 14:32
03/19/08 14:32
|
Joined: Sep 2003
Posts: 271 Germany
Chris3D
OP
Member
|
OP
Member
Joined: Sep 2003
Posts: 271
Germany
|
Ok ich habs nochmal abgecheckt und herausgefunden, dass alle anderen gleichen funktionen beendet werden und nur noch die eine übrig bleibt. Dass sollte aber eigentlich nur passieren, wenn proc_kill(4); benutzt wird, was übrigens auch nicht mehr richtig funktioniert.
Last edited by Chris3D; 03/19/08 14:33.
|
|
|
Re: Help, the new pointer style
[Re: Chris3D]
#189382
03/19/08 15:00
03/19/08 15:00
|
Joined: Jul 2007
Posts: 959 nl
flits
User
|
User
Joined: Jul 2007
Posts: 959
nl
|
you could so something then like var wloop = 1; while(wloop == 1) {...
if(vec_dist(my.x,p1_vehicle.x)<150){my_player=1;wloop = 0;}
here it only breaks the right while loops and proc_kill maby try to reinstal ore somthing
"empty"
|
|
|
Re: Help, the new pointer style
[Re: Chris3D]
#189384
03/19/08 19:02
03/19/08 19:02
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
The only other thing that comes to my mind is that del_items becomes somehow 1 and
if(del_item==1){ptr_remove(me);return;}
is executed then. Are the explosions created all at once, when one while loop is breaked?
Always learn from history, to be sure you make the same mistakes again...
|
|
|
|