help with making a /setadmin command
#1

ok, i really need a /setadmin command for my server, so ... im making one.


Some info
new IsLogged[MAX_PLAYERS];
new level[MAX_PLAYERS];

Some variables that im using for this.

and.. this is how far i am on the command
Код:
if(strcmp(cmd, "/setlevel", true) == 0)
i have absolute no clue... how to start this command, i tryed using one my friend gave me, but it didnt save the levels...

Reply
#2

I have, and... so far nothing saves.
Reply
#3

Yes check other scripts to see how they did it.If you still dont get it use wiki.sa-mp.com
Reply
#4

if u need save make them on dini file
every admin beside his level...
and OnPlayerConnect add a dini_get to check the
player's level
cant explain but you said u should know ur self!
Reply
#5

What script are you using?

Making it save shouldn't be difficult, as people said above, check other GM's commands for setting the adminlevel.
Just edit the saving part suitable for your script. E.g. check how the other saving parts are done, like weapons, skin, cash etc.
Reply
#6

how u define ur admin level , like : if(Pinfo[playerid][level] <= 3) show me the code how u define it and i will help u
Reply
#7

Код:
	if(strcmp(cmd, "/register", true) == 0)
	{
  if(MiniGame[playerid] == 1) return GameTextForPlayer(playerid,"You cant use this command because you are in a minigame",5000,4);
	new name[MAX_PLAYER_NAME];
	new IP[16];
	tmp = strtok(cmdtext, idx);
	GetPlayerName(playerid, name, sizeof(name));
  GetPlayerIp(playerid,IP,sizeof(IP));
	if(strlen(tmp) == 0) return SendClientMessage(playerid, COLOR_GREY, "USAGE: /register [password]");
	format(file,sizeof(file),"%s.ini",name);
	if(!fexist(file))
	{
  dini_Create(file);
  dini_IntSet(file, "Password", udb_hash(tmp));
	dini_IntSet(file,"Cash", GetPlayerMoney(playerid));
  dini_IntSet(file,"Score", GetPlayerScore(playerid));
	dini_IntSet(file,"Skin", GetPlayerSkin(playerid));
  dini_IntSet(file,"Loc", GetPlayerPos(playerid, x, y, z));
	SendClientMessage(playerid, COLOR_LIME, "[System]: Account Created! you can now /login [Password]!");
	PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
	GetPlayerName(playerid, name, sizeof(name));
	printf("%s has registered a account!", name);
	}
	else
	{
  SendClientMessage(playerid, COLOR_RED, " Account Already Found In Database");
  PlayerPlaySound(playerid,1057,0.0,0.0,0.0);
	}
  return 1;
  }
	if(strcmp(cmd, "/login", true) == 0)
	{
  if(MiniGame[playerid] == 1) return GameTextForPlayer(playerid,"You cant use this command because you are in a minigame",5000,4);
	new PlayerName[24];
	tmp = strtok(cmdtext, idx);
	if(strlen(tmp) == 0) return SendClientMessage(playerid, COLOR_SG, "USAGE: /login [password]");
  new name[MAX_PLAYER_NAME];
	if(IsLogged[playerid] == 1)
	{
	SendClientMessage(playerid, COLOR_RED, "You already are logged in!");
	return 1;
	}
	else
	{
	GetPlayerName(playerid, name, sizeof(name));
	format(file,sizeof(file),"%s.ini",name);
	if(fexist(file))
	{
	tmp2 = dini_Get(file, "Password");
	if(udb_hash(tmp) != strval(tmp2))
	{
	SendClientMessage(playerid, COLOR_RED, "Login Failed!");
  GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
	printf("%s has failed to login", name);
	}
	else
	{
	IsLogged[playerid] = 1;
	SetPlayerMoney(playerid, dini_Int(file, "Cash"));
	SetPlayerScore(playerid, dini_Int(file, "Score"));
	SetPlayerSkin(playerid, dini_Int(file, "Skin"));
	SendClientMessage(playerid, COLOR_LIME, "[System]: Logged in!");
	}
	}
	}
	return 1;
	}
and no, the admin level shits not in there atm, becuase i was trying ranomd things.


more info
Код:
enum Info
{
    Level,
     Cash,
     Skin,
     Score,
     Loc,
}
new PlayerInfo[MAX_PLAYERS][Info];
Reply
#8

ok use this command , its setadmin and i guarantee 100% it works
Код:
dcmd_setadmin(playerid, params[])
{
    new string[128];
	new giveplayerid, level;
	new playername[MAX_PLAYER_NAME],idname[MAX_PLAYER_NAME];
	GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
	GetPlayerName(playerid,idname,MAX_PLAYER_NAME);
	if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_RED, "You Have To Be Rcon Admin To Use This Command!");
	if(sscanf(params, "ud", giveplayerid, level))return SendClientMessage(playerid, COLOR_RED, "Usage: /setadmin [Playerid/Partname] [Level]");
	else if (giveplayerid == INVALID_PLAYER_ID)return SendClientMessage(playerid, COLOR_RED, "Player Is Not Connected");
 	else if (level > 5)return SendClientMessage(playerid, COLOR_RED, "Maximum Level Is 3");
  else
	{
 		PlayerInfo[giveplayerid][Level] = level;
		format(string,sizeof(string),"Administrator %s Set Your Level To %d",playername,level);
		SendClientMessage(giveplayerid,COLOR_YELLOW,string);
	}
	return 1;
}
if u dont have the stock of the sscanf here is it :
Код:
//------------------[SSCANF]-------------------------------------
stock sscanf(string[], format[], {Float,_}:...)
{
	#if defined isnull
		if (isnull(string))
	#else
		if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
	#endif
		{
			return format[0];
		}
	#pragma tabsize 4
	new
		formatPos = 0,
		stringPos = 0,
		paramPos = 2,
		paramCount = numargs(),
		delim = ' ';
	while (string[stringPos] && string[stringPos] <= ' ')
	{
		stringPos++;
	}
	while (paramPos < paramCount && string[stringPos])
	{
		switch (format[formatPos++])
		{
			case '\0':
			{
				return 0;
			}
			case 'i', 'd':
			{
				new
					neg = 1,
					num = 0,
					ch = string[stringPos];
				if (ch == '-')
				{
					neg = -1;
					ch = string[++stringPos];
				}
				do
				{
					stringPos++;
					if ('0' <= ch <= '9')
					{
						num = (num * 10) + (ch - '0');
					}
					else
					{
						return -1;
					}
				}
				while ((ch = string[stringPos]) > ' ' && ch != delim);
				setarg(paramPos, 0, num * neg);
			}
			case 'h', 'x':
			{
				new
					num = 0,
					ch = string[stringPos];
				do
				{
					stringPos++;
					switch (ch)
					{
						case 'x', 'X':
						{
							num = 0;
							continue;
						}
						case '0' .. '9':
						{
							num = (num << 4) | (ch - '0');
						}
						case 'a' .. 'f':
						{
							num = (num << 4) | (ch - ('a' - 10));
						}
						case 'A' .. 'F':
						{
							num = (num << 4) | (ch - ('A' - 10));
						}
						default:
						{
							return -1;
						}
					}
				}
				while ((ch = string[stringPos]) > ' ' && ch != delim);
				setarg(paramPos, 0, num);
			}
			case 'c':
			{
				setarg(paramPos, 0, string[stringPos++]);
			}
			case 'f':
			{

				new changestr[16], changepos = 0, strpos = stringPos;
				while(changepos < 16 && string[strpos] && string[strpos] != delim)
				{
					changestr[changepos++] = string[strpos++];
  				}
				changestr[changepos] = '\0';
				setarg(paramPos,0,_:floatstr(changestr));
			}
			case 'p':
			{
				delim = format[formatPos++];
				continue;
			}
			case '\'':
			{
				new
					end = formatPos - 1,
					ch;
				while ((ch = format[++end]) && ch != '\'') {}
				if (!ch)
				{
					return -1;
				}
				format[end] = '\0';
				if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
				{
					if (format[end + 1])
					{
						return -1;
					}
					return 0;
				}
				format[end] = '\'';
				stringPos = ch + (end - formatPos);
				formatPos = end + 1;
			}
			case 'u':
			{
				new
					end = stringPos - 1,
					id = 0,
					bool:num = true,
					ch;
				while ((ch = string[++end]) && ch != delim)
				{
					if (num)
					{
						if ('0' <= ch <= '9')
						{
							id = (id * 10) + (ch - '0');
						}
						else
						{
							num = false;
						}
					}
				}
				if (num && IsPlayerConnected(id))
				{
					setarg(paramPos, 0, id);
				}
				else
				{
					#if !defined foreach
						#define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
						#define __SSCANF_FOREACH__
					#endif
					string[end] = '\0';
					num = false;
					new
						name[MAX_PLAYER_NAME];
					id = end - stringPos;
					foreach (Player, playerid)
					{
						GetPlayerName(playerid, name, sizeof (name));
						if (!strcmp(name, string[stringPos], true, id))
						{
							setarg(paramPos, 0, playerid);
							num = true;
							break;
						}
					}
					if (!num)
					{
						setarg(paramPos, 0, INVALID_PLAYER_ID);
					}
					string[end] = ch;
					#if defined __SSCANF_FOREACH__
						#undef foreach
						#undef __SSCANF_FOREACH__
					#endif
				}
				stringPos = end;
			}
			case 's', 'z':
			{
				new
					i = 0,
					ch;
				if (format[formatPos])
				{
					while ((ch = string[stringPos++]) && ch != delim)
					{
						setarg(paramPos, i++, ch);
					}
					if (!i)
					{
						return -1;
					}
				}
				else
				{
					while ((ch = string[stringPos++]))
					{
						setarg(paramPos, i++, ch);
					}
				}
				stringPos--;
				setarg(paramPos, i, '\0');
			}
			default:
			{
				continue;
			}
		}
		while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
		{
			stringPos++;
		}
		while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
		{
			stringPos++;
		}
		paramPos++;
	}
	do
	{
		if ((delim = format[formatPos++]) > ' ')
		{
			if (delim == '\'')
			{
				while ((delim = format[formatPos++]) && delim != '\'') {}
			}
			else if (delim != 'z')
			{
				return delim;
			}
		}
	}
	while (delim > ' ');
	return 0;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)