Advertisement
Guest User

U_Blitzer

a guest
May 30th, 2013
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.34 KB | None | 0 0
  1. /*
  2.     Uncles Blitzer Include - V.1.1.0
  3.    
  4.     Diese Include wurde von UncleSub erstellt. - © 2013
  5.    
  6.     Credits müssen erhalten bleiben! Ansonsten darf diese Include
  7.     frei verwendet und auch bearbeitet werden! Weiterveröffentlichen nur mit
  8.     meiner Erlaubnis!
  9.    
  10.     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  11.    
  12.     Funktionen:
  13.  
  14.     native CreateBlitzer(Float:x, Float:y, Float:z, Float:rz, MaxSpeed);
  15.     native DestroyBlitzer(blitzerid);
  16.     native IsBlitzer(blitzerid);
  17.     native IsBlitzerArea(area); -> area = ID der Area, beim betreten von der Area in der man geblitzt wird
  18.     native IsPlayerInRangeOfBlitzer(playerid);
  19.     native GetBlitzerID(playerid); -> Die Blitzer ID des nächsten Blitzers. Returns -1 wenn keiner in der Nähe ist.
  20.    
  21.     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  22.    
  23.     Callbacks:
  24.     forward OnPlayerBlitzed(playerid, blitzerid, speed, maxspeed);
  25.    
  26.     //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  27.    
  28.     Andere Konfigarationen: Vor dem Includieren können durch folgende Defines Vorkonfigurationen getroffen werden.
  29.    
  30.     #define BLITZER_NO_SAVE -> Wenn aktiviert, wird die Speicher- und Ladefunktion der Blitzer ausgeschaltet.
  31.     #define BLITZER_KMH_TOLERANZ -> Dem Blitzer kann eine Toleranzgrenze mitgegeben werden, ab wann er blitzen soll.
  32.     #define BLITZER_USE_GETVEHICLESPEED -> Wenn aktiviert, muss im Script eine Funktion mit Namen: "GetVehicleSpeed(vehicleid)" vorhanden sein;
  33.         Mit diesem Define wird festgelegt, wie die km/h berechnet werden (Evtl Berechnung vom Tacho nehmen).
  34. */
  35.  
  36. #include <a_samp>
  37.  
  38. #if defined Uncles_Blitzer_included
  39.     #endinput
  40. #endif
  41. #define Uncles_Blitzer_included
  42.  
  43. #if !defined CreateDynamicRectangle
  44.     #error Du hast den Incognito Streamer nicht installiert!
  45. #endif
  46.  
  47. #if !defined _ALS_
  48.     forward public _ALS_();
  49.     _ALS_()<_ALS_:unhooked>{}
  50.     _ALS_()<_ALS_:hooked>{}
  51.     _ALS_()<>{}
  52. #endif
  53.  
  54. #define MAX_U_BLITZER 100
  55.  
  56. #if !defined BLITZER_KMH_TOLERANZ
  57.     #define BLITZER_KMH_TOLERANZ 2
  58. #endif
  59.  
  60. forward OnPlayerBlitzed(playerid, blitzerid, speed, maxspeed);
  61.  
  62. enum u_blitzerdata
  63. {
  64.     ubID,
  65.     Float:ubX,
  66.     Float:ubY,
  67.     Float:ubZ,
  68.     Float:ubAng,
  69.     ubMaxSpeed,
  70.     ubObject,
  71.     ubGebiet,
  72.     bool:ubErstellt
  73. }
  74. new uBlitzer[MAX_U_BLITZER][u_blitzerdata];
  75. #if !defined BLITZER_NO_SAVE
  76. new DB:BlitzerDB;
  77. #endif
  78.  
  79. //////////////////////////////////////////////////////////////////////\Functions\//////////////////////////////////////////////////////////////////////////////
  80.  
  81. stock CreateBlitzer(Float:x, Float:y, Float:z, Float:rz, MaxSpeed)
  82. {
  83.     for(new i; i < MAX_U_BLITZER; i++)
  84.     {
  85.         if(uBlitzer[i][ubErstellt] == false)
  86.         {
  87.             #if !defined BLITZER_NO_SAVE
  88.             new string[156];
  89.             format(string, sizeof(string), "INSERT INTO `Blitzer` (`bID`, `bX`, `bY`, `bZ`, `bRZ`, `bMaxSpeed`) VALUES ('%i', '%f', '%f', '%f', '%f', '%i')", i, x, y, z, rz, MaxSpeed);
  90.             db_free_result(db_query(BlitzerDB, string));
  91.             #endif
  92.             uBlitzer[i][ubObject] = CreateDynamicObject(18880, x, y, z-1.2, 0.0, 0.0, rz);
  93.             uBlitzer[i][ubGebiet] = CreateDynamicRectangle(x-10, y-10, x+10, y+10);
  94.             uBlitzer[i][ubID] = i;
  95.             uBlitzer[i][ubX] = x;
  96.             uBlitzer[i][ubY] = y;
  97.             uBlitzer[i][ubZ] = z;
  98.             uBlitzer[i][ubAng] = rz;
  99.             uBlitzer[i][ubMaxSpeed] = MaxSpeed;
  100.             uBlitzer[i][ubErstellt] = true;
  101.             return i;
  102.         }
  103.     }
  104.     return print(">>> [Uncles Blitzer] FEHLER: Beim erstellen vom Blitzer ist ein Fehler aufgetreten. <<<") & 0;
  105. }
  106.  
  107. stock DestroyBlitzer(blitzerid)
  108. {
  109.     if(uBlitzer[blitzerid][ubErstellt] == true)
  110.     {
  111.         #if !defined BLITZER_NO_SAVE
  112.         new string[128];
  113.         format(string, sizeof(string), "DELETE FROM `Blitzer` WHERE `bID`='%i'", uBlitzer[blitzerid][ubID]);
  114.         db_free_result(db_query(BlitzerDB, string));
  115.         #endif
  116.         DestroyDynamicObject(uBlitzer[blitzerid][ubObject]);
  117.         DestroyDynamicArea(uBlitzer[blitzerid][ubGebiet]);
  118.         uBlitzer[blitzerid][ubObject] = INVALID_OBJECT_ID;
  119.         uBlitzer[blitzerid][ubGebiet] = -1;
  120.         uBlitzer[blitzerid][ubID] = -1;
  121.         uBlitzer[blitzerid][ubX] = 0;
  122.         uBlitzer[blitzerid][ubY] = 0;
  123.         uBlitzer[blitzerid][ubAng] = 0;
  124.         uBlitzer[blitzerid][ubMaxSpeed] = 0;
  125.         uBlitzer[blitzerid][ubErstellt] = false;
  126.         return 1;
  127.     }
  128.     return 0;
  129. }
  130.  
  131. stock IsBlitzer(id)
  132. {
  133.     if(uBlitzer[id][ubID] != -1)
  134.     {
  135.         return 1;
  136.     }
  137.     return 0;
  138. }
  139. stock IsBlitzerArea(area)
  140. {
  141.     for(new i; i < MAX_U_BLITZER; i++)
  142.     {
  143.         if(IsBlitzer(i))
  144.         {
  145.             if(uBlitzer[i][ubGebiet] == area)
  146.             {
  147.                 return i;
  148.             }
  149.         }
  150.     }
  151.     return -1;
  152. }
  153. stock IsPlayerInRangeOfBlitzer(playerid)
  154. {
  155.     for(new i; i < MAX_U_BLITZER; i++)
  156.     {
  157.         if(IsBlitzer(i))
  158.         {
  159.             if(IsPlayerInDynamicArea(playerid, uBlitzer[i][ubGebiet]))
  160.             {
  161.                 return 1;
  162.             }
  163.         }
  164.     }
  165.     return 0;
  166. }
  167.  
  168. stock GetBlitzerID(playerid)
  169. {
  170.     for(new i; i < MAX_U_BLITZER; i++)
  171.     {
  172.         if(IsBlitzer(i))
  173.         {
  174.             if(IsPlayerInDynamicArea(playerid, uBlitzer[i][ubGebiet]))
  175.             {
  176.                 return i;
  177.             }
  178.         }
  179.     }
  180.     return -1;
  181. }
  182.  
  183. stock LoadBlitzer()
  184. {
  185.     new rows, buffer[24], DBResult:result, slot;
  186.     result = db_query(BlitzerDB, "SELECT * FROM `Blitzer`");
  187.     rows = db_num_rows(result);
  188.     if(rows == 0) return print("* 0 Blitzer geladen *");
  189.     for(new i; i < rows; i++)
  190.     {
  191.         db_get_field(result, 0, buffer, sizeof(buffer)), slot = strval(buffer), uBlitzer[slot][ubID] = slot;
  192.         db_get_field(result, 1, buffer, sizeof(buffer)), uBlitzer[slot][ubX] = floatstr(buffer);
  193.         db_get_field(result, 2, buffer, sizeof(buffer)), uBlitzer[slot][ubY] = floatstr(buffer);
  194.         db_get_field(result, 3, buffer, sizeof(buffer)), uBlitzer[slot][ubZ] = floatstr(buffer);
  195.         db_get_field(result, 4, buffer, sizeof(buffer)), uBlitzer[slot][ubAng] = floatstr(buffer);
  196.         db_get_field(result, 5, buffer, sizeof(buffer)), uBlitzer[slot][ubMaxSpeed] = strval(buffer);
  197.         uBlitzer[slot][ubObject] = CreateDynamicObject(18880, uBlitzer[slot][ubX], uBlitzer[slot][ubY], uBlitzer[slot][ubZ]-1.2, 0.0, 0.0, uBlitzer[slot][ubAng]);
  198.         uBlitzer[slot][ubGebiet] = CreateDynamicRectangle(uBlitzer[slot][ubX]-10, uBlitzer[slot][ubY]-10, uBlitzer[slot][ubX]+10, uBlitzer[slot][ubY]+10);
  199.         uBlitzer[slot][ubErstellt] = true;
  200.         db_next_row(result);
  201.     }
  202.     db_free_result(result);
  203.     printf("* %i Blitzer geladen *", rows);
  204.     return 1;
  205. }
  206.  
  207. //////////////////////////////////////////////////////////////////////\Callback Hooking\//////////////////////////////////////////////////////////////////////////////
  208.  
  209. public OnPlayerEnterDynamicArea(playerid, areaid)
  210. {
  211.     new isbarea = IsBlitzerArea(areaid);
  212.     if(isbarea != -1)
  213.     {
  214.         #if !defined BLITZER_USE_GETVEHICLESPEED
  215.             new Float:speed_x, Float:speed_y, Float:speed_z;
  216.             GetVehicleVelocity(GetPlayerVehicleID(playerid),speed_x,speed_y,speed_z);
  217.             new speed = floatround((floatsqroot(((speed_x*speed_x)+(speed_y*speed_y))+(speed_z*speed_z))*140), floatround_round);
  218.         #else
  219.             new speed = GetVehicleSpeed(GetPlayerVehicleID(playerid));
  220.         #endif
  221.         if(speed > uBlitzer[isbarea][ubMaxSpeed]+BLITZER_KMH_TOLERANZ)
  222.         {
  223.             if(IsPlayerInAnyVehicle(playerid) && GetPlayerVehicleSeat(playerid) == 0)
  224.             {
  225.                 CallLocalFunction("OnPlayerBlitzed", "iiii", playerid, uBlitzer[isbarea][ubID], speed, uBlitzer[isbarea][ubMaxSpeed]+BLITZER_KMH_TOLERANZ);
  226.             }
  227.         }
  228.     }
  229.     state _ALS_:hooked;
  230.     return Hooked_OnPlayerEnterDynamicArea(playerid, areaid);
  231. }
  232.  
  233. forward Hooked_OnPlayerEnterDynamicArea(playerid, areaid);
  234.  
  235. #if defined _ALS_OnPlayerEnterDynamicArea
  236.     #undef OnPlayerEnterDynamicArea
  237. #else
  238.     #define _ALS_OnPlayerEnterDynamicArea
  239. #endif
  240.  
  241.  
  242. public Hooked_OnPlayerEnterDynamicArea(playerid, areaid) <_ALS_:unhooked> return 1;
  243. public Hooked_OnPlayerEnterDynamicArea(playerid, areaid) <> return 1;
  244.  
  245. #define OnPlayerEnterDynamicArea(%0,%1) Hooked_OnPlayerEnterDynamicArea(%0,%1)<_ALS_:hooked>
  246.  
  247. #if !defined BLITZER_NO_SAVE
  248. #if !defined BLITZER_USE_ONLY_IN_FS
  249. public OnGameModeInit()
  250. {
  251.     BlitzerDB = db_open("Blitzer.db");
  252.     db_free_result(db_query(BlitzerDB, "CREATE TABLE IF NOT EXISTS `Blitzer` (`bID` INT(11) NOT NULL, `bX` FLOAT NOT NULL, `bY` FLOAT NOT NULL, `bZ` FLOAT NOT NULL, `bRZ` FLOAT NOT NULL, `bMaxSpeed` INT(11) NOT NULL)"));
  253.     LoadBlitzer();
  254.     state _ALS_:hooked;
  255.     return Hooked_OnGameModeInit();
  256. }
  257.  
  258. forward Hooked_OnGameModeInit();
  259.  
  260. #if defined _ALS_OnGameModeInit
  261.     #undef OnGameModeInit
  262. #else
  263.     #define _ALS_OnGameModeInit
  264. #endif
  265.  
  266. public Hooked_OnGameModeInit() <_ALS_:unhooked> return 1;
  267. public Hooked_OnGameModeInit() <> return 1;
  268. #define OnGameModeInit(%0) Hooked_OnGameModeInit(%0)<_ALS_:hooked>
  269.  
  270. public OnGameModeExit()
  271. {
  272.     db_close(BlitzerDB);
  273.     state _ALS_:hooked;
  274.     return Hooked_OnGameModeExit();
  275. }
  276.  
  277. forward Hooked_OnGameModeExit();
  278.  
  279. #if defined _ALS_OnGameModeExit
  280.     #undef OnGameModeExit
  281. #else
  282.     #define _ALS_OnGameModeExit
  283. #endif
  284.  
  285. public Hooked_OnGameModeExit() <_ALS_:unhooked> return 1;
  286. public Hooked_OnGameModeExit() <> return 1;
  287. #define OnGameModeExit(%0) Hooked_OnGameModeExit(%0)<_ALS_:hooked>
  288. #else
  289. public OnFilterScriptInit()
  290. {
  291.     BlitzerDB = db_open("Blitzer.db");
  292.     db_free_result(db_query(BlitzerDB, "CREATE TABLE IF NOT EXISTS `Blitzer` (`bID` INT(11) NOT NULL, `bX` FLOAT NOT NULL, `bY` FLOAT NOT NULL, `bZ` FLOAT NOT NULL, `bRZ` FLOAT NOT NULL, `bMaxSpeed` INT(11) NOT NULL)"));
  293.     LoadBlitzer();
  294.     state _ALS_:hooked;
  295.     return Hooked_OnFilterScriptInit();
  296. }
  297.  
  298. forward Hooked_OnFilterScriptInit();
  299.  
  300. #if defined _ALS_OnFilterScriptInit
  301.     #undef OnFilterScriptInit
  302. #else
  303.     #define _ALS_OnFilterScriptInit
  304. #endif
  305.  
  306. public Hooked_OnFilterScriptInit() <_ALS_:unhooked> return 1;
  307. public Hooked_OnFilterScriptInit() <> return 1;
  308. #define OnFilterScriptInit(%0) Hooked_OnFilterScriptInit(%0)<_ALS_:hooked>
  309.  
  310. public OnFilterScriptExit()
  311. {
  312.     db_close(BlitzerDB);
  313.     state _ALS_:hooked;
  314.     return Hooked_OnFilterScriptExit();
  315. }
  316.  
  317. forward Hooked_OnFilterScriptExit();
  318.  
  319. #if defined _ALS_OnFilterScriptExit
  320.     #undef OnFilterScriptExit
  321. #else
  322.     #define _ALS_OnFilterScriptExit
  323. #endif
  324.  
  325. public Hooked_OnFilterScriptExit() <_ALS_:unhooked> return 1;
  326. public Hooked_OnFilterScriptExit() <> return 1;
  327.  
  328. #define OnFilterScriptExit(%0) Hooked_OnFilterScriptExit(%0)<_ALS_:hooked>
  329. #endif
  330. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement