diff --git a/Kemkas.Web/frontend/src/second-edition/components/BasicNewLevel.tsx b/Kemkas.Web/frontend/src/second-edition/components/BasicNewLevel.tsx
new file mode 100644
index 0000000..1d87cea
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/components/BasicNewLevel.tsx
@@ -0,0 +1,88 @@
+import React from "react";
+import {Karakter2E} from "../domain-models/karakter2E";
+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";
+
+function MentoNovekedes(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) {
+ const {tipus, ujMentok, regiMentok} = props
+ if (ujMentok[tipus] === regiMentok[tipus]) {
+ return null
+ }
+ return
+
+ {SignedNumberToText(ujMentok[tipus] - regiMentok[tipus])}
+
;
+}
+
+function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) {
+ const {tipus, ujMentok, regiMentok} = props
+ if (ujMentok[tipus] === regiMentok[tipus]) {
+ return null
+ }
+ return
+
+ {SignedNumberToText(ujMentok[tipus])}
+
;
+}
+
+function BasicNewLevel(props: {
+ karakter: Pick
+ szint: number
+ changeRolledHP: (hp: number) => void,
+}) {
+ const {karakter, szint, changeRolledHP} = props
+ const regiMentok = MentokTotal({...karakter, szint: szint - 1})
+ const ujMentok = MentokTotal({...karakter, szint: szint})
+
+ const regiTB = TamadasBonusz(karakter.osztaly, szint-1)
+ const ujTB = TamadasBonusz(karakter.osztaly, szint)
+ if (regiTB.length < ujTB.length) {
+ regiTB.push(0)
+ }
+ const TBdiff = ujTB.map((x, i) => x - regiTB[i])
+ const isTBincreased = TBdiff.length > 0 && TBdiff.some(x => x > 0)
+
+ return <>
+
+
+
+
+
+ changeRolledHP(Number(e.target.value))} />
+
+
+ { isTBincreased &&
+
+ {TBdiff.map(SignedNumberToText).join(" / ")}
+
}
+
+
+
+
+
+
+
+ {HP({...karakter, szintlepesek: karakter.szintlepesek.slice(0, szint-1)})}
+
+ {isTBincreased &&
+
+ {ujTB.map(SignedNumberToText).join(" / ")}
+
}
+
+
+
+
+
+ >
+}
+
+export default BasicNewLevel
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx b/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx
new file mode 100644
index 0000000..29cffb6
--- /dev/null
+++ b/Kemkas.Web/frontend/src/second-edition/components/FegyverSelector.tsx
@@ -0,0 +1,86 @@
+import React from "react";
+import {Fegyver} from "../domain-models/felszereles";
+
+export function FegyverLabel(fegyver: Fegyver): string {
+ const flags = [] as string[]
+ if (fegyver.Harcos) {
+ flags.push("H")
+ }
+ if (fegyver.Masfelkezes) {
+ flags.push("1½K")
+ }
+ if (fegyver.Ketkezes) {
+ if (fegyver.Type === "kozelharci") {
+ flags.push("2K")
+ } else {
+ if (fegyver.KetkezesBonusz) {
+ flags.push("2KB")
+ } else {
+ flags.push("2KN")
+ }
+ }
+ }
+ if (fegyver.HarciManover) {
+ flags.push("+2 HM")
+ }
+ if (fegyver.Alakzat){
+ flags.push("AL")
+ }
+ if (fegyver.Hosszu) {
+ flags.push("HO")
+ }
+ if (fegyver.Kabito) {
+ flags.push("KO")
+ }
+ if (fegyver.LovasRoham) {
+ flags.push("LR")
+ }
+ if (fegyver.PancelToro) {
+ flags.push("PT")
+ }
+ if (fegyver.PajzsZuzo) {
+ flags.push("PZ")
+ }
+ if (fegyver.Rohamtoro) {
+ flags.push("RT")
+ }
+ // Replaced by new group "dobhato"
+ // if (fegyver.EroBonusz) {
+ // flags.push("ER")
+ // }
+ if (fegyver.Megjegyzes != null && fegyver.Megjegyzes.length > 0) {
+ flags.push(fegyver.Megjegyzes)
+ }
+ const serializedFlags = flags.reduce((p,c) => `${p}${c} `, '');
+ const sizeLabel = fegyver.Size < 1 && fegyver.Size > 0 ? ` [1/${Math.round(1 / fegyver.Size)}]` : (fegyver.Size > 1 ? ` [${fegyver.Size}]` : '');
+ return `${fegyver.Name}${sizeLabel} ${serializedFlags.length > 0 ? "| " + serializedFlags : ''}| ${
+ fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${fegyver.NumberOfDamageDice}d${fegyver.DamageDice}${fegyver.DamageBonus > 0 ? ` +${fegyver.DamageBonus}` : ''} ${
+ fegyver.CritRangeStart < 20 ? `${fegyver.CritRangeStart}-20` : ''}x${fegyver.CritMultiplier}${
+ fegyver.Price > 0 ? ` | ár: ${fegyver.Price} at ` : ''}${
+ fegyver.Range > 10 ? ` | táv: ${fegyver.Range}` : ''}`
+}
+
+function FegyverSelector(props: {fegyverek: Fegyver[], selectedId: string, onChange: (id: string) => void}) {
+
+ const { fegyverek, selectedId, onChange } = props
+
+ return <>
+
+ >
+}
+
+export default FegyverSelector
\ No newline at end of file
diff --git a/Kemkas.Web/frontend/src/second-edition/components/Felszereles.tsx b/Kemkas.Web/frontend/src/second-edition/components/Felszereles.tsx
index d7f1447..4dd135f 100644
--- a/Kemkas.Web/frontend/src/second-edition/components/Felszereles.tsx
+++ b/Kemkas.Web/frontend/src/second-edition/components/Felszereles.tsx
@@ -5,64 +5,7 @@ import {AllowedPajzsTypes, AllowedPancelTypes} from '../domain-models/allowed-pa
import fegyverek from '../domain-models/fegyver.json'
import {arraySetN} from "../../util";
import {AllowedFegyver} from "../domain-models/allowed-fegyver";
-
-export function FegyverLabel(fegyver: Fegyver): string {
- const flags = [] as string[]
- if (fegyver.Harcos) {
- flags.push("H")
- }
- if (fegyver.Masfelkezes) {
- flags.push("1½K")
- }
- if (fegyver.Ketkezes) {
- if (fegyver.Type === "kozelharci") {
- flags.push("2K")
- } else {
- if (fegyver.KetkezesBonusz) {
- flags.push("2KB")
- } else {
- flags.push("2KN")
- }
- }
- }
- if (fegyver.HarciManover) {
- flags.push("+2 HM")
- }
- if (fegyver.Alakzat){
- flags.push("AL")
- }
- if (fegyver.Hosszu) {
- flags.push("HO")
- }
- if (fegyver.Kabito) {
- flags.push("KO")
- }
- if (fegyver.LovasRoham) {
- flags.push("LR")
- }
- if (fegyver.PancelToro) {
- flags.push("PT")
- }
- if (fegyver.PajzsZuzo) {
- flags.push("PZ")
- }
- if (fegyver.Rohamtoro) {
- flags.push("RT")
- }
- // if (fegyver.EroBonusz) {
- // flags.push("ER")
- // }
- if (fegyver.Megjegyzes != null && fegyver.Megjegyzes.length > 0) {
- flags.push(fegyver.Megjegyzes)
- }
- const serializedFlags = flags.reduce((p,c) => `${p}${c} `, '');
- const sizeLabel = fegyver.Size < 1 && fegyver.Size > 0 ? ` [1/${Math.round(1 / fegyver.Size)}]` : (fegyver.Size > 1 ? ` [${fegyver.Size}]` : '');
- return `${fegyver.Name}${sizeLabel} ${serializedFlags.length > 0 ? "| " + serializedFlags : ''}| ${
- fegyver.DamageMultiplier > 1 ? `${fegyver.DamageMultiplier}*` : ''}${fegyver.NumberOfDamageDice}d${fegyver.DamageDice}${fegyver.DamageBonus > 0 ? ` +${fegyver.DamageBonus}` : ''} ${
- fegyver.CritRangeStart < 20 ? `${fegyver.CritRangeStart}-20` : ''}x${fegyver.CritMultiplier}${
- fegyver.Price > 0 ? ` | ár: ${fegyver.Price} at ` : ''}${
- fegyver.Range > 10 ? ` | táv: ${fegyver.Range}` : ''}`
-}
+import FegyverSelector from "./FegyverSelector";
function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly2E}) {
const { felszereles, changeFelszereles, osztaly } = props;
@@ -116,21 +59,7 @@ function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles
{valasztottFegyverek.map(({idx, fegyver}) => (
-
+
changeFegyver(idx, fegyverId)} />