enefel 2.9.0 → 2.11.0
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/.claude/settings.local.json +7 -0
- package/2025/newSkills.ts +769 -0
- package/2025/raceMigration.ts +66 -0
- package/2025/rawTeamsData.ts +1726 -0
- package/2025/skillMigration.ts +155 -0
- package/avatarsSeason.ts +61 -0
- package/career.ts +64 -8
- package/career2025.ts +2752 -0
- package/dice.ts +40 -8
- package/dist/2025/newSkills.d.ts +10 -0
- package/dist/2025/newSkills.js +663 -0
- package/dist/2025/raceMigration.d.ts +10 -0
- package/dist/2025/raceMigration.js +53 -0
- package/dist/2025/rawTeamsData.d.ts +12 -0
- package/dist/2025/rawTeamsData.js +1699 -0
- package/dist/2025/skillMigration.d.ts +31 -0
- package/dist/2025/skillMigration.js +95 -0
- package/dist/avatarsSeason.d.ts +22 -0
- package/dist/avatarsSeason.js +54 -0
- package/dist/career.d.ts +13 -4
- package/dist/career.js +36 -7
- package/dist/career2025.d.ts +192 -0
- package/dist/career2025.js +2611 -0
- package/dist/dice.d.ts +10 -2
- package/dist/dice.js +31 -8
- package/dist/index.d.ts +17 -2
- package/dist/index.js +44 -5
- package/dist/move.d.ts +6 -2
- package/dist/move.js +35 -0
- package/dist/package-lock.json +913 -7
- package/dist/package.json +6 -2
- package/dist/pitch.d.ts +10 -1
- package/dist/pitch.js +16 -0
- package/dist/player.d.ts +8 -4
- package/dist/player.js +104 -20
- package/dist/position.d.ts +4 -0
- package/dist/position.js +17 -1
- package/dist/race.d.ts +23 -12
- package/dist/race.js +210 -2
- package/dist/skill.d.ts +26 -3
- package/dist/skill.js +199 -81
- package/dist/skills/hitAndRun.d.ts +10 -0
- package/dist/skills/hitAndRun.js +12 -0
- package/dist/skills/safePairOfHands.d.ts +28 -0
- package/dist/skills/safePairOfHands.js +18 -0
- package/dist/skills/sidestep.d.ts +21 -0
- package/dist/skills/sidestep.js +20 -0
- package/dist/status.d.ts +4 -1
- package/dist/status.js +14 -4
- package/dist/store.d.ts +3 -0
- package/dist/store.js +3 -0
- package/dist/teams/career_v2025.d.ts +246 -0
- package/dist/teams/career_v2025.js +3512 -0
- package/dist/teams/convert-csv-to-career.d.ts +1 -0
- package/dist/teams/convert-csv-to-career.js +1085 -0
- package/dist/types/models.d.ts +4 -0
- package/index.ts +57 -4
- package/jest.config.js +3 -0
- package/move.ts +50 -2
- package/npm-login.sh +0 -0
- package/package.json +6 -2
- package/pitch.ts +22 -0
- package/player.ts +105 -22
- package/position.ts +16 -0
- package/race.ts +227 -13
- package/skill.ts +217 -83
- package/skills/hitAndRun.ts +14 -0
- package/skills/safePairOfHands.ts +33 -0
- package/skills/sidestep.ts +25 -0
- package/status.ts +15 -3
- package/store.ts +3 -0
- package/teams/README.md +53 -0
- package/teams/clean-stats.js +54 -0
- package/teams/convert-csv-to-career.ts +1209 -0
- package/teams/players_clean.csv +107 -0
- package/teams/players_next.csv +21 -0
- package/types/models.ts +4 -0
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "enefel",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.11.0",
|
|
4
4
|
"description": "Blood Bowl 3 game engine",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,12 +20,16 @@
|
|
|
20
20
|
"watch": "tsc -w",
|
|
21
21
|
"prepare": "yarn build",
|
|
22
22
|
"test": "jest",
|
|
23
|
-
"test:watch": "jest --watch"
|
|
23
|
+
"test:watch": "jest --watch",
|
|
24
|
+
"convert:career": "npx ts-node teams/convert-csv-to-career.ts"
|
|
24
25
|
},
|
|
25
26
|
"keywords": [],
|
|
26
27
|
"author": "Manest",
|
|
27
28
|
"license": "MIT",
|
|
28
29
|
"dependencies": {
|
|
30
|
+
"csv-parse": "^6.1.0",
|
|
31
|
+
"csv-stringify": "^6.6.0",
|
|
32
|
+
"jsdom": "^27.2.0",
|
|
29
33
|
"seedrandom": "3.0.5",
|
|
30
34
|
"yup": "^0.29.3"
|
|
31
35
|
},
|
package/dist/pitch.d.ts
CHANGED
|
@@ -28,4 +28,13 @@ declare function getNumberPlayerZone(teamNumber: number, players: Player[], game
|
|
|
28
28
|
playerLateralB: number;
|
|
29
29
|
playerCenter: number;
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Checks if a tile at position (x, y) is the enemy team's touchdown zone
|
|
33
|
+
* @param x - X coordinate
|
|
34
|
+
* @param y - Y coordinate
|
|
35
|
+
* @param teamId - The player's team ID
|
|
36
|
+
* @param game - Game object containing stadium_zone, stadium_width, team1, team2
|
|
37
|
+
* @returns true if the tile is the enemy TD zone
|
|
38
|
+
*/
|
|
39
|
+
declare function isEnemyTDZone(x: number, y: number, teamId: string, game: Game): boolean;
|
|
40
|
+
export { coordinatesConvertorX, coordinatesConvertorY, getCenterTile, getHalfStadium, getIndexFromXY, getLateralATile, getLateralBTile, getNumberPlayerZone, getScrimmageTile, getTdTile, getTile, isEnemyTDZone, TILES, };
|
package/dist/pitch.js
CHANGED
|
@@ -12,6 +12,7 @@ exports.getNumberPlayerZone = getNumberPlayerZone;
|
|
|
12
12
|
exports.getScrimmageTile = getScrimmageTile;
|
|
13
13
|
exports.getTdTile = getTdTile;
|
|
14
14
|
exports.getTile = getTile;
|
|
15
|
+
exports.isEnemyTDZone = isEnemyTDZone;
|
|
15
16
|
const index_1 = require("./index");
|
|
16
17
|
const status_1 = require("./status");
|
|
17
18
|
var TILES;
|
|
@@ -112,3 +113,18 @@ function getNumberPlayerZone(teamNumber, players, game) {
|
|
|
112
113
|
});
|
|
113
114
|
return { playerScrimmage, playerLateralA, playerLateralB, playerCenter };
|
|
114
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Checks if a tile at position (x, y) is the enemy team's touchdown zone
|
|
118
|
+
* @param x - X coordinate
|
|
119
|
+
* @param y - Y coordinate
|
|
120
|
+
* @param teamId - The player's team ID
|
|
121
|
+
* @param game - Game object containing stadium_zone, stadium_width, team1, team2
|
|
122
|
+
* @returns true if the tile is the enemy TD zone
|
|
123
|
+
*/
|
|
124
|
+
function isEnemyTDZone(x, y, teamId, game) {
|
|
125
|
+
const tile = getTile(game, x, y);
|
|
126
|
+
// Determine if player is team1 or team2, then get enemy TD zone
|
|
127
|
+
const enemyTDTeamNumber = teamId === game.team1?.id ? 2 : 1;
|
|
128
|
+
const enemyTD = getTdTile(enemyTDTeamNumber);
|
|
129
|
+
return tile === enemyTD;
|
|
130
|
+
}
|
package/dist/player.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CAREER_VERSION } from "./career";
|
|
1
2
|
import { Game, Player, PlayerWithSkill, Team } from "./types/models";
|
|
2
3
|
declare enum PLAYER_INJURY {
|
|
3
4
|
BADLY_HURT = "badly-hurt",
|
|
@@ -13,6 +14,8 @@ declare enum PLAYER_CARAC {
|
|
|
13
14
|
ST = "ST",
|
|
14
15
|
PA = "PA"
|
|
15
16
|
}
|
|
17
|
+
declare const CARAC_MAX: Record<PLAYER_CARAC, number>;
|
|
18
|
+
declare const CARAC_MIN: Record<PLAYER_CARAC, number>;
|
|
16
19
|
declare function hasMove(player: PlayerWithSkill, game: Game): boolean;
|
|
17
20
|
declare function arePlayingSameGame(p1: Player, p2: Player): boolean;
|
|
18
21
|
declare function hasTeam(player: Player): boolean;
|
|
@@ -25,17 +28,18 @@ declare function isTeam1(player: Player, game: Game): boolean;
|
|
|
25
28
|
declare function isRookie(player: Player): boolean;
|
|
26
29
|
declare function getCareerBaseCarac(player: Player, carac: PLAYER_CARAC): number;
|
|
27
30
|
declare function getCareerBaseCaracLimit(player: Player, value: number, carac: PLAYER_CARAC): number;
|
|
28
|
-
declare function getMaxCarac(player: Player, carac: PLAYER_CARAC, game
|
|
29
|
-
declare function getMaxCommun(player: Player, carac: PLAYER_CARAC, _game: Game):
|
|
31
|
+
declare function getMaxCarac(player: Player, carac: PLAYER_CARAC, game?: Game): number;
|
|
32
|
+
declare function getMaxCommun(player: Player, carac: PLAYER_CARAC, _game: Game): number;
|
|
30
33
|
declare function getMaxAV(player: Player, game: Game): number;
|
|
31
34
|
declare function getMaxST(player: Player, game: Game): number;
|
|
32
35
|
declare function getMaxAG(player: Player, game: Game): number;
|
|
33
36
|
declare function getMaxMA(player: Player, game: Game): number;
|
|
37
|
+
declare function getMaxPA(player: Player, game?: Game): number;
|
|
34
38
|
declare function getMaxGfi(player: PlayerWithSkill): 2 | 3;
|
|
35
39
|
declare const AGING_SIZE_RANGE = 5;
|
|
36
40
|
declare function gamesforAgingRoll(totalGames: number): number;
|
|
37
41
|
declare const AGING_INITIAL_BONUS = 5;
|
|
38
42
|
declare const AGING_MIN_BONUS = -3;
|
|
39
43
|
declare function getAgingBonus(player: Player, totalGames: number): number | null;
|
|
40
|
-
declare function BB2020Carac(value: number, carac: PLAYER_CARAC): string | number;
|
|
41
|
-
export { AGING_INITIAL_BONUS, AGING_MIN_BONUS, AGING_SIZE_RANGE, areFromSameTeam, arePlayingSameGame, BB2020Carac, gamesforAgingRoll, getAgingBonus, getCareerBaseCarac, getCareerBaseCaracLimit, getMaxAG, getMaxAV, getMaxCarac, getMaxCommun, getMaxGfi, getMaxMA, getMaxST, hasMove, hasTeam, isPlaying, isPlayingGame, isRookie, isTeam1, isTeamPlaying, isTeamPlayingGame, PLAYER_CARAC, PLAYER_INJURY, };
|
|
44
|
+
declare function BB2020Carac(value: number, carac: PLAYER_CARAC, careerVersion?: CAREER_VERSION): string | number;
|
|
45
|
+
export { AGING_INITIAL_BONUS, AGING_MIN_BONUS, AGING_SIZE_RANGE, areFromSameTeam, arePlayingSameGame, BB2020Carac, CARAC_MAX, CARAC_MIN, gamesforAgingRoll, getAgingBonus, getCareerBaseCarac, getCareerBaseCaracLimit, getMaxAG, getMaxAV, getMaxCarac, getMaxCommun, getMaxGfi, getMaxMA, getMaxPA, getMaxST, hasMove, hasTeam, isPlaying, isPlayingGame, isRookie, isTeam1, isTeamPlaying, isTeamPlayingGame, PLAYER_CARAC, PLAYER_INJURY, };
|
package/dist/player.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PLAYER_INJURY = exports.PLAYER_CARAC = exports.AGING_SIZE_RANGE = exports.AGING_MIN_BONUS = exports.AGING_INITIAL_BONUS = void 0;
|
|
3
|
+
exports.PLAYER_INJURY = exports.PLAYER_CARAC = exports.CARAC_MIN = exports.CARAC_MAX = exports.AGING_SIZE_RANGE = exports.AGING_MIN_BONUS = exports.AGING_INITIAL_BONUS = void 0;
|
|
4
4
|
exports.areFromSameTeam = areFromSameTeam;
|
|
5
5
|
exports.arePlayingSameGame = arePlayingSameGame;
|
|
6
6
|
exports.BB2020Carac = BB2020Carac;
|
|
@@ -14,6 +14,7 @@ exports.getMaxCarac = getMaxCarac;
|
|
|
14
14
|
exports.getMaxCommun = getMaxCommun;
|
|
15
15
|
exports.getMaxGfi = getMaxGfi;
|
|
16
16
|
exports.getMaxMA = getMaxMA;
|
|
17
|
+
exports.getMaxPA = getMaxPA;
|
|
17
18
|
exports.getMaxST = getMaxST;
|
|
18
19
|
exports.hasMove = hasMove;
|
|
19
20
|
exports.hasTeam = hasTeam;
|
|
@@ -23,6 +24,7 @@ exports.isRookie = isRookie;
|
|
|
23
24
|
exports.isTeam1 = isTeam1;
|
|
24
25
|
exports.isTeamPlaying = isTeamPlaying;
|
|
25
26
|
exports.isTeamPlayingGame = isTeamPlayingGame;
|
|
27
|
+
const career_1 = require("./career");
|
|
26
28
|
const improvement_1 = require("./improvement");
|
|
27
29
|
const meteo_1 = require("./meteo");
|
|
28
30
|
const race_1 = require("./race");
|
|
@@ -43,6 +45,24 @@ var PLAYER_CARAC;
|
|
|
43
45
|
PLAYER_CARAC["ST"] = "ST";
|
|
44
46
|
PLAYER_CARAC["PA"] = "PA";
|
|
45
47
|
})(PLAYER_CARAC || (exports.PLAYER_CARAC = PLAYER_CARAC = {}));
|
|
48
|
+
// Valeurs maximales absolues des caractéristiques (Blood Bowl 2020 rulebook)
|
|
49
|
+
const CARAC_MAX = {
|
|
50
|
+
[PLAYER_CARAC.MA]: 9,
|
|
51
|
+
[PLAYER_CARAC.ST]: 8,
|
|
52
|
+
[PLAYER_CARAC.AG]: 5, // interne 5 = affichage 1+
|
|
53
|
+
[PLAYER_CARAC.PA]: 5, // interne 5 = affichage 1+
|
|
54
|
+
[PLAYER_CARAC.AV]: 10, // interne 10 = affichage 11+
|
|
55
|
+
};
|
|
56
|
+
exports.CARAC_MAX = CARAC_MAX;
|
|
57
|
+
// Valeurs minimales absolues des caractéristiques
|
|
58
|
+
const CARAC_MIN = {
|
|
59
|
+
[PLAYER_CARAC.MA]: 1,
|
|
60
|
+
[PLAYER_CARAC.ST]: 1,
|
|
61
|
+
[PLAYER_CARAC.AG]: 1, // interne 1 = affichage 6+
|
|
62
|
+
[PLAYER_CARAC.PA]: 0, // 0 = pas de PA
|
|
63
|
+
[PLAYER_CARAC.AV]: 2, // interne 2 = affichage 3+
|
|
64
|
+
};
|
|
65
|
+
exports.CARAC_MIN = CARAC_MIN;
|
|
46
66
|
function hasMove(player, game) {
|
|
47
67
|
if (player.current_MA >= getMaxCarac(player, PLAYER_CARAC.MA, game) &&
|
|
48
68
|
player.current_gfi >= getMaxGfi(player) &&
|
|
@@ -103,21 +123,27 @@ function getMaxCarac(player, carac, game) {
|
|
|
103
123
|
return -1;
|
|
104
124
|
}
|
|
105
125
|
if (carac === PLAYER_CARAC.AG) {
|
|
106
|
-
return getMaxAG(player, game);
|
|
126
|
+
return getMaxAG(player, game || {});
|
|
107
127
|
}
|
|
108
128
|
else if (carac === PLAYER_CARAC.MA) {
|
|
109
|
-
return getMaxMA(player, game);
|
|
129
|
+
return getMaxMA(player, game || {});
|
|
110
130
|
}
|
|
111
131
|
else if (carac === PLAYER_CARAC.AV) {
|
|
112
|
-
return getMaxAV(player, game);
|
|
132
|
+
return getMaxAV(player, game || {});
|
|
113
133
|
}
|
|
114
134
|
else if (carac === PLAYER_CARAC.ST) {
|
|
115
|
-
return getMaxST(player, game);
|
|
135
|
+
return getMaxST(player, game || {});
|
|
136
|
+
}
|
|
137
|
+
else if (carac === PLAYER_CARAC.PA) {
|
|
138
|
+
return getMaxPA(player, game);
|
|
116
139
|
}
|
|
117
140
|
return -1;
|
|
118
141
|
}
|
|
119
142
|
function getMaxCommun(player, carac, _game) {
|
|
120
143
|
let c = player[carac];
|
|
144
|
+
if (c == null) {
|
|
145
|
+
return 0;
|
|
146
|
+
}
|
|
121
147
|
if (!player.tempCarac) {
|
|
122
148
|
return c;
|
|
123
149
|
}
|
|
@@ -140,26 +166,29 @@ function getMaxCommun(player, carac, _game) {
|
|
|
140
166
|
c = getCareerBaseCaracLimit(player, c, PLAYER_CARAC[carac]);
|
|
141
167
|
return c;
|
|
142
168
|
}
|
|
143
|
-
function getLimitedValue(c) {
|
|
144
|
-
if (c > 10) {
|
|
145
|
-
c = 10;
|
|
146
|
-
}
|
|
147
|
-
if (c < 0) {
|
|
148
|
-
c = 0;
|
|
149
|
-
}
|
|
150
|
-
return c;
|
|
151
|
-
}
|
|
152
169
|
function getMaxAV(player, game) {
|
|
153
170
|
let c = getMaxCommun(player, PLAYER_CARAC.AV, game);
|
|
154
|
-
|
|
171
|
+
if (c > CARAC_MAX[PLAYER_CARAC.AV])
|
|
172
|
+
c = CARAC_MAX[PLAYER_CARAC.AV];
|
|
173
|
+
if (c < CARAC_MIN[PLAYER_CARAC.AV])
|
|
174
|
+
c = CARAC_MIN[PLAYER_CARAC.AV];
|
|
175
|
+
return c;
|
|
155
176
|
}
|
|
156
177
|
function getMaxST(player, game) {
|
|
157
178
|
let c = getMaxCommun(player, PLAYER_CARAC.ST, game);
|
|
158
|
-
|
|
179
|
+
if (c > CARAC_MAX[PLAYER_CARAC.ST])
|
|
180
|
+
c = CARAC_MAX[PLAYER_CARAC.ST];
|
|
181
|
+
if (c < CARAC_MIN[PLAYER_CARAC.ST])
|
|
182
|
+
c = CARAC_MIN[PLAYER_CARAC.ST];
|
|
183
|
+
return c;
|
|
159
184
|
}
|
|
160
185
|
function getMaxAG(player, game) {
|
|
161
186
|
let c = getMaxCommun(player, PLAYER_CARAC.AG, game);
|
|
162
|
-
|
|
187
|
+
if (c > CARAC_MAX[PLAYER_CARAC.AG])
|
|
188
|
+
c = CARAC_MAX[PLAYER_CARAC.AG];
|
|
189
|
+
if (c < CARAC_MIN[PLAYER_CARAC.AG])
|
|
190
|
+
c = CARAC_MIN[PLAYER_CARAC.AG];
|
|
191
|
+
return c;
|
|
163
192
|
}
|
|
164
193
|
function getMaxMA(player, game) {
|
|
165
194
|
let c = getMaxCommun(player, PLAYER_CARAC.MA, game);
|
|
@@ -169,7 +198,57 @@ function getMaxMA(player, game) {
|
|
|
169
198
|
c = maxMA;
|
|
170
199
|
}
|
|
171
200
|
}
|
|
172
|
-
|
|
201
|
+
if (c > CARAC_MAX[PLAYER_CARAC.MA])
|
|
202
|
+
c = CARAC_MAX[PLAYER_CARAC.MA];
|
|
203
|
+
if (c < CARAC_MIN[PLAYER_CARAC.MA])
|
|
204
|
+
c = CARAC_MIN[PLAYER_CARAC.MA];
|
|
205
|
+
return c;
|
|
206
|
+
}
|
|
207
|
+
function clampPA(c) {
|
|
208
|
+
if (c <= 0)
|
|
209
|
+
return CARAC_MIN[PLAYER_CARAC.PA]; // 0 = pas de PA
|
|
210
|
+
if (c > CARAC_MAX[PLAYER_CARAC.PA])
|
|
211
|
+
return CARAC_MAX[PLAYER_CARAC.PA];
|
|
212
|
+
return c;
|
|
213
|
+
}
|
|
214
|
+
function getMaxPA(player, game) {
|
|
215
|
+
// Si le joueur a déjà une valeur PA en base, l'utiliser
|
|
216
|
+
if (player.PA != null) {
|
|
217
|
+
let c = getMaxCommun(player, PLAYER_CARAC.PA, game || {});
|
|
218
|
+
return clampPA(c);
|
|
219
|
+
}
|
|
220
|
+
// Sinon, déterminer la valeur selon la version de la career
|
|
221
|
+
const career = (0, race_1.getCareerFromPlayer)(player);
|
|
222
|
+
if (!career) {
|
|
223
|
+
// Fallback: utiliser AG si pas de career
|
|
224
|
+
return getMaxAG(player, game || {});
|
|
225
|
+
}
|
|
226
|
+
// Si c'est une career 2025, utiliser career.PA
|
|
227
|
+
if (career.version === career_1.CAREER_VERSION.V2025 && career.PA != null) {
|
|
228
|
+
let c = career.PA;
|
|
229
|
+
// Appliquer les modificateurs tempCarac si présents
|
|
230
|
+
if (player.tempCarac) {
|
|
231
|
+
let obj;
|
|
232
|
+
try {
|
|
233
|
+
obj = JSON.parse(player.tempCarac);
|
|
234
|
+
}
|
|
235
|
+
catch (e) {
|
|
236
|
+
return clampPA(c);
|
|
237
|
+
}
|
|
238
|
+
for (const value of Object.values(obj)) {
|
|
239
|
+
if (value.gainCarac === PLAYER_CARAC.PA) {
|
|
240
|
+
c += 1;
|
|
241
|
+
}
|
|
242
|
+
if (value.loseCarac === PLAYER_CARAC.PA) {
|
|
243
|
+
c -= 1;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
c = getCareerBaseCaracLimit(player, c, PLAYER_CARAC.PA);
|
|
247
|
+
}
|
|
248
|
+
return clampPA(c);
|
|
249
|
+
}
|
|
250
|
+
// Sinon (career 2020 ou V6), utiliser AG
|
|
251
|
+
return getMaxAG(player, game || {});
|
|
173
252
|
}
|
|
174
253
|
function getMaxGfi(player) {
|
|
175
254
|
return (0, skill_1.hasSkill)(player, skill_1.SKILL_NAMES.SPRINT) ? 3 : 2;
|
|
@@ -211,16 +290,21 @@ function getAgingBonus(player, totalGames) {
|
|
|
211
290
|
}
|
|
212
291
|
return bonus;
|
|
213
292
|
}
|
|
214
|
-
function BB2020Carac(value, carac) {
|
|
293
|
+
function BB2020Carac(value, carac, careerVersion) {
|
|
215
294
|
// CHARACTERISTIC TABLE
|
|
216
295
|
// Characteristic MA ST AG PA AV
|
|
217
296
|
// Maximum 9 8 1+ 1+ 11+
|
|
218
297
|
//Minimum 1 1 6+ 6+ 3+
|
|
298
|
+
// Les valeurs sont maintenant normalisées au format 2020 pour toutes les versions
|
|
299
|
+
// (les valeurs 2025 sont converties lors de la génération du fichier career2025.ts)
|
|
219
300
|
if (carac === PLAYER_CARAC.AV && value) {
|
|
220
301
|
// TODO: min3+, max11+
|
|
221
302
|
return `${+value + 1}+`;
|
|
222
303
|
}
|
|
223
|
-
else if (carac === PLAYER_CARAC.AG
|
|
304
|
+
else if ((carac === PLAYER_CARAC.AG || carac === PLAYER_CARAC.PA) &&
|
|
305
|
+
value) {
|
|
306
|
+
// Conversion pour afficher la notation "+"
|
|
307
|
+
// PA se comporte exactement comme AG (PA n'existait pas en 2020)
|
|
224
308
|
let newValue = 6;
|
|
225
309
|
if (value <= 1)
|
|
226
310
|
newValue = 6;
|
package/dist/position.d.ts
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { PlayerWithSkill, Point } from "./types/models";
|
|
2
2
|
export declare const isAdjacent: (p1: Point, p2: Point) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Returns all 8 adjacent squares around a given position
|
|
5
|
+
*/
|
|
6
|
+
export declare const getAllAdjacentSquares: (x: number, y: number) => Point[];
|
|
3
7
|
export declare const getEnemyTackleZones: (location: Point, teamId: string, players: Record<string, PlayerWithSkill>) => PlayerWithSkill[];
|
package/dist/position.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getEnemyTackleZones = exports.isAdjacent = void 0;
|
|
3
|
+
exports.getEnemyTackleZones = exports.getAllAdjacentSquares = exports.isAdjacent = void 0;
|
|
4
4
|
const status_1 = require("./status");
|
|
5
5
|
const isAdjacent = (p1, p2) => {
|
|
6
6
|
if (p1 === null ||
|
|
@@ -16,6 +16,22 @@ const isAdjacent = (p1, p2) => {
|
|
|
16
16
|
Math.abs(p1.y - p2.y) <= 1);
|
|
17
17
|
};
|
|
18
18
|
exports.isAdjacent = isAdjacent;
|
|
19
|
+
/**
|
|
20
|
+
* Returns all 8 adjacent squares around a given position
|
|
21
|
+
*/
|
|
22
|
+
const getAllAdjacentSquares = (x, y) => {
|
|
23
|
+
return [
|
|
24
|
+
{ x: x - 1, y: y - 1 },
|
|
25
|
+
{ x: x, y: y - 1 },
|
|
26
|
+
{ x: x + 1, y: y - 1 },
|
|
27
|
+
{ x: x - 1, y: y },
|
|
28
|
+
{ x: x + 1, y: y },
|
|
29
|
+
{ x: x - 1, y: y + 1 },
|
|
30
|
+
{ x: x, y: y + 1 },
|
|
31
|
+
{ x: x + 1, y: y + 1 },
|
|
32
|
+
];
|
|
33
|
+
};
|
|
34
|
+
exports.getAllAdjacentSquares = getAllAdjacentSquares;
|
|
19
35
|
const getEnemyTackleZones = (location, teamId, players) => {
|
|
20
36
|
// player a un format : { id1: {player1}, id2:{player2} etc...}
|
|
21
37
|
return Object.values(players).filter((player) => {
|
package/dist/race.d.ts
CHANGED
|
@@ -1,20 +1,31 @@
|
|
|
1
|
-
import { AVATAR,
|
|
1
|
+
import { AVATAR, CAREER_ID_ALL, RACE } from "./career";
|
|
2
2
|
import { Player, Team, User } from "./types/models";
|
|
3
3
|
declare const ANIMOSITY_NUMBER = 2;
|
|
4
4
|
declare const isPrivateRace: (race: RACE) => boolean;
|
|
5
5
|
declare const hasUnlockRace: (user: User, race: RACE) => boolean;
|
|
6
6
|
declare const hasUnlockCareer: (user: User, careerId: string) => boolean;
|
|
7
|
-
declare const getCareerFromKey: (key:
|
|
8
|
-
declare const getCareerKeyFromPlayer: (player: Player) =>
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
declare const getCareerFromKey: (key: CAREER_ID_ALL) => import("./career2025").Career | import("./career").Career;
|
|
8
|
+
declare const getCareerKeyFromPlayer: (player: Player) => CAREER_ID_ALL;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the 2025 career ID for a given career ID (legacy or already 2025).
|
|
11
|
+
* Returns undefined for careers without a 2025 equivalent (e.g. Slann).
|
|
12
|
+
*/
|
|
13
|
+
declare const getCareerId2025: (careerId: string) => string | undefined;
|
|
14
|
+
declare const getCareerFromPlayer: (player: Player) => import("./career2025").Career | import("./career").Career;
|
|
15
|
+
declare const getCareerFromIcon: (nameIcon: string) => import("./career2025").Career | import("./career").Career | null;
|
|
11
16
|
declare const getPlayerAvatarDefault: (player: Player) => string | null;
|
|
12
17
|
declare const getPlayerAvatar: (player: Player) => string | null;
|
|
13
|
-
declare const getPlayerAvatarPath: (player: Player) =>
|
|
14
|
-
declare const getRaceFromCareer: (careerId:
|
|
15
|
-
declare const getAvatarTypeFromPlayer: (player: Player, avatarFile: string) => AVATAR | null;
|
|
16
|
-
|
|
18
|
+
declare const getPlayerAvatarPath: (player: Player) => string | null;
|
|
19
|
+
declare const getRaceFromCareer: (careerId: CAREER_ID_ALL) => RACE | undefined;
|
|
20
|
+
declare const getAvatarTypeFromPlayer: (player: Player, avatarFile: string) => import("./career2025").AVATAR | AVATAR | null;
|
|
21
|
+
/** Returns the correct base path for an avatar file based on which list it belongs to,
|
|
22
|
+
* independent of the player's currently active avatar. */
|
|
23
|
+
declare const getAvatarBasePathFromFile: (player: Player, avatarFile: string) => string | null;
|
|
24
|
+
/** Returns the rarity string of a standard avatar file for the given player's career. */
|
|
25
|
+
declare const getAvatarRarityFromFile: (player: Player, avatarFile: string) => string | undefined;
|
|
26
|
+
declare const getRaceFromPlayer: (player: Player) => RACE | undefined;
|
|
17
27
|
declare const getCareersByRace: () => any;
|
|
28
|
+
declare const getAvailableCareersByRace: () => any;
|
|
18
29
|
declare const GAIN_CAREER_POINT = 2;
|
|
19
30
|
declare const GAIN_CAREER_POINT_FRIENDLY = 2;
|
|
20
31
|
declare enum GROUP_NAME {
|
|
@@ -34,8 +45,8 @@ declare const getRaceCompatibility: (race1: RACE, race2: RACE) => boolean;
|
|
|
34
45
|
declare const getPlayerCompatibility: (player1: Player, player2: Player) => void;
|
|
35
46
|
declare function getCareerRanges(): number[];
|
|
36
47
|
declare function getPlayersAvailableForPromo(players?: never[]): Player[];
|
|
37
|
-
declare function getPromoCareer(careerId:
|
|
38
|
-
declare function getPriceCareer(careerId:
|
|
48
|
+
declare function getPromoCareer(careerId: CAREER_ID_ALL, userPlayers: Player[]): number;
|
|
49
|
+
declare function getPriceCareer(careerId: CAREER_ID_ALL): number;
|
|
39
50
|
declare function getTeamGroups(team: Team): any;
|
|
40
51
|
declare function isPlayerNeutralGroup(player: Player): boolean;
|
|
41
52
|
declare function isNeutralGroup(group: string): boolean;
|
|
@@ -46,4 +57,4 @@ declare const getPlayersByState: (players: Player[]) => {
|
|
|
46
57
|
lastRetired: Player[];
|
|
47
58
|
};
|
|
48
59
|
declare const getRaceSpecialSkills: (race: RACE) => string[];
|
|
49
|
-
export { ANIMOSITY_NUMBER, COMPATIBILITY, GAIN_CAREER_POINT, GAIN_CAREER_POINT_FRIENDLY, getAvatarTypeFromPlayer, getCareerFromIcon, getCareerFromKey, getCareerFromPlayer, getCareerKeyFromPlayer, getCareerRanges, getCareersByRace, getPlayerAvatar, getPlayerAvatarDefault, getPlayerAvatarPath, getPlayerCompatibility, getPlayerGroup, getPlayersAvailableForPromo, getPlayersByState, getPriceCareer, getPromoCareer, getRaceCompatibility, getRaceFromCareer, getRaceFromPlayer, getRaceGroup, getRaceSpecialSkills, getTeamGroups, getTeamIncompatibleGroups, GROUP_NAME, hasUnlockCareer, hasUnlockRace, isNeutralGroup, isPlayerNeutralGroup, isPrivateRace, };
|
|
60
|
+
export { ANIMOSITY_NUMBER, COMPATIBILITY, GAIN_CAREER_POINT, GAIN_CAREER_POINT_FRIENDLY, getAvailableCareersByRace, getAvatarBasePathFromFile, getAvatarRarityFromFile, getAvatarTypeFromPlayer, getCareerId2025, getCareerFromIcon, getCareerFromKey, getCareerFromPlayer, getCareerKeyFromPlayer, getCareerRanges, getCareersByRace, getPlayerAvatar, getPlayerAvatarDefault, getPlayerAvatarPath, getPlayerCompatibility, getPlayerGroup, getPlayersAvailableForPromo, getPlayersByState, getPriceCareer, getPromoCareer, getRaceCompatibility, getRaceFromCareer, getRaceFromPlayer, getRaceGroup, getRaceSpecialSkills, getTeamGroups, getTeamIncompatibleGroups, GROUP_NAME, hasUnlockCareer, hasUnlockRace, isNeutralGroup, isPlayerNeutralGroup, isPrivateRace, };
|