This commit is contained in:
lifestorm
2024-08-04 22:55:00 +03:00
parent 8064ba84d8
commit 73479cff9e
7338 changed files with 1718883 additions and 14 deletions

View File

@@ -0,0 +1,151 @@
--[[
| 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/
--]]
AddCSLuaFile()
ENT.Type = "anim"
ENT.Base = "base_anim"
ENT.Model = Model("models/ttt/deerstalker.mdl")
ENT.CanHavePrints = false
ENT.CanUseKey = true
AccessorFuncDT(ENT, "worn", "BeingWorn")
function ENT:SetupDataTables()
self:DTVar("Bool", 0, "worn")
end
function ENT:Initialize()
self:SetBeingWorn(true)
self:SetModel(self.Model)
self:DrawShadow(false)
-- don't physicsinit the ent here, because physicsing and then setting
-- movetype none is 1) a waste of memory, 2) broken
self:SetMoveType(MOVETYPE_NONE)
self:SetSolid(SOLID_NONE)
self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
if SERVER then
self.Wearer = self:GetParent()
self:AddEffects(bit.bor(EF_BONEMERGE, EF_BONEMERGE_FASTCULL, EF_PARENT_ANIMATES))
end
end
if SERVER then
local ttt_hats_reclaim = CreateConVar("ttt_detective_hats_reclaim", "1")
local ttt_hats_innocent = CreateConVar("ttt_detective_hats_reclaim_any", "0")
function ENT:OnRemove()
self:SetBeingWorn(false)
end
function ENT:Drop(dir)
local ply = self:GetParent()
ply.hat = nil
self:SetParent(nil)
self:SetBeingWorn(false)
self:SetUseType(SIMPLE_USE)
-- only now physics this entity
self:PhysicsInit(SOLID_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
-- position at head
if IsValid(ply) then
local bone = ply:LookupBone("ValveBiped.Bip01_Head1")
if bone then
local pos, ang = ply:GetBonePosition(bone)
self:SetPos(pos)
self:SetAngles(ang)
else
local pos = ply:GetPos()
pos.z = pos.z + 68
self:SetPos(pos)
end
end
-- physics push
local phys = self:GetPhysicsObject()
if IsValid(phys) then
phys:SetMass(10)
if IsValid(ply) then
phys:SetVelocityInstantaneous(ply:GetVelocity())
end
if not dir then
phys:ApplyForceCenter(Vector(0, 0, 1200))
else
phys:ApplyForceCenter(Vector(0, 0, 700) + dir * 500)
end
phys:AddAngleVelocity(VectorRand() * 200)
phys:Wake()
end
end
local function CanEquipHat(ply)
return not IsValid(ply.hat) and
(ttt_hats_innocent:GetBool() or ply:GetRole() == ROLE_DETECTIVE)
end
function ENT:UseOverride(ply)
if not ttt_hats_reclaim:GetBool() then return end
if IsValid(ply) and not self:GetBeingWorn() then
if GetRoundState() != ROUND_ACTIVE then
SafeRemoveEntity(self)
return
elseif not CanEquipHat(ply) then
return
end
sound.Play("weapon.ImpactSoft", self:GetPos(), 75, 100, 1)
self:SetMoveType(MOVETYPE_NONE)
self:SetSolid(SOLID_NONE)
self:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
self:SetParent(ply)
self.Wearer = ply
ply.hat = self
self:SetBeingWorn(true)
LANG.Msg(ply, "hat_retrieve")
end
end
local function TestHat(ply, cmd, args)
local hat = ents.Create("ttt_hat_deerstalker")
hat:SetPos(ply:GetPos() + Vector(0,0,70))
hat:SetAngles(ply:GetAngles())
hat:SetParent(ply)
ply.hat = hat
hat:Spawn()
end
concommand.Add("ttt_debug_testhat", TestHat, nil, nil, FCVAR_CHEAT)
end