diff --git a/src/community/docsGamesBuildersLua.js b/src/community/docsGamesBuildersLua.js index 31b4eba..340c733 100644 --- a/src/community/docsGamesBuildersLua.js +++ b/src/community/docsGamesBuildersLua.js @@ -337,12 +337,23 @@ UserInputService.InputBegan:Connect(function(input, gp) part.Color = Color3.fromRGB(100, 255, 100) -- зелёная -- Находим дверь по имени и поднимаем её + print("[g4] looking for door...") local door = workspace:FindFirstChild("Дверь") + print("[g4] door=", tostring(door)) + if not door then + -- Перебираем всех children и пишем имена для отладки + for i, child in ipairs(workspace:GetChildren()) do + print("[g4] child", i, "name=", child.Name) + end + end if door then local dp = door.Position + print("[g4] door pos=", dp.X, dp.Y, dp.Z) local goal = { Position = Vector3.new(dp.X, dp.Y + 6, dp.Z) } - TweenService:Create(door, TweenInfo.new(1.2), goal):Play() + local tween = TweenService:Create(door, TweenInfo.new(1.2), goal) + tween:Play() door.CanCollide = false + print("[g4] tween started") end end)`, g4_finish: `-- === Скрипт финиша (Lua) === diff --git a/src/editor/engine/lua/RobloxShim.js b/src/editor/engine/lua/RobloxShim.js index 4a4aa74..a431ac5 100644 --- a/src/editor/engine/lua/RobloxShim.js +++ b/src/editor/engine/lua/RobloxShim.js @@ -1741,69 +1741,6 @@ export function registerRobloxShim(lua, opts) { end wait = rbx_wait - -- ═══════════════════════════════════════════════════════════════ - -- Метатаблица для Vector3 — операторы +, -, *, /, унарный - - -- wasmoon не создаёт __add автоматически для JS-классов. - -- Оборачиваем Vector3.new чтобы возвращаемая таблица имела __add. - -- ═══════════════════════════════════════════════════════════════ - do - local _origV3New = Vector3.new - local v3meta = {} - local function makeV3(x, y, z) - local v = _origV3New(x or 0, y or 0, z or 0) - -- v — это userdata от wasmoon. Делаем proxy-таблицу с метой. - local t = setmetatable({}, v3meta) - rawset(t, '_v', v) - rawset(t, 'X', v.X); rawset(t, 'Y', v.Y); rawset(t, 'Z', v.Z) - rawset(t, 'Magnitude', v.Magnitude or math.sqrt(x*x+y*y+z*z)) - return t - end - local function asV3(v) - if type(v) == 'table' and rawget(v, 'X') ~= nil then return v end - if v == nil then return makeV3(0,0,0) end - return makeV3(v.X or 0, v.Y or 0, v.Z or 0) - end - v3meta.__add = function(a, b) - a = asV3(a); b = asV3(b) - return makeV3(a.X + b.X, a.Y + b.Y, a.Z + b.Z) - end - v3meta.__sub = function(a, b) - a = asV3(a); b = asV3(b) - return makeV3(a.X - b.X, a.Y - b.Y, a.Z - b.Z) - end - v3meta.__mul = function(a, b) - if type(b) == 'number' then a = asV3(a); return makeV3(a.X*b, a.Y*b, a.Z*b) end - if type(a) == 'number' then b = asV3(b); return makeV3(b.X*a, b.Y*a, b.Z*a) end - a = asV3(a); b = asV3(b) - return makeV3(a.X*b.X, a.Y*b.Y, a.Z*b.Z) - end - v3meta.__div = function(a, b) - if type(b) == 'number' then a = asV3(a); return makeV3(a.X/b, a.Y/b, a.Z/b) end - a = asV3(a); b = asV3(b) - return makeV3(a.X/b.X, a.Y/b.Y, a.Z/b.Z) - end - v3meta.__unm = function(a) - a = asV3(a); return makeV3(-a.X, -a.Y, -a.Z) - end - v3meta.__eq = function(a, b) - a = asV3(a); b = asV3(b) - return a.X == b.X and a.Y == b.Y and a.Z == b.Z - end - v3meta.__tostring = function(a) - a = asV3(a) - return string.format("%g, %g, %g", a.X, a.Y, a.Z) - end - Vector3 = setmetatable({ - new = makeV3, - zero = makeV3(0,0,0), - one = makeV3(1,1,1), - xAxis = makeV3(1,0,0), - yAxis = makeV3(0,1,0), - zAxis = makeV3(0,0,1), - FromNormalId = function() return makeV3(0,0,0) end, - }, {}) - end - -- Roblox legacy globals tick = function() return os.time() end -- секунды с epoch time = function() return os.clock() * 1000 end -- ms аптайм