[Ajuda]CMD:encontrar
#1

Tenho um comando de /encontrar onde aparece no mapa onde o player se localiza, mas nao ta aparecendo

pawn Code:
CMD:encontrar(playerid, params[])
{
        Player[playerid][CMD] = 0;
        if(Player[playerid][pJob] != DETETIVE)
            return SendClientMessage(playerid, COLOR_RED, "[ERRO] Vocк nгo й um Detetive.");

        if(GetTickCount() - AntiFlood[playerid][15] < TempoEncontrar[playerid]*1000)
        {
            format(thestring, 128, "[ERRO] Vocк precisa esperar %d segundos para usar esse comando denovo!",TempoEncontrar[playerid]-(GetTickCount() - AntiFlood[playerid][15])/1000);
            SendClientMessage(playerid, COLOR_GREY, thestring);
            return 1;
        }

        new tmp[24], idx; tmp = strtok(params, idx);
        if(!strlen(tmp))
            return SendClientMessage(playerid, COLOR_GREY, "[USO] /encontrar [id]");

        new giveid = ReturnUser(tmp);
        if(IsPlayerConnected(giveid))
        {
            if(giveid != INVALID_PLAYER_ID)
            {
                if(PlayerTied[giveid] > 0)
                    return SendClientMessage(playerid, COLOR_RED,"[ERRO] O jogador foi sequestrado, nгo й possнvel localiza-lo!");

                if(Player[giveid][pAdmin] > 0)
                    return SendClientMessage(playerid, COLOR_RED,"[ERRO] Vocк nгo pode encontrar um administrador.");

                if(giveid == playerid)
                    return SendClientMessage(playerid, COLOR_RED,"[ERRO] Vocк nгo pode procurar vocк mesmo nй ¬¬!");

                new erro;
                new level = Player[playerid][pDetSkill];

                SetPlayerMarkerForPlayer(playerid, Procurado[playerid], 0xFFFFFF00);
                AntiFlood[playerid][15] = GetTickCount();
                Procurado[playerid] = giveid;
                if(level >= 0 && level <= 50)
                {
                    erro = 25;
                    TempoEncontrar[playerid] = 40;
                    Encontrando[playerid] = 5;
                }
                else if(level >= 51 && level <= 100)
                {
                    erro = 20;
                    TempoEncontrar[playerid] = 30;
                    Encontrando[playerid] = 10;
                }
                else if(level >= 101 && level <= 200)
                {
                    erro = 15;
                    TempoEncontrar[playerid] = 20;
                    Encontrando[playerid] = 10;
                }
                else if(level >= 201 && level <= 400)
                {
                    erro = 10;
                    TempoEncontrar[playerid] = 10;
                    Encontrando[playerid] = 15;
                }
                else if(level >= 401)
                {
                    erro = 5;
                    TempoEncontrar[playerid] = 1;
                    Encontrando[playerid] = 20;
                }
                SetPlayerMarkerForPlayer(playerid, giveid, 0xFF0000FF);
                SetPlayerMarkerForPlayer(playerid, giveid, 0xFF0000FF);
                Player[playerid][pDetSkill] ++;
                Encontrar(playerid,giveid,erro);

                if(Player[playerid][pDetSkill] == 50)
                { SendClientMessage(playerid, COLOR_YELLOW, "Sua habilidade como detetive agora й nнvel 2, seu tempo de espera diminuiu para 90 segundos e a precisгo aumentou para 40%"); }
                else if(Player[playerid][pDetSkill] == 100)
                { SendClientMessage(playerid, COLOR_YELLOW, "Sua habilidade como detetive agora й nнvel 3, seu tempo de espera diminuiu para 60 segundos e a precisгo aumentou para 60%"); }
                else if(Player[playerid][pDetSkill] == 200)
                { SendClientMessage(playerid, COLOR_YELLOW, "Sua habilidade como detetive agora й nнvel 4, seu tempo de espera diminuiu para 30 segundos e a precisгo aumentou para 80%"); }
                else if(Player[playerid][pDetSkill] == 400)
                { SendClientMessage(playerid, COLOR_YELLOW, "Sua habilidade como detetive agora й nнvel 5, seu tempo de espera diminuiu para 5 segundos e a precisгo aumentou para 99%"); }
            }
        }
        else
            SendClientMessage(playerid, COLOR_RED,"[ERRO] Jogador nгo encontrado.");

        return 1;
}
Alguem sabe pq isso esta acontecendo?
Reply
#2

Mude esta parte do seu comando :


pawn Code:
new tmp[24], idx; tmp = strtok(params, idx);
if(!strlen(tmp))
    return SendClientMessage(playerid, COLOR_GREY, "[USO] /encontrar [id]");
           
new giveid = ReturnUser(tmp);

Para:


pawn Code:
if(isnull(params))  return SendClientMessage(playerid, COLOR_GREY, "[USO] /encontrar [id]");
new giveid = ReturnUser(params);


Espero ter ajudado .
Reply
#3

Testando
Reply
#4

Nao Deu certo
Reply
#5

Descobri que o strtok por alguma razгo transforma o caractere \1 de params no caractere \0 quando o jogador nгo digita um parвmetro .



Sendo assim nгo precisa usar isnull, apenas se quiser otimizar seu cуdigo .



Saiba que й necessбrio que as marcas de todos jogadores fiquem aparecendo no mapa para que seu comando funcione do jeito que estб, por isso apague todas as linhas com ShowPlayerMarkers do seu GM.



Caso nгo queira fazer isso, utilize uma funзгo como SetPlayerCheckpoint ao invйs de SetPlayerMarkerForPlayer.



Espero ter ajudado .
Reply
#6

Quote:
Originally Posted by rjjj
View Post
Descobri que o strtok por alguma razгo transforma o caractere \1 de params no caractere \0 quando o jogador nгo digita um parвmetro .



Sendo assim nгo precisa usar isnull, apenas se quiser otimizar seu cуdigo .



Saiba que й necessбrio que as marcas de todos jogadores fiquem aparecendo no mapa para que seu comando funcione do jeito que estб, por isso apague todas as linhas com ShowPlayerMarkers do seu GM.



Caso nгo queira fazer isso, utilize uma funзгo como SetPlayerCheckpoint ao invйs de SetPlayerMarkerForPlayer.



Espero ter ajudado .
Como eu posso utilizar a funзгo SetPlayerCheckpoint no meu comando?
@edit
Sу substituir SetPlayerMarkerForPlayer por >> SetPlayerCheckpoint
Reply
#7

Na verdade nгo й o o checkpoint do /encontrar que ta bugado, nenhum ckeckpoint aparece no mapa
tipo, nem o do /encontrar nem o do /vertodos << que й um comando pra ver todos os players do jogo.
Reply
#8

Quote:
Originally Posted by Dark_Max
View Post
Na verdade nгo й o o checkpoint do /encontrar que ta bugado, nenhum ckeckpoint aparece no mapa
tipo, nem o do /encontrar nem o do /vertodos << que й um comando pra ver todos os players do jogo.
Entгo o comando /encontrar serve para colocar uma marca na localizaзгo de um jogador no mapa e o comando /vertodos uma marca em todos os jogadores ?



Como eu disse as marcas dos jogadores devem aparecer no mapa ou o SetPlayerMarkerForPlayer nгo terб efeito algum. Para isso basta apagar todas as linhas com ShowPlayerMarkers do seu GM .



Uma vez que as marcas apareзam й possнvel fazк-las ficarem invisнveis, assim :


pawn Code:
//Coloque no OnPlayerConnect:

for(new x = 0, y = GetMaxPlayers(); x != y; x++)
    {
        SetPlayerMarkerForPlayer(playerid, x, 0xFFFFFF00);
    }

Desse modo as mesmas poderгo ser controladas pelo SetPlayerMarkerForPlayer, permitindo que vocк use essa funзгo nos seus comandos.



Outra opзгo й a funзгo SetPlayerMapIcon. Com ela pode-se criar vбrios checkpoints ao mesmo tempo, veja isto: https://sampforum.blast.hk/showthread.php?tid=250174



Espero ter ajudado .
Reply
#9

Quote:
Originally Posted by rjjj
View Post
pawn Code:
//Coloque no OnPlayerConnect:

for(new x = 0, y = GetMaxPlayers(); x != y; x++)
    {
        SetPlayerMarkerForPlayer(playerid, x, 0xFFFFFF00);
    }
Era isso que faltava..
Acho que eu entendi, as marcas (checkpoints) precisavam estar em "branco" pra poder aparecer com outra cor no mapa
=] Obrigado Deus te abenзхe Bastantao
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)