From 4a5cd83c66a58befc0e50f16e09c5aea5248cf47 Mon Sep 17 00:00:00 2001 From: Jackz Date: Tue, 16 Aug 2022 21:14:53 -0500 Subject: [PATCH] Only show non colliding manual beams --- plugins/l4d2_turret.smx | Bin 20756 -> 21310 bytes scripting/l4d2_turret.sp | 108 ++++++++++++++++++++++++++------------- 2 files changed, 72 insertions(+), 36 deletions(-) diff --git a/plugins/l4d2_turret.smx b/plugins/l4d2_turret.smx index 31bb4356f1a1501b3aae3c8e02cb287101f43711..765c214bfd24eb4e0a5cc579979e445bdd105e2b 100644 GIT binary patch literal 21310 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 bqm=wvar~;@()2<$vh<>Mlq~%pRBORIPN||c literal 20756 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 diff --git a/scripting/l4d2_turret.sp b/scripting/l4d2_turret.sp index 9b9d0e2..24755b6 100644 --- a/scripting/l4d2_turret.sp +++ b/scripting/l4d2_turret.sp @@ -41,6 +41,7 @@ ConVar cv_autoBaseDamage; ConVar cv_manualBaseDamage; static int COLOR_RED[4] = { 255, 0, 0, 200 }; +static int COLOR_RED_LIGHT[4] = { 150, 0, 0, 150 }; int manualTarget = -1; #define MANUAL_TARGETNAME "turret_target_manual" @@ -378,7 +379,7 @@ void FireTurretAuto(const float origin[3], int targetEntity, float damage = 105. } void FireTurret(const float origin[3], const char[] targetName, float damage = 105.0, bool emitSound = true) { - int laser = CreateLaser(origin, targetName, TURRET_LASER_COLOR, damage, 1.0, 0.2); + int laser = CreateLaser(origin, targetName, TURRET_LASER_COLOR, damage, 1.0, 0.1); if(emitSound) EmitSoundToAll(SOUND_LASER_FIRE, laser, SNDCHAN_WEAPON, .flags = SND_CHANGEPITCH, .pitch = 150); turretIsActiveLaser[laser] = true; @@ -594,10 +595,16 @@ static char IGNORE_TRACE[MAX_IGNORE_TRACE][] = { "env_physics_blocker", "env_player_blocker" };*/ +#define MAX_WHITELISTED_AUTO_AIM_TARGETS 3 +static char WHITELISTED_AUTO_AIM_TARGETS[MAX_WHITELISTED_AUTO_AIM_TARGETS][] = { + "tank_rock", + "infected", + "witch" +}; -bool Filter_ManualTarget(int entity, int contentsMask) { - if(entity == 0) return true; +bool Filter_ManualTarget(int entity, int contentsMask, int data) { + if(entity == 0 || entity == data) return true; if(entity == manualTarget || entity == manualTargetter) return false; return true; /*static char classname[32]; @@ -610,51 +617,46 @@ bool Filter_ManualTarget(int entity, int contentsMask) { return true;*/ } -#define MAX_WHITELISTED_AUTO_AIM_TARGETS 2 -static char WHITELISTED_AUTO_AIM_TARGETS[MAX_WHITELISTED_AUTO_AIM_TARGETS][] = { - "infected", - "witch" -}; +bool Filter_ManualTargetSights(int entity, int contentsMask, int data) { + if(entity == 0 || entity == data) return true; + if(entity == manualTarget || entity == manualTargetter) return false; + if(entity <= MaxClients) return GetClientTeam(entity) == 3; + static char classname[32]; + GetEntityClassname(entity, classname, sizeof(classname)); + for(int i = 0; i < MAX_WHITELISTED_AUTO_AIM_TARGETS; i++) { + if(StrEqual(WHITELISTED_AUTO_AIM_TARGETS[i], classname)) { + return false; + } + } + return true; +} + + public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3], float angles[3], int& weapon, int& subtype, int& cmdnum, int& tickcount, int& seed, int mouse[2]) { - if(client == manualTargetter && turretCount > 0) { - static float pos[3], orgPos[3]; - static char classname[32]; + if(client == manualTargetter && turretCount > 0 && tickcount % 3 == 0) { + static float pos[3], aimPos[3], orgPos[3]; GetClientEyePosition(client, orgPos); // Run a ray trace to find a suitable position // TODO: Possibly run per-turret for more accurate preview... but it's already lag fest TR_TraceRayFilter(orgPos, angles, MASK_SHOT, RayType_Infinite, Filter_ManualTarget); - if(!IsValidEntity(manualTarget)) manualTarget = CreateTarget(pos, MANUAL_TARGETNAME); + if(!IsValidEntity(manualTarget)) manualTarget = CreateTarget(aimPos, MANUAL_TARGETNAME); // Disable aim snapping if player is holding WALK (which is apparently IN_SPEED) bool aimSnapping = ~buttons & IN_SPEED > 0; int targetEntity = TR_GetEntityIndex(); - TR_GetEndPosition(pos); + TR_GetEndPosition(aimPos); - if(aimSnapping && targetEntity > 0) { - if(targetEntity > MaxClients) { - // Check if aimed non-player entity is an entity to be auto aimed at - GetEntityClassname(targetEntity, classname, sizeof(classname)); - for(int i = 0; i < MAX_WHITELISTED_AUTO_AIM_TARGETS; i++) { - if(StrEqual(WHITELISTED_AUTO_AIM_TARGETS[i], classname)) { - GetEntPropVector(targetEntity, Prop_Send, "m_vecOrigin", pos); - pos[2] += 40.0; - break; - } - } - } else if(GetClientTeam(targetEntity) == 3) { - // Target is an infected player, auto aim - GetClientEyePosition(targetEntity, pos); - pos[2] -= 10.0; - } - } - TeleportEntity(manualTarget, pos, NULL_VECTOR, NULL_VECTOR); + if(aimSnapping) + ComputeAutoAim(targetEntity, aimPos); + + TeleportEntity(manualTarget, aimPos, NULL_VECTOR, NULL_VECTOR); if(buttons & IN_ATTACK) { - PhysicsExplode(pos, 20, 20.0, true); - TE_SetupExplodeForce(pos, 20.0, 20.0); + PhysicsExplode(aimPos, 20, 20.0, true); + TE_SetupExplodeForce(aimPos, 20.0, 20.0); } // Activate all turrets @@ -662,10 +664,19 @@ public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3 while ((entity = FindEntityByClassname(entity, "info_particle_system")) != INVALID_ENT_REFERENCE) { if(view_as(turretState[entity]) > 0) { GetEntPropVector(entity, Prop_Send, "m_vecOrigin", orgPos); - TE_SetupBeamPoints(orgPos, pos, g_iLaserIndex, 0, 0, 1, 0.1, 0.1, 0.1, 0, 0.0, COLOR_RED, 1); - TE_SendToAll(); if(buttons & IN_ATTACK) { - FireTurret(pos, MANUAL_TARGETNAME, cv_manualBaseDamage.FloatValue, tickcount % 10 == 0); + FireTurret(orgPos, MANUAL_TARGETNAME, cv_manualBaseDamage.FloatValue, tickcount % 6 == 0); + } else { + TR_TraceRayFilter(orgPos, aimPos, MASK_SOLID, RayType_EndPoint, Filter_ManualTargetSights, targetEntity); + pos = aimPos; + if(TR_DidHit()) { + TR_GetEndPosition(pos); + TE_SetupBeamPoints(orgPos, pos, g_iLaserIndex, 0, 0, 1, 0.1, 0.1, 0.1, 0, 0.0, COLOR_RED_LIGHT, 1); + } else { + TE_SetupBeamPoints(orgPos, aimPos, g_iLaserIndex, 0, 0, 1, 0.1, 0.1, 0.1, 0, 0.0, COLOR_RED, 2); + } + // if(aimSnapping) ComputeAutoAim(TR_GetEntityIndex(), pos); + TE_SendToAll(); } } } @@ -677,6 +688,31 @@ public Action OnPlayerRunCmd(int client, int& buttons, int& impulse, float vel[3 return Plugin_Continue; } +bool ComputeAutoAim(int possibleTarget, float pos[3]) { + + static char classname[64]; + + if(possibleTarget > 0) { + if(possibleTarget > MaxClients) { + // Check if aimed non-player entity is an entity to be auto aimed at + GetEntityClassname(possibleTarget, classname, sizeof(classname)); + for(int i = 0; i < MAX_WHITELISTED_AUTO_AIM_TARGETS; i++) { + if(StrEqual(WHITELISTED_AUTO_AIM_TARGETS[i], classname)) { + GetEntPropVector(possibleTarget, Prop_Send, "m_vecOrigin", pos); + pos[2] += 40.0; + return true; + } + } + } else if(GetClientTeam(possibleTarget) == 3) { + // Target is an infected player, auto aim + GetClientEyePosition(possibleTarget, pos); + pos[2] -= 15.0; + return true; + } + } + return false; +} + public Action Timer_Kill(Handle h, int target) { if(IsValidEntity(target)) // TODO: See if necessary AcceptEntityInput(target, "Kill");