mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
Upload
This commit is contained in:
126
lua/entities/obj_vj_gib/init.lua
Normal file
126
lua/entities/obj_vj_gib/init.lua
Normal file
@@ -0,0 +1,126 @@
|
||||
--[[
|
||||
| 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 (!file.Exists("autorun/vj_base_autorun.lua","LUA")) then return end
|
||||
AddCSLuaFile("shared.lua")
|
||||
include("shared.lua")
|
||||
/*--------------------------------------------------
|
||||
*** Copyright (c) 2012-2023 by DrVrej, All rights reserved. ***
|
||||
No parts of this code or any of its contents may be reproduced, copied, modified or adapted,
|
||||
without the prior written consent of the author, unless otherwise indicated for stand-alone materials.
|
||||
--------------------------------------------------*/
|
||||
ENT.BloodType = "Red" -- Uses the same values as a VJ NPC
|
||||
ENT.Collide_Decal = "Default"
|
||||
ENT.Collide_DecalChance = 3
|
||||
ENT.CollideSound = "Default" -- Make it a table to use custom sounds!
|
||||
ENT.CollideSoundLevel = 60
|
||||
ENT.CollideSoundPitch = VJ_Set(90, 100)
|
||||
ENT.IsStinky = false -- Is this a disgusting stinky gib??
|
||||
|
||||
ENT.NextStinkyTime = 0
|
||||
|
||||
local stinkyMatTypes = {alienflesh=true, antlion=true, armorflesh=true, bloodyflesh=true, flesh=true, zombieflesh=true, player=true}
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
function ENT:Initialize()
|
||||
self:PhysicsInit(MOVETYPE_VPHYSICS)
|
||||
self:SetMoveType(MOVETYPE_VPHYSICS) -- Use MOVETYPE_NONE for testing, makes the entity freeze!
|
||||
self:SetSolid(MOVETYPE_VPHYSICS)
|
||||
if GetConVar("vj_npc_gibcollidable"):GetInt() == 0 then self:SetCollisionGroup(1) end
|
||||
|
||||
-- Physics Functions
|
||||
local physObj = self:GetPhysicsObject()
|
||||
if IsValid(physObj) then
|
||||
physObj:Wake()
|
||||
|
||||
-- Stinky system
|
||||
if stinkyMatTypes[physObj:GetMaterial()] then
|
||||
self.IsStinky = true
|
||||
end
|
||||
end
|
||||
|
||||
local hp = self:OBBMaxs():Distance(self:OBBMins())
|
||||
self:SetMaxHealth(hp)
|
||||
self:SetHealth(hp)
|
||||
|
||||
-- Setup
|
||||
self:InitialSetup()
|
||||
|
||||
-- Used to correct the blood data (Ex: Eating system uses this!)
|
||||
local bloodData = self.BloodData
|
||||
if bloodData then
|
||||
bloodData.Decal = self.Collide_Decal
|
||||
else
|
||||
self.BloodData = {Decal = self.Collide_Decal}
|
||||
end
|
||||
|
||||
if GetConVar("vj_npc_sd_gibbing"):GetInt() == 1 then self.CollideSound = "" end
|
||||
if GetConVar("vj_npc_novfx_gibdeath"):GetInt() == 1 then self.Collide_Decal = "" end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
local defCollideSds = {"physics/flesh/flesh_squishy_impact_hard1.wav","physics/flesh/flesh_squishy_impact_hard2.wav","physics/flesh/flesh_squishy_impact_hard3.wav","physics/flesh/flesh_squishy_impact_hard4.wav"}
|
||||
--
|
||||
function ENT:InitialSetup()
|
||||
if self.CollideSound == "Default" then
|
||||
self.CollideSound = defCollideSds
|
||||
end
|
||||
|
||||
if self.Collide_Decal == "Default" then
|
||||
local bloodType = self.BloodType
|
||||
if bloodType == "Red" then
|
||||
self.Collide_Decal = "VJ_Blood_Red"
|
||||
elseif bloodType == "Yellow" then
|
||||
self.Collide_Decal = "VJ_Blood_Yellow"
|
||||
elseif bloodType == "Green" then
|
||||
self.Collide_Decal = "VJ_Blood_Green"
|
||||
elseif bloodType == "Orange" then
|
||||
self.Collide_Decal = "VJ_Blood_Orange"
|
||||
elseif bloodType == "Blue" then
|
||||
self.Collide_Decal = "VJ_Blood_Blue"
|
||||
elseif bloodType == "Purple" then
|
||||
self.Collide_Decal = "VJ_Blood_Purple"
|
||||
elseif bloodType == "White" then
|
||||
self.Collide_Decal = "VJ_Blood_White"
|
||||
elseif bloodType == "Oil" then
|
||||
self.Collide_Decal = "VJ_Blood_Oil"
|
||||
end
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
function ENT:Think()
|
||||
-- Stinky gib! yuck!
|
||||
if self.IsStinky && self.NextStinkyTime < CurTime() then
|
||||
sound.EmitHint(SOUND_CARCASS, self:GetPos(), 400, 0.15, self) // SOUND_MEAT = Do NOT use this because we would need to call "GetLoudestSoundHint" twice for each sound type!
|
||||
self.NextStinkyTime = CurTime() + 2
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
function ENT:PhysicsCollide(data, phys)
|
||||
-- Effects
|
||||
local velSpeed = phys:GetVelocity():Length()
|
||||
local randCollideSd = VJ_PICK(self.CollideSound)
|
||||
if randCollideSd != false && velSpeed > 18 then
|
||||
self:EmitSound(randCollideSd, self.CollideSoundLevel, math.random(self.CollideSoundPitch.a, self.CollideSoundPitch.b))
|
||||
end
|
||||
|
||||
if self.Collide_Decal != "" && velSpeed > 18 && !data.Entity && math.random(1, self.Collide_DecalChance) == 1 then
|
||||
self:SetLocalPos(Vector(self:GetPos().x, self:GetPos().y, self:GetPos().z + 4)) -- Because the entity is too close to the ground
|
||||
local tr = util.TraceLine({
|
||||
start = self:GetPos(),
|
||||
endpos = self:GetPos() - (data.HitNormal*-30),
|
||||
filter = self
|
||||
})
|
||||
util.Decal(self.Collide_Decal, tr.HitPos + tr.HitNormal, tr.HitPos - tr.HitNormal)
|
||||
//util.Decal(self.Collide_Decal,start,endpos)
|
||||
end
|
||||
end
|
||||
---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
function ENT:OnTakeDamage(dmginfo)
|
||||
self:GetPhysicsObject():AddVelocity(dmginfo:GetDamageForce() * 0.1)
|
||||
end
|
||||
29
lua/entities/obj_vj_gib/shared.lua
Normal file
29
lua/entities/obj_vj_gib/shared.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
--[[
|
||||
| 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 (!file.Exists("autorun/vj_base_autorun.lua","LUA")) then return end
|
||||
|
||||
ENT.Base = "base_gmodentity"
|
||||
ENT.Type = "anim"
|
||||
ENT.PrintName = "Gib Base"
|
||||
ENT.Author = "DrVrej"
|
||||
ENT.Contact = "http://steamcommunity.com/groups/vrejgaming"
|
||||
ENT.Information = "Gibs for SNPCs"
|
||||
ENT.Category = "VJ Base"
|
||||
|
||||
ENT.Spawnable = false
|
||||
ENT.AdminSpawnable = false
|
||||
|
||||
ENT.IsVJBase_Gib = true
|
||||
ENT.IsVJBaseCorpse = true
|
||||
|
||||
if CLIENT then
|
||||
function ENT:Draw() self:DrawModel() end
|
||||
end
|
||||
Reference in New Issue
Block a user