Advertisement
ErikSon_

Anti-Cheat v3.3 by ErikSon

Jul 11th, 2014
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 50.53 KB | None | 0 0
  1. /*  |AntiCheat Version 1.0|
  2.     Anti Jetpack        [X]
  3.     Anti Weaponhack     [X]
  4.     Anti Healthhack     [X]
  5.     Anti Armourhack     [X]
  6.     Anti Moneyhack      [X]
  7.     Pingkick            [X]
  8.     Anti Badword        [X]
  9.     Anti Speedhack      [X]
  10.     Anti C-Bug          [X]
  11.     Anti Spawnkill      [X]
  12.     Anti Fakekill       [X]
  13.     Anti Driveby        [X]
  14.     Anti Spam           [X]
  15.     Anti IP-Spam        [X]
  16.     Anti TuningHack     [X]
  17.     Anti Flyhack        [X]
  18.     ||16 Anti- Funktionen||
  19.    
  20.     |AntiCheat Version 2.0|
  21.     Anti Airbrake       [X]
  22.     Anti Joypad         [X]
  23.     Anti Rapid-Fire     [X]
  24.     Anti Vehicle Tele   [X]
  25.     Anti Telehack       [X]
  26.     Anti Carsurf        [X]
  27.     ||6 Anti- Funktionen ||
  28.    
  29.     |AntiCheat Version 3.0|
  30.     +Anti Weaponhack verbessert+
  31.     Anti AFK-Ghost      [X]
  32.     Anti Slidebug       [X]
  33.     Anti No Reload      [X]
  34.     Anti Unlimmited Ammo[X]
  35.     Anti enter locked Cars[X]
  36.     Anti Playerspeedhack[X]
  37.     Anti Skinchanger    [X]
  38.     Anti Distancehack   [X]
  39.     ||8 Anti- Funktionen ||
  40.    
  41.     |AntiCheat Version 3.1|
  42.     +      Bugfix         +
  43.     +     /Aimbottest     +
  44.     - Skinchanger entfernt-
  45.    
  46.     |AntiCheat Version 3.2|
  47.     +      /Godtest       +
  48.     +   Airbrake gefixxt  +
  49.     Anti Carspawn       [X]
  50.     Anti Spec-/Camhack  [X]
  51.     Anti Mapstealer     [X] // Bei Objekten mit "CreateObject" bzw "CreatePlayerObject"
  52.     Anti Carjackhack    [X]
  53.     Anti Fast-Carexit   [X]
  54.  
  55.     ||5 Anti- Funktionen ||
  56.    
  57.     |AntiCheat Version 3.3|
  58.     +  Ingame einstellbar +
  59.     +  Anti Badword fixed +
  60.    
  61.     ||0 Anti- Funktionen ||
  62.    
  63.    
  64.     |       Gesamt        |
  65.     | 33 Anti- Funktionen |
  66. */
  67.  
  68.  
  69.  
  70. //Einstellen!
  71. new badword[][] = {
  72.     "Opfer",
  73.     "Lauch"
  74. };
  75.  
  76. //////////////
  77.  
  78. #include <a_samp>
  79. #include <ocmd>
  80. #include <dini>
  81.  
  82. //Farben
  83. #define Schwarz         0x000000FF
  84. #define Rot             0xE10000FF
  85. #define Gelb            0xFFE600FF
  86. #define HBlau           0x00FFFFFF
  87. #define DBlau           0x0000FFFF
  88. #define Blau            0x2E9AFEFF
  89. #define HGruen          0x00FF00FF
  90. #define Orange          0xFFAB00FF
  91. #define Weiss           0xFFFFFFFF
  92. #define Grau            0xDCDCDCFF
  93. #define Gold            0xD4A017AA
  94. #define Lila            0x7800FFFF
  95. #define Pink            0xFF00CDFF
  96. #define Gruen           0x009F32FF
  97.  
  98. #define dIntSet         dini_IntSet
  99. #define dInt            dini_Int
  100.  
  101. #define AC_ANTI_FUNCS   29
  102. #define AC_FILE         "/AntiCheatSettings.ini"
  103. #define MAX_PING            700     // Maximaler Ping
  104. #define MAX_VEHSPEED        290     // Vehicle-Speed ( am besten so lassen! )
  105. #define MAX_PLAYERSPEED     90      // Runningspeed ( am besten so lassen! )
  106. #define SPAMLIMIT           2       // 2 Sekunden ( am besten so lassen! )
  107. #define MAX_CBUG            1       // Maximale C-Bugs ( am besten so lassen! )
  108. #define Tuninghack                  //Wenn definiert, dann wird Spieler wegen Tuning im Interior 0 gekickt!
  109.  
  110. enum{
  111.     AC_AntiMenu = 8000,
  112.     AC_Config,
  113.     AC_Config2,
  114.     AC_Config3,
  115. };
  116.  
  117.  
  118. //[0] = 1 = on / 2 = off
  119. //[1] = 1 = kick / 2 = ban
  120. new AC_Anti[AC_ANTI_FUNCS][3];
  121. new AC_AntiNames[AC_ANTI_FUNCS][32] = {
  122.     "Jetpackhack"// 0
  123.     "Waffenhack",   // 1
  124.     "Healthhack",   // 2
  125.     "Armourhack",   // 3
  126.     "Moneyhack",    // 4
  127.     "Ping",         // 5
  128.     "Speedhack (Vehicle)",// 6
  129.     "C-Bug",        // 7
  130.     "Spawnkill",    // 8
  131.     "Drive-By",     // 9
  132.     "Tuninghack",   // 10
  133.     "Flyhack",      // 11
  134.     "Airbrake",     // 12
  135.     "Joypad",       // 13
  136.     "Rapidfire",    // 14
  137.     "Vehicle-Teleport",//15
  138.     "Teleporthack", // 16
  139.     "Carsurf",      // 17
  140.     "AFK-Ghost",    // 18
  141.     "Slidebug",     // 19
  142.     "No Reload / Unlimited Ammo",// 20
  143.     "Player-Speedhack",//21
  144.     "Carspawn",     // 22
  145.     "Spec-/Camhack",//23
  146.     "Carjackhack"// 24
  147.     "Fast-Carexit", // 25
  148.     "IP/URL",       // 26
  149.     "Spam",         // 27
  150.     "Badword"       // 28
  151. };
  152.  
  153. new fmex[128];
  154. #define SCMToAllF(%0,%1,%2)  format(fmex,128,%1,%2) && SendClientMessageToAll(%0, fmex)
  155. #define SCMF(%0,%1,%2)  format(fmex,128,%2) && SendClientMessage(%0,%1,fmex)
  156. #define PRESSED(%0) (((newkeys & (%0)) == (%0)) && ((oldkeys & (%0)) != (%0)))
  157.  
  158.  
  159. forward AntiCheatTimer();
  160. forward SpamReset(playerid);
  161. forward pos(playerid);
  162. forward Desktop_Function(playerid);
  163. forward Kicke(playerid);
  164. forward CheckWeapon();
  165. forward CheckAim(playerid);
  166. new ACNewMoney[MAX_PLAYERS],
  167.     Float:ACNewArmour[MAX_PLAYERS],
  168.     Float:ACNewHealth[MAX_PLAYERS],
  169.     SpamCount[MAX_PLAYERS],
  170.     CBugCount[MAX_PLAYERS],
  171.     Waffe[MAX_PLAYERS][47],
  172.     nwh[MAX_PLAYERS][47],
  173.     Shot[MAX_PLAYERS],
  174.     ShotTime[MAX_PLAYERS],
  175.     Float:OldPos[MAX_PLAYERS][3],
  176.     Float:NewPos[MAX_PLAYERS][3],
  177.     switched[MAX_PLAYERS],
  178.     posbyserver[MAX_PLAYERS],
  179.     Float:vPos[MAX_VEHICLES][4],
  180.     Desktop_Check[MAX_PLAYERS],
  181.     Desktop_Status[MAX_PLAYERS],
  182.     Desktop_Timer[MAX_PLAYERS],
  183.     Desktop_Timer_Started[MAX_PLAYERS],
  184.     Desk[MAX_PLAYERS],
  185.     EnterLockedV[MAX_PLAYERS],
  186.     freezed[MAX_PLAYERS],
  187.     NoReloading[MAX_PLAYERS],
  188.     CurrentWeapon[MAX_PLAYERS],
  189.     CurrentAmmo[MAX_PLAYERS],
  190.     gmd[MAX_PLAYERS],
  191.     starte[MAX_PLAYERS],
  192.     stopAC[MAX_PLAYERS],
  193.     afk_sicher[MAX_PLAYERS],
  194.     Float:LastX[MAX_PLAYERS],
  195.     Float:LastY[MAX_PLAYERS],
  196.     Float:LastZ[MAX_PLAYERS],
  197.     AC_Fall[MAX_PLAYERS],
  198.     AC_vspawn[MAX_VEHICLES],
  199.     AC_Spectating[MAX_PLAYERS],
  200.     AC_PlayerVeh[MAX_PLAYERS],
  201.     AC_PutedVehicle[MAX_PLAYERS],
  202.     AC_Timer[3],
  203.     AC_PEdit[MAX_PLAYERS];
  204.  
  205. forward AC_OnPlayerConnect(playerid);
  206. forward AC_OnGameModeInit();
  207. forward AC_OnPlayerSpawn(playerid);
  208. forward AC_OnPlayerDeath(playerid,killerid,reason);
  209. forward AC_OnPlayerText(playerid,text[]);
  210. forward AC_OnPlayerEnterVehicle(playerid,vehicleid,ispassenger);
  211. forward AC_OnVehicleMod(playerid,vehicleid,componentid);
  212. forward AC_OnVehicleRespray(playerid,vehicleid,color1,color2);
  213. forward AC_OnVehiclePaintjob(playerid,vehicleid,paintjobid);
  214. forward AC_OnPlayerKeyStateChange(playerid,newkeys,oldkeys);
  215. forward AC_OnPlayerUpdate(playerid);
  216. forward AC_OnPlayerDisconnect(playerid,reason);
  217. forward AC_OnPlayerExitVehicle(playerid,vehicleid);
  218. forward AC_OnPlayerStateChange(playerid,newstate,oldstate);
  219. forward GivePlayerMoneyEx(playerid,money);
  220. forward SetPlayerMoneyEx(playerid,money);
  221. forward GivePlayerHealthEx(playerid,Float:health);
  222. forward SetPlayerHealthEx(playerid,Float:health);
  223. forward GivePlayerArmourEx(playerid,Float:armour);
  224. forward SetPlayerArmourEx(playerid,Float:armour);
  225. forward GivePlayerWeaponEx(playerid,Gun,Muni);
  226. forward SetPlayerPosEx(playerid,Float:x,Float:y,Float:z);
  227. forward TogglePlayerControllableEx(playerid,toggle);
  228. forward TogglePlayerSpectatingEx(playerid,toggle);
  229. forward AC_FallingChecker();
  230. forward AC_OnVehicleStreamIn(vehicleid,forplayerid);
  231. forward AC_CreateVehicle_Ex(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay);
  232. forward AC_AddStaticVehicle_Ex(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2);
  233. forward AC_AddStaticVehicleEx_Ex(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2,respawn_delay);
  234. forward CreateObjectEx(modelid,Float:x,Float:y,Float:z,Float:rX,Float:rY,Float:rZ,Float:draw);
  235. forward CreatePlayerObjectEx(playerid,modelid,Float:x,Float:y,Float:z,Float:rX,Float:rY,Float:rZ,Float:draw);
  236. forward SetVehicleZAngleEx(vehicleid,Float:zangle);
  237. forward PutPlayerInVehicleEx(playerid,vehicleid,seatid);
  238. forward AC_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
  239. forward AC_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  240.  
  241.  
  242.  
  243. public OnGameModeInit(){
  244.     CallLocalFunction("AC_OnGameModeInit","");
  245.     print("\n--------------------------------------");
  246.     print(" AntiCheat by ErikSon");
  247.     print("--------------------------------------\n");
  248.     AC_LoadSettings();
  249.     SetTimer("AntiCheatTimer",100,true);
  250.     if(AC_Anti[1][0] == 1)AC_Timer[0] = SetTimer("CheckWeapon",888*2,true);
  251.     if(AC_Anti[11][0] == 1)AC_Timer[1] = SetTimer("AC_CheckFlyhack",888*2,true);
  252.     if(AC_Anti[21][0] == 1)AC_Timer[2] = SetTimer("AC_FallingChecker",500,true);
  253.     return EnableStuntBonusForAll(false);
  254. }
  255.  
  256. public AC_FallingChecker(){
  257.     new Float:x,Float:y,Float:z,Float:d;
  258.     for(new i =0; i<MAX_PLAYERS; i++){
  259.         if(IsPlayerConnected(i)){
  260.             GetPlayerPos(i,x,y,z);
  261.             d = floatsqroot((x-LastX[i] * x-LastX[i]) + (y-LastY[i] * y-LastY[i]));
  262.             if(d < 10 && (LastZ[i] - z) > 5)AC_Fall[i] = 1;
  263.             else AC_Fall[i] = 0;
  264.             LastX[i] = x,LastY[i] = y,LastZ[i] = z;
  265.         }
  266.     }
  267.     return 1;
  268. }
  269. public OnVehicleStreamIn(vehicleid,forplayerid){
  270.     return CallLocalFunction("AC_OnVehicleStreamIn","ii",vehicleid,forplayerid);
  271. }
  272. public OnPlayerConnect(playerid)
  273. {
  274.     Desk[playerid] = 0, afk_sicher[playerid] = 0;
  275.     switched[playerid] = 0,EnterLockedV[playerid] = 0;
  276.     Shot[playerid] = 0, ShotTime[playerid] = 0;
  277.     SetPlayerHealthEx(playerid,100);
  278.     Desktop_Check[playerid] = 0,Desktop_Timer_Started[playerid] = 0,Desktop_Status[playerid] = 0,gmd[playerid] = 0,starte[playerid] = 0,
  279.     AC_PlayerVeh[playerid] = -1;
  280.     return CallLocalFunction("AC_OnPlayerConnect","i",playerid);
  281. }
  282.  
  283. public OnPlayerSpawn(playerid){
  284.     TogglePlayerControllableEx(playerid,1),
  285.     Waffe[playerid][0] = 1, Waffe[playerid][1] = 1;
  286.     if(!starte[playerid])starte[playerid] = 1;
  287.     return CallLocalFunction("AC_OnPlayerSpawn","i",playerid);
  288. }
  289.  
  290. public OnPlayerDeath(playerid, killerid, reason){
  291.     if(AC_Anti[9][0] == 1){
  292.         if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER)
  293.         {
  294.             new vehicleid,vehiclemodel;
  295.             vehicleid = GetPlayerVehicleID(killerid);
  296.             vehiclemodel = GetVehicleModel(vehicleid);
  297.             if(IsPlayerInAnyVehicle(playerid))return 1;
  298.             else if(vehiclemodel == 425)return 1; // Hunter
  299.             else if(vehiclemodel == 432)return 1; // Rhino
  300.             else if(vehiclemodel == 447)return 1; // Seasparrow
  301.             else if(vehiclemodel == 476)return 1; // Rustler
  302.             else if(vehiclemodel == 520)return 1; // Hydra
  303.             switch(AC_Anti[9][1]){
  304.                 case 1:return Kicks(killerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Driveby!",Namee(killerid));
  305.                 case 2:return Bans(killerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Driveby!",Namee(killerid));
  306.             }
  307.             return 1;
  308.         }
  309.     }
  310.     return CallLocalFunction("AC_OnPlayerDeath","iii",playerid,killerid,reason);
  311. }
  312.  
  313. public OnPlayerText(playerid, text[]){
  314.     if(AC_Anti[26][0] == 1){
  315.         if(anty(text)){
  316.             switch(AC_Anti[26][1]){
  317.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: IP / Adresse.",Namee(playerid));
  318.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: IP / Adresse.",Namee(playerid));
  319.             }
  320.         }
  321.     }
  322.     if(AC_Anti[27][0] == 1){
  323.         SpamCount[playerid] ++;
  324.         SetTimerEx("SpamReset",888*SPAMLIMIT,false,"i",playerid);
  325.         if(SpamCount[playerid] > SPAMLIMIT){
  326.             SpamCount[playerid] = 0;
  327.             switch(AC_Anti[27][1]){
  328.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde von Server gekickt. Grund: Spam!",Namee(playerid));
  329.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde von Server gebannt. Grund: Spam!",Namee(playerid));
  330.             }
  331.         }
  332.     }
  333.     if(AC_Anti[28][0] == 1){
  334.         new i = 0;
  335.         for(;i<sizeof(badword);i++){
  336.             if(strfind(text,badword[i],true) != -1){
  337.                 switch(AC_Anti[28][1]){
  338.                     case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Badword!",Namee(playerid));
  339.                     case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Badword!",Namee(playerid));
  340.                 }
  341.             }
  342.         }
  343.     }
  344.     return CallLocalFunction("AC_OnPlayerText","is",playerid,text);
  345. }
  346.  
  347. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger){
  348.     if(IsAPlane(vehicleid) || IsAHelicopter(vehicleid))GivePlayerWeaponEx(playerid,46,1);
  349.     if(AC_Anti[24][0] == 1 || AC_Anti[25][0] == 1)AC_PlayerVeh[playerid] = vehicleid; stopAC[playerid] = 30;
  350.     if(AC_Anti[24][0] == 1){
  351.         new Engine, Lights, Alarm,Doors, Bonnet,Boot,Objective;
  352.         GetVehicleParamsEx(vehicleid, Engine, Lights, Alarm, Doors, Bonnet, Boot, Objective);
  353.         if(!IsABike(vehicleid) && Doors == 1)return EnterLockedV[playerid] = vehicleid;
  354.     }
  355.     if(AC_Anti[1][0] == 1)SetPlayerArmedWeapon(playerid,0);
  356.     if(AC_Anti[22][0] == 1)if(AC_vspawn[vehicleid] != 1)DestroyVehicle(vehicleid),AC_vspawn[vehicleid] = 0;
  357.     return CallLocalFunction("AC_OnPlayerEnterVehicle","iii",playerid,vehicleid,ispassenger);
  358. }
  359.  
  360. public OnVehicleMod(playerid, vehicleid, componentid){
  361.     if(AC_Anti[10][0] == 1){
  362.         if(GetPlayerInterior(playerid) == 0){
  363.             switch(AC_Anti[10][1]){
  364.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Tuning-Hack!",Namee(playerid));
  365.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Tuning-Hack!",Namee(playerid));
  366.             }
  367.         }
  368.     }
  369.     return CallLocalFunction("AC_OnVehicleMod","iii",playerid,vehicleid,componentid);
  370. }
  371.  
  372. public OnVehiclePaintjob(playerid, vehicleid, paintjobid){
  373.     if(AC_Anti[10][0] == 1){
  374.         if(GetPlayerInterior(playerid) == 0){
  375.             switch(AC_Anti[10][1]){
  376.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Tuning-Hack!",Namee(playerid));
  377.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Tuning-Hack!",Namee(playerid));
  378.             }
  379.         }
  380.     }
  381.     return CallLocalFunction("AC_OnVehiclePaintjob","iii",playerid,vehicleid,paintjobid);
  382. }
  383.  
  384. public OnVehicleRespray(playerid, vehicleid, color1, color2){
  385.     if(AC_Anti[10][0] == 1){
  386.         if(GetPlayerInterior(playerid) == 0){
  387.             switch(AC_Anti[10][1]){
  388.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Tuning-Hack!",Namee(playerid));
  389.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Tuning-Hack!",Namee(playerid));
  390.             }
  391.         }
  392.     }
  393.     return CallLocalFunction("AC_OnVehicleRespray","iiii",playerid,vehicleid,color1,color2);
  394. }
  395.  
  396. public OnPlayerExitVehicle(playerid,vehicleid){
  397.     if(AC_Anti[24][0] == 1 || AC_Anti[25][0] == 1)AC_PlayerVeh[playerid] = -1,AC_PutedVehicle[playerid] = 0;
  398.     if(AC_Anti[15][0] == 1){
  399.         new Float:x,Float:y,Float:z; GetVehiclePos(vehicleid,x,y,z);
  400.         vPos[vehicleid][0] = x,vPos[vehicleid][1] = y,vPos[vehicleid][2] = z;
  401.     }
  402.     return CallLocalFunction("AC_OnPlayerExitVehicle","ii",playerid,vehicleid);
  403. }
  404.  
  405. public OnPlayerDisconnect(playerid,reason){
  406.     if(IsPlayerInAnyVehicle(playerid) && AC_Anti[15][0] == 1){
  407.         new Float:x,Float:y,Float:z,vehicleid = GetPlayerVehicleID(playerid);
  408.         GetVehiclePos(vehicleid,x,y,z);
  409.         vPos[vehicleid][0] = x,vPos[vehicleid][1] = y,vPos[vehicleid][2] = z;
  410.     }
  411.     if(Desktop_Timer_Started[playerid] == 1) { KillTimer(Desktop_Timer[playerid]); }
  412.     return CallLocalFunction("AC_OnPlayerDisconnect","ii",playerid,reason);
  413. }
  414.  
  415. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){
  416.     if(AC_Anti[7][0] == 1){
  417.         if(((oldkeys & KEY_FIRE) || (oldkeys==KEY_FIRE)) && ((newkeys & KEY_CROUCH) || (newkeys==KEY_CROUCH)) && (!IsPlayerInAnyVehicle(playerid)))
  418.         {
  419.             CBugCount[playerid] ++;
  420.             if(CBugCount[playerid] >= MAX_CBUG){
  421.                 switch(AC_Anti[7][1]){
  422.                     case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: C-Bug!",Namee(playerid));
  423.                     case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: C-Bug!",Namee(playerid));
  424.                 }
  425.             }
  426.         }
  427.     }
  428.     if(AC_Anti[19][0] == 1){
  429.         new tick = GetTickCount(); new FIRE_WEAPON = GetPlayerWeapon(playerid) > 21;
  430.         if(oldkeys & KEY_SPRINT && FIRE_WEAPON)
  431.         {
  432.             new keys, ud, lr; GetPlayerKeys(playerid, keys, ud, lr);
  433.             if(ud != 0 || lr != 0)SetPVarInt(playerid, "SlideTime", tick + 500);
  434.         }
  435.         if( (newkeys & KEY_FIRE || newkeys & 128) && FIRE_WEAPON )if(tick < GetPVarInt(playerid, "SlideTime"))return SetPlayerArmedWeapon(playerid, 0),SetPVarInt(playerid, "SlideTime", -1);
  436.     }
  437.     return CallLocalFunction("AC_OnPlayerKeyStateChange","iii",playerid,newkeys,oldkeys);
  438. }
  439.  
  440. public OnPlayerStateChange(playerid, newstate, oldstate){
  441.     if(oldstate == PLAYER_STATE_ONFOOT && (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER))
  442.     {
  443.         if(AC_Anti[24][0] == 1 || AC_Anti[25][0] == 1){
  444.             if(AC_PlayerVeh[playerid] != GetPlayerVehicleID(playerid) && !AC_PutedVehicle[playerid]){
  445.                 switch(AC_Anti[24][1]){
  446.                     case 1:Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Carjackhack!",Namee(playerid));
  447.                     case 2:Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Carjackhack!",Namee(playerid));
  448.                 }
  449.             }
  450.             return AC_PutedVehicle[playerid] = 0;
  451.         }
  452.         if(AC_Anti[9][0] == 1)SetPlayerArmedWeapon(playerid,0);
  453.         if(AC_Anti[24][0] == 1){
  454.             if(EnterLockedV[playerid] == GetPlayerVehicleID(playerid)){
  455.                 switch(AC_Anti[24][1]){
  456.                     case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Enter locked Vehicle!",Namee(playerid));
  457.                     case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Enter locked Vehicle!",Namee(playerid));
  458.                 }
  459.             }
  460.         }
  461.     }
  462.     return CallLocalFunction("AC_OnPlayerStateChange","iii",playerid,newstate,oldstate);
  463. }
  464.  
  465. stock Float:GetDistanceBetweenPoints(Float:rx1,Float:ry1,Float:rz1,Float:rx2,Float:ry2,Float:rz2){
  466.     return floatadd(floatadd(floatsqroot(floatpower(floatsub(rx1,rx2),2)),floatsqroot(floatpower(floatsub(ry1,ry2),2))),floatsqroot(floatpower(floatsub(rz1,rz2),2)));
  467. }
  468.  
  469. stock Float:Distance(Float:X, Float:Y, Float:Z, Float:PointX, Float:PointY, Float:PointZ) return floatsqroot(floatadd(floatadd(floatpower(floatsub(X, PointX), 2.0), floatpower(floatsub(Y, PointY), 2.0)), floatpower(floatsub(Z, PointZ), 2.0)));
  470.  
  471. public OnPlayerUpdate(playerid){
  472.     if(Desk[playerid] >= 1)Desk[playerid] = 0;
  473.     if(Desktop_Timer_Started[playerid] == 0)
  474.     {
  475.         Desktop_Timer[playerid] = SetTimerEx("Desktop_Function",888,1,"d",playerid);
  476.         Desktop_Timer_Started[playerid] = 1;
  477.     }
  478.     Desktop_Check[playerid] += 1;
  479.     new keys, ud, lr;
  480.     GetPlayerKeys(playerid, keys, ud, lr);
  481.     if(AC_Anti[13][0] == 1){
  482.         if((ud != 128 && ud != 0 && ud != -128) || (lr != 128 && lr != 0 && lr != -128)){
  483.             switch(AC_Anti[13][1]){
  484.                 case 1:Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Joypad!",Namee(playerid))
  485.                 case 2:Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Joypad!",Namee(playerid));  
  486.             }
  487.         }
  488.     }
  489.     return CallLocalFunction("AC_OnPlayerUpdate","i",playerid);
  490. }
  491.  
  492. public SpamReset(playerid)return SpamCount[playerid] = 0,CBugCount[playerid] = 0;
  493.  
  494.  
  495. public AntiCheatTimer(){
  496.     new i = 0,Float:health,Float:armour,surf,Float:x,Float:y,Float:z;
  497.     for(; i<MAX_PLAYERS; i++)
  498.     {
  499.         if(!IsPlayerConnected(i))continue;
  500.         if(Desk[i] >= 1)continue;
  501.         if(starte[i] <= 0)continue;
  502.         if(IsPlayerNPC(i))continue;
  503.         if(stopAC[i] > 0)return stopAC[i] --;
  504.         GetPlayerHealth(i,health);
  505.         GetPlayerArmour(i,armour);
  506.         GetPlayerPos(i,x,y,z);
  507.         new SName[MAX_PLAYER_NAME]; GetPlayerName(i,SName,MAX_PLAYER_NAME);
  508.         if(AC_Anti[0][0] == 1 && GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK){
  509.             switch(AC_Anti[0][1]){
  510.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Jetpack!",SName);
  511.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Jetpack!",SName);
  512.             }
  513.         }
  514.         else if(AC_Anti[5][0] == 1 && GetPlayerPing(i) > AC_Anti[5][2]){
  515.             switch(AC_Anti[5][1]){
  516.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Zu hoher Ping! ( %i / %i )",SName,GetPlayerPing(i),AC_Anti[5][2]);
  517.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Zu hoher Ping! ( %i / %i )",SName,GetPlayerPing(i),AC_Anti[5][2]);
  518.             }
  519.         }
  520.         else if(AC_Anti[4][0] == 1 && GetPlayerMoney(i) > ACNewMoney[i]){
  521.             switch(AC_Anti[4][1]){
  522.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Moneyhack!",SName);
  523.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Moneyhack!",SName);
  524.             }
  525.         }
  526.         else if(AC_Anti[2][0] == 1 && health > ACNewHealth[i]){
  527.             switch(AC_Anti[2][1]){
  528.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Healthhack!",SName);
  529.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Healthhack!",SName);
  530.             }
  531.         }
  532.         else if(AC_Anti[3][0] == 1 && armour > ACNewArmour[i]){
  533.             switch(AC_Anti[3][1]){
  534.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Armourhack!",SName);
  535.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Armourhack!",SName);
  536.             }
  537.         }
  538.         else if(AC_Anti[21][0] == 1 && !AC_Fall[i] && GetPlayerSpeed(i) > MAX_PLAYERSPEED){
  539.             switch(AC_Anti[21][1]){
  540.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Speedhack!",SName);
  541.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Speedhack!",SName);
  542.             }
  543.         }
  544.         else if(AC_Anti[6][0] == 1 && IsPlayerInAnyVehicle(i))if(GetVehicleSpeed(GetPlayerVehicleID(i)) > MAX_VEHSPEED){
  545.             switch(AC_Anti[6][1]){
  546.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Speedhack!",SName);
  547.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Speedhack!",SName);
  548.             }
  549.         }
  550.         else if(AC_Anti[23][0] == 1 && !IsPlayerInAnyVehicle(i) && AC_Spectating[i] <= 0 && DistanceBetweenPlayerAndCamera(i) > 40){
  551.             switch(AC_Anti[23][1]){
  552.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Camhack!",SName);
  553.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Camhack!",SName);
  554.             }
  555.         }
  556.         surf = GetPlayerSurfingVehicleID(i);
  557.         if(AC_Anti[17][0] == 1 && !(GetPlayerSurfingVehicleID(i) == INVALID_VEHICLE_ID) && (GetVehicleSpeed(surf) > 0))return SetPlayerPos(i,x,y,z+10);
  558.         if(AC_Anti[12][0] == 1){
  559.             if(switched[i])
  560.             {
  561.                 GetPlayerPos(i,NewPos[i][0],NewPos[i][1],NewPos[i][2]);
  562.                 new Float:d = Distance(OldPos[i][0],OldPos[i][1],OldPos[i][2],NewPos[i][0],NewPos[i][1],NewPos[i][2]);
  563.                 if(d >= 15 && posbyserver[i] != 1){
  564.                     switch(AC_Anti[12][1]){
  565.                         case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Airbrake / Teleporthack!",SName);
  566.                         case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Airbrake / Teleporthack!",SName);
  567.                     }
  568.                 }
  569.                 switched[i] = 0;
  570.             }
  571.             else if(!switched[i])GetPlayerPos(i,OldPos[i][0],OldPos[i][1],OldPos[i][2]),switched[i] = 1;
  572.         }
  573.         if(AC_Anti[25][0] == 1 && !IsPlayerInAnyVehicle(i) && AC_PlayerVeh[i] >0){
  574.             switch(AC_Anti[25][1]){
  575.                 case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Fast-Carexit!",Namee(i));
  576.                 case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Fast-Carexit!",Namee(i));
  577.             }
  578.         }
  579.     }
  580.     return 1;
  581. }
  582.  
  583. public CheckWeapon(){
  584.     new Weaps[13][2],Nameee[MAX_PLAYER_NAME];
  585.     for(new i = 0; i<MAX_PLAYERS; i++)
  586.     {
  587.         if(IsPlayerNPC(i))continue;
  588.         if(!IsPlayerConnected(i))continue;
  589.         GetPlayerName(i,Nameee,MAX_PLAYER_NAME);
  590.         for(new _w = 0; _w < 13; _w++)
  591.         {
  592.             GetPlayerWeaponData(i, _w, Weaps[_w][0], Weaps[_w][1]);
  593.             if(Weaps[_w][0] <= 0 && Waffe[i][Weaps[_w][0]] != 1)continue;
  594.             else if(Weaps[_w][0] < 1 && Weaps[_w][0] > 47)continue;
  595.             else if(Weaps[_w][0] <= 0 || Weaps[_w][1] <= 0)continue;
  596.             else if(nwh[i][Weaps[_w][0]] == 1 && FireWeapon(Weaps[_w][0])){nwh[i][Weaps[_w][0]] = 0; SetPlayerAmmo(i,_w,0); continue;}
  597.             else if(Waffe[i][Weaps[_w][0]] <= 0 && nwh[i][Weaps[_w][0]] == 0 && Weaps[_w][0] != 46){
  598.                 switch(AC_Anti[1][1]){
  599.                     case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Waffenhack!",Nameee);
  600.                     case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Waffenhack!",Nameee);
  601.                 }
  602.             }
  603.         }
  604.     }
  605.     return 1;
  606. }
  607.  
  608. stock FireWeapon(weaponid){
  609.     switch(weaponid){
  610.         case 16..18:return 1;
  611.         case 22..39:return 1;
  612.         default:return 0;
  613.     }
  614.     return 1;
  615. }
  616.  
  617. public GivePlayerWeaponEx(playerid,Gun,Muni){
  618.     Waffe[playerid][Gun] = 1;
  619.     stopAC[playerid] = 15;
  620.     return GivePlayerWeapon(playerid, Gun, Muni);
  621. }
  622.  
  623. public GivePlayerMoneyEx(playerid,money){
  624.     ACNewMoney[playerid] = GetPlayerMoney(playerid) + money;
  625.     stopAC[playerid] = 15;
  626.     return GivePlayerMoney(playerid,money);
  627. }
  628.  
  629. public SetPlayerMoneyEx(playerid,money){
  630.     ACNewMoney[playerid] = money;
  631.     stopAC[playerid] = 15;
  632.     return GivePlayerMoney(playerid,money);
  633. }
  634.  
  635. public SetPlayerArmourEx(playerid,Float:armour){
  636.     ACNewArmour[playerid] = armour;
  637.     stopAC[playerid] = 15;
  638.     return SetPlayerArmour(playerid,armour);
  639. }
  640.  
  641. public GivePlayerArmourEx(playerid,Float:armour){
  642.     ACNewArmour[playerid] += armour;
  643.     stopAC[playerid] = 15;
  644.     return SetPlayerArmour(playerid,ACNewArmour[playerid]);
  645. }
  646.  
  647. public SetPlayerHealthEx(playerid,Float:health){
  648.     ACNewHealth[playerid] = health;
  649.     stopAC[playerid] = 15;
  650.     return SetPlayerHealth(playerid,health);
  651. }
  652.  
  653. public GivePlayerHealthEx(playerid,Float:health){
  654.     ACNewHealth[playerid] = health;
  655.     stopAC[playerid] = 15;
  656.     return SetPlayerHealth(playerid,ACNewHealth[playerid]);
  657. }
  658.  
  659. public SetPlayerPosEx(playerid,Float:x,Float:y,Float:z){
  660.     posbyserver[playerid] = 1;
  661.     SetTimerEx("pos",888*2,false,"i",playerid);
  662.     stopAC[playerid] = 15;
  663.     return SetPlayerPos(playerid,x,y,z);
  664. }
  665.  
  666. public TogglePlayerControllableEx(playerid,toggle){
  667.     switch(toggle)
  668.     {
  669.         case false:freezed[playerid] = 1;
  670.         case true:freezed[playerid] = 0;
  671.     }
  672.     stopAC[playerid] = 15;
  673.     return TogglePlayerControllable(playerid,toggle);
  674. }
  675.  
  676. public TogglePlayerSpectatingEx(playerid,toggle){
  677.     AC_Spectating[playerid] = toggle;
  678.     return TogglePlayerSpectating(playerid,1);
  679. }
  680. public AC_CreateVehicle_Ex(modelid, Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay){
  681.     new vehicleid = CreateVehicle(modelid,Float:x, Float:y, Float:z, Float:angle, color1, color2, respawn_delay);
  682.     return AC_vspawn[vehicleid] = 1;
  683. }
  684. public AC_AddStaticVehicle_Ex(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2){
  685.     new vehicleid = AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2);
  686.     return AC_vspawn[vehicleid] = 1;
  687. }
  688. public AC_AddStaticVehicleEx_Ex(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2,respawn_delay){
  689.     new vehicleid = AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:angle, color1, color2,respawn_delay);
  690.     return AC_vspawn[vehicleid] = 1;
  691. }
  692. public PutPlayerInVehicleEx(playerid,vehicleid,seatid){
  693.     AC_PutedVehicle[playerid] = 1;
  694.     return PutPlayerInVehicle(playerid,vehicleid,seatid);
  695. }
  696.  
  697.  
  698. stock IsAPlane(vehicleid){
  699.     switch(GetVehicleModel(vehicleid)){
  700.         case 460,464,476,511,512,513,519,520,553,577,592,593: return 1;
  701.     }
  702.     return 0;
  703. }
  704.  
  705. stock IsAHelicopter(vehicleid){
  706.     switch(GetVehicleModel(vehicleid)){
  707.         case 417,425,447,465,469,487,488,497,501,548,563: return 1;
  708.     }
  709.     return 0;
  710. }
  711.  
  712. stock anty(string[]){
  713.     if(strfind(string,"www.",true)!=-1 || strfind(string,"http://",true)!=-1 || strfind(string,".com",true)!=-1 || strfind(string,".de",true)!=-1 || strfind(string,".net",true)!=-1 || strfind(string,".tk",true)!=-1 || strfind(string,"91.",true)!=-1 || strfind(string,"195.",true)!=-1 ||strfind(string,".pl",true)!=-1|| strfind(string,".org",true)!=-1||
  714.     strfind(string,"89.",true)!=-1 || strfind(string,"176.",true)!=-1 || strfind(string,":7777",true)!=-1 || strfind(string,"8.",true)!=-1 || strfind(string,"68.",true)!=-1 || strfind(string,"195.",true)!=-1 || strfind(string,"216.",true)!=-1|| strfind(string,"109.",true)!=-1||
  715.     strfind(string,"37.",true)!=-1 || strfind(string,"95.",true)!=-1 || strfind(string,"77.",true)!=-1 || strfind(string,"174.",true)!=-1 || strfind(string,"202.",true)!=-1 || strfind(string,"212.",true)!=-1 || strfind(string,"188.",true)!=-1|| strfind(string,"31.",true)!=-1||
  716.     strfind(string,"46.",true)!=-1 || strfind(string,"178.",true)!=-1 || strfind(string,"70.",true)!=-1 || strfind(string,"168.",true)!=-1 || strfind(string,"99.",true)!=-1 || strfind(string,"120.",true)!=-1 || strfind(string,"47.",true)!=-1|| strfind(string,"253.",true)!=-1||
  717.     strfind(string,"85.",true)!=-1 || strfind(string,"86.",true)!=-1 || strfind(string,"9.",true)!=-1 || strfind(string,"208.",true)!=-1 || strfind(string,"64.",true)!=-1 || strfind(string,"34.",true)!=-1 || strfind(string,"78.",true)!=-1|| strfind(string,"100.",true)!=-1||
  718.     strfind(string,"182.",true)!=-1 || strfind(string,"82.",true)!=-1 || strfind(string,"164.",true)!=-1 || strfind(string,"23.",true)!=-1 || strfind(string,"101.",true)!=-1 || strfind(string,"0.",true)!=-1 || strfind(string,"79.",true)!=-1)
  719.     return true;
  720.     return false;
  721. }
  722.  
  723.  
  724. stock GetVehicleSpeed(vehicleid){
  725.     new Float:xPos[3];
  726.     GetVehicleVelocity(vehicleid, xPos[0], xPos[1], xPos[2]);
  727.     return floatround(floatsqroot(xPos[0] * xPos[0] + xPos[1] * xPos[1] + xPos[2] * xPos[2]) * 170.00);
  728. }
  729.  
  730.  
  731. stock Namee(playerid){
  732.    new name[MAX_PLAYER_NAME];
  733.    GetPlayerName(playerid,name,sizeof(name));
  734.    return name;
  735. }
  736.  
  737. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  738. {
  739.     if(AC_Anti[18][0] == 1 && Desk[playerid] >= 2 && afk_sicher[playerid] > 3){
  740.         switch(AC_Anti[18][1]){
  741.             case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: AFK-Ghost!",Namee(playerid));
  742.             case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: AFK-Ghost!",Namee(playerid));
  743.         }
  744.     }
  745.     if(Desk[playerid] >= 2 && afk_sicher[playerid] < 3)afk_sicher[playerid] ++;
  746.     else if(!Desk[playerid])afk_sicher[playerid] = 0;
  747.     if(AC_Anti[1][0] == 1 && GetPlayerAmmo(playerid) <= 1 && (weaponid >= 1 && weaponid <= 47))Waffe[playerid][weaponid] = 0,nwh[playerid][weaponid] = 1;
  748.     if(AC_Anti[14][0] == 1 && weaponid != 38)
  749.     {
  750.         if((gettime() - ShotTime[playerid]) < 1)Shot[playerid]+=1;
  751.         else Shot[playerid]=0;
  752.         if(Shot[playerid] > 15){
  753.             switch(AC_Anti[14][1]){
  754.                 case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Rapid-Fire!",Namee(playerid));
  755.                 case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Rapid-Fire!",Namee(playerid));
  756.             }
  757.         }
  758.         ShotTime[playerid] = gettime();
  759.     }
  760.     if(AC_Anti[20][0] == 1 && IsWeaponWithAmmo(weaponid))
  761.     {
  762.         new count = 0;
  763.         if(weaponid != CurrentWeapon[playerid]) CurrentWeapon[playerid] = weaponid, CurrentAmmo[playerid] = GetPlayerWeaponAmmo(playerid,weaponid), count++;
  764.         if(GetPlayerWeaponAmmo(playerid,weaponid) > CurrentAmmo[playerid] || GetPlayerWeaponAmmo(playerid,weaponid) < CurrentAmmo[playerid]) CurrentAmmo[playerid] = GetPlayerWeaponAmmo(playerid,weaponid),NoReloading[playerid] = 0,count++;
  765.         if(GetPlayerWeaponAmmo(playerid,weaponid) != 0 && GetPlayerWeaponAmmo(playerid,weaponid) == CurrentAmmo[playerid] && count == 0)
  766.         {
  767.             NoReloading[playerid]++;
  768.             if(NoReloading[playerid] >= 5){
  769.                 switch(AC_Anti[20][1]){
  770.                     case 1:return Kicks(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Unlimmited Ammo / No Reloading!",Namee(playerid));
  771.                     case 2:return Bans(playerid),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Unlimmited Ammo / No Reloading!",Namee(playerid));
  772.                 }
  773.             }
  774.         }
  775.     }
  776.     return CallLocalFunction("AC_OnPlayerWeaponShot","iiiifff",playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  777. }
  778.  
  779. stock GetPlayerSpeed(playerid) {
  780.     if(playerid != INVALID_PLAYER_ID)
  781.     {
  782.         new Float:Pos[3],Float:PS;
  783.         GetPlayerVelocity(playerid, Pos[0], Pos[1], Pos[2]);
  784.         PS = floatsqroot(Pos[0]*Pos[0] + Pos[1]*Pos[1] + Pos[2]*Pos[2])*200;
  785.         return floatround(PS,floatround_round);
  786.     }
  787.     return INVALID_PLAYER_ID;
  788. }  
  789.  
  790. public pos(playerid)return posbyserver[playerid] = 0;
  791. stock CheckFireArm(weaponid) {
  792.    switch(weaponid)
  793.    {
  794.        case 16..39, 41..43: return 1;
  795.        default: return 0;
  796.    }
  797.    return 0;
  798. }
  799.  
  800. stock SetVehiclePosEx(vehicleid,Float:x,Float:y,Float:z){
  801.     vPos[vehicleid][0] = x,vPos[vehicleid][1] = y,vPos[vehicleid][2] = z;
  802.     return SetVehiclePos(vehicleid,x,y,z);
  803. }
  804.  
  805. public CreateObjectEx(modelid,Float:x,Float:y,Float:z,Float:rX,Float:rY,Float:rZ,Float:draw){
  806.     new object = CreateObject(modelid,0,0,0,0,0,0,Float:draw = 0.0);
  807.     return SetObjectPos(object,x,y,z), SetObjectRot(object,rX,rY,rZ);
  808. }
  809.  
  810. public CreatePlayerObjectEx(playerid,modelid,Float:x,Float:y,Float:z,Float:rX,Float:rY,Float:rZ,Float:draw){
  811.     new object = CreatePlayerObject(playerid,modelid,0,0,0,0,0,0,Float:draw = 0.0);
  812.     return SetPlayerObjectPos(playerid,object,x,y,z), SetPlayerObjectRot(playerid,object,rX,rY,rZ);
  813. }
  814.  
  815. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat){
  816.     new Float:x,Float:y,Float:z; GetVehiclePos(vehicleid, x, y, z);
  817.     if(vPos[vehicleid][0] == 0.0 && vPos[vehicleid][1] == 0.0 && vPos[vehicleid][2] == 0.0)vPos[vehicleid][0] = x,vPos[vehicleid][1] = y,vPos[vehicleid][2] = z;
  818.     new Float:dis = Distance(vPos[vehicleid][0],vPos[vehicleid][1],vPos[vehicleid][2], x,y,z);
  819.     if(dis > 5)return SetVehiclePosEx(vehicleid,vPos[vehicleid][0],vPos[vehicleid][1],vPos[vehicleid][2]);
  820.     else vPos[vehicleid][0] = x,vPos[vehicleid][1] = y,vPos[vehicleid][2] = z;
  821.     return 1;
  822. }
  823.  
  824. stock IsPlayerMoving(playerid){
  825.     new Float:Velocity[3];
  826.     GetPlayerVelocity(playerid, Velocity[0], Velocity[1], Velocity[2]);
  827.     if(Velocity[0] == 0 && Velocity[1] == 0 && Velocity[2] == 0) return false;
  828.     return true;
  829. }
  830.  
  831. stock IsABike(vid){
  832.     new modelid = GetVehicleModel(vid);
  833.     if(modelid == 509||modelid ==510||modelid ==581||modelid ==522||modelid ==521||modelid ==523||modelid ==586||modelid ==481||modelid ==462||modelid ==448||modelid ==461||modelid ==463||modelid ==468||modelid ==471) return 1;
  834.     else return 0;
  835. }
  836.  
  837. stock IsWeaponWithAmmo(weaponid)
  838. {
  839.     switch(weaponid)
  840.     {
  841.         case 16..18, 22..39, 41..42: return 1;
  842.         default: return 0;
  843.     }
  844.     return 0;
  845.  
  846. }
  847.  
  848. stock GetPlayerWeaponAmmo(playerid,weaponid)
  849. {
  850.     new wd[2][13];
  851.     for(new i; i<13; i++)GetPlayerWeaponData(playerid,i,wd[0][i],wd[1][i]);
  852.     for(new i; i<13; i++)if(weaponid == wd[0][i]) return wd[1][i];
  853.     return 0;
  854. }
  855.  
  856. stock Kicks(playerid)return SetTimerEx("Kicke",100,false,"i",playerid);
  857. public Kicke(playerid)return Kick(playerid);
  858.  
  859. forward Banne(playerid);
  860. stock Bans(playerid)return SetTimerEx("Banne",100,false,"i",playerid);
  861. public Banne(playerid)return Ban(playerid);
  862.  
  863.  
  864. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
  865.     CallLocalFunction("AC_OnDialogResponse","iiiis",playerid, dialogid, response, listitem, inputtext);
  866.     new ac_str[128];
  867.     switch(dialogid){
  868.         case AC_AntiMenu:{
  869.             if(!response)return 1;
  870.             new x = listitem,onoff[16];
  871.             AC_PEdit[playerid] = x;
  872.             switch(AC_Anti[x][0]){
  873.                 case 1:(onoff = "ausschalten");
  874.                 case 2:(onoff = "einschalten");
  875.             }
  876.             if(x == 5)format(ac_str,128,"Cheat / Hack '%s'\nStrafe ändern\nPing ändern",onoff);
  877.             else format(ac_str,128,"Cheat / Hack '%s'\nStrafe ändern",onoff);
  878.             return ShowPlayerDialog(playerid,AC_Config,DIALOG_STYLE_LIST,"Anti - Cheat | Bearbeiten",ac_str,"Auswählen / Bearbeiten","Abbrechen");
  879.         }
  880.         case AC_Config:{
  881.             if(!response)return ocmd_accfg(playerid);
  882.             new x = AC_PEdit[playerid];
  883.             switch(listitem){
  884.                 case 0:{
  885.                     switch(AC_Anti[x][0]){
  886.                         case 1:AC_Anti[x][0] = 2;
  887.                         case 2:AC_Anti[x][0] = 1;
  888.                     }
  889.                     switch(x){
  890.                         case 1:{
  891.                             if(AC_Anti[x][0] == 1)AC_Timer[0] = SetTimer("CheckWeapon",888*2,true);
  892.                             else KillTimer(AC_Timer[0]);
  893.                         }
  894.                         case 11:{
  895.                             if(AC_Anti[x][0] == 1)AC_Timer[1] = SetTimer("AC_CheckFlyhack",888*2,true);
  896.                             else KillTimer(AC_Timer[1]);
  897.                         }
  898.                         case 21:{
  899.                             if(AC_Anti[21][0] == 1)AC_Timer[2] = SetTimer("AC_FallingChecker",500,true);
  900.                             else KillTimer(AC_Timer[2]);
  901.                         }
  902.                     }
  903.                     AC_SaveSettings();
  904.                     return ocmd_accfg(playerid);
  905.                 }
  906.                 case 1:return ShowPlayerDialog(playerid,AC_Config2,DIALOG_STYLE_LIST,"Anti - Cheat | Bearbeiten","Bestrafen mit 'Kick'\nBestrafen mit 'Ban'","Auswählen / Bearbeiten","Abbrechen");
  907.                 case 2:{
  908.                     if(AC_PEdit[playerid] != 5)return ocmd_accfg(playerid);
  909.                     return ShowPlayerDialog(playerid,AC_Config3,DIALOG_STYLE_INPUT,"Anti - Cheat | Bearbeiten","Gebe den maximalen Ping ein,\nden ein Spieler auf dem Server haben darf:","Bearbeiten / Speichern","Abbrechen");
  910.                 }
  911.             }
  912.         }
  913.         case AC_Config2:{
  914.             if(!response)return ocmd_accfg(playerid);
  915.             AC_Anti[AC_PEdit[playerid]][1] = listitem +1;
  916.             AC_SaveSettings();
  917.             return ocmd_accfg(playerid);
  918.         }
  919.         case AC_Config3:{
  920.             if(!response)return ocmd_accfg(playerid);
  921.             if(!strval(inputtext))SCMF(playerid,Rot,"Du musst eine Zahl eingeben!");
  922.             else AC_Anti[5][2] = strval(inputtext);
  923.             AC_SaveSettings();
  924.             return ocmd_accfg(playerid);
  925.         }
  926.     }
  927.     return 1;
  928. }
  929.  
  930. ocmd:aimbottest(playerid,p[])
  931. {
  932.     if(!IsPlayerAdmin(playerid))return 1;
  933.     new pID,Float:_pos[3];
  934.     if(sscanf(p,"u",pID))return SCMF(playerid,Rot,"Benutzung: /aimbottest [SPIELER/ID]");
  935.     if(!IsPlayerConnected(pID))return SCMF(playerid,Rot,"Dieser Spieler ist nicht Online!");
  936.     GetPlayerPos(pID,_pos[0],_pos[1],_pos[2])
  937.     new tick = GetTickCount(), tickmax = tick + 300;
  938.     SetPlayerPosEx(playerid,_pos[0]+0.5,_pos[1]+0.5,_pos[2]);
  939.     if(GetPlayerTargetPlayer(pID) == playerid && tick <= tickmax)return SCMF(playerid,Rot,"Spieler hat Aimbot! ( Weiterer Test empfohlen! )");
  940.     return SCMF(playerid,Rot,"Spieler hat kein Aimbot! ( Weiterer Test empfohlen! )");
  941. }
  942.  
  943. ocmd:godtest(playerid,params[])
  944. {
  945.     if(!IsPlayerAdmin(playerid))return 1;
  946.     new targetid;
  947.     if(sscanf(params,"u",targetid))return SendClientMessage(playerid,0xFF5B00FF,"** Benutzung: /godtest <Spieler-Name / - ID>");
  948.     if(!IsPlayerConnected(targetid))return SendClientMessage(playerid,0xFF0000FF,"** Der Spieler ist nicht verbunden");
  949.     new Float:px,Float:py,Float:pz,player[MAX_PLAYER_NAME],string[144];
  950.     GetPlayerName(playerid,player,sizeof(player));
  951.     GetPlayerPos(targetid,px,py,pz);
  952.     format(string,sizeof(string),"[Godtest] Du wirst nun vom Teammitglied '%s' (ID: %i) auf Godmode überprüft.",player,playerid);
  953.     SendClientMessage(targetid,0x6FABFFFF,string);
  954.     SendClientMessage(targetid,0x6FABFFFF,"[Godtest] Solltest du versuchen, den Check zu umgehen, wirst du permanent vom Server gesperrt!");
  955.     SendClientMessage(targetid,0x6FABFFFF,"[Godtest] Du wirst nun überprüft, bitte habe einen Moment Geduld...");
  956.     SetPlayerHealth(targetid,100)SetPlayerArmour(targetid,0);
  957.     SetTimerEx("check",2000,false,"dd",playerid,targetid);
  958.     return CreateExplosion(px, py, pz, 0, 10.0);
  959. }
  960.  
  961. forward check(playerid,targetid);
  962. public check(playerid,targetid)
  963. {
  964.     if(!IsPlayerConnected(targetid))return SendClientMessage(playerid,0xFF0000FF,"** Der Spieler ist nicht verbunden");
  965.     new target[MAX_PLAYER_NAME],Float:nh,string[144];
  966.     GetPlayerName(targetid,target,sizeof(target));
  967.     GetPlayerHealth(targetid,nh);
  968.     SendClientMessage(targetid,0x6FABFFFF,"[Godtest] Der Check wurde erfolgreich beendet!");
  969.     SendClientMessage(targetid,0x6FABFFFF,"[Godtest] Das Ergebnis wurde dem Teammitglied übermittelt.");
  970.     format(string,sizeof(string),"[Godtest] Du hast den Spieler '%s' (ID: %i) auf Godmode überprüft.",target,targetid);
  971.     SendClientMessage(playerid,0x6FABFFFF,string);
  972.     SendClientMessage(playerid,0x6FABFFFF,"[Godtest] Ergebnis:");
  973.     if(nh >= 100) {
  974.         SendClientMessage(playerid,0x6FABFFFF,"[Godtest] Godmode: {00FF00}Vorhanden{FFFFFF}!");
  975.         SetPlayerHealth(targetid,100);
  976.     } else {
  977.         SendClientMessage(playerid,0x6FABFFFF,"[Godtest] Godmode: {FF0000}Nicht vorhanden{FFFFFF}!");
  978.         SetPlayerHealth(targetid,100);
  979.     }
  980.     return 1;
  981. }
  982. ocmd:accfg(playerid){
  983.     if(!IsPlayerAdmin(playerid))return 1;
  984.     new string[64],str[1024],kbr[32],onoff[16];
  985.     for(new i = 0; i<AC_ANTI_FUNCS; i++){
  986.         if(i != 5){
  987.             switch(AC_Anti[i][1]){
  988.                 case 1:(kbr = "Kick");
  989.                 case 2:(kbr = "Ban");
  990.                 case 3:(kbr = "Reset");
  991.             }
  992.         }
  993.         switch(AC_Anti[i][0]){
  994.             case 1:(onoff = "On");
  995.             case 2:(onoff = "Off");
  996.         }
  997.         if(i != 5)format(string,64,"'%s' | '%s' | '%s' %c",AC_AntiNames[i],onoff,kbr,(i == AC_ANTI_FUNCS) ? '\0' : '\n'),strins(str,string,strlen(str),sizeof(str));
  998.         else if(i == 5)format(string,64,"'%s' | '%s' | Max Ping: %d\n",AC_AntiNames[i],onoff,AC_Anti[5][2]),strins(str,string,strlen(str),sizeof(str));
  999.     }
  1000.     return ShowPlayerDialog(playerid,AC_AntiMenu,DIALOG_STYLE_LIST,"Anti - Cheat",str,"Auswählen / Bearbeiten","Abbrechen");
  1001. }
  1002.  
  1003.  
  1004.  
  1005. stock IsPlayerSwimming(playerid)
  1006. {
  1007.     if(!IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  1008.     {
  1009.         new animlib[32], animname[32];
  1010.         GetAnimationName(GetPlayerAnimationIndex(playerid),animlib,32,animname,32);
  1011.  
  1012.         if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_GLIDE", true)) return 1;
  1013.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_BREAST", true)) return 1;
  1014.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_CRAWL", true)) return 1;
  1015.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_DIVE_UNDER", true)) return 1;
  1016.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_DIVE_GLIDE", true)) return 1;
  1017.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_UNDER", true)) return 1;
  1018.         else if(!strcmp(animlib, "SWIM", true) && !strcmp(animname, "SWIM_TREAD", true)) return 1;
  1019.     }
  1020.     return 0;
  1021. }
  1022. stock InPlayerInWater(playerid)
  1023. {
  1024.     new Float:x,Float:y,Float:z;
  1025.     GetPlayerPos(playerid, x, y, z);
  1026.     if((x >= -1408.0629 && y >= 2021.0587 && x <= -460.9319 && y <= 2861.4893) ||//Represa do deserto de Las Venturas
  1027.     (x >= 1269.5886 && y >= -810.4507 && x <= 1288.8916 && y <= -800.5959) ||//Piscina de uma casa em VineWood (Mad Dog's Mansion)
  1028.     (x >= 1086.6010 && y >= -683.6998 && x <= 1103.0225 && y <= -662.1832) ||//Piscina de uma casa em VineWood (Perto Mad Dog's Mansion)
  1029.     (x >= 169.6879 && y >= -1392.6630 && x <= 281.5444 && y <= -1168.9749) ||// 2 Piscinas em VineWood
  1030.     (x >= -828.3018 && y >= -2107.1487 && x <= -443.5032 && y <= -1855.6273) ||//Lago da árvore caída, ou Lago Morto
  1031.     (x >= 1198.9982 && y >= -2407.0581 && x <= 1275.7397 && y <= -2341.6262) ||//Lago perto do aeroporto Los Santos
  1032.     (x >= 2293.1467 && y >= -1432.5869 && x <= 2331.7388 && y <= -1397.6476) ||//Lago perto da Igreja Los Santos
  1033.     (x >= 1915.3196 && y >= -1236.2382 && x <= 2016.6565 && y <= -1167.9290) ||//Park Glen Los Santos
  1034.     (x >= -2747.1692 && y >= -510.1152 && x <= -2663.2468 && y <= -411.4905) ||//Lago em San Fierro
  1035.     (x >= 1838.8041 && y >= 1463.2024 && x <= 2035.4167 && y <= 1703.0480) ||//Cascata do Login em Las Venturas
  1036.     (x >= 2049.6646 && y >= 1843.3029 && x <= 2119.9021 && y <= 1983.5464) ||//Navio Pirata em Las Venturas
  1037.     (x >= 2094.9255 && y >= 1085.2852 && x <= 2179.1790 && y <= 1183.0610) ||//Frente de um Cascino em Las Venturas
  1038.     (x >= 2545.3718 && y >= 2347.7112 && x <= 2593.6794 && y <= 2403.8040))//Piscina de um prédio em Las Venturas
  1039.     {
  1040.             return 1;
  1041.     }
  1042.     return 0;
  1043. }
  1044.  
  1045. forward AC_CheckFlyhack();
  1046. public AC_CheckFlyhack()
  1047. {
  1048.     for(new i; i < MAX_PLAYERS; i++)
  1049.     {
  1050.         if(!IsPlayerConnected(i))continue;
  1051.         if(!IsPlayerSwimming(i))continue;
  1052.         new Float:XPos,Float:YPos,Float:ZPos;
  1053.         GetPlayerPos(i,XPos,YPos,ZPos);
  1054.         if(ZPos > 1.0){
  1055.             if(!InPlayerInWater(i)){
  1056.                 switch(AC_Anti[11][1]){
  1057.                     case 1:return Kicks(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gekickt. Grund: Flyhack!",Namee(i));
  1058.                     case 2:return Bans(i),SCMToAllF(Rot,"Spieler '%s' wurde vom Server gebannt. Grund: Flyhack!",Namee(i));
  1059.                 }
  1060.             }
  1061.         }
  1062.     }
  1063.     return 1;
  1064. }
  1065. forward Float:DistanceBetweenPlayerAndCamera(playerid);
  1066. stock Float:DistanceBetweenPlayerAndCamera(playerid){
  1067.     if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING){
  1068.         new Float:pP[3],Float:tP[3],Float:Float_NaN;
  1069.         if(!GetPlayerPos(playerid,pP[0],pP[1],pP[2]) || !GetPlayerCameraPos(playerid,tP[0],tP[1],tP[2]))return Float_NaN;
  1070.         pP[0] -= tP[0], pP[1] -= tP[1], pP[2] -= tP[2];
  1071.         return floatsqroot(floatpower(pP[0],2.0) + floatpower(pP[1],2.0) + floatpower(pP[2],2.0));
  1072.     }
  1073.     else return floatsqroot(0);
  1074. }
  1075.  
  1076. stock AC_LoadSettings(){
  1077.     if(!dini_Exists(AC_FILE)){
  1078.         dini_Create(AC_FILE);
  1079.         AC_Standard();
  1080.         return AC_SaveSettings();
  1081.     }
  1082.     new str[32];
  1083.     for(new i = 0; i<AC_ANTI_FUNCS; i++){
  1084.         if(i == 5){
  1085.             format(str,32,"%s_2",AC_AntiNames[5]);
  1086.             AC_Anti[5][2] = dInt(AC_FILE,str);
  1087.         }
  1088.         for(new x = 0; x<2; x++){
  1089.             format(str,32,"%s_%d",AC_AntiNames[i],x);
  1090.             AC_Anti[i][x] = dInt(AC_FILE,str);
  1091.         }
  1092.     }
  1093.     return 1;
  1094. }
  1095. stock AC_SaveSettings(){
  1096.     if(!dini_Exists(AC_FILE)){
  1097.         dini_Create(AC_FILE);
  1098.         return AC_Standard();
  1099.     }
  1100.     new str[32];
  1101.     for(new i = 0; i<AC_ANTI_FUNCS; i++){
  1102.         if(i == 5){
  1103.             format(str,32,"%s_2",AC_AntiNames[5]);
  1104.             dIntSet(AC_FILE,str,AC_Anti[5][2]);
  1105.         }
  1106.         for(new x = 0; x<2; x++){
  1107.             format(str,32,"%s_%d",AC_AntiNames[i],x);
  1108.             dIntSet(AC_FILE,str,AC_Anti[i][x]);
  1109.         }
  1110.     }
  1111.     return 1;
  1112. }
  1113. stock AC_Standard(){
  1114.     for(new i = 0; i<AC_ANTI_FUNCS; i++){
  1115.         AC_Anti[i][0] = 1;
  1116.         AC_Anti[i][1] = 1;
  1117.     }
  1118.     return AC_Anti[5][2] = 700;
  1119. }
  1120.  
  1121. //Ende
  1122. stock sscanf(string[], format[], {Float,_}:...)
  1123. {
  1124.     #if defined isnull
  1125.         if (isnull(string))
  1126.     #else
  1127.         if (string[0] == 0 || (string[0] == 1 && string[1] == 0))
  1128.     #endif
  1129.         {
  1130.             return format[0];
  1131.         }
  1132.     #pragma tabsize 4
  1133.     new
  1134.         formatPos = 0,
  1135.         stringPos = 0,
  1136.         paramPos = 2,
  1137.         paramCount = numargs(),
  1138.         delim = ' ';
  1139.     while (string[stringPos] && string[stringPos] <= ' ')
  1140.     {
  1141.         stringPos++;
  1142.     }
  1143.     while (paramPos < paramCount && string[stringPos])
  1144.     {
  1145.         switch (format[formatPos++])
  1146.         {
  1147.             case '\0':
  1148.             {
  1149.                 return 0;
  1150.             }
  1151.             case 'i', 'd':
  1152.             {
  1153.                 new
  1154.                     neg = 1,
  1155.                     num = 0,
  1156.                     ch = string[stringPos];
  1157.                 if (ch == '-')
  1158.                 {
  1159.                     neg = -1;
  1160.                     ch = string[++stringPos];
  1161.                 }
  1162.                 do
  1163.                 {
  1164.                     stringPos++;
  1165.                     if ('0' <= ch <= '9')
  1166.                     {
  1167.                         num = (num * 10) + (ch - '0');
  1168.                     }
  1169.                     else
  1170.                     {
  1171.                         return -1;
  1172.                     }
  1173.                 }
  1174.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  1175.                 setarg(paramPos, 0, num * neg);
  1176.             }
  1177.             case 'h', 'x':
  1178.             {
  1179.                 new
  1180.                     num = 0,
  1181.                     ch = string[stringPos];
  1182.                 do
  1183.                 {
  1184.                     stringPos++;
  1185.                     switch (ch)
  1186.                     {
  1187.                         case 'x', 'X':
  1188.                         {
  1189.                             num = 0;
  1190.                             continue;
  1191.                         }
  1192.                         case '0' .. '9':
  1193.                         {
  1194.                             num = (num << 4) | (ch - '0');
  1195.                         }
  1196.                         case 'a' .. 'f':
  1197.                         {
  1198.                             num = (num << 4) | (ch - ('a' - 10));
  1199.                         }
  1200.                         case 'A' .. 'F':
  1201.                         {
  1202.                             num = (num << 4) | (ch - ('A' - 10));
  1203.                         }
  1204.                         default:
  1205.                         {
  1206.                             return -1;
  1207.                         }
  1208.                     }
  1209.                 }
  1210.                 while ((ch = string[stringPos]) > ' ' && ch != delim);
  1211.                 setarg(paramPos, 0, num);
  1212.             }
  1213.             case 'c':
  1214.             {
  1215.                 setarg(paramPos, 0, string[stringPos++]);
  1216.             }
  1217.             case 'f':
  1218.             {
  1219.  
  1220.                 new changestr[16], changepos = 0, strpos = stringPos;    
  1221.                 while(changepos < 16 && string[strpos] && string[strpos] != delim)
  1222.                 {
  1223.                     changestr[changepos++] = string[strpos++];
  1224.                     }
  1225.                 changestr[changepos] = '\0';
  1226.                 setarg(paramPos,0,_:floatstr(changestr));
  1227.             }
  1228.             case 'p':
  1229.             {
  1230.                 delim = format[formatPos++];
  1231.                 continue;
  1232.             }
  1233.             case '\'':
  1234.             {
  1235.                 new
  1236.                     end = formatPos - 1,
  1237.                     ch;
  1238.                 while ((ch = format[++end]) && ch != '\'') {}
  1239.                 if (!ch)
  1240.                 {
  1241.                     return -1;
  1242.                 }
  1243.                 format[end] = '\0';
  1244.                 if ((ch = strfind(string, format[formatPos], false, stringPos)) == -1)
  1245.                 {
  1246.                     if (format[end + 1])
  1247.                     {
  1248.                         return -1;
  1249.                     }
  1250.                     return 0;
  1251.                 }
  1252.                 format[end] = '\'';
  1253.                 stringPos = ch + (end - formatPos);
  1254.                 formatPos = end + 1;
  1255.             }
  1256.             case 'u':
  1257.             {
  1258.                 new
  1259.                     end = stringPos - 1,
  1260.                     id = 0,
  1261.                     bool:num = true,
  1262.                     ch;
  1263.                 while ((ch = string[++end]) && ch != delim)
  1264.                 {
  1265.                     if (num)
  1266.                     {
  1267.                         if ('0' <= ch <= '9')
  1268.                         {
  1269.                             id = (id * 10) + (ch - '0');
  1270.                         }
  1271.                         else
  1272.                         {
  1273.                             num = false;
  1274.                         }
  1275.                     }
  1276.                 }
  1277.                 if (num && IsPlayerConnected(id))
  1278.                 {
  1279.                     setarg(paramPos, 0, id);
  1280.                 }
  1281.                 else
  1282.                 {
  1283.                     #if !defined foreach
  1284.                         #define foreach(%1,%2) for (new %2 = 0; %2 < MAX_PLAYERS; %2++) if (IsPlayerConnected(%2))
  1285.                         #define __SSCANF_FOREACH__
  1286.                     #endif
  1287.                     string[end] = '\0';
  1288.                     num = false;
  1289.                     new
  1290.                         name[MAX_PLAYER_NAME];
  1291.                     id = end - stringPos;
  1292.                     foreach (Player, playerid)
  1293.                     {
  1294.                         GetPlayerName(playerid, name, sizeof (name));
  1295.                         if (!strcmp(name, string[stringPos], true, id))
  1296.                         {
  1297.                             setarg(paramPos, 0, playerid);
  1298.                             num = true;
  1299.                             break;
  1300.                         }
  1301.                     }
  1302.                     if (!num)
  1303.                     {
  1304.                         setarg(paramPos, 0, INVALID_PLAYER_ID);
  1305.                     }
  1306.                     string[end] = ch;
  1307.                     #if defined __SSCANF_FOREACH__
  1308.                         #undef foreach
  1309.                         #undef __SSCANF_FOREACH__
  1310.                     #endif
  1311.                 }
  1312.                 stringPos = end;
  1313.             }
  1314.             case 's', 'z':
  1315.             {
  1316.                 new
  1317.                     i = 0,
  1318.                     ch;
  1319.                 if (format[formatPos])
  1320.                 {
  1321.                     while ((ch = string[stringPos++]) && ch != delim)
  1322.                     {
  1323.                         setarg(paramPos, i++, ch);
  1324.                     }
  1325.                     if (!i)
  1326.                     {
  1327.                         return -1;
  1328.                     }
  1329.                 }
  1330.                 else
  1331.                 {
  1332.                     while ((ch = string[stringPos++]))
  1333.                     {
  1334.                         setarg(paramPos, i++, ch);
  1335.                     }
  1336.                 }
  1337.                 stringPos--;
  1338.                 setarg(paramPos, i, '\0');
  1339.             }
  1340.             default:
  1341.             {
  1342.                 continue;
  1343.             }
  1344.         }
  1345.         while (string[stringPos] && string[stringPos] != delim && string[stringPos] > ' ')
  1346.         {
  1347.             stringPos++;
  1348.         }
  1349.         while (string[stringPos] && (string[stringPos] == delim || string[stringPos] <= ' '))
  1350.         {
  1351.             stringPos++;
  1352.         }
  1353.         paramPos++;
  1354.     }
  1355.     do
  1356.     {
  1357.         if ((delim = format[formatPos++]) > ' ')
  1358.         {
  1359.             if (delim == '\'')
  1360.             {
  1361.                 while ((delim = format[formatPos++]) && delim != '\'') {}
  1362.             }
  1363.             else if (delim != 'z')
  1364.             {
  1365.                 return delim;
  1366.             }
  1367.         }
  1368.     }
  1369.     while (delim > ' ');
  1370.     return 0;
  1371. }
  1372.  
  1373. #if defined _ALS_OnPlayerConnect
  1374.     #undef OnPlayerConnect
  1375. #else
  1376.     #define _ALS_OnPlayerConnect
  1377. #endif
  1378. #define OnPlayerConnect             AC_OnPlayerConnect
  1379.  
  1380. #if defined _ALS_OnGameModeInit
  1381.     #undef OnGameModeInit
  1382. #else
  1383.     #define _ALS_OnGameModeInit
  1384. #endif
  1385. #define OnGameModeInit              AC_OnGameModeInit
  1386.  
  1387. #if defined _ALS_OnPlayerSpawn
  1388.     #undef OnPlayerSpawn
  1389. #else
  1390.     #define _ALS_OnPlayerSpawn
  1391. #endif
  1392. #define OnPlayerSpawn               AC_OnPlayerSpawn
  1393.  
  1394. #if defined _ALS_OnPlayerDeath
  1395.     #undef OnPlayerDeath
  1396. #else
  1397.     #define _ALS_OnPlayerDeath
  1398. #endif
  1399. #define OnPlayerDeath               AC_OnPlayerDeath
  1400.  
  1401. #if defined _ALS_OnPlayerText
  1402.     #undef OnPlayerText
  1403. #else
  1404.     #define _ALS_OnPlayerText
  1405. #endif
  1406. #define OnPlayerText                AC_OnPlayerText
  1407.  
  1408. #if defined _ALS_OnPlayerEnterVehicle
  1409.     #undef OnPlayerEnterVehicle
  1410. #else
  1411.     #define _ALS_OnPlayerEnterVehicle
  1412. #endif
  1413. #define OnPlayerEnterVehicle        AC_OnPlayerEnterVehicle
  1414.  
  1415. #if defined _ALS_OnVehicleMod
  1416.     #undef OnVehicleMod
  1417. #else
  1418.     #define _ALS_OnVehicleMod
  1419. #endif
  1420. #define OnVehicleMod                AC_OnVehicleMod
  1421.  
  1422. #if defined _ALS_OnVehicleRespray
  1423.     #undef OnVehicleRespray
  1424. #else
  1425.     #define _ALS_OnVehicleRespray
  1426. #endif
  1427. #define OnVehicleRespray            AC_OnVehicleRespray
  1428.  
  1429. #if defined _ALS_OnVehiclePaintjob
  1430.     #undef OnVehiclePaintjob
  1431. #else
  1432.     #define _ALS_OnVehiclePaintjob
  1433. #endif
  1434. #define OnVehiclePaintjob           AC_OnVehiclePaintjob
  1435.  
  1436. #if defined _ALS_OnPlayerKeyStateChange
  1437.     #undef OnPlayerKeyStateChange
  1438. #else
  1439.     #define _ALS_OnPlayerKeyStateChange
  1440. #endif
  1441. #define OnPlayerKeyStateChange      AC_OnPlayerKeyStateChange
  1442.  
  1443. #if defined _ALS_OnPlayerUpdate
  1444.     #undef OnPlayerUpdate
  1445. #else
  1446.     #define _ALS_OnPlayerUpdate
  1447. #endif
  1448. #define OnPlayerUpdate              AC_OnPlayerUpdate
  1449.  
  1450. #if defined _ALS_OnPlayerDisconnect
  1451.     #undef OnPlayerDisconnect
  1452. #else
  1453.     #define _ALS_OnPlayerDisconnect
  1454. #endif
  1455. #define OnPlayerDisconnect          AC_OnPlayerDisconnect
  1456.  
  1457. #if defined _ALS_OnPlayerExitVehicle
  1458.     #undef OnPlayerExitVehicle
  1459. #else
  1460.     #define _ALS_OnPlayerExitVehicle
  1461. #endif
  1462. #define OnPlayerExitVehicle         AC_OnPlayerExitVehicle
  1463.  
  1464. #if defined _ALS_OnPlayerStateChange
  1465.     #undef OnPlayerStateChange
  1466. #else
  1467.     #define _ALS_OnPlayerStateChange
  1468. #endif
  1469. #define OnPlayerStateChange         AC_OnPlayerStateChange
  1470.  
  1471. #if defined _ALS_OnVehicleStreamIn
  1472.     #undef OnVehicleStreamIn
  1473. #else
  1474.     #define _ALS_OnVehicleStreamIn
  1475. #endif
  1476. #define OnVehicleStreamIn            AC_OnVehicleStreamIn
  1477.  
  1478. #if defined _ALS_OnDialogResponse
  1479.     #undef OnDialogResponse
  1480. #else
  1481.     #define _ALS_OnDialogResponse
  1482. #endif
  1483. #define OnDialogResponse                AC_OnDialogResponse
  1484.  
  1485. #if defined _ALS_OnPlayerWeaponShot
  1486.     #undef OnPlayerWeaponShot
  1487. #else
  1488.     #define _ALS_OnPlayerWeaponShot
  1489. #endif
  1490. #define OnPlayerWeaponShot              AC_OnPlayerWeaponShot
  1491.  
  1492.  
  1493. #define GivePlayerMoney             GivePlayerWeaponEx
  1494. #define SetPlayerMoney              SetPlayerMoneyEx
  1495. #define GivePlayerHealth            GivePlayerHealthEx
  1496. #define SetPlayerHealth             SetPlayerHealthEx
  1497. #define GivePlayerArmour            GivePlayerArmourEx
  1498. #define SetPlayerArmour             SetPlayerArmourEx
  1499. #define GivePlayerWeapon            GivePlayerWeaponEx
  1500. #define SetPlayerPos                SetPlayerPosEx
  1501. #define TogglePlayerControllable    TogglePlayerControllableEx
  1502. #define TogglePlayerSpectating      TogglePlayerSpectatingEx
  1503. #define CreateVehicle               AC_CreateVehicle_Ex
  1504. #define AddStaticVehicle            AC_AddStaticVehicle_Ex
  1505. #define AddStaticVehicleEx          AC_AddStaticVehicleEx_Ex
  1506. #define CreateObject                CreateObjectEx
  1507. #define CreatePlayerObject          CreatePlayerObjectEx
  1508. #define SetVehicleZAngle            SetVehicleZAngleEx
  1509. #define PutPlayerInVehicle          PutPlayerInVehicleEx
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement