[TuT] Koristite PVar funkcije (PVar tutorial)

Započeo Obrisan korisnik
22. Apr. 2010. Zaključano
5,854
pregleda
21
postova
Deleted User
Obrisan korisnik
22. Apr. 2010.
Ako želite napraviti nešto dobro za vašu skriptu/server onda počnite koristiti PVar funkcije.

"Per-player variable system" ili skraćeno "PVar" je nova metoda stvaranja varijablova za igrače u PAWN jeziku za SA:MP mod na efikasno-dinamički način za kojeg su varijablovi stvoreni globalno, što znači da se mogu koristiti u gamemodu i filterskriptama u isto vrijeme.
Ovaj novi sustav koji je moguć od SA:MP 0.3a R5 verzije pa naprijed ima nekoliko prednosti od običnih polja sa MAX_PLAYERS veličinom.
  • PVar-ove možete dijeliti i pristupiti im preko gamemod skripta i filterskripta, Å¡to je lakÅ¡e za modeliranje vaÅ¡e kode,

  • PVar-ovi su automatsko izbrisani kad igrač napusti server, Å¡to znači da ne trebate resetirati varijablove za svakog novog igrača koji se konekta na vaÅ¡ server,

  • nema potrebe za kompleksne enumerator strukture,

  • Å¡tedi memoriju tako da ne dodjeljuje memoriju pawn niza za playerid-ove koji vjerojatno nikada neće biti koriÅ¡teni,

  • lahko možete enumerirati i uskladiÅ¡titi PVar listu - to je lakÅ¡e za otklanjanje greÅ¡aka i za skladiÅ¡tenje informacija za igrače,

  • iako PVar nije bio napravljen, vratit će vrijednost 0,

  • PVar-ovi mogu skladiÅ¡titi velike stringove koristeči dinamički dodijeljenu memoriju.


Funkcije za stavljanje/primanje PVar-ova su:

INTEGER:
Funkcija (stavljanje):
SetPVarInt(playerid, varname[], int_value);
Primjer:
/* stavljanje */
SetPVarInt(playerid, "Admin_Nivo", 5);
Funkcija (primanje):
GetPVarInt(playerid, varname[]);
Primjer:
/* primanje */
if(GetPVarInt(playerid, "Admin_Nivo") == 5) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš admin nivo je 5.");

STRING:
Funkcija (stavljanje):
SetPVarString(playerid, varname[], string_value[]);
Primjer:
/* stavljanje */
new
        imeIgraca;
GetPlayerName(playerid, imeIgraca, MAX_PLAYER_NAME);
SetPVarString(playerid, "ime", imeIgraca);
Funkcija:
GetPVarString(playerid, varname[], string_return[], len);
Primjer (primanje):
/* primanje */
new
        _imeIgraca;
GetPlayerName(playerid, _imeIgraca, MAX_PLAYER_NAME);
GetPVarString(playerid, "ime", _imeIgraca, MAX_PLAYER_NAME);
if(!strcmp(_imeIgraca, _imeIgraca, true)) SendClientMessage(playerid, 0xFFFFFFFF, "Vaš tekst.");

FLOAT:
Funkcija (stavljanje):
SetPVarFloat(playerid, varname[], Float:float_value);
Primjer:
/* stavljanje */
new
        Float:pozicija;
GetPlayerPos(playerid, pozicija, pozicija, pozicija);
SetPVarFloat(playerid, "pozicija_X", pozicija);
SetPVarFloat(playerid, "pozicija_Y", pozicija);
SetPVarFloat(playerid, "pozicija_Z", pozicija);
Funkcija (primanje):
GetPVarFloat(playerid, varname[]);
Primjer:
/* primanje */
SetPlayerPos(playerid, GetPVarFloat(playerid, "pozicija_X"), GetPVarFloat(playerid, "pozicija_Y"), GetPVarFloat(playerid, "pozicija_Z"));

BRISANJE:
Funkcija (brisanje):
DeletePVar(playerid, varname[]);
Primjer:
/* brisanje */
DeletePVar(playerid, "Admin_Nivo");

Ostale funkcije (nisu toliko važne za vas, osim možda GetPVarType funkcije):
  • GetPVarsUpperIndex

  • GetPVarNameAtIndex

  • GetPVarType

Deleted User
Obrisan korisnik
22. Apr. 2010.
Correlli pomogao si mi puno, tj objasnio nes sta nisam mogao skuziti, bas sam neki dan poceo raditi sa PVar funkcijom i nesto jesam skuzio ali sada umjesto enuma mogu korisit ovo...Hvala jos jednom
Deleted User
Obrisan korisnik
23. Apr. 2010.
Zanimljivo , ako budem pravio sta novo koristit cu ove funkcije , neda mi se gamemod transformisat 😛
Deleted User
Obrisan korisnik
23. Apr. 2010.
° wrote on April 23, 2010, 12:18 pm:
neda mi se gamemod transformisat 😛


Ali se isplati. To je isto kao da sa analogne tehnike prelaziÅ¡ na digitalnu. 😛
LordShigi
5
Crime Lord
5. Avg. 2010.
E sto je isplativije ovdje. Da napravim boolean za MAX_PLAYERS ili napravim PVarInt(s obzirom da nema bool-ova).
Deleted User
Obrisan korisnik
5. Avg. 2010.
Ne kontam šta želiš? Nešto kao SetPVarBool ili šta? Takvu funkciju možeš i sam napraviti.
LordShigi
5
Crime Lord
5. Avg. 2010.
Mislim sto je vise optimizirano. Napraviti bool za MAX_PLAYERS ili napraviti PVarInt pa onda koristiti samo 0 i 1.
Deleted User
Obrisan korisnik
5. Avg. 2010.
LordShigi wrote on August 5, 2010, 11:39 am:
Mislim sto je vise optimizirano.

Misliš nešto kao ovo?

LordShigi wrote on August 5, 2010, 11:39 am:
Napraviti bool za MAX_PLAYERS

new
        bool:mojVar;

LordShigi wrote on August 5, 2010, 11:39 am:
ili napraviti PVarInt pa onda koristiti samo 0 i 1.

SetPVarInt(playerid, "mojVar", 0);
SetPVarInt(playerid, "mojVar", 1);

Naravno da ti je bolje koristiti PVar funkcije.

Don Correlli wrote on April 22, 2010, 9:09 pm:
"Per-player variable system" ili skraćeno "PVar" je nova metoda stvaranja varijablova za igrače u PAWN jeziku za SA:MP mod na efikasno-dinamički način za kojeg su varijablovi stvoreni globalno, što znači da se mogu koristiti u gamemodu i filterskriptama u isto vrijeme.
Ovaj novi sustav koji je moguć od SA:MP 0.3a R5 verzije pa naprijed ima nekoliko prednosti od običnih polja sa MAX_PLAYERS veličinom.
  • PVar-ove možete dijeliti i pristupiti im preko gamemod skripta i filterskripta, Å¡to je lakÅ¡e za modeliranje vaÅ¡e kode,

  • PVar-ovi su automatsko izbrisani kad igrač napusti server, Å¡to znači da ne trebate resetirati varijablove za svakog novog igrača koji se konekta na vaÅ¡ server,

  • nema potrebe za kompleksne enumerator strukture,

  • Å¡tedi memoriju tako da ne dodjeljuje memoriju pawn niza za playerid-ove koji vjerojatno nikada neće biti koriÅ¡teni,

  • lahko možete enumerirati i uskladiÅ¡titi PVar listu - to je lakÅ¡e za otklanjanje greÅ¡aka i za skladiÅ¡tenje informacija za igrače,

  • iako PVar nije bio napravljen, vratit će vrijednost 0,

  • PVar-ovi mogu skladiÅ¡titi velike stringove koristeči dinamički dodijeljenu memoriju.

LordShigi
5
Crime Lord
5. Avg. 2010.
Tocno to, ok puno hvala.
bero
5
Underboss
20. Okt. 2010.
Ispricavam se za refresh ali prije sam koristio obicni PlayerInfo kao na GF-u i sada prebacujem sve na pVar i sad me zanima kako bi ovo izgledalo u pVaru:
PlayerInfo += 1 ;


ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1); 
Deleted User
Obrisan korisnik
20. Okt. 2010.
â–º|Slick|Crack|â—„ wrote on October 20, 2010, 7:51 pm:
Ispricavam se za refresh ali prije sam koristio obicni PlayerInfo kao na GF-u i sada prebacujem sve na pVar i sad me zanima kako bi ovo izgledalo u pVaru:
PlayerInfo += 1 ;


ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1); 

Ne.

Možeš ovako:
SetPVarInt(playerid, "Respekti", GetPVarInt(playerid, "Respekti") + 1);
Ili:
#define IncreasePVarInt(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) + %2)

IncreasePVarInt(playerid, "Respekti", 1);
taft
5
Underboss
20. Okt. 2010.
#define PovecajPvar(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) + %2)
#define SmanjiPvar(%0,%1,%2) SetPVarInt(%0, %1, GetPVarInt(%0, %1) - %2)

PovecajPvar(playerid,"nesto",+iznos);

edit: srry correli odma iza tebe :S
bero
5
Underboss
20. Okt. 2010.
Hvala vam puno  😉
eurosamp
4
Made Man
9. Jan. 2011.
sry na refreshu ali jeli to isplativo radit posto se nece na mom serveru koristiti fs? mislim i ovako je to sve dosta brzo na enumu... i zasto je to bolje?
fixman
5
Underboss
9. Jan. 2011.
Puno se lakse snaci(u modu) kad' koristis PVarove ..
I naravno da se isplati,pogotovo ako radis mod od nule,a cini mi se da si napisao u nekoj temi da radis..

http://wiki.sa-mp.com/wiki/Per-player_variable_system

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha