mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-22 22:45:43 +00:00
Clean up code, and add prototypes for objectives.
This commit is contained in:
parent
1990b8c79d
commit
23a64c5e1c
@ -495,8 +495,8 @@ spawn_bots()
|
|||||||
bot.action_queue[ "combat" ] = [];
|
bot.action_queue[ "combat" ] = [];
|
||||||
bot.action_queue[ "movement" ] = [];
|
bot.action_queue[ "movement" ] = [];
|
||||||
bot.action_queue[ "look" ] = [];
|
bot.action_queue[ "look" ] = [];
|
||||||
//bot register_action_queue_actions();
|
bot register_action_queue_actions();
|
||||||
//bot thread bot_think();
|
bot thread bot_think();
|
||||||
bot_count++;
|
bot_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -521,19 +521,19 @@ bot_think()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
group_name = "movement";
|
//group_name = "movement";
|
||||||
|
|
||||||
self bot_action_think( group_name );
|
//self bot_action_think( group_name );
|
||||||
|
|
||||||
group_name = "look";
|
//group_name = "look";
|
||||||
|
|
||||||
self bot_action_think( group_name );
|
//self bot_action_think( group_name );
|
||||||
|
|
||||||
group_name = "combat";
|
//group_name = "combat";
|
||||||
|
|
||||||
//self scripts\sp\bots\bot_target_common::bot_pick_target();
|
//self scripts\sp\bots\bot_target_common::bot_pick_target();
|
||||||
|
|
||||||
self bot_action_think( group_name );
|
//self bot_action_think( group_name );
|
||||||
|
|
||||||
group_name = "objective";
|
group_name = "objective";
|
||||||
|
|
||||||
@ -558,7 +558,7 @@ watch_debris_objectives( zombie_debris )
|
|||||||
|
|
||||||
for ( debris_opened_count = 0; debris_opened_count < zombie_debris.size; debris_opened_count++ )
|
for ( debris_opened_count = 0; debris_opened_count < zombie_debris.size; debris_opened_count++ )
|
||||||
{
|
{
|
||||||
level waittill( "door_opened", debris, player );
|
level waittill( "debris_opened", debris, player );
|
||||||
free_bot_objective( "door", debris.id );
|
free_bot_objective( "door", debris.id );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -587,6 +587,8 @@ store_powerups_dropped()
|
|||||||
{
|
{
|
||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
|
|
||||||
|
level thread free_powerups_dropped();
|
||||||
|
|
||||||
level.zbots_powerups = [];
|
level.zbots_powerups = [];
|
||||||
level.zbots_powerups_targeted_for_grab = [];
|
level.zbots_powerups_targeted_for_grab = [];
|
||||||
id = 0;
|
id = 0;
|
||||||
@ -599,6 +601,7 @@ store_powerups_dropped()
|
|||||||
}
|
}
|
||||||
powerup.id = id;
|
powerup.id = id;
|
||||||
add_possible_bot_objective( "powerup", id, true, powerup );
|
add_possible_bot_objective( "powerup", id, true, powerup );
|
||||||
|
level thread objective_think( "powerup", id );
|
||||||
scripts\sp\bots\bot_utility::assign_priority_to_powerup( powerup );
|
scripts\sp\bots\bot_utility::assign_priority_to_powerup( powerup );
|
||||||
level.zbots_powerups = scripts\sp\bots\bot_utility::sort_array_by_priority_field( level.zbots_powerups, powerup );
|
level.zbots_powerups = scripts\sp\bots\bot_utility::sort_array_by_priority_field( level.zbots_powerups, powerup );
|
||||||
id++;
|
id++;
|
||||||
|
@ -758,13 +758,18 @@ bot_part_priority()
|
|||||||
|
|
||||||
bot_grab_powerup()
|
bot_grab_powerup()
|
||||||
{
|
{
|
||||||
|
self endon( "powerup_end_think" );
|
||||||
|
|
||||||
if ( !isDefined( self.available_powerups ) || self.available_powerups.size <= 0 )
|
if ( !isDefined( self.available_powerups ) || self.available_powerups.size <= 0 )
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
set_bot_global_shared_objective_owner_by_reference( "powerup", self.available_powerups[ 0 ], self );
|
set_bot_global_shared_objective_owner_by_reference( "powerup", self.available_powerups[ 0 ], self );
|
||||||
self.target_pos = self.available_powerups[ 0 ].target_ent.origin;
|
while ( true )
|
||||||
self.should_try_to_move_to_objective = true;
|
{
|
||||||
|
self SetScriptGoal( self.available_powerups[ 0 ].target_ent.origin );
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bot_powerup_process_order()
|
bot_powerup_process_order()
|
||||||
@ -774,7 +779,7 @@ bot_powerup_process_order()
|
|||||||
|
|
||||||
bot_should_grab_powerup()
|
bot_should_grab_powerup()
|
||||||
{
|
{
|
||||||
if ( !isDefined( level.zbot_objective_glob[ "powerup" ] ) || !isDefined( level.zbot_objective_glob[ "powerup" ].active_objectives ) || level.zbot_objective_glob[ "powerup" ].active_objectives.size <= 0 )
|
if ( level.zbot_objective_glob[ "powerup" ].active_objectives.size <= 0 )
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -786,30 +791,30 @@ bot_should_grab_powerup()
|
|||||||
obj_keys = getArrayKeys( powerup_objectives );
|
obj_keys = getArrayKeys( powerup_objectives );
|
||||||
for ( i = 0; i < powerup_objectives.size; i++ )
|
for ( i = 0; i < powerup_objectives.size; i++ )
|
||||||
{
|
{
|
||||||
if ( isDefined( powerup_objectives[ obj_keys[ i ] ].owner ) )
|
obj = powerup_objectives[ obj_keys[ i ] ];
|
||||||
|
powerup = obj.target_ent;
|
||||||
|
if ( isDefined( obj.owner ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
time_left = powerup_objectives[ obj_keys[ i ] ].target_ent.time_left_until_timeout;
|
time_left = powerup.time_left_until_timeout;
|
||||||
distance_required_to_reach_powerup = distanceSquared( powerup_objectives[ obj_keys[ i ] ].target_ent.origin, self.origin );
|
distance_required_to_reach_powerup = distanceSquared( powerup.origin, self.origin );
|
||||||
if ( distance_required_to_reach_powerup > BOT_SPEED_WHILE_SPRINTING_SQ * time_left )
|
if ( distance_required_to_reach_powerup > BOT_SPEED_WHILE_SPRINTING_SQ * time_left )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ( distanceSquared( powerup_objectives[ obj_keys[ i ] ].target_ent.origin, self.origin ) > MAX_DISTANCE_SQ )
|
if ( distanceSquared( powerup.origin, self.origin ) > MAX_DISTANCE_SQ )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ( !findPath( self.origin, powerup_objectives[ obj_keys[ i ] ].target_ent.origin ) )
|
if ( !isDefined( generatePath( self.origin, powerup.origin, self.team, false ) ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
self.available_powerups[ self.available_powerups.size ] = powerup_objectives[ obj_keys[ i ] ];
|
self.available_powerups[ self.available_powerups.size ] = obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Sort powerups by priority here
|
//TODO: Sort powerups by priority here
|
||||||
time_left = undefined;
|
|
||||||
distance_required_to_reach_powerup = undefined;
|
|
||||||
return self.available_powerups.size > 0;
|
return self.available_powerups.size > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,14 +90,6 @@ wait_for_action_completion( group_name, action_name )
|
|||||||
level endon( "end_game" );
|
level endon( "end_game" );
|
||||||
|
|
||||||
result = self waittill_any_return( action_name + "_complete", action_name + "_cancel", action_name + "_postpone" );
|
result = self waittill_any_return( action_name + "_complete", action_name + "_cancel", action_name + "_postpone" );
|
||||||
if ( !isDefined( result ) )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( result == "disconnect" )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ( ( result == action_name + "_complete" ) )
|
if ( ( result == action_name + "_complete" ) )
|
||||||
{
|
{
|
||||||
self.zbot_actions_in_queue[ group_name ][ action_name ].postponed = false;
|
self.zbot_actions_in_queue[ group_name ][ action_name ].postponed = false;
|
||||||
@ -124,6 +116,8 @@ wait_for_action_completion( group_name, action_name )
|
|||||||
self thread [[ self.action_queue[ group_name ][ 0 ].on_postpone_func ]]();
|
self thread [[ self.action_queue[ group_name ][ 0 ].on_postpone_func ]]();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self notify( action_name + "_end_think" );
|
||||||
|
|
||||||
self.zbot_actions_in_queue[ group_name ][ action_name ].is_current = false;
|
self.zbot_actions_in_queue[ group_name ][ action_name ].is_current = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,3 +183,25 @@ free_bot_objective( objective_group, id )
|
|||||||
|
|
||||||
objective = undefined;
|
objective = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
objective_think( objective_group, id )
|
||||||
|
{
|
||||||
|
active_objectives = level.zbot_global_shared_objective_glob[ objective_group ].active_objectives;
|
||||||
|
|
||||||
|
objective = active_objectives[ "obj_id_" + id ];
|
||||||
|
|
||||||
|
objective_exists = isDefined( objective );
|
||||||
|
assert( objective_exists, "Objective with " + id + " id number does not point to a objective in group " + objective_group );
|
||||||
|
if ( !objective_exists )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
level endon( "end_obj_think_" + objective.target_ent getEntityNumber() );
|
||||||
|
|
||||||
|
while ( true )
|
||||||
|
{
|
||||||
|
if ( )
|
||||||
|
wait 0.05;
|
||||||
|
}
|
||||||
|
}
|
@ -192,66 +192,3 @@ free_bot_target( target_group, id )
|
|||||||
|
|
||||||
target = undefined;
|
target = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
The main target thread, will update the bot's main target. Will auto target enemy players and handle script targets.
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
bot_pick_target()
|
|
||||||
{
|
|
||||||
myEye = self GetEyePos();
|
|
||||||
myAngles = self GetPlayerAngles();
|
|
||||||
myFov = 90;
|
|
||||||
hasTarget = self bot_has_target();
|
|
||||||
adsAmount = self PlayerADS();
|
|
||||||
adsFovFact = 1;
|
|
||||||
|
|
||||||
// reduce fov if ads'ing
|
|
||||||
if ( adsAmount > 0 )
|
|
||||||
{
|
|
||||||
myFov *= 1 - adsFovFact * adsAmount;
|
|
||||||
}
|
|
||||||
|
|
||||||
groups = get_all_groups_for_targets();
|
|
||||||
|
|
||||||
ents = [];
|
|
||||||
for ( i = 0; i < groups.size; i++ )
|
|
||||||
{
|
|
||||||
targets = level.zbot_target_glob[ groups[ i ] ].active_targets;
|
|
||||||
for ( j = 0; j < targets; j++ )
|
|
||||||
{
|
|
||||||
ents[ ents.size ] = targets[ j ].target_ent;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ents = get_array_of_closest( self.origin, ents );
|
|
||||||
|
|
||||||
for ( i = 0; i < ents.size; i++ )
|
|
||||||
{
|
|
||||||
ent = ents[ i ];
|
|
||||||
targetHead = ent getTagOrigin( "j_head" );
|
|
||||||
targetAnkleLeft = ent getTagOrigin( "j_ankle_le" );
|
|
||||||
targetAnkleRight = ent getTagOrigin( "j_ankle_ri" );
|
|
||||||
|
|
||||||
traceHead = bulletTrace( myEye, targetHead, false, undefined );
|
|
||||||
traceAnkleLeft = bulletTrace( myEye, targetAnkleLeft, false, undefined );
|
|
||||||
traceAnkleRight = bulletTrace( myEye, targetAnkleRight, false, undefined );
|
|
||||||
|
|
||||||
canTargetEnt = ( ( sightTracePassed( myEye, targetHead, false, undefined ) ||
|
|
||||||
sightTracePassed( myEye, targetAnkleLeft, false, undefined ) ||
|
|
||||||
sightTracePassed( myEye, targetAnkleRight, false, undefined ) )
|
|
||||||
|
|
||||||
&& ( traceHead["fraction"] >= 1.0 ||
|
|
||||||
traceAnkleLeft["fraction"] >= 1.0 ||
|
|
||||||
traceAnkleRight["fraction"] >= 1.0 )
|
|
||||||
|
|
||||||
&& ( getConeDot( ent.origin, self.origin, myAngles ) >= myFov ||
|
|
||||||
( isObjDef && obj.trace_time ) ) );
|
|
||||||
if ( canTargetEnt )
|
|
||||||
{
|
|
||||||
self set_target_for_bot( ent.targetname, ent.target_id );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
Loading…
x
Reference in New Issue
Block a user