diff --git a/Kemkas.Web/appsettings.Development.json b/Kemkas.Web/appsettings.Development.json
index 82b00bb..47cedb2 100644
--- a/Kemkas.Web/appsettings.Development.json
+++ b/Kemkas.Web/appsettings.Development.json
@@ -14,5 +14,23 @@
},
"ConnectionStrings": {
"DefaultConnection": "Host=127.0.0.1;Port=5432;User Id=kemkas;Password=kemkas-dev42"
+ },
+ "Email": {
+ "DomainName": "mail.kemkas.hu",
+ "ApiKey": "fake"
+ },
+ "Authentication": {
+ "Google": {
+ "ClientId": "fake",
+ "ClientSecret": "fake"
+ },
+ "Facebook": {
+ "ClientId": "fake",
+ "ClientSecret": "fake"
+ },
+ "Discord": {
+ "ClientId": "fake",
+ "ClientSecret": "fake"
+ }
}
}
diff --git a/Kemkas.Web/frontend/src/first-edition/components/BasicNewLevel.tsx b/Kemkas.Web/frontend/src/first-edition/components/BasicNewLevel.tsx
index 9032b43..95774d1 100644
--- a/Kemkas.Web/frontend/src/first-edition/components/BasicNewLevel.tsx
+++ b/Kemkas.Web/frontend/src/first-edition/components/BasicNewLevel.tsx
@@ -1,6 +1,6 @@
import React from "react";
import {KarakterInputs} from "../domain-models/karakter";
-import {SignedNumberToText} from "./Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import {Mentok, MentoTipus, MentoTipusLabel, MentokTotal} from "../domain-models/mentok";
import {BaseHP, HP} from "../domain-models/masodlagos_ertekek";
import {TamadasBonusz} from "../domain-models/tamadas_bonusz";
diff --git a/Kemkas.Web/frontend/src/first-edition/components/MasodlagosErtekek.tsx b/Kemkas.Web/frontend/src/first-edition/components/MasodlagosErtekek.tsx
index bd9b066..cd0566a 100644
--- a/Kemkas.Web/frontend/src/first-edition/components/MasodlagosErtekek.tsx
+++ b/Kemkas.Web/frontend/src/first-edition/components/MasodlagosErtekek.tsx
@@ -1,6 +1,6 @@
import React from "react";
import {OverlayTrigger, Tooltip} from "react-bootstrap";
-import {SignedNumberToText} from "./Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import {MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek";
function MasodlagosErtekek(props: MasodlagosErtekekView) {
diff --git a/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagInput.tsx b/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagInput.tsx
index 4806ada..fde9158 100644
--- a/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagInput.tsx
+++ b/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagInput.tsx
@@ -2,7 +2,7 @@ import React from "react";
import {Faj, FajLabel} from "../domain-models/faj";
import {Modifier} from "../domain-models/tulajdonsag";
-import {SignedNumberToText} from "./Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
function fajiModositoText(faj: Faj, szamolas: (f: Faj) => number) : string {
diff --git a/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagNoveles.tsx b/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagNoveles.tsx
index 101a1dc..6e7f6f3 100644
--- a/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagNoveles.tsx
+++ b/Kemkas.Web/frontend/src/first-edition/components/TulajdonsagNoveles.tsx
@@ -6,7 +6,7 @@ import {
TulajdonsagIDs,
TulajdonsagLabel
} from "../domain-models/tulajdonsag";
-import {SignedNumberToText} from "./Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint: number, tulajdonsagNovelesek: Tulajdonsag[], changeTulajdonsagNoveles: (tulajdonsag: Tulajdonsag) => void}) {
const {tulajdonsagok, szint, tulajdonsagNovelesek, changeTulajdonsagNoveles} = props
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts
index 50123d4..f571c8e 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/character.pdf.ts
@@ -1,7 +1,7 @@
import {KarakterPdfView, KepzettsegPdfView} from "./karakter_pdf_view";
import {PDFDocument, rgb} from "pdf-lib";
import fontkit from '@pdf-lib/fontkit'
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import download from "downloadjs";
import {DrawTulajdonsagok} from "./tulajdonsagok.pdf";
import {DrawMentok} from "./mentok.pdf";
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/fegyverek.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/fegyverek.pdf.ts
index 76655d0..a674bf1 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/fegyverek.pdf.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/fegyverek.pdf.ts
@@ -1,6 +1,6 @@
import {KarakterPdfView} from "./karakter_pdf_view";
import {PDFFont, PDFPage} from "pdf-lib";
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
function fitTextInWidth(font: PDFFont, text: string, startingSize: number, maxWidth: number): number {
let size = startingSize
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/karakter_pdf_view.ts b/Kemkas.Web/frontend/src/first-edition/pdf/karakter_pdf_view.ts
index 116cab5..06d866d 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/karakter_pdf_view.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/karakter_pdf_view.ts
@@ -9,7 +9,7 @@ import {KarakterInputs} from "../domain-models/karakter";
import {CalculateVarazslatMentokNF, NapiVarazslatok} from "../domain-models/memorizalt_varazslatok";
import {GetJellem} from "../domain-models/jellem";
import {Fegyver, GetFegyverek, GetPajzs, GetPancel} from '../domain-models/felszereles'
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import {OsztalySkillsTordelt} from "./osztaly_skills";
import {
KarakterTulajdonsagok,
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/masodlagos_ertekek.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/masodlagos_ertekek.pdf.ts
index 2b0000f..3366187 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/masodlagos_ertekek.pdf.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/masodlagos_ertekek.pdf.ts
@@ -1,6 +1,6 @@
import {PDFFont, PDFPage} from "pdf-lib";
import {KarakterPdfView} from "./karakter_pdf_view";
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
export function DrawMasodlagosErtekek(
page: PDFPage,
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/mentok.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/mentok.pdf.ts
index c3bf73b..9ede2a2 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/mentok.pdf.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/mentok.pdf.ts
@@ -1,6 +1,6 @@
import {PDFFont, PDFPage, rgb} from "pdf-lib";
import {KarakterPdfView} from "./karakter_pdf_view";
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import {Modifier} from "../domain-models/tulajdonsag";
export function DrawMentok(page: PDFPage, karakter: KarakterPdfView, fontSizeBase: number, pdfFont: PDFFont) {
diff --git a/Kemkas.Web/frontend/src/first-edition/pdf/tulajdonsagok.pdf.ts b/Kemkas.Web/frontend/src/first-edition/pdf/tulajdonsagok.pdf.ts
index b108544..cf2a09e 100644
--- a/Kemkas.Web/frontend/src/first-edition/pdf/tulajdonsagok.pdf.ts
+++ b/Kemkas.Web/frontend/src/first-edition/pdf/tulajdonsagok.pdf.ts
@@ -1,5 +1,5 @@
import {PDFFont, PDFPage, rgb} from "pdf-lib";
-import {SignedNumberToText} from "../components/Helpers";
+import {SignedNumberToText} from "../../shared/components/Helpers";
import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag";
export function DrawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok, fontSizeBase: number, pdfFont: PDFFont) {
diff --git a/Kemkas.Web/frontend/src/second-edition/components/MasodlagosErtekek.tsx b/Kemkas.Web/frontend/src/second-edition/components/MasodlagosErtekek.tsx
new file mode 100644
index 0000000..db0edd3
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/components/MasodlagosErtekek.tsx
@@ -0,0 +1,61 @@
+import React from "react";
+import {OverlayTrigger, Tooltip} from "react-bootstrap";
+import {SignedNumberToText} from "../../shared/components/Helpers";
+import {MasodlagosErtekekView} from "../domain-models/masodlagos_ertekek";
+
+function MasodlagosErtekek(props: MasodlagosErtekekView) {
+
+ const { HP, VO, CelzoTB, Mentok, KozelharciTB } = props
+
+ const tooltip = (
+
+ Hentelési Potenciál
+
+ );
+
+ return <>
+
+
Másodlagos értékek
+
+
+
+
+
+
{HP}
+
+
+
+
{VO}
+
+
+
+
{KozelharciTB.map(SignedNumberToText).join(" / ")}
+
+
+
+
{CelzoTB.map(SignedNumberToText).join(" / ")}
+
+
+
+
+
+
{SignedNumberToText(Mentok.kitartas)}
+
+
+
+
{SignedNumberToText(Mentok.reflex)}
+
+
+
+
{SignedNumberToText(Mentok.akaratero)}
+
+
+
+ >
+}
+
+export default MasodlagosErtekek
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts
index 1871b3f..9b1923b 100644
--- a/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts
+++ b/Kemkas.Web/frontend/src/second-edition/domain-models/karakter2E.ts
@@ -17,6 +17,8 @@ export interface Karakter2E {
kalozKritikus: string[],
kepzettsegek: KepzettsegId[]
tolvajKepzettsegek?: KepzettsegId[]
+ szint: number,
+ hpRolls: number[]
}
export const DefaultKarakter: Karakter2E = {
name: 'Névtelen Kalandozó',
@@ -29,4 +31,6 @@ export const DefaultKarakter: Karakter2E = {
kalozKritikus: [],
kepzettsegek: [],
tolvajKepzettsegek: [],
+ szint: 1,
+ hpRolls: []
}
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts
new file mode 100644
index 0000000..d305d76
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/domain-models/masodlagos_ertekek.ts
@@ -0,0 +1,91 @@
+import {Mentok, MentokTotal} from "./mentok";
+import {Osztaly2E} from "./osztaly2E";
+import {Karakter2E} from "./karakter2E";
+import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
+import {Faj2E} from "./faj2E";
+// import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles";
+import {Modifier} from "./tulajdonsag2E";
+
+export interface MasodlagosErtekekView {
+ HP: number
+ VO: number
+ KozelharciTB: number[]
+ CelzoTB: number[]
+ Mentok: Mentok
+}
+
+export type KarakterpickForMasodlagosErtekek = Pick
+
+export function BaseHP(osztaly: Osztaly2E) {
+ let base = 4;
+ switch (osztaly){
+ case Osztaly2E.Barbar:
+ base = 12
+ break;
+ case Osztaly2E.Amazon:
+ case Osztaly2E.Ijasz:
+ case Osztaly2E.Tengeresz:
+ case Osztaly2E.Harcos:
+ case Osztaly2E.Vandor:
+ base = 10;
+ break
+ case Osztaly2E.Pap:
+ case Osztaly2E.Druida:
+ base = 8;
+ break;
+ case Osztaly2E.Tolvaj:
+ case Osztaly2E.Dalnok:
+ base = 6;
+ break;
+ case Osztaly2E.Varazslo:
+ case Osztaly2E.Illuzionista:
+ base = 4;
+ break;
+ }
+ return base
+}
+
+export function HP(karakter: Pick): number {
+ const egeszsegModifier = Modifier(karakter.tulajdonsagok.t_egs)
+ return BaseHP(karakter.osztaly) + egeszsegModifier + karakter.hpRolls
+ // https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333
+ .map(hp => Math.max(1, hp + egeszsegModifier))
+ .reduce((sum, val) => sum + val, 0)
+}
+
+export function VO(karakter: Pick): number {
+ // const pancel = GetPancel(karakter.felszereles.pancelID)
+ // const pancelVO = pancel?.VO ?? 0
+ // const pajzsVO = GetPajzs(karakter.felszereles.pajzsID)?.VO ?? 0
+ // let vo = 10 + pajzsVO + pancelVO
+ let vo = 10
+ let abilityVO = Modifier(karakter.tulajdonsagok.t_ugy)
+ if (karakter.osztaly === Osztaly2E.Tengeresz) {
+ vo += Math.floor(karakter.szint / 3)
+ }
+ if (karakter.osztaly === Osztaly2E.Amazon) {
+ if (karakter.tulajdonsagok.t_kar > karakter.tulajdonsagok.t_ugy) {
+ abilityVO = Modifier(karakter.tulajdonsagok.t_kar)
+ }
+ vo += Math.floor(karakter.szint / 2)
+ }
+ if (karakter.faj === Faj2E.Felszerzet || karakter.faj === Faj2E.Gnom){
+ vo += 1
+ }
+ // if (pancel) {
+ // abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO)
+ // }
+ vo += abilityVO
+
+ return vo
+}
+
+export function CalculateMasodlagosErtekek(karakter: KarakterpickForMasodlagosErtekek): MasodlagosErtekekView {
+ return {
+ HP: HP(karakter),
+ VO: VO(karakter),
+ CelzoTB: CelzoTB(karakter),
+ KozelharciTB: KozelharciTB(karakter),
+ Mentok: MentokTotal(karakter)
+ }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/mentok.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/mentok.ts
new file mode 100644
index 0000000..4bc0d5a
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/domain-models/mentok.ts
@@ -0,0 +1,84 @@
+import {Osztaly2E} from "./osztaly2E";
+import {Karakter2E} from "./karakter2E";
+import {KarakterTulajdonsagok, TulajdonsagModosito} from "./tulajdonsag2E";
+
+export interface Mentok {
+ kitartas: number
+ reflex: number
+ akaratero: number
+}
+export type MentoTipus = keyof Mentok
+
+export function MentoTipusLabel(tipus: MentoTipus): string {
+ switch (tipus) {
+ case "akaratero":
+ return "Akaraterő";
+ case "kitartas":
+ return "Kitartás";
+ case "reflex":
+ return "Reflex";
+ }
+}
+
+export function ElsodlegesMento(szint: number): number {
+ return 2 + Math.floor(szint / 2);
+}
+
+export function MasodlagosMento(szint: number): number {
+ return Math.floor(szint / 3)
+}
+
+export function ElsodlegesMentok(osztaly: Osztaly2E) : MentoTipus[] {
+ let t: MentoTipus[] = []
+ switch (osztaly){
+ case Osztaly2E.Barbar:
+ case Osztaly2E.Amazon:
+ case Osztaly2E.Ijasz:
+ case Osztaly2E.Tengeresz:
+ case Osztaly2E.Harcos:
+ case Osztaly2E.Vandor:
+ t = ['kitartas'];
+ break;
+ case Osztaly2E.Druida:
+ case Osztaly2E.Pap:
+ t = ['kitartas', 'akaratero'];
+ break;
+ case Osztaly2E.Tolvaj:
+ case Osztaly2E.Dalnok:
+ t = ['reflex'];
+ break;
+ case Osztaly2E.Varazslo:
+ case Osztaly2E.Illuzionista:
+ t = ['akaratero']
+ break;
+
+ }
+ return t;
+}
+
+export function MentokAlap(osztaly: Osztaly2E, szint: number = 1) {
+ const elsodlegesek = ElsodlegesMentok(osztaly)
+ return {
+ kitartas: elsodlegesek.includes('kitartas') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ reflex: elsodlegesek.includes('reflex') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ akaratero: elsodlegesek.includes('akaratero') ? ElsodlegesMento(szint) : MasodlagosMento(szint),
+ }
+}
+
+export function MentoModositok(tulajdonsagModositok: KarakterTulajdonsagok) {
+ return {
+ kitartas: tulajdonsagModositok.t_egs,
+ reflex: tulajdonsagModositok.t_ugy,
+ akaratero: tulajdonsagModositok.t_bol,
+ }
+}
+
+export function MentokTotal(karakter: Pick) {
+ const alap = MentokAlap(karakter.osztaly, karakter.szint)
+ const modositok = MentoModositok(TulajdonsagModosito(karakter.tulajdonsagok))
+ return {
+ kitartas: alap.kitartas + modositok.kitartas,
+ reflex: alap.reflex + modositok.reflex,
+ akaratero: alap.akaratero + modositok.akaratero,
+ }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/domain-models/tamadas_bonusz.ts b/Kemkas.Web/frontend/src/second-edition/domain-models/tamadas_bonusz.ts
new file mode 100644
index 0000000..9257ad9
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/domain-models/tamadas_bonusz.ts
@@ -0,0 +1,46 @@
+import {Osztaly2E} from "./osztaly2E";
+import {Karakter2E} from "./karakter2E";
+import {Modifier} from "./tulajdonsag2E";
+
+/// Finally second edition doesn't mess with the extra attack of high level clerics rouges and wizards!
+function ExtraAttack(attack: number): number[] {
+ if (attack < 6) {
+ return [attack]
+ }
+ return [Math.min(attack, 10), ...ExtraAttack(attack - 5)]
+}
+
+export function TamadasBonusz(osztaly: Osztaly2E, szint: number = 1) : number[] {
+ let base = 0
+ switch (osztaly){
+ case Osztaly2E.Barbar:
+ case Osztaly2E.Amazon:
+ case Osztaly2E.Ijasz:
+ case Osztaly2E.Tengeresz:
+ case Osztaly2E.Harcos:
+ case Osztaly2E.Vandor:
+ base = szint;
+ break;
+ case Osztaly2E.Pap:
+ case Osztaly2E.Tolvaj:
+ case Osztaly2E.Dalnok:
+ case Osztaly2E.Druida:
+ base = Math.floor(szint * 2 / 3);
+ break;
+ case Osztaly2E.Varazslo:
+ case Osztaly2E.Illuzionista:
+ base = Math.floor(szint / 2);
+ break;
+ }
+ return ExtraAttack(base)
+}
+
+export function KozelharciTB(karakter : Pick): number[] {
+ const base = TamadasBonusz(karakter.osztaly, karakter.szint);
+ let modifier = Modifier(karakter.tulajdonsagok.t_ero)
+ return base.map(v => v + modifier)
+}
+export function CelzoTB(karakter : Pick): number[] {
+ let base = TamadasBonusz(karakter.osztaly, karakter.szint)
+ return base.map(v => v + Modifier(karakter.tulajdonsagok.t_ugy))
+}
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx b/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx
index b8bc218..edcc1e3 100644
--- a/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx
+++ b/Kemkas.Web/frontend/src/second-edition/pages/CreateCharacter2E.tsx
@@ -16,6 +16,8 @@ import {
import KarakterKepzettsegek from "../components/KarakterKepzettsegek2E";
import {TulajdonsagokFajjal} from "../domain-models/faj2E";
import JellemSelector from "../components/JellemSelector";
+import MasodlagosErtekek from "../components/MasodlagosErtekek";
+import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek";
function CreateCharacter2E(props: {}) {
@@ -109,6 +111,14 @@ function CreateCharacter2E(props: {}) {
changeTolvajKepzettsegek={changeTolvajKepzettseg}
/>
+ {/* 1. szinten */}
+
+
diff --git a/Kemkas.Web/frontend/src/shared/Header.tsx b/Kemkas.Web/frontend/src/shared/Header.tsx
index cc0c580..2c098ef 100644
--- a/Kemkas.Web/frontend/src/shared/Header.tsx
+++ b/Kemkas.Web/frontend/src/shared/Header.tsx
@@ -17,7 +17,7 @@ function Header(props: {}) {
Kemkas
- Karaktereim
+ {fetchedUser.data != null && Karaktereim}