Portal SAMP
[Ajuda] antiaérea - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] antiaérea (/showthread.php?tid=2098)



antiaérea - .Minato. - 14/02/2022

Boa tarde, estou tendo uma dor de cabeça de como fazer um sistema de antiaérea 
https://imgur.com/R27SZOK
quem poder me da uma dica basica, iria ajuda muito 
 



RE: antiaérea - CoelhaO_LokaO - 14/02/2022

limita a altura ou identifica se o player esta dentro de um veiculo aéreo naquela determinada área.



RE: antiaérea - k2bi_YT - 14/02/2022

Cara, posso ter uma noção de como você queira que funcione, mas fazer um sistema desse é meio complicado, isto é sendo "o sistema". Que envolva detectar a aproximação do inimigo, limite máximo que a antiaérea irá detectar, limite máximo do míssil para seguir, seguir o veículo, etc..
O que eu acho bem legal é o sistema antiaérea que os veículos tem no servidor COD MW3 (samp), se você achar alguma gamemode antiga(caso tenha em publico), pode estar usando como base caso contrario, só contratando um scripter de sua confiança ou fazer você mesmo.

Fiz um aqui basicão só para você ter uma noção mais ou menos como faz... claro que há bugs e afins mas é para ajudar você a desenvolver um melhor e mais fluido.

Video demostração
https://youtu.be/OqSGIXieXJU

Código PHP:
static const Float:PosMissil[][] =
{
    {
237.69531696.875022.4141},
    {
15.61721719.164122.4141},
    {
354.42972028.492222.4141},
    {
188.24222081.648422.4453}
};

new 
MissilObject[MAX_PLAYERS];
new 
TimerMissil[MAX_PLAYERS], LimiteMissil[MAX_PLAYERS];
forward MoverMissil(playerid);
public 
MoverMissil(playerid)
{
    if(
IsPlayerInAnyVehicle(playerid))
    {
        
LimiteMissil[playerid]++;
        new 
Float:xFloat:yFloat:zFloat:rvehicleid GetPlayerVehicleID(playerid);
        new 
Float:oxFloat:oyFloat:oz;
        
GetVehiclePos(vehicleidx,y,z);
        
GetVehicleZAngle(vehicleidr);
        
GetObjectPos(MissilObject[playerid], ox,oy,oz);
        if(
GetPlayerDistanceFromPoint(playeridoxoyoz) <= 15)
        {
            
CreateExplosion(oxoyoz030);
            
KillTimer(TimerMissil[playerid]);
            
DestroyObject(MissilObject[playerid]);
            
LimiteMissil[playerid] = 0;
            return 
1;
        }
        else
        if(
LimiteMissil[playerid] <= 20)
        {
            
MoveObject(MissilObject[playerid], x,y,z10000r);
            return 
1;
        }
        else
        {
            
KillTimer(TimerMissil[playerid]);
            
DestroyObject(MissilObject[playerid]);
            
SendClientMessage(playerid, -1"O missil não conseguiu chegar em você.");
            
LimiteMissil[playerid] = 0;
        }
    }
    return 
1;
}
forward CheckRadar();
public 
CheckRadar()//Deve definir na OnGameModeInit
{
    foreach(new 
playeridPlayer)
    {
        for(new 
isizeof(PosMissil); ++i)
        {
            if(
GetPlayerDistanceFromPoint(playeridPosMissil[i][0], PosMissil[i][1], PosMissil[i][2] )<= 60 && !IsValidObject(MissilObject[playerid]))
            {
                
SendClientMessage(playerid, -1"Você está em um local restrito. Missil foi lançado contra você.");
                
MissilObject[playerid] = CreateObject(3786PosMissil[i][0], PosMissil[i][1], PosMissil[i][2]+40001000);
                
TimerMissil[playerid] = SetTimerEx("MoverMissil"500true"i"playerid);
                
LimiteMissil[playerid] = 0;
                return 
1;
            }
        }
    }
    return 
1;




RE: antiaérea - .Minato. - 14/02/2022

(14/02/2022 18:38)k2bi_YT Escreveu: Cara, posso ter uma noção de como você queira que funcione, mas fazer um sistema desse é meio complicado, isto é sendo "o sistema". Que envolva detectar a aproximação do inimigo, limite máximo que a antiaérea irá detectar, limite máximo do míssil para seguir, seguir o veículo, etc..
O que eu acho bem legal é o sistema antiaérea que os veículos tem no servidor COD MW3 (samp), se você achar alguma gamemode antiga(caso tenha em publico), pode estar usando como base caso contrario, só contratando um scripter de sua confiança ou fazer você mesmo.

Fiz um aqui basicão só para você ter uma noção mais ou menos como faz... claro que há bugs e afins mas é para ajudar você a desenvolver um melhor e mais fluido.

Video demostração
https://youtu.be/OqSGIXieXJU

Código PHP:
static const Float:PosMissil[][] =
{
    {237.69531696.875022.4141},
    {15.61721719.164122.4141},
    {354.42972028.492222.4141},
    {188.24222081.648422.4453}
};

new 
MissilObject[MAX_PLAYERS];
new 
TimerMissil[MAX_PLAYERS], LimiteMissil[MAX_PLAYERS];
forward MoverMissil(playerid);
public 
MoverMissil(playerid)
{
    if(IsPlayerInAnyVehicle(playerid))
    {
        LimiteMissil[playerid]++;
        new Float:xFloat:yFloat:zFloat:rvehicleid GetPlayerVehicleID(playerid);
        new Float:oxFloat:oyFloat:oz;
        GetVehiclePos(vehicleidx,y,z);
        GetVehicleZAngle(vehicleidr);
        GetObjectPos(MissilObject[playerid], ox,oy,oz);
        if(GetPlayerDistanceFromPoint(playeridoxoyoz) <= 15)
        {
            CreateExplosion(oxoyoz030);
            KillTimer(TimerMissil[playerid]);
            DestroyObject(MissilObject[playerid]);
            LimiteMissil[playerid] = 0;
            return 1;
        }
        else
        if(LimiteMissil[playerid] <= 20)
        {
            MoveObject(MissilObject[playerid], x,y,z10000r);
            return 1;
        }
        else
        {
            KillTimer(TimerMissil[playerid]);
            DestroyObject(MissilObject[playerid]);
            SendClientMessage(playerid, -1"O missil não conseguiu chegar em você.");
            LimiteMissil[playerid] = 0;
        }
    }
    return 1;
}
forward CheckRadar();
public 
CheckRadar()//Deve definir na OnGameModeInit
{
    foreach(new playeridPlayer)
    {
        for(new isizeof(PosMissil); ++i)
        {
            if(GetPlayerDistanceFromPoint(playeridPosMissil[i][0], PosMissil[i][1], PosMissil[i][2] )<= 60 && !IsValidObject(MissilObject[playerid]))
            {
                SendClientMessage(playerid, -1"Você está em um local restrito. Missil foi lançado contra você.");
                MissilObject[playerid] = CreateObject(3786PosMissil[i][0], PosMissil[i][1], PosMissil[i][2]+40001000);
                TimerMissil[playerid] = SetTimerEx("MoverMissil"500true"i"playerid);
                LimiteMissil[playerid] = 0;
                return 1;
            }
        }
    }
    return 1;

isso que eu quero fazer mano, estou tentando fazer esse sistema em Orgs


RE: antiaérea - k2bi_YT - 14/02/2022

Então, use esse como base e vai adaptando ao seu gosto e melhorando é claro, esse ai é apenas uma ideia parar ajudar você a criar.