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/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
|
+
}
|