[Ajuda] Detectar player dentro de GZ
#1

Como detectar se o player estб dentro de uma GZ sendo as coordenadas da GZ:
PHP код:
GangZoneCreate(GangZoneInfo[gzid][gzX2], GangZoneInfo[gzid][gzY1], GangZoneInfo[gzid][gzX1], GangZoneInfo[gzid][gzY2]); 
Reply
#2

A ъnica forma que pensei por cima foi utilizando o Streamer e criando uma DynamicArea com as mesmas informaзхes da GangZone.

@edit: Aqui um tutorial que eu fiz rapidinho pra ajudar outro usuбrio com uma dъvida parecida.

Bom, vamos a explicaзгo. A forma mais prбtica e que consome menos processamento do seu servidor й utilizando a funзгo do plugin streamer. Aqui vai um breve tutorial de como pode ser feito:

1. Inicialmente defina uma variбvel para a бrea, por exemplo:
PHP код:
new areaSkate
2. Vб atй a public OnGameModeInit e defina qual serб essa бrea utilizando a funзгo CreateDynamicRectangle
PHP код:
    areaSkate CreateDynamicRectangle(Float:minxFloat:minyFloat:maxxFloat:maxyworldid = -1interiorid = -1playerid = -1); 
Ai vocк se pergunta, como vou saber o minX, minY exato da GangZone que vocк quer? Й simples, Gamemodes com base GF utilizam de stocks iguais (Nunca vi alguйm mudando isto, entгo para a GangZone da Pista de Skate, por exemplo, basta buscar em seu GM a IsPlayerInSkate. Efetuando a busca no gamemode que encontrei tem algo semelhante a:
PHP код:
stock IsPlayerInSkate(playerid){new Float:x,Float:y,Float:z;GetPlayerPos(playeridxyz);if(>= 1859 && >= -1451 && <= 1980 && <= -1351) return true;else return 0;} 
Com esta informaзгo, basta alterar na funзгo CreateDynamicRectangle ficando basicamente:
PHP код:
    areaSkate CreateDynamicRectangle(1859, -14511980, -1351, -1, -1, -1); 
3. E por fim, basta colocar junto as outras callbacks de seu GameMode a public OnPlayerEnterDynamicArea(playerid, areaid) sendo assim:
PHP код:
public OnPlayerEnterDynamicArea(playeridareaid)
{
if(
areaid == areaSkate)
    {
      
SendClientMessage(playerid, -1,"[SERVER]Vocк entrou na GangZone Pista de Skate.");
    }
    return 
1;

Reply
#3

Entгo no caso de:
PHP код:
    GangZoneCreate(GangZoneInfo[gzid][gzX2], GangZoneInfo[gzid][gzY1], GangZoneInfo[gzid][gzX1], GangZoneInfo[gzid][gzY2]); 
Pra eu detectar se o player estб dentro da GZ й sу fazer:
PHP код:
    new Float:x,Float:y,Float:z;
    
GetPlayerPos(playeridxyz);
    if(
>= GangZoneInfo[gzid][gzX2] && >= GangZoneInfo[gzid][gzY1] && <= GangZoneInfo[gzid][gzX1] && <= GangZoneInfo[gzid][gzY2])
    {
        
// dentro da GZ
    

Reply
#4

Use Essa Stock, Valeus!
PHP код:
stock IsPlayerInPlaceplayeridFloat:XMinFloat:YMinFloat:XMaxFloat:YMax )
{
    new
        
RetValue 0,
        
Float:aX,
        
Float:aY,
        
Float:aZ
    
;
    
GetPlayerPosplayeridaXaYaZ );
    if( 
aX >= XMin && aY >= YMin && aX XMax && aY YMax )
    {
        
RetValue 1;
    }
    return 
RetValue;

Reply
#5

Quote:
Originally Posted by GuiKommander
Посмотреть сообщение
Use Essa Stock, Valeus!
PHP код:
stock IsPlayerInPlaceplayeridFloat:XMinFloat:YMinFloat:XMaxFloat:YMax )
{
    new
        
RetValue 0,
        
Float:aX,
        
Float:aY,
        
Float:aZ
    
;
    
GetPlayerPosplayeridaXaYaZ );
    if( 
aX >= XMin && aY >= YMin && aX XMax && aY YMax )
    {
        
RetValue 1;
    }
    return 
RetValue;

PHP код:
if(IsPlayerInPlace(playeridGangZoneInfo[gzid][gzX2], GangZoneInfo[gzid][gzY1], GangZoneInfo[gzid][gzX1], GangZoneInfo[gzid][gzY2] ) ) {
SendClientMessage(playerid, -1"NAGZ");

Nгo funcionou!
Reply
#6

Utilize YSF, que tem funзхes do tipo, de forma muito mais estavel e precisa
Reply
#7

Quote:
Originally Posted by RazorGuigo
Посмотреть сообщение
Utilize YSF, que tem funзхes do tipo, de forma muito mais estavel e precisa
Eu uso pra fazer foreach em loop de todos os jogares de forma leve...

Como eu usaria isso pra essa dependencia?
Reply
#8

Olб,

Iremos criar uma variбvel para armazenamento.

PHP код:
new Player_Dentro_Da_Gang
Feito isso, vamos criar a nossa GangZone utilizando a variбvel.

PHP код:
public OnGameModeInit()
{
   
Player_Dentro_Da_Gang GangZoneCreate(GangZoneInfo[gzid][gzX2], GangZoneInfo[gzid][gzY1], 
   
GangZoneInfo[gzid][gzX1], GangZoneInfo[gzid][gzY2]);
   return 
1;

Prosseguimos com a chamada, isso irб fazer com que a GangZone seja criada assim que o player spawnar no servidor.

PHP код:
public OnPlayerSpawn(playerid)
{
    
ShowGangZoneToPlayer(playeridPlayer_Dentro_Da_Gang);
    return 
1;

Agora o mais simples, iremos utilizar a callback OnPlayerUpdate para ficar atualizando a GangZone.

PHP код:
public OnPlayerUpdate(playerid)
{
    if(
PlayerOnGangZone(playeridPlayer_Dentro_Da_Gang))
    {
        
SendClientMessage(playerid, -1"Vocк estб dentro da GangZone!");
    }
    else
    {
       
SendClientMessage(playerid, -1"Vocк saiu da GangZone!");
    }
    return 
1;

Abraзos!
Reply
#9

Quote:
Originally Posted by Vithinn
Посмотреть сообщение
A ъnica forma que pensei por cima foi utilizando o Streamer e criando uma DynamicArea com as mesmas informaзхes da GangZone.

@edit: Aqui um tutorial que eu fiz rapidinho pra ajudar outro usuбrio com uma dъvida parecida.

Bom, vamos a explicaзгo. A forma mais prбtica e que consome menos processamento do seu servidor й utilizando a funзгo do plugin streamer. Aqui vai um breve tutorial de como pode ser feito:

1. Inicialmente defina uma variбvel para a бrea, por exemplo:
PHP код:
new areaSkate
2. Vб atй a public OnGameModeInit e defina qual serб essa бrea utilizando a funзгo CreateDynamicRectangle
PHP код:
    areaSkate CreateDynamicRectangle(Float:minxFloat:minyFloat:maxxFloat:maxyworldid = -1interiorid = -1playerid = -1); 
Ai vocк se pergunta, como vou saber o minX, minY exato da GangZone que vocк quer? Й simples, Gamemodes com base GF utilizam de stocks iguais (Nunca vi alguйm mudando isto, entгo para a GangZone da Pista de Skate, por exemplo, basta buscar em seu GM a IsPlayerInSkate. Efetuando a busca no gamemode que encontrei tem algo semelhante a:
PHP код:
stock IsPlayerInSkate(playerid){new Float:x,Float:y,Float:z;GetPlayerPos(playeridxyz);if(>= 1859 && >= -1451 && <= 1980 && <= -1351) return true;else return 0;} 
Com esta informaзгo, basta alterar na funзгo CreateDynamicRectangle ficando basicamente:
PHP код:
    areaSkate CreateDynamicRectangle(1859, -14511980, -1351, -1, -1, -1); 
3. E por fim, basta colocar junto as outras callbacks de seu GameMode a public OnPlayerEnterDynamicArea(playerid, areaid) sendo assim:
PHP код:
public OnPlayerEnterDynamicArea(playeridareaid)
{
if(
areaid == areaSkate)
    {
      
SendClientMessage(playerid, -1,"[SERVER]Vocк entrou na GangZone Pista de Skate.");
    }
    return 
1;

Consegui usando sua base, muito obrigado! +rep
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)