ADR.webapp.datalayer.egyszerusitesek - kaktusztea/szilankrpg GitHub Wiki
Az 1-3 és 6-9 javaslatok pusztán a webapp data layer / kód egyszerűsítései - a szabályrendszer szövege és logikája változatlan marad, a webapp ugyanazt az eredményt adja, csak kevesebb indirekcióval.
A 4-5 javaslatok tényleges szabálymódosítást is igényelnek, ahol két mechanizmus kizárólag egymás kioltására létezik - ezek tartalmi döntést igényelnek.
A szabályrendszer (md/) és a webapp data layer/kód közötti logikai párhuzamosságot megőrizve. Ha a szabályrendszer tartalmaz egy "büntetés + fortély mérséklés" mechanikát, azt nem egyszerűsítjük el a webapp-ban önkényesen - a kettőnek tükröznie kell egymást. Az alábbiak vagy mindkét oldalon egyszerűsíthetők (szabályrendszer + webapp együtt), vagy pusztán data layer / implementációs szinten tömörítenek anélkül, hogy a szabályrendszer logikája változna.
⭕ Ez talán már meg lett valósítva...??? Nem biztos...
Probléma: A szabályrendszer logikája: "pajzs TÉ büntetés → Pajzshasználat fortély mérsékli" - ez önmagában rendben van, ez a játékmechanika. A webapp-implementáció viszont 3 rétegen vezeti át (konstans tábla + fortély yaml módosító + MIN kalkuláció), ami feleslegesen szétszórt.
Javaslat: A data layer-ben egyetlen pajzs_hatások lookup tábla váltsa ki a szétszórt kalkulációt:
# konstansok.yaml
pajzs_hatások:
kis: [{ fok: 0, VÉ: 3, TÉ: -3 }, { fok: 1, VÉ: 3, TÉ: 0 }, { fok: 2, VÉ: 3, TÉ: 0 }, { fok: 3, VÉ: 5, TÉ: 0 }]
közepes: [{ fok: 0, VÉ: 10, TÉ: -6 }, { fok: 1, VÉ: 10, TÉ: -3 }, { fok: 2, VÉ: 10, TÉ: 0 }, { fok: 3, VÉ: 12, TÉ: 0 }]
nagy: [{ fok: 0, VÉ: 16, TÉ: -9 }, { fok: 1, VÉ: 16, TÉ: -6 }, { fok: 2, VÉ: 16, TÉ: -3 }, { fok: 3, VÉ: 18, TÉ: 0 }]
A szabályrendszer markdown továbbra is leírhatja: "A pajzs TÉ büntetése méretenként -3/-6/-9, a Pajzshasználat fortély fokonként +3-mal mérsékli, 3.fokon +2 VÉ extra." A tábla ugyanezt tartalmazza - csak előre kiszámolva, nem runtime kalkulálva.
Megszűnik:
-
konstansok.pajzs_TÉ_büntetés+ fortély yamlpajzs_TÉ_mérsékléscél +MIN(0, ...)logika - A fortély yaml 3 fok ×
feltétel: fegyverfogás:fegyver_pajzsmódosítók
Szabályrendszer hatás: Nincs. A tábla a szabályrendszer szövegének előre kifejtett formája.
Probléma: A szabályrendszer egy fokozatos mechanikát ír le (0-3 fok → TÉ/VÉ/harckeret/MF). A webapp ezt 4 külön mechanizmuson vezeti át (konstansok 0.fok + fortély yaml harckeret + kalkulált feltétel Kétkezesség + hardcoded MF logika).
Javaslat: A konstansok.yaml kétkezes_harc_bónuszok tábláját bővítsük ki, hogy minden fokozat minden értéke egy helyen legyen:
kétkezes_harc_fokok:
- fok: 0
TÉ: -3
VÉ: -3
harckeret: 1
mindkét_fegyver: false
mf: "nincs"
- fok: 1
TÉ: 0
VÉ: 0
harckeret: 2
mindkét_fegyver: true
mf: "nincs"
- fok: 2
TÉ: 0
VÉ: 0
harckeret: 3
mindkét_fegyver: true
mf: "nagyobb"
- fok: 3
TÉ: 0
VÉ: 0
harckeret: 4
mindkét_fegyver: true
mf: "mindkettő"
kétkezesség_harckeret_bónusz: 1 # Kétkezesség fortély megléte: +1 harckeret
A ketkezes.ts egyetlen tábla-lookup-ból dolgozik. A fortély yaml Kétkezes harc nem tartalmaz harckeret módosítókat - azok itt élnek.
Megszűnik:
- Kétkezes harc fortély yaml:
fegyverfogás:kétkezesfeltételes harckeret módosítók (redundáns a táblával) - Kétkezesség fortély: strukturált feltétel
[{forrás: "kétkezes_harc", op: "==", érték: true}]- helyette egyszerű boolean lookup a ketkezes.ts-ben - Két párhuzamos feltétel-rendszer (string prefix + kalkulált) ugyanarra a dologra
Szabályrendszer hatás: Nincs. A md/ továbbra is leírja a fokozatokat szövegesen; a tábla ugyanazt tartalmazza.
Probléma: 3 ArrayContext lookup tábla + nested if/lookup a reactive rule-ban. A szabályrendszer egyetlen táblázatot mutat (struktúra típus × kidolgozottság → MGT/tag). Javaslat:
# konstansok.yaml
csatolt_tag_mgt:
merev_fém: { átlagos: 3, mestermunka: 2, műremek: 1 }
hajlékony_fém: { átlagos: 2, mestermunka: 1, műremek: 0 }
nem_fém: { átlagos: 1, mestermunka: 0, műremek: 0 }
Reactive rule: egyetlen 2D lookup (vagy if-chain a 3 típusra + stringCtx kidolgozottság kulcs).
Megszűnik:
- 3 külön ArrayContext tömb (
csatolt_mgt_merev/fém/nemfém) - A
buildArrayContext3 tábla-feltöltő blokk
Szabályrendszer hatás: Nincs. A md/ táblázat pont ezt írja le.
Probléma: Visszafogott: TÉ:-3/-6/-9. Harci anatómia feltételes módosítója (taktika:visszafogott): TÉ:+3/+6/+9. Nettó: 0.
Két rendszer egyetlen dolgot mond: "Harci anatómiával a Visszafogott TÉ büntetése nem érvényesül."
Javaslat:
A Visszafogott taktika leírása tartalmazza:
TÉ büntetés: -3/-6/-9
Harci anatómia fortéllyal: TÉ büntetés elengedve (0)
A data layer-ben a taktika yaml kapjon egy fortély_kioltás mezőt:
- név: "Visszafogott"
fokok:
- fok: 1
módosítók: { TÉ: -3 }
- fok: 2
módosítók: { TÉ: -6 }
- fok: 3
módosítók: { TÉ: -9 }
TÉ_büntetés_kioltás:
fortély: "Harci anatómia"
# ha van ≥ 1 fok → TÉ módosító = 0
A taktika-calc.ts kezeli: "ha van Harci anatómia → taktikaMods.TÉ a Visszafogottra = 0."
Megszűnik:
- Harci anatómia fortély yaml: 3 db
feltétel: "taktika:visszafogott"TÉ módosító - A feltétel-rendszer kiértékelése erre az esetre (ami amúgy is felesleges round-trip)
Szabályrendszer hatás: ✅ Minimális átfogalmazás. A md/ eddig is ezt mondja: "Harci anatómiával nincs TÉ büntetés Visszafogott taktikánál." Csak a data layer reprezentáció lesz direktebb.
Probléma: A fortély bináris kapu: van → hárítóVÉ számít, nincs → 0. Ehhez a jelenlegi implementáció az Alapeset rendszert (§16.1) használja: 0.fok override + 1.fok (üres). Ez az Alapeset rendszer legkomplexebb használata a legegyszerűbb logikára.
Javaslat: A calcFogas() kezelje közvetlenül:
if (fegyverfogás === 'fegyver_hárító') {
const hasFortély = karakter.fortélyok.some(f => f.név === 'Hárítófegyver használat');
hárítóVÉ = hasFortély ? (hárítóFegyver.VÉ + mfVÉ) : 0;
}Megszűnik:
- A fortély yaml 0.fok Alapeset entry (override mód, fegyverfogás feltétel-típus)
- Az
evaluateAlapesetek()kiértékelése erre a fortélyra
A fortély yaml 1-3 fok marad (ha van más hatásuk - jelenleg nincs). Ha nem ad semmit a fokokon → a fortély yaml-ból is törölhető a módosítók lista, csak a követelmények marad (képzettség ellenőrzés).
Szabályrendszer hatás: Nincs. A md/ azt mondja: "Hárítófegyver használat fortély nélkül a hárítófegyver VÉ-je nem számít." A webapp ugyanezt teszi - csak nem az Alapeset rendszeren keresztül.
Probléma: A generikus mód: "override" + feltétel: "fegyver:puszta kéz" rendszert egyetlen fegyverre használjuk, és a fegyver-calc.ts-ben speciális pre-loop logika kezeli.
Javaslat: A Puszta kéz fegyver definíciójában (fegyverek.json / process_fegyverek.py) legyen explicit:
{
"Fegyver": "Puszta kéz",
"SP": 0,
"SP_override": { "fortély": "Természetes fegyver", "SP": 4 }
}
A fegyver-calc.ts ellenőrzi: "van SP_override a fegyveren? van a fortély? → SP = override.SP + erőbónusz + MF."
Megszűnik:
- A generikus fortély-módosító override scan (ami amúgy is csak erre az 1 esetre fut)
- A fortély yaml
mód: "override"+feltétel: "fegyver:puszta kéz"entry
Szabályrendszer hatás: Nincs. A md/ azt mondja: "Természetes fegyver fortéllyal a puszta kéz SP = X." A webapp ugyanezt teszi - csak a fegyver definícióból olvassa, nem a fortély módosítóból.
Probléma: A Fárasztás taktika tényleges hatása (VÉ csökk: 2/kör) nem kalkulált - a webapp csak informatív szöveget mutat. Mégis teljes taktika entry-ként él (kombó szabályok, megkötések, fortély_bővítés).
Javaslat: Maradjon taktika (a szabályrendszer így definiálja), de a yaml-ban legyen explicit jelölve, hogy a módosítói nem harcértékre vonatkoznak:
- név: "Fárasztás"
id: "fárasztás"
fokozatos: false
módosítók: {} # üres - nincs TÉ/VÉ/KÉ/SP módosító
informatív: "VÉ csökk: 2/kör (+fortély +Fegyverelőny). Nem támad."
tiltja_taktikákat: false
kombó_mód: "whitelist"
kombó_lista: [] # semmivel nem kombinálható
megkötések:
- { típus: "harci_helyzet", mód: "tiltott", érték: "fegyverhátrány" }
- { típus: "harci_helyzet", mód: "tiltott", érték: "láthatatlanul_hallhatóan" }
- { típus: "harci_helyzet", mód: "tiltott", érték: "láthatatlanul_csendesen" }
A taktika-calc.ts-ben: ha módosítók üres → nem ad semmit a taktikaMods-hoz. A Hatás pool-ban az informatív szöveg jelenik meg.
Megszűnik:
- Fárasztás fortély
fortély_bővítésmechanizmus a taktikán (ami amúgy is csak a VÉ csökk szöveget módosítja) - A taktikaMods logika üres ciklusfutása erre
Szabályrendszer hatás: Nincs. A Fárasztás marad taktika (mert az), csak a webapp nem próbálja kalkulálni a nem-kalkulálhatót.
Probléma: A Merevvértviselet fortély 0.fok Alapeset entry-je (§16.1) azt jelzi: "ha nincs fortélyod és merev páncélt viselsz, büntetés van." De a merevvért_TÉ_büntetés reactive rule mindig kiszámítja ezt - az Alapeset csak a Hatás pool-ban duplikálja az információt.
Javaslat: Töröld a fortély yaml 0.fok entry-jét. A Hatás pool "Merevvért TÉ büntetés" információ jelenjen meg közvetlenül a reactive rule eredményéből (computed.merevvért_TÉ_büntetés > 0 esetén).
Megszűnik:
- A fortély yaml 0.fok entry (feltétel:
páncél_viselés) - Az
evaluateAlapesetek()kiértékelése erre
Marad:
- A reactive rule (
merevvért_TÉ_büntetés) - ez adja a tényleges hatást - A
merevvért_táblalookup (fok → csökkentés) - ez a szabályrendszer logikáját tükrözi
Szabályrendszer hatás: Nincs. A md/ ugyanazt mondja: "Merev páncél MGT = TÉ büntetés, Merevvértviselet csökkenti." A webapp számítja - az Alapeset nem ad hozzá semmit.
| # | Eset | Típus | Szabályrendszer módosul? |
|---|---|---|---|
| 1 | Pajzshasználat tábla | Data layer tömörítés | ❌ Nem |
| 2 | Kétkezes harc tábla | Data layer tömörítés | ❌ Nem |
| 3 | Csatolt tag MGT | Data layer tömörítés | ❌ Nem |
| 5 | Visszafogott + HA kioltás | Szabály+data együtt | ✅ Igen (minimális átfogalmazás) |
| 6 | Hárítófegyver Alapeset | Implementáció | ❌ Nem |
| 7 | Természetes fegyver override | Implementáció | ❌ Nem |
| 8 | Fárasztás informatív jelölés | Data layer tisztítás | ❌ Nem |
| 9 | Merevvértviselet Alapeset | Implementáció | ❌ Nem |