[Help] Setlevel Command. -
[mad]MLK - 04.10.2009
Hey i need a hand, I want to code a /setlevel command, I have this but it doesn't work heres what i have:
Код:
dcmd_setlevel(playerid,params[])
{
if (level[playerid] >= 5)
{
tmp = strtok(params, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, orange, "Error: /setlevel [playerid] [level 1-5]");
return 1;
}
new giveplayerid = ReturnUser(tmp, playerid);
tmp = strtok(params, idx);
new level = strval(tmp);
if(giveplayerid != INVALID_PLAYER_ID)
{
if (level >= 0)
{
GetPlayerName(giveplayerid, giveplayername, sizeof(giveplayername));
GetPlayerName(playerid, sendername, sizeof(sendername));
printf("ADMIN: %s made %s a level %d admin.", sendername, giveplayername, level);
format(string, sizeof(string), "You are now an administrator level %d thanks to %s.", level, sendername);
SendClientMessage(giveplayerid, blue, string);
format(string, sizeof(string), "Administrator %s has given %s an Admin Level. [Level: %d]", sendername,giveplayername,level);
SendClientMessageToAdmins(orange, string, 1);
level[giveplayerid] = level;
format(string, sizeof(string), "You have given %s level %d admin.", giveplayername,AccountInfo[giveplayerid][AdminLevel]);
SendClientMessage(playerid, blue, string);
}
else return SendClientMessage(playerid, RED, "You need to set a player above level 0.");
}
else if(giveplayerid == INVALID_PLAYER_ID)
{
format(string, sizeof(string), "%i is not an active player.", giveplayerid);
SendClientMessage(playerid, RED, string);
}
}
else SendClientMessage(playerid, RED, "Error: You need to be a administrator to use this command");
return 1;
}
Heres the errors
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(43

: error 017: undefined symbol "tmp"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(43

: error 017: undefined symbol "idx"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(439) : error 017: undefined symbol "tmp"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(444) : error 017: undefined symbol "ReturnUser"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(445) : error 017: undefined symbol "tmp"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(445) : error 017: undefined symbol "idx"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(446) : warning 219: local variable "level" shadows a variable at a preceding level
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(446) : error 017: undefined symbol "tmp"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(451) : error 017: undefined symbol "giveplayername"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(451) : error 017: undefined symbol "giveplayername"
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(451) : error 029: invalid expression, assumed zero
C:\Users\user\Desktop\SAMP Server\Everything World\gamemodes\EverythingWorldTwoBeta.pwn(451) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
11 Errors.
Re: [Help] Setlevel Command. -
whooper - 04.10.2009
why use strtok?
Re: [Help] Setlevel Command. -
[mad]MLK - 04.10.2009
bump?
Re: [Help] Setlevel Command. -
(.Aztec); - 04.10.2009
new idx, tmp[256];
new giveplayername[MAX_PLAYER_NAME];
pawn Код:
ReturnUser(text[], playerid = INVALID_PLAYER_ID)
{
new pos = 0;
while (text[pos] < 0x21) // Strip out leading spaces
{
if (text[pos] == 0) return INVALID_PLAYER_ID; // No passed text
pos++;
}
new userid = INVALID_PLAYER_ID;
if (IsNumeric(text[pos])) // Check whole passed string
{
// If they have a numeric name you have a problem (although names are checked on id failure)
userid = strval(text[pos]);
if (userid >=0 && userid < MAX_PLAYERS)
{
if(!IsPlayerConnected(userid))
{
/*if (playerid != INVALID_PLAYER_ID)
{
SendClientMessage(playerid, 0xFF0000AA, "User not connected");
}*/
userid = INVALID_PLAYER_ID;
}
else
{
return userid; // A player was found
}
}
/*else
{
if (playerid != INVALID_PLAYER_ID)
{
SendClientMessage(playerid, 0xFF0000AA, "Invalid user ID");
}
userid = INVALID_PLAYER_ID;
}
return userid;*/
// Removed for fallthrough code
}
// They entered [part of] a name or the id search failed (check names just incase)
new len = strlen(text[pos]);
new count = 0;
new name[MAX_PLAYER_NAME];
for (new i = 0; i < MAX_PLAYERS; i++)
{
if (IsPlayerConnected(i))
{
GetPlayerName(i, name, sizeof (name));
if (strcmp(name, text[pos], true, len) == 0) // Check segment of name
{
if (len == strlen(name)) // Exact match
{
return i; // Return the exact player on an exact match
// Otherwise if there are two players:
// Me and MeYou any time you entered Me it would find both
// And never be able to return just Me's id
}
else // Partial match
{
count++;
userid = i;
}
}
}
}
if (count != 1)
{
if (playerid != INVALID_PLAYER_ID)
{
if (count)
{
SendClientMessage(playerid, 0xFF0000AA, "Multiple users found, please narrow earch");
}
else
{
SendClientMessage(playerid, 0xFF0000AA, "No matching user found");
}
}
userid = INVALID_PLAYER_ID;
}
return userid; // INVALID_USER_ID for bad return
}
Seriously?
Re: [Help] Setlevel Command. -
[mad]MLK - 04.10.2009
eh?
Re: [Help] Setlevel Command. -
Peter_Corneile - 04.10.2009
By looking at the code it seems like you just copied the command from some script and pasted it to your script without caring about the defines already made for that command in the script you copied from .. Quite funny actually
Re: [Help] Setlevel Command. -
Gappy - 05.10.2009
sscanf would be a much better choice than strtok
pawn Код:
dcmd_setlevel(playerid,params[])
{
new giveplayerid, plevel, string[128];
new giveplayername[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME];
if (level[playerid] >= 5)
{
if(sscanf(params, "ui", giveplayerid, plevel))
{
SendClientMessage(playerid, orange, "Error: /setlevel [playerid] [level 1-5]");
return 1;
}
if(giveplayerid != INVALID_PLAYER_ID)
{
if (level >= 0)
{
GetPlayerName(giveplayerid, giveplayername, sizeof(giveplayername));
GetPlayerName(playerid, sendername, sizeof(sendername));
printf("ADMIN: %s made %s a level %d admin.", sendername, giveplayername, plevel);
format(string, sizeof(string), "You are now an administrator level %d thanks to %s.", plevel, sendername);
SendClientMessage(giveplayerid, blue, string);
format(string, sizeof(string), "Administrator %s has given %s an Admin Level. [Level: %d]", sendername,giveplayername,plevel);
SendClientMessageToAdmins(orange, string, 1);
level[giveplayerid] = plevel;
format(string, sizeof(string), "You have given %s level %d admin.", giveplayername,AccountInfo[giveplayerid][AdminLevel]);
SendClientMessage(playerid, blue, string);
}
else return SendClientMessage(playerid, RED, "You need to set a player above level 0.");
}
else
{
format(string, sizeof(string), "%i is not an active player.", giveplayerid);
SendClientMessage(playerid, RED, string);
}
}
else SendClientMessage(playerid, RED, "Error: You need to be a administrator to use this command");
return 1;
}
and somewhere at the bottom of your script
pawn Код:
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':
{
setarg(paramPos, 0, _:floatstr(string[stringPos]));
}
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;
}
Re: [Help] Setlevel Command. -
eXchainZ-FoReVeR - 05.10.2009
If you don't know how to fix that, How will you be able to create your Dino-Host.