Szerző Téma: [TuT] Véletlenszerû Spawn  (Megtekintve 4600 alkalommal)

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Dátum: 2010. December 28. - 09:18:34 »
+2 Show voters
Véletlenszerû Spawn
 
A megoldása nagyon egyszerû. A legalkalmasabb megoldás, ha létrehozunk a koordinátáknak egy tömböt, majd véletlenszerûen kiválasztunk belõle.
1. Tömb.:
 

new Float: Tömbneve [ A ] [ B ] =
{
    { X, Y, Z },
    { x, Y, Z } ( Utolsó utána nem kell vesszõ! )
};

 
Nézzük sorba.:
- Float, vagyis lebegõpontos, mivel a koordinátákat lebegõpontos számként adjuk meg.
- [ A ], A tömb mérete. ( Szerintem egyértelmû, sorok száma ) ( Nem kötelezõ megadni )
- [ B ], A sorokban, lévõ értékek száma. ( Veszõvel vannak elválasztva )
 
new Float: RandomSpawn [ 3 ] [ 3 ] = 
{
    { 145.2345, 2244.5354, 45.5363 },
    { 562.3632, 1256.2324, 25.0000 },
    { 322.4325, 1999.4635, 74.2332 }
};

 


2. Hivatkozás a tömbre.:
 

new rand = random ( Érték );

 
- Ezt, általában rövidítés miatt használjuk.
- Érték, vagyis a random milyen értékek között válasszon.
- Az érték megadása úgy a legegyszerûbb, ha a tömb méretét kérdezzük le.
Játékos pozíciójának megadása.:
A SetSpawnInfo függvényt használjuk, aminek 13 paramétere van.
   1. Játékos azonosítója. ( Player ID )
   2. Játékos Csapata ( GetPlayerTeam ( playerid ) )
   3. Játékos Karaktere ( GetPlayerSkin ( playerid ) )
   4. X, koordináta ( Szélesség értéke )   \\
   5. Y, koordináta ( Hosszúság értéke )   | - Játékos pozicíója
   6. Z, koordináta ( Magasság értéke )   /
   7. Forgási szög. ( Saját tengelye körül )
   8. Fegyver (1)
   9. Fegyver (1) Lõszermennyiség
   10. Fegyver (2)
   11. Fegyver (2) Lõszermennyiség
   12. Fegyver (3)
   13. Fegyver (3) Lõszermennyiség
 
SetSpawnInfo ( playerid, GetPlayerTeam ( playerid ), GetPlayerSkin ( playerid ),  X, Y, Z, Angle, 0, 0, 0, 0, 0, 0 );

 
Játékos pozíciójának megadása a tömbbõl.:
SetSpawnInfo ( playerid, GetPlayerTeam ( playerid ), GetPlayerSkin ( playerid ), Tömbneve [ Tömbmérete ] [ X ], Tömbneve [ Tömbmérete ] [ Y ], Tömbneve [ Tömbmérete ] [ Z ], Angle, 0, 0, 0, 0, 0, 0 );
Mi esetünkbe:
 

SetSpawnInfo ( playerid, GetPlayerTeam ( playerid ), GetPlayerSkin ( playerid ), RandomSpawn [ 3 ] [ 0 ], RandomSpawn [ 3 ] [ 1 ], RandomSpawn [ 3 ] [ 2 ], 0, 0, 0, 0, 0, 0, 0  );

 
- Ez a kód, a \'playerid\' azonosítójú játékosnak, az X, Y, Z koordinátáit, a RandomSpawn tömbbõl kiválasztott értékre változtatja meg.


3. Példa.:
 

new RandomSpawn [ 5 ] [ 3 ] = {
    { 1480.6473, 2213.5718, 11.0234 },
    { 1400.5906, 2225.6960, 11.0234 },
    { 1598.8419, 2221.5676, 11.0625 },
    { 1318.7759, 1251.3580, 10.8203 },
    { 1558.0731, 1007.8292, 10.8125 }
};
 
public OnPlayerRequestClass ( playerid, classid  )
    new rand = random ( sizeof ( RandomSpawn ) );
    new Float: Angle = GetPlayerFacingAngle ( playerid, Angle );
    SetSpawnInfo ( playerid, GetPlayerTeam ( playerid ), GetPlayerSkin ( playerid ), RandomSpawn [ rand ] [ 0 ], RandomSpawn [ rand ] [ 1 ], RandomSpawn [ rand ] [ 2 ], Angle, 0, 0, 0, 0, 0, 0  );
    return 1;
}

 


Hát ennyi lett volna, sok sikert a megvalósításhoz.  ;)
Üdv,
Ronnie
« Utoljára szerkesztve: 2011. Július 14. - 23:18:59 írta Ronnie »

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #1 Dátum: 2010. December 28. - 09:47:14 »
0 Show voters
A SetSpawnInfo használata problémákat szülhet, hiszen a GetPlayerTeam \'bugos\' (nem feltétlen bug).
Ezenkívül a 2. pontban nem csak azért használjuk a változót, hogy rövidítsünk.
Sokkal fontosabb szerepe az, hogy eltárolja a véletlenszerûen kiválasztott értéket. (ami a tömbben a sort határozza meg késõbb)
Ha ezt az értéket a tömbbõl való pozíciómegadásnál a random függvénnyel helyettesítjük, akkor nem lehetünk benne biztosak, hogy a három random függvény által visszaadott érték azonos: a koordináták különbözõ sorokból kerülnének kiemelésre, ami azt eredményezni, hogy nem oda helyez minket, mint ahova szeretnénk.
Egyszerûbb, ha az AddPlayerClass függvényben beállítjuk a fegyvereket (a csapatot az AddPlayerClassEx-el),
majd spawnolnás után helyezzük el a játékost a véletlenszerû helyen.

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #2 Dátum: 2010. December 28. - 10:17:23 »
0 Show voters
Nekem azt ajánlották, hogy a SetSpawnInfoval célszerûbb lett volna a megoldása.  ::|

[TuT] Véletlenszerû Spawn
« Válasz #3 Dátum: 2010. December 28. - 13:50:12 »
0 Show voters
Idézetet írta: Epsilon date=1293526034\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"4954\" data-ipsquote-contentclass=\"forums_Topic
A SetSpawnInfo használata problémákat szülhet, hiszen a GetPlayerTeam \'bugos\' (nem feltétlen bug).
Ezenkívül a 2. pontban nem csak azért használjuk a változót, hogy rövidítsünk.
Sokkal fontosabb szerepe az, hogy eltárolja a véletlenszerûen kiválasztott értéket. (ami a tömbben a sort határozza meg késõbb)
Ha ezt az értéket a tömbbõl való pozíciómegadásnál a random függvénnyel helyettesítjük, akkor nem lehetünk benne biztosak, hogy a három random függvény által visszaadott érték azonos: a koordináták különbözõ sorokból kerülnének kiemelésre, ami azt eredményezni, hogy nem oda helyez minket, mint ahova szeretnénk.
Egyszerûbb, ha az AddPlayerClass függvényben beállítjuk a fegyvereket (a csapatot az AddPlayerClassEx-el),
majd spawnolnás után helyezzük el a játékost a véletlenszerû helyen.
 
Nem tudtam,hogy bugos a GetPlayerTeam(); ezért ajánlottam ezt a módszert Brisk-nek.
Viszont azoknak jól jöhet ez a leírás akik nem az alap függvényekkel kezelik a csapatokat,nem?
Brisk,a kódot futólag néztem át és nem láttam sehol Angle változó dekralálását,de a példában használod.(Lehet h csak elkerülte a figyelmemet.)
« Utoljára szerkesztve: 2010. December 28. - 13:51:58 írta ChuckNorris »

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #4 Dátum: 2010. December 30. - 17:09:28 »
0 Show voters
A GetPlayerTeam visszatérési értéke 255, mindaddig, amíg nincs beállítva csapat.
És ha mindenkit berak a 255-ös csapatba akkor aktiválódik az anti teamkill.
Ez egy feltevés. Játékban lehet, hogy van olyan plusz információ, amitõl ez nem így lesz. (pl. 255-nél nem kapcsolodik be az anti-TK)

Nem elérhető krisk

  • 2380
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #5 Dátum: 2011. Január 18. - 15:32:21 »
0 Show voters
Második példánál a tömb utolsó eleméhez is írtál vesszõt.

Nem elérhető Csabesz

  • 7827
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #6 Dátum: 2011. Január 18. - 15:57:36 »
0 Show voters
Idézetet írta: krisk date=1295361141\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"4954\" data-ipsquote-contentclass=\"forums_Topic
Második példánál a tömb utolsó eleméhez is írtál vesszõt.
 
Kösz, hogy szóltál. Javítottam.  ;)

[TuT] Véletlenszerû Spawn
« Válasz #7 Dátum: 2011. Március 20. - 17:04:07 »
0 Show voters
Srákok !
Az miért van hogy mikor ezt megcsinálom a saját kordinátáimmal stb..és leelenõrzi akkor egyszerûen csak kiakad a pawno ??  ??? ::| ;D
kössz

Nem elérhető Epsilon

  • 1854
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #8 Dátum: 2011. Március 21. - 15:33:21 »
0 Show voters
Másold be a kódodat, különben csak tippelgetni tudunk.

Nem elérhető Buba

  • 540
    • Profil megtekintése
[TuT] Véletlenszerû Spawn
« Válasz #9 Dátum: 2011. Április 14. - 19:07:17 »
0 Show voters
Ennyi
De am. gondolom úgy is jó ahogy te írtad.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal