Дневник: SWEP в клиенте и что осталось
Записан первый срез A23: реестр/слоты, атака, HUD, заглушки Lua, проверка кадрами; отмечены c_arms без геометрии и общая проекция вьюмодели как следующие шаги.
This commit is contained in:
parent
1fe36b6869
commit
5a8f971f78
2 changed files with 48 additions and 1 deletions
|
|
@ -4,7 +4,46 @@
|
|||
уплотнения контекста ничего не терялось. Коротко: состояние, замеры, следующий
|
||||
шаг, грабли.
|
||||
|
||||
Обновлён: 2026-10-23, день.
|
||||
Обновлён: 2026-10-24, день.
|
||||
|
||||
---
|
||||
|
||||
## 0. SWEP: оружие из Lua в клиенте (2026-10-24, ветка `feat/swep`)
|
||||
|
||||
Скрипты `lua/weapons/*.lua` (на реальных ассетах — `weapon_fists`,
|
||||
`weapon_flechettegun`, `weapon_medkit`) теперь не просто загружаются, а
|
||||
**управляют клиентом**:
|
||||
|
||||
- `client/src/weapon.rs`: реестр из `list.Get("Weapon")`, фильтр
|
||||
`Spawnable` + существующий `ViewModel` в VFS, слоты (`Slot`/`SlotPos`),
|
||||
`SOURCE_RS_SWEP` для старта. Клавиши `1..9` выбирают слот 1..9, `0` — слот 0
|
||||
(кулаки). При смене вызываются `Holster` старого и `Deploy` нового,
|
||||
вьюмодель пересоздаётся под `SWEP.ViewModel`.
|
||||
- `client/src/map.rs`: `ViewModelState` (модель, покой/выстрел, пересоздание),
|
||||
ЛКМ → `PrimaryAttack` активного SWEP, автоматический огонь по
|
||||
`Primary.Automatic` с учётом `GetNextPrimaryFire`, `Think` каждый кадр,
|
||||
HUD с `PrintName` и патронами (`Clip1`/`ClipSize`).
|
||||
- `glua`: база SWEP (`swep_base.lua`), `GetOwner`/`GetViewModel`, `NetworkVar`,
|
||||
`SetNextPrimaryFire`, `Clip1`, `EmitSound`; глобальные `CurTime`, `IsValid`,
|
||||
`player.GetAll`, `util.TraceLine`/`TraceHull`, `trace.*`, `sound.*`;
|
||||
`game.SinglePlayer` исправлен на **функцию** (как в GMod), `GetConVar` знает
|
||||
`sv_defaultdeployspeed`/`phys_pushscale` (ноль давал `inf` в `Deploy`).
|
||||
- Ошибка Lua в любом методе логируется и не роняет кадр; `Think` после ошибки
|
||||
отключается для этого оружия.
|
||||
|
||||
**Проверка (Xvfb, `--hidden`):** `SOURCE_RS_SWEP=weapon_*` +
|
||||
`SOURCE_RS_TEST_ATTACK=1` (ЛКМ на 10-м кадре) и `SOURCE_RS_TEST_SWITCH=1`
|
||||
(смена оружия каждые 10 кадров). Flechette за 10 кадров сделал 5 выстрелов
|
||||
(`SetNextPrimaryFire` = 0.1), ошибок Lua нет. Кадры:
|
||||
`/tmp/opencode/swep_fists.png`, `swep_flechette.png`, `swep_medkit.png`,
|
||||
`swep_switch.png`. Тесты: `real_gmod_weapon_methods_run_without_errors`
|
||||
прогоняет настоящие Deploy/PrimaryAttack/Think/Holster всех трёх SWEP.
|
||||
|
||||
**Грабли:** `c_arms.mdl` — скелет без геометрии (`c_arms.vvd` = 0 вершин), руки
|
||||
в GMod берутся из модели игрока. Пока bonemerge нет, вьюмодель кулаков
|
||||
скрывается (HUD показывает оружие), а не подменяется пистолетом. `c_smg1` и
|
||||
`c_medkit` рисуются, но общая проекция камеры (FOV 100, дистанция 26) делает их
|
||||
мелкими: отдельный FOV/масштаб вьюмодели — следующий шаг.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -3133,6 +3133,14 @@ Sandbox.
|
|||
`gmod_tool` спавнить проп; оружие переключается по слотам; вьюмодель видна и
|
||||
двигается.
|
||||
|
||||
**Сделано (ветка `feat/swep`):** реестр SWEP из Lua с фильтром
|
||||
`Spawnable`/`ViewModel`, слоты 0..9, `SOURCE_RS_SWEP`, `Holster`/`Deploy` при
|
||||
смене, пересоздание вьюмодели, ЛКМ → `PrimaryAttack` (автоматический огонь по
|
||||
`Primary.Automatic` и `GetNextPrimaryFire`), `Think` каждый кадр, HUD с
|
||||
`PrintName`/патронами. Осталось: `SecondaryAttack` на ПКМ, отдельный FOV/масштаб
|
||||
вьюмодели, проигрывание `SendViewModelMatchingSequence`, урон/эффекты, `DrawHUD`
|
||||
скриптов.
|
||||
|
||||
### A24. Q-меню спавна (spawnmenu)
|
||||
Меню спавна из `sandbox/gamemode/spawnmenu` (Lua + VGUI). У нас VGUI нет (P10),
|
||||
поэтому путь такой: сначала **консольные эквиваленты** (`gm_spawn`, `gm_give`,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue