Üdv.
Mivel a Segítségkérés topicban már számtalan ilyen témát láttam ezért most összefoglalóan megírtam az összes ilyen pont,pénz és skin adást... az admin tud felülírni vagy hozzáadni akárkinek pénz vagy pontot illetve az admin tud skint állítani akárkinek és a játékos is tud skint állítani magának... Remélem valakinek a segítségére leszek ezzel :)
Letöltés: http://www.solidfiles.com/d/c982c8447b/
//Alap sscanf dolgok
//Készítette:Szasza
#include
#include
#include
new mp,name1[MAX_PLAYER_NAME],name2[MAX_PLAYER_NAME];
#if defined FILTERSCRIPT
public OnFilterScriptInit()
{
print(\"\\n--------------------------------------\");
print(\" Alap sscanf parancsok betöltve. By:Szasza\");
print(\"--------------------------------------\\n\");
return 1;
}
public OnFilterScriptExit()
{
print(\"\\n--------------------------------------\");
print(\" Alap sscanf parancsok kiiktatva. By:Szasza\");
print(\"--------------------------------------\\n\");
return 1;
}
#else
#endif
//adminnal akárkinek lehet skint állítani
CMD:setskin(playerid,params[])
{
new skinid,string[128],string2[128];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,skinid)) return SendClientMessage(playerid,-1,\"Használat: /setskin \");
{
if(skinid <= 299 && skinid >= 0)
{
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
format(string,sizeof(string),\"Admin:%s beállította a skined(SkinID:%d)\",name1,skinid);
format(string2,sizeof(string2),\"Beállítottad %s skinét(SkinID:%d)\",name2,skinid);
SendClientMessage(mp,-1,string);
SendClientMessage(playerid,-1,string2);
SetPlayerSkin(mp,skinid);
}
else SendClientMessage(playerid,-1,\"A SkinID-nek 0 és 299 között kell lennie!\");
}
return 1;
}
//magadnak betudod állítani a skined
CMD:myskin(playerid,params[])
{
new skinid,string[128];
if(sscanf(params,\"i\",skinid)) return SendClientMessage(playerid,-1,\"Használat: /myskin \");
{
if(skinid <= 299 && skinid >= 0)
{
format(string,sizeof(string),\"Beállítottad a skined(SkinID:%d)\",skinid);
SendClientMessage(playerid,-1,string);
SetPlayerSkin(playerid,skinid);
}
else SendClientMessage(playerid,-1,\"A SkinID-nek 0 és 299 között kell lennie!\");
}
return 1;
}
//adminnal akárkinek átlehet állítani a pontjait(teljesen felülírja a pontjait)
CMD:setscore(playerid,params[])
{
new score,string[128],string2[128];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,score)) return SendClientMessage(playerid,-1,\"Használat: /setscore \");
{
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
format(string,sizeof(string),\"Admin:%s beállította a pontjaidat(Pontok:%d)\",name1,score);
format(string2,sizeof(string2),\"Beállítottad %s pontjait.(Pontok:%d)\",name2,score);
SendClientMessage(mp,-1,string);
SendClientMessage(playerid,-1,string2);
SetPlayerScore(mp,score);
}
return 1;
}
//adminnal pontot lehet adni akárkinek (hozzáadja a meglévõ pontjához)
CMD:givescore(playerid,params[])
{
new score,string[128],string2[128];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,score)) return SendClientMessage(playerid,-1,\"Használat: /givescore \");
{
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
format(string,sizeof(string),\"Admin:%s pontot adott (+pontod:%d,összes pontod: %d)\",name1,score,GetPlayerScore(mp)+score);
format(string2,sizeof(string2),\"Pontot adtál %s -nak/nek.(+pont:%d,összes pontja: %d)\",name2,score,GetPlayerScore(mp)+score);
SendClientMessage(mp,-1,string);
SendClientMessage(playerid,-1,string2);
SetPlayerScore(mp,score+GetPlayerScore(playerid));
}
return 1;
}
//adminnal akárkinek átlehet állítani a pénzét(teljesen felülírja a pénzét)
CMD:setmoney(playerid,params[])
{
new money,string[128],string2[128];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,money)) return SendClientMessage(playerid,-1,\"Használat: /setmoney \");
{
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
format(string,sizeof(string),\"Admin:%s beállította a pénzed(Pénzed:$%d)\",name1,money);
format(string2,sizeof(string2),\"Beállítottad %s pénzét.(Pénze:$%d)\",name2,money);
SendClientMessage(mp,-1,string);
SendClientMessage(playerid,-1,string2);
ResetPlayerMoney(mp);
GivePlayerMoney(mp,money);
}
return 1;
}
//adminnal pénzt lehet adni akárkinek (hozzáadja a meglévõ pénzéhez)
CMD:givemoney(playerid,params[])
{
new money,string[128],string2[128];
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,money)) return SendClientMessage(playerid,-1,\"Használat: /givemoney \");
{
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
format(string,sizeof(string),\"Admin:%s pénzt adott(+pénz:$%d,Összes pénzed: $%d)\",name1,money,GetPlayerMoney(mp)+money);
format(string2,sizeof(string2),\"Pénzt adtál %s -nak/nek.(+pénz:$%d,Összes pénze: $%d)\",name2,money,GetPlayerMoney(mp)+money);
SendClientMessage(mp,-1,string);
SendClientMessage(playerid,-1,string2);
GivePlayerMoney(mp,money);
}
return 1;
}
@Szasza
Már nem elõször látom tõled az ilyen sorrendbeli kód írást.
new skinid,string[128],string2[128];
GetPlayerName(playerid,name1,sizeof(name1));
GetPlayerName(mp,name2,sizeof(name2));
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,-1,\"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
if(sscanf(params,\"id\",mp,skinid)) return SendClientMessage(playerid,-1,\"Használat: /setskin \");
Ha a játékos nem Rcon admin ként írja be a jelszót (ugyanez a helyzet sscanf elõtt is) és megjelenik számára az üzenet hogy õ nem az, akkor a kód elõtt miért kéred le a játékos neveket? (hiszen nem kerül felhasználásra) és közben ahogy írom az egészet észre is vettem hogy mp (gondolom \"másikplayer\" rövidítés) nevét lekéred még mielõtt a sscanf egyáltalán eltárolná az mp változóban a beírt másik játékos azonosítószámát.
Megnézni megnéztem de még mindig találok benne kivetni valót. :angel:
A globálisan létrehozott változók játékos névnek nem igazán megfelelõek igaz úgy tûnik hogy memória területet spórol vele az ember de viszont sok admin esetén akik egy idõben használják a parancsot kis lassulást lehet tapasztalni a mûködésben (gép függõ).
Korábban írtam egy változatot valamiben amiben szépen leírtam valamilyen hasonló parancsban hogyan lehet egyetlen egy változóval lekérni játékos nevet ugyanazt a változót újból felhasználva megjeleníteni az üzenetet.
Most csak egy újabb példával próbálom szemléltetni hogyan célszerûbb írni ilyen parancs-ot/okat:
CMD:setskin2(playerid,params[])
{
new
mp,
skinid;
if(!IsPlayerAdmin(playerid)) SendClientMessage(playerid, -1, \"Nem vagy bejelenetkezve az RCON adminba!\");//ezt átlehet írni a saját amdinrendszerünkre
else if(isnull(params) || sscanf(params, \"ud\", mp, skinid)) SendClientMessage(playerid, -1, \"Használat: /setskin \");
else if(mp== INVALID_PLAYER_ID) SendClientMessage(playerid, -1, \"A játékos nincs csatlalkozva!\");
else if(!(0 <= skinid <= 299)) SendClientMessage(playerid, -1, \"A SkinID-nek 0 és 299 között kell lennie!\");
else
{
SetPlayerSkin(mp, skinid); // És mivel múlt idõben kerülnek a szövegek megjelenítésre akkor a kódban is legyen elõbb az egész skin változtatás :D
new
str[128];
if(playerid != mp) // Ha a parancs használója saját magának állítja vele a skin-t akkor ne írja ki neki ezt az üzenetet.
{
GetPlayerName(playerid, str, MAX_PLAYER_NAME);
format(str, sizeof str, \"Admin:%s beállította a skined(SkinID:%d)\", str, skinid);
SendClientMessage(mp, -1, str);
}
GetPlayerName(mp, str, MAX_PLAYER_NAME);
format(str, sizeof str, \"Beállítottad %s skinét(SkinID:%d)\", str, skinid);
SendClientMessage(playerid, -1, str);
}
return 1;
}
Ui.:
Ha van kérdés nyugodtan tedd fel, szívesen válaszolok hogy mit miért úgy írtam a példa parancsban. ;)
Na tessék:
CMD:setskin(playerid, params[]) { // maga a parancs
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, -1, \"Nem vagy bejelenetkezve az RCON admin!\"); // Ha nincs RCON admin módban az illetõ
new mp, skinid, str[512], n1[MAX_PLAYER_NAME], n2[MAX_PLAYER_NAME]; // változók
if(sscanf(params, \"ui\", mp, skinid)) return SendClientMessage(playerid, -1, \"Használat: /setskin [playerid/név] [skinID]\");
if(!IsPlayerConnected(mp)) return SendClientMessage(playerid, -1, \"A játékos nem aktív!\");// ha a játékos nem tartózkodik a szerveren
if(!(-1 < skinid < 301)) return SendClientMessage(playerid, -1, \"Hibás SkinID: 0 - 300\"); // ha hibás szmot ír be skinid-ként
if(mp == playerid) { // Ha magadnak állítod be a skined
SetPlayerSkin(playerid, skinid);//beállítja a megadott skin-t
SendClientMessage(playerid, -1, \"Sikeresen beállítva a saját skined!\"); // elküldi az üzenetet - -1=fehér
return 1;//megállítja a parancsot
}
GetPlayerName(playerid, n1, sizeof(n1)); // Admin neve
GetPlayerName(mp, n2, sizeof(n2));//akin alkalmazod a skinmódosítást neve :o
SetPlayerSkin(mp, skinid);//beállítja a megadott skin-t
format(str, sizeof(str), \"Adminisztrátor, %s beállította a karakteredet %i-ra/re.\", n1, n2, skinid);
SendClientMessageToAll(-1, str); // elküldi mindenkinek az üzenetet ha nem magadnak állítottál skin-t
return 1;
}