[INCLUDE] Blitzer - System

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
  • Beschreibung:
    Dieses Include ermöglicht dem Scripter einfach hinzufügen bzw. entfernen von Blitzern.
    Beim Erstellen der Blitzer kann man selber die Geschwindigkeit und den Radius angeben. Nützlich für enge Stadtkurven oder breite Schnellstraßen.
    Außerdem ist eine Blitzfunktion vorhanden, welche dem Spieler ein kleines Bußgeld berechnet.


    Funktionen:
    - MAX_BLITZER 15 // Maximale Anzahl von Blitzern
    - BLITZER_TIMER_INTERVALL 500 // Intervall für das Blitzen (in Milliesekunden)
    - BLITZER_PAUSE 2 // Anzahl der Minuten, in denen der Spieler nicht mehr geblitzt werden kann
    - AddBlitzer(playerid,speed,radius); // erstellt einen Blitzer
    - RemoveBlitzer(playerid); // entfernt einen Blitzer in der Nähe des Spielers
    - RemoveAllBlitzer(); // entfernt alle Blitzer
    - CountBlitzer(); // Zählt alle erstellten Blitzer


    Installation:
    Die Installation ist ganz simple und für jeden verständlich.
    Ihr ladet euch "blitzer.inc" runter und fügt diese in euren "Includes" - Ordner ein.
    Danach fügt ihr im Kopf eures Scripts dieses Include ein:
    #include <blitzer>
    Als letztes müßt ihr die Timer-Funktion in einen eurer Timer einfügen oder einen neuen erstellen:

    public OnGameModeInit(playerid) {
    SetTimer("Blitzer_Timer", BLITZER_TIMER_INTERVALL, 1);
    return 1;
    }


    Möglicher Gebrauch:

    dcmd_blitzer(playerid, params[]) {
    new speed,radius;
    if (sscanf(params, "ii", speed, radius)) {
    SendClientMessage(playerid, 0xffffffff, "Benutzung: /blitzer [Geschwindigkeit] [Radius]");
    return 1;
    }
    AddBlitzer(playerid,speed,radius);
    return 1;
    }

    Download:


    - PasteBin
    - Uploaded
    - breadfish.de/wcf/attachment/1968/


    Danksagung:
    - danke an Ping, für das Erklären und Optimieren

  • Vorstellung 10/10


    Ausführung: - /10 [noch anschauen]


    Idee: 10/10

  • Pls donwloadlink von Blitzer.inc xD


    also als pwn datei pls nicht pastebin!

  • Ich sagte immer schon das die Xtreme Roleplay gute Scripter haben.. Du machst deine Arbeit gut :P
    Ich sag mal so: 10/10 Ich werd irgendwann mal Ausprobieren brauch ich eigentlich nicht, ich weiß jetzt schon das es Power Full ist ;)


  • C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(22) : error 017: undefined symbol "MAX_PLAYERS"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(23) : error 017: undefined symbol "IsPlayerInAnyVehicle"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(24) : error 017: undefined symbol "IsPlayerConnected"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(26) : error 017: undefined symbol "IsPlayerInRangeOfPoint"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(28) : error 017: undefined symbol "GetPVarInt"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(29) : warning 217: loose indentation
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(32) : error 017: undefined symbol "SetPVarInt"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(39) : error 017: undefined symbol "SetPVarInt"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(41) : error 017: undefined symbol "SetPVarInt"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(42) : error 017: undefined symbol "PlayerPlaySound"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(43) : error 017: undefined symbol "GivePlayerMoney"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(45) : error 017: undefined symbol "SendClientMessage"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(46) : error 017: undefined symbol "format"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(46) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(46) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(46) : warning 202: number of arguments does not match definition
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(46) : error 017: undefined symbol "GetPVarInt"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(47) : error 017: undefined symbol "SendClientMessage"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(111) : error 017: undefined symbol "IsPlayerInAnyVehicle"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(111) : error 017: undefined symbol "GetVehicleVelocity"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(111) : error 017: undefined symbol "GetPlayerVelocity"
    C:\Dokumente und Einstellungen\Alex\Desktop\Blitzersystem.pwn(111) : fatal error 107: too many error messages on one line


    Compilation aborted.Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    18 Errors.



    ;(;(;(;(;(;(


    Kann mir das einer einfach als Filterscript verpacken ? :pinch:

  • Immer noch 18 errors trotz neuen Includes


    Pls einer pwn datei schiken und amx!

  • Ja klar Funktioniert das mit den neusten Includes die ich als Hotkey verlinkt habe, aber mal wieder so Dumm um sie richtig zu Positionieren.
    Ahja, einfach Krass die Inc. Habs ausprobiert und ich denke wirkt mehr RP als sonst ;)

  • Wo müssen die rein? 8|


    Pawno --> Include ?


    oder Server Ordner --> Include ?



    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Credits:
    // Script erstellt von Stas
    // Offizieller Scripter der Xtreme - RolePlay - Community
    // www.xtreme-roleplay.eu
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Einstellungen
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #define MAX_BLITZER 15 // Maximale Anzahl von Blitzern
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // globale Variablen
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    enum eBlitzer {
    ID, Float:BlitzerX, Float:BlitzerY, Float:BlitzerZ, Radius, Geschwindigkeit, Erstellt
    };
    new Blitzer[MAX_BLITZER][eBlitzer];
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // CallBacks
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    forward Blitzer_Timer();
    public Blitzer_Timer() {
    for (new playerid = 0; playerid < MAX_PLAYERS; playerid++) {
    if(!IsPlayerInAnyVehicle(playerid)) return 1;
    if(!IsPlayerConnected(playerid) || IsPlayerNPC(playerid)) continue;
    for(new i = 0; i < sizeof(Blitzer); i++) {
    if(IsPlayerInRangeOfPoint(playerid, Blitzer[i][Radius], Blitzer[i][BlitzerX], Blitzer[i][BlitzerY], Blitzer[i][BlitzerZ])) {
    if(Blitzer[i][Erstellt] == 1) {
    new save = GetPVarInt(playerid, "BitzPause");
    if(save > 0)
    {
    save--;
    SetPVarInt(playerid, "BitzPause", save);
    return 1;
    }
    new speed = GetPlayerSpeed(playerid,true);
    if(speed > Blitzer[i][Geschwindigkeit]) {
    new string[128];
    // Einstellen des Momentes, in dem der Spieler kein weiteres mal geblitzt werden kann
    SetPVarInt(playerid, "BitzPause", 15);
    // Strafe für Spieler
    SetPVarInt(playerid, "BitzStrafe", (speed*12/6) - Blitzer[i][Geschwindigkeit]);
    PlayerPlaySound(playerid, 1132, 0.0, 0.0, 0.0);
    GivePlayerMoney(playerid, -GetPVarInt(playerid, "BitzStrafe"));
    // Text für Spieler
    SendClientMessage(playerid, 0xFF6347AA,"Du wurdest wegen zu hoher Geschwindigkeit geblitzt!");
    format(string,sizeof(string), "Du bist %d km/h gefahren und musst $%d Bußgeld bezahlen.", speed, GetPVarInt(playerid, "BitzStrafe"));
    SendClientMessage(playerid, 0xFF6347AA, string);
    }
    }
    }
    }
    }
    return 1;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // Funktionen
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    stock AddBlitzer(playerid,speed,radius) {
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    for(new i = 0; i < sizeof(Blitzer); i++) {
    if(Blitzer[i][Erstellt] == 0) {
    Blitzer[i][BlitzerX] = x + 1.0;
    Blitzer[i][BlitzerY] = y + 1.0;
    Blitzer[i][BlitzerZ] = z;
    Blitzer[i][Geschwindigkeit] = speed;
    Blitzer[i][Radius] = radius;
    Blitzer[i][Erstellt] = 1;
    Blitzer[i][ID] = CreateObject(1278, x + 1.0, y + 1.0, z, 0.0, 0.0, 10);
    return 1;
    }
    }
    return 0;
    }
    stock RemoveBlitzer(playerid) {
    for(new i = 0; i < sizeof(Blitzer); i++) {
    if(IsPlayerInRangeOfPoint(playerid, Blitzer[i][eRadius], Blitzer[i][BlitzerX], Blitzer[i][BlitzerY], Blitzer[i][BlitzerZ])) {
    if(Blitzer[i][Erstellt] == 1) {
    Blitzer[i][Erstellt] = 0;
    Blitzer[i][BlitzerX] = 0.0;
    Blitzer[i][BlitzerY] = 0.0;
    Blitzer[i][BlitzerZ] = 0.0;
    DestroyObject(Blitzer[i][ID]);
    return 1;
    }
    }
    }
    return 0;
    }
    stock RemoveAllBlitzer() {
    for(new i = 0; i < sizeof(Blitzer); i++) {
    if(Blitzer[i][Erstellt] == 1) {
    Blitzer[i][Erstellt] = 0;
    Blitzer[i][BlitzerX] = 0.0;
    Blitzer[i][BlitzerY] = 0.0;
    Blitzer[i][BlitzerZ] = 0.0;
    DestroyDynamicObject(Blitzer[i][ID]);
    }
    }
    return 0;
    }
    stock CountBlitzer() {
    new anzahl = 0;
    for(new i = 0; i < sizeof(Blitzer); i++) {
    if(Blitzer[i][Erstellt] == 1) anzahl++;
    }
    return anzahl;
    }
    stock GetPlayerSpeed(playerid,bool:kmh) {
    new Float:x,Float:y,Float:z,Float:rtn;
    if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z); else GetPlayerVelocity(playerid,x,y,z);
    rtn = floatsqroot(floatabs(floatpower(x + y + z,2)));
    return kmh?floatround(rtn * 100 * 1.61):floatround(rtn * 100);
    }


  • pawno => Include



    da müssen die rein, und dann da auch den Pawno starten

  • Sieht ganz nett aus, allerdings ist OnPlayerUpdate ungünstig um die Position abzufragen.
    Da es ja PRO Spieler etwa 30 mal pro Sekunde (entspricht einem Timer der sich alle 33,3 ms wiederholt) aufgerufen wird und dabei für jeden Spieler der Abstand zum Blitzer gemessen wird kann dass bei vielen Usern zu laggs führen.


    Ich würde eher einen Timer durchlaufen lassen, welcher sich in einem größeren Zeitintervall wiederholt (500 - 1000 ms).


    Nicht jeder, der sich für super hält, ist ein Superheld. :love:
    ------------------------------------------------------------------------------------------------

  • Hast Recht, steht ja auch oben in einen Timer. Wollte halt fürs Beispiel nicht unbedingt einen Timer erstellen, da es eig. nicht jeder weiß, wie es geht.
    Und wenn nicht, sollte er nicht mit Includes arbeiten sondern Grunflagen lernen.


    PS: Optimiere das Script grade noch von der Perfomance her ein bisschen .. hatte einige Sachen schlecht durchdacht.



    // Update: //
    Performance-Optimierung mit Hilfevon Ping durchgeführt!