Tear down the hacks

This commit is contained in:
INeedGames 2020-11-08 17:24:59 -06:00
parent 7ae35b5585
commit 07bad9e79d
3 changed files with 487 additions and 1840 deletions

View File

@ -26,12 +26,6 @@ init()
thread load_waypoints(); thread load_waypoints();
thread hook_callbacks(); thread hook_callbacks();
setDvar("testClients_watchKillcam", true);
setDvar("testclients_doReload", false);
setDvar("testclients_doMove", false);
setDvar("testclients_doAttack", true);
setDvar("testclients_doCrouch", false);
if(getDvar("bots_main_GUIDs") == "") if(getDvar("bots_main_GUIDs") == "")
setDvar("bots_main_GUIDs", "");//guids of players who will be given host powers, comma seperated setDvar("bots_main_GUIDs", "");//guids of players who will be given host powers, comma seperated
@ -91,59 +85,38 @@ init()
level.bots_maxShotgunDistance *= level.bots_maxShotgunDistance; level.bots_maxShotgunDistance *= level.bots_maxShotgunDistance;
level.bots_listenDist = 100; level.bots_listenDist = 100;
level.bots_listenDist *= level.bots_listenDist; level.bots_listenDist *= level.bots_listenDist;
level.botPushOutDist = 30;
level.smokeRadius = 255; level.smokeRadius = 255;
level.bots = []; level.bots = [];
level.bots_nonfullautoguns = []; level.bots_fullautoguns = [];
level.bots_nonfullautoguns["barrett"] = true; level.bots_fullautoguns["aa12"] = true;
level.bots_nonfullautoguns["beretta"] = true; level.bots_fullautoguns["ak47"] = true;
level.bots_nonfullautoguns["coltanaconda"] = true; level.bots_fullautoguns["aug"] = true;
level.bots_nonfullautoguns["deserteagle"] = true; level.bots_fullautoguns["fn2000"] = true;
level.bots_nonfullautoguns["fal"] = true; level.bots_fullautoguns["glock"] = true;
level.bots_nonfullautoguns["m21"] = true; level.bots_fullautoguns["kriss"] = true;
level.bots_nonfullautoguns["m1014"] = true; level.bots_fullautoguns["m4"] = true;
level.bots_nonfullautoguns["ranger"] = true; level.bots_fullautoguns["m240"] = true;
level.bots_nonfullautoguns["striker"] = true; level.bots_fullautoguns["masada"] = true;
level.bots_nonfullautoguns["usp"] = true; level.bots_fullautoguns["mg4"] = true;
level.bots_nonfullautoguns["wa2000"] = true; level.bots_fullautoguns["mp5k"] = true;
level.bots_nonfullautoguns["dragunov"] = true; level.bots_fullautoguns["p90"] = true;
level.bots_fullautoguns["pp2000"] = true;
level.bots_fullautoguns["rpd"] = true;
level.bots_fullautoguns["sa80"] = true;
level.bots_fullautoguns["scar"] = true;
level.bots_fullautoguns["tavor"] = true;
level.bots_fullautoguns["tmp"] = true;
level.bots_fullautoguns["ump45"] = true;
level.bots_fullautoguns["uzi"] = true;
level.bots_bloodfx = loadfx("impacts/flesh_hit_body_fatal_exit"); level.bots_fullautoguns["ac130"] = true;
PrecacheMpAnim("pb_combatrun_forward_loop"); level.bots_fullautoguns["heli"] = true;
PrecacheMpAnim("pb_crouch_run_forward");
PrecacheMpAnim("pb_sprint");
PrecacheMpAnim("pb_crouch_walk_forward_shield"); level.bots_fullautoguns["ak47classic"] = true;
PrecacheMpAnim("pb_crouch_run_forward_pistol"); level.bots_fullautoguns["ak74u"] = true;
PrecacheMpAnim("pb_crouch_run_forward_RPG");
PrecacheMpAnim("pb_crouch_walk_forward_akimbo");
PrecacheMpAnim("pb_combatrun_forward_shield");
PrecacheMpAnim("pb_pistol_run_fast");
PrecacheMpAnim("pb_combatrun_forward_RPG");
PrecacheMpAnim("pb_combatrun_forward_akimbo");
PrecacheMpAnim("pb_sprint_shield");
PrecacheMpAnim("pb_sprint_akimbo");
PrecacheMpAnim("pb_sprint_pistol");
PrecacheMpAnim("pb_sprint_RPG");
PrecacheMpAnim("pb_climbup");
PrecacheMpAnim("pb_prone_crawl");
PrecacheMpAnim("pb_laststand_crawl");
PrecacheMpAnim("pb_combatrun_forward_loop");
PrecacheMpAnim("pt_stand_core_pullout");
PrecacheMpAnim("pt_melee_pistol_1");
PrecacheMpAnim("pt_melee_prone_pistol");
PrecacheMpAnim("pt_melee_pistol_2");
PrecacheMpAnim("pt_laststand_melee");
PrecacheMpAnim("pt_melee_shield");
level thread fixGamemodes(); level thread fixGamemodes();
@ -761,8 +734,6 @@ onGrenadeFire()
grenade thread AddToSmokeList(); grenade thread AddToSmokeList();
else if (isSubStr(weaponName, "frag_")) else if (isSubStr(weaponName, "frag_"))
grenade thread AddToFragList(self); grenade thread AddToFragList(self);
else if ( weaponName == "claymore" || weaponName == "claymore_mp" )
grenade thread claymoreDetonationBotFix();
} }
} }

File diff suppressed because it is too large Load Diff

View File

@ -58,11 +58,19 @@ is_bot()
} }
/* /*
Returns how much the bot is ads'ing all the way. Bot presses the frag button for time.
*/ */
botAdsAmount() BotPressFrag(time)
{ {
return (1 / (self.bot.ads_highest - self.bot.ads_lowest)) * self.bot.ads_tightness + (1 + (self.bot.ads_highest / (self.bot.ads_lowest - self.bot.ads_highest))); self maps\mp\bots\_bot_internal::frag(time);
}
/*
Bot presses the smoke button for time.
*/
BotPressSmoke(time)
{
self maps\mp\bots\_bot_internal::smoke(time);
} }
/* /*
@ -81,129 +89,6 @@ BotPressAttack(time)
self maps\mp\bots\_bot_internal::pressFire(time); self maps\mp\bots\_bot_internal::pressFire(time);
} }
/*
Bot will stop moving
*/
BotStopMoving(what)
{
self.bot.stop_move = what;
if(what)
self notify("kill_goal");
}
/*
Returns a valid grenade launcher weapon
*/
getValidTube()
{
weaps = self getweaponslistall();
for (i = 0; i < weaps.size; i++)
{
weap = weaps[i];
if(!self getAmmoCount(weap))
continue;
if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "m79_mp")
return weap;
}
return undefined;
}
/*
Returns a random grenade in the bot's inventory.
*/
getValidGrenade()
{
grenadeTypes = [];
grenadeTypes[grenadeTypes.size] = "frag_grenade_mp";
grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp";
grenadeTypes[grenadeTypes.size] = "flash_grenade_mp";
grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp";
grenadeTypes[grenadeTypes.size] = "semtex_mp";
grenadeTypes[grenadeTypes.size] = "throwingknife_mp";
possibles = [];
for(i = 0; i < grenadeTypes.size; i++)
{
if ( !self hasWeapon( grenadeTypes[i] ) )
continue;
if ( !self getAmmoCount( grenadeTypes[i] ) )
continue;
possibles[possibles.size] = grenadeTypes[i];
}
return random(possibles);
}
/*
UNUSED cause buggy
Bots change weapons, does the anims
*/
botChangeWeapon(weapon)// intrestingly, this allows the bots to use pullout and pulldown anims and etc, but bugs out when the bot is frozen while midburst of a firerate limited weapon (m16, only shot one shot, or two shots, even though its a 3 round burst) (never switches until unfrozen)
{
self endon("death");
self endon("disconnect");
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
return;
if (self.bot.knifing || self.bot.isfraggingafter)
return;
if (self.disabledWeapon)
return;
if (self InLastStand() && !self InFinalStand())
return;
self.bot.switch_to_after_none = weapon;
self.bot.switching = true;
ret = undefined;
if (self GetCurrentWeapon() == "none")
{
self notify("weapon_change");
ret = self waittill_any_timeout(5, "weapon_change");
}
else
{
self _DisableWeapon();
self waittill_any_timeout(5, "weapon_change");
self _EnableWeapon();
ret = self waittill_any_timeout(5, "weapon_change");
}
if (ret == "timeout")
return false;
waittillframeend;
self notify("bot_weapon_change", self GetCurrentWeapon());
return true;
}
/*
Bot will throw the grenade
*/
throwBotGrenade(gname, gtime)
{
return self maps\mp\bots\_bot_internal::botThrowGrenade(gname, gtime);
}
/*
If the bot is climbing
*/
botIsClimbing()
{
return self.bot.climbing;
}
/* /*
Returns a random number thats different everytime it changes target Returns a random number thats different everytime it changes target
*/ */
@ -228,7 +113,15 @@ BotGetRandom()
*/ */
IsBotFragging() IsBotFragging()
{ {
return self.bot.isfragging; return self.bot.isfraggingafter;
}
/*
Returns if the bot is pressing smoke button.
*/
IsBotSmoking()
{
return self.bot.issmokingafter;
} }
/* /*
@ -236,7 +129,7 @@ IsBotFragging()
*/ */
IsBotSprinting() IsBotSprinting()
{ {
return self.bot.running; return self.bot.issprinting;
} }
/* /*
@ -266,11 +159,14 @@ BotIsFrozen()
} }
/* /*
Sets the bot's target to be this ent. Bot will stop moving
*/ */
SetAttacker(att) BotStopMoving(what)
{ {
self.bot.target_this_frame = att; self.bot.stop_move = what;
if(what)
self notify("kill_goal");
} }
/* /*
@ -369,6 +265,14 @@ ClearBotJavelinLocation()
self SetBotJavelinLocation(undefined); self SetBotJavelinLocation(undefined);
} }
/*
Sets the bot's target to be this ent.
*/
SetAttacker(att)
{
self.bot.target_this_frame = att;
}
/* /*
Sets the script enemy for a bot. Sets the script enemy for a bot.
*/ */
@ -413,51 +317,6 @@ HasThreat()
return (isDefined(self GetThreat())); return (isDefined(self GetThreat()));
} }
/*
If the bot is doing a knife
*/
IsBotKnifing()
{
return self.bot.knifing;
}
/*
Returns the bot's velocity
*/
getBotVelocity()
{
return self.bot.velocity;
}
/*
If the weapon is not a script weapon (bomb, killstreak, etc, grenades)
*/
isWeaponPrimary(weap)
{
return (maps\mp\gametypes\_weapons::isPrimaryWeapon(weap) || maps\mp\gametypes\_weapons::isAltModeWeapon(weap));
}
/*
If the ent is a vehicle
*/
entIsVehicle(ent)
{
return (ent.classname == "script_vehicle" || ent.model == "vehicle_uav_static_mp" || ent.model == "vehicle_ac130_coop");
}
/*
Returns if the given weapon is full auto.
*/
WeaponIsFullAuto(weap)
{
weaptoks = strtok(weap, "_");
assert(isDefined(weaptoks[0]));
assert(isString(weaptoks[0]));
return !isDefined(level.bots_nonfullautoguns[weaptoks[0]]);
}
/* /*
If the player is defusing If the player is defusing
*/ */
@ -498,14 +357,6 @@ isFlagCarrier()
return (isDefined(self.carryFlag) && self.carryFlag); return (isDefined(self.carryFlag) && self.carryFlag);
} }
/*
If the weapon is allowed to be dropped
*/
isWeaponDroppable(weap)
{
return (maps\mp\gametypes\_weapons::mayDropWeapon(weap));
}
/* /*
Returns if we are stunned. Returns if we are stunned.
*/ */
@ -522,6 +373,139 @@ isArtShocked()
return (isDefined(self.beingArtilleryShellshocked) && self.beingArtilleryShellshocked); return (isDefined(self.beingArtilleryShellshocked) && self.beingArtilleryShellshocked);
} }
/*
UNUSED cause buggy
Bots change weapons, does the anims
*/
botChangeWeapon(weapon)// intrestingly, this allows the bots to use pullout and pulldown anims and etc, but bugs out when the bot is frozen while midburst of a firerate limited weapon (m16, only shot one shot, or two shots, even though its a 3 round burst) (never switches until unfrozen)
{
self endon("death");
self endon("disconnect");
if (level.gameEnded || !gameFlag( "prematch_done" ) || self.bot.isfrozen)
return;
if (self.bot.knifing || self.bot.isfraggingafter)
return;
if (self.disabledWeapon)
return;
if (self InLastStand() && !self InFinalStand())
return;
self.bot.switch_to_after_none = weapon;
self.bot.switching = true;
ret = undefined;
if (self GetCurrentWeapon() == "none")
{
self notify("weapon_change");
ret = self waittill_any_timeout(5, "weapon_change");
}
else
{
self _DisableWeapon();
self waittill_any_timeout(5, "weapon_change");
self _EnableWeapon();
ret = self waittill_any_timeout(5, "weapon_change");
}
if (ret == "timeout")
return false;
waittillframeend;
self notify("bot_weapon_change", self GetCurrentWeapon());
return true;
}
/*
Returns a valid grenade launcher weapon
*/
getValidTube()
{
weaps = self getweaponslistall();
for (i = 0; i < weaps.size; i++)
{
weap = weaps[i];
if(!self getAmmoCount(weap))
continue;
if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "m79_mp")
return weap;
}
return undefined;
}
/*
Returns a random grenade in the bot's inventory.
*/
getValidGrenade()
{
grenadeTypes = [];
grenadeTypes[grenadeTypes.size] = "frag_grenade_mp";
grenadeTypes[grenadeTypes.size] = "smoke_grenade_mp";
grenadeTypes[grenadeTypes.size] = "flash_grenade_mp";
grenadeTypes[grenadeTypes.size] = "concussion_grenade_mp";
grenadeTypes[grenadeTypes.size] = "semtex_mp";
grenadeTypes[grenadeTypes.size] = "throwingknife_mp";
possibles = [];
for(i = 0; i < grenadeTypes.size; i++)
{
if ( !self hasWeapon( grenadeTypes[i] ) )
continue;
if ( !self getAmmoCount( grenadeTypes[i] ) )
continue;
possibles[possibles.size] = grenadeTypes[i];
}
return random(possibles);
}
/*
If the weapon is not a script weapon (bomb, killstreak, etc, grenades)
*/
isWeaponPrimary(weap)
{
return (maps\mp\gametypes\_weapons::isPrimaryWeapon(weap) || maps\mp\gametypes\_weapons::isAltModeWeapon(weap));
}
/*
If the ent is a vehicle
*/
entIsVehicle(ent)
{
return (ent.classname == "script_vehicle" || ent.model == "vehicle_uav_static_mp" || ent.model == "vehicle_ac130_coop");
}
/*
Returns if the given weapon is full auto.
*/
WeaponIsFullAuto(weap)
{
weaptoks = strtok(weap, "_");
assert(isDefined(weaptoks[0]));
assert(isString(weaptoks[0]));
return isDefined(level.bots_fullautoguns[weaptoks[0]]);
}
/*
If the weapon is allowed to be dropped
*/
isWeaponDroppable(weap)
{
return (maps\mp\gametypes\_weapons::mayDropWeapon(weap));
}
/* /*
Returns the height the viewpos is above the origin Returns the height the viewpos is above the origin
*/ */
@ -2418,50 +2402,3 @@ botPlayerModelForWeapon( weapon, secondary )
break; break;
} }
} }
/*
patches so that it uses the bot's getVelocity func
*/
claymoreDetonationBotFix()
{
self endon( "death" );
self waittill( "missile_stuck" );
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - level.claymoreDetonateRadius ), 0, level.claymoreDetonateRadius, level.claymoreDetonateRadius * 2 );
self thread maps\mp\gametypes\_weapons::deleteOnDeath( damagearea );
while ( 1 )
{
damagearea waittill( "trigger", player );
if (!player is_bot())
continue;
if ( getdvarint( "scr_claymoredebug" ) != 1 )
{
if ( isdefined( self.owner ) && player == self.owner )
continue;
if ( !maps\mp\gametypes\_weapons::friendlyFireCheck( self.owner, player, 0 ) )
continue;
}
if ( lengthsquared( player getBotVelocity() ) < 10 )
continue;
if ( !player maps\mp\gametypes\_weapons::shouldAffectClaymore( self ) )
continue;
if ( player damageConeTrace( self.origin, self ) > 0 )
break;
}
self playsound ("claymore_activated");
if ( player _hasPerk( "specialty_delaymine" ) )
wait 3.0;
else
wait level.claymoreDetectionGracePeriod;
self detonate();
}