Szakmai fórum a zálogszkriptekről

YANS (még egy neon rendszer), vagy írni a képességet, hogy telepítse neon a semmiből.

A kedves idő a kedves felhasználóknak.
Tudom, hogy már sok megoldás volt a neonlámpáknak az autóra történő felszerelésére, de nem láttam magyarázó ismertetőt, és részletes magyarázatot adtam arról, hogy mi és miért működik. Nos, ki kell javítania ezt a bosszantó geboldalt.

Tehát először elemezzük a munka elveit.
Mint sokan tudják, a SAMP-nak megengedett objektumok csatolása az autókhoz. És mivel halogén lámpák vannak jelen a jelenlétben, a feladat a legegyszerűbb - a neon telepítésekor lámpatestet hozunk létre, és csatoljuk az autót. A bontáskor töröljük azt.
A lámpák tárgya 18647-től 18651-ig (ebben a példában - piros, kék, zöld, sárga és rózsaszín).

Furcsa módon, de - mindent elmélettel, itt az ideje, hogy továbblépjen a gyakorlatba. Új.pwn létrehozása, csatlakoztassa a könyvtárat a_samp. Azok számára, akik szeretnék, csatlakoztathatja a szalagos meghajtót is, a bemutató alapfunkciókat használ az objektumok kezeléséhez.

Rendeljen egy tömböt az autókra és a neonlámpákra vonatkozó információk tárolására. A nulla elemet tároljuk jelenlétével kapcsolatos információ és színe a lámpa (-1 - nem állapítható meg, 0 és 4 - rendre piros, kék, zöld, rózsaszín és sárga), az első és a második fogják használni abban való tárolása céljából mutatókat tárgyak, az utóbbi - az aktuális lámpaállapot mentéséhez (be vagy ki).

új neon # 91; MAX_VEHICLES # 93; # 91; 4 # 93 ;;

Most folytatjuk a fő funkciókat. Ezek közül az első lesz a neon telepítése az autóra. A funkció paraméterei a játék azonosítója és a 0-tól 4-ig terjedő szín - a 18647 objektum létrehozásakor a színértékre (18647 - a piros lámpa objektumára) vált. Az algoritmus a következő: a nulla elemhez hozzárendeltük a színértéket, a harmadik elemet hozzárendeljük az egységhez (a lámpa be van kapcsolva a telepítés után), két objektumot (az első és a második elemet) hozunk létre és csatlakoztatunk az autóhoz.

előre PlaceNeon (jármű színe);
nyilvános PlaceNeon (jármű színes)
neon # 91; jármű # 93; # 91; 0 # 93; = szín;
neon # 91; jármű # 93; # 91; 3 # 93; = 1;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
neon # 91; jármű # 93; # 91; 1 # 93; = CreateObject (18647 + szín 0. 0. 0. 0. 0. 0. 0. 100.0);
neon # 91; jármű # 93; # 91; 2 # 93; = CreateObject (18647 + szín 0. 0. 0. 0. 0. 0. 0. 100.0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 1 # 93;, jármű. - 0,8. 0.0. - 0,70. 0.0. 0.0. 0,0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 2 # 93;, jármű. 0.8. 0.0. - 0,70. 0.0. 0.0. 0,0);
visszatérés 1;
>

Következő az neon eltávolítása. A funkció csak paraméterként fogadja el az automatikus azonosítót. Helyezzük a nulla elemet -1 (neon), kapcsoljuk ki a lámpát (a harmadik elem nulla), töröljük az objektumokat.

előre RemoveNeon (jármű);
nyilvános RemoveNeon (jármű)
neon # 91; jármű # 93; # 91; 0 # 93; = - 1;
neon # 91; jármű # 93; # 91; 3 # 93; = 0;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
visszatérés 1;
>

Az utolsó funkció a behelyezett lámpa be- és kikapcsolása. Itt az algoritmus bonyolultabb.
Ha a lámpa be van szerelve (a tömb első eleme nem -1), a trigger elindítja működését. Ha a lámpa kikapcsolt - hozjon létre két objektumot a kívánt színben. Ha engedélyezve van - törölje őket. Természetesen anélkül, hogy elfelejtené a szükséges címkéket elhelyezni a lámpa állapotában.

előremenő TurnNeon (jármű);
nyilvános TurnNeon (jármű)
ha (neon # 91; jármű # 93; # 91; 0 # 93; ! = - 1)
kapcsoló (neon # 91; jármű # 93; # 91; 3 # 93;)
0 eset:
neon # 91; jármű # 93; # 91; 3 # 93; = 1;
neon # 91; jármű # 93; # 91; 1 # 93; = CreateObject (18647 + neon # 91; jármű # 93; # 91; 0 # 93;, 0. 0. 0. 0. 0. 0. 0. 100.0);
neon # 91; jármű # 93; # 91; 2 # 93; = CreateObject (18647 + neon # 91; jármű # 93; # 91; 0 # 93;, 0. 0. 0. 0. 0. 0. 0. 100.0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 1 # 93;, jármű. - 0,8. 0.0. - 0,70. 0.0. 0.0. 0,0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 2 # 93;, jármű. 0.8. 0.0. - 0,70. 0.0. 0.0. 0,0);
>
1. eset:
neon # 91; jármű # 93; # 91; 3 # 93; = 0;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
>
>
>
visszatérés 1;
>

Valójában a fő funkciók vannak. Hogyan kell dolgozni velük - már ahogy a fantázia megmondja, de konkrét példákat fogok tenni.
Tehát a telepítés a / neon paranccsal történik. Hozzon létre egy listát tartalmazó párbeszédpanelt. Kérem, ne rúgjon ki arra a tényre, hogy az első menüben csak egy pont van - ívelt egy margóval, mivel kiegészítik a tinédzser, például a villanófesték telepítése és így tovább.

nyilvános OnPlayerCommandText (playerid .cmdtext # 91; # 93;)
ha (! strcmp ("/ neon" .cmdtext. true))
ha (IsPlayerInAnyVehicle (playerid))
if (! GetPlayerState (playerid) = PLAYER_STATE_DRIVER) SendClientMessage (playerid .. 0xAFAFAFAA "Meg kell, hogy üljön a volán mögé az autó");
Egyéb: ShowPlayerDialog (playerid 6000. DIALOG_STYLE_LIST. "Menü". "Neon." "Válassza ki." "Mégse");
>
visszatérés 1;
>
visszatérés 0;
>

nyilvános OnDialogResponse (playerid. dialogid válasz) listitem. inputtext # 91; # 93;)
ha (dialogid == 6000)
ha (válasz)
if (listitem == 0) ShowPlayerDialog (. playerid 6001. DIALOG_STYLE_LIST "Neon", "Red \ nSiny \ nZeleny \ nZhelty \ nRozovy \ nUbrat neon", "Next", "Mégsem" ....);
>
visszatérés 1;
>
ha (dialogid == 6001)
ha (válasz)
ha (listitem == 5)
RemoveNeon (GetPlayerVehicleID (playerid));
SendClientMessage (playerid 0xff440000. "Neon törölve");
>
egyébként, ha (listitem> = 0 listitem <= 4 )
PlaceNeon (GetPlayerVehicleID (playerid), listitem);
SendClientMessage (playerid 0xff440000 "Neon telepítve");
>
>
visszatérés 1;
>
visszatérés 0;
>

Kapcsolja be az al-commission gombot (standard - 2 a billentyűzet alfabetikus részében). A régi jó hibát használjuk. PRESSED:

#define PRESSED (% 0) (((új billentyűk (% 0)) == (% 0)) ((Oldkeys (% 0))! = (% 0)))

És valójában a gombon végrehajtott műveleteket írjuk le:

nyilvános OnPlayerKeyStateChange (playerid. új kulcsok oldkeys)
ha (PRESSED (512) GetPlayerState (playerid) == PLAYER_STATE_DRIVER) TurnNeon (GetPlayerVehicleID (playerid));
visszatérés 1;
>

És mi van, ha az autó megsemmisül? Az objektumokat törölni kell. Az OnVehicleDeath-ot használjuk:

nyilvános OnVehicleDeath (vehicleid. killerid)
DestroyObject (neon # 91; vehicleid # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; vehicleid # 93; # 91; 2 # 93;);
visszatérés 1;
>

És az objektumok megfelelő berakodásához és kirakásához - a tömböket a kezdetektől és a forgatókönyv leállításakor tisztítjuk.

nyilvános OnFilterScriptInit ()
(új i = 0; i visszatérés 1;
>

nyilvános OnFilterScriptExit ()
(új i = 0; i visszatérés 1;
>

Valójában mindent! Miután összeállította egy csomó kódot, a kód így néz ki:


#define PRESSED (% 0) (((új billentyűk (% 0)) == (% 0)) ((Oldkeys (% 0))! = (% 0)))

// Array feldolgozni. 0 - a neon jelenléte (és színe) (-1 - nincs telepítve), 1 és 2 - objektumok, 3-állapotú (on-off)
új neon # 91; MAX_VEHICLES # 93; # 91; 4 # 93 ;;

// Forward a funkciókhoz
előre PlaceNeon (jármű színe);
előre RemoveNeon (jármű);
előremenő TurnNeon (jármű);

// Töltse be a szkriptet. Minden tűzoltóban - az információ törlése a tömbben.
nyilvános OnFilterScriptInit ()
(új i = 0; i visszatérés 1;
>

// Szkript letöltése. A tömb tisztítása.
nyilvános OnFilterScriptExit ()
(új i = 0; i visszatérés 1;
>

nyilvános OnPlayerCommandText (playerid .cmdtext # 91; # 93;)
ha (strcmp ("/ neon" .cmdtext .real .10) == 0)
ha (IsPlayerInAnyVehicle (playerid))
if (! GetPlayerState (playerid) = PLAYER_STATE_DRIVER) SendClientMessage (playerid .. 0xAFAFAFAA "Meg kell, hogy üljön a volán mögé az autó");
Egyéb: ShowPlayerDialog (playerid 6000. DIALOG_STYLE_LIST. "Menü". "Neon." "Válassza ki." "Mégse");
>
visszatérés 1;
>
visszatérés 0;
>

nyilvános OnDialogResponse (playerid. dialogid válasz) listitem. inputtext # 91; # 93;)
ha (dialogid == 6000)
ha (válasz)
if (listitem == 0) ShowPlayerDialog (. playerid 6001. DIALOG_STYLE_LIST "Neon", "Red \ nSiny \ nZeleny \ nZhelty \ nRozovy \ nUbrat neon", "Next", "Mégsem" ....);
>
visszatérés 1;
>
ha (dialogid == 6001)
ha (válasz)
ha (listitem == 5)
RemoveNeon (GetPlayerVehicleID (playerid));
SendClientMessage (playerid 0xff440000. "Neon törölve");
>
egyébként, ha (listitem> = 0 listitem <= 4 )
PlaceNeon (GetPlayerVehicleID (playerid), listitem);
SendClientMessage (playerid 0xff440000 "Neon telepítve");
>
>
visszatérés 1;
>
visszatérés 0;
>

nyilvános OnPlayerKeyStateChange (playerid. új kulcsok oldkeys)
ha (PRESSED (512) GetPlayerState (playerid) == PLAYER_STATE_DRIVER) TurnNeon (GetPlayerVehicleID (playerid));
visszatérés 1;
>

nyilvános OnVehicleDeath (vehicleid. killerid)
DestroyObject (neon # 91; vehicleid # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; vehicleid # 93; # 91; 2 # 93;);
visszatérés 1;
>

// Állítsa be a neonot. Paraméterek - automatikus azonosító és szín.
nyilvános PlaceNeon (jármű színes)
neon # 91; jármű # 93; # 91; 0 # 93; = szín;
neon # 91; jármű # 93; # 91; 3 # 93; = 1;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
neon # 91; jármű # 93; # 91; 1 # 93; = CreateObject (18647 + szín 0. 0. 0. 0. 0. 0. 0. 100.0);
neon # 91; jármű # 93; # 91; 2 # 93; = CreateObject (18647 + szín 0. 0. 0. 0. 0. 0. 0. 100.0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 1 # 93;, jármű. - 0,8. 0.0. - 0,70. 0.0. 0.0. 0,0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 2 # 93;, jármű. 0.8. 0.0. - 0,70. 0.0. 0.0. 0,0);
visszatérés 1;
>

// Neon eltávolítás
nyilvános RemoveNeon (jármű)
neon # 91; jármű # 93; # 91; 0 # 93; = - 1;
neon # 91; jármű # 93; # 91; 3 # 93; = 0;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
visszatérés 1;
>

// Neon Management
nyilvános TurnNeon (jármű)
ha (neon # 91; jármű # 93; # 91; 0 # 93; ! = - 1)
kapcsoló (neon # 91; jármű # 93; # 91; 3 # 93;)
0 eset:
neon # 91; jármű # 93; # 91; 3 # 93; = 1;
neon # 91; jármű # 93; # 91; 1 # 93; = CreateObject (18647 + neon # 91; jármű # 93; # 91; 0 # 93;, 0. 0. 0. 0. 0. 0. 0. 100.0);
neon # 91; jármű # 93; # 91; 2 # 93; = CreateObject (18647 + neon # 91; jármű # 93; # 91; 0 # 93;, 0. 0. 0. 0. 0. 0. 0. 100.0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 1 # 93;, jármű. - 0,8. 0.0. - 0,70. 0.0. 0.0. 0,0);
AttachObjectToVehicle (neon # 91; jármű # 93; # 91; 2 # 93;, jármű. 0.8. 0.0. - 0,70. 0.0. 0.0. 0,0);
>
1. eset:
neon # 91; jármű # 93; # 91; 3 # 93; = 0;
DestroyObject (neon # 91; jármű # 93; # 91; 1 # 93;);
DestroyObject (neon # 91; jármű # 93; # 91; 2 # 93;);
>
>
>
visszatérés 1;
>


Nem fontoltam meg a neon paraméterek mentését ebben a példában, miután feltöltöttük a szervert egy fájlba vagy adatbázisba, ellenõrizve, hogy a lejátszó automata vagy motorkerékpár / helikopter stb. és hasonló dolgok. Amint a kódból látható, még a pénzt sem távolítják el a telepítéshez. Ez egyetemesség - a forrást élesítheti saját igényeihez.

Arra kérem Önt, hogy ne rúgjon el a redundancia, az optimális döntések és így tovább. Javaslatokat és konstruktív kritikát örömmel fogadunk e témában.

Re: YANS (még egy neon rendszer), vagy írja meg a képességet, hogy telepítse neon a semmiből.

De ha mindent írsz a neonról, írd meg a színek keverésének lehetőségét

Re: YANS (még egy neon rendszer), vagy írja meg a képességet, hogy telepítse neon a semmiből.

A telepítés előtt nincs keverés, de a DestroyObject minden esetben megy.

Re: YANS (még egy neon rendszer), vagy írja meg a képességet, hogy telepítse neon a semmiből.

Egy másik lenne a teszt az objektum létezéséről.

Re: YANS (még egy neon rendszer), vagy írja meg a képességet, hogy telepítse neon a semmiből.

Ami a szerveren létező automatikus működést illeti? Ennek nincs értelme, a telepítés csak akkor történik meg, ha a játékos a vezetőülésen van.
Vagy már egy meglévő neon jelenlétéről van szó? Megvizsgálhatja a tömb nulla celláját. Ugyanabban a helyen festett - ha -1, akkor neonka nincs telepítve, ha 0 - 4 - akkor egy bizonyos szín van beállítva. Egy ilyen ellenőrzés a TurnNeon-ban ().

Re: YANS (még egy neon rendszer), vagy írja meg a képességet, hogy telepítse neon a semmiből.

Nem, az IsValidObjectről beszélek. Végtére is, ha a tárgyak határértéke kimerült, akkor az objektum nem jön létre.

Kapcsolódó cikkek