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).
#define BLITZER_KMH_TOLERANZ 5 //Toleranzgrenze liegt bei 5 km/h
#define BLITZER_USE_GETVEHICLESPEED //Funktion GetVehicleSpeed muss hinzugefügt werden.
#include <U_Blitzer>
//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 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