enefel 1.0.134 → 1.0.136
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/badge.js +4 -2
- package/career.js +6 -8
- package/index.js +11 -6
- package/item.js +38 -0
- package/package.json +1 -1
- package/player.js +85 -5
- package/skill.js +5 -0
package/badge.js
CHANGED
|
@@ -2,9 +2,10 @@ const { getCareers } = require("./career");
|
|
|
2
2
|
const { ranges } = require("./improvement");
|
|
3
3
|
|
|
4
4
|
const BADGE_NAMES = {
|
|
5
|
-
KILL: "kill",
|
|
6
|
-
DEAD: "dead",
|
|
7
5
|
BLOODTHIRSTY: "bloodthirsty",
|
|
6
|
+
DEAD: "dead",
|
|
7
|
+
KILL: "kill",
|
|
8
|
+
NURGLE: "nurgle",
|
|
8
9
|
};
|
|
9
10
|
const badges = {};
|
|
10
11
|
|
|
@@ -19,6 +20,7 @@ Object.values(getCareers()).forEach((r) => {
|
|
|
19
20
|
badges[BADGE_NAMES.KILL] = [0, 1, 2, 3, 5, 7, 9]; // 10 max
|
|
20
21
|
badges[BADGE_NAMES.DEAD] = [0, 1, 2, 3, 5, 7, 9]; // 10 max
|
|
21
22
|
badges[BADGE_NAMES.BLOODTHIRSTY] = [0]; // 1 max
|
|
23
|
+
badges[BADGE_NAMES.NURGLE] = [0]; // 1 max
|
|
22
24
|
|
|
23
25
|
function getBadgeMaxLevel(badge) {
|
|
24
26
|
return badges[badge.badge_id].length;
|
package/career.js
CHANGED
|
@@ -148,10 +148,7 @@ const CAREER = {
|
|
|
148
148
|
double: "AS",
|
|
149
149
|
normalCoach: "G",
|
|
150
150
|
icons: ["nurgle-rotter1"],
|
|
151
|
-
skills: [
|
|
152
|
-
SKILL_NAMES.DECAY,
|
|
153
|
-
//SKILL_NAMES.PLAGUE_RIDDEN
|
|
154
|
-
],
|
|
151
|
+
skills: [SKILL_NAMES.DECAY, SKILL_NAMES.PLAGUE_RIDDEN],
|
|
155
152
|
badge: RACE.NURGLE,
|
|
156
153
|
range: 0,
|
|
157
154
|
cost: 35,
|
|
@@ -162,14 +159,14 @@ const CAREER = {
|
|
|
162
159
|
AG: 3,
|
|
163
160
|
AV: 8,
|
|
164
161
|
normal: "GMS",
|
|
165
|
-
double: "
|
|
162
|
+
double: "AP",
|
|
166
163
|
normalCoach: "G",
|
|
167
164
|
icons: ["nurgle-pestigor1"],
|
|
168
165
|
skills: [
|
|
169
166
|
SKILL_NAMES.HORNS,
|
|
170
167
|
SKILL_NAMES.REGENERATION,
|
|
171
168
|
SKILL_NAMES.SPECIALIST,
|
|
172
|
-
|
|
169
|
+
SKILL_NAMES.PLAGUE_RIDDEN,
|
|
173
170
|
],
|
|
174
171
|
badge: RACE.NURGLE,
|
|
175
172
|
range: 1,
|
|
@@ -189,7 +186,7 @@ const CAREER = {
|
|
|
189
186
|
SKILL_NAMES.FOUL_APPEARANCE,
|
|
190
187
|
SKILL_NAMES.REGENERATION,
|
|
191
188
|
SKILL_NAMES.STAR,
|
|
192
|
-
|
|
189
|
+
SKILL_NAMES.PLAGUE_RIDDEN,
|
|
193
190
|
],
|
|
194
191
|
badge: RACE.NURGLE,
|
|
195
192
|
range: 5,
|
|
@@ -210,7 +207,7 @@ const CAREER = {
|
|
|
210
207
|
[SKILL_NAMES.LONER, 4],
|
|
211
208
|
SKILL_NAMES.MIGHTY_BLOW,
|
|
212
209
|
SKILL_NAMES.REGENERATION,
|
|
213
|
-
|
|
210
|
+
SKILL_NAMES.PLAGUE_RIDDEN,
|
|
214
211
|
SKILL_NAMES.REALLY_STUPID,
|
|
215
212
|
SKILL_NAMES.TENTACLES,
|
|
216
213
|
SKILL_NAMES.BIG_GUY,
|
|
@@ -1479,6 +1476,7 @@ const CAREER = {
|
|
|
1479
1476
|
SKILL_NAMES.STRONG_ARM,
|
|
1480
1477
|
SKILL_NAMES.THICK_SKULL,
|
|
1481
1478
|
SKILL_NAMES.THROW_TEAM_MATE,
|
|
1479
|
+
SKILL_NAMES.TAKE_ROOT,
|
|
1482
1480
|
],
|
|
1483
1481
|
badge: RACE.HALFLING,
|
|
1484
1482
|
range: 6,
|
package/index.js
CHANGED
|
@@ -20,7 +20,7 @@ const {
|
|
|
20
20
|
} = require("./meteo");
|
|
21
21
|
const { distance } = require("./calcul");
|
|
22
22
|
const { getCareerFromPlayer } = require("./race");
|
|
23
|
-
const {
|
|
23
|
+
const { getMaxCarac, PLAYER_CARAC } = require("./player");
|
|
24
24
|
const { GAME_STATUS } = require("./game");
|
|
25
25
|
|
|
26
26
|
const POSTULATION_HOURS = 24;
|
|
@@ -141,6 +141,7 @@ const GAME_HISTORY_INFO = {
|
|
|
141
141
|
ARMOR: "ar",
|
|
142
142
|
BALL: "ball",
|
|
143
143
|
BLOCK: "b",
|
|
144
|
+
CARAC_CHANGE: "cc",
|
|
144
145
|
CASUALTY: "ca",
|
|
145
146
|
DODGE: "d",
|
|
146
147
|
END_PO: "endpo",
|
|
@@ -164,13 +165,14 @@ const GAME_HISTORY_INFO = {
|
|
|
164
165
|
PASS: "p",
|
|
165
166
|
REJECTION: "r",
|
|
166
167
|
REROLL_COACH: "rc",
|
|
168
|
+
REROLL_INITIAL: "rei",
|
|
167
169
|
REROLL_METEO: "rm",
|
|
168
170
|
REROLL_RACE_MALUS: "rrm",
|
|
169
|
-
REROLL_INITIAL: "rei",
|
|
170
171
|
REROLL: "re",
|
|
171
172
|
SCATTER: "sc",
|
|
172
|
-
|
|
173
|
+
SKILL_GAIN: "skg",
|
|
173
174
|
SKILL_LOSS: "skl",
|
|
175
|
+
SKILL: "sk",
|
|
174
176
|
SPY: "spy",
|
|
175
177
|
STANDUP: "st",
|
|
176
178
|
START_FAN: "fan",
|
|
@@ -691,7 +693,7 @@ function getEnemyTackleZones(location, teamId, players) {
|
|
|
691
693
|
});
|
|
692
694
|
}
|
|
693
695
|
|
|
694
|
-
function canBlock(attacker, defender, attackerTeam, game) {
|
|
696
|
+
function canBlock(attacker, defender, attackerTeam, game, withModif = true) {
|
|
695
697
|
if (
|
|
696
698
|
!attacker ||
|
|
697
699
|
!defender ||
|
|
@@ -715,7 +717,9 @@ function canBlock(attacker, defender, attackerTeam, game) {
|
|
|
715
717
|
|
|
716
718
|
// No blitz available
|
|
717
719
|
if (attackerTeam.date_next_blitz !== null) {
|
|
718
|
-
return attacker.current_MA ===
|
|
720
|
+
return attacker.current_MA === withModif
|
|
721
|
+
? getMaxCarac(attacker, PLAYER_CARAC.MA, game)
|
|
722
|
+
: attacker.MA;
|
|
719
723
|
} else {
|
|
720
724
|
// Blitz available
|
|
721
725
|
|
|
@@ -753,7 +757,8 @@ function canPass(player, playerTeam, playerIdWithBall) {
|
|
|
753
757
|
function canEndTurn(player, game) {
|
|
754
758
|
return (
|
|
755
759
|
player.date_next_action === null &&
|
|
756
|
-
(player.has_action === false ||
|
|
760
|
+
(player.has_action === false ||
|
|
761
|
+
player.current_MA < getMaxCarac(player, PLAYER_CARAC.MA, game))
|
|
757
762
|
);
|
|
758
763
|
}
|
|
759
764
|
|
package/item.js
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const RARITY = {
|
|
2
|
+
COMMUN: "c",
|
|
3
|
+
UNCOMMUN: "u",
|
|
4
|
+
RARE: "r",
|
|
5
|
+
EPIC: "e",
|
|
6
|
+
LEGENDARY: "l",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const ITEM_ID = {
|
|
10
|
+
BEER: "beer",
|
|
11
|
+
DRUG: "drug",
|
|
12
|
+
GREEN_PILL: "green-pill",
|
|
13
|
+
NEWSPAPER: "newspaper",
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const getQteFromRarity = (rarity) => {
|
|
17
|
+
if (rarity === RARITY.COMMUN) {
|
|
18
|
+
return 10000;
|
|
19
|
+
}
|
|
20
|
+
if (rarity === RARITY.UNCOMMUN) {
|
|
21
|
+
return 1000;
|
|
22
|
+
}
|
|
23
|
+
if (rarity === RARITY.RARE) {
|
|
24
|
+
return 100;
|
|
25
|
+
}
|
|
26
|
+
if (rarity === RARITY.EPIC) {
|
|
27
|
+
return 10;
|
|
28
|
+
}
|
|
29
|
+
if (rarity === RARITY.LEGENDARY) {
|
|
30
|
+
return 1;
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
module.exports = {
|
|
35
|
+
RARITY,
|
|
36
|
+
ITEM_ID,
|
|
37
|
+
getQteFromRarity,
|
|
38
|
+
};
|
package/package.json
CHANGED
package/player.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
const { getCareers } = require("./career");
|
|
1
2
|
const { ranges, getAgingMinExperience } = require("./improvement");
|
|
2
3
|
const { meteoMaxMA } = require("./meteo");
|
|
4
|
+
const { getCareerFromPlayer } = require("./race");
|
|
3
5
|
const { hasSkill, SKILL_NAMES } = require("./skill");
|
|
4
6
|
|
|
5
7
|
const PLAYER_CARAC = {
|
|
@@ -9,19 +11,97 @@ const PLAYER_CARAC = {
|
|
|
9
11
|
ST: "ST",
|
|
10
12
|
};
|
|
11
13
|
|
|
12
|
-
function
|
|
14
|
+
function getCareerBaseCarac(player, carac) {
|
|
15
|
+
const career = getCareerFromPlayer(player);
|
|
16
|
+
if (!career) {
|
|
17
|
+
throw new Error("No career for player " + player.id);
|
|
18
|
+
}
|
|
19
|
+
return career[carac];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getCareerBaseCaracLimit(player, value, carac) {
|
|
23
|
+
const base = getCareerBaseCarac(player, carac);
|
|
24
|
+
if (value > base + 2) {
|
|
25
|
+
value = base + 2;
|
|
26
|
+
}
|
|
27
|
+
if (value < base - 2) {
|
|
28
|
+
value = base - 2;
|
|
29
|
+
}
|
|
30
|
+
return value;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function getMaxCarac(player, carac, game) {
|
|
13
34
|
if (!player) {
|
|
14
35
|
return null;
|
|
15
36
|
}
|
|
37
|
+
if (carac === PLAYER_CARAC.AG) {
|
|
38
|
+
return getMaxAG(player, game);
|
|
39
|
+
} else if (carac === PLAYER_CARAC.MA) {
|
|
40
|
+
return getMaxMA(player, game);
|
|
41
|
+
} else if (carac === PLAYER_CARAC.AV) {
|
|
42
|
+
return getMaxAV(player, game);
|
|
43
|
+
} else if (carac === PLAYER_CARAC.ST) {
|
|
44
|
+
return getMaxST(player, game);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function getMaxCommun(player, carac, game) {
|
|
49
|
+
let c = player[carac];
|
|
50
|
+
if (!player.tempCarac) {
|
|
51
|
+
return c;
|
|
52
|
+
}
|
|
53
|
+
const obj = JSON.parse(player.tempCarac);
|
|
54
|
+
for (const value of Object.values(obj)) {
|
|
55
|
+
if (value.gainCarac === PLAYER_CARAC[carac]) {
|
|
56
|
+
c += 1;
|
|
57
|
+
}
|
|
58
|
+
if (value.loseCarac === PLAYER_CARAC[carac]) {
|
|
59
|
+
c -= 1;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
c = getCareerBaseCaracLimit(player, c, PLAYER_CARAC[carac]);
|
|
64
|
+
|
|
65
|
+
return c;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function getLimitedValue(c) {
|
|
69
|
+
if (c > 10) {
|
|
70
|
+
c = 10;
|
|
71
|
+
}
|
|
72
|
+
if (c < 0) {
|
|
73
|
+
c = 0;
|
|
74
|
+
}
|
|
75
|
+
return c;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function getMaxAV(player, game) {
|
|
79
|
+
let c = getMaxCommun(player, PLAYER_CARAC.AV, game);
|
|
80
|
+
return getLimitedValue(c);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function getMaxST(player, game) {
|
|
84
|
+
let c = getMaxCommun(player, PLAYER_CARAC.ST, game);
|
|
85
|
+
return getLimitedValue(c);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function getMaxAG(player, game) {
|
|
89
|
+
let c = getMaxCommun(player, PLAYER_CARAC.AG, game);
|
|
90
|
+
return getLimitedValue(c);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function getMaxMA(player, game) {
|
|
94
|
+
let c = getMaxCommun(player, PLAYER_CARAC.MA, game);
|
|
16
95
|
|
|
17
96
|
if (game) {
|
|
18
97
|
const maxMA = meteoMaxMA(game.meteo);
|
|
19
|
-
|
|
20
|
-
|
|
98
|
+
|
|
99
|
+
if (c > maxMA) {
|
|
100
|
+
c = maxMA;
|
|
21
101
|
}
|
|
22
102
|
}
|
|
23
103
|
|
|
24
|
-
return
|
|
104
|
+
return getLimitedValue(c);
|
|
25
105
|
}
|
|
26
106
|
|
|
27
107
|
function getMaxGfi(player) {
|
|
@@ -76,6 +156,6 @@ module.exports = {
|
|
|
76
156
|
gamesforAgingRoll,
|
|
77
157
|
getAgingBonus,
|
|
78
158
|
getMaxGfi,
|
|
79
|
-
|
|
159
|
+
getMaxCarac,
|
|
80
160
|
PLAYER_CARAC,
|
|
81
161
|
};
|
package/skill.js
CHANGED
|
@@ -65,6 +65,7 @@ const SKILL_NAMES = {
|
|
|
65
65
|
ON_THE_BALL: "on-the-ball",
|
|
66
66
|
PASS: "pass",
|
|
67
67
|
PILE_DRIVER: "pile-driver",
|
|
68
|
+
PLAGUE_RIDDEN: "plague-ridden",
|
|
68
69
|
PREHENSILE_TAIL: "prehensile-tail",
|
|
69
70
|
PROJECTILE_VOMIT: "projectile-vomit",
|
|
70
71
|
REALLY_STUPID: "really-stupid",
|
|
@@ -86,6 +87,7 @@ const SKILL_NAMES = {
|
|
|
86
87
|
SURE_FEET: "sure-feet",
|
|
87
88
|
SURE_HANDS: "sure-hands",
|
|
88
89
|
TACKLE: "tackle",
|
|
90
|
+
TAKE_ROOT: "take-root",
|
|
89
91
|
TENTACLES: "tentacles",
|
|
90
92
|
THICK_SKULL: "thick-skull",
|
|
91
93
|
THROW_TEAM_MATE: "throw-team-mate",
|
|
@@ -123,6 +125,7 @@ const SKILLS = {
|
|
|
123
125
|
[SKILL_NAMES.CLAW]: SKILL_TYPE.MUTATION,
|
|
124
126
|
[SKILL_NAMES.CLOUD_BURSTER]: SKILL_TYPE.PASSING,
|
|
125
127
|
[SKILL_NAMES.DAUNTLESS]: SKILL_TYPE.GENERAL,
|
|
128
|
+
[SKILL_NAMES.DECAY]: SKILL_TYPE.EXTRAORDINARY,
|
|
126
129
|
[SKILL_NAMES.DEFENSIVE]: SKILL_TYPE.AGILITY,
|
|
127
130
|
[SKILL_NAMES.DIRTY_PLAYER]: SKILL_TYPE.GENERAL,
|
|
128
131
|
[SKILL_NAMES.DISTURBING_PRESENCE]: SKILL_TYPE.MUTATION,
|
|
@@ -148,6 +151,7 @@ const SKILLS = {
|
|
|
148
151
|
[SKILL_NAMES.ON_THE_BALL]: SKILL_TYPE.PASSING,
|
|
149
152
|
[SKILL_NAMES.PASS]: SKILL_TYPE.PASSING,
|
|
150
153
|
[SKILL_NAMES.PILE_DRIVER]: SKILL_TYPE.STRENGTH,
|
|
154
|
+
[SKILL_NAMES.PLAGUE_RIDDEN]: SKILL_TYPE.EXTRAORDINARY,
|
|
151
155
|
[SKILL_NAMES.PREHENSILE_TAIL]: SKILL_TYPE.MUTATION,
|
|
152
156
|
[SKILL_NAMES.PROJECTILE_VOMIT]: SKILL_TYPE.EXTRAORDINARY,
|
|
153
157
|
[SKILL_NAMES.REALLY_STUPID]: SKILL_TYPE.EXTRAORDINARY,
|
|
@@ -169,6 +173,7 @@ const SKILLS = {
|
|
|
169
173
|
[SKILL_NAMES.SURE_FEET]: SKILL_TYPE.AGILITY,
|
|
170
174
|
[SKILL_NAMES.SURE_HANDS]: SKILL_TYPE.GENERAL,
|
|
171
175
|
[SKILL_NAMES.TACKLE]: SKILL_TYPE.GENERAL,
|
|
176
|
+
[SKILL_NAMES.TAKE_ROOT]: SKILL_TYPE.EXTRAORDINARY,
|
|
172
177
|
[SKILL_NAMES.TENTACLES]: SKILL_TYPE.MUTATION,
|
|
173
178
|
[SKILL_NAMES.THICK_SKULL]: SKILL_TYPE.STRENGTH,
|
|
174
179
|
[SKILL_NAMES.THROW_TEAM_MATE]: SKILL_TYPE.EXTRAORDINARY,
|