From 07ebc647dbdc2c2613a404dfc56c0a90dc6cbf47 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Tue, 25 Jul 2023 23:30:12 +0200 Subject: [PATCH] wip on class properties and some bootstrap formatting --- src/domain-models/{enums.ts => faj.ts} | 27 ---- src/domain-models/osztaly.ts | 112 ++++++++++++++++ src/pages/CreateCharacter.tsx | 178 +++++++++++++++++++------ 3 files changed, 248 insertions(+), 69 deletions(-) rename src/domain-models/{enums.ts => faj.ts} (92%) create mode 100644 src/domain-models/osztaly.ts diff --git a/src/domain-models/enums.ts b/src/domain-models/faj.ts similarity index 92% rename from src/domain-models/enums.ts rename to src/domain-models/faj.ts index e1e8663..4523634 100644 --- a/src/domain-models/enums.ts +++ b/src/domain-models/faj.ts @@ -22,32 +22,6 @@ export enum Faj { Torpe = 'f_torpe', } -export enum Osztaly { - Harcos = 'o_harcos', - Ijjasz = 'o_ijjasz', - Amazon = 'o_amazon', - Kaloz = 'o_kaloz', - Barbar = 'o_barbar', - Pap = 'o_pap', - Tolvaj = 'o_tolvaj', - Varazslo = 'o_varazslo', - Illuzionista = 'o_illuzionista', -} - -export function OsztalyLabel(osztaly: Osztaly) : string { - switch (osztaly) { - case Osztaly.Amazon: return 'Amazon'; - case Osztaly.Barbar: return 'Barbár'; - case Osztaly.Pap: return 'Pap'; - case Osztaly.Illuzionista: return 'Illúzionista'; - case Osztaly.Varazslo: return 'Varázsló'; - case Osztaly.Harcos: return 'Harcos'; - case Osztaly.Ijjasz: return 'Íjjász'; - case Osztaly.Kaloz: return 'Kalóz'; - case Osztaly.Tolvaj: return 'Tolvaj' - } -} - export function FajLabel(faj: Faj) : string { switch (faj) { case Faj.Ember: return 'Ember'; @@ -145,4 +119,3 @@ export function FajSpecials(faj : Faj) : string[] { } return []; } - diff --git a/src/domain-models/osztaly.ts b/src/domain-models/osztaly.ts new file mode 100644 index 0000000..b62a2ca --- /dev/null +++ b/src/domain-models/osztaly.ts @@ -0,0 +1,112 @@ + +export enum Osztaly { + Harcos = 'o_harcos', + Ijjasz = 'o_ijjasz', + Amazon = 'o_amazon', + Kaloz = 'o_kaloz', + Barbar = 'o_barbar', + Pap = 'o_pap', + Tolvaj = 'o_tolvaj', + Varazslo = 'o_varazslo', + Illuzionista = 'o_illuzionista', +} + +export function OsztalyLabel(osztaly: Osztaly) : string { + switch (osztaly) { + case Osztaly.Amazon: return 'Amazon'; + case Osztaly.Barbar: return 'Barbár'; + case Osztaly.Pap: return 'Pap'; + case Osztaly.Illuzionista: return 'Illúzionista'; + case Osztaly.Varazslo: return 'Varázsló'; + case Osztaly.Harcos: return 'Harcos'; + case Osztaly.Ijjasz: return 'Íjjász'; + case Osztaly.Kaloz: return 'Kalóz'; + case Osztaly.Tolvaj: return 'Tolvaj' + } +} + +const osztalyDescriptions= { + o_harcos: 'A harcosok a fegyverhasználat mesterei. Megállják a helyüket a közelharcban és a távolsági összecsapásokban is, s sokkal jobban viselik a sebesüléseket, mint más osztályok képviselői. Ez az osztály mind közül a leggyakoribb, de egyben a legváltozatosabb is – öt alosztállyal rendelkezik. A játék elején minden harcos választhat egy tetszőleges harci stílust: A Harcosok az osztály leggyakoribb képviselői. Speciális harci tapasztalatuknak köszönhetően minden páratlan szinten +2-t kapnak egy választott fegyvertípus (pl. csatabárd, hosszúkard, stb.) sebzésére. Ez fegyverenként csak egyszer választható, s arra is fölhasználható, hogy a harcos megtanulja egy egzotikus fegyver használatát, amire később specializálódhat is. 9. szinttől elérhető számukra a kettős specializáció: ezzel sebzésmódosítójukat az adott fegyverre +4-re emelhetik.', + o_ijjasz: 'A harcosok a fegyverhasználat mesterei. Megállják a helyüket a közelharcban és a távolsági összecsapásokban is, s sokkal jobban viselik a sebesüléseket, mint más osztályok képviselői. Ez az osztály mind közül a leggyakoribb, de egyben a legváltozatosabb is – öt alosztállyal rendelkezik. A játék elején minden harcos választhat egy tetszőleges harci stílust: Az íjászok a távolsági harc mesterei. Íjak használatakor körönként eggyel többször támadhatnak. Értenek a visszacsapó íjak használatához is. Nem viselhetnek nehéz vérteket.', + o_amazon: 'A harcosok a fegyverhasználat mesterei. Megállják a helyüket a közelharcban és a távolsági összecsapásokban is, s sokkal jobban viselik a sebesüléseket, mint más osztályok képviselői. Ez az osztály mind közül a leggyakoribb, de egyben a legváltozatosabb is – öt alosztállyal rendelkezik. A játék elején minden harcos választhat egy tetszőleges harci stílust: Az amazonok barbár népe szépségéről és a karizmatikus jelenlétre építő védekező harcmodoráról ismert. Az amazonok csak láncinget vagy könnyebb vérteket viselhetnek, de VO-juk Szint/2-vel javul, továbbá Karizma- és Ügyességmódosítói közül a kedvezőbbet választhatják. Ha kettő vagy több amazon együttesen harcol, VO-juk további 2 ponttal nő pszionikus képességeik miatt.', + o_kaloz: 'A harcosok a fegyverhasználat mesterei. Megállják a helyüket a közelharcban és a távolsági összecsapásokban is, s sokkal jobban viselik a sebesüléseket, mint más osztályok képviselői. Ez az osztály mind közül a leggyakoribb, de egyben a legváltozatosabb is – öt alosztállyal rendelkezik. A játék elején minden harcos választhat egy tetszőleges harci stílust: A tengerészek/kalózok a hajózás mesterei; kereskedők, tengeri rablók és rabszolgavadászok. Ha magasabb, Ügyességbónuszukat adják hozzá közelharci támadásaikhoz. Nem viselhetnek nehéz vértezetet, de VO-juk könnyű vértben Szint/3-al javul. Minden harmadik szinten kiválaszthatnak egy fegyvert, amivel könynyebben okoznak kritikus sebesülést, tehát pl. csatabárddal 20 helyett 19-20-on, hoszszúkarddal 19-20 helyett 18-20-on, szablyával 18-20 helyett 17-20-on, stb. Ez a képesség 9. szintig fegyverenként csak egyszer választható.', + o_barbar: 'A harcosok a fegyverhasználat mesterei. Megállják a helyüket a közelharcban és a távolsági összecsapásokban is, s sokkal jobban viselik a sebesüléseket, mint más osztályok képviselői. Ez az osztály mind közül a leggyakoribb, de egyben a legváltozatosabb is – öt alosztállyal rendelkezik. A játék elején minden harcos választhat egy tetszőleges harci stílust: A barbár törzsek köré sorolhatók apusztai és sivatagi nomádok, a déli dzsungelek emberevői és az északi tengermelléki rablók nemzetségei egyaránt. A barbárok 1d12-vel dobják a Hp-jüket, -5 Hp-ig öntudatuknál vannak és +1 bónuszt (10. szinttől +2, 15. szinttől +4) kapnak a mentődobásaikra. Minden barbár írástudatlanul kezdi a játékot, de ha kell, később megtanulhatja a betűvetést.', + o_pap: 'A papok az istenek militáns varázshasználó szolgái. Hitük parancsait minden körülmények között be kell tartaniuk, s bizonyos rendszerességgel áldozatokat kell bemutatniuk. A papok csak istenükkel azonos vagy attól legfeljebb eggyel különböző jelleműek lehetnek. A papok csak az istenük által kijelölt fegyvereket forgathatják, de szabadon válogathatnak a különféle vértek között.', + o_tolvaj: 'A tolvajok a becstelen harc és a csöndes gyilkolás mesterei (közülük sokan alkalmaznak mérgeket – őket orgyilkosoknak nevezik). Harci képességeik és életerejük viszonylag gyenge, s nehezebb vértezeteket sem használhatnak. Ezért ha módjukban áll, nem szemtől szembe, hanem lesből támadnak áldozataikra, és ha ez nem sikerülne, gyorsan kereket oldanak. Emellett alvilági pályafutásuk során számos hasznos képzettségben válnak járatossá.', + o_varazslo: 'A varázslók kiemelkedő szellemi fegyelmezettségük segítségével képesek a magasabb fokú mágikus erőket irányító varázsigék memorizálására és fölhasználására. Tudásukat varázskönyekben rögzítik, s mindent elkövetnek egy ismeretlen formula megszerzéséért. Többségüket a magabiztos önhittség és az alacsonyabb szellemi képeségűek megvetése jellemzi. A varázslók nem képesek _bármiféle_ páncélban varázsolni, és csak kevés fegyvertípus forgatásában járatosak.', + o_illuzionista: 'A varázslók kiemelkedő szellemi fegyelmezettségük segítségével képesek a magasabb fokú mágikus erőket irányító varázsigék memorizálására és fölhasználására. Tudásukat varázskönyekben rögzítik, s mindent elkövetnek egy ismeretlen formula megszerzéséért. Többségüket a magabiztos önhittség és az alacsonyabb szellemi képeségűek megvetése jellemzi. Az illuzionisták a mágia egy igen hasonló, de több lényeges területen eltérő fajtáját művelik. Lételemük a káprázat, a megtévesztés és mások elméjének befolyásolása – többségük hipnotizőr vagy ügyes manipulátor. Az illuzionista varázslatok csekélyebb pusztító erőt képviselnek, ellenben egy élelmes illuzionista kezében szinte bármire képesek – beleértve a közönséges varázslók egyes varázslatainak utánzását. Az illuzionisták nem képesek _bármiféle_ páncélban varázsolni, és csak kevés fegyvertípus forgatásában járatosak.', +} + +export function OsztalyDescription(osztaly: Osztaly) { + return osztalyDescriptions[osztaly] +} + +export function OsztalyProperties(osztaly: Osztaly) : string[] { + switch (osztaly) { + case Osztaly.Harcos: return [ + 'Támadásbónusz: Szint * 1', + 'Mentődobások: Kitartás az első, Reflex és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: az egzotikus fegyvereken kívül bármilyen fegyvertípust használhatnak', + 'Páncélhasználat: bármilyen', + 'Hp: szintenként 1d10, 9. szint („Nagyúr”) fölött 3/szint', + 'Képzettségek: 3', + ] + case Osztaly.Ijjasz: return [ + 'Támadásbónusz: Szint x 1', + 'Mentődobások: Kitartás az első, Reflex és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: az egzotikus fegyvereken kívül bármilyen fegyvertípust használhatnak', + 'Páncélhasználat: nehéz vérteken kívül bármilyen', + 'Hp: szintenként 1d10, 9. szint („Nagyúr”) fölött 3/szint', + 'Képzettségek: 3', + ] + case Osztaly.Amazon: return [ + 'Támadásbónusz: Szint x 1', + 'Mentődobások: Kitartás az első, Reflex és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: az egzotikus fegyvereken kívül bármilyen fegyvertípust használhatnak', + 'Páncélhasználat: láncing vagy könnyebb vértek', + 'Hp: szintenként 1d10, 9. szint („Nagyúr”) fölött 3/szint', + 'Képzettségek: 3', + ] + case Osztaly.Kaloz: return [ + 'Támadásbónusz: Szint x 1', + 'Mentődobások: Kitartás az első, Reflex és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: az egzotikus fegyvereken kívül bármilyen fegyvertípust használhatnak', + 'Páncélhasználat: nehéz vérteken kívül bármilyen', + 'Hp: szintenként 1d10, 9. szint („Nagyúr”) fölött 3/szint', + 'Képzettségek: 3', + ] + case Osztaly.Barbar: return [ + 'Támadásbónusz: Szint x 1', + 'Mentődobások: Kitartás az első, Reflex és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: az egzotikus fegyvereken kívül bármilyen fegyvertípust használhatnak', + 'Páncélhasználat: bármilyen', + 'Hp: szintenként 1d12, 9. szint („Nagyúr”) fölött 3/szint', + 'Képzettségek: 3', + ] + case Osztaly.Pap: return [ + 'Támadásbónusz: Szint x 2/3', + 'Mentődobás: Kitartás és Akaraterő az első, Reflex a második oszlop szerint', + 'Fegyverhasználat: csak buzogányokat, tőröket és istenük kijelölt fegyvereit használhatják', + 'Páncélhasználat: bármilyen', + 'Hp: szintenként 1d8, 9. szint („Főpap”) fölött 2/szint', + 'Képzettségek: 3', + ] + case Osztaly.Tolvaj: return [ + 'Támadásbónusz: Szint x 2/3', + 'Mentődobás: Reflex az első, Kitartás és Akaraterő a második oszlop szerint', + 'Fegyverhasználat: tőröket, dobótűket, parittyákat, számszeríjakat , rövidíjakat és egykezes kardokat használhatnak', + 'Páncélhasználat: csak könnyű', + 'Hp: szintenként 1d6, 9. szint („Mestertolvaj”) fölött 2/szint', + 'Képzettségek: 7 (ebből legalább 4 minden képpen a „tolvajképzettségek” listájáról); 9. és ezután minden páratlan szinten újabb, eddig akár tiltott képzettséget tanulhatnak meg.' + ] + case Osztaly.Varazslo: + case Osztaly.Illuzionista: return [ + 'Támadásbónusz: Szint x 1/2', + 'Mentődobás: Akaraterő az első, Kitartás és Reflex a második oszlop szerint', + 'Fegyverhasználat: tőrt, botot, dobótűket, bunkót és parittyát használhatnak', + 'Páncélhasználat: nincs', + 'Hp: szintenként 1d4, 9. szint („Varázslónagyúr”) fölött 1/szint', + 'Képzettségek: 3' + ] + } +} \ No newline at end of file diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index b9d2b9f..ecd981a 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -1,10 +1,11 @@ import React from 'react'; import './CreateCharacter.css' import {useForm} from "react-hook-form"; -import {Faj, FajDescription, FajLabel, FajSpecials, Osztaly, OsztalyLabel} from "../domain-models/enums"; +import {Faj, FajDescription, FajLabel, FajSpecials} from "../domain-models/faj"; +import {Osztaly, OsztalyDescription, OsztalyLabel, OsztalyProperties} from "../domain-models/osztaly" function getRandomInt(max: number) { - return Math.ceil(Math.random() * max); + return Math.floor(Math.random() * max) + 1; } function rollAbility() { @@ -24,6 +25,32 @@ function rollAbility() { return result; } +const modifier = (val : number) => Math.floor(val / 3) - 3 + +const fajiEroModosito = (faj: Faj) => [Faj.Felork, Faj.Osember, Faj.Eszaki].includes(faj) ? +1 : [Faj.Gnom, Faj.Felszerzet].includes(faj) ? -1 : 0 + +const fajiUgyModosito = (faj: Faj) => [Faj.Elf, Faj.Felszerzet].includes(faj) ? +1 : 0 + +const fajiEgsModosito = (faj: Faj) => [Faj.Etuniai, Faj.Osember, Faj.Felork, Faj.Torpe].includes(faj) ? +1 : + [Faj.Birodalmi, Faj.Elf].includes(faj) ? -1 : 0 + +const fajiIntModosito = (faj: Faj) => [Faj.Gnom, Faj.Birodalmi].includes(faj) ? +1 : + [Faj.Osember].includes(faj) ? -1 : 0 + +const fajiBolModosito = (faj: Faj) => [Faj.Osember, Faj.Eszaki, Faj.Etuniai].includes(faj) ? -1 : 0 + +const fajiKarModosito = (faj: Faj) => [Faj.Torpe].includes(faj) ? -1 : + [Faj.Felork].includes(faj) ? -2 : 0 + +function signedNumberToText(val: number) : string { + return val > 0 ? '+'+val : val.toString() +} + +function fajiModositoText(faj: Faj, szamolas: (f: Faj) => number) : string { + const mod = szamolas(faj) + return (mod !== 0) ? signedNumberToText(mod) + ' (' + FajLabel(faj) + ')' : '' +} + function rollAllAbilities(setValue: (ability: string, value: number) => void) { setValue('ero', rollAbility()) setValue('ugy', rollAbility()) @@ -45,6 +72,8 @@ function CreateCharacterPage() { const currentFaj = () => watch().faj || Faj.Ember + const currentOsztaly = () => watch().osztaly || Osztaly.Harcos + return (
@@ -53,15 +82,14 @@ function CreateCharacterPage() {
- - Név + {errors.nev && A karaktered nem mászkálhat névtelenül a világban!}
- -
- @@ -80,6 +108,10 @@ function CreateCharacterPage() { +
+
+ +

{FajDescription(currentFaj())}

@@ -88,33 +120,6 @@ function CreateCharacterPage() {
-
- - -

Tulajdonságok
@@ -126,23 +131,41 @@ function CreateCharacterPage() {
- - {errors.ero && Number(watch('ero')) < 3 && ( + + {fajiModositoText(currentFaj(), fajiEroModosito)} + + + Összesen: { (Number((watch('ero') || 10)) + (fajiEroModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('ero') || 10)) + fajiEroModosito(currentFaj()))) } + + {Number(watch('ero')) < 3 && ( Túl gyenge vagy, nem bírtad felemelni a kezed a jelentkezéshez!)} - {errors.ero && Number(watch('ero')) > 18 && ( + {Number(watch('ero')) > 18 && ( Szét szakadtak az izmaid!)}
- + + {fajiModositoText(currentFaj(), fajiUgyModosito)} + + + Összesen: { (Number((watch('ugy') || 10)) + (fajiUgyModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('ugy') || 10)) + fajiUgyModosito(currentFaj()))) } + {errors.ugy && Number(watch('ugy')) < 3 && ( Orrabuktál jelentkezés helyett!)} {errors.ugy && Number(watch('ugy')) > 18 && ( @@ -150,11 +173,20 @@ function CreateCharacterPage() {
- + + {fajiModositoText(currentFaj(), fajiEgsModosito)} + + + Összesen: { (Number((watch('egs') || 10)) + (fajiEgsModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('egs') || 10)) + fajiEgsModosito(currentFaj()))) } + {errors.egs && Number(watch('egs')) < 3 && ( Túl beteg vagy ahhoz, hogy kalandozni menj!)} {errors.egs && Number(watch('egs')) > 18 && ( @@ -162,11 +194,20 @@ function CreateCharacterPage() {
- + + {fajiModositoText(currentFaj(), fajiIntModosito)} + + + Összesen: { (Number((watch('int') || 10)) + (fajiIntModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('int') || 10)) + fajiIntModosito(currentFaj()))) } + {errors.int && Number(watch('int')) < 3 && ( Elfelejtetted, hogy mikor is kéne kalandozni indulni!)} {errors.int && Number(watch('int')) > 18 && ( @@ -174,11 +215,20 @@ function CreateCharacterPage() {
- + + {fajiModositoText(currentFaj(), fajiBolModosito)} + + + Összesen: { (Number((watch('bol') || 10)) + (fajiBolModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('bol') || 10)) + fajiBolModosito(currentFaj()))) } + {errors.bol && Number(watch('bol')) < 3 && ( Nem bírtál ellenállni a kíváncsiságodnak, hogy közelebbről is megvizsgáld a tőr hegyét, nagyon közelről...)} {errors.bol && Number(watch('bol')) > 18 && ( @@ -186,16 +236,60 @@ function CreateCharacterPage() {
- + + {fajiModositoText(currentFaj(), fajiKarModosito)} + + + Összesen: { (Number((watch('kar') || 10)) + (fajiKarModosito(currentFaj()))).toString() } + + + Módosító: { signedNumberToText(modifier(Number((watch('kar') || 10)) + fajiKarModosito(currentFaj()))) } + {errors.kar && Number(watch('kar')) < 3 && ( Mintha taszítanád az embereket, sose sikerült kalandozó csapatot találnod.)} {errors.kar && Number(watch('kar')) > 18 && ( Az ellenkező nem tagjai nem engedték, hogy útnak indulj.)}
+
+
+ + +
+
+ +
+

+ {OsztalyDescription(currentOsztaly())} +

+
    + {OsztalyProperties(currentOsztaly()).map(((special) => (
  • {special}
  • )))} +
+
+
+