[Ajuda] Loop de verificaзгo de checkpoints
#1

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(playeridstr_pnomesizeof(str_pnome)); //Pegar o Nome completo do jogador
    
format(str_formatsizeof(str_format), pContasstr_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(formatmsgsizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!"gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playeridJornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid10580.00.010.0);
        
SendClientMessage(playeridCor_Laranja"====================================================================");
        
SendClientMessage(playerid, -1formatmsg);
        
SendClientMessage(playerid, -1"» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playeridCor_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(playeridCor_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(playeridCor_Laranja"====================================================================");
        }
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid10580.00.010.0);
    return 
1;

Reply
#2

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(playeridCor_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(playeridCor_Laranja"====================================================================");
            return 
1;
        }
        new 
formatmsg[128];
        new 
randjornais random(sizeof(JornaisAleatorio));
        
format(formatmsgsizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!"gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playeridJornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid10580.00.010.0);
        
SendClientMessage(playeridCor_Laranja"====================================================================");
        
SendClientMessage(playerid, -1formatmsg);
        
SendClientMessage(playerid, -1"» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playeridCor_Laranja"====================================================================");
        return 
1;
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid10580.00.010.0);
    return 
1;

Reply
#3

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(playeridCor_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(playeridCor_Laranja"====================================================================");
            return 
1;
        }
        new 
formatmsg[128];
        new 
randjornais random(sizeof(JornaisAleatorio));
        
format(formatmsgsizeof(formatmsg), "{FF0000}» {80FF80}Jornaleiro {FF0000}«{ffffff} Vocк possui ainda {FF0000}%i{ffffff} Jornais para entregar!"gTotalJornais); //Mensagem mostrando o total restante de jornais
        
SetPlayerCheckpoint(playeridJornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0); //Gerar o checkpoint aleatorio de entrega
        
PlayerPlaySound(playerid10580.00.010.0);
        
SendClientMessage(playeridCor_Laranja"====================================================================");
        
SendClientMessage(playerid, -1formatmsg);
        
SendClientMessage(playerid, -1"» {ffffff}Vб atй ao prуximo {ff0000}Checkpoint {ffffff}vermelho para fazer a prуxima entrega.");
        
SendClientMessage(playeridCor_Laranja"====================================================================");
        return 
1;
    }
    
DisablePlayerCheckpoint(playerid);
    
PlayerPlaySound(playerid10580.00.010.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(playeridCor_Vermelha"| ERRO | Vocк nгo trabalha como Jornaleiro. Use: /Ajuda");
    if(
IsPlayerInRangeOfPoint(playerid15.0777.899719, -1345.18444813.532791))
    {
        if(
GetPlayerVehicleID(playerid) >= 29 && GetPlayerVehicleID(playerid) <= 38)
        {
            if(
DOF2_GetInt(str_format"TotalJornais") == 0)
            {
                
PlayerPlaySound(playerid10580.00.010.0);
                
SendClientMessage(playeridCor_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(playeridCor_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(playeridJornaisAleatorio[randjornais][0], JornaisAleatorio[randjornais][1], JornaisAleatorio[randjornais][2], 2.0);
            }
            else
            {
                
SendClientMessage(playeridCor_Vermelha"| ERRO | Vocк ainda possui jornais para entregar!");
            }
        }
        else
        {
            
SendClientMessage(playeridCor_Vermelha"| ERRO | Vocк precisa estar em uma das Bicicletas (Mountain Bike) de sua profissгo para poder pegar Jornais.");
        }
    }
    else
    {
        
SendClientMessage(playeridCor_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
Reply
#4

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

obrigado, +rep
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)