[Ajuda] Verificar quando o jogador entrar em uma бrea.
#1

Estou fazendo um FS para que o jogador, quando entrasse na бrea de San Fierro (que eu criei usando um stock) tivesse um aviso de que se nгo pedisse a autorizaзгo para pouso, ele seria interceptado. Enfim, estou querendo fazer com que ele mande a mensagem quando entre e saia da zona, mas simplesmente nгo estб funcionando.

Variбvel:
Код:
new bool:entradaArea[MAX_PLAYERS];
Cуdigo:
Код:
forward EntrarAreaRestritaSF(playerid);
public EntrarAreaRestritaSF(playerid) {
    if(IsPlayerInPlace(playerid, -2956.8369, -1438.3058, -765.9012, 1587.6742)) {
    	entradaArea[playerid] = true;
  		SetTimer("EntrarAreaRestritaSF", 1000, true);
		new stringAviso[250];
		format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de entrar no espaзo aйreo de San Fierro, peзa autorizaзгo para efetuar o pouso, ou sua aeronave serб interceptada por mнsseis.");
		SendClientMessage(playerid, COR_VERMELHO, stringAviso);
	}
	else return entradaArea[playerid] = false;
	return 1;
}

forward SairAreaRestritaSF(playerid);
public SairAreaRestritaSF(playerid) {
	if(!IsPlayerInPlace(playerid, -2956.8369, -1438.3058, -765.9012, 1587.6742)) {
	    if(entradaArea[playerid] == false) {
			SetTimer("SairAreaRestritaSF", 1000, false);
			new stringAviso[250];
			format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de sair do espaзo aйreo de San Fierro. Sua aeronave nгo serб interceptada.");
			SendClientMessage(playerid, COR_VERMELHO, stringAviso);
		}
	}
	return 1;
}
Stock:
Код:
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
#2

Refactorizei um bocado. Veja se funciona agora:

pawn Код:
new bool:inArea[MAX_PLAYERS];

AvisoAreaRestritaSF(playerid) {
    if(isPlayerInPlace(playerid, -2956.8369, -1438.3058, -765.9012, 1587.6742)) {
        new stringAviso[250];

        if(!inArea[playerid]) {
            inArea[playerid] = true;

            SetTimer("EntrarAreaRestritaSF", 1000, true);
       
            format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de entrar no espaзo aйreo de San Fierro, peзa autorizaзгo para efetuar o pouso, ou sua aeronave serб interceptada por mнsseis.");
            SendClientMessage(playerid, COR_VERMELHO, stringAviso);
        }
        else {
            inArea[playerid] = false;
            SetTimer("SairAreaRestritaSF", 1000, false);
            format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de sair do espaзo aйreo de San Fierro. Sua aeronave nгo serб interceptada.");
            SendClientMessage(playerid, COR_VERMELHO, stringAviso);
        }
    }

    return 1;
}


isPlayerInPlace(playerid, Float:XMin, Float:YMin, Float:XMax, Float:YMax)
{
    new Float:pos[3];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);

    if(pos[0] >= XMin && pos[2] >= YMin && pos[0] <= XMax && pos[2] <= YMax)
    {
        return 1;
    }

    return 0;
}
Reply
#3

Quote:
Originally Posted by GRiMMREAPER
Посмотреть сообщение
Refactorizei um bocado. Veja se funciona agora:

pawn Код:
new bool:inArea[MAX_PLAYERS];

AvisoAreaRestritaSF(playerid) {
    if(isPlayerInPlace(playerid, -2956.8369, -1438.3058, -765.9012, 1587.6742)) {
        new stringAviso[250];

        if(!inArea[playerid]) {
            inArea[playerid] = true;

            SetTimer("EntrarAreaRestritaSF", 1000, true);
       
            format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de entrar no espaзo aйreo de San Fierro, peзa autorizaзгo para efetuar o pouso, ou sua aeronave serб interceptada por mнsseis.");
            SendClientMessage(playerid, COR_VERMELHO, stringAviso);
        }
        else {
            inArea[playerid] = false;
            SetTimer("SairAreaRestritaSF", 1000, false);
            format(stringAviso, sizeof(stringAviso), "(ATENЗВO!) Vocк acabou de sair do espaзo aйreo de San Fierro. Sua aeronave nгo serб interceptada.");
            SendClientMessage(playerid, COR_VERMELHO, stringAviso);
        }
    }

    return 1;
}


isPlayerInPlace(playerid, Float:XMin, Float:YMin, Float:XMax, Float:YMax)
{
    new Float:pos[3];
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);

    if(pos[0] >= XMin && pos[2] >= YMin && pos[0] <= XMax && pos[2] <= YMax)
    {
        return 1;
    }

    return 0;
}
Nгo funcionou :\
Reply
#4

Estб a colocar a callback AvisoAreaRestritaSF(playerid) dentro do OnPlayerUpdate?
Reply
#5

Nгo se usa SetTimer em funзхes pъblicas com parвmetros, mas sim SetTimerEx .



Ainda, a funзгo de verificaзгo de бrea emprega as coordenadas X e Y do jogador, nгo as coordenadas X e Z.



Espero ter ajudado .
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)