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.Social = "Pack" --Solo, Pack NPC.Stats = { ["Vitality"] = 10, ["Speed"] = 50, ["AwareDist"] = 800, } --Some npc's like birds have diffent names for their idle sequences NPC.IdleSequences = { [0] = "Idle01", [1] = "Eat_A", } --Drops should be formated as [index]={["item name"], percent_drop} where percent_drop is a number from 0 to 100 NPC.Drops = { [0] = {"Meat",100}, [1] = {"Meat",100}, [2] = {"Meat",100}, [3] = {"Meat",100}, [4] = {"Meat",80}, [5] = {"Meat",40}, [6] = {"Meat",10}, } --Attacks should be formated as [i]={function attackpriority() = function doattack()} local checkrun = function(self,ply) --If we're awayre of any enemies, run away! return 1 end local dorun = function(self,ply) self:StartActivity(ACT_FLY) self:PlaySequenceAndWait( "Fly01" ) --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 local navarea = navmesh.GetNavArea(self:GetPos(), 100) if navarea:IsValid() then self:MoveToPos(topos) else print("Suicideing a bird to prevent server crash!") self:BecomeRagdoll(DamageInfo()) end 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) local dist = ply:GetPos():Distance(self:GetPos()) return self.Stats["AwareDist"] - dist end --What to replace the ENT:BehaveAct with function NPC:Act() 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 */