STUDY.tavharc_v2 - kaktusztea/szilankrpg GitHub Wiki
STUDY: Távharc fegyverek v2 adatmodellre áttérés
Státusz: RÉSZBEN KÉSZ (2026-09-30). Az adatmodell-migráció (tipizált v2 JSON + a régi pipeline kivezetése) ÉS a per-fegyver CÉ-Idea bekötés IMPLEMENTÁLVA. Hátra: a
process_fegyverek.pyteljes kivezetése (l. 9. szakasz).A CÉL: a távharc fegyveradatot a közelharci v2-vel egységes, tipizált JSON-modellre hozni, és a régi md→json visszaolvasó pipeline-t (
process_fegyverek.py) kivezetni. A nyereség az adat-réteg egységesítése (kevesebb párhuzamos, hasonló logika a webappban) - NEM a kalkulációs motor összevonása (a CÉ/VÉ mechanika eleve külön a közelharctól).Ezt a fájlt egy üres session elején beolvasva "képben vagy".
9. Elvégezve (2026-09-30) és ami hátra van
Kész (implementálva, build zöld, 496 teszt)
- Tipizált v2 source:
data/sources/fegyverek/tavfegyverek_fixed.json(28 fegyver, minden mező numerikus). Konvenciók:SP: -99sentinel = nincs/spec sebzés;Hatótáv→hatótáv_bázis+hatótáv_erő_szorzó;sebzésjellegenumS/V/Z/spec;névkulcs;idea_default: 0. - Build-gate:
data/gen/fegyverek_v2.py::generate_tavfegyverek_v2→data/tables/tavfegyverek_v2.json, agenerate_tables.pyregiszterben. - Extrák: a nem-numerikus hatások a közös
extrak.yaml-ban (tényleges hatás-mezővel,szövegesa KM-döntésesekre), egységestavharc_prefixű id-kkel:tavharc_aquir_azonnali_halal,tavharc_fuvocso_kicsi_kabitas,tavharc_sfe_duplan,tavharc_pajzs_ve_csokkentes,tavharc_ij_erobonusz_tervezett,tavharc_hajitotor_kozeli_loves,tavharc_elf_ij_keszito,tavharc_ujratoltes_kharei,tavharc_ujratoltes_shad0ni. Afegyver_extrak.json-ban (közös runtime). - Webapp:
TavfegyverAlaptipizált;data-loadera v2 táblát tölti; aparseInt-ek eltűntek;név-alapú lookup;tavSP()(a -99 sentinel → 0) éstavHatótáv()(a bázis/erő_szorzó-ból) helperek. - Régi ág archiválva:
tavfegyverek.json+tavfegyver_pattern.json→archive/data_fegyverek_v1/. Adata/patterns/üres. - Per-fegyver CÉ-Idea (Modell 2): a példány Idea a
karakter.távfegyverek[].idea-ban (szerializált, url-share tuple),idea_default-ról indul; a CÉ-be apéldány_idea − idea_defaultdelta 1:1 (spec §17). A korábbi közös UI-onlyuseState(0)(ami MINDEN fegyver CÉ-jét egyszerre torzította - bug) kivezetve. Az Idea popup per-fegyver (index-alapú). Séma (karakter.yamltávfegyverek+idea),TavfegyverPeldany.
Hátra
process_fegyverek.pyteljes kivezetése: most már elárvult (üresdata/patterns/), de acode/lib/-nek van másik fogyasztója (generate.markdown.py) - aprocess_fegyverek.py+ a lib szétválasztása/archiválása külön, óvatos lépés.- Osztó-Idea hatás (md/078, lőfegyver ±1) - opcionális, későbbi.
- Nyitott: a CÉ-Idea jelenleg 1:1 (spec §17). Ha később tábla-alapú modell kell (mint a
közelharci
konstansok idea), a döntés a 5. szakasz 1. pontjában.
0. A cél és a hatókör tömören
- A távfegyverek NEM generáltak (nincs full paraméter-generátor, mint a közelharcinál) - a CÉ/Osztó
értékek egyediek, nem mátrix-vezéreltek. A távfegyver v2 = tipizált, kézzel karbantartott JSON
(a közelharci
fegyverek_fixed.jsonmintájára, távfegyver-mezőkkel). - A valódi nyereség: egységes adatmodell (string→tipizált, közös
név-alapú lookup, séma + naming-lint build-gate), és a régiprocess_fegyverek.pypipeline teljes kivezetése. - A CÉ/VÉ kalkuláció (
tavharc/helpers.ts) külön marad - a távharc mechanika (CÉ + Osztó/Cella/Szorzó) más, mint a közelharci (TÉ/VÉ/SP + harckeret), ezeket NEM vonjuk össze. - Az Idea (
idea_default+ CÉ-delta) ennek EGY komponense (l. 4. szakasz).
1. A jelenlegi (régi) távharc adat-réteg - amit lecserélünk
1.1 Pipeline (RÉGI md→json, elavult)
- Forrás:
md/068_07_hajitofegyverek.md,md/068_08_lofegyverek.md(szabálykönyv-táblák). - Kinyerés:
data/patterns/tavfegyver_pattern.json→code/process_fegyverek.pymd→JSON →data/tables/tavfegyverek.json. A webapp EZT tölti (data-loader.ts). - Minden érték STRING (
CÉ: "5",Osztó: "5") → a webapp mindenüttparseInt-tel konvertál. - Mágiatáv I-IV: a
process_fegyverek.pyfűzi hozzá (virtuális fegyverek). - Ez ugyanaz a pipeline, amit a pajzs-ág kivezetésekor elavultnak ítéltünk. A pajzs már archiválva
(
archive/data_fegyverek_v1/); a távfegyver az UTOLSÓ fogyasztója → ha ez is v2-re kerül, aprocess_fegyverek.pyteljesen elárvul és kivezethető.
1.2 Adatmodell (a párhuzamosság forrása)
TavfegyverAlap(types.ts): csupastringmező (Fegyver, CÉ, Osztó, SP, Sebesség, Sebzés módja, Forgatás módja, Erőbónusz, Átütés, Hatótáv, Kategória, Harcmodor) - a md-tábla lenyomata. Vö. a közelharciFegyverAlap: tipizált,névkulcs,módok[].- Lookup: a közelharc közös
lookupFegyver(fegyverek, alap)utilt használ (d.név); a távharc 4-5 helyen inlinedata.tavfegyverek.find(d => d.Fegyver.toLowerCase() === ...)- külön, mert a kulcsFegyver(nagybetűs), nemnév. - Karakter-példány:
karakter.yamltávfegyverekblokk CSAKalap: "";TavfegyverPeldanyCSAK{ alap: string }(nincsidea/név/anyag- szemben a közelharciFegyverPeldany-nal).
1.3 A párhuzamos, hasonló logika (amit csökkentünk)
| Réteg | Közelharc | Távharc (régi) | v2 után |
|---|---|---|---|
| Adat-formátum | tipizált (TÉ: 3) |
string (CÉ: "5") + parseInt |
tipizált mindkettő |
| Lookup | lookupFegyver (közös util, név) |
inline .find(Fegyver...) × 4-5 |
közös név-alapú lookup |
| Betöltés | fegyverek_v2.json (generált) |
tavfegyverek.json (md→json) |
tavfegyverek_v2.json (kézi, gate-elt) |
| Séma/gate | séma + naming-lint | nincs | séma + naming-lint |
| Példány-modell | alap, név, anyag, idea |
csak alap |
egységes (legalább alap + idea) |
Amit NEM vonunk össze: a CÉ-kalkuláció (helpers.ts) vs a közelharci TÉ/VÉ/SP (fegyver-calc.ts) -
külön mechanika, marad külön.
2. A cél-állapot (v2 adatmodell a távfegyvernél)
2.1 tavfegyverek_v2.json (tipizált, kézi)
- Egy rekord tipizált mezőkkel:
név(kulcs),CÉ: szám,Osztó: szám,SP,Sebesség,sebzéstípus,Átütés,Hatótáv,Kategória,Harcmodor,idea_default: szám,megjegyzés. - Forrás: a jelenlegi
tavfegyverek.jsontartalmának egyszeri, tipizált átemelése (string→szám). - Kézzel karbantartott (fixed-minta), NINCS generátor.
- Mágiatáv I-IV: a JSON-ban explicit rekordok (a
process_fegyverek.pyhozzáfűzés helyett).
2.2 Build-gate
data/gen/-ben egytavfegyverek_v2lépés: a kézi JSON betöltése + séma-validáció + naming-lint + átírás adata/tables/-be (mint asebzesjelleg_pancel_matrix/fegyver_idea_tablaegyszerű exportok). Agenerate_tables.pyregiszterbe kötve.
2.3 Régi ág kivezetése
data/patterns/tavfegyver_pattern.json+ aprocess_fegyverek.pytávfegyver-ág →archive/(mint a pajzs). Ezzel aprocess_fegyverek.pyteljesen kivezethető (nincs több fogyasztó).
2.4 TS + webapp
TavfegyverAlaptipizált mezőkkel (névkulcs, számok); aparseInt-ek eltávolítása ahelpers.ts-ből; közösnév-alapú lookup (alookupFegyvermintájára, vagy generikus).TavfegyverPeldany+karakter.yamltávfegyverekblokk egységesítése (legalábbalap+idea).
3. Spec és szabálykönyv (a CÉ-oldal, változatlan mechanika)
engine_spec.md §17:CÉ = -15 + Önuralom + CM + harcmodor_CÉ + távfegyver.CÉ + mesterfegyver_CÉ + Idea. A CÉ-Idea a spec szerint közvetlen (1:1) tag.md/071_tavharc_ce.md: a fő CÉ-képletből az Idea hiányzik (a "Kapcsolódik" linkeli a minőség-oldalt). FESZÜLTSÉG a spec §17-tel - tisztázandó (5/4 nyitott kérdés).md/078_tavharc_fegyverek.md"Távolsági fegyverek minősége": a minőség a CÉ-t javítja/rontja (átlagos Nyílpuska 5, kiváló 8, ócskavas 2) → a bázis-CÉ MAGA tükrözi a minőséget (Modell-2-szerű). Szélsőséges esetben az Osztó is módosul (lőfegyver max ±1; hajító csak lefelé) - Idea Osztó-hatás.- A távolsági VÉ (Osztó/Cella/Szorzó,
tavharc_szorzok.json, §17.3) NEM része ennek a migrációnak (az a VÉ-oldal, külön adatforrás).
4. Idea komponens (a v2 adatmodell EGY része)
A közelharci idea_default delta-modell (Modell 2) a minta:
idea_default(atavfegyverek_v2.json-ban): a standard példány kezdő-Ideája; a v2 CÉ EZT MÁR tartalmazza.- Példány Idea (
karakter.távfegyverek[].idea):idea_default-ról indul, hangolható; a jelenlegi UI-only efemeruseState(0)(TavharcScreen) kivezetése, a karakter-modellbe szerializálva. - CÉ-delta:
példány_idea − idea_defaulta CÉ-hez (1:1, a spec §17 szerint - l. 5/1). - Referencia (közelharci, KÉSZ):
ideaDelta()(harc/shared.ts),fegyver_idea_tabla.json, DEVSTATE "Fegyver Idea implementáció".
5. Nyitott kérdések
- CÉ-Idea modell: 1:1 közvetlen (spec §17, jelenlegi webapp) vagy tábla-alapú delta (mint a
közelharci
konstansok idea)? Amd/078alapján a bázis-CÉ tartalmazza a minőséget → 1:1 delta (példány − idea_default) tűnik konzisztensnek. Ha tábla-alapú kell, akonstansok ideatábla CÉ-oszloppal bővül. - Osztó-hatás: a minőség módosítsa-e az Osztót is (md/078: lőfegyver ±1, hajító csak le), vagy első körben CSAK a CÉ-t? (Javaslat: első körben csak CÉ, az Osztó-hatás külön al-lépés.)
- Mágiatáv (mágikus) ág: az Idea 0 marad-e (a fokozat = minőség, a webapp már most 0-ra kényszeríti)?
- Séma bővítés hatóköre: a távfegyver-példány kapjon-e
név/anyag-ot is (mint a közelharci fegyver), vagy csakidea? (A távfegyvernek van-e egyedi neve/anyaga a rendszerben?) - Szabálykönyv-feszültség: a
md/071fő CÉ-képletébe kerüljön-e be az Idea (spec §17-tel összhangban)? tavfegyverek_v2.jsonhelye:data/sources/-ban (mint a többi source) vagy egy fixed-szerű fájl? És a build-gate a meglévődata/gen/fegyverek_v2.py-hoz kerüljön, vagy különdata/gen/tavfegyverek_v2.py?
6. Migrációs lépések (javasolt sorrend)
tavfegyverek_v2.jsonlétrehozása: a jelenlegitavfegyverek.jsonegyszeri tipizált átemelése (névkulcs, számok,idea_default: 0alapból, Mágiatáv explicit rekordok).- Séma + build-gate: séma a távfegyverre +
data/gen/export + naming-lint +generate_tables.pyregiszter. - TS + webapp:
TavfegyverAlaptipizált;parseInt-ek eltávolítása; közösnév-alapú lookup; ahelpers.tsa tipizált adatot használja. - Régi ág archiválása:
tavfegyver_pattern.json+process_fegyverek.py(távfegyver-ág) →archive/. Aprocess_fegyverek.pyezzel teljesen kivezethető (a pajzs után az utolsó fogyasztó). - Idea (4. szakasz):
idea_defaulta JSON-ban + példány-Idea a karakter-modellbe + CÉ-delta bekötés + a UI-onlyuseState(0)kivezetése. Séma (karakter.yamltávfegyverek) +TavfegyverPeldany- url-share szerializálás.
- Verifikáció: golden a CÉ-re (default példány CÉ = jelenlegi, visszafelé kompatibilis); séma +
naming-lint + linkspector; a
dist/runtime nem hivatkozik többé atavfegyverek.json-ra.
7. Fájl-pointerek (gyors belépés)
| Terület | Fájl |
|---|---|
| CÉ kalkuláció (marad, tipizálásra vár) | web/karakter/src/components/tavharc/helpers.ts (calcCÉ, calcCÉBontás, getCÉInputs, getFortélyCÉ) - a parseInt-ek itt vannak |
| CÉ-Idea UI state (kivezetendő) | web/karakter/src/components/tavharc/TavharcScreen.tsx (useState(0) idea + ideaPopup) |
| Távfegyver típus (string→tipizált) | web/karakter/src/engine/types.ts (TavfegyverAlap, TavfegyverPeldany) |
| Karakter séma (hiányos) | data/schemas/karakter.yaml → távfegyverek: blokk |
| Régi pipeline (kivezetendő) | data/tables/tavfegyverek.json ← data/patterns/tavfegyver_pattern.json ← code/process_fegyverek.py ← md/068_07, md/068_08 |
| Betöltés | web/karakter/src/engine/data-loader.ts (tavfegyverek fetch + return) |
| Spec | data/docs/engine_spec.md §17, §17.1b, §17.2, §17.3 |
| Szabálykönyv | md/071_tavharc_ce.md, md/078_tavharc_fegyverek.md ("Távolsági fegyverek minősége"), md/068_01_02_fegyver_idea.md |
| v2 minta (KÉSZ) | data/sources/fegyverek/fegyverek_fixed.json (fixed-minta), data/gen/fegyverek_v2.py (generate_fegyver_idea_tabla export-minta), engine/utils.ts (lookupFegyver), harc/shared.ts (ideaDelta) |
| Archiválási minta | archive/data_fegyverek_v1/ (pajzs kivezetés precedens) |
8. Összefoglaló egy mondatban
A távfegyvereket tipizált, kézzel karbantartott v2 JSON-ra visszük (nincs generátor), egységes
lookup/séma/build-gate-tel, és kivezetjük a régi process_fegyverek.py md→json pipeline-t; a nyereség
az adat-réteg párhuzamosságának csökkentése (a CÉ/VÉ kalkuláció külön marad), az Idea pedig egy
komponens - a 6 nyitott kérdés eldöntése után indulhat az implementáció.