-
Notifications
You must be signed in to change notification settings - Fork 2
/
ranks.tsx
138 lines (129 loc) · 3.87 KB
/
ranks.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/* tslint:disable:max-line-length */
import { KUNGFU_EXTERNAL, KUNGFU_INTERNAL } from "../data/kungfu/types";
import { VIRTUE_CHIVALROUS, VIRTUE_SELFISH } from "../data/virtues";
import { bonusChi, bonusDestiny } from "../perks/actions/bonuses";
import {
discountKungfuFactory,
discountSkillFactory,
discountVirtueFactory,
} from "../perks/actions/discounts";
import { IBonus } from "../perks/bonuses";
import { IDiscount } from "../perks/discounts";
export type TRank = 0 | 1 | 2 | 3 | 4 | 5 | 6;
export interface IDataRank {
name: string;
description: string;
value: TRank;
perks: (IBonus | IDiscount)[];
}
export interface IDataRanks extends Array<IDataRank> {}
function _defaultVirtues() {
const virtues: {
name: string;
type: VIRTUE_SELFISH | VIRTUE_CHIVALROUS;
}[] = [
// TODO : handle virtues more clearly
{ name: "Honor", type: VIRTUE_CHIVALROUS },
{ name: "Benevolence", type: VIRTUE_CHIVALROUS },
{ name: "Righteousness", type: VIRTUE_CHIVALROUS },
{ name: "Loyalty", type: VIRTUE_CHIVALROUS },
{ name: "Force", type: VIRTUE_CHIVALROUS },
{ name: "Revenge", type: VIRTUE_SELFISH },
{ name: "Individualism", type: VIRTUE_SELFISH },
{ name: "Obsession", type: VIRTUE_SELFISH },
{ name: "Ruthlessness", type: VIRTUE_SELFISH },
{ name: "Ferocity", type: VIRTUE_SELFISH },
];
return discountVirtueFactory(15 * 5, virtues); // 15 free points
}
export const ranks: IDataRanks = [
{
description:
"River size and Joss limit are 1, no Aura or Chi replenishment, Lake is 5, maximum skill bonus is +5.",
name: "Unranked",
perks: [
bonusDestiny(10),
discountSkillFactory(10),
bonusChi(8, "general"),
_defaultVirtues(),
],
value: 0,
},
{
description:
"River size, Joss, Chi replenishment and Chi Aura limit are 1. Lake size is 6. Maximum skill bonus is +5.",
name: "5th Rank",
perks: [
bonusDestiny(15),
discountSkillFactory(10),
bonusChi(8, "general"),
_defaultVirtues(),
],
value: 1,
},
{
description:
"River size, Joss, Chi replenishment and Chi Aura limit are 2. Lake size is 7. Maximum skill bonus is +10.",
name: "4th Rank",
perks: [
bonusDestiny(20),
discountSkillFactory(20),
bonusChi(10, "general"),
discountKungfuFactory(10, KUNGFU_EXTERNAL),
discountKungfuFactory(10, KUNGFU_INTERNAL),
_defaultVirtues(),
],
value: 2,
},
{
description:
"River size, Joss, Chi replenishment and Chi Aura limit are 3. Lake size is 8. Maximum skill bonus is +15.",
name: "3rd Rank",
perks: [
bonusDestiny(50),
discountSkillFactory(20),
bonusChi(10, "general"),
discountKungfuFactory(10, KUNGFU_EXTERNAL),
discountKungfuFactory(10, KUNGFU_INTERNAL),
_defaultVirtues(),
],
value: 3,
},
{
description:
"River size, Joss, Chi replenishment and Chi Aura limit are 4. Lake size is 9. Maximum skill bonus is +20.",
name: "2nd Rank",
perks: [
bonusDestiny(100),
discountSkillFactory(20),
bonusChi(10, "general"),
discountKungfuFactory(10, KUNGFU_EXTERNAL),
discountKungfuFactory(10, KUNGFU_INTERNAL),
_defaultVirtues(),
],
value: 4,
},
{
description:
"River size, Joss, Chi replenishment and Chi Aura limit are 5. Lake size is 10. Maximum skill bonus is +25.",
name: "1st Rank",
perks: [
bonusDestiny(150),
discountSkillFactory(20),
bonusChi(10, "general"),
_defaultVirtues(),
],
value: 5,
},
];
export function validateRank(rank: number): void {
const foundRank = ranks.find(
(dataRank: IDataRank) => (dataRank.value as number) === rank,
);
if (!foundRank) {
throw new Error('Invalid rank "' + rank + '"');
}
}
export function getRank(rank: any) {
return ranks.find((dataRank: IDataRank) => dataRank.value === rank);
}