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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
|
if engine.ActiveGamemode() ~= "sandbox" then return end
include('shared.lua')
function ENT:Draw()
--self:DrawModel() -- Draws Model Client Side
end
function ENT:Hint()
AddWorldTip( self:EntIndex(), "Spawnpoint", 0.5, self:GetPos(), self )
end
local function syncentity(ent,data)
print("sending data to server")
PrintTable(data)
net.Start("edit_towniespawn_update")
net.WriteEntity(ent)
net.WriteTable(data)
net.SendToServer()
end
local navnode_info = {}
concommand.Add("artery_getnavnodes",function()
net.Start("edit_requestnavnodes")
net.SendToServer()
end)
net.Receive("edit_respondnavnodes",function()
navnode_info = net.ReadTable()
print("client received navnode info:")
PrintTable(navnode_info)
end)
local function draw_edit_panel(who, data)
if not GCompute then error("GCompute not installed!") end
if not GCompute.IDE then error("GCompute was initalized wrong or has changed, update this file!") end
local inst = GCompute.IDE.GetInstance()
inst:SetVisible (true)
print("Opening file browser!")
PrintTable(data)
--Remove donation panel
for k,v in pairs(inst.ViewManager.Views) do
if type(k) == "Table" and k.Title == "Donate!" then
k:SetVisible(false)
end
end
--Open up the npc's file (create it if it dosen't already exist)
local filename = "artery/maps/" .. game.GetMap() .. "/npcs/" .. data.Name .. ".txt"
if not file.Exists(filename, "DATA") then
local pos = who:GetPos()
local npctxt = string.format(default_townie,pos.x,pos.y,pos.z,data.Model,data.Name,table.concat(data.NavNodes),data.Name)
file.Write(filename,npctxt)
end
--Open up this npc's file
inst:OpenUri("game/data/" .. filename,function(succ,res,view)
view:Select()
end)
--Set our file browser to the right place
for k,v in pairs(inst.ViewManager.Views) do
if k.Title == "File Browser" then
k.FolderListView:SetPath("/game/data/artery/maps/" .. game.GetMap() .. "/npcs")
end
end
--Add a list of nav nodes we found
local p = ents.FindByClass("info_townienode")
end
net.Receive("edit_towniespawn",function()
print('got request to edit someone')
local who = net.ReadEntity()
local data = net.ReadTable()
draw_edit_panel(who,data)
--[[
local editorframe = vgui.Create("DFrame")
editorframe.OnClose = function(self)
syncentity(who,data)
end
editorframe:SetSize(640,640)
editorframe:SetTitle("Townie spawn")
editorframe:SetDraggable(true)
editorframe:MakePopup()
local editor = vgui.Create("DPanel",editorframe)
editor:Dock(FILL)
--Edit name
local namelabel = vgui.Create("DLabel",editor)
namelabel:SetText("Townie Name:")
namelabel:Dock(TOP)
namelabel:SetDark(true)
local nameentry = vgui.Create("DTextEntry",editor)
nameentry:Dock(TOP)
nameentry:SetText(data.Name)
nameentry:SetUpdateOnType(true)
nameentry.OnValueChange = function(self,value)
data.Name = value
end
--Edit model
local modellabel = vgui.Create("DLabel",editor)
modellabel:SetText("Townie Model:")
modellabel:Dock(TOP)
modellabel:SetDark(true)
local modelentry = vgui.Create("DTextEntry",editor)
modelentry:Dock(TOP)
modelentry:SetText(data.Model)
modelentry:SetUpdateOnType(true)
modelentry.OnValueChange = function(self,value)
data.Model = value
end
--Edit navnodes
local navnodelist = vgui.Create("DListLayout",editor)
navnodelist:Dock(FILL)
local allnavents = ents.FindByClass("info_townienode")
local function create_navnode_panel(v)
local navnodeitm = vgui.Create("DPanel")
local navname = vgui.Create("DComboBox",navnodeitm)
for i,j in pairs(navnode_info) do
navname:AddChoice(j.Name)
end
navname:SetValue(v)
navname:Dock(LEFT)
navname.OnSelect = function(self,index,value)
data.NavNodes[index] = value
end
local navdelete = vgui.Create("DButton",navnodeitm)
navdelete:SetText("-")
navdelete.DoClick = function()
print('Tryint to get rid of nav node', v)
--delete it from the data
for i,j in pairs(data.NavNodes) do
if j == v then
for k = i, #data.NavNodes do
data.NavNodes[i] = data.NavNodes[i+1]
end
break
end
end
--and remove the panel
navnodeitm:Remove()
end
navdelete:Dock(RIGHT)
return navnodeitm
end
for k,v in pairs(data.NavNodes) do
local navnodeitm = create_navnode_panel(v)
navnodelist:Add(navnodeitm)
end
local addbutton = vgui.Create("DButton",editor)
addbutton:SetText("+")
addbutton.DoClick = function()
local navnodeitm = create_navnode_panel("select")
navnodelist:Add(navnodeitm)
end
addbutton:Dock(BOTTOM)
]]
end)
|