Use optimized distance, reduce useless checks

This commit is contained in:
Jackz 2023-10-18 08:52:12 -05:00
parent ca78c6785d
commit bed30087b3
No known key found for this signature in database
GPG key ID: E0BBD94CF657F603
2 changed files with 114 additions and 118 deletions

Binary file not shown.

View file

@ -96,55 +96,55 @@ Change Log:
// ==================================================================================================== // ====================================================================================================
// Handle // Handle
// ==================================================================================================== // ====================================================================================================
Handle sb_fix_enabled = INVALID_HANDLE; ConVar sb_fix_enabled;
Handle sb_fix_select_type = INVALID_HANDLE; ConVar sb_fix_select_type;
Handle sb_fix_select_number = INVALID_HANDLE; ConVar sb_fix_select_number;
Handle sb_fix_select_character_name = INVALID_HANDLE; ConVar sb_fix_select_character_name;
Handle sb_fix_dont_switch_secondary = INVALID_HANDLE; ConVar sb_fix_dont_switch_secondary;
Handle sb_fix_help_enabled = INVALID_HANDLE; ConVar sb_fix_help_enabled;
Handle sb_fix_help_range = INVALID_HANDLE; ConVar sb_fix_help_range;
Handle sb_fix_help_shove_type = INVALID_HANDLE; ConVar sb_fix_help_shove_type;
Handle sb_fix_help_shove_reloading = INVALID_HANDLE; ConVar sb_fix_help_shove_reloading;
Handle sb_fix_ci_enabled = INVALID_HANDLE; ConVar sb_fix_ci_enabled;
Handle sb_fix_ci_range = INVALID_HANDLE; ConVar sb_fix_ci_range;
Handle sb_fix_ci_melee_allow = INVALID_HANDLE; ConVar sb_fix_ci_melee_allow;
Handle sb_fix_ci_melee_range = INVALID_HANDLE; ConVar sb_fix_ci_melee_range;
Handle sb_fix_si_enabled = INVALID_HANDLE; ConVar sb_fix_si_enabled;
Handle sb_fix_si_range = INVALID_HANDLE; ConVar sb_fix_si_range;
Handle sb_fix_si_ignore_boomer = INVALID_HANDLE; ConVar sb_fix_si_ignore_boomer;
Handle sb_fix_si_ignore_boomer_range = INVALID_HANDLE; ConVar sb_fix_si_ignore_boomer_range;
Handle sb_fix_tank_enabled = INVALID_HANDLE; ConVar sb_fix_tank_enabled;
Handle sb_fix_tank_range = INVALID_HANDLE; ConVar sb_fix_tank_range;
Handle sb_fix_si_tank_priority_type = INVALID_HANDLE; ConVar sb_fix_si_tank_priority_type;
Handle sb_fix_bash_enabled = INVALID_HANDLE; ConVar sb_fix_bash_enabled;
Handle sb_fix_bash_hunter_chance = INVALID_HANDLE; ConVar sb_fix_bash_hunter_chance;
Handle sb_fix_bash_hunter_range = INVALID_HANDLE; ConVar sb_fix_bash_hunter_range;
Handle sb_fix_bash_jockey_chance = INVALID_HANDLE; ConVar sb_fix_bash_jockey_chance;
Handle sb_fix_bash_jockey_range = INVALID_HANDLE; ConVar sb_fix_bash_jockey_range;
Handle sb_fix_rock_enabled = INVALID_HANDLE; ConVar sb_fix_rock_enabled;
Handle sb_fix_rock_range = INVALID_HANDLE; ConVar sb_fix_rock_range;
Handle sb_fix_witch_enabled = INVALID_HANDLE; ConVar sb_fix_witch_enabled;
Handle sb_fix_witch_range = INVALID_HANDLE; ConVar sb_fix_witch_range;
Handle sb_fix_witch_range_incapacitated = INVALID_HANDLE; ConVar sb_fix_witch_range_incapacitated;
Handle sb_fix_witch_range_killed = INVALID_HANDLE; ConVar sb_fix_witch_range_killed;
Handle sb_fix_witch_shotgun_control = INVALID_HANDLE; ConVar sb_fix_witch_shotgun_control;
Handle sb_fix_witch_shotgun_range_max = INVALID_HANDLE; ConVar sb_fix_witch_shotgun_range_max;
Handle sb_fix_witch_shotgun_range_min = INVALID_HANDLE; ConVar sb_fix_witch_shotgun_range_min;
Handle sb_fix_prioritize_ownersmoker = INVALID_HANDLE; ConVar sb_fix_prioritize_ownersmoker;
Handle sb_fix_incapacitated_enabled = INVALID_HANDLE; ConVar sb_fix_incapacitated_enabled;
Handle sb_fix_debug = INVALID_HANDLE; ConVar sb_fix_debug;
// ==================================================================================================== // ====================================================================================================
// SendProp // SendProp
@ -409,31 +409,32 @@ public void SBConfigChangeConvar(Handle convar, const char[] oldValue, const cha
public void SBSelectChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { SelectImprovedTarget(); } public void SBSelectChangeConvar(Handle convar, const char[] oldValue, const char[] intValue) { SelectImprovedTarget(); }
// all _range cvars are squared for optimized distance check
void input_Help() void input_Help()
{ {
c_bHelp_Enabled = GetConVarBool(sb_fix_help_enabled); c_bHelp_Enabled = GetConVarBool(sb_fix_help_enabled);
c_fHelp_Range = GetConVarInt(sb_fix_help_range) * 1.0; c_fHelp_Range = Pow(sb_fix_help_range.FloatValue, 2.0);
c_iHelp_ShoveType = GetConVarInt(sb_fix_help_shove_type); c_iHelp_ShoveType = GetConVarInt(sb_fix_help_shove_type);
c_bHelp_ShoveOnlyReloading = GetConVarBool(sb_fix_help_shove_reloading); c_bHelp_ShoveOnlyReloading = GetConVarBool(sb_fix_help_shove_reloading);
} }
void input_CI() void input_CI()
{ {
c_bCI_Enabled = GetConVarBool(sb_fix_ci_enabled); c_bCI_Enabled = GetConVarBool(sb_fix_ci_enabled);
c_fCI_Range = GetConVarInt(sb_fix_ci_range) * 1.0; c_fCI_Range = Pow(sb_fix_ci_range.FloatValue, 2.0);
c_bCI_MeleeEnabled = GetConVarBool(sb_fix_ci_melee_allow); c_bCI_MeleeEnabled = GetConVarBool(sb_fix_ci_melee_allow);
c_fCI_MeleeRange = GetConVarInt(sb_fix_ci_melee_range) * 1.0; c_fCI_MeleeRange = Pow(sb_fix_ci_melee_range.FloatValue, 2.0);
} }
void input_SI() void input_SI()
{ {
c_bSI_Enabled = GetConVarBool(sb_fix_si_enabled); c_bSI_Enabled = GetConVarBool(sb_fix_si_enabled);
c_fSI_Range = GetConVarInt(sb_fix_si_range) * 1.0; c_fSI_Range = Pow(sb_fix_si_range.FloatValue, 2.0);
c_bSI_IgnoreBoomer = GetConVarBool(sb_fix_si_ignore_boomer); c_bSI_IgnoreBoomer = GetConVarBool(sb_fix_si_ignore_boomer);
c_fSI_IgnoreBoomerRange = GetConVarInt(sb_fix_si_ignore_boomer_range) * 1.0; c_fSI_IgnoreBoomerRange = Pow(sb_fix_si_ignore_boomer_range.FloatValue, 2.0);
} }
void input_Tank() void input_Tank()
{ {
c_bTank_Enabled = GetConVarBool(sb_fix_tank_enabled); c_bTank_Enabled = GetConVarBool(sb_fix_tank_enabled);
c_fTank_Range = GetConVarInt(sb_fix_tank_range) * 1.0; c_fTank_Range = Pow(sb_fix_tank_range.FloatValue, 2.0);
c_iSITank_PriorityType = GetConVarInt(sb_fix_si_tank_priority_type); c_iSITank_PriorityType = GetConVarInt(sb_fix_si_tank_priority_type);
} }
@ -441,22 +442,22 @@ void input_Bash()
{ {
c_bBash_Enabled = GetConVarBool(sb_fix_bash_enabled); c_bBash_Enabled = GetConVarBool(sb_fix_bash_enabled);
c_iBash_HunterChance = GetConVarInt(sb_fix_bash_hunter_chance); c_iBash_HunterChance = GetConVarInt(sb_fix_bash_hunter_chance);
c_fBash_HunterRange = GetConVarInt(sb_fix_bash_hunter_range) * 1.0; c_fBash_HunterRange = Pow(sb_fix_bash_hunter_range.FloatValue, 2.0);
c_iBash_JockeyChance = GetConVarInt(sb_fix_bash_jockey_chance); c_iBash_JockeyChance = GetConVarInt(sb_fix_bash_jockey_chance);
c_fBash_JockeyRange = GetConVarInt(sb_fix_bash_jockey_range) * 1.0; c_fBash_JockeyRange = Pow(sb_fix_bash_jockey_range.FloatValue, 2.0);
} }
void input_Entity() void input_Entity()
{ {
c_bRock_Enabled = GetConVarBool(sb_fix_rock_enabled); c_bRock_Enabled = GetConVarBool(sb_fix_rock_enabled);
c_fRock_Range = GetConVarInt(sb_fix_rock_range) * 1.0; c_fRock_Range = Pow(sb_fix_rock_range.FloatValue, 2.0);
c_bWitch_Enabled = GetConVarBool(sb_fix_witch_enabled); c_bWitch_Enabled = GetConVarBool(sb_fix_witch_enabled);
c_fWitch_Range = GetConVarInt(sb_fix_witch_range) * 1.0; c_fWitch_Range = Pow(sb_fix_witch_range.FloatValue, 2.0);
c_fWitch_Range_Incapacitated = GetConVarInt(sb_fix_witch_range_incapacitated) * 1.0; c_fWitch_Range_Incapacitated = Pow(sb_fix_witch_range_incapacitated.FloatValue, 2.0);
c_fWitch_Range_Killed = GetConVarInt(sb_fix_witch_range_killed) * 1.0; c_fWitch_Range_Killed = Pow(sb_fix_witch_range_killed.FloatValue, 2.0);
c_bWitch_Shotgun_Control = GetConVarBool(sb_fix_witch_shotgun_control); c_bWitch_Shotgun_Control = GetConVarBool(sb_fix_witch_shotgun_control);
c_fWitch_Shotgun_Range_Max = GetConVarInt(sb_fix_witch_shotgun_range_max) * 1.0; c_fWitch_Shotgun_Range_Max = Pow(sb_fix_witch_shotgun_range_max.FloatValue, 2.0);
c_fWitch_Shotgun_Range_Min = GetConVarInt(sb_fix_witch_shotgun_range_min) * 1.0; c_fWitch_Shotgun_Range_Min = Pow(sb_fix_witch_shotgun_range_min.FloatValue, 2.0);
} }
void inputConfig() void inputConfig()
@ -725,6 +726,8 @@ public Action WeaponSwitch(int client, int weapon)
return Plugin_Continue; return Plugin_Continue;
} }
// TODO: optimize it
stock Action onSBSlotActionCmd(int client, int &buttons, float vel[3], float angles[3]) stock Action onSBSlotActionCmd(int client, int &buttons, float vel[3], float angles[3])
{ {
if (!isIncapacitated(client) && GetPlayerWeaponSlot(client, 0) > -1) { if (!isIncapacitated(client) && GetPlayerWeaponSlot(client, 0) > -1) {
@ -735,18 +738,16 @@ stock Action onSBSlotActionCmd(int client, int &buttons, float vel[3], float ang
static char classname[32]; static char classname[32];
GetEntityClassname(weapon, classname, sizeof(classname)); GetEntityClassname(weapon, classname, sizeof(classname));
if (StrContains(classname, "weapon_melee", false) > -1 if (StrEqual(classname, "weapon_melee", false)
|| StrContains(classname, "weapon_pistol", false) > -1 || StrContains(classname, "pistol", false) > -1)
|| StrContains(classname, "weapon_dual_pistol", false) > -1
|| StrContains(classname, "weapon_pistol_magnum", false) > -1)
{ {
if (!g_bCommonWithinMelee[client]) { if (!g_bCommonWithinMelee[client]) {
static char main_weapon[32]; static char main_weapon[32];
GetEntityClassname(GetPlayerWeaponSlot(client, 0), main_weapon, sizeof(main_weapon)); GetEntityClassname(GetPlayerWeaponSlot(client, 0), main_weapon, sizeof(main_weapon));
FakeClientCommand(client, "use %s", main_weapon); FakeClientCommand(client, "use %s", main_weapon);
} }
} else if (StrContains(classname, "first_aid_kit", false) > -1 } else if (StrEqual(classname, "weapon_first_aid_kit", false)
|| StrContains(classname, "defibrillator", false) > -1) || StrContains(classname, "weapon_defibrillator", false))
{ {
if (g_bDanger[client]) { if (g_bDanger[client]) {
static char main_weapon[32]; static char main_weapon[32];
@ -785,10 +786,8 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
&& !isIncapacitated(x) && !isIncapacitated(x)
&& isVisibleTo(client, x)) && isVisibleTo(client, x))
{ {
float dist;
GetClientAbsOrigin(x, target_pos); GetClientAbsOrigin(x, target_pos);
dist = GetVectorDistance(self_pos, target_pos); float dist = GetVectorDistance(self_pos, target_pos, true);
int zombieClass = getZombieClass(x); int zombieClass = getZombieClass(x);
if ((c_bSI_Enabled && zombieClass != ZC_TANK && dist <= c_fSI_Range) if ((c_bSI_Enabled && zombieClass != ZC_TANK && dist <= c_fSI_Range)
@ -814,11 +813,11 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
} }
int aCap_Survivor = -1; int aCap_Survivor = -1;
float min_dist_CapSur = 100000.0; float min_dist_CapSur = 10000000000.0; //org was 100,000, we square here
float target_pos_CapSur[3]; float target_pos_CapSur[3];
int aCap_Infected = -1; int aCap_Infected = -1;
float min_dist_CapInf = 100000.0; float min_dist_CapInf = 10000000000.0;
float target_pos_CapInf[3]; float target_pos_CapInf[3];
if (c_bHelp_Enabled && !NeedsTeammateHelp_ExceptSmoker(client)) { if (c_bHelp_Enabled && !NeedsTeammateHelp_ExceptSmoker(client)) {
@ -832,7 +831,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
float dist; float dist;
GetClientAbsOrigin(x, target_pos_CapSur); GetClientAbsOrigin(x, target_pos_CapSur);
dist = GetVectorDistance(self_pos, target_pos_CapSur); dist = GetVectorDistance(self_pos, target_pos_CapSur, true);
if (dist < c_fHelp_Range) { if (dist < c_fHelp_Range) {
if (dist < min_dist_CapSur) { if (dist < min_dist_CapSur) {
min_dist_CapSur = dist; min_dist_CapSur = dist;
@ -851,7 +850,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
float dist; float dist;
GetClientAbsOrigin(x, target_pos_CapInf); GetClientAbsOrigin(x, target_pos_CapInf);
dist = GetVectorDistance(self_pos, target_pos_CapInf); dist = GetVectorDistance(self_pos, target_pos_CapInf, true);
if (dist < c_fHelp_Range) { if (dist < c_fHelp_Range) {
if (dist < min_dist_CapInf) { if (dist < min_dist_CapInf) {
min_dist_CapInf = dist; min_dist_CapInf = dist;
@ -904,7 +903,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
float dist; float dist;
GetClientAbsOrigin(x, target_pos_CapSmo); GetClientAbsOrigin(x, target_pos_CapSmo);
dist = GetVectorDistance(self_pos, target_pos_CapSmo); dist = GetVectorDistance(self_pos, target_pos_CapSmo, true);
if (dist < 750.0) { if (dist < 750.0) {
if (dist < min_dist_CapSmo) { if (dist < min_dist_CapSmo) {
min_dist_CapSmo = dist; min_dist_CapSmo = dist;
@ -936,7 +935,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
GetClientAbsOrigin(x, hunjoc_pos); GetClientAbsOrigin(x, hunjoc_pos);
float hundist; float hundist;
hundist = GetVectorDistance(self_pos, hunjoc_pos); hundist = GetVectorDistance(self_pos, hunjoc_pos, true);
if (hundist < c_fBash_HunterRange) { // 145.0 best if (hundist < c_fBash_HunterRange) { // 145.0 best
if (hundist < min_dist_HunJoc) { if (hundist < min_dist_HunJoc) {
@ -955,7 +954,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
GetClientAbsOrigin(x, hunjoc_pos); GetClientAbsOrigin(x, hunjoc_pos);
float jocdist; float jocdist;
jocdist = GetVectorDistance(self_pos, hunjoc_pos); jocdist = GetVectorDistance(self_pos, hunjoc_pos, true);
if (jocdist < c_fBash_JockeyRange) { // 125.0 best if (jocdist < c_fBash_JockeyRange) { // 125.0 best
if (jocdist < min_dist_HunJoc) { if (jocdist < min_dist_HunJoc) {
@ -974,7 +973,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
//int iMaxEntities = GetMaxEntities(); //int iMaxEntities = GetMaxEntities();
int aCommonInfected = -1; int aCommonInfected = -1;
int iCI_MeleeCount = 0; int iCI_MeleeCount = 0;
float min_dist_CI = 100000.0; float min_dist_CI = 10000000000.0;
float ci_pos[3]; float ci_pos[3];
if (c_bCI_Enabled && !NeedsTeammateHelp(client)) { if (c_bCI_Enabled && !NeedsTeammateHelp(client)) {
@ -985,7 +984,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
{ {
float dist; float dist;
GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos); GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos);
dist = GetVectorDistance(self_pos, ci_pos); dist = GetVectorDistance(self_pos, ci_pos, true);
if (dist < c_fCI_Range) { if (dist < c_fCI_Range) {
int iSeq = GetEntProp(iEntity, Prop_Send, "m_nSequence", 2); int iSeq = GetEntProp(iEntity, Prop_Send, "m_nSequence", 2);
@ -1013,7 +1012,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
// Fina a rage Witch // Fina a rage Witch
int aWitch = -1; int aWitch = -1;
float min_dist_Witch = 100000.0; float min_dist_Witch = 10000000000.0;
float witch_pos[3]; float witch_pos[3];
if (g_bWitchActive && c_bWitch_Enabled && !NeedsTeammateHelp(client)) { if (g_bWitchActive && c_bWitch_Enabled && !NeedsTeammateHelp(client)) {
for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity)
@ -1025,7 +1024,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
{ {
float witch_dist; float witch_dist;
GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", witch_pos); GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", witch_pos);
witch_dist = GetVectorDistance(self_pos, witch_pos); witch_dist = GetVectorDistance(self_pos, witch_pos, true);
if ((g_iWitch_Process[iEntity] == 0 && witch_dist < c_fWitch_Range) if ((g_iWitch_Process[iEntity] == 0 && witch_dist < c_fWitch_Range)
|| (g_iWitch_Process[iEntity] == WITCH_INCAPACITATED && witch_dist < c_fWitch_Range_Incapacitated) || (g_iWitch_Process[iEntity] == WITCH_INCAPACITATED && witch_dist < c_fWitch_Range_Incapacitated)
@ -1041,7 +1040,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
// Find a tank rock // Find a tank rock
int aTankRock = -1; int aTankRock = -1;
float rock_min_dist = 100000.0; float rock_min_dist = 10000000000.0;
float rock_pos[3]; float rock_pos[3];
if (c_bRock_Enabled && !NeedsTeammateHelp(client)) { if (c_bRock_Enabled && !NeedsTeammateHelp(client)) {
for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity) for (int iEntity = MaxClients+1; iEntity <= MAXENTITIES; ++iEntity)
@ -1051,7 +1050,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
{ {
float rock_dist; float rock_dist;
GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", rock_pos); GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", rock_pos);
rock_dist = GetVectorDistance(self_pos, rock_pos); rock_dist = GetVectorDistance(self_pos, rock_pos, true);
if (rock_dist < c_fRock_Range) { if (rock_dist < c_fRock_Range) {
if (rock_dist < rock_min_dist) { if (rock_dist < rock_min_dist) {
@ -1094,7 +1093,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
* *
==================================================================================================== */ ==================================================================================================== */
if (g_bDanger[client]) { // If have the medkit even though it is dangerous, switch to the main weapon if (g_bDanger[client]) { // If have the medkit even though it is dangerous, switch to the main weapon
if (isHaveItem(AW_Classname, "first_aid_kit")) { if (isHaveItem(AW_Classname, "weapon_first_aid_kit")) {
if (main_weapon[1] != 0) { if (main_weapon[1] != 0) {
FakeClientCommand(client, "use %s", main_weapon); FakeClientCommand(client, "use %s", main_weapon);
} else { } else {
@ -1117,7 +1116,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
GetClientAbsOrigin(client, c_pos); GetClientAbsOrigin(client, c_pos);
GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos); GetEntPropVector(aCommonInfected, Prop_Data, "m_vecOrigin", common_e_pos);
float aimdist = GetVectorDistance(c_pos, common_e_pos); float aimdist = GetVectorDistance(c_pos, common_e_pos, true);
if (aimdist > c_fCI_MeleeRange) g_bCommonWithinMelee[client] = false; if (aimdist > c_fCI_MeleeRange) g_bCommonWithinMelee[client] = false;
} }
@ -1182,7 +1181,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
float aimdist = GetVectorDistance(c_pos, e_pos); float aimdist = GetVectorDistance(c_pos, e_pos, true);
if (aimdist < 100.0) buttons |= IN_ATTACK2; if (aimdist < 100.0) buttons |= IN_ATTACK2;
else { else {
@ -1217,7 +1216,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
e_pos[2] += -10.0; e_pos[2] += -10.0;
} }
float aimdist = GetVectorDistance(c_pos, e_pos); float aimdist = GetVectorDistance(c_pos, e_pos, true);
MakeVectorFromPoints(c_pos, e_pos, lookat); MakeVectorFromPoints(c_pos, e_pos, lookat);
GetVectorAngles(lookat, angles); GetVectorAngles(lookat, angles);
@ -1227,26 +1226,26 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
/****************************************************************************************************/ /****************************************************************************************************/
// If any of the following are active, Switch to the main weapon // If any of the following are active, Switch to the main weapon
if (isHaveItem(AW_Classname, "first_aid_kit") if (isHaveItem(AW_Classname, "weapon_first_aid_kit")
|| isHaveItem(AW_Classname, "defibrillator") || isHaveItem(AW_Classname, "weapon_defibrillator")
|| HasValidEnt(client, "m_reviveTarget")) { || HasValidEnt(client, "m_reviveTarget")) {
UseItem(client, main_weapon); UseItem(client, main_weapon);
} }
// If the melee weapon is active and the dist from the target is 110 or more, switch to the main weapon // If the melee weapon is active and the dist from the target is 110 or more, switch to the main weapon
if (isHaveItem(AW_Classname, "weapon_melee") && aimdist > 110.0) { if (isHaveItem(AW_Classname, "weapon_melee") && aimdist > 11000.0) {
if (g_bCommonWithinMelee[client]) g_bCommonWithinMelee[client] = false; if (g_bCommonWithinMelee[client]) g_bCommonWithinMelee[client] = false;
UseItem(client, main_weapon); UseItem(client, main_weapon);
} }
/****************************************************************************************************/ /****************************************************************************************************/
if ((!isHaveItem(AW_Classname, "weapon_melee")) || (isHaveItem(AW_Classname, "weapon_melee") && aimdist < 110.0)) { if (!isHaveItem(AW_Classname, "weapon_melee") || aimdist < 11000.0) {
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
if (((c_iHelp_ShoveType >= 1 && HasValidEnt(aCap_Survivor, "m_tongueOwner") && aimdist < 110.0) if (((c_iHelp_ShoveType >= 1 && HasValidEnt(aCap_Survivor, "m_tongueOwner") && aimdist < 12100.0)
|| (c_iHelp_ShoveType >= 2 && HasValidEnt(aCap_Survivor, "m_jockeyAttacker") && aimdist < 100.0) || (c_iHelp_ShoveType >= 2 && HasValidEnt(aCap_Survivor, "m_jockeyAttacker") && aimdist < 10000.0)
|| (c_iHelp_ShoveType >= 3 && HasValidEnt(aCap_Survivor, "m_pounceAttacker") && aimdist < 100.0))) || (c_iHelp_ShoveType >= 3 && HasValidEnt(aCap_Survivor, "m_pounceAttacker") && aimdist < 10000.0)))
{ {
if ((!c_bHelp_ShoveOnlyReloading) || (c_bHelp_ShoveOnlyReloading && isReloading(client))) if ((!c_bHelp_ShoveOnlyReloading) || (c_bHelp_ShoveOnlyReloading && isReloading(client)))
buttons |= IN_ATTACK2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD> buttons |= IN_ATTACK2; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
@ -1278,7 +1277,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
else if (zombieClass == ZC_HUNTER) e_pos[2] += -14.0; else if (zombieClass == ZC_HUNTER) e_pos[2] += -14.0;
} }
float aimdist = GetVectorDistance(c_pos, e_pos); float aimdist = GetVectorDistance(c_pos, e_pos, true);
if (zombieClass == ZC_CHARGER && aimdist < 300.0) e_pos[2] += 10.0; if (zombieClass == ZC_CHARGER && aimdist < 300.0) e_pos[2] += 10.0;
@ -1290,15 +1289,15 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
/****************************************************************************************************/ /****************************************************************************************************/
// If any of the following are active, Switch to the main weapon // If any of the following are active, Switch to the main weapon
if (isHaveItem(AW_Classname, "first_aid_kit") if (isHaveItem(AW_Classname, "weapon_first_aid_kit")
|| isHaveItem(AW_Classname, "defibrillator") || isHaveItem(AW_Classname, "weapon_defibrillator")
|| HasValidEnt(client, "m_reviveTarget")) || HasValidEnt(client, "m_reviveTarget"))
{ {
UseItem(client, main_weapon); UseItem(client, main_weapon);
} }
// If the melee weapon is active and the dist from the target is 110 or more, switch to the main weapon // If the melee weapon is active and the dist from the target is 110 or more, switch to the main weapon
if (isHaveItem(AW_Classname, "weapon_melee") && aimdist > 110.0) if (isHaveItem(AW_Classname, "weapon_melee") && aimdist > 11000.0)
{ {
if (g_bCommonWithinMelee[client]) g_bCommonWithinMelee[client] = false; if (g_bCommonWithinMelee[client]) g_bCommonWithinMelee[client] = false;
UseItem(client, main_weapon); UseItem(client, main_weapon);
@ -1306,10 +1305,10 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
/****************************************************************************************************/ /****************************************************************************************************/
if ((!isHaveItem(AW_Classname, "weapon_melee")) || (isHaveItem(AW_Classname, "weapon_melee") && aimdist < 110.0)) { if (!isHaveItem(AW_Classname, "weapon_melee") || aimdist < 11000.0) {
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
if (aimdist < 100.0 if (aimdist < 10000.0
&& ((c_iHelp_ShoveType >= 1 && zombieClass == ZC_SMOKER) && ((c_iHelp_ShoveType >= 1 && zombieClass == ZC_SMOKER)
|| (c_iHelp_ShoveType >= 2 && zombieClass == ZC_JOCKEY) || (c_iHelp_ShoveType >= 2 && zombieClass == ZC_JOCKEY)
|| (c_iHelp_ShoveType >= 3 && zombieClass == ZC_HUNTER))) || (c_iHelp_ShoveType >= 3 && zombieClass == ZC_HUNTER)))
@ -1349,9 +1348,9 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
// PrintToChatAll("---"); // PrintToChatAll("---");
} }
float aimdist = GetVectorDistance(c_pos, rock_e_pos); float aimdist = GetVectorDistance(c_pos, rock_e_pos, true);
if (aimdist > 40.0 && !isHaveItem(AW_Classname, "weapon_melee")) { //<EFBFBD>ߐڂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD> if (aimdist > 1600.0 && !isHaveItem(AW_Classname, "weapon_melee")) { //<EFBFBD>ߐڂ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ă<EFBFBD><EFBFBD>Ȃ<EFBFBD><EFBFBD>
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK; if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK;
@ -1376,10 +1375,10 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
float aimdist = GetVectorDistance(c_pos, witch_e_pos); float aimdist = GetVectorDistance(c_pos, witch_e_pos, true);
if (c_bWitch_Shotgun_Control && isHaveItem(AW_Classname, "shotgun")) { if (c_bWitch_Shotgun_Control && StrContains(AW_Classname, "shotgun") != -1) {
if (aimdist < 150.0) buttons |= IN_DUCK; if (aimdist < 22500.0) buttons |= IN_DUCK;
if (aimdist < c_fWitch_Shotgun_Range_Min || aimdist > c_fWitch_Shotgun_Range_Max) { // 70 ~ 300 if (aimdist < c_fWitch_Shotgun_Range_Min || aimdist > c_fWitch_Shotgun_Range_Max) { // 70 ~ 300
if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK; if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK;
@ -1406,7 +1405,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
* *
==================================================================================================== */ ==================================================================================================== */
if (aCommonInfected > 0) { if (aCommonInfected > 0) {
if (!HasValidEnt(client, "m_reviveTarget") && StrContains(AW_Classname, "first_aid_kit", false) == -1) { if (!HasValidEnt(client, "m_reviveTarget") && StrEqual(AW_Classname, "weapon_first_aid_kit", false)) {
// Even if aCommonInfected dies and disappears, the Entity may not disappear for a while.(Bot keeps shooting the place)<EFBFBD>B Even with InValidEntity(), true appears... // Even if aCommonInfected dies and disappears, the Entity may not disappear for a while.(Bot keeps shooting the place)<EFBFBD>B Even with InValidEntity(), true appears...
// When the entity disappears, m_nNextThinkTick will not advance, so skip that if NextThinkTick has the same value as before. // When the entity disappears, m_nNextThinkTick will not advance, so skip that if NextThinkTick has the same value as before.
@ -1424,7 +1423,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
common_e_pos[2] += 40.0; common_e_pos[2] += 40.0;
float aimdist = GetVectorDistance(c_pos, common_e_pos); float aimdist = GetVectorDistance(c_pos, common_e_pos, true);
//common_e_pos[2] += (25.0 + (aimdist * 0.05) - (height_difference * 0.1)); //common_e_pos[2] += (25.0 + (aimdist * 0.05) - (height_difference * 0.1));
@ -1495,7 +1494,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
// if (aimdist < 90.0) buttons |= IN_ATTACK; // if (aimdist < 90.0) buttons |= IN_ATTACK;
// } // }
} else { } else {
if (aimdist > 60.0) { if (aimdist > 3600.0) {
if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK; if (GetRandomInt(0, 4) == 0) buttons &= ~IN_ATTACK;
else buttons |= IN_ATTACK; else buttons |= IN_ATTACK;
} else { } else {
@ -1544,7 +1543,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
GetClientAbsOrigin(int_target, e_pos); GetClientAbsOrigin(int_target, e_pos);
if (zombieClass == ZC_HUNTER if (zombieClass == ZC_HUNTER
&& (GetClientButtons(int_target) & IN_DUCK)) { && (GetClientButtons(int_target) & IN_DUCK)) {
if (GetVectorDistance(c_pos, e_pos) > 250.0) e_pos[2] += -30.0; if (GetVectorDistance(c_pos, e_pos, true) > 6250.0) e_pos[2] += -30.0;
else e_pos[2] += -35.0; else e_pos[2] += -35.0;
} else if (zombieClass == ZC_JOCKEY) { } else if (zombieClass == ZC_JOCKEY) {
e_pos[2] += -30.0; e_pos[2] += -30.0;
@ -1555,9 +1554,9 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
if (zombieClass == ZC_TANK && aTankRock > 0) return Plugin_Continue; // If the Tank and tank rock are visible at the same time, prioritize the tank rock if (zombieClass == ZC_TANK && aTankRock > 0) return Plugin_Continue; // If the Tank and tank rock are visible at the same time, prioritize the tank rock
float aimdist = GetVectorDistance(c_pos, e_pos); float aimdist = GetVectorDistance(c_pos, e_pos, true);
if (aimdist < 200.0) {if (!g_bDanger[client]) g_bDanger[client] = true;} if (aimdist < 40000.0) {if (!g_bDanger[client]) g_bDanger[client] = true;}
MakeVectorFromPoints(c_pos, e_pos, lookat); MakeVectorFromPoints(c_pos, e_pos, lookat);
GetVectorAngles(lookat, angles); GetVectorAngles(lookat, angles);
@ -1567,7 +1566,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
if(isHaveItem(AW_Classname, "first_aid_kit") if(isHaveItem(AW_Classname, "first_aid_kit")
|| isHaveItem(AW_Classname, "defibrillator") || isHaveItem(AW_Classname, "defibrillator")
|| HasValidEnt(client, "m_reviveTarget")) { || HasValidEnt(client, "m_reviveTarget")) {
if (aimdist > 250.0) return Plugin_Continue; if (aimdist > 6250.0) return Plugin_Continue;
else { UseItem(client, main_weapon); } else { UseItem(client, main_weapon); }
} }
@ -1575,11 +1574,11 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
|| isHaveItem(AW_Classname, "weapon_shotgun_spas") || isHaveItem(AW_Classname, "weapon_shotgun_spas")
|| isHaveItem(AW_Classname, "weapon_pumpshotgun") || isHaveItem(AW_Classname, "weapon_pumpshotgun")
|| isHaveItem(AW_Classname, "weapon_autoshotgun")) { || isHaveItem(AW_Classname, "weapon_autoshotgun")) {
if (aimdist > 1000.0) return Plugin_Continue; if (aimdist > 1000000.0) return Plugin_Continue;
} }
if (isHaveItem(AW_Classname, "weapon_melee") && aCommonInfected < 1) { if (isHaveItem(AW_Classname, "weapon_melee") && aCommonInfected < 1) {
if (aimdist > 100.0) UseItem(client, main_weapon); if (aimdist > 1000000.0) UseItem(client, main_weapon);
} }
/****************************************************************************************************/ /****************************************************************************************************/
@ -1597,7 +1596,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
if (GetGameTime() - fVomit > 10.0) { // Survivors without vomit if (GetGameTime() - fVomit > 10.0) { // Survivors without vomit
GetClientAbsOrigin(s, voS_pos); GetClientAbsOrigin(s, voS_pos);
float dist = GetVectorDistance(voS_pos, e_pos); // Distance between the Survivor without vomit and the Boomer float dist = GetVectorDistance(voS_pos, e_pos, true); // Distance between the Survivor without vomit and the Boomer
if (dist >= c_fSI_IgnoreBoomerRange) { isBoomer_Shoot_OK = true; } // If the survivor without vomit is farther than dist "c_fSI_IgnoreBoomerRange (def: 200)" if (dist >= c_fSI_IgnoreBoomerRange) { isBoomer_Shoot_OK = true; } // If the survivor without vomit is farther than dist "c_fSI_IgnoreBoomerRange (def: 200)"
else { isBoomer_Shoot_OK = false; break; } // If False appears even once, break else { isBoomer_Shoot_OK = false; break; } // If False appears even once, break
} }
@ -1610,7 +1609,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
|| zombieClass == ZC_SMOKER || zombieClass == ZC_SMOKER
|| (isTargetBoomer && !isBoomer_Shoot_OK)) || (isTargetBoomer && !isBoomer_Shoot_OK))
{ {
if (aimdist < 90.0 && !isStagger(int_target)) { if (aimdist < 8100.0 && !isStagger(int_target)) {
TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR); TeleportEntity(client, NULL_VECTOR, angles, NULL_VECTOR);
buttons |= IN_ATTACK2; buttons |= IN_ATTACK2;
if (c_bDebug_Enabled) { if (c_bDebug_Enabled) {
@ -1621,8 +1620,7 @@ stock Action onSBRunCmd(int client, int &buttons, float vel[3], float angles[3])
} }
} }
if (!isHaveItem(AW_Classname, "weapon_melee") if (!isHaveItem(AW_Classname, "weapon_melee") || aimdist < 10000.0)
|| (aimdist < 100.0 && isHaveItem(AW_Classname, "weapon_melee")))
{ {
if (c_bDebug_Enabled) { if (c_bDebug_Enabled) {
if (!isTargetBoomer) PrintToChatAll("\x01[%.2f] \x05%N\x01 int_target: \x04%N (%d)", GetGameTime(), client, int_target, int_target); if (!isTargetBoomer) PrintToChatAll("\x01[%.2f] \x05%N\x01 int_target: \x04%N (%d)", GetGameTime(), client, int_target, int_target);
@ -1658,7 +1656,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
{ {
if (isIncapacitated(client)) { if (isIncapacitated(client)) {
int aCapper = -1; int aCapper = -1;
float min_dist_Cap = 100000.0; float min_dist_Cap = 10000000000.0;
float self_pos[3], target_pos[3]; float self_pos[3], target_pos[3];
GetClientEyePosition(client, self_pos); GetClientEyePosition(client, self_pos);
@ -1671,7 +1669,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
&& (isVisibleTo(client, x) || isVisibleTo(x, client))) && (isVisibleTo(client, x) || isVisibleTo(x, client)))
{ {
GetClientAbsOrigin(x, target_pos); GetClientAbsOrigin(x, target_pos);
float dist = GetVectorDistance(self_pos, target_pos); float dist = GetVectorDistance(self_pos, target_pos, true);
if (dist < min_dist_Cap) { if (dist < min_dist_Cap) {
min_dist_Cap = dist; min_dist_Cap = dist;
aCapper = x; aCapper = x;
@ -1684,7 +1682,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
&& (isVisibleTo(client, x) || isVisibleTo(x, client))) && (isVisibleTo(client, x) || isVisibleTo(x, client)))
{ {
GetClientAbsOrigin(x, target_pos); GetClientAbsOrigin(x, target_pos);
float dist = GetVectorDistance(self_pos, target_pos); float dist = GetVectorDistance(self_pos, target_pos, true);
if (dist < min_dist_Cap) { if (dist < min_dist_Cap) {
min_dist_Cap = dist; min_dist_Cap = dist;
aCapper = x; aCapper = x;
@ -1729,7 +1727,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
int int_target = -1; int int_target = -1;
int aCommonInfected = -1; int aCommonInfected = -1;
if (aCapper < 1 && !NeedsTeammateHelp(client)) { if (aCapper < 1 && !NeedsTeammateHelp(client)) {
float min_dist = 100000.0; float min_dist = 10000000000.0;
float ci_pos[3]; float ci_pos[3];
for (int x = 1; x <= MaxClients; ++x){ for (int x = 1; x <= MaxClients; ++x){
@ -1738,7 +1736,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
&& (isVisibleTo(client, x) || isVisibleTo(x, client))) && (isVisibleTo(client, x) || isVisibleTo(x, client)))
{ {
GetClientAbsOrigin(x, target_pos); GetClientAbsOrigin(x, target_pos);
float dist = GetVectorDistance(self_pos, target_pos); float dist = GetVectorDistance(self_pos, target_pos, true);
if (dist < min_dist) { if (dist < min_dist) {
min_dist = dist; min_dist = dist;
int_target = x; int_target = x;
@ -1754,7 +1752,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
&& isVisibleToEntity(iEntity, client)) && isVisibleToEntity(iEntity, client))
{ {
GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos); GetEntPropVector(iEntity, Prop_Data, "m_vecAbsOrigin", ci_pos);
float dist = GetVectorDistance(self_pos, ci_pos); float dist = GetVectorDistance(self_pos, ci_pos, true);
if (dist < min_dist) { if (dist < min_dist) {
min_dist = dist; min_dist = dist;
@ -1777,7 +1775,7 @@ stock Action onSBRunCmd_Incapacitated(int client, int &buttons, float vel[3], fl
MakeVectorFromPoints(c_pos, common_e_pos, lookat); MakeVectorFromPoints(c_pos, common_e_pos, lookat);
GetVectorAngles(lookat, angles); GetVectorAngles(lookat, angles);
float aimdist = GetVectorDistance(c_pos, common_e_pos); float aimdist = GetVectorDistance(c_pos, common_e_pos, true);
/****************************************************************************************************/ /****************************************************************************************************/
@ -2118,9 +2116,7 @@ stock bool isJockeyLeaping(int client)
stock bool isHaveItem(const char[] FItem, const char[] SItem) stock bool isHaveItem(const char[] FItem, const char[] SItem)
{ {
if (StrContains(FItem, SItem, false) > -1) return true; return StrEqual(FItem, SItem, false);
return false;
} }
stock void UseItem(int client, const char[] FItem) stock void UseItem(int client, const char[] FItem)