Поддержка скриптов проекта 2792 (Roblox RayGun Tool, 9 скриптов).
Lighting: ClockTime, GetMinutesAfterMidnight, SetMinutesAfterMidnight,
GetSunDirection, fog* поля.
game:service(name) — старый Roblox API (lowercase alias на GetService).
Players: GetPlayerFromCharacter, playerFromCharacter, PlayerAdded, ChildAdded.
Instance.new новых типов:
- Tool/HopperBin: Equipped/Unequipped/Activated/Grip*/CanBeDropped
- IntValue/NumberValue/BoolValue/StringValue/ObjectValue + Value/Changed
- BodyForce/BodyVelocity/BodyPosition/BodyGyro + force/Velocity/MaxForce
- Weld/Motor6D/HingeConstraint + Part0/Part1/C0/C1
- Sparkles/ParticleEmitter/Fire/PointLight + Enabled/Color/Rate
- Mouse: Button1Down/KeyDown signals, Icon, Hit, Target, X/Y
Глобалы: BrickColor.new('name'/r,g,b) с палитрой 25+ цветов,
Ray.new, Region3.new.
Фикс WASM crash: rbx_wait минимум 0.016с (1 кадр) — без этого
while true do wait() end делал tight-loop без yield → stack overflow.
Добавлен RUBLOX_LUA_API_CHANGELOG.md — журнал что было добавлено
для каждой игры (для будущего портирования API в JS-движок).
5.6 KiB
Lua API — журнал изменений
Файл фиксирует что было добавлено в Lua-runtime при работе с реальными Roblox-играми. Цель — потом продублировать тот же API для JS-движка (на будущее, сейчас работаем только с Lua).
Формат: дата + что и почему + куда добавлено + надо ли портировать в JS.
2026-06-08 — Итерация 1: RayGun (проект 2792, 9 скриптов)
Контекст: Roblox-Tool пушка-стрелялка, использует Tool-API, Lighting, Mouse, Welds, BodyForce, BrickColor, IntValue для leaderboard.
Добавлено в RobloxShim.js
Глобалы:
BrickColor.new("Bright red")+ ~25 цветов (White, Black, Bright red/blue/green, Pink, Brown, Reddish brown, Cyan, Magenta и др.). Возвращает{Color, Name, R, G, B}.Ray.new(origin, direction)— для raycast (заглушка структуры).Region3.new(min, max)— куб (заглушка).TweenInfo.new(time, easingStyle, easingDirection, repeatCount, reverses, delayTime)NumberSequence,ColorSequence,NumberRange,Rect— конструкторы-стабы.
Enum расширения: InfoType, SortOrder, FillDirection, Font, TextXAlignment/TextYAlignment, ScaleType, AspectType, PartType, SurfaceType, ContextActionResult, UserInputState, BorderMode, FormFactor.
game методы:
game:service(name)(lowercase alias на GetService) — старый Roblox API.game.GetServiceFromName= alias.game.JobId/PlaceId/GameId/CreatorId/CreatorType— stub fields.
Lighting:
Brightness,ClockTime,TimeOfDay,OutdoorAmbient,FogStart/End/Color.GetMinutesAfterMidnight(),SetMinutesAfterMidnight(m).GetMoonDirection(),GetSunDirection().
Players:
GetPlayers(),GetPlayerFromCharacter(char),playerFromCharacteralias.PlayerAdded,PlayerRemoving,ChildAddedsignals.
Instance.new новые типы:
Tool/HopperBin— Equipped/Unequipped/Activated/Deactivated signals, GripForward/Right/Up/Pos, CanBeDropped, RequiresHandle, ToolTip.IntValue/NumberValue/BoolValue/StringValue/ObjectValue/CFrameValue/Vector3Value/Color3Value/BrickColorValue/RayValue—.Value+.Changedсигнал.BodyForce/BodyVelocity/BodyPosition/BodyGyro/BodyAngularVelocity/BodyThrust—.force,.Velocity,.MaxForce,.P/.D.Weld/WeldConstraint/Motor6D/Snap/HingeConstraint/BallSocketConstraint/RopeConstraint/SpringConstraint— Part0/Part1/C0/C1/Enabled.Sparkles/ParticleEmitter/Smoke/Fire/Trail/Beam/PointLight/SurfaceLight/SpotLight— Enabled/Color/Rate/Lifetime/Brightness/Range.Mouse— Button1Down/Up, Button2Down/Up, Move, KeyDown/Up, WheelForward/Backward, Icon, Hit (Position), Target, TargetSurface, X/Y, ViewSizeX/Y.
Исправлено
rbx_wait(sec): минимум 0.016с (1 кадр).while true do wait() endбез аргумента раньше делал tight loop без yield → WASM stack overflow ("memory access out of bounds").
Надо ли портировать в JS-движок?
✅ Да, всё — это базовый Roblox-совместимый API, который должен работать независимо от языка скриптов.
JS-эквивалент будет такой же структурой:
BrickColor.new("Bright red")→new BrickColor("Bright red")ToolEquipped/Unequipped → JS-EventEmitter методы- BodyForce/Weld/Sparkles → JS-классы с теми же полями
- Mouse — глобальный объект
game.mouseили черезplayer:GetMouse().
Куда добавляется API
| Источник | Файл | Что туда идёт |
|---|---|---|
| Глобалы (Vector3, Color3, BrickColor, Enum) | RobloxShim.js через global.set |
Конструкторы, Enum-таблицы |
| Instance.new типы | RobloxShim.js в ветке global.set('Instance', {new: ...}) |
Tool, BodyForce, Weld, Sparkles и т.д. |
| Сервисы | RobloxShim.js через makeService(name) |
Lighting, Players, RunService и т.д. |
| Wait/Task | RobloxShim.js в Lua-prelude (lua.doStringSync) |
rbx_wait, task.wait |
| Setter Part-свойств | newPart() через Object.defineProperty |
Position, Color, Anchored шлют partSet |
| Команды от Lua к Babylon | rbxl-lua-integration.js handleLuaCommand |
partSet, sceneCreate, sceneDelete |
Принципы расширения API
- No-op > Падение. Лучше пустой stub-метод чем
nil error. - Сигналы (
Connect/Fire) всегда есть на любом объекте. - Coloncall совместимость. Если есть
Foo.Bar, обычно делаем иFoo:Bar(lowercase) как alias. - При добавлении нового Instance-типа — давай ему все типичные поля сразу, не только те что нужны прямо сейчас (Equipped + Unequipped + Activated вместе, даже если скрипт юзает только Equipped).
- Логировать сюда после каждой итерации — что было добавлено и из какой игры.