Hali! Megírtam ezt FilterScriptben (( illeszd be nyugodtan a modba )) , annyi hogy muszáj volt zcmd-vel írni , mert az sscanf csak így mûködik. Ja és még 1 , az sscanf-ot be kell rakni a szerverre , és hogy figyelj a megjegyzésekre.
Ha használni akarod pl. SendClientMessage-ben , akkor az pl így nézzen ki:
new string[256];
format(string,sizeof(string), \"%s kapott egy kekszet.\", aName[playerid]);
SendClientMessage(playerid, -1, string);
A rendszer:
#include <a_samp>
#include <sscanf2>
#include <dini>
#include <dudb>
#include <zcmd>
#if defined FILTERSCRIPT
new nev[MAX_PLAYER_NAME];
new aName[MAX_PLAYERS];
stock(SaveAdminName(playerid)
{
new file[128];
format(file, sizeof(file), \"/Karakterek/%s.ini\", nev); //itt írd át a saját dinis elérési útra amit megadtál a register rendszernél , ha nincs ilyen akkor hozz létre egy Karakterek mappát a scriptfiles-ben és írj egy olyan + sort hogy: dini_Create(file);
dini_IntSet(file, \"aName\", aName[playerid]);
}
stock(LoadAdminName(playerid)
{
new file[128];
format(file, sizeof(file), \"/Karakterek/%s.ini\", nev);
aName[playerid] = dini_Int(file, \"aName\");
}
public OnPlayerConnect(playerid)
{
LoadAdminName(playerid);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SaveAdminName(playerid);
aName[playerid] = -;
return 1;
}
CMD:adminnev(playerid,params[])
{
if(IsPlayerAdmin(playerid)); // így csak rcon adminnak megy , cseréld ki a te admin változódra
{
new name;
if(sscanf(params,\"s[256]\",name)); return SendClientMessage(playerid, -1, \"Használat: /adminnev [Admin név]\");
aName[playerid] = name;
}
else SendClientMessage(playerid, -1, \"Minimum admin szint: Fõadmin\");
return 1;
}
#endif
Így van, DCMD -vel a legegyszerûbb, azt tudod használni az alap parancskezelõ mellett.
Egyébként SuBwayer, ezt lefordítottad? Mert én kapásból több hibát is észrevettem rajta.
Írtam egyet, ennek mûködnie kell.
#include <a_samp>
#include <Dini>
#define dcmd(%1,%2,%3) if (!strcmp((%3)[1], #%1, true, (%2)) && ((((%3)[(%2) + 1] == \'\\0\') && (dcmd_%1(playerid, \"\"))) || (((%3)[(%2) + 1] == \' \') && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
new AdminName[MAX_PLAYERS][24+1];
new str[64];
stock AdminNev(playerid, bool:mentes)
{
if(mentes) // mentés
{
format(str, sizeof str, \"%s.ini\", GetName(playerid));
if(!dini_Exists(str)) dini_Create(str);
dini_Set(str, \"AdminName\", AdminName[playerid]);
}
else // betöltés
{
format(str, sizeof str, \"%s.ini\", GetName(playerid));
if(!dini_Exists(str)) return 1;
format(AdminName[playerid], 25, \"%s\", dini_Get(str, \"AdminName\"));
}
return 1;
}
public OnPlayerConnect(playerid)
{
AdminNev(playerid, false);
return 1;
}
public OnPlayerDisconnect(playerid)
{
AdminNev(playerid, true);
format(AdminName[playerid], 25, \"\");
return 1;
}
dcmd_setaname(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return 1;
if(!strlen(params) || strlen(params) > 24) return 1;
format(AdminName[playerid], 25, \"%s\", params);
return 1;
}
dcmd_getaname(playerid, params[])
{
SendClientMessage(playerid, -1, AdminName[playerid]);
#pragma unused params
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(setaname, 8, cmdtext);
dcmd(getaname, 8, cmdtext);
return 1;
}
stock GetName(id)
{
GetPlayerName(id, str, sizeof str);
return str;
}