--[[ | 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-2017 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/humans/group03/female_01.mdl","models/humans/group03/female_02.mdl","models/humans/group03/female_03.mdl","models/humans/group03/female_04.mdl","models/humans/group03/female_06.mdl","models/humans/group03/female_07.mdl"} -- The game will pick a random model from the table when the SNPC is spawned | Add as many as you want ENT.StartHealth = 80 ENT.HullType = HULL_HUMAN --------------------------------------------------------------------------------------------------------------------------------------------- ENT.VJ_NPC_Class = {"CLASS_CITIZEN","CLASS_AMERICA_FRIENDLY","CIVILAN"} ENT.PlayerFriendly = true ENT.MoveOutOfFriendlyPlayersWay = false -- Should the SNPC move out of the way when a friendly player comes close to it? ENT.WeaponSpread = 1.2 ENT.BloodColor = "Red" ENT.SightDistance = 5000 -- How far it can see ENT.BecomeEnemyToPlayer = true ENT.BecomeEnemyToPlayerLevel = 2 -- How many times does the player have to hit the SNPC for it to become enemy? ENT.HasMeleeAttack = true ENT.HasFootStepSound = true -- Should the SNPC make a footstep sound when it's moving? ENT.FootStepSoundLevel = 60 ENT.ShootDistance = 2000 ENT.MeleeAttackDamage = 30 ENT.SquadName = "resistance" -- Squad name, console error will happen if two groups that are enemy and try to squad! ENT.FootStepTimeRun = 0.4 -- Next foot step sound when it is running ENT.FootStepTimeWalk = 0.5 -- Next foot step sound when it is walking ENT.HasGrenadeAttack = false -- Should the SNPC have a grenade attack? ENT.CallForHelp = true -- Does the SNPC call for help? ENT.CallForHelpDistance = 600 -- -- How far away the SNPC's call for help goes | Counted in World Units ENT.HasCallForHelpAnimation = true -- if true, it will play the call for help animation ENT.AnimTbl_CallForHelp = {ACT_SIGNAL_ADVANCE,ACT_SIGNAL_FORWARD,ACT_SIGNAL_GROUP} -- Call For Help Animations ENT.NextCallForHelpTime = 10 -- Time until it calls for help again ENT.WaitForEnemyToComeOutTime1 = 2 -- How much time should it wait until it starts chasing the enemy? | First number in math.random ENT.WaitForEnemyToComeOutTime2 = 3 -- How much time should it wait until it starts chasing the enemy? | Second number in math.random ENT.AnimTbl_Flinch = {ACT_FLINCH_PHYSICS} -- If it uses normal based animation, use this ENT.HasGrenadeAttack = true -- Should the SNPC have a grenade attack? ENT.GrenadeAttackEntity = "npc_grenade_frag" -- The entity that the SNPC throws | Half Life 2 Grenade: "npc_grenade_frag" ENT.GrenadeAttackModel = "models/weapons/w_grenade.mdl" -- The model for the grenade entity -- ====== Animation Variables ====== -- ENT.AnimTbl_GrenadeAttack = {"grenThrow"} -- Grenade Attack Animations ENT.GrenadeAttackAnimationDelay = 0 -- It will wait certain amount of time before playing the animation ENT.GrenadeAttackAnimationFaceEnemy = true -- Should it face the enemy while playing the grenade attack animation? -- ====== Distance & Chance Variables ====== -- ENT.NextThrowGrenadeTime1 = math.random(20,22) -- Time until it runs the throw grenade code again | The first # in math.random ENT.NextThrowGrenadeTime2 = math.random(15,25) -- Time until it runs the throw grenade code again | The second # in math.random ENT.ThrowGrenadeChance = 1 -- Chance that it will throw the grenade | Set to 1 to throw all the time ENT.GrenadeAttackThrowDistance = 1000 -- How far it can throw grenades ENT.GrenadeAttackThrowDistanceClose = 500 -- How close until it stops throwing grenades -- ====== Sound File Paths ====== -- ENT.SoundTbl_FootStep = {"npc/footsteps/hardboot_generic1.wav","npc/footsteps/hardboot_generic2.wav","npc/footsteps/hardboot_generic3.wav","npc/footsteps/hardboot_generic4.wav","npc/footsteps/hardboot_generic5.wav","npc/footsteps/hardboot_generic6.wav",} ENT.SoundTbl_Idle = { "vo/npc/female01/answer01.wav", "vo/npc/female01/answer02.wav", "vo/npc/female01/answer03.wav", "vo/npc/female01/answer04.wav", "vo/npc/female01/answer05.wav", "vo/npc/female01/answer07.wav", "vo/npc/female01/answer08.wav", "vo/npc/female01/answer09.wav", "vo/npc/female01/answer10.wav", "vo/npc/female01/answer11.wav", "vo/npc/female01/answer12.wav", "vo/npc/female01/answer13.wav", "vo/npc/female01/answer14.wav", "vo/npc/female01/answer15.wav", "vo/npc/female01/answer16.wav", "vo/npc/female01/answer17.wav", "vo/npc/female01/answer18.wav", "vo/npc/female01/answer19.wav", "vo/npc/female01/answer20.wav", "vo/npc/female01/answer21.wav", "vo/npc/female01/answer22.wav", "vo/npc/female01/answer23.wav", "vo/npc/female01/answer24.wav", "vo/npc/female01/answer25.wav", "vo/npc/female01/answer26.wav", "vo/npc/female01/answer27.wav", "vo/npc/female01/answer28.wav", "vo/npc/female01/answer29.wav", "vo/npc/female01/answer30.wav", "vo/npc/female01/answer31.wav", "vo/npc/female01/answer32.wav", "vo/npc/female01/answer33.wav", "vo/npc/female01/answer34.wav", "vo/npc/female01/answer35.wav", "vo/npc/female01/answer36.wav", "vo/npc/female01/answer37.wav", "vo/npc/female01/answer38.wav", "vo/npc/female01/answer39.wav", "vo/npc/female01/answer40.wav", "vo/npc/female01/question01.wav", "vo/npc/female01/question02.wav", "vo/npc/female01/question03.wav", "vo/npc/female01/question04.wav", "vo/npc/female01/question05.wav", "vo/npc/female01/question06.wav", "vo/npc/female01/question07.wav", "vo/npc/female01/question08.wav", "vo/npc/female01/question09.wav", "vo/npc/female01/question10.wav", "vo/npc/female01/question11.wav", "vo/npc/female01/question12.wav", "vo/npc/female01/question13.wav", "vo/npc/female01/question14.wav", "vo/npc/female01/question15.wav", "vo/npc/female01/question16.wav", "vo/npc/female01/question17.wav", "vo/npc/female01/question18.wav", "vo/npc/female01/question19.wav", "vo/npc/female01/question20.wav", "vo/npc/female01/question21.wav", "vo/npc/female01/question22.wav", "vo/npc/female01/question23.wav", "vo/npc/female01/question25.wav", "vo/npc/female01/question26.wav", "vo/npc/female01/question27.wav", "vo/npc/female01/question28.wav", "vo/npc/female01/question29.wav", "vo/npc/female01/question30.wav", "vo/npc/female01/question31.wav", "vo/npc/female01/upthere01.wav", "vo/npc/female01/upthere02.wav", "vo/npc/female01/vanswer01.wav", "vo/npc/female01/vanswer02.wav", "vo/npc/female01/vanswer03.wav", "vo/npc/female01/vanswer04.wav", "vo/npc/female01/vanswer05.wav", "vo/npc/female01/vanswer06.wav", "vo/npc/female01/vanswer07.wav", "vo/npc/female01/vanswer08.wav", "vo/npc/female01/vanswer09.wav", "vo/npc/female01/vanswer10.wav", "vo/npc/female01/vanswer11.wav", "vo/npc/female01/vanswer12.wav", "vo/npc/female01/vanswer13.wav", "vo/npc/female01/vanswer14.wav", "vo/npc/female01/vquestion01.wav", "vo/npc/female01/vquestion02.wav", "vo/npc/female01/vquestion03.wav", "vo/npc/female01/vquestion04.wav", "vo/npc/female01/vquestion05.wav", "vo/npc/female01/vquestion06.wav", "vo/npc/female01/vquestion07.wav", } ENT.SoundTbl_Alert = { "vo/npc/female01/behindyou01.wav", "vo/npc/female01/behindyou02.wav", "vo/npc/female01/busy02.wav", "vo/npc/female01/heretheycome01.wav", "vo/npc/female01/incoming02.wav", } ENT.SoundTbl_CombatIdle = { "vo/npc/female01/runforyourlife01.wav", "vo/npc/female01/runforyourlife02.wav", "vo/npc/female01/getdown02.wav", "vo/npc/female01/getgoingsoon.wav", "vo/npc/female01/gethellout.wav", "vo/npc/female01/moan01.wav", "vo/npc/female01/moan02.wav", "vo/npc/female01/moan03.wav", "vo/npc/female01/moan04.wav", "vo/npc/female01/moan05.wav", "vo/npc/female01/upthere01.wav", "vo/npc/female01/upthere02.wav", "vo/npc/female01/help01.wav", } ENT.SoundTbl_OnGrenadeSight = { "vo/npc/female01/cps01.wav", "vo/npc/female01/cps02.wav", "vo/npc/female01/hacks01.wav", "vo/npc/female01/hacks02.wav", } ENT.SoundTbl_Pain = { "vo/npc/female01/pain01.wav", "vo/npc/female01/pain02.wav", "vo/npc/female01/pain03.wav", "vo/npc/female01/pain04.wav", "vo/npc/female01/pain05.wav", "vo/npc/female01/pain06.wav", "vo/npc/female01/pain07.wav", "vo/npc/female01/pain08.wav", "vo/npc/female01/pain09.wav", "vo/npc/female01/myarm01.wav", "vo/npc/female01/myarm02.wav", "vo/npc/female01/mygut02.wav", "vo/npc/female01/myleg01.wav", "vo/npc/female01/myleg02.wav", "vo/npc/female01/imhurt01.wav", "vo/npc/female01/imhurt02.wav", "vo/npc/female01/no01.wav", "vo/npc/female01/no02.wav", } ENT.SoundTbl_Death = { "vo/npc/female01/ow01.wav", "vo/npc/female01/ow02.wav", "vo/npc/female01/pain08.wav", "vo/npc/female01/pain09.wav", "vo/npc/female01/uhoh.wav", } ENT.SoundTbl_FollowPlayer = { "vo/npc/female01/letsgo01.wav", "vo/npc/female01/letsgo02.wav", "vo/npc/female01/leadon01.wav", "vo/npc/female01/leadon02.wav", "vo/npc/female01/squad_reinforce_single01.wav", "vo/npc/female01/squad_reinforce_single02.wav", "vo/npc/female01/squad_reinforce_single03.wav", "vo/npc/female01/squad_reinforce_single04.wav", "vo/npc/female01/squad_follow01.wav", "vo/npc/female01/squad_follow02.wav", "vo/npc/female01/squad_follow03.wav", "vo/npc/female01/squad_follow04.wav", } ENT.SoundTbl_UnFollowPlayer = { "vo/npc/female01/readywhenyouare01.wav", "vo/npc/female01/readywhenyouare02.wav", "vo/npc/female01/outofyourway02.wav", "vo/npc/female01/yeah02.wav", "vo/npc/female01/watchout.wav", "vo/npc/female01/waitingsomebody.wav", "vo/npc/female01/ok01.wav", "vo/npc/female01/ok02.wav", "vo/npc/female01/okimready01.wav", "vo/npc/female01/okimready02.wav", "vo/npc/female01/okimready03.wav", } ENT.SoundTbl_OnPlayerSight = { "vo/npc/female01/nice.wav", "vo/npc/female01/heydoc01.wav", "vo/npc/female01/heydoc02.wav", "vo/npc/female01/freeman.wav", "vo/npc/female01/ahgordon01.wav", "vo/npc/female01/ahgordon02.wav", "vo/npc/female01/goodgod.wav", "vo/npc/female01/doingsomething.wav", "vo/npc/female01/docfreeman01.wav", "vo/npc/female01/docfreeman02.wav", "vo/npc/female01/hi01.wav", "vo/npc/female01/hi02.wav", } ENT.SoundTbl_DamageByPlayer = { "vo/npc/female01/watchout.wav", "vo/npc/female01/watchwhat.wav", "vo/npc/female01/wetrustedyou01.wav", "vo/npc/female01/wetrustedyou02.wav", "vo/npc/female01/notthemanithought01.wav", "vo/npc/female01/notthemanithought02.wav", "vo/npc/female01/stopitfm.wav", } ENT.DefaultSoundTbl_MeleeAttack = {"physics/body/body_medium_impact_hard1.wav","physics/body/body_medium_impact_hard2.wav","physics/body/body_medium_impact_hard3.wav","physics/body/body_medium_impact_hard4.wav","physics/body/body_medium_impact_hard5.wav","physics/body/body_medium_impact_hard6.wav"} ENT.DefaultSoundTbl_MeleeAttackMiss = {"npc/zombie/claw_miss1.wav","npc/zombie/claw_miss2.wav"} ENT.DefaultSoundTbl_Impact = {"physics/flesh/flesh_impact_bullet1.wav","physics/flesh/flesh_impact_bullet2.wav","physics/flesh/flesh_impact_bullet3.wav","physics/flesh/flesh_impact_bullet4.wav","physics/flesh/flesh_impact_bullet5.wav"} ENT.DefaultSoundTbl_MedicAfterHeal = {"items/smallmedkit1.wav"} ENT.HasOnPlayerSight = true --------------------------------------------------------------------------------------------------------------------------------------------- function ENT:CustomOnThink() for k, v in pairs( ents.FindInSphere( self:GetPos( ), 300 ) ) do if v:IsValid() && ((v:IsPlayer() && v:Alive() && GetConVarNumber("ai_ignoreplayers") == 0) || (v:IsNPC() && v != self && v:Disposition(self) != D_LI)) && v:Visible(self) then if v:IsPlayer() and v.SquadName == "vj_combine" then self.PlayerFriendly = false end end end end -------------------------------------------------------------------------------------------------------------------------------------------- function ENT:CustomInitialize() self.Weapon_FiringDistanceFar = self.ShootDistance for k, v in pairs( ents.FindInSphere( self:GetPos( ), 300 ) ) do if v:IsValid() && ((v:IsPlayer() && v:Alive() && GetConVarNumber("ai_ignoreplayers") == 0) || (v:IsNPC() && v != self && v:Disposition(self) != D_LI)) && v:Visible(self) then if v:IsPlayer() and v.SquadName == "vj_combine"then self.PlayerFriendly = false end end end end ENT.BreathSoundPitch1 = 100 ENT.BreathSoundPitch2 = 100 ENT.IdleSoundPitch1 = 100 ENT.IdleSoundPitch2 = 100 ENT.CombatIdleSoundPitch1 = 100 ENT.CombatIdleSoundPitch2 = 100 ENT.OnReceiveOrderSoundPitch1 = 100 ENT.OnReceiveOrderSoundPitch2 = 100 ENT.MoveOutOfPlayersWaySoundPitch1 = 100 ENT.MoveOutOfPlayersWaySoundPitch2 = 100 ENT.BeforeHealSoundPitch1 = 100 ENT.BeforeHealSoundPitch2 = 100 ENT.AfterHealSoundPitch1 = 100 ENT.AfterHealSoundPitch2 = 100 ENT.MedicReceiveHealSoundPitch1 = 100 ENT.MedicReceiveHealSoundPitch2 = 100 ENT.OnPlayerSightSoundPitch1 = 100 ENT.OnPlayerSightSoundPitch2 = 100 ENT.AlertSoundPitch1 = 100 ENT.AlertSoundPitch2 = 100 ENT.CallForHelpSoundPitch1 = 100 ENT.CallForHelpSoundPitch2 = 100 ENT.BecomeEnemyToPlayerPitch1 = 100 ENT.BecomeEnemyToPlayerPitch2 = 100 ENT.SuppressingPitch1 = 100 ENT.SuppressingPitch2 = 100 ENT.WeaponReloadSoundPitch1 = 100 ENT.WeaponReloadSoundPitch2 = 100 ENT.GrenadeAttackSoundPitch1 = 100 ENT.GrenadeAttackSoundPitch2 = 100 ENT.OnGrenadeSightSoundPitch1 = 100 ENT.OnGrenadeSightSoundPitch2 = 100 ENT.OnKilledEnemySoundPitch1 = 100 ENT.OnKilledEnemySoundPitch2 = 100 ENT.PainSoundPitch1 = 100 ENT.PainSoundPitch2 = 100 ENT.ImpactSoundPitch1 = 80 ENT.ImpactSoundPitch2 = 100 ENT.DamageByPlayerPitch1 = 100 ENT.DamageByPlayerPitch2 = 100 ENT.DeathSoundPitch1 = 100 ENT.DeathSoundPitch2 = 100 /*----------------------------------------------- *** Copyright (c) 2012-2017 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. -----------------------------------------------*/