-
Notifications
You must be signed in to change notification settings - Fork 0
/
set.ts
125 lines (118 loc) · 2.74 KB
/
set.ts
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
import { Set } from "./types";
const evConvert = {
hp: "HP",
atk: "Atk",
def: "Def",
spa: "SpA",
spd: "SpD",
spe: "Spe",
};
export function evToString(set: any, isEv: boolean = true): string {
let evs = "";
const key = isEv ? "evs" : "ivs";
for (const ev in set[key]) {
// to skip __typename, since it is iterable for some reason...
if (ev in evConvert) {
evs +=
set[key]?.hasOwnProperty(ev) && set[key][ev] !== (isEv ? 0 : 31)
? `${set[key][ev]} ${evConvert[ev]} / `
: "";
}
}
evs = evs.trim();
evs = evs.endsWith("/") ? evs.slice(0, -1) : evs;
return evs;
}
// adapted from https://github.com/smogon/pokemon-showdown-client/blob/master/src/panel-teamdropdown.tsx
export function exportSet(set: any) {
let text = "";
// core
if (set.name && set.name !== set.species) {
text += `${set.name} (${set.species.name})`;
} else {
text += `${set.species.name}`;
}
if (set.gender === "M") text += ` (M)`;
if (set.gender === "F") text += ` (F)`;
if (set.item) {
text += ` @ ${set.item}`;
}
text += ` \n`;
if (set.ability) {
text += `Ability: ${set.ability} \n`;
}
// stats
let first = true;
if (set.evs) {
for (const stat in evConvert) {
if (!set.evs[stat]) continue;
if (first) {
text += `EVs: `;
first = false;
} else {
text += ` / `;
}
text += `${set.evs[stat]} ${evConvert[stat]}`;
}
}
if (!first) {
text += ` \n`;
}
if (set.nature) {
text += `${set.nature} Nature \n`;
}
first = true;
if (set.ivs) {
for (const stat in evConvert) {
if (
set.ivs[stat] === undefined ||
isNaN(set.ivs[stat]) ||
set.ivs[stat] === 31
)
continue;
if (first) {
text += `IVs: `;
first = false;
} else {
text += ` / `;
}
text += `${set.ivs[stat]} ${evConvert[stat]}`;
}
}
if (!first) {
text += ` \n`;
}
// details
if (set.level && set.level !== 100) {
text += `Level: ${set.level} \n`;
}
if (set.shiny) {
text += `Shiny: Yes \n`;
}
if (
typeof set.happiness === "number" &&
set.happiness !== 255 &&
!isNaN(set.happiness)
) {
text += `Happiness: ${set.happiness} \n`;
}
if (set.gigantamax) {
text += `Gigantamax: Yes \n`;
}
if (set.teraType) {
text += `Tera Type: ${set.teraType} \n`;
}
if (set.moves) {
for (let move of set.moves) {
if (move.substr(0, 13) === "Hidden Power ") {
const hpType = move.slice(13);
move = move.slice(0, 13);
move = `${move}[${hpType}]`; // TODO check that Hidden Power works as expected
}
if (move) {
text += `- ${move} \n`;
}
}
}
return text;
}