Pozdrav, poceo sam raditi DM scriptu i kada sam htjeo ubaciti amin system, sve sam ok radio. Cim sam stavio "/kick" komandu javlja mi se error u vezi redu "giveplayerid = ReturnUser(tmp);". Prvo mi kaze kako ne postoji ReturnUser pa sam dodao na pocetku OnPlayerCommandText -> new ReturnUser . Evo kako izgleda ispod OPCT:
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256];
new string[256];
new sendername[MAX_PLAYER_NAME];
new giveplayer[MAX_PLAYER_NAME];
new giveplayerid, idx;
new ReturnUser;
cmd = strtok(cmdtext, idx);
cmd = strtok(cmdtext, idx);
new tmp[256];
new playername[MAX_PLAYER_NAME];
Dalje su komande...
E, a ovako izgleda komanda kick preuzeta iz GF:[/b]
if(strcmp(cmd, "/kick", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "KORISTITE: /kick [ID/Ime] [razlog]");
return 1;
}
giveplayerid = ReturnUser(tmp);
if(PlayerInfo[playerid][pAdmin] >= 1)
{
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result))
{
SendClientMessage(playerid, COLOR_WHITE, "KORISTITE: /kick [ID/Ime] [razlog]");
return 1;
}
new year, month,day;
getdate(year, month, day);
format(string, sizeof(string), "Admin %s je izbacio(kickao) igraca %s sa servera. Razlog: %s", sendername, giveplayer, (result));
KickLog(string);
format(string, sizeof(string), "Admin %s je izbacio(kickao) igraca %s sa servera. Razlog: %s", sendername, giveplayer, (result));
SendClientMessageToAll(COLOR_LIGHTRED, string);
Kick(giveplayerid);
return 1;
}
}
}
else
{
format(string, sizeof(string), "%d nije aktivan igrac.", giveplayerid);
SendClientMessage(playerid, COLOR_GRAD1, string);
}
}
return 1;
}
I ovo je error koji se javlja u redu gdje se nalazi "giveplayerid = ReturnUser(tmp);":
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(576) : warning 219: local variable "ReturnUser" shadows a variable at a preceding level
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(771) : error 012: invalid function call, not a valid address
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(771) : warning 215: expression has no effect
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(771) : error 001: expected token: ";", but found ")"
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(771) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(771) : fatal error 107: too many error messages on one line
Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
4 Errors.
Hvala unaprijed!
Imas ReturnPlayer funkciju?
Ako nemas dodaj ju:
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
}
A di da je stavim?
Bilo gdje u skripti samo ne u neki callback.
E sada sam popravio taj error ali mi se javlja drugi koji govori da ima negdje jos u scripti a nema nigdje osim "giveplayerid = ReturnUser(tmp) na /kick i ostalim komandama koje ih trebaju.
C:\Documents and Settings\Laptop\Desktop\CroMafia\gamemodes\cmr.pwn(95) : error 021: symbol already defined: "ReturnUser"
Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase
6 Errors.
Onda makni, daj molim te pricekaj da ti nekod rugi odgovori jer sam se proteklih 2h mucio s skriptom imam velikih problema i sva logika mi je otkazala u glavi. :-[
EDIT: Samo izbrisi onu varijablu ReturnUser pod OnPlayerCommandText callbackom.
Bio sam to obrisao vec ali sam stavio tu ReturnUser funkciju na pocetak scripte odmah prije ovoga sto bude hrpa new i ispod definea. Sad nisam na svom laptopu pa ti mogu samo reci kako sam to stavio.
Fakat neznam... Mozda dok prespavam se sjetim necega.
Aj onda cu pricekati dok se sjetis.
ReturnUser je funkcija .. ovo "new ReturnUser;" ti netreba omg
Fala vam na pomoci ali sam samo trebo dodat include "utils" i rjesen problem xD! Opet bez vase pomoci nebi se toga sjetio xD
Haha, omg, kako sam glup. Jednostavije nemoze biti.