//////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// ////////////// ////////// //////// /////// ///////////// // /////// //////// //////// //////////// //// /////// ////////////////// /////////////////// /////////// ///////// ////////// //////////// ////////// / /////////////// //////// ///////////// ///////// /// ///////////////////// /////// ////////////////////// //////// ///// ///////// /////// ///////////// /////// /////// /////// //////// ////////////// //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// /* MW2 RSE Bots v35 Retarded (Smart) Enemies includes.gsc CUSTOM GSC FILE Feel free to use the code. Just give credit where credit is due! */ #include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\gametypes\_hud_util; #include maps\mp\perks\_perkfunctions; #using_animtree("multiplayer"); spawnMatchMakingBots() { if(level.players.size < (getdvarint("bots_fill"))) { setdvar("init_testclients", (getdvarint("bots_fill") - level.players.size)); wait 0.2; level bots\bots::init("none", 0, "none"); } wait 0.2; if(getdvarint("init_testclients") != 0) { wait 0.2; level bots\bots::init("none", 0, "none"); } } spawnBots(myteam) { level endon( "menu_kick" ); if(myteam == "allies") { if(level.bot_difficulty == "European Extreme") setdvar("bots_difficulty", "recruit"); level.bot_spawning = 1; level.bot_allies_spawning = 1; level bots\bots::init(myteam, level.bot_allies, "allies"); while(level.bot_allies_spawning == 1) wait 0.1; if(level.bot_difficulty == "European Extreme") setdvar("bots_difficulty", "veteran"); level.bot_axis_spawning = 1; level bots\bots::init(myteam, level.bot_axis, "axis"); } else { if(level.bot_difficulty == "European Extreme") setdvar("bots_difficulty", "recruit"); level.bot_spawning = 1; level.bot_axis_spawning = 1; level bots\bots::init(myteam, level.bot_axis, "axis"); while(level.bot_axis_spawning == 1) wait 0.1; if(level.bot_difficulty == "European Extreme") setdvar("bots_difficulty", "veteran"); level.bot_allies_spawning = 1; level bots\bots::init(myteam, level.bot_allies, "allies"); } } checkForBots() { level notify( "menu_kick" ); foreach(player in level.players) { if(!isDefined(player)) continue; if(isDefined(player.pers["isBot"]) && player.pers["isBot"] == true) { self.menu_toggle = 1; self.menu_didhint_select = true; return; } } } doMenuKick() { level notify( "menu_kick" ); foreach(player in level.players) { if(!isDefined(player)) continue; if(isDefined(player.pers["isBot"]) && player.pers["isBot"] == true) { player thread bots\talk::BotTalkKick(); player.atObjectivePos = true; player.fMoveSpeed = 0; if(player.animinprogress == true) player endBotAnim(); player notify("bot_reset"); wait 0.2; kick( player getEntityNumber(), "EXE_PLAYERKICKED" ); } else wait 0.2; } level.bot_allies_spawning = 0; level.bot_axis_spawning = 0; level.bot_spawning = 0; } doDvars() { // init dvars setdvar("init_testclients", "0"); setdvar("bots_fill", "0"); setdvar("bots_difficulty", "mixed"); setdvar("bots_talkrate", 1200); //setdvar("cg_drawfps", 1); // for console testing //setdvar("cg_fov", "65" ); if(matchMakingGame()) { setdvar("bots_fill", 18); // fill match, still depends on maximum allowed self.menu_didhint_select = true; level thread spawnMatchMakingBots(); } // do predetermined settings setDvar("sv_maxclients", 18); setDvar("testclients_watchkillcam", 0); setDvar("testclients_doattack", 1); setDvar("testclients_doreload", 0); setDvar("testclients_domove", 0); setDvar("party_host", 1); setDvar("party_hostmigration", 0); setDvar("scr_game_matchstarttime", 5); if(getdvar("scr_game_objectivestreaks") == "") setdvar("scr_game_objectivestreaks", 1); // fix for killstreaks in some modes setDvar("ui_allow_teamchange", 0); // init map waypoints if(getdvar("mapname")=="mp_afghan") // stock maps thread bots\waypoints\Afghan::Afghan(); else if(getdvar("mapname")=="mp_estate") thread bots\waypoints\Estate::Estate(); else if(getdvar("mapname")=="mp_rust") thread bots\waypoints\Rust::Rust(); else if(getdvar("mapname")=="mp_highrise") thread bots\waypoints\Highrise::Highrise(); else if(getdvar("mapname")=="mp_invasion") thread bots\waypoints\Invasion::Invasion(); else if(getdvar("mapname")=="mp_terminal") thread bots\waypoints\Terminal::Terminal(); else if(getdvar("mapname")=="mp_derail") thread bots\waypoints\Derail::Derail(); else if(getdvar("mapname")=="mp_favela") thread bots\waypoints\Favela::Favela(); else if(getdvar("mapname")=="mp_checkpoint") thread bots\waypoints\Karachi::Karachi(); else if(getdvar("mapname")=="mp_quarry") thread bots\waypoints\Quarry::Quarry(); else if(getdvar("mapname")=="mp_rundown") thread bots\waypoints\Rundown::Rundown(); else if(getdvar("mapname")=="mp_boneyard") thread bots\waypoints\Scrapyard::Scrapyard(); else if(getdvar("mapname")=="mp_nightshift") thread bots\waypoints\Skidrow::Skidrow(); else if(getdvar("mapname")=="mp_subbase") thread bots\waypoints\Subbase::Subbase(); else if(getdvar("mapname")=="mp_underpass") thread bots\waypoints\Underpass::Underpass(); else if(getdvar("mapname")=="mp_brecourt") thread bots\waypoints\Wasteland::Wasteland(); else if(getdvar("mapname")=="mp_complex") // dlc maps thread bots\waypoints\dlc1\Bailout::Bailout(); else if(getdvar("mapname")=="mp_crash") thread bots\waypoints\dlc1\Crash::Crash(); else if(getdvar("mapname")=="mp_overgrown") thread bots\waypoints\dlc1\Overgrown::Overgrown(); else if(getdvar("mapname")=="mp_compact") thread bots\waypoints\dlc1\Salvage::Salvage(); else if(getdvar("mapname")=="mp_storm") thread bots\waypoints\dlc1\Storm::Storm(); else if(getdvar("mapname")=="mp_abandon") thread bots\waypoints\dlc2\Carnival::Carnival(); else if(getdvar("mapname")=="mp_fuel2") thread bots\waypoints\dlc2\Fuel::Fuel(); else if(getdvar("mapname")=="mp_strike") thread bots\waypoints\dlc2\Strike::Strike(); else if(getdvar("mapname")=="mp_trailerpark") thread bots\waypoints\dlc2\Trailer_Park::Trailer_Park(); else if(getdvar("mapname")=="mp_vacant") thread bots\waypoints\dlc2\Vacant::Vacant(); else iprintln("Bots are not supported on this map."); if(getdvar("mapname")=="mp_underpass" && level.gametype == "koth") // fix an hq problem on underpass { level.fixedhq = spawnstruct(); level.fixedhq.origin = (-190.978, 358.081, 318.125); } // check for global use to avoid multiple defuse level.using = false; } getBalancedScale() { amount = 0; switch(getdvar("mapname")) { case "mp_rust": case "mp_boneyard": case "mp_compact": case "mp_crash": case "mp_vacant": case "mp_trailerpark": case "mp_terminal": case "mp_nightshift": case "mp_favela": case "mp_highrise": case "mp_subbase": case "mp_complex": case "mp_storm": case "mp_afghan": case "mp_overgrown": case "mp_underpass": case "mp_checkpoint": case "mp_invasion": case "mp_quarry": case "mp_rundown": case "mp_estate": case "mp_strike": case "mp_abandon": case "mp_brecourt": case "mp_derail": case "mp_fuel2": if(level.teambased) amount = 6; else amount = 4; break; default: amount = 4; break; } return amount; } _waitframe() { waitframe(); } _gameFlag(flag) { return gameFlag( flag ); } _isReallyAlive(player) { return isReallyAlive(player); } _isUsingRemote() { return isUsingRemote(); } hasPerkk(target, perk) { if(target _hasPerk(perk)) { return true; } else { return false; } } _getWeaponGL() { weaponsList = self GetWeaponsListAll(); primary = undefined; foreach(weapon in weaponsList) { if(isSubStr(weapon, "gl_") && !isSubStr(weapon, "_gl_")) { primary = weapon; break; } } return primary; } _getWeaponSL() { weaponsList = self GetWeaponsListAll(); primary = undefined; foreach(weapon in weaponsList) { if(isSubStr(weapon, "shotgun_attach_")) { primary = weapon; break; } } return primary; } PreCache() { // regular animations precacheMpAnim("pb_sprint"); precacheMpAnim("pb_sprint_pistol"); precacheMpAnim("pb_sprint_shield"); precacheMpAnim("pb_sprint_akimbo"); precacheMpAnim("pb_combatrun_forward_loop"); precacheMpAnim("pb_combatrun_forward_akimbo"); precacheMpAnim("pb_pistol_run_fast"); precacheMpAnim("pb_crouch_run_forward"); //precacheMpAnim("pb_sprint_mg"); //precacheMpAnim("pb_run_fast"); //precacheMpAnim("pb_sprint_RPG"); //precacheMpAnim("pb_walk_forward_shield"); //precacheMpAnim("pb_crouch_walk_forward_shield"); //precacheMpAnim("pb_walk_forward_mg"); //precacheMpAnim("pb_crouch_ads"); //precacheMpAnim("pb_crouch_run_forward_pistol"); //precacheMpAnim("pb_crouch_walk_forward_akimbo"); // death animations precacheMpAnim("pb_death_run_stumble"); precacheMpAnim("pb_stand_death_leg_kickup"); precacheMpAnim("pb_stand_death_shoulderback"); precacheMpAnim("pb_stand_death_chest_blowback"); precacheMpAnim("pb_death_run_onfront"); precacheMpAnim("pb_stand_death_legs"); //precacheMpAnim("pb_stand_death_headshot_slowfall"); //precacheMpAnim("pb_stand_death_head_collapse"); //precacheMpAnim("pb_stand_death_headchest_topple"); //precacheMpAnim("pb_stand_death_neckdeath_thrash"); //precacheMpAnim("pb_stand_death_stumbleforward"); //precacheMpAnim("pb_explosive_round_death_chestA"); // crawling animations //precacheMpAnim("pb_prone_crawl_akimbo"); //precacheMpAnim("pb_prone_death_quickdeath"); // melee animations PrecacheMpAnim("pt_melee_pistol_1"); PrecacheMpAnim("pt_melee_pistol_2"); } endBotAnim() { self.BotAnim delete(); self.BotAnim.headmodel delete(); self ShowAllParts(); self.deathaniminprogress = false; self.animinprogress = false; self.sprintaniminprogress = false; self.walkaniminprogress = false; self.crouchaniminprogress = false; self.meleeaniminprogress = false; } doBotSprintAnim() { self endon("bot_reset"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.animinprogress = true; self.sprintaniminprogress = true; self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-4, 0, 0), (-4, 0, 0) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); if(self.pers["bot"]["weapontype"] == 1) self.BotAnim scriptModelPlayAnim("pb_sprint_pistol"); else if(self.pers["bot"]["weapontype"] == 3) self.BotAnim scriptModelPlayAnim("pb_sprint_akimbo"); else if(self.pers["bot"]["weapontype"] == 4) self.BotAnim scriptModelPlayAnim("pb_sprint_shield"); else self.BotAnim scriptModelPlayAnim("pb_sprint"); self HideTestClientParts(); } doBotWalkAnim() { self endon("bot_reset"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.animinprogress = true; self.walkaniminprogress = true; self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-4, 2, 0), (-4, 2, 0) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); if(self.pers["bot"]["weapontype"] == 1) self.BotAnim scriptModelPlayAnim("pb_pistol_run_fast"); else if(self.pers["bot"]["weapontype"] == 3) self.BotAnim scriptModelPlayAnim("pb_combatrun_forward_akimbo"); else if(self.pers["bot"]["weapontype"] == 4) self.BotAnim scriptModelPlayAnim("pb_sprint_shield"); else self.BotAnim scriptModelPlayAnim("pb_combatrun_forward_loop"); self HideTestClientParts(); } doBotCrouchAnim() { self endon("bot_reset"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.animinprogress = true; self.crouchaniminprogress = true; self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-5, 0, 0), (-5, 0, 0) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); self.BotAnim scriptModelPlayAnim("pb_crouch_run_forward"); self HideTestClientParts(); } doBotMeleeMissAnim() { self endon("bot_reset"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.animinprogress = true; self.meleeaniminprogress = true; self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-2, 0, -2), (-2, 0, -2) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); self.BotAnim scriptModelPlayAnim("pt_melee_pistol_1"); self HideTestClientParts(); } doBotMeleeKillAnim() { self endon("bot_reset"); self endon("death"); self endon("disconnect"); level endon("game_ended"); self.animinprogress = true; self.meleeaniminprogress = true; self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-4, 0, -1), (-4, 0, -1) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); self.BotAnim scriptModelPlayAnim("pt_melee_pistol_2"); self HideTestClientParts(); } HideTestClientParts() { self hidepart("j_ankle_le"); self hidepart("j_hiptwist_le"); self hidepart("j_head"); self hidepart("j_helmet"); self hidepart("j_eyeball_le"); self hidepart("j_clavicle_le"); } doBotDeathAnim() { self endon("bot_reset"); self endon("disconnect"); self.BotAnim delete(); self.BotAnim = spawn("script_model", self.origin); self.BotAnim setModel( self.model ); self.BotAnim LinkTo(self, "tag_origin", (-4, 2, 0), (-4, 2, 0) ); self.BotAnim.headmodel delete(); self.BotAnim.headmodel = spawn( "script_model", self.BotAnim getTagOrigin( "j_spine4" )); self.BotAnim.headmodel setModel(self.headmodel); self.BotAnim.headmodel.angles = (270, 0, 270); self.BotAnim.headmodel linkto( self.BotAnim, "j_spine4" ); switch(randomInt(6)) { case 0: self.BotAnim scriptModelPlayAnim("pb_death_run_stumble"); break; case 1: self.BotAnim scriptModelPlayAnim("pb_stand_death_leg_kickup"); break; case 2: self.BotAnim scriptModelPlayAnim("pb_stand_death_shoulderback"); break; case 3: self.BotAnim scriptModelPlayAnim("pb_stand_death_chest_blowback"); break; case 4: self.BotAnim scriptModelPlayAnim("pb_death_run_onfront"); break; case 5: self.BotAnim scriptModelPlayAnim("pb_stand_death_legs"); break; } self HideTestClientParts(); wait 0.5; self.animinprogress = true; self.deathaniminprogress = true; wait 1; if(!bots\includes::_isReallyAlive(self)) self endBotAnim(); }