[Pedido] Checar se o player estб em tal gangzone
#1

Olб, eu queria saber alguma public nativa do SA-MP que faz uma checagem se o player estб ou nгo numa gangzone.

OBS: Um pequeno esboзo serve.
Reply
#2

PHP код:
IsPlayerInPlace(playerid,Float:XMin,Float:YMin,Float:XMax,Float:YMax)
{
 new 
RetValue=0,Float:aX,Float:aY,Float:aZ;
 
GetPlayerPos(playerid,aX,aY,aZ);
 if(
aX >= XMin && aY >= YMin && aX XMax && aY YMax)
{
 
RetValue=1;
}
 return 
RetValue;

Reply
#3

Quote:
Originally Posted by FanonRiouDiou
Посмотреть сообщение
PHP код:
IsPlayerInPlace(playerid,Float:XMin,Float:YMin,Float:XMax,Float:YMax)
{
 new 
RetValue=0,Float:aX,Float:aY,Float:aZ;
 
GetPlayerPos(playerid,aX,aY,aZ);
 if(
aX >= XMin && aY >= YMin && aX XMax && aY YMax)
{
 
RetValue=1;
}
 return 
RetValue;

Mas eu jogaria isso onde mais ou menos?? Eu tenho tudo elaborado aqui, sу que quando eu jogo em OnPlayerUpdate ele repete inъmeras vezes. Eu queria que ele nгo repetisse.
Reply
#4

PHP код:
public OnPlayerDeath(playerid,killerid,reason//Checando se a morte do player foi na favela
{
 if(
IsPlayerInPlace(playerid,1952.756103,-1160.385253,2281.945800,-972.161926)) //Coordenadas da gangzone, Checa se foi na gangzone
{
 
SendClientMessage(playerid,-1,"Vocк morreu na favela."); //Envia uma mensagem
}
 return 
1;

Cуdigo pode estar mal-feito mas й um exemplo, eu testei aqui esse IsPlayerInPlace pra contar kills em certas gangzones e funcionou certinho.

Й melhor criar um timer checando se ele estб na Gangzone. Colocar na OnPlayerUpdate pode dar lag. O exemplo ta ai em cima й sу vocк adaptar.
Reply
#5

Assim, vamos supor:

Eu entrei na zona, logo, retornaria uma mensagem: Vocк entrou na gangzone.
Eu resolvo sair da zona, logo, retornaria uma mensagem: Vocк saiu da gangzone.

Й isso que eu quero tentar entender pra elaborar aqui. A explicaзгo tб tudo bem, mas eu quero saber uma lуgica que verifique quando o cara ENTRA ou SAI da zona.
Reply
#6

OnGameModeInit
PHP код:
SetTimer"ChecarArea"1000false ); 
Public
PHP код:
forward ChecarArea( );
public 
ChecarArea( )
{
    foreach(
Player)
    {
        if( 
IsPlayerInPlacei0.00.00.00.0 )) // Coordenadas
        
{
            
// Entrou Бrea
        
}
        else
        {
            
// Saiu Бrea
        
}
    }
    
SetTimer"ChecarArea"1000false );
    return 
1;

Reply
#7

PHP код:
 if(IsPlayerInPlace(playerid,1952.756103,-1160.385253,2281.945800,-972.161926)) //Coordenadas de uma gangzone da favela.
{
 
SendClientMessage(playerid,-1,"Vocк entrou na favela"); //Manda mensagem
 
EstaNaFavela[playerid]=true//Booleana checando true ou false
}
 if(!
IsPlayerInPlace(playerid,1952.756103,-1160.385253,2281.945800,-972.161926) && EstaNaFavela[playerid]==true//Se o player entrou na favela mas nгo estб lб.
{
 
SendClientMessage(playerid,-1,"Vocк saiu da favela"); //Manda uma mensagem
 
EstaNaFavela[playerid]=false//Booleana checando true ou false

Com um timer fica bem melhor. Estб ai um exemplo. Vocк pode adaptar. Tenho certeza que o codigo pode ser melhorado deixando mais rбpido. Sou novo em Pawn.
Reply
#8

Realmente, em hipуtese alguma coloque um cуdigo como este na PlayerUpdate, uma vez que essa Callback й chamada inъmeras vezes por segundo

Veja: https://sampwiki.blast.hk/wiki/OnPlayerUpdate

Como disse o amigo FanonRiouDiou, faзa um Timer que chame determinada Callback para checar se o player estб entrando ou nгo em uma gangzone.

Caso vocк possua mais de uma Gangzone que deseja checar pode fazer mъltiplos elseif, ou entгo armazenar as coordenadas e o respectivo nome da gangzone em um vetor (matriz) e usar um laзo de repetiзгo.

Cumps
Reply
#9

Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)