Ajuda no "SETLEVEL" comando
#1

Uso esse comando aq de Setlevel:
dcmd_setlevel(playerid, params[])
Код:
{
            new tmp[256], tmp2[256], Index;		tmp = strtok(params,Index), tmp2 = strtok(params,Index);
		    if(!strlen(params)) return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");
	    	new player1, level, playername[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME], string[128];
			GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
			GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
			player1 = strval(tmp);
			level = strval(tmp2);
			if(!strlen(tmp2)) return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");
			if(!IsPlayerConnected(player1)) return SendClientMessage(playerid, VERMELHO, "Player nгo conectado");
			if(level > MAX_LEVEL) return SendClientMessage(playerid, VERMELHO, "Level maximo й 100. Escolha igual ou menor a 100");
			format(string,sizeof(string),"ADMIN: %s mudou o level de %s para %d", adminname, playername, level);
            dUserSetINT(PlayerName2(player1)).("Level",(level));
            PlayerInfo[player1][Level] = level;
            dUserSetINT(PlayerName2(player1)).("Level",(level));
            PlayerInfo[player1][Level] = level;
			return SendClientMessageToAll(BRANCO, string);
			

}
Tudo funfa de boa. Mostra a string de quem mudou o level, de quem foi mudado e o level escolhido, tudo perfeito. O problema й que quando mudo o level, o level de quem foi mudado nгo altera no arquivo dini, so quando ele disconnect, que tem la:
Код:
public OnPlayerDisconnect(playerid, reason)
{
    new name[MAX_PLAYER_NAME], file[256];
    GetPlayerName(playerid, name, sizeof(name));
    format(file, sizeof(file), SERVER_USER_FILE, name);
    
    if(gPlayerLogged[playerid] == 1)
    {
        dini_IntSet(file, "Score", GetPlayerScore(playerid));
        dini_IntSet(file, "Money", GetPlayerMoney(playerid));
        dini_IntSet(file, "level", PlayerInfo[playerid][Level]);
		dini_IntSet(file, "Cold", PlayerInfo[playerid][Cold]);
		dini_IntSet(file, "Hot", PlayerInfo[playerid][Hot]);
    }
    gPlayerLogged[playerid] = 0;
	return 1;
}
Nгo tem como salvar assim que muda с ? =SS
Reply
#2

@Blackwave:

Tente:

sу eu para entender esses cуdigos grudados,pqp
pawn Код:
new
    tmp[256],
    tmp2[256],
    Index
;

tmp = strtok(params,Index),
tmp2 = strtok(params,Index);

if(!strlen(params))
    return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");
new
    player1,
    level,
        file[64],
    playername[24],
    adminname[24],
    string[128]
;

GetPlayerName(playerid, playername, 24);
GetPlayerName(playerid, adminname, 24);
player1 = strval(tmp);
level = strval(tmp2);

if(!strlen(tmp2))
    return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");

if(!IsPlayerConnected(player1))
    return SendClientMessage(playerid, VERMELHO, "Player nгo conectado");

if(level > MAX_LEVEL)
    return SendClientMessage(playerid, VERMELHO, "Level maximo й 100. Escolha igual ou menor a 100");

format(string,sizeof(string),"ADMIN: %s mudou o level de %s para %d", adminname, playername, level);
PlayerInfo[player1][Level] = level;
format(file, sizeof(file), SERVER_USER_FILE, name);
dini_IntSet(file, "level", PlayerInfo[playerid][Level]);
return SendClientMessageToAll(BRANCO, string);
Reply
#3

cara, o comando ta ok, mas nгo salva no dini, apenas isso. Meu comando funciona 100%. Notei que as dinis nгo se modificam quando o player estб online, mas sim quando ele disconecta, como no On‌PlayerDisconnect =S
Reply
#4

Nгo,Dini edita quando vocк chama a funзгo,sua afirmaзгo acima foi errada
Й provбvel que vocк esteja chamando em onplayerdis
Reply
#5

He, mas precisa atualizar logo pra detectar nos comandos que precisa de nivel admin. Por causa desse dini que nao atualiza, o comando que pede lvl admin buga, mas quando dexo ele setado ja no dini e entro no jogo, nao buga.
Reply
#6

Basta copiar as funзхes de OnPlayerDisconnect para o Comando,assim executarб a mesma operaзгo.
Reply
#7

Sim tentei, mas apos usar o comando, olho no arquivo do meu nome e ta la o mesmo level: 0. Ai se eu puxo pra chekar o level em um comando adm, provavelmente nгo funciona ou buga, pois o lvl estarб 0 no meu arquivo .ini
Reply
#8

Claro,ele nem esta setando o level...
Verifique melhor o comando,mas pelo que me parece ele nгo esta setando

Pois vocк esta usando strtok e dcmd ao mesmo tempo,lol como fica isto?
Reply
#9

nгo sei muito bem oq й strtok, so o strcmp e dcmd:
Aqui meu codigo. So tem isso:
Код:
dcmd_setlevel(playerid, params[])
{
            new tmp[256], tmp2[256], Index;		tmp = strtok(params,Index), tmp2 = strtok(params,Index);
		    if(!strlen(params)) return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");
	    	new player1, level, playername[MAX_PLAYER_NAME], adminname[MAX_PLAYER_NAME], string[128];
			GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
			GetPlayerName(playerid, adminname, MAX_PLAYER_NAME);
			player1 = strval(tmp);
			level = strval(tmp2);
			if(!strlen(tmp2)) return SendClientMessage(playerid, VERMELHO, "USAGE: /setlevel [playerid] [level]");
			if(!IsPlayerConnected(player1)) return SendClientMessage(playerid, VERMELHO, "Player nгo conectado");
			if(level > MAX_LEVEL) return SendClientMessage(playerid, VERMELHO, "Level maximo й 100. Escolha igual ou menor a 100");
			format(string,sizeof(string),"ADMIN: %s mudou o level de %s para %d", adminname, playername, level);
            dUserSetINT(PlayerName2(player1)).("Level",(level));
            PlayerInfo[player1][Level] = level;
            dUserSetINT(PlayerName2(player1)).("Level",(level));
            PlayerInfo[player1][Level] = level;
			return SendClientMessageToAll(BRANCO, string);
			

}
e no OnPlayerCommadText:
Код:
public OnPlayerCommandText(playerid, cmdtext[])
{
   
     dcmd(setlevel,8,cmdtext);
     return 0;
}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)