mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 13:53:45 +03:00
Upload
This commit is contained in:
151
gamemodes/terrortown/entities/entities/ttt_hat_deerstalker.lua
Normal file
151
gamemodes/terrortown/entities/entities/ttt_hat_deerstalker.lua
Normal 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
|
||||
Reference in New Issue
Block a user