diff options
Diffstat (limited to 'gamemode/npcsystem')
| -rw-r--r-- | gamemode/npcsystem/npcs/zombie.lua | 100 |
1 files changed, 90 insertions, 10 deletions
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()
|
