mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
205 lines
9.7 KiB
Lua
205 lines
9.7 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/
|
|
--]]
|
|
|
|
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.Model = {"models/vj_hlr/hl2b/combine_soldier.mdl"} -- The game will pick a random model from the table when the SNPC is spawned | Add as many as you want
|
|
ENT.StartHealth = 60
|
|
ENT.HullType = HULL_HUMAN
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
ENT.VJ_NPC_Class = {"CLASS_COMBINE"} -- NPCs with the same class with be allied to each other
|
|
ENT.BloodColor = "Red" -- The blood type, this will determine what it should use (decal, particle, etc.)
|
|
ENT.CustomBlood_Particle = {"blood_impact_red_01_mist"}
|
|
ENT.MeleeAttackDamage = 10
|
|
ENT.FootStepTimeRun = 0.25 -- Next foot step sound when it is running
|
|
ENT.FootStepTimeWalk = 0.5 -- Next foot step sound when it is walking
|
|
ENT.HasGrenadeAttack = true -- Should the SNPC have a grenade attack?
|
|
ENT.GrenadeAttackModel = "models/weapons/w_npcnade.mdl" -- The model for the grenade entity
|
|
ENT.GrenadeAttackAttachment = "righthand" -- The attachment that the grenade will spawn at | false = Custom position
|
|
ENT.AnimTbl_WeaponAttackSecondary = {"vjseq_shoot_ar2grenade"}
|
|
-- ====== Flinching Variables ====== --
|
|
ENT.CanFlinch = 1 -- 0 = Don't flinch | 1 = Flinch at any damage | 2 = Flinch only from certain damages
|
|
ENT.AnimTbl_Flinch = {"vjges_flinch_gesture"} -- If it uses normal based animation, use this
|
|
-- ====== Sound File Paths ====== --
|
|
-- Leave blank if you don't want any sounds to play
|
|
//ENT.SoundTbl_FootStep = {"npc/combine_soldier/gear1.wav","npc/combine_soldier/gear2.wav","npc/combine_soldier/gear3.wav","npc/combine_soldier/gear4.wav","npc/combine_soldier/gear5.wav","npc/combine_soldier/gear6.wav"}
|
|
ENT.SoundTbl_CombatIdle = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/go_alert1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/go_alert2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/go_alert3.wav",
|
|
}
|
|
ENT.SoundTbl_LostEnemy = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_long1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_long2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_long3.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_short1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_short2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/lost_short3.wav",
|
|
}
|
|
ENT.SoundTbl_Alert = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/announce1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/announce2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/announce3.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/refind_enemy1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/refind_enemy2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/refind_enemy3.wav",
|
|
}
|
|
ENT.SoundTbl_GrenadeAttack = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/throw_grenade1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/throw_grenade2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/throw_grenade3.wav",
|
|
}
|
|
ENT.SoundTbl_OnGrenadeSight = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade3.wav",
|
|
}
|
|
ENT.SoundTbl_OnDangerSight = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/spot_grenade3.wav",
|
|
}
|
|
ENT.SoundTbl_OnKilledEnemy = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/player_dead1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/player_dead2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/player_dead3.wav",
|
|
}
|
|
ENT.SoundTbl_AllyDeath = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/man_down1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/man_down2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/man_down3.wav",
|
|
}
|
|
ENT.SoundTbl_Pain = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/assault1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/assault2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/assault3.wav",
|
|
}
|
|
ENT.SoundTbl_Death = {
|
|
"vj_hlr/hl2b_npc/combine_soldier/die1.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/die2.wav",
|
|
"vj_hlr/hl2b_npc/combine_soldier/die3.wav",
|
|
}
|
|
|
|
/* -- Vault over objects test
|
|
ENT.CanClimb = true
|
|
ENT.IsClimbing = false
|
|
ENT.NextClimbT = 0
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:CustomOnThink()
|
|
if self.CanClimb == true && !self.Dead && self.IsClimbing == false && CurTime() > self.NextClimbT then
|
|
local anim = false
|
|
local finalpos = self:GetPos()
|
|
local tr1 = util.TraceLine({start = self:GetPos() + self:GetUp()*32, endpos = self:GetPos() + self:GetUp()*32 +self:GetForward() *200, filter = function(ent) if (ent:GetClass() == "prop_physics") then return true end end}) -- 32
|
|
local tru = util.TraceLine({start = self:GetPos(), endpos = self:GetPos() + self:GetUp()*100, filter = self})
|
|
if !IsValid(tru.Entity) then
|
|
if IsValid(tr1.Entity) then
|
|
anim = "vjseq_Run_jumpup_32"
|
|
finalpos = tr1.HitPos +self:GetForward() *25
|
|
end
|
|
if anim != false then
|
|
-- VJ_CreateTestObject(tr1.StartPos,self:GetAngles(),Color(0,0,255))
|
|
-- VJ_CreateTestObject(finalpos,self:GetAngles(),Color(0,255,0))
|
|
self:SetGroundEntity(NULL)
|
|
self.IsClimbing = true
|
|
timer.Simple(1.21,function()
|
|
if IsValid(self) then
|
|
self:SetPos(finalpos)
|
|
end
|
|
end)
|
|
self:VJ_ACT_PLAYACTIVITY(anim,true,false,true,0,{},function(vsched)
|
|
vsched.RunCode_OnFinish = function()
|
|
self.IsClimbing = false
|
|
end
|
|
end)
|
|
end
|
|
self.NextClimbT = CurTime() + 0.1
|
|
end
|
|
end
|
|
end*/
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:CustomOnSetupWeaponHoldTypeAnims(hType)
|
|
//self.WeaponAnimTranslations[ACT_RANGE_ATTACK1] = ACT_RANGE_ATTACK1 -- No need to translate
|
|
self.WeaponAnimTranslations[ACT_GESTURE_RANGE_ATTACK1] = ACT_GESTURE_RANGE_ATTACK_AR2
|
|
//self.WeaponAnimTranslations[ACT_RANGE_ATTACK1_LOW] = ACT_RANGE_ATTACK1_LOW -- No need to translate
|
|
//self.WeaponAnimTranslations[ACT_RELOAD] = ACT_RELOAD -- No need to translate
|
|
//self.WeaponAnimTranslations[ACT_RELOAD_LOW] = ACT_RELOAD_LOW -- No need to translate
|
|
self.WeaponAnimTranslations[ACT_COVER_LOW] = {ACT_COVER_LOW, "vjseq_crouch_leanwall_idle01"}
|
|
|
|
//self.WeaponAnimTranslations[ACT_IDLE] = ACT_IDLE -- No need to translate
|
|
//self.WeaponAnimTranslations[ACT_IDLE_ANGRY] = ACT_IDLE_ANGRY -- No need to translate
|
|
|
|
//self.WeaponAnimTranslations[ACT_WALK] = ACT_WALK -- No need to translate
|
|
//self.WeaponAnimTranslations[ACT_WALK_AIM] = ACT_WALK_AIM -- No need to translate
|
|
self.WeaponAnimTranslations[ACT_WALK_CROUCH] = ACT_WALK_CROUCH_RIFLE
|
|
self.WeaponAnimTranslations[ACT_WALK_CROUCH_AIM] = ACT_WALK_CROUCH_AIM_RIFLE
|
|
|
|
//self.WeaponAnimTranslations[ACT_RUN] = ACT_RUN -- No need to translate
|
|
//self.WeaponAnimTranslations[ACT_RUN_AIM] = ACT_RUN_AIM -- No need to translate
|
|
self.WeaponAnimTranslations[ACT_RUN_CROUCH] = ACT_RUN_CROUCH_RIFLE
|
|
self.WeaponAnimTranslations[ACT_RUN_CROUCH_AIM] = ACT_RUN_CROUCH_AIM_RIFLE
|
|
return true
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:OnPlayCreateSound(sdData, sdFile)
|
|
if VJ_HasValue(self.SoundTbl_Death,sdFile) then
|
|
VJ_EmitSound(self,"vj_hlr/hl2b_npc/combine_soldier/click_terminated.wav")
|
|
return
|
|
end
|
|
if VJ_HasValue(self.DefaultSoundTbl_MeleeAttack,sdFile) then return end
|
|
VJ_EmitSound(self,"vj_hlr/hl2b_npc/combine_soldier/clik.wav")
|
|
timer.Simple(SoundDuration(sdFile), function() if IsValid(self) && sdData:IsPlaying() then VJ_EmitSound(self,"vj_hlr/hl2b_npc/combine_soldier/click_off.wav") end end)
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:CustomOnGrenadeAttack_OnThrow(grenEnt)
|
|
-- Custom grenade model and sounds
|
|
grenEnt.SoundTbl_Idle = {"weapons/grenade/tick1.wav"}
|
|
grenEnt.IdleSoundPitch = VJ_Set(100, 100)
|
|
|
|
local redGlow = ents.Create("env_sprite")
|
|
redGlow:SetKeyValue("model", "vj_base/sprites/vj_glow1.vmt")
|
|
redGlow:SetKeyValue("scale", "0.07")
|
|
redGlow:SetKeyValue("rendermode", "5")
|
|
redGlow:SetKeyValue("rendercolor", "150 0 0")
|
|
redGlow:SetKeyValue("spawnflags", "1") -- If animated
|
|
redGlow:SetParent(grenEnt)
|
|
redGlow:Fire("SetParentAttachment", "fuse", 0)
|
|
redGlow:Spawn()
|
|
redGlow:Activate()
|
|
grenEnt:DeleteOnRemove(redGlow)
|
|
util.SpriteTrail(grenEnt, 1, Color(200,0,0), true, 15, 15, 0.35, 1/(6+6)*0.5, "VJ_Base/sprites/vj_trial1.vmt")
|
|
end
|
|
---------------------------------------------------------------------------------------------------------------------------------------------
|
|
function ENT:CustomOnTakeDamage_BeforeDamage(dmginfo, hitgroup)
|
|
-- Absorb bullet damage
|
|
if dmginfo:IsBulletDamage() then
|
|
if self.HasSounds == true && self.HasImpactSounds == true then VJ_EmitSound(self, "vj_impact_metal/bullet_metal/metalsolid"..math.random(1,10)..".wav", 70) end
|
|
if math.random(1, 3) == 1 then
|
|
dmginfo:ScaleDamage(0.50)
|
|
local spark = ents.Create("env_spark")
|
|
spark:SetKeyValue("Magnitude","1")
|
|
spark:SetKeyValue("Spark Trail Length","1")
|
|
spark:SetPos(dmginfo:GetDamagePosition())
|
|
spark:SetAngles(self:GetAngles())
|
|
spark:SetParent(self)
|
|
spark:Spawn()
|
|
spark:Activate()
|
|
spark:Fire("StartSpark", "", 0)
|
|
spark:Fire("StopSpark", "", 0.001)
|
|
self:DeleteOnRemove(spark)
|
|
else
|
|
dmginfo:ScaleDamage(0.80)
|
|
end
|
|
end
|
|
end |