aboutsummaryrefslogtreecommitdiff
path: root/gamemode/npcsystem/npcs/bird.lua
blob: 7b19457e92d2d599cc44e20bfb153dc84f368789 (plain)
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
108
109
110
111
112
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"]       = 400,
    ["AwareDist"]   = 1000,
    ["Accel"]       = 200,
    ["Decel"]       = 200,
    ["Step"]        = 20, --Step height
    ["Hull"]        = HULL_TINY
}

--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},--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()}
local checkrun = function(self,ply)
    --If we're aware 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
*/