960a5a7d92
goal: remove class by breaking it up into smaller functions
290 lines
9.1 KiB
TypeScript
290 lines
9.1 KiB
TypeScript
import {Faj} from "./faj";
|
|
import {Osztaly} from "./osztaly";
|
|
import {KarakterTulajdonsagok, Modifier, TulajdonsagModosito} from "./tulajdonsag";
|
|
import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek";
|
|
import TamadasBonuszTabla from './tamadas_bonus_tabla.json';
|
|
import {ElsodlegesMento, MasodlagosMento, Mentok, MentokAlap, MentoModositok, MentoTipus} from "./mentok";
|
|
import {CelzoTB, KozelharciTB} from "./tamadas_bonusz";
|
|
|
|
export interface Karakter {
|
|
Name: string
|
|
Nem: string
|
|
Kor: number
|
|
Isten: string
|
|
Faj: Faj
|
|
Osztaly: Osztaly
|
|
Tulajdonsagok: KarakterTulajdonsagok,
|
|
Szint: number
|
|
HP: () => number
|
|
VO: () => number
|
|
Mozgas: () => number
|
|
Kezdemenyezes: () => number
|
|
KozelharciTB: (szint?: number) => number[]
|
|
CelzoTB: (szint?: number) => number[]
|
|
ElsodlegesMentok: () => MentoTipus[]
|
|
MentokAlap: (szint?: number) => Mentok
|
|
MentokTulajdonsaggal: (szint?: number) => Mentok
|
|
Kepzettsegek: Kepzettseg[]
|
|
TolvajKepzettsegek: Kepzettseg[]
|
|
}
|
|
|
|
export interface KarakterPdfView {
|
|
Name: string
|
|
Nem: string
|
|
Kor: number
|
|
Isten: string
|
|
Faj: Faj
|
|
Osztaly: Osztaly
|
|
Tulajdonsagok: KarakterTulajdonsagok,
|
|
TulajdonsagModositok: KarakterTulajdonsagok,
|
|
Szint: number
|
|
HP: number
|
|
VO: number
|
|
Mozgas: number
|
|
Kezdemenyezes: number
|
|
KozelharciTB: number[]
|
|
CelzoTB: number[]
|
|
MentokAlap: Mentok
|
|
MentoModositok: Mentok
|
|
MentokModositokkal: Mentok
|
|
Kepzettsegek: Kepzettseg[]
|
|
TolvajKepzettsegek: Kepzettseg[]
|
|
}
|
|
|
|
export interface KarakterInputs {
|
|
name: string,
|
|
nem?: string,
|
|
kor: number,
|
|
isten?: string,
|
|
faj: Faj,
|
|
osztaly: Osztaly,
|
|
tulajdonsagok: KarakterTulajdonsagok,
|
|
kepzettsegek: KepzettsegId[],
|
|
tolvajKepzettsegek?: KepzettsegId[]
|
|
szint: number
|
|
HProlls: number[],
|
|
}
|
|
|
|
function BaseHP(osztaly: Osztaly) {
|
|
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
|
|
}
|
|
|
|
export function HP(osztaly: Osztaly, egeszsegModifier: number, hpRolls: number[]): number {
|
|
return BaseHP(osztaly) + egeszsegModifier + 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 KarakterInputToPdfView(input: KarakterInputs): KarakterPdfView {
|
|
const tulajdonsagModositok = TulajdonsagModosito(input.tulajdonsagok)
|
|
const hp = HP(input.osztaly, tulajdonsagModositok.t_egs, input.HProlls)
|
|
const vo = 10 + tulajdonsagModositok.t_ugy // TODO: kaloz, amazon!
|
|
const mozgas = input.faj === Faj.Torpe ? 20 : 30
|
|
const kezdemenyezes = tulajdonsagModositok.t_ugy + (input.osztaly === Osztaly.Tolvaj ? 4 : 0)
|
|
|
|
const mentok = MentokAlap(input.osztaly, input.szint)
|
|
const mentoModositok = MentoModositok(tulajdonsagModositok)
|
|
|
|
return {
|
|
Faj: input.faj,
|
|
Isten: input.isten || "",
|
|
Kor: input.kor,
|
|
Name: input.name,
|
|
Nem: input.nem || "",
|
|
Tulajdonsagok: input.tulajdonsagok,
|
|
Osztaly: input.osztaly,
|
|
Szint: input.szint,
|
|
Kepzettsegek: input.kepzettsegek.map(id => Kepzettsegek[id]),
|
|
TolvajKepzettsegek: input.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [],
|
|
TulajdonsagModositok: tulajdonsagModositok,
|
|
|
|
HP: hp,
|
|
VO: vo,
|
|
Mozgas: mozgas,
|
|
Kezdemenyezes: kezdemenyezes,
|
|
KozelharciTB: KozelharciTB(input),
|
|
CelzoTB: CelzoTB(input),
|
|
|
|
MentoModositok: mentoModositok,
|
|
MentokAlap: mentok,
|
|
MentokModositokkal: {
|
|
kitartas: mentok.kitartas + mentoModositok.kitartas,
|
|
akaratero: mentok.akaratero + mentoModositok.akaratero,
|
|
reflex: mentok.reflex + mentoModositok.reflex,
|
|
}
|
|
}
|
|
}
|
|
|
|
/// deprecated
|
|
export class KarakterClass implements Karakter {
|
|
|
|
public Name : string
|
|
public Nem : string
|
|
public Kor : number
|
|
public Isten : string
|
|
public Faj : Faj
|
|
public Osztaly : Osztaly
|
|
public Tulajdonsagok : KarakterTulajdonsagok
|
|
public Szint : number = 1
|
|
public Kepzettsegek: Kepzettseg[]
|
|
public TolvajKepzettsegek: Kepzettseg[]
|
|
|
|
private HProlls: number[]
|
|
|
|
constructor(inputs: KarakterInputs) {
|
|
this.Name = inputs.name
|
|
this.Nem = inputs.nem || ""
|
|
this.Kor = inputs.kor
|
|
this.Isten = inputs.isten || ""
|
|
this.Faj = inputs.faj
|
|
this.Osztaly = inputs.osztaly
|
|
this.Tulajdonsagok = 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)
|
|
this.HProlls = inputs.HProlls
|
|
}
|
|
|
|
public HP = () => this.baseHP() + Modifier(this.Tulajdonsagok.t_egs) + this.HProlls
|
|
// https://lfg.hu/forum/topic/15079-kard-es-magia/page/219/#comment-2218333
|
|
.map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs)))
|
|
.reduce((sum, val) => sum + val, 0)
|
|
|
|
public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy)
|
|
|
|
public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30
|
|
|
|
public Kezdemenyezes() : number {
|
|
return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0)
|
|
}
|
|
|
|
public TamadasBonusz(szint: number = this.Szint) : number[] {
|
|
let base = []
|
|
switch (this.Osztaly){
|
|
case Osztaly.Barbar:
|
|
case Osztaly.Amazon:
|
|
case Osztaly.Ijasz:
|
|
case Osztaly.Kaloz:
|
|
case Osztaly.Harcos:
|
|
base = TamadasBonuszTabla['elsodleges'];
|
|
break;
|
|
case Osztaly.Pap:
|
|
case Osztaly.Tolvaj:
|
|
base = TamadasBonuszTabla['ketharmados'];
|
|
break;
|
|
case Osztaly.Varazslo:
|
|
case Osztaly.Illuzionista:
|
|
base = TamadasBonuszTabla['feles'];
|
|
break;
|
|
}
|
|
return base[szint-1]
|
|
}
|
|
|
|
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(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 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:
|
|
t = ['kitartas', 'akaratero'];
|
|
break;
|
|
case Osztaly.Tolvaj:
|
|
t = ['reflex'];
|
|
break;
|
|
case Osztaly.Varazslo:
|
|
case Osztaly.Illuzionista:
|
|
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 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),
|
|
}
|
|
}
|
|
|
|
public baseHP() {
|
|
let base = 4;
|
|
switch (this.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
|
|
}
|
|
} |