From 4dec7baa800e1bc73c659d04ad70edef2c0fc529 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Sat, 2 Jan 2016 13:30:26 -0500 Subject: Added zombie code --- gamemode/npcsystem/npcs/zombie.lua | 100 +++++++++++++++++++++++++++++++++---- 1 file changed, 90 insertions(+), 10 deletions(-) (limited to 'gamemode') diff --git a/gamemode/npcsystem/npcs/zombie.lua b/gamemode/npcsystem/npcs/zombie.lua index 0980cdc..d9232a7 100644 --- a/gamemode/npcsystem/npcs/zombie.lua +++ b/gamemode/npcsystem/npcs/zombie.lua @@ -1,26 +1,106 @@ -NPC.Name = "Zombie" -NPC.Desc = "Ahh! The Undead!!" -NPC.Class = "Other" --Ambient, Agressive, Boss -NPC.Model = "models/props_combine/breenlight.mdl" +NPC.Name = "Bird" +NPC.Desc = "A flappy little guy" +NPC.Class = "Ambient" --Ambient, Agressive, Boss +NPC.Model = "models/pigeon.mdl" NPC.Icon = Material("wintersurvival2/hud/ws1_icons/icon_rock") -NPC.Vitality = 100 +NPC.Social = "Pack" --Solo, Pack + +NPC.Vitality = 10 NPC.Speed = 100 --Drops should be formated as [index]={["item name"], percent_drop} where percent_drop is a number from 0 to 100 -NPC.Drops = nil +NPC.Drops = { + [0] = {"Meat",100},--Birds will drop at least 1 meat, and have a 50% chance of dropping 2 + [1] = {"Meat",50}, + [2] = {"Feather",50}, +} ---Attacks should be formated as [range]={index = function doattack(target)} ---Where range is the range of the target, and doattack(target) is the function called to attack +--Attacks should be formated as [i]={function (return bool) canattack(ply) = function doattack(ply)} NPC.Attacks = nil --A function that takes a position and returns true if this is an acceptable place to spawn -NPC.SpawnLocations = function(pos) return true end +NPC.SpawnLocations = nil ---The entity that is this npc's current target, if it has one +--The entity that is this npc's current target, if it has one. Nil otherwise NPC.Target = nil --All enemies that this NPC is aware of NPC.AwareEnemies = nil + +--What to replace the ENT:BehaveAct with +function NPC:Act() +end + +--What to replace ENT:OnStuck with +function NPC:Stuck() + +end + +--What to replace ENT:RunBehaviour with +function NPC:Behave() + print("Going into antlion's custom behaviour") + while ( true ) do + self:StartActivity( ACT_IDLE ) -- walk anims + self:PlaySequenceAndWait( "Idle01" ) -- Sit on the floor + --Check if there are any players nearby + local players = ents.FindByClass("Player") + local playernearby = false + for k,v in pairs(players) do + local fardist = 800 + local closedist = 300 + local removedist = 2000 + local iscrouched = v:Crouching() + local dist = v:GetPos():Distance(self:GetPos()) + --Remove ourselves if there's noone nearby + if(dist > 2000) then + playernearby = true + end + --Keep flying away as long as we're being chased + while((dist < fardist and not iscrouched) or (dist < closedist)) do -- We found a player! + if(dist < 100) then -- We're in attack range! + local target = v; + local targetpos = v:GetPos() + self:StartActivity(ACT_MELEE_ATTACK1) + --Antlion has 6 attack animations + local attackanim = math.Round(math.Rand(1,6)) + self:PlaySequenceAndWait("attack" .. attackanim) + --If the player is still in front of us after the animation, they didn't dodge apply dammage! + if(v:GetPos():Distance(targetps) < 100) then + v:TakeDamage(20) + end + else + self:StartActivity(ACT_WALK) + self:PlaySequenceAndWait( "walk_all" ) + + --Find a position in roughly the oposite direction of the player + local tpos = self:GetPos() + local ppos = v:GetPos() + local direction = Vector(ppos.x - tpos.x, ppos.y - tpos.y, ppos.z - tpos.z) + direction:Normalize() + local addition = direction * 1000 + local topos = self:GetPos() + addition + + local navarea = navmesh.GetNavArea(self:GetPos(), 100) + + if navarea:IsValid() then + self:MoveToPos(topos) + else + self:BecomeRagdoll(DamageInfo()) + end + + --Check to see if we're being chased + iscrouched = v:Crouching() + dist = v:GetPos():Distance(self:GetPos()) + end + end + end + if not playernearby then + self:BecomeRagdoll(DamageInfo()) + end + end + coroutine.yield() +end + --These are just here to tell the editors/develoeprs what functions are available.. dont un-comment them out, as this could affect all the items. /* function NPC:OnSpawn() -- cgit v1.2.3-70-g09d2