NPC.Name = "Antlion Pouncer" NPC.Desc = "A fearsome monster!" NPC.Class = "Agressive" --Ambient, Agressive, Boss NPC.Model = "models/antlion.mdl" NPC.Icon = Material("wintersurvival2/hud/ws1_icons/icon_rock") NPC.Social = "Solo" --Solo, Pack NPC.Stats = { ["Vitality"] = 150, ["Speed"] = 200, ["AwareDist"] = 1000, ["Accel"] = 400, ["Decel"] = 400, ["Step"] = 20, --Step height ["Hull"] = HULL_LARGE } --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",80}, [3] = {"Meat",50}, [4] = {"Chitin",80}, [5] = {"Chitin",50}, } --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 self == nil then print("In antlion2, checkmele called with null self") end if ply == nil then print("In antlion2, checkmele called with null ply") end 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.5) --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 checkpounce = function(self, ply) if(ply:GetPos():Distance(self:GetPos())) < 200 then return 15 end return -1 end local dopounce = function(self,ply) local randanim = math.Round(math.Rand(0,1)) if(randanim) then self:SetSequence("pounce") else self:SetSequence("pounce2") end coroutine.wait(0.23) if(ply:GetPos():Distance(self:GetPos()) < 200) then ply:TakeDamage(15) end coroutine.wait(0.15) end local checkrun = function(self, ply) return 0 end local dorun = function(self, ply) local navarea = navmesh.GetNavArea(self:GetPos(), 100) self.loco:SetDesiredSpeed(self.Stats["Speed"]) 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 }, [2] = {--Move to the player [checkrun] = dorun }, [3] = { [checkpounce] = dopounce }, } --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 or not ply:IsValid() 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 --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 = {} --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() self:SetSkin(2) end /* 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 */