volleyballsimtypes 0.0.165 → 0.0.167
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/cjs/src/data/init-models.js +0 -21
- package/dist/cjs/src/data/models/index.d.ts +0 -2
- package/dist/cjs/src/data/models/index.js +0 -2
- package/dist/cjs/src/data/models/performance-stats.d.ts +28 -15
- package/dist/cjs/src/data/models/performance-stats.js +42 -7
- package/dist/cjs/src/data/models/player.d.ts +8 -30
- package/dist/cjs/src/data/models/player.js +6 -2
- package/dist/cjs/src/data/transformers/index.d.ts +0 -2
- package/dist/cjs/src/data/transformers/index.js +0 -2
- package/dist/cjs/src/data/transformers/performance-stats.js +25 -11
- package/dist/cjs/src/data/transformers/player.js +4 -3
- package/dist/cjs/src/index.d.ts +0 -1
- package/dist/cjs/src/index.js +0 -1
- package/dist/cjs/src/service/coach/formation.js +57 -57
- package/dist/cjs/src/service/player/index.d.ts +2 -1
- package/dist/cjs/src/service/player/index.js +2 -1
- package/dist/cjs/src/service/player/performance-stats.d.ts +5 -25
- package/dist/cjs/src/service/player/performance-stats.js +10 -29
- package/dist/cjs/src/service/player/player.d.ts +4 -5
- package/dist/cjs/src/service/player/player.js +21 -41
- package/dist/cjs/src/service/player/rarity.d.ts +4 -1
- package/dist/cjs/src/service/player/rarity.js +16 -14
- package/dist/cjs/src/service/player/role.d.ts +16 -15
- package/dist/cjs/src/service/player/role.js +43 -39
- package/dist/cjs/src/service/player/stats.d.ts +12 -0
- package/dist/cjs/src/service/player/stats.js +67 -0
- package/dist/cjs/src/service/player/trait.d.ts +12 -19
- package/dist/cjs/src/service/player/trait.js +49 -140
- package/dist/cjs/src/stat-config/roles.json +117 -0
- package/dist/cjs/src/stat-config/traits.json +58 -0
- package/dist/esm/src/data/init-models.js +1 -22
- package/dist/esm/src/data/models/index.d.ts +0 -2
- package/dist/esm/src/data/models/index.js +0 -2
- package/dist/esm/src/data/models/performance-stats.d.ts +28 -15
- package/dist/esm/src/data/models/performance-stats.js +42 -7
- package/dist/esm/src/data/models/player.d.ts +8 -30
- package/dist/esm/src/data/models/player.js +7 -3
- package/dist/esm/src/data/transformers/index.d.ts +0 -2
- package/dist/esm/src/data/transformers/index.js +0 -2
- package/dist/esm/src/data/transformers/performance-stats.js +25 -11
- package/dist/esm/src/data/transformers/player.js +5 -4
- package/dist/esm/src/index.d.ts +0 -1
- package/dist/esm/src/index.js +0 -1
- package/dist/esm/src/service/coach/formation.js +58 -58
- package/dist/esm/src/service/player/index.d.ts +2 -1
- package/dist/esm/src/service/player/index.js +2 -1
- package/dist/esm/src/service/player/performance-stats.d.ts +5 -25
- package/dist/esm/src/service/player/performance-stats.js +9 -28
- package/dist/esm/src/service/player/player.d.ts +4 -5
- package/dist/esm/src/service/player/player.js +21 -18
- package/dist/esm/src/service/player/rarity.d.ts +4 -1
- package/dist/esm/src/service/player/rarity.js +15 -13
- package/dist/esm/src/service/player/role.d.ts +16 -15
- package/dist/esm/src/service/player/role.js +37 -37
- package/dist/esm/src/service/player/stats.d.ts +12 -0
- package/dist/esm/src/service/player/stats.js +62 -0
- package/dist/esm/src/service/player/trait.d.ts +12 -19
- package/dist/esm/src/service/player/trait.js +46 -117
- package/dist/esm/src/stat-config/roles.json +117 -0
- package/dist/esm/src/stat-config/traits.json +58 -0
- package/package.json +1 -1
- package/dist/cjs/src/data/models/player-trait.d.ts +0 -23
- package/dist/cjs/src/data/models/player-trait.js +0 -42
- package/dist/cjs/src/data/models/trait.d.ts +0 -37
- package/dist/cjs/src/data/models/trait.js +0 -30
- package/dist/cjs/src/data/transformers/role.d.ts +0 -5
- package/dist/cjs/src/data/transformers/role.js +0 -25
- package/dist/cjs/src/data/transformers/trait.d.ts +0 -5
- package/dist/cjs/src/data/transformers/trait.js +0 -19
- package/dist/cjs/src/formula/event.formula.json +0 -125
- package/dist/cjs/src/formula/events.d.ts +0 -125
- package/dist/cjs/src/formula/events.js +0 -8
- package/dist/cjs/src/formula/index.d.ts +0 -3
- package/dist/cjs/src/formula/index.js +0 -19
- package/dist/cjs/src/formula/role.formula.json +0 -82
- package/dist/cjs/src/formula/roles.d.ts +0 -20
- package/dist/cjs/src/formula/roles.js +0 -9
- package/dist/cjs/src/formula/stat.formula.json +0 -66
- package/dist/cjs/src/formula/stats.d.ts +0 -10
- package/dist/cjs/src/formula/stats.js +0 -18
- package/dist/esm/src/data/models/player-trait.d.ts +0 -23
- package/dist/esm/src/data/models/player-trait.js +0 -38
- package/dist/esm/src/data/models/trait.d.ts +0 -37
- package/dist/esm/src/data/models/trait.js +0 -26
- package/dist/esm/src/data/transformers/role.d.ts +0 -5
- package/dist/esm/src/data/transformers/role.js +0 -21
- package/dist/esm/src/data/transformers/trait.d.ts +0 -5
- package/dist/esm/src/data/transformers/trait.js +0 -15
- package/dist/esm/src/formula/event.formula.json +0 -125
- package/dist/esm/src/formula/events.d.ts +0 -125
- package/dist/esm/src/formula/events.js +0 -2
- package/dist/esm/src/formula/index.d.ts +0 -3
- package/dist/esm/src/formula/index.js +0 -3
- package/dist/esm/src/formula/role.formula.json +0 -82
- package/dist/esm/src/formula/roles.d.ts +0 -20
- package/dist/esm/src/formula/roles.js +0 -3
- package/dist/esm/src/formula/stat.formula.json +0 -66
- package/dist/esm/src/formula/stats.d.ts +0 -10
- package/dist/esm/src/formula/stats.js +0 -11
|
@@ -1,38 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PerformanceStats = void 0;
|
|
4
|
-
|
|
3
|
+
exports.PerformanceStats = exports.performanceStatKeys = void 0;
|
|
4
|
+
exports.performanceStatKeys = ['setting', 'serve', 'spike', 'quick', 'power', 'awareness', 'attack', 'backAttack',
|
|
5
|
+
'reception', 'overhand', 'bump', 'block', 'read', 'commit', 'focus', 'defense', 'stamina', 'saving'];
|
|
5
6
|
class PerformanceStats {
|
|
6
7
|
constructor(opts) {
|
|
7
|
-
this
|
|
8
|
-
this.pass = opts.pass;
|
|
9
|
-
this.setting = opts.setting;
|
|
10
|
-
this.reception = opts.reception;
|
|
11
|
-
this.spike = opts.spike;
|
|
12
|
-
this.backAttack = opts.backAttack;
|
|
13
|
-
this.jump = opts.jump;
|
|
14
|
-
this.block = opts.block;
|
|
15
|
-
this.awareness = opts.awareness;
|
|
16
|
-
this.defense = opts.defense;
|
|
17
|
-
this.stamina = opts.stamina;
|
|
8
|
+
Object.assign(this, opts);
|
|
18
9
|
}
|
|
19
|
-
|
|
20
|
-
|
|
10
|
+
static fromAverage(avg) {
|
|
11
|
+
const opts = Object.fromEntries(exports.performanceStatKeys.map((key) => [key, avg]));
|
|
12
|
+
return new PerformanceStats(opts);
|
|
21
13
|
}
|
|
22
|
-
|
|
23
|
-
return
|
|
24
|
-
|
|
25
|
-
pass: average,
|
|
26
|
-
reception: average,
|
|
27
|
-
spike: average,
|
|
28
|
-
backAttack: average,
|
|
29
|
-
jump: average,
|
|
30
|
-
block: average,
|
|
31
|
-
awareness: average,
|
|
32
|
-
serve: average,
|
|
33
|
-
defense: average,
|
|
34
|
-
stamina: average
|
|
35
|
-
});
|
|
14
|
+
toString() {
|
|
15
|
+
return exports.performanceStatKeys.map((key) => `${key}: ${this[key]}`)
|
|
16
|
+
.join(', ');
|
|
36
17
|
}
|
|
37
18
|
}
|
|
38
19
|
exports.PerformanceStats = PerformanceStats;
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { PerformanceStats } from './performance-stats';
|
|
2
|
-
import { Role } from './role';
|
|
3
2
|
import { Trait } from './trait';
|
|
4
3
|
import { Country } from '../country';
|
|
5
|
-
import * as GeneralStat from '../../formula/stats';
|
|
6
4
|
import { Rarity } from './rarity';
|
|
5
|
+
import { Stats } from './stats';
|
|
6
|
+
import { Role } from './role';
|
|
7
7
|
export declare class Stat {
|
|
8
|
-
readonly name:
|
|
8
|
+
readonly name: Stats;
|
|
9
9
|
readonly value: number;
|
|
10
10
|
constructor({ name, value }: {
|
|
11
|
-
name:
|
|
11
|
+
name: Stats;
|
|
12
12
|
value: number;
|
|
13
13
|
});
|
|
14
14
|
toString(): string;
|
|
@@ -43,7 +43,6 @@ export declare class Player {
|
|
|
43
43
|
constructor({ id, name, country, stats, roles, traits, rarity }: PlayerParams);
|
|
44
44
|
static sortPlayers(roles: Role[]): (p1: Player, p2: Player) => number;
|
|
45
45
|
static compareStats(p1: Player, p2: Player): number;
|
|
46
|
-
canPlayLibero(): boolean;
|
|
47
46
|
toString(): string;
|
|
48
47
|
}
|
|
49
48
|
export {};
|
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
3
|
exports.Player = exports.Name = exports.Stat = void 0;
|
|
27
|
-
const role_1 = require("./role");
|
|
28
4
|
const utils_1 = require("../utils");
|
|
29
|
-
const
|
|
5
|
+
const stats_1 = require("./stats");
|
|
6
|
+
const role_1 = require("./role");
|
|
30
7
|
class Stat {
|
|
31
8
|
constructor({ name, value }) {
|
|
32
9
|
this.name = name;
|
|
@@ -57,16 +34,16 @@ class Player {
|
|
|
57
34
|
this.roles = roles;
|
|
58
35
|
this.traits = traits;
|
|
59
36
|
this.rarity = rarity;
|
|
60
|
-
this.generalStats =
|
|
37
|
+
this.generalStats = Object.values(stats_1.StatsEnum).map((stat) => ({
|
|
61
38
|
name: stat,
|
|
62
|
-
value:
|
|
39
|
+
value: (0, stats_1.calculateStatScore)(stats, stat)
|
|
63
40
|
}));
|
|
64
41
|
}
|
|
65
42
|
// Used as a base sorting function for players
|
|
66
43
|
static sortPlayers(roles) {
|
|
67
44
|
return (p1, p2) => roles.reduce((x, role) => {
|
|
68
|
-
const p2Score = role_1.
|
|
69
|
-
const p1Score = role_1.
|
|
45
|
+
const p2Score = (0, role_1.calculateRoleScore)(p2.stats, role);
|
|
46
|
+
const p1Score = (0, role_1.calculateRoleScore)(p1.stats, role);
|
|
70
47
|
return x + p2Score - p1Score;
|
|
71
48
|
}, 0);
|
|
72
49
|
}
|
|
@@ -74,17 +51,23 @@ class Player {
|
|
|
74
51
|
const compareFn = (acc, current) => {
|
|
75
52
|
let x = current.value;
|
|
76
53
|
switch (current.name) {
|
|
77
|
-
case
|
|
78
|
-
x *= 0.
|
|
54
|
+
case stats_1.StatsEnum.ATTACK:
|
|
55
|
+
x *= 0.19;
|
|
79
56
|
break;
|
|
80
|
-
case
|
|
81
|
-
x *= 0.
|
|
57
|
+
case stats_1.StatsEnum.SET:
|
|
58
|
+
x *= 0.19;
|
|
82
59
|
break;
|
|
83
|
-
case
|
|
84
|
-
x *= 0.
|
|
60
|
+
case stats_1.StatsEnum.RECEIVE:
|
|
61
|
+
x *= 0.19;
|
|
85
62
|
break;
|
|
86
|
-
case
|
|
87
|
-
x *= 0.
|
|
63
|
+
case stats_1.StatsEnum.BLOCK:
|
|
64
|
+
x *= 0.19;
|
|
65
|
+
break;
|
|
66
|
+
case stats_1.StatsEnum.SERVE:
|
|
67
|
+
x *= 0.19;
|
|
68
|
+
break;
|
|
69
|
+
case stats_1.StatsEnum.STAMINA:
|
|
70
|
+
x *= 0.05;
|
|
88
71
|
break;
|
|
89
72
|
default:
|
|
90
73
|
x *= 0;
|
|
@@ -95,9 +78,6 @@ class Player {
|
|
|
95
78
|
const s2 = p2.generalStats.reduce(compareFn, 0);
|
|
96
79
|
return s2 - s1;
|
|
97
80
|
}
|
|
98
|
-
canPlayLibero() {
|
|
99
|
-
return this.roles.includes(role_1.Role.LIBERO);
|
|
100
|
-
}
|
|
101
81
|
toString() {
|
|
102
82
|
return JSON.stringify({
|
|
103
83
|
id: this.id,
|
|
@@ -106,7 +86,7 @@ class Player {
|
|
|
106
86
|
stats: this.stats.toString(),
|
|
107
87
|
rarity: this.rarity,
|
|
108
88
|
roles: `[${this.roles.map(r => r.toString()).join(',')}]`,
|
|
109
|
-
traits: `[${this.traits.map(
|
|
89
|
+
traits: `[${this.traits.map(t => t.toString()).join(',')}]`,
|
|
110
90
|
generalStats: `[${this.generalStats.map(r => r.toString()).join(',')}]`
|
|
111
91
|
});
|
|
112
92
|
}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
1
|
+
import { EnumDataType } from 'sequelize';
|
|
2
|
+
export declare enum RarityEnum {
|
|
2
3
|
COMMON = "COMMON",
|
|
3
4
|
RARE = "RARE",
|
|
4
5
|
LEGENDARY = "LEGENDARY",
|
|
5
6
|
MYTHIC = "MYTHIC",
|
|
6
7
|
SPECIAL = "SPECIAL"
|
|
7
8
|
}
|
|
9
|
+
export type Rarity = RarityEnum.COMMON | RarityEnum.RARE | RarityEnum.LEGENDARY | RarityEnum.MYTHIC | RarityEnum.SPECIAL;
|
|
8
10
|
export declare const RarityRanges: {
|
|
9
11
|
COMMON: number[];
|
|
10
12
|
RARE: number[];
|
|
@@ -12,3 +14,4 @@ export declare const RarityRanges: {
|
|
|
12
14
|
MYTHIC: number[];
|
|
13
15
|
SPECIAL: number[];
|
|
14
16
|
};
|
|
17
|
+
export declare const RarityDataType: EnumDataType<RarityEnum>;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RarityRanges = exports.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
exports.RarityDataType = exports.RarityRanges = exports.RarityEnum = void 0;
|
|
4
|
+
const sequelize_1 = require("sequelize");
|
|
5
|
+
var RarityEnum;
|
|
6
|
+
(function (RarityEnum) {
|
|
7
|
+
RarityEnum["COMMON"] = "COMMON";
|
|
8
|
+
RarityEnum["RARE"] = "RARE";
|
|
9
|
+
RarityEnum["LEGENDARY"] = "LEGENDARY";
|
|
10
|
+
RarityEnum["MYTHIC"] = "MYTHIC";
|
|
11
|
+
RarityEnum["SPECIAL"] = "SPECIAL";
|
|
12
|
+
})(RarityEnum = exports.RarityEnum || (exports.RarityEnum = {}));
|
|
12
13
|
exports.RarityRanges = {
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
14
|
+
[RarityEnum.COMMON]: [0, 50],
|
|
15
|
+
[RarityEnum.RARE]: [51, 70],
|
|
16
|
+
[RarityEnum.LEGENDARY]: [71, 85],
|
|
17
|
+
[RarityEnum.MYTHIC]: [86, 98],
|
|
18
|
+
[RarityEnum.SPECIAL]: [99, 100]
|
|
18
19
|
};
|
|
20
|
+
exports.RarityDataType = sequelize_1.DataTypes.ENUM(...Object.values(RarityEnum));
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { PerformanceStats } from './performance-stats';
|
|
3
|
-
export declare
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private static readonly ROLES;
|
|
10
|
-
readonly name: Roles;
|
|
11
|
-
private constructor();
|
|
12
|
-
toString(): string;
|
|
13
|
-
static getRoles(): Role[];
|
|
14
|
-
static calculateScore(stats: PerformanceStats, role: Role): number;
|
|
15
|
-
static assignRoles(stats: PerformanceStats): Role[];
|
|
1
|
+
import { EnumDataType } from 'sequelize';
|
|
2
|
+
import { PerformanceStats, PerformanceStatsParams } from './performance-stats';
|
|
3
|
+
export declare enum RoleEnum {
|
|
4
|
+
SETTER = "SETTER",
|
|
5
|
+
LIBERO = "LIBERO",
|
|
6
|
+
OUTSIDE_HITTER = "OUTSIDE_HITTER",
|
|
7
|
+
OPPOSITE_HITTER = "OPPOSITE_HITTER",
|
|
8
|
+
MIDDLE_BLOCKER = "MIDDLE_BLOCKER"
|
|
16
9
|
}
|
|
10
|
+
export type Role = RoleEnum.SETTER | RoleEnum.LIBERO | RoleEnum.MIDDLE_BLOCKER | RoleEnum.OUTSIDE_HITTER | RoleEnum.OPPOSITE_HITTER;
|
|
11
|
+
export declare const RoleDataType: EnumDataType<Role>;
|
|
12
|
+
export interface RolesFormula {
|
|
13
|
+
role: Role;
|
|
14
|
+
weight: PerformanceStatsParams;
|
|
15
|
+
}
|
|
16
|
+
export declare function calculateRoleScore(stats: PerformanceStats, role: Role): number;
|
|
17
|
+
export declare function assignRoles(stats: PerformanceStats): Role[];
|
|
@@ -1,44 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
6
|
+
exports.assignRoles = exports.calculateRoleScore = exports.RoleDataType = exports.RoleEnum = void 0;
|
|
7
|
+
const sequelize_1 = require("sequelize");
|
|
8
|
+
const roles_json_1 = __importDefault(require("../../stat-config/roles.json"));
|
|
9
|
+
var RoleEnum;
|
|
10
|
+
(function (RoleEnum) {
|
|
11
|
+
RoleEnum["SETTER"] = "SETTER";
|
|
12
|
+
RoleEnum["LIBERO"] = "LIBERO";
|
|
13
|
+
RoleEnum["OUTSIDE_HITTER"] = "OUTSIDE_HITTER";
|
|
14
|
+
RoleEnum["OPPOSITE_HITTER"] = "OPPOSITE_HITTER";
|
|
15
|
+
RoleEnum["MIDDLE_BLOCKER"] = "MIDDLE_BLOCKER";
|
|
16
|
+
})(RoleEnum = exports.RoleEnum || (exports.RoleEnum = {}));
|
|
17
|
+
exports.RoleDataType = sequelize_1.DataTypes.ENUM(...Object.values(RoleEnum));
|
|
18
|
+
const rolesFormula = roles_json_1.default;
|
|
19
|
+
function calculateRoleScore(stats, role) {
|
|
20
|
+
const weights = rolesFormula.find(r => r.role === role);
|
|
21
|
+
if (weights == null)
|
|
22
|
+
throw new Error('COULD_NOT_FIND_ROLE_WEIGHT');
|
|
23
|
+
const score = Object.keys(weights.weight)
|
|
24
|
+
.reduce((score, key) => {
|
|
25
|
+
const stat = stats[key];
|
|
26
|
+
const weight = weights.weight[key];
|
|
27
|
+
return score + (stat * weight);
|
|
28
|
+
}, 0);
|
|
29
|
+
return Math.round(score);
|
|
30
|
+
}
|
|
31
|
+
exports.calculateRoleScore = calculateRoleScore;
|
|
32
|
+
function assignRoles(stats) {
|
|
33
|
+
const scores = Object.values(RoleEnum)
|
|
34
|
+
.map((role) => ({
|
|
35
|
+
role,
|
|
36
|
+
score: calculateRoleScore(stats, role)
|
|
37
|
+
}))
|
|
38
|
+
.sort((x, y) => y.score - x.score);
|
|
39
|
+
const out = [scores[0].role];
|
|
40
|
+
if (scores[1].score >= 75) {
|
|
41
|
+
out.push(scores[1].role);
|
|
22
42
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
role,
|
|
26
|
-
score: this.calculateScore(stats, role)
|
|
27
|
-
})).sort((x, y) => y.score - x.score);
|
|
28
|
-
const out = [scores[0].role];
|
|
29
|
-
if (scores[1].score >= 75) {
|
|
30
|
-
out.push(scores[1].role);
|
|
31
|
-
}
|
|
32
|
-
if (scores[2].score >= 85) {
|
|
33
|
-
out.push(scores[2].role);
|
|
34
|
-
}
|
|
35
|
-
return out;
|
|
43
|
+
if (scores[2].score >= 85) {
|
|
44
|
+
out.push(scores[2].role);
|
|
36
45
|
}
|
|
46
|
+
return out;
|
|
37
47
|
}
|
|
38
|
-
exports.
|
|
39
|
-
Role.SETTER = new Role('SETTER');
|
|
40
|
-
Role.LIBERO = new Role('LIBERO');
|
|
41
|
-
Role.OUTSIDE_HITTER = new Role('OUTSIDE_HITTER');
|
|
42
|
-
Role.OPPOSITE_HITTER = new Role('OPPOSITE_HITTER');
|
|
43
|
-
Role.MIDDLE_BLOCKER = new Role('MIDDLE_BLOCKER');
|
|
44
|
-
Role.ROLES = [Role.LIBERO, Role.SETTER, Role.OPPOSITE_HITTER, Role.OUTSIDE_HITTER, Role.MIDDLE_BLOCKER];
|
|
48
|
+
exports.assignRoles = assignRoles;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { PerformanceStats } from './performance-stats';
|
|
2
|
+
export declare enum StatsEnum {
|
|
3
|
+
ATTACK = "ATTACK",
|
|
4
|
+
SET = "SET",
|
|
5
|
+
RECEIVE = "RECEIVE",
|
|
6
|
+
SERVE = "SERVE",
|
|
7
|
+
BLOCK = "BLOCK",
|
|
8
|
+
STAMINA = "STAMINA"
|
|
9
|
+
}
|
|
10
|
+
export type Stats = StatsEnum.ATTACK | StatsEnum.SET | StatsEnum.RECEIVE | StatsEnum.SERVE | StatsEnum.BLOCK | StatsEnum.STAMINA;
|
|
11
|
+
export declare function calculateStatScore(performanceStats: PerformanceStats, statName: Stats): number;
|
|
12
|
+
export declare function getMultipliers(statName: Stats, performanceStats?: PerformanceStats): any;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMultipliers = exports.calculateStatScore = exports.StatsEnum = void 0;
|
|
4
|
+
var StatsEnum;
|
|
5
|
+
(function (StatsEnum) {
|
|
6
|
+
StatsEnum["ATTACK"] = "ATTACK";
|
|
7
|
+
StatsEnum["SET"] = "SET";
|
|
8
|
+
StatsEnum["RECEIVE"] = "RECEIVE";
|
|
9
|
+
StatsEnum["SERVE"] = "SERVE";
|
|
10
|
+
StatsEnum["BLOCK"] = "BLOCK";
|
|
11
|
+
StatsEnum["STAMINA"] = "STAMINA";
|
|
12
|
+
})(StatsEnum = exports.StatsEnum || (exports.StatsEnum = {}));
|
|
13
|
+
function calculateStatScore(performanceStats, statName) {
|
|
14
|
+
const multipliers = getMultipliers(statName, performanceStats);
|
|
15
|
+
const score = Object.entries(multipliers)
|
|
16
|
+
.reduce((total, [key, value]) => total + value * performanceStats[key], 0);
|
|
17
|
+
return Math.round(score);
|
|
18
|
+
}
|
|
19
|
+
exports.calculateStatScore = calculateStatScore;
|
|
20
|
+
function getMultipliers(statName, performanceStats) {
|
|
21
|
+
switch (statName) {
|
|
22
|
+
case StatsEnum.ATTACK:
|
|
23
|
+
return {
|
|
24
|
+
spike: 0.55,
|
|
25
|
+
backAttack: 0.1,
|
|
26
|
+
power: performanceStats == null ? 0.125 : performanceStats.power > performanceStats.quick ? 0.2 : 0.05,
|
|
27
|
+
quick: performanceStats == null ? 0.125 : performanceStats.quick > performanceStats.power ? 0.2 : 0.05,
|
|
28
|
+
awareness: 0.05,
|
|
29
|
+
attack: 0.05
|
|
30
|
+
};
|
|
31
|
+
case StatsEnum.SET:
|
|
32
|
+
return {
|
|
33
|
+
setting: 0.7,
|
|
34
|
+
overhand: 0.1,
|
|
35
|
+
bump: 0.05,
|
|
36
|
+
awareness: 0.075,
|
|
37
|
+
attack: 0.075
|
|
38
|
+
};
|
|
39
|
+
case StatsEnum.RECEIVE:
|
|
40
|
+
return {
|
|
41
|
+
reception: 0.75,
|
|
42
|
+
overhand: 0.025,
|
|
43
|
+
bump: 0.15,
|
|
44
|
+
focus: 0.025,
|
|
45
|
+
defense: 0.05
|
|
46
|
+
};
|
|
47
|
+
case StatsEnum.SERVE:
|
|
48
|
+
return {
|
|
49
|
+
serve: 0.85,
|
|
50
|
+
awareness: 0.075,
|
|
51
|
+
attack: 0.075
|
|
52
|
+
};
|
|
53
|
+
case StatsEnum.BLOCK:
|
|
54
|
+
return {
|
|
55
|
+
block: 0.65,
|
|
56
|
+
read: performanceStats == null ? 0.125 : performanceStats.read > performanceStats.commit ? 0.2 : 0.05,
|
|
57
|
+
commit: performanceStats == null ? 0.125 : performanceStats.commit > performanceStats.read ? 0.2 : 0.05,
|
|
58
|
+
focus: 0.05,
|
|
59
|
+
defense: 0.05
|
|
60
|
+
};
|
|
61
|
+
case StatsEnum.STAMINA:
|
|
62
|
+
return { stamina: 1 };
|
|
63
|
+
default:
|
|
64
|
+
throw new Error('INVALID_STAT');
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.getMultipliers = getMultipliers;
|
|
@@ -1,22 +1,15 @@
|
|
|
1
|
-
import * as GeneralStat from '../../formula/stats';
|
|
2
1
|
import { PerformanceStats } from './performance-stats';
|
|
3
2
|
import { Rarity } from './rarity';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
readonly modifier: number;
|
|
14
|
-
readonly chance: number;
|
|
15
|
-
readonly statThreshold: number;
|
|
16
|
-
readonly stat: GeneralStat.Stats;
|
|
17
|
-
readonly weight: number;
|
|
18
|
-
private constructor();
|
|
19
|
-
static getTraits(): Trait[];
|
|
20
|
-
static assignTraits(performanceStats: PerformanceStats, rarity: Rarity): Trait[];
|
|
21
|
-
toString(): string;
|
|
3
|
+
import { EnumDataType } from 'sequelize';
|
|
4
|
+
export declare enum TraitEnum {
|
|
5
|
+
MASTER_MIND = "MASTER_MIND",
|
|
6
|
+
MOVING_WALL = "MOVING_WALL",
|
|
7
|
+
MARKSMAN = "MARKSMAN",
|
|
8
|
+
METEOR_SERVE = "METEOR_SERVE",
|
|
9
|
+
VIGOROUS = "VIGOROUS",
|
|
10
|
+
GUARDIAN = "GUARDIAN",
|
|
11
|
+
FLOAT_SERVE = "FLOAT_SERVE"
|
|
22
12
|
}
|
|
13
|
+
export type Trait = TraitEnum.FLOAT_SERVE | TraitEnum.GUARDIAN | TraitEnum.MASTER_MIND | TraitEnum.MOVING_WALL | TraitEnum.MARKSMAN | TraitEnum.METEOR_SERVE | TraitEnum.VIGOROUS;
|
|
14
|
+
export declare const TraitDataType: EnumDataType<Trait>;
|
|
15
|
+
export declare function assignTraits(performanceStats: PerformanceStats, rarity: Rarity): Trait[];
|