109 lines
3.7 KiB
Lua
109 lines
3.7 KiB
Lua
local meta = FindMetaTable("Player")
|
|
|
|
function meta:IsDowned()
|
|
return self:GetNWBool('Downed')
|
|
end
|
|
|
|
function meta:MovingDirection(threshold) --This function was made by OpenAI ChatGPT
|
|
threshold = threshold or 0.1
|
|
local vel = self:GetVelocity()
|
|
local forward = self:GetForward()
|
|
local right = self:GetRight()
|
|
local forwardDot = vel:Dot(forward)
|
|
local rightDot = vel:Dot(right)
|
|
|
|
if forwardDot > threshold then
|
|
return "forward"
|
|
elseif forwardDot < -threshold then
|
|
return "backward"
|
|
end
|
|
|
|
if rightDot > threshold then
|
|
return "right"
|
|
elseif rightDot < -threshold then
|
|
return "left"
|
|
end
|
|
|
|
return "stand"
|
|
end
|
|
|
|
hook.Add("CalcMainActivity", "TDMAnimsRevive", function(ply, vel)
|
|
if ply:IsDowned() and ply:GetNWString('SVAnim') == "" then
|
|
local anim1 = ply:LookupSequence("laststand_idle")
|
|
local anim2 = ply:LookupSequence("laststand_crawl_forward")
|
|
local anim3 = ply:LookupSequence("laststand_crawl_backward")
|
|
local anim4 = ply:LookupSequence("laststand_crawl_left")
|
|
local anim5 = ply:LookupSequence("laststand_crawl_right")
|
|
local dir = ply:MovingDirection(4)
|
|
local vel = ply:GetVelocity():Length2D() > 10
|
|
if dir == "forward" and vel then
|
|
return -1, anim2
|
|
elseif dir == "backward" and vel then
|
|
return -1, anim3
|
|
elseif dir == "left" and vel then
|
|
return -1, anim4
|
|
elseif dir == "right" and vel then
|
|
return -1, anim5
|
|
else
|
|
return -1, anim1
|
|
end
|
|
end
|
|
end)
|
|
|
|
hook.Add("Think", "TDMRevive", function()
|
|
local ply = LocalPlayer()
|
|
if ply:IsDowned() and ply:Alive() and !ply:ShouldDrawLocalPlayer() then
|
|
if not model then
|
|
model = ClientsideModel(ply:GetModel())
|
|
end
|
|
model:SetNoDraw(false)
|
|
model:SetAngles(Angle(0,ply:GetAngles().y+10,0))
|
|
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_R_Forearm'), Angle(0,270,0))
|
|
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_L_Forearm'), Angle(0,270,0))
|
|
model:ManipulateBoneAngles(model:LookupBone('ValveBiped.Bip01_R_UpperArm'), Angle(0,270,0))
|
|
model:SetCycle(ply:GetCycle())
|
|
model:SetModel(ply:GetModel())
|
|
|
|
local vel = ply:GetVelocity()
|
|
local anim1 = ply:LookupSequence("laststand_idle")
|
|
local anim2 = ply:LookupSequence("laststand_crawl_forward")
|
|
local anim3 = ply:LookupSequence("laststand_crawl_backward")
|
|
local anim4 = ply:LookupSequence("laststand_crawl_left")
|
|
local anim5 = ply:LookupSequence("laststand_crawl_right")
|
|
local speed = vel:Length2D() > 5
|
|
local dir = ply:MovingDirection(8)
|
|
|
|
if ply:EyeAngles().x > 25 then
|
|
ply:SetEyeAngles(Angle(25, ply:EyeAngles().y, 0))
|
|
end
|
|
if ply:EyeAngles().x < -25 then
|
|
ply:SetEyeAngles(Angle(-25, ply:EyeAngles().y, 0))
|
|
end
|
|
if dir == "forward" and speed then
|
|
model:ResetSequence(anim2)
|
|
elseif dir == "backward" and speed then
|
|
model:ResetSequence(anim3)
|
|
elseif dir == "left" and speed then
|
|
model:ResetSequence(anim4)
|
|
elseif dir == "right" and speed then
|
|
model:ResetSequence(anim5)
|
|
else
|
|
model:ResetSequence(anim1)
|
|
end
|
|
model:SetPos(ply:GetPos()+Vector(0,0,4)+ply:GetForward()*8+ply:GetRight()*8)
|
|
else
|
|
if model then
|
|
model:SetNoDraw(true)
|
|
end
|
|
end
|
|
end)
|
|
|
|
local delay = CurTime()+5
|
|
hook.Add("Think", "TDMApplyCommands", function()
|
|
if delay < CurTime() then
|
|
delay = CurTime()+5
|
|
for k, v in pairs(COD.ApplyCommands["Client"]) do
|
|
RunConsoleCommand(k, v)
|
|
end
|
|
end
|
|
end) |