From: MirceaKitsune Date: Thu, 30 Sep 2010 00:50:58 +0000 (+0300) Subject: Don't execute the predator vore AI if the bot is prey X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=fc262588df01d1bb9f9316060c171493b7803e03;p=voretournament%2Fvoretournament.git Don't execute the predator vore AI if the bot is prey --- diff --git a/data/qcsrc/server/bot/havocbot/vore_ai.qc b/data/qcsrc/server/bot/havocbot/vore_ai.qc index ef251a3d..5a9fc91f 100644 --- a/data/qcsrc/server/bot/havocbot/vore_ai.qc +++ b/data/qcsrc/server/bot/havocbot/vore_ai.qc @@ -87,71 +87,74 @@ void Vore_AI() // Predator bot behavior: // -------------------------------- - // finding and swallowing a player - - // aim toward the nearest possible victim. The greater the skill, the quicker the aim - // this only does the aiming, checking and swallowing is handled below - entity head; - head = findradius(self.origin, cvar("g_balance_vore_swallow_range")); - while(head) + if(self.predator.classname != "player") { - if(Swallow_condition_check_bot(head)) - bot_aimdir(head.origin + head.view_ofs - self.origin - self.view_ofs, -1); - head = head.chain; - } + // finding and swallowing a player - // now do the actual checking and swallowing - entity prey; - float randomtry, fear; - float decide_pred_time, decide_prey_time; - - prey = Swallow_player_check(); - fear = 1; - - // check if we should run the Teamhealing AI rather than continuing with the normal vore AI - Vore_AI_Teamheal(prey); - if(self.status_teamhealing > 1) // if we are teamhealing, there's nothing to do from here on - return; - - randomtry = random() * 10; // there are 10 bot skill steps - if(prey.items & IT_STRENGTH) // avoid eating bots that have the Strenght powerup - fear += cvar("bot_ai_vore_fear") * self.bot_vorefear; - if(prey.items & IT_INVINCIBLE) // avoid eating bots that have the Invincible powerup - fear += cvar("bot_ai_vore_fear") * self.bot_vorefear; - fear += self.stomach_load; // the bigger our stomach, the less we want to put someone else in there - decide_pred_time = cvar("bot_ai_vore_decide_pred") / skill / self.bot_vorethinkpred; - decide_prey_time = cvar("bot_ai_vore_decide_prey") / skill / self.bot_vorethinkprey; - - if(time > self.decide_swallow) - if(Swallow_condition_check_bot(prey)) - { - // the greater the skill, the higher the chance bots will swallow someone each attempt - if(skill / fear >= randomtry) - if not(teams_matter && prey.team == self.team) + // aim toward the nearest possible victim. The greater the skill, the quicker the aim + // this only does the aiming, checking and swallowing is handled below + entity head; + head = findradius(self.origin, cvar("g_balance_vore_swallow_range")); + while(head) { - self.BUTTON_ATCK = TRUE; // swallow - self.decide_pred = time + decide_pred_time; // time before the bot decides what to do with their prey + if(Swallow_condition_check_bot(head)) + bot_aimdir(head.origin + head.view_ofs - self.origin - self.view_ofs, -1); + head = head.chain; } - self.decide_swallow = time + cvar("bot_ai_vore_decide_swallow"); // this is needed to take a proper decision, otherwise the code would execute each frame and return TRUE pretty soon - } - // deciding what to do with a victim: + // now do the actual checking and swallowing + entity prey; + float randomtry, fear; + float decide_pred_time, decide_prey_time; + + prey = Swallow_player_check(); + fear = 1; + + // check if we should run the Teamhealing AI rather than continuing with the normal vore AI + Vore_AI_Teamheal(prey); + if(self.status_teamhealing > 1) // if we are teamhealing, there's nothing to do from here on + return; + + randomtry = random() * 10; // there are 10 bot skill steps + if(prey.items & IT_STRENGTH) // avoid eating bots that have the Strenght powerup + fear += cvar("bot_ai_vore_fear") * self.bot_vorefear; + if(prey.items & IT_INVINCIBLE) // avoid eating bots that have the Invincible powerup + fear += cvar("bot_ai_vore_fear") * self.bot_vorefear; + fear += self.stomach_load; // the bigger our stomach, the less we want to put someone else in there + decide_pred_time = cvar("bot_ai_vore_decide_pred") / skill / self.bot_vorethinkpred; + decide_prey_time = cvar("bot_ai_vore_decide_prey") / skill / self.bot_vorethinkprey; + + if(time > self.decide_swallow) + if(Swallow_condition_check_bot(prey)) + { + // the greater the skill, the higher the chance bots will swallow someone each attempt + if(skill / fear >= randomtry) + if not(teams_matter && prey.team == self.team) + { + self.BUTTON_ATCK = TRUE; // swallow + self.decide_pred = time + decide_pred_time; // time before the bot decides what to do with their prey + } + self.decide_swallow = time + cvar("bot_ai_vore_decide_swallow"); // this is needed to take a proper decision, otherwise the code would execute each frame and return TRUE pretty soon + } - if(self.stomach_load && time > self.decide_pred) - { - // if the predator's health is smaller than the maximum damage a stomach kick can do, regurgitate the player(s) - // otherwise the predator is putting himself at risk by keeping you inside - if(self.health <= cvar("g_balance_vore_kick_damage_max")) - self.BUTTON_REGURGITATE = TRUE; + // deciding what to do with a victim: - else if(!self.digesting) + if(self.stomach_load && time > self.decide_pred) { - // the higher the skill, the faster bots will start to digest you - if not(g_rpg && cvar("g_rpg_botattack") < 2) - if(skill >= randomtry) - self.BUTTON_DIGEST = TRUE; // digest + // if the predator's health is smaller than the maximum damage a stomach kick can do, regurgitate the player(s) + // otherwise the predator is putting himself at risk by keeping you inside + if(self.health <= cvar("g_balance_vore_kick_damage_max")) + self.BUTTON_REGURGITATE = TRUE; - self.decide_pred = time + decide_pred_time; // time before the bot decides what to do with their prey + else if(!self.digesting) + { + // the higher the skill, the faster bots will start to digest you + if not(g_rpg && cvar("g_rpg_botattack") < 2) + if(skill >= randomtry) + self.BUTTON_DIGEST = TRUE; // digest + + self.decide_pred = time + decide_pred_time; // time before the bot decides what to do with their prey + } } } @@ -159,10 +162,10 @@ void Vore_AI() // Prey bot behavior: // -------------------------------- - // all we can do in the stomach is kick and do some damage / try to escape, or leave if the circumstances allow it and we should - if(self.predator.classname == "player" && time > self.decide_prey) { + // all we can do in the stomach is kick and do some damage / try to escape, or leave if the circumstances allow it and we should + if not(g_rpg && cvar("g_rpg_botattack") < 2) if not(teams_matter && self.team == self.predator.team) {