Code
Hope you can all learn something from this, or use it to your advantage.
Aimbot Detection
Weps
Esp/bones
Weapon data
Game AI Weapon Data
Thanks!
Aimbot Detection
Code:
//---------------------------------------------------------------------------- // AimBot Detector interface /// /// @fn void EnableAimBotDetector(); /// Explicity Enable the AimBotDetector /// <p> /// GB_DllExport void EnableAimBotDetector(); /// /// @fn void EnableAimBotDetector(size_t historyTimeLength, float historyRateMax); /// Enable the AimBotDetector /// <p> /// Allows manual configuration and enabling of AimBotDetector when using the /// manual Connect call. Consult your GameBlocks support team for appropriate values. /// @param historyTimeLength Length in seconds of per player movement history. /// @param historyRateMax Rate in seconds for how often detector will store player frame data /// GB_DllExport void EnableAimBotDetector(size_t historyTimeLength, float historyRateMax); /// Explicitly disable the AimBotDetector /// <p> /// Note that the detector stores internal game state, and it isn't intended /// to be toggled off and on with accurate results. This function is provided for /// testing purposes. GB_DllExport void AimBotDisableDetector(); /// Enables sending of Aimbot verification data for a specific player. /// <p> /// SetAimBotDetectorDebugPlayer is used during the final integration verification /// phase so that the GameBlocks team can verify the incoming aimbot data. /// This should only be enabled while tuning and verifying the Aimbot integration /// with the GameBlocks team. GB_DllExport void SetAimBotDetectorDebugPlayer(const GBPublicPlayerId & playerId); /// Marks the beginning of a frame for AimBotDetector. /// <p> /// This must be called once per frame when using the AimBotDetector before /// calling AimBotDetector_Add() or AimBotDetector_EndFrame() GB_DllExport void AimBotDetector_BeginFrame(); /// Adds a frame of data for a given player. /// <p> /// Must be called once per frame, per active player. Do not call for players /// which are not currently spawned or in some other way not part of the /// active game world. Must be called after AimBotDetector_BeginFrame() /// and before AimBotDetector_EndFrame() /// @param playerId Unique player identifier /// @param locX Player center X /// @param locY Player center Y /// @param locZ Player center Z /// @param viewLocX Player camera center X /// @param viewLocY Player camera center Y /// @param viewLocZ Player camera center Z /// @param dirX Player camera direction X /// @param dirY Player camera direction Y /// @param dirZ Player camera direction Z GB_DllExport void AimBotDetector_Add(const GBPublicPlayerId & playerId, float locX, float locY, float locZ, float viewLocX,float viewLocY,float viewLocZ,float dirX, float dirY, float dirZ); /// Marks the end of a frame for AimBotDetector. /// <p> /// This must be called once per frame when using the AimBotDetector after /// calling AimBotDetector_BeginFrame() and AimBotDetector_Add() GB_DllExport void AimBotDetector_EndFrame(); /// Triggers the sending of a packet of AimBotDetector data to the GameBlocks /// server. /// <p> /// This function is used by the helper Event_AimBotDetect_Send() and should /// not be called explicitly by the client. /// @param sourceId Unique Source Id /// @param playerId Unique player identifier of aggressor /// @param targetId Unique player identifier for target EGBClientError AimBotDetector_Send(const GBPublicSourceId & sourceId, const GBPublicPlayerId & playerId, const GBPublicPlayerId & targetId);
Code:
//---------------------------------------------------------------------------- // WeaponCheat Detector interface /// /// @fn void EnableWeaponCheatDetector(); /// Enable the WeaponCheatDetector /// <p> /// This gets called automatically if the config-based Connect call is used. /// This can also be called manually if the manual Connect call is used to /// enable the detector using default values. /// GB_DllExport void EnableWeaponCheatDetector(); /// /// @fn void EnableWeaponCheatDetector(size_t sampleCount); /// Enable the WeaponCheatDetector /// <p> /// Allows manual configuration and enabling of WeaponCheatDetector when using the /// manual Connect call. Consult your GameBlocks support team for appropriate values. /// @param sampleCount Number of weapon events to store and send. /// GB_DllExport void EnableWeaponCheatDetector(size_t sampleCount); /// /// @fn void WeaponCheatDetector_Add(const GBPublicPlayerId & playerId, int weaponId, bool didHit, float dist, int bodyPart); /// Add the information for a weapon fired event for processing. /// <p> /// Call this every time a weapon impact occurs. /// @param playerId Unique player identifier of aggressor /// @param weaponId Unique Weapon Identifier /// @param didHit True if weapon hit a target (player or AI), false if weapon /// missed (environmental impact or other). /// @param dist Distance to impacted object. /// @param bodyPart Id of body part which was hit. -1 if not body part was hit. /// Breaking up your targets into sections identified by bodyPart allows /// for higher fidelity pattern detection based on Aim consistency analysis. /// GB_DllExport void WeaponCheatDetector_Add(const GBPublicPlayerId & playerId, int weaponId, bool didHit, float dist, int bodyPart); /// Triggers the sending of a packet of WeaponCheatDetector data to the GameBlocks /// server. /// <p> /// This function is used by the helper Event_WeaponCheatDetect_Send() and should /// not be called explicitly by the client. Note this function does nothing /// if playerId == targetId. /// @param sourceId Unique Source Id /// @param playerId Unique player identifier of aggressor EGBClientError WeaponCheatDetector_Send(const GBPublicSourceId & sourceId, const GBPublicPlayerId & playerId);
Code:
if (fp::GetBonePosition(pSold->m_boneCollisionComponent, 45, &BonePosition))
fp::W2S(BonePosition, &Out);
float BoxEspX = 1, BoxEspY = 1;
char State[255];
sprintf(State, "%d", pSold->Pose());//without "char" I received a crash in bf4 ((
if (strcmp(State, "0") == 0)
{
BoxEspX = 0.4 / (Distance / 1000 * FovState); //стоя
BoxEspY = 0.8 / (Distance / 1000 * FovState);
}
if (strcmp(State, "1") == 0)
{
BoxEspX = 0.4 / (Distance / 1000 * FovState);//сидя
BoxEspY = 0.6 / (Distance / 1000 * FovState);
}
if (strcmp(State, "2") == 0)
{
BoxEspX = 0.7 / (Distance / 1000 * FovState);// лежа
BoxEspY = 0.4 / (Distance / 1000 * FovState);
}
if (bCheckMenu[6] && !GetVisible)Manager->DrawBorder(Out.x - BoxEspX / 2, Out.y + 6, BoxEspX, BoxEspY, 1, Manager->retColorCode(iSlideCol[0])); // Draw Enemy Bounding Box
if (bCheckMenu[6] && GetVisible)Manager->DrawBorder(Out.x - BoxEspX / 2, Out.y + 6, BoxEspX, BoxEspY, 1, Manager->retColorCode(iSlideCol[17])); // Draw Enemy Visible Bounding Box
Code:
SoldierWeaponData* pSWD = reinterpret_cast< SoldierWeaponData* >( MyClientSoldierWeapon->m_data );
Code:
wClass = pSWD->m_weaponClass; //wType=pSWD->m_animBaseSet; weponname = pSWD->m_damageGiverName.GetString();
Code:
#ifndef SoldierWeaponData_H_
#define SoldierWeaponData_H_
namespace fb
{
class __declspec(align(16)) fb::SoldierWeaponData :
public fb::WeaponEntityData //0x00
{
public:
//enumeration is wrong
fb::PickupSettingsData m_pickupSettings;//0x90
fb::Vec3 m_interactionOffset;//0xB0
fb::CustomizationAccessoryPivots m_customizationAccessoryPivots;//0xC0
fb::String m_damageGiverName;//0x110
fb::RefArray<fb::WeaponZoomLevelData> m_zoomLevels;//0x114
fb::SoldierAimingSimulationData* m_aimingController;//0x11C
fb::FirstPersonCameraData* m_firstPersonCamera;//0x120
fb::HudData m_hud;//0x124
fb::WeaponAnimBaseSetEnum m_animBaseSet;//0x174
fb::QuickThrowTypeEnum m_quickThrowType;//0x178
fb::SoldierWeaponBlueprint* m_soldierWeaponBlueprint;//0x17C
fb::String m_persistenceId;//0x180
// fb::RefArray<fb::SocketData> m_socketsWithoutUnlocks;//0x184
__int32 m_secondaryActionInputAction;//0x18C
fb::CtrRefBase m_voiceOverInfo;//0x190
float m_weaponFloatParam;//0x194
float m_maxRangeMeterDistance;//0x198
bool m_hideWhenOutOfAmmo;//0x19C
bool m_allowSwitchingToWeaponOutOfAmmo;//0x19D
bool m_allowSwitchingToWeaponReloading;//0x19E
bool m_switchToPrimaryWhenOutOfAmmo;//0x19F
bool m_fireAndSwitchBackToPrevSupported;//0x1A0
bool m_allowSwitchingToWeaponInVehicles;//0x1A1
bool m_allowSwitchingToWeaponInWater;//0x1A2
bool m_lowerOnOwnTeam;//0x1A3
bool m_redeployWhenSwitchingWeaponStates;//0x1A4
bool m_useQuickThrowOnAutomaticSwitchback;//0x1A5
bool m_enableBreathControl;//0x1A6
bool m_canBeInSupportedShooting;//0x1A7
bool m_useDetailedRangeMeterQuery;//0x1A8
bool m_isSilenced;//0x1A9
};//Size 0x000001B0
};
#endif
Code:
#ifndef WeaponEntityData_H_
#define WeaponEntityData_H_
namespace fb
{
class __declspec(align(16)) WeaponEntityData :
public fb::GameComponentEntityData //0x0
{
public:
fb::WeaponClassEnum m_weaponClass;//0x70
fb::Arrray<fb::WeaponStateData> m_weaponStates;//0x74
WeaponFiringData* m_weaponFiring;//0x78
ZeroingWeaponData* m_customWeaponType;//0x7c
fb::BFAIWeaponData* m_aIData;//0x80
char _pad_0x84[0xc]; //0x84
};// Size 0x00000090
};
#endif
Code:
#ifndef BFAIWeaponData_H_
#define BFAIWeaponData_H_
namespace fb
{
struct fb::BFAIWeaponData :
public fb::GameAIWeaponData
{
fb::FiringWeaponClass m_firingWeaponClass;
fb::VoPrimaryFireType m_voPrimaryFireType;
float m_weaponRange;
float m_minimumUsageDistance;
float m_maximumUsageDistance;
fb::PreferredRange* m_preferredRange;
fb::PreferredRange* m_indoorPreferredRange;
fb::PreferredRange* m_outdoorPreferredRange;
fb::FiringIntervalPattern *m_firingIntervalPattern;
fb::BurstIntervalPattern* m_burstIntervalPattern;
fb::SprayPattern* m_sprayPattern;
fb::VehicleAimerSettings* m_vehicleAimerSettings;
fb::VisionModifier* m_visionModifier;
fb::HearingModifier* m_hearingModifier;
fb::TargetModifier* m_targetModifier;
fb::VehicleInaccuracySettings* m_vehicleInaccuracySettings;
fb::SuppressedBehavior* m_suppressedBehavior;
fb::DamageModifier* m_damageModifier;
fb::WeaponRestrictions* m_friendlyWeaponRestrictions;
fb::SpecialBehavior* m_specialBehavior;
fb::WeaponHitProbability * m_humanTargetHitProbability;
fb::ValidAgainst m_validAgainst;
};
};
#endif
Thanks!