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/dist/skill.js ADDED
@@ -0,0 +1,421 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SKILLS = exports.SKILL_TYPE = exports.SKILL_NAMES = exports.SKILL_INFO_INACTIVE = exports.SKILL_INFO_ACTIVE = exports.SKILL_DURATION = exports.isSpecialSkill = exports.isSelectPlayersSkills = exports.isActivableSkills = exports.helpSkillsToDisplay = exports.hasToAgilityJumpUp = exports.hasSkillForPlayer = exports.hasSkillDisplayableInfo = exports.getPlayersWithSkill = exports.BIG_GUY_LIMIT = void 0;
4
+ exports.getDisturbingPresenceMalus = getDisturbingPresenceMalus;
5
+ exports.getNoTurnoverSkill = getNoTurnoverSkill;
6
+ exports.getSkill = getSkill;
7
+ exports.getSkillDisplayedWithCarrer = getSkillDisplayedWithCarrer;
8
+ exports.getSkillLimitSizeTeam = getSkillLimitSizeTeam;
9
+ exports.getSpecialistLimit = getSpecialistLimit;
10
+ exports.getStarLimit = getStarLimit;
11
+ exports.hasSkill = hasSkill;
12
+ exports.hasUsedSkill = hasUsedSkill;
13
+ exports.isNoTurnoverSkill = isNoTurnoverSkill;
14
+ exports.useSkill = useSkill;
15
+ const calcul_1 = require("./calcul");
16
+ const status_1 = require("./status");
17
+ const time_1 = require("./time");
18
+ const BIG_GUY_LIMIT = 1;
19
+ exports.BIG_GUY_LIMIT = BIG_GUY_LIMIT;
20
+ const STAR_LIMIT = 4;
21
+ const SPECIALIST_LIMIT = 6;
22
+ const SKILL_INFO_ACTIVE = "active";
23
+ exports.SKILL_INFO_ACTIVE = SKILL_INFO_ACTIVE;
24
+ const SKILL_INFO_INACTIVE = "inactive";
25
+ exports.SKILL_INFO_INACTIVE = SKILL_INFO_INACTIVE;
26
+ const SKILL_DURATION = {
27
+ HALF_TIME: 1,
28
+ NEXT_SETUP: 2,
29
+ END_GAME: 3,
30
+ WEAPON: 4,
31
+ };
32
+ exports.SKILL_DURATION = SKILL_DURATION;
33
+ // TODO
34
+ // Timmm-ber!
35
+ // SKILL_NAMES.SIDE_STEP, // +1push et +1mouv?
36
+ // Swarming // il en faut autant sur le terrain
37
+ // Missing for races
38
+ var SKILL_NAMES;
39
+ (function (SKILL_NAMES) {
40
+ // SIDE_STEP: "side-step",
41
+ SKILL_NAMES["ACCURATE"] = "accurate";
42
+ SKILL_NAMES["ALWAYS_HUNGRY"] = "always-hungry";
43
+ SKILL_NAMES["ANIMAL_SAVAGERY"] = "animal-salvagery";
44
+ SKILL_NAMES["ANIMOSITY"] = "animosity";
45
+ SKILL_NAMES["BIG_GUY"] = "big-guy";
46
+ SKILL_NAMES["BIG_HAND"] = "big-hand";
47
+ SKILL_NAMES["BLOCK"] = "block";
48
+ SKILL_NAMES["BONE_HEAD"] = "bone-head";
49
+ SKILL_NAMES["BRAWLER"] = "brawler";
50
+ SKILL_NAMES["BREAK_TACKLE"] = "break-tackle";
51
+ SKILL_NAMES["CANNONEER"] = "cannoneer";
52
+ SKILL_NAMES["CATCH"] = "catch";
53
+ SKILL_NAMES["CHAINSAW"] = "chainsaw";
54
+ SKILL_NAMES["CLAW"] = "claw";
55
+ SKILL_NAMES["CLOUD_BURSTER"] = "cloud-burster";
56
+ SKILL_NAMES["DAUNTLESS"] = "dauntless";
57
+ SKILL_NAMES["DECAY"] = "decay";
58
+ SKILL_NAMES["DEFENSIVE"] = "defensive";
59
+ SKILL_NAMES["DIRTY_PLAYER"] = "dirty-player";
60
+ SKILL_NAMES["DISTURBING_PRESENCE"] = "distrubing-presence";
61
+ SKILL_NAMES["DIVING_TACKLE"] = "diving-tackle";
62
+ SKILL_NAMES["DODGE"] = "dodge";
63
+ SKILL_NAMES["DRUNKARD"] = "drunkard";
64
+ SKILL_NAMES["DUMP_OFF"] = "dump-off";
65
+ SKILL_NAMES["EXTRA_ARMS"] = "extra-arms";
66
+ SKILL_NAMES["FEND"] = "fend";
67
+ SKILL_NAMES["FOUL_APPEARANCE"] = "foul-appearance";
68
+ SKILL_NAMES["FRENZY"] = "frenzy";
69
+ SKILL_NAMES["FUMBLEROOSKIE"] = "fumblerooskie";
70
+ SKILL_NAMES["GUARD"] = "guard";
71
+ SKILL_NAMES["HORNS"] = "horns";
72
+ SKILL_NAMES["HYPNOTIC_GAZE"] = "hypnotic-gaze";
73
+ SKILL_NAMES["IRON_HARD_SKIN"] = "iron-hard-skin";
74
+ SKILL_NAMES["JUGGERNAUT"] = "juggernaut";
75
+ SKILL_NAMES["JUMP_UP"] = "jump-up";
76
+ SKILL_NAMES["LEAP"] = "leap";
77
+ SKILL_NAMES["LONER"] = "loner";
78
+ SKILL_NAMES["MIGHTY_BLOW"] = "mighty-blow";
79
+ SKILL_NAMES["MONSTROUS_MOUTH"] = "monstrous-mouth";
80
+ SKILL_NAMES["NERVES_OF_STEEL"] = "nerves-of-steel";
81
+ SKILL_NAMES["NO_HANDS"] = "no-hand";
82
+ SKILL_NAMES["ON_THE_BALL"] = "on-the-ball";
83
+ SKILL_NAMES["PASS"] = "pass";
84
+ SKILL_NAMES["PILE_DRIVER"] = "pile-driver";
85
+ SKILL_NAMES["PLAGUE_RIDDEN"] = "plague-ridden";
86
+ SKILL_NAMES["POGO_STICK"] = "pogo-stick";
87
+ SKILL_NAMES["PREHENSILE_TAIL"] = "prehensile-tail";
88
+ SKILL_NAMES["PROJECTILE_VOMIT"] = "projectile-vomit";
89
+ SKILL_NAMES["REALLY_STUPID"] = "really-stupid";
90
+ SKILL_NAMES["REGENERATION"] = "regeneration";
91
+ SKILL_NAMES["RIGHT_STUFF"] = "right-stuff";
92
+ SKILL_NAMES["RUNNING_PASS"] = "running-pass";
93
+ SKILL_NAMES["SAFE_PASS"] = "safe-pass";
94
+ SKILL_NAMES["SECRET_WEAPON"] = "secret-weapon";
95
+ SKILL_NAMES["SHADOWING"] = "shadowing";
96
+ SKILL_NAMES["SNEAKY_GIT"] = "sneaky-git";
97
+ SKILL_NAMES["SPECIALIST"] = "specialist";
98
+ SKILL_NAMES["SPRINT"] = "sprint";
99
+ SKILL_NAMES["STAND_FIRM"] = "stand-firm";
100
+ SKILL_NAMES["STAR"] = "star";
101
+ SKILL_NAMES["STRIP_BALL"] = "strip-ball";
102
+ SKILL_NAMES["STRONG_ARM"] = "strong-arm";
103
+ SKILL_NAMES["STUNTY"] = "stunty";
104
+ SKILL_NAMES["SURE_FEET"] = "sure-feet";
105
+ SKILL_NAMES["SURE_HANDS"] = "sure-hands";
106
+ SKILL_NAMES["TACKLE"] = "tackle";
107
+ SKILL_NAMES["TAKE_ROOT"] = "take-root";
108
+ SKILL_NAMES["TENTACLES"] = "tentacles";
109
+ SKILL_NAMES["THICK_SKULL"] = "thick-skull";
110
+ SKILL_NAMES["THROW_TEAM_MATE"] = "throw-team-mate";
111
+ SKILL_NAMES["TITCHY"] = "titchy";
112
+ SKILL_NAMES["TWO_HEADS"] = "two-heads";
113
+ SKILL_NAMES["UNCHANNELLED_FURY"] = "unchannelled-fury";
114
+ SKILL_NAMES["VERY_LONG_LEGS"] = "very-long-legs";
115
+ SKILL_NAMES["WRESTLE"] = "wrestle";
116
+ SKILL_NAMES["DIVING_CATCH"] = "diving-catch";
117
+ })(SKILL_NAMES || (exports.SKILL_NAMES = SKILL_NAMES = {}));
118
+ var SKILL_TYPE;
119
+ (function (SKILL_TYPE) {
120
+ SKILL_TYPE["AGILITY"] = "A";
121
+ SKILL_TYPE["EXTRAORDINARY"] = "E";
122
+ SKILL_TYPE["GENERAL"] = "G";
123
+ SKILL_TYPE["MUTATION"] = "M";
124
+ SKILL_TYPE["PASSING"] = "P";
125
+ SKILL_TYPE["STRENGTH"] = "S";
126
+ SKILL_TYPE["SPECIAL"] = "SP";
127
+ })(SKILL_TYPE || (exports.SKILL_TYPE = SKILL_TYPE = {}));
128
+ // TODO: add text translation when add a skill
129
+ const SKILLS = {
130
+ [SKILL_NAMES.ACCURATE]: SKILL_TYPE.PASSING,
131
+ [SKILL_NAMES.ALWAYS_HUNGRY]: SKILL_TYPE.EXTRAORDINARY,
132
+ [SKILL_NAMES.ANIMAL_SAVAGERY]: SKILL_TYPE.EXTRAORDINARY,
133
+ [SKILL_NAMES.ANIMOSITY]: SKILL_TYPE.SPECIAL,
134
+ [SKILL_NAMES.BIG_GUY]: SKILL_TYPE.SPECIAL,
135
+ [SKILL_NAMES.BIG_HAND]: SKILL_TYPE.MUTATION,
136
+ [SKILL_NAMES.BLOCK]: SKILL_TYPE.GENERAL,
137
+ [SKILL_NAMES.BONE_HEAD]: SKILL_TYPE.EXTRAORDINARY,
138
+ [SKILL_NAMES.BRAWLER]: SKILL_TYPE.STRENGTH,
139
+ [SKILL_NAMES.BREAK_TACKLE]: SKILL_TYPE.STRENGTH,
140
+ [SKILL_NAMES.CANNONEER]: SKILL_TYPE.PASSING,
141
+ [SKILL_NAMES.CATCH]: SKILL_TYPE.AGILITY,
142
+ [SKILL_NAMES.CHAINSAW]: SKILL_TYPE.EXTRAORDINARY,
143
+ [SKILL_NAMES.CLAW]: SKILL_TYPE.MUTATION,
144
+ [SKILL_NAMES.CLOUD_BURSTER]: SKILL_TYPE.PASSING,
145
+ [SKILL_NAMES.DAUNTLESS]: SKILL_TYPE.GENERAL,
146
+ [SKILL_NAMES.DECAY]: SKILL_TYPE.EXTRAORDINARY,
147
+ [SKILL_NAMES.DEFENSIVE]: SKILL_TYPE.AGILITY,
148
+ [SKILL_NAMES.DIRTY_PLAYER]: SKILL_TYPE.GENERAL,
149
+ [SKILL_NAMES.DISTURBING_PRESENCE]: SKILL_TYPE.MUTATION,
150
+ [SKILL_NAMES.DIVING_TACKLE]: SKILL_TYPE.AGILITY,
151
+ [SKILL_NAMES.DODGE]: SKILL_TYPE.AGILITY,
152
+ [SKILL_NAMES.DRUNKARD]: SKILL_TYPE.EXTRAORDINARY,
153
+ [SKILL_NAMES.DUMP_OFF]: SKILL_TYPE.PASSING,
154
+ [SKILL_NAMES.EXTRA_ARMS]: SKILL_TYPE.MUTATION,
155
+ [SKILL_NAMES.FEND]: SKILL_TYPE.GENERAL,
156
+ [SKILL_NAMES.FOUL_APPEARANCE]: SKILL_TYPE.MUTATION,
157
+ [SKILL_NAMES.FRENZY]: SKILL_TYPE.GENERAL,
158
+ [SKILL_NAMES.FUMBLEROOSKIE]: SKILL_TYPE.PASSING,
159
+ [SKILL_NAMES.GUARD]: SKILL_TYPE.STRENGTH,
160
+ [SKILL_NAMES.HORNS]: SKILL_TYPE.MUTATION,
161
+ [SKILL_NAMES.HYPNOTIC_GAZE]: SKILL_TYPE.EXTRAORDINARY,
162
+ [SKILL_NAMES.IRON_HARD_SKIN]: SKILL_TYPE.MUTATION,
163
+ [SKILL_NAMES.JUGGERNAUT]: SKILL_TYPE.STRENGTH,
164
+ [SKILL_NAMES.JUMP_UP]: SKILL_TYPE.AGILITY,
165
+ [SKILL_NAMES.LEAP]: SKILL_TYPE.AGILITY,
166
+ [SKILL_NAMES.LONER]: SKILL_TYPE.EXTRAORDINARY,
167
+ [SKILL_NAMES.MIGHTY_BLOW]: SKILL_TYPE.STRENGTH,
168
+ [SKILL_NAMES.MONSTROUS_MOUTH]: SKILL_TYPE.MUTATION,
169
+ [SKILL_NAMES.NERVES_OF_STEEL]: SKILL_TYPE.PASSING,
170
+ [SKILL_NAMES.NO_HANDS]: SKILL_TYPE.EXTRAORDINARY,
171
+ [SKILL_NAMES.ON_THE_BALL]: SKILL_TYPE.PASSING,
172
+ [SKILL_NAMES.PASS]: SKILL_TYPE.PASSING,
173
+ [SKILL_NAMES.PILE_DRIVER]: SKILL_TYPE.STRENGTH,
174
+ [SKILL_NAMES.PLAGUE_RIDDEN]: SKILL_TYPE.EXTRAORDINARY,
175
+ [SKILL_NAMES.POGO_STICK]: SKILL_TYPE.EXTRAORDINARY,
176
+ [SKILL_NAMES.PREHENSILE_TAIL]: SKILL_TYPE.MUTATION,
177
+ [SKILL_NAMES.PROJECTILE_VOMIT]: SKILL_TYPE.EXTRAORDINARY,
178
+ [SKILL_NAMES.REALLY_STUPID]: SKILL_TYPE.EXTRAORDINARY,
179
+ [SKILL_NAMES.REGENERATION]: SKILL_TYPE.EXTRAORDINARY,
180
+ [SKILL_NAMES.RIGHT_STUFF]: SKILL_TYPE.EXTRAORDINARY,
181
+ [SKILL_NAMES.RUNNING_PASS]: SKILL_TYPE.PASSING,
182
+ [SKILL_NAMES.SAFE_PASS]: SKILL_TYPE.PASSING,
183
+ [SKILL_NAMES.SECRET_WEAPON]: SKILL_TYPE.EXTRAORDINARY,
184
+ [SKILL_NAMES.SHADOWING]: SKILL_TYPE.GENERAL,
185
+ [SKILL_NAMES.SNEAKY_GIT]: SKILL_TYPE.AGILITY,
186
+ [SKILL_NAMES.SPECIALIST]: SKILL_TYPE.SPECIAL,
187
+ [SKILL_NAMES.SPRINT]: SKILL_TYPE.AGILITY,
188
+ [SKILL_NAMES.STAND_FIRM]: SKILL_TYPE.STRENGTH,
189
+ [SKILL_NAMES.STAR]: SKILL_TYPE.SPECIAL,
190
+ [SKILL_NAMES.STRIP_BALL]: SKILL_TYPE.GENERAL,
191
+ [SKILL_NAMES.STRONG_ARM]: SKILL_TYPE.STRENGTH,
192
+ [SKILL_NAMES.STUNTY]: SKILL_TYPE.EXTRAORDINARY,
193
+ [SKILL_NAMES.SURE_FEET]: SKILL_TYPE.AGILITY,
194
+ [SKILL_NAMES.SURE_HANDS]: SKILL_TYPE.GENERAL,
195
+ [SKILL_NAMES.TACKLE]: SKILL_TYPE.GENERAL,
196
+ [SKILL_NAMES.TAKE_ROOT]: SKILL_TYPE.EXTRAORDINARY,
197
+ [SKILL_NAMES.TENTACLES]: SKILL_TYPE.MUTATION,
198
+ [SKILL_NAMES.THICK_SKULL]: SKILL_TYPE.STRENGTH,
199
+ [SKILL_NAMES.THROW_TEAM_MATE]: SKILL_TYPE.EXTRAORDINARY,
200
+ [SKILL_NAMES.TITCHY]: SKILL_TYPE.EXTRAORDINARY,
201
+ [SKILL_NAMES.TWO_HEADS]: SKILL_TYPE.MUTATION,
202
+ [SKILL_NAMES.UNCHANNELLED_FURY]: SKILL_TYPE.EXTRAORDINARY,
203
+ [SKILL_NAMES.VERY_LONG_LEGS]: SKILL_TYPE.MUTATION,
204
+ [SKILL_NAMES.WRESTLE]: SKILL_TYPE.GENERAL,
205
+ [SKILL_NAMES.DIVING_CATCH]: SKILL_TYPE.AGILITY,
206
+ // [SKILL_NAMES.SIDE_STEP]: SKILL_TYPE.AGILITY,
207
+ };
208
+ exports.SKILLS = SKILLS;
209
+ // Strip Ball: When a player with this skill pushes an opposing player during a Block, they will cause the opposing player to drop the ball in square they are pushed back to, even if the opposing player is not Knocked Down.
210
+ // Sure Hands: A player with Sure Hands is allowed to re-roll the result if they fail to pick up the ball. In addition, the Strip Ball skill does not work against a player with this skill.
211
+ function useSkill(player, skillId, date = -1, info = null) {
212
+ if (!SKILLS.hasOwnProperty(skillId)) {
213
+ throw `useSkill Skill '${skillId}' does not exist`;
214
+ }
215
+ const playerSkills = player.skills;
216
+ if (!playerSkills) {
217
+ return false;
218
+ }
219
+ const skill = playerSkills.find((s) => s.skill_id === skillId);
220
+ if (!skill) {
221
+ return false;
222
+ }
223
+ skill.date_next =
224
+ date === -1
225
+ ? new Date(Date.now() + (0, time_1.getTime)(time_1.TYPE_TIMER.ACTION) * 1000)
226
+ : date;
227
+ skill.info = info || "";
228
+ }
229
+ function getSkill(player, skillId, info = null) {
230
+ if (!SKILLS.hasOwnProperty(skillId)) {
231
+ throw `getSkill Skill '${skillId}' does not exist`;
232
+ }
233
+ const playerSkills = player.skills;
234
+ if (!playerSkills) {
235
+ return false;
236
+ }
237
+ const skill = playerSkills.find((s) => s.skill_id === skillId && (info ? s.info === info : true));
238
+ return !!skill ? skill : false;
239
+ }
240
+ function hasUsedSkill(player, skill) {
241
+ const hasSkill = getSkill(player, skill);
242
+ if (hasSkill === false) {
243
+ return false;
244
+ }
245
+ return hasSkill.date_next !== null ? true : false;
246
+ }
247
+ function hasSkill(player, skillId, withDate = false, checkActivated = true, info = null) {
248
+ const skill = getSkill(player, skillId, info);
249
+ const isActivated = (skill) => checkActivated && isActivableSkills(skillId)
250
+ ? skill.active == null || skill.active === SKILL_INFO_ACTIVE
251
+ ? true
252
+ : false
253
+ : true;
254
+ if (withDate) {
255
+ if (skill && skill.date_next) {
256
+ if (new Date(skill.date_next) < new Date(Date.now())) {
257
+ skill.date_next = null;
258
+ return isActivated(skill);
259
+ }
260
+ }
261
+ return skill && skill.date_next === null ? isActivated(skill) : false;
262
+ }
263
+ else {
264
+ return skill ? isActivated(skill) : false;
265
+ }
266
+ }
267
+ const getPlayersWithSkill = (players, skillId) => {
268
+ const list = [];
269
+ players.forEach((player) => {
270
+ if (hasSkill(player, skillId)) {
271
+ list.push(player);
272
+ }
273
+ });
274
+ return list;
275
+ };
276
+ exports.getPlayersWithSkill = getPlayersWithSkill;
277
+ const hasSkillDisplayableInfo = (skillId) => {
278
+ const activables = [
279
+ SKILL_NAMES.LONER,
280
+ SKILL_NAMES.ANIMOSITY,
281
+ SKILL_NAMES.CHAINSAW,
282
+ SKILL_NAMES.DIRTY_PLAYER,
283
+ SKILL_NAMES.MIGHTY_BLOW,
284
+ ];
285
+ return activables.includes(skillId);
286
+ };
287
+ exports.hasSkillDisplayableInfo = hasSkillDisplayableInfo;
288
+ const isActivableSkills = (skill) => {
289
+ const activables = [
290
+ SKILL_NAMES.BRAWLER,
291
+ SKILL_NAMES.DUMP_OFF,
292
+ SKILL_NAMES.JUGGERNAUT,
293
+ SKILL_NAMES.PILE_DRIVER,
294
+ SKILL_NAMES.TENTACLES,
295
+ SKILL_NAMES.WRESTLE,
296
+ SKILL_NAMES.SHADOWING,
297
+ ];
298
+ return activables.includes(skill);
299
+ };
300
+ exports.isActivableSkills = isActivableSkills;
301
+ const isSelectPlayersSkills = (skill) => {
302
+ const activables = [SKILL_NAMES.DIVING_TACKLE];
303
+ return activables.includes(skill);
304
+ };
305
+ exports.isSelectPlayersSkills = isSelectPlayersSkills;
306
+ const hasSkillForPlayer = (playerWithSkill, playerTarget, skillId) => {
307
+ if (hasSkill(playerWithSkill, skillId)) {
308
+ const skill = getSkill(playerWithSkill, skillId);
309
+ const data = skill ? skill?.data || "" : "";
310
+ if (skill && data.includes(playerTarget.id)) {
311
+ return true;
312
+ }
313
+ }
314
+ return false;
315
+ };
316
+ exports.hasSkillForPlayer = hasSkillForPlayer;
317
+ function getStarLimit(teamPlayers) {
318
+ const specialists = getPlayersWithSkill(teamPlayers, SKILL_NAMES.SPECIALIST).length;
319
+ const extra = specialists - SPECIALIST_LIMIT > 0 ? specialists - SPECIALIST_LIMIT : 0;
320
+ return STAR_LIMIT - extra;
321
+ }
322
+ function getSpecialistLimit(teamPlayers) {
323
+ const stars = getPlayersWithSkill(teamPlayers, SKILL_NAMES.STAR).length;
324
+ const extra = STAR_LIMIT - stars;
325
+ return SPECIALIST_LIMIT + extra;
326
+ }
327
+ function getSkillLimitSizeTeam(player, teamPlayers) {
328
+ let limitSkill = null;
329
+ let skillToCheck = null;
330
+ if (hasSkill(player, SKILL_NAMES.BIG_GUY)) {
331
+ skillToCheck = SKILL_NAMES.BIG_GUY;
332
+ limitSkill = BIG_GUY_LIMIT;
333
+ }
334
+ else if (hasSkill(player, SKILL_NAMES.STAR)) {
335
+ skillToCheck = SKILL_NAMES.STAR;
336
+ limitSkill = getStarLimit(teamPlayers);
337
+ }
338
+ else if (hasSkill(player, SKILL_NAMES.SPECIALIST)) {
339
+ skillToCheck = SKILL_NAMES.SPECIALIST;
340
+ limitSkill = getSpecialistLimit(teamPlayers);
341
+ }
342
+ if (skillToCheck) {
343
+ const nb = getPlayersWithSkill(teamPlayers, skillToCheck).length;
344
+ if (limitSkill && nb >= limitSkill) {
345
+ return skillToCheck;
346
+ }
347
+ }
348
+ return null;
349
+ }
350
+ function getSkillDisplayedWithCarrer() {
351
+ return [SKILL_NAMES.BIG_GUY, SKILL_NAMES.STAR, SKILL_NAMES.SPECIALIST];
352
+ }
353
+ function getNoTurnoverSkill() {
354
+ return [
355
+ SKILL_NAMES.DAUNTLESS,
356
+ SKILL_NAMES.BONE_HEAD,
357
+ SKILL_NAMES.REALLY_STUPID,
358
+ SKILL_NAMES.ANIMAL_SAVAGERY,
359
+ SKILL_NAMES.ANIMOSITY,
360
+ SKILL_NAMES.TAKE_ROOT,
361
+ SKILL_NAMES.UNCHANNELLED_FURY,
362
+ SKILL_NAMES.DUMP_OFF,
363
+ SKILL_NAMES.HYPNOTIC_GAZE,
364
+ SKILL_NAMES.FOUL_APPEARANCE,
365
+ SKILL_NAMES.JUMP_UP,
366
+ ];
367
+ }
368
+ function isNoTurnoverSkill(skill) {
369
+ const skillId = typeof skill === "object" && "skill_id" in skill ? skill.skill_id : skill;
370
+ const noTd = getNoTurnoverSkill();
371
+ // TODO : Check if this is correct
372
+ return noTd.includes(skillId);
373
+ }
374
+ /*
375
+ DISTURBING PRESENCE
376
+ When an opposition player performs either a
377
+ Pass action,
378
+ a Throw Team- mate action
379
+ or a Throw Bomb Special action,
380
+ or attempts to either interfere with a pass
381
+ or to catch the ball,
382
+ they must apply a -1 modifier to the test for each player on your team with this Skill
383
+ that is within three squares of them,
384
+ even if the player with this Skill is Prone,
385
+ Stunned or has lost their Tackle Zone. */
386
+ function getDisturbingPresenceMalus(player, players) {
387
+ const malus = players.filter((p) => {
388
+ return (p.teamId !== player.teamId &&
389
+ (0, status_1.hasStatusOnField)(p) &&
390
+ hasSkill(p, SKILL_NAMES.DISTURBING_PRESENCE) &&
391
+ (0, calcul_1.distanceSquares)(player, p, 3));
392
+ }).length;
393
+ return malus;
394
+ }
395
+ const isSpecialSkill = (skill) => {
396
+ // TODO : Check if this is correct
397
+ const skillId = typeof skill === "object" && "skill_id" in skill ? skill.skill_id : skill;
398
+ return SKILLS[skillId] === SKILL_TYPE.SPECIAL;
399
+ };
400
+ exports.isSpecialSkill = isSpecialSkill;
401
+ const helpSkillsToDisplay = {
402
+ [SKILL_NAMES.BLOCK]: { actif: false, color: "#FF0000" },
403
+ [SKILL_NAMES.DEFENSIVE]: { actif: false, color: "#0000FF" },
404
+ [SKILL_NAMES.DISTURBING_PRESENCE]: { actif: false, color: "#00FF44" },
405
+ [SKILL_NAMES.DODGE]: { actif: false, color: "#FFFF00" },
406
+ [SKILL_NAMES.GUARD]: { actif: false, color: "#555555" },
407
+ [SKILL_NAMES.SHADOWING]: { actif: false, color: "#995500" },
408
+ [SKILL_NAMES.STAND_FIRM]: { actif: false, color: "#550099" },
409
+ [SKILL_NAMES.TACKLE]: { actif: false, color: "#f200ff" },
410
+ };
411
+ exports.helpSkillsToDisplay = helpSkillsToDisplay;
412
+ const hasToAgilityJumpUp = (player) => {
413
+ const skill = getSkill(player, SKILL_NAMES.JUMP_UP);
414
+ if (skill && skill.date_next) {
415
+ if (new Date(skill.date_next) > new Date(Date.now())) {
416
+ return true;
417
+ }
418
+ }
419
+ return false;
420
+ };
421
+ exports.hasToAgilityJumpUp = hasToAgilityJumpUp;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SKILL_COACH_NAMES = exports.COACH_SKILLS = void 0;
4
+ exports.getCoachSkill = getCoachSkill;
5
+ exports.hasAvailableCoachSkill = hasAvailableCoachSkill;
6
+ exports.shouldDisplayInfoInName = shouldDisplayInfoInName;
7
+ var SKILL_COACH_NAMES;
8
+ (function (SKILL_COACH_NAMES) {
9
+ SKILL_COACH_NAMES["SPONSOR"] = "sponsor";
10
+ SKILL_COACH_NAMES["SPY"] = "spy";
11
+ SKILL_COACH_NAMES["THREATENING"] = "threatening";
12
+ })(SKILL_COACH_NAMES || (exports.SKILL_COACH_NAMES = SKILL_COACH_NAMES = {}));
13
+ var SKILL_COACH_TYPE;
14
+ (function (SKILL_COACH_TYPE) {
15
+ SKILL_COACH_TYPE["GENERAL"] = "G";
16
+ })(SKILL_COACH_TYPE || (SKILL_COACH_TYPE = {}));
17
+ // G: GENERAL
18
+ // Autre type par race?
19
+ // TODO: add text translation when add a skill
20
+ const COACH_SKILLS = {
21
+ [SKILL_COACH_NAMES.SPONSOR]: SKILL_COACH_TYPE.GENERAL,
22
+ // [SKILL_COACH_NAMES.SPY]: SKILL_COACH_TYPE.GENERAL, // If reactivate, check getCoachSkill hotfix
23
+ [SKILL_COACH_NAMES.THREATENING]: SKILL_COACH_TYPE.GENERAL,
24
+ };
25
+ exports.COACH_SKILLS = COACH_SKILLS;
26
+ function shouldDisplayInfoInName(skillId) {
27
+ const skills = [];
28
+ return skills.includes(skillId);
29
+ }
30
+ function getCoachSkill(player, skillId) {
31
+ if (skillId === SKILL_COACH_NAMES.SPY) {
32
+ // Hotfix
33
+ return false;
34
+ }
35
+ if (!COACH_SKILLS.hasOwnProperty(skillId)) {
36
+ throw `getCoachSkill '${skillId}' does not exist`;
37
+ }
38
+ const coachSkills = player.coachSkills;
39
+ if (!coachSkills) {
40
+ return false;
41
+ }
42
+ const skill = coachSkills.find((s) => s.skill_id === skillId);
43
+ return skill;
44
+ }
45
+ function hasAvailableCoachSkill(player, skillId) {
46
+ const skill = getCoachSkill(player, skillId);
47
+ if (!skill) {
48
+ return false;
49
+ }
50
+ return skill.available;
51
+ }