aboutsummaryrefslogtreecommitdiff
path: root/gamemode/npcsystem/npcs/zombie.lua
diff options
context:
space:
mode:
authorAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2016-01-07 21:31:55 -0500
committerAlexander Pickering <Alexander.Pickering@anondomain.site90.net>2016-01-07 21:31:55 -0500
commit790e96ffa5cb5e9eb3c44f6ede09612bafda2239 (patch)
tree63cad5072bd20dcdb769ecd4905b4ec1fa0ec845 /gamemode/npcsystem/npcs/zombie.lua
parent406a4148506be540bcdac0f10f2256320c5c2771 (diff)
parent08331347cfc619852a177f9c120bf7328cd89d70 (diff)
downloadwintersurvival2-790e96ffa5cb5e9eb3c44f6ede09612bafda2239.tar.gz
wintersurvival2-790e96ffa5cb5e9eb3c44f6ede09612bafda2239.tar.bz2
wintersurvival2-790e96ffa5cb5e9eb3c44f6ede09612bafda2239.zip
Merge branch 'queue' of ssh://ssh.cogarr.org:43/home/git/wintersurvival2 into queue
Diffstat (limited to 'gamemode/npcsystem/npcs/zombie.lua')
-rw-r--r--gamemode/npcsystem/npcs/zombie.lua115
1 files changed, 103 insertions, 12 deletions
diff --git a/gamemode/npcsystem/npcs/zombie.lua b/gamemode/npcsystem/npcs/zombie.lua
index 0980cdc..5914c04 100644
--- a/gamemode/npcsystem/npcs/zombie.lua
+++ b/gamemode/npcsystem/npcs/zombie.lua
@@ -1,26 +1,117 @@
NPC.Name = "Zombie"
-NPC.Desc = "Ahh! The Undead!!"
-NPC.Class = "Other" --Ambient, Agressive, Boss
-NPC.Model = "models/props_combine/breenlight.mdl"
+NPC.Desc = "A fearsome monster!"
+NPC.Class = "Agressive" --Ambient, Agressive, Boss
+NPC.Model = "models/Zombie/Classic.mdl"
NPC.Icon = Material("wintersurvival2/hud/ws1_icons/icon_rock")
-NPC.Vitality = 100
-NPC.Speed = 100
+NPC.Social = "Solo" --Solo, Pack
+
+NPC.Stats = {
+ ["Vitality"] = 200,
+ ["Speed"] = 50,
+ ["AwareDist"] = 1000,
+ ["Accel"] = 100,
+ ["Decel"] = 200,
+ ["Step"] = 20, --Step height
+ ["Hull"] = HULL_HUMAN
+}
+
--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},
+ [1] = {"Meat",100},
+ [2] = {"Meat",100},
+ [3] = {"Meat",100},
+ [4] = {"Meat",80},
+ [5] = {"Meat",40},
+ [6] = {"Meat",10},
+}
+
+--Some npc's like birds have diffent names for their idle sequences
+NPC.IdleSequences = {
+ [0] = "Idle",
+}
+
+--Distance to be made aware of players
+
+--Attacks should be formated as [i]={function (return int dammage) canattack(ply) = function doattack(ply)}
+--NPC will do the most dammage possible per attack
+local checkmele = function(self, ply)
+ if(ply:GetPos():Distance(self:GetPos()) < 100) then return 20 end
+ return -1
+end
+
+local domele = function(self, ply)
+ self:StartActivity(ACT_MELEE_ATTACK1)
+ --Antlion has 6 attack animations
+ local attackanim = math.Round(math.Rand(1,6))
+ coroutine.wait(0.75)
+ --If the player is still in front of us after the animation, they didn't dodge! apply dammage!
+ if(ply:GetPos():Distance(self:GetPos()) < 100) then
+ ply:TakeDamage(20)
+ end
+ --Finish up the animation
+ coroutine.wait(0.25)
+end
+
+local checkrun = function(self, ply) return 0 end
+
+local dorun = function(self, ply)
+ local navarea = navmesh.GetNavArea(self:GetPos(), 100)
+ self.loco:SetDesiredSpeed( 50 )
+ if navarea:IsValid() then
+ local moveop = {}
+ moveop.tolerance = 50
+ moveop.repath = 2
+ moveop.lookahead = 3
+ moveop.draw = true
+ self:StartActivity(ACT_WALK)
+ self:MoveToPos(ply:GetPos(),moveop)
+ else
+ print("Could not find valid navmesh, suicideing to prevent server crash!")
+ self:BecomeRagdoll(DamageInfo())
+ end
+end
+
+NPC.Attacks = {
+ [1] = { --A mele attack
+ [checkmele] = domele
+ },
---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
-NPC.Attacks = nil
+ [2] = {--Move to the player
+ [checkrun] = dorun
+
+ },
+
+
+}
+
+--Attack priority is a fucntion that takes a player, and returns an int describing it's prority to attack (higher = more important) NPC will always attack the player with the highest priority
+function NPC:AttackPriority(ply)
+ local dist = ply:GetPos():Distance(self:GetPos())
+ return self.Stats["AwareDist"] - dist
+end
--A function that takes a position and returns true if this is an acceptable place to spawn
-NPC.SpawnLocations = function(pos) return true end
+function NPC:SpawnLocations(pos)
+ return true
+end
---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
+NPC.AwareEnemies = {}
+
+--What to replace the ENT:BehaveAct with
+function NPC:Act()
+end
+
+--What to replace ENT:OnStuck with
+function NPC:Stuck()
+ --If we're stuck, jump backwards
+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()