From 5c4ebc932d8c02522802c842d43d863d89aca162 Mon Sep 17 00:00:00 2001 From: Apickx Date: Mon, 28 Dec 2015 19:10:44 -0500 Subject: Initial commit --- gamemode/npcsystem/npcs/bird.lua | 101 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 gamemode/npcsystem/npcs/bird.lua (limited to 'gamemode/npcsystem/npcs/bird.lua') diff --git a/gamemode/npcsystem/npcs/bird.lua b/gamemode/npcsystem/npcs/bird.lua new file mode 100644 index 0000000..d5cd1e0 --- /dev/null +++ b/gamemode/npcsystem/npcs/bird.lua @@ -0,0 +1,101 @@ +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_FLY ) -- walk anims + self.loco:SetDesiredSpeed( 100 ) -- walk speeds + self:MoveToPos( self:GetPos() + Vector( math.Rand( -1, 1 ), math.Rand( -1, 1 ), 0 ) * 200 ) -- walk to a random place within about 200 units (yielding) + + + self:StartActivity( ACT_IDLE ) -- revert to idle activity + + + self:PlaySequenceAndWait( "Idle01" ) -- Sit on the floor + --Check if there are any players nearby + local players = ents.FindByClass("Player") + for k,v in pairs(players) do + print(k) + print(v) + 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 + self:PlaySequenceAndWait( "Fly01" ) -- 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 +*/ -- cgit v1.2.3-70-g09d2