[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:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -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(playerid, x, y, z);if(x >= 1859 && y >= -1451 && x <= 1980 && y <= -1351) return true;else return 0;} 
Com esta informaзгo, basta alterar na funзгo CreateDynamicRectangle ficando basicamente:
PHP код:
    areaSkate = CreateDynamicRectangle(1859, -1451, 1980, -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(playerid, areaid)
{
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(playerid, x, y, z);
    if(
x >= GangZoneInfo[gzid][gzX2] && y >= GangZoneInfo[gzid][gzY1] && x <= GangZoneInfo[gzid][gzX1] && y <= GangZoneInfo[gzid][gzY2])
    {
        
// dentro da GZ
    
} 
Reply
#4

Use Essa Stock, Valeus!
PHP код:
stock 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
#5

Quote:
Originally Posted by GuiKommander
Посмотреть сообщение
Use Essa Stock, Valeus!
PHP код:
stock 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;
} 
PHP код:
if(IsPlayerInPlace(playerid, GangZoneInfo[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(playerid, Player_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(playerid, Player_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:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -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(playerid, x, y, z);if(x >= 1859 && y >= -1451 && x <= 1980 && y <= -1351) return true;else return 0;} 
Com esta informaзгo, basta alterar na funзгo CreateDynamicRectangle ficando basicamente:
PHP код:
    areaSkate = CreateDynamicRectangle(1859, -1451, 1980, -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(playerid, areaid)
{
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)