[Ajuda] Cmd EntrarCasa e SairCasa
#1

Bom, esses dois comandos estгo sendo compilados corretamente, sу que in - game ao digitar algum dos dois comandos nгo entra na casa e sucessivamente nгo sai da mesma ...

Cуdigo

PHP код:

CMD
:entrarcasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        if(
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ")))
        {
            if(
DOF2_GetInt(string"Trancada") == 0)
            {
                new 
strx[256];
                
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
                if(
DOF2_FileExists(strx))
                {
                    
emcasa[playerid] = 1;
                    new 
Float:XFloat:YFloat:Z;
                    
GetPlayerPos(playeridXYZ);
                    
CasaX[playerid] = X;
                    
CasaY[playerid] = Y;
                    
CasaZ[playerid] = Z;
                    
SetPlayerInterior(playeridDOF2_GetInt(strx"Int"));
                    
SetPlayerPos(playeridDOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ"));
                    
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк entrou na casa para sair use F");
                }
            }
            else if(
DOF2_GetInt(string"Trancada") == 1)
            {
                
SendClientMessage(playeridVERMELHO_ESCURO"[ x ] A casa estб trancada");
            }
        }
    }
    return 
1;
}
CMD:saircasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        new 
strx[256];
        
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
        if(
DOF2_FileExists(strx))
        {
            if(
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ")))
            {
                
emcasa[playerid] = 0;
                
SetPlayerInterior(playerid0);
                
SetPlayerPos(playeridDOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ"));
                
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк saiu na casa para entrar use F");
            }
        }
    }
    return 
1;

OBS: Coloquei em PHP pois Pawn estragou a identaзгo quando fui ver O.O
Reply
#2

Nгo deu pra ver o code todo pois estou no cel, mas faz um debug
E a tag de pawn vira a tag code agora, por isso fica desorganizado.
Reply
#3

Faz debugg como a Ana4Ever disse:

Faz debugg das variбveis das casas (X,Y,Z etc)
depois no comando.

muito simples.
Reply
#4

Quote:
Originally Posted by [Full]Garfield[XDB]
Посмотреть сообщение
Faz debugg como a Ana4Ever disse:

Faz debugg das variбveis das casas (X,Y,Z etc)
depois no comando.

muito simples.
Nгo deu, os Debugs funcionou, imprimiu e tudo mais nгo esta entrando na casa =/
Reply
#5

Fez debbug dos comandos tambйm ?
Reply
#6

Fiz sim, Agora ta dizendo que nao estou na casa:



Cуdigo atualizado

PHP код:
CMD:entrarcasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        if(!
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ"))) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб em nenhuma casa");
        if(
DOF2_GetInt(string"Trancada") == 0)
        {
            new 
strx[256];
            
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
            if(
DOF2_FileExists(strx))
            {
                
emcasa[playerid] = 1;
                
CasaX[playerid] = DOF2_GetFloat(string,"CasaX");
                
CasaY[playerid] = DOF2_GetFloat(string,"CasaY");
                
CasaZ[playerid] = DOF2_GetFloat(string,"CasaZ");
                
SetPlayerInterior(playeridDOF2_GetInt(strx"Int"));
                
SetPlayerPos(playeridDOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ"));
                
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк entrou na casa para sair use F");
                new 
debugmsg[80];
                
format(debugmsgsizeof(debugmsg), "Posx: %f Posy: %f Posz: %f"CasaX[playerid], CasaY[playerid], CasaZ[playerid]);
                
printf(debugmsg);
            }
        }
        else if(
DOF2_GetInt(string"Trancada") == 1)
        {
            
SendClientMessage(playeridVERMELHO_ESCURO"[ x ] A casa estб trancada");
        }
    }
    return 
1;
}
CMD:saircasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        new 
strx[256];
        
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
        if(
DOF2_FileExists(strx))
        {
            if(!
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ"))) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб na porta da casa");
            
emcasa[playerid] = 0;
            
SetPlayerInterior(playerid0);
            
SetPlayerPos(playeridCasaX[playerid], CasaY[playerid], CasaZ[playerid]);
            
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк saiu na casa para entrar use F");
        }
    }
    return 
1;

Reply
#7

Quote:
Originally Posted by Murilo_sousa
Посмотреть сообщение
Fiz sim, Agora ta dizendo que nao estou na casa:



Cуdigo atualizado

PHP код:
CMD:entrarcasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        if(!
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ"))) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб em nenhuma casa");
        if(
DOF2_GetInt(string"Trancada") == 0)
        {
            new 
strx[256];
            
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
            if(
DOF2_FileExists(strx))
            {
                
emcasa[playerid] = 1;
                
CasaX[playerid] = DOF2_GetFloat(string,"CasaX");
                
CasaY[playerid] = DOF2_GetFloat(string,"CasaY");
                
CasaZ[playerid] = DOF2_GetFloat(string,"CasaZ");
                
SetPlayerInterior(playeridDOF2_GetInt(strx"Int"));
                
SetPlayerPos(playeridDOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ"));
                
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк entrou na casa para sair use F");
                new 
debugmsg[80];
                
format(debugmsgsizeof(debugmsg), "Posx: %f Posy: %f Posz: %f"CasaX[playerid], CasaY[playerid], CasaZ[playerid]);
                
printf(debugmsg);
            }
        }
        else if(
DOF2_GetInt(string"Trancada") == 1)
        {
            
SendClientMessage(playeridVERMELHO_ESCURO"[ x ] A casa estб trancada");
        }
    }
    return 
1;
}
CMD:saircasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];
    for(new 
casa 0casa MAX_CASAScasa++)
    {
        
format(stringsizeof(string), DIRETORIOcasa);
        new 
strx[256];
        
format(strxsizeof(strx), "/Interiores/int%d.ini"DOF2_GetInt(string"Int"));
        if(
DOF2_FileExists(strx))
        {
            if(!
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(strx"EX"), DOF2_GetFloat(strx"EY"), DOF2_GetFloat(strx"EZ"))) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб na porta da casa");
            
emcasa[playerid] = 0;
            
SetPlayerInterior(playerid0);
            
SetPlayerPos(playeridCasaX[playerid], CasaY[playerid], CasaZ[playerid]);
            
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк saiu na casa para entrar use F");
        }
    }
    return 
1;

Claro, й porque nesse cуdigo vai verificando uma por uma, por isso aparece que vocк nгo estб em nenhuma casa. Tu tem que utilizar uma bool, setar ela pra true, e depois da chave que fecha o loop verificar se ela estб false, se tiver, enviarб uma mensagem.
Exemplo:
Код:
new bool: casaperto = false;
for(new ...
{
    if(IsPlayerInRangeOfPoint(playe...  
    {
         //funзхes
        casaperto = true;
    }
}
if(casaperto == false) return SendClientMessage(playerid, -1, "voce nao ta perto de nenhuma casa.");
Reply
#8

PHP код:
CMD:entrarcasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];

    new 
bool:erro trueslot;
    for(new 
0MAX_CASASx++)
    {
        
format(stringsizeof(string), DIRETORIOx);
        if(
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(string"CasaX"), DOF2_GetFloat(string"CasaY"), DOF2_GetFloat(string"CasaZ"))
        {
            
slot x;
            
erro false;
        }
    }
    if(
erro == true) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб em nenhuma casa");

    
format(stringsizeof(string), DIRETORIOslot);

    if(
DOF2_GetInt(string"Trancada") == 0)
     {
        
emcasa[playerid] = 1;
        
CasaX[playerid] = DOF2_GetFloat(string,"CasaX");
        
CasaY[playerid] = DOF2_GetFloat(string,"CasaY");
        
CasaZ[playerid] = DOF2_GetFloat(string,"CasaZ");
        
SetPlayerInterior(playeridDOF2_GetInt(string"Int")); // vc estava usando strx

        //
        
SetPlayerPos(playeridDOF2_GetFloat(string"EX"), DOF2_GetFloat(string"EY"), DOF2_GetFloat(string"EZ"));// vc estava usando strx
        //

        
SendClientMessage(playeridVERMELHO_ESCURO"[ CASA ] Vocк entrou na casa para sair use F");
        return 
1;
    }
    else if(
DOF2_GetInt(string"Trancada") == 1)
     {
        
SendClientMessage(playeridVERMELHO_ESCURO"[ x ] A casa estб trancada");
        return 
1;
      }
    return 
1;
}

CMD:saircasa(playerid)
{
    new 
pname[MAX_PLAYER_NAME];
    
GetPlayerName(playeridpnameMAX_PLAYER_NAME);
    new 
string[256];

    new 
bool:erro trueslot;
    for(new 
0MAX_CASASx++)
    {
        
format(stringsizeof(string), DIRETORIOx);
        if(
IsPlayerInRangeOfPoint(playerid2.0DOF2_GetFloat(string"EX"), DOF2_GetFloat(string"EY"), DOF2_GetFloat(string"EZ"))
        {
            
slot x;
            
erro false;
        }
    }
    if(
erro == true) return SendClientMessage(playeridVERMELHO_ESCURO"[ x ] Vocк nгo estб na porta da casa");

    
format(stringsizeof(string), DIRETORIOslot);

    
emcasa[playerid] = 0;
    
SetPlayerInterior(playerid0);
    
SetPlayerPos(playeridCasaX[playerid], CasaY[playerid], CasaZ[playerid]);
    return 
1;

Nгo recomendo o uso de loop em comandos de entrar ou sair de casa.

Use uma variбvel ao player passar sobre a pickup depois verifique se ele estб no raio de distancia dessa pickup atravйs da variбvel setada anteriormente.
espero ter lhe ajudado, olhe se vai funcionar.
Reply
#9

PHP код:
InHouseDoor(playerid)
{
    new 
string[50];
    for(new 
idcasa 0idcasa MAX_CASASidcasa++)
    {
        
format(string,50DIRETORIOidcasa);
        if(
IsPlayerInRangeOfPoint(playerid2.5DOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ")))
        {
            return 
idcasa;
        }
    }
    return -
255;
}

CMD:entrar(playerid)
{
    if(
InHouseDoor(playerid))
        
SendClientMessage(playerid,-1,"Vocк estб em uma casa!");
    else
        
SendClientMessage(playerid,-1,"Vocк nгo estб em uma casa!");
    return 
1;

Use dessa forma .
Reply
#10

Quote:
Originally Posted by AFerreira
Посмотреть сообщение
PHP код:
InHouseDoor(playerid)
{
    new 
string[50];
    for(new 
idcasa 0idcasa MAX_CASASidcasa++)
    {
        
format(string,50DIRETORIOidcasa);
        if(
IsPlayerInRangeOfPoint(playerid2.5DOF2_GetFloat(string,"CasaX"),DOF2_GetFloat(string,"CasaY"),DOF2_GetFloat(string,"CasaZ")))
        {
            return 
idcasa;
        }
    }
    return -
255;
}
CMD:entrar(playerid)
{
    if(
InHouseDoor(playerid))
        
SendClientMessage(playerid,-1,"Vocк estб em uma casa!");
    else
        
SendClientMessage(playerid,-1,"Vocк nгo estб em uma casa!");
    return 
1;

Use dessa forma .
Uma public de verifiзгo se eu estou perto da porta, legal nem tinha pensado nisso rs

Mais to achando que o problema e nos interiores rsrs
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)