mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-19 05:12:53 +00:00
fmt
This commit is contained in:
parent
18abf5e007
commit
dd1ea5ca07
14
.astylerc
14
.astylerc
@ -1,21 +1,27 @@
|
|||||||
# try to mimic the original gsc provided
|
# try to mimic the original gsc provided
|
||||||
|
# mode=ghc
|
||||||
mode=c
|
mode=c
|
||||||
style=allman
|
style=allman
|
||||||
|
|
||||||
indent=tab
|
indent=force-tab=2
|
||||||
lineend=windows
|
lineend=windows
|
||||||
|
|
||||||
pad-oper
|
pad-oper
|
||||||
pad-paren-in
|
pad-paren-in
|
||||||
pad-header
|
pad-header
|
||||||
|
# pad-brackets-in
|
||||||
# delete-empty-lines
|
fill-empty-lines
|
||||||
|
squeeze-lines=2
|
||||||
|
squeeze-ws
|
||||||
|
break-one-line-headers
|
||||||
|
add-braces
|
||||||
|
remove-comment-prefix
|
||||||
|
|
||||||
break-blocks
|
break-blocks
|
||||||
# remove-braces
|
|
||||||
|
|
||||||
indent-switches
|
indent-switches
|
||||||
indent-cases
|
indent-cases
|
||||||
indent-after-parens
|
indent-after-parens
|
||||||
|
indent-col1-comments
|
||||||
|
|
||||||
remove-comment-prefix
|
remove-comment-prefix
|
||||||
|
@ -4,7 +4,7 @@ root = true
|
|||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
charset = latin1
|
charset = latin1
|
||||||
trim_trailing_whitespace = true
|
trim_trailing_whitespace = false
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|
||||||
[*.md]
|
[*.md]
|
||||||
|
@ -8,135 +8,135 @@
|
|||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
level.bw_version = "z0.1";
|
level.bw_version = "z0.1";
|
||||||
|
|
||||||
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 ( !wait_for_builtins() )
|
if ( !wait_for_builtins() )
|
||||||
{
|
{
|
||||||
println( "FATAL: NO BUILT-INS FOR BOTS" );
|
println( "FATAL: NO BUILT-INS FOR BOTS" );
|
||||||
}
|
}
|
||||||
|
|
||||||
thread load_waypoints();
|
thread load_waypoints();
|
||||||
thread hook_callbacks();
|
thread hook_callbacks();
|
||||||
|
|
||||||
if ( getdvar( "bots_main_GUIDs" ) == "" )
|
if ( getdvar( "bots_main_GUIDs" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_GUIDs", "" ); // guids of players who will be given host powers, comma seperated
|
setdvar( "bots_main_GUIDs", "" ); // guids of players who will be given host powers, comma seperated
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_main_firstIsHost" ) == "" )
|
if ( getdvar( "bots_main_firstIsHost" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_firstIsHost", false ); // first player to connect is a host
|
setdvar( "bots_main_firstIsHost", false ); // first player to connect is a host
|
||||||
}
|
}
|
||||||
|
|
||||||
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_main_kickBotsAtEnd" ) == "" )
|
if ( getdvar( "bots_main_kickBotsAtEnd" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_kickBotsAtEnd", false ); // kicks the bots at game end
|
setdvar( "bots_main_kickBotsAtEnd", false ); // kicks the bots at game end
|
||||||
}
|
}
|
||||||
|
|
||||||
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_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_skill" ) == "" )
|
if ( getdvar( "bots_skill" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_skill", 0 ); // 0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
setdvar( "bots_skill", 0 ); // 0 is random, 1 is easy 7 is hard, 8 is custom, 9 is completely random
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_skill_hard" ) == "" )
|
if ( getdvar( "bots_skill_hard" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_skill_hard", 0 ); // amount of hard bots on axis team
|
setdvar( "bots_skill_hard", 0 ); // amount of hard bots on axis team
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_skill_med" ) == "" )
|
if ( getdvar( "bots_skill_med" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_skill_med", 0 );
|
setdvar( "bots_skill_med", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
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_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_move" ) == "" ) // bots move
|
if ( getdvar( "bots_play_move" ) == "" ) // bots move
|
||||||
{
|
{
|
||||||
setdvar( "bots_play_move", true );
|
setdvar( "bots_play_move", 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_nade" ) == "" ) // bots grenade
|
if ( getdvar( "bots_play_nade" ) == "" ) // bots grenade
|
||||||
{
|
{
|
||||||
setdvar( "bots_play_nade", true );
|
setdvar( "bots_play_nade", true );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_play_ads" ) == "" ) // bot ads
|
if ( getdvar( "bots_play_ads" ) == "" ) // bot ads
|
||||||
{
|
{
|
||||||
setdvar( "bots_play_ads", true );
|
setdvar( "bots_play_ads", true );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_play_aim" ) == "" )
|
if ( getdvar( "bots_play_aim" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_play_aim", true );
|
setdvar( "bots_play_aim", true );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_t8_mode" ) == "" )
|
if ( getdvar( "bots_t8_mode" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_t8_mode", false );
|
setdvar( "bots_t8_mode", false );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_play_opendoors" ) == "" )
|
if ( getdvar( "bots_play_opendoors" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_play_opendoors", true );
|
setdvar( "bots_play_opendoors", true );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( game[ "botWarfare" ] ) )
|
if ( !isdefined( game[ "botWarfare" ] ) )
|
||||||
{
|
{
|
||||||
game[ "botWarfare" ] = true;
|
game[ "botWarfare" ] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
level.bots_minsprintdistance = 315;
|
level.bots_minsprintdistance = 315;
|
||||||
level.bots_minsprintdistance *= level.bots_minsprintdistance;
|
level.bots_minsprintdistance *= level.bots_minsprintdistance;
|
||||||
level.bots_mingrenadedistance = 256;
|
level.bots_mingrenadedistance = 256;
|
||||||
@ -151,10 +151,10 @@ init()
|
|||||||
level.bots_noadsdistance *= level.bots_noadsdistance;
|
level.bots_noadsdistance *= level.bots_noadsdistance;
|
||||||
level.bots_maxshotgundistance = 500;
|
level.bots_maxshotgundistance = 500;
|
||||||
level.bots_maxshotgundistance *= level.bots_maxshotgundistance;
|
level.bots_maxshotgundistance *= level.bots_maxshotgundistance;
|
||||||
|
|
||||||
level.players = [];
|
level.players = [];
|
||||||
level.bots = [];
|
level.bots = [];
|
||||||
|
|
||||||
level.bots_fullautoguns = [];
|
level.bots_fullautoguns = [];
|
||||||
level.bots_fullautoguns[ "thompson" ] = true;
|
level.bots_fullautoguns[ "thompson" ] = true;
|
||||||
level.bots_fullautoguns[ "mp40" ] = true;
|
level.bots_fullautoguns[ "mp40" ] = true;
|
||||||
@ -167,10 +167,10 @@ init()
|
|||||||
level.bots_fullautoguns[ "bar" ] = true;
|
level.bots_fullautoguns[ "bar" ] = true;
|
||||||
level.bots_fullautoguns[ "fg42" ] = true;
|
level.bots_fullautoguns[ "fg42" ] = true;
|
||||||
level.bots_fullautoguns[ "type99lmg" ] = true;
|
level.bots_fullautoguns[ "type99lmg" ] = true;
|
||||||
|
|
||||||
level thread onPlayerConnect();
|
level thread onPlayerConnect();
|
||||||
level thread handleBots();
|
level thread handleBots();
|
||||||
|
|
||||||
level thread maps\bots\_bot_script::bot_script_init();
|
level thread maps\bots\_bot_script::bot_script_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,21 +181,21 @@ handleBots()
|
|||||||
{
|
{
|
||||||
level thread diffBots();
|
level thread diffBots();
|
||||||
level addBots();
|
level addBots();
|
||||||
|
|
||||||
while ( !isdefined( level.intermission ) || !level.intermission )
|
while ( !isdefined( level.intermission ) || !level.intermission )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( "bots_manage_add", getBotArray().size );
|
setdvar( "bots_manage_add", getBotArray().size );
|
||||||
|
|
||||||
if ( !getdvarint( "bots_main_kickBotsAtEnd" ) )
|
if ( !getdvarint( "bots_main_kickBotsAtEnd" ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bots = getBotArray();
|
bots = getBotArray();
|
||||||
|
|
||||||
for ( i = 0; i < bots.size; i++ )
|
for ( i = 0; i < bots.size; i++ )
|
||||||
{
|
{
|
||||||
BotBuiltinCmdExec( "clientkick " + bots[ i ] getentitynumber() );
|
BotBuiltinCmdExec( "clientkick " + bots[ i ] getentitynumber() );
|
||||||
@ -218,13 +218,13 @@ onPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon,
|
|||||||
iDamage = int( iDamage * 0.1 );
|
iDamage = int( iDamage * 0.1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self is_bot() )
|
if ( self is_bot() )
|
||||||
{
|
{
|
||||||
self maps\bots\_bot_internal::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
self maps\bots\_bot_internal::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
||||||
self maps\bots\_bot_script::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
self maps\bots\_bot_script::onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
||||||
}
|
}
|
||||||
|
|
||||||
self [[ level.prevcallbackplayerdamage ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
self [[ level.prevcallbackplayerdamage ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, modelIndex, psOffsetTime );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ onActorDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon,
|
|||||||
{
|
{
|
||||||
iDamage += int( self.maxhealth * randomfloatrange( 0.25, 1.25 ) );
|
iDamage += int( self.maxhealth * randomfloatrange( 0.25, 1.25 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
self [[ level.prevcallbackactordamage ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, iModelIndex, iTimeOffset );
|
self [[ level.prevcallbackactordamage ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, iModelIndex, iTimeOffset );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,7 +246,7 @@ hook_callbacks()
|
|||||||
wait 0.05;
|
wait 0.05;
|
||||||
level.prevcallbackplayerdamage = level.callbackplayerdamage;
|
level.prevcallbackplayerdamage = level.callbackplayerdamage;
|
||||||
level.callbackplayerdamage = ::onPlayerDamage;
|
level.callbackplayerdamage = ::onPlayerDamage;
|
||||||
|
|
||||||
level.prevcallbackactordamage = level.callbackactordamage;
|
level.prevcallbackactordamage = level.callbackactordamage;
|
||||||
level.callbackactordamage = ::onActorDamage;
|
level.callbackactordamage = ::onActorDamage;
|
||||||
}
|
}
|
||||||
@ -259,7 +259,7 @@ onPlayerConnect()
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
level waittill( "connected", player );
|
level waittill( "connected", player );
|
||||||
|
|
||||||
player thread connected();
|
player thread connected();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,7 +270,7 @@ onPlayerConnect()
|
|||||||
onDisconnectAll()
|
onDisconnectAll()
|
||||||
{
|
{
|
||||||
self waittill( "disconnect" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
level.players = array_remove( level.players, self );
|
level.players = array_remove( level.players, self );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,13 +280,13 @@ onDisconnectAll()
|
|||||||
onSpawnedAll()
|
onSpawnedAll()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self.lastspawntime = gettime();
|
self.lastspawntime = gettime();
|
||||||
|
|
||||||
if ( getdvarint( "bots_main_debug" ) )
|
if ( getdvarint( "bots_main_debug" ) )
|
||||||
{
|
{
|
||||||
self.score = 100000;
|
self.score = 100000;
|
||||||
@ -300,7 +300,7 @@ onSpawnedAll()
|
|||||||
onDisconnect()
|
onDisconnect()
|
||||||
{
|
{
|
||||||
self waittill( "disconnect" );
|
self waittill( "disconnect" );
|
||||||
|
|
||||||
level.bots = array_remove( level.bots, self );
|
level.bots = array_remove( level.bots, self );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -310,42 +310,42 @@ onDisconnect()
|
|||||||
connected()
|
connected()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
if ( !isdefined( self.pers[ "bot_host" ] ) )
|
if ( !isdefined( self.pers[ "bot_host" ] ) )
|
||||||
{
|
{
|
||||||
self thread doHostCheck();
|
self thread doHostCheck();
|
||||||
}
|
}
|
||||||
|
|
||||||
level.players[ level.players.size ] = self;
|
level.players[ level.players.size ] = self;
|
||||||
self thread onDisconnectAll();
|
self thread onDisconnectAll();
|
||||||
|
|
||||||
self thread onSpawnedAll();
|
self thread onSpawnedAll();
|
||||||
|
|
||||||
if ( !self is_bot() )
|
if ( !self is_bot() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( self.pers[ "isBot" ] ) )
|
if ( !isdefined( self.pers[ "isBot" ] ) )
|
||||||
{
|
{
|
||||||
// fast restart...
|
// fast restart...
|
||||||
self.pers[ "isBot" ] = true;
|
self.pers[ "isBot" ] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( self.pers[ "isBotWarfare" ] ) )
|
if ( !isdefined( self.pers[ "isBotWarfare" ] ) )
|
||||||
{
|
{
|
||||||
self.pers[ "isBotWarfare" ] = true;
|
self.pers[ "isBotWarfare" ] = true;
|
||||||
self thread added();
|
self thread added();
|
||||||
}
|
}
|
||||||
|
|
||||||
self thread maps\bots\_bot_internal::connected();
|
self thread maps\bots\_bot_internal::connected();
|
||||||
self thread maps\bots\_bot_script::connected();
|
self thread maps\bots\_bot_script::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 );
|
||||||
|
|
||||||
self thread watchBotDebugEvent();
|
self thread watchBotDebugEvent();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,50 +355,50 @@ connected()
|
|||||||
watchBotDebugEvent()
|
watchBotDebugEvent()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bot_event", msg, str, b, c, d, e, f, g );
|
self waittill( "bot_event", msg, str, b, c, d, e, f, g );
|
||||||
|
|
||||||
if ( getdvarint( "bots_main_debug" ) >= 2 )
|
if ( getdvarint( "bots_main_debug" ) >= 2 )
|
||||||
{
|
{
|
||||||
big_str = "Bot Warfare debug: " + self.playername + ": " + msg;
|
big_str = "Bot Warfare debug: " + self.playername + ": " + msg;
|
||||||
|
|
||||||
if ( isdefined( str ) && isstring( str ) )
|
if ( isdefined( str ) && isstring( str ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + str;
|
big_str += ", " + str;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( b ) && isstring( b ) )
|
if ( isdefined( b ) && isstring( b ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + b;
|
big_str += ", " + b;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( c ) && isstring( c ) )
|
if ( isdefined( c ) && isstring( c ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + c;
|
big_str += ", " + c;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( d ) && isstring( d ) )
|
if ( isdefined( d ) && isstring( d ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + d;
|
big_str += ", " + d;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( e ) && isstring( e ) )
|
if ( isdefined( e ) && isstring( e ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + e;
|
big_str += ", " + e;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( f ) && isstring( f ) )
|
if ( isdefined( f ) && isstring( f ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + f;
|
big_str += ", " + f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( g ) && isstring( g ) )
|
if ( isdefined( g ) && isstring( g ) )
|
||||||
{
|
{
|
||||||
big_str += ", " + g;
|
big_str += ", " + g;
|
||||||
}
|
}
|
||||||
|
|
||||||
BotBuiltinPrintConsole( big_str );
|
BotBuiltinPrintConsole( big_str );
|
||||||
}
|
}
|
||||||
else if ( msg == "debug" && getdvarint( "bots_main_debug" ) )
|
else if ( msg == "debug" && getdvarint( "bots_main_debug" ) )
|
||||||
@ -414,7 +414,7 @@ watchBotDebugEvent()
|
|||||||
added()
|
added()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self thread maps\bots\_bot_internal::added();
|
self thread maps\bots\_bot_internal::added();
|
||||||
self thread maps\bots\_bot_script::added();
|
self thread maps\bots\_bot_script::added();
|
||||||
}
|
}
|
||||||
@ -425,7 +425,7 @@ added()
|
|||||||
add_bot()
|
add_bot()
|
||||||
{
|
{
|
||||||
bot = BotBuiltinAddTestClient();
|
bot = BotBuiltinAddTestClient();
|
||||||
|
|
||||||
if ( isdefined( bot ) )
|
if ( isdefined( bot ) )
|
||||||
{
|
{
|
||||||
bot.pers[ "isBot" ] = true;
|
bot.pers[ "isBot" ] = true;
|
||||||
@ -442,28 +442,28 @@ diffBots_loop()
|
|||||||
var_hard = getdvarint( "bots_skill_hard" );
|
var_hard = getdvarint( "bots_skill_hard" );
|
||||||
var_med = getdvarint( "bots_skill_med" );
|
var_med = getdvarint( "bots_skill_med" );
|
||||||
var_skill = getdvarint( "bots_skill" );
|
var_skill = getdvarint( "bots_skill" );
|
||||||
|
|
||||||
hard = 0;
|
hard = 0;
|
||||||
med = 0;
|
med = 0;
|
||||||
|
|
||||||
if ( var_skill == 8 )
|
if ( var_skill == 8 )
|
||||||
{
|
{
|
||||||
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 ( hard < var_hard )
|
if ( hard < var_hard )
|
||||||
{
|
{
|
||||||
hard++;
|
hard++;
|
||||||
@ -483,16 +483,16 @@ diffBots_loop()
|
|||||||
else if ( var_skill != 0 && var_skill != 9 )
|
else if ( var_skill != 0 && var_skill != 9 )
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
player.pers[ "bots" ][ "skill" ][ "base" ] = var_skill;
|
player.pers[ "bots" ][ "skill" ][ "base" ] = var_skill;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -506,7 +506,7 @@ diffBots()
|
|||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1.5;
|
wait 1.5;
|
||||||
|
|
||||||
diffBots_loop();
|
diffBots_loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -517,41 +517,41 @@ diffBots()
|
|||||||
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 > 4 )
|
if ( botsToAdd > 4 )
|
||||||
{
|
{
|
||||||
botsToAdd = 4;
|
botsToAdd = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
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() )
|
||||||
{
|
{
|
||||||
bots++;
|
bots++;
|
||||||
@ -561,14 +561,14 @@ addBots_loop()
|
|||||||
players++;
|
players++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
amount = bots;
|
amount = bots;
|
||||||
|
|
||||||
if ( fillMode == 0 || fillMode == 2 )
|
if ( fillMode == 0 || fillMode == 2 )
|
||||||
{
|
{
|
||||||
amount += players;
|
amount += players;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( amount < fillAmount )
|
if ( amount < fillAmount )
|
||||||
{
|
{
|
||||||
setdvar( "bots_manage_add", 1 );
|
setdvar( "bots_manage_add", 1 );
|
||||||
@ -576,7 +576,7 @@ addBots_loop()
|
|||||||
else if ( amount > fillAmount && getdvarint( "bots_manage_fill_kick" ) )
|
else if ( amount > fillAmount && getdvarint( "bots_manage_fill_kick" ) )
|
||||||
{
|
{
|
||||||
tempBot = getBotToKick();
|
tempBot = getBotToKick();
|
||||||
|
|
||||||
if ( isdefined( tempBot ) )
|
if ( isdefined( tempBot ) )
|
||||||
{
|
{
|
||||||
BotBuiltinCmdExec( "clientkick " + tempBot getentitynumber() );
|
BotBuiltinCmdExec( "clientkick " + tempBot getentitynumber() );
|
||||||
@ -590,13 +590,13 @@ addBots_loop()
|
|||||||
addBots()
|
addBots()
|
||||||
{
|
{
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
bot_wait_for_host();
|
bot_wait_for_host();
|
||||||
|
|
||||||
while ( !isdefined( level.intermission ) || !level.intermission )
|
while ( !isdefined( level.intermission ) || !level.intermission )
|
||||||
{
|
{
|
||||||
wait 1.5;
|
wait 1.5;
|
||||||
|
|
||||||
addBots_loop();
|
addBots_loop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -16,22 +16,22 @@ init()
|
|||||||
{
|
{
|
||||||
setdvar( "bots_main_debug", 0 );
|
setdvar( "bots_main_debug", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !getdvarint( "bots_main_debug" ) || !getdvarint( "bots_main_debug_wp_vis" ) )
|
if ( !getdvarint( "bots_main_debug" ) || !getdvarint( "bots_main_debug_wp_vis" ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !getdvarint( "developer" ) )
|
if ( !getdvarint( "developer" ) )
|
||||||
{
|
{
|
||||||
setdvar( "developer_script", 1 );
|
setdvar( "developer_script", 1 );
|
||||||
setdvar( "developer", 2 );
|
setdvar( "developer", 2 );
|
||||||
|
|
||||||
setdvar( "sv_mapRotation", "map " + getdvar( "mapname" ) );
|
setdvar( "sv_mapRotation", "map " + getdvar( "mapname" ) );
|
||||||
exitlevel( false );
|
exitlevel( false );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
setdvar( "bots_main", false );
|
setdvar( "bots_main", false );
|
||||||
setdvar( "bots_main_menu", false );
|
setdvar( "bots_main_menu", false );
|
||||||
setdvar( "bots_manage_fill_mode", 0 );
|
setdvar( "bots_manage_fill_mode", 0 );
|
||||||
@ -39,29 +39,29 @@ init()
|
|||||||
setdvar( "bots_manage_add", 0 );
|
setdvar( "bots_manage_add", 0 );
|
||||||
setdvar( "bots_manage_fill_kick", true );
|
setdvar( "bots_manage_fill_kick", true );
|
||||||
setdvar( "bots_manage_fill_spec", true );
|
setdvar( "bots_manage_fill_spec", true );
|
||||||
|
|
||||||
if ( getdvar( "bots_main_debug_distance" ) == "" )
|
if ( getdvar( "bots_main_debug_distance" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_debug_distance", 512.0 );
|
setdvar( "bots_main_debug_distance", 512.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_main_debug_cone" ) == "" )
|
if ( getdvar( "bots_main_debug_cone" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_debug_cone", 0.65 );
|
setdvar( "bots_main_debug_cone", 0.65 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_main_debug_minDist" ) == "" )
|
if ( getdvar( "bots_main_debug_minDist" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_debug_minDist", 32.0 );
|
setdvar( "bots_main_debug_minDist", 32.0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( getdvar( "bots_main_debug_drawThrough" ) == "" )
|
if ( getdvar( "bots_main_debug_drawThrough" ) == "" )
|
||||||
{
|
{
|
||||||
setdvar( "bots_main_debug_drawThrough", false );
|
setdvar( "bots_main_debug_drawThrough", false );
|
||||||
}
|
}
|
||||||
|
|
||||||
thread load_waypoints();
|
thread load_waypoints();
|
||||||
|
|
||||||
level waittill( "connected", player );
|
level waittill( "connected", player );
|
||||||
player thread onPlayerSpawned();
|
player thread onPlayerSpawned();
|
||||||
}
|
}
|
||||||
@ -69,7 +69,7 @@ init()
|
|||||||
onPlayerSpawned()
|
onPlayerSpawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
@ -81,7 +81,7 @@ beginDebug()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
self thread debug();
|
self thread debug();
|
||||||
self thread watch_for_unlink();
|
self thread watch_for_unlink();
|
||||||
self thread textScroll( "^1xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" );
|
self thread textScroll( "^1xDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" );
|
||||||
@ -91,31 +91,31 @@ watch_for_unlink()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
self BotBuiltinNotifyOnPlayerCommand( "+smoke", "toggle_unlink" );
|
self BotBuiltinNotifyOnPlayerCommand( "+smoke", "toggle_unlink" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "toggle_unlink" );
|
self waittill( "toggle_unlink" );
|
||||||
|
|
||||||
if ( self.closest == -1 )
|
if ( self.closest == -1 )
|
||||||
{
|
{
|
||||||
self iprintln( "not close to node" );
|
self iprintln( "not close to node" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
firstwp = level.waypoints[ self.closest ];
|
firstwp = level.waypoints[ self.closest ];
|
||||||
|
|
||||||
self iprintln( "wp selected for unlink: " + firstwp BotBuiltinGetNodeNumber() );
|
self iprintln( "wp selected for unlink: " + firstwp BotBuiltinGetNodeNumber() );
|
||||||
|
|
||||||
self waittill( "toggle_unlink" );
|
self waittill( "toggle_unlink" );
|
||||||
|
|
||||||
if ( self.closest == -1 )
|
if ( self.closest == -1 )
|
||||||
{
|
{
|
||||||
self iprintln( "not close to node" );
|
self iprintln( "not close to node" );
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
self toggle_link( firstwp, level.waypoints[ self.closest ] );
|
self toggle_link( firstwp, level.waypoints[ self.closest ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -129,7 +129,7 @@ array_contains( arr, it )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,10 +138,10 @@ toggle_link( firstwp, secondwp )
|
|||||||
// check if it exists
|
// check if it exists
|
||||||
key = firstwp BotBuiltinGetNodeNumber() + "";
|
key = firstwp BotBuiltinGetNodeNumber() + "";
|
||||||
secnum = secondwp BotBuiltinGetNodeNumber();
|
secnum = secondwp BotBuiltinGetNodeNumber();
|
||||||
|
|
||||||
links = firstwp BotBuiltinGetLinkedNodes();
|
links = firstwp BotBuiltinGetLinkedNodes();
|
||||||
linked = false;
|
linked = false;
|
||||||
|
|
||||||
for ( i = 0; i < links.size; i++ )
|
for ( i = 0; i < links.size; i++ )
|
||||||
{
|
{
|
||||||
if ( links[ i ] BotBuiltinGetNodeNumber() == secnum )
|
if ( links[ i ] BotBuiltinGetNodeNumber() == secnum )
|
||||||
@ -150,25 +150,25 @@ toggle_link( firstwp, secondwp )
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !linked )
|
if ( !linked )
|
||||||
{
|
{
|
||||||
self iprintln( "no link: " + key + " " + secnum );
|
self iprintln( "no link: " + key + " " + secnum );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( key == secnum + "" )
|
if ( key == secnum + "" )
|
||||||
{
|
{
|
||||||
self iprintln( "same unlink: " + key + " " + secnum );
|
self iprintln( "same unlink: " + key + " " + secnum );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( level.bot_ignore_links[ key ] ) && array_contains( level.bot_ignore_links[ key ], secnum ) )
|
if ( isdefined( level.bot_ignore_links[ key ] ) && array_contains( level.bot_ignore_links[ key ], secnum ) )
|
||||||
{
|
{
|
||||||
a = level.bot_ignore_links[ key ];
|
a = level.bot_ignore_links[ key ];
|
||||||
|
|
||||||
a = array_remove( a, secnum );
|
a = array_remove( a, secnum );
|
||||||
|
|
||||||
if ( a.size <= 0 )
|
if ( a.size <= 0 )
|
||||||
{
|
{
|
||||||
level.bot_ignore_links[ key ] = undefined;
|
level.bot_ignore_links[ key ] = undefined;
|
||||||
@ -177,7 +177,7 @@ toggle_link( firstwp, secondwp )
|
|||||||
{
|
{
|
||||||
level.bot_ignore_links[ key ] = a;
|
level.bot_ignore_links[ key ] = a;
|
||||||
}
|
}
|
||||||
|
|
||||||
self iprintln( "removed unlink: " + key + " " + secnum );
|
self iprintln( "removed unlink: " + key + " " + secnum );
|
||||||
BotBuiltinPrintConsole( "toggle_link: add: " + key + " " + secnum );
|
BotBuiltinPrintConsole( "toggle_link: add: " + key + " " + secnum );
|
||||||
}
|
}
|
||||||
@ -187,12 +187,12 @@ toggle_link( firstwp, secondwp )
|
|||||||
{
|
{
|
||||||
level.bot_ignore_links[ key ] = [];
|
level.bot_ignore_links[ key ] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
a = level.bot_ignore_links[ key ];
|
a = level.bot_ignore_links[ key ];
|
||||||
a[ a.size ] = secnum;
|
a[ a.size ] = secnum;
|
||||||
|
|
||||||
level.bot_ignore_links[ key ] = a;
|
level.bot_ignore_links[ key ] = a;
|
||||||
|
|
||||||
self iprintln( "added unlink: " + key + " " + secnum );
|
self iprintln( "added unlink: " + key + " " + secnum );
|
||||||
BotBuiltinPrintConsole( "toggle_link: del: " + key + " " + secnum );
|
BotBuiltinPrintConsole( "toggle_link: del: " + key + " " + secnum );
|
||||||
}
|
}
|
||||||
@ -202,38 +202,38 @@ debug()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
self.closest = -1;
|
self.closest = -1;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
closest = -1;
|
closest = -1;
|
||||||
myEye = self gettagorigin( "j_head" );
|
myEye = self gettagorigin( "j_head" );
|
||||||
myAngles = self getplayerangles();
|
myAngles = self getplayerangles();
|
||||||
|
|
||||||
for ( i = 0; i < level.waypointcount; i++ )
|
for ( i = 0; i < level.waypointcount; i++ )
|
||||||
{
|
{
|
||||||
if ( closest == -1 || closer( self.origin, level.waypoints[ i ].origin, level.waypoints[ closest ].origin ) )
|
if ( closest == -1 || closer( self.origin, level.waypoints[ i ].origin, level.waypoints[ closest ].origin ) )
|
||||||
{
|
{
|
||||||
closest = i;
|
closest = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
wpOrg = level.waypoints[ i ].origin + ( 0, 0, 25 );
|
wpOrg = level.waypoints[ i ].origin + ( 0, 0, 25 );
|
||||||
|
|
||||||
if ( distance( level.waypoints[ i ].origin, self.origin ) < getdvarfloat( "bots_main_debug_distance" ) && ( sighttracepassed( myEye, wpOrg, false, self ) || getdvarint( "bots_main_debug_drawThrough" ) ) && getConeDot( wpOrg, myEye, myAngles ) > getdvarfloat( "bots_main_debug_cone" ) )
|
if ( distance( level.waypoints[ i ].origin, self.origin ) < getdvarfloat( "bots_main_debug_distance" ) && ( sighttracepassed( myEye, wpOrg, false, self ) || getdvarint( "bots_main_debug_drawThrough" ) ) && getConeDot( wpOrg, myEye, myAngles ) > getdvarfloat( "bots_main_debug_cone" ) )
|
||||||
{
|
{
|
||||||
linked = level.waypoints[ i ] BotBuiltinGetLinkedNodes();
|
linked = level.waypoints[ i ] BotBuiltinGetLinkedNodes();
|
||||||
node_num_str = level.waypoints[ i ] BotBuiltinGetNodeNumber() + "";
|
node_num_str = level.waypoints[ i ] BotBuiltinGetNodeNumber() + "";
|
||||||
|
|
||||||
for ( h = linked.size - 1; h >= 0; h-- )
|
for ( h = linked.size - 1; h >= 0; h-- )
|
||||||
{
|
{
|
||||||
if ( isdefined( level.bot_ignore_links[ node_num_str ] ) )
|
if ( isdefined( level.bot_ignore_links[ node_num_str ] ) )
|
||||||
{
|
{
|
||||||
found = false;
|
found = false;
|
||||||
this_node_num = linked[ h ] BotBuiltinGetNodeNumber();
|
this_node_num = linked[ h ] BotBuiltinGetNodeNumber();
|
||||||
|
|
||||||
for ( j = 0; j < level.bot_ignore_links[ node_num_str ].size; j++ )
|
for ( j = 0; j < level.bot_ignore_links[ node_num_str ].size; j++ )
|
||||||
{
|
{
|
||||||
if ( level.bot_ignore_links[ node_num_str ][ j ] == this_node_num )
|
if ( level.bot_ignore_links[ node_num_str ][ j ] == this_node_num )
|
||||||
@ -242,18 +242,18 @@ debug()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( found )
|
if ( found )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
line( wpOrg, linked[ h ].origin + ( 0, 0, 25 ), ( 1, 0, 1 ) );
|
line( wpOrg, linked[ h ].origin + ( 0, 0, 25 ), ( 1, 0, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
print3d( wpOrg, node_num_str, ( 1, 0, 0 ), 2 );
|
print3d( wpOrg, node_num_str, ( 1, 0, 0 ), 2 );
|
||||||
|
|
||||||
if ( isdefined( level.waypoints[ i ].animscript ) )
|
if ( isdefined( level.waypoints[ i ].animscript ) )
|
||||||
{
|
{
|
||||||
line( wpOrg, wpOrg + anglestoforward( level.waypoints[ i ].angles ) * 64, ( 1, 1, 1 ) );
|
line( wpOrg, wpOrg + anglestoforward( level.waypoints[ i ].angles ) * 64, ( 1, 1, 1 ) );
|
||||||
@ -261,7 +261,7 @@ debug()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( distance( self.origin, level.waypoints[ closest ].origin ) < 64 )
|
if ( distance( self.origin, level.waypoints[ closest ].origin ) < 64 )
|
||||||
{
|
{
|
||||||
self.closest = closest;
|
self.closest = closest;
|
||||||
@ -285,15 +285,15 @@ textScroll( string )
|
|||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
// thanks ActionScript
|
// thanks ActionScript
|
||||||
|
|
||||||
back = createbar( ( 0, 0, 0 ), 1000, 30 );
|
back = createbar( ( 0, 0, 0 ), 1000, 30 );
|
||||||
back setpoint( "CENTER", undefined, 0, 220 );
|
back setpoint( "CENTER", undefined, 0, 220 );
|
||||||
self thread destroyOnDeath( back );
|
self thread destroyOnDeath( back );
|
||||||
|
|
||||||
text = createfontstring( "default", 1.5 );
|
text = createfontstring( "default", 1.5 );
|
||||||
text settext( string );
|
text settext( string );
|
||||||
self thread destroyOnDeath( text );
|
self thread destroyOnDeath( text );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
text setpoint( "CENTER", undefined, 1200, 220 );
|
text setpoint( "CENTER", undefined, 1200, 220 );
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -16,7 +16,7 @@ bot_script_init()
|
|||||||
added()
|
added()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self set_diff();
|
self set_diff();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,11 +26,11 @@ added()
|
|||||||
connected()
|
connected()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
self thread difficulty();
|
self thread difficulty();
|
||||||
self thread onBotSpawned();
|
self thread onBotSpawned();
|
||||||
self thread onSpawned();
|
self thread onSpawned();
|
||||||
|
|
||||||
self thread maps\bots\objectives\_manager::connected();
|
self thread maps\bots\objectives\_manager::connected();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -43,37 +43,37 @@ onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoin
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isalive( self ) )
|
if ( !isalive( self ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
if ( sMeansOfDeath == "MOD_FALLING" || sMeansOfDeath == "MOD_SUICIDE" )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( iDamage <= 0 )
|
if ( iDamage <= 0 )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( eAttacker ) || !isdefined( eAttacker.team ) )
|
if ( !isdefined( eAttacker ) || !isdefined( eAttacker.team ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( eAttacker == self )
|
if ( eAttacker == self )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isalive( eAttacker ) )
|
if ( !isalive( eAttacker ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
self SetAttacker( eAttacker );
|
self SetAttacker( eAttacker );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ onDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoin
|
|||||||
difficulty()
|
difficulty()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
if ( getdvarint( "bots_skill" ) != 9 )
|
if ( getdvarint( "bots_skill" ) != 9 )
|
||||||
@ -110,7 +110,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 0;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 0;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 10;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 10;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 30;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 30;
|
||||||
@ -120,7 +120,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 0;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.55;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.55;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 1000;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 1000;
|
||||||
@ -141,7 +141,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_ankle_le,j_ankle_ri,j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 10;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 10;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 15;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 15;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 45;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 45;
|
||||||
@ -151,7 +151,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 10;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 10;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.4;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.4;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 750;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 750;
|
||||||
@ -172,7 +172,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 20;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 20;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 20;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 20;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 50;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 50;
|
||||||
@ -182,7 +182,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 25;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 25;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.3;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.3;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 600;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 600;
|
||||||
@ -203,7 +203,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_spineupper,j_ankle_le,j_ankle_ri,j_head,j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 30;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 30;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 25;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 25;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 55;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 55;
|
||||||
@ -213,7 +213,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 35;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 35;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.25;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.25;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 500;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 500;
|
||||||
@ -234,7 +234,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 40;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 40;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 35;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 35;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 60;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 60;
|
||||||
@ -244,7 +244,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 50;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 50;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6:
|
case 6:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.2;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.2;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 250;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 250;
|
||||||
@ -265,7 +265,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head,j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_spineupper,j_head,j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 50;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 50;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 45;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 45;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 65;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 65;
|
||||||
@ -275,7 +275,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = 2;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 75;
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = 75;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case 7:
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.1;
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.1;
|
||||||
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 100;
|
self.pers[ "bots" ][ "skill" ][ "init_react_time" ] = 100;
|
||||||
@ -296,7 +296,7 @@ difficulty()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head";
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_fov_multi" ] = 0.5;
|
||||||
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
self.pers[ "bots" ][ "skill" ][ "ads_aimspeed_multi" ] = 0.5;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 65;
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = 65;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 65;
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = 65;
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 70;
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = 70;
|
||||||
@ -308,7 +308,7 @@ difficulty()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wait 5;
|
wait 5;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,16 +319,16 @@ difficulty()
|
|||||||
set_diff()
|
set_diff()
|
||||||
{
|
{
|
||||||
rankVar = getdvarint( "bots_skill" );
|
rankVar = getdvarint( "bots_skill" );
|
||||||
|
|
||||||
switch ( rankVar )
|
switch ( rankVar )
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
self.pers[ "bots" ][ "skill" ][ "base" ] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) );
|
self.pers[ "bots" ][ "skill" ][ "base" ] = Round( random_normal_distribution( 3.5, 1.75, 1, 7 ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 8:
|
case 8:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 9:
|
case 9:
|
||||||
self.pers[ "bots" ][ "skill" ][ "base" ] = randomintrange( 1, 7 );
|
self.pers[ "bots" ][ "skill" ][ "base" ] = randomintrange( 1, 7 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.05 * randomintrange( 1, 20 );
|
self.pers[ "bots" ][ "skill" ][ "aim_time" ] = 0.05 * randomintrange( 1, 20 );
|
||||||
@ -338,11 +338,11 @@ set_diff()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "no_trace_look_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" ][ "remember_time" ] = 50 * randomint( 100 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "fov" ] = randomfloatrange( -1, 1 );
|
self.pers[ "bots" ][ "skill" ][ "fov" ] = randomfloatrange( -1, 1 );
|
||||||
|
|
||||||
randomNum = randomintrange( 500, 25000 );
|
randomNum = randomintrange( 500, 25000 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "dist_start" ] = randomNum;
|
self.pers[ "bots" ][ "skill" ][ "dist_start" ] = randomNum;
|
||||||
self.pers[ "bots" ][ "skill" ][ "dist_max" ] = randomNum * 2;
|
self.pers[ "bots" ][ "skill" ][ "dist_max" ] = randomNum * 2;
|
||||||
|
|
||||||
self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.05 * randomint( 20 );
|
self.pers[ "bots" ][ "skill" ][ "spawn_time" ] = 0.05 * randomint( 20 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "help_dist" ] = randomintrange( 500, 25000 );
|
self.pers[ "bots" ][ "skill" ][ "help_dist" ] = randomintrange( 500, 25000 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "semi_time" ] = randomfloatrange( 0.05, 1 );
|
self.pers[ "bots" ][ "skill" ][ "semi_time" ] = randomfloatrange( 0.05, 1 );
|
||||||
@ -351,7 +351,7 @@ set_diff()
|
|||||||
self.pers[ "bots" ][ "skill" ][ "aim_offset_amount" ] = 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" ][ "bone_update_interval" ] = randomfloatrange( 0.05, 1 );
|
||||||
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head,j_spineupper,j_ankle_ri,j_ankle_le";
|
self.pers[ "bots" ][ "skill" ][ "bones" ] = "j_head,j_spineupper,j_ankle_ri,j_ankle_le";
|
||||||
|
|
||||||
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = randomint( 100 );
|
self.pers[ "bots" ][ "behavior" ][ "strafe" ] = randomint( 100 );
|
||||||
self.pers[ "bots" ][ "behavior" ][ "nade" ] = randomint( 100 );
|
self.pers[ "bots" ][ "behavior" ][ "nade" ] = randomint( 100 );
|
||||||
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = randomint( 100 );
|
self.pers[ "bots" ][ "behavior" ][ "sprint" ] = randomint( 100 );
|
||||||
@ -361,7 +361,7 @@ set_diff()
|
|||||||
self.pers[ "bots" ][ "behavior" ][ "switch" ] = randomint( 100 );
|
self.pers[ "bots" ][ "behavior" ][ "switch" ] = randomint( 100 );
|
||||||
self.pers[ "bots" ][ "behavior" ][ "jump" ] = randomint( 100 );
|
self.pers[ "bots" ][ "behavior" ][ "jump" ] = randomint( 100 );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
self.pers[ "bots" ][ "skill" ][ "base" ] = rankVar;
|
self.pers[ "bots" ][ "skill" ][ "base" ] = rankVar;
|
||||||
break;
|
break;
|
||||||
@ -375,11 +375,11 @@ onBotSpawned()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "bot_spawned" );
|
self waittill( "bot_spawned" );
|
||||||
|
|
||||||
self thread start_bot_threads();
|
self thread start_bot_threads();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -390,11 +390,11 @@ onBotSpawned()
|
|||||||
onSpawned()
|
onSpawned()
|
||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "spawned_player" );
|
self waittill( "spawned_player" );
|
||||||
|
|
||||||
self thread maps\bots\objectives\_manager::spawned();
|
self thread maps\bots\objectives\_manager::spawned();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -407,9 +407,9 @@ start_bot_threads()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
self thread doReloadCancel();
|
self thread doReloadCancel();
|
||||||
|
|
||||||
self thread maps\bots\objectives\_manager::start_bot_threads();
|
self thread maps\bots\objectives\_manager::start_bot_threads();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,21 +421,21 @@ changeToWeapon( weap )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
level endon( "game_ended" );
|
level endon( "game_ended" );
|
||||||
|
|
||||||
if ( !self hasweapon( weap ) )
|
if ( !self hasweapon( weap ) )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
self switchtoweapon( weap );
|
self switchtoweapon( weap );
|
||||||
|
|
||||||
if ( self getcurrentweapon() == weap )
|
if ( self getcurrentweapon() == weap )
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
self waittill_any_timeout( 5, "weapon_change" );
|
self waittill_any_timeout( 5, "weapon_change" );
|
||||||
|
|
||||||
return ( self getcurrentweapon() == weap );
|
return ( self getcurrentweapon() == weap );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,29 +445,29 @@ changeToWeapon( weap )
|
|||||||
doReloadCancel_loop()
|
doReloadCancel_loop()
|
||||||
{
|
{
|
||||||
ret = self waittill_any_return( "reload", "weapon_change" );
|
ret = self waittill_any_return( "reload", "weapon_change" );
|
||||||
|
|
||||||
if ( self BotIsFrozen() )
|
if ( self BotIsFrozen() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self usebuttonpressed() )
|
if ( self usebuttonpressed() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
curWeap = self getcurrentweapon();
|
curWeap = self getcurrentweapon();
|
||||||
|
|
||||||
if ( !self isWeaponPrimary( curWeap ) )
|
if ( !self isWeaponPrimary( curWeap ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ret == "reload" )
|
if ( ret == "reload" )
|
||||||
{
|
{
|
||||||
// check single reloads
|
// check single reloads
|
||||||
@ -476,41 +476,41 @@ doReloadCancel_loop()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check difficulty
|
// check difficulty
|
||||||
if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 3 )
|
if ( self.pers[ "bots" ][ "skill" ][ "base" ] <= 3 )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check if got another weapon
|
// check if got another weapon
|
||||||
weaponslist = self getweaponslistprimaries();
|
weaponslist = self getweaponslistprimaries();
|
||||||
weap = "";
|
weap = "";
|
||||||
|
|
||||||
while ( weaponslist.size )
|
while ( weaponslist.size )
|
||||||
{
|
{
|
||||||
weapon = weaponslist[ randomint( weaponslist.size ) ];
|
weapon = weaponslist[ randomint( weaponslist.size ) ];
|
||||||
weaponslist = array_remove( weaponslist, weapon );
|
weaponslist = array_remove( weaponslist, weapon );
|
||||||
|
|
||||||
if ( !self isWeaponPrimary( weapon ) )
|
if ( !self isWeaponPrimary( weapon ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( curWeap == weapon || weapon == "none" || weapon == "" )
|
if ( curWeap == weapon || weapon == "none" || weapon == "" )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
weap = weapon;
|
weap = weapon;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( weap == "" )
|
if ( weap == "" )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// do the cancel
|
// do the cancel
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
self thread changeToWeapon( weap );
|
self thread changeToWeapon( weap );
|
||||||
@ -526,7 +526,7 @@ doReloadCancel()
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self doReloadCancel_loop();
|
self doReloadCancel_loop();
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,7 +22,7 @@ connected()
|
|||||||
spawned()
|
spawned()
|
||||||
{
|
{
|
||||||
self.bot_current_objective = undefined;
|
self.bot_current_objective = undefined;
|
||||||
|
|
||||||
self thread clean_objective_on_completion();
|
self thread clean_objective_on_completion();
|
||||||
self thread watch_for_objective_canceled();
|
self thread watch_for_objective_canceled();
|
||||||
}
|
}
|
||||||
@ -32,18 +32,18 @@ watch_for_objective_canceled()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "cancel_bot_objective", reason );
|
self waittill( "cancel_bot_objective", reason );
|
||||||
|
|
||||||
obj_name = "undefined";
|
obj_name = "undefined";
|
||||||
|
|
||||||
if ( isdefined( self.bot_current_objective ) )
|
if ( isdefined( self.bot_current_objective ) )
|
||||||
{
|
{
|
||||||
obj_name = self.bot_current_objective.sname;
|
obj_name = self.bot_current_objective.sname;
|
||||||
}
|
}
|
||||||
|
|
||||||
self BotNotifyBotEvent( "debug", "watch_for_objective_canceled: " + obj_name + ": " + reason );
|
self BotNotifyBotEvent( "debug", "watch_for_objective_canceled: " + obj_name + ": " + reason );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -53,22 +53,22 @@ clean_objective_on_completion()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
self waittill( "completed_bot_objective", successful, reason );
|
self waittill( "completed_bot_objective", successful, reason );
|
||||||
|
|
||||||
obj_name = "undefined";
|
obj_name = "undefined";
|
||||||
|
|
||||||
if ( isdefined( self.bot_current_objective ) )
|
if ( isdefined( self.bot_current_objective ) )
|
||||||
{
|
{
|
||||||
obj_name = self.bot_current_objective.sname;
|
obj_name = self.bot_current_objective.sname;
|
||||||
|
|
||||||
self.bot_current_objective.eparentobj.abotprocesstimes[ self getentitynumber() + "" ] = gettime();
|
self.bot_current_objective.eparentobj.abotprocesstimes[ self getentitynumber() + "" ] = gettime();
|
||||||
}
|
}
|
||||||
|
|
||||||
self BotNotifyBotEvent( "debug", "clean_objective_on_completion: " + obj_name + ": " + successful + ": " + reason );
|
self BotNotifyBotEvent( "debug", "clean_objective_on_completion: " + obj_name + ": " + successful + ": " + reason );
|
||||||
|
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
self.bot_current_objective = undefined;
|
self.bot_current_objective = undefined;
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ start_bot_threads()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
self thread bot_objective_think();
|
self thread bot_objective_think();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,80 +88,80 @@ bot_objective_think()
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
level endon( "intermission" );
|
level endon( "intermission" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
// find all avail objectives
|
// find all avail objectives
|
||||||
objectives = [];
|
objectives = [];
|
||||||
now = gettime();
|
now = gettime();
|
||||||
our_key = self getentitynumber() + "";
|
our_key = self getentitynumber() + "";
|
||||||
|
|
||||||
for ( i = 0; i < level.bot_objectives.size; i++ )
|
for ( i = 0; i < level.bot_objectives.size; i++ )
|
||||||
{
|
{
|
||||||
objective = level.bot_objectives[ i ];
|
objective = level.bot_objectives[ i ];
|
||||||
|
|
||||||
// check the process rate
|
// check the process rate
|
||||||
if ( isdefined( objective.abotprocesstimes[ our_key ] ) && now - objective.abotprocesstimes[ our_key ] < objective.iprocessrate )
|
if ( isdefined( objective.abotprocesstimes[ our_key ] ) && now - objective.abotprocesstimes[ our_key ] < objective.iprocessrate )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
objectives = array_merge( objectives, self [[ objective.fpfinder ]]( objective ) );
|
objectives = array_merge( objectives, self [[ objective.fpfinder ]]( objective ) );
|
||||||
objective.abotprocesstimes[ our_key ] = now;
|
objective.abotprocesstimes[ our_key ] = now;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( objectives.size <= 0 )
|
if ( objectives.size <= 0 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// sort according to priority
|
// sort according to priority
|
||||||
heap = NewHeap( ::HeapPriority );
|
heap = NewHeap( ::HeapPriority );
|
||||||
|
|
||||||
for ( i = 0; i < objectives.size; i++ )
|
for ( i = 0; i < objectives.size; i++ )
|
||||||
{
|
{
|
||||||
if ( objectives[ i ].fpriority <= -100 )
|
if ( objectives[ i ].fpriority <= -100 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
heap HeapInsert( objectives[ i ] );
|
heap HeapInsert( objectives[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// pop the top!
|
// pop the top!
|
||||||
best_prio = heap.data[ 0 ];
|
best_prio = heap.data[ 0 ];
|
||||||
|
|
||||||
if ( !isdefined( best_prio ) )
|
if ( !isdefined( best_prio ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// already on a better obj
|
// already on a better obj
|
||||||
if ( isdefined( self.bot_current_objective ) && ( best_prio.guid == self.bot_current_objective.guid || best_prio.fpriority < self [[ self.bot_current_objective.eparentobj.fppriorty ]]( self.bot_current_objective.eparentobj, self.bot_current_objective.eent ) ) )
|
if ( isdefined( self.bot_current_objective ) && ( best_prio.guid == self.bot_current_objective.guid || best_prio.fpriority < self [[ self.bot_current_objective.eparentobj.fppriorty ]]( self.bot_current_objective.eparentobj, self.bot_current_objective.eent ) ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// DO THE OBJ
|
// DO THE OBJ
|
||||||
// cancel the old obj
|
// cancel the old obj
|
||||||
if ( isdefined( self.bot_current_objective ) )
|
if ( isdefined( self.bot_current_objective ) )
|
||||||
{
|
{
|
||||||
// cancel it
|
// cancel it
|
||||||
self CancelObjective( "new obj: " + best_prio.sname );
|
self CancelObjective( "new obj: " + best_prio.sname );
|
||||||
|
|
||||||
// wait for it to clean up
|
// wait for it to clean up
|
||||||
self waittill( "completed_bot_objective" );
|
self waittill( "completed_bot_objective" );
|
||||||
|
|
||||||
// redo the loop, should do the obj next iteration
|
// redo the loop, should do the obj next iteration
|
||||||
best_prio.eparentobj.abotprocesstimes[ our_key ] = undefined;
|
best_prio.eparentobj.abotprocesstimes[ our_key ] = undefined;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ready to execute
|
// ready to execute
|
||||||
self BotNotifyBotEvent( "debug", "bot_objective_think: " + best_prio.sname );
|
self BotNotifyBotEvent( "debug", "bot_objective_think: " + best_prio.sname );
|
||||||
|
|
||||||
self.bot_current_objective = best_prio;
|
self.bot_current_objective = best_prio;
|
||||||
self thread [[ best_prio.eparentobj.fpexecuter ]]( best_prio );
|
self thread [[ best_prio.eparentobj.fpexecuter ]]( best_prio );
|
||||||
}
|
}
|
||||||
|
@ -6,17 +6,17 @@
|
|||||||
init()
|
init()
|
||||||
{
|
{
|
||||||
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
||||||
{
|
{
|
||||||
vending_triggers = getentarray( "harrybo21_perk_trigger", "targetname" );
|
vending_triggers = getentarray( "harrybo21_perk_trigger", "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0 ; i < vending_triggers.size; i++ )
|
for ( i = 0 ; i < vending_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
vending_triggers[ i ] thread init_vending_trigger();
|
vending_triggers[ i ] thread init_vending_trigger();
|
||||||
@ -26,22 +26,22 @@ init()
|
|||||||
init_vending_trigger()
|
init_vending_trigger()
|
||||||
{
|
{
|
||||||
self endon( "death" );
|
self endon( "death" );
|
||||||
|
|
||||||
if ( self.targetname == "harrybo21_perk_trigger" )
|
if ( self.targetname == "harrybo21_perk_trigger" )
|
||||||
{
|
{
|
||||||
machine = self getMachine();
|
machine = self getMachine();
|
||||||
|
|
||||||
machine waittill( "activate_machine" );
|
machine waittill( "activate_machine" );
|
||||||
|
|
||||||
self.bot_powered_on = true;
|
self.bot_powered_on = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perk = self getVendingPerk();
|
perk = self getVendingPerk();
|
||||||
notify_name = perk + "_power_on";
|
notify_name = perk + "_power_on";
|
||||||
|
|
||||||
level waittill( notify_name );
|
level waittill( notify_name );
|
||||||
|
|
||||||
self.bot_powered_on = true;
|
self.bot_powered_on = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,64 +49,64 @@ init_vending_trigger()
|
|||||||
Finder( eObj )
|
Finder( eObj )
|
||||||
{
|
{
|
||||||
answer = [];
|
answer = [];
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
vending_triggers = getentarray( "zombie_vending", "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
||||||
{
|
{
|
||||||
vending_triggers = getentarray( "harrybo21_perk_trigger", "targetname" );
|
vending_triggers = getentarray( "harrybo21_perk_trigger", "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
if ( !isdefined( vending_triggers ) || vending_triggers.size < 1 )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0 ; i < vending_triggers.size; i++ )
|
for ( i = 0 ; i < vending_triggers.size; i++ )
|
||||||
{
|
{
|
||||||
vending = vending_triggers[ i ];
|
vending = vending_triggers[ i ];
|
||||||
|
|
||||||
if ( !isdefined( vending.bot_powered_on ) || !vending.bot_powered_on )
|
if ( !isdefined( vending.bot_powered_on ) || !vending.bot_powered_on )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
perk = vending getVendingPerk();
|
perk = vending getVendingPerk();
|
||||||
cost = vending getPerkCost();
|
cost = vending getPerkCost();
|
||||||
|
|
||||||
if ( self.score < cost )
|
if ( self.score < cost )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// perk limit??
|
// perk limit??
|
||||||
if ( self hasperk( perk ) )
|
if ( self hasperk( perk ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
machine = vending getMachine();
|
machine = vending getMachine();
|
||||||
|
|
||||||
if ( !isdefined( machine ) )
|
if ( !isdefined( machine ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
org = self getOffset( machine );
|
org = self getOffset( machine );
|
||||||
|
|
||||||
if ( GetPathIsInaccessible( self.origin, org ) )
|
if ( GetPathIsInaccessible( self.origin, org ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, vending );
|
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, vending );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ getVendingPerk()
|
|||||||
machine = self getMachine();
|
machine = self getMachine();
|
||||||
return machine.script_string;
|
return machine.script_string;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.script_noteworthy;
|
return self.script_noteworthy;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,39 +132,39 @@ getPerkCost()
|
|||||||
{
|
{
|
||||||
return level.zombie_perks[ self getVendingPerk() ].perk_cost;
|
return level.zombie_perks[ self getVendingPerk() ].perk_cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
cost = level.zombie_vars[ "zombie_perk_cost" ];
|
cost = level.zombie_vars[ "zombie_perk_cost" ];
|
||||||
|
|
||||||
switch ( self getVendingPerk() )
|
switch ( self getVendingPerk() )
|
||||||
{
|
{
|
||||||
case "specialty_armorvest":
|
case "specialty_armorvest":
|
||||||
cost = 2500;
|
cost = 2500;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "specialty_quickrevive":
|
case "specialty_quickrevive":
|
||||||
cost = 1500;
|
cost = 1500;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "specialty_fastreload":
|
case "specialty_fastreload":
|
||||||
cost = 3000;
|
cost = 3000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "specialty_rof":
|
case "specialty_rof":
|
||||||
cost = 2000;
|
cost = 2000;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
cost = 10000;
|
cost = 10000;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
getOffset( model )
|
getOffset( model )
|
||||||
{
|
{
|
||||||
org = model get_angle_offset_node( 40, ( 0, -90, 0 ), ( 0, 0, 1 ) );
|
org = model get_angle_offset_node( 40, ( 0, -90, 0 ), ( 0, 0, 1 ) );
|
||||||
|
|
||||||
return org;
|
return org;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,12 +173,12 @@ Priority( eObj, eEnt )
|
|||||||
// TODO rank perks
|
// TODO rank perks
|
||||||
base_priority = 2;
|
base_priority = 2;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1600, 3, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1600, 3, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base_priority;
|
return base_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,17 +186,17 @@ Executer( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
vending = eObj.eent;
|
vending = eObj.eent;
|
||||||
|
|
||||||
self thread WatchForCancel( vending );
|
self thread WatchForCancel( vending );
|
||||||
|
|
||||||
self GoDoPerkMachine( eObj );
|
self GoDoPerkMachine( eObj );
|
||||||
|
|
||||||
self WatchForCancelCleanup();
|
self WatchForCancelCleanup();
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,11 +210,11 @@ WatchForCancel( vending )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "WatchForCancelPerkmachine" );
|
self endon( "WatchForCancelPerkmachine" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "self inLastStand()" );
|
self CancelObjective( "self inLastStand()" );
|
||||||
@ -231,11 +231,11 @@ WatchToGoToMachine( vending )
|
|||||||
self endon( "goal" );
|
self endon( "goal" );
|
||||||
self endon( "bad_path" );
|
self endon( "bad_path" );
|
||||||
self endon( "new_goal" );
|
self endon( "new_goal" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self istouching( vending ) || vending PointInsideUseTrigger( self.origin ) )
|
if ( self istouching( vending ) || vending PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
self notify( "goal" );
|
self notify( "goal" );
|
||||||
@ -247,40 +247,40 @@ WatchToGoToMachine( vending )
|
|||||||
GoDoPerkMachine( eObj )
|
GoDoPerkMachine( eObj )
|
||||||
{
|
{
|
||||||
self endon( "cancel_bot_objective" );
|
self endon( "cancel_bot_objective" );
|
||||||
|
|
||||||
vending = eObj.eent;
|
vending = eObj.eent;
|
||||||
machine = vending getMachine();
|
machine = vending getMachine();
|
||||||
perk = vending getVendingPerk();
|
perk = vending getVendingPerk();
|
||||||
org = self getOffset( machine );
|
org = self getOffset( machine );
|
||||||
|
|
||||||
// go to machine
|
// go to machine
|
||||||
self thread WatchToGoToMachine( vending );
|
self thread WatchToGoToMachine( vending );
|
||||||
self SetScriptGoal( org, 32 );
|
self SetScriptGoal( org, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to machine";
|
eObj.sreason = "didn't go to machine";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self istouching( vending ) && !vending PointInsideUseTrigger( self.origin ) )
|
if ( !self istouching( vending ) && !vending PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching machine";
|
eObj.sreason = "not touching machine";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok we are touching machine, lets look at it
|
// ok we are touching machine, lets look at it
|
||||||
self SetScriptAimPos( vending.origin );
|
self SetScriptAimPos( vending.origin );
|
||||||
|
|
||||||
// wait to look at it
|
// wait to look at it
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
// press use
|
// press use
|
||||||
self thread BotPressUse( 0.15 );
|
self thread BotPressUse( 0.15 );
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
|
|
||||||
// ok we pressed use, DONE
|
// ok we pressed use, DONE
|
||||||
eObj.sreason = "completed " + perk;
|
eObj.sreason = "completed " + perk;
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
|
@ -6,14 +6,14 @@
|
|||||||
Finder( eObj )
|
Finder( eObj )
|
||||||
{
|
{
|
||||||
answer = [];
|
answer = [];
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ents = getentarray( "script_model", "classname" );
|
ents = getentarray( "script_model", "classname" );
|
||||||
|
|
||||||
for ( i = 0; i < ents.size; i++ )
|
for ( i = 0; i < ents.size; i++ )
|
||||||
{
|
{
|
||||||
// not a powerup script_model
|
// not a powerup script_model
|
||||||
@ -21,22 +21,22 @@ Finder( eObj )
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// can we path to it?
|
// can we path to it?
|
||||||
if ( GetPathIsInaccessible( self.origin, ents[ i ].origin ) )
|
if ( GetPathIsInaccessible( self.origin, ents[ i ].origin ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// make sure we are the only one going for it
|
// make sure we are the only one going for it
|
||||||
if ( self GetBotsAmountForEntity( ents[ i ] ) >= 1 )
|
if ( self GetBotsAmountForEntity( ents[ i ] ) >= 1 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, ents[ i ] );
|
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, ents[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,12 +45,12 @@ Priority( eObj, eEnt )
|
|||||||
// TODO: check powerup type
|
// TODO: check powerup type
|
||||||
base_priority = 0;
|
base_priority = 0;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 300, 700, 2, -2 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 300, 700, 2, -2 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base_priority;
|
return base_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,25 +58,25 @@ Executer( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
powerup = eObj.eent;
|
powerup = eObj.eent;
|
||||||
org = powerup.origin;
|
org = powerup.origin;
|
||||||
|
|
||||||
self thread IncrementBotsForEntity( powerup );
|
self thread IncrementBotsForEntity( powerup );
|
||||||
self thread WatchForCancel( powerup );
|
self thread WatchForCancel( powerup );
|
||||||
|
|
||||||
self GoDoPowerup( eObj );
|
self GoDoPowerup( eObj );
|
||||||
|
|
||||||
self WatchForCancelCleanup();
|
self WatchForCancelCleanup();
|
||||||
self DecrementBotsForEntity( powerup );
|
self DecrementBotsForEntity( powerup );
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
|
|
||||||
if ( distance( org, self.origin ) <= 64 )
|
if ( distance( org, self.origin ) <= 64 )
|
||||||
{
|
{
|
||||||
eObj.sreason = "completed";
|
eObj.sreason = "completed";
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,17 +90,17 @@ WatchForCancel( powerup )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "WatchForCancelPowerup" );
|
self endon( "WatchForCancelPowerup" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "self inLastStand()" );
|
self CancelObjective( "self inLastStand()" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( powerup ) )
|
if ( !isdefined( powerup ) )
|
||||||
{
|
{
|
||||||
self CancelObjective( "!isdefined( powerup )" );
|
self CancelObjective( "!isdefined( powerup )" );
|
||||||
@ -112,31 +112,31 @@ WatchForCancel( powerup )
|
|||||||
GoDoPowerup( eObj )
|
GoDoPowerup( eObj )
|
||||||
{
|
{
|
||||||
self endon( "cancel_bot_objective" );
|
self endon( "cancel_bot_objective" );
|
||||||
|
|
||||||
powerup = eObj.eent;
|
powerup = eObj.eent;
|
||||||
|
|
||||||
// go to it
|
// go to it
|
||||||
self SetScriptGoal( powerup.origin, 32 );
|
self SetScriptGoal( powerup.origin, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to powerup";
|
eObj.sreason = "didn't go to powerup";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( powerup ) || !isdefined( powerup.origin ) )
|
if ( !isdefined( powerup ) || !isdefined( powerup.origin ) )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( distance( powerup.origin, self.origin ) > 64 )
|
if ( distance( powerup.origin, self.origin ) > 64 )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching it";
|
eObj.sreason = "not touching it";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
eObj.sreason = "completed";
|
eObj.sreason = "completed";
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
}
|
}
|
||||||
|
@ -7,49 +7,49 @@ Finder( eObj )
|
|||||||
{
|
{
|
||||||
Players = get_players();
|
Players = get_players();
|
||||||
Answer = [];
|
Answer = [];
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return Answer;
|
return Answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < Players.size; i++ )
|
for ( i = 0; i < Players.size; i++ )
|
||||||
{
|
{
|
||||||
Player = Players[ i ];
|
Player = Players[ i ];
|
||||||
|
|
||||||
if ( !isdefined( Player ) || !isdefined( Player.team ) )
|
if ( !isdefined( Player ) || !isdefined( Player.team ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Player == self )
|
if ( Player == self )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( Player.sessionstate != "playing" )
|
if ( Player.sessionstate != "playing" )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !Player inLastStand() || Player.revivetrigger.beingrevived )
|
if ( !Player inLastStand() || Player.revivetrigger.beingrevived )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( GetPathIsInaccessible( self.origin, Player.origin ) )
|
if ( GetPathIsInaccessible( self.origin, Player.origin ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( self GetBotsAmountForEntity( Player ) >= 1 )
|
if ( self GetBotsAmountForEntity( Player ) >= 1 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Answer[ Answer.size ] = self CreateFinderObjectiveEZ( eObj, Player );
|
Answer[ Answer.size ] = self CreateFinderObjectiveEZ( eObj, Player );
|
||||||
}
|
}
|
||||||
|
|
||||||
return Answer;
|
return Answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,12 +57,12 @@ Priority( eObj, eEnt )
|
|||||||
{
|
{
|
||||||
base_priority = 3;
|
base_priority = 3;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base_priority;
|
return base_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,20 +70,20 @@ Executer( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
revivee = eObj.eent;
|
revivee = eObj.eent;
|
||||||
|
|
||||||
self thread IncrementBotsForEntity( revivee );
|
self thread IncrementBotsForEntity( revivee );
|
||||||
self thread WatchForCancelRevive( revivee );
|
self thread WatchForCancelRevive( revivee );
|
||||||
|
|
||||||
self GoDoRevive( eObj );
|
self GoDoRevive( eObj );
|
||||||
|
|
||||||
self WatchForCancelReviveCleanup();
|
self WatchForCancelReviveCleanup();
|
||||||
self DecrementBotsForEntity( revivee );
|
self DecrementBotsForEntity( revivee );
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
self ClearPriorityObjective();
|
self ClearPriorityObjective();
|
||||||
|
|
||||||
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,31 +97,31 @@ WatchForCancelRevive( revivee )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "WatchForCancelRevive" );
|
self endon( "WatchForCancelRevive" );
|
||||||
|
|
||||||
org = revivee.origin;
|
org = revivee.origin;
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "self inLastStand()" );
|
self CancelObjective( "self inLastStand()" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( revivee ) || !revivee inLastStand() )
|
if ( !isdefined( revivee ) || !revivee inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "!isdefined( revivee ) || !revivee inLastStand()" );
|
self CancelObjective( "!isdefined( revivee ) || !revivee inLastStand()" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( revivee.revivetrigger.beingrevived && !self isReviving( revivee ) )
|
if ( revivee.revivetrigger.beingrevived && !self isReviving( revivee ) )
|
||||||
{
|
{
|
||||||
self CancelObjective( "revivee.revivetrigger.beingrevived && !self isReviving( revivee )" );
|
self CancelObjective( "revivee.revivetrigger.beingrevived && !self isReviving( revivee )" );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( distance( revivee.origin, org ) > 16 )
|
if ( distance( revivee.origin, org ) > 16 )
|
||||||
{
|
{
|
||||||
self CancelObjective( "distance( revivee.origin, org ) > 16" );
|
self CancelObjective( "distance( revivee.origin, org ) > 16" );
|
||||||
@ -138,11 +138,11 @@ WatchToGoToGuy( revivee )
|
|||||||
self endon( "goal" );
|
self endon( "goal" );
|
||||||
self endon( "bad_path" );
|
self endon( "bad_path" );
|
||||||
self endon( "new_goal" );
|
self endon( "new_goal" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
if ( self istouching( revivee.revivetrigger ) )
|
if ( self istouching( revivee.revivetrigger ) )
|
||||||
{
|
{
|
||||||
self notify( "goal" );
|
self notify( "goal" );
|
||||||
@ -155,11 +155,11 @@ WatchForSuccessRevive( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
revivee = eObj.eent;
|
revivee = eObj.eent;
|
||||||
|
|
||||||
ret = self waittill_either_return( "cancel_bot_objective", "completed_bot_objective" );
|
ret = self waittill_either_return( "cancel_bot_objective", "completed_bot_objective" );
|
||||||
|
|
||||||
if ( ret == "cancel_bot_objective" && isdefined( revivee ) && !revivee inLastStand() )
|
if ( ret == "cancel_bot_objective" && isdefined( revivee ) && !revivee inLastStand() )
|
||||||
{
|
{
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
@ -170,40 +170,40 @@ WatchForSuccessRevive( eObj )
|
|||||||
GoDoRevive( eObj )
|
GoDoRevive( eObj )
|
||||||
{
|
{
|
||||||
self endon( "cancel_bot_objective" );
|
self endon( "cancel_bot_objective" );
|
||||||
|
|
||||||
revivee = eObj.eent;
|
revivee = eObj.eent;
|
||||||
|
|
||||||
// go to guy
|
// go to guy
|
||||||
self thread WatchToGoToGuy( revivee );
|
self thread WatchToGoToGuy( revivee );
|
||||||
self SetPriorityObjective();
|
self SetPriorityObjective();
|
||||||
self SetScriptGoal( revivee.origin, 32 );
|
self SetScriptGoal( revivee.origin, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to guy";
|
eObj.sreason = "didn't go to guy";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self istouching( revivee.revivetrigger ) )
|
if ( !self istouching( revivee.revivetrigger ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching guy";
|
eObj.sreason = "not touching guy";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok we are touching guy, lets look at him
|
// ok we are touching guy, lets look at him
|
||||||
self SetScriptAimPos( revivee.origin );
|
self SetScriptAimPos( revivee.origin );
|
||||||
|
|
||||||
// now lets hold use until he is up or otherwise
|
// now lets hold use until he is up or otherwise
|
||||||
self thread WatchForSuccessRevive( eObj );
|
self thread WatchForSuccessRevive( eObj );
|
||||||
|
|
||||||
while ( self istouching( revivee.revivetrigger ) )
|
while ( self istouching( revivee.revivetrigger ) )
|
||||||
{
|
{
|
||||||
self thread BotPressUse( 0.15 );
|
self thread BotPressUse( 0.15 );
|
||||||
|
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
eObj.sreason = "not touching guy";
|
eObj.sreason = "not touching guy";
|
||||||
}
|
}
|
||||||
|
@ -6,45 +6,45 @@
|
|||||||
Finder( eObj )
|
Finder( eObj )
|
||||||
{
|
{
|
||||||
answer = [];
|
answer = [];
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
weapons = self getweaponslist();
|
weapons = self getweaponslist();
|
||||||
|
|
||||||
// TODO check if need a new weapon, rate weapons too is better then current etc
|
// TODO check if need a new weapon, rate weapons too is better then current etc
|
||||||
chests = level.chests;
|
chests = level.chests;
|
||||||
|
|
||||||
if ( !isdefined( chests ) )
|
if ( !isdefined( chests ) )
|
||||||
{
|
{
|
||||||
chests = getentarray( "treasure_chest_use", "targetname" );
|
chests = getentarray( "treasure_chest_use", "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( chests ) || chests.size <= 0 )
|
if ( !isdefined( chests ) || chests.size <= 0 )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( i = 0; i < chests.size; i ++ )
|
for ( i = 0; i < chests.size; i ++ )
|
||||||
{
|
{
|
||||||
chest = chests[ i ];
|
chest = chests[ i ];
|
||||||
|
|
||||||
// not active chest
|
// not active chest
|
||||||
if ( isdefined( chest.disabled ) && chest.disabled )
|
if ( isdefined( chest.disabled ) && chest.disabled )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// box is waiting for someone to grab weapon
|
// box is waiting for someone to grab weapon
|
||||||
if ( isdefined( chest.grab_weapon_hint ) && chest.grab_weapon_hint )
|
if ( isdefined( chest.grab_weapon_hint ) && chest.grab_weapon_hint )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
cost = 950;
|
cost = 950;
|
||||||
|
|
||||||
if ( isdefined( level.zombie_treasure_chest_cost ) )
|
if ( isdefined( level.zombie_treasure_chest_cost ) )
|
||||||
{
|
{
|
||||||
cost = level.zombie_treasure_chest_cost;
|
cost = level.zombie_treasure_chest_cost;
|
||||||
@ -53,44 +53,44 @@ Finder( eObj )
|
|||||||
{
|
{
|
||||||
cost = chest.zombie_cost;
|
cost = chest.zombie_cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
// check cost
|
// check cost
|
||||||
if ( self.score < cost )
|
if ( self.score < cost )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
lid = getent( chest.target, "targetname" );
|
lid = getent( chest.target, "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( lid ) )
|
if ( !isdefined( lid ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
weapon_spawn_org = getent( lid.target, "targetname" );
|
weapon_spawn_org = getent( lid.target, "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( weapon_spawn_org ) )
|
if ( !isdefined( weapon_spawn_org ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
org = self getOffset( lid );
|
org = self getOffset( lid );
|
||||||
|
|
||||||
if ( GetPathIsInaccessible( self.origin, org ) )
|
if ( GetPathIsInaccessible( self.origin, org ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, chest );
|
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, chest );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
getOffset( model )
|
getOffset( model )
|
||||||
{
|
{
|
||||||
org = model get_angle_offset_node( 52, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
org = model get_angle_offset_node( 52, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
||||||
|
|
||||||
return org;
|
return org;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,12 +98,12 @@ Priority( eObj, eEnt )
|
|||||||
{
|
{
|
||||||
base_priority = 1;
|
base_priority = 1;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 600, 1800, 2, 0 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 600, 1800, 2, 0 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base_priority;
|
return base_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -111,18 +111,18 @@ Executer( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
chest = eObj.eent;
|
chest = eObj.eent;
|
||||||
|
|
||||||
self thread WatchForCancel( chest );
|
self thread WatchForCancel( chest );
|
||||||
|
|
||||||
self GoDoTreasureChest( eObj );
|
self GoDoTreasureChest( eObj );
|
||||||
|
|
||||||
self WatchForCancelCleanup();
|
self WatchForCancelCleanup();
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
self ClearPriorityObjective();
|
self ClearPriorityObjective();
|
||||||
|
|
||||||
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,11 +136,11 @@ WatchForCancel( chest )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "WatchForCancelTreasurechest" );
|
self endon( "WatchForCancelTreasurechest" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "self inLastStand()" );
|
self CancelObjective( "self inLastStand()" );
|
||||||
@ -157,17 +157,17 @@ WatchToGoToChest( chest )
|
|||||||
self endon( "goal" );
|
self endon( "goal" );
|
||||||
self endon( "bad_path" );
|
self endon( "bad_path" );
|
||||||
self endon( "new_goal" );
|
self endon( "new_goal" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self istouching( chest ) || chest PointInsideUseTrigger( self.origin ) )
|
if ( self istouching( chest ) || chest PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
self notify( "goal" );
|
self notify( "goal" );
|
||||||
break; // is this needed?
|
break; // is this needed?
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( chest.disabled ) && chest.disabled )
|
if ( isdefined( chest.disabled ) && chest.disabled )
|
||||||
{
|
{
|
||||||
self notify( "bad_path" );
|
self notify( "bad_path" );
|
||||||
@ -179,105 +179,105 @@ WatchToGoToChest( chest )
|
|||||||
GoDoTreasureChest( eObj )
|
GoDoTreasureChest( eObj )
|
||||||
{
|
{
|
||||||
self endon( "cancel_bot_objective" );
|
self endon( "cancel_bot_objective" );
|
||||||
|
|
||||||
chest = eObj.eent;
|
chest = eObj.eent;
|
||||||
lid = getent( chest.target, "targetname" );
|
lid = getent( chest.target, "targetname" );
|
||||||
weapon_spawn_org = getent( lid.target, "targetname" );
|
weapon_spawn_org = getent( lid.target, "targetname" );
|
||||||
org = self getOffset( lid );
|
org = self getOffset( lid );
|
||||||
|
|
||||||
weap = self getcurrentweapon();
|
weap = self getcurrentweapon();
|
||||||
|
|
||||||
if ( weap == "none" || !self getammocount( weap ) )
|
if ( weap == "none" || !self getammocount( weap ) )
|
||||||
{
|
{
|
||||||
self SetPriorityObjective();
|
self SetPriorityObjective();
|
||||||
}
|
}
|
||||||
|
|
||||||
// go to box
|
// go to box
|
||||||
self thread WatchToGoToChest( chest );
|
self thread WatchToGoToChest( chest );
|
||||||
self SetScriptGoal( org, 32 );
|
self SetScriptGoal( org, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to chest";
|
eObj.sreason = "didn't go to chest";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self istouching( chest ) && !chest PointInsideUseTrigger( self.origin ) )
|
if ( !self istouching( chest ) && !chest PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching chest";
|
eObj.sreason = "not touching chest";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok we are touching weapon, lets look at it
|
// ok we are touching weapon, lets look at it
|
||||||
self SetScriptAimPos( chest.origin );
|
self SetScriptAimPos( chest.origin );
|
||||||
|
|
||||||
// wait to look at it
|
// wait to look at it
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
// press use
|
// press use
|
||||||
self thread BotPressUse( 0.15 );
|
self thread BotPressUse( 0.15 );
|
||||||
wait 0.25;
|
wait 0.25;
|
||||||
|
|
||||||
// ok we pressed use, wait for randomization to complete
|
// ok we pressed use, wait for randomization to complete
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
self ClearPriorityObjective();
|
self ClearPriorityObjective();
|
||||||
|
|
||||||
// randomization isnt happening...
|
// randomization isnt happening...
|
||||||
if ( !isdefined( chest.disabled ) || !chest.disabled )
|
if ( !isdefined( chest.disabled ) || !chest.disabled )
|
||||||
{
|
{
|
||||||
eObj.sreason = "chest isnt randomizing";
|
eObj.sreason = "chest isnt randomizing";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = weapon_spawn_org waittill_any_timeout( 5, "randomization_done" );
|
ret = weapon_spawn_org waittill_any_timeout( 5, "randomization_done" );
|
||||||
|
|
||||||
if (ret == "timeout")
|
if ( ret == "timeout" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "randomization_done timed out";
|
eObj.sreason = "randomization_done timed out";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( isdefined( level.flag[ "moving_chest_now" ] ) && flag( "moving_chest_now" ) )
|
if ( isdefined( level.flag[ "moving_chest_now" ] ) && flag( "moving_chest_now" ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "chest is moving!";
|
eObj.sreason = "chest is moving!";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
waittillframeend;
|
waittillframeend;
|
||||||
weap = weapon_spawn_org.weapon_string;
|
weap = weapon_spawn_org.weapon_string;
|
||||||
// weapon is done cooking, grabit!
|
// weapon is done cooking, grabit!
|
||||||
self SetPriorityObjective();
|
self SetPriorityObjective();
|
||||||
|
|
||||||
// go to box
|
// go to box
|
||||||
self thread WatchToGoToChest( chest );
|
self thread WatchToGoToChest( chest );
|
||||||
self SetScriptGoal( org, 32 );
|
self SetScriptGoal( org, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to chest";
|
eObj.sreason = "didn't go to chest";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self istouching( chest ) && !chest PointInsideUseTrigger( self.origin ) )
|
if ( !self istouching( chest ) && !chest PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching chest";
|
eObj.sreason = "not touching chest";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok we are touching weapon, lets look at it
|
// ok we are touching weapon, lets look at it
|
||||||
self SetScriptAimPos( chest.origin );
|
self SetScriptAimPos( chest.origin );
|
||||||
|
|
||||||
// wait to look at it
|
// wait to look at it
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
// press use
|
// press use
|
||||||
self thread BotPressUse( 0.15 );
|
self thread BotPressUse( 0.15 );
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
|
|
||||||
// complete!
|
// complete!
|
||||||
eObj.sreason = "completed " + weap;
|
eObj.sreason = "completed " + weap;
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
|
@ -5,15 +5,15 @@
|
|||||||
CreateObjectiveForManger( sName, fpFinder, fpPriorty, fpExecuter, iProcessRate )
|
CreateObjectiveForManger( sName, fpFinder, fpPriorty, fpExecuter, iProcessRate )
|
||||||
{
|
{
|
||||||
Answer = spawnstruct();
|
Answer = spawnstruct();
|
||||||
|
|
||||||
Answer.sname = sName;
|
Answer.sname = sName;
|
||||||
Answer.fpfinder = fpFinder;
|
Answer.fpfinder = fpFinder;
|
||||||
Answer.fpexecuter = fpExecuter;
|
Answer.fpexecuter = fpExecuter;
|
||||||
Answer.fppriorty = fpPriorty;
|
Answer.fppriorty = fpPriorty;
|
||||||
|
|
||||||
Answer.abotprocesstimes = [];
|
Answer.abotprocesstimes = [];
|
||||||
Answer.iprocessrate = iProcessRate;
|
Answer.iprocessrate = iProcessRate;
|
||||||
|
|
||||||
return Answer;
|
return Answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,16 +25,16 @@ CreateFinderObjectiveEZ( eObj, eEnt )
|
|||||||
CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
CreateFinderObjective( eObj, sName, eEnt, fPriority )
|
||||||
{
|
{
|
||||||
Answer = spawnstruct();
|
Answer = spawnstruct();
|
||||||
|
|
||||||
Answer.eparentobj = eObj;
|
Answer.eparentobj = eObj;
|
||||||
Answer.sname = sName;
|
Answer.sname = sName;
|
||||||
Answer.eent = eEnt;
|
Answer.eent = eEnt;
|
||||||
Answer.fpriority = fPriority;
|
Answer.fpriority = fPriority;
|
||||||
Answer.guid = eEnt getentitynumber();
|
Answer.guid = eEnt getentitynumber();
|
||||||
|
|
||||||
Answer.bwassuccessful = false;
|
Answer.bwassuccessful = false;
|
||||||
Answer.sreason = "canceled";
|
Answer.sreason = "canceled";
|
||||||
|
|
||||||
return Answer;
|
return Answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,18 +44,18 @@ GetBotsAmountForEntity( eEnt )
|
|||||||
{
|
{
|
||||||
eEnt.bots = 0;
|
eEnt.bots = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return eEnt.bots;
|
return eEnt.bots;
|
||||||
}
|
}
|
||||||
|
|
||||||
IncrementBotsForEntity( eEnt )
|
IncrementBotsForEntity( eEnt )
|
||||||
{
|
{
|
||||||
self endon( "bots_for_entity_cleanup" );
|
self endon( "bots_for_entity_cleanup" );
|
||||||
|
|
||||||
eEnt.bots++;
|
eEnt.bots++;
|
||||||
|
|
||||||
self waittill_either( "disconnect", "zombified" );
|
self waittill_either( "disconnect", "zombified" );
|
||||||
|
|
||||||
if ( isdefined( eEnt ) )
|
if ( isdefined( eEnt ) )
|
||||||
{
|
{
|
||||||
eEnt.bots--;
|
eEnt.bots--;
|
||||||
@ -65,7 +65,7 @@ IncrementBotsForEntity( eEnt )
|
|||||||
DecrementBotsForEntity( eEnt )
|
DecrementBotsForEntity( eEnt )
|
||||||
{
|
{
|
||||||
self notify( "bots_for_entity_cleanup" );
|
self notify( "bots_for_entity_cleanup" );
|
||||||
|
|
||||||
if ( isdefined( eEnt ) )
|
if ( isdefined( eEnt ) )
|
||||||
{
|
{
|
||||||
eEnt.bots--;
|
eEnt.bots--;
|
||||||
@ -93,7 +93,7 @@ GetBotObjectiveEnt()
|
|||||||
{
|
{
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
return self GetBotObjective().eent;
|
return self GetBotObjective().eent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,32 +6,32 @@
|
|||||||
Finder( eObj )
|
Finder( eObj )
|
||||||
{
|
{
|
||||||
answer = [];
|
answer = [];
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
weapon_spawns = getentarray( "weapon_upgrade", "targetname" );
|
weapon_spawns = getentarray( "weapon_upgrade", "targetname" );
|
||||||
|
|
||||||
if ( !isdefined( weapon_spawns ) || weapon_spawns.size <= 0 )
|
if ( !isdefined( weapon_spawns ) || weapon_spawns.size <= 0 )
|
||||||
{
|
{
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
weapons = self getweaponslist();
|
weapons = self getweaponslist();
|
||||||
|
|
||||||
// TODO check if need a new weapon, rate weapons too is better then current etc
|
// TODO check if need a new weapon, rate weapons too is better then current etc
|
||||||
|
|
||||||
for ( i = 0; i < weapon_spawns.size; i++ )
|
for ( i = 0; i < weapon_spawns.size; i++ )
|
||||||
{
|
{
|
||||||
player_has_weapon = false;
|
player_has_weapon = false;
|
||||||
|
|
||||||
if ( !isdefined( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
if ( !isdefined( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( h = 0; h < weapons.size; h++ )
|
for ( h = 0; h < weapons.size; h++ )
|
||||||
{
|
{
|
||||||
if ( weapons[ h ] == weapon_spawns[ i ].zombie_weapon_upgrade )
|
if ( weapons[ h ] == weapon_spawns[ i ].zombie_weapon_upgrade )
|
||||||
@ -39,13 +39,13 @@ Finder( eObj )
|
|||||||
player_has_weapon = true;
|
player_has_weapon = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
is_grenade = ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "grenade" );
|
is_grenade = ( weapontype( weapon_spawns[ i ].zombie_weapon_upgrade ) == "grenade" );
|
||||||
|
|
||||||
if ( !player_has_weapon || is_grenade )
|
if ( !player_has_weapon || is_grenade )
|
||||||
{
|
{
|
||||||
func = BotBuiltinGetFunction( "maps/_zombiemode_weapons", "get_weapon_cost" );
|
func = BotBuiltinGetFunction( "maps/_zombiemode_weapons", "get_weapon_cost" );
|
||||||
|
|
||||||
if ( self.score < [[ func ]]( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
if ( self.score < [[ func ]]( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -54,69 +54,69 @@ Finder( eObj )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
func = BotBuiltinGetFunction( "maps/_zombiemode_weapons", "get_ammo_cost" );
|
func = BotBuiltinGetFunction( "maps/_zombiemode_weapons", "get_ammo_cost" );
|
||||||
|
|
||||||
if ( self.score < [[ func ]]( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
if ( self.score < [[ func ]]( weapon_spawns[ i ].zombie_weapon_upgrade ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
model = weapon_spawns[ i ];
|
model = weapon_spawns[ i ];
|
||||||
|
|
||||||
if ( isdefined( weapon_spawns[ i ].target ) )
|
if ( isdefined( weapon_spawns[ i ].target ) )
|
||||||
{
|
{
|
||||||
model = getent( weapon_spawns[ i ].target, "targetname" );
|
model = getent( weapon_spawns[ i ].target, "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !isdefined( model ) )
|
if ( !isdefined( model ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
org = self getOffset( model, weapon_spawns[ i ] );
|
org = self getOffset( model, weapon_spawns[ i ] );
|
||||||
|
|
||||||
if ( GetPathIsInaccessible( self.origin, org ) )
|
if ( GetPathIsInaccessible( self.origin, org ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, weapon_spawns[ i ] );
|
answer[ answer.size ] = self CreateFinderObjectiveEZ( eObj, weapon_spawns[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
return answer;
|
return answer;
|
||||||
}
|
}
|
||||||
|
|
||||||
getOffset( model, weapon )
|
getOffset( model, weapon )
|
||||||
{
|
{
|
||||||
org = model get_angle_offset_node( 40, ( 0, -90, 0 ), ( 0, 0, 1 ) );
|
org = model get_angle_offset_node( 40, ( 0, -90, 0 ), ( 0, 0, 1 ) );
|
||||||
|
|
||||||
test_org = ( org[ 0 ], org[ 1 ], weapon.origin[ 2 ] );
|
test_org = ( org[ 0 ], org[ 1 ], weapon.origin[ 2 ] );
|
||||||
|
|
||||||
if ( !weapon PointInsideUseTrigger( test_org ) )
|
if ( !weapon PointInsideUseTrigger( test_org ) )
|
||||||
{
|
{
|
||||||
org = model get_angle_offset_node( 40, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
org = model get_angle_offset_node( 40, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
return org;
|
return org;
|
||||||
}
|
}
|
||||||
|
|
||||||
Priority( eObj, eEnt )
|
Priority( eObj, eEnt )
|
||||||
{
|
{
|
||||||
// TODO: check weallweapon type
|
// TODO: check weallweapon type
|
||||||
|
|
||||||
base_priority = 0;
|
base_priority = 0;
|
||||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 1, -2 );
|
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 1, -2 );
|
||||||
|
|
||||||
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
if ( self HasBotObjective() && self GetBotObjectiveEnt() != eEnt )
|
||||||
{
|
{
|
||||||
base_priority -= 1;
|
base_priority -= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( issubstr( eEnt.zombie_weapon_upgrade, "kar98k" ) || issubstr( eEnt.zombie_weapon_upgrade, "type99" ) )
|
if ( issubstr( eEnt.zombie_weapon_upgrade, "kar98k" ) || issubstr( eEnt.zombie_weapon_upgrade, "type99" ) )
|
||||||
{
|
{
|
||||||
base_priority -= 999;
|
base_priority -= 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
return base_priority;
|
return base_priority;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,18 +124,18 @@ Executer( eObj )
|
|||||||
{
|
{
|
||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
|
|
||||||
weapon = eObj.eent;
|
weapon = eObj.eent;
|
||||||
|
|
||||||
self thread WatchForCancel( weapon );
|
self thread WatchForCancel( weapon );
|
||||||
|
|
||||||
self GoDoWallweapon( eObj );
|
self GoDoWallweapon( eObj );
|
||||||
|
|
||||||
self WatchForCancelCleanup();
|
self WatchForCancelCleanup();
|
||||||
self ClearScriptAimPos();
|
self ClearScriptAimPos();
|
||||||
self ClearScriptGoal();
|
self ClearScriptGoal();
|
||||||
self ClearPriorityObjective();
|
self ClearPriorityObjective();
|
||||||
|
|
||||||
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
self CompletedObjective( eObj.bwassuccessful, eObj.sreason );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,11 +149,11 @@ WatchForCancel( weapon )
|
|||||||
self endon( "disconnect" );
|
self endon( "disconnect" );
|
||||||
self endon( "zombified" );
|
self endon( "zombified" );
|
||||||
self endon( "WatchForCancelWallweapon" );
|
self endon( "WatchForCancelWallweapon" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self inLastStand() )
|
if ( self inLastStand() )
|
||||||
{
|
{
|
||||||
self CancelObjective( "self inLastStand()" );
|
self CancelObjective( "self inLastStand()" );
|
||||||
@ -170,11 +170,11 @@ WatchToGoToWeapon( weapon )
|
|||||||
self endon( "goal" );
|
self endon( "goal" );
|
||||||
self endon( "bad_path" );
|
self endon( "bad_path" );
|
||||||
self endon( "new_goal" );
|
self endon( "new_goal" );
|
||||||
|
|
||||||
for ( ;; )
|
for ( ;; )
|
||||||
{
|
{
|
||||||
wait 0.05;
|
wait 0.05;
|
||||||
|
|
||||||
if ( self istouching( weapon ) || weapon PointInsideUseTrigger( self.origin ) )
|
if ( self istouching( weapon ) || weapon PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
self notify( "goal" );
|
self notify( "goal" );
|
||||||
@ -186,52 +186,52 @@ WatchToGoToWeapon( weapon )
|
|||||||
GoDoWallweapon( eObj )
|
GoDoWallweapon( eObj )
|
||||||
{
|
{
|
||||||
self endon( "cancel_bot_objective" );
|
self endon( "cancel_bot_objective" );
|
||||||
|
|
||||||
weapon = eObj.eent;
|
weapon = eObj.eent;
|
||||||
model = weapon;
|
model = weapon;
|
||||||
|
|
||||||
if ( isdefined( weapon.target ) )
|
if ( isdefined( weapon.target ) )
|
||||||
{
|
{
|
||||||
model = getent( weapon.target, "targetname" );
|
model = getent( weapon.target, "targetname" );
|
||||||
}
|
}
|
||||||
|
|
||||||
org = self getOffset( model, weapon );
|
org = self getOffset( model, weapon );
|
||||||
|
|
||||||
weap = self getcurrentweapon();
|
weap = self getcurrentweapon();
|
||||||
|
|
||||||
if ( weap == "none" || !self getammocount( weap ) )
|
if ( weap == "none" || !self getammocount( weap ) )
|
||||||
{
|
{
|
||||||
self SetPriorityObjective();
|
self SetPriorityObjective();
|
||||||
}
|
}
|
||||||
|
|
||||||
// go to weapon
|
// go to weapon
|
||||||
self thread WatchToGoToWeapon( weapon );
|
self thread WatchToGoToWeapon( weapon );
|
||||||
self SetScriptGoal( org, 32 );
|
self SetScriptGoal( org, 32 );
|
||||||
|
|
||||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||||
|
|
||||||
if ( result != "goal" )
|
if ( result != "goal" )
|
||||||
{
|
{
|
||||||
eObj.sreason = "didn't go to weapon";
|
eObj.sreason = "didn't go to weapon";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !self istouching( weapon ) && !weapon PointInsideUseTrigger( self.origin ) )
|
if ( !self istouching( weapon ) && !weapon PointInsideUseTrigger( self.origin ) )
|
||||||
{
|
{
|
||||||
eObj.sreason = "not touching weapon";
|
eObj.sreason = "not touching weapon";
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok we are touching weapon, lets look at it
|
// ok we are touching weapon, lets look at it
|
||||||
self SetScriptAimPos( weapon.origin );
|
self SetScriptAimPos( weapon.origin );
|
||||||
|
|
||||||
// wait to look at it
|
// wait to look at it
|
||||||
wait 1;
|
wait 1;
|
||||||
|
|
||||||
// press use
|
// press use
|
||||||
self thread BotPressUse( 0.15 );
|
self thread BotPressUse( 0.15 );
|
||||||
wait 0.1;
|
wait 0.1;
|
||||||
|
|
||||||
eObj.sreason = "completed";
|
eObj.sreason = "completed";
|
||||||
eObj.bwassuccessful = true;
|
eObj.bwassuccessful = true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user