|
So you are creating check points and want a arrow in them to point to where to go?
|
#include <a_samp>
new Arrow[MAX_PLAYERS];
new ArrowTimer;
stock Float:AngleBetweenPoints(Float:XA, Float:YA, Float:XB, Float:YB)
{
new Float:Angle=-(90+(atan2(YA-YB,XA-XB)));// * 180.0 / 3.141592653;
return Angle;
}
public OnFilterScriptInit()
{
ArrowTimer=SetTimer("LOL", 300, 1);
for(new I = 0; I < MAX_PLAYERS; I ++)
{
Arrow[I] = CreateObject(1318,0,0,0,0,0,0);
}
return 1;
}
public OnFilterScriptExit()
{
KillTimer(ArrowTimer);
for(new I = 0; I < MAX_PLAYERS; I ++) DestroyObject(Arrow[I]);
return 1;
}
forward LOL(); public LOL()
{
new Float:pX, Float:pY, Float:pZ;
for(new I = 0; I < MAX_PLAYERS; I ++)
{
if(IsPlayerConnected(I))
{
GetPlayerPos(I,pX,pY,pZ);
SetObjectPos(Arrow[I],pX,pY,pZ+1);
SetObjectRot(Arrow[I],0,90,-90-AngleBetweenPoints(pX,pY,1153.9650,-1770.1655));
}
}
return 1;
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y)
{
new Float:DX, Float:DY;
new Float:angle;
DX = floatabs(floatsub(x2,X));
DY = floatabs(floatsub(y2,Y));
if (DY == 0.0 || DX == 0.0)
{
if(DY == 0 && DX > 0) angle = 0.0;
else if(DY == 0 && DX < 0) angle = 180.0;
else if(DY > 0 && DX == 0) angle = 90.0;
else if(DY < 0 && DX == 0) angle = 270.0;
else if(DY == 0 && DX == 0) angle = 0.0;
}
else
{
angle = atan(DX/DY);
if(X > x2 && Y <= y2) angle += 90.0;
else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
else if(X < x2 && Y >= y2) angle -= 90.0;
else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
}
return floatadd(angle, 90.0);
}
|
Код:
#include <a_samp>
new Arrow[MAX_PLAYERS];
new ArrowTimer;
stock Float:AngleBetweenPoints(Float:XA, Float:YA, Float:XB, Float:YB)
{
new Float:Angle=-(90+(atan2(YA-YB,XA-XB)));// * 180.0 / 3.141592653;
return Angle;
}
public OnFilterScriptInit()
{
ArrowTimer=SetTimer("LOL", 300, 1);
for(new I = 0; I < MAX_PLAYERS; I ++)
{
Arrow[I] = CreateObject(1318,0,0,0,0,0,0);
}
return 1;
}
public OnFilterScriptExit()
{
KillTimer(ArrowTimer);
for(new I = 0; I < MAX_PLAYERS; I ++) DestroyObject(Arrow[I]);
return 1;
}
forward LOL(); public LOL()
{
new Float:pX, Float:pY, Float:pZ;
for(new I = 0; I < MAX_PLAYERS; I ++)
{
if(IsPlayerConnected(I))
{
GetPlayerPos(I,pX,pY,pZ);
SetObjectPos(Arrow[I],pX,pY,pZ+1);
SetObjectRot(Arrow[I],0,90,-90-AngleBetweenPoints(pX,pY,1153.9650,-1770.1655));
}
}
return 1;
}
stock Float:GetPointAngleToPoint(Float:x2, Float:y2, Float:X, Float:Y)
{
new Float:DX, Float:DY;
new Float:angle;
DX = floatabs(floatsub(x2,X));
DY = floatabs(floatsub(y2,Y));
if (DY == 0.0 || DX == 0.0)
{
if(DY == 0 && DX > 0) angle = 0.0;
else if(DY == 0 && DX < 0) angle = 180.0;
else if(DY > 0 && DX == 0) angle = 90.0;
else if(DY < 0 && DX == 0) angle = 270.0;
else if(DY == 0 && DX == 0) angle = 0.0;
}
else
{
angle = atan(DX/DY);
if(X > x2 && Y <= y2) angle += 90.0;
else if(X <= x2 && Y < y2) angle = floatsub(90.0, angle);
else if(X < x2 && Y >= y2) angle -= 90.0;
else if(X >= x2 && Y > y2) angle = floatsub(270.0, angle);
}
return floatadd(angle, 90.0);
}
|