[Ajuda] Como Detectar Colisгo (Batida) entre Veiculos?
#1

Olб, gostaria de perguntar, como faзo para detectar colisгo de veiculos

Exemplo:
O Motorista do Carro A, bate no carro B (Ou vice e versa)

Ai aparece a mensagem
"Vocк Bateu no carro de Fulano"
ou
"Veiculos Infernus de Fulano, bateu no Veiculo Bullet de Beltrano"
---

Eu procurei algo a respeito, mas nao achei.
Ou nгo sei se pesquisei de forma errada, enfim.
Podem me ajudar?
Reply
#2

Nativamente, eu acho que isto nгo й possнvel. Mas usando alguns algoritmos de velocidade, anomalia entre 2 veнculos perdendo HP e proximidade entre eles, vocк pode pelo menos tentar presumir que uma colisгo entre eles aconteceu, atй mesmo verificando se vinham de vetores de direзхes diferentes antes da colisгo. Daria um trabalhinho interessante, mas acho que o resultado final nгo seria muito preciso e nem valeria a pena.
Reply
#3

eui acho que й em OnPlayerUpdateDamageVehicle, algo assim, me corrigam se tiver errado rsrs
Reply
#4

Quote:
Originally Posted by Andinho
Посмотреть сообщение
eui acho que й em OnPlayerUpdateDamageVehicle, algo assim, me corrigam se tiver errado rsrs
Essa callback й chamada em qualquer dano, nгo somente por colisгo.
Reply
#5

Em teoria seria algo como
PHP код:
const vehDelay 1000;
const 
vehDistance 3.0;
new 
    
vehTick[MAX_VEHICLES],
    
Float:vehX[MAX_VEHICLES],
    
Float:vehY[MAX_VEHICLES],
    
Float:vehZ[MAX_VEHICLES]
;
public 
OnVehicleDamageStatusUpdate(vehicleidplayerid)
{
    
veTick[vehicleid] = GetTickCount();
    
GetVehiclePos(vehicleidvehXvehYvehZ);
}

for(new 
iMAX_VEHICLES; ++i)
{
    if(
vehDesejado == i) continue;
    if(
check(vehTick[vehDesejado], vehTick[i], vehDelay))
    {
        if(
check2(vehX[i], vehY[i], vehZ[i], vehX[vehDesejado], vehY[vehDesejado], vehZ[vehDesejado], vehDistance))
        {
            
// Bateram EM TEORIA, nгo sei a real condiзгo em testes com pings altos, etc..
        
}
    }
}

check(tick1tick2range)
{
    
assert(range >= 0);
    if(
tick1 tick2)
        
tick1 tick2;
    else
        
tick2 tick1;
    return (-
range <= range);
}
check2(Float:x1Float:y1Float:z1Float:x2Float:y2Float:z2Float:distance)
{
    return (
GetDistanceBetweenPoints3D(x1,y1,z1,x2,y2,z2) < distance);
}
// AbyssMorgan
stock Float:GetDistanceBetweenPoints3D(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2){
    return 
VectorSize(x1-x2,y1-y2,z1-z2);

Reply
#6

Tava vendo uns tуpicos gringos e acabei achando isso e lembrei da postagem.. ve se й isso que vc procura..

https://sampforum.blast.hk/showthread.php?tid=586068
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)