| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350 |
- /* Anti-Cheat v2.0
- Slice (weapon-config.inc data from weapons.dat)
- Jingles (modified and added custom checks)
- */
- // add autocbug
- #include <YSI\y_hooks>
- new PLoss; // Temp. var to toggle packet loss function.
- // From 3DTryg Funcs By AbyssMorgan (http://forum.sa-mp.com/showthread.php?t=591010)
- #define GetRotationFor2Point2D(%0,%1,%2,%3,%4) (CompRotationFloat((atan2((%3)-(%1),(%2)-(%0))-90.0),(%4)))
- #define GetDistanceBetweenPoints3D(%1,%2,%3,%4,%5,%6) VectorSize((%1)-(%4),(%2)-(%5),(%3)-(%6))
- stock Float:CompRotationFloat(Float:rotation,&Float:crotation=0.0){
- crotation = rotation;
- while(crotation < 0.0) crotation += 360.0;
- while(crotation >= 360.0) crotation -= 360.0;
- return crotation;
- }
- //new code version support 3D made by Abyss Morgan
- stock bool:GetRotationFor2Point3D(Float:x,Float:y,Float:z,Float:tx,Float:ty,Float:tz,&Float:rx,&Float:rz){
- new Float:radius = GetDistanceBetweenPoints3D(x,y,z,tx,ty,tz);
- if(radius <= 0.0) return false;
- CompRotationFloat(-(acos((tz-z)/radius)-90.0),rx);
- CompRotationFloat((atan2(ty-y,tx-x)-90.0),rz);
- return true;`
- }
- // Made by Fusez
- stock Float:GetPlayerPacketloss(playerid) {
- if(PLoss == 1) return 0.0;
- if(!IsPlayerConnected(playerid)) return 0.0;
- new nstats[400+1], nstats_loss[20], start, end;
- GetPlayerNetworkStats(playerid, nstats, sizeof(nstats));
- start = strfind(nstats,"packetloss",true);
- end = strfind(nstats,"%",true,start);
- strmid(nstats_loss, nstats, start+12, end, sizeof(nstats_loss));
- return floatstr(nstats_loss);
- }
- enum E_SHOT_INFO {
- acl_Tick,
- acl_Weapon,
- acl_HitType,
- acl_HitId,
- acl_Hits,
- Float:acl_fPos[3],
- Float:acl_fTargetPos[3],
- Float:acl_fOrigin[3],
- Float:acl_fHitPos[3],
- Float:acl_fDistance,
- bool:acl_Valid,
- }
- static ac_LastUpdate[MAX_PLAYERS] = {-1, ...};
- static ac_RejectedHitsIdx[MAX_PLAYERS];
- static ac_iCBugFreeze[MAX_PLAYERS];
- static arrLastBulletData[MAX_PLAYERS][E_SHOT_INFO];
- static ac_LastBulletIdx[MAX_PLAYERS];
- static ac_LastBulletTicks[MAX_PLAYERS][10];
- static ac_LastBulletWeapons[MAX_PLAYERS][10];
- static ac_LastExplosive[MAX_PLAYERS];
- static ac_LastHitTicks[MAX_PLAYERS][10];
- static ac_LastHitWeapons[MAX_PLAYERS][10];
- static ac_LastHitIdx[MAX_PLAYERS];
- static Float:ac_PlayerMaxHealth[MAX_PLAYERS] = {100.0, ...};
- // Max continuous shots.
- static ac_MaxWeaponContShots[] = {
- 0, // 0 - Fist
- 0, // 1 - Brass knuckles
- 0, // 2 - Golf club
- 0, // 3 - Nitestick
- 0, // 4 - Knife
- 0, // 5 - Bat
- 0, // 6 - Shovel
- 0, // 7 - Pool cue
- 0, // 8 - Katana
- 0, // 9 - Chainsaw
- 0, // 10 - Dildo
- 0, // 11 - Dildo 2
- 0, // 12 - Vibrator
- 0, // 13 - Vibrator 2
- 0, // 14 - Flowers
- 0, // 15 - Cane
- 0, // 16 - Grenade
- 0, // 17 - Teargas
- 0, // 18 - Molotov
- 0, // 19 - Vehicle M4 (custom)
- 0, // 20 - Vehicle minigun (custom)
- 0, // 21
- 10, // 22 - Colt 45
- 10, // 23 - Silenced
- 10, // 24 - Deagle
- 10, // 25 - Shotgun
- 20, // 26 - Sawed-off
- 20, // 27 - Spas
- 30, // 28 - UZI
- 30, // 29 - MP5
- 30, // 30 - AK47
- 30, // 31 - M4
- 30, // 32 - Tec9
- 10, // 33 - Cuntgun
- 10, // 34 - Sniper
- 0, // 35 - Rocket launcher
- 0, // 36 - Heatseeker
- 0, // 37 - Flamethrower
- 400, // 38 - Minigun
- 0, // 39 - Satchel
- 0, // 40 - Detonator
- 0, // 41 - Spraycan
- 0, // 42 - Fire extinguisher
- 0, // 43 - Camera
- 0, // 44 - Night vision
- 0, // 45 - Infrared
- 0, // 46 - Parachute
- 0, // 47 - Fake pistol
- 0 // 48 - Pistol whip (custom)
- };
- // The default weapon range (from weapon.dat)
- // Note that due to various bugs, these can be exceeded, but
- // this include blocks out-of-range values.
- static Float:ac_WeaponRange[] = {
- 0.0, // 0 - Fist
- 0.0, // 1 - Brass knuckles
- 0.0, // 2 - Golf club
- 0.0, // 3 - Nitestick
- 0.0, // 4 - Knife
- 0.0, // 5 - Bat
- 0.0, // 6 - Shovel
- 0.0, // 7 - Pool cue
- 0.0, // 8 - Katana
- 0.0, // 9 - Chainsaw
- 0.0, // 10 - Dildo
- 0.0, // 11 - Dildo 2
- 0.0, // 12 - Vibrator
- 0.0, // 13 - Vibrator 2
- 0.0, // 14 - Flowers
- 0.0, // 15 - Cane
- 0.0, // 16 - Grenade
- 0.0, // 17 - Teargas
- 0.0, // 18 - Molotov
- 90.0, // 19 - Vehicle M4 (custom)
- 75.0, // 20 - Vehicle minigun (custom)
- 0.0, // 21
- 35.0, // 22 - Colt 45
- 35.0, // 23 - Silenced
- 35.0, // 24 - Deagle
- 40.0, // 25 - Shotgun
- 35.0, // 26 - Sawed-off
- 40.0, // 27 - Spas
- 35.0, // 28 - UZI
- 45.0, // 29 - MP5
- 70.0, // 30 - AK47
- 90.0, // 31 - M4
- 35.0, // 32 - Tec9
- 100.0, // 33 - Cuntgun
- 320.0, // 34 - Sniper
- 0.0, // 35 - Rocket launcher
- 0.0, // 36 - Heatseeker
- 0.0, // 37 - Flamethrower
- 75.0 // 38 - Minigun
- };
- enum {
- HIT_NO_DAMAGEDID,
- HIT_INVALID_WEAPON,
- HIT_LAST_SHOT_INVALID,
- HIT_MULTIPLE_PLAYERS,
- HIT_MULTIPLE_PLAYERS_SHOTGUN,
- HIT_DYING_PLAYER,
- HIT_SAME_TEAM,
- HIT_UNSTREAMED,
- HIT_INVALID_HITTYPE,
- HIT_BEING_RESYNCED,
- HIT_NOT_SPAWNED,
- HIT_OUT_OF_RANGE,
- HIT_TOO_FAR_FROM_SHOT,
- SHOOTING_RATE_TOO_FAST,
- SHOOTING_RATE_TOO_FAST_MULTIPLE,
- HIT_RATE_TOO_FAST,
- HIT_RATE_TOO_FAST_MULTIPLE,
- HIT_KNIFE_FAILED,
- HIT_TOO_FAR_FROM_ORIGIN,
- HIT_INVALID_DAMAGE,
- HIT_SAME_VEHICLE,
- HIT_OWN_VEHICLE,
- HIT_INVALID_VEHICLE,
- HIT_DISCONNECTED
- }
- // Must be in sync with the enum above
- // Used in debug messages and GetRejectedHit
- stock const g_HitRejectReasons[][] = {
- "None or invalid player shot",
- "Invalid weapon",
- "Last shot invalid",
- "One bullet hit %d players",
- "Hit too many players with shotgun: %d",
- "Hit a dying player",
- "Hit a teammate",
- "Hit someone that can't see you (not streamed in)",
- "Invalid hit type: %d",
- "Hit while being resynced",
- "Hit when not spawned or dying",
- "Hit out of range (%f > %f)",
- "Hit player too far from hit position (dist %f)",
- "Shooting rate too fast: %d (%d samples, max %d)",
- "Shooting rate too fast: %d (%d samples, multiple weapons)",
- "Hit rate too fast: %d (%d samples, max %d)",
- "Hit rate too fast: %d (%d samples, multiple weapons)",
- "The knife kill did not sync",
- "Damage inflicted too far from current position (dist %f)",
- "Invalid weapon damage (%.4f)",
- "Hit a player in the same vehicle",
- "Hit the vehicle you're in",
- "Hit invalid vehicle: %d",
- "Hit a disconnected player ID: %d"
- };
- stock const g_WeaponName[57][59] = {
- {"Fist" }, {"Brass knuckles"}, {"Golf club" },
- {"Nightstick" }, {"Knife" }, {"Bat" },
- {"Shovel" }, {"Pool cue" }, {"Katana" },
- {"Chainsaw" }, {"Purple dildo" }, {"Dildo" },
- {"Vibrator" }, {"Vibrator" }, {"Flowers" },
- {"Cane" }, {"Grenade" }, {"Tear gas" },
- {"Molotov" }, {"Vehicle gun" }, {"Vehicle gun" },
- {"" }, {"Colt 45" }, {"Silenced pistol" },
- {"Deagle" }, {"Shotgun" }, {"Sawn-off shotgun" },
- {"Combat shotgun" }, {"Mac-10" }, {"MP5" },
- {"AK-47" }, {"M4" }, {"Tec-9" },
- {"Cuntgun" }, {"Sniper" }, {"Rocket launcher" },
- {"Heat seeking RPG" }, {"Flamethrower" }, {"Minigun" },
- {"Satchel" }, {"Detonator" }, {"Spraycan" },
- {"Fire extinguisher"}, {"Camera" }, {"Night vision goggles"},
- {"Infrared goggles" }, {"Parachute" }, {"Fake pistol" },
- {"Pistol whip" }, {"Vehicle" }, {"Helicopter blades" },
- {"Explosion" }, {"Car parking" }, {"Drowning" },
- {"Collision" }, {"Splat" }, {"Unknown" }
- };
- stock const ac_ACNames[][] = {
- "Aimbot",
- "(Auto) C-Bug",
- "Silent Aim",
- "Pro-Aim",
- "Range Hacks",
- "Speed Hacks",
- "Vehicle Hacks",
- "Command Spamming",
- "Car Surfing",
- "Ninja Jacking",
- "Ghost Hacks",
- "Name Tags",
- "Airbreaking",
- "Infinite Stamina",
- "Health/Armor Hacks",
- "Dialog Spoofing",
- "Rejected Hits (view-only)",
- "Desync"
- };
- // #define AC_DEBUG
- #define HACKTIMER_INTERVAL 5000
- #define BODY_PART_UNKNOWN 0
- #define WEAPON_UNARMED 0
- #define WEAPON_VEHICLE_M4 19
- #define WEAPON_VEHICLE_MINIGUN 20
- #define WEAPON_PISTOLWHIP 48
- #define WEAPON_HELIBLADES 50
- #define WEAPON_EXPLOSION 51
- #define WEAPON_CARPARK 52
- #define WEAPON_UNKNOWN 55
- #define AC_MAX_REJECTED_HITS 15
- #define AC_MAX_DAMAGE_RANGES 5
- enum e_WeaponDataAC {
- ac_iBulletsFired[46],
- ac_iBulletsHit[46],
- ac_iFakeMiss[46]
- }
- new arrWeaponDataAC[MAX_PLAYERS][e_WeaponDataAC];
- enum e_WeaponData {
- ac_DamageRangeSteps,
- Float:ac_WeaponDamage,
- Float:ac_DamageRangeRanges[AC_MAX_DAMAGE_RANGES],
- Float:ac_DamageRangeValues[AC_MAX_DAMAGE_RANGES]
- }
- new arrWeaponData[55][e_WeaponData];
- // Given in AC_OnRejectedHit
- enum E_REJECTED_HIT {
- acr_iReason,
- acr_iTime,
- acr_iWeaponID,
- acr_szName[MAX_PLAYER_NAME],
- acr_iDamagedID,
- acr_iInfo[3]
- }
- new arrRejectedHitData[MAX_PLAYERS][AC_MAX_REJECTED_HITS][E_REJECTED_HIT];
- new ac_iSilentAimWarnings[MAX_PLAYERS],
- ac_iSilentAimWarnings2[MAX_PLAYERS],
- ac_iSilentAimWarnings3[MAX_PLAYERS],
- ac_iSilentAimTick[MAX_PLAYERS],
- ac_iGhostHackWarnings[MAX_PLAYERS],
- ac_iPlayerKeySpam[MAX_PLAYERS],
- ac_iVehicleDriverID[MAX_PLAYERS],
- ac_iLastVehicleID[MAX_PLAYERS],
- ac_TotalShots[MAX_PLAYERS],
- ac_HitsIssued[MAX_PLAYERS],
- bool:ac_IsDead[MAX_PLAYERS],
- bool:ac_BeingResynced[MAX_PLAYERS],
- iShotVariance = 5;
- ptask HackCheck_Micro[1000](playerid) {
-
- if(PlayerInfo[playerid][pAdmin] < 2)
- {
- if(IsSpawned[playerid] && gPlayerLogged{playerid} && playerTabbed[playerid] < 1) {
- if(ac_ACToggle[AC_AIRBREAKING] && AC_AirBreaking(playerid)) AC_Process(playerid, AC_AIRBREAKING);
- /* Reset arrPAntiCheat bits that were set in callback wrappers */
- Bit_Off(arrPAntiCheat[playerid], ac_bitValidPlayerPos);
- Bit_Off(arrPAntiCheat[playerid], ac_bitValidSpectating);
- }
- }
- }
- ptask HackCheck[HACKTIMER_INTERVAL](playerid) {
- DeletePVar(playerid, "ACCooldown");
- arrAntiCheat[playerid][ac_iCommandCount] = 0;
- ac_iPlayerKeySpam[playerid] = 0;
- arrAntiCheat[playerid][ac_iSpeed] = GetPlayerSpeed(playerid);
- ac_iSilentAimWarnings[playerid] = 0;
- ac_iSilentAimWarnings2[playerid] = 0;
- ac_iSilentAimWarnings3[playerid] = 0;
- ac_iGhostHackWarnings[playerid] = 0;
- if(PlayerInfo[playerid][pAdmin] < 2)
- {
- if(IsSpawned[playerid] && gPlayerLogged{playerid} && playerTabbed[playerid] < 1) {
- if(ac_ACToggle[AC_CARSURFING] && AC_IsPlayerSurfing(playerid)) AC_Process(playerid, AC_CARSURFING, INVALID_PLAYER_ID);
- if(ac_ACToggle[AC_HEALTHARMORHACKS] && AC_PlayerHealthArmor(playerid)) AC_Process(playerid, AC_HEALTHARMORHACKS, INVALID_PLAYER_ID);
- if(ac_ACToggle[AC_INFINITESTAMINA] && AC_InfiniteStamina(playerid)) AC_Process(playerid, AC_INFINITESTAMINA);
- }
- }
- }
- timer AC_RevivePlayer[5000](playerid) {
- format(szMiscArray, sizeof(szMiscArray), "SYSTEM: %s(%d) has been revived by [SYSTEM]", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), GetPlayerNameEx(playerid));
- Log("logs/system.log", szMiscArray);
- KillEMSQueue(playerid);
- ClearAnimationsEx(playerid);
- SetHealth(playerid, 100);
- }
- timer AC_ResetPVars[2000](playerid, processid) {
- switch(processid) {
- case 0: {
- ac_iLastVehicleID[playerid] = INVALID_VEHICLE_ID;
- }
- case 1: {
- DeletePVar(playerid, "PCMute");
- }
- }
- }
- timer AC_ResetAnim[2000](playerid) {
- ClearAnimationsEx(playerid, 1);
- }
- hook OnGameModeInit() {
-
- for(new i = 1; i < sizeof(ac_ACToggle); ++i) ac_ACToggle[i] = false;
-
- /* Default On: */
- ac_ACToggle[AC_NINJAJACK] = true;
- ac_ACToggle[AC_DIALOGSPOOFING] = true;
- AC_InitWeaponData();
- }
- /*
- CMD:rehashpareas(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- if(!ac_ACToggle[AC_NAMETAGS]) return SendClientMessageEx(playerid, COLOR_GRAD1, "This feature isn't enabled in /system.");
- new iRange;
- if(sscanf(params, "d", iRange)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /resetpareas [range]");
- if(!(0 < iRange < 70)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid range (between 0 and 70).");
- new szData[2];
- szData[0] = STREAMER_AREATYPE_PLAYERAREA; // to make sure we can recognize this as a player area type.
- foreach(new i : Player) {
- foreach(new x : Player) if(!IsPlayerInDynamicArea(x, arrAntiCheat[i][ac_iPlayerAreaID])) ShowPlayerNameTagForPlayer(x, i, false);
- szData[1] = i;
- DestroyDynamicArea(arrAntiCheat[i][ac_iPlayerAreaID]);
- arrAntiCheat[i][ac_iPlayerAreaID] = CreateDynamicSphere(0.0, 0.0, 0.0, iRange);
- AttachDynamicAreaToPlayer(arrAntiCheat[i][ac_iPlayerAreaID], i, 0.0, 0.0, 0.0);
- Streamer_SetArrayData(STREAMER_TYPE_AREA, arrAntiCheat[i][ac_iPlayerAreaID], E_STREAMER_EXTRA_ID, szData, sizeof(szData));
- }
- format(szMiscArray, sizeof(szMiscArray), "%s set the player nametag distance to %d meters.", GetPlayerNameEx(playerid), iRange);
- ABroadCast(COLOR_YELLOW, szMiscArray, 2 );
- return 1;
- }
- */
- /*
- CMD:setnametagdistance(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- new iRange;
- if(sscanf(params, "d", iRange)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /setnametagdistance [range]");
- if(!(0 < iRange < 70)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Invalid range (between 0 and 70).");
- new szData[2];
- szData[0] = STREAMER_AREATYPE_PLAYERAREA; // to make sure we can recognize this as a player area type.
- foreach(new i : Player) {
- szData[1] = i;
- DestroyDynamicArea(arrAntiCheat[i][ac_iPlayerAreaID]);
- arrAntiCheat[i][ac_iPlayerAreaID] = CreateDynamicSphere(0.0, 0.0, 0.0, iRange);
- AttachDynamicAreaToPlayer(arrAntiCheat[i][ac_iPlayerAreaID], i, 0.0, 0.0, 0.0);
- Streamer_SetArrayData(STREAMER_TYPE_AREA, arrAntiCheat[i][ac_iPlayerAreaID], E_STREAMER_EXTRA_ID, szData, sizeof(szData));
- }
- format(szMiscArray, sizeof(szMiscArray), "You set the nametag distance to %d meters.", iRange);
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- return 1;
- }
- */
- hook OnPlayerConnect(playerid) {
- /*
- new szData[2];
- szData[0] = STREAMER_AREATYPE_PLAYERAREA; // to make sure we can recognize this as a player area type.
- szData[1] = playerid;
- arrAntiCheat[playerid][ac_iPlayerAreaID] = CreateDynamicSphere(0.0, 0.0, 0.0, 25.0);
- AttachDynamicAreaToPlayer(arrAntiCheat[playerid][ac_iPlayerAreaID], playerid, 0.0, 0.0, 0.0);
- Streamer_SetArrayData(STREAMER_TYPE_AREA, arrAntiCheat[playerid][ac_iPlayerAreaID], E_STREAMER_EXTRA_ID, szData, sizeof(szData));
- if(ac_ACToggle[AC_NAMETAGS]) {
- foreach(new i : Player) {
- if(!IsPlayerInDynamicArea(playerid, arrAntiCheat[i][ac_iPlayerAreaID])) {
- ShowPlayerNameTagForPlayer(i, playerid, false); // So people don't see the playerid when they shouldn't
- ShowPlayerNameTagForPlayer(playerid, i, false); // So the player doesn't see the others when they shouldn't
- }
- }
- }
- */
- new iTick = GetTickCount();
- arrAntiCheat[playerid][ac_iVehID] = INVALID_VEHICLE_ID;
- arrAntiCheat[playerid][ac_iShots][0] = 0;
- arrAntiCheat[playerid][ac_iShots][1] = 0;
- arrAntiCheat[playerid][ac_fPos][0] = 0;
- arrAntiCheat[playerid][ac_fPos][1] = 0;
- arrAntiCheat[playerid][ac_fPos][2] = 0;
- arrAntiCheat[playerid][ac_fCamPos][0] = 0;
- arrAntiCheat[playerid][ac_fCamPos][1] = 0;
- arrAntiCheat[playerid][ac_fCamPos][2] = 0;
- arrAntiCheat[playerid][ac_fCamPos][3] = 0;
- arrAntiCheat[playerid][ac_fCamPos][4] = 0;
- arrAntiCheat[playerid][ac_fCamPos][5] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][0] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][1] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][2] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][3] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][4] = 0;
- arrAntiCheat[playerid][ac_fCamFVector][5] = 0;
- arrAntiCheat[playerid][ac_fPlayerAngle][0] = 0;
- arrAntiCheat[playerid][ac_fPlayerAngle][1] = 0;
- arrAntiCheat[playerid][ac_iLastTargetID] = INVALID_PLAYER_ID;
- arrAntiCheat[playerid][ac_fAimAccuracy] = 0;
- for(new i; i < AC_MAX; ++i) arrAntiCheat[playerid][ac_iFlags][i] = 0;
- arrAntiCheat[playerid][ac_iCommandCount] = 0;
- //if(IsValidDynamicArea(arrAntiCheat[playerid][ac_iPlayerAreaID])) DestroyDynamicArea(arrAntiCheat[playerid][ac_iPlayerAreaID]);
- arrAntiCheat[playerid][ac_fProbability] = 0;
- arrAntiCheat[playerid][ac_iCheatingIndex][0] = 0;
- arrAntiCheat[playerid][ac_iCheatingIndex][1] = 0;
- arrAntiCheat[playerid][ac_iIsCheating] = false;
- arrAntiCheat[playerid][ac_inTrainingMode] = false;
- Bit_Off(arrPAntiCheat[playerid], ac_bitValidPlayerPos);
- Bit_Off(arrPAntiCheat[playerid], ac_bitValidSpectating);
- ac_LastUpdate[playerid] = iTick;
- ac_PlayerMaxHealth[playerid] = 100.0;
- ac_LastExplosive[playerid] = 0;
- ac_LastBulletIdx[playerid] = 0;
- ac_LastHitIdx[playerid] = 0;
- ac_RejectedHitsIdx[playerid] = 0;
- ac_TotalShots[playerid] = 0;
- ac_HitsIssued[playerid] = 0;
- ac_IsDead[playerid] = false;
- ac_iCBugFreeze[playerid] = 0;
- arrLastBulletData[playerid][acl_Tick] = 0;
- arrLastBulletData[playerid][acl_Weapon] = 0;
- arrLastBulletData[playerid][acl_HitType] = HIT_INVALID_HITTYPE;
- arrLastBulletData[playerid][acl_HitId] = INVALID_PLAYER_ID;
- arrLastBulletData[playerid][acl_fPos][0] = 0;
- arrLastBulletData[playerid][acl_fPos][1] = 0;
- arrLastBulletData[playerid][acl_fPos][2] = 0;
- arrLastBulletData[playerid][acl_fTargetPos][0] = 0;
- arrLastBulletData[playerid][acl_fTargetPos][1] = 0;
- arrLastBulletData[playerid][acl_fTargetPos][2] = 0;
- arrLastBulletData[playerid][acl_fOrigin][0] = 0;
- arrLastBulletData[playerid][acl_fOrigin][1] = 0;
- arrLastBulletData[playerid][acl_fOrigin][2] = 0;
- arrLastBulletData[playerid][acl_fHitPos][0] = 0;
- arrLastBulletData[playerid][acl_fHitPos][1] = 0;
- arrLastBulletData[playerid][acl_fHitPos][2] = 0;
- arrLastBulletData[playerid][acl_fDistance] = 0;
- arrLastBulletData[playerid][acl_Hits] = 0;
- for (new i; i < 46; i++) {
- arrWeaponDataAC[playerid][ac_iBulletsFired][i] = 0;
- arrWeaponDataAC[playerid][ac_iBulletsHit][i] = 0;
- arrWeaponDataAC[playerid][ac_iFakeMiss][i] = 0;
- }
- for (new i; i < sizeof(arrRejectedHitData[]); i++) {
- arrRejectedHitData[playerid][i][acr_iTime] = 0;
- }
- ac_iSilentAimWarnings[playerid] = 0;
- ac_iSilentAimWarnings2[playerid] = 0;
- ac_iSilentAimWarnings3[playerid] = 0;
- ac_iSilentAimTick[playerid] = 0;
- ac_iGhostHackWarnings[playerid] = 0;
- }
- /*
- hook OnPlayerDisconnect(playerid, reason) {
- if(IsValidDynamicArea(arrAntiCheat[playerid][ac_iPlayerAreaID])) DestroyDynamicArea(arrAntiCheat[playerid][ac_iPlayerAreaID]);
- //if(IsValidDynamic3DTextLabel(PlayerLabel[playerid])) DestroyDynamic3DTextLabel(PlayerLabel[playerid]);
- }
- */
- /*
- hook OnPlayerEnterDynamicArea(playerid, areaid) {
- if(ac_ACToggle[AC_NAMETAGS]) {
- new szData[2];
- Streamer_GetArrayData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, szData, sizeof(szData));
- if(szData[0] == STREAMER_AREATYPE_PLAYERAREA) ShowPlayerNameTagForPlayer(playerid, szData[1], 1);
- }
- }
- hook OnPlayerLeaveDynamicArea(playerid, areaid) {
- if(ac_ACToggle[AC_NAMETAGS]) {
- new szData[2];
- Streamer_GetArrayData(STREAMER_TYPE_AREA, areaid, E_STREAMER_EXTRA_ID, szData, sizeof(szData));
- if(szData[0] == STREAMER_AREATYPE_PLAYERAREA) ShowPlayerNameTagForPlayer(playerid, szData[1], 0);
- }
- }
- */
- /*
- hook OnPlayerCommandReceived(playerid, cmdtext[]) {
- arrAntiCheat[playerid][ac_iCommandCount]++;
- switch(arrAntiCheat[playerid][ac_iCommandCount]) {
- case 0 .. 9: {}
- case 10 .. 15: {
- AC_Process(playerid, AC_CMDSPAM, arrAntiCheat[playerid][ac_iCommandCount]);
- return 0;
- }
- default: {
- AC_Process(playerid, AC_CMDSPAM, arrAntiCheat[playerid][ac_iCommandCount]);
- return 0;
- }
- }
- return 1;
- }
- */
- hook OnPlayerUpdate(playerid) {
- if(ac_ACToggle[AC_SPEEDHACKS]) AC_SpeedHacks(playerid);
- if(IsPlayerInAnyVehicle(playerid)){
- if(GetPlayerVehicleID(playerid) != arrAntiCheat[playerid][ac_iVehID]) {
- arrAntiCheat[playerid][ac_iVehID] = INVALID_VEHICLE_ID;
-
- new Float:fPos[3];
- GetPlayerPos(playerid, fPos[0], fPos[1], fPos[2]);
- SetPlayerPos(playerid, fPos[0], fPos[1], fPos[2]+1);
- AC_Process(playerid, AC_VEHICLEHACKS);
- }
- }
- ac_LastUpdate[playerid] = GetTickCount();
- return 1;
- }
- hook OnPlayerKeyStateChange(playerid, newkeys, oldkeys) {
- if(newkeys == KEY_YES) ac_iPlayerKeySpam[playerid]++;
- if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) {
- if(newkeys & KEY_FIRE) {
-
- new weaponid = GetPlayerWeapon(playerid);
- switch (weaponid) {
- case WEAPON_BOMB, WEAPON_SATCHEL: ac_LastExplosive[playerid] = WEAPON_SATCHEL;
- case WEAPON_ROCKETLAUNCHER, WEAPON_HEATSEEKER, WEAPON_GRENADE: ac_LastExplosive[playerid] = weaponid;
- }
- }
- if(newkeys & KEY_CROUCH) {
- if(IsPlayerInAnyVehicle(playerid) || GetPVarType(playerid, "EventToken") || (GetPVarType(playerid, "IsInArena") && PaintBallArena[GetPVarInt(playerid, "IsInArena")][pbExploitPerm] == 1)) return 1;
- new iTick = GetTickCount(),
- iDiff = iTick - arrLastBulletData[playerid][acl_Tick];
- if(arrLastBulletData[playerid][acl_Tick] && iDiff < 1200 && !ac_iCBugFreeze[playerid]) {
- AC_Process(playerid, AC_CBUG);
- ac_iCBugFreeze[playerid] = GetTickCount();
- }
- }
- }
- return 1;
- }
- hook OnPlayerEnterVehicle(playerid, vehicleid, ispassenger) {
- if(!ispassenger) ac_iVehicleDriverID[playerid] = GetDriverID(vehicleid);
- arrAntiCheat[playerid][ac_iVehID] = vehicleid;
- }
- hook OnPlayerStateChange(playerid, newstate, oldstate) {
- if(newstate == PLAYER_STATE_DRIVER) ac_iLastVehicleID[playerid] = GetPlayerVehicleID(playerid);
- if(oldstate == PLAYER_STATE_DRIVER && newstate == PLAYER_STATE_ONFOOT) defer AC_ResetPVars(playerid, 0);
- }
- hook OnPlayerSpawn(playerid) {
- ac_LastUpdate[playerid] = GetTickCount();
- if(ac_IsDead[playerid]) ac_IsDead[playerid] = false;
- }
- hook OnPlayerDeath(playerid, killerid, reason) {
- ac_IsDead[playerid] = true;
- new iKillerID = GetDriverID(ac_iLastVehicleID[playerid]),
- iKillerVehID = GetPlayerVehicleID(iKillerID);
- if(iKillerID != INVALID_PLAYER_ID) {
- if(ac_iVehicleDriverID[iKillerID] == playerid || (iKillerVehID == ac_iLastVehicleID[playerid] && iKillerVehID != INVALID_VEHICLE_ID)) {
-
- new Float:fPos[3];
- GetPlayerPos(iKillerID, fPos[0], fPos[1], fPos[2]);
- if(IsPlayerInRangeOfPoint(playerid, 15.0, fPos[0], fPos[1], fPos[2]) && GetPlayerVirtualWorld(playerid) == GetPlayerVirtualWorld(iKillerID)) {
- AC_Process(playerid, AC_NINJAJACK, iKillerID);
- }
- }
- }
- }
- hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
- if(arrAntiCheat[playerid][ac_iFlags][AC_DIALOGSPOOFING] > 0) return 1;
- switch(dialogid) {
- case DIALOG_AC_MAIN: {
- if(response) {
-
- if(ac_ACToggle[listitem]) {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM] %s turned off the %s detection.", GetPlayerNameEx(playerid), ac_ACNames[listitem]);
- ac_ACToggle[listitem] = false;
- }
- else {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM] %s turned on the %s detection.", GetPlayerNameEx(playerid), ac_ACNames[listitem]);
- ac_ACToggle[listitem] = true;
- }
- Log("logs/ACSystem.log", szMiscArray);
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- }
- }
- }
- return 0;
- }
- public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ) {
- szMiscArray[0] = 0;
- if(IsPlayerPaused(playerid) && ac_iGhostHackWarnings[playerid] > 5) AC_Process(playerid, AC_GHOSTHACKS, weaponid);
- if(!IsCorrectCameraMode(playerid)) AC_Process(playerid, AC_DESYNC, GetPlayerCameraMode(playerid));
- new vehmodel = GetVehicleModel(GetPlayerVehicleID(playerid));
- if(hittype == BULLET_HIT_TYPE_PLAYER && (BadFloat(fX) || BadFloat(fY) || BadFloat(fZ))) {
- Kick(playerid); // CRASHER DETECTED
- return 0;
- }
- if(weaponid == WEAPON_SILENCED && pTazer{playerid} == 1) {
- new iShots = GetPVarInt(playerid, "TazerShots");
- if(iShots > 0) {
- SetPVarInt(playerid, "TazerShots", iShots - 1);
- }
-
- if(iShots < 1) {
- TazerTimeout[playerid] = 12;
- SetTimerEx("TazerTimer",1000,false,"d",playerid);
- SendClientMessageEx(playerid, COLOR_WHITE, "Your tazer is recharging!");
-
- RemovePlayerWeapon(playerid, 23);
- GivePlayerValidWeapon(playerid, pTazerReplace{playerid});
- format(szMiscArray, sizeof(szMiscArray), "* %s holsters their tazer.", GetPlayerNameEx(playerid));
- ProxDetector(4.0, playerid, szMiscArray, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
- pTazer{playerid} = 0;
- }
- }
- if(GetPVarInt(playerid, "EventToken") == 0 && !GetPVarType(playerid, "IsInArena") && (vehmodel != 425 && vehmodel != 432 && vehmodel != 447 && vehmodel != 464 && vehmodel != 476 && vehmodel != 520) && GetWeaponSlot(weaponid) != -1) {
- if(PlayerInfo[playerid][pGuns][GetWeaponSlot(weaponid)] != weaponid) return 1;
- }
- if(hittype == BULLET_HIT_TYPE_PLAYER) {
- if(!IsPlayerStreamedIn(playerid, hitid) || !IsPlayerStreamedIn(hitid, playerid)) return 0;
- }
- if(weaponid == 24 || weaponid == 25 || weaponid == 26/* || weaponid == 31*/) {
- ++PlayerShots[playerid];
- }
- if(weaponid == 34) {
- ++PlayerSniperShots[playerid];
- }
- /* if(GetPVarInt(playerid, "FireStart") == 1) {
- if(fX != 0 && fY != 0 && hittype != BULLET_HIT_TYPE_PLAYER && hittype != BULLET_HIT_TYPE_VEHICLE) {
- if(gettime() > GetPVarInt(playerid, "fCooldown")) CreateStructureFire(fX, fY, fZ, GetPlayerVirtualWorld(playerid));
- }
- }
- */
-
-
- #if defined AC_DEBUG
- if(hittype == BULLET_HIT_TYPE_PLAYER) {
- AC_SendDebugMessage(playerid, "OnPlayerWeaponShot(%s shot %s with %s at %f, %f, %f) ", GetPlayerNameEx(playerid), GetPlayerNameEx(hitid), AC_GetWeaponName(weaponid), fX, fY, fZ);
- }
- else if(hittype) {
- AC_SendDebugMessage(playerid, "OnPlayerWeaponShot(%s shot %s %d with %s at %f, %f, %f", GetPlayerNameEx(playerid), GetPlayerNameEx(hitid), AC_GetWeaponName(weaponid), fX, fY, fZ);
- }
- else {
- AC_SendDebugMessage(playerid, "OnPlayerWeaponShot(%s shot with %s at %f, %f, %f)", GetPlayerNameEx(playerid), AC_GetWeaponName(weaponid), fX, fY, fZ);
- }
- #endif
-
- arrLastBulletData[playerid][acl_Valid] = false;
- arrLastBulletData[playerid][acl_Hits] = false;
- // C-Bug
- if(ac_iCBugFreeze[playerid] && GetTickCount() - ac_iCBugFreeze[playerid] < 900) {
- return 0;
- }
- ac_iCBugFreeze[playerid] = 0;
- // Desync
- new damagedid = INVALID_PLAYER_ID;
- if(hittype == BULLET_HIT_TYPE_PLAYER && hitid != INVALID_PLAYER_ID) {
-
- if(!IsPlayerConnected(hitid)) {
- AC_AddRejectedHit(playerid, hitid, HIT_DISCONNECTED, weaponid, hittype);
- return 0;
- }
- damagedid = hitid;
- }
- // Invalid hit type
- if(hittype < 0 || hittype > 4) {
- AC_AddRejectedHit(playerid, damagedid, HIT_INVALID_HITTYPE, weaponid, hittype);
- return 0;
- }
- // Hitting when player isn't spawned.
- if(!IsPlayerSpawned(playerid)) {
- AC_AddRejectedHit(playerid, damagedid, HIT_NOT_SPAWNED, weaponid, hittype);
- return 0;
- }
- // Just in case
- if(!IsBulletWeapon(weaponid)) {
- AC_AddRejectedHit(playerid, damagedid, HIT_INVALID_WEAPON, weaponid, hittype);
- return 0;
- }
- new Float:fOriginX, Float:fOriginY, Float:fOriginZ, Float:fHitPosX, Float:fHitPosY, Float:fHitPosZ,
- Float:x, Float:y, Float:z;
- GetPlayerPos(playerid, x, y, z);
- GetPlayerLastShotVectors(playerid, fOriginX, fOriginY, fOriginZ, fHitPosX, fHitPosY, fHitPosZ);
- new Float:fDistance = VectorSize(fOriginX - fHitPosX, fOriginY - fHitPosY, fOriginZ - fHitPosZ),
- Float:origin_dist = VectorSize(fOriginX - x, fOriginY - y, fOriginZ - z);
- if(origin_dist > 15.0) {
-
- new iVehCheck = IsPlayerInAnyVehicle(hitid) || GetPlayerSurfingVehicleID(playerid);
- if((!iVehCheck && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID) || origin_dist > 50.0) {
- AC_AddRejectedHit(playerid, damagedid, HIT_TOO_FAR_FROM_ORIGIN, weaponid, _:origin_dist);
- return 0;
- }
- }
- // Bullet range check.
- if(hittype != BULLET_HIT_TYPE_NONE) {
- if(fDistance > ac_WeaponRange[weaponid] + 10.0) {
- if(hittype == BULLET_HIT_TYPE_PLAYER) {
- AC_AddRejectedHit(playerid, damagedid, HIT_OUT_OF_RANGE, weaponid, _:fDistance, _:ac_WeaponRange[weaponid]);
- }
- return 0;
- }
- if(hittype == BULLET_HIT_TYPE_PLAYER) {
- if(IsPlayerInAnyVehicle(playerid) && GetPlayerVehicleID(playerid) == GetPlayerVehicleID(hitid)) {
- AC_AddRejectedHit(playerid, damagedid, HIT_SAME_VEHICLE, weaponid);
- return 0;
- }
- new Float:fHitDist = GetPlayerDistanceFromPoint(hitid, fHitPosX, fHitPosY, fHitPosZ),
- iVehCheck = IsPlayerInAnyVehicle(hitid);
- if ((!iVehCheck && fHitDist > 20.0) || fHitDist > 50.0) {
- AC_AddRejectedHit(playerid, damagedid, HIT_TOO_FAR_FROM_SHOT, weaponid, _:fHitDist);
- return 0;
- }
- }
- }
- new iTick = GetTickCount();
- if(iTick == 0) iTick = 1;
- new idx = (ac_LastBulletIdx[playerid] + 1) % sizeof(ac_LastBulletTicks[]);
- // JIT plugin fix
- if (idx < 0) {
- idx += sizeof(ac_LastBulletTicks[]);
- }
-
- ac_LastBulletIdx[playerid] = idx;
- ac_LastBulletTicks[playerid][idx] = iTick;
- ac_LastBulletWeapons[playerid][idx] = weaponid;
- ac_TotalShots[playerid]++;
- /* LOG FUNCTIONS */
- arrLastBulletData[playerid][acl_Tick] = GetTickCount();
- arrLastBulletData[playerid][acl_Weapon] = weaponid;
- arrLastBulletData[playerid][acl_HitType] = hittype;
- arrLastBulletData[playerid][acl_HitId] = hitid;
- arrLastBulletData[playerid][acl_fPos][0] = fX;
- arrLastBulletData[playerid][acl_fPos][1] = fY;
- arrLastBulletData[playerid][acl_fPos][2] = fZ;
- if(hitid != INVALID_PLAYER_ID) {
- arrLastBulletData[playerid][acl_fTargetPos][0] = fHitPosX;
- arrLastBulletData[playerid][acl_fTargetPos][1] = fHitPosY;
- arrLastBulletData[playerid][acl_fTargetPos][2] = fHitPosZ;
- }
- arrLastBulletData[playerid][acl_fOrigin][0] = fOriginX;
- arrLastBulletData[playerid][acl_fOrigin][1] = fOriginY;
- arrLastBulletData[playerid][acl_fOrigin][2] = fOriginZ;
- arrLastBulletData[playerid][acl_fHitPos][0] = fHitPosX;
- arrLastBulletData[playerid][acl_fHitPos][1] = fHitPosY;
- arrLastBulletData[playerid][acl_fHitPos][2] = fHitPosZ;
- arrLastBulletData[playerid][acl_fDistance] = fDistance;
- arrLastBulletData[playerid][acl_Hits] = 0;
- /*
- AimBot check 2 and:
- Pro Aim Check by Pottus
- Reference: http://forum.sa-mp.com/showpost.php?p=3038425
- */
- if(hittype == BULLET_HIT_TYPE_PLAYER) {
- if(!playerTabbed[hitid]) {
- /*
- Too many false positives.
- if(GetPlayerSpeed(hitid) > 3) {
- arrAntiCheat[playerid][ac_iShots][1]++;
- if(arrAntiCheat[playerid][ac_iShots][1] > ac_MaxWeaponContShots[weaponid] + 15) AC_Process(playerid, AC_AIMBOT, weaponid);
- }
- */
- if(ac_ACToggle[3]) {
- if(ProAimCheck(playerid, hitid)) {
- arrAntiCheat[playerid][ac_iFlags][3]++;
- if(arrAntiCheat[playerid][ac_iFlags][3] > 3) AC_Flag(playerid, AC_PROAIM, weaponid, arrAntiCheat[playerid][ac_iFlags][3]);
- }
- }
- }
- else arrAntiCheat[playerid][ac_iShots][1] = 0;
- }
- // AimBot Player Scheme
- arrWeaponDataAC[playerid][ac_iBulletsFired][weaponid]++;
- if(hittype == BULLET_HIT_TYPE_PLAYER && ac_MaxWeaponContShots[weaponid] && !IsPlayerPaused(hitid)) {
- if(!playerTabbed[hitid]) {
- new fSpeed = GetPlayerSpeed(hitid);
- if(fSpeed > 5) { // subject to discussion
-
- arrWeaponDataAC[playerid][ac_iBulletsHit][weaponid]++;
- //if(!(++arrAntiCheat[playerid][ac_iShots][0] % ac_MaxWeaponContShots[weaponid])) AC_Process(playerid, AC_AIMBOT, weaponid);
- new iRelevantMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][weaponid] - arrWeaponDataAC[playerid][ac_iBulletsHit][weaponid] - arrWeaponDataAC[playerid][ac_iFakeMiss][weaponid],
- Float:fRatio;
- iRelevantMiss++; // Can't divide by 0.
- fRatio = arrWeaponDataAC[playerid][ac_iBulletsHit][weaponid] / iRelevantMiss;
- if(arrWeaponDataAC[playerid][ac_iBulletsFired][weaponid] > 50 && fRatio > 3) AC_Flag(playerid, AC_AIMBOT, weaponid, fRatio);
- }
- else arrWeaponDataAC[playerid][ac_iFakeMiss][weaponid]++;
- }
- }
- else arrAntiCheat[playerid][ac_iShots][0] = 0; // reset it when missed :)
- return 1;
- }
- ProAimCheck(playerid, hitid) {
- new
- Float: fOrigin[3],
- Float: fHit[3];
- GetPlayerLastShotVectors(playerid, fOrigin[0], fOrigin[1], fOrigin[2], fHit[0], fHit[1], fHit[2]);
- new Float:fPlayerHitPos[3];
- GetPlayerPos(hitid, fPlayerHitPos[0], fPlayerHitPos[1], fPlayerHitPos[2]);
- new Float:fDistance = GetPlayerDistanceFromPoint(hitid, fHit[0], fHit[1], fHit[2]);
- if(fDistance >= iShotVariance && fDistance <= 300.0) return 1;
- return 0;
- }
- AC_SpeedHacks(playerid) {
- new iSpeed = GetPlayerSpeed(playerid),
- Float:fVel[3];
- if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID && GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_USEJETPACK && iSpeed > 45) {
-
- GetPlayerVelocity(playerid, fVel[0], fVel[1], fVel[2]);
- if(fVel[2] == 0) {
- if(GetPlayerPacketloss(playerid) < 0.3) AC_Process(playerid, AC_SPEEDHACKS);
- }
- }
- }
- AC_InfiniteStamina(playerid) {
- if(arrAntiCheat[playerid][ac_iSpeed] > 24) arrAntiCheat[playerid][ac_iFlags][AC_INFINITESTAMINA]++;
- else arrAntiCheat[playerid][ac_iFlags][AC_INFINITESTAMINA] = 0;
- // Subject to discussion (HACKTIMER_INTERVAL * NUMBER = 5 seconds * 8 = 40 seconds running faster than 24).
- if(arrAntiCheat[playerid][ac_iFlags][AC_INFINITESTAMINA] > 8) return 1;
- return 0;
- }
- AC_AirBreaking(i) {
- if(GetPlayerSurfingVehicleID(i) != INVALID_VEHICLE_ID) return 0;
- new Float:fPos[3],
- iDistance;
- GetPlayerPos(i, fPos[0], fPos[1], fPos[2]);
- if(arrAntiCheat[i][ac_fPos][0] == 0.0 || arrAntiCheat[i][ac_fPos][1] == 0.0 || arrAntiCheat[i][ac_fPos][2] == 0.0 ||
- Bit_State(arrPAntiCheat[i], ac_bitValidPlayerPos) || Bit_State(arrPAntiCheat[i], ac_bitValidSpectating) || GetPlayerState(i) == PLAYER_STATE_SPECTATING) {
- arrAntiCheat[i][ac_fPos][0] = fPos[0];
- arrAntiCheat[i][ac_fPos][1] = fPos[1];
- arrAntiCheat[i][ac_fPos][2] = fPos[2];
- return 0;
- }
- iDistance = floatround(GetDistanceBetweenPoints(fPos[0], fPos[1], fPos[2], arrAntiCheat[i][ac_fPos][0], arrAntiCheat[i][ac_fPos][1], arrAntiCheat[i][ac_fPos][2]));
- arrAntiCheat[i][ac_fPos][0] = fPos[0];
- arrAntiCheat[i][ac_fPos][1] = fPos[1];
- arrAntiCheat[i][ac_fPos][2] = fPos[2];
- #if defined AC_DEBUG
- format(szMiscArray, sizeof(szMiscArray), "Distance: %d (%f, %f, %f, %f, %f, %f)", iDistance, fPos[0], fPos[1], fPos[2], arrAntiCheat[i][ac_fPos][0], arrAntiCheat[i][ac_fPos][1], arrAntiCheat[i][ac_fPos][2]);
- SendClientMessage(i, 0xFFFFFFFF, szMiscArray);
- #endif
- new iSpeed = GetPlayerSpeed(i);
- if(IsPlayerInAnyVehicle(i)) {
-
- #if defined AC_DEBUG
- format(szMiscArray, sizeof(szMiscArray), "VEH SPEED: %d", iSpeed);
- SendClientMessage(i, 0xFFFFFFFF, szMiscArray);
- #endif
- if(iSpeed < 0.2 && iDistance > iSpeed + 30) return 1;
- }
- else {
- #if defined AC_DEBUG
- format(szMiscArray, sizeof(szMiscArray), "FOOT SPEED: %d", iSpeed);
- SendClientMessage(i, 0xFFFFFFFF, szMiscArray);
- #endif
- if(iDistance > iSpeed + 30) return 1;
- }
- return 0;
- }
- hook OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart) {
- if((!IsPlayerStreamedIn(playerid, damagedid) && !IsPlayerPaused(damagedid)) || !IsPlayerStreamedIn(damagedid, playerid)) {
- AC_AddRejectedHit(playerid, damagedid, HIT_UNSTREAMED, weaponid, damagedid);
- return 0;
- }
- if(!IsPlayerSpawned(playerid)) {
- // OnPlayerWeaponShot copy prevention.
- if(!IsBulletWeapon(weaponid) || arrLastBulletData[playerid][acl_Valid]) {
- AC_AddRejectedHit(playerid, damagedid, HIT_NOT_SPAWNED, weaponid);
- }
- return 0;
- }
- new iTick = GetTickCount();
- if(iTick == 0) iTick = 1;
- new idx = (ac_LastHitIdx[playerid] + 1) % sizeof(ac_LastHitTicks[]);
- // JIT plugin fix
- if (idx < 0) {
- idx += sizeof(ac_LastHitTicks[]);
- }
- ac_LastHitIdx[playerid] = idx;
- ac_LastHitTicks[playerid][idx] = iTick;
- ac_LastHitWeapons[playerid][idx] = weaponid;
- ac_HitsIssued[playerid] += 1;
- if(IsBulletWeapon(weaponid) && !IsPlayerPaused(damagedid)) {
- new Float:fPos[3];
- GetPlayerPos(damagedid, fPos[0], fPos[1], fPos[2]);
- new Float:fDistance = GetPlayerDistanceFromPoint(playerid, fPos[0], fPos[1], fPos[2]);
- if(fDistance > ac_WeaponRange[weaponid] + 2.0) {
- AC_AddRejectedHit(playerid, damagedid, HIT_OUT_OF_RANGE, weaponid, _:fDistance, _:ac_WeaponRange[weaponid]);
- AC_Process(playerid, AC_RANGEHACKS, weaponid);
- return 0;
- }
- }
- if(ac_ACToggle[AC_SILENTAIM]) {
-
- // Anti Silent-Aim (Jingles)
- if(GetPlayerPacketloss(playerid) < 0.5 && GetPlayerPacketloss(damagedid) < 0.5) {
- if(GetTickCount() - ac_iSilentAimTick[playerid] > 50) {
- ac_iSilentAimTick[playerid] = GetTickCount();
- if(GetPlayerSpecialAction(playerid) != SPECIAL_ACTION_USEJETPACK) {
- if(!IsPlayerInAnyVehicle(damagedid)) {
- if(20 < weaponid < 35 || weaponid > 54) {
- new szWeapon[32],
- iCameraMode = GetPlayerCameraMode(playerid);
- GetWeaponName(weaponid, szWeapon, 32);
-
- // Pro Aim
- new Float:fOriginX,
- Float:fOriginY,
- Float:fOriginZ,
- Float:fHitPosX,
- Float:fHitPosY,
- Float:fHitPosZ,
- Float:fDistance;
- GetPlayerLastShotVectors(playerid, fOriginX, fOriginY, fOriginZ, fHitPosX, fHitPosY, fHitPosZ);
- fDistance = GetPlayerDistanceFromPoint(damagedid, fHitPosX, fHitPosY, fHitPosZ);
- if(iCameraMode != 4 && iCameraMode != 55) {
- if(GetPlayerTargetPlayer(playerid) != damagedid) {
- ac_iSilentAimWarnings[playerid]++;
- if(ac_iSilentAimWarnings[playerid] > 10) {
- AC_Process(playerid, AC_SILENTAIM, weaponid, damagedid, 1);
- }
- }
- if(fDistance <= 0.1) {
- ac_iSilentAimWarnings2[playerid]++;
- if(ac_iSilentAimWarnings2[playerid] > 4) {
- AC_Process(playerid, AC_SILENTAIM, weaponid, damagedid, 2);
- }
- }
- else ac_iSilentAimWarnings2[playerid] = 0;
- if(weaponid != 28 && weaponid != 32) {
-
- new Float:fPos[3],
- Float:fAngle[2];
- if(fDistance < 100)
- {
- GetRotationFor2Point2D(fOriginX, fOriginY, fHitPosX, fHitPosY, fAngle[0]);
- GetPlayerPos(playerid, fPos[0], fPos[1], fPos[2]);
- GetPlayerFacingAngle(playerid, fAngle[1]);
-
- new Float:fDifference;
- fDifference = floatabs((360 - fAngle[1]) - (360 - fAngle[0]));
- if(fDifference > 10) {
- ac_iSilentAimWarnings3[playerid]++;
- if(ac_iSilentAimWarnings3[playerid] > 3) {
- AC_Process(playerid, AC_SILENTAIM, weaponid, damagedid, 3);
- }
- }
- }
- }
- }
- // ProAim
- /*
- if(fDistance >= MAX_SHOT_VARIANCE && fDistance < 300.0) {
- ac_iSilentAimWarnings[playerid]++;
- if(ac_iSilentAimWarnings[playerid] > 5) {
-
- format(szMiscArray, sizeof(szMiscArray), "%s is using pro aim (%d).", GetPlayerNameExt(playerid), ac_iSilentAimWarnings[playerid]);
- SendClientMessageToAll(COLOR_YELLOW, szMiscArray);
- }
- }
- */
- }
- }
- }
- }
- }
- }
- return 0;
- }
- // Is called after OnPlayerWeaponShot
- hook OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart) {
- // Ignore unreliable and invalid damage
- if(playerid == INVALID_PLAYER_ID) return 0;
- // Carjack damage
- if(weaponid == 54 && _:amount == _:0.0) {
- // SendClientMessageToAll(0xFFFFFFFF, "NJ?");
- return 0;
- }
- // Climb bug
- if(weaponid == WEAPON_COLLISION) {
- new iAnimIdx = GetPlayerAnimationIndex(playerid);
- if(1061 <= iAnimIdx <= 1067) {
- // AC_SendDebugMessage(playerid, "Climb bug.");
- return 0;
- }
- }
- //AC_InflictDamage(playerid, amount, issuerid, weaponid, bodypart); // Server Sided Health
- return 1;
- }
- stock AC_InitWeaponData() {
- // Default weapon.dat
- arrWeaponData[0][ac_WeaponDamage] = 1.0; // 0 - Fist
- arrWeaponData[1][ac_WeaponDamage] = 1.0; // 1 - Brass knuckles
- arrWeaponData[2][ac_WeaponDamage] = 1.0; // 2 - Golf club
- arrWeaponData[3][ac_WeaponDamage] = 1.0; // 3 - Nitestick
- arrWeaponData[4][ac_WeaponDamage] = 1.0; // 4 - Knife
- arrWeaponData[5][ac_WeaponDamage] = 1.0; // 5 - Bat
- arrWeaponData[6][ac_WeaponDamage] = 1.0; // 6 - Shovel
- arrWeaponData[7][ac_WeaponDamage] = 1.0; // 7 - Pool cue
- arrWeaponData[8][ac_WeaponDamage] = 1.0; // 8 - Katana
- arrWeaponData[9][ac_WeaponDamage] = 1.0; // 9 - Chainsaw
- arrWeaponData[10][ac_WeaponDamage] = 1.0; // 10 - Dildo
- arrWeaponData[11][ac_WeaponDamage] = 1.0; // 11 - Dildo 2
- arrWeaponData[12][ac_WeaponDamage] = 1.0; // 12 - Vibrator
- arrWeaponData[13][ac_WeaponDamage] = 1.0; // 13 - Vibrator 2
- arrWeaponData[14][ac_WeaponDamage] = 1.0; // 14 - Flowers
- arrWeaponData[15][ac_WeaponDamage] = 1.0; // 15 - Cane
- arrWeaponData[16][ac_WeaponDamage] = 82.5; // 16 - Grenade
- arrWeaponData[17][ac_WeaponDamage] = 0.0; // 17 - Teargas
- arrWeaponData[18][ac_WeaponDamage] = 1.0; // 18 - Molotov
- arrWeaponData[19][ac_WeaponDamage] = 9.9; // 19 - Vehicle M4 (custom)
- arrWeaponData[20][ac_WeaponDamage] = 46.2; // 20 - Vehicle minigun (custom)
- arrWeaponData[21][ac_WeaponDamage] = 0.0; // 21
- arrWeaponData[22][ac_WeaponDamage] = 8.25; // 22 - Colt 45
- arrWeaponData[23][ac_WeaponDamage] = 13.2; // 23 - Silenced
- arrWeaponData[24][ac_WeaponDamage] = 46.2; // 24 - Deagle
- arrWeaponData[25][ac_WeaponDamage] = 3.3; // 25 - Shotgun
- arrWeaponData[26][ac_WeaponDamage] = 3.3; // 26 - Sawed-off
- arrWeaponData[27][ac_WeaponDamage] = 4.95; // 27 - Spas
- arrWeaponData[28][ac_WeaponDamage] = 6.6; // 28 - UZI
- arrWeaponData[29][ac_WeaponDamage] = 8.25; // 29 - MP5
- arrWeaponData[30][ac_WeaponDamage] = 9.9; // 30 - AK47
- arrWeaponData[31][ac_WeaponDamage] = 9.9; // 31 - M4
- arrWeaponData[32][ac_WeaponDamage] = 6.6; // 32 - Tec9
- arrWeaponData[33][ac_WeaponDamage] = 24.75; // 33 - Cuntgun
- arrWeaponData[34][ac_WeaponDamage] = 41.25; // 34 - Sniper
- arrWeaponData[35][ac_WeaponDamage] = 82.5; // 35 - Rocket launcher
- arrWeaponData[36][ac_WeaponDamage] = 82.5; // 36 - Heatseeker
- arrWeaponData[37][ac_WeaponDamage] = 1.0; // 37 - Flamethrower
- arrWeaponData[38][ac_WeaponDamage] = 46.2; // 38 - Minigun
- arrWeaponData[39][ac_WeaponDamage] = 82.5; // 39 - Satchel
- arrWeaponData[40][ac_WeaponDamage] = 0.0; // 40 - Detonator
- arrWeaponData[41][ac_WeaponDamage] = 0.33; // 41 - Spraycan
- arrWeaponData[42][ac_WeaponDamage] = 0.33; // 42 - Fire extinguisher
- arrWeaponData[43][ac_WeaponDamage] = 0.0; // 43 - Camera
- arrWeaponData[44][ac_WeaponDamage] = 0.0; // 44 - Night vision
- arrWeaponData[45][ac_WeaponDamage] = 0.0;// 45 - Infrared
- arrWeaponData[46][ac_WeaponDamage] = 0.0; // 46 - Parachute
- arrWeaponData[47][ac_WeaponDamage] = 0.0; // 47 - Fake pistol
- arrWeaponData[48][ac_WeaponDamage] = 2.64; // 48 - Pistol whip (custom)
- arrWeaponData[49][ac_WeaponDamage] = 9.9; // 49 - Vehicle
- arrWeaponData[50][ac_WeaponDamage] = 330.0; // 50 - Helicopter blades
- arrWeaponData[51][ac_WeaponDamage] = 82.5; // 51 - Explosion
- arrWeaponData[52][ac_WeaponDamage] = 1.0; // 52 - Car park (custom)
- arrWeaponData[53][ac_WeaponDamage] = 1.0; // 53 - Drowning
- arrWeaponData[54][ac_WeaponDamage] = 165.0; // 54 - Splat
- }
- stock AC_AddRejectedHit(playerid, damagedid, reason, weapon, inf0 = 0, inf1 = 0, inf2 = 0) {
- new idx = ac_RejectedHitsIdx[playerid];
- if (arrRejectedHitData[playerid][idx][acr_iTime]) {
- idx += 1;
- if (idx >= sizeof(arrRejectedHitData[])) {
- idx = 0;
- }
- ac_RejectedHitsIdx[playerid] = idx;
- }
- arrRejectedHitData[playerid][idx][acr_iReason] = reason;
- arrRejectedHitData[playerid][idx][acr_iTime] = gettime();
- arrRejectedHitData[playerid][idx][acr_iWeaponID] = weapon;
- arrRejectedHitData[playerid][idx][acr_iDamagedID] = damagedid;
- arrRejectedHitData[playerid][idx][acr_iInfo][0] = inf0;
- arrRejectedHitData[playerid][idx][acr_iInfo][2] = inf1;
- arrRejectedHitData[playerid][idx][acr_iInfo][2] = inf2;
- if (damagedid != INVALID_PLAYER_ID) {
- GetPlayerName(damagedid, arrRejectedHitData[playerid][idx][acr_szName], MAX_PLAYER_NAME);
- }
- else {
- arrRejectedHitData[playerid][idx][acr_szName][0] = '#';
- arrRejectedHitData[playerid][idx][acr_szName][1] = '\0';
- }
- }
- /*stock IsPlayerPaused(playerid) {
- return (GetTickCount() - ac_LastUpdate[playerid] > 2000);
- }*/
- stock IsPlayerSpawned(playerid) {
- if(ac_IsDead[playerid] || ac_BeingResynced[playerid]) {
- return false;
- }
- switch (GetPlayerState(playerid)) {
- case PLAYER_STATE_ONFOOT .. PLAYER_STATE_PASSENGER, PLAYER_STATE_SPAWNED: return true;
- }
- return false;
- }
- forward Float:AngleBetweenPoints(Float:x1, Float:y1, Float:x2, Float:y2);
- stock Float:AngleBetweenPoints(Float:x1, Float:y1, Float:x2, Float:y2) {
- return -(90.0 - atan2(y1 - y2, x1 - x2));
- }
- forward GetPlayerSpeed(i);
- stock GetPlayerSpeed(i) {
- new Float:fVel[3],
- iSpeed;
- if(IsPlayerInAnyVehicle(i)) GetVehicleVelocity(GetPlayerVehicleID(i), fVel[0], fVel[1], fVel[2]);
- else GetPlayerVelocity(i, fVel[0], fVel[1], fVel[2]);
- iSpeed = floatround(floatsqroot(((fVel[0]*fVel[0])+(fVel[1]*fVel[1]))+(fVel[2]*fVel[2])) * 136.666667, floatround_round);
- return iSpeed;
- }
- stock GetDriverID(iVehID) {
- if(iVehID == INVALID_VEHICLE_ID) return INVALID_PLAYER_ID;
- foreach(new i : Player) {
- if(GetPlayerVehicleID(i) == iVehID && GetPlayerState(i) == PLAYER_STATE_DRIVER) return i;
- }
- return INVALID_PLAYER_ID;
- }
- AC_Flag(playerid, processid, iExtraID = INVALID_PLAYER_ID, Float:fInfo = 0.0) {
- switch(processid) {
-
- case AC_PROAIM: {
- new iInfo = floatround(fInfo);
- if(iInfo > 6) AC_Process(playerid, AC_PROAIM, iExtraID);
- else {
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}AimBot - I flagged %s for using pro-aim (%dx) with their %s.", GetPlayerNameEx(playerid), iInfo, AC_GetWeaponName(iExtraID));
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- }
- }
- case AC_AIMBOT: {
- if(fInfo > 20) AC_Process(playerid, AC_AIMBOT, iExtraID);
- else {
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}AimBot - I flagged %s for a high hit-ratio (%.1f) with their %s.", GetPlayerNameEx(playerid), fInfo, AC_GetWeaponName(iExtraID));
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- }
- }
- }
- }
- AC_Process(playerid, processid, iExtraID = INVALID_PLAYER_ID, iExtraID2 = -1, iExtraID3 = -1) {
- if(PlayerInfo[playerid][pAdmin] > 1 && PlayerInfo[playerid][pTogReports] == 0) return 1;
- if(!ac_ACToggle[processid]) return 1;
- arrAntiCheat[playerid][ac_iFlags][processid]++;
- if(GetPVarType(playerid, "ACCooldown") && GetPVarInt(playerid, "ACCooldown") == processid) return 1;
- SetPVarInt(playerid, "ACCooldown", processid);
- //if(arrAntiCheat[playerid][ac_iFlags][processid] == 1 || arrAntiCheat[playerid][ac_iFlags][processid] % 5 == 0) { // prevent spamming
- {
- new szQuery[512];
- szMiscArray[0] = 0;
- switch(processid) {
- case AC_AIMBOT: {
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using Aimbot", GetPlayerNameEx(playerid));
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- new iTotalMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID],
- iRelevantMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] - arrWeaponDataAC[playerid][ac_iFakeMiss][iExtraID];
- iRelevantMiss++; // Can't divide by 0;
- new Float:fRatio = arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] / iRelevantMiss;
- format(szQuery, sizeof(szQuery), "INSERT INTO `ac` (`DBID`, `timestamp`, `type`, `flags`, `extraid`, `totalfired`, `hits`, `rmisses`, `tmisses`, `ratio`) VALUES (%d, NOW(), %d, %d, %d, %d, %d, %d, %d, %.1f)",
- PlayerInfo[playerid][pId], processid, arrAntiCheat[playerid][ac_iFlags][processid], iExtraID, arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID], arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID], iRelevantMiss, iTotalMiss, fRatio);
- mysql_tquery(MainPipeline, szQuery, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- return 1;
- }
- case AC_CBUG: {
- PlayerPlaySound(playerid, 1055, 0.0, 0.0, 0.0);
- if(arrLastBulletData[playerid][acl_Valid] && floatabs(arrLastBulletData[playerid][acl_fHitPos][0]) > 1.0 && floatabs(arrLastBulletData[playerid][acl_fPos][1]) > 1.0) {
- SetPlayerFacingAngle(playerid, AngleBetweenPoints(
- arrLastBulletData[playerid][acl_fPos][0],
- arrLastBulletData[playerid][acl_fPos][1],
- arrLastBulletData[playerid][acl_fOrigin][0],
- arrLastBulletData[playerid][acl_fOrigin][1]
- ));
- }
- new w, a;
- GetPlayerWeaponData(playerid, 0, w, a);
- ClearAnimationsEx(playerid, 1);
- ApplyAnimation(playerid, "PED", "IDLE_stance", 4.1, 0, 0, 0, 0, 0, 1);
- defer AC_ResetAnim(playerid);
- GivePlayerWeapon(playerid, w, 0);
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: Please do not C-Bug / CS.");
- return 1;
- }
- case AC_SILENTAIM: {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s (%d) used Silent Aim (detector %d) on %s (%d) with a %s (warnings: %d).", GetPlayerNameExt(playerid), PlayerInfo[playerid][pId], iExtraID3, GetPlayerNameExt(iExtraID2), PlayerInfo[iExtraID2][pId], AC_GetWeaponName(iExtraID), arrAntiCheat[playerid][ac_iFlags][processid]);
- Log("logs/anticheat.log", szMiscArray);
-
- /*
- if(arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] > 0) {
-
- new iTotalMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID],
- iRelevantMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] - arrWeaponDataAC[playerid][ac_iFakeMiss][iExtraID];
- iRelevantMiss++; // Can't divide by 0;
- new Float:fRatio = arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] / iRelevantMiss;
- format(szQuery, sizeof(szQuery), "INSERT INTO `ac` (`DBID`, `timestamp`, `type`, `flags`, `extraid`, `totalfired`, `hits`, `rmisses`, `tmisses`, `ratio`) VALUES (%d, NOW(), %d, %d, %d, %d, %d, %d, %d, %.1f)",
- PlayerInfo[playerid][pId], processid, arrAntiCheat[playerid][ac_iFlags][processid], iExtraID, arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID], arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID], iRelevantMiss, iTotalMiss, fRatio);
- mysql_tquery(MainPipeline, szQuery, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- }
- */
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were kicked for being desynced.");
- SetTimerEx("KickEx", 1000, 0, "i", playerid);
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using Silent Aim (detector %d) on %s with a %s (warnings: %d).", GetPlayerNameExt(playerid), iExtraID3, GetPlayerNameExt(iExtraID2), AC_GetWeaponName(iExtraID), arrAntiCheat[playerid][ac_iFlags][processid]);
- }
- case AC_PROAIM: {
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using Pro-Aim.", GetPlayerNameEx(playerid));
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- new iTotalMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID],
- iRelevantMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] - arrWeaponDataAC[playerid][ac_iFakeMiss][iExtraID];
- iRelevantMiss++; // Can't divide by 0;
- new Float:fRatio = arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] / iRelevantMiss;
- format(szQuery, sizeof(szQuery), "INSERT INTO `ac` (`DBID`, `timestamp`, `type`, `flags`, `extraid`, `totalfired`, `hits`, `rmisses`, `tmisses`, `ratio`) VALUES (%d, NOW(), %d, %d, %d, %d, %d, %d, %d, %.1f)",
- PlayerInfo[playerid][pId], processid, arrAntiCheat[playerid][ac_iFlags][processid], iExtraID, arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID], arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID], iRelevantMiss, iTotalMiss, fRatio);
- mysql_tquery(MainPipeline, szQuery, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- if(arrAntiCheat[playerid][ac_iFlags][processid] > 15) {
-
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were kicked for being desynced.");
- SetTimerEx("KickEx", 1000, 0, "i", playerid);
- }
- return 1;
- }
- case AC_RANGEHACKS: {
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using range-hacks.", GetPlayerNameEx(playerid));
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- new iTotalMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID],
- iRelevantMiss = arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID] - arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] - arrWeaponDataAC[playerid][ac_iFakeMiss][iExtraID];
- iRelevantMiss++; // Can't divide by 0;
- new Float:fRatio = arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID] / iRelevantMiss;
- format(szQuery, sizeof(szQuery), "INSERT INTO `ac` (`DBID`, `timestamp`, `type`, `flags`, `extraid`, `totalfired`, `hits`, `rmisses`, `tmisses`, `ratio`) VALUES (%d, NOW(), %d, %d, %d, %d, %d, %d, %d, %.1f)",
- PlayerInfo[playerid][pId], processid, arrAntiCheat[playerid][ac_iFlags][processid], iExtraID, arrWeaponDataAC[playerid][ac_iBulletsFired][iExtraID], arrWeaponDataAC[playerid][ac_iBulletsHit][iExtraID], iRelevantMiss, iTotalMiss, fRatio);
- mysql_tquery(MainPipeline, szQuery, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- return 1;
- }
- case AC_SPEEDHACKS: format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using speed hacks (B2, B5)", GetPlayerNameEx(playerid));
- case AC_VEHICLEHACKS: format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is using vehicle hacks.", GetPlayerNameEx(playerid));
- case AC_CMDSPAM: {
- if(iExtraID > 15) {
- SendClientMessageEx(playerid, COLOR_YELLOW, "You are muted from submitting commands.");
- format(szMiscArray, sizeof(szMiscArray), "{AA3333}AdmWarning{FFFF00}: %s is spamming commands (%d times).", GetPlayerNameEx(playerid), arrAntiCheat[playerid][ac_iCommandCount]);
- }
- else return SendClientMessageEx(playerid, COLOR_YELLOW, "You are muted from submitting commands.");
- }
- case AC_CARSURFING: {
- new Float:fPos[3];
- GetPlayerPos(playerid, fPos[0], fPos[1], fPos[2]);
- SetPlayerPos(playerid, fPos[0] + 1.0, fPos[1] + 1.0, fPos[2]);
- PlayAnimEx(playerid, "PED", "BIKE_fallR", 4.1, 0, 1, 1, 1, 0, 1);
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: Please do not car surf.");
- return 1;
- }
- case AC_NINJAJACK: {
- defer AC_RevivePlayer(playerid);
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You will be revived from the ninja-jacking in a few seconds.");
- SendClientMessageEx(iExtraID, COLOR_LIGHTRED, "[SYSTEM]: You were caught plausibly ninja-jacking. Admins were warned.");
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s has plausibly ninja-jacked %s.", GetPlayerNameEx(iExtraID), GetPlayerNameEx(playerid));
- }
- case AC_AIRBREAKING: format(szMiscArray, sizeof(szMiscArray), "{AA3333}[SYSTEM]: {FFFF00}%s is AirBreaking.", GetPlayerNameEx(playerid));
- case AC_HEALTHARMORHACKS: {
-
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were kicked for plausibly health/armor hacking.");
- SetTimerEx("KickEx", 1000, 0, "i", iExtraID);
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s was kicked for (plausibly!) health/armor hacking. Refrain from taking more action until fully tested.", GetPlayerNameEx(playerid));
- }
- case AC_DIALOGSPOOFING: {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s is spoofing dialogs (dialog ID: %d).", GetPlayerNameEx(playerid), iExtraID);
- Log("logs/anticheat.log", szMiscArray);
- }
- case AC_GHOSTHACKS: {
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were kicked for being desynced.");
- SetTimerEx("KickEx", 1000, 0, "i", playerid);
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s is using ghost hacks (Shooting while AFK). WeaponID: %d", GetPlayerNameEx(playerid), iExtraID);
- Log("logs/anticheat.log", szMiscArray);
- }
- case AC_DESYNC: {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM]: %s has a weird camera mode (probably aimbot). Camera Mode: %d.", GetPlayerNameEx(playerid), iExtraID);
- Log("logs/anticheat.log", szMiscArray);
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were kicked for being desynced.");
- SetTimerEx("KickEx", 1000, 0, "i", playerid);
- }
-
- }
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- format(szQuery, sizeof(szQuery), "INSERT INTO `ac` (`DBID`, `timestamp`, `type`, `flags`, `extraid`, `totalfired`, `hits`, `rmisses`, `tmisses`, `ratio`) VALUES (%d, NOW(), %d, %d, %d, %d, %d, %d, %d, %.1f)",
- PlayerInfo[playerid][pId], processid, arrAntiCheat[playerid][ac_iFlags][processid], iExtraID, -1, -1, -1, -1, 0.0);
- mysql_tquery(MainPipeline, szQuery, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- }
- return 1;
- }
- AC_IsPlayerSurfing(playerid) {
- if(zombieevent) return 0;
- if(PlayerInfo[playerid][pAdmin] >= 2) return 0;
- new iVehID = GetPlayerSurfingVehicleID(playerid);
- if(iVehID == INVALID_VEHICLE_ID) return 0;
- switch(GetVehicleModel(iVehID)) {
- case 403, 406, 422, 430, 432, 433, 443, 446, 452, 453, 454, 455, 470, 472, 473, 478, 484, 493, 500, 514, 515, 525, 543, 554, 578, 595, 605, 607: return 0;
- case 417, 423, 416, 425, 427, 431, 437, 447, 469, 487, 488, 497, 508, 528, 537, 538, 449, 548, 563, 56, 570, 577, 590, 592, 490: return 0; // often modded vehicles
- }
- return 1;
- }
- AC_KeySpamCheck(playerid) {
- if(GetPVarType(playerid, "PCMute")) {
- SendClientMessageEx(playerid, COLOR_WHITE, "[SYSTEM]: You are currently blocked from using interaction keys.");
- return 0;
- }
- if(ac_iPlayerKeySpam[playerid] > 4) {
- SetPVarInt(playerid, "PCMute", 1);
- defer AC_ResetPVars[10000](playerid, 1);
- SendClientMessageEx(playerid, COLOR_LIGHTRED, "[SYSTEM]: You were muted for spamming an interaction key. Refrain from doing it again.");
- return 0;
- }
- return 1;
- }
- AC_PlayerHealthArmor(playerid) {
- if(GetPVarInt(playerid, "Injured") == 1) return 0;
- if(PlayerInfo[playerid][pHospital] > 0) return 0;
- new Float:fData[4];
- GetPlayerHealth(playerid, fData[0]);
- GetHealth(playerid, fData[1]);
- GetPlayerArmour(playerid, fData[2]);
- GetArmour(playerid, fData[3]);
- if(fData[1] < -40) {
- format(szMiscArray, sizeof(szMiscArray), "[SYSTEM (BETA)]: %s (%d) may be health hacking.", GetPlayerNameEx(playerid), playerid);
- ABroadCast(COLOR_LIGHTRED, szMiscArray, 2);
- }
- if(fData[0] > (fData[1] + 10.0) || fData[2] > (fData[3] + 10.0)) return 1;
- return 0;
- }
- stock AC_GetWeaponName(weaponid) {
- new szWeaponName[32];
- if(!(0 <= weaponid <= sizeof(g_WeaponName))) format(szWeaponName, sizeof(szWeaponName), "Weapon %d", weaponid);
- else strunpack(szWeaponName, g_WeaponName[weaponid], sizeof(szWeaponName));
- return szWeaponName;
- }
- stock IsBulletWeapon(weaponid) {
- return (WEAPON_COLT45 <= weaponid <= WEAPON_SNIPER) || weaponid == WEAPON_MINIGUN;
- }
- stock IsHighRateWeapon(weaponid) {
- switch (weaponid) {
- case WEAPON_FLAMETHROWER, WEAPON_DROWN, WEAPON_CARPARK,
- WEAPON_SPRAYCAN, WEAPON_FIREEXTINGUISHER: {
- return true;
- }
- }
- return false;
- }
- stock IsMeleeWeapon(weaponid) {
- return (WEAPON_UNARMED <= weaponid <= WEAPON_KATANA) || (WEAPON_DILDO <= weaponid <= WEAPON_CANE) || weaponid == WEAPON_PISTOLWHIP;
- }
- IsCorrectCameraMode(playerid) {
- switch(GetPlayerCameraMode(playerid)) {
- case 4, 7, 8, 15, 46, 51, 53, 55: return 1;
- }
- return 0;
- }
- CMD:system(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
- format(szMiscArray, sizeof(szMiscArray), "Detecting\tStatus\n\
- Aimbot\t%s\n\
- (Auto) C-Bug\t%s\n\
- Silent Aim\t%s\n\
- Pro-Aim\t%s\n\
- Weapon Range Hacks\t%s\n\
- Speed Hacks (B2-B5)\t%s\n\
- Vehicle Hacks\t%s\n\
- Command Spamming\t%s\n\
- Car Surfing\t%s\n\
- Ninja Jacking\t%s\n\
- Ghost Hacks\t%s\n\
- Name Tags\t%s\n\
- Airbreaking\t%s\n\
- Infinite Stamina\t%s\n\
- ---------\t%s\n\
- Dialog Spoofing\t%s\n\
- Rejected Hits\t%s\n\
- Desync\t%s",
- (ac_ACToggle[AC_AIMBOT] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_CBUG] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_SILENTAIM] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_PROAIM] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_RANGEHACKS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_SPEEDHACKS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_VEHICLEHACKS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_CMDSPAM] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_CARSURFING] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_NINJAJACK] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_GHOSTHACKS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_NAMETAGS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_AIRBREAKING] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_INFINITESTAMINA] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_HEALTHARMORHACKS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_DIALOGSPOOFING] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_REJECTHITS] == true) ? ("{00FF00}On") : ("{FF0000}Off"),
- (ac_ACToggle[AC_DESYNC] == true) ? ("{00FF00}On") : ("{FF0000}Off"));
- ShowPlayerDialogEx(playerid, DIALOG_AC_MAIN, DIALOG_STYLE_TABLIST_HEADERS, "[SYSTEM]: Anti-Cheat", szMiscArray, "Toggle", "");
- return 1;
- }
- CMD:aimcheck(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
- new uPlayer,
- szTitle[32 + MAX_PLAYER_NAME];
- if(sscanf(params, "u", uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /aimcheck [playerid/name]");
- if(!IsPlayerConnected(uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "You specified an invalid player.");
- format(szMiscArray, sizeof(szMiscArray), "Weapon (total fired)\tHit --- Real Miss (of Total Missed)\tRatio\n");
- new Float:fRatio,
- iTotalMiss,
- iRelevantMiss;
- for(new i; i < 46; ++i) {
- if(IsBulletWeapon(i)) {
- iTotalMiss = arrWeaponDataAC[uPlayer][ac_iBulletsFired][i] - arrWeaponDataAC[uPlayer][ac_iBulletsHit][i];
- iRelevantMiss = arrWeaponDataAC[uPlayer][ac_iBulletsFired][i] - arrWeaponDataAC[uPlayer][ac_iBulletsHit][i] - arrWeaponDataAC[uPlayer][ac_iFakeMiss][i];
- iRelevantMiss++;
- fRatio = arrWeaponDataAC[uPlayer][ac_iBulletsHit][i] / iRelevantMiss;
-
- if(arrWeaponDataAC[uPlayer][ac_iBulletsFired][i] < 30) {
- format(szMiscArray, sizeof(szMiscArray), "%s {FFFFFF}[IGNORE] %s (tot: %d)\tHit: %d --- Miss: %d (missed total: %d)\tRatio: %.1f\n", szMiscArray, AC_GetWeaponName(i), arrWeaponDataAC[uPlayer][ac_iBulletsFired][i],
- arrWeaponDataAC[uPlayer][ac_iBulletsHit][i], iRelevantMiss, iTotalMiss, fRatio);
- }
- else if(fRatio < 1.5) {
- format(szMiscArray, sizeof(szMiscArray), "%s {FFFFFF}%s (tot: %d)\tHit: %d --- Miss: %d (missed total: %d)\tRatio: %.1f\n", szMiscArray, AC_GetWeaponName(i), arrWeaponDataAC[uPlayer][ac_iBulletsFired][i],
- arrWeaponDataAC[uPlayer][ac_iBulletsHit][i], iRelevantMiss, iTotalMiss, fRatio);
- }
- else if(1.5 <= fRatio < 3.0) {
- format(szMiscArray, sizeof(szMiscArray), "%s {FFFF00}%s (tot: %d)\t{FFFF00}Hit: %d --- Miss: %d (missed total: %d)\t{FFFF00}Ratio: %.1f\n", szMiscArray, AC_GetWeaponName(i), arrWeaponDataAC[uPlayer][ac_iBulletsFired][i],
- arrWeaponDataAC[uPlayer][ac_iBulletsHit][i], iRelevantMiss, iTotalMiss, fRatio);
- }
- else {
- format(szMiscArray, sizeof(szMiscArray), "%s {FF0000}%s (tot: %d)\t{FF0000}Hit: %d --- Miss: %d (missed total: %d)\t{FF0000}Ratio: %.1f\n", szMiscArray, AC_GetWeaponName(i), arrWeaponDataAC[uPlayer][ac_iBulletsFired][i],
- arrWeaponDataAC[uPlayer][ac_iBulletsHit][i], iRelevantMiss, iTotalMiss, fRatio);
- }
- }
- }
- format(szTitle, sizeof(szTitle), "Aimbot Check | Weapon Data {FFFF00}(%s)", GetPlayerNameEx(uPlayer));
- ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, szTitle, szMiscArray, "<>", "");
- SendClientMessageEx(playerid, COLOR_YELLOW, "---------- [ ANTICHEAT ] ----------");
- SendClientMessageEx(playerid, COLOR_GRAD1, "Jingles:");
- SendClientMessageEx(playerid, COLOR_GRAD1, "");
- SendClientMessageEx(playerid, COLOR_GRAD1, "Player ratios for some weapons (especially Combat Shotguns (SPAS)) can be high even though they're not aimbotting.");
- format(szMiscArray, sizeof(szMiscArray), "Only make conclusions if the total shots fired is higher than approx. 50. TIMESTAMP: %s", date(gettime(), 3));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- SendClientMessageEx(playerid, COLOR_YELLOW, "------------------------------ ");
- return 1;
- }
- CMD:acflags(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
- new uPlayer,
- szTitle[32 + MAX_PLAYER_NAME];
- if(sscanf(params, "u", uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /acflags [playerid/name]");
- if(!IsPlayerConnected(uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "You specified an invalid player.");
- format(szMiscArray, sizeof(szMiscArray), "Name\tFlags");
- for(new i; i < AC_MAX; ++i) {
- switch(arrAntiCheat[uPlayer][ac_iFlags][i]) {
- case 0: format(szMiscArray, sizeof(szMiscArray), "%s\n{FFFFFF}%s\t%d", szMiscArray, ac_ACNames[i], arrAntiCheat[uPlayer][ac_iFlags][i]);
- case 1 .. 9: format(szMiscArray, sizeof(szMiscArray), "%s\n{FFFF00}%s\t{FFFF00}%d", szMiscArray, ac_ACNames[i], arrAntiCheat[uPlayer][ac_iFlags][i]);
- default: format(szMiscArray, sizeof(szMiscArray), "%s\n{FF0000}%s\t{FF0000}%d", szMiscArray, ac_ACNames[i], arrAntiCheat[uPlayer][ac_iFlags][i]);
- }
- }
- format(szTitle, sizeof(szTitle), "AC System Flags | %s", GetPlayerNameEx(uPlayer));
- ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_TABLIST_HEADERS, szTitle, szMiscArray, "<>", "");
- return 1;
- }
- CMD:resetacflags(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
-
- new uPlayer;
- if(sscanf(params, "u", uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /resetacflags [playerid/name]");
- if(!IsPlayerConnected(uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "You specified an invalid player.");
- for(new i; i < AC_MAX; ++i) arrAntiCheat[uPlayer][ac_iFlags][i] = 0;
- format(szMiscArray, sizeof(szMiscArray), "You removed %s's anticheat flags.", GetPlayerNameEx(uPlayer));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- format(szMiscArray, sizeof(szMiscArray), "Administrator %s removed your anticheat flags.", GetPlayerNameEx(playerid));
- SendClientMessageEx(uPlayer, COLOR_YELLOW, szMiscArray);
- return 1;
- }
- CMD:rejects(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
- new uPlayer,
- szTitle[32 + MAX_PLAYER_NAME];
- if(sscanf(params, "u", uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "Usage: /aimcheck [playerid/name]");
- if(!IsPlayerConnected(uPlayer)) return SendClientMessage(playerid, 0xFFFFFFFF, "You specified an invalid player.");
-
- format(szMiscArray, sizeof(szMiscArray), "Reason || Date\tWeapon\tTarget || (Info (0, 1, 2))\n");
- for(new idx; idx < AC_MAX_REJECTED_HITS; ++idx) {
- format(szMiscArray, sizeof(szMiscArray), "%s\n%s || %s\t%s\t%s || (Info: %d, %d, %d)",
- szMiscArray,
- g_HitRejectReasons[arrRejectedHitData[uPlayer][idx][acr_iReason]],
- date(arrRejectedHitData[uPlayer][idx][acr_iTime], 1),
- AC_GetWeaponName(arrRejectedHitData[uPlayer][idx][acr_iWeaponID]),
- GetPlayerNameEx(arrRejectedHitData[uPlayer][idx][acr_iDamagedID]),
- arrRejectedHitData[uPlayer][idx][acr_iInfo][0],
- arrRejectedHitData[uPlayer][idx][acr_iInfo][2],
- arrRejectedHitData[uPlayer][idx][acr_iInfo][2]);
- }
- format(szTitle, sizeof(szTitle), "Rejected Shots | Weapon Data (%s)", GetPlayerNameEx(uPlayer));
- ShowPlayerDialogEx(playerid, 32767, DIALOG_STYLE_TABLIST_HEADERS, szTitle, szMiscArray, "<>", "");
- return 1;
- }
- CMD:resetaim(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR)) return 1;
- foreach(new i : Player) {
- for(new j; j < 46; ++j) {
- arrWeaponDataAC[i][ac_iBulletsHit][j] = 0;
- arrWeaponDataAC[i][ac_iBulletsFired][j] = 0;
- arrWeaponDataAC[i][ac_iFakeMiss][j] = 0;
- }
- }
- return 1;
- }
- CMD:listacflags(playerid, params[]) {
- if(PlayerInfo[playerid][pAdmin] >= 2) {
- SendClientMessageEx(playerid, COLOR_GREEN, "____________________ Current players flagged by the anti pro-aim system: ____________________");
- foreach(new i: Player) {
- if(arrAntiCheat[i][ac_iFlags][AC_PROAIM] > 0) {
- format(szMiscArray, sizeof szMiscArray, "%s (ID: %d) - %d flags.", GetPlayerNameEx(i), i, PlayerInfo[i][pProAimFlags]);
- SendClientMessage(playerid, COLOR_GRAD1, szMiscArray);
- }
- }
- if(PlayerInfo[playerid][pAdmin] >= 4) SendClientMessage(playerid, COLOR_GRAD2, "NOTE: If you are certain a player is not hacking, you may use /resetpaflags.");
- }
- else return SendClientMessageEx(playerid, COLOR_GRAD2, "You're not authorized to use this command.");
- return 1;
- }
- CMD:setproaimvar(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- if(sscanf(params, "d", iShotVariance)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /setproaimvar [range]");
- if(!(0 < strval(params) < 30)) return SendClientMessageEx(playerid, COLOR_GRAD1, "Set it between 0 and 30.");
- iShotVariance = strval(params);
- format(szMiscArray, sizeof(szMiscArray), "You set the shot variance to: %d", iShotVariance);
- SendClientMessageEx(playerid, COLOR_GRAD1, szMiscArray);
- return 1;
- }
- CMD:ploss(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- if(PLoss) PLoss = 0;
- else PLoss = 1;
- SendClientMessageEx(playerid, COLOR_GRAD1, "You toggled the packet loss function.");
- return 1;
- }
- /* Custom Anti-Aimbot by Jingles
- 1) Cheating (C), with C ∈ [true,false],
- 2) Player Moving (M p ) with M p ∈ [true, f alse],
- 3) Target moving (Mt) with Mt ∈ [true,false],
- 4) Changing aiming direction (deltaD), with deltaD ∈[true, f alse],
- 5) Distance from aiming target (D), with D ∈ [0,1,2,3] in which larger the value implies further away is the distance and,
- 6) Aiming accuracy (A) with A ∈ [0, 1, 2, 3] in which the lower the value implies higher is the aiming accuracy.
- Using these data, one can obtain the following prior proba- bility distributions by counting frequencies and then normalize the values:
- 1) P(Ct|Ct−1), and
- 2) P(At|At−1,Ct,Mtp,Mt,△Dt,Dt),
- Inferring the probability of cheating for any particular player follows the following steps.
- At the very first time slice where t = 0, we initialize P(C ̃ = true) to 0.5 (i.e., a player is 0 equally likely to be a cheater or an honest player).
- For each time slice t, the inference carries out in two stages: (See paper)
- stock AC_BayesianNetwork(playerid, iTargetID) {
- if(!arrAntiCheat[playerid][ac_inTrainingMode]) return 1;
-
- new bool:iWasHit,
- iSpeed[2],
- bool:isPlayerMoving[2],
- Float:fDistanceToTarget,
- Float:fAimAccuracy[2],
- Float:fDeltaAimAccuracy,
- Float:fDeltaAimingDirection;
- if(iTargetID == INVALID_PLAYER_ID) {
- iTargetID = arrAntiCheat[playerid][ac_iLastTargetID];
- iWasHit = false;
- }
- else {
- arrAntiCheat[playerid][ac_iLastTargetID] = iTargetID;
- iWasHit = true;
- }
- iSpeed[0] = GetPlayerSpeed(playerid);
- iSpeed[1] = GetPlayerSpeed(iTargetID);
- if(iSpeed[0] > 0) isPlayerMoving[0] = true; // Mp
- if(iSpeed[1] > 0) isPlayerMoving[1] = true; // Mt
- GetPlayerFacingAngle(playerid, arrAntiCheat[playerid][ac_fPlayerAngle][0]); //delta D
- fDistanceToTarget = GetDistanceBetweenPlayers(playerid, iTargetID); //D
- GetPlayerCameraPos(playerid, arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2]);
- GetPlayerCameraFrontVector(playerid, arrAntiCheat[playerid][ac_fCamFVector][0], arrAntiCheat[playerid][ac_fCamFVector][1], arrAntiCheat[playerid][ac_fCamFVector][2]);
- if(arrAntiCheat[playerid][ac_fCamFVector][3] != 0) {
- fDeltaAimingDirection = arrAntiCheat[playerid][ac_fPlayerAngle][1]-arrAntiCheat[playerid][ac_fPlayerAngle][0];
- if(arrLastBulletData[playerid][acl_fTargetPos][0] != 0) {
-
- // t
- fAimAccuracy[0] = DistanceCameraTargetToLocation(
- arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2],
- arrLastBulletData[playerid][acl_fTargetPos][0], arrLastBulletData[playerid][acl_fTargetPos][1], arrLastBulletData[playerid][acl_fTargetPos][2],
- arrAntiCheat[playerid][ac_fCamFVector][0], arrAntiCheat[playerid][ac_fCamFVector][1], arrAntiCheat[playerid][ac_fCamFVector][2]
- );
- // t-1
- fAimAccuracy[1] = DistanceCameraTargetToLocation(
- arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2],
- arrLastBulletData[playerid][acl_fTargetPos][0], arrLastBulletData[playerid][acl_fTargetPos][1], arrLastBulletData[playerid][acl_fTargetPos][2],
- arrAntiCheat[playerid][ac_fCamFVector][3], arrAntiCheat[playerid][ac_fCamFVector][4], arrAntiCheat[playerid][ac_fCamFVector][5]
- );
- }
- }
- // Normalize:
- if(fDeltaAimingDirection < 0) fDeltaAimingDirection = fDeltaAimingDirection * -1; // Always positive.
- switch(fDeltaAimingDirection) {
- case 0 .. 10: fDeltaAimingDirection = 0;
- case 11 .. 40: fDeltaAimingDirection = 1;
- case 41 .. 100: fDeltaAimingDirection = 2;
- default: fDeltaAimingDirection = 3;
- }
- switch(fDistanceToTarget) {
- case 0 .. 5: fDistanceToTarget = 0;
- case 6 .. 10: fDistanceToTarget = 1;
- case 11 .. 20: fDistanceToTarget = 2;
- default: fDistanceToTarget = 3;
- }
- fDeltaAimAccuracy = fAimAccuracy[1] - fAimAccuracy[0];
- if(fAimAccuracy[0] <= 1.5) fAimAccuracy[0] = 0;
- if(1.5 < fAimAccuracy[0] <= 6) fAimAccuracy[0] = 1;
- if(6 < fAimAccuracy[0] <= 10) fAimAccuracy[0] = 2;
- if(fAimAccuracy[0] > 10) fAimAccuracy[0] = 3;
- if(fAimAccuracy[1] <= 1.5) fAimAccuracy[1] = 0;
- if(1.5 < fAimAccuracy[1] <= 6) fAimAccuracy[1] = 1;
- if(6 < fAimAccuracy[1] <= 10) fAimAccuracy[1] = 2;
- if(fAimAccuracy[1] > 10) fAimAccuracy[1] = 3;
-
- switch(fDeltaAimAccuracy) {
- case 0 .. 4: fDeltaAimAccuracy = 0;
- case 5 .. 7: fDeltaAimAccuracy = 1;
- case 8 .. 13: fDeltaAimAccuracy = 2;
- default: fDeltaAimAccuracy = 3;
- }
-
- arrAntiCheat[playerid][ac_fCamFVector][3] = arrAntiCheat[playerid][ac_fCamFVector][0];
- arrAntiCheat[playerid][ac_fCamFVector][4] = arrAntiCheat[playerid][ac_fCamFVector][1];
- arrAntiCheat[playerid][ac_fCamFVector][5] = arrAntiCheat[playerid][ac_fCamFVector][2];
- arrAntiCheat[playerid][ac_fPlayerAngle][1] = arrAntiCheat[playerid][ac_fPlayerAngle][0];
-
- format(szMiscArray, sizeof(szMiscArray), "IC: %d, TH: %d, MP: %d, MT: %d, DTT: %0.1f, DAimDir: %0.1f, AimAcc: %0.1f, AimAcc(t-1): %0.1f, DAimAcc: %0.1f",
- arrAntiCheat[playerid][ac_iIsCheating], iWasHit, isPlayerMoving[0], isPlayerMoving[1], fDistanceToTarget, fDeltaAimingDirection, fAimAccuracy[0], fAimAccuracy[1], fDeltaAimAccuracy);
- SendClientMessageEx(playerid, COLOR_GRAD1, szMiscArray);
- format(szMiscArray, sizeof(szMiscArray), "INSERT INTO `aimbot` (`pID`, `Username`, `time`, `ischeating`, `truehit`, `accuracy`, `aimingdirection`, `playerspeed`, `targetspeed`, `distance`, `deltaaim`) VALUES \
- (%d, '%s', %d, %d, %d, %0.1f, %0.1f, %d, %d, %0.1f, %0.1f)",
- PlayerInfo[playerid][pId],
- GetPlayerNameExt(playerid),
- gettime(),
- arrAntiCheat[playerid][ac_iIsCheating],
- iWasHit,
- fAimAccuracy[0],
- fDeltaAimingDirection,
- iSpeed[0],
- iSpeed[1],
- fDistanceToTarget,
- fDeltaAimAccuracy);
- mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- return 1;
- }
- stock AC_Probability(playerid, iTargetID) {
- new Float:fDeltaAimingDirection,
- Float:fPlayerAngle[2], //t and t=-1
- Float:fAimAccuracy[2], //t and t=-1
- Float:fDeltaCrossHair,
- Float:fDeltaAimAccuracy;
- new iSpeed[2], // 0 == player, 1 == target
- bool:isPlayerMoving[2], // 0 == player, 1 == target
- Float:fDistanceToTarget;
- if(iTargetID != INVALID_PLAYER_ID) {
- iSpeed[0] = GetPlayerSpeed(playerid);
- iSpeed[1] = GetPlayerSpeed(iTargetID);
- if(iSpeed[0] > 0) isPlayerMoving[0] = true; // Mp
- if(iSpeed[1] > 0) isPlayerMoving[1] = true; // Mt
- GetPlayerFacingAngle(playerid, fPlayerAngle[0]); //delta D
- fDistanceToTarget = GetDistanceBetweenPlayers(playerid, iTargetID); //D
- }
- GetPlayerCameraPos(playerid, arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2]);
- GetPlayerCameraFrontVector(playerid, arrAntiCheat[playerid][ac_fCamFVector][0], arrAntiCheat[playerid][ac_fCamFVector][1], arrAntiCheat[playerid][ac_fCamFVector][2]);
- if(arrAntiCheat[playerid][ac_fCamFVector][3] != 0) {
- fDeltaAimingDirection = fPlayerAngle[1]-fPlayerAngle[0];
- if(arrLastBulletData[playerid][acl_fTargetPos][0] != 0) {
-
- // t
- fAimAccuracy[0] = DistanceCameraTargetToLocation(
- arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2],
- arrLastBulletData[playerid][acl_fTargetPos][0], arrLastBulletData[playerid][acl_fTargetPos][1], arrLastBulletData[playerid][acl_fTargetPos][2],
- arrAntiCheat[playerid][ac_fCamFVector][0], arrAntiCheat[playerid][ac_fCamFVector][1], arrAntiCheat[playerid][ac_fCamFVector][2]
- );
- // t-1
- fAimAccuracy[1] = DistanceCameraTargetToLocation(
- arrAntiCheat[playerid][ac_fCamPos][0], arrAntiCheat[playerid][ac_fCamPos][1], arrAntiCheat[playerid][ac_fCamPos][2],
- arrLastBulletData[playerid][acl_fTargetPos][0], arrLastBulletData[playerid][acl_fTargetPos][1], arrLastBulletData[playerid][acl_fTargetPos][2],
- arrAntiCheat[playerid][ac_fCamFVector][3], arrAntiCheat[playerid][ac_fCamFVector][4], arrAntiCheat[playerid][ac_fCamFVector][5]
- );
- }
- }
- format(szMiscArray, sizeof(szMiscArray), "%s aimed %0.1f units from the target. Before, they aimed: %0.1f from the target. Target distance: %0.1f", GetPlayerNameEx(playerid), fAimAccuracy[0], fAimAccuracy[1], fDistanceToTarget);
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- format(szMiscArray, sizeof(szMiscArray), "%s aimed %0.1f units off from before.", GetPlayerNameEx(playerid), fDeltaAimingDirection);
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- if(fDeltaCrossHair < 2.0) fDeltaCrossHair = 0;
- else fDeltaCrossHair = 1;
- switch(fDeltaAimingDirection) {
- case 0 .. 19: fDeltaAimingDirection = 0;
- case 20 .. 45: fDeltaAimingDirection = 1;
- case 46 .. 75: fDeltaAimingDirection = 2;
- default: fDeltaAimingDirection = 3;
- }
- switch(fDistanceToTarget) {
- case 0 .. 4: fDistanceToTarget = 0;
- case 5 .. 9: fDistanceToTarget = 1;
- case 10 .. 14: fDistanceToTarget = 2;
- default: fDistanceToTarget = 3;
- }
- fDeltaAimAccuracy = fAimAccuracy[1] - fAimAccuracy[0];
- if(fAimAccuracy[0] <= 1.5) fAimAccuracy[0] = 0;
- if(1.5 < fAimAccuracy[0] <= 6) fAimAccuracy[0] = 1;
- if(6 < fAimAccuracy[0] <= 10) fAimAccuracy[0] = 2;
- if(fAimAccuracy[0] > 10) fAimAccuracy[0] = 3;
- if(fAimAccuracy[1] <= 1.5) fAimAccuracy[1] = 0;
- if(1.5 < fAimAccuracy[1] <= 6) fAimAccuracy[1] = 1;
- if(6 < fAimAccuracy[1] <= 10) fAimAccuracy[1] = 2;
- if(fAimAccuracy[1] > 10) fAimAccuracy[1] = 3;
- fPlayerAngle[1] = fPlayerAngle[0];
- arrAntiCheat[playerid][ac_fCamFVector][3] = arrAntiCheat[playerid][ac_fCamFVector][0];
- arrAntiCheat[playerid][ac_fCamFVector][4] = arrAntiCheat[playerid][ac_fCamFVector][1];
- arrAntiCheat[playerid][ac_fCamFVector][5] = arrAntiCheat[playerid][ac_fCamFVector][2];
-
- // The Equation:
- // Computation of our variables:
- // P(At|At−1,Ct,Mtp,Mt,Pt,Dt,△Dt,△At)
- arrAntiCheat[playerid][ac_fAimAccuracy] = isPlayerMoving[0] + isPlayerMoving[1] + fDeltaCrossHair + fDistanceToTarget + fDeltaAimingDirection + fAimAccuracy[0] + fDeltaAimAccuracy;
- // 1:
- arrAntiCheat[playerid][ac_fProbability] = arrAntiCheat[playerid][ac_fAimAccuracy] * arrAntiCheat[playerid][ac_iCheatingIndex][1] + arrAntiCheat[playerid][ac_fAimAccuracy] * (1.0 - arrAntiCheat[playerid][ac_iCheatingIndex][1]);
- // 2:
- new Float:T,
- Float:F;
- T = arrAntiCheat[playerid][ac_fAimAccuracy] * arrAntiCheat[playerid][ac_fProbability]; // etc.
- F = arrAntiCheat[playerid][ac_fAimAccuracy] * (arrAntiCheat[playerid][ac_fAimAccuracy] - arrAntiCheat[playerid][ac_fProbability]);
- arrAntiCheat[playerid][ac_iCheatingIndex][0] = T / (T + F); // on t=0;
- format(szMiscArray, sizeof(szMiscArray), "Prob: %0.1f, CI(t): %d, CI(t-1): %d, MP: %d, MT: %d, DCH: %d, DTT: %d, DAimDir: %d, AimAcc: %d, DAimAcc: %d",
- arrAntiCheat[playerid][ac_fProbability], arrAntiCheat[playerid][ac_iCheatingIndex][0], arrAntiCheat[playerid][ac_iCheatingIndex][1],
- isPlayerMoving[0], isPlayerMoving[1], fDeltaCrossHair, fDistanceToTarget, fDeltaAimingDirection, fAimAccuracy[0], fDeltaAimAccuracy);
- SendClientMessageEx(playerid, COLOR_GRAD1, szMiscArray);
- arrAntiCheat[playerid][ac_iCheatingIndex][1] = arrAntiCheat[playerid][ac_iCheatingIndex][0]; // t-1 = t;
- format(szMiscArray, sizeof(szMiscArray), "INSERT INTO `aimbot` (`pID`, `time`, `ratio`, `accuracy`, `aimingdirection`, `playerspeed`, `targetspeed`, `distance`, `deltaaim`) VALUES \
- (%d, %d, %0.1f, %0.1f, %0.1f, %d, %d, %d, %d)",
- PlayerInfo[playerid][pId],
- gettime(),
- arrAntiCheat[playerid][ac_iCheatingIndex][0],
- fAimAccuracy[0],
- fDeltaAimingDirection,
- iSpeed[0],
- iSpeed[1],
- fDistanceToTarget,
- fDeltaAimAccuracy);
- mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- return 1;
- }
- CMD:analytics(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- new uPlayer;
- if(sscanf(params, "u", uPlayer)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /analytics [playerid / part of name]");
- if(!IsPlayerConnected(uPlayer)) return 1;
- format(szMiscArray, sizeof(szMiscArray), "Player: %s\n\n\
- Average Accuracy: %0.1f",
- GetPlayerNameEx(uPlayer),
- floatdiv(arrAntiCheat[uPlayer][ac_fAimAccuracy], ac_TotalShots[uPlayer]));
- ShowPlayerDialogEx(playerid, DIALOG_NOTHING, DIALOG_STYLE_MSGBOX, "Player Analytics", szMiscArray, "Okay", "");
- return 1;
- }
- */
- /*
- CMD:setcheating(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- new uPlayer;
- if(sscanf(params, "u", uPlayer)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /setcheating [0/1]");
- if(arrAntiCheat[uPlayer][ac_iIsCheating]) {
- format(szMiscArray, sizeof(szMiscArray), "You set %s to a honest player.", GetPlayerNameEx(uPlayer));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- arrAntiCheat[uPlayer][ac_iIsCheating] = 0;
- }
- else {
- format(szMiscArray, sizeof(szMiscArray), "You set %s to a cheating player.", GetPlayerNameEx(uPlayer));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- arrAntiCheat[uPlayer][ac_iIsCheating] = 1;
- }
- return 1;
- }
- CMD:settraining(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- new uPlayer;
- if(sscanf(params, "u", uPlayer)) return SendClientMessageEx(playerid, COLOR_GRAD1, "USAGE: /settraining [0/1]");
- if(arrAntiCheat[uPlayer][ac_inTrainingMode]) {
- format(szMiscArray, sizeof(szMiscArray), "You removed %s from the BN training.", GetPlayerNameEx(uPlayer));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- arrAntiCheat[uPlayer][ac_inTrainingMode] = 0;
- }
- else {
- format(szMiscArray, sizeof(szMiscArray), "You added %s to the BN training.", GetPlayerNameEx(uPlayer));
- SendClientMessageEx(playerid, COLOR_YELLOW, szMiscArray);
- arrAntiCheat[uPlayer][ac_inTrainingMode] = 1;
- }
- return 1;
- }
- */
- /*
- CMD:acresults(playerid, params[]) {
- if(!IsAdminLevel(playerid, ADMIN_SENIOR, 1)) return 1;
- mysql_tquery(MainPipeline, "SELECT * FROM `aimbot` WHERE `accuracy` = '3'", true, "OnACQueryResult", "i", 3);
- return 1;
- }
- new iACCountTracker[6],
- iFrequency,
- ACTrackCount;
- forward OnACQueryResult(i);
- public OnACQueryResult(i) {
- new iRows;
- iRows = cache_get_row_count(MainPipeline);
- for(iACCountTracker[0] = 0; iACCountTracker[0] < 2; iACCountTracker[0]++) { // ischeaitng
- for(iACCountTracker[1] = 0; iACCountTracker[1] < 4; iACCountTracker[1]++) { // aimingdirection
- for(iACCountTracker[2] = 0; iACCountTracker[2] < 2; iACCountTracker[2]++) { //playerspeed
- for(iACCountTracker[3] = 0; iACCountTracker[3] < 2; iACCountTracker[3]++) { //targetspeed
- for(iACCountTracker[4] = 0; iACCountTracker[4] < 4; iACCountTracker[4]++) { // distance
- for(iACCountTracker[5] = 0; iACCountTracker[5] < 4; iACCountTracker[5]++) ACSQLQuery(i, iRows); // deltaaim
- }
- }
- }
- }
- }
- i = i - 1;
- if(i < 0) return SendClientMessageToAll(-1, "done");
- else {
- format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `aimbot` WHERE `accuracy` = '%d'", i);
- mysql_tquery(MainPipeline, szMiscArray, true, "OnACQueryResult", "i", i);
- }
- return 1;
- }
- forward OnACQueryResult2(i, iRows);
- public OnACQueryResult2(i, iRows) {
- iFrequency = cache_get_row_count(MainPipeline);
- printf("%d ::: %0.1f, %d, %d, %d, %d, %d, %d, %d", ACTrackCount, floatdiv(iFrequency, iRows) * 100, i, iACCountTracker[0], iACCountTracker[1], iACCountTracker[2], iACCountTracker[3], iACCountTracker[4], iACCountTracker[5]);
- format(szMiscArray, sizeof(szMiscArray), "INSERT INTO `aimbayesian` (`probability`, `ischeating`, `accuracy`, `aimingdirection`, `playerspeed`, `targetspeed`, `distance`, `deltaaim`) VALUES \
- (%0.1f, %d, %d, %d, %d, %d, %d, %d)",
- floatdiv(iFrequency, iRows) * 100, iACCountTracker[0], i, iACCountTracker[1], iACCountTracker[2], iACCountTracker[3], iACCountTracker[4], iACCountTracker[5]);
- mysql_tquery(MainPipeline, szMiscArray, false, "OnQueryFinish", "i", SENDDATA_THREAD);
- ACTrackCount++;
- }
- stock ACSQLQuery(i, iRows) {
- format(szMiscArray, sizeof(szMiscArray), "SELECT * FROM `aimbot` WHERE `accuracy` = '%d' AND `ischeating` = '%d' \
- AND `aimingdirection` = '%d' AND `playerspeed` = '%d' AND `targetspeed` = '%d' AND `distance` = '%d' AND `deltaaim` = '%d'",
- i, iACCountTracker[0], iACCountTracker[1], iACCountTracker[2], iACCountTracker[3], iACCountTracker[4], iACCountTracker[5]);
- mysql_tquery(MainPipeline, szMiscArray, true, "OnACQueryResult2", "ii", i, iRows);
- }
- */
- /*
- GetHealthArmorForLabel(playerid) {
- // -----
- new Float:fHealth,
- Float:fArmour;
- GetHealth(playerid, fHealth);
- GetArmour(playerid, fArmour);
- if(IsPlayerPaused(playerid)) {
- if(!fArmour) format(szMiscArray, sizeof(szMiscArray), "%s (%d)\n(Tabbed)\n\n{FF0000}-[%s{FF0000}]-", GetPlayerNameEx(playerid), playerid, GetPValueForLabel(fHealth));
- else format(szMiscArray, sizeof(szMiscArray), "%s (%d)\n(Tabbed)\n\n-[%s{FF0000}]-\n{FF0000}-[%s{FF0000}]-", GetPlayerNameEx(playerid), playerid, GetPValueForLabel(fArmour), GetPValueForLabel(fHealth));
- }
- else {
- if(!fArmour) format(szMiscArray, sizeof(szMiscArray), "%s (%d)\n\n{FF0000}-[%s{FF0000}]-", GetPlayerNameEx(playerid), playerid, GetPValueForLabel(fHealth));
- else format(szMiscArray, sizeof(szMiscArray), "%s (%d)\n\n-[%s]-\n{FF0000}-[%s{FF0000}]-", GetPlayerNameEx(playerid), playerid, GetPValueForLabel(fArmour), GetPValueForLabel(fHealth));
- }
- // ------
- if(IsPlayerPaused(playerid)) {
- format(szMiscArray, sizeof(szMiscArray), "%s (%d)\n(Tabbed)", GetPlayerNameEx(playerid), playerid);
- }
- else format(szMiscArray, sizeof(szMiscArray), "%s (%d)", GetPlayerNameEx(playerid), playerid);
- return szMiscArray;
- }
- */
- /*
- stock GetPValueForLabel(Float:fData) {
- new szString[128],
- iData;
- iData = floatround(fData);
- switch(iData) {
- case 0: strins(szString, "{000000}0", 0, sizeof(szString));
- case 1 .. 5: strins(szString, ".{000000}.....................", 0, sizeof(szString));
- case 6 .. 10: strins(szString, "..{000000}...................", 0, sizeof(szString));
- case 11 .. 15: strins(szString, "...{000000}.................", 0, sizeof(szString));
- case 16 .. 20: strins(szString, "....{000000}................", 0, sizeof(szString));
- case 21 .. 25: strins(szString, ".....{000000}...............", 0, sizeof(szString));
- case 26 .. 30: strins(szString, "......{000000}..............", 0, sizeof(szString));
- case 31 .. 35: strins(szString, ".......{000000}.............", 0, sizeof(szString));
- case 36 .. 40: strins(szString, "........{000000}............", 0, sizeof(szString));
- case 41 .. 45: strins(szString, ".........{000000}...........", 0, sizeof(szString));
- case 46 .. 50: strins(szString, "..........{000000}..........", 0, sizeof(szString));
- case 51 .. 55: strins(szString, "...........{000000}.........", 0, sizeof(szString));
- case 56 .. 60: strins(szString, "............{000000}........", 0, sizeof(szString));
- case 61 .. 65: strins(szString, ".............{000000}.......", 0, sizeof(szString));
- case 66 .. 70: strins(szString, "..............{000000}......", 0, sizeof(szString));
- case 71 .. 75: strins(szString, "................{000000}....", 0, sizeof(szString));
- case 76 .. 80: strins(szString, ".................{000000}...", 0, sizeof(szString));
- case 81 .. 85: strins(szString, "..................{000000}..", 0, sizeof(szString));
- case 90 .. 95: strins(szString, "...................{000000}.", 0, sizeof(szString));
- case 96 .. 300: strins(szString, "....................", 0, sizeof(szString));
- default: szString = "-------";
- }
- return szString;
- }
- */
- /*
- CreatePlayerLabel(playerid) {
- PlayerLabel[playerid] = CreateDynamic3DTextLabel(GetHealthArmorForLabel(playerid), 0xFFFFFFFF, 0.0, 0.0, 0.15, 30, playerid, .testlos = 1);
- }
- CMD:playerlabel(playerid, params[]) {
-
- if(IsValidDynamic3DTextLabel(PlayerLabel[playerid])) {
- foreach(new i : Player) ShowPlayerNameTagForPlayer(i, playerid, true);
- DestroyDynamic3DTextLabel(PlayerLabel[playerid]);
- SendClientMessageEx(playerid, COLOR_GRAD1, "You turned off your player label.");
- }
- else {
- foreach(new i : Player) ShowPlayerNameTagForPlayer(i, playerid, false);
- PlayerLabel[playerid] = CreateDynamic3DTextLabel(GetHealthArmorForLabel(playerid), 0xFFFFFFFF, 0.0, 0.0, 0.25, 30, playerid, .testlos = 1);
- SendClientMessageEx(playerid, COLOR_GRAD1, "You turned on your player label.");
- }
- return 1;
- }
- */
|