mirror of
https://github.com/ineedbots/iw2_bot_warfare.git
synced 2025-07-03 09:41:49 +00:00
reorganize
This commit is contained in:
1074
maps/mp/bots/_bot.gsc
Normal file
1074
maps/mp/bots/_bot.gsc
Normal file
File diff suppressed because it is too large
Load Diff
2125
maps/mp/bots/_bot_internal.gsc
Normal file
2125
maps/mp/bots/_bot_internal.gsc
Normal file
File diff suppressed because it is too large
Load Diff
613
maps/mp/bots/_bot_script.gsc
Normal file
613
maps/mp/bots/_bot_script.gsc
Normal file
@ -0,0 +1,613 @@
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\bots\_bot_utility;
|
||||
|
||||
/*
|
||||
When the bot gets added into the game.
|
||||
*/
|
||||
added()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
self set_diff();
|
||||
}
|
||||
|
||||
/*
|
||||
When the bot connects to the game.
|
||||
*/
|
||||
connected()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
self.killerLocation = undefined;
|
||||
self.lastKiller = undefined;
|
||||
self.bot_change_class = true;
|
||||
|
||||
self thread difficulty();
|
||||
self thread teamWatch();
|
||||
self thread classWatch();
|
||||
self thread onBotSpawned();
|
||||
self thread onSpawned();
|
||||
}
|
||||
|
||||
/*
|
||||
The callback for when the bot gets killed.
|
||||
*/
|
||||
onKilled( eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration )
|
||||
{
|
||||
self.killerLocation = undefined;
|
||||
self.lastKiller = undefined;
|
||||
|
||||
if ( !IsDefined( self ) || !isDefined( self.team ) )
|
||||
return;
|
||||
|
||||
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
||||
return;
|
||||
|
||||
if ( iDamage <= 0 )
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eAttacker ) || !isDefined( eAttacker.team ) )
|
||||
return;
|
||||
|
||||
if ( eAttacker == self )
|
||||
return;
|
||||
|
||||
if ( level.teamBased && eAttacker.team == self.team )
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" )
|
||||
return;
|
||||
|
||||
if ( !isAlive( eAttacker ) )
|
||||
return;
|
||||
|
||||
self.killerLocation = eAttacker.origin;
|
||||
self.lastKiller = eAttacker;
|
||||
}
|
||||
|
||||
/*
|
||||
The callback for when the bot gets damaged.
|
||||
*/
|
||||
onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset )
|
||||
{
|
||||
if ( !IsDefined( self ) || !isDefined( self.team ) )
|
||||
return;
|
||||
|
||||
if ( !isAlive( self ) )
|
||||
return;
|
||||
|
||||
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
||||
return;
|
||||
|
||||
if ( iDamage <= 0 )
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eAttacker ) || !isDefined( eAttacker.team ) )
|
||||
return;
|
||||
|
||||
if ( eAttacker == self )
|
||||
return;
|
||||
|
||||
if ( level.teamBased && eAttacker.team == self.team )
|
||||
return;
|
||||
|
||||
if ( !IsDefined( eInflictor ) || eInflictor.classname != "player" )
|
||||
return;
|
||||
|
||||
if ( !isAlive( eAttacker ) )
|
||||
return;
|
||||
|
||||
self bot_cry_for_help( eAttacker );
|
||||
|
||||
self SetAttacker( eAttacker );
|
||||
}
|
||||
|
||||
/*
|
||||
When the bot gets attacked, have the bot ask for help from teammates.
|
||||
*/
|
||||
bot_cry_for_help( attacker )
|
||||
{
|
||||
if ( !level.teamBased )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
theTime = GetTime();
|
||||
|
||||
if ( IsDefined( self.help_time ) && theTime - self.help_time < 1000 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self.help_time = theTime;
|
||||
|
||||
for ( i = level.players.size - 1; i >= 0; i-- )
|
||||
{
|
||||
player = level.players[i];
|
||||
|
||||
if ( !player is_bot() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !isDefined( player.team ) )
|
||||
continue;
|
||||
|
||||
if ( !player IsPlayerModelOK() )
|
||||
continue;
|
||||
|
||||
if ( !IsAlive( player ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( player == self )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( player.team != self.team )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
dist = player.pers["bots"]["skill"]["help_dist"];
|
||||
dist *= dist;
|
||||
|
||||
if ( DistanceSquared( self.origin, player.origin ) > dist )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( RandomInt( 100 ) < 50 )
|
||||
{
|
||||
self SetAttacker( attacker );
|
||||
|
||||
if ( RandomInt( 100 ) > 70 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Sets the bot difficulty.
|
||||
*/
|
||||
set_diff()
|
||||
{
|
||||
rankVar = GetCvarInt( "bots_skill" );
|
||||
|
||||
switch ( rankVar )
|
||||
{
|
||||
case 0:
|
||||
self.pers["bots"]["skill"]["base"] = RoundNum( random_normal_distribution( 3.5, 1.75, 1, 7 ) );
|
||||
break;
|
||||
|
||||
case 8:
|
||||
break;
|
||||
|
||||
case 9:
|
||||
self.pers["bots"]["skill"]["base"] = randomIntRange( 1, 7 );
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.05 * randomIntRange( 1, 20 );
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 50 * randomInt( 100 );
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 50 * randomInt( 100 );
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 50 * randomInt( 100 );
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 50 * randomInt( 100 );
|
||||
self.pers["bots"]["skill"]["remember_time"] = 50 * randomInt( 100 );
|
||||
self.pers["bots"]["skill"]["fov"] = randomFloatRange( -1, 1 );
|
||||
|
||||
randomNum = randomIntRange( 500, 25000 );
|
||||
self.pers["bots"]["skill"]["dist_start"] = randomNum;
|
||||
self.pers["bots"]["skill"]["dist_max"] = randomNum * 2;
|
||||
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.05 * randomInt( 20 );
|
||||
self.pers["bots"]["skill"]["help_dist"] = randomIntRange( 500, 25000 );
|
||||
self.pers["bots"]["skill"]["semi_time"] = randomFloatRange( 0.05, 1 );
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = randomFloatRange( 0.05, 1 );
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = randomFloatRange( 0.05, 1 );
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = randomFloatRange( 0.05, 1 );
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = randomFloatRange( 0.05, 1 );
|
||||
self.pers["bots"]["skill"]["bones"] = "j_head,j_spine4,j_ankle_ri,j_ankle_le";
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["nade"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["camp"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["follow"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["crouch"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["switch"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["class"] = randomInt( 100 );
|
||||
self.pers["bots"]["behavior"]["jump"] = randomInt( 100 );
|
||||
break;
|
||||
|
||||
default:
|
||||
self.pers["bots"]["skill"]["base"] = rankVar;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Updates the bot's difficulty variables.
|
||||
*/
|
||||
difficulty()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
if ( GetCvarInt( "bots_skill" ) != 9 )
|
||||
{
|
||||
switch ( self.pers["bots"]["skill"]["base"] )
|
||||
{
|
||||
case 1:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.6;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 1500;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 1000;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 500;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 600;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 750;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.7;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 2500;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 1000;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.75;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 0;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.9;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 1;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 1.5;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 4;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 2;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_ankle_le,j_ankle_ri";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 0;
|
||||
self.pers["bots"]["behavior"]["nade"] = 10;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 20;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 0;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.55;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 1000;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 800;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 1250;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 1500;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.65;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 3000;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 1500;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.65;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 500;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.75;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0.75;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 1;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 3;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 1.5;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_ankle_le,j_ankle_ri,j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 10;
|
||||
self.pers["bots"]["behavior"]["nade"] = 15;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 15;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 10;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.4;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 750;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 500;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 2000;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.6;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 4000;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 2250;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.5;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 750;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.65;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0.65;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 0.75;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 2.5;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 1;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_spine4,j_ankle_le,j_ankle_ri,j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 20;
|
||||
self.pers["bots"]["behavior"]["nade"] = 20;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 10;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 25;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.3;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 600;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 400;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1000;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 1500;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 3000;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.55;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 5000;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 3350;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.35;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 1000;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.5;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0.5;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 0.5;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 2;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 0.75;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_spine4,j_ankle_le,j_ankle_ri,j_head,j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 30;
|
||||
self.pers["bots"]["behavior"]["nade"] = 25;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 10;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 35;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.25;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 500;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 300;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 1500;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 2000;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 4000;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.5;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 7500;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 5000;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.25;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 1500;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.4;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0.35;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 0.35;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 1.5;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 0.5;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 40;
|
||||
self.pers["bots"]["behavior"]["nade"] = 35;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 10;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 50;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.2;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 250;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 150;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2000;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 3000;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 5000;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.45;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 10000;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 7500;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.2;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 2000;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.25;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0.25;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 0.25;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 1;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 0.25;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_spine4,j_head,j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 50;
|
||||
self.pers["bots"]["behavior"]["nade"] = 45;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 10;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 75;
|
||||
break;
|
||||
|
||||
case 7:
|
||||
self.pers["bots"]["skill"]["aim_time"] = 0.1;
|
||||
self.pers["bots"]["skill"]["init_react_time"] = 100;
|
||||
self.pers["bots"]["skill"]["reaction_time"] = 50;
|
||||
self.pers["bots"]["skill"]["no_trace_ads_time"] = 2500;
|
||||
self.pers["bots"]["skill"]["no_trace_look_time"] = 4000;
|
||||
self.pers["bots"]["skill"]["remember_time"] = 7500;
|
||||
self.pers["bots"]["skill"]["fov"] = 0.4;
|
||||
self.pers["bots"]["skill"]["dist_max"] = 15000;
|
||||
self.pers["bots"]["skill"]["dist_start"] = 10000;
|
||||
self.pers["bots"]["skill"]["spawn_time"] = 0.05;
|
||||
self.pers["bots"]["skill"]["help_dist"] = 3000;
|
||||
self.pers["bots"]["skill"]["semi_time"] = 0.1;
|
||||
self.pers["bots"]["skill"]["shoot_after_time"] = 0;
|
||||
self.pers["bots"]["skill"]["aim_offset_time"] = 0;
|
||||
self.pers["bots"]["skill"]["aim_offset_amount"] = 0;
|
||||
self.pers["bots"]["skill"]["bone_update_interval"] = 0.05;
|
||||
self.pers["bots"]["skill"]["bones"] = "j_head";
|
||||
self.pers["bots"]["skill"]["ads_fov_multi"] = 0.5;
|
||||
self.pers["bots"]["skill"]["ads_aimspeed_multi"] = 0.5;
|
||||
|
||||
self.pers["bots"]["behavior"]["strafe"] = 65;
|
||||
self.pers["bots"]["behavior"]["nade"] = 65;
|
||||
self.pers["bots"]["behavior"]["camp"] = 5;
|
||||
self.pers["bots"]["behavior"]["follow"] = 5;
|
||||
self.pers["bots"]["behavior"]["crouch"] = 5;
|
||||
self.pers["bots"]["behavior"]["switch"] = 2;
|
||||
self.pers["bots"]["behavior"]["class"] = 2;
|
||||
self.pers["bots"]["behavior"]["jump"] = 90;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
wait 5;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Makes sure the bot is on a team.
|
||||
*/
|
||||
teamWatch()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
while ( !isdefined( self.pers["team"] ) || !allowTeamChoice() )
|
||||
wait .05;
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.team != "axis" && self.team != "allies" )
|
||||
self notify( "menuresponse", game["menu_team"], getCvar( "bots_team" ) );
|
||||
|
||||
while ( isdefined( self.pers["team"] ) )
|
||||
wait .05;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Chooses a random class
|
||||
*/
|
||||
chooseRandomClass()
|
||||
{
|
||||
weap = "";
|
||||
weapons = [];
|
||||
|
||||
if ( self.team == "axis" )
|
||||
{
|
||||
weapons[weapons.size] = "mp40_mp";
|
||||
weapons[weapons.size] = "mp44_mp";
|
||||
weapons[weapons.size] = "kar98k_mp";
|
||||
weapons[weapons.size] = "kar98k_sniper_mp";
|
||||
weapons[weapons.size] = "shotgun_mp";
|
||||
weapons[weapons.size] = "g43_mp";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( game["allies"] == "american" )
|
||||
{
|
||||
weapons[weapons.size] = "shotgun_mp";
|
||||
weapons[weapons.size] = "bar_mp";
|
||||
weapons[weapons.size] = "thompson_mp";
|
||||
weapons[weapons.size] = "springfield_mp";
|
||||
weapons[weapons.size] = "m1garand_mp";
|
||||
weapons[weapons.size] = "m1carbine_mp";
|
||||
weapons[weapons.size] = "greasegun_mp";
|
||||
}
|
||||
else if ( game["allies"] == "british" )
|
||||
{
|
||||
weapons[weapons.size] = "shotgun_mp";
|
||||
weapons[weapons.size] = "sten_mp";
|
||||
weapons[weapons.size] = "bren_mp";
|
||||
weapons[weapons.size] = "enfield_mp";
|
||||
weapons[weapons.size] = "enfield_scope_mp";
|
||||
weapons[weapons.size] = "m1garand_mp";
|
||||
weapons[weapons.size] = "thompson_mp";
|
||||
}
|
||||
else
|
||||
{
|
||||
weapons[weapons.size] = "shotgun_mp";
|
||||
weapons[weapons.size] = "ppsh_mp";
|
||||
weapons[weapons.size] = "mosin_nagant_mp";
|
||||
weapons[weapons.size] = "mosin_nagant_sniper_mp";
|
||||
weapons[weapons.size] = "SVT40_mp";
|
||||
weapons[weapons.size] = "PPS42_mp";
|
||||
}
|
||||
}
|
||||
|
||||
weap = weapons[randomint( weapons.size )];
|
||||
|
||||
return weap;
|
||||
}
|
||||
|
||||
/*
|
||||
Selects a class for the bot.
|
||||
*/
|
||||
classWatch()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
// cod2 has to wait this long or else theres a crash?
|
||||
wait 3;
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
while ( !isdefined( self.pers["team"] ) || !allowClassChoice() )
|
||||
wait .05;
|
||||
|
||||
wait 0.5;
|
||||
|
||||
if ( !isDefined( self.pers["weapon"] ) || self.pers["weapon"] == "" || !isDefined( self.bot_change_class ) )
|
||||
self notify( "menuresponse", game["menu_weapon_" + self.team], self chooseRandomClass() );
|
||||
|
||||
self.bot_change_class = true;
|
||||
|
||||
while ( isdefined( self.pers["team"] ) && isDefined( self.pers["weapon"] ) && self.pers["weapon"] != "" && isDefined( self.bot_change_class ) )
|
||||
wait .05;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
When the bot spawns.
|
||||
*/
|
||||
onSpawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
if ( randomInt( 100 ) <= self.pers["bots"]["behavior"]["class"] )
|
||||
self.bot_change_class = undefined;
|
||||
|
||||
self.bot_lock_goal = false;
|
||||
self.help_time = undefined;
|
||||
self.bot_was_follow_script_update = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
When the bot spawned, after the difficulty wait. Start the logic for the bot.
|
||||
*/
|
||||
onBotSpawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
level endon( "game_ended" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
self waittill( "bot_spawned" );
|
||||
|
||||
self thread start_bot_threads();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Starts all the bot thinking
|
||||
*/
|
||||
start_bot_threads()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
level endon( "game_ended" );
|
||||
self endon( "death" );
|
||||
}
|
2354
maps/mp/bots/_bot_utility.gsc
Normal file
2354
maps/mp/bots/_bot_utility.gsc
Normal file
File diff suppressed because it is too large
Load Diff
8
maps/mp/bots/waypoints/_custom_map.gsc
Normal file
8
maps/mp/bots/waypoints/_custom_map.gsc
Normal file
@ -0,0 +1,8 @@
|
||||
main(mapname)
|
||||
{
|
||||
}
|
||||
|
||||
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 ) );
|
||||
}
|
21
maps/mp/gametypes/_clientids.gsc
Normal file
21
maps/mp/gametypes/_clientids.gsc
Normal file
@ -0,0 +1,21 @@
|
||||
init()
|
||||
{
|
||||
level.clientid = 0;
|
||||
|
||||
level thread onPlayerConnect();
|
||||
|
||||
// bootstrap
|
||||
level thread scripts\bots_adapter::init();
|
||||
level thread scripts\bots::init();
|
||||
}
|
||||
|
||||
onPlayerConnect()
|
||||
{
|
||||
for(;;)
|
||||
{
|
||||
level waittill("connecting", player);
|
||||
|
||||
player.clientid = level.clientid;
|
||||
level.clientid++; // Is this safe? What if a server runs for a long time and many people join/leave
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user