mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
102 lines
2.6 KiB
Lua
102 lines
2.6 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/
|
|
--]]
|
|
|
|
if (SERVER) then
|
|
AddCSLuaFile();
|
|
end;
|
|
|
|
DEFINE_BASECLASS("base_entity");
|
|
|
|
ENT.PrintName = "Ladder (BASE)";
|
|
ENT.Category = "Ladders";
|
|
ENT.Spawnable = false;
|
|
ENT.AdminOnly = false;
|
|
ENT.Model = Model("models/props_c17/metalladder001.mdl");
|
|
ENT.RenderGroup = RENDERGROUP_BOTH;
|
|
|
|
if (SERVER) then
|
|
|
|
function ENT:Initialize()
|
|
self:SetModel(self.Model);
|
|
self:SetSolid(SOLID_VPHYSICS);
|
|
self:PhysicsInit(SOLID_VPHYSICS);
|
|
self:SetUseType(SIMPLE_USE);
|
|
self:SetCollisionGroup(COLLISION_GROUP_WEAPON);
|
|
local phys = self:GetPhysicsObject();
|
|
|
|
if (IsValid(phys)) then
|
|
phys:EnableMotion(false);
|
|
end;
|
|
|
|
self:UpdateLadder(true);
|
|
end;
|
|
|
|
function ENT:UpdateLadder(bCreate)
|
|
if (bCreate) then
|
|
local oldAngs = self:GetAngles();
|
|
|
|
self:SetAngles(Angle(0, 0, 0));
|
|
|
|
local pos = self:GetPos();
|
|
local dist = self:OBBMaxs().x + 17;
|
|
local dismountDist = self:OBBMaxs().x + 49;
|
|
local bottom = self:LocalToWorld(Vector(0, 0, self:OBBMins().z));
|
|
local top = self:LocalToWorld(Vector(0, 0, self:OBBMaxs().z));
|
|
|
|
for k, v in pairs(self:GetChildren()) do
|
|
SafeRemoveEntity(v);
|
|
end;
|
|
|
|
self.ladder = ents.Create("func_useableladder");
|
|
self.ladder:SetPos(pos + self:GetForward() * dist);
|
|
self.ladder:SetKeyValue("point0", tostring(bottom + self:GetForward() * dist));
|
|
self.ladder:SetKeyValue("point1", tostring(top + self:GetForward() * dist));
|
|
self.ladder:SetKeyValue("targetname", "zladder_" .. self:EntIndex());
|
|
self.ladder:SetParent(self);
|
|
self.ladder:Spawn();
|
|
|
|
self.bottomDismount = ents.Create("info_ladder_dismount");
|
|
self.bottomDismount:SetPos(bottom + self:GetForward() * dismountDist);
|
|
self.bottomDismount:SetKeyValue("laddername", "zladder_" .. self:EntIndex());
|
|
self.bottomDismount:SetParent(self);
|
|
self.bottomDismount:Spawn();
|
|
|
|
self.topDismount = ents.Create("info_ladder_dismount");
|
|
self.topDismount:SetPos(top - self:GetForward() * dist);
|
|
self.topDismount:SetKeyValue("laddername", "zladder_" .. self:EntIndex());
|
|
self.topDismount:SetParent(self);
|
|
self.topDismount:Spawn();
|
|
|
|
self.ladder:Activate();
|
|
|
|
self:SetAngles(oldAngs);
|
|
else
|
|
self.ladder:Activate();
|
|
end;
|
|
end;
|
|
|
|
function ENT:Think()
|
|
if (IsValid(self.ladder)) then
|
|
self:UpdateLadder();
|
|
self:NextThink(CurTime() + 1);
|
|
return true;
|
|
end;
|
|
end;
|
|
|
|
elseif (CLIENT) then
|
|
|
|
function ENT:Initialize()
|
|
self:SetSolid(SOLID_VPHYSICS);
|
|
end;
|
|
|
|
function ENT:Draw()
|
|
self:DrawModel();
|
|
end;
|
|
end; |