Catbot and NavBot improvements

This commit is contained in:
LightCat 2019-03-21 18:24:55 +01:00
parent f07598d48d
commit fdcfecb4ff
3 changed files with 23 additions and 13 deletions

View File

@ -29,9 +29,9 @@
<AutoVariable width="fill" target="misc.pathing.draw" label="Draw Path"/> <AutoVariable width="fill" target="misc.pathing.draw" label="Draw Path"/>
<AutoVariable width="fill" target="misc.pathing.look-at-path" label="Look at Path"/> <AutoVariable width="fill" target="misc.pathing.look-at-path" label="Look at Path"/>
<AutoVariable width="fill" target="navbot.enabled" label="Enable Navbot"/> <AutoVariable width="fill" target="navbot.enabled" label="Enable Navbot"/>
<!--AutoVariable width="fill" target="navbot.scout-mode" label="Enable Scout Mode"/> <!--AutoVariable width="fill" target="navbot.scout-mode" label="Enable Scout Mode"/-->
<AutoVariable width="fill" target="navbot.spy-mode" label="Enable Spy Mode"/-->
<AutoVariable width="fill" target="navbot.get-health-and-ammo" label="Get Health and Ammo"/> <AutoVariable width="fill" target="navbot.get-health-and-ammo" label="Get Health and Ammo"/>
<AutoVariable width="fill" target="navbot.spy-mode" label="Enable Spy Mode"/>
<AutoVariable width="fill" target="navbot.other-mode" label="General Mode"/> <AutoVariable width="fill" target="navbot.other-mode" label="General Mode"/>
<AutoVariable width="fill" target="navbot.primary-only" label="Best Weapon only"/> <AutoVariable width="fill" target="navbot.primary-only" label="Best Weapon only"/>
<AutoVariable width="fill" target="navbot.autojump.enabled" label="Enable Autojump"/> <AutoVariable width="fill" target="navbot.autojump.enabled" label="Enable Autojump"/>

View File

@ -108,7 +108,7 @@ void do_random_votekick()
return; return;
hack::ExecuteCommand("callvote kick \"" + std::to_string(target) + " cheating\""); hack::ExecuteCommand("callvote kick \"" + std::to_string(target) + " cheating\"");
} }
static const std::string catbot_names[] = { "K4T-B0T", "cat-bot", "btarrant", "cat-scout", "just disable vac tf", "raul.garcia", "zCat", "lagger bot" };
void update_catbot_list() void update_catbot_list()
{ {
for (int i = 1; i < g_GlobalVars->maxClients; ++i) for (int i = 1; i < g_GlobalVars->maxClients; ++i)
@ -118,14 +118,16 @@ void update_catbot_list()
continue; continue;
info.name[31] = 0; info.name[31] = 0;
if (strcasestr(info.name, "cat-bot") || strcasestr(info.name, "just disable vac tf") || strcasestr(info.name, "raul.garcia") || strcasestr(info.name, "zCat") || strcasestr(info.name, "lagger bot") || strcasestr(info.name, "zLag-bot") || strcasestr(info.name, "crash-bot") || strcasestr(info.name, "reichstagbot")) std::string pl_name(info.name);
{ for (auto name : catbot_names)
if (human_detecting_map.find(info.friendsID) == human_detecting_map.end()) if (pl_name.find(name) != pl_name.npos)
{ {
logging::Info("Found bot %s [U:1:%u]", info.name, info.friendsID); if (human_detecting_map.find(info.friendsID) == human_detecting_map.end())
human_detecting_map.insert(std::make_pair(info.friendsID, catbot_user_state{ 0 })); {
logging::Info("Found bot %s [U:1:%u]", info.name, info.friendsID);
human_detecting_map.insert(std::make_pair(info.friendsID, catbot_user_state{ 0 }));
}
} }
}
} }
} }
@ -333,7 +335,7 @@ static void cm()
// //
static const int classes[3]{ tf_spy, tf_sniper, tf_pyro }; static const int classes[3]{ tf_spy, tf_sniper, tf_pyro };
if (*auto_disguise && g_pPlayerResource->GetClass(LOCAL_E) == tf_spy && !HasCondition<TFCond_Disguised>(LOCAL_E) && disguise.test_and_set(3000)) if (*auto_disguise && g_pPlayerResource->GetClass(LOCAL_E) == tf_spy && !IsPlayerDisguised(LOCAL_E) && disguise.test_and_set(3000))
{ {
int teamtodisguise = (LOCAL_E->m_iTeam() == TEAM_RED) ? TEAM_RED - 1 : TEAM_BLU - 1; int teamtodisguise = (LOCAL_E->m_iTeam() == TEAM_RED) ? TEAM_RED - 1 : TEAM_BLU - 1;
int classtojoin = classes[rand() % 3]; int classtojoin = classes[rand() % 3];

View File

@ -11,6 +11,7 @@ namespace hacks::tf2::NavBot
static settings::Bool enabled("navbot.enabled", "false"); static settings::Bool enabled("navbot.enabled", "false");
static settings::Bool stay_near("navbot.stay-near", "true"); static settings::Bool stay_near("navbot.stay-near", "true");
static settings::Bool heavy_mode("navbot.other-mode", "false"); static settings::Bool heavy_mode("navbot.other-mode", "false");
static settings::Bool spy_mode("navbot.spy-mode", "false");
static settings::Bool get_health("navbot.get-health-and-ammo", "true"); static settings::Bool get_health("navbot.get-health-and-ammo", "true");
static settings::Float jump_distance("navbot.autojump.trigger-distance", "300"); static settings::Float jump_distance("navbot.autojump.trigger-distance", "300");
static settings::Bool autojump("navbot.autojump.enabled", "false"); static settings::Bool autojump("navbot.autojump.enabled", "false");
@ -34,6 +35,7 @@ namespace task
{ {
task current_task; task current_task;
} }
constexpr bot_class_config DIST_SPY{ 300.0f, 500.0f, 1000.0f };
constexpr bot_class_config DIST_OTHER{ 100.0f, 200.0f, 300.0f }; constexpr bot_class_config DIST_OTHER{ 100.0f, 200.0f, 300.0f };
constexpr bot_class_config DIST_SNIPER{ 1000.0f, 1500.0f, 3000.0f }; constexpr bot_class_config DIST_SNIPER{ 1000.0f, 1500.0f, 3000.0f };
@ -57,13 +59,13 @@ static void CreateMove()
if (getHealthAndAmmo()) if (getHealthAndAmmo())
return; return;
// Try to stay near enemies to increase efficiency // Try to stay near enemies to increase efficiency
if ((stay_near || heavy_mode) && current_task != task::followbot) if ((stay_near || heavy_mode || spy_mode) && current_task != task::followbot)
if (stayNear()) if (stayNear())
return; return;
// We don't have anything else to do. Just nav to sniper spots. // We don't have anything else to do. Just nav to sniper spots.
if (navToSniperSpot()) if (navToSniperSpot())
return; return;
// Uhh... Just stand arround I guess? // Uhh... Just stand around I guess?
} }
bool init(bool first_cm) bool init(bool first_cm)
@ -236,7 +238,11 @@ static bool stayNear()
// What distances do we have to use? // What distances do we have to use?
const bot_class_config *config; const bot_class_config *config;
if (heavy_mode) if (spy_mode)
{
config = &DIST_SPY;
}
else if (heavy_mode)
{ {
config = &DIST_OTHER; config = &DIST_OTHER;
} }
@ -425,6 +431,8 @@ static int GetBestSlot()
return primary; return primary;
case tf_medic: case tf_medic:
return secondary; return secondary;
case tf_spy:
return primary;
default: default:
{ {
float nearest_dist = getNearestPlayerDistance().second; float nearest_dist = getNearestPlayerDistance().second;