diff --git a/pawno/include/anticheat/global.inc b/pawno/include/anticheat/global.inc index 8ca83d7..e80d9af 100644 --- a/pawno/include/anticheat/global.inc +++ b/pawno/include/anticheat/global.inc @@ -36,8 +36,8 @@ #define MAX_CLASSES ( 300 ) #endif -#if !defined MAX_WEAPONS - #define MAX_WEAPONS ( 55 ) +#if !defined AC_MAX_WEAPONS + #define AC_MAX_WEAPONS ( 55 ) #endif // Variables (Global) @@ -239,6 +239,7 @@ stock // Forwards (Global) public OnPlayerCheatDetected( playerid, detection ); +public OnPlayerDamagePlayer( playerid, damagedid, Float: amount, weaponid, bodypart ); // Functions (Global) @@ -266,3 +267,14 @@ stock ac_IsPointInArea( Float: X, Float: Y, Float: minx, Float: maxx, Float: min stock Float: ac_PointDistance( Float: X, Float: Y, Float: dstX, Float: dstY ) return ( ( X - dstX ) * ( X - dstX ) ) + ( ( Y - dstY ) * ( Y - dstY ) ); + +stock Float: ac_GetDistanceBetweenPlayers( iPlayer1, iPlayer2, &Float: fDistance = Float: 0x7F800000 ) +{ + static + Float: fX, Float: fY, Float: fZ; + + if( GetPlayerVirtualWorld( iPlayer1 ) == GetPlayerVirtualWorld( iPlayer2 ) && GetPlayerPos( iPlayer2, fX, fY, fZ ) ) + fDistance = GetPlayerDistanceFromPoint( iPlayer1, fX, fY, fZ ); + + return fDistance; +} diff --git a/pawno/include/anticheat/hooks.inc b/pawno/include/anticheat/hooks.inc index f13e8f4..35d9ee6 100644 --- a/pawno/include/anticheat/hooks.inc +++ b/pawno/include/anticheat/hooks.inc @@ -71,7 +71,7 @@ p_FlyHacksWarns { playerid } = 3; p_cbugWarns { playerid } = 0; - for ( new i = 0; i < MAX_WEAPONS; i++ ) + for ( new i = 0; i < AC_MAX_WEAPONS; i++ ) p_PlayerHasWeapon [ playerid ] { i } = false; } @@ -114,7 +114,7 @@ new weaponid = mAvailableSpawns[ p_SelectedClassID[ playerid ] ] [ E_WEAPONS ] [ i ]; - if( weaponid != -1 && weaponid < MAX_WEAPONS ) + if( weaponid != -1 && weaponid < AC_MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weaponid } = true; } @@ -151,7 +151,7 @@ new customKiller = GetPVarInt( playerid, "KillerID" ); - OnPlayerDeathEx( playerid, customKiller != playerid ? customKiller : INVALID_PLAYER_ID, GetPVarInt( playerid, "WeaponID" ), 3.3, 3 ); + CallRemoteFunction( "OnPlayerDeathEx", "ddfd", playerid, customKiller != playerid ? customKiller : INVALID_PLAYER_ID, GetPVarInt( playerid, "WeaponID" ), 3.3, 3 ); DeletePVar( playerid, "KillerID" ); DeletePVar( playerid, "WeaponID" ); @@ -164,7 +164,7 @@ p_LastDamageIssuer[ playerid ] = INVALID_PLAYER_ID, p_LastWeaponIssuer[ playerid ] = 51; p_acSpawned{ playerid } = false; // They're dead! - OnPlayerDeathEx( playerid, p_LastDamageIssuer[ playerid ], p_LastWeaponIssuer[ playerid ], 3.3, 3 ); + CallRemoteFunction( "OnPlayerDeathEx", "ddfd", playerid, p_LastDamageIssuer[ playerid ], p_LastWeaponIssuer[ playerid ], 3.3, 3 ); } // General @@ -235,11 +235,13 @@ if( ( p_PlayerHealth[ playerid ] [ E_POINTS ] -= tmp_amount ) < 0.0 ) { p_acSpawned{ playerid } = false; // They're dead! - OnPlayerDeathEx( playerid, issuerid, weaponid, amount, bodypart ); + CallRemoteFunction( "OnPlayerDeathEx", "ddfd", playerid, issuerid, weaponid, amount, bodypart ); } SetPlayerArmour( playerid, p_PlayerArmour[ playerid ] [ E_POINTS ] ); SetPlayerHealth( playerid, p_PlayerHealth[ playerid ] [ E_POINTS ] ); + + CallRemoteFunction( "OnPlayerDamagePlayer", "ddfdd", issuerid, playerid, amount, weaponid, bodypart ); } } else @@ -261,7 +263,7 @@ if( ( p_PlayerHealth[ playerid ] [ E_POINTS ] -= tmp_amount ) <= ( weaponid == 37 ? 0.99999 : 0.0 ) ) { p_acSpawned{ playerid } = false; // They're dead! if ( weaponid == 37 ) SetPlayerHealth( playerid, -1 ); - OnPlayerDeathEx( playerid, issuerid, weaponid, amount, bodypart ); + CallRemoteFunction( "OnPlayerDeathEx", "ddfd", playerid, issuerid, weaponid, amount, bodypart ); } } } @@ -319,7 +321,7 @@ { new Float: tmp, - Float: distance = GetDistanceBetweenPlayers( playerid, damagedid ), // Calc distance between players + Float: distance = ac_GetDistanceBetweenPlayers( playerid, damagedid ), // Calc distance between players Float: tmp_amount = amount // this amount is extremely unreliable ; //printf("Proposed dmg %f kinda %f (min: %f, max: %f, rng: %f)", amount, tmp_amount, GetWeaponMinRange( weaponid ), GetWeaponMaxRange( weaponid ), distance ); @@ -340,11 +342,13 @@ if( ( p_PlayerHealth[ damagedid ] [ E_POINTS ] -= tmp_amount ) < 0.0 ) { p_acSpawned{ damagedid } = false; // They're dead! - OnPlayerDeathEx( damagedid, playerid, weaponid, amount, bodypart ); + CallRemoteFunction( "OnPlayerDeathEx", "ddfd", damagedid, playerid, weaponid, amount, bodypart ); } SetPlayerArmour( damagedid, p_PlayerArmour[ damagedid ] [ E_POINTS ] ); SetPlayerHealth( damagedid, p_PlayerHealth[ damagedid ] [ E_POINTS ] ); + + CallRemoteFunction( "OnPlayerDamagePlayer", "ddfdd", playerid, damagedid, amount, weaponid, bodypart ); } } diff --git a/pawno/include/anticheat/player.inc b/pawno/include/anticheat/player.inc index 511116a..4185580 100644 --- a/pawno/include/anticheat/player.inc +++ b/pawno/include/anticheat/player.inc @@ -57,7 +57,7 @@ new p_LastWeaponIssuer [ MAX_PLAYERS ], // Weapon Hacks - bool: p_PlayerHasWeapon [ MAX_PLAYERS ] [ MAX_WEAPONS char ], + bool: p_PlayerHasWeapon [ MAX_PLAYERS ] [ AC_MAX_WEAPONS char ], //p_PlayerWeaponUpdateTime [ MAX_PLAYERS ], p_SelectedClassID [ MAX_PLAYERS ], diff --git a/pawno/include/anticheat/weapon.inc b/pawno/include/anticheat/weapon.inc index 7dec931..de2d158 100644 --- a/pawno/include/anticheat/weapon.inc +++ b/pawno/include/anticheat/weapon.inc @@ -33,10 +33,10 @@ stock AC_GivePlayerWeapon( playerid, weaponid, ammo ) { //p_PlayerWeaponUpdateTime[ playerid ] = GetTickCount( ) + 2000; - - if( weaponid < MAX_WEAPONS ) + + if( weaponid < AC_MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weaponid } = true; - + return GivePlayerWeapon( playerid, weaponid, ammo ); } @@ -51,12 +51,12 @@ stock AC_GivePlayerWeapon( playerid, weaponid, ammo ) stock AC_ResetPlayerWeapons( playerid ) { - new + new bReset = ResetPlayerWeapons( playerid ); //p_PlayerWeaponUpdateTime[ playerid ] = GetTickCount( ) + 2000; - for ( new i = 0; i < MAX_WEAPONS; i++ ) + for ( new i = 0; i < AC_MAX_WEAPONS; i++ ) p_PlayerHasWeapon[ playerid ] { i } = false; return bReset; @@ -73,9 +73,9 @@ stock AC_ResetPlayerWeapons( playerid ) stock AC_SetSpawnInfo( playerid, team, skin, Float: x, Float: y, Float: z, Float: Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo ) { - if ( weapon1 != -1 && weapon1 < MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon1 } = true; - if ( weapon2 != -1 && weapon2 < MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon2 } = true; - if ( weapon3 != -1 && weapon3 < MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon3 } = true; + if ( weapon1 != -1 && weapon1 < AC_MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon1 } = true; + if ( weapon2 != -1 && weapon2 < AC_MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon2 } = true; + if ( weapon3 != -1 && weapon3 < AC_MAX_WEAPONS ) p_PlayerHasWeapon[ playerid ] { weapon3 } = true; return SetSpawnInfo( playerid, team, skin, x, y, z, Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo ); } @@ -91,7 +91,7 @@ stock AC_SetSpawnInfo( playerid, team, skin, Float: x, Float: y, Float: z, Float stock AC_AddPlayerClass( skin, Float: x, Float: y, Float: z, Float: Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo ) { - new + new classid = Iter_Free(classes); if( classid != -1 ) @@ -121,7 +121,7 @@ stock AC_AddPlayerClass( skin, Float: x, Float: y, Float: z, Float: Angle, weapo stock AC_AddPlayerClassEx( teamid, skin, Float:x, Float:y, Float:z, Float:Angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo ) { - new + new classid = Iter_Free(classes); if( classid != -1 ) @@ -151,12 +151,12 @@ stock AC_AddPlayerClassEx( teamid, skin, Float:x, Float:y, Float:z, Float:Angle, stock AC_CreateDynamicPickup( modelid, type, Float: x, Float: y, Float: z, worldid = -1, interiorid = -1, playerid = -1, Float: streamdistance = 100.0 ) { - new + new id = CreateDynamicPickup( modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance ); if( type == 2 || type == 3 || type == 15 || type == 22 ) { - for( new i = 0; i < MAX_WEAPONS; i ++ ) + for( new i = 0; i < AC_MAX_WEAPONS; i ++ ) if( GetWeaponModel( i ) == modelid ) SetGVarInt( "ac_WeaponPickup", i, id ); } @@ -178,7 +178,7 @@ stock vWeaponHackCheck( playerid, keys ) new iWeapon = GetPlayerWeapon( playerid ); - if( iWeapon > -1 && iWeapon < MAX_WEAPONS ) + if( iWeapon > -1 && iWeapon < AC_MAX_WEAPONS ) { if( !p_PlayerHasWeapon[ playerid ] { iWeapon } && ( iWeapon != 0 && iWeapon != 40 ) ) { CallLocalFunction( "OnPlayerCheatDetected", "dd", playerid, CHEAT_TYPE_WEAPON ); @@ -192,7 +192,7 @@ stock vWeaponHackCheck( playerid, keys ) { if( iTicks > p_PlayerWeaponUpdateTime[ playerid ] ) { - new + new iWeapon, iAmmo; for( new iSlot = 0; iSlot != 13; iSlot++ ) @@ -207,4 +207,4 @@ stock vWeaponHackCheck( playerid, keys ) } p_PlayerWeaponUpdateTime[ playerid ] = iTicks + 750; } -}*/ \ No newline at end of file +}*/