diff --git a/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua b/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua index e2cc321..03e376b 100644 --- a/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua +++ b/beatrun/gamemodes/beatrun/gamemode/player_class/player_beatrun.lua @@ -305,9 +305,7 @@ hook.Add("ShouldCollide", "NoPlayerCollisions", function(ent1, ent2) if ent2.BRCollisionFunc then return ent2:BRCollisionFunc(ent1) else - if ent1.br_Fired or ent2.br_Fired then - return true - end + if (ent1.br_Fired and ent2.br_FiredBy == ent1) or (ent2.br_Fired and ent1.br_FiredBy == ent2) then return true end return false end @@ -316,10 +314,34 @@ hook.Add("ShouldCollide", "NoPlayerCollisions", function(ent1, ent2) if ent2:IsPlayer() and ent1:IsNPC() then return true end end) +local function calc_fov(src, dst) + local v_src = src:Forward() + local v_dst = dst:Forward() + + local result = math.deg(math.acos(v_dst:Dot(v_src) / v_dst:Length())) + + if result != result or (result == math.huge or result == -math.huge) then + result = 0 + end + + return result +end + // i was forced -hook.Add("EntityFireBullets", "thisengineismadebyacrackhead", function(ent, data) +hook.Add("EntityFireBullets", "thisengineismadebyacrackhead", function(ent, data) + if not IsValid(ent) or not isfunction(ent.GetShootPos) or not ent:IsPlayer() then return end + + for i, ply in ipairs(player.GetAll()) do + if ply == ent then continue end + local fov = calc_fov(data.Dir:Angle(), (ply:GetShootPos() - data.Src):Angle()) + if fov > 60 then continue end + + ply.br_FiredBy = ent + timer.Simple(engine.TickInterval()*3, function() if IsValid(ply) then ply.br_FiredBy = nil end end) + end + ent.br_Fired = true - timer.Simple(engine.TickInterval()*2, function() if IsValid(ent) then ent.br_Fired = false end end) + timer.Simple(engine.TickInterval()*3, function() if IsValid(ent) then ent.br_Fired = false end end) end) hook.Add("PhysgunPickup", "AllowPlayerPickup", function(ply, ent) @@ -490,19 +512,4 @@ hook.Add("PlayerSpawn", "ResetStateTransition", function(ply, transition) end) end) -player_manager.RegisterClass("player_beatrun", PLAYER, "player_default")elf:GetSafetyRollTime() > CurTime() -end - -hook.Add("PlayerSpawn", "ResetStateTransition", function(ply, transition) - timer.Simple(0, function() - if transition and IsValid(ply) then - ply:ResetParkourTimes() - ply:SetJumpPower(230) - ply:SetFOV(ply:GetInfoNum("Beatrun_FOV", 110)) - ply:SetCanZoom(false) - ply.ClimbingTrace = nil - end - end) -end) - player_manager.RegisterClass("player_beatrun", PLAYER, "player_default") \ No newline at end of file