1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
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.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)
-- 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
if(v:GetPos():Distance(self:GetPos()) < 300) then
self:StartActivity(ACT_FLY)
print("I should fly away")
self:SetSequence( "Fly01" )
local topos = self:GetPos() + Vector( math.Rand( -1, 1 ), math.Rand( -1, 1 ), 0 ) * 1000
self:MoveToPos(topos)
print("Flying to (" .. topos.x .. "," .. topos.y .. "," .. topos.z .. ")")
end
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
*/
|