studio/RUBLOX_LUA_API_CHANGELOG.md
min ca92ba1988 feat(lua): Итерация 1 RayGun — Tool/Mouse/BodyForce/Weld/IntValue/BrickColor
Поддержка скриптов проекта 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-движок).
2026-06-08 13:39:56 +03:00

5.6 KiB
Raw Blame History

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), playerFromCharacter alias.
  • PlayerAdded, PlayerRemoving, ChildAdded signals.

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")
  • Tool Equipped/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

  1. No-op > Падение. Лучше пустой stub-метод чем nil error.
  2. Сигналы (Connect/Fire) всегда есть на любом объекте.
  3. Coloncall совместимость. Если есть Foo.Bar, обычно делаем и Foo:Bar (lowercase) как alias.
  4. При добавлении нового Instance-типа — давай ему все типичные поля сразу, не только те что нужны прямо сейчас (Equipped + Unequipped + Activated вместе, даже если скрипт юзает только Equipped).
  5. Логировать сюда после каждой итерации — что было добавлено и из какой игры.