Coordenada Random. -
tonisantolia - 11.03.2017
Bom, estou precisando de uma forma para gerar uma coordenada prуximo ao NPC para ele ficar andando em vez de ficar como uma estatua parado.
Alguйm sabe uma lуgica para fazer tal aзгo?
Grato.
OBS: Uso o FCNPC.
Re: Coordenada Random. -
Dayvison_ - 11.03.2017
Vocк quer que ele movimente aleatoriamente como em circulos, vai e volta etc.. Ou vocк pretende fazer que ele siga um caminho aleatуrio sempre indo pelos
paths, checando obstбculos etc..?
Re: Coordenada Random. -
Injury - 11.03.2017
Basicamente 3 funзхes:
PHP код:
FCNPC_SetAngle(ncpid,random(360));// setar o angulo para ele nгo ir apenas para uma direзгo
stock GetXYInFrontOfZombie(npcid, &Float:x, &Float:y, Float:distance) //pegar posiзгo na frente do npc
{
new Float:a;
FCNPC_GetPosition(npcid, x, y, a);
a = FCNPC_GetAngle(npcid);
x += (distance * floatsin(-a, degrees));
y += (distance * floatcos(-a, degrees));
}
FCNPC_GoTo(npcid, x, y, z... //mover npc
PS: Isso nгo verifica obstбculos
Re: Coordenada Random. -
Dayvison_ - 11.03.2017
Algo como isto, agora caso vocк queira apenas no caminhos de path, terб que implementar...
PHP код:
public OnGameModeInit()
{
CA_Init();
}
FCNPC_MoveIA(npcid, Float:x, Float:y, Float:z, Float:radius)
{
new
Float:tx,
Float:ty,
Float:tz,
iters
;
do
{
GetRandomPointInCircle(x, y, radius, tx, ty);
CA_FindZ_For2DCoord(tx, ty, tz);
if(++iters < 10)
return 0;
}
while(CA_RayCastLine(x, y, z, tx, ty, tz, null, null, null));
return FCNPC_GoTo(npcid, tx, ty, tz);
}
//GetRandomPointInCircle by Crayder
//https://github.com/AbyssMorgan/SA-MP/blob/master/include/SAM/3DTryg.inc#L1823
stock GetRandomPointInCircle(Float:x,Float:y,Float:radius,&Float:tx,&Float:ty){
//"float(random(1000001)) / 1000000.0" is RandomFloat for 0.0 - 1.0.
new Float:v3D_alfa = float(random(1000001))/1000000.0,
Float:v3D_beta = float(random(1000001))/1000000.0;
if(v3D_beta < v3D_alfa) (((v3D_alfa) ^= (v3D_beta)), ((v3D_beta) ^= (v3D_alfa)), ((v3D_alfa) ^= (v3D_beta)))
tx = x + (v3D_beta * radius * floatcos(2.0 * 3.14159265358979323846 * v3D_alfa / v3D_beta));
ty = y + (v3D_beta * radius * floatsin(2.0 * 3.14159265358979323846 * v3D_alfa / v3D_beta));
}
Re: Coordenada Random. -
tonisantolia - 12.03.2017
Ok, ajudaram muito.. Mas agora outra questгo, como faзo para usar o MapAndreas para eles nгo saнrem do nнvel do chгo?