level up to 2 almost working

This commit is contained in:
2023-09-14 22:19:21 +02:00
parent eb077928cf
commit 2f4cde091b
7 changed files with 123 additions and 199 deletions
+39 -47
View File
@@ -1,9 +1,9 @@
import {Faj} from "./faj";
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag";
import {CalculateMasodlagosErtekek, KarakterMasodlagosErtekek} from "./masodlagos_ertekek";
import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek";
import TamadasBonuszTabla from './tamadas_bonus_tabla.json';
import {ElsodlegesMento, MasodlagosMento, Mentok, MentoTipus} from "./mentok";
export interface Karakter {
Name: string
@@ -18,11 +18,11 @@ export interface Karakter {
VO: () => number
Mozgas: () => number
Kezdemenyezes: () => number
KozelharciTB: () => number[]
CelzoTB: () => number[]
KitartasMentoAlap: () => number
ReflexMentoAlap: () => number
AkarateroMentoAlap: () => number
KozelharciTB: (szint?: number) => number[]
CelzoTB: (szint?: number) => number[]
ElsodlegesMentok: () => MentoTipus[]
MentokAlap: (szint?: number) => Mentok
MentokTulajdonsaggal: (szint?: number) => Mentok
Kepzettsegek: Kepzettseg[]
TolvajKepzettsegek: Kepzettseg[]
}
@@ -54,7 +54,6 @@ export class KarakterClass implements Karakter {
public Kepzettsegek: Kepzettseg[]
public TolvajKepzettsegek: Kepzettseg[]
private MasodlagosErtekek : KarakterMasodlagosErtekek
private HProlls: number[]
constructor(inputs: KarakterInputs) {
@@ -65,7 +64,6 @@ export class KarakterClass implements Karakter {
this.Faj = inputs.faj
this.Osztaly = inputs.osztaly
this.Tulajdonsagok = inputs.tulajdonsagok
this.MasodlagosErtekek = CalculateMasodlagosErtekek(inputs.osztaly, inputs.tulajdonsagok)
this.Kepzettsegek = inputs.kepzettsegek.map(k => Kepzettsegek[k])
this.TolvajKepzettsegek = (inputs.tolvajKepzettsegek || []).map(k => Kepzettsegek[k])
this.Szint = Math.min(Math.max(1,inputs.szint), 20)
@@ -77,7 +75,7 @@ export class KarakterClass implements Karakter {
.map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs)))
.reduce((sum, val) => sum + val, 0)
public VO = () => this.MasodlagosErtekek.VO
public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy)
public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30
@@ -85,7 +83,7 @@ export class KarakterClass implements Karakter {
return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0)
}
public TamadasBonusz() : number[] {
public TamadasBonusz(szint: number = this.Szint) : number[] {
let base = []
switch (this.Osztaly){
case Osztaly.Barbar:
@@ -104,70 +102,64 @@ export class KarakterClass implements Karakter {
base = TamadasBonuszTabla['feles'];
break;
}
return base[this.Szint-1]
return base[szint-1]
}
public KozelharciTB(): number[] {
const base = this.TamadasBonusz();
public KozelharciTB(szint: number = this.Szint): number[] {
const base = this.TamadasBonusz(szint);
let modifier = Modifier(this.Tulajdonsagok.t_ero)
if (this.Osztaly === Osztaly.Kaloz && this.Tulajdonsagok.t_ugy > this.Tulajdonsagok.t_ero) {
modifier = Modifier(this.Tulajdonsagok.t_ugy)
}
return base.map(v => v + modifier)
}
public CelzoTB(): number[] {
let base = this.TamadasBonusz()
public CelzoTB(szint: number = this.Szint): number[] {
let base = this.TamadasBonusz(szint)
if (this.Osztaly === Osztaly.Ijasz) {
base = [base[0], ...base]
}
return base.map(v => v + Modifier(this.Tulajdonsagok.t_ugy))
}
public KitartasMentoAlap() : number {
public ElsodlegesMentok() : MentoTipus[] {
let t: MentoTipus[] = []
switch (this.Osztaly){
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
t = ['kitartas'];
break;
case Osztaly.Pap:
return 2;
t = ['kitartas', 'akaratero'];
break;
case Osztaly.Tolvaj:
t = ['reflex'];
break;
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 0;
t = ['akaratero']
break;
}
return t
}
public MentokAlap(szint: number = this.Szint) {
const elsodlegesek = this.ElsodlegesMentok()
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),
}
}
public ReflexMentoAlap() : number {
switch (this.Osztaly){
case Osztaly.Tolvaj:
return 2;
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
case Osztaly.Pap:
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 0;
}
}
public AkarateroMentoAlap() : number {
switch (this.Osztaly){
case Osztaly.Pap:
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 2;
case Osztaly.Tolvaj:
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
return 0;
public MentokTulajdonsaggal(szint: number = this.Szint) {
const mentok = this.MentokAlap(szint)
return {
kitartas: mentok.kitartas + Modifier(this.Tulajdonsagok.t_egs),
reflex: mentok.reflex + Modifier(this.Tulajdonsagok.t_ugy),
akaratero: mentok.akaratero + Modifier(this.Tulajdonsagok.t_bol),
}
}
-124
View File
@@ -1,124 +0,0 @@
import {Osztaly} from "./osztaly";
import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag";
export interface KarakterMasodlagosErtekek {
HP: number
VO: number
CelzoTB: number
KozelHarciTB: number
KitartasMento: number
ReflexMento: number
AkarateroMento: number
}
export function CalculateMasodlagosErtekek(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok) : KarakterMasodlagosErtekek {
return {
HP: HP(osztaly, tulajdonsagok.t_egs),
VO: 10 + Modifier(tulajdonsagok.t_ugy),
KozelHarciTB: KozelharciTB(osztaly, tulajdonsagok),
CelzoTB: TamadasBonusz(osztaly) + Modifier(tulajdonsagok.t_ugy),
KitartasMento: KitartasMento(osztaly) + Modifier(tulajdonsagok.t_egs),
ReflexMento: ReflexMento(osztaly) + Modifier(tulajdonsagok.t_ugy),
AkarateroMento: AkarateroMento(osztaly) + Modifier(tulajdonsagok.t_bol),
}
}
function HP(osztaly: Osztaly, egeszseg: number) {
let base = 4;
switch (osztaly){
case Osztaly.Barbar:
base = 12
break;
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
base = 10;
break
case Osztaly.Pap:
base = 8;
break;
case Osztaly.Tolvaj:
base = 6;
break;
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
base = 4;
break;
}
return base + Modifier(egeszseg)
}
function TamadasBonusz(osztaly: Osztaly) : number {
switch (osztaly){
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
return 2;
case Osztaly.Pap:
case Osztaly.Tolvaj:
return 0;
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 0;
}
}
function KozelharciTB(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok): number {
const base = TamadasBonusz(osztaly);
if (osztaly === Osztaly.Kaloz && tulajdonsagok.t_ugy > tulajdonsagok.t_ero) {
return base + Modifier(tulajdonsagok.t_ugy)
}
return base + Modifier(tulajdonsagok.t_ero)
}
function KitartasMento(osztaly: Osztaly) : number {
switch (osztaly){
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
case Osztaly.Pap:
return 2;
case Osztaly.Tolvaj:
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 0;
}
}
function ReflexMento(osztaly: Osztaly) : number {
switch (osztaly){
case Osztaly.Tolvaj:
return 2;
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
case Osztaly.Pap:
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 0;
}
}
function AkarateroMento(osztaly: Osztaly) : number {
switch (osztaly){
case Osztaly.Pap:
case Osztaly.Varazslo:
case Osztaly.Illuzionista:
return 2;
case Osztaly.Tolvaj:
case Osztaly.Barbar:
case Osztaly.Amazon:
case Osztaly.Ijasz:
case Osztaly.Kaloz:
case Osztaly.Harcos:
return 0;
}
}
+30
View File
@@ -0,0 +1,30 @@
export interface Mentok {
kitartas: number
reflex: number
akaratero: number
}
export type MentoTipus = keyof Mentok
export function MentoTipusLabel(tipus: MentoTipus): string {
let label: string | null = null
switch (tipus) {
case "akaratero":
label = "Akaraterő";
break;
case "kitartas":
label = "Kitartás";
break;
case "reflex":
label = "Reflex";
break;
}
return label
}
export function ElsodlegesMento(szint: number): number {
return Math.min(Math.floor(2 + szint / 2), 10);
}
export function MasodlagosMento(szint: number): number {
return Math.floor(szint / 3)
}