feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39

Merged
min merged 215 commits from feat/lua-50-games-bundle into main 2026-06-09 21:59:25 +00:00
2 changed files with 21 additions and 12 deletions
Showing only changes of commit 189a23ff7c - Show all commits

View File

@ -2166,9 +2166,14 @@ ${SNIPPET_BROADCAST}
local won = false local won = false
-- При старте облёт уровня камерой по точкам -- При старте облёт уровня камерой по точкам.
-- (точки x,y,z через запятую; segDuration длительность одного отрезка) -- 1-й arg путь камеры (4 точки x,y,z),
__rbxl_camera_cutscene("0,18,-10, 12,12,8, -12,12,18, 0,10,28", 1.8) -- 2-й длительность одного отрезка,
-- 3-й куда камера смотрит в каждой точке (тоже 4 точки).
__rbxl_camera_cutscene(
"0,18,-10, 12,12,8, -12,12,18, 0,10,28", 1.8,
"0,2,8, 0,2,14, 0,2,20, 0,2,27"
)
local winSound = Instance.new("Sound", workspace) local winSound = Instance.new("Sound", workspace)
winSound.SoundId = "win"; winSound.Volume = 1 winSound.SoundId = "win"; winSound.Volume = 1

View File

@ -1966,16 +1966,20 @@ export function registerRobloxShim(lua, opts) {
send('player.heal', { amount: Number(amount) || 0 }); send('player.heal', { amount: Number(amount) || 0 });
}); });
// Камера-облёт — паритет с JS game.camera.cutscene(points, opts). // Камера-облёт — паритет с JS game.camera.cutscene(points, opts).
// pointsFlat: x1,y1,z1,x2,y2,z2,... — потому что массив объектов // pointsFlat/lookAtFlat: x1,y1,z1,x2,y2,z2,... — потому что массив
// в wasmoon через C-boundary неудобен. // объектов в wasmoon через C-boundary неудобен.
global.set('__rbxl_camera_cutscene', (pointsFlat, segDuration) => { global.set('__rbxl_camera_cutscene', (pointsFlat, segDuration, lookAtFlat) => {
const arr = String(pointsFlat || '').split(',').map((s) => Number(s) || 0); const parse = (s) => {
const points = []; const out = [];
for (let i = 0; i + 2 < arr.length; i += 3) { const arr = String(s || '').split(',').map((v) => Number(v) || 0);
points.push({ x: arr[i], y: arr[i + 1], z: arr[i + 2] }); for (let i = 0; i + 2 < arr.length; i += 3) {
} out.push({ x: arr[i], y: arr[i + 1], z: arr[i + 2] });
}
return out;
};
send('camera.cutscene', { send('camera.cutscene', {
points, points: parse(pointsFlat),
lookAt: lookAtFlat ? parse(lookAtFlat) : [],
segDuration: Number(segDuration) || 1.5, segDuration: Number(segDuration) || 1.5,
}); });
}); });