Advertisement
MacMailler

AntiInfiniteAmmo

Jan 5th, 2013
680
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.60 KB | None | 0 0
  1. /**
  2.     Script: Античит на бесконечные патроны
  3.         By: MacMailler
  4. */
  5. #if !defined _samp_included
  6.     #error Please include "samp.inc"
  7. #endif
  8. #if !defined AMMO_INC
  9.     #define  AMMO_INC
  10.    
  11.     #define ammo::          ammo_
  12.     #define valid_w<%0>     (%0>=22&&%0<=42)
  13.  
  14.     enum ammo::enum {
  15.         bool: ammo::detect,
  16.         ammo::count[ 13 ],
  17.         ammo::warns[ 13 ]
  18.     };
  19.     static ammo::Info[ MAX_PLAYERS ][ ammo::enum ];
  20.    
  21.     static shandle[144], player[24], weapon[28];
  22.    
  23.    
  24.     public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) {
  25.         if(valid_w<weaponid>) {
  26.             new p_ammo, slot = ammo::getWeaponSlot(weaponid);
  27.             GetPlayerWeaponData(playerid, slot, weaponid, p_ammo);
  28.             if(ammo::Info[playerid][ammo::count][slot] == p_ammo) {
  29.                 if(!ammo::IsBetweenDistancePlayers(playerid, damagedid, 1.0)) {
  30.                     ammo::Info[playerid][ammo::warns][slot] ++;
  31.                     if(ammo::Info[playerid][ammo::warns][slot] >= 5 && ammo::Info[playerid][ammo::warns][slot] < 8) {
  32.                         if(!ammo::Info[playerid][ammo::detect]) {
  33.                             ammo::Info[playerid][ammo::detect] = true ;
  34.                             GetPlayerName(playerid, player, 24), GetWeaponName(weaponid, weapon, 28);
  35.                             format(shandle, sizeof shandle, "*(AC) %s[%i][%s] использует чит. ( Бесконечные патроны )",
  36.                             player, playerid, weapon), sendToAdmin(shandle);
  37.                         }
  38.                     } else if(ammo::Info[playerid][ammo::warns][slot] >= 8) {
  39.                         GetPlayerName(playerid, player, 24), GetWeaponName(weaponid, weapon, 28);
  40.                         format(shandle, sizeof shandle, "*(AC) %s[%i][%s] был кикнут за использование читов. ( Бесконечные патроны )",
  41.                         player, playerid, weapon), sendToAdmin(shandle);
  42.                         SendClientMessage(playerid, 0xFF6347AA, "*(AC) Вы были кикнуты! Причина: Бесконечные патроны"),
  43.                         Kick(playerid);
  44.                        
  45.                         ammo::Info[playerid][ammo::detect] = false ;
  46.                         ammo::Info[playerid][ammo::count][slot] = 0;
  47.                         ammo::Info[playerid][ammo::warns][slot] = 0;
  48.                        
  49.                         return 0 ;
  50.                     }
  51.                 }
  52.             } else {
  53.                 ammo::Info[playerid][ammo::detect] = false ;
  54.                 ammo::Info[playerid][ammo::warns][slot] = 0 ;
  55.                 ammo::Info[playerid][ammo::count][slot] = p_ammo;
  56.             }
  57.         }
  58.         return CallLocalFunction("ammo_OnPlayerGiveDamage", "iifi", playerid, damagedid, amount, weaponid) ;
  59.     }
  60.    
  61.     stock sendToAdmin(const msg[], color=0xFF6347AA) {
  62.         #if defined foreach
  63.             foreach(new adminid : Player)
  64.         #else
  65.             for(new adminid; adminid < MAX_PLAYERS; adminid++)
  66.         #endif
  67.         {
  68.             if(IsPlayerAdmin(adminid)) {
  69.                 Send(adminid, color, msg);
  70.             }
  71.         }
  72.     }
  73.    
  74.     stock ammo::IsBetweenDistancePlayers(playerid, damagedid, Float:dist) {
  75.         new Float: pos[ 3 ];
  76.         GetPlayerPos( damagedid, pos[ 0 ], pos[ 1 ], pos[ 2 ] );
  77.         if( dist >= GetPlayerDistanceFromPoint(playerid, pos[ 0 ], pos[ 1 ], pos[ 2 ]) )
  78.             return true ;
  79.  
  80.         return false ;
  81.     }
  82.    
  83.     stock ammo::getWeaponSlot( weaponid ) {
  84.         switch( weaponid ) {
  85.             case 0, 1       : return 0;
  86.             case 2..9       : return 1;
  87.             case 10..15     : return 10;
  88.             case 16..18,39  : return 8;
  89.             case 22..24     : return 2;
  90.             case 25..27     : return 3;
  91.             case 28,29,32   : return 4;
  92.             case 30,31      : return 5;
  93.             case 33,34      : return 6;
  94.             case 35..38     : return 7;
  95.             case 40         : return 12;
  96.             case 41..43     : return 9;
  97.             case 44..46     : return 11;
  98.         }
  99.         return 0;
  100.     }
  101.    
  102.    
  103. // Hooks
  104.     #if defined _ALS_OnPlayerGiveDamage
  105.         #undef OnPlayerGiveDamage
  106.     #else
  107.         #define _ALS_OnPlayerGiveDamage
  108.     #endif
  109.     #define OnPlayerGiveDamage ammo::OnPlayerGiveDamage
  110.     forward ammo::OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
  111.    
  112. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement