Format scripts

This commit is contained in:
ineedbots 2021-06-18 15:28:18 -06:00
parent 3eca845f07
commit 9713ac71b7
4 changed files with 4160 additions and 3872 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -16,11 +16,12 @@ getBotArray()
{ {
result = []; result = [];
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if(!player is_bot()) if ( !player is_bot() )
continue; continue;
result[result.size] = player; result[result.size] = player;
@ -34,7 +35,7 @@ getBotArray()
*/ */
getGoodMapAmount() getGoodMapAmount()
{ {
switch(getdvar("mapname")) switch ( getdvar( "mapname" ) )
{ {
default: default:
return 2; return 2;
@ -44,13 +45,13 @@ getGoodMapAmount()
/* /*
Rounds to the nearest whole number. Rounds to the nearest whole number.
*/ */
Round(x) Round( x )
{ {
y = int(x); y = int( x );
if(abs(x) - abs(y) > 0.5) if ( abs( x ) - abs( y ) > 0.5 )
{ {
if(x < 0) if ( x < 0 )
return y - 1; return y - 1;
else else
return y + 1; return y + 1;
@ -62,12 +63,12 @@ Round(x)
/* /*
Picks a random thing Picks a random thing
*/ */
PickRandom(arr) PickRandom( arr )
{ {
if (!arr.size) if ( !arr.size )
return undefined; return undefined;
return arr[randomInt(arr.size)]; return arr[randomInt( arr.size )];
} }
/* /*
@ -75,7 +76,7 @@ PickRandom(arr)
*/ */
isDefusing() isDefusing()
{ {
return (isDefined(self.isDefusing) && self.isDefusing); return ( isDefined( self.isDefusing ) && self.isDefusing );
} }
/* /*
@ -83,7 +84,7 @@ isDefusing()
*/ */
isPlanting() isPlanting()
{ {
return (isDefined(self.isPlanting) && self.isPlanting); return ( isDefined( self.isPlanting ) && self.isPlanting );
} }
/* /*
@ -91,7 +92,7 @@ isPlanting()
*/ */
inLastStand() inLastStand()
{ {
return (isDefined(self.laststand) && self.laststand); return ( isDefined( self.laststand ) && self.laststand );
} }
/* /*
@ -99,7 +100,7 @@ inLastStand()
*/ */
isFlagCarrier() isFlagCarrier()
{ {
return (isDefined(self.isFlagCarrier) && self.isFlagCarrier); return ( isDefined( self.isFlagCarrier ) && self.isFlagCarrier );
} }
/* /*
@ -107,7 +108,7 @@ isFlagCarrier()
*/ */
isInUse() isInUse()
{ {
return (isDefined(self.inUse) && self.inUse); return ( isDefined( self.inUse ) && self.inUse );
} }
/* /*
@ -115,7 +116,7 @@ isInUse()
*/ */
isBombCarrier() isBombCarrier()
{ {
return (isDefined(self.isBombCarrier) && self.isBombCarrier); return ( isDefined( self.isBombCarrier ) && self.isBombCarrier );
} }
/* /*
@ -141,17 +142,20 @@ GetBotDiffNum()
{ {
num = 0; num = 0;
switch (getDvar("bot_difficulty")) switch ( getDvar( "bot_difficulty" ) )
{ {
case "fu": case "fu":
num = 3; num = 3;
break; break;
case "hard": case "hard":
num = 2; num = 2;
break; break;
case "normal": case "normal":
num = 1; num = 1;
break; break;
case "easy": case "easy":
default: default:
num = 0; num = 0;
@ -164,9 +168,9 @@ GetBotDiffNum()
/* /*
is the weapon alt mode? is the weapon alt mode?
*/ */
isWeaponAltmode(weap) isWeaponAltmode( weap )
{ {
if (isStrStart(weap, "gl_") || isStrStart(weap, "ft_") || isStrStart(weap, "mk_")) if ( isStrStart( weap, "gl_" ) || isStrStart( weap, "ft_" ) || isStrStart( weap, "mk_" ) )
return true; return true;
return false; return false;
@ -179,14 +183,14 @@ getValidTube()
{ {
weaps = self getweaponslist(); weaps = self getweaponslist();
for (i = 0; i < weaps.size; i++) for ( i = 0; i < weaps.size; i++ )
{ {
weap = weaps[i]; weap = weaps[i];
if(!self getAmmoCount(weap)) if ( !self getAmmoCount( weap ) )
continue; continue;
if ((isSubStr(weap, "gl_") && !isSubStr(weap, "_gl_")) || weap == "china_lake_mp") if ( ( isSubStr( weap, "gl_" ) && !isSubStr( weap, "_gl_" ) ) || weap == "china_lake_mp" )
return weap; return weap;
} }
@ -247,36 +251,36 @@ bot_wait_for_host()
{ {
host = undefined; host = undefined;
while (!isDefined(level) || !isDefined(level.players)) while ( !isDefined( level ) || !isDefined( level.players ) )
wait 0.05; wait 0.05;
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
{ {
host = GetHostPlayer(); host = GetHostPlayer();
if(isDefined(host)) if ( isDefined( host ) )
break; break;
wait 0.05; wait 0.05;
} }
if(!isDefined(host)) if ( !isDefined( host ) )
return; return;
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
{ {
if(IsDefined( host.pers[ "team" ] )) if ( IsDefined( host.pers[ "team" ] ) )
break; break;
wait 0.05; wait 0.05;
} }
if(!IsDefined( host.pers[ "team" ] )) if ( !IsDefined( host.pers[ "team" ] ) )
return; return;
for(i = getDvarFloat("bots_main_waitForHostTime"); i > 0; i -= 0.05) for ( i = getDvarFloat( "bots_main_waitForHostTime" ); i > 0; i -= 0.05 )
{ {
if(host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis") if ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" )
break; break;
wait 0.05; wait 0.05;
@ -286,11 +290,11 @@ bot_wait_for_host()
/* /*
Wrapper for setgoal Wrapper for setgoal
*/ */
SetBotGoal(where, dist) SetBotGoal( where, dist )
{ {
self SetScriptGoal(where, dist); self SetScriptGoal( where, dist );
waittillframeend; waittillframeend;
self notify("new_goal"); self notify( "new_goal" );
} }
/* /*
@ -300,29 +304,30 @@ ClearBotGoal()
{ {
self ClearScriptGoal(); self ClearScriptGoal();
waittillframeend; waittillframeend;
self notify("new_goal"); self notify( "new_goal" );
} }
/* /*
Freezes bot in place Freezes bot in place
*/ */
botStopMove(what) botStopMove( what )
{ {
self endon("disconnect"); self endon( "disconnect" );
self endon("death"); self endon( "death" );
level endon("game_ended"); level endon( "game_ended" );
self notify("botStopMove"); self notify( "botStopMove" );
self endon("botStopMove"); self endon( "botStopMove" );
if (!what) if ( !what )
return; return;
og = self.origin; og = self.origin;
for (;;)
for ( ;; )
{ {
self setVelocity((0,0,0)); self setVelocity( ( 0, 0, 0 ) );
self setOrigin(og); self setOrigin( og );
wait 0.05; wait 0.05;
} }
} }
@ -330,40 +335,125 @@ botStopMove(what)
/* /*
Matches a num to a char Matches a num to a char
*/ */
keyCodeToString(a) keyCodeToString( a )
{ {
b=""; b = "";
switch(a)
switch ( a )
{ {
case 0: b= "a"; break; case 0:
case 1: b= "b"; break; b = "a";
case 2: b= "c"; break; break;
case 3: b= "d"; break;
case 4: b= "e"; break; case 1:
case 5: b= "f"; break; b = "b";
case 6: b= "g"; break; break;
case 7: b= "h"; break;
case 8: b= "i"; break; case 2:
case 9: b= "j"; break; b = "c";
case 10: b= "k"; break; break;
case 11: b= "l"; break;
case 12: b= "m"; break; case 3:
case 13: b= "n"; break; b = "d";
case 14: b= "o"; break; break;
case 15: b= "p"; break;
case 16: b= "q"; break; case 4:
case 17: b= "r"; break; b = "e";
case 18: b= "s"; break; break;
case 19: b= "t"; break;
case 20: b= "u"; break; case 5:
case 21: b= "v"; break; b = "f";
case 22: b= "w"; break; break;
case 23: b= "x"; break;
case 24: b= "y"; break; case 6:
case 25: b= "z"; break; b = "g";
case 26: b= "."; break; break;
case 27: b= " "; break;
case 7:
b = "h";
break;
case 8:
b = "i";
break;
case 9:
b = "j";
break;
case 10:
b = "k";
break;
case 11:
b = "l";
break;
case 12:
b = "m";
break;
case 13:
b = "n";
break;
case 14:
b = "o";
break;
case 15:
b = "p";
break;
case 16:
b = "q";
break;
case 17:
b = "r";
break;
case 18:
b = "s";
break;
case 19:
b = "t";
break;
case 20:
b = "u";
break;
case 21:
b = "v";
break;
case 22:
b = "w";
break;
case 23:
b = "x";
break;
case 24:
b = "y";
break;
case 25:
b = "z";
break;
case 26:
b = ".";
break;
case 27:
b = " ";
break;
} }
return b; return b;
} }
@ -378,11 +468,11 @@ doExtraCheck()
/* /*
Returns the cone dot (like fov, or distance from the center of our screen). Returns the cone dot (like fov, or distance from the center of our screen).
*/ */
getConeDot(to, from, dir) getConeDot( to, from, dir )
{ {
dirToTarget = VectorNormalize(to-from); dirToTarget = VectorNormalize( to - from );
forward = AnglesToForward(dir); forward = AnglesToForward( dir );
return vectordot(dirToTarget, forward); return vectordot( dirToTarget, forward );
} }
/* /*
@ -404,14 +494,15 @@ bot_onUsePlantObjectFix( player )
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
} }
thread playSoundOnPlayers( "mus_sd_planted"+"_"+level.teamPostfix[player.pers["team"]] );
thread playSoundOnPlayers( "mus_sd_planted" + "_" + level.teamPostfix[player.pers["team"]] );
// removed plant audio until finalization of assest TODO : new plant sounds when assests are online // removed plant audio until finalization of assest TODO : new plant sounds when assests are online
// player playSound( "mpl_sd_bomb_plant" ); // player playSound( "mpl_sd_bomb_plant" );
player notify ( "bomb_planted" ); player notify ( "bomb_planted" );
level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player ); level thread maps\mp\_popups::DisplayTeamMessageToAll( &"MP_EXPLOSIVES_PLANTED_BY", player );
if( isdefined(player.pers["plants"]) ) if ( isdefined( player.pers["plants"] ) )
{ {
player.pers["plants"]++; player.pers["plants"]++;
player.plants = player.pers["plants"]; player.plants = player.pers["plants"];
@ -444,7 +535,7 @@ bot_bombPlanted( destroyedObj, player )
level.tickingObject = destroyedObj.visuals[0]; level.tickingObject = destroyedObj.visuals[0];
level.timeLimitOverride = true; level.timeLimitOverride = true;
setGameEndTime( int( gettime() + (level.bombTimer * 1000) ) ); setGameEndTime( int( gettime() + ( level.bombTimer * 1000 ) ) );
setMatchFlag( "bomb_timer", 1 ); setMatchFlag( "bomb_timer", 1 );
if ( !level.multiBomb ) if ( !level.multiBomb )
@ -463,10 +554,10 @@ bot_bombPlanted( destroyedObj, player )
level.players[index].carryIcon destroyElem(); level.players[index].carryIcon destroyElem();
} }
trace = bulletTrace( player.origin + (0,0,20), player.origin - (0,0,2000), false, player ); trace = bulletTrace( player.origin + ( 0, 0, 20 ), player.origin - ( 0, 0, 2000 ), false, player );
tempAngle = randomfloat( 360 ); tempAngle = randomfloat( 360 );
forward = (cos( tempAngle ), sin( tempAngle ), 0); forward = ( cos( tempAngle ), sin( tempAngle ), 0 );
forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) ); forward = vectornormalize( forward - vector_scale( trace["normal"], vectordot( forward, trace["normal"] ) ) );
dropAngles = vectortoangles( forward ); dropAngles = vectortoangles( forward );
@ -474,6 +565,7 @@ bot_bombPlanted( destroyedObj, player )
level.sdBombModel.angles = dropAngles; level.sdBombModel.angles = dropAngles;
level.sdBombModel setModel( "prop_suitcase_bomb" ); level.sdBombModel setModel( "prop_suitcase_bomb" );
} }
destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" ); destroyedObj maps\mp\gametypes\_gameobjects::allowUse( "none" );
destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" ); destroyedObj maps\mp\gametypes\_gameobjects::setVisibleTeam( "none" );
/* /*
@ -488,7 +580,7 @@ bot_bombPlanted( destroyedObj, player )
trigger = destroyedObj.bombDefuseTrig; trigger = destroyedObj.bombDefuseTrig;
trigger.origin = level.sdBombModel.origin; trigger.origin = level.sdBombModel.origin;
visuals = []; visuals = [];
defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, (0,0,32) ); defuseObject = maps\mp\gametypes\_gameobjects::createUseObject( game["defenders"], trigger, visuals, ( 0, 0, 32 ) );
defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" ); defuseObject maps\mp\gametypes\_gameobjects::allowUse( "friendly" );
defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime ); defuseObject maps\mp\gametypes\_gameobjects::setUseTime( level.defuseTime );
defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" ); defuseObject maps\mp\gametypes\_gameobjects::setUseText( &"MP_DEFUSING_EXPLOSIVE" );
@ -520,7 +612,7 @@ bot_bombPlanted( destroyedObj, player )
explosionOrigin = level.sdBombModel.origin+(0,0,12); explosionOrigin = level.sdBombModel.origin + ( 0, 0, 12 );
level.sdBombModel hide(); level.sdBombModel hide();
if ( isdefined( player ) ) if ( isdefined( player ) )
@ -533,8 +625,8 @@ bot_bombPlanted( destroyedObj, player )
else else
destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" ); destroyedObj.visuals[0] radiusDamage( explosionOrigin, 512, 200, 20, undefined, "MOD_EXPLOSIVE", "briefcase_bomb_mp" );
rot = randomfloat(360); rot = randomfloat( 360 );
explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + (0,0,50), (0,0,1), (cos(rot),sin(rot),0) ); explosionEffect = spawnFx( level._effect["bombexplosion"], explosionOrigin + ( 0, 0, 50 ), ( 0, 0, 1 ), ( cos( rot ), sin( rot ), 0 ) );
triggerFx( explosionEffect ); triggerFx( explosionEffect );
thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin ); thread playSoundinSpace( "mpl_sd_exp_suitcase_bomb_main", explosionOrigin );
@ -545,6 +637,7 @@ bot_bombPlanted( destroyedObj, player )
for ( index = 0; index < level.bombZones.size; index++ ) for ( index = 0; index < level.bombZones.size; index++ )
level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject(); level.bombZones[index] maps\mp\gametypes\_gameobjects::disableObject();
defuseObject maps\mp\gametypes\_gameobjects::disableObject(); defuseObject maps\mp\gametypes\_gameobjects::disableObject();
setGameEndTime( 0 ); setGameEndTime( 0 );

View File

@ -19,70 +19,89 @@ init()
level.bot_offline = false; level.bot_offline = false;
if(getDvar("bots_main") == "") if ( getDvar( "bots_main" ) == "" )
setDvar("bots_main", true); setDvar( "bots_main", true );
if (!getDvarInt("bots_main")) if ( !getDvarInt( "bots_main" ) )
return; return;
if(getDvar("bots_main_waitForHostTime") == "") if ( getDvar( "bots_main_waitForHostTime" ) == "" )
setDvar("bots_main_waitForHostTime", 10.0);//how long to wait to wait for the host player setDvar( "bots_main_waitForHostTime", 10.0 ); //how long to wait to wait for the host player
if(getDvar("bots_manage_add") == "") if ( getDvar( "bots_manage_add" ) == "" )
setDvar("bots_manage_add", 0);//amount of bots to add to the game setDvar( "bots_manage_add", 0 ); //amount of bots to add to the game
if(getDvar("bots_manage_fill") == "")
setDvar("bots_manage_fill", 0);//amount of bots to maintain
if(getDvar("bots_manage_fill_spec") == "")
setDvar("bots_manage_fill_spec", true);//to count for fill if player is on spec team
if(getDvar("bots_manage_fill_mode") == "")
setDvar("bots_manage_fill_mode", 0);//fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
if(getDvar("bots_manage_fill_kick") == "")
setDvar("bots_manage_fill_kick", false);//kick bots if too many
if(getDvar("bots_team") == "") if ( getDvar( "bots_manage_fill" ) == "" )
setDvar("bots_team", "autoassign");//which team for bots to join setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
if(getDvar("bots_team_amount") == "")
setDvar("bots_team_amount", 0);//amount of bots on axis team
if(getDvar("bots_team_force") == "")
setDvar("bots_team_force", false);//force bots on team
if(getDvar("bots_team_mode") == "")
setDvar("bots_team_mode", 0);//counts just bots when 1
if(getDvar("bots_loadout_reasonable") == "")//filter out the bad 'guns' and perks if ( getDvar( "bots_manage_fill_spec" ) == "" )
setDvar("bots_loadout_reasonable", false); setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
if(getDvar("bots_loadout_allow_op") == "")//allows jug, marty and laststand
setDvar("bots_loadout_allow_op", true);
if(getDvar("bots_loadout_rank") == "")// what rank the bots should be around, -1 is around the players, 0 is all random
setDvar("bots_loadout_rank", -1);
if(getDvar("bots_loadout_codpoints") == "")// how much cod points a bot should have, -1 is around the players, 0 is all random
setDvar("bots_loadout_codpoints", -1);
if(getDvar("bots_loadout_prestige") == "")// what pretige the bots will be, -1 is the players, -2 is random
setDvar("bots_loadout_prestige", -1);
if(getDvar("bots_play_target_other") == "")//bot target non play ents (vehicles) if ( getDvar( "bots_manage_fill_mode" ) == "" )
setDvar("bots_play_target_other", true); setDvar( "bots_manage_fill_mode", 0 ); //fill mode, 0 adds everyone, 1 just bots, 2 maintains at maps, 3 is 2 with 1
if(getDvar("bots_play_killstreak") == "")//bot use killstreaks
setDvar("bots_play_killstreak", true); if ( getDvar( "bots_manage_fill_kick" ) == "" )
if(getDvar("bots_play_nade") == "")//bots grenade setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
setDvar("bots_play_nade", true);
if(getDvar("bots_play_knife") == "")//bots knife if ( getDvar( "bots_team" ) == "" )
setDvar("bots_play_knife", true); setDvar( "bots_team", "autoassign" ); //which team for bots to join
if(getDvar("bots_play_fire") == "")//bots fire
setDvar("bots_play_fire", true); if ( getDvar( "bots_team_amount" ) == "" )
if(getDvar("bots_play_move") == "")//bots move setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
setDvar("bots_play_move", true);
if(getDvar("bots_play_take_carepackages") == "")//bots take carepackages if ( getDvar( "bots_team_force" ) == "" )
setDvar("bots_play_take_carepackages", true); setDvar( "bots_team_force", false ); //force bots on team
if(getDvar("bots_play_obj") == "")//bots play the obj
setDvar("bots_play_obj", true); if ( getDvar( "bots_team_mode" ) == "" )
if(getDvar("bots_play_camp") == "")//bots camp and follow setDvar( "bots_team_mode", 0 ); //counts just bots when 1
setDvar("bots_play_camp", true);
if ( getDvar( "bots_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks
setDvar( "bots_loadout_reasonable", false );
if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand
setDvar( "bots_loadout_allow_op", true );
if ( getDvar( "bots_loadout_rank" ) == "" ) // what rank the bots should be around, -1 is around the players, 0 is all random
setDvar( "bots_loadout_rank", -1 );
if ( getDvar( "bots_loadout_codpoints" ) == "" ) // how much cod points a bot should have, -1 is around the players, 0 is all random
setDvar( "bots_loadout_codpoints", -1 );
if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random
setDvar( "bots_loadout_prestige", -1 );
if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles)
setDvar( "bots_play_target_other", true );
if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks
setDvar( "bots_play_killstreak", true );
if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade
setDvar( "bots_play_nade", true );
if ( getDvar( "bots_play_knife" ) == "" ) //bots knife
setDvar( "bots_play_knife", true );
if ( getDvar( "bots_play_fire" ) == "" ) //bots fire
setDvar( "bots_play_fire", true );
if ( getDvar( "bots_play_move" ) == "" ) //bots move
setDvar( "bots_play_move", true );
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
setDvar( "bots_play_take_carepackages", true );
if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj
setDvar( "bots_play_obj", true );
if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow
setDvar( "bots_play_camp", true );
level.bots = []; level.bots = [];
level.bot_decoys = []; level.bot_decoys = [];
level.bot_planes = []; level.bot_planes = [];
if(!isDefined(game["botWarfare"])) if ( !isDefined( game["botWarfare"] ) )
game["botWarfare"] = true; game["botWarfare"] = true;
thread fixGamemodes(); thread fixGamemodes();
@ -99,9 +118,9 @@ init()
*/ */
onPlayerConnect() onPlayerConnect()
{ {
for(;;) for ( ;; )
{ {
level waittill("connected", player); level waittill( "connected", player );
player thread watch_shoot(); player thread watch_shoot();
player thread watch_grenade(); player thread watch_grenade();
@ -118,10 +137,10 @@ handleBots()
thread teamBots(); thread teamBots();
addBots(); addBots();
while(!level.intermission) while ( !level.intermission )
wait 0.05; wait 0.05;
setDvar("bots_manage_add", getBotArray().size); setDvar( "bots_manage_add", getBotArray().size );
} }
/* /*
@ -129,9 +148,9 @@ handleBots()
*/ */
onDisconnect() onDisconnect()
{ {
self waittill("disconnect"); self waittill( "disconnect" );
level.bots = array_remove(level.bots, self); level.bots = array_remove( level.bots, self );
} }
/* /*
@ -139,9 +158,9 @@ onDisconnect()
*/ */
connected() connected()
{ {
self endon("disconnect"); self endon( "disconnect" );
if (!self is_bot()) if ( !self is_bot() )
return; return;
self thread maps\mp\bots\_bot_script::connected(); self thread maps\mp\bots\_bot_script::connected();
@ -149,7 +168,7 @@ connected()
level.bots[level.bots.size] = self; level.bots[level.bots.size] = self;
self thread onDisconnect(); self thread onDisconnect();
level notify("bot_connected", self); level notify( "bot_connected", self );
} }
/* /*
@ -157,11 +176,11 @@ connected()
*/ */
diffBots() diffBots()
{ {
for (;;) for ( ;; )
{ {
wait 1.5; wait 1.5;
bot_set_difficulty(GetDvar( #"bot_difficulty" )); bot_set_difficulty( GetDvar( #"bot_difficulty" ) );
} }
} }
@ -170,47 +189,49 @@ diffBots()
*/ */
doNonDediBots() doNonDediBots()
{ {
if (!GetDvarInt( #"xblive_basictraining" )) if ( !GetDvarInt( #"xblive_basictraining" ) )
return; return;
if (isDefined(game[ "bots_spawned" ])) if ( isDefined( game[ "bots_spawned" ] ) )
return; return;
game[ "bots_spawned" ] = true; game[ "bots_spawned" ] = true;
if(getDvar("bot_enemies_extra") == "") if ( getDvar( "bot_enemies_extra" ) == "" )
setDvar("bot_enemies_extra", 0); setDvar( "bot_enemies_extra", 0 );
if(getDvar("bot_friends_extra") == "")
setDvar("bot_friends_extra", 0); if ( getDvar( "bot_friends_extra" ) == "" )
setDvar( "bot_friends_extra", 0 );
bot_friends = GetDvarInt( #"bot_friends" ); bot_friends = GetDvarInt( #"bot_friends" );
bot_enemies = GetDvarInt( #"bot_enemies" ); bot_enemies = GetDvarInt( #"bot_enemies" );
bot_enemies += GetDvarInt("bot_enemies_extra"); bot_enemies += GetDvarInt( "bot_enemies_extra" );
bot_friends += GetDvarInt("bot_friends_extra"); bot_friends += GetDvarInt( "bot_friends_extra" );
bot_wait_for_host(); bot_wait_for_host();
host = GetHostPlayer(); host = GetHostPlayer();
team = "allies"; team = "allies";
if(isDefined(host) && isDefined(host.pers[ "team" ]) && (host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis"))
if ( isDefined( host ) && isDefined( host.pers[ "team" ] ) && ( host.pers[ "team" ] == "allies" || host.pers[ "team" ] == "axis" ) )
team = host.pers[ "team" ]; team = host.pers[ "team" ];
setDvar("bots_manage_add", bot_enemies + bot_friends - 1); setDvar( "bots_manage_add", bot_enemies + bot_friends - 1 );
setDvar("bots_manage_fill", bot_enemies + bot_friends); setDvar( "bots_manage_fill", bot_enemies + bot_friends );
setDvar("bots_manage_fill_mode", 0); setDvar( "bots_manage_fill_mode", 0 );
setDvar("bots_manage_fill_kick", true); setDvar( "bots_manage_fill_kick", true );
setDvar("bots_manage_fill_spec", false); setDvar( "bots_manage_fill_spec", false );
setDvar("bots_team", "custom"); setDvar( "bots_team", "custom" );
if (team == "axis") if ( team == "axis" )
setDvar("bots_team_amount", bot_friends); setDvar( "bots_team_amount", bot_friends );
else else
setDvar("bots_team_amount", bot_enemies); setDvar( "bots_team_amount", bot_enemies );
setDvar("bots_team_force", true); setDvar( "bots_team_force", true );
setDvar("bots_team_mode", 0); setDvar( "bots_team_mode", 0 );
} }
/* /*
@ -343,7 +364,7 @@ bot_set_difficulty( difficulty )
SetDvar( "sv_botSprintDistance", "256" ); SetDvar( "sv_botSprintDistance", "256" );
} }
if (!getDvarInt("bots_play_nade")) if ( !getDvarInt( "bots_play_nade" ) )
SetDvar( "sv_botAllowGrenades", "0" ); SetDvar( "sv_botAllowGrenades", "0" );
SetDvar( "bot_difficulty", difficulty ); SetDvar( "bot_difficulty", difficulty );
@ -356,8 +377,8 @@ bot_set_difficulty( difficulty )
*/ */
teamBots_loop() teamBots_loop()
{ {
teamAmount = getDvarInt("bots_team_amount"); teamAmount = getDvarInt( "bots_team_amount" );
toTeam = getDvar("bots_team"); toTeam = getDvar( "bots_team" );
alliesbots = 0; alliesbots = 0;
alliesplayers = 0; alliesplayers = 0;
@ -365,25 +386,26 @@ teamBots_loop()
axisplayers = 0; axisplayers = 0;
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if(!isDefined(player.pers["team"])) if ( !isDefined( player.pers["team"] ) )
continue; continue;
if(player is_bot()) if ( player is_bot() )
{ {
if(player.pers["team"] == "allies") if ( player.pers["team"] == "allies" )
alliesbots++; alliesbots++;
else if(player.pers["team"] == "axis") else if ( player.pers["team"] == "axis" )
axisbots++; axisbots++;
} }
else else
{ {
if(player.pers["team"] == "allies") if ( player.pers["team"] == "allies" )
alliesplayers++; alliesplayers++;
else if(player.pers["team"] == "axis") else if ( player.pers["team"] == "axis" )
axisplayers++; axisplayers++;
} }
} }
@ -391,48 +413,51 @@ teamBots_loop()
allies = alliesbots; allies = alliesbots;
axis = axisbots; axis = axisbots;
if(!getDvarInt("bots_team_mode")) if ( !getDvarInt( "bots_team_mode" ) )
{ {
allies += alliesplayers; allies += alliesplayers;
axis += axisplayers; axis += axisplayers;
} }
if(toTeam != "custom") if ( toTeam != "custom" )
{ {
if(getDvarInt("bots_team_force")) if ( getDvarInt( "bots_team_force" ) )
{ {
if(toTeam == "autoassign") if ( toTeam == "autoassign" )
{ {
if(abs(axis - allies) > 1) if ( abs( axis - allies ) > 1 )
{ {
toTeam = "axis"; toTeam = "axis";
if(axis > allies)
if ( axis > allies )
toTeam = "allies"; toTeam = "allies";
} }
} }
if(toTeam != "autoassign") if ( toTeam != "autoassign" )
{ {
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if(!isDefined(player.pers["team"])) if ( !isDefined( player.pers["team"] ) )
continue; continue;
if(!player is_bot()) if ( !player is_bot() )
continue; continue;
if(player.pers["team"] == toTeam) if ( player.pers["team"] == toTeam )
continue; continue;
if (toTeam == "allies") if ( toTeam == "allies" )
player thread [[level.allies]](); player thread [[level.allies]]();
else if (toTeam == "axis") else if ( toTeam == "axis" )
player thread [[level.axis]](); player thread [[level.axis]]();
else else
player thread [[level.spectator]](); player thread [[level.spectator]]();
break; break;
} }
} }
@ -441,19 +466,20 @@ teamBots_loop()
else else
{ {
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if(!isDefined(player.pers["team"])) if ( !isDefined( player.pers["team"] ) )
continue; continue;
if(!player is_bot()) if ( !player is_bot() )
continue; continue;
if(player.pers["team"] == "axis") if ( player.pers["team"] == "axis" )
{ {
if(axis > teamAmount) if ( axis > teamAmount )
{ {
player thread [[level.allies]](); player thread [[level.allies]]();
break; break;
@ -461,12 +487,12 @@ teamBots_loop()
} }
else else
{ {
if(axis < teamAmount) if ( axis < teamAmount )
{ {
player thread [[level.axis]](); player thread [[level.axis]]();
break; break;
} }
else if(player.pers["team"] != "allies") else if ( player.pers["team"] != "allies" )
{ {
player thread [[level.allies]](); player thread [[level.allies]]();
break; break;
@ -481,7 +507,7 @@ teamBots_loop()
*/ */
teamBots() teamBots()
{ {
for(;;) for ( ;; )
{ {
wait 1.5; wait 1.5;
teamBots_loop(); teamBots_loop();
@ -493,79 +519,81 @@ teamBots()
*/ */
addBots_loop() addBots_loop()
{ {
botsToAdd = GetDvarInt("bots_manage_add"); botsToAdd = GetDvarInt( "bots_manage_add" );
if(botsToAdd > 0) if ( botsToAdd > 0 )
{ {
SetDvar("bots_manage_add", 0); SetDvar( "bots_manage_add", 0 );
if(botsToAdd > 64) if ( botsToAdd > 64 )
botsToAdd = 64; botsToAdd = 64;
for(; botsToAdd > 0; botsToAdd--) for ( ; botsToAdd > 0; botsToAdd-- )
{ {
level add_bot(); level add_bot();
wait 0.25; wait 0.25;
} }
} }
fillMode = getDVarInt("bots_manage_fill_mode"); fillMode = getDVarInt( "bots_manage_fill_mode" );
if(fillMode == 2 || fillMode == 3) if ( fillMode == 2 || fillMode == 3 )
setDvar("bots_manage_fill", getGoodMapAmount()); setDvar( "bots_manage_fill", getGoodMapAmount() );
fillAmount = getDvarInt("bots_manage_fill"); fillAmount = getDvarInt( "bots_manage_fill" );
players = 0; players = 0;
bots = 0; bots = 0;
spec = 0; spec = 0;
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if (player isdemoclient()) if ( player isdemoclient() )
continue; continue;
if(player is_bot()) if ( player is_bot() )
bots++; bots++;
else if(!isDefined(player.pers["team"]) || (player.pers["team"] != "axis" && player.pers["team"] != "allies")) else if ( !isDefined( player.pers["team"] ) || ( player.pers["team"] != "axis" && player.pers["team"] != "allies" ) )
spec++; spec++;
else else
players++; players++;
} }
if(fillMode == 4) if ( fillMode == 4 )
{ {
axisplayers = 0; axisplayers = 0;
alliesplayers = 0; alliesplayers = 0;
playercount = level.players.size; playercount = level.players.size;
for(i = 0; i < playercount; i++)
for ( i = 0; i < playercount; i++ )
{ {
player = level.players[i]; player = level.players[i];
if(player is_bot()) if ( player is_bot() )
continue; continue;
if(!isDefined(player.pers["team"])) if ( !isDefined( player.pers["team"] ) )
continue; continue;
if(player.pers["team"] == "axis") if ( player.pers["team"] == "axis" )
axisplayers++; axisplayers++;
else if(player.pers["team"] == "allies") else if ( player.pers["team"] == "allies" )
alliesplayers++; alliesplayers++;
} }
result = fillAmount - abs(axisplayers - alliesplayers) + bots; result = fillAmount - abs( axisplayers - alliesplayers ) + bots;
if (players == 0) if ( players == 0 )
{ {
if(bots < fillAmount) if ( bots < fillAmount )
result = fillAmount-1; result = fillAmount - 1;
else if (bots > fillAmount) else if ( bots > fillAmount )
result = fillAmount+1; result = fillAmount + 1;
else else
result = fillAmount; result = fillAmount;
} }
@ -573,26 +601,29 @@ addBots_loop()
bots = result; bots = result;
} }
if (!randomInt(999)) if ( !randomInt( 999 ) )
{ {
setDvar("testclients_doreload", true); setDvar( "testclients_doreload", true );
wait 0.1; wait 0.1;
setDvar("testclients_doreload", false); setDvar( "testclients_doreload", false );
doExtraCheck(); doExtraCheck();
} }
amount = bots; amount = bots;
if(fillMode == 0 || fillMode == 2)
if ( fillMode == 0 || fillMode == 2 )
amount += players; amount += players;
if(getDVarInt("bots_manage_fill_spec"))
if ( getDVarInt( "bots_manage_fill_spec" ) )
amount += spec; amount += spec;
if(amount < fillAmount) if ( amount < fillAmount )
setDvar("bots_manage_add", 1); setDvar( "bots_manage_add", 1 );
else if(amount > fillAmount && getDvarInt("bots_manage_fill_kick")) else if ( amount > fillAmount && getDvarInt( "bots_manage_fill_kick" ) )
{ {
tempBot = PickRandom(getBotArray()); tempBot = PickRandom( getBotArray() );
if (isDefined(tempBot))
if ( isDefined( tempBot ) )
kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" ); kick( tempBot getEntityNumber(), "EXE_PLAYERKICKED" );
} }
} }
@ -608,7 +639,7 @@ addBots_loop()
pregame: pregame:
in the ShouldDoPregame sub: in the ShouldDoPregame sub:
B8 01 00 00 00: mov eax, 1 B8 01 00 00 00: mov eax, 1
change to: B8 00 00 00 00: mov eax, 0 change to: B8 00 00 00 00: mov eax, 0
0x4F6C77 in rektmp 0x4F6C77 in rektmp
0x4598A7 in bg 0x4598A7 in bg
@ -616,7 +647,7 @@ change to: B8 00 00 00 00: mov eax, 0
spawnbots: spawnbots:
in the SV_AddTestClient sub: in the SV_AddTestClient sub:
0F 85 A4 00 00 00: jnz 0F 85 A4 00 00 00: jnz
change to: 0F 84 A4 00 00 00: jz change to: 0F 84 A4 00 00 00: jz
0x6B6180 in rektmp 0x6B6180 in rektmp
0x4682F0 in bg 0x4682F0 in bg
@ -633,7 +664,7 @@ addBots()
bot_wait_for_host(); bot_wait_for_host();
for (;;) for ( ;; )
{ {
wait 1.5; wait 1.5;
@ -648,7 +679,7 @@ add_bot()
{ {
bot = addtestclient(); bot = addtestclient();
if (isdefined(bot)) if ( isdefined( bot ) )
{ {
bot.pers["isBot"] = true; bot.pers["isBot"] = true;
bot.equipment_enabled = true; bot.equipment_enabled = true;
@ -714,13 +745,13 @@ bot_is_idle()
return false; return false;
} }
if(self UseButtonPressed()) if ( self UseButtonPressed() )
return false; return false;
if(self isPlanting()) if ( self isPlanting() )
return false; return false;
if(self isDefusing()) if ( self isDefusing() )
return false; return false;
return true; return true;
@ -731,23 +762,24 @@ bot_is_idle()
*/ */
watch_grenade() watch_grenade()
{ {
self endon("disconnect"); self endon( "disconnect" );
self.bot_scrambled = false; self.bot_scrambled = false;
for(;;)
{
self waittill("grenade_fire", g, name);
if (!isDefined(g)) for ( ;; )
{
self waittill( "grenade_fire", g, name );
if ( !isDefined( g ) )
continue; continue;
if(name == "scrambler_mp") if ( name == "scrambler_mp" )
{ {
g thread watch_scrambler(); g thread watch_scrambler();
} }
else if(name == "nightingale_mp") else if ( name == "nightingale_mp" )
{ {
self thread watch_decoy(g); self thread watch_decoy( g );
} }
} }
} }
@ -755,23 +787,24 @@ watch_grenade()
/* /*
Watch the decoy grenade Watch the decoy grenade
*/ */
watch_decoy(g) watch_decoy( g )
{ {
g.team = self.team; g.team = self.team;
level.bot_decoys[level.bot_decoys.size] = g; level.bot_decoys[level.bot_decoys.size] = g;
g waittill("death"); g waittill( "death" );
for ( entry = 0; entry < level.bot_decoys.size; entry++ ) for ( entry = 0; entry < level.bot_decoys.size; entry++ )
{ {
if ( level.bot_decoys[entry] == g ) if ( level.bot_decoys[entry] == g )
{ {
while ( entry < level.bot_decoys.size-1 ) while ( entry < level.bot_decoys.size - 1 )
{ {
level.bot_decoys[entry] = level.bot_decoys[entry+1]; level.bot_decoys[entry] = level.bot_decoys[entry + 1];
entry++; entry++;
} }
level.bot_decoys[entry] = undefined; level.bot_decoys[entry] = undefined;
break; break;
} }
@ -783,39 +816,40 @@ watch_decoy(g)
*/ */
watch_scrambler() watch_scrambler()
{ {
trig = spawn( "trigger_radius", self.origin + (0, 0, -1000), 0, 1000, 2000 ); trig = spawn( "trigger_radius", self.origin + ( 0, 0, -1000 ), 0, 1000, 2000 );
self scramble_nearby(trig); self scramble_nearby( trig );
trig delete(); trig delete ();
} }
/* /*
Watch when players enter the scrambler trigger Watch when players enter the scrambler trigger
*/ */
scramble_nearby(trig) scramble_nearby( trig )
{ {
self endon("death"); self endon( "death" );
self endon("hacked"); self endon( "hacked" );
while(!isDefined(self.owner) || !isDefined(self.owner.team)) while ( !isDefined( self.owner ) || !isDefined( self.owner.team ) )
wait 0.05; wait 0.05;
self.team = self.owner.team; self.team = self.owner.team;
for(;;)
for ( ;; )
{ {
trig waittill("trigger", player); trig waittill( "trigger", player );
if (!isDefined(player) || !isDefined(player.team)) if ( !isDefined( player ) || !isDefined( player.team ) )
continue; continue;
if(self maps\mp\gametypes\_weaponobjects::isStunned()) if ( self maps\mp\gametypes\_weaponobjects::isStunned() )
continue; continue;
if(isDefined(self.owner) && player == self.owner) if ( isDefined( self.owner ) && player == self.owner )
continue; continue;
if(level.teamBased && self.team == player.team) if ( level.teamBased && self.team == player.team )
continue; continue;
player thread scramble_player(); player thread scramble_player();
@ -827,13 +861,13 @@ scramble_nearby(trig)
*/ */
scramble_player() scramble_player()
{ {
self notify("scramble_nearby"); self notify( "scramble_nearby" );
self endon("scramble_nearby"); self endon( "scramble_nearby" );
self.bot_scrambled = true; self.bot_scrambled = true;
wait 0.1; wait 0.1;
if(isDefined(self)) if ( isDefined( self ) )
self.bot_scrambled = false; self.bot_scrambled = false;
} }
@ -842,10 +876,11 @@ scramble_player()
*/ */
watch_shoot() watch_shoot()
{ {
self endon("disconnect"); self endon( "disconnect" );
self.bot_firing = false; self.bot_firing = false;
for(;;)
for ( ;; )
{ {
self waittill( "weapon_fired" ); self waittill( "weapon_fired" );
self thread doFiringThread(); self thread doFiringThread();
@ -857,8 +892,8 @@ watch_shoot()
*/ */
doFiringThread() doFiringThread()
{ {
self endon("disconnect"); self endon( "disconnect" );
self endon("weapon_fired"); self endon( "weapon_fired" );
self.bot_firing = true; self.bot_firing = true;
wait 1; wait 1;
@ -870,18 +905,19 @@ doFiringThread()
*/ */
bot_watch_planes_loop() bot_watch_planes_loop()
{ {
ents = GetEntArray("script_model", "classname"); ents = GetEntArray( "script_model", "classname" );
for(i = 0; i < ents.size; i++)
for ( i = 0; i < ents.size; i++ )
{ {
ent = ents[i]; ent = ents[i];
if(isDefined(ent.bot_plane)) if ( isDefined( ent.bot_plane ) )
continue; continue;
if(ent.model != level.spyplanemodel) if ( ent.model != level.spyplanemodel )
continue; continue;
thread watch_plane(ent); thread watch_plane( ent );
} }
} }
@ -890,9 +926,9 @@ bot_watch_planes_loop()
*/ */
bot_watch_planes() bot_watch_planes()
{ {
for(;;) for ( ;; )
{ {
level waittill("uav_update"); level waittill( "uav_update" );
bot_watch_planes_loop(); bot_watch_planes_loop();
} }
@ -901,23 +937,24 @@ bot_watch_planes()
/* /*
Watches the plane Watches the plane
*/ */
watch_plane(ent) watch_plane( ent )
{ {
ent.bot_plane = true; ent.bot_plane = true;
level.bot_planes[level.bot_planes.size] = ent; level.bot_planes[level.bot_planes.size] = ent;
ent waittill_any("death", "delete", "leaving"); ent waittill_any( "death", "delete", "leaving" );
for ( entry = 0; entry < level.bot_planes.size; entry++ ) for ( entry = 0; entry < level.bot_planes.size; entry++ )
{ {
if ( level.bot_planes[entry] == ent ) if ( level.bot_planes[entry] == ent )
{ {
while ( entry < level.bot_planes.size-1 ) while ( entry < level.bot_planes.size - 1 )
{ {
level.bot_planes[entry] = level.bot_planes[entry+1]; level.bot_planes[entry] = level.bot_planes[entry + 1];
entry++; entry++;
} }
level.bot_planes[entry] = undefined; level.bot_planes[entry] = undefined;
break; break;
} }
@ -937,13 +974,15 @@ bot_killBoost()
*/ */
fixGamemodes() fixGamemodes()
{ {
for(i=0;i<19;i++) for ( i = 0; i < 19; i++ )
{ {
if(isDefined(level.bombZones) && level.gametype == "sd") if ( isDefined( level.bombZones ) && level.gametype == "sd" )
{ {
level.isKillBoosting = ::bot_killBoost; level.isKillBoosting = ::bot_killBoost;
for(i = 0; i < level.bombZones.size; i++)
for ( i = 0; i < level.bombZones.size; i++ )
level.bombZones[i].onUse = ::bot_onUsePlantObjectFix; level.bombZones[i].onUse = ::bot_onUsePlantObjectFix;
break; break;
} }