feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
@ -171,18 +171,10 @@ finishEvent.Event:Connect(function()
|
|||||||
winSound:Play()
|
winSound:Play()
|
||||||
__rbxl_show_text("Победа! Ты дошёл до финиша!", 5)
|
__rbxl_show_text("Победа! Ты дошёл до финиша!", 5)
|
||||||
-- Конфетти над игроком (паритет с JS game.scene.spawnParticles)
|
-- Конфетти над игроком (паритет с JS game.scene.spawnParticles)
|
||||||
print("[g2] before pos call")
|
local px = __rbxl_player_x()
|
||||||
local pos = __rbxl_player_pos()
|
local py = __rbxl_player_y()
|
||||||
print("[g2] pos=", tostring(pos), "type=", type(pos))
|
local pz = __rbxl_player_z()
|
||||||
if pos then
|
|
||||||
print("[g2] pos.x=", tostring(pos.x), "pos.y=", tostring(pos.y))
|
|
||||||
end
|
|
||||||
local px = (pos and pos.x) or 0
|
|
||||||
local py = (pos and pos.y) or 6
|
|
||||||
local pz = (pos and pos.z) or 33
|
|
||||||
print("[g2] spawning particles at", px, py + 3, pz)
|
|
||||||
__rbxl_spawn_particles("confetti", px, py + 3, pz, 3, 3)
|
__rbxl_spawn_particles("confetti", px, py + 3, pz, 3, 3)
|
||||||
print("[g2] particles call returned")
|
|
||||||
end)`,
|
end)`,
|
||||||
g2_finish: `-- === Скрипт финиш-зоны (Lua) ===
|
g2_finish: `-- === Скрипт финиш-зоны (Lua) ===
|
||||||
-- Висит на невидимой зоне над зелёной площадкой.
|
-- Висит на невидимой зоне над зелёной площадкой.
|
||||||
|
|||||||
@ -1826,13 +1826,28 @@ export function registerRobloxShim(lua, opts) {
|
|||||||
count: Number(count) || 1,
|
count: Number(count) || 1,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
// Позиция игрока для удобства (для confetti над головой и т.п.)
|
// Позиция игрока для удобства — отдельные функции для x/y/z, чтобы
|
||||||
// Берётся из api.updatePlayerPos который GameRuntime обновляет каждый кадр.
|
// wasmoon не оборачивал результат в userdata-proxy.
|
||||||
|
global.set('__rbxl_player_x', () => {
|
||||||
|
const p = api._realPlayerPos || hrp._position || { X: 0 };
|
||||||
|
return Number(p.x ?? p.X) || 0;
|
||||||
|
});
|
||||||
|
global.set('__rbxl_player_y', () => {
|
||||||
|
const p = api._realPlayerPos || hrp._position || { Y: 0 };
|
||||||
|
return Number(p.y ?? p.Y) || 0;
|
||||||
|
});
|
||||||
|
global.set('__rbxl_player_z', () => {
|
||||||
|
const p = api._realPlayerPos || hrp._position || { Z: 0 };
|
||||||
|
return Number(p.z ?? p.Z) || 0;
|
||||||
|
});
|
||||||
|
// Совместимость: __rbxl_player_pos() возвращает 3 числа (x, y, z).
|
||||||
global.set('__rbxl_player_pos', () => {
|
global.set('__rbxl_player_pos', () => {
|
||||||
try {
|
|
||||||
const p = api._realPlayerPos || hrp._position || { X: 0, Y: 0, Z: 0 };
|
const p = api._realPlayerPos || hrp._position || { X: 0, Y: 0, Z: 0 };
|
||||||
return { x: p.x ?? p.X, y: p.y ?? p.Y, z: p.z ?? p.Z };
|
return {
|
||||||
} catch (_) { return { x: 0, y: 0, z: 0 }; }
|
x: Number(p.x ?? p.X) || 0,
|
||||||
|
y: Number(p.y ?? p.Y) || 0,
|
||||||
|
z: Number(p.z ?? p.Z) || 0,
|
||||||
|
};
|
||||||
});
|
});
|
||||||
// Достаём ссылку на Lua-функцию один раз; вызовы безопасны (не doStringSync)
|
// Достаём ссылку на Lua-функцию один раз; вызовы безопасны (не doStringSync)
|
||||||
const luaResumeCo = lua.global.get('__rbxl_resume_co');
|
const luaResumeCo = lua.global.get('__rbxl_resume_co');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user