Hello!
Azt vettem észre, hogy sok helyen bugos, ill. laggot okoz az OnPlayerUpdate miatt. Íme egy egyszerûbb megoldás, laggmentes, és remélhetõleg nem bugos.
/*
Adminszolgálat színek:
- 0. Kikapcsolva
- 1. Citromsárga
- 2. Piros
- 3. Kék
- 4. Zöld
- 5. Fehér
*/
#include < a_samp >
#include < zcmd >
#include < sscanf2 >
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_RED 0xFF0000AA
#define COLOR_BLUE 0x0037ffAA
#define COLOR_GREEN 0x33AA33AA
#define COLOR_WHITE 0xFFFFFFAA
#undef MAX_PLAYERS
#define MAX_PLAYERS 30 // Szerver férõhelye
new asz[MAX_PLAYERS];
new Text3D:at[MAX_PLAYERS];
stock ASZ(playerid,ertek)
{
new str[30],str2[128];
asz[playerid] = ertek;
if(ertek == 0) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat kikapcsolva.\") , Delete3DTextLabel(at[playerid]);
if(ertek == 1) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat bekapcsolva. (Citromsárga)\"), Update3DTextLabelText(at[playerid],COLOR_YELLOW,\"Admin szolgálatban\");
if(ertek == 2) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat bekapcsolva. (Piros)\"), Update3DTextLabelText(at[playerid],COLOR_RED,\"Admin szolgálatban\");
if(ertek == 3) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat bekapcsolva. (Kék)\") , Update3DTextLabelText(at[playerid],COLOR_BLUE,\"Admin szolgálatban\");
if(ertek == 4) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat bekapcsolva. (Zöld)\") , Update3DTextLabelText(at[playerid],COLOR_GREEN,\"Admin szolgálatban\");
if(ertek == 5) return SendClientMessage(playerid, COLOR_WHITE, \"Adminszolgálat bekapcsolva. (Fehér)\"), Update3DTextLabelText(at[playerid],COLOR_WHITE,\"Admin szolgálatban\");
GetPlayerName(playerid, str,30);
if(ertek != 0) return format(str2,128,\"%s adminszolgálatba lépett.\",str), SendClientMessageToAll(COLOR_RED,str2);
if(ertek == 0) return format(str2,128,\"%s kilépett az adminszolgálatból.\",str),SendClientMessageToAll(COLOR_RED,str2) ;
Attach3DTextLabelToPlayer(at[playerid], playerid, 0.0, 0.0, 0.5);
return 1;
}
CMD:duty(playerid,params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, \"Nem vagy admin...\");
new szin;
if(sscanf(params,\"d\",szin)) return SendClientMessage(playerid, COLOR_RED, \"Használat: /duty < 0-5 >\");
if(szin <= 1|| szin >= 6) return SendClientMessage(playerid, COLOR_WHITE,\"Minimum: 0 - Max: 5.\");
if(szin == 0) return ASZ(playerid,0);
if(asz[playerid] == 0)
{
if(szin == 1) return ASZ(playerid,1);
if(szin == 2) return ASZ(playerid,2);
if(szin == 3) return ASZ(playerid,3);
if(szin == 4) return ASZ(playerid,4);
if(szin == 5) return ASZ(playerid,5);
}
else return SendClientMessage(playerid, COLOR_RED,\"Már szolgálatban vagy...\");
return 1;
}
public OnPlayerConnect(playerid)
{
asz[playerid] = 0;
at[playerid] = Create3DTextLabel(\"-\", 0xFF0000FF, 0.0, 0.0, 0.0, 20, 0, 1);
return 1;
}
public OnPlayerDisconnect(playerid)
{
Delete3DTextLabel(at[playerid]);
return 1;
}
public OnFilterScriptInit()
{
print(\"Bence adminszolgálat script betöltve.\");
return 0;
}