This commit is contained in:
lifestorm
2024-08-05 18:40:29 +03:00
parent c4d91bf369
commit 324f19217d
8040 changed files with 1853423 additions and 21 deletions

View File

@@ -0,0 +1,249 @@
--[[
| 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")
/*--------------------------------------------------
=============== Creature SNPC Base ===============
*** Copyright (c) 2012-2020 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.
INFO: Used as a base for creature SNPCs.
--------------------------------------------------*/
ENT.Model = {"models/Combine_turrets/Floor_turret.mdl"}
ENT.StartHealth = 90
ENT.SightAngle = 70
ENT.SightDistance = 3000
ENT.PoseParameterLooking_TurningSpeed = 30
ENT.VJ_NPC_Class = {"CLASS_COMBINE"}
ENT.MovementType = VJ_MOVETYPE_STATIONARY
ENT.CanTurnWhileStationary = false
ENT.HasMeleeAttack = false
ENT.DisableTakeDamageFindEnemy = true
ENT.Medic_CanBeHealed = false
ENT.LastSeenEnemyTimeUntilReset = 0
ENT.CallForHelp = false
ENT.HasItemDropsOnDeath = false
ENT.ItemDropsOnDeathChance = 2
ENT.ItemDropsOnDeath_EntityList = {
"item_battery",
}
ENT.HasRangeAttack = true
ENT.RangeAttackAngleRadius = ENT.SightAngle
ENT.DisableRangeAttackAnimation = true
ENT.DisableDefaultRangeAttackCode = true
ENT.RangeDistance = ENT.SightDistance
ENT.RangeToMeleeDistance = 0
ENT.TimeUntilRangeAttackProjectileRelease = 0
ENT.NextRangeAttackTime = 0.05
ENT.SoundTbl_Breath = {"NPC_FloorTurret.Move",}
ENT.SoundTbl_Idle = {"NPC_FloorTurret.Ping"}
ENT.SoundTbl_LostEnemy = {"NPC_FloorTurret.Retract"}
ENT.SoundTbl_Alert = {"NPC_FloorTurret.Deploy"}
ENT.SoundTbl_Death = {"NPC_FloorTurret.Die"}
ENT.SoundTbl_RangeAttack = {"NPC_FloorTurret.Shoot"}
ENT.NextSoundTime_LostEnemy = VJ_Set(0, 0)
ENT.NextSoundTime_Alert = VJ_Set(0, 0)
ENT.NextSoundTime_Idle = VJ_Set(2, 5.5)
ENT.IdleSoundChance = 1
ENT.IdleSounds_NoRegularIdleOnAlerted = true
ENT.LostEnemySoundLevel = 90
ENT.AlertSoundLevel = 90
--ENT.GibOnDeathDamagesTable = {"All"}
ENT.HasGibOnDeathSounds = false
function ENT:Controller_IntMsg(ply, controlEnt)
ply:ChatPrint("NOTE: Controlling is not really supported for this SNPC!!")
end
function ENT:CustomOnInitialize()
self.TurretLight = ents.Create( "env_sprite" )
self.TurretLight:SetKeyValue( "model","sprites/blueflare1.spr" )
self.TurretLight:SetKeyValue( "rendercolor","50 255 0" )
self.TurretLight:SetPos( self:GetPos() )
self.TurretLight:SetMoveType( MOVETYPE_NONE )
self.TurretLight:SetParent( self )
self.TurretLight:Fire( "SetParentAttachment", "light" )
self.TurretLight:SetKeyValue( "scale","0.2" )
self.TurretLight:SetKeyValue( "rendermode","9" )
self.TurretLight:Spawn()
self:DeleteOnRemove(self.TurretLight)
self.AllowFiring = false
self.HasPlayedActivateSound = false
self.TurretDamaged = false
--self:SetBloodColor(BLOOD_COLOR_MECH)
end
function ENT:CustomOnThink()
self.NextFlinchTime = math.random(3,6)
if self:Health() <= self.StartHealth * 0.5 then
if self.TurretDamaged == false then
ParticleEffect("smoke_gib_01", self:GetPos() + self:OBBCenter(), self:GetAngles(), self)
self.Spark1 = ents.Create("env_spark")
self.Spark1:SetKeyValue("MaxDelay","1")
self.Spark1:SetKeyValue("Magnitude","1")
self.Spark1:SetKeyValue("Spark Trail Length","1")
self.Spark1:SetAngles(self:GetAngles())
self.Spark1:SetParent(self)
self:DeleteOnRemove(self.Spark1)
self.Spark1:Spawn()
self.Spark1:Activate()
self.Spark1:Fire("StartSpark", "", 0)
self.TurretDamaged = true
end
self.Spark1:SetPos(self:GetPos() + self:OBBCenter() + self:GetUp() * math.random(-20,20) + self:GetRight() * math.random(-10,10) + self:GetForward() * math.random(-10,10))
elseif self.TurretDamaged then
self:StopParticles()
self.Spark1:Remove()
self.TurretDamaged = false
end
end
function ENT:CustomOnThink_AIEnabled()
if self.Alerted then
self.TurretLight:SetKeyValue( "rendercolor","255 50 0" )
self:SetSequence("idlealert")
if self.HasPlayedActivateSound == false then
VJ_EmitSound(self,"NPC_FloorTurret.Activate",100,100)
self.HasPlayedActivateSound = true
end
if self.AllowFiring == false then
timer.Simple(0.75,function() if self:IsValid() then self.AllowFiring = true end end)
end
else
self.TurretLight:SetKeyValue( "rendercolor","50 255 0" )
self.AllowFiring = false
self.HasPlayedActivateSound = false
end
end
function ENT:CustomAttackCheck_RangeAttack()
if self.AllowFiring then
return true
else
return false
end
end
-- function ENT:CustomOnCallForHelp(ally)
-- self:EmitSound( "NPC_FloorTurret.Alarm", 110, 100, 1, CHAN_AUTO, SND_NOFLAGS)
-- timer.Simple(1.5,function() if self:IsValid() then self:EmitSound( "NPC_FloorTurret.Alarm", 110, 100, 1, CHAN_AUTO, SND_STOP) end end)
-- end
function ENT:CustomRangeAttackCode()
local expLight = ents.Create("light_dynamic")
expLight:SetKeyValue("brightness", "3")
expLight:SetKeyValue("distance", "150")
expLight:Fire("Color", "0 25 255")
expLight:SetPos(self:GetPos() + self:GetUp() * 50)
expLight:Spawn()
expLight:Activate()
expLight:SetParent(self,1)
expLight:Fire("TurnOn", "", 0)
timer.Simple(0.1,function() if IsValid(expLight) then expLight:Remove() end end)
self:DeleteOnRemove(expLight)
ParticleEffectAttach("vj_rifle_full_blue",PATTACH_POINT_FOLLOW,self,1)
VJ_EmitSound(self,"NPC_FloorTurret.Shoot",100,100)
local bullet = {
Src = self:GetAttachment(1).Pos,
Dir = self:GetEnemy():GetPos() + self:GetUp() * 10 + self:GetEnemy():OBBCenter() - self:GetAttachment(1).Pos,
Spread = Vector(175 / (self.RangeDistance / self:GetEnemy():GetPos():Distance(self:GetPos())),175 / (self.RangeDistance / self:GetEnemy():GetPos():Distance(self:GetPos())),0),
Damage = 4,
TracerName = "AR2Tracer",
-- Callback = function(attacker, tracer)
-- local effectdata = EffectData()
-- effectdata:SetOrigin(tracer.HitPos)
-- effectdata:SetNormal(tracer.HitNormal)
-- effectdata:SetRadius( 5 )
-- util.Effect( "cball_bounce", effectdata )
-- end,
}
self:FireBullets(bullet)
end
function ENT:CustomOnTakeDamage_BeforeDamage(dmginfo, hitgroup)
if !dmginfo:IsExplosionDamage() or dmginfo:GetDamageType() == DMG_CRUSH then
dmginfo:SetDamage(dmginfo:GetDamage() * 0.33 )
if math.random(1, 3) == 1 then
self:EmitSound("weapons/fx/rics/ric1.wav", 82, math.random(85, 115))
local spark = ents.Create("env_spark")
spark:SetPos(dmginfo:GetDamagePosition())
spark:Spawn()
spark:Fire("StartSpark", "", 0)
spark:Fire("StopSpark", "", 0.001)
self:DeleteOnRemove(spark)
end
end
end
function ENT:CustomOnDeath_AfterCorpseSpawned(dmginfo, hitgroup, corpseEnt)
ParticleEffectAttach("explosion_turret_break_pre_smoke",PATTACH_POINT_FOLLOW,corpseEnt,2)
ParticleEffect("explosion_turret_break_sparks",self:GetPos() + self:OBBCenter(),corpseEnt:GetAngles())
ParticleEffect("explosion_turret_break_fire",self:GetPos() + self:OBBCenter(),corpseEnt:GetAngles())
end
function ENT:SetUpGibesOnDeath(dmginfo,hitgroup)
self.HasItemDropsOnDeath = true
ParticleEffect("explosion_turret_break",self:GetPos(),self:GetAngles())
VJ_EmitSound(self,"NPC_FloorTurret.Destruct",100,100)
self:CreateGibEntity("obj_vj_gib","models/combine_turrets/floor_turret_gib1.mdl",{BloodType = "",Pos = self:LocalToWorld(Vector(0,0,30)), CollideSound = {"SolidMetal.ImpactSoft"}})
self:CreateGibEntity("obj_vj_gib","models/combine_turrets/floor_turret_gib2.mdl",{BloodType = "",Pos = self:LocalToWorld(Vector(0,0,30)), CollideSound = {"SolidMetal.ImpactSoft"}})
self:CreateGibEntity("obj_vj_gib","models/combine_turrets/floor_turret_gib3.mdl",{BloodType = "",Pos = self:LocalToWorld(Vector(0,0,30)), CollideSound = {"SolidMetal.ImpactSoft"}})
self:CreateGibEntity("obj_vj_gib","models/combine_turrets/floor_turret_gib4.mdl",{BloodType = "",Pos = self:LocalToWorld(Vector(0,0,30)), CollideSound = {"SolidMetal.ImpactSoft"}})
self:CreateGibEntity("obj_vj_gib","models/combine_turrets/floor_turret_gib5.mdl",{BloodType = "",Pos = self:LocalToWorld(Vector(0,0,30)), CollideSound = {"SolidMetal.ImpactSoft"}})
return true
end
/*--------------------------------------------------
=============== Creature SNPC Base ===============
*** Copyright (c) 2012-2020 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.
INFO: Used as a base for creature SNPCs.
--------------------------------------------------*/