enefel 2.2.3 → 2.3.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/dist/item.d.ts CHANGED
@@ -12,7 +12,8 @@ declare enum ITEM_ID {
12
12
  DRUG = "drug",
13
13
  GREEN_PILL = "green-pill",
14
14
  NEWSPAPER = "newspaper",
15
- BOOSTER = "booster"
15
+ BOOSTER = "booster",
16
+ ENERGY_GEL = "energy-gel"
16
17
  }
17
18
  declare enum ITEM_TYPE {
18
19
  CONSUMABLE = "consumable",
package/dist/item.js CHANGED
@@ -18,6 +18,7 @@ var ITEM_ID;
18
18
  ITEM_ID["GREEN_PILL"] = "green-pill";
19
19
  ITEM_ID["NEWSPAPER"] = "newspaper";
20
20
  ITEM_ID["BOOSTER"] = "booster";
21
+ ITEM_ID["ENERGY_GEL"] = "energy-gel";
21
22
  })(ITEM_ID || (exports.ITEM_ID = ITEM_ID = {}));
22
23
  var ITEM_TYPE;
23
24
  (function (ITEM_TYPE) {
@@ -0,0 +1,11 @@
1
+ import { Player } from "./types/models";
2
+ export interface TempCaracEffect {
3
+ t: number;
4
+ gainCarac?: string;
5
+ loseCarac?: string;
6
+ moralePenalty?: number;
7
+ itemId?: string;
8
+ }
9
+ export declare const countItemUsagesInKickoff: (player: Player, itemId: string) => number;
10
+ export declare const canUseItem: (player: Player, itemId: string, maxUsesPerKickoff?: number) => boolean;
11
+ export declare const getRemainingUsages: (player: Player, itemId: string, maxUsesPerKickoff?: number) => number;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRemainingUsages = exports.canUseItem = exports.countItemUsagesInKickoff = void 0;
4
+ const countItemUsagesInKickoff = (player, itemId) => {
5
+ if (!player.tempCarac) {
6
+ return 0;
7
+ }
8
+ let tempCarac;
9
+ try {
10
+ tempCarac = JSON.parse(player.tempCarac);
11
+ }
12
+ catch (e) {
13
+ return 0;
14
+ }
15
+ let count = 0;
16
+ for (const effect of Object.values(tempCarac)) {
17
+ // Compter tous les effets liés à cet item
18
+ if (effect.itemId === itemId) {
19
+ count++;
20
+ }
21
+ }
22
+ return count;
23
+ };
24
+ exports.countItemUsagesInKickoff = countItemUsagesInKickoff;
25
+ const canUseItem = (player, itemId, maxUsesPerKickoff) => {
26
+ if (!maxUsesPerKickoff || maxUsesPerKickoff <= 0) {
27
+ return true; // Pas de limite
28
+ }
29
+ const currentUsages = (0, exports.countItemUsagesInKickoff)(player, itemId);
30
+ return currentUsages < maxUsesPerKickoff;
31
+ };
32
+ exports.canUseItem = canUseItem;
33
+ const getRemainingUsages = (player, itemId, maxUsesPerKickoff) => {
34
+ if (!maxUsesPerKickoff || maxUsesPerKickoff <= 0) {
35
+ return -1; // Pas de limite
36
+ }
37
+ const currentUsages = (0, exports.countItemUsagesInKickoff)(player, itemId);
38
+ return Math.max(0, maxUsesPerKickoff - currentUsages);
39
+ };
40
+ exports.getRemainingUsages = getRemainingUsages;
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.2.3",
3
+ "version": "2.3.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "enefel",
9
- "version": "2.2.3",
9
+ "version": "2.3.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "seedrandom": "3.0.5",
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.2.3",
3
+ "version": "2.3.0",
4
4
  "description": "Blood Bowl 3 game engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/dist/race.js CHANGED
@@ -174,7 +174,7 @@ const getPlayerAvatarPath = (player) => {
174
174
  exports.getPlayerAvatarPath = getPlayerAvatarPath;
175
175
  const getRaceFromCareer = (careerId) => {
176
176
  const career = getCareerFromKey(careerId);
177
- return career.badge;
177
+ return career?.badge;
178
178
  };
179
179
  exports.getRaceFromCareer = getRaceFromCareer;
180
180
  const getAvatarTypeFromPlayer = (player, avatarFile) => {
@@ -120,6 +120,8 @@ export interface Player extends Point {
120
120
  prevY: number | null;
121
121
  hasEndTurn: boolean;
122
122
  canUseSkills?: boolean;
123
+ stats?: Stat[];
124
+ team?: Team;
123
125
  }
124
126
  export interface PlayerWithSkill extends Player {
125
127
  skills: PlayerSkill[];
@@ -198,6 +200,7 @@ export interface Item {
198
200
  y: number;
199
201
  type: string;
200
202
  forUser?: boolean;
203
+ maxUsesPerKickoff?: number;
201
204
  }
202
205
  export interface UserItem {
203
206
  id: string;
package/item.ts CHANGED
@@ -14,6 +14,7 @@ enum ITEM_ID {
14
14
  GREEN_PILL = "green-pill",
15
15
  NEWSPAPER = "newspaper",
16
16
  BOOSTER = "booster",
17
+ ENERGY_GEL = "energy-gel",
17
18
  }
18
19
 
19
20
  enum ITEM_TYPE {
package/itemUsage.ts ADDED
@@ -0,0 +1,61 @@
1
+ import { Player } from "./types/models";
2
+
3
+ export interface TempCaracEffect {
4
+ t: number;
5
+ gainCarac?: string;
6
+ loseCarac?: string;
7
+ moralePenalty?: number;
8
+ itemId?: string;
9
+ }
10
+
11
+ export const countItemUsagesInKickoff = (
12
+ player: Player,
13
+ itemId: string
14
+ ): number => {
15
+ if (!player.tempCarac) {
16
+ return 0;
17
+ }
18
+
19
+ let tempCarac: Record<string, TempCaracEffect>;
20
+ try {
21
+ tempCarac = JSON.parse(player.tempCarac);
22
+ } catch (e) {
23
+ return 0;
24
+ }
25
+
26
+ let count = 0;
27
+ for (const effect of Object.values(tempCarac)) {
28
+ // Compter tous les effets liés à cet item
29
+ if (effect.itemId === itemId) {
30
+ count++;
31
+ }
32
+ }
33
+
34
+ return count;
35
+ };
36
+
37
+ export const canUseItem = (
38
+ player: Player,
39
+ itemId: string,
40
+ maxUsesPerKickoff?: number
41
+ ): boolean => {
42
+ if (!maxUsesPerKickoff || maxUsesPerKickoff <= 0) {
43
+ return true; // Pas de limite
44
+ }
45
+
46
+ const currentUsages = countItemUsagesInKickoff(player, itemId);
47
+ return currentUsages < maxUsesPerKickoff;
48
+ };
49
+
50
+ export const getRemainingUsages = (
51
+ player: Player,
52
+ itemId: string,
53
+ maxUsesPerKickoff?: number
54
+ ): number => {
55
+ if (!maxUsesPerKickoff || maxUsesPerKickoff <= 0) {
56
+ return -1; // Pas de limite
57
+ }
58
+
59
+ const currentUsages = countItemUsagesInKickoff(player, itemId);
60
+ return Math.max(0, maxUsesPerKickoff - currentUsages);
61
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "enefel",
3
- "version": "2.2.3",
3
+ "version": "2.3.0",
4
4
  "description": "Blood Bowl 3 game engine",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
package/player.ts CHANGED
@@ -164,10 +164,8 @@ function getMaxAG(player: Player, game: Game) {
164
164
 
165
165
  function getMaxMA(player: Player, game: Game) {
166
166
  let c = getMaxCommun(player, PLAYER_CARAC.MA, game);
167
-
168
167
  if (game) {
169
168
  const maxMA = meteoMaxMA(game.meteo);
170
-
171
169
  if (c > maxMA) {
172
170
  c = maxMA;
173
171
  }
package/race.ts CHANGED
@@ -168,7 +168,7 @@ const getPlayerAvatarPath = (player: Player) => {
168
168
 
169
169
  const getRaceFromCareer = (careerId: CAREER_ID) => {
170
170
  const career = getCareerFromKey(careerId);
171
- return career.badge;
171
+ return career?.badge;
172
172
  };
173
173
 
174
174
  const getAvatarTypeFromPlayer = (player: Player, avatarFile: string) => {
package/types/models.ts CHANGED
@@ -124,6 +124,8 @@ export interface Player extends Point {
124
124
  prevY: number | null; // add by Game
125
125
  hasEndTurn: boolean; // add by Game
126
126
  canUseSkills?: boolean; // add by Game
127
+ stats?: Stat[];
128
+ team?: Team;
127
129
  }
128
130
 
129
131
  export interface PlayerWithSkill extends Player {
@@ -208,6 +210,7 @@ export interface Item {
208
210
  y: number;
209
211
  type: string;
210
212
  forUser?: boolean;
213
+ maxUsesPerKickoff?: number;
211
214
  }
212
215
 
213
216
  export interface UserItem {