enefel 1.0.135 → 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 +4 -7
- package/index.js +11 -6
- package/item.js +38 -0
- package/package.json +1 -1
- package/player.js +85 -5
- package/skill.js +5 -2
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,
|
|
@@ -169,7 +166,7 @@ const CAREER = {
|
|
|
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,
|
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
|
@@ -24,7 +24,6 @@ const SKILL_DURATION = {
|
|
|
24
24
|
|
|
25
25
|
// Missing for races
|
|
26
26
|
const SKILL_NAMES = {
|
|
27
|
-
TAKE_ROOT: "take-root",
|
|
28
27
|
ACCURATE: "accurate",
|
|
29
28
|
ALWAYS_HUNGRY: "always-hungry",
|
|
30
29
|
ANIMAL_SAVAGERY: "animal-salvagery",
|
|
@@ -66,6 +65,7 @@ const SKILL_NAMES = {
|
|
|
66
65
|
ON_THE_BALL: "on-the-ball",
|
|
67
66
|
PASS: "pass",
|
|
68
67
|
PILE_DRIVER: "pile-driver",
|
|
68
|
+
PLAGUE_RIDDEN: "plague-ridden",
|
|
69
69
|
PREHENSILE_TAIL: "prehensile-tail",
|
|
70
70
|
PROJECTILE_VOMIT: "projectile-vomit",
|
|
71
71
|
REALLY_STUPID: "really-stupid",
|
|
@@ -87,6 +87,7 @@ const SKILL_NAMES = {
|
|
|
87
87
|
SURE_FEET: "sure-feet",
|
|
88
88
|
SURE_HANDS: "sure-hands",
|
|
89
89
|
TACKLE: "tackle",
|
|
90
|
+
TAKE_ROOT: "take-root",
|
|
90
91
|
TENTACLES: "tentacles",
|
|
91
92
|
THICK_SKULL: "thick-skull",
|
|
92
93
|
THROW_TEAM_MATE: "throw-team-mate",
|
|
@@ -109,7 +110,6 @@ const SKILL_TYPE = {
|
|
|
109
110
|
|
|
110
111
|
// TODO: add text translation when add a skill
|
|
111
112
|
const SKILLS = {
|
|
112
|
-
[SKILL_NAMES.TAKE_ROOT]: SKILL_TYPE.EXTRAORDINARY,
|
|
113
113
|
[SKILL_NAMES.ACCURATE]: SKILL_TYPE.PASSING,
|
|
114
114
|
[SKILL_NAMES.ALWAYS_HUNGRY]: SKILL_TYPE.EXTRAORDINARY,
|
|
115
115
|
[SKILL_NAMES.ANIMAL_SAVAGERY]: SKILL_TYPE.EXTRAORDINARY,
|
|
@@ -125,6 +125,7 @@ const SKILLS = {
|
|
|
125
125
|
[SKILL_NAMES.CLAW]: SKILL_TYPE.MUTATION,
|
|
126
126
|
[SKILL_NAMES.CLOUD_BURSTER]: SKILL_TYPE.PASSING,
|
|
127
127
|
[SKILL_NAMES.DAUNTLESS]: SKILL_TYPE.GENERAL,
|
|
128
|
+
[SKILL_NAMES.DECAY]: SKILL_TYPE.EXTRAORDINARY,
|
|
128
129
|
[SKILL_NAMES.DEFENSIVE]: SKILL_TYPE.AGILITY,
|
|
129
130
|
[SKILL_NAMES.DIRTY_PLAYER]: SKILL_TYPE.GENERAL,
|
|
130
131
|
[SKILL_NAMES.DISTURBING_PRESENCE]: SKILL_TYPE.MUTATION,
|
|
@@ -150,6 +151,7 @@ const SKILLS = {
|
|
|
150
151
|
[SKILL_NAMES.ON_THE_BALL]: SKILL_TYPE.PASSING,
|
|
151
152
|
[SKILL_NAMES.PASS]: SKILL_TYPE.PASSING,
|
|
152
153
|
[SKILL_NAMES.PILE_DRIVER]: SKILL_TYPE.STRENGTH,
|
|
154
|
+
[SKILL_NAMES.PLAGUE_RIDDEN]: SKILL_TYPE.EXTRAORDINARY,
|
|
153
155
|
[SKILL_NAMES.PREHENSILE_TAIL]: SKILL_TYPE.MUTATION,
|
|
154
156
|
[SKILL_NAMES.PROJECTILE_VOMIT]: SKILL_TYPE.EXTRAORDINARY,
|
|
155
157
|
[SKILL_NAMES.REALLY_STUPID]: SKILL_TYPE.EXTRAORDINARY,
|
|
@@ -171,6 +173,7 @@ const SKILLS = {
|
|
|
171
173
|
[SKILL_NAMES.SURE_FEET]: SKILL_TYPE.AGILITY,
|
|
172
174
|
[SKILL_NAMES.SURE_HANDS]: SKILL_TYPE.GENERAL,
|
|
173
175
|
[SKILL_NAMES.TACKLE]: SKILL_TYPE.GENERAL,
|
|
176
|
+
[SKILL_NAMES.TAKE_ROOT]: SKILL_TYPE.EXTRAORDINARY,
|
|
174
177
|
[SKILL_NAMES.TENTACLES]: SKILL_TYPE.MUTATION,
|
|
175
178
|
[SKILL_NAMES.THICK_SKULL]: SKILL_TYPE.STRENGTH,
|
|
176
179
|
[SKILL_NAMES.THROW_TEAM_MATE]: SKILL_TYPE.EXTRAORDINARY,
|