feat: 50 игр на Lua + импорт Roblox для всех + поддержка Lua в плеере #39
@ -8,6 +8,80 @@ Roblox-играми. Цель — потом продублировать тот
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 2026-06-08 — Итерация 3: ROBLOX Battle (arch1_ROBLOX_Battle_v2.rbxl, проект 2851)
|
||||||
|
|
||||||
|
**Контекст:** PvP-арена 2009 в XML, 1677 примитивов, 66 скриптов, 4 команды
|
||||||
|
(TeamBeacon), 5 оружий, 12 батутов, KillFeed, раунды.
|
||||||
|
|
||||||
|
### Реализовано 11 механик из 14
|
||||||
|
|
||||||
|
1. **Teams** — game.Teams сервис + Team-инстансы, эвристика TeamBeacon-Model
|
||||||
|
в converter.py → автоматически создаёт 4 команды по имени.
|
||||||
|
2. **Leaderstats UI** — IntValue.Value реактивно через Object.defineProperty,
|
||||||
|
при Parent=leaderstats шлёт leaderstatSet → существующий LeaderstatsManager.
|
||||||
|
3. **BindableFunction/RemoteFunction** + Message/Hint классы с реактивным Text.
|
||||||
|
4. **KillFeed UI** + creator-tag tracking в Humanoid.TakeDamage. DOM-overlay.
|
||||||
|
5. **SpawnLocation.TeamColor** → scene.team_spawns[].
|
||||||
|
6. **Tool/Model:Clone()** + :MakeJoints/:BreakJoints/:Remove no-op.
|
||||||
|
7. **Creator-tag**: ObjectValue.Name='creator' проверяется на Health=0.
|
||||||
|
8. **RegenerationScript** — no-op skip по имени (Anchored=True держит).
|
||||||
|
9. **BattleArmor** — реактивный Humanoid.MaxHealth/Health/WalkSpeed/JumpPower.
|
||||||
|
10. **WinGui/FireButton** через GuiManager.
|
||||||
|
11. **AdminConsole** — no-op.
|
||||||
|
12. **Bouncer** — BodyVelocity.Y > 10 + Parent=Torso → playerSet jumpVelocity.
|
||||||
|
14. **Mouse.Icon** → CSS cursor через canvas.style.cursor.
|
||||||
|
|
||||||
|
Также добавлены: **tick/time/delay/spawn/LoadLibrary** legacy globals,
|
||||||
|
**SpecialMesh/BlockMesh/CylinderMesh/FileMesh** Instance.new стабы.
|
||||||
|
|
||||||
|
### Новый модуль RbxlHudOverlay.js
|
||||||
|
|
||||||
|
DOM-оверлей поверх canvas с KillFeed (правый верх, fade 5с) + Message
|
||||||
|
(центр верх) + WinGui (центр). Lazy-создаётся.
|
||||||
|
|
||||||
|
### Tight-loop защита (КРИТИЧНО)
|
||||||
|
|
||||||
|
Roblox 2009 паттерн:
|
||||||
|
```lua
|
||||||
|
while not parent:FindFirstChild(name) do parent.ChildAdded:wait() end
|
||||||
|
```
|
||||||
|
|
||||||
|
Наш Signal:wait() возвращает синхронно — цикл бесконечный, страница виснет.
|
||||||
|
**Не можем yield** из JS-функции через wasmoon C-call boundary.
|
||||||
|
|
||||||
|
Перепробовали:
|
||||||
|
- debug.sethook(yield, 'i', N) — внутри C-call падает с `yield across C-call`.
|
||||||
|
- pcall(coroutine.yield) — ошибка ловится, счётчик не сбрасывается, вис.
|
||||||
|
|
||||||
|
**Финал**: regex-фильтр в GameRuntime.js пропускает скрипты с этими паттернами.
|
||||||
|
Из 66 скриптов 37 пропущены, 29 работают. Жертвы: RoundScript, GameClock,
|
||||||
|
Spawner, KillFeed, LeaderboardV3, оружие Launcher/Sword/Slingshot/Cannon.
|
||||||
|
|
||||||
|
### CFrame YXZ Euler
|
||||||
|
|
||||||
|
Переписал `to_euler_xyz` в `rbxl_types.py` под Babylon YXZ convention:
|
||||||
|
rx=asin(-r12), ry=atan2(r02,r22), rz=atan2(r10,r11) + gimbal-lock guard.
|
||||||
|
Раньше извлекал XYZ-Euler, Babylon применял как YXZ — мостики
|
||||||
|
поворачивались криво.
|
||||||
|
|
||||||
|
### Persistence настроек света
|
||||||
|
|
||||||
|
BabylonScene.serialize/loadFromState сохраняют scene.lighting:
|
||||||
|
sunIntensity, hemiIntensity, sceneAmbient, exposure, contrast, saturation.
|
||||||
|
|
||||||
|
### Известные баги
|
||||||
|
|
||||||
|
- `memory access out of bounds` (1 раз) — WASM-crash одного скрипта.
|
||||||
|
- `Cannot read properties of null ('then')` — wasmoon promise-detection,
|
||||||
|
скрипт init крашится но не блокирует.
|
||||||
|
- 0 teams при загрузке старого проекта — нужен переимпорт.
|
||||||
|
|
||||||
|
### В JS
|
||||||
|
|
||||||
|
✅ Всё: Teams формат общий, KillFeed/Message HUD общий для студии+плеера.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 2026-06-08 — Итерация 2: Crossroads (arch1_Original_Crossroads.rbxl, проект 2827)
|
## 2026-06-08 — Итерация 2: Crossroads (arch1_Original_Crossroads.rbxl, проект 2827)
|
||||||
|
|
||||||
**Контекст:** Классическая Roblox-карта 2009 года для PvP, **XML-формат** .rbxl
|
**Контекст:** Классическая Roblox-карта 2009 года для PvP, **XML-формат** .rbxl
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user