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
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.
Nekem azt ajánlották, hogy a SetSpawnInfoval célszerûbb lett volna a megoldása. ::|
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.)
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)
Második példánál a tömb utolsó eleméhez is írtál vesszõt.
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. ;)
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
Másold be a kódodat, különben csak tippelgetni tudunk.
Ennyi
De am. gondolom úgy is jó ahogy te írtad.