Blitzer der nur auf der Richtigen Spur Funktioniert

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • 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;
    				}
    			}

    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.

  • Nutze den Code von Versuch 1.


    Es könnte sein, dass die Drehung des Blitzers anders ist, als von den meisten Objekten, es gibt da Ausnahmen.
    Hast du einfach mal folgendes versucht?
    new Float:x = Blitzi[i][blitz_x] + distance * floatcos(-Blitzi[i][blitz_r], degrees);new Float:y = Blitzi[i][blitz_y] + distance * floatsin(-Blitzi[i][blitz_r], degrees);


    Es könnte sein, dass die Drehung gegenläufig ist.


    Zusätzlich, falls das nicht klappt, kannst du versuchen, alle Varianten durchzuspielen, sprich:
    cos und sin mit - hinter der Klammer
    cos und sin jeweils nur eins mit -
    cos und sin beide ohne -
    und dann jeweils noch sin und cos vertauscht, für jeden der obigen Fälle. Sind 8 Fälle insgesamt.


    Am einfachsten ist es, wenn du dir 4 Blitzer irgendwo hin stellst, die alle 90° versetzt sind, mit genügend Abstand dazwischen natürlich.
    Lasse dann zusätzlich beim Erstellen des Blitzer-Objekts mit der obigen Formel ein weiteres Objekt an der Position "vor" dem Blitzer erstellen, das wäre dann der Punkt, an dem der Blitzer ausgelöst wird.


    Wenn bei allen Blitzern das Objekt an der richtigen Position vor dem Blitzer steht, hast du die richtige Formel.


    Anschließend nimmst du diese Formel in deine Prüf-Routine und fragst nach IsPlayerInRangeOfPoint zusätzlich noch ab, ob der Spieler den Blitzer anschaut, sprich mit IsPlayerFacingPos auf die Blitzer-Position.
    Diese zusätzliche Abfrage ist wichtig, sonst würde der Blitzer auch blitzen, wenn vom Blitzer weg fährt, sprich auf der Gegenfahrbahn.
    Dann sollte es passen.

  • Beitrag von reaL. ()

    Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Zuviel Dummheit :D ().
  • Okey ich war nur verwirrt weil du geschrieben hast hinter der klammer und am Anfang ja schon ein - war.



    Ich habe es mal getestet und bin nun soweit gekommen.
    Ich habe die möglichkeiten mal durchprobiert.
    Wenn ich bei x floatcos nehme und bei y floatsin komme ich immer auf eine Position Links und Rechts neben dem Blitzer.


    2x Vor dem Blitzern, 2x Hinter dem Blitzern

    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);


    Alle Objecte hinter den Blitzern

    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);

    Alle Objecte hinter den Blitzernn


    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);


    2x Vor dem Blitzer, 2x Hinter dem Blitzern

    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);