Detectar player dentro de GZ -
maikons - 25.02.2018
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]);
Re: Detectar player dentro de GZ -
Vithinn - 25.02.2018
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:
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;
}
Re: Detectar player dentro de GZ -
maikons - 25.02.2018
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
}
Re: Detectar player dentro de GZ -
GuiKommander - 25.02.2018
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;
}
Re: Detectar player dentro de GZ -
maikons - 26.02.2018
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!
Re: Detectar player dentro de GZ -
RazorGuigo - 27.02.2018
Utilize YSF, que tem funзхes do tipo, de forma muito mais estavel e precisa
Re: Detectar player dentro de GZ -
maikons - 28.02.2018
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?
Re: Detectar player dentro de GZ -
Gguiz - 28.02.2018
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!
Re: Detectar player dentro de GZ -
maikons - 03.03.2018
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:
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