SA-MP Forums Archive
[Ajuda] Loop de verificaзгo de checkpoints - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Português/Portuguese (https://sampforum.blast.hk/forumdisplay.php?fid=34)
+---- Thread: [Ajuda] Loop de verificaзгo de checkpoints (/showthread.php?tid=662186)



Loop de verificaзгo de checkpoints - zHellSync - 25.12.2018

Olб, sou bem leigo, porem estou praticando desenvolvendo uma Gamemode de RPG.. apenas para buscar conhecimento. criei jб em minha GM uma profissгo nomeada de Jornaleiro. o jogador sobe na Bike, digita /PegarJornais e й recebido 10 jornais para entrega, este sistema esta digamos que... "perfeito", jб criei uma random com os locais onde podem ser criado os checkpoints para ser entregado os jornais, o problema й que quando o jornaleiro chega atй ao checkpoint ele nгo gera o outro no mapa... ele avisa que foi entregue um jornal, mostra quanto falta mas nгo gera o prуximo local de entrega..

OBS: jб coloquei o codigo de gerar um checkpoint aleatуrio na mesma "if" onde mostra a mensagem que foi entregue os jornais.. existe tambem o problema que quando eu uso meu /gps e marco um local ao chegar no local ele mostra como se estivesse feito mais uma entrega... desculpa o texto, espero que entenda meu objetivo



CODIGO

PHP код:
public OnPlayerEnterCheckpoint(playerid)
{
    new 
str_pnome[MAX_PLAYER_NAME], str_format[128];
    
GetPlayerName(playerid, str_pnome, sizeof(str_pnome)); //Pegar o Nome completo do jogador
    
format(str_format, sizeof(str_format), pContas, str_pnome); //Formatar o nome do jogador ligado ao arquivo
    
if(DOF2_GetInt(str_format, "TotalJornais") >= 1) // Verificar se possui jornais
    
{
        new 
gTotalJornais = DOF2_GetInt(str_format, "TotalJornais")-1; // reduzir 1 jornal e armazenar
        
new formatmsg[128];
        new 
randjornais = random(sizeof(JornaisAleatorio));
        
format(formatmsg, sizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!", gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playerid, JornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        
SendClientMessage(playerid, -1, formatmsg);
        
SendClientMessage(playerid, -1, "» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        
DOF2_WriteFile();
        
DOF2_SetInt(str_format, "TotalJornais", gTotalJornais); //Armazenar o total de jornais no arquivo
        
DOF2_SaveFile();
    }
    else
    {
        if(!
strcmp("Jornaleiro", DOF2_GetString(str_format, "ProfissaoAtual"), false)) //Verificar se o jogador й da profissгo jornaleiro
        
{
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
            
SendClientMessage(playerid, -1, "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Entregas concluida!");
            
SendClientMessage(playerid, -1, "» {ffffff}Volte atй a HQ para pegar mais jornais e fazer mais entregas!");
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        }
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
    return 
1;
} 



Re: Loop de verificaзгo de checkpoints - 1sbedx - 25.12.2018

Tente isto:

PHP код:
new
    
EntregandoJornais[MAX_PLAYERS];
public 
OnPlayerEnterCheckpoint(playerid)
{
    if (
EntregandoJornais[playerid])
    {
        
DisablePlayerCheckpoint(playerid);
        new 
gTotalJornais = (DOF2_GetInt(str_format, "TotalJornais") - 1);
        
DOF2_WriteFile();
        
DOF2_SetInt(str_format, "TotalJornais", gTotalJornais); //Armazenar o total de jornais no arquivo
        
DOF2_SaveFile();
        if (!
gTotalJornais)
        {
            
EntregandoJornais[playerid] = false;
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
            
SendClientMessage(playerid, -1, "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Entregas concluida!");
            
SendClientMessage(playerid, -1, "» {ffffff}Volte atй a HQ para pegar mais jornais e fazer mais entregas!");
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
            return 
1;
        }
        new 
formatmsg[128];
        new 
randjornais = random(sizeof(JornaisAleatorio));
        
format(formatmsg, sizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!", gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playerid, JornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        
SendClientMessage(playerid, -1, formatmsg);
        
SendClientMessage(playerid, -1, "» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        return 
1;
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
    return 
1;
} 



Re: Loop de verificaзгo de checkpoints - zHellSync - 25.12.2018

Quote:
Originally Posted by 1sbedx
Посмотреть сообщение
Tente isto:

PHP код:
new
    
EntregandoJornais[MAX_PLAYERS];
public 
OnPlayerEnterCheckpoint(playerid)
{
    if (
EntregandoJornais[playerid])
    {
        
DisablePlayerCheckpoint(playerid);
        new 
gTotalJornais = (DOF2_GetInt(str_format, "TotalJornais") - 1);
        
DOF2_WriteFile();
        
DOF2_SetInt(str_format, "TotalJornais", gTotalJornais); //Armazenar o total de jornais no arquivo
        
DOF2_SaveFile();
        if (!
gTotalJornais)
        {
            
EntregandoJornais[playerid] = false;
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
            
SendClientMessage(playerid, -1, "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Entregas concluida!");
            
SendClientMessage(playerid, -1, "» {ffffff}Volte atй a HQ para pegar mais jornais e fazer mais entregas!");
            
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
            return 
1;
        }
        new 
formatmsg[128];
        new 
randjornais = random(sizeof(JornaisAleatorio));
        
format(formatmsg, sizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!", gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playerid, JornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        
SendClientMessage(playerid, -1, formatmsg);
        
SendClientMessage(playerid, -1, "» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
        return 
1;
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
    return 
1;
} 
eu fiz desta forma, criando no topo da GM:
PHP код:
new EntregandoJornais[MAX_PLAYERS]; 
e como nгo vi "EntregandoJornais" sendo definida, eu a defini quando o jogador usa o comando /PegarJornais

CODIGO DO COMANDO /PEGARJORNAIS
PHP код:
if(strcmp("Jornaleiro", DOF2_GetString(str_format, "ProfissaoAtual"), false)) return SendClientMessage(playerid, Cor_Vermelha, "| ERRO | Vocк nгo trabalha como Jornaleiro. Use: /Ajuda");
    if(
IsPlayerInRangeOfPoint(playerid, 15.0, 777.899719, -1345.184448, 13.532791))
    {
        if(
GetPlayerVehicleID(playerid) >= 29 && GetPlayerVehicleID(playerid) <= 38)
        {
            if(
DOF2_GetInt(str_format, "TotalJornais") == 0)
            {
                
PlayerPlaySound(playerid, 1058, 0.0, 0.0, 10.0);
                
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
                
SendClientMessage(playerid, -1, "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк pegou {FF0000}+10{ffffff} Jornais!");
                
SendClientMessage(playerid, -1, "» {ffffff}Vб atй ao {ff0000}Checkpoint {ffffff}vermelho para fazer a entrega.");
                
SendClientMessage(playerid, Cor_Laranja, "====================================================================");
                
EntregandoJornais[playerid] = (playerid);
                
DOF2_WriteFile();
                
DOF2_SetInt(str_format, "TotalJornais", 10); //Definir o total de joornais
                
DOF2_SaveFile();
                new 
randjornais = random(sizeof(JornaisAleatorio));
                
SetPlayerCheckpoint(playerid, JornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0);
            }
            else
            {
                
SendClientMessage(playerid, Cor_Vermelha, "| ERRO | Vocк ainda possui jornais para entregar!");
            }
        }
        else
        {
            
SendClientMessage(playerid, Cor_Vermelha, "| ERRO | Vocк precisa estar em uma das Bicicletas (Mountain Bike) de sua profissгo para poder pegar Jornais.");
        }
    }
    else
    {
        
SendClientMessage(playerid, Cor_Vermelha, "| ERRO | Vocк precisa estar na HQ de sua profissгo! use: /MinhaHQ");
    } 
e agora tб certo o problema final que citei, que antes se usava /gps e marcava ele mostrava mensagem como se estivesse feito uma entrega, o primeiro problema ainda existe, pois ao chegar no local marcado pela random ele nгo mostra a mensagem com o total de jornais e marcar outro aleatуrio


Re: Loop de verificaзгo de checkpoints - zHellSync - 25.12.2018

encontrei o problema. estava no comando /pegarjornais tinha que definir EntregandoJornais[playerid] = true

obrigado, +rep