Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Script: Античит на бесконечные патроны
- By: MacMailler
- */
- #if !defined _samp_included
- #error Please include "samp.inc"
- #endif
- #if !defined AMMO_INC
- #define AMMO_INC
- #define ammo:: ammo_
- #define valid_w<%0> (%0>=22&&%0<=42)
- enum ammo::enum {
- bool: ammo::detect,
- ammo::count[ 13 ],
- ammo::warns[ 13 ]
- };
- static ammo::Info[ MAX_PLAYERS ][ ammo::enum ];
- static shandle[144], player[24], weapon[28];
- public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid) {
- if(valid_w<weaponid>) {
- new p_ammo, slot = ammo::getWeaponSlot(weaponid);
- GetPlayerWeaponData(playerid, slot, weaponid, p_ammo);
- if(ammo::Info[playerid][ammo::count][slot] == p_ammo) {
- if(!ammo::IsBetweenDistancePlayers(playerid, damagedid, 1.0)) {
- ammo::Info[playerid][ammo::warns][slot] ++;
- if(ammo::Info[playerid][ammo::warns][slot] >= 5 && ammo::Info[playerid][ammo::warns][slot] < 8) {
- if(!ammo::Info[playerid][ammo::detect]) {
- ammo::Info[playerid][ammo::detect] = true ;
- GetPlayerName(playerid, player, 24), GetWeaponName(weaponid, weapon, 28);
- format(shandle, sizeof shandle, "*(AC) %s[%i][%s] использует чит. ( Бесконечные патроны )",
- player, playerid, weapon), sendToAdmin(shandle);
- }
- } else if(ammo::Info[playerid][ammo::warns][slot] >= 8) {
- GetPlayerName(playerid, player, 24), GetWeaponName(weaponid, weapon, 28);
- format(shandle, sizeof shandle, "*(AC) %s[%i][%s] был кикнут за использование читов. ( Бесконечные патроны )",
- player, playerid, weapon), sendToAdmin(shandle);
- SendClientMessage(playerid, 0xFF6347AA, "*(AC) Вы были кикнуты! Причина: Бесконечные патроны"),
- Kick(playerid);
- ammo::Info[playerid][ammo::detect] = false ;
- ammo::Info[playerid][ammo::count][slot] = 0;
- ammo::Info[playerid][ammo::warns][slot] = 0;
- return 0 ;
- }
- }
- } else {
- ammo::Info[playerid][ammo::detect] = false ;
- ammo::Info[playerid][ammo::warns][slot] = 0 ;
- ammo::Info[playerid][ammo::count][slot] = p_ammo;
- }
- }
- return CallLocalFunction("ammo_OnPlayerGiveDamage", "iifi", playerid, damagedid, amount, weaponid) ;
- }
- stock sendToAdmin(const msg[], color=0xFF6347AA) {
- #if defined foreach
- foreach(new adminid : Player)
- #else
- for(new adminid; adminid < MAX_PLAYERS; adminid++)
- #endif
- {
- if(IsPlayerAdmin(adminid)) {
- Send(adminid, color, msg);
- }
- }
- }
- stock ammo::IsBetweenDistancePlayers(playerid, damagedid, Float:dist) {
- new Float: pos[ 3 ];
- GetPlayerPos( damagedid, pos[ 0 ], pos[ 1 ], pos[ 2 ] );
- if( dist >= GetPlayerDistanceFromPoint(playerid, pos[ 0 ], pos[ 1 ], pos[ 2 ]) )
- return true ;
- return false ;
- }
- stock ammo::getWeaponSlot( weaponid ) {
- switch( weaponid ) {
- case 0, 1 : return 0;
- case 2..9 : return 1;
- case 10..15 : return 10;
- case 16..18,39 : return 8;
- case 22..24 : return 2;
- case 25..27 : return 3;
- case 28,29,32 : return 4;
- case 30,31 : return 5;
- case 33,34 : return 6;
- case 35..38 : return 7;
- case 40 : return 12;
- case 41..43 : return 9;
- case 44..46 : return 11;
- }
- return 0;
- }
- // Hooks
- #if defined _ALS_OnPlayerGiveDamage
- #undef OnPlayerGiveDamage
- #else
- #define _ALS_OnPlayerGiveDamage
- #endif
- #define OnPlayerGiveDamage ammo::OnPlayerGiveDamage
- forward ammo::OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement