/* BasedMTA — Panels batch 2: Scripts, Resources, Events */
const { useState: useState2, useEffect: useEffect2, useMemo: useMemo2 } = React;
// ====================================================================
// SCRIPTS PANEL
// ====================================================================
const SCRIPT_TREE = [
{ name: "cheats", count: 2, dots: 2, children: [
{ name: "__loadstring/", folder: true },
{ name: "chunk_9206da70599b82ca.luac", size: "1.5K" }]
},
{ name: "cinezone", count: 1, dots: 1 },
{ name: "ingame-map-editor", count: 1, dots: 1 },
{ name: "mcafee", count: 1, dots: 1, children: [
{ name: "__loadstring/", folder: true },
{ name: "chunk_177f201f2024647e.luac", size: "4.6K", selected: true }]
},
{ name: "mfker", count: 2, dots: 2 },
{ name: "misc", count: 2, dots: 2 },
{ name: "punish", count: 1, dots: 1 },
{ name: "skidmarks", count: 6, dots: 2, children: [
{ name: "__loadstring/", folder: true },
{ name: "chunk_b524aabf8c3207a7.luac", size: "1.6K" },
{ name: "chunk_fb8969da6b301901.luac", size: "4.6K" },
{ name: "chunk_da7d1c70303d13af.luac", size: "2.7K" }]
}];
const MCAFEE_DECOMPILED = ` end
for r6_pr1, r7_pr1 in ipairs(r2_pr1) do
if r1_pr1 == r7_pr1 then
return true
end
end
return false
end
local r3_rt = addDebugHook("preFunction", function(r0_pr2, r1_pr2, r2_pr2, r3_pr2, r4_pr)
if mcMainAuthorize(r1_pr2, getResourceName(r0_pr2)) then
return
end
triggerServerEvent("mcafee.violation", resourceRoot, getResourceName(r0_pr2), r1_pr2)
end, r1_rt)
if not r3_rt or type(r3_rt) ~= "boolean" then
triggerServerEvent("mcafee.violation", resourceRoot, getResourceName(resource), "addD")
end
local r4_rt = {
"load",
"loadstring",
"executeBrowserJavascript",
"triggerLatentServerEvent",
"triggerServerEvent"
}
local r5_rt = addDebugHook("preFunction", function(r0_pr3, r1_pr3, r2_pr3, r3_pr3, r4_p)
triggerServerEvent("mcafee.validate", resourceRoot, getResourceName(r0_pr3), r1_pr3)
...
})
end, r4_rt)
if not r5_rt or type(r5_rt) ~= "boolean" then
triggerServerEvent("mcafee.violation", resourceRoot, getResourceName(resource), "addD")
end`;
function ScriptsPanel() {
const [filterTab, setFilterTab] = useState2("Compiled");
const [search, setSearch] = useState2("");
const [expanded, setExpanded] = useState2({ cheats: true, mcafee: true, skidmarks: true });
const [selected, setSelected] = useState2("chunk_177f201f2024647e.luac");
const toggle = (n) => setExpanded((e) => ({ ...e, [n]: !e[n] }));
const filtered = SCRIPT_TREE.filter(
(r) => !search || r.name.toLowerCase().includes(search.toLowerCase()) ||
(r.children || []).some((c) => c.name.toLowerCase().includes(search.toLowerCase()))
);
return (
208 resources
10 compiled
368 source
{["All", "Compiled", "Source"].map((t) =>
setFilterTab(t)}
className={"bmta-subtab" + (t === filterTab ? " active" : "")}
style={{ paddingLeft: 14, paddingRight: 14 }}>
{t}
)}
{filtered.map((r) =>
toggle(r.name)}
style={{ display: "flex", alignItems: "center", padding: "3px 6px", cursor: "pointer", color: "var(--bmta-text-strong)" }}>
{r.children ? expanded[r.name] ? "v" : ">" : ""}
{"●".repeat(r.dots)}
{r.name}
{r.count}
{r.children && expanded[r.name] && r.children.map((c, i) =>
!c.folder && setSelected(c.name)}
style={{
display: "flex", padding: "2px 6px 2px 28px", cursor: c.folder ? "default" : "pointer",
color: c.folder ? "var(--bmta-text-faint)" : c.name === selected ? "var(--bmta-accent)" : "var(--bmta-text)",
background: c.name === selected ? "var(--bmta-accent-soft)" : "transparent"
}}>
{!c.folder && ●}
{c.name}
{c.size && {c.size}}
)}
)}
__loadstring/{selected}
4.6 KB
|
217 lines
|
decompiled
{MCAFEE_DECOMPILED.split("\n").map((line, i) =>
{String(184 + i).padStart(3, " ")}
)}
Copy to Clipboard
Export Script
Export Resource
Export All
→ C:\BasedMTA_Dump
);
}
function colorLua(line) {
const KW = /\b(local|function|end|if|then|else|for|in|do|return|true|false|nil|and|or|not|while)\b/g;
const FN = /\b(triggerServerEvent|getResourceName|addDebugHook|ipairs|pairs|type|load|loadstring|executeBrowserJavascript|triggerLatentServerEvent|mcMainAuthorize|addEventHandler)\b/g;
const STR = /(".*?")/g;
const NUM = /\b(\d+(?:\.\d+)?)\b/g;
const COM = /(--[^\n]*)/g;
const VAR = /\b(r\d+_\w+|resourceRoot|resource)\b/g;
return line.
replace(/&/g, "&").
replace(//g, ">").
replace(COM, '$1').
replace(STR, '$1').
replace(KW, '$1').
replace(FN, '$1').
replace(VAR, '$1').
replace(NUM, '$1');
}
// ====================================================================
// RESOURCES PANEL
// ====================================================================
const RESOURCE_NAMES = [
"NRGmod", "admin", "adminfeatures", "admingod", "ae86", "agentskin", "airbomb", "aircraftkillcam",
"airtarg", "airvel", "akina", "alienpack", "alpha", "amogus-car", "antiHipfire", "area_zombies",
"at400", "autobusmod", "backtoschool", "bansh", "bentley", "blimp", "bloodharvest", "bloodpool",
"bouncingbetty", "bounty_hunt", "cheats", "cinezone", "mcafee", "mfker", "misc", "punish",
"skidmarks", "ingame-map-editor", "voice_frp", "disabledm", "logmanager", "hedit"];
function ResourcesPanel() {
const [search, setSearch] = useState2("");
const [running, setRunning] = useState2(() => Object.fromEntries(RESOURCE_NAMES.map((n) => [n, true])));
const total = RESOURCE_NAMES.length;
const live = Object.values(running).filter(Boolean).length;
const list = RESOURCE_NAMES.filter((n) => n.toLowerCase().includes(search.toLowerCase()));
return (
{total} resources
{live} running
Refresh
{list.map((n) => {
const on = !!running[n];
return (
{n}
setRunning((r) => ({ ...r, [n]: !on }))}>
{on ? "Stop" : "Start"}
{}}>Restart
);
})}
);
}
// ====================================================================
// EVENTS PANEL
// ====================================================================
const EVENT_TEMPLATES = [
{ evt: "mcafee.validate", res: "mcafee", file: "mcHooks.luac:139", args: ['"hedit"', '"triggerServerEvent"', '"logmanager.lua"', "150", '{[1]="requestMiniLog", [2]=root, [3]=vehicle, [4]=3}'], argTags: ["str", "str", "str", "num", "args"] },
{ evt: "requestMiniLog", res: "hedit", file: "logmanager.lua:150", args: ["vehicle", "3"], argTags: ["id", "num"] },
{ evt: "mcafee.validate", res: "mcafee", file: "mcHooks.luac:139", args: ['"misc"', '"triggerServerEvent"', '"client.luac"', "32", '{[1]="onToggleHeadlights", [2]=player, [3]=vehicle}'], argTags: ["str", "str", "str", "num", "args"] },
{ evt: "onToggleHeadlights", res: "misc", file: "client.luac:32", args: ["vehicle"], argTags: ["id"] },
{ evt: "mcafee.validate", res: "mcafee", file: "mcHooks.luac:139", args: ['"voice_frp"', '"triggerServerEvent"', '"client.lua"', "93", '{[1]="voice:addToPlayerBroadcast", [2]=resource, [3]=player, [4]=p…'], argTags: ["str", "str", "str", "num", "args"] },
{ evt: "voice:addToPlayerBroadcast", res: "voice_frp", file: "client.lua:93", args: ["player", "player"], argTags: ["id", "id"] },
{ evt: "mcafee.validate", res: "mcafee", file: "mcHooks.luac:139", args: ['"disabledm"', '"triggerServerEvent"', '"client.lua"', "47", '{[1]="server:toggleDMMode", [2]=player, [3]=true}'], argTags: ["str", "str", "str", "num", "args"] },
{ evt: "server:toggleDMMode", res: "disabledm", file: "client.lua:47", args: ["true"], argTags: ["str"] },
{ evt: "mcafee.validate", res: "mcafee", file: "mcHooks.luac:139", args: ['"voice_frp"', '"triggerServerEvent"', '"client.lua"', "107", '{[1]="voice:removePlayerBroadcast", [2]=resource, [3]=player, [4]=…'], argTags: ["str", "str", "str", "num", "args"] },
{ evt: "voice:removePlayerBroadcast", res: "voice_frp", file: "client.lua:107", args: ["player", "player"], argTags: ["id", "id"] }];
function EventsPanel() {
const [tab, setTab] = useState2("Logger");
const [running, setRunning] = useState2(true);
const [dir, setDir] = useState2("C->S");
const [autoScroll, setAutoScroll] = useState2(true);
const [hideBuiltin, setHideBuiltin] = useState2(false);
const [clearOnLeave, setClearOnLeave] = useState2(true);
const [filter, setFilter] = useState2("");
const [rows, setRows] = useState2(() => EVENT_TEMPLATES.slice());
useEffect2(() => {
if (!running) return;
const id = setInterval(() => {
setRows((r) => {
const next = EVENT_TEMPLATES[Math.floor(Math.random() * EVENT_TEMPLATES.length)];
return [...r.slice(-60), next];
});
}, 700);
return () => clearInterval(id);
}, [running]);
const list = filter ? rows.filter((r) => (r.evt + r.res + r.file).toLowerCase().includes(filter.toLowerCase())) : rows;
return (
setRunning(!running)}>{running ? "Stop" : "Start"}
S", "S->C", "Both"]} onChange={setDir} width={80} />
setRows([])}>Clear
70ms815K/3.7M{(20000 + rows.length).toLocaleString()}pkt/24030pktloss 1.0%8kbps
* {rows.length}Save
{list.map((r, i) =>
[C->S]
{r.evt}
{r.res}
{r.file}
Copy
Mute
Replay
{r.args.map((a, j) =>
{a}{j < r.args.length - 1 ? "," : ""}
)}
)}
);
}
Object.assign(window, { ScriptsPanel, ResourcesPanel, EventsPanel });