enefel 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.yarnrc.yml +5 -0
- package/dist/avatars.js +587 -0
- package/dist/avatarsDefault.js +136 -0
- package/dist/badge.js +60 -0
- package/dist/block.js +104 -0
- package/dist/calcul.js +11 -0
- package/dist/canUseSkills.js +46 -0
- package/dist/card.js +20 -0
- package/dist/career.js +1935 -0
- package/dist/color.js +112 -0
- package/dist/date.js +62 -0
- package/dist/dice.js +13 -0
- package/dist/elo.js +30 -0
- package/dist/game.js +64 -0
- package/dist/iconMap.js +261 -0
- package/dist/improvement.js +103 -0
- package/dist/inducement.js +59 -0
- package/dist/item.js +45 -0
- package/dist/jest.config.js +11 -0
- package/dist/league.js +250 -0
- package/dist/meteo.js +234 -0
- package/dist/moral.js +38 -0
- package/dist/move.js +70 -0
- package/dist/package-lock.json +6658 -0
- package/dist/package.json +43 -0
- package/dist/pitch.js +113 -0
- package/dist/player.js +244 -0
- package/dist/position.js +23 -0
- package/dist/race.js +355 -0
- package/dist/random.js +35 -0
- package/dist/right.js +62 -0
- package/dist/skill.js +421 -0
- package/dist/skillCoach.js +51 -0
- package/dist/stadium.js +320 -0
- package/dist/state.js +91 -0
- package/dist/status.js +52 -0
- package/dist/store.js +104 -0
- package/dist/time.js +80 -0
- package/dist/tsconfig.json +25 -0
- package/dist/types/models.js +2 -0
- package/dist/validator.js +96 -0
- package/dist/version.js +4 -0
- package/package.json +2 -2
- package/.npmrc +0 -1
- package/package-lock.json +0 -6658
package/dist/race.js
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.isPrivateRace = exports.hasUnlockRace = exports.hasUnlockCareer = exports.GROUP_NAME = exports.getRaceGroup = exports.getRaceFromPlayer = exports.getRaceFromCareer = exports.getRaceCompatibility = exports.getPlayersByState = exports.getPlayerGroup = exports.getPlayerCompatibility = exports.getPlayerAvatarPath = exports.getPlayerAvatarDefault = exports.getPlayerAvatar = exports.getCareersByRace = exports.getCareerKeyFromPlayer = exports.getCareerFromPlayer = exports.getCareerFromKey = exports.getCareerFromIcon = exports.getAvatarTypeFromPlayer = exports.GAIN_CAREER_POINT_FRIENDLY = exports.GAIN_CAREER_POINT = exports.COMPATIBILITY = exports.ANIMOSITY_NUMBER = void 0;
|
|
7
|
+
exports.getCareerRanges = getCareerRanges;
|
|
8
|
+
exports.getPlayersAvailableForPromo = getPlayersAvailableForPromo;
|
|
9
|
+
exports.getPriceCareer = getPriceCareer;
|
|
10
|
+
exports.getPromoCareer = getPromoCareer;
|
|
11
|
+
exports.getTeamGroups = getTeamGroups;
|
|
12
|
+
exports.getTeamIncompatibleGroups = getTeamIncompatibleGroups;
|
|
13
|
+
exports.isNeutralGroup = isNeutralGroup;
|
|
14
|
+
exports.isPlayerNeutralGroup = isPlayerNeutralGroup;
|
|
15
|
+
const seedrandom_1 = __importDefault(require("seedrandom"));
|
|
16
|
+
const avatars_1 = require("./avatars");
|
|
17
|
+
const avatarsDefault_1 = require("./avatarsDefault");
|
|
18
|
+
const badge_1 = require("./badge");
|
|
19
|
+
const career_1 = require("./career");
|
|
20
|
+
const random_1 = require("./random");
|
|
21
|
+
const state_1 = require("./state");
|
|
22
|
+
const ANIMOSITY_NUMBER = 2;
|
|
23
|
+
exports.ANIMOSITY_NUMBER = ANIMOSITY_NUMBER;
|
|
24
|
+
const isPrivateRace = (race) => {
|
|
25
|
+
return [
|
|
26
|
+
career_1.RACE.UNDEAD,
|
|
27
|
+
career_1.RACE.VAMPIRE,
|
|
28
|
+
career_1.RACE.ELVEN_UNION,
|
|
29
|
+
career_1.RACE.GOBELIN,
|
|
30
|
+
career_1.RACE.IMPERIAL,
|
|
31
|
+
career_1.RACE.KHORNE,
|
|
32
|
+
career_1.RACE.NECROMANTIC,
|
|
33
|
+
career_1.RACE.NURGLE,
|
|
34
|
+
career_1.RACE.SNOTLING,
|
|
35
|
+
career_1.RACE.SLANN,
|
|
36
|
+
].includes(race);
|
|
37
|
+
};
|
|
38
|
+
exports.isPrivateRace = isPrivateRace;
|
|
39
|
+
const hasUnlockRace = (user, race) => {
|
|
40
|
+
if (!user.badges) {
|
|
41
|
+
throw Error("no badges for player");
|
|
42
|
+
}
|
|
43
|
+
if (!isPrivateRace(race)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (race === career_1.RACE.UNDEAD) {
|
|
47
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.DEAD, user)) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (race === career_1.RACE.KHORNE) {
|
|
52
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.BLOODTHIRSTY, user)) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (race === career_1.RACE.VAMPIRE) {
|
|
57
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.VAMPIRE, user)) {
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (race === career_1.RACE.ELVEN_UNION) {
|
|
62
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.ELVEN_UNION, user)) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (race === career_1.RACE.SNOTLING) {
|
|
67
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.SNOTLING, user)) {
|
|
68
|
+
return true;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (race === career_1.RACE.IMPERIAL) {
|
|
72
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.IMPERIAL, user)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (race === career_1.RACE.NECROMANTIC) {
|
|
77
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.DEAD_FULL_MOON, user)) {
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (race === career_1.RACE.GOBELIN) {
|
|
82
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.WEAPON, user)) {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (race === career_1.RACE.NURGLE) {
|
|
87
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.NURGLE, user)) {
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (race === career_1.RACE.SLANN) {
|
|
92
|
+
if ((0, badge_1.hasBadge)(badge_1.BADGE_NAMES.SLANN, user)) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return false;
|
|
97
|
+
};
|
|
98
|
+
exports.hasUnlockRace = hasUnlockRace;
|
|
99
|
+
const hasUnlockCareer = (user, careerId) => {
|
|
100
|
+
if (!user.badges) {
|
|
101
|
+
throw Error("no badges for player");
|
|
102
|
+
}
|
|
103
|
+
const race = getRaceFromCareer(careerId);
|
|
104
|
+
return hasUnlockRace(user, race);
|
|
105
|
+
};
|
|
106
|
+
exports.hasUnlockCareer = hasUnlockCareer;
|
|
107
|
+
const getCareerFromKey = (key) => {
|
|
108
|
+
const careers = (0, career_1.getCareers)();
|
|
109
|
+
return careers[key];
|
|
110
|
+
};
|
|
111
|
+
exports.getCareerFromKey = getCareerFromKey;
|
|
112
|
+
const getCareerKeyFromPlayer = (player) => {
|
|
113
|
+
// Attention la career est le race_id dans la table player
|
|
114
|
+
return player.race_id;
|
|
115
|
+
};
|
|
116
|
+
exports.getCareerKeyFromPlayer = getCareerKeyFromPlayer;
|
|
117
|
+
const getCareerFromPlayer = (player) => {
|
|
118
|
+
const careerKey = getCareerKeyFromPlayer(player);
|
|
119
|
+
return getCareerFromKey(careerKey);
|
|
120
|
+
};
|
|
121
|
+
exports.getCareerFromPlayer = getCareerFromPlayer;
|
|
122
|
+
const getCareerFromIcon = (nameIcon) => {
|
|
123
|
+
for (const [key, values] of Object.entries((0, career_1.getCareers)())) {
|
|
124
|
+
if (values.icons.includes(nameIcon)) {
|
|
125
|
+
return getCareerFromKey(key);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
};
|
|
130
|
+
exports.getCareerFromIcon = getCareerFromIcon;
|
|
131
|
+
const getPlayerAvatarDefault = (player) => {
|
|
132
|
+
const avatars = avatarsDefault_1.AVATAR_DEFAULT_LIST;
|
|
133
|
+
const career = getCareerFromPlayer(player);
|
|
134
|
+
const listAvailable = [];
|
|
135
|
+
for (const avatar of career.avatars) {
|
|
136
|
+
// Temporary. Before theiy can choose their default avatar
|
|
137
|
+
if ((career.badge === career_1.RACE.HUMAN ||
|
|
138
|
+
career.badge === career_1.RACE.IMPERIAL ||
|
|
139
|
+
career.badge === career_1.RACE.NORSE) &&
|
|
140
|
+
avatar === career_1.AVATAR.HUMAN_WOMAN) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
if (avatars[avatar]) {
|
|
144
|
+
avatars[avatar].forEach((item) => {
|
|
145
|
+
listAvailable.push(item);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (listAvailable.length === 0) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const random = (0, seedrandom_1.default)(player.id);
|
|
153
|
+
return listAvailable[(0, random_1.getRandomNumber)(0, listAvailable.length - 1, random)]
|
|
154
|
+
.file;
|
|
155
|
+
};
|
|
156
|
+
exports.getPlayerAvatarDefault = getPlayerAvatarDefault;
|
|
157
|
+
const getPlayerAvatar = (player) => {
|
|
158
|
+
const av = player.avatar || player.avatarDefault;
|
|
159
|
+
if (!av) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
return av.replace(".png", ".jpeg");
|
|
163
|
+
};
|
|
164
|
+
exports.getPlayerAvatar = getPlayerAvatar;
|
|
165
|
+
const getPlayerAvatarPath = (player) => {
|
|
166
|
+
if (player.avatar) {
|
|
167
|
+
return "tile/shop/avatar";
|
|
168
|
+
}
|
|
169
|
+
else if (player.avatarDefault) {
|
|
170
|
+
return "tile/shop/avatar-default";
|
|
171
|
+
}
|
|
172
|
+
return null;
|
|
173
|
+
};
|
|
174
|
+
exports.getPlayerAvatarPath = getPlayerAvatarPath;
|
|
175
|
+
const getRaceFromCareer = (careerId) => {
|
|
176
|
+
const career = getCareerFromKey(careerId);
|
|
177
|
+
return career.badge;
|
|
178
|
+
};
|
|
179
|
+
exports.getRaceFromCareer = getRaceFromCareer;
|
|
180
|
+
const getAvatarTypeFromPlayer = (player, avatarFile) => {
|
|
181
|
+
const career = getCareerFromPlayer(player);
|
|
182
|
+
if (avatarFile) {
|
|
183
|
+
for (const avatarType of career.avatars) {
|
|
184
|
+
const avatars = avatars_1.AVATAR_LIST[avatarType];
|
|
185
|
+
if (avatars) {
|
|
186
|
+
const findAvatar = avatars.find((al) => al.file === avatarFile);
|
|
187
|
+
if (findAvatar) {
|
|
188
|
+
return avatarType;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
const avatarsDefault = avatarsDefault_1.AVATAR_DEFAULT_LIST[avatarType];
|
|
192
|
+
if (avatarsDefault) {
|
|
193
|
+
const findAvatarDefault = avatarsDefault.find((al) => al.file === avatarFile);
|
|
194
|
+
if (findAvatarDefault) {
|
|
195
|
+
return avatarType;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
};
|
|
202
|
+
exports.getAvatarTypeFromPlayer = getAvatarTypeFromPlayer;
|
|
203
|
+
const getRaceFromPlayer = (player) => {
|
|
204
|
+
return getRaceFromCareer(getCareerKeyFromPlayer(player));
|
|
205
|
+
};
|
|
206
|
+
exports.getRaceFromPlayer = getRaceFromPlayer;
|
|
207
|
+
const getCareersByRace = () => {
|
|
208
|
+
const carrers = {};
|
|
209
|
+
for (const [name, values] of Object.entries((0, career_1.getCareers)())) {
|
|
210
|
+
const badge = values.badge;
|
|
211
|
+
if (!carrers[badge]) {
|
|
212
|
+
carrers[badge] = [];
|
|
213
|
+
}
|
|
214
|
+
if (!carrers[badge][values.range]) {
|
|
215
|
+
carrers[badge][values.range] = {};
|
|
216
|
+
}
|
|
217
|
+
carrers[badge][values.range][name] = values;
|
|
218
|
+
}
|
|
219
|
+
return carrers;
|
|
220
|
+
};
|
|
221
|
+
exports.getCareersByRace = getCareersByRace;
|
|
222
|
+
const GAIN_CAREER_POINT = 2;
|
|
223
|
+
exports.GAIN_CAREER_POINT = GAIN_CAREER_POINT;
|
|
224
|
+
const GAIN_CAREER_POINT_FRIENDLY = 2;
|
|
225
|
+
exports.GAIN_CAREER_POINT_FRIENDLY = GAIN_CAREER_POINT_FRIENDLY;
|
|
226
|
+
var GROUP_NAME;
|
|
227
|
+
(function (GROUP_NAME) {
|
|
228
|
+
GROUP_NAME["AGILE"] = "group-agile";
|
|
229
|
+
GROUP_NAME["CHAOTIC"] = "group-chaotic";
|
|
230
|
+
GROUP_NAME["EXOTIC"] = "group-exotic";
|
|
231
|
+
GROUP_NAME["NEUTRAL"] = "group-neutral";
|
|
232
|
+
GROUP_NAME["VICIOUS"] = "group-vicious";
|
|
233
|
+
})(GROUP_NAME || (exports.GROUP_NAME = GROUP_NAME = {}));
|
|
234
|
+
const COMPATIBILITY = {
|
|
235
|
+
[GROUP_NAME.AGILE]: [career_1.RACE.AMAZON, career_1.RACE.SILVAN, career_1.RACE.ELVEN_UNION, career_1.RACE.SLANN],
|
|
236
|
+
[GROUP_NAME.CHAOTIC]: [
|
|
237
|
+
career_1.RACE.ORC,
|
|
238
|
+
career_1.RACE.CHAOS_DWARF,
|
|
239
|
+
career_1.RACE.CHAOS,
|
|
240
|
+
career_1.RACE.GOBELIN,
|
|
241
|
+
career_1.RACE.KHORNE,
|
|
242
|
+
career_1.RACE.NURGLE,
|
|
243
|
+
],
|
|
244
|
+
[GROUP_NAME.EXOTIC]: [career_1.RACE.DWARF, career_1.RACE.NORSE, career_1.RACE.LIZARDMEN, career_1.RACE.UNDEAD],
|
|
245
|
+
[GROUP_NAME.NEUTRAL]: [career_1.RACE.HALFLING, career_1.RACE.HUMAN, career_1.RACE.IMPERIAL],
|
|
246
|
+
[GROUP_NAME.VICIOUS]: [
|
|
247
|
+
career_1.RACE.DARK_ELFE,
|
|
248
|
+
career_1.RACE.RAT,
|
|
249
|
+
career_1.RACE.SNOTLING,
|
|
250
|
+
career_1.RACE.NECROMANTIC,
|
|
251
|
+
career_1.RACE.VAMPIRE,
|
|
252
|
+
],
|
|
253
|
+
};
|
|
254
|
+
exports.COMPATIBILITY = COMPATIBILITY;
|
|
255
|
+
const getPlayerGroup = (player) => {
|
|
256
|
+
return getRaceGroup(getRaceFromPlayer(player));
|
|
257
|
+
};
|
|
258
|
+
exports.getPlayerGroup = getPlayerGroup;
|
|
259
|
+
const getRaceGroup = (race) => {
|
|
260
|
+
for (const group of Object.keys(COMPATIBILITY)) {
|
|
261
|
+
if (COMPATIBILITY[group].includes(race)) {
|
|
262
|
+
return group;
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return undefined;
|
|
266
|
+
};
|
|
267
|
+
exports.getRaceGroup = getRaceGroup;
|
|
268
|
+
const getRaceCompatibility = (race1, race2) => {
|
|
269
|
+
const group1 = getRaceGroup(race1);
|
|
270
|
+
const group2 = getRaceGroup(race2);
|
|
271
|
+
if (group1 === group2 ||
|
|
272
|
+
group1 === GROUP_NAME.NEUTRAL ||
|
|
273
|
+
group2 === GROUP_NAME.NEUTRAL) {
|
|
274
|
+
return true;
|
|
275
|
+
}
|
|
276
|
+
return false;
|
|
277
|
+
};
|
|
278
|
+
exports.getRaceCompatibility = getRaceCompatibility;
|
|
279
|
+
const getPlayerCompatibility = (player1, player2) => {
|
|
280
|
+
const race1 = getRaceFromPlayer(player1);
|
|
281
|
+
const race2 = getRaceFromPlayer(player2);
|
|
282
|
+
getRaceCompatibility(race1, race2);
|
|
283
|
+
};
|
|
284
|
+
exports.getPlayerCompatibility = getPlayerCompatibility;
|
|
285
|
+
const ranges = [16, 32, 48, 64, 80, 96];
|
|
286
|
+
function getCareerRanges() {
|
|
287
|
+
return [0, ...ranges];
|
|
288
|
+
}
|
|
289
|
+
const NB_MAX_PLAYERS = 2;
|
|
290
|
+
function getPlayersAvailableForPromo(players = []) {
|
|
291
|
+
const playersByState = getPlayersByState(players);
|
|
292
|
+
return [...playersByState.actives, ...playersByState.lastRetired].slice(0, NB_MAX_PLAYERS);
|
|
293
|
+
}
|
|
294
|
+
function getPromoCareer(careerId, userPlayers) {
|
|
295
|
+
const race = getRaceFromCareer(careerId);
|
|
296
|
+
let promo = userPlayers
|
|
297
|
+
.filter((p, i) => p && i < NB_MAX_PLAYERS && getRaceFromPlayer(p) === race)
|
|
298
|
+
.reduce((p, c) => c.pc + p, 0);
|
|
299
|
+
const price = getPriceCareer(careerId);
|
|
300
|
+
if (promo > price / 2) {
|
|
301
|
+
promo = price / 2;
|
|
302
|
+
}
|
|
303
|
+
return promo;
|
|
304
|
+
}
|
|
305
|
+
function getPriceCareer(careerId) {
|
|
306
|
+
return getCareerRanges()[getCareerFromKey(careerId).range];
|
|
307
|
+
}
|
|
308
|
+
function getTeamGroups(team) {
|
|
309
|
+
const groups = {};
|
|
310
|
+
for (const player of team.players) {
|
|
311
|
+
const group = getPlayerGroup(player);
|
|
312
|
+
if (!group) {
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
if (!groups[group]) {
|
|
316
|
+
groups[group] = [];
|
|
317
|
+
}
|
|
318
|
+
groups[group].push(player);
|
|
319
|
+
}
|
|
320
|
+
return groups;
|
|
321
|
+
}
|
|
322
|
+
function isPlayerNeutralGroup(player) {
|
|
323
|
+
const group = getPlayerGroup(player);
|
|
324
|
+
const neutrals = [GROUP_NAME.NEUTRAL];
|
|
325
|
+
return neutrals.includes(group);
|
|
326
|
+
}
|
|
327
|
+
function isNeutralGroup(group) {
|
|
328
|
+
const neutrals = [GROUP_NAME.NEUTRAL];
|
|
329
|
+
return neutrals.includes(group);
|
|
330
|
+
}
|
|
331
|
+
function getTeamIncompatibleGroups(team) {
|
|
332
|
+
const groups = getTeamGroups(team);
|
|
333
|
+
// return array of [name, players]: [['group-vicious', Array(8)], ...]
|
|
334
|
+
return Object.entries(groups).filter((group) => !isNeutralGroup(group[0]));
|
|
335
|
+
}
|
|
336
|
+
const getPlayersByState = (players) => {
|
|
337
|
+
const playerActives = [];
|
|
338
|
+
const playerInactives = [];
|
|
339
|
+
for (const p of players) {
|
|
340
|
+
if ((0, state_1.canBeSelectedByUser)(p.state)) {
|
|
341
|
+
playerActives.push(p);
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
playerInactives.push(p);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return {
|
|
348
|
+
actives: playerActives,
|
|
349
|
+
inactives: playerInactives,
|
|
350
|
+
// Check if works (.toString())
|
|
351
|
+
lastRetired: playerInactives.sort((a, b) => Date.parse(b.connectedAt.toString()) -
|
|
352
|
+
Date.parse(a.connectedAt.toString())),
|
|
353
|
+
};
|
|
354
|
+
};
|
|
355
|
+
exports.getPlayersByState = getPlayersByState;
|
package/dist/random.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.d3 = d3;
|
|
4
|
+
exports.d6 = d6;
|
|
5
|
+
exports.d8 = d8;
|
|
6
|
+
exports.getRandomItem = getRandomItem;
|
|
7
|
+
exports.getRandomNumber = getRandomNumber;
|
|
8
|
+
exports.shuffleArray = shuffleArray;
|
|
9
|
+
const rollDice = (quantity, max) => {
|
|
10
|
+
let total = 0;
|
|
11
|
+
for (let i = 0; i < quantity; ++i) {
|
|
12
|
+
total += getRandomNumber.call(this, 1, max);
|
|
13
|
+
}
|
|
14
|
+
return total;
|
|
15
|
+
};
|
|
16
|
+
function shuffleArray(array) {
|
|
17
|
+
return [...array].sort(() => 0.5 - Math.random());
|
|
18
|
+
}
|
|
19
|
+
function getRandomItem(arr) {
|
|
20
|
+
const randomIndex = Math.floor(Math.random() * arr.length);
|
|
21
|
+
const item = arr[randomIndex];
|
|
22
|
+
return item;
|
|
23
|
+
}
|
|
24
|
+
function getRandomNumber(min, max, r = Math.random) {
|
|
25
|
+
return Math.floor(r() * (max - min + 1)) + min;
|
|
26
|
+
}
|
|
27
|
+
function d8(quantity = 1, max = 8) {
|
|
28
|
+
return rollDice(quantity, max);
|
|
29
|
+
}
|
|
30
|
+
function d6(quantity = 1, max = 6) {
|
|
31
|
+
return rollDice(quantity, max);
|
|
32
|
+
}
|
|
33
|
+
function d3(quantity = 1, max = 3) {
|
|
34
|
+
return rollDice(quantity, max);
|
|
35
|
+
}
|
package/dist/right.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.canCancelGame = canCancelGame;
|
|
4
|
+
exports.canChangeCoach = canChangeCoach;
|
|
5
|
+
exports.canCreateTeam = canCreateTeam;
|
|
6
|
+
exports.canJoinTeam = canJoinTeam;
|
|
7
|
+
exports.canPayPlayer = canPayPlayer;
|
|
8
|
+
exports.canQuitTeam = canQuitTeam;
|
|
9
|
+
exports.canRemovePlayer = canRemovePlayer;
|
|
10
|
+
exports.canRetirement = canRetirement;
|
|
11
|
+
const game_1 = require("./game");
|
|
12
|
+
const index_1 = require("./index");
|
|
13
|
+
const player_1 = require("./player");
|
|
14
|
+
const skill_1 = require("./skill");
|
|
15
|
+
const state_1 = require("./state");
|
|
16
|
+
function canJoinTeam(player, team) {
|
|
17
|
+
if ((0, skill_1.getSkillLimitSizeTeam)(player, team.players) !== null) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return (team &&
|
|
21
|
+
(0, state_1.isTeamActive)(team.state) &&
|
|
22
|
+
team.players.length < index_1.MAX_PLAYER_TEAM &&
|
|
23
|
+
player &&
|
|
24
|
+
!player.isCoach &&
|
|
25
|
+
!(0, player_1.isPlaying)(player) &&
|
|
26
|
+
(!player.teamId || team.id !== player.teamId) &&
|
|
27
|
+
(0, state_1.canJoinTeamWithState)(player.state));
|
|
28
|
+
}
|
|
29
|
+
function canCreateTeam(player) {
|
|
30
|
+
return player && !player.teamId && (0, state_1.canJoinTeamWithState)(player.state);
|
|
31
|
+
}
|
|
32
|
+
function canQuitTeam(player) {
|
|
33
|
+
return player && player.teamId && !(0, player_1.isPlaying)(player);
|
|
34
|
+
}
|
|
35
|
+
function canRemovePlayer(player, coach) {
|
|
36
|
+
return (coach.isCoach &&
|
|
37
|
+
player.id !== coach.id &&
|
|
38
|
+
player.teamId &&
|
|
39
|
+
player.teamId === coach.teamId &&
|
|
40
|
+
!(0, player_1.isPlaying)(player));
|
|
41
|
+
}
|
|
42
|
+
function canPayPlayer(player, coach, team) {
|
|
43
|
+
return (coach.isCoach &&
|
|
44
|
+
player.teamId &&
|
|
45
|
+
player.teamId === coach.teamId &&
|
|
46
|
+
!(0, player_1.isPlaying)(player) &&
|
|
47
|
+
team.po > 0 &&
|
|
48
|
+
player.moral < 100);
|
|
49
|
+
}
|
|
50
|
+
function canChangeCoach(player, coach) {
|
|
51
|
+
return (player && coach && player.id !== coach.id && player.teamId === coach.teamId);
|
|
52
|
+
}
|
|
53
|
+
function canCancelGame(game, player) {
|
|
54
|
+
return (game &&
|
|
55
|
+
player &&
|
|
56
|
+
game.status === game_1.GAME_STATUS.WAITING &&
|
|
57
|
+
player.isCoach &&
|
|
58
|
+
game.team1.id === player.teamId);
|
|
59
|
+
}
|
|
60
|
+
function canRetirement(player) {
|
|
61
|
+
return player && !player.teamId && (0, state_1.isActive)(player.state);
|
|
62
|
+
}
|