Szerző Téma: Teleport  (Megtekintve 1201 alkalommal)

Teleport
« Dátum: 2014. július 11. - 22:56:24 »
0 Show voters
Üdv.
Van ez a parancs:
 
new slot = 1;
CMD:teleport(playerid,params[])
{
switch(slot)
{
  case 1:    { SetPlayerPos(playerid,4546.3105,-1680.5861,2.5164);
  case 2:    { SetPlayerPos(playerid,4578.4160,-1709.4919,2.4970);
  case 3:    { SetPlayerPos(playerid,4589.8584,-1751.5660,2.5140);
  case 4:    { SetPlayerPos(playerid,4579.4805,-1791.7196,2.5148);
  case 5:    { SetPlayerPos(playerid,4550.1611,-1820.3798,2.4766);
  case 6:    { SetPlayerPos(playerid,4511.6865,-1833.4990,2.4496);
  case 7:    { SetPlayerPos(playerid,4468.5151,-1826.7098,2.5156);
  case 8:    { SetPlayerPos(playerid,4436.7437,-1795.4780,2.4522);
  case 9:    { SetPlayerPos(playerid,4424.8286,-1755.5376,2.4792);
  case 10:    { SetPlayerPos(playerid,4435.2319,-1713.8533,2.5265);
  case 11:    { SetPlayerPos(playerid,4465.7964,-1681.5546,2.5428);
  case 12:    { SetPlayerPos(playerid,4506.1807,-1671.7106,2.5378);
  case 13:    { SetPlayerPos(playerid,4546.3618,-1680.6895,2.4973);
  case 14:    { SetPlayerPos(playerid,4578.5610,-1709.3564,2.5123);
  case 15:    { SetPlayerPos(playerid,4590.5747,-1751.2606,2.4305);
  case 16:    { SetPlayerPos(playerid,4579.5103,-1791.7421,2.5066);
  case 17:    { SendClientMessage(playerid,-1,\"Nincs több hely!\"); slot = 16; }
}
++slot;
return 1;
}
}

 
Ez a részlet egy minigame-bõl van amit írok.
A lényeg az,hogy ha valaki belép akkor ugye növekedik a slot változó,de ha kilép akkor a következõ csatlakozónak az õ helyére kéne kerülnie,ezt megoldottam úgy,hogy kilépésnél elveszek 1-et a slot változóból..
De ez így mégsem jó,mert ha már például 5-en csatlakoztak(ilyenkor a slot = 5-el) és például a 2. kilép,akkor a slot még csak 4-lesz,tehát a következõ a 4. helyre kerül,az meg nem jó mert már foglalt,tehát a 2. helyre kéne kerülnie,de azt hogy oldjam meg?
Remélem érthetõ :P
« Utoljára szerkesztve: 2014. július 12. - 18:02:14 írta ZyZu. »

Nem elérhető BackUP

  • 908
    • Profil megtekintése
Teleport
« Válasz #1 Dátum: 2014. július 11. - 23:09:31 »
0 Show voters
Ebbe már most látok hibát.
 
{ SendClientMessage(playerid,-1,\"Nincs több hely!\"); slot = 16; }

 
Az üzenet elküldése után, nem \',\' kellene? (lehet így is jó, de mindig vesszõvel csináltam)
Valamint rengeteg a kapcsos zárójel, amiket nem zársz le. (Annyira nem csóró a fórum, hogyha a rendes kódot másolod, egy szimpla minigameet ellopunk..)
Az a megoldásjó, ha kilépésnél kivonsz belõle. Nem értem, ha valóban kilépésnél levon 1-et, akkor hogy lehet 4(az 5 helyett) amikor ketten lépnek ki? Kód is kellene, mert ennek tényleg semmi értelme.
Hisz, hogyha minden kilépésnél levon 1-et, akkor nem lehet ez az eset. (slot--;)
 
2. helyre kéne kerülnie,de azt hogy oldjam meg?[/quote]
 ???
Nem a 4. helyre? (5-2=3 -> de 3. hely foglalt 3+1=4)

Teleport
« Válasz #2 Dátum: 2014. július 11. - 23:22:02 »
0 Show voters
A kapcsos zárójelek valóban le vannak hagyva,de csak mert ahogy kiszedtem a teljes szkriptõl,elfelejtettem \"megigazítani\".
Nem azért nem másoltam be az egészet mert \"ellopjátok\" hanem mert tele volt ide nem illõ felesleges dolgokkal,most csak a lényeget másoltam ki,hogy átláthatóbb legyen.
Lehet hogy félre olvastad..Nem kettõ lép ki..Hanem a második..Azaz a második slot-on lévõ személy.

Teleport
« Válasz #3 Dátum: 2014. július 12. - 00:07:50 »
0 Show voters
Szia, hát például én így csinálnám:
 
enum spawn_
{
Float:X,
Float:Y,
Float:Z,
Float:A, //szög
bool:Free
};
 
new minigame_spawn[][spawn_] =
{
{4546.3105,-1680.5861,2.5164,0,true}
//ide a többit, most nem írom végig
};
new minigame_slot_id[MAX_PLAYERS];
 
CMD:teleport(playerid,params[])
{
if(minigame_slot_id[playerid] != -1) return SendClientMessage(playerid,-1,\"Minigameban vagy!\");
new free_id = -1; //szabad tömbindex azonosítója
for(new i = 0; i < sizeof(minigame_spawn);i++)
{
if(minigame_spawn[Free] == true) //ha van szabad hely (true == igaz)
{
   free_id = i; //most, hogy egyszerûbb legyen ezért külön változóba menjük
   break; //kilépünk a ciklusból
}
}
if(free_id == -1) //ha nem talál szabad helyet akkor az értéke marad -1
{
return SendClientMessage(playerid,-1,\"Nincs több hely! :(\");
}
 
SetPlayerPos(playerid,minigame_spawn[free_id][X],minigame_spawn[free_id][Y],minigame_spawn[free_id][Z]);
SetPlayerFacingAngle(playerid,minigame_spawn[free_id][A]); //szög állítása
minigame_spawn[free_id][Free] = false; //mostmár foglalt ez a hely! :)
minigame_slot_id[playerid] = free_id;
return 1;
}
CMD:kilep(playerid,params[])
{
if(minigame_slot_id[playerid] == -1) return SendClientMessage(playerid,-1,\"Nem vagy minigaméban!\");
minigame_slot_id[playerid] = true; //felszabadítjuk a helyet
//többi ide
return 1;
}
« Utoljára szerkesztve: 2014. július 12. - 00:14:51 írta bbTamas »

Teleport
« Válasz #4 Dátum: 2014. július 12. - 00:31:19 »
0 Show voters
Számomra ez egy kicsit bonyolult.:s
Az eredeti kóddal nem lehetne megvalósítani valahogy?

Teleport
« Válasz #5 Dátum: 2014. július 12. - 08:31:30 »
0 Show voters
mikor létrehozod a slot változót akkor írj mögé egy ilyet: MAX_PLAYERS
Így a változót playerid-re tudod adni.
Tehát így nézzen ki:
new slot[MAX_PLAYERS];

 
Utána a slot nevû változókhoz a parancsban írj egy [playerid] -t

Teleport
« Válasz #6 Dátum: 2014. július 12. - 13:39:29 »
0 Show voters
De a slot változót így hozom létre:
 
new slot = 1;

 
Ha átírom akkor már nem lesz az értéke 1,nem?

Teleport
« Válasz #7 Dátum: 2014. július 12. - 14:32:36 »
0 Show voters
Áh rájöttem hülyeséget írtam,nem olvastam el rendesen a kérésed :D
Na viszont itt egy másik megoldás,szerintem:
A pozíciókat egy tömbben tárold el.
Utána kell egy változó ami azt tárolja,hogy vannak-e azon a pozon(ugye,hogy valakit bedobott-e már oda)
Után meg egy for ciklusban nyomatod,hogy ha valaki beírja a parancsot akkor végigfut a cikluson és arra a helyre dobja ami üres.
« Utoljára szerkesztve: 2014. július 12. - 15:05:51 írta Tlalala »

Teleport
« Válasz #8 Dátum: 2014. július 12. - 17:15:48 »
0 Show voters
Megpróbálkozom vele.:)

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
Teleport
« Válasz #9 Dátum: 2014. július 31. - 11:22:20 »
0 Show voters
[mod]Témát zártam![/mod]

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal