Guten Tag, ich habe ein Blitzer System Geschrieben und wollte dass dieser nur auf der Richtigen seite ( in der der Blitzer auch "schaut" Blitzt ).
Jedoch hat dies bis Jetzt noch nicht Funktioniert.
Versuch 1:
Wenn ich auf den Blitzer zufahre geht es nicht aber wenn ich vorbei bin schon.
Bei einem anderen geht es wiederrum.
Code
const Float:distance = 5.0; //5m vor dem Blitzer wird er geblitzt
new Float:x = Blitzi[i][blitz_x] + distance * floatsin(-Blitzi[i][blitz_r], degrees);
new Float:y = Blitzi[i][blitz_y] + distance * floatcos(-Blitzi[i][blitz_r], degrees);
if(IsPlayerInRangeOfPoint(playerid, 5.0, x, y , Blitzi[i][blitz_z]))
{
Blitz_Player(playerid);
Blitztime[playerid] = gettime() + 60*15;
}
Versuch 2:
Wenn ich auf den Blitzer zufahre geht es nicht aber wenn ich vorbei bin schon.
Bei einem anderen geht es wiederrum.
Code
*new Float:a;
GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
if(IsPlayerFacingPos(playerid, 50.0, Blitzi[i][blitz_x], Blitzi[i][blitz_y]))
{
if(Blitztime[playerid] == 0 || Blitztime[playerid] > gettime())
{
Blitz_Player(playerid);
Blitztime[playerid] = gettime() + 60*15;
}
}
Code
IsPlayerFacingPos(playerid, Float: de, Float: X, Float: Y) {
new
Float: pX,
Float: pY,
Float: pZ
;
if(GetPlayerPos(playerid, pX, pY, pZ)) {
pX = -atan2(pX - X, pY - Y);
if(pX < 0.0) {
pX += 360.0;
}
GetVehicleZAngle(GetPlayerVehicleID(playerid), pY);
pY = floatround(pY + 180.0) % 360;
printf("pX = %f pY = %f", pX, pY);
pX -= pY;
if(pX < -180) {
pX += 360.0;
}
else if(pX > 180.0) {
pX -= 360.0;
}
printf("%f < %f < %f", -de, pX, de);
return (-de < pX < de);
}
return false;
}
Alles anzeigen
Hat noch Jemand eine Idee wie ich das Sinnvoll Lösen kann oder eine Lösung warum das hier nicht Funktioniert, das Blitzer System ist Dynamisch.