From 9d30d24673ec09c5769e5fadf1a4396870805a83 Mon Sep 17 00:00:00 2001 From: INeedBots Date: Sun, 29 Nov 2020 02:21:42 -0600 Subject: [PATCH] start revive --- main_shared/maps/mp/bots/_bot_script.gsc | 113 ++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/main_shared/maps/mp/bots/_bot_script.gsc b/main_shared/maps/mp/bots/_bot_script.gsc index f278af8..647aede 100644 --- a/main_shared/maps/mp/bots/_bot_script.gsc +++ b/main_shared/maps/mp/bots/_bot_script.gsc @@ -949,7 +949,7 @@ start_bot_threads() // war and cap } - // revive + self thread bot_revive_think(); } /* @@ -1376,6 +1376,117 @@ stop_go_target_on_death(tar) self ClearScriptGoal(); } +/* + Bots revive the player +*/ +bot_use_revive(revivePlayer) +{ +} + +/* + Bots think to go revive +*/ +bot_revive_think() +{ + self endon( "death" ); + self endon( "disconnect" ); + + for(;;) + { + wait randomintrange(2,5); + + if (!level.teamBased) + continue; + + if (!self.canreviveothers) + continue; + + if ( self HasScriptGoal() || self.bot_lock_goal ) + continue; + + revivePlayer = undefined; + for(i = 0; i < level.players.size; i++) + { + player = level.players[i]; + + if(!isDefined(player.pers["team"])) + continue; + if(player == self) + continue; + if(self.pers["team"] != player.pers["team"]) + continue; + if(!isDefined(player.revivetrigger)) + continue; + + if (isDefined(player.currentlyBeingRevived) && player.currentlyBeingRevived) + continue; + + if (!isDefined(player.revivetrigger.bots)) + player.revivetrigger.bots = 0; + + if (player.revivetrigger.bots > 2) + continue; + + revivePlayer = player; + } + + if (!isDefined(revivePlayer)) + continue; + + self SetScriptGoal( revivePlayer.origin, 1 ); + self thread bot_inc_bots(revivePlayer.revivetrigger, true); + self thread bot_go_revive(revivePlayer); + + event = self waittill_any_return( "goal", "bad_path", "new_goal" ); + + if (event != "new_goal") + self ClearScriptGoal(); + + if(event != "goal" || (isDefined(revivePlayer.currentlyBeingRevived) && revivePlayer.currentlyBeingRevived) || !self isTouching(revivePlayer.revivetrigger) || self InLastStand() || self HasThreat()) + { + continue; + } + + self SetScriptGoal( self.origin, 64 ); + + self bot_use_revive(revivePlayer); + wait 1; + self ClearScriptGoal(); + } +} + +/* + Bots go to the revive +*/ +bot_go_revive(revive) +{ + self endon( "death" ); + self endon( "disconnect" ); + level endon("game_ended"); + self endon( "goal" ); + self endon( "bad_path" ); + self endon( "new_goal" ); + + for (;;) + { + wait 1; + + if (!isDefined(revive)) + break; + + if (!isDefined(revive.revivetrigger)) + break; + + if (self isTouching(revive.revivetrigger)) + break; + } + + if(!isDefined(revive) || !isDefined(revive.revivetrigger)) + self notify("bad_path"); + else + self notify("goal"); +} + /* Bot logic for bot determining to camp. */