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
|
--Lol i dunno, spawn some npc's or something
concommand.Add("ws_spawnbird",function(ply, cmd, args)
SpawnNpcByName("Bird",ply:GetPos())
end
)
function SpawnNpcByName(name, position)
entdata = GetNpcByName(name)
ent = ents.Create("ws_npc_ambient")
ent:SetPos(position)
if(entdata.Speed) then
ent.Speed = entdata.Speed
end
if(entdata.Model) then
ent.Model = entdata.Model
end
if(entdata.vitality) then
ent:SetHealth(entdata.vitality)
end
if(entdata.Drops) then
ent.Drops = entdata.Drops
end
if(entdata.OnDammage) then
ent.OnDammage = entdata.OnDammage
end
if(entdata.Behave) then
ent.Behave = entdata.Behave
end
if(entdata.Act) then
ent.Act = entdata.Act
end
ent:Spawn()
end
local random = math.random
local traceline = util.TraceLine
local contents = util.PointContents
local Up = Vector(0,0,1)
--Randomly spawn npc's around?
local Tick = CurTime()
hook.Add("Tick","SpawnAmbient",function()
if(CLIENT) then return end
if (Tick < CurTime()) then
--Assume most players are about ground level
--Spawn 1 bird for each player on the server
local areas = {}
for k,v in pairs(player.GetAllHumans()) do
for i,area in pairs(ents.FindByClass("info_target")) do
if (area:GetName() == "survival_spawn") then
local parent = area:GetParent()
if (IsValid(parent)) then
areas[area] = parent
end
end
end
--SpawnNpcByName("Bird",v:GetPos() + (v:GetUp()*500))
end
for pAe,pBe in pairs(areas) do
local pA,pB = pAe:GetPos(),pBe:GetPos()
local Dis = pA:Distance(pB)
local V = Vector(random(pB.x,pA.x),random(pB.y,pA.y),random(pB.z,pA.z))
local Tr = traceline({start=V,endpos=V-Up*40000})
local Pos = Tr.HitPos+Up*20
local C = contents(Pos)
if (C != CONTENTS_WATER and C != CONTENTS_WATER+CONTENTS_TRANSLUCENT) then
print("Appropriate place found, spawning bird)")
SpawnNpcByName("Bird",Pos)
break
end
end
Tick = CurTime()+30
end
end)
|