volleyballsimtypes 0.0.166 → 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 +2 -0
- package/dist/cjs/src/data/models/performance-stats.js +5 -0
- 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 +4 -2
- 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 +1 -1
- package/dist/cjs/src/service/player/performance-stats.js +1 -1
- 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/{formula → service/player}/stats.js +18 -10
- 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/{formula/role.formula.json → stat-config/roles.json} +10 -5
- 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 +2 -0
- package/dist/esm/src/data/models/performance-stats.js +5 -0
- 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 +4 -2
- 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 +1 -1
- package/dist/esm/src/service/player/performance-stats.js +1 -1
- 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/{formula → service/player}/stats.js +16 -8
- 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/{formula/role.formula.json → stat-config/roles.json} +10 -5
- 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/index.d.ts +0 -2
- package/dist/cjs/src/formula/index.js +0 -18
- package/dist/cjs/src/formula/roles.d.ts +0 -9
- package/dist/cjs/src/formula/roles.js +0 -9
- package/dist/cjs/src/formula/stats.d.ts +0 -6
- 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/index.d.ts +0 -2
- package/dist/esm/src/formula/index.js +0 -2
- package/dist/esm/src/formula/roles.d.ts +0 -9
- package/dist/esm/src/formula/roles.js +0 -3
- package/dist/esm/src/formula/stats.d.ts +0 -6
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { DataTypes } from 'sequelize';
|
|
2
|
+
import roles from '../../stat-config/roles.json';
|
|
3
|
+
export var RoleEnum;
|
|
4
|
+
(function (RoleEnum) {
|
|
5
|
+
RoleEnum["SETTER"] = "SETTER";
|
|
6
|
+
RoleEnum["LIBERO"] = "LIBERO";
|
|
7
|
+
RoleEnum["OUTSIDE_HITTER"] = "OUTSIDE_HITTER";
|
|
8
|
+
RoleEnum["OPPOSITE_HITTER"] = "OPPOSITE_HITTER";
|
|
9
|
+
RoleEnum["MIDDLE_BLOCKER"] = "MIDDLE_BLOCKER";
|
|
10
|
+
})(RoleEnum || (RoleEnum = {}));
|
|
11
|
+
export const RoleDataType = DataTypes.ENUM(...Object.values(RoleEnum));
|
|
12
|
+
const rolesFormula = roles;
|
|
13
|
+
export function calculateRoleScore(stats, role) {
|
|
14
|
+
const weights = rolesFormula.find(r => r.role === role);
|
|
15
|
+
if (weights == null)
|
|
16
|
+
throw new Error('COULD_NOT_FIND_ROLE_WEIGHT');
|
|
17
|
+
const score = Object.keys(weights.weight)
|
|
18
|
+
.reduce((score, key) => {
|
|
19
|
+
const stat = stats[key];
|
|
20
|
+
const weight = weights.weight[key];
|
|
21
|
+
return score + (stat * weight);
|
|
22
|
+
}, 0);
|
|
23
|
+
return Math.round(score);
|
|
24
|
+
}
|
|
25
|
+
export function assignRoles(stats) {
|
|
26
|
+
const scores = Object.values(RoleEnum)
|
|
27
|
+
.map((role) => ({
|
|
28
|
+
role,
|
|
29
|
+
score: calculateRoleScore(stats, role)
|
|
30
|
+
}))
|
|
31
|
+
.sort((x, y) => y.score - x.score);
|
|
32
|
+
const out = [scores[0].role];
|
|
33
|
+
if (scores[1].score >= 75) {
|
|
34
|
+
out.push(scores[1].role);
|
|
19
35
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
role,
|
|
23
|
-
score: this.calculateScore(stats, role)
|
|
24
|
-
})).sort((x, y) => y.score - x.score);
|
|
25
|
-
const out = [scores[0].role];
|
|
26
|
-
if (scores[1].score >= 75) {
|
|
27
|
-
out.push(scores[1].role);
|
|
28
|
-
}
|
|
29
|
-
if (scores[2].score >= 85) {
|
|
30
|
-
out.push(scores[2].role);
|
|
31
|
-
}
|
|
32
|
-
return out;
|
|
36
|
+
if (scores[2].score >= 85) {
|
|
37
|
+
out.push(scores[2].role);
|
|
33
38
|
}
|
|
39
|
+
return out;
|
|
34
40
|
}
|
|
35
|
-
Role.SETTER = new Role('SETTER');
|
|
36
|
-
Role.LIBERO = new Role('LIBERO');
|
|
37
|
-
Role.OUTSIDE_HITTER = new Role('OUTSIDE_HITTER');
|
|
38
|
-
Role.OPPOSITE_HITTER = new Role('OPPOSITE_HITTER');
|
|
39
|
-
Role.MIDDLE_BLOCKER = new Role('MIDDLE_BLOCKER');
|
|
40
|
-
Role.ROLES = [Role.LIBERO, Role.SETTER, Role.OPPOSITE_HITTER, Role.OUTSIDE_HITTER, Role.MIDDLE_BLOCKER];
|
|
@@ -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;
|
|
@@ -1,5 +1,13 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
1
|
+
export var StatsEnum;
|
|
2
|
+
(function (StatsEnum) {
|
|
3
|
+
StatsEnum["ATTACK"] = "ATTACK";
|
|
4
|
+
StatsEnum["SET"] = "SET";
|
|
5
|
+
StatsEnum["RECEIVE"] = "RECEIVE";
|
|
6
|
+
StatsEnum["SERVE"] = "SERVE";
|
|
7
|
+
StatsEnum["BLOCK"] = "BLOCK";
|
|
8
|
+
StatsEnum["STAMINA"] = "STAMINA";
|
|
9
|
+
})(StatsEnum || (StatsEnum = {}));
|
|
10
|
+
export function calculateStatScore(performanceStats, statName) {
|
|
3
11
|
const multipliers = getMultipliers(statName, performanceStats);
|
|
4
12
|
const score = Object.entries(multipliers)
|
|
5
13
|
.reduce((total, [key, value]) => total + value * performanceStats[key], 0);
|
|
@@ -7,7 +15,7 @@ export function calculateScore(performanceStats, statName) {
|
|
|
7
15
|
}
|
|
8
16
|
export function getMultipliers(statName, performanceStats) {
|
|
9
17
|
switch (statName) {
|
|
10
|
-
case
|
|
18
|
+
case StatsEnum.ATTACK:
|
|
11
19
|
return {
|
|
12
20
|
spike: 0.55,
|
|
13
21
|
backAttack: 0.1,
|
|
@@ -16,7 +24,7 @@ export function getMultipliers(statName, performanceStats) {
|
|
|
16
24
|
awareness: 0.05,
|
|
17
25
|
attack: 0.05
|
|
18
26
|
};
|
|
19
|
-
case
|
|
27
|
+
case StatsEnum.SET:
|
|
20
28
|
return {
|
|
21
29
|
setting: 0.7,
|
|
22
30
|
overhand: 0.1,
|
|
@@ -24,7 +32,7 @@ export function getMultipliers(statName, performanceStats) {
|
|
|
24
32
|
awareness: 0.075,
|
|
25
33
|
attack: 0.075
|
|
26
34
|
};
|
|
27
|
-
case
|
|
35
|
+
case StatsEnum.RECEIVE:
|
|
28
36
|
return {
|
|
29
37
|
reception: 0.75,
|
|
30
38
|
overhand: 0.025,
|
|
@@ -32,13 +40,13 @@ export function getMultipliers(statName, performanceStats) {
|
|
|
32
40
|
focus: 0.025,
|
|
33
41
|
defense: 0.05
|
|
34
42
|
};
|
|
35
|
-
case
|
|
43
|
+
case StatsEnum.SERVE:
|
|
36
44
|
return {
|
|
37
45
|
serve: 0.85,
|
|
38
46
|
awareness: 0.075,
|
|
39
47
|
attack: 0.075
|
|
40
48
|
};
|
|
41
|
-
case
|
|
49
|
+
case StatsEnum.BLOCK:
|
|
42
50
|
return {
|
|
43
51
|
block: 0.65,
|
|
44
52
|
read: performanceStats == null ? 0.125 : performanceStats.read > performanceStats.commit ? 0.2 : 0.05,
|
|
@@ -46,7 +54,7 @@ export function getMultipliers(statName, performanceStats) {
|
|
|
46
54
|
focus: 0.05,
|
|
47
55
|
defense: 0.05
|
|
48
56
|
};
|
|
49
|
-
case
|
|
57
|
+
case StatsEnum.STAMINA:
|
|
50
58
|
return { stamina: 1 };
|
|
51
59
|
default:
|
|
52
60
|
throw new Error('INVALID_STAT');
|
|
@@ -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[];
|
|
@@ -1,121 +1,50 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Rarity } from './rarity';
|
|
1
|
+
import { RarityEnum } from './rarity';
|
|
3
2
|
import { randomInt } from 'node:crypto';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
traitCount = randomInt(0, 1);
|
|
26
|
-
break;
|
|
27
|
-
}
|
|
28
|
-
case Rarity.LEGENDARY: {
|
|
29
|
-
traitCount = randomInt(0, 2);
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
case Rarity.MYTHIC: {
|
|
33
|
-
traitCount = randomInt(1, 3);
|
|
34
|
-
break;
|
|
35
|
-
}
|
|
36
|
-
case Rarity.SPECIAL: {
|
|
37
|
-
traitCount = randomInt(2, 3);
|
|
38
|
-
break;
|
|
39
|
-
}
|
|
40
|
-
default:
|
|
41
|
-
throw new Error('INVALID_RARITY');
|
|
3
|
+
import rawTraits from '../../stat-config/traits.json';
|
|
4
|
+
import { DataTypes } from 'sequelize';
|
|
5
|
+
import { calculateStatScore } from './stats';
|
|
6
|
+
const traits = rawTraits;
|
|
7
|
+
export var TraitEnum;
|
|
8
|
+
(function (TraitEnum) {
|
|
9
|
+
TraitEnum["MASTER_MIND"] = "MASTER_MIND";
|
|
10
|
+
TraitEnum["MOVING_WALL"] = "MOVING_WALL";
|
|
11
|
+
TraitEnum["MARKSMAN"] = "MARKSMAN";
|
|
12
|
+
TraitEnum["METEOR_SERVE"] = "METEOR_SERVE";
|
|
13
|
+
TraitEnum["VIGOROUS"] = "VIGOROUS";
|
|
14
|
+
TraitEnum["GUARDIAN"] = "GUARDIAN";
|
|
15
|
+
TraitEnum["FLOAT_SERVE"] = "FLOAT_SERVE";
|
|
16
|
+
})(TraitEnum || (TraitEnum = {}));
|
|
17
|
+
export const TraitDataType = DataTypes.ENUM(...Object.values(TraitEnum));
|
|
18
|
+
export function assignTraits(performanceStats, rarity) {
|
|
19
|
+
let traitCount;
|
|
20
|
+
switch (rarity) {
|
|
21
|
+
case RarityEnum.COMMON: {
|
|
22
|
+
traitCount = 0;
|
|
23
|
+
break;
|
|
42
24
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
}
|
|
25
|
+
case RarityEnum.RARE: {
|
|
26
|
+
traitCount = randomInt(0, 1);
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
case RarityEnum.LEGENDARY: {
|
|
30
|
+
traitCount = randomInt(0, 2);
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
33
|
+
case RarityEnum.MYTHIC: {
|
|
34
|
+
traitCount = randomInt(1, 3);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
case RarityEnum.SPECIAL: {
|
|
38
|
+
traitCount = randomInt(2, 3);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
default:
|
|
42
|
+
throw new Error('INVALID_RARITY');
|
|
59
43
|
}
|
|
44
|
+
if (traitCount < 1)
|
|
45
|
+
return [];
|
|
46
|
+
return traits.filter((trait) => calculateStatScore(performanceStats, trait.stat) >= trait.statThreshold)
|
|
47
|
+
.sort((t1, t2) => t2.weight - t1.weight)
|
|
48
|
+
.map((trait) => trait.name)
|
|
49
|
+
.slice(0, traitCount);
|
|
60
50
|
}
|
|
61
|
-
// A Setter gets a bonus to their score, and the receiving attacker gets a bonus as well.
|
|
62
|
-
// Stacks with attacker bonus
|
|
63
|
-
Trait.MASTER_MIND = new Trait({
|
|
64
|
-
id: '0117a315-a743-43e3-9ec2-ad5cf700ef08',
|
|
65
|
-
name: 'Master Mind',
|
|
66
|
-
modifier: 1.1,
|
|
67
|
-
chance: 0.2,
|
|
68
|
-
statThreshold: 80,
|
|
69
|
-
stat: 'ATTACK',
|
|
70
|
-
weight: 10
|
|
71
|
-
});
|
|
72
|
-
// Will always participate in blocking regardless of chance and adds
|
|
73
|
-
Trait.MOVING_WALL = new Trait({
|
|
74
|
-
id: '304c53f6-5e7a-44d3-9625-f10d8109421a',
|
|
75
|
-
name: 'Moving Wall',
|
|
76
|
-
modifier: 1.1,
|
|
77
|
-
chance: 1,
|
|
78
|
-
statThreshold: 75,
|
|
79
|
-
stat: 'DEFENSE',
|
|
80
|
-
weight: 5
|
|
81
|
-
});
|
|
82
|
-
// On attack, will always pick the worst receiver and adds a 10% to score
|
|
83
|
-
Trait.MARKSMAN = new Trait({
|
|
84
|
-
id: 'ace3458e-69ab-487c-a9c0-d656f705d8dd',
|
|
85
|
-
name: 'Marksman',
|
|
86
|
-
modifier: 1.05,
|
|
87
|
-
chance: 0.3,
|
|
88
|
-
statThreshold: 75,
|
|
89
|
-
stat: 'ATTACK',
|
|
90
|
-
weight: 5
|
|
91
|
-
});
|
|
92
|
-
// Increases the score of the serve by 10% when serve type is Jumping.
|
|
93
|
-
Trait.METEOR_SERVE = new Trait({
|
|
94
|
-
id: 'c929a79d-5866-40d6-bbd6-b0b67a929c4c',
|
|
95
|
-
name: 'Meteor Serve',
|
|
96
|
-
modifier: 1.1,
|
|
97
|
-
chance: 0.1,
|
|
98
|
-
statThreshold: 75,
|
|
99
|
-
stat: 'SERVE',
|
|
100
|
-
weight: 10
|
|
101
|
-
});
|
|
102
|
-
// Has a 50% chance of taking an action without decreasing energy.
|
|
103
|
-
Trait.VIGOROUS = new Trait({
|
|
104
|
-
id: 'f9599b87-b3b2-49ce-8224-470f6fe6ed64',
|
|
105
|
-
name: 'Vigorous',
|
|
106
|
-
modifier: 1,
|
|
107
|
-
statThreshold: 60,
|
|
108
|
-
chance: 0.5,
|
|
109
|
-
stat: 'PHYSICAL',
|
|
110
|
-
weight: 1
|
|
111
|
-
});
|
|
112
|
-
// Takes place of the receiver and increases reception score by 15%, guaranteeing success. Can only trigger in back-row.
|
|
113
|
-
Trait.GUARDIAN = new Trait({
|
|
114
|
-
id: 'c3291953-9256-4559-b5a9-955ccb8f9a6f',
|
|
115
|
-
name: 'Guardian',
|
|
116
|
-
chance: 0.2,
|
|
117
|
-
statThreshold: 75,
|
|
118
|
-
modifier: 1.15,
|
|
119
|
-
stat: 'DEFENSE',
|
|
120
|
-
weight: 10
|
|
121
|
-
});
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"read": 0,
|
|
19
19
|
"commit": 0,
|
|
20
20
|
"focus": 0,
|
|
21
|
-
"defense": 0
|
|
21
|
+
"defense": 0,
|
|
22
|
+
"saving": 0
|
|
22
23
|
}
|
|
23
24
|
},
|
|
24
25
|
{
|
|
@@ -40,7 +41,8 @@
|
|
|
40
41
|
"read": 0,
|
|
41
42
|
"commit": 0,
|
|
42
43
|
"focus": 0,
|
|
43
|
-
"defense": 0
|
|
44
|
+
"defense": 0,
|
|
45
|
+
"saving": 0
|
|
44
46
|
}
|
|
45
47
|
},
|
|
46
48
|
{
|
|
@@ -62,7 +64,8 @@
|
|
|
62
64
|
"read": 0,
|
|
63
65
|
"commit": 0,
|
|
64
66
|
"focus": 0,
|
|
65
|
-
"defense": 0
|
|
67
|
+
"defense": 0,
|
|
68
|
+
"saving": 0
|
|
66
69
|
}
|
|
67
70
|
},
|
|
68
71
|
{
|
|
@@ -84,7 +87,8 @@
|
|
|
84
87
|
"read": 0,
|
|
85
88
|
"commit": 0,
|
|
86
89
|
"focus": 0,
|
|
87
|
-
"defense": 0
|
|
90
|
+
"defense": 0,
|
|
91
|
+
"saving": 0
|
|
88
92
|
}
|
|
89
93
|
},
|
|
90
94
|
{
|
|
@@ -106,7 +110,8 @@
|
|
|
106
110
|
"read": 0,
|
|
107
111
|
"commit": 0,
|
|
108
112
|
"focus": 0,
|
|
109
|
-
"defense": 0
|
|
113
|
+
"defense": 0,
|
|
114
|
+
"saving": 0
|
|
110
115
|
}
|
|
111
116
|
}
|
|
112
117
|
]
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"name": "MASTER_MIND",
|
|
4
|
+
"modifier": 1.1,
|
|
5
|
+
"chance": 0.2,
|
|
6
|
+
"statThreshold": 80,
|
|
7
|
+
"stat": "SET",
|
|
8
|
+
"weight": 10
|
|
9
|
+
},
|
|
10
|
+
{
|
|
11
|
+
"name": "MOVING_WALL",
|
|
12
|
+
"modifier": 1.1,
|
|
13
|
+
"chance": 1,
|
|
14
|
+
"statThreshold": 75,
|
|
15
|
+
"stat": "BLOCK",
|
|
16
|
+
"weight": 5
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "MARKSMAN",
|
|
20
|
+
"modifier": 1.05,
|
|
21
|
+
"chance": 0.3,
|
|
22
|
+
"statThreshold": 75,
|
|
23
|
+
"stat": "ATTACK",
|
|
24
|
+
"weight": 5
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"name": "METEOR_SERVE",
|
|
28
|
+
"modifier": 1.1,
|
|
29
|
+
"chance": 0.1,
|
|
30
|
+
"statThreshold": 75,
|
|
31
|
+
"stat": "SERVE",
|
|
32
|
+
"weight": 10
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"name": "FLOAT_SERVE",
|
|
36
|
+
"modifier": 1,
|
|
37
|
+
"chance": 0.5,
|
|
38
|
+
"statThreshold": 60,
|
|
39
|
+
"stat": "SERVE",
|
|
40
|
+
"weight": 10
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
"name": "VIGOROUS",
|
|
44
|
+
"modifier": 1,
|
|
45
|
+
"statThreshold": 60,
|
|
46
|
+
"chance": 0.5,
|
|
47
|
+
"stat": "STAMINA",
|
|
48
|
+
"weight": 1
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"name": "GUARDIAN",
|
|
52
|
+
"chance": 0.2,
|
|
53
|
+
"statThreshold": 75,
|
|
54
|
+
"modifier": 1.15,
|
|
55
|
+
"stat": "RECEIVE",
|
|
56
|
+
"weight": 10
|
|
57
|
+
}
|
|
58
|
+
]
|
package/package.json
CHANGED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import * as Sequelize from 'sequelize';
|
|
2
|
-
import { Model } from 'sequelize';
|
|
3
|
-
import { PlayerId, PlayerModel, TraitId, TraitModel } from '.';
|
|
4
|
-
export interface PlayerTraitAttributes {
|
|
5
|
-
player_id: string;
|
|
6
|
-
trait_id: string;
|
|
7
|
-
}
|
|
8
|
-
export type PlayerTraitPk = 'player_id' | 'trait_id';
|
|
9
|
-
export type PlayerTraitId = PlayerTraitModel[PlayerTraitPk];
|
|
10
|
-
export type PlayerTraitCreationAttributes = PlayerTraitAttributes;
|
|
11
|
-
export declare class PlayerTraitModel extends Model<PlayerTraitAttributes, PlayerTraitCreationAttributes> implements PlayerTraitAttributes {
|
|
12
|
-
player_id: string;
|
|
13
|
-
trait_id: string;
|
|
14
|
-
player: PlayerModel;
|
|
15
|
-
getPlayer: Sequelize.BelongsToGetAssociationMixin<PlayerModel>;
|
|
16
|
-
setPlayer: Sequelize.BelongsToSetAssociationMixin<PlayerModel, PlayerId>;
|
|
17
|
-
createPlayer: Sequelize.BelongsToCreateAssociationMixin<PlayerModel>;
|
|
18
|
-
trait: TraitModel;
|
|
19
|
-
getTrait: Sequelize.BelongsToGetAssociationMixin<TraitModel>;
|
|
20
|
-
setTrait: Sequelize.BelongsToSetAssociationMixin<TraitModel, TraitId>;
|
|
21
|
-
createTrait: Sequelize.BelongsToCreateAssociationMixin<TraitModel>;
|
|
22
|
-
static initModel(sequelize: Sequelize.Sequelize): typeof PlayerTraitModel;
|
|
23
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PlayerTraitModel = void 0;
|
|
4
|
-
const sequelize_1 = require("sequelize");
|
|
5
|
-
class PlayerTraitModel extends sequelize_1.Model {
|
|
6
|
-
static initModel(sequelize) {
|
|
7
|
-
return PlayerTraitModel.init({
|
|
8
|
-
player_id: {
|
|
9
|
-
type: sequelize_1.DataTypes.UUID,
|
|
10
|
-
allowNull: false,
|
|
11
|
-
primaryKey: true,
|
|
12
|
-
references: {
|
|
13
|
-
model: 'Player',
|
|
14
|
-
key: 'player_id'
|
|
15
|
-
}
|
|
16
|
-
},
|
|
17
|
-
trait_id: {
|
|
18
|
-
type: sequelize_1.DataTypes.UUID,
|
|
19
|
-
allowNull: false,
|
|
20
|
-
primaryKey: true,
|
|
21
|
-
references: {
|
|
22
|
-
model: 'Trait',
|
|
23
|
-
key: 'trait_id'
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}, {
|
|
27
|
-
sequelize,
|
|
28
|
-
tableName: 'PlayerTrait',
|
|
29
|
-
schema: 'public',
|
|
30
|
-
timestamps: false,
|
|
31
|
-
indexes: [{
|
|
32
|
-
name: 'playertrait_pk',
|
|
33
|
-
unique: true,
|
|
34
|
-
fields: [
|
|
35
|
-
{ name: 'trait_id' },
|
|
36
|
-
{ name: 'player_id' }
|
|
37
|
-
]
|
|
38
|
-
}]
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.PlayerTraitModel = PlayerTraitModel;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as Sequelize from 'sequelize';
|
|
2
|
-
import { Model } from 'sequelize';
|
|
3
|
-
import { PlayerId, PlayerModel, PlayerTraitId, PlayerTraitModel } from '.';
|
|
4
|
-
export interface TraitAttributes {
|
|
5
|
-
trait_id: string;
|
|
6
|
-
name: string;
|
|
7
|
-
}
|
|
8
|
-
export type TraitPk = 'trait_id';
|
|
9
|
-
export type TraitId = TraitModel[TraitPk];
|
|
10
|
-
export type TraitCreationAttributes = TraitAttributes;
|
|
11
|
-
export declare class TraitModel extends Model<TraitAttributes, TraitCreationAttributes> implements TraitAttributes {
|
|
12
|
-
trait_id: string;
|
|
13
|
-
name: string;
|
|
14
|
-
Players: PlayerModel[];
|
|
15
|
-
getPlayers: Sequelize.BelongsToManyGetAssociationsMixin<PlayerModel>;
|
|
16
|
-
setPlayers: Sequelize.BelongsToManySetAssociationsMixin<PlayerModel, PlayerId>;
|
|
17
|
-
addPlayer: Sequelize.BelongsToManyAddAssociationMixin<PlayerModel, PlayerId>;
|
|
18
|
-
addPlayers: Sequelize.BelongsToManyAddAssociationsMixin<PlayerModel, PlayerId>;
|
|
19
|
-
createPlayer: Sequelize.BelongsToManyCreateAssociationMixin<PlayerModel>;
|
|
20
|
-
removePlayer: Sequelize.BelongsToManyRemoveAssociationMixin<PlayerModel, PlayerId>;
|
|
21
|
-
removePlayers: Sequelize.BelongsToManyRemoveAssociationsMixin<PlayerModel, PlayerId>;
|
|
22
|
-
hasPlayer: Sequelize.BelongsToManyHasAssociationMixin<PlayerModel, PlayerId>;
|
|
23
|
-
hasPlayers: Sequelize.BelongsToManyHasAssociationsMixin<PlayerModel, PlayerId>;
|
|
24
|
-
countPlayers: Sequelize.BelongsToManyCountAssociationsMixin;
|
|
25
|
-
PlayerTraits: PlayerTraitModel[];
|
|
26
|
-
getPlayerTraits: Sequelize.HasManyGetAssociationsMixin<PlayerTraitModel>;
|
|
27
|
-
setPlayerTraits: Sequelize.HasManySetAssociationsMixin<PlayerTraitModel, PlayerTraitId>;
|
|
28
|
-
addPlayerTrait: Sequelize.HasManyAddAssociationMixin<PlayerTraitModel, PlayerTraitId>;
|
|
29
|
-
addPlayerTraits: Sequelize.HasManyAddAssociationsMixin<PlayerTraitModel, PlayerTraitId>;
|
|
30
|
-
createPlayerTrait: Sequelize.HasManyCreateAssociationMixin<PlayerTraitModel>;
|
|
31
|
-
removePlayerTrait: Sequelize.HasManyRemoveAssociationMixin<PlayerTraitModel, PlayerTraitId>;
|
|
32
|
-
removePlayerTraits: Sequelize.HasManyRemoveAssociationsMixin<PlayerTraitModel, PlayerTraitId>;
|
|
33
|
-
hasPlayerTrait: Sequelize.HasManyHasAssociationMixin<PlayerTraitModel, PlayerTraitId>;
|
|
34
|
-
hasPlayerTraits: Sequelize.HasManyHasAssociationsMixin<PlayerTraitModel, PlayerTraitId>;
|
|
35
|
-
countPlayerTraits: Sequelize.HasManyCountAssociationsMixin;
|
|
36
|
-
static initModel(sequelize: Sequelize.Sequelize): typeof TraitModel;
|
|
37
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TraitModel = void 0;
|
|
4
|
-
const sequelize_1 = require("sequelize");
|
|
5
|
-
class TraitModel extends sequelize_1.Model {
|
|
6
|
-
static initModel(sequelize) {
|
|
7
|
-
return TraitModel.init({
|
|
8
|
-
trait_id: {
|
|
9
|
-
type: sequelize_1.DataTypes.UUID,
|
|
10
|
-
allowNull: false,
|
|
11
|
-
primaryKey: true
|
|
12
|
-
},
|
|
13
|
-
name: {
|
|
14
|
-
type: sequelize_1.DataTypes.STRING,
|
|
15
|
-
allowNull: false
|
|
16
|
-
}
|
|
17
|
-
}, {
|
|
18
|
-
sequelize,
|
|
19
|
-
tableName: 'Trait',
|
|
20
|
-
schema: 'public',
|
|
21
|
-
timestamps: false,
|
|
22
|
-
indexes: [{
|
|
23
|
-
name: 'trait_pk',
|
|
24
|
-
unique: true,
|
|
25
|
-
fields: [{ name: 'trait_id' }]
|
|
26
|
-
}]
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.TraitModel = TraitModel;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Role } from '../../service';
|
|
2
|
-
import { RoleType } from '../models';
|
|
3
|
-
declare function transformToType(role: Role): RoleType;
|
|
4
|
-
declare function transformFromType(role: RoleType): Role;
|
|
5
|
-
export { transformToType as transformFromRole, transformFromType as transformToRole };
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.transformToRole = exports.transformFromRole = void 0;
|
|
4
|
-
const service_1 = require("../../service");
|
|
5
|
-
function transformToType(role) {
|
|
6
|
-
switch (role) {
|
|
7
|
-
case service_1.Role.SETTER:
|
|
8
|
-
return 'SETTER';
|
|
9
|
-
case service_1.Role.LIBERO:
|
|
10
|
-
return 'LIBERO';
|
|
11
|
-
case service_1.Role.MIDDLE_BLOCKER:
|
|
12
|
-
return 'MIDDLE_BLOCKER';
|
|
13
|
-
case service_1.Role.OUTSIDE_HITTER:
|
|
14
|
-
return 'OUTSIDE_HITTER';
|
|
15
|
-
case service_1.Role.OPPOSITE_HITTER:
|
|
16
|
-
return 'OPPOSITE_HITTER';
|
|
17
|
-
default:
|
|
18
|
-
throw new Error('UNKNOWN_ROLE');
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
exports.transformFromRole = transformToType;
|
|
22
|
-
function transformFromType(role) {
|
|
23
|
-
return service_1.Role[role];
|
|
24
|
-
}
|
|
25
|
-
exports.transformToRole = transformFromType;
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { Trait } from '../../service';
|
|
2
|
-
import { TraitAttributes, TraitModel } from '../models';
|
|
3
|
-
declare function transformToAttributes(trait: Trait): TraitAttributes;
|
|
4
|
-
declare function transformToObject(model: TraitModel): Trait;
|
|
5
|
-
export { transformToObject as transformToTrait, transformToAttributes as transformFromTrait };
|