mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-22 22:45:43 +00:00
some cleanup
This commit is contained in:
parent
280ec4c318
commit
f5753789db
@ -285,6 +285,7 @@ AtScriptGoal()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return distanceSquared( self.origin, self.bot.script_goal ) <= ( self.bot.script_goal_dist * self.bot.script_goal_dist );
|
||||
}
|
||||
|
||||
@ -313,22 +314,6 @@ ClearPriorityObjective()
|
||||
self.bot.prio_objective = false;
|
||||
}
|
||||
|
||||
/*
|
||||
Checks whether the path generated by the ASTAR path finding is inaccessible
|
||||
*/
|
||||
GetPathIsInaccessible( to, best_effort )
|
||||
{
|
||||
if ( isDefined( best_effort ) )
|
||||
{
|
||||
path = generatePath( self.origin, to, self.team, level.bot_allowed_negotiation_links, best_effort );
|
||||
}
|
||||
else
|
||||
{
|
||||
path = generatePath( self.origin, to, self.team, level.bot_allowed_negotiation_links );
|
||||
}
|
||||
return !isDefined( path ) || ( path.size <= 0) ;
|
||||
}
|
||||
|
||||
/*
|
||||
Sets the aim position of the bot
|
||||
*/
|
||||
@ -712,6 +697,9 @@ float( num )
|
||||
return GetDvarFloat( "temp_dvar_bot_util" );
|
||||
}
|
||||
|
||||
/*
|
||||
returns nodes in playable area
|
||||
*/
|
||||
get_nodes_in_playable_area()
|
||||
{
|
||||
total_nodes = getAllNodes();
|
||||
@ -735,6 +723,9 @@ get_nodes_in_playable_area()
|
||||
return filtered_nodes;
|
||||
}
|
||||
|
||||
/*
|
||||
is the point in playable area?
|
||||
*/
|
||||
is_point_in_playable_area( point )
|
||||
{
|
||||
playable_area = getentarray( "playable_area", "targetname" );
|
||||
@ -1075,195 +1066,3 @@ targetIsGibbed()
|
||||
{
|
||||
return isDefined( self.gibbed ) && self.gibbed;
|
||||
}
|
||||
|
||||
swap_array_index( array, index1, index2 )
|
||||
{
|
||||
temp = array[ index1 ];
|
||||
array[ index1 ] = array[ index2 ];
|
||||
array[ index2 ] = temp;
|
||||
return array;
|
||||
}
|
||||
|
||||
quickSort(array, compare_func, compare_func_arg1)
|
||||
{
|
||||
return quickSortMid( array, 0, array.size - 1, compare_func, compare_func_arg1 );
|
||||
}
|
||||
|
||||
/*
|
||||
Quicksort algorithm copied from T7 modified for T4
|
||||
*/
|
||||
quickSortMid( array, start, end, compare_func, compare_func_arg1 )
|
||||
{
|
||||
i = start;
|
||||
k = end;
|
||||
|
||||
if(!IsDefined(compare_func))
|
||||
compare_func = ::quicksort_compare;
|
||||
|
||||
if (end - start >= 1)
|
||||
{
|
||||
pivot = array[start];
|
||||
|
||||
while (k > i)
|
||||
{
|
||||
while ( [[ compare_func ]](array[i], pivot, compare_func_arg1) && i <= end && k > i)
|
||||
i++;
|
||||
while ( ![[ compare_func ]](array[k], pivot, compare_func_arg1) && k >= start && k >= i)
|
||||
k--;
|
||||
if (k > i)
|
||||
array = swap_array_index(array, i, k);
|
||||
}
|
||||
array = swap_array_index(array, start, k);
|
||||
array = quickSortMid(array, start, k - 1, compare_func);
|
||||
array = quickSortMid(array, k + 1, end, compare_func);
|
||||
}
|
||||
else
|
||||
return array;
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
quicksort_compare(left, right, compare_func_arg1)
|
||||
{
|
||||
return left <= right;
|
||||
}
|
||||
|
||||
quicksort_compare_priority_field(left, right, compare_func_arg1)
|
||||
{
|
||||
return left.priority <= right.priority;
|
||||
}
|
||||
|
||||
quicksort_compare_pers_value_highest_to_lowest( left, right, compare_func_arg1 )
|
||||
{
|
||||
return left.pers[ compare_func_arg1 ] <= right.pers[ compare_func_arg1 ];
|
||||
}
|
||||
|
||||
quicksort_compare_pers_value_lowest_to_highest( left, right, compare_func_arg1 )
|
||||
{
|
||||
return left.pers[ compare_func_arg1 ] >= right.pers[ compare_func_arg1 ];
|
||||
}
|
||||
|
||||
assign_priority_to_powerup( powerup )
|
||||
{
|
||||
if ( !isDefined( powerup ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
priority = 0;
|
||||
powerup_is_max_ammo = false;
|
||||
switch ( powerup.powerup_name )
|
||||
{
|
||||
case "zombie_blood":
|
||||
case "insta_kill":
|
||||
case "nuke":
|
||||
priority += 2;
|
||||
break;
|
||||
case "full_ammo":
|
||||
powerup_is_max_ammo = true;
|
||||
priority += 1;
|
||||
break;
|
||||
case "double_points":
|
||||
case "fire_sale":
|
||||
case "carpenter":
|
||||
case "free_perk":
|
||||
priority += 1;
|
||||
break;
|
||||
default:
|
||||
priority += 0;
|
||||
break;
|
||||
}
|
||||
if ( powerup_is_max_ammo )
|
||||
{
|
||||
LOW_AMMO_THRESHOLD = 0.3;
|
||||
|
||||
players = getPlayers();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
weapons = players[ i ] getWeaponsListPrimaries();
|
||||
for ( j = 0; j < weapons.size; j++ )
|
||||
{
|
||||
if ( players[ i ] getWeaponAmmoStock( weapons[ j ] ) <= int( weaponmaxammo( weapons[ j ] ) * LOW_AMMO_THRESHOLD ) )
|
||||
{
|
||||
priority += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( priority > 3 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( maps\_laststand::player_any_player_in_laststand() )
|
||||
{
|
||||
switch ( powerup.powerup_name )
|
||||
{
|
||||
case "zombie_blood":
|
||||
case "insta_kill":
|
||||
case "nuke":
|
||||
priority += 1;
|
||||
break;
|
||||
case "full_ammo":
|
||||
priority += 0;
|
||||
break;
|
||||
case "double_points":
|
||||
case "fire_sale":
|
||||
case "carpenter":
|
||||
case "free_perk":
|
||||
priority -= 1;
|
||||
break;
|
||||
default:
|
||||
priority += 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( powerup.time_left_until_timeout < 10.0 )
|
||||
{
|
||||
priority += 1;
|
||||
}
|
||||
if ( priority < 0 )
|
||||
{
|
||||
priority = 0;
|
||||
}
|
||||
powerup.priority = priority;
|
||||
}
|
||||
|
||||
sort_array_by_priority_field( array, item )
|
||||
{
|
||||
if ( isDefined( item ) )
|
||||
{
|
||||
array[ array.size ] = item;
|
||||
}
|
||||
|
||||
array = quickSort( array, ::quicksort_compare_priority_field, undefined );
|
||||
return array;
|
||||
}
|
||||
|
||||
get_players_sorted_by_highest_pers_value( pers_name )
|
||||
{
|
||||
players = getPlayers();
|
||||
|
||||
if ( !isDefined( players[ 0 ].pers[ pers_name ] ) )
|
||||
{
|
||||
assertMsg( "Uninitialized pers value: " + pers_name );
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return quickSort( players, ::quicksort_compare_pers_value_highest_to_lowest, pers_name );
|
||||
}
|
||||
|
||||
get_players_sorted_by_lowest_pers_value( pers_name )
|
||||
{
|
||||
players = getPlayers();
|
||||
|
||||
if ( !isDefined( players[ 0 ].pers[ pers_name ] ) )
|
||||
{
|
||||
assertMsg( "Uninitialized pers value: " + pers_name );
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return quickSort( players, ::quicksort_compare_pers_value_lowest_to_highest, pers_name );
|
||||
}
|
@ -2,11 +2,12 @@
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
#include maps\bots\script_objectives\_obj_common;
|
||||
#include maps\bots\script_objectives\_obj_utility;
|
||||
|
||||
bot_post_think_common( state )
|
||||
{
|
||||
obj = bot_objective_history_get_current();
|
||||
|
||||
|
||||
switch ( state )
|
||||
{
|
||||
case "completed":
|
||||
@ -20,7 +21,7 @@ bot_post_think_common( state )
|
||||
self thread ClearScriptGoal();
|
||||
self ClearScriptAimPos();
|
||||
self ClearPriorityObjective();
|
||||
self bot_clear_objective();
|
||||
self bot_clear_objective();
|
||||
}
|
||||
|
||||
bot_obj_timeout( objective_group, time )
|
||||
@ -28,7 +29,7 @@ bot_obj_timeout( objective_group, time )
|
||||
self endon( objective_group + "_end_think" );
|
||||
wait time;
|
||||
self.obj_cancel_reason = "Obj timeout";
|
||||
self notify( objective_group + "_cancel" );
|
||||
self notify( objective_group + "_cancel" );
|
||||
}
|
||||
|
||||
bot_grab_powerup()
|
||||
@ -77,7 +78,7 @@ bot_grab_powerup()
|
||||
powerup_obj.bad = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
powerup_obj.bad = true;
|
||||
}
|
||||
@ -187,7 +188,7 @@ bot_revive_player()
|
||||
level endon( "end_game" );
|
||||
|
||||
player_to_revive_obj = self.available_revives[ 0 ];
|
||||
|
||||
|
||||
player_to_revive = player_to_revive_obj.target_ent;
|
||||
self bot_set_objective( "revive", player_to_revive );
|
||||
self bot_set_objective_owner( "revive", player_to_revive );
|
||||
@ -332,7 +333,7 @@ bot_magicbox_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
magicbox_obj = self.available_chests[ 0 ];
|
||||
|
||||
|
||||
magicbox = magicbox_obj.target_ent;
|
||||
self bot_set_objective( "magicbox", magicbox );
|
||||
//self bot_set_objective_owner( "magicbox", magicbox );
|
||||
@ -470,7 +471,7 @@ bot_should_purchase_magicbox()
|
||||
return self.available_chests.size > 0;
|
||||
}
|
||||
|
||||
bot_check_complete_purchase_magicbox()
|
||||
bot_check_complete_purchase_magicbox()
|
||||
{
|
||||
return self.successfully_grabbed_magicbox_weapon;
|
||||
}
|
||||
@ -492,13 +493,13 @@ bot_magicbox_purchase_should_cancel()
|
||||
goal_canceled = true;
|
||||
}
|
||||
*/
|
||||
if ( isDefined( obj.magicbox_weapon_spawn_time )
|
||||
&& isDefined( obj.target_ent.chest_user )
|
||||
if ( isDefined( obj.magicbox_weapon_spawn_time )
|
||||
&& isDefined( obj.target_ent.chest_user )
|
||||
&& obj.target_ent.chest_user == self
|
||||
&& ( getTime() >= ( obj.magicbox_weapon_spawn_time + 12000 ) ) )
|
||||
{
|
||||
self.obj_cancel_reason = "Weapon timed out";
|
||||
goal_canceled = true;
|
||||
goal_canceled = true;
|
||||
}
|
||||
return goal_canceled;
|
||||
}
|
||||
@ -537,7 +538,7 @@ bot_perk_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
perk_obj = self.available_perks[ 0 ];
|
||||
|
||||
|
||||
perk_ent = perk_obj.target_ent;
|
||||
self bot_set_objective( "perk", perk_ent );
|
||||
self bot_objective_print( "perk", perk_obj.id, "Bot <" + self.playername + "> Attempting to purchase " + perk_ent.script_noteworthy, "bot_perk_purchase" );
|
||||
@ -660,7 +661,7 @@ bot_door_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
door_obj = self.available_doors[ 0 ];
|
||||
|
||||
|
||||
door_ent = door_obj.target_ent;
|
||||
self bot_set_objective( "door", door_ent );
|
||||
self bot_objective_print( "door", door_obj.id, "Bot <" + self.playername + "> Attempting to purchase " + door_ent.target, "bot_door_purchase" );
|
||||
@ -759,7 +760,7 @@ bot_debris_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
debris_obj = self.available_debris[ 0 ];
|
||||
|
||||
|
||||
debris_ent = debris_obj.target_ent;
|
||||
self bot_set_objective( "debris", debris_ent );
|
||||
self bot_objective_print( "debris", debris_obj.id, "Bot <" + self.playername + "> Attempting to purchase " + debris_ent.target, "bot_debris_purchase" );
|
||||
@ -852,7 +853,7 @@ bot_wallbuy_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
wallbuy_obj = self.available_wallbuys[ 0 ];
|
||||
|
||||
|
||||
wallbuy_ent = wallbuy_obj.target_ent;
|
||||
self bot_set_objective( "wallbuy", wallbuy_ent );
|
||||
self bot_objective_print( "wallbuy", wallbuy_obj.id, "Bot <" + self.playername + "> Attempting to purchase " + wallbuy_ent.zombie_weapon_upgrade, "bot_wallbuy_purchase" );
|
||||
@ -952,7 +953,7 @@ bot_wallbuy_ammo_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
wallbuy_obj = self.available_wallbuyammos[ 0 ];
|
||||
|
||||
|
||||
wallbuy_ent = wallbuy_obj.target_ent;
|
||||
self bot_set_objective( "wallbuyammo", wallbuy_ent );
|
||||
self bot_objective_print( "wallbuyammo", wallbuy_obj.id, "Bot <" + self.playername + "> Attempting to purchase " + wallbuy_ent.zombie_weapon_upgrade, "bot_wallbuy_ammo_purchase" );
|
||||
@ -1057,7 +1058,7 @@ bot_packapunch_purchase()
|
||||
level endon( "end_game" );
|
||||
|
||||
packapunch_obj = self.available_packapunchs[ 0 ];
|
||||
|
||||
|
||||
packapunch = packapunch_obj.target_ent;
|
||||
self bot_set_objective( "packapunch", packapunch );
|
||||
//self bot_set_objective_owner( "magicbox", magicbox );
|
||||
@ -1086,7 +1087,7 @@ bot_packapunch_purchase()
|
||||
waittillframeend;
|
||||
//self ClearScriptAimPos();
|
||||
//self ClearScriptGoal();
|
||||
|
||||
|
||||
packapunch waittill( "pap_pickup_ready" );
|
||||
self bot_objective_print( "packapunch", packapunch_obj.id, "Bot <" + self.playername + "> pap_pickup_ready", "bot_packapunch_purchase" );
|
||||
|
||||
@ -1160,13 +1161,13 @@ bot_packapunch_purchase_should_cancel()
|
||||
obj = self bot_get_objective();
|
||||
|
||||
goal_canceled = false;
|
||||
if ( isDefined( obj.target_ent.packapunch_weapon_spawn_time )
|
||||
&& isDefined( obj.target_ent.packapunch_user )
|
||||
&& obj.target_ent.packapunch_user == self
|
||||
if ( isDefined( obj.target_ent.packapunch_weapon_spawn_time )
|
||||
&& isDefined( obj.target_ent.packapunch_user )
|
||||
&& obj.target_ent.packapunch_user == self
|
||||
&& ( getTime() >= ( obj.target_ent_packapunch_weapon_spawn_time + ( level.packapunch_timeout * 1000 ) ) ) )
|
||||
{
|
||||
self.obj_cancel_reason = "Weapon timed out";
|
||||
goal_canceled = true;
|
||||
goal_canceled = true;
|
||||
}
|
||||
return goal_canceled;
|
||||
}
|
||||
@ -1188,10 +1189,10 @@ bot_power_activate()
|
||||
level endon( "end_game" );
|
||||
|
||||
power_obj = self.available_powers[ 0 ];
|
||||
|
||||
|
||||
power_ent = power_obj.target_ent;
|
||||
self bot_set_objective( "power", power_ent );
|
||||
self bot_objective_print( "power", power_obj.id, "Bot <" + self.playername + "> Attempting to activate power" "bot_power_activate" );
|
||||
self bot_objective_print( "power", power_obj.id, "Bot <" + self.playername + "> Attempting to activate power", "bot_power_activate" );
|
||||
|
||||
lookat_org = power_ent.origin;
|
||||
goal_org = power_ent.bot_use_node;
|
||||
@ -1220,7 +1221,7 @@ bot_power_activate_init()
|
||||
self.successfully_activated_power = false;
|
||||
}
|
||||
|
||||
bot_power_activate_post_think()
|
||||
bot_power_activate_post_think(state)
|
||||
{
|
||||
self bot_post_think_common( state );
|
||||
self.successfully_activated_power = false;
|
||||
@ -1263,7 +1264,7 @@ bot_power_activate_should_cancel()
|
||||
if ( isDefined( level.flag[ "power_on" ] ) && level.flag[ "power_on" ] )
|
||||
{
|
||||
self.obj_cancel_reason = "Power is already on";
|
||||
goal_canceled = true;
|
||||
goal_canceled = true;
|
||||
}
|
||||
return goal_canceled;
|
||||
}
|
||||
@ -1271,4 +1272,4 @@ bot_power_activate_should_cancel()
|
||||
bot_power_activate_priority()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
#include maps\bots\script_objectives\_obj_utility;
|
||||
|
||||
register_bot_objective( objective_group )
|
||||
{
|
||||
@ -95,7 +96,7 @@ bot_set_objective( objective_group, ent, id )
|
||||
{
|
||||
self.bot_obj_history_index = 0;
|
||||
}
|
||||
|
||||
|
||||
self.obj_history[ self.bot_obj_history_index ] = new_obj_history;
|
||||
self.zbot_current_objective = objective;
|
||||
}
|
||||
@ -167,7 +168,7 @@ bot_set_objective_owner( objective_group, ent, id )
|
||||
{
|
||||
id = ent getEntityNumber();
|
||||
}
|
||||
|
||||
|
||||
if ( !objective.is_global_shared )
|
||||
{
|
||||
objective_assert( objective_group, id, "bot_set_objective_owner", "Objective with " + id + " id number cannot be set to have an owner because is_global_shared field is false in group " + objective_group );
|
||||
@ -489,7 +490,7 @@ bot_action_think()
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
@ -505,7 +506,7 @@ bot_action_think()
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
self bot_process_action();
|
||||
|
||||
while ( !maps\so\zm_common\_zm_utility::is_player_valid( self ) )
|
||||
@ -542,7 +543,7 @@ bot_action_pump()
|
||||
else if ( self bot_check_if_action_should_be_canceled_in_group( action_name ) )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
while ( !maps\so\zm_common\_zm_utility::is_player_valid( self ) )
|
||||
{
|
||||
wait 1;
|
||||
@ -624,4 +625,4 @@ clamp_to_ground( org )
|
||||
{
|
||||
trace = playerPhysicsTrace( org + ( 0, 0, 20 ), org - ( 0, 0, 2000 ) );
|
||||
return trace;
|
||||
}
|
||||
}
|
||||
|
@ -1,13 +1,14 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
#include maps\bots\script_objectives\_obj_utility;
|
||||
#include maps\bots\script_objectives\_obj_common;
|
||||
#include maps\bots\script_objectives\_obj_actions;
|
||||
#include maps\bots\script_objectives\_obj_trackers;
|
||||
|
||||
init()
|
||||
{
|
||||
register_bot_action( "powerup",
|
||||
register_bot_action( "powerup",
|
||||
::bot_grab_powerup,
|
||||
::bot_powerup_init,
|
||||
::bot_powerup_post_think,
|
||||
@ -16,7 +17,7 @@ init()
|
||||
::bot_powerup_should_cancel,
|
||||
::bot_powerup_priority );
|
||||
|
||||
register_bot_action( "revive",
|
||||
register_bot_action( "revive",
|
||||
::bot_revive_player,
|
||||
::bot_revive_player_init,
|
||||
::bot_revive_player_post_think,
|
||||
@ -25,7 +26,7 @@ init()
|
||||
::bot_revive_player_should_cancel,
|
||||
::bot_revive_player_priority );
|
||||
|
||||
register_bot_action( "magicbox",
|
||||
register_bot_action( "magicbox",
|
||||
::bot_magicbox_purchase,
|
||||
::bot_magicbox_purchase_init,
|
||||
::bot_magicbox_purchase_post_think,
|
||||
@ -34,7 +35,7 @@ init()
|
||||
::bot_magicbox_purchase_should_cancel,
|
||||
::bot_magicbox_purchase_priority );
|
||||
|
||||
register_bot_action( "perk",
|
||||
register_bot_action( "perk",
|
||||
::bot_perk_purchase,
|
||||
::bot_perk_purchase_init,
|
||||
::bot_perk_purchase_post_think,
|
||||
@ -43,7 +44,7 @@ init()
|
||||
::bot_perk_purchase_should_cancel,
|
||||
::bot_perk_purchase_priority );
|
||||
|
||||
register_bot_action( "door",
|
||||
register_bot_action( "door",
|
||||
::bot_door_purchase,
|
||||
::bot_door_purchase_init,
|
||||
::bot_door_purchase_post_think,
|
||||
@ -52,7 +53,7 @@ init()
|
||||
::bot_door_purchase_should_cancel,
|
||||
::bot_door_purchase_priority );
|
||||
|
||||
register_bot_action( "debris",
|
||||
register_bot_action( "debris",
|
||||
::bot_debris_purchase,
|
||||
::bot_debris_purchase_init,
|
||||
::bot_debris_purchase_post_think,
|
||||
@ -61,7 +62,7 @@ init()
|
||||
::bot_debris_purchase_should_cancel,
|
||||
::bot_debris_purchase_priority );
|
||||
|
||||
register_bot_action( "wallbuy",
|
||||
register_bot_action( "wallbuy",
|
||||
::bot_wallbuy_purchase,
|
||||
::bot_wallbuy_purchase_init,
|
||||
::bot_wallbuy_purchase_post_think,
|
||||
@ -70,7 +71,7 @@ init()
|
||||
::bot_wallbuy_purchase_should_cancel,
|
||||
::bot_wallbuy_purchase_priority );
|
||||
|
||||
register_bot_action( "wallbuyammo",
|
||||
register_bot_action( "wallbuyammo",
|
||||
::bot_wallbuy_ammo_purchase,
|
||||
::bot_wallbuy_ammo_purchase_init,
|
||||
::bot_wallbuy_ammo_purchase_post_think,
|
||||
@ -79,7 +80,7 @@ init()
|
||||
::bot_wallbuy_ammo_purchase_should_cancel,
|
||||
::bot_wallbuy_ammo_purchase_priority );
|
||||
|
||||
register_bot_action( "packapunch",
|
||||
register_bot_action( "packapunch",
|
||||
::bot_packapunch_purchase,
|
||||
::bot_packapunch_purchase_init,
|
||||
::bot_packapunch_purchase_post_think,
|
||||
@ -88,7 +89,7 @@ init()
|
||||
::bot_packapunch_purchase_should_cancel,
|
||||
::bot_packapunch_purchase_priority );
|
||||
|
||||
register_bot_action( "power",
|
||||
register_bot_action( "power",
|
||||
::bot_power_activate,
|
||||
::bot_power_activate_init,
|
||||
::bot_power_activate_post_think,
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
#include maps\bots\script_objectives\_obj_common;
|
||||
#include maps\bots\script_objectives\_obj_utility;
|
||||
|
||||
create_static_objectives()
|
||||
{
|
||||
@ -65,7 +66,7 @@ create_static_objectives()
|
||||
{
|
||||
setDvar( "power_node_angle", -90 );
|
||||
}
|
||||
weapon_spawns = GetEntArray( "weapon_upgrade", "targetname" );
|
||||
weapon_spawns = GetEntArray( "weapon_upgrade", "targetname" );
|
||||
|
||||
if ( isDefined( weapon_spawns ) && weapon_spawns.size > 0 )
|
||||
{
|
||||
@ -93,8 +94,8 @@ create_static_objectives()
|
||||
}
|
||||
|
||||
//TODO: See if its possible to automatically detect if a door is blocking an objective
|
||||
zombie_doors = GetEntArray( "zombie_door", "targetname" );
|
||||
|
||||
zombie_doors = GetEntArray( "zombie_door", "targetname" );
|
||||
|
||||
if ( isDefined( zombie_doors ) && zombie_doors.size > 0 )
|
||||
{
|
||||
for ( i = 0; i < zombie_doors.size; i++ )
|
||||
@ -108,7 +109,7 @@ create_static_objectives()
|
||||
level thread watch_door_objectives( zombie_doors );
|
||||
}
|
||||
|
||||
zombie_debris = GetEntArray( "zombie_debris", "targetname" );
|
||||
zombie_debris = GetEntArray( "zombie_debris", "targetname" );
|
||||
|
||||
if ( isDefined( zombie_debris ) && zombie_debris.size > 0 )
|
||||
{
|
||||
@ -141,7 +142,7 @@ create_static_objectives()
|
||||
{
|
||||
obj = add_possible_bot_objective( "power", master_switch, false );
|
||||
master_switch.bot_use_node = master_switch get_angle_offset_node( getDvarInt( "power_node_forward_size" ), ( 0, getDvarInt( "power_node_angle" ), 0 ), ( 0, 0, getDvarInt( "power_node_vertical_offset" ) ) );
|
||||
model thread power_debug();
|
||||
//model thread power_debug();
|
||||
}
|
||||
|
||||
if ( isDefined( level.chests ) && level.chests.size > 0 )
|
||||
@ -346,7 +347,7 @@ packapunch_debug()
|
||||
self.bot_use_node = node;
|
||||
line( self.origin, node, ( 1.0, 1.0, 1.0 ) );
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bot_on_powerup_grab( powerup )
|
||||
@ -397,4 +398,4 @@ bot_on_wallbuy_ammo_purchase_func( trigger, weapon )
|
||||
{
|
||||
self bot_objective_print( "wallbuyammo", trigger getEntityNumber(), "bot_on_wallbuy_ammo_purchase_func", "Bot <" + self.playername + "> purchased wallbuy ammo <" + weapon + ">" );
|
||||
self.successfully_bought_wallbuy_ammo = true;
|
||||
}
|
||||
}
|
||||
|
211
maps/bots/script_objectives/_obj_utility.gsc
Normal file
211
maps/bots/script_objectives/_obj_utility.gsc
Normal file
@ -0,0 +1,211 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
|
||||
/*
|
||||
Checks whether the path generated by the ASTAR path finding is inaccessible
|
||||
*/
|
||||
GetPathIsInaccessible( to, best_effort )
|
||||
{
|
||||
if ( isDefined( best_effort ) )
|
||||
{
|
||||
path = generatePath( self.origin, to, self.team, level.bot_allowed_negotiation_links, best_effort );
|
||||
}
|
||||
else
|
||||
{
|
||||
path = generatePath( self.origin, to, self.team, level.bot_allowed_negotiation_links );
|
||||
}
|
||||
return !isDefined( path ) || ( path.size <= 0) ;
|
||||
}
|
||||
|
||||
swap_array_index( array, index1, index2 )
|
||||
{
|
||||
temp = array[ index1 ];
|
||||
array[ index1 ] = array[ index2 ];
|
||||
array[ index2 ] = temp;
|
||||
return array;
|
||||
}
|
||||
|
||||
quickSort(array, compare_func, compare_func_arg1)
|
||||
{
|
||||
return quickSortMid( array, 0, array.size - 1, compare_func, compare_func_arg1 );
|
||||
}
|
||||
|
||||
/*
|
||||
Quicksort algorithm copied from T7 modified for T4
|
||||
*/
|
||||
quickSortMid( array, start, end, compare_func, compare_func_arg1 )
|
||||
{
|
||||
i = start;
|
||||
k = end;
|
||||
|
||||
if(!IsDefined(compare_func))
|
||||
compare_func = ::quicksort_compare;
|
||||
|
||||
if (end - start >= 1)
|
||||
{
|
||||
pivot = array[start];
|
||||
|
||||
while (k > i)
|
||||
{
|
||||
while ( [[ compare_func ]](array[i], pivot, compare_func_arg1) && i <= end && k > i)
|
||||
i++;
|
||||
while ( ![[ compare_func ]](array[k], pivot, compare_func_arg1) && k >= start && k >= i)
|
||||
k--;
|
||||
if (k > i)
|
||||
array = swap_array_index(array, i, k);
|
||||
}
|
||||
array = swap_array_index(array, start, k);
|
||||
array = quickSortMid(array, start, k - 1, compare_func);
|
||||
array = quickSortMid(array, k + 1, end, compare_func);
|
||||
}
|
||||
else
|
||||
return array;
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
quicksort_compare(left, right, compare_func_arg1)
|
||||
{
|
||||
return left <= right;
|
||||
}
|
||||
|
||||
quicksort_compare_priority_field(left, right, compare_func_arg1)
|
||||
{
|
||||
return left.priority <= right.priority;
|
||||
}
|
||||
|
||||
quicksort_compare_pers_value_highest_to_lowest( left, right, compare_func_arg1 )
|
||||
{
|
||||
return left.pers[ compare_func_arg1 ] <= right.pers[ compare_func_arg1 ];
|
||||
}
|
||||
|
||||
quicksort_compare_pers_value_lowest_to_highest( left, right, compare_func_arg1 )
|
||||
{
|
||||
return left.pers[ compare_func_arg1 ] >= right.pers[ compare_func_arg1 ];
|
||||
}
|
||||
|
||||
assign_priority_to_powerup( powerup )
|
||||
{
|
||||
if ( !isDefined( powerup ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
priority = 0;
|
||||
powerup_is_max_ammo = false;
|
||||
switch ( powerup.powerup_name )
|
||||
{
|
||||
case "zombie_blood":
|
||||
case "insta_kill":
|
||||
case "nuke":
|
||||
priority += 2;
|
||||
break;
|
||||
case "full_ammo":
|
||||
powerup_is_max_ammo = true;
|
||||
priority += 1;
|
||||
break;
|
||||
case "double_points":
|
||||
case "fire_sale":
|
||||
case "carpenter":
|
||||
case "free_perk":
|
||||
priority += 1;
|
||||
break;
|
||||
default:
|
||||
priority += 0;
|
||||
break;
|
||||
}
|
||||
if ( powerup_is_max_ammo )
|
||||
{
|
||||
LOW_AMMO_THRESHOLD = 0.3;
|
||||
|
||||
players = getPlayers();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
weapons = players[ i ] getWeaponsListPrimaries();
|
||||
for ( j = 0; j < weapons.size; j++ )
|
||||
{
|
||||
if ( players[ i ] getWeaponAmmoStock( weapons[ j ] ) <= int( weaponmaxammo( weapons[ j ] ) * LOW_AMMO_THRESHOLD ) )
|
||||
{
|
||||
priority += 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ( priority > 3 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( maps\_laststand::player_any_player_in_laststand() )
|
||||
{
|
||||
switch ( powerup.powerup_name )
|
||||
{
|
||||
case "zombie_blood":
|
||||
case "insta_kill":
|
||||
case "nuke":
|
||||
priority += 1;
|
||||
break;
|
||||
case "full_ammo":
|
||||
priority += 0;
|
||||
break;
|
||||
case "double_points":
|
||||
case "fire_sale":
|
||||
case "carpenter":
|
||||
case "free_perk":
|
||||
priority -= 1;
|
||||
break;
|
||||
default:
|
||||
priority += 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( powerup.time_left_until_timeout < 10.0 )
|
||||
{
|
||||
priority += 1;
|
||||
}
|
||||
if ( priority < 0 )
|
||||
{
|
||||
priority = 0;
|
||||
}
|
||||
powerup.priority = priority;
|
||||
}
|
||||
|
||||
sort_array_by_priority_field( array, item )
|
||||
{
|
||||
if ( isDefined( item ) )
|
||||
{
|
||||
array[ array.size ] = item;
|
||||
}
|
||||
|
||||
array = quickSort( array, ::quicksort_compare_priority_field, undefined );
|
||||
return array;
|
||||
}
|
||||
|
||||
get_players_sorted_by_highest_pers_value( pers_name )
|
||||
{
|
||||
players = getPlayers();
|
||||
|
||||
if ( !isDefined( players[ 0 ].pers[ pers_name ] ) )
|
||||
{
|
||||
assertMsg( "Uninitialized pers value: " + pers_name );
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return quickSort( players, ::quicksort_compare_pers_value_highest_to_lowest, pers_name );
|
||||
}
|
||||
|
||||
get_players_sorted_by_lowest_pers_value( pers_name )
|
||||
{
|
||||
players = getPlayers();
|
||||
|
||||
if ( !isDefined( players[ 0 ].pers[ pers_name ] ) )
|
||||
{
|
||||
assertMsg( "Uninitialized pers value: " + pers_name );
|
||||
return undefined;
|
||||
}
|
||||
|
||||
return quickSort( players, ::quicksort_compare_pers_value_lowest_to_highest, pers_name );
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user