mirror of
https://github.com/JezuzLizard/t4sp_bot_warfare.git
synced 2025-04-23 06:55:44 +00:00
added perk machine
This commit is contained in:
parent
68ab7dad3b
commit
50cc792fd4
@ -157,7 +157,14 @@ onPlayerDamage( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon,
|
||||
{
|
||||
if ( self isBot() && getDvarInt( "bots_t8_mode" ) )
|
||||
{
|
||||
iDamage = int( iDamage * 0.1 );
|
||||
if ( ( level.script == "nazi_zombie_asylum" || level.script == "nazi_zombie_sumpf" ) && self hasPerk( "specialty_armorvest" ) )
|
||||
{
|
||||
iDamage = int( iDamage * 0.333 );
|
||||
}
|
||||
else
|
||||
{
|
||||
iDamage = int( iDamage * 0.1 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( self is_bot() )
|
||||
@ -227,6 +234,11 @@ onSpawnedAll()
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self.lastSpawnTime = getTime();
|
||||
|
||||
if ( getDvarInt( "bots_main_debug" ) )
|
||||
{
|
||||
self.score = 100000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,6 +10,8 @@ init()
|
||||
level.bot_objectives[level.bot_objectives.size] = CreateObjectiveForManger( "powerup", maps\bots\objectives\_powerup::Finder, maps\bots\objectives\_powerup::Priority, maps\bots\objectives\_powerup::Executer, 2500 );
|
||||
level.bot_objectives[level.bot_objectives.size] = CreateObjectiveForManger( "wallweapon", maps\bots\objectives\_wallweapon::Finder, maps\bots\objectives\_wallweapon::Priority, maps\bots\objectives\_wallweapon::Executer, 7500 );
|
||||
level.bot_objectives[level.bot_objectives.size] = CreateObjectiveForManger( "treasurechest", maps\bots\objectives\_treasurechest::Finder, maps\bots\objectives\_treasurechest::Priority, maps\bots\objectives\_treasurechest::Executer, 7000 );
|
||||
maps\bots\objectives\_perkmachine::init();
|
||||
level.bot_objectives[level.bot_objectives.size] = CreateObjectiveForManger( "perkmachine", maps\bots\objectives\_perkmachine::Finder, maps\bots\objectives\_perkmachine::Priority, maps\bots\objectives\_perkmachine::Executer, 10000 );
|
||||
}
|
||||
|
||||
connected()
|
||||
|
287
maps/bots/objectives/_perkmachine.gsc
Normal file
287
maps/bots/objectives/_perkmachine.gsc
Normal file
@ -0,0 +1,287 @@
|
||||
#include common_scripts\utility;
|
||||
#include maps\_utility;
|
||||
#include maps\bots\_bot_utility;
|
||||
#include maps\bots\objectives\_utility;
|
||||
|
||||
init()
|
||||
{
|
||||
vending_triggers = GetEntArray( "zombie_vending", "targetname" );
|
||||
|
||||
if ( !isDefined( vending_triggers ) && vending_triggers.size < 1 )
|
||||
{
|
||||
vending_triggers = getEntArray( "harrybo21_perk_trigger", "targetname" );
|
||||
|
||||
if ( !isDefined( vending_triggers ) && vending_triggers.size < 1 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for ( i = 0 ; i < vending_triggers.size; i++ )
|
||||
{
|
||||
vending_triggers[i] thread init_vending_trigger();
|
||||
}
|
||||
}
|
||||
|
||||
init_vending_trigger()
|
||||
{
|
||||
self endon( "death" );
|
||||
|
||||
if ( self.targetname == "harrybo21_perk_trigger" )
|
||||
{
|
||||
machine = self getMachine();
|
||||
|
||||
machine waittill( "activate_machine" );
|
||||
|
||||
self.bot_powered_on = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
perk = self getVendingPerk();
|
||||
notify_name = perk + "_power_on";
|
||||
|
||||
level waittill( notify_name );
|
||||
|
||||
self.bot_powered_on = true;
|
||||
}
|
||||
}
|
||||
|
||||
Finder( eObj )
|
||||
{
|
||||
answer = [];
|
||||
|
||||
if ( self inLastStand() )
|
||||
{
|
||||
return answer;
|
||||
}
|
||||
|
||||
vending_triggers = GetEntArray( "zombie_vending", "targetname" );
|
||||
|
||||
if ( !isDefined( vending_triggers ) && vending_triggers.size < 1 )
|
||||
{
|
||||
vending_triggers = getEntArray( "harrybo21_perk_trigger", "targetname" );
|
||||
|
||||
if ( !isDefined( vending_triggers ) && vending_triggers.size < 1 )
|
||||
{
|
||||
return answer;
|
||||
}
|
||||
}
|
||||
|
||||
for ( i = 0 ; i < vending_triggers.size; i++ )
|
||||
{
|
||||
vending = vending_triggers[i];
|
||||
|
||||
if ( !isdefined( vending.bot_powered_on ) || !vending.bot_powered_on )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
perk = vending getVendingPerk();
|
||||
cost = vending getPerkCost();
|
||||
|
||||
if ( self.score < cost )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// perk limit??
|
||||
if ( self HasPerk( perk ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
machine = vending getMachine();
|
||||
|
||||
if ( !isDefined( machine ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
org = self getOffset( machine );
|
||||
|
||||
if ( GetPathIsInaccessible( self.origin, org ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
answer[answer.size] = self CreateFinderObjective( eObj, eObj.sName + "_" + vending GetEntityNumber(), vending, self [[eObj.fpPriorty]]( eObj, vending ) );
|
||||
}
|
||||
|
||||
return answer;
|
||||
}
|
||||
|
||||
getMachine()
|
||||
{
|
||||
return GetEnt( self.target, "targetname" );
|
||||
}
|
||||
|
||||
getVendingPerk()
|
||||
{
|
||||
if ( self.targetname == "harrybo21_perk_trigger" )
|
||||
{
|
||||
machine = self getMachine();
|
||||
return machine.script_string;
|
||||
}
|
||||
|
||||
return self.script_noteworthy;
|
||||
}
|
||||
|
||||
getPerkCost()
|
||||
{
|
||||
if ( self.targetname == "harrybo21_perk_trigger" )
|
||||
{
|
||||
return level.zombie_perks[self getVendingPerk()].perk_cost;
|
||||
}
|
||||
|
||||
cost = level.zombie_vars["zombie_perk_cost"];
|
||||
|
||||
switch ( self getVendingPerk() )
|
||||
{
|
||||
case "specialty_armorvest":
|
||||
cost = 2500;
|
||||
break;
|
||||
|
||||
case "specialty_quickrevive":
|
||||
cost = 1500;
|
||||
break;
|
||||
|
||||
case "specialty_fastreload":
|
||||
cost = 3000;
|
||||
break;
|
||||
|
||||
case "specialty_rof":
|
||||
cost = 2000;
|
||||
break;
|
||||
|
||||
default:
|
||||
cost = 10000;
|
||||
break;
|
||||
}
|
||||
|
||||
return cost;
|
||||
}
|
||||
|
||||
getOffset( model )
|
||||
{
|
||||
org = model get_angle_offset_node( 40, ( 0, -90, 0 ), ( 0, 0, 1 ) );
|
||||
|
||||
return org;
|
||||
}
|
||||
|
||||
Priority( eObj, eEnt )
|
||||
{
|
||||
// TODO rank perks
|
||||
base_priority = 2;
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1600, 3, 0 );
|
||||
|
||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
||||
{
|
||||
base_priority -= 1;
|
||||
}
|
||||
|
||||
return base_priority;
|
||||
}
|
||||
|
||||
Executer( eObj )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "zombified" );
|
||||
|
||||
vending = eObj.eEnt;
|
||||
|
||||
self thread WatchForCancel( vending );
|
||||
|
||||
self GoDoPerkMachine( eObj );
|
||||
|
||||
self WatchForCancelCleanup();
|
||||
self ClearScriptAimPos();
|
||||
self ClearScriptGoal();
|
||||
|
||||
self CompletedObjective( eObj.bWasSuccessful, eObj.sReason );
|
||||
}
|
||||
|
||||
WatchForCancelCleanup()
|
||||
{
|
||||
self notify( "WatchForCancelPerkmachine" );
|
||||
}
|
||||
|
||||
WatchForCancel( vending )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "zombified" );
|
||||
self endon( "WatchForCancelPerkmachine" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait 0.05;
|
||||
|
||||
if ( self inLastStand() )
|
||||
{
|
||||
self CancelObjective( "self inLastStand()" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WatchToGoToMachine( vending )
|
||||
{
|
||||
self endon( "cancel_bot_objective" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "zombified" );
|
||||
self endon( "goal" );
|
||||
self endon( "bad_path" );
|
||||
self endon( "new_goal" );
|
||||
|
||||
for ( ;; )
|
||||
{
|
||||
wait 0.05;
|
||||
|
||||
if ( self IsTouching( vending ) || vending PointInsideUseTrigger( self.origin ) )
|
||||
{
|
||||
self notify( "goal" );
|
||||
break; // is this needed?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
GoDoPerkMachine( eObj )
|
||||
{
|
||||
self endon( "cancel_bot_objective" );
|
||||
|
||||
vending = eObj.eEnt;
|
||||
machine = vending getMachine();
|
||||
perk = vending getVendingPerk();
|
||||
org = self getOffset( machine );
|
||||
|
||||
// go to machine
|
||||
self thread WatchToGoToMachine( vending );
|
||||
self SetScriptGoal( org, 32 );
|
||||
|
||||
result = self waittill_any_return( "goal", "bad_path", "new_goal" );
|
||||
|
||||
if ( result != "goal" )
|
||||
{
|
||||
eObj.sReason = "didn't go to machine";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !self IsTouching( vending ) && !vending PointInsideUseTrigger( self.origin ) )
|
||||
{
|
||||
eObj.sReason = "not touching machine";
|
||||
return;
|
||||
}
|
||||
|
||||
// ok we are touching machine, lets look at it
|
||||
self SetScriptAimPos( vending.origin );
|
||||
|
||||
// wait to look at it
|
||||
wait 1;
|
||||
|
||||
// press use
|
||||
self thread BotPressUse( 0.15 );
|
||||
wait 0.1;
|
||||
|
||||
// ok we pressed use, DONE
|
||||
eObj.sReason = "completed " + perk;
|
||||
eObj.bWasSuccessful = true;
|
||||
}
|
@ -56,7 +56,7 @@ Finder( eObj )
|
||||
Priority( eObj, eEnt )
|
||||
{
|
||||
base_priority = 3;
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, -2 );
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 500, 1200, 2, 0 );
|
||||
|
||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
||||
{
|
||||
|
@ -89,7 +89,7 @@ Finder( eObj )
|
||||
|
||||
getOffset( model )
|
||||
{
|
||||
org = model get_angle_offset_node( 40, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
||||
org = model get_angle_offset_node( 52, ( 0, 90, 0 ), ( 0, 0, 1 ) );
|
||||
|
||||
return org;
|
||||
}
|
||||
@ -97,7 +97,7 @@ getOffset( model )
|
||||
Priority( eObj, eEnt )
|
||||
{
|
||||
base_priority = 1;
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 2, -2 );
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 600, 1800, 2, 0 );
|
||||
|
||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
||||
{
|
||||
@ -218,13 +218,26 @@ GoDoTreasureChest( eObj )
|
||||
|
||||
// press use
|
||||
self thread BotPressUse( 0.15 );
|
||||
wait 0.1;
|
||||
wait 0.25;
|
||||
|
||||
// ok we pressed use, wait for randomization to complete
|
||||
self ClearScriptAimPos();
|
||||
self ClearScriptGoal();
|
||||
self ClearPriorityObjective();
|
||||
weapon_spawn_org waittill( "randomization_done" );
|
||||
|
||||
// randomization isnt happening...
|
||||
if ( !isDefined( chest.disabled ) || !chest.disabled )
|
||||
{
|
||||
eObj.sReason = "chest isnt randomizing";
|
||||
return;
|
||||
}
|
||||
|
||||
ret = weapon_spawn_org waittill_any_timeout( 5, "randomization_done" );
|
||||
|
||||
if (ret == "timeout")
|
||||
{
|
||||
eObj.sReason = "randomization_done timed out";
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isDefined( level.flag[ "moving_chest_now" ] ) && flag( "moving_chest_now" ) )
|
||||
{
|
||||
|
@ -100,7 +100,7 @@ Priority( eObj, eEnt )
|
||||
// TODO: check weallweapon type
|
||||
|
||||
base_priority = 0;
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 2, -2 );
|
||||
base_priority += ClampLerp( get_path_dist( self.origin, eEnt.origin ), 0, 800, 1, -2 );
|
||||
|
||||
if ( self HasBotObjective() && self.bot_current_objective.eEnt != eEnt )
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user