SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Português/Portuguese

Reply
 
Thread Tools Display Modes
Old 07/05/2019, 02:00 AM   #1
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Lightbulb /menucasa - quase pronto

Opa boa noite, faz horas que estou quebrando a cabeça com um comando no meu servidor, eu fiz ele funcionar, mas não da maneira que eu queria ...

o jogador vai até o icone da casa dele, digita /menucasa se a casa for dele, abre a dialog, se não for, diz que a casa não é dele, eu queria que ele tivesse que entrar dentro da casa, pra digitar o comando ! porem que funcionasse só dentro da casa dele, e não ele entrar na casa de outra pessoa e funcionar ...

Detalhes

Casa pos é o icone da casa.

Já coloquei por coordenadas de dentro da casa, não funciona, ele consegue abrir o menucasa, mesmo a casa não sendo dele

No código abaixo esta para funcionar quando ele digita o comando em cima do icone da casa ! quero que ele tenha que digitar dentro ...


PHP Code:
CMD:menucasa(playerid)
{
for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
{
if(
HOUSE_INFO[c][EXISTE_CASA])
        {
            if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
            {
                if(
strcmp(HOUSE_INFO[c][PROPRIETARIO], PlayerName(playerid), false))
                    return 
SendClientMessage(playeridCOLOR_ERRO"Você não é dono dessa casa.");
                    
                    
ShowPlayerDialog(playeridCASA_MENUDIALOG_STYLE_LIST"Casa Menu""{FFFFFF}Mensagem casa\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização""Selecionar""Cancelar");
            }
        }
}
return 
1;
            } 
Ryuzaki07 is offline   Reply With Quote
Old 07/05/2019, 02:08 AM   #2
MultiKill
High-roller
 
Join Date: Apr 2014
Posts: 1,688
Reputation: 111
Default Re: /menucasa - quase pronto

Você de usar uma variável para setar como true quando ele entrar na casa e setar para false quando sair, exemplo:

PHP Code:
new Entrou[MAX_PLAYERS char];


//entrou na casa:
Entrou{id_do_jogador} = true;

//saiu da casa:
Entrou{id_do_jogador} =false;

CMD:menucasa(playerid){
    if(
Entrou{playerid}){
        
//esta dentro da casa
    
}
    return 
1;


OBS: Se existir algum comando de teleportar para outro lugar, você deve setar para false. Se não irá começar a funcionar fora da casa.


Outra alternativa é verificar se o jogador está no interior e dentro do raio do interior da casa e também através de virtual world. Outra maneira é usar areas do streamer.
MultiKill is offline   Reply With Quote
Old 07/05/2019, 02:17 AM   #3
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by MultiKill View Post
Você de usar uma variável para setar como true quando ele entrar na casa e setar para false quando sair, exemplo:

PHP Code:
new Entrou[MAX_PLAYERS char];


//entrou na casa:
Entrou{id_do_jogador} = true;

//saiu da casa:
Entrou{id_do_jogador} =false;

CMD:menucasa(playerid){
    if(
Entrou{playerid}){
        
//esta dentro da casa
    
}
    return 
1;


OBS: Se existir algum comando de teleportar para outro lugar, você deve setar para false. Se não irá começar a funcionar fora da casa.


Outra alternativa é verificar se o jogador está no interior e dentro do raio do interior da casa e também através de virtual world. Outra maneira é usar areas do streamer.
Sim, jah esta feito este codigo de quando ele entrar etc, o problema é que vamos supor, tem a casa da Maria e do João, eu sou o João se eu der /Menucasa na minha casa, abre a dialog por que ta funcionando, ai eu saiu da minha casa e vou na casa da maria, do /Menucasa também funciona. Eu quero que funciona somente no interior da minha casa ...
Ryuzaki07 is offline   Reply With Quote
Old 07/05/2019, 02:36 AM   #4
MultiKill
High-roller
 
Join Date: Apr 2014
Posts: 1,688
Reputation: 111
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by Ryuzaki07 View Post
Sim, jah esta feito este codigo de quando ele entrar etc, o problema é que vamos supor, tem a casa da Maria e do João, eu sou o João se eu der /Menucasa na minha casa, abre a dialog por que ta funcionando, ai eu saiu da minha casa e vou na casa da maria, do /Menucasa também funciona. Eu quero que funciona somente no interior da minha casa ...

Você esta usando a variável para verificar quando ele entra na casa como eu disse? mostre como esta fazendo.

Teoricamente da forma que eu disse é para funcionar bem, só precisa verificar se na hora que entrar a casa é dele.
MultiKill is offline   Reply With Quote
Old 07/05/2019, 02:53 AM   #5
[BOPE]Seu._.Madruga
High-roller
 
[BOPE]Seu._.Madruga's Avatar
 
Join Date: Nov 2011
Location: São Paulo - SP
Posts: 1,077
Reputation: 79
Default Re: /menucasa - quase pronto

Vou falar a lógica, a função que você usa para verificar se ele está em um icone para entrar dentro da casa.

Ele estando no ícone, pega o id da casa que ele está no ícone e salva em uma variável.

Quando ele estiver dentro da casa e usar o comando que você quer.

Verifique na pasta do casa que você pegou o id se ele é dono.


PHP Code:
new bradoks[50], aname[24];
GetPlayerName(playeridanamesizeof (aname));
format(bradokssizeof(bradoks), "Casas/%d.ini"iddacasaqueentrei[playerid]);
If(
strcmp(DOF2...("DONO") ... aname... 
__________________

_\|/_ Ei vey é Nozes _\|/_

Nick: LeozinIMPERATUS

Patente: Coronel 3

Página Oficial: Leonardo " lbs " Bradoks » www.facebo ok.com/leobradoks
Página de Programação: Programação em Foco » www.facebo ok.com/groups/ProgramacaoEmFoco
Atualmente focado ao competitivo de Point Blank
Email | Site Pessoal | Skype | Discord
O topo da inteligência é alcançar a humildade
[BOPE]Seu._.Madruga is offline   Reply With Quote
Old 07/05/2019, 02:07 PM   #6
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by [BOPE]Seu._.Madruga View Post
Vou falar a lógica, a função que você usa para verificar se ele está em um icone para entrar dentro da casa.

Ele estando no ícone, pega o id da casa que ele está no ícone e salva em uma variável.

Quando ele estiver dentro da casa e usar o comando que você quer.

Verifique na pasta do casa que você pegou o id se ele é dono.


PHP Code:
new bradoks[50], aname[24];
GetPlayerName(playeridanamesizeof (aname));
format(bradokssizeof(bradoks), "Casas/%d.ini"iddacasaqueentrei[playerid]);
If(
strcmp(DOF2...("DONO") ... aname... 

PHP Code:
CMD:menucasa(playerid)
{
for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
{
        new 
bradoks[50], aname[24];
        
GetPlayerName(playeridanamesizeof (aname));
        
format(bradokssizeof(bradoks), "Casas/%d.ini"HOUSE_INFO[c][ID_CASA]);
        if(
strcmp(HOUSE_INFO[c][PROPRIETARIO], PlayerName(playerid), false))
        return 
SendClientMessage(playeridCOLOR_ERRO"Você não é dono dessa casa.");
       {
       
ShowPlayerDialog(playeridCASA_MENUDIALOG_STYLE_LIST"Casa Menu""{FFFFFF}Mensagem casa\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização""Selecionar""Cancelar");

}
}
return 
1;


O código ficaria desta maneira? Por que se for, não funcionou ... já fiz umas mudanças também e nada ... ele abre o menu da casa em qual quer lugar e ainda por cima aparece a mensagem
Ryuzaki07 is offline   Reply With Quote
Old 07/05/2019, 02:09 PM   #7
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by MultiKill View Post
Você esta usando a variável para verificar quando ele entra na casa como eu disse? mostre como esta fazendo.

Teoricamente da forma que eu disse é para funcionar bem, só precisa verificar se na hora que entrar a casa é dele.
Opa, aqui esta a parte que ele pressiona F e entra dentro da casa

PHP Code:
hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
newkeys KEY_SECONDARY_ATTACK)
    {
        for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
                {
                    if(
PlayerHouse[playerid] != && HOUSE_INFO[c][CASA_TRANCADA] == 1)
                    {
                        
GameTextForPlayer(playerid"~r~Casa Trancada!"50001);
                    }
                    else
                    {
                        
SetPlayerPos(playeridHOUSE_INFO[c][hEnterX], HOUSE_INFO[c][hEnterY], HOUSE_INFO[c][hEnterZ]);
                        
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);

                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1"Bem vindo a casa id %d que pertence a %s"c,HOUSE_INFO[c][PROPRIETARIO]);
                        
                        
                    }
                }
                
                else if(
GetPlayerInterior(playerid) != && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[EmCasa[playerid]][hSaidaX], HOUSE_INFO[EmCasa[playerid]][hSaidaY], HOUSE_INFO[EmCasa[playerid]][hSaidaZ]))
                {
                    
SetPlayerPos(playeridHOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid0);
                    
EmCasa[playerid] = 0;
                }
            }
        }
    }
    return 
1;

Ryuzaki07 is offline   Reply With Quote
Old 07/05/2019, 02:47 PM   #8
MultiKill
High-roller
 
Join Date: Apr 2014
Posts: 1,688
Reputation: 111
Default Re: /menucasa - quase pronto

Não vou lhe dar o código, mas a lógica é essa:

PHP Code:
hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
newkeys KEY_SECONDARY_ATTACK)
    {
        
//Pega o nome do jogador que apertou F
        //GetPlayerName(...)
        
        
for(new 1!= MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
                {
                    if(
PlayerHouse[playerid] != && HOUSE_INFO[c][CASA_TRANCADA] == 1)
                    {
                        
GameTextForPlayer(playerid"~r~Casa Trancada!"50001);
                    }
                    else
                    {
                        
SetPlayerPos(playeridHOUSE_INFO[c][hEnterX], HOUSE_INFO[c][hEnterY], HOUSE_INFO[c][hEnterZ]);
                        
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);

                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1"Bem vindo a casa id %d que pertence a %s"c,HOUSE_INFO[c][PROPRIETARIO]);
                        
                        
/*
                        Verifica se o nome do jogador é igual ao armazenado em HOUSE_INFO[c][PROPRIETARIO]{
                            caso for seta uma variável como true, para indicar que ele entrou em uma casa que é dele

                            variavel_pro_jogador = true
                        }

                        */
                        
                    
}
                    
/*
                    OBS: recomendo parar o loop aqui com um break, pois tu já achou a casa que o jogador esta
                    */
                
}
                
                else if(
GetPlayerInterior(playerid) != && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[EmCasa[playerid]][hSaidaX], HOUSE_INFO[EmCasa[playerid]][hSaidaY], HOUSE_INFO[EmCasa[playerid]][hSaidaZ]))
                {
                    
SetPlayerPos(playeridHOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid0);
                    
EmCasa[playerid] = 0;

                    
/*
                    Seta a variável para false, para indicar que ele saiu da casa
                    variavel_pro_jogador = false


                    Aqui também outro break para parar o loop
                    */


                
}
            }
        }
    }
    return 
1;
}


/*
Comando{
    verifica se a variável do jogador esta com o valor true

    if(variavel_pro_jogador == true){
        ele esta dentro de sua casa
    }
    else{
        Não esta dentro de sua casa
    }
}

*/ 

Você pode usar a array char que mostrei para setar se ele entrou ou não:
PHP Code:
new boolEmCasa[MAX_PLAYERS char]; 
Se for usar, lembre-se que para atribuir um valor a um índice ou pegar use sempre dessa forma:
PHP Code:
new var[10 char];

var{
5} = 2//atribuindo valor

printf("var[5]: %d", var{5}); //pegando valor 

E também você deverá setar a variável para false sempre que o jogador desconectar, ou sair do lugar.
MultiKill is offline   Reply With Quote
Old 07/05/2019, 03:37 PM   #9
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by MultiKill View Post
Não vou lhe dar o código, mas a lógica é essa:

PHP Code:
hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
newkeys KEY_SECONDARY_ATTACK)
    {
        
//Pega o nome do jogador que apertou F
        //GetPlayerName(...)
        
        
for(new 1!= MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
                {
                    if(
PlayerHouse[playerid] != && HOUSE_INFO[c][CASA_TRANCADA] == 1)
                    {
                        
GameTextForPlayer(playerid"~r~Casa Trancada!"50001);
                    }
                    else
                    {
                        
SetPlayerPos(playeridHOUSE_INFO[c][hEnterX], HOUSE_INFO[c][hEnterY], HOUSE_INFO[c][hEnterZ]);
                        
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);

                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1"Bem vindo a casa id %d que pertence a %s"c,HOUSE_INFO[c][PROPRIETARIO]);
                        
                        
/*
                        Verifica se o nome do jogador é igual ao armazenado em HOUSE_INFO[c][PROPRIETARIO]{
                            caso for seta uma variável como true, para indicar que ele entrou em uma casa que é dele

                            variavel_pro_jogador = true
                        }

                        */
                        
                    
}
                    
/*
                    OBS: recomendo parar o loop aqui com um break, pois tu já achou a casa que o jogador esta
                    */
                
}
                
                else if(
GetPlayerInterior(playerid) != && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[EmCasa[playerid]][hSaidaX], HOUSE_INFO[EmCasa[playerid]][hSaidaY], HOUSE_INFO[EmCasa[playerid]][hSaidaZ]))
                {
                    
SetPlayerPos(playeridHOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid0);
                    
EmCasa[playerid] = 0;

                    
/*
                    Seta a variável para false, para indicar que ele saiu da casa
                    variavel_pro_jogador = false


                    Aqui também outro break para parar o loop
                    */


                
}
            }
        }
    }
    return 
1;
}


/*
Comando{
    verifica se a variável do jogador esta com o valor true

    if(variavel_pro_jogador == true){
        ele esta dentro de sua casa
    }
    else{
        Não esta dentro de sua casa
    }
}

*/ 

Você pode usar a array char que mostrei para setar se ele entrou ou não:
PHP Code:
new boolEmCasa[MAX_PLAYERS char]; 
Se for usar, lembre-se que para atribuir um valor a um índice ou pegar use sempre dessa forma:
PHP Code:
new var[10 char];

var{
5} = 2//atribuindo valor

printf("var[5]: %d", var{5}); //pegando valor 

E também você deverá setar a variável para false sempre que o jogador desconectar, ou sair do lugar.
Estou de saida para o serviço, mais tinha pensando em algo semelhante, mas você me deu novas ideias, obrigado, logo darei uma resposta abraço ...
Ryuzaki07 is offline   Reply With Quote
Old 07/05/2019, 08:44 PM   #10
Ryuzaki07
Huge Clucker
 
Ryuzaki07's Avatar
 
Join Date: Mar 2017
Posts: 238
Reputation: 0
Default Re: /menucasa - quase pronto

Quote:
Originally Posted by Ryuzaki07 View Post
Estou de saida para o serviço, mais tinha pensando em algo semelhante, mas você me deu novas ideias, obrigado, logo darei uma resposta abraço ...
Eu fiz de uma maneira que quase deu certo, seguindo a mesma logica que você passou, porem com diferenças minimas, só que deu ao contrario kk , quando o jogador esta na casa dele, diz que não esta, e quando o jogador esta em uma casa que não é de ninguem, ou seja a casa não é dele, ai deixa abrir o /menucasa ... o código ficou assim veja ...

Ficou um pouco diferente do que você mandou fazer, porem quase deu certo, tem como arrumar deste jeito?

PHP Code:
new PermissaoMenu[MAX_PLAYERS];

hook OnPlayerKeyStateChange(playeridnewkeysoldkeys)
{
    if(
newkeys KEY_SECONDARY_ATTACK)
    {
    
     new 
nome[MAX_PLAYER_NAME], string[24+MAX_PLAYER_NAME];
     
GetPlayerName(playeridnomesizeof(nome));
    
        for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)
        {
            if(
HOUSE_INFO[c][EXISTE_CASA])
            {
                if(
IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[c][CASA_POS][0], HOUSE_INFO[c][CASA_POS][1], HOUSE_INFO[c][CASA_POS][2]))
                {
                    if(
PlayerHouse[playerid] != && HOUSE_INFO[c][CASA_TRANCADA] == 1)
                    {
                        
GameTextForPlayer(playerid"~r~Casa Trancada!"50001);
                    }
                    else
                    {
                        
SetPlayerPos(playeridHOUSE_INFO[c][hEnterX], HOUSE_INFO[c][hEnterY], HOUSE_INFO[c][hEnterZ]);
                        
SetPlayerInterior(playeridHOUSE_INFO[c][INTERIOR]);
                        
SetPlayerVirtualWorld(playeridHOUSE_INFO[c][CASA_WORLD]);

                        
EmCasa[playerid] = c;
                        
MensagemFormatada(playerid, -1"Bem vindo a casa id %d que pertence a %s"c,HOUSE_INFO[c][PROPRIETARIO]);
                        
                        if(
strcmp(HOUSE_INFO[c][PROPRIETARIO], PlayerName(playerid), false)) return PermissaoMenu[playerid] = 1;
                        
                        break;
                    }
            }
                else if(
GetPlayerInterior(playerid) != && IsPlayerInRangeOfPoint(playerid3.0HOUSE_INFO[EmCasa[playerid]][hSaidaX], HOUSE_INFO[EmCasa[playerid]][hSaidaY], HOUSE_INFO[EmCasa[playerid]][hSaidaZ]))
                {
                    
SetPlayerPos(playeridHOUSE_INFO[EmCasa[playerid]][CASA_POS][0], HOUSE_INFO[EmCasa[playerid]][CASA_POS][1], HOUSE_INFO[EmCasa[playerid]][CASA_POS][2]);
                    
SetPlayerInterior(playerid0);
                    
SetPlayerVirtualWorld(playerid0);
                    
EmCasa[playerid] = 0;
                }
            }
        }
    }
    return 
1;

PHP Code:
CMD:menucasa(playerid)
{
for(new 
1!= MAX_DYNAMIC_HOUSES; ++c)

if(
PermissaoMenu[playerid] == 0) return SendClientMessage(playerid, -1"| INFO | Você não esta em sua casa");
{
ShowPlayerDialog(playeridCASA_MENUDIALOG_STYLE_LIST"Casa Menu""{FFFFFF}Mensagem casa\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização\nAtualização""Selecionar""Cancelar");
}
return 
1;

Ryuzaki07 is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[Ajuda] sistema de radar quase pronto Eiffel Português/Portuguese 11 04/02/2017 03:12 PM
[Ajuda] sistema de som automotivo quase pronto ajuda willian Franco Português/Portuguese 1 29/12/2014 11:23 PM
[Ajuda] Comando quase pronto,help caoraivoso3 Português/Portuguese 5 26/07/2013 11:41 AM
[DUV] Finalmente Sistema MySql Quase Pronto [mGo]Ajax Português/Portuguese 19 21/04/2010 10:27 PM


All times are GMT. The time now is 12:50 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.