Commit graph

2 commits

Author SHA1 Message Date
0b82cd77f3 Lua: continue, include и загрузка геймода
- Препроцессор GMod: continue внутри for/while/repeat -> goto + уникальная
  метка; учтены строки/комментарии, вложенные циклы и функции, завершающие
  break/return (оборачиваются в do ... end). widget_bones.lua грузится:
  энтити 6 из 6.
- include(): поиск рядом с текущим файлом и в lua/ игры, тот же препроцессор,
  лимиты размера/глубины, защита от циклов и выхода за каталог игры.
- LuaRuntime::load_gamemode(): init.lua и cl_init.lua, сбор ошибок без
  падения. Sandbox init.lua выполняется, cl_init.lua упирается в VGUI
  (AccessorFunc); реестры list/scripted_ents после загрузки целы.
- Безопасные заглушки загрузочного слоя Sandbox: CLIENT/SERVER, is*,
  FindMetaTable, cleanup, drive, duplicator, net, cvars, player_manager.
- Тесты: юнит-тесты препроцессора, include на временных файлах и реальных
  lua/includes, загрузка sandbox на ассетах.
2026-10-24 13:29:30 +03:00
087d57b582 Lua GMod: библиотеки list/weapons/scripted_ents и загрузка скриптов
Some checks are pending
CI / checks (push) Waiting to run
- библиотека `list` (Set/Add/Get/GetEntry/HasEntry) — реестры GMod, на них
  держатся списки оружия, энтити и спавна;
- `weapons.Register/Get/GetStored` и `scripted_ents.Register/Get`, запись в
  `list.Get("Weapon")` и `list.Get("SpawnableEntities")`;
- загрузчик `LuaRuntime::load_scripts(game_dir)`: выполняет `lua/weapons/*.lua`
  (со свежей `SWEP`, заранее созданными `Primary`/`Secondary`) и
  `lua/entities/*.lua` (с `ENT`), ошибка одного файла не роняет остальные;
  размер файла ограничен 1 МиБ;
- заглушки, без которых скрипты не запускаются: AddCSLuaFile, Model, Sound,
  include, DEFINE_BASECLASS, Material, game.AddParticles; GMod-синтаксис
  проходит через препроцессор (`!` → `not`);
- клиент загружает скрипты при старте: на настоящих ассетах — 3 оружия
  (fists/flechettegun/medkit), 5 энтити; `weapons.Get('weapon_fists')` читает
  Primary.ClipSize и ViewModel.

Тест `real_gmod_weapons_and_entities_load` (пропускается без ассетов).
Осталось: `continue` в препроцессоре (ломает widget_bones), include базовых
классов, привязка SWEP к вьюмодели и Q-меню.

26 сьютов зелёные.
2026-10-24 12:12:29 +03:00