feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
@ -142,6 +142,20 @@ export class GameRuntime {
|
|||||||
rbxlSkipped++; continue;
|
rbxlSkipped++; continue;
|
||||||
}
|
}
|
||||||
const luaSource = unpackRobloxLuaCode(s.code);
|
const luaSource = unpackRobloxLuaCode(s.code);
|
||||||
|
// SAFETY: пропускаем скрипты с tight-loop'ами через ChildAdded:wait()
|
||||||
|
// или WaitForChild через пользовательский while-not-FindFirstChild.
|
||||||
|
// Они подвешивают страницу (wait() возвращает синхронно, скрипт
|
||||||
|
// никогда не yield'ит из C-call). Распространённый Roblox 2009
|
||||||
|
// паттерн который мы не можем безопасно эмулировать.
|
||||||
|
if (luaSource && (
|
||||||
|
/while\s+not\s+\w+[:.]FindFirstChild/.test(luaSource) ||
|
||||||
|
/ChildAdded:[Ww]ait\(\)/.test(luaSource) ||
|
||||||
|
/:[Gg]etChildren\(\)\s*\[\d/.test(luaSource)
|
||||||
|
)) {
|
||||||
|
rbxlSkipped++;
|
||||||
|
console.warn(`[GameRuntime] skipped ${s.name}: содержит небезопасный tight-loop (WaitForChild/ChildAdded:wait)`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (luaSource && luaSource.trim()) {
|
if (luaSource && luaSource.trim()) {
|
||||||
// Эвристика Tool: если скрипт ссылается на Equipped/Activated
|
// Эвристика Tool: если скрипт ссылается на Equipped/Activated
|
||||||
// или Tool = script.Parent — он лежит в Tool. Все Tool-скрипты
|
// или Tool = script.Parent — он лежит в Tool. Все Tool-скрипты
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user