U_Blitzer - Die einfache und schnelle Art Blitzer zu erstellen! [Update: V.1.1.0]

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
  • Hallo zusammen,


    mir war wirklich echt langweilig, deshalb habe ich mal diese Include gemacht.


    Was macht diese Include?


    Diese Include fügt Funktionen hinzu, die es vereinfacht Blitzer zu erstellen. Diese Blitzer sind Ressourcenfreundlicher, als manch andere Blitzer, da diese Blitzer komplett ohne Timer funktionieren. Das macht das ganze System auch noch sehr akkurat, da diese Blitzer immer dann ausgelöst werden, wenn man in der Nähe des Blitzers ist und die Geschwindigkeit übertreten hat. Sprich die gemessene Geschwindigkeit ist absolut die selbe Geschwindigkeit, die man tatsächlich fährt. Normalerweise kann es zu Verzögerungen kommen, da der Timer auf einen bestimmten Intervall eingestellt ist und der Blitzer nur in diesem Intervall die Geschwindigkeiten prüft. Es kann dann zu fehlerhaften Geschwindigkeiten kommen, sogar bis zum nicht auslösen.


    Diese Include schafft Abhilfe, denn diese Probleme können hier nicht auftreten, außer man umfährt den Blitzer.


    Welche Funktionen bietet diese Include?


    Durch diese Include werden mehrere Funktionen hinzugefügt. Hier ist mal eine Liste:



    native CreateBlitzer(Float:x, Float:y, Float:z, Float:rz, MaxSpeed); -> Erstellt einen Blitzer; Gibt die Blitzer ID des erstellten Blitzers zurück.
    native DestroyBlitzer(blitzerid); -> Zerstört Blitzer; Returns 0 bei Fehler und 1 bei Erfolg.
    native IsBlitzer(blitzerid); -> Prüft, ob angegebene Blitzer ID ein tatsächlich vorhandener Blitzer ist.
    native IsBlitzerArea(area); -> area = ID der Area, beim betreten der Area in der man geblitzt wird.
    native IsPlayerInRangeOfBlitzer(playerid); -> Prüft, ob Spieler in der Nähe eines Blitzers ist. (Return: 1: Ja | 0: Nein)
    native GetBlitzerID(playerid); -> Die Blitzer ID des nächsten Blitzers. Returns -1 wenn kein Blitzer in der Nähe ist.


    Seit dem neuesten Update werden außerdem die Blitzer automatisch gespeichert und geladen. Ihr müsst nichts weiter vornehmen. (Zum Speichern wird SQLite verwendet, die Datenbank und die Tabellenstruktur werden automatisch erstellt.)


    Außerdem wird auch ein Callback hinzugefügt:


    forward OnPlayerBlitzed(playerid, blitzerid, speed, maxspeed);


    An dieses Callback werden alle nötigen Daten geliefert, die man zur Weiterverarbeitung braucht.
    (Speed = Gemessene Geschwindigkeit | maxspeed = Maximale Geschwindigkeit des Blitzers + Toleranz)


    Zusätzlich zu diesen Funktionen kann man dieser Include aber auch noch Vorkonfigurationen mitgeben.
    Wenn man vor dem Includieren der Include folgende Defines verwendet:


    #define BLITZER_NO_SAVE


    Wenn man dies aktiviert ist, wird die Speicher- und Ladefunktion der Include ausgeschaltet. (Falls jemand das Manuell machen möchte.) [Version 1.1.0 vorausgesetzt]


    #define BLITZER_KMH_TOLERANZ


    Dem Blitzer kann eine Toleranzgrenze mitgegeben werden, ab wann er blitzen soll. (Default: 2 km/h)


    #define BLITZER_USE_GETVEHICLESPEED


    Wenn aktiviert, muss im Script eine Funktion mit Namen: "GetVehicleSpeed(vehicleid)" vorhanden sein;
    Mit diesem Define wird festgelegt, wie die km/h berechnet werden (Evtl Berechnung vom Tacho nehmen).


    Beispiele zur Konfiguration
    #define BLITZER_KMH_TOLERANZ 5 //Toleranzgrenze liegt bei 5 km/h
    #define BLITZER_USE_GETVEHICLESPEED //Funktion GetVehicleSpeed muss hinzugefügt werden.
    #include <U_Blitzer>

    Beispiele zur Konfiguration
    //Irgendwo anders im Script (Nicht in anderen public's/Funktionen)
    stock GetVehicleSpeed(vehicleid)
    {
    //Hier muss euer Speedberechnungscode rein. Bsp:
    new Float:Vx, Float:Vy, Float:Vz;
    GetVehicleVelocity(vehicleid, Vx, Vy, Vz);
    new Float:rtn;
    rtn = floatsqroot(floatpower(Vx*100,2) + floatpower(Vy*100,2));
    rtn = floatsqroot(floatpower(rtn,2) + floatpower(Vz*100,2));
    return floatround(rtn);
    }

    Beispiele zur Konfiguration
    //Beispiele zum Erstellen der Blitzer (mit ocmd)
    ocmd:createblitzer(playerid, params[])
    {
    if(IsPlayerInRangeOfBlitzer(playerid)) return SendClientMessage(playerid, 0xFFFFFFFF, "Blitzer in der Nähe!");
    new Float:pos[4],speed;
    if(sscanf(params, "i", speed)) return SendClientMessage(playerid, 0xFFFFFFFF, "Nutze: /createblitzer [MaxSpeed]");
    GetPlayerPos(playerid, pos[0], pos[1], pos[2]);
    GetPlayerFacingAngle(playerid, pos[3]);
    CreateBlitzer(pos[0], pos[1], pos[2], pos[3], speed);
    return 1;
    }
    ocmd:destroyblitz(playerid, params[])
    {
    if(!IsPlayerInRangeOfBlitzer(playerid)) return SendClientMessage(playerid, 0xFFFFFFFF, "Kein Blitzer in der Nähe!");
    DestroyBlitzer(GetBlitzerID(playerid));
    return 1;
    }


    Welche Voraussetzungen benötige ich dafür?


    Für diese Include wird der Incognito Streamer benötigt, da mit den Dynamic Areas gearbeitet wird.
    Hier könnt ihr ihn finden, falls ihr ihn nicht habt: Klick mich
    Ansonsten kann jeder diese Include ohne Einschränkungen nutzen.


    Installation


    Nach dem Download der Include muss folgende Zeile in das Gamemode eingefügt werden. (WICHTIG: Das Includieren muss nach dem Includieren des Incognito Streamers geschehen!)


    #include <U_Blitzer>


    WICHTIG: Das Includieren muss nach dem Includieren des Incognito Streamers geschehen!


    Danach muss noch folgendes ins Gamemode eingefügt werden:



    public OnPlayerBlitzed(playerid, blitzerid, speed, maxspeed)
    {
    return 1;
    }


    Danach können alle Funktionen genutzt werden.


    Download


    Version 1.1.0:
    Pastebin: Pastebin
    Direkter Download: MEGA


    Ich hoffe euch gefällt meine Include (Ist meine erste Include), ich hoffe ebenfalls auf Verbesserungsvorschläge und Ideen für kommende Versionen.


    Mfg,
    UncleSub



    Edit 1: [ pwn] [/ pwn] Tags hinzugefügt.
    Edit 2: Formulierung
    Edit 3: Update auf V 1.1.0
    Edit 4: Downloadlinks

    4 Mal editiert, zuletzt von UncleSub () aus folgendem Grund: Links

  • Wie funktioniert das ohne Timer?

    Eigentlich ganz Einfach. Der Incognito Streamer bietet Funktionen, die Areas erstellt. Außerdem bietet er ein Callback "OnPlayerEnterDynamicArea". Was man machen muss, dachte ich mir, ist, einfach eine Area um den Blitzer zu erstellen, und wenn er dort hinein fährt wird der Blitzer ausgelöst. Ich hatte das Ganze schon länger bei mir so im Script, da aber immer wieder wenn ich erwähnte, dass das Ganze ohne Timer funktiioniert, alle gefragt haben wie das möglich ist und ich denke, dass es um einiges Ressourcenfreundlicher ist, als mit Timern habe ich mich entschieden dafür eine Include zu schreiben.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Update auf Version 1.1.0:


    Seit dem neuesten Update werden die Blitzer automatisch gespeichert und geladen. Als Speicherungssystem wird dazu SQLite verwendet, da dieses System sich am Besten für diesen Zweck eignet. (Keine extra Plugin o.Ä. nötig, wie bei MySQL)
    Sobald die neueste Include installiert wurde und das Gamemode neu compiliert wurde, ist die Include voll funktionsfähig. Nach einem Restart wird die Datenbank und die Tabellenstruktur automatisch erstellt.
    Solltet ihr das Speicherungssystem nicht nutzen wollen, könnt ihr wieder durch Vorkonfigurationen dieses Feature ausschalten. Ihr müsst nur vor dem Includieren folgendes einfügen:


    #define BLITZER_NO_SAVE


    Zusätzlich dazu habe ich die Variablen im System anders benannt, so sollte es zu einer höheren Komptabilität führen! (Falls gleichnamige Variablen im Script vorhanden sind.)


    Ansonsten würde ich mich erneut über Kritik freuen!


    Mfg,
    UncleSub