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.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 = { [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 [i]={function attackpriority() = function doattack()} NPC.Attacks = nil --A function that takes a position and returns true if this is an acceptable place to spawn NPC.SpawnLocations = nil --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:RunBehaviour with function NPC:Behave() print("Going into bird'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 self:StartActivity(ACT_FLY) self:SetSequence( "Fly01" ) --Find a position in roughly the oposite direction of the player local tpos = self:GetPos() local ppos = v: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 self:MoveToPos(topos) --Check to see if we're being chased iscrouched = v:Crouching() dist = v:GetPos():Distance(self:GetPos()) end end if not playernearby then local di = DamageInfo() self:BecomeRagdoll(di) end --self:SetSequence( "sit_ground" ) -- Stay sitting --coroutine.wait( self:PlayScene( "scenes/eli_lab/mo_gowithalyx01.vcd" ) ) -- play a scene and wait for it to finish before progressing -- Get up -- find the furthest away hiding spot --local pos = self:FindSpot( "random", { type = 'hiding', radius = 5000 } ) -- if the position is valid if ( pos ) then self:StartActivity( ACT_RUN ) -- run anim self.loco:SetDesiredSpeed( 200 ) -- run speed self:PlayScene( "scenes/npc/female01/watchout.vcd" ) -- shout something while we run just for a laugh self:MoveToPos( pos ) -- move to position (yielding) self:PlaySequenceAndWait( "fear_reaction" ) -- play a fear animation self:StartActivity( ACT_IDLE ) -- when we finished, go into the idle anim else --print("Bird could not find anywhere to fly to") -- some activity to signify that we didn't find shit 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() 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 */