mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
123 lines
2.8 KiB
Lua
123 lines
2.8 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
local PLUGIN = PLUGIN
|
|
|
|
function PLUGIN:PostPlayerDeath(client)
|
|
if (client.rappelling) then
|
|
self:EndRappel(client)
|
|
end
|
|
end
|
|
|
|
function PLUGIN:PlayerLoadout(client)
|
|
if (client.rappelling) then
|
|
self:EndRappel(client)
|
|
end
|
|
end
|
|
|
|
function PLUGIN:DoAnimationEvent(client)
|
|
if (client:GetNetVar("forcedSequence") == client:LookupSequence("rappelloop")) then
|
|
return ACT_INVALID
|
|
end
|
|
end
|
|
|
|
function PLUGIN:OnPlayerHitGround(client, inWater, onFloater, speed)
|
|
if (client.rappelling and client.rappelPos.z - client:GetPos().z > 64) then
|
|
self:EndRappel(client)
|
|
|
|
if (SERVER) then
|
|
client:EmitSound("npc/combine_soldier/zipline_hitground" .. math.random(2) .. ".wav")
|
|
end
|
|
|
|
if (speed >= 196) then
|
|
client:ViewPunch(Angle(7, 0, 0))
|
|
end
|
|
end
|
|
end
|
|
|
|
function PLUGIN:PlayerTick(client, moveData)
|
|
if (client:HasWeapon("rappel_gear")) then
|
|
local onGround = client:OnGround()
|
|
|
|
if (onGround and !client.wasOnGround) then
|
|
client.wasOnGround = true
|
|
elseif (!onGround and client.wasOnGround) then
|
|
client.wasOnGround = false
|
|
|
|
if (!client.rappelling and moveData:KeyDown(IN_WALK) and client:GetMoveType() != MOVETYPE_NOCLIP) then
|
|
self:StartRappel(client)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function PLUGIN:Move(client, moveData)
|
|
if (client.rappelling) then
|
|
local vel = moveData:GetVelocity()
|
|
|
|
local dir = (client.rappelPos - client:GetPos()) * 0.1
|
|
|
|
vel.x = (vel.x + dir.x) * 0.95
|
|
vel.y = (vel.y + dir.y) * 0.95
|
|
|
|
local rappelFalling = false
|
|
|
|
if (!client:OnGround() and (client:EyePos().z) < client.rappelPos.z) then
|
|
rappelFalling = true
|
|
|
|
if (moveData:KeyDown(IN_WALK)) then
|
|
moveData:SetForwardSpeed(0)
|
|
moveData:SetSideSpeed(0)
|
|
|
|
vel.z = math.max(vel.z - 8, -128)
|
|
else
|
|
vel.z = math.max(vel.z - 8, -200)
|
|
end
|
|
end
|
|
|
|
moveData:SetVelocity(vel)
|
|
|
|
if (rappelFalling) then
|
|
if (SERVER) then
|
|
local sequence = client:LookupSequence("rappelloop")
|
|
|
|
if (sequence != -1) then
|
|
client:SetNetVar("forcedSequence", sequence)
|
|
end
|
|
|
|
if (!client.oneTimeRappelSound) then
|
|
client.oneTimeRappelSound = true
|
|
|
|
client:EmitSound("npc/combine_soldier/zipline" .. math.random(2) .. ".wav")
|
|
end
|
|
end
|
|
|
|
if (client:WaterLevel() >= 1) then
|
|
self:EndRappel(client)
|
|
end
|
|
else
|
|
if (SERVER) then
|
|
local sequence = client:LookupSequence("rappelloop")
|
|
|
|
if (sequence != 1 and client:GetNetVar("forcedSequence") == sequence) then
|
|
client:SetNetVar("forcedSequence", nil)
|
|
end
|
|
end
|
|
|
|
local origin = moveData:GetOrigin()
|
|
|
|
if (math.Distance(origin.x, origin.y, client.rappelPos.x, client.rappelPos.y) > 256) then
|
|
self:EndRappel(client)
|
|
end
|
|
end
|
|
end
|
|
end
|