Updated FlyYouFools & added BetterWitchAvoidance

This commit is contained in:
Jackzie 2020-06-11 21:16:13 -05:00
parent 23baaa849f
commit 02fff542af
No known key found for this signature in database
GPG key ID: 1E834FE36520537A
3 changed files with 17 additions and 9 deletions

Binary file not shown.

View file

@ -2,6 +2,7 @@
#include <sourcemod> #include <sourcemod>
#include <sdktools> #include <sdktools>
#define PLUGIN_VERSION "1.4" #define PLUGIN_VERSION "1.4"
#pragma newdecls required
//#define DEBUG //#define DEBUG
@ -18,7 +19,7 @@ public Plugin myinfo =
url = "N/A" url = "N/A"
} }
public OnPluginStart() public void OnPluginStart()
{ {
EngineVersion g_Game = GetEngineVersion(); EngineVersion g_Game = GetEngineVersion();
if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2) if(g_Game != Engine_Left4Dead && g_Game != Engine_Left4Dead2)
@ -40,7 +41,7 @@ public OnPluginStart()
} }
public OnMapStart() { public void OnMapStart() {
TankClient = -1; TankClient = -1;
bEscapeReady = false; bEscapeReady = false;
@ -66,6 +67,8 @@ public Action BotControlTimer(Handle timer)
#if debug #if debug
PrintToServer("Tank processing now ended. Escape ready or tank has been killed."); PrintToServer("Tank processing now ended. Escape ready or tank has been killed.");
#endif #endif
//incase any other tanks are available
FindExistingTank();
return Plugin_Stop; return Plugin_Stop;
} }
//Once an AI tank is awakened, m_lookatPlayer is set to a player ID //Once an AI tank is awakened, m_lookatPlayer is set to a player ID
@ -80,19 +83,21 @@ public Action BotControlTimer(Handle timer)
GetClientName(tank_target, targetted_name, sizeof(targetted_name)); GetClientName(tank_target, targetted_name, sizeof(targetted_name));
ShowHintToAll("tank_target: %d (%s) | visible threats: %b", tank_target, targetted_name, hasVisibleThreats); ShowHintToAll("tank_target: %d (%s) | visible threats: %b", tank_target, targetted_name, hasVisibleThreats);
#endif #endif
//grab tank position outside loop, only calculate bot
float TankPosition[3];
GetClientAbsOrigin(TankClient, TankPosition);
for (int i = 1; i <= MaxClients; i++) for (int i = 1; i <= MaxClients; i++)
{ {
if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && IsFakeClient(i)) if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) == 2 && IsFakeClient(i))
{ {
//If distance between bot and tank is less than 200IQBots_TankDangerRange's float value //If distance between bot and tank is less than 200IQBots_TankDangerRange's float value
//if not tank target, and tank != visible threats, then attack //if not tank target, and tank != visible threats, then attack. OR if health low, flee
if(tank_target == i) { int health = GetClientHealth(i);
if(tank_target == i || health <= 40) {
L4D2_RunScript("CommandABot({cmd=2,bot=GetPlayerFromUserID(%i),target=GetPlayerFromUserID(%i)})", GetClientUserId(i), GetClientUserId(TankClient)); L4D2_RunScript("CommandABot({cmd=2,bot=GetPlayerFromUserID(%i),target=GetPlayerFromUserID(%i)})", GetClientUserId(i), GetClientUserId(TankClient));
}else { }else {
float TankPosition[3];
float BotPosition[3];
GetClientAbsOrigin(TankClient, TankPosition); float BotPosition[3];
GetClientAbsOrigin(i, BotPosition); GetClientAbsOrigin(i, BotPosition);
float distance = GetVectorDistance(BotPosition, TankPosition); float distance = GetVectorDistance(BotPosition, TankPosition);
@ -136,10 +141,10 @@ public void FindExistingTank() {
* @noreturn * @noreturn
*/ */
stock void L4D2_RunScript(const char[] sCode, any ...) { stock void L4D2_RunScript(const char[] sCode, any ...) {
static iScriptLogic = INVALID_ENT_REFERENCE; static int iScriptLogic = INVALID_ENT_REFERENCE;
if(iScriptLogic == INVALID_ENT_REFERENCE || !IsValidEntity(iScriptLogic)) { if(iScriptLogic == INVALID_ENT_REFERENCE || !IsValidEntity(iScriptLogic)) {
iScriptLogic = EntIndexToEntRef(CreateEntityByName("logic_script")); iScriptLogic = EntIndexToEntRef(CreateEntityByName("logic_script"));
if(iScriptLogic == INVALID_ENT_REFERENCE || !IsValidEntity(iScriptLogic)) if(iScriptLogic == INVALID_ENT_REFERENCE|| !IsValidEntity(iScriptLogic))
SetFailState("Could not create 'logic_script'"); SetFailState("Could not create 'logic_script'");
DispatchSpawn(iScriptLogic); DispatchSpawn(iScriptLogic);

View file

@ -61,3 +61,6 @@ A group of misc tools for l4d2. Including: Notify on lasers use, and a finale ti
Updated version of ConnerRia's plugin. Improves bots avoidance of tanks. Change from original is updated source syntax, some optimizations/cleanup, and fixes such as bots avoiding tank that has not been activated, or not escaping in vehicle due to presence of tank. Updated version of ConnerRia's plugin. Improves bots avoidance of tanks. Change from original is updated source syntax, some optimizations/cleanup, and fixes such as bots avoiding tank that has not been activated, or not escaping in vehicle due to presence of tank.
* **Convars:** * **Convars:**
* `FlyYouFools_Version` - Prints the version of plugin * `FlyYouFools_Version` - Prints the version of plugin
### BetterWitchAvoidance
Inspired by the 200IQBots_FlyYouFools. Bots avoid witch if its over 40% anger when close, or a little bigger range at 60% or more.