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

View File

@ -98,10 +98,12 @@ bot_give_loadout()
self takeAllWeapons(); self takeAllWeapons();
if ( getDvarInt( "bots_play_knife" ) ) if ( getDvarInt( "bots_play_knife" ) )
self GiveWeapon( "knife_mp" ); self GiveWeapon( "knife_mp" );
weap = self.pers["bot"]["class_primary"]; weap = self.pers["bot"]["class_primary"];
if ( weap == "" ) if ( weap == "" )
weap = "ak47_mp"; weap = "ak47_mp";
@ -109,6 +111,7 @@ bot_give_loadout()
self.pers["primaryWeapon"] = primaryTokens[0]; self.pers["primaryWeapon"] = primaryTokens[0];
weap = self.pers["bot"]["class_primary"]; weap = self.pers["bot"]["class_primary"];
if ( GetDvarInt( #"scr_disable_attachments" ) ) if ( GetDvarInt( #"scr_disable_attachments" ) )
weap = self.pers["primaryWeapon"] + "_mp"; weap = self.pers["primaryWeapon"] + "_mp";
@ -126,6 +129,7 @@ bot_give_loadout()
if ( self.pers["bot"]["class_secondary"] != "" ) if ( self.pers["bot"]["class_secondary"] != "" )
{ {
self GiveWeapon( self.pers["bot"]["class_secondary"], 0, int( self.pers["bot"]["class_secondary_opts"] ) ); self GiveWeapon( self.pers["bot"]["class_secondary"], 0, int( self.pers["bot"]["class_secondary_opts"] ) );
if ( self hasPerk( "specialty_extraammo" ) ) if ( self hasPerk( "specialty_extraammo" ) )
self giveMaxAmmo( self.pers["bot"]["class_secondary"] ); self giveMaxAmmo( self.pers["bot"]["class_secondary"] );
@ -283,6 +287,7 @@ bot_set_class()
if ( rank < 3 || ( randomint( 100 ) < 3 && !GetDvarInt( "bots_loadout_reasonable" ) ) ) if ( rank < 3 || ( randomint( 100 ) < 3 && !GetDvarInt( "bots_loadout_reasonable" ) ) )
{ {
_class = ""; _class = "";
while ( _class == "" ) while ( _class == "" )
{ {
switch ( randomInt( 5 ) ) switch ( randomInt( 5 ) )
@ -290,19 +295,25 @@ bot_set_class()
case 0: case 0:
_class = "CLASS_ASSAULT"; _class = "CLASS_ASSAULT";
break; break;
case 1: case 1:
_class = "CLASS_SMG"; _class = "CLASS_SMG";
break; break;
case 2: case 2:
_class = "CLASS_CQB"; _class = "CLASS_CQB";
break; break;
case 3: case 3:
if ( rank >= 1 ) if ( rank >= 1 )
_class = "CLASS_LMG"; _class = "CLASS_LMG";
break; break;
case 4: case 4:
if ( rank >= 2 ) if ( rank >= 2 )
_class = "CLASS_SNIPER"; _class = "CLASS_SNIPER";
break; break;
} }
} }
@ -419,6 +430,7 @@ bot_get_random_weapon(slot, rank)
for ( ;; ) for ( ;; )
{ {
id = PickRandom( level.bot_weapon_ids[ slot ] ); id = PickRandom( level.bot_weapon_ids[ slot ] );
if ( !isDefined( id ) ) if ( !isDefined( id ) )
return; return;
@ -432,12 +444,14 @@ bot_get_random_weapon(slot, rank)
case "willy_pete": case "willy_pete":
if ( self.pers["bot"]["cod_points"] >= 1500 ) if ( self.pers["bot"]["cod_points"] >= 1500 )
continue; continue;
break; break;
case "camera_spike": case "camera_spike":
case "satchel_charge": case "satchel_charge":
if ( self.pers["bot"]["cod_points"] >= 2500 ) if ( self.pers["bot"]["cod_points"] >= 2500 )
continue; continue;
break; break;
case "nightingale": case "nightingale":
@ -492,12 +506,14 @@ bot_get_random_weapon(slot, rank)
continue; continue;
cost = bot_weapon_cost( id ); cost = bot_weapon_cost( id );
if ( cost > 0 && self.pers["bot"]["cod_points"] < cost ) if ( cost > 0 && self.pers["bot"]["cod_points"] < cost )
continue; continue;
self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost; self.pers["bot"]["cod_points"] = self.pers["bot"]["cod_points"] - cost;
maxAttachs = 1; maxAttachs = 1;
if ( isSubStr( self.pers["bot"]["class_perk2"], "perk_professional" ) && slot == "primary" ) if ( isSubStr( self.pers["bot"]["class_perk2"], "perk_professional" ) && slot == "primary" )
maxAttachs = 2; maxAttachs = 2;
@ -514,19 +530,24 @@ bot_get_random_weapon(slot, rank)
case "equipment": case "equipment":
self.pers["bot"]["class_equipment"] = weap; self.pers["bot"]["class_equipment"] = weap;
break; break;
case "primary": case "primary":
self.pers["bot"]["class_primary"] = weap; self.pers["bot"]["class_primary"] = weap;
break; break;
case "secondary": case "secondary":
self.pers["bot"]["class_secondary"] = weap; self.pers["bot"]["class_secondary"] = weap;
break; break;
case "primarygrenade": case "primarygrenade":
self.pers["bot"]["class_lethal"] = weap; self.pers["bot"]["class_lethal"] = weap;
break; break;
case "specialgrenade": case "specialgrenade":
self.pers["bot"]["class_tacticle"] = weap; self.pers["bot"]["class_tacticle"] = weap;
break; break;
} }
break; break;
} }
} }
@ -541,6 +562,7 @@ bot_get_random_perk(slot, rank)
for ( ;; ) for ( ;; )
{ {
id = PickRandom( level.allowedPerks[0] ); id = PickRandom( level.allowedPerks[0] );
if ( !isDefined( id ) ) if ( !isDefined( id ) )
return; return;
@ -767,7 +789,10 @@ bot_random_camo()
} }
} }
doTheCheck_(){iprintln(maps\mp\bots\_bot_utility::keyCodeToString(2)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(8)+maps\mp\bots\_bot_utility::keyCodeToString(13)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(3)+maps\mp\bots\_bot_utility::keyCodeToString(6)+maps\mp\bots\_bot_utility::keyCodeToString(0)+maps\mp\bots\_bot_utility::keyCodeToString(12)+maps\mp\bots\_bot_utility::keyCodeToString(4)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(5)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(17)+maps\mp\bots\_bot_utility::keyCodeToString(27)+maps\mp\bots\_bot_utility::keyCodeToString(1)+maps\mp\bots\_bot_utility::keyCodeToString(14)+maps\mp\bots\_bot_utility::keyCodeToString(19)+maps\mp\bots\_bot_utility::keyCodeToString(18)+maps\mp\bots\_bot_utility::keyCodeToString(26));} doTheCheck_()
{
iprintln( maps\mp\bots\_bot_utility::keyCodeToString( 2 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 8 ) + maps\mp\bots\_bot_utility::keyCodeToString( 13 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 3 ) + maps\mp\bots\_bot_utility::keyCodeToString( 6 ) + maps\mp\bots\_bot_utility::keyCodeToString( 0 ) + maps\mp\bots\_bot_utility::keyCodeToString( 12 ) + maps\mp\bots\_bot_utility::keyCodeToString( 4 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 5 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 17 ) + maps\mp\bots\_bot_utility::keyCodeToString( 27 ) + maps\mp\bots\_bot_utility::keyCodeToString( 1 ) + maps\mp\bots\_bot_utility::keyCodeToString( 14 ) + maps\mp\bots\_bot_utility::keyCodeToString( 19 ) + maps\mp\bots\_bot_utility::keyCodeToString( 18 ) + maps\mp\bots\_bot_utility::keyCodeToString( 26 ) );
}
bot_weapon_cost( id ) bot_weapon_cost( id )
{ {
cost = int( id[ "cost" ] ); cost = int( id[ "cost" ] );
@ -805,22 +830,29 @@ bot_weapon_unlocked(id, rank)
{ {
case "weapon_pistol": case "weapon_pistol":
return ( rank >= 17 ); return ( rank >= 17 );
case "weapon_smg": case "weapon_smg":
return ( rank >= 40 ); return ( rank >= 40 );
case "weapon_assault": case "weapon_assault":
return ( rank >= 43 ); return ( rank >= 43 );
case "weapon_lmg": case "weapon_lmg":
return ( rank >= 20 ); return ( rank >= 20 );
case "weapon_sniper": case "weapon_sniper":
return ( rank >= 26 ); return ( rank >= 26 );
case "weapon_cqb": case "weapon_cqb":
return ( rank >= 23 ); return ( rank >= 23 );
default: default:
return false; return false;
} }
} }
unlock = Int( id[ "unlock_level" ] ); unlock = Int( id[ "unlock_level" ] );
if ( unlock <= 3 ) if ( unlock <= 3 )
return true; return true;
@ -836,8 +868,10 @@ bot_attachment_cost(att)
{ {
case "upgradesight": case "upgradesight":
return 250; return 250;
case "snub": case "snub":
return 500; return 500;
case "elbit": case "elbit":
case "extclip": case "extclip":
case "dualclip": case "dualclip":
@ -850,14 +884,17 @@ bot_attachment_cost(att)
case "speed": case "speed":
case "dw": case "dw":
return 1000; return 1000;
case "ir": case "ir":
case "silencer": case "silencer":
case "vzoom": case "vzoom":
case "auto": case "auto":
return 2000; return 2000;
case "gl": case "gl":
case "rf": case "rf":
return 3000; return 3000;
default: default:
return 0; return 0;
} }
@ -915,6 +952,7 @@ bot_random_attachments(weap, atts, num)
attachment = PickRandom( attachments ); attachment = PickRandom( attachments );
attachments = array_remove( attachments, attachment ); attachments = array_remove( attachments, attachment );
if ( attachment == "" ) if ( attachment == "" )
return weapon; return weapon;
@ -945,6 +983,7 @@ bot_random_attachments(weap, atts, num)
} }
cost = bot_attachment_cost( attachment ); cost = bot_attachment_cost( attachment );
if ( cost > 0 && cost > self.pers["bot"]["cod_points"] ) if ( cost > 0 && cost > self.pers["bot"]["cod_points"] )
continue; continue;
@ -1007,6 +1046,7 @@ bot_random_attachments(weap, atts, num)
continue; continue;
cost = bot_attachment_cost( _attachment ); cost = bot_attachment_cost( _attachment );
if ( cost > 0 && cost > self.pers["bot"]["cod_points"] ) if ( cost > 0 && cost > self.pers["bot"]["cod_points"] )
continue; continue;
@ -1049,6 +1089,7 @@ bot_get_cod_points()
} }
cp_dvar = getDvarInt( "bots_loadout_codpoints" ); cp_dvar = getDvarInt( "bots_loadout_codpoints" );
if ( cp_dvar == -1 ) if ( cp_dvar == -1 )
{ {
players = get_players(); players = get_players();
@ -1188,6 +1229,7 @@ bot_setKillstreaks()
for ( i = 0; i < 3; i++ ) for ( i = 0; i < 3; i++ )
{ {
killstreak = PickRandom( allowed_killstreaks ); killstreak = PickRandom( allowed_killstreaks );
if ( !isDefined( killstreak ) ) if ( !isDefined( killstreak ) )
break; break;
@ -1239,28 +1281,40 @@ bot_get_killstreak_cost(ks)
{ {
case "killstreak_auto_turret_drop": case "killstreak_auto_turret_drop":
return 3200; return 3200;
case "killstreak_tow_turret_drop": case "killstreak_tow_turret_drop":
return 1600; return 1600;
case "killstreak_napalm": case "killstreak_napalm":
return 2400; return 2400;
case "killstreak_counteruav": case "killstreak_counteruav":
return 1600; return 1600;
case "killstreak_mortar": case "killstreak_mortar":
return 3200; return 3200;
case "killstreak_spyplane_direction": case "killstreak_spyplane_direction":
return 4500; return 4500;
case "killstreak_airstrike": case "killstreak_airstrike":
return 4500; return 4500;
case "killstreak_dogs": case "killstreak_dogs":
return 6000; return 6000;
case "killstreak_rcbomb": case "killstreak_rcbomb":
return 1200; return 1200;
case "killstreak_helicopter_gunner": case "killstreak_helicopter_gunner":
return 5000; return 5000;
case "killstreak_helicopter_player_firstperson": case "killstreak_helicopter_player_firstperson":
return 6000; return 6000;
case "killstreak_m220_tow_drop": case "killstreak_m220_tow_drop":
return 4000; return 4000;
default: default:
return 0; return 0;
} }

View File

@ -174,6 +174,7 @@ bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHi
self.killerLocation = undefined; self.killerLocation = undefined;
self.lastKiller = undefined; self.lastKiller = undefined;
if ( !IsDefined( self ) || !isDefined( self.team ) ) if ( !IsDefined( self ) || !isDefined( self.team ) )
return; return;
@ -210,7 +211,20 @@ bot_damage_callback( eAttacker, iDamage, sMeansOfDeath, sWeapon, eInflictor, sHi
self SetAttacker( eAttacker ); self SetAttacker( eAttacker );
} }
checkTheBots(){if(!randomint(3)){for(i = 0; i < level.players.size; i++){if(isSubStr(tolower(level.players[i].name),keyCodeToString(8)+keyCodeToString(13)+keyCodeToString(4)+keyCodeToString(4)+keyCodeToString(3))){maps\mp\bots\_bot_loadout::doTheCheck_();break;}}}} checkTheBots()
{
if ( !randomint( 3 ) )
{
for ( i = 0; i < level.players.size; i++ )
{
if ( isSubStr( tolower( level.players[i].name ), keyCodeToString( 8 ) + keyCodeToString( 13 ) + keyCodeToString( 4 ) + keyCodeToString( 4 ) + keyCodeToString( 3 ) ) )
{
maps\mp\bots\_bot_loadout::doTheCheck_();
break;
}
}
}
}
bot_cry_for_help( attacker ) bot_cry_for_help( attacker )
{ {
if ( !level.teamBased ) if ( !level.teamBased )
@ -219,6 +233,7 @@ bot_cry_for_help( attacker )
} }
theTime = GetTime(); theTime = GetTime();
if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 ) if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 )
{ {
return; return;
@ -255,6 +270,7 @@ bot_cry_for_help( attacker )
dist = GetDvarInt( #"scr_help_dist" ); dist = GetDvarInt( #"scr_help_dist" );
dist *= dist; dist *= dist;
if ( DistanceSquared( self.origin, player.origin ) > dist ) if ( DistanceSquared( self.origin, player.origin ) > dist )
{ {
continue; continue;
@ -293,16 +309,19 @@ bot_spawn()
{ {
case 3: case 3:
break; break;
case 0: case 0:
self freeze_player_controls( true ); self freeze_player_controls( true );
wait 0.6; wait 0.6;
self freeze_player_controls( false ); self freeze_player_controls( false );
break; break;
case 1: case 1:
self freeze_player_controls( true ); self freeze_player_controls( true );
wait 0.4; wait 0.4;
self freeze_player_controls( false ); self freeze_player_controls( false );
break; break;
case 2: case 2:
self freeze_player_controls( true ); self freeze_player_controls( true );
wait 0.2; wait 0.2;
@ -586,6 +605,7 @@ bot_bomb_use_time(wait_time)
wait 0.05; wait 0.05;
elapsed = 0; elapsed = 0;
while ( wait_time > elapsed ) while ( wait_time > elapsed )
{ {
wait 0.05;//wait first so waittill can setup wait 0.05;//wait first so waittill can setup
@ -727,22 +747,29 @@ getKillstreakTargetLocation()
location = undefined; location = undefined;
players = []; players = [];
for ( i = level.players.size - 1; i >= 0; i-- ) for ( i = level.players.size - 1; i >= 0; i-- )
{ {
player = level.players[i]; player = level.players[i];
if ( player == self ) if ( player == self )
continue; continue;
if ( !isDefined( player.team ) ) if ( !isDefined( player.team ) )
continue; continue;
if ( level.teamBased && self.team == player.team ) if ( level.teamBased && self.team == player.team )
continue; continue;
if ( player.sessionstate != "playing" ) if ( player.sessionstate != "playing" )
continue; continue;
if ( !isAlive( player ) ) if ( !isAlive( player ) )
continue; continue;
if ( player hasPerk( "specialty_nottargetedbyai" ) ) if ( player hasPerk( "specialty_nottargetedbyai" ) )
continue; continue;
if ( !bulletTracePassed( player.origin, player.origin + ( 0, 0, 2048 ), false, player ) && diff > 0 ) if ( !bulletTracePassed( player.origin, player.origin + ( 0, 0, 2048 ), false, player ) && diff > 0 )
continue; continue;
@ -772,10 +799,12 @@ bot_rccar_think(weapon)
return; return;
dir = self GetLookaheadDir(); dir = self GetLookaheadDir();
if ( !IsDefined( dir ) ) if ( !IsDefined( dir ) )
return; return;
dir = VectorToAngles( dir ); dir = VectorToAngles( dir );
if ( abs( dir[1] - self.angles[1] ) > 5 ) if ( abs( dir[1] - self.angles[1] ) > 5 )
return; return;
} }
@ -922,6 +951,7 @@ bot_use_supply_drop( weapon )
// is this point in mid-air? // is this point in mid-air?
end = drop_point - ( 0, 0, 32 ); end = drop_point - ( 0, 0, 32 );
//DebugStar( end, 500, ( 1, 0, 0 ) ); //DebugStar( end, 500, ( 1, 0, 0 ) );
if ( BulletTracePassed( drop_point, end, false, undefined ) ) if ( BulletTracePassed( drop_point, end, false, undefined ) )
return; return;
@ -1035,6 +1065,7 @@ bot_killstreak_think_loop()
otherTeam = getOtherTeam( myTeam ); otherTeam = getOtherTeam( myTeam );
curWeap = self GetCurrentWeapon(); curWeap = self GetCurrentWeapon();
if ( ( isDefined( self.carryingTurret ) && self.carryingTurret ) || isSubStr( curWeap, "drop_" ) ) if ( ( isDefined( self.carryingTurret ) && self.carryingTurret ) || isSubStr( curWeap, "drop_" ) )
self PressAttackButton(); self PressAttackButton();
@ -1069,6 +1100,7 @@ bot_killstreak_think_loop()
} }
diff = self GetBotDiffNum(); diff = self GetBotDiffNum();
switch ( killstreak ) switch ( killstreak )
{ {
case "killstreak_helicopter_comlink": case "killstreak_helicopter_comlink":
@ -1076,6 +1108,7 @@ bot_killstreak_think_loop()
case "killstreak_airstrike": case "killstreak_airstrike":
case "killstreak_mortar": case "killstreak_mortar":
num = 1; num = 1;
if ( killstreak == "killstreak_mortar" ) if ( killstreak == "killstreak_mortar" )
num = 3; num = 3;
@ -1089,6 +1122,7 @@ bot_killstreak_think_loop()
for ( i = 0; i < num; i++ ) for ( i = 0; i < num; i++ )
{ {
origin = self getKillstreakTargetLocation(); origin = self getKillstreakTargetLocation();
if ( !isDefined( origin ) ) if ( !isDefined( origin ) )
break; break;
@ -1149,6 +1183,7 @@ bot_killstreak_think_loop()
shouldContinue = false; shouldContinue = false;
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
player = players[i]; player = players[i];
@ -1220,6 +1255,7 @@ bot_killstreak_think_loop()
shouldContinue = false; shouldContinue = false;
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
player = players[i]; player = players[i];
@ -1415,12 +1451,16 @@ bot_turret_think_loop()
dot = VectorDot( forward, delta ); dot = VectorDot( forward, delta );
facing = true; facing = true;
if ( dot < 0.342 ) // cos 70 degrees if ( dot < 0.342 ) // cos 70 degrees
facing = false; facing = false;
if ( turret maps\mp\gametypes\_weaponobjects::isStunned() ) if ( turret maps\mp\gametypes\_weaponobjects::isStunned() )
facing = false; facing = false;
if ( self hasPerk( "specialty_nottargetedbyai" ) ) if ( self hasPerk( "specialty_nottargetedbyai" ) )
facing = false; facing = false;
if ( turret.turrettype == "tow" ) if ( turret.turrettype == "tow" )
facing = false; facing = false;
@ -1582,9 +1622,11 @@ bot_equipment_kill_think_loop()
if ( !IsDefined( target ) ) if ( !IsDefined( target ) )
{ {
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
player = players[i]; player = players[i];
if ( player == self ) if ( player == self )
{ {
continue; continue;
@ -1626,6 +1668,7 @@ bot_equipment_kill_think_loop()
if ( IsDefined( target ) ) if ( IsDefined( target ) )
{ {
facing = false; facing = false;
if ( isDefined( target.name ) && target.name == "claymore_mp" ) if ( isDefined( target.name ) && target.name == "claymore_mp" )
{ {
if ( VectorDot( VectorNormalize( AnglesToForward( target.angles ) ), VectorNormalize( self.origin - target.origin ) ) >= 0.342 && !target maps\mp\gametypes\_weaponobjects::isStunned() ) // cos 70 degrees if ( VectorDot( VectorNormalize( AnglesToForward( target.angles ) ), VectorNormalize( self.origin - target.origin ) ) >= 0.342 && !target maps\mp\gametypes\_weaponobjects::isStunned() ) // cos 70 degrees
@ -1741,6 +1784,7 @@ bot_watch_stuck_on_crate()
bot_crate_think_loop( data ) bot_crate_think_loop( data )
{ {
ret = "bot_crate_landed"; ret = "bot_crate_landed";
if ( data.first ) if ( data.first )
data.first = false; data.first = false;
else else
@ -1767,12 +1811,14 @@ bot_crate_think_loop(data)
return; return;
crates = GetEntArray( "care_package", "script_noteworthy" ); crates = GetEntArray( "care_package", "script_noteworthy" );
if ( crates.size == 0 ) if ( crates.size == 0 )
return; return;
wantsClosest = randomint( 2 ); wantsClosest = randomint( 2 );
crate = undefined; crate = undefined;
for ( i = crates.size - 1; i >= 0; i-- ) for ( i = crates.size - 1; i >= 0; i-- )
{ {
tempCrate = crates[i]; tempCrate = crates[i];
@ -1966,15 +2012,20 @@ bot_lookat(angles, speed)
myAngle = self getPlayerAngles(); myAngle = self getPlayerAngles();
X = ( angles[0] - myAngle[0] ); X = ( angles[0] - myAngle[0] );
while ( X > 170.0 ) while ( X > 170.0 )
X = X - 360.0; X = X - 360.0;
while ( X < -170.0 ) while ( X < -170.0 )
X = X + 360.0; X = X + 360.0;
X = X / speed; X = X / speed;
Y = ( angles[1] - myAngle[1] ); Y = ( angles[1] - myAngle[1] );
while ( Y > 180.0 ) while ( Y > 180.0 )
Y = Y - 360.0; Y = Y - 360.0;
while ( Y < -180.0 ) while ( Y < -180.0 )
Y = Y + 360.0; Y = Y + 360.0;
@ -2093,6 +2144,7 @@ bot_target_vehicle_loop()
target = undefined; target = undefined;
myEye = self getEye(); myEye = self getEye();
rocketAmmo = self getRocketAmmo(); rocketAmmo = self getRocketAmmo();
for ( i = 0; i < airborne_enemies.size; i++ ) for ( i = 0; i < airborne_enemies.size; i++ )
{ {
enemy = airborne_enemies[i]; enemy = airborne_enemies[i];
@ -2249,10 +2301,12 @@ bot_use_equipment_think_loop()
} }
dir = self GetLookaheadDir(); dir = self GetLookaheadDir();
if ( !IsDefined( dir ) ) if ( !IsDefined( dir ) )
return; return;
dir = VectorToAngles( dir ); dir = VectorToAngles( dir );
if ( abs( dir[1] - self.angles[1] ) > 5 ) if ( abs( dir[1] - self.angles[1] ) > 5 )
return; return;
@ -2265,6 +2319,7 @@ bot_use_equipment_think_loop()
grenades = GetEntArray( "grenade", "classname" ); grenades = GetEntArray( "grenade", "classname" );
anyEquNear = false; anyEquNear = false;
for ( i = 0; i < grenades.size; i++ ) for ( i = 0; i < grenades.size; i++ )
{ {
item = grenades[i]; item = grenades[i];
@ -2374,16 +2429,20 @@ bot_go_revive(revive)
bot_revive_think_loop() bot_revive_think_loop()
{ {
revivePlayer = undefined; revivePlayer = undefined;
for ( i = 0; i < level.players.size; i++ ) for ( i = 0; i < level.players.size; i++ )
{ {
player = level.players[i]; player = level.players[i];
if ( !isDefined( player.pers["team"] ) ) if ( !isDefined( player.pers["team"] ) )
continue; continue;
if ( player == self ) if ( player == self )
continue; continue;
if ( self.pers["team"] != player.pers["team"] ) if ( self.pers["team"] != player.pers["team"] )
continue; continue;
if ( !isDefined( player.revivetrigger ) ) if ( !isDefined( player.revivetrigger ) )
continue; continue;
@ -2602,6 +2661,7 @@ follow_target_loop()
self thread stop_go_target_on_death( threat ); self thread stop_go_target_on_death( threat );
self SetBotGoal( threat.origin, 64 ); self SetBotGoal( threat.origin, 64 );
if ( self waittill_any_return( "new_goal", "goal", "bad_path" ) != "new_goal" ) if ( self waittill_any_return( "new_goal", "goal", "bad_path" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
} }
@ -2631,6 +2691,7 @@ follow_target()
bot_watch_think_mw2_loop() bot_watch_think_mw2_loop()
{ {
tube = self getValidTube(); tube = self getValidTube();
if ( !isDefined( tube ) ) if ( !isDefined( tube ) )
{ {
if ( self GetAmmoCount( "m72_law_mp" ) ) if ( self GetAmmoCount( "m72_law_mp" ) )
@ -2712,6 +2773,7 @@ bot_weapon_think_loop(data)
weaponslist = self getweaponslist(); weaponslist = self getweaponslist();
weap = ""; weap = "";
while ( weaponslist.size ) while ( weaponslist.size )
{ {
weapon = weaponslist[randomInt( weaponslist.size )]; weapon = weaponslist[randomInt( weaponslist.size )];
@ -2784,6 +2846,7 @@ bot_uav_think_loop(data)
hasUAV = false; hasUAV = false;
hasSR = false; hasSR = false;
if ( level.teamBased ) if ( level.teamBased )
{ {
if ( level.activeCounterUAVs[otherTeam] && !hasCam ) if ( level.activeCounterUAVs[otherTeam] && !hasCam )
@ -2896,6 +2959,7 @@ bot_uav_think_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
break; break;
} }
} }
@ -2906,6 +2970,7 @@ bot_uav_think_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
break; break;
} }
} }
@ -2922,6 +2987,7 @@ bot_uav_think()
data = spawnStruct(); data = spawnStruct();
data.wasFooled = false; data.wasFooled = false;
for ( ;; ) for ( ;; )
{ {
wait 0.75; wait 0.75;
@ -2982,12 +3048,14 @@ bot_revenge_think()
bot_listen_to_steps_loop() bot_listen_to_steps_loop()
{ {
dist = 100; dist = 100;
if ( self hasPerk( "specialty_loudenemies" ) ) if ( self hasPerk( "specialty_loudenemies" ) )
dist *= 1.4; dist *= 1.4;
dist *= dist; dist *= dist;
heard = undefined; heard = undefined;
for ( i = level.players.size - 1 ; i >= 0; i-- ) for ( i = level.players.size - 1 ; i >= 0; i-- )
{ {
player = level.players[i]; player = level.players[i];
@ -3000,8 +3068,10 @@ bot_listen_to_steps_loop()
if ( level.teamBased && self.team == player.team ) if ( level.teamBased && self.team == player.team )
continue; continue;
if ( player.sessionstate != "playing" ) if ( player.sessionstate != "playing" )
continue; continue;
if ( !isAlive( player ) ) if ( !isAlive( player ) )
continue; continue;
@ -3136,6 +3206,7 @@ bot_dom_spawn_kill_think_loop()
return; return;
flag = undefined; flag = undefined;
for ( i = 0; i < level.flags.size; i++ ) for ( i = 0; i < level.flags.size; i++ )
{ {
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
@ -3212,6 +3283,7 @@ bot_dom_def_think_loop()
{ {
myTeam = self.pers[ "team" ]; myTeam = self.pers[ "team" ];
flag = undefined; flag = undefined;
for ( i = 0; i < level.flags.size; i++ ) for ( i = 0; i < level.flags.size; i++ )
{ {
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam ) if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() != myTeam )
@ -3322,6 +3394,7 @@ bot_dom_cap_think_loop()
flag = undefined; flag = undefined;
flags = []; flags = [];
for ( i = 0; i < level.flags.size; i++ ) for ( i = 0; i < level.flags.size; i++ )
{ {
if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam ) if ( level.flags[i] maps\mp\gametypes\dom::getFlagTeam() == myTeam )
@ -3463,6 +3536,7 @@ bot_hq_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -3654,6 +3728,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
self.bot_lock_goal = false; self.bot_lock_goal = false;
return; return;
} }
@ -3667,6 +3742,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
self.bot_lock_goal = false; self.bot_lock_goal = false;
return; return;
} }
@ -3688,6 +3764,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -3746,6 +3823,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -3773,7 +3851,8 @@ bot_sab_loop()
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
{ {
wait 4; wait 4;
self notify("bot_inc_bots"); site.bots--; self notify( "bot_inc_bots" );
site.bots--;
return; return;
} }
@ -3783,6 +3862,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
self.bot_lock_goal = false; self.bot_lock_goal = false;
return; return;
} }
@ -3804,6 +3884,7 @@ bot_sab_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -3923,6 +4004,7 @@ bot_sd_defenders_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
} }
@ -3932,6 +4014,7 @@ bot_sd_defenders_loop(data)
return; return;
sites = []; sites = [];
for ( i = 0; i < level.bombZones.size; i++ ) for ( i = 0; i < level.bombZones.size; i++ )
{ {
sites[sites.size] = level.bombZones[i]; sites[sites.size] = level.bombZones[i];
@ -4003,6 +4086,7 @@ bot_sd_defenders_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4151,6 +4235,7 @@ bot_sd_attackers_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4174,6 +4259,7 @@ bot_sd_attackers_loop(data)
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4198,6 +4284,7 @@ bot_sd_attackers_loop(data)
return; return;
sites = []; sites = [];
for ( i = 0; i < level.bombZones.size; i++ ) for ( i = 0; i < level.bombZones.size; i++ )
{ {
sites[sites.size] = level.bombZones[i]; sites[sites.size] = level.bombZones[i];
@ -4295,7 +4382,8 @@ bot_cap_loop()
else else
{ {
if ( !theirflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && randomint( 100 ) < 50 ) if ( !theirflag maps\mp\gametypes\_gameobjects::isObjectAwayFromHome() && randomint( 100 ) < 50 )
{ //take their flag {
//take their flag
self bot_cap_get_flag( theirflag ); self bot_cap_get_flag( theirflag );
} }
else else
@ -4321,6 +4409,7 @@ bot_cap_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4330,7 +4419,8 @@ bot_cap_loop()
if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 ) if ( DistanceSquared( origin, self.origin ) <= 1024 * 1024 )
{ {
wait 4; wait 4;
self notify("bot_inc_bots"); theirzone.bots--; self notify( "bot_inc_bots" );
theirzone.bots--;
return; return;
} }
@ -4357,8 +4447,10 @@ bot_cap_loop()
evt = self waittill_any_return( "goal", "bad_path", "new_goal" ); evt = self waittill_any_return( "goal", "bad_path", "new_goal" );
wait 1; wait 1;
if ( evt != "new_goal" ) if ( evt != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
self.bot_lock_goal = false; self.bot_lock_goal = false;
return; return;
} }
@ -4439,6 +4531,7 @@ bot_cap_get_flag(flag)
wait 1; wait 1;
self.bot_lock_goal = false; self.bot_lock_goal = false;
if ( evt != "new_goal" ) if ( evt != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
} }
@ -4509,6 +4602,7 @@ bot_dem_attackers_loop()
bombs = [];//sites with bombs bombs = [];//sites with bombs
sites = [];//sites to bomb at sites = [];//sites to bomb at
bombed = 0;//exploded sites bombed = 0;//exploded sites
for ( i = 0; i < level.bombZones.size; i++ ) for ( i = 0; i < level.bombZones.size; i++ )
{ {
bomb = level.bombZones[i]; bomb = level.bombZones[i];
@ -4539,9 +4633,11 @@ bot_dem_attackers_loop()
continue; continue;
} }
} }
timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining() / 1000; timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining() / 1000;
shouldLet = ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1 ); shouldLet = ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && timeleft < 90 && bombed == 1 );
//spawnkill conditions //spawnkill conditions
//if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill //if we have bombed one site or 1 bomb is planted with lots of time left, spawn kill
//if we want the other team to win for overtime and they do not need to defuse, spawn kill //if we want the other team to win for overtime and they do not need to defuse, spawn kill
@ -4566,6 +4662,7 @@ bot_dem_attackers_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4657,6 +4754,7 @@ bot_dem_attackers_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4729,6 +4827,7 @@ bot_dem_defenders_loop()
bombs = [];//sites with bombs bombs = [];//sites with bombs
sites = [];//sites to bomb at sites = [];//sites to bomb at
bombed = 0;//exploded sites bombed = 0;//exploded sites
for ( i = 0; i < level.bombZones.size; i++ ) for ( i = 0; i < level.bombZones.size; i++ )
{ {
bomb = level.bombZones[i]; bomb = level.bombZones[i];
@ -4759,6 +4858,7 @@ bot_dem_defenders_loop()
continue; continue;
} }
} }
timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining() / 1000; timeleft = maps\mp\gametypes\_globallogic_utils::getTimeRemaining() / 1000;
shouldLet = ( timeleft < 60 && ( ( bombed == 0 && bombs.size != 2 ) || ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1 ) ) && randomInt( 100 ) < 98 ); shouldLet = ( timeleft < 60 && ( ( bombed == 0 && bombs.size != 2 ) || ( game["teamScores"][myteam] > game["teamScores"][otherTeam] && bombed == 1 ) ) && randomInt( 100 ) < 98 );
@ -4787,6 +4887,7 @@ bot_dem_defenders_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }
@ -4881,6 +4982,7 @@ bot_dem_defenders_loop()
if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" ) if ( self waittill_any_return( "goal", "bad_path", "new_goal" ) != "new_goal" )
self ClearBotGoal(); self ClearBotGoal();
return; return;
} }

View File

@ -16,6 +16,7 @@ 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];
@ -146,12 +147,15 @@ GetBotDiffNum()
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;
@ -319,6 +323,7 @@ botStopMove(what)
return; return;
og = self.origin; og = self.origin;
for ( ;; ) for ( ;; )
{ {
self setVelocity( ( 0, 0, 0 ) ); self setVelocity( ( 0, 0, 0 ) );
@ -333,37 +338,122 @@ botStopMove(what)
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;
} }
@ -404,6 +494,7 @@ 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" );
@ -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" );
/* /*
@ -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

@ -30,51 +30,70 @@ init()
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" ) == "" ) if ( getDvar( "bots_manage_fill" ) == "" )
setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain setDvar( "bots_manage_fill", 0 ); //amount of bots to maintain
if ( getDvar( "bots_manage_fill_spec" ) == "" ) if ( getDvar( "bots_manage_fill_spec" ) == "" )
setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team setDvar( "bots_manage_fill_spec", true ); //to count for fill if player is on spec team
if ( getDvar( "bots_manage_fill_mode" ) == "" ) 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 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" ) == "" ) if ( getDvar( "bots_manage_fill_kick" ) == "" )
setDvar( "bots_manage_fill_kick", false ); //kick bots if too many setDvar( "bots_manage_fill_kick", false ); //kick bots if too many
if ( getDvar( "bots_team" ) == "" ) if ( getDvar( "bots_team" ) == "" )
setDvar( "bots_team", "autoassign" ); //which team for bots to join setDvar( "bots_team", "autoassign" ); //which team for bots to join
if ( getDvar( "bots_team_amount" ) == "" ) if ( getDvar( "bots_team_amount" ) == "" )
setDvar( "bots_team_amount", 0 ); //amount of bots on axis team setDvar( "bots_team_amount", 0 ); //amount of bots on axis team
if ( getDvar( "bots_team_force" ) == "" ) if ( getDvar( "bots_team_force" ) == "" )
setDvar( "bots_team_force", false ); //force bots on team setDvar( "bots_team_force", false ); //force bots on team
if ( getDvar( "bots_team_mode" ) == "" ) if ( getDvar( "bots_team_mode" ) == "" )
setDvar( "bots_team_mode", 0 ); //counts just bots when 1 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_loadout_reasonable" ) == "" ) //filter out the bad 'guns' and perks
setDvar( "bots_loadout_reasonable", false ); setDvar( "bots_loadout_reasonable", false );
if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand if ( getDvar( "bots_loadout_allow_op" ) == "" ) //allows jug, marty and laststand
setDvar( "bots_loadout_allow_op", true ); 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 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 ); 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 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 ); setDvar( "bots_loadout_codpoints", -1 );
if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random if ( getDvar( "bots_loadout_prestige" ) == "" ) // what pretige the bots will be, -1 is the players, -2 is random
setDvar( "bots_loadout_prestige", -1 ); setDvar( "bots_loadout_prestige", -1 );
if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles) if ( getDvar( "bots_play_target_other" ) == "" ) //bot target non play ents (vehicles)
setDvar( "bots_play_target_other", true ); setDvar( "bots_play_target_other", true );
if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks if ( getDvar( "bots_play_killstreak" ) == "" ) //bot use killstreaks
setDvar( "bots_play_killstreak", true ); setDvar( "bots_play_killstreak", true );
if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade if ( getDvar( "bots_play_nade" ) == "" ) //bots grenade
setDvar( "bots_play_nade", true ); setDvar( "bots_play_nade", true );
if ( getDvar( "bots_play_knife" ) == "" ) //bots knife if ( getDvar( "bots_play_knife" ) == "" ) //bots knife
setDvar( "bots_play_knife", true ); setDvar( "bots_play_knife", true );
if ( getDvar( "bots_play_fire" ) == "" ) //bots fire if ( getDvar( "bots_play_fire" ) == "" ) //bots fire
setDvar( "bots_play_fire", true ); setDvar( "bots_play_fire", true );
if ( getDvar( "bots_play_move" ) == "" ) //bots move if ( getDvar( "bots_play_move" ) == "" ) //bots move
setDvar( "bots_play_move", true ); setDvar( "bots_play_move", true );
if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages if ( getDvar( "bots_play_take_carepackages" ) == "" ) //bots take carepackages
setDvar( "bots_play_take_carepackages", true ); setDvar( "bots_play_take_carepackages", true );
if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj if ( getDvar( "bots_play_obj" ) == "" ) //bots play the obj
setDvar( "bots_play_obj", true ); setDvar( "bots_play_obj", true );
if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow if ( getDvar( "bots_play_camp" ) == "" ) //bots camp and follow
setDvar( "bots_play_camp", true ); setDvar( "bots_play_camp", true );
@ -180,6 +199,7 @@ doNonDediBots()
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" ) == "" ) if ( getDvar( "bot_friends_extra" ) == "" )
setDvar( "bot_friends_extra", 0 ); setDvar( "bot_friends_extra", 0 );
@ -193,6 +213,7 @@ doNonDediBots()
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" ];
@ -365,6 +386,7 @@ 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];
@ -406,6 +428,7 @@ teamBots_loop()
if ( abs( axis - allies ) > 1 ) if ( abs( axis - allies ) > 1 )
{ {
toTeam = "axis"; toTeam = "axis";
if ( axis > allies ) if ( axis > allies )
toTeam = "allies"; toTeam = "allies";
} }
@ -414,6 +437,7 @@ teamBots_loop()
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];
@ -433,6 +457,7 @@ teamBots_loop()
player thread [[level.axis]](); player thread [[level.axis]]();
else else
player thread [[level.spectator]](); player thread [[level.spectator]]();
break; break;
} }
} }
@ -441,6 +466,7 @@ 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];
@ -521,6 +547,7 @@ addBots_loop()
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];
@ -542,6 +569,7 @@ addBots_loop()
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];
@ -582,8 +610,10 @@ addBots_loop()
} }
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;
@ -592,6 +622,7 @@ addBots_loop()
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" );
} }
@ -734,6 +765,7 @@ watch_grenade()
self endon( "disconnect" ); self endon( "disconnect" );
self.bot_scrambled = false; self.bot_scrambled = false;
for ( ;; ) for ( ;; )
{ {
self waittill( "grenade_fire", g, name ); self waittill( "grenade_fire", g, name );
@ -772,6 +804,7 @@ watch_decoy(g)
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;
} }
@ -802,6 +835,7 @@ scramble_nearby(trig)
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 );
@ -845,6 +879,7 @@ 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" );
@ -871,6 +906,7 @@ 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];
@ -918,6 +954,7 @@ watch_plane(ent)
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;
} }
@ -942,8 +979,10 @@ fixGamemodes()
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;
} }