GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => Szkript kérések => SA-MP: Szerverfejlesztés => RP/RPG kérések => A témát indította: Shadow10 - 2013. december 12. - 22:34:17

Cím: Gps munkaközben
Írta: Shadow10 - 2013. december 12. - 22:34:17
Sziasztok!
Az lenne a kérdésem hogyan lehetne megvalositani azt hogy ha dolgozik egy player akkor ne tudja hasznalni a /gps parancsot?(CP-s munkarol van szó)
Cím: Gps munkaközben
Írta: Elen - 2013. december 13. - 13:55:06
így:
Mód elejére a többi változó közé/alá
 
new dolgozik[MAX_PLAYERS];

 
Aztán amikor elkezdi a munkát pl: /Munkakezd vagy /utattisztit
Írd bele a parancsba ezt:
 
dolgozik[playerid]=1;

 
Aztán amikor abbahagyja a munkát pl: /Munkaabbahagy
 
dolgozik[playerid]=0;

 
OnPlayerDisconnect részhez írd be ezt:
 
dolgozik[playerid]=0;

 
És amikor a gps-t használná pl:/gps bekapcsol
 
if(dolgozik[playerid]==1)return SendClientmessage(playerid,-1,\"Munka közben nem használhatod a gps-t\");

 
Ennyi lenne :)
Cím: Gps munkaközben
Írta: Szasza - 2013. december 13. - 22:07:14

így:
Mód elejére a többi változó közé/alá
 
new dolgozik[MAX_PLAYERS];

 
Aztán amikor elkezdi a munkát pl: /Munkakezd vagy /utattisztit
Írd bele a parancsba ezt:
 
dolgozik[playerid]=1;

 
Aztán amikor abbahagyja a munkát pl: /Munkaabbahagy
 
dolgozik[playerid]=0;

 
OnPlayerDisconnect részhez írd be ezt:
 
dolgozik[playerid]=0;

 
És amikor a gps-t használná pl:/gps bekapcsol
 
if(dolgozik[playerid]==1)return SendClientmessage(playerid,-1,\"Munka közben nem használhatod a gps-t\");

 
Ennyi lenne :)
 
[/quote]
Miért foglalnál ennyi helyet a rendszerbõl?
Erre elég a bool változó is
 
new bool:dolgozik[MAX_PLAYERS];

 

dolgozik[playerid]=true;

 

dolgozik[playerid]=false;
Cím: Gps munkaközben
Írta: SnooP - 2013. december 13. - 22:28:56
És a megoldás úgy lenne a legszebb és legtakarékosabb memóriában, ha a boolen változót átalakítanád bitmûvelettel integer változóba, hogy miért?
Integer változó - 32  igaz/hamis érték tárolására képes, 32 bit azaz 4 bájtot foglal le
Boolean változó - 1 igaz / hamis érték tárolására képes, 8 bit, azaz 1 bájtot foglal le
Ha 4 boolean változó kirak egy integer változót ami 32 értéket képes kezelni, míg a boolen csak négyet beláthatjuk, hogy elég memóriapazarló dolog. :)
Bitmûvelettel viszont megoldhatjuk, hogy ne foglaljon el ennyit és sokkal gyorsabb és spórosabb megoldás. (lásd 32 boolen esetén 31 kilobyte, 1 integer amiben ugyan úgy 32 érték fér csak 3,9 kilobyte)
Az adatok kiolvasására:
 

stock GetData(integer, bit)
{
   return integer >> bit & 1;
}

 
Az adat írására:
 

stock SetData(&integer, bit, value)
{
   integer |= value << bit;
   return 1;
}

 
A függvényeket  Anthony írta meg, a bitekrõl itt lehet még olvasni : http://sampforum.hu/index.php?topic=29621.0