· 6 years ago · Sep 13, 2019, 03:08 PM
1
2local ply = FindMetaTable("Player")
3
4local dconfigAccess = { --Insert user groups that you want to have !dconfig access
5 "superadmin",
6 "founder",
7 "owner",
8}
9function ply:CanDConfig()
10
11 return table.HasValue(dconfigAccess, self:GetUserGroup())
12
13end
14
15local function LoadDoorGroups()
16
17 -- Example: AddDoorGroup("Cops and Mayor only", TEAM_POLICECHIEF, TEAM_POLICE, TEAM_MAYOR, TEAM_FBI, TEAM_SWAT, TEAM_SWATLEADER, TEAM_SECRETSERVICE)
18
19local function LoadAgendas()
20
21 DarkRP.createAgenda("Government agenda", {TEAM_MAYOR, TEAM_POLICECHIEF}, {TEAM_POLICE, TEAM_FBI, TEAM_SWAT, TEAM_SWATLEADER, TEAM_SECRETSERVICE})
22 DarkRP.createAgenda("Calaprian Mafia Agenda", {TEAM_CALAPRIANGODFATHER}, {TEAM_CALAPRIANMOBSTER})
23 DarkRP.createAgenda("Sardinian Mafia Agenda", {TEAM_SARDINIANGODFATHER}, {TEAM_SARDINIANMOBSTER})
24
25end
26
27local function LoadGroupChats()
28
29 GAMEMODE:AddGroupChat(Team_SardinianGodfather, TEAM_SardinianMobster)
30 GAMEMODE:AddGroupChat(TEAM_CalabrianGodfather, TEAM_CalabrianMobster)
31 GAMEMODE:AddGroupChat(TEAM_Police, TEAM_PoliceChief, TEAM_FBI, TEAM_Mayor, TEAM_SWAT, TEAM_SwatLeader, TEAM_SecretService)
32 GAMEMODE:AddGroupChat(TEAM_Hoboterrorist, TEAM_Hobo)
33
34end
35
36local function LoadEntities()
37
38 DarkRP.createEntity("Closet", {
39 ent = "bodyman_closet",
40 model = "models/props_wasteland/controlroom_storagecloset001a.mdl",
41 price = 1500,
42 max = 1,
43 cmd = "buycloset",
44 category = "Other",
45 allowed = {TEAM_Hobo, Team_Security, Team_Security, TEAM_Chef, Team_Nightclub, Team_Banker, TEAM_Hitman, Team_Gundealer, TEAM_BMD, TEAM_ProHitman, TEAM_ProThief, TEAM_Paramedic, TEAM_CinemaManager, TEAM_Civilian, Team_Stripper, TEAM_Thief, TEAM_HotelManager, TEAM_HoboTerrorist, TEAM_BusDriver, Team_SECRETSERVICE, TEAM_FBI, TEAM_Mechanic, TEAM_CalabrianMobster, Team_SWATLEADER, Team_POLICE, Team_POLICECHIEF, Team_MAYOR, TEAM_SARDINIANGODFATHER, TEAM_SARDINIANMOBSTER, TEAM_CALABRIANMOBSTER, TEAM_CALABRIANGODFATHER}
46 })
47 DarkRP.createEntity("Camera", {
48 ent = "gmod_playx",
49 model = "models/dav0r/camera.mdl",
50 price = 1500,
51 max = 1,
52 cmd = "buycamera",
53 category = "Other",
54 allowed = {TEAM_CinemaManager}
55 })
56 DarkRP.createEntity("Car Battery", {
57 ent = "vc_pickup_fuel_electricity",
58 model = "models/items/car_battery01.mdl",
59 price = 300,
60 max = 1,
61 cmd = "buybattery",
62 category = "Mechanic",
63 allowed = {TEAM_Mechanic}
64 })
65 DarkRP.createEntity("Repair Kit", {
66 ent = "vc_pickup_healthkit_100",
67 model = "models/vcmod/vcmod_toolbox.mdl",
68 price = 2000,
69 max = 1,
70 cmd = "buyhealthkit",
71 category = "Mechanic",
72 allowed = {TEAM_Mechanic}
73 })
74 DarkRP.createEntity("Engine", {
75 ent = "vc_pickup_engine",
76 model = "models/gibs/airboat_broken_engine.mdl",
77 price = 800,
78 max = 1,
79 cmd = "buyengine",
80 category = "Mechanic",
81 allowed = {TEAM_Mechanic}
82 })
83 DarkRP.createEntity("Exhaust", {
84 ent = "vc_pickup_exhaust",
85 model = "models/props_vehicles/carparts_muffler01a.mdl",
86 price = 300,
87 max = 1,
88 cmd = "buyexhaust",
89 category = "Mechanic",
90 allowed = {TEAM_Mechanic}
91 })
92 DarkRP.createEntity("Light", {
93 ent = "vc_pickup_light",
94 model = "models/maxofs2d/light_tubular.mdl",
95 price = 400,
96 max = 1,
97 cmd = "buylight",
98 category = "Mechanic",
99 allowed = {TEAM_Mechanic}
100 })
101 DarkRP.createEntity("Wheel", {
102 ent = "vc_pickup_tire",
103 model = "models/props_phx/normal_tire.mdl",
104 price = 500,
105 max = 1,
106 cmd = "buywheel",
107 category = "Mechanic",
108 allowed = {TEAM_Mechanic}
109 })
110
111end
112
113DCONFIG = {}
114DCONFIG.ChatCommand = "!dconfig"
115
116//Do not touch anything below here!
117DCONFIG.Settings = {
118
119 ["jobs"] = {
120
121 {required = true, tablevalue = "jobvar", title = "Job Variable", dataType = "string", default = "TEAM_EXAMPLE", defaultText = "TEAM_EXAMPLE"},
122 {required = true, tablevalue = "name", title = "Job Name", dataType = "string", default = "NAME EXAMPLE", defaultText = "NAME EXAMPLE"},
123 {required = true, tablevalue = "description", title = "Description", dataType = "string", default = "Description of the job goes here.", defaultText = "Description of the job goes here."},
124 {required = true, tablevalue = "category", title = "Category", dataType = "string", default = "Citizens", defaultText = "Citizens"},
125 {required = false, tablevalue = "hp", title = "HP", dataType = "int", default = "100", defaultText = "Default: 100"},
126 {required = false, tablevalue = "armor", title = "Armor", dataType = "int", default = "0", defaultText = "Default: 0 Max: 255"},
127 {required = false, tablevalue = "walkspeed", title = "Walk Speed", dataType = "int", default = "160", defaultText = "Default: 160"},
128 {required = false, tablevalue = "runspeed", title = "Run Speed", dataType = "int", default = "240", defaultText = "Default: 240"},
129 {required = false, tablevalue = "jumppower", title = "Jump Power", dataType = "int", default = "200", defaultText = "Default: 200"},
130 {required = false, tablevalue = "nofalldamage", title = "No Fall Damage", dataType = "bool"},
131 {required = false, tablevalue = "damagescale", title = "Damage Scale", dataType = "int", default = "1", defaultText = "Default: 1"},
132 {required = false, tablevalue = "modelscale", title = "Model Scale", dataType = "int", default = "1", defaultText = "Default: 1"},
133 {required = false, tablevalue = "material", title = "Material", dataType = "string", default = "", defaultText = "Default: None"},
134 {required = false, tablevalue = "salary", title = "Salary", dataType = "int", default = "100", defaultText = "100"},
135 {required = false, tablevalue = "max", title = "Max Players", dataType = "int", default = "0", defaultText = "Unlimited: 0"},
136 {required = false, tablevalue = "maxpocket", title = "Max Pocket", dataType = "int", default = "0", defaultText = "Unlimited: 0"},
137 {required = false, tablevalue = "admin", title = "Admin", dataType = "int", default = "0", defaultText = "0: Everyone 1: Admin 2: Superadmin"},
138 -- {required = false, tablevalue = "NeedToChangeFrom ", title = "Changes from: ", dataType = "string", default = nil, defaultText = "Requires the user to be this job before gaining access. Example: TEAM_POLICE"},
139 {required = false, tablevalue = "vote", title = "Vote", dataType = "bool"},
140 {required = false, tablevalue = "candemote", title = "Can Demote", dataType = "bool"},
141 {required = false, tablevalue = "demotedeath", title = "Demote on Death", dataType = "bool"},
142 {required = false, tablevalue = "deathmessage", title = "Death Message", dataType = "string", default = "The mayor was killed!", defaultText = "Example: The mayor was killed! ( Only called if Demote on Death is enabled. )"},
143 {required = false, tablevalue = "defaultTeam", title = "Default Job", dataType = "bool"},
144 {required = false, tablevalue = "color", title = "Color", dataType = "color"},
145 {required = true, tablevalue = "command", title = "Command", dataType = "string", default = nil, defaultText = "Unique command to access job"},
146 {required = false, tablevalue = "customCheck", title = "Custom Check", dataType = "string", default = "return true", defaultText = "return ply:GetUserGroup() == 'vip' ply is the player accessing the job."},
147 {required = false, tablevalue = "CustomCheckFailMsg", title = "Fail Message", dataType = "string", default = "You are not able to access this job!", defaultText = "Fail message if the custom check fails."},
148 {required = false, tablevalue = "sortOrder", title = "Sort Order", dataType = "int", default = "1", defaultText = "1-100 the higher the number, lower on the list"},
149 {required = false, tablevalue = "cp", title = "Civil Protection", dataType = "bool"},
150 {required = false, tablevalue = "hitman", title = "Hitman", dataType = "bool"},
151 {required = false, tablevalue = "mayor", title = "Mayor", dataType = "bool"},
152 {required = false, tablevalue = "chief", title = "Chief", dataType = "bool"},
153 {required = false, tablevalue = "medic", title = "Medic", dataType = "bool"},
154 {required = false, tablevalue = "cook", title = "Cook", dataType = "bool"},
155 {required = false, tablevalue = "weapons", title = "Weapons", dataType = "table"},
156 {required = false, tablevalue = "ammo", title = "Ammo", dataType = "string", default = "pistol,", defaultText = "Seperate each value by commas w/out space: 12 Gauge,.30 Carbine,buckshot"},
157 {required = false, tablevalue = "ammocount", title = "Ammo Count", dataType = "int", default = "0", defaultText = "Amount of ammo to give for each type: 30"},
158 {required = false, tablevalue = "hasLicense", title = "License", dataType = "bool"},
159 {required = true, tablevalue = "model", title = "Player Models", dataType = "table"},
160 {required = false, tablevalue = "skin", title = "Skin", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for skin."},
161 {required = false, tablevalue = "bodygroup0", title = "Body Group 0", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for body group 0."},
162 {required = false, tablevalue = "bodygroup1", title = "Body Group 1", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for body group 1."},
163 {required = false, tablevalue = "bodygroup2", title = "Body Group 2", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for body group 2."},
164 {required = false, tablevalue = "bodygroup3", title = "Body Group 3", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for body group 3."},
165 {required = false, tablevalue = "bodygroup4", title = "Body Group 4", dataType = "int", default = nil, defaultText = "(Will apply to all PMs) Number value for body group 4."},
166 {title = "", dataType = ""},
167
168 },
169 ["shipments"] = {
170
171 {required = true, tablevalue = "name", title = "Shipment Name", dataType = "string", default = "NAME EXAMPLE", defaultText = "NAME EXAMPLE"},
172 {required = true, tablevalue = "category", title = "Category", dataType = "string", default = "Other", defaultText = "Other"},
173 {required = true, tablevalue = "entity", title = "Weapon", dataType = "table"},
174 {required = true, tablevalue = "amount", title = "Shipment Amount", dataType = "int", default = "10", defaultText = "10"},
175 {required = true, tablevalue = "price", title = "Shipment Price", dataType = "int", default = "500", defaultText = "500"},
176 {required = false, tablevalue = "separate", title = "Separate Weapon", dataType = "bool"},
177 {required = false, tablevalue = "pricesep", title = "Separate Price", dataType = "int", default = "50", defaultText = "50"},
178 {required = false, tablevalue = "shipmodel", title = "Shipment Model", dataType = "string", default = "models/Items/item_item_crate.mdl", defaultText = "models/Items/item_item_crate.mdl"},
179 {required = false, tablevalue = "noship", title = "No Shipment", dataType = "bool"},
180 {required = false, tablevalue = "allowed", title = "Allowed", dataType = "string", default = nil, defaultText = "Seperate each value by commas w/out space: TEAM_GUN,TEAM_ADMIN,TEAM_MAYOR"}, {required = false, tablevalue = "clip1", title = "Clip1 Ammo", dataType = "int", default = nil, defaultText = "Ammo in Clip 1: default"},
181 {required = false, tablevalue = "clip2", title = "Clip2 Ammo", dataType = "int", default = nil, defaultText = "Ammo in Clip 2: default"},
182 {required = false, tablevalue = "spareammo", title = "Spare Ammo", dataType = "int", default = nil, defaultText = "Spare Ammo: default"},
183 {required = false, tablevalue = "customCheck", title = "Custom Check", dataType = "string", default = "return true", defaultText = "return ply:GetUserGroup() == 'vip' ply is the player accessing the shipment."},
184 {required = false, tablevalue = "CustomCheckFailMsg", title = "Fail Message", dataType = "string", default = "You are not able to access this shipment!", defaultText = "Fail message if the custom check fails."},
185 {title = "", dataType = ""},
186 },
187 ["entities"] = {
188 {required = true, tablevalue = "name", title = "Entity Name", dataType = "string", default = "NAME EXAMPLE", defaultText = "NAME EXAMPLE"},
189 {required = false, tablevalue = "category", title = "Category", dataType = "string", default = "Other", defaultText = "Other"},
190 {required = true, tablevalue = "ent", title = "Entity Class", dataType = "string", default = nil, defaultText = "money_printer"},
191 {required = true, tablevalue = "model", title = "Entity Model", dataType = "string", default = "models/props_c17/consolebox01a.mdl", defaultText = "Entity Model: models/props_c17/consolebox01a.mdl"},
192 {required = false, tablevalue = "price", title = "Price", dataType = "int", default = "100", defaultText = "100"},
193 {required = false, tablevalue = "max", title = "Max Amount", dataType = "int", default = "4", defaultText = "Maxium amount a player can own."},
194 {required = true, tablevalue = "cmd", title = "Command", dataType = "string", default = nil, defaultText = "Unique command to access this entity."},
195 {required = false, tablevalue = "allowed", title = "Allowed", dataType = "string", default = nil, defaultText = "Seperate each value by commas w/out space: TEAM_GUN,TEAM_ADMIN,TEAM_MAYOR"},
196 {title = "", dataType = ""},
197 },
198 ["ammo"] = {
199 {required = false, tablevalue = "name", title = "Ammo Name", dataType = "string", default = "NAME EXAMPLE", defaultText = "NAME EXAMPLE"},
200 {required = false, tablevalue = "category", title = "Category", dataType = "string", default = "Other", defaultText = "Other"},
201 {required = true, tablevalue = "ammoType", title = "Ammo Type", dataType = "table", default = nil, defaultText = "pistol"},
202 {required = false, tablevalue = "model", title = "Ammo Model", dataType = "string", default = "models/Items/BoxSRounds.mdl", defaultText = "Ammo Model: models/Items/BoxSRounds.mdl"},
203 {required = true, tablevalue = "price", title = "Price", dataType = "int", default = "100", defaultText = "100"},
204 {required = true, tablevalue = "amountGiven", title = "Ammo Amount", dataType = "int", default = "30", defaultText = "30"},
205 {required = false, tablevalue = "allowed", title = "Allowed", dataType = "string", default = nil, defaultText = "Seperate each value by commas w/out space: TEAM_GUN,TEAM_ADMIN,TEAM_MAYOR"},
206 {title = "", dataType = ""},
207 },
208 ["categories"] = {
209 {required = false, tablevalue = "name", title = "Category Name", dataType = "string", default = "NAME EXAMPLE", defaultText = "NAME EXAMPLE"},
210 {required = false, tablevalue = "sortOrder", title = "Sort Order", dataType = "int", default = "1", defaultText = "1-100 the higher the number, lower on the list"},
211 {required = false, tablevalue = "categorises", title = "Categorises", dataType = "string", default = "jobs", defaultText = "What does it categorise: jobs, shipments, vehicles, entities, ammo, weapons"},
212 {required = false, tablevalue = "color", title = "Color", dataType = "color"},
213 {required = false, tablevalue = "startExpanded", title = "Start Expanded", dataType = "bool"},
214 {title = "", dataType = ""},
215 },
216 ["credits"] ={
217 {
218 name = "Dan",
219 description = "Developed DConfig from front to end.",
220 link = "http://steamcommunity.com/profiles/76561198142166948",
221 gmodstore = "https://www.gmodstore.com/users/view/76561198122449521",
222 },
223 {
224 name = "Dan's Garry's Mod Lua Tutorials",
225 description = "This isn't so much 'credits', but more of a 'hey you should check out my awesome youtube videos! I've setup some really great tutorials that will help you create your own addons and potentially make money!",
226 youtube = "https://www.youtube.com/channel/UC79kOQgCTBgklDpr_HXKZMQ",
227 },
228 {
229 name = "CSi. Xavier",
230 description = "Xavier has always been such a great help. With this project specifically he helped crush numerous bugs and provided solutions to what seemed to be impossible. Not only did he provide support with coding he also acted as great motivation to pursue working on the script. He additionally created bignet.lua which is solely why the addon works so well.",
231 link = "http://steamcommunity.com/profiles/76561198040907330"
232 },
233 {
234 name = "Atticus",
235 description = "Atticus provided the original script idea and provided input as the development of DConfig progressed.",
236 link = "http://steamcommunity.com/profiles/76561198073513480",
237 gmodstore = "https://www.gmodstore.com/users/view/76561198073513480",
238 },
239 {
240 name = "Ted.lua",
241 description = "Ted.lua helped with minor styling within the menu. Additionally he was also another outlet for motivation.",
242 link = "http://steamcommunity.com/profiles/76561198058539108",
243 gmodstore = "https://www.gmodstore.com/users/view/76561198058539108",
244 },
245 },
246}
247
248DCONFIG.Settings.Colors ={
249["background"]= Color(38, 38, 44, 255),
250["foreground"]= Color(28, 28, 34, 255),
251["inactiveClr"] = Color(68, 68, 68, 255),
252["theme"] = Color(200,53,78),
253}
254
255local DConfigDir = "darkrpmasterconfig"
256local JobsFile = DConfigDir .. "/jobs.txt"
257
258local function ConvertToAllowedTable( str )
259 local tbl = string.Explode( ',', str )
260 local allowedTbl = {}
261 for k,v in pairs(tbl) do
262 allowedTbl[k] = _G[v]
263 end
264 return allowedTbl
265end
266
267local function categoryExists(type, name)
268 local found = false
269 local catType = DarkRP.getCategories()[type]
270 for k,v in pairs(catType) do
271
272 if catType[k].name == name then
273 found = true
274 break
275 end
276
277 end
278
279 return found
280
281end
282
283function DConfigAddCustomJob(job)
284 if not RPExtraTeams[_G[job.jobvar]] then
285 if job.customCheckString and SERVER then
286 local check
287 local errorMSG
288 if job.customCheckString then
289 check, errorMSG = CompileString("local ply = select(1,...) " .. job.customCheckString, "customCheck")
290 end
291 if check then
292 job.customCheck = check
293 elseif errorMSG then
294 print("[DCONFIG: CUSTOM CHECK MISTAKE]: " .. errorMSG)
295 end
296 end
297 if not categoryExists("jobs", job.category) then
298 dpcall(DarkRP.createCategory, {
299 name = job.category,
300 sortOrder = 100,
301 categorises = "jobs",
302 color = Color(0, 107, 0, 255),
303 startExpanded = true,
304 dconfig = true,
305 })
306 end
307 _G[job.jobvar] = dpcall(DarkRP.createJob, job.name, job)
308 if job.cp and not (GM or GAMEMODE).CivilProtection[_G[job.var]] then
309 (GM or GAMEMODE).CivilProtection[_G[job.jobvar]] = true
310 end
311 if job.hitman then
312 dpcall(DarkRP.addHitmanTeam, _G[job.jobvar])
313 end
314 if job.defaultTeam then
315 (GM or GAMEMODE).DefaultTeam = _G[job.jobvar]
316 end
317 end
318
319end
320
321local function errhandler(err)
322 ErrorNoHalt("\nDConfig prevented an error from breaking the addon entirely."
323 .."\n ** This is most likely an error with your hard-coded jobs, weapons or entities in .lua files.\n\n")
324 ErrorNoHalt(err)
325end
326function dpcall(fn, ...)
327 local ret = {xpcall(fn, errhandler, ...)}
328
329 local succ = table.remove(ret, 1)
330
331 return unpack(ret)
332end
333
334hook.Add("loadCustomDarkRPItems", "LoadCustomDataDconfig", function()
335
336 if SERVER then
337 dpcall(LoadCategories)
338 dpcall(LoadJobs)
339 dpcall(LoadShipments)
340 dpcall(LoadEntities)
341 dpcall(LoadAmmo)
342 dpcall(LoadDarkRPSettings)
343 end
344
345 dpcall(LoadDoorGroups)
346
347 timer.Simple(8, function()
348 hook.Run("DConfigDataLoaded")
349 end)
350
351
352end )
353
354function DConfigAddCustomAmmo(ammo)
355 if not categoryExists("ammo", ammo.category) then
356 dpcall(DarkRP.createCategory, {
357 name = ammo.category,
358 sortOrder = 100,
359 categorises = "ammo",
360 color = Color(0, 107, 0, 255),
361 startExpanded = true,
362 dconfig = true,
363 })
364 end
365 local exists = false
366 local ammoTypes = (GM or GAMEMODE).AmmoTypes
367 for k,v in pairs(ammoTypes) do
368 if ammo.name == ammoTypes[k].name then
369 exists = true
370 end
371 end
372 if not exists then
373 if ammo.customCheck then
374 ammo.customCheck = CompileString("local ply = select(1,...) " .. ammo.customCheckString, "customCheck", false)
375 end
376 if ammo.allowed and ammo.allowedString then
377 ammo.allowed = ConvertToAllowedTable(ammo.allowedString) or nil
378 end
379 if ammo.model == "nil" then
380 ammo.model = "models/Items/BoxSRounds.mdl"
381 end
382 dpcall(DarkRP.createAmmoType, ammo.ammoType, ammo)
383 end
384
385end
386
387function DConfigAddCustomShipment(shipment)
388 if not categoryExists("shipments", shipment.name) then
389 dpcall(DarkRP.createCategory, {
390 name = shipment.category,
391 sortOrder = 100,
392 categorises = "shipments",
393 color = Color(0, 107, 0, 255),
394 startExpanded = true,
395 dconfig = true,
396 })
397 end
398 if not categoryExists("weapons", shipment.name) then
399 dpcall(DarkRP.createCategory, {
400 name = shipment.category,
401 sortOrder = 100,
402 categorises = "weapons",
403 color = Color(0, 107, 0, 255),
404 startExpanded = true,
405 dconfig = true,
406 })
407 end
408
409 local exists = false
410 for k,v in pairs(CustomShipments) do
411 if shipment.name == CustomShipments[k].name then
412 exists = true
413 end
414 end
415 if not exists then
416 if shipment.customCheck then
417 shipment.customCheck = CompileString("local ply = select(1,...) " .. shipment.customCheckString, "customCheck", false)
418 end
419 if shipment.allowed and shipment.allowedString then
420 shipment.allowed = ConvertToAllowedTable(shipment.allowedString) or nil
421 end
422 dpcall(DarkRP.createShipment, shipment.name, shipment)
423 end
424
425end
426
427function DConfigAddCustomEntity(entity)
428 if not categoryExists("entities", entity.name) then
429 dpcall(DarkRP.createCategory, {
430 name = entity.category,
431 sortOrder = 100,
432 categorises = "entities",
433 color = Color(0, 107, 0, 255),
434 startExpanded = true,
435 dconfig = true,
436 })
437 end
438 local exists = false
439 for k,v in pairs(DarkRPEntities) do
440 if entity.name == DarkRPEntities[k].name then
441 exists = true
442 end
443 end
444 if not exists then
445 if entity.customCheck then
446 entity.customCheck = CompileString("local ply = select(1,...) " .. entity.customCheckString, "customCheck", false)
447 end
448 if entity.allowedString then
449 entity.allowed = ConvertToAllowedTable(entity.allowedString) or nil
450 end
451
452 dpcall(DarkRP.createEntity, entity.name, entity)
453 end
454
455end
456local cats = {"ammo","shipments","jobs","entities","vehicles"}
457function DConfigAddCustomCategory(category)
458 dpcall(DarkRP.createCategory, category)
459 if category.categorises == "shipments" or category.categorises == "weapons" then
460 category.categorises = "weapons"
461 dpcall(DarkRP.createCategory, category)
462 category.categorises = "shipments"
463 dpcall(DarkRP.createCategory, category)
464 end
465end