Files
wnsrc/addons/pillpack/lua/autorun/ppp_include/pill_zombies.lua
lifestorm df294d03aa Upload
2024-08-04 23:54:45 +03:00

295 lines
8.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()
pk_pills.register("zombie", {
printName = "Zombie",
side = "hl_zombie",
crab = "headcrab",
type = "ply",
model = "models/Zombie/Classic.mdl",
default_rp_cost = 7000,
health = 100,
bodyGroups = {1},
anims = {
default = {
idle = "Idle01",
walk = "walk",
melee1 = "attackA",
melee2 = "attackB",
melee3 = "attackC",
melee4 = "attackD",
melee5 = "attackE",
melee6 = "attackF",
release = "releasecrab"
}
},
sounds = {
melee = pk_pills.helpers.makeList("npc/zombie/zo_attack#.wav", 2),
melee_hit = pk_pills.helpers.makeList("npc/zombie/claw_strike#.wav", 3),
melee_miss = pk_pills.helpers.makeList("npc/zombie/claw_miss#.wav", 2),
bust = "npc/barnacle/barnacle_crunch2.wav",
release = pk_pills.helpers.makeList("npc/zombie/zombie_pain#.wav", 6),
step = pk_pills.helpers.makeList("npc/zombie/foot#.wav", 3)
},
attack = {
mode = "trigger",
func = pk_pills.common.melee,
animCount = 6,
delay = .8,
range = 40,
dmg = 25
},
reload = function(ply, ent)
ent:PillAnim("release", true)
ent:PillSound("release")
timer.Simple(1, function()
if not IsValid(ent) then return end
local r = ents.Create("prop_ragdoll")
r:SetModel(ent.subModel or ent:GetPuppet():GetModel())
r:SetPos(ply:GetPos())
r:SetAngles(ply:GetAngles())
r:Spawn()
r:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
r:Fire("FadeAndRemove", nil, 10)
local puppet = ent:GetPuppet()
local attach = puppet:GetAttachment(puppet:LookupAttachment("head"))
pk_pills.apply(ply, ent.formTable.crab)
if (attach) then
ply:SetPos(attach.Pos)
else
ply:SetPos(ply:GetPos() + Vector(0, 0, 60))
end
end)
end,
flashlight = function(ply, ent)
if ent.formTable.printName == "Zombie" or ent.formTable.printName == "Fast Zombie" then
ent:PillSound("bust")
local e = pk_pills.apply(ply, ent.formTable.printName == "Zombie" and "zombie_torso" or "zombie_torso_fast")
e:PillAnim("fall", true)
ply:SetPos(ply:GetPos() + Vector(0, 0, 30))
ply:SetVelocity(Vector(0, 0, 400) + ply:GetAimVector() * 300)
local r = ents.Create("prop_ragdoll")
r:SetModel(ent.formTable.printName == "Zombie" and "models/zombie/classic_legs.mdl" or "models/gibs/fast_zombie_legs.mdl")
r:SetPos(ply:GetPos())
r:SetAngles(ply:GetAngles())
r:Spawn()
r:SetCollisionGroup(COLLISION_GROUP_DEBRIS)
r:Fire("FadeAndRemove", nil, 10)
end
end,
movePoseMode = "yaw",
moveSpeed = {
walk = 50,
run = 100
},
jumpPower = 0,
duckBy = 0
})
pk_pills.register("zombie_poison", {
parent = "zombie",
printName = "Poison Zombie",
crab = "headcrab_poison",
model = "models/Zombie/Poison.mdl",
default_rp_cost = 8000,
health = 300,
anims = {
default = {
run = "run",
melee = "melee_01",
throw = "Throw"
}
},
bodyGroups = {nil, 2, 3, 4},
sounds = {
throw1 = pk_pills.helpers.makeList("npc/zombie_poison/pz_throw#.wav", 2, 3),
throw2 = pk_pills.helpers.makeList("npc/headcrab_poison/ph_jump#.wav", 1, 3)
},
attack = {
animCount = false
},
attack2 = {
mode = "trigger",
func = function(ply, ent)
ent:PillAnim("throw", true)
ent:PillSound("throw1")
timer.Simple(1.3, function()
if not IsValid(ent) then return end
ent:PillSound("throw2")
local headcrab = ents.Create("pill_jumper_headcrab")
local puppet = ent:GetPuppet()
local angs = ply:EyeAngles()
angs.p = 0
headcrab:SetPos(ply:EyePos() + angs:Forward() * 100)
headcrab:SetAngles(angs)
headcrab:Spawn()
headcrab:GetPhysicsObject():SetVelocity(angs:Forward() * 300 + Vector(0, 0, 200))
end)
end
},
moveSpeed = {
run = 200
},
movePoseMode = false
})
pk_pills.register("zombie_fast", {
parent = "zombie",
printName = "Fast Zombie",
crab = "headcrab_fast",
model = "models/Zombie/fast.mdl",
default_rp_cost = 9000,
anims = {
default = {
idle = "idle",
walk = "walk_all",
run = "Run",
jump = "leap_start",
glide = "leap_loop",
jump_attack = "leap",
glide_attack = "leapstrike",
attack = "Melee",
climb = "climbloop",
climb_start = "climbmount",
release = "br2_roar"
}
},
sounds = {
jump = "npc/fast_zombie/fz_scream1.wav",
attack = "npc/fast_zombie/fz_frenzy1.wav"
},
attack = {
mode = "tick",
func = function(ply, ent)
if not ply:IsOnGround() or ply:GetVelocity():Length() > 1 then return end
ent:PillAnimTick("attack")
if not ent.lastAttack or ent.lastAttack + .3 < CurTime() then
if ply:TraceHullAttack(ply:EyePos(), ply:EyePos() + ply:EyeAngles():Forward() * 40, Vector(-10, -10, -10), Vector(10, 10, 10), 10, DMG_SLASH, 1, true) then
ent:PillSound("melee_hit")
else
ent:PillSound("melee_miss")
end
ent.lastAttack = CurTime()
end
if not ent.lastAttackSound or ent.lastAttackSound + 2 < CurTime() then
ent:PillSound("attack")
ent.lastAttackSound = CurTime()
end
end
},
attack2 = {
mode = "tick",
func = function(ply, ent)
local start = ply:GetPos() + Vector(0, 0, 10)
local dir = ply:GetAimVector()
dir.z = 0
dir:Normalize()
local tracedata = {}
tracedata.start = start
tracedata.endpos = start + dir * 20
tracedata.filter = ply
tracedata.mins = Vector(-8, -8, -8)
tracedata.maxs = Vector(8, 8, 8)
if util.TraceHull(tracedata).Hit then
if ply:IsOnGround() then
ply:SetVelocity(Vector(0, 0, 150))
ent:PillAnim("climb_start")
end
ply:SetLocalVelocity(Vector(0, 0, 100))
ent:PillAnimTick("climb")
end
end
},
noFallDamage = true,
jump = function(ply, ent)
if ply:GetVelocity():Length() < 350 then
v = ply:EyeAngles():Forward()
v.z = 0
v:Normalize()
ply:SetVelocity(v * 100 + Vector(0, 0, 300))
else
ent:PillAnim("jump_attack")
ent.canAttack = true
end
ent:PillSound("jump")
end,
glideThink = function(ply, ent)
if ent.canAttack then
if ply:TraceHullAttack(ply:EyePos(), ply:EyePos() + ply:EyeAngles():Forward() * 50, Vector(-20, -20, -20), Vector(20, 20, 20), 50, DMG_SLASH, 1, true) then
ent:PillSound("melee_hit")
ent.canAttack = nil
end
ent:PillAnimTick("glide_attack")
end
end,
land = function(ply, ent)
ent.canAttack = nil
end,
moveSpeed = {
run = 400
},
jumpPower = 400
})
pk_pills.register("zombie_torso", {
parent = "zombie",
printName = "Zombie Torso",
model = "models/Zombie/classic_torso.mdl",
default_rp_cost = 6500,
camera = {
offset = Vector(0, 0, 10),
dist = 150
},
hull = Vector(30, 30, 20),
anims = {
default = {
idle = "idle",
walk = "crawl",
melee = "attack",
fall = "fall"
}
},
attack = {
animCount = false,
delay = .4
},
movePoseMode = false
})
pk_pills.register("zombie_torso_fast", {
parent = "zombie_torso",
printName = "Fast Zombie Torso",
model = "models/zombie/fast_torso.mdl",
default_rp_cost = 8500,
crab = "headcrab_fast",
anims = {
default = {
melee = "attack01",
fall = false
}
},
moveSpeed = {
walk = 100,
run = 200
}
})