[TuT] Koristite PVar funkcije (PVar tutorial)

Započeo Correlli, April 22, 2010, 23:09:41 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 2 gostiju pregledaju ovu temu.

Correlli

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[MAX_PLAYER_NAME];
GetPlayerName(playerid, imeIgraca, MAX_PLAYER_NAME);
SetPVarString(playerid, "ime", imeIgraca);

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



FLOAT:
Funkcija (stavljanje):
SetPVarFloat(playerid, varname[], Float:float_value);
Primjer:
/* stavljanje */
new
        Float:pozicija[3];
GetPlayerPos(playerid, pozicija[0], pozicija[1], pozicija[2]);
SetPVarFloat(playerid, "pozicija_X", pozicija[0]);
SetPVarFloat(playerid, "pozicija_Y", pozicija[1]);
SetPVarFloat(playerid, "pozicija_Z", pozicija[2]);

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
Poslednja Izmena: April 17, 2012, 14:52:51 POSLE PODNE od joXy_

nastoe

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

r4z0r

Zanimljivo , ako budem pravio sta novo koristit cu ove funkcije , neda mi se gamemod transformisat :P

Correlli

Citat: °[ яЧz0я ]° poslato April 23, 2010, 14:18:30 POSLE PODNEneda mi se gamemod transformisat :P

Ali se isplati. To je isto kao da sa analogne tehnike prelaziš na digitalnu. :P

E sto je isplativije ovdje. Da napravim boolean za MAX_PLAYERS ili napravim PVarInt(s obzirom da nema bool-ova).


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji

Correlli

Ne kontam šta želiš? Nešto kao SetPVarBool ili šta? Takvu funkciju možeš i sam napraviti.

Mislim sto je vise optimizirano. Napraviti bool za MAX_PLAYERS ili napraviti PVarInt pa onda koristiti samo 0 i 1.


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji

Correlli

Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
Mislim sto je vise optimizirano.
Misliš nešto kao ovo?

Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
Napraviti bool za MAX_PLAYERS
new
        bool:mojVar[MAX_PLAYERS];


Citat: LordShigi poslato Avgust 05, 2010, 13:39:04 POSLE PODNE
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.

Citat: Don Correlli poslato April 22, 2010, 23:09:41 POSLE PODNE
"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.

Tocno to, ok puno hvala.


RESPECT 4 EVER: John, GLC,bAndzi, Nikola, Sop, Zoki, Bruno_Venuti, Mele, Luka P,ExtremePower,Wang(neki kineski frajer)

NAJBOLJI CITATI:
Citat: [GF]Alive poslato Jun 24, 2010, 18:20:19 POSLE PODNE
Paizte ljud mozda je KayLoger! ! !
MOJI RADOVI:
[FS]Trofeji

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[playerid][pRespekti] += 1 ;

ovo + me muci... da dodam ovako? ili?
SetPVarInt(playerid, "Respekti", +1);
Poslednja Izmena: Oktobar 20, 2010, 21:52:18 POSLE PODNE od â–º|Slick|Crack|â—„
Mysterious roleplay

Correlli

Citat: â–º|Slick|Crack|â—,, poslato Oktobar 20, 2010, 21:51:00 POSLE PODNE
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[playerid][pRespekti] += 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);

#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
Poslednja Izmena: Oktobar 20, 2010, 22:01:45 POSLE PODNE od χ-яαу
Kristijan Stipić


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?

United Rol3Play Back Online
www.united-roleplay.com








...pozdrav za kraj...





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
Poslednja Izmena: Januar 09, 2011, 23:38:12 POSLE PODNE od Aleksandar