aboutsummaryrefslogtreecommitdiff
path: root/gamemode/npcsystem/sv_rat.lua
diff options
context:
space:
mode:
Diffstat (limited to 'gamemode/npcsystem/sv_rat.lua')
-rw-r--r--gamemode/npcsystem/sv_rat.lua114
1 files changed, 114 insertions, 0 deletions
diff --git a/gamemode/npcsystem/sv_rat.lua b/gamemode/npcsystem/sv_rat.lua
new file mode 100644
index 0000000..fadbc8d
--- /dev/null
+++ b/gamemode/npcsystem/sv_rat.lua
@@ -0,0 +1,114 @@
+local n = nrequire("sv_npcsystem.lua")
+local NPC = {}
+NPC.Name = "Rat"
+NPC.Desc = "A nasty little guy"
+NPC.Class = "Ambient" --Ambient, Agressive, Boss
+NPC.Model = "models/headcrab.mdl"
+
+NPC.Stats = {
+ ["Vitality"] = 10,
+ ["Speed"] = 400,
+ ["AwareDist"] = 1000,
+ ["Accel"] = 100,
+ ["Decel"] = 200,
+ ["Step"] = 20, --Step height
+ ["Hull"] = HULL_TINY
+}
+
+--Some npc's like birds have diffent names for their idle sequences
+NPC.IdleSequences = {
+ [0] = "lookaround",
+ [1] = "Idle01",
+}
+
+--Drops should be formated as [index]={["item name"], percent_drop} where percent_drop is a number from 0 to 100
+
+NPC.Drops = {
+ [0] = {"Rat Meat",100},--Rats will drop at least 1 meat, and have a 50% chance of dropping 2
+ [1] = {"Rat Meat",50},
+}
+
+--Attacks should be formated as [i]={function attackpriority() = function doattack()}
+local checkrun = function(self,ply)
+ --If we're aware of any enemies, run away!
+ return 1
+end
+local runseq
+local dorun = function(self,ply)
+ if runseq == nil then
+ runseq = self:LookupSequence("Run1")
+ end
+ self:StartActivity(ACT_FLY)
+ self:SetSequence( runseq )
+ if not ply or not ply:IsValid() then return end
+ --Find a position in roughly the oposite direction of the player
+ local tpos = self:GetPos()
+ local ppos = ply:GetPos()
+ local direction = Vector(tpos.x - ppos.x, tpos.y - ppos.y, tpos.z - ppos.z)
+ direction:Normalize()
+ local addition = direction * 1000
+ local topos = self:GetPos() + addition
+ --print("I want to go to ", topos)
+ self.TargetPos = topos
+end
+NPC.Attacks = {
+ [1] = {--run away from the player
+ [checkrun] = dorun
+ },
+}
+
+--A function that takes a position and returns true if this is an acceptable place to spawn
+function NPC:SpawnLocations(pos)
+ return true
+end
+
+--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 = {}
+--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)
+ if not ply then return 0 end
+ local plypos = ply:GetPos()
+ local mypos = self:GetPos()
+ if not plypos then return 0 end
+ local dist = plypos:Distance(mypos)
+ return self.Stats["AwareDist"] - dist
+end
+
+--What to replace the ENT:RunBehaviour with
+function NPC:Act(deltat)
+end
+
+--What to replace ENT:OnStuck with
+function NPC:Stuck()
+
+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()
+end
+
+--If we need to do more than just reduce health on dammage
+function NPC:OnDammage(ammount)
+end
+
+--If we need to do more than just drop items on death
+function NPC:OnDeath()
+end
+
+--A particular spell was cast on this npc by player
+function NPC:OnSpell(spell, player)
+end
+
+function NPC:OnFindEnemy(enemy)
+end
+
+--Called when the npc is attacking anything with any attack
+function NPC:OnAttack(target)
+end
+*/
+
+n.RegisterNPC(NPC)