volleyballsimtypes 0.0.138 → 0.0.140
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/service/player/trait.js +2 -2
- package/dist/esm/data/index.d.ts +3 -0
- package/dist/esm/data/index.js +3 -0
- package/dist/esm/data/init-models.d.ts +2 -0
- package/dist/esm/data/init-models.js +194 -0
- package/dist/esm/data/models/coach.d.ts +40 -0
- package/dist/esm/data/models/coach.js +51 -0
- package/dist/esm/data/models/competition-champion.d.ts +23 -0
- package/dist/esm/data/models/competition-champion.js +34 -0
- package/dist/esm/data/models/competition-match.d.ts +29 -0
- package/dist/esm/data/models/competition-match.js +42 -0
- package/dist/esm/data/models/competition-teams.d.ts +23 -0
- package/dist/esm/data/models/competition-teams.js +38 -0
- package/dist/esm/data/models/competition.d.ts +67 -0
- package/dist/esm/data/models/competition.js +34 -0
- package/dist/esm/data/models/country.d.ts +61 -0
- package/dist/esm/data/models/country.js +30 -0
- package/dist/esm/data/models/draft-pick.d.ts +31 -0
- package/dist/esm/data/models/draft-pick.js +46 -0
- package/dist/esm/data/models/draft.d.ts +29 -0
- package/dist/esm/data/models/draft.js +30 -0
- package/dist/esm/data/models/index.d.ts +24 -0
- package/dist/esm/data/models/index.js +24 -0
- package/dist/esm/data/models/iteration.d.ts +26 -0
- package/dist/esm/data/models/iteration.js +26 -0
- package/dist/esm/data/models/league-season.d.ts +23 -0
- package/dist/esm/data/models/league-season.js +34 -0
- package/dist/esm/data/models/league.d.ts +44 -0
- package/dist/esm/data/models/league.js +34 -0
- package/dist/esm/data/models/match-rating.d.ts +27 -0
- package/dist/esm/data/models/match-rating.js +48 -0
- package/dist/esm/data/models/match-set-stats.d.ts +58 -0
- package/dist/esm/data/models/match-set-stats.js +123 -0
- package/dist/esm/data/models/match-set.d.ts +85 -0
- package/dist/esm/data/models/match-set.js +47 -0
- package/dist/esm/data/models/match.d.ts +67 -0
- package/dist/esm/data/models/match.js +47 -0
- package/dist/esm/data/models/performance-stats.d.ts +40 -0
- package/dist/esm/data/models/performance-stats.js +81 -0
- package/dist/esm/data/models/player-team.d.ts +28 -0
- package/dist/esm/data/models/player-team.js +48 -0
- package/dist/esm/data/models/player-trait.d.ts +23 -0
- package/dist/esm/data/models/player-trait.js +38 -0
- package/dist/esm/data/models/player.d.ts +124 -0
- package/dist/esm/data/models/player.js +42 -0
- package/dist/esm/data/models/rally.d.ts +29 -0
- package/dist/esm/data/models/rally.js +46 -0
- package/dist/esm/data/models/set-position.d.ts +29 -0
- package/dist/esm/data/models/set-position.js +46 -0
- package/dist/esm/data/models/team.d.ts +162 -0
- package/dist/esm/data/models/team.js +59 -0
- package/dist/esm/data/models/trait.d.ts +37 -0
- package/dist/esm/data/models/trait.js +26 -0
- package/dist/esm/data/models/user.d.ts +22 -0
- package/dist/esm/data/models/user.js +53 -0
- package/dist/esm/data/transformers/coach.d.ts +5 -0
- package/dist/esm/data/transformers/coach.js +25 -0
- package/dist/esm/data/transformers/country.d.ts +5 -0
- package/dist/esm/data/transformers/country.js +16 -0
- package/dist/esm/data/transformers/court-position.d.ts +5 -0
- package/dist/esm/data/transformers/court-position.js +27 -0
- package/dist/esm/data/transformers/draft-pick.d.ts +5 -0
- package/dist/esm/data/transformers/draft-pick.js +18 -0
- package/dist/esm/data/transformers/draft.d.ts +5 -0
- package/dist/esm/data/transformers/draft.js +20 -0
- package/dist/esm/data/transformers/formation.d.ts +5 -0
- package/dist/esm/data/transformers/formation.js +8 -0
- package/dist/esm/data/transformers/index.d.ts +25 -0
- package/dist/esm/data/transformers/index.js +25 -0
- package/dist/esm/data/transformers/iteration.d.ts +5 -0
- package/dist/esm/data/transformers/iteration.js +14 -0
- package/dist/esm/data/transformers/league.d.ts +5 -0
- package/dist/esm/data/transformers/league.js +28 -0
- package/dist/esm/data/transformers/match-rating.d.ts +4 -0
- package/dist/esm/data/transformers/match-rating.js +13 -0
- package/dist/esm/data/transformers/match-set-stats.d.ts +5 -0
- package/dist/esm/data/transformers/match-set-stats.js +57 -0
- package/dist/esm/data/transformers/match-set.d.ts +5 -0
- package/dist/esm/data/transformers/match-set.js +44 -0
- package/dist/esm/data/transformers/match.d.ts +5 -0
- package/dist/esm/data/transformers/match.js +27 -0
- package/dist/esm/data/transformers/performance-stats.d.ts +5 -0
- package/dist/esm/data/transformers/performance-stats.js +33 -0
- package/dist/esm/data/transformers/player-team.d.ts +3 -0
- package/dist/esm/data/transformers/player-team.js +9 -0
- package/dist/esm/data/transformers/player.d.ts +5 -0
- package/dist/esm/data/transformers/player.js +26 -0
- package/dist/esm/data/transformers/rally.d.ts +5 -0
- package/dist/esm/data/transformers/rally.js +23 -0
- package/dist/esm/data/transformers/role.d.ts +5 -0
- package/dist/esm/data/transformers/role.js +23 -0
- package/dist/esm/data/transformers/season-match.d.ts +4 -0
- package/dist/esm/data/transformers/season-match.js +13 -0
- package/dist/esm/data/transformers/season.d.ts +5 -0
- package/dist/esm/data/transformers/season.js +39 -0
- package/dist/esm/data/transformers/set-position.d.ts +5 -0
- package/dist/esm/data/transformers/set-position.js +16 -0
- package/dist/esm/data/transformers/stage.d.ts +5 -0
- package/dist/esm/data/transformers/stage.js +21 -0
- package/dist/esm/data/transformers/team.d.ts +5 -0
- package/dist/esm/data/transformers/team.js +28 -0
- package/dist/esm/data/transformers/tournament-match.d.ts +5 -0
- package/dist/esm/data/transformers/tournament-match.js +19 -0
- package/dist/esm/data/transformers/tournament.d.ts +5 -0
- package/dist/esm/data/transformers/tournament.js +33 -0
- package/dist/esm/data/transformers/trait.d.ts +5 -0
- package/dist/esm/data/transformers/trait.js +15 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/service/coach/coach.d.ts +19 -0
- package/dist/esm/service/coach/coach.js +11 -0
- package/dist/esm/service/coach/formation.d.ts +31 -0
- package/dist/esm/service/coach/formation.js +122 -0
- package/dist/esm/service/coach/index.d.ts +2 -0
- package/dist/esm/service/coach/index.js +2 -0
- package/dist/esm/service/competition/index.d.ts +11 -0
- package/dist/esm/service/competition/index.js +12 -0
- package/dist/esm/service/competition/iteration.d.ts +10 -0
- package/dist/esm/service/competition/iteration.js +8 -0
- package/dist/esm/service/competition/league.d.ts +16 -0
- package/dist/esm/service/competition/league.js +8 -0
- package/dist/esm/service/competition/season.d.ts +23 -0
- package/dist/esm/service/competition/season.js +27 -0
- package/dist/esm/service/competition/stage.d.ts +11 -0
- package/dist/esm/service/competition/stage.js +24 -0
- package/dist/esm/service/competition/standing.d.ts +28 -0
- package/dist/esm/service/competition/standing.js +76 -0
- package/dist/esm/service/competition/tournament-match.d.ts +14 -0
- package/dist/esm/service/competition/tournament-match.js +9 -0
- package/dist/esm/service/competition/tournament.d.ts +20 -0
- package/dist/esm/service/competition/tournament.js +18 -0
- package/dist/esm/service/country/country.d.ts +17 -0
- package/dist/esm/service/country/country.js +18 -0
- package/dist/esm/service/country/index.d.ts +1 -0
- package/dist/esm/service/country/index.js +1 -0
- package/dist/esm/service/draft/draft-pick.d.ts +14 -0
- package/dist/esm/service/draft/draft-pick.js +7 -0
- package/dist/esm/service/draft/draft.d.ts +15 -0
- package/dist/esm/service/draft/draft.js +8 -0
- package/dist/esm/service/draft/index.d.ts +2 -0
- package/dist/esm/service/draft/index.js +2 -0
- package/dist/esm/service/event/index.d.ts +1 -0
- package/dist/esm/service/event/index.js +1 -0
- package/dist/esm/service/event/rally-event.d.ts +20 -0
- package/dist/esm/service/event/rally-event.js +16 -0
- package/dist/esm/service/index.d.ts +9 -0
- package/dist/esm/service/index.js +9 -0
- package/dist/esm/service/match/court-position.d.ts +21 -0
- package/dist/esm/service/match/court-position.js +53 -0
- package/dist/esm/service/match/court-target-enum.d.ts +21 -0
- package/dist/esm/service/match/court-target-enum.js +54 -0
- package/dist/esm/service/match/index.d.ts +7 -0
- package/dist/esm/service/match/index.js +7 -0
- package/dist/esm/service/match/match-rating.d.ts +35 -0
- package/dist/esm/service/match/match-rating.js +61 -0
- package/dist/esm/service/match/match-set.d.ts +65 -0
- package/dist/esm/service/match/match-set.js +56 -0
- package/dist/esm/service/match/match-team.d.ts +7 -0
- package/dist/esm/service/match/match-team.js +17 -0
- package/dist/esm/service/match/match.d.ts +36 -0
- package/dist/esm/service/match/match.js +57 -0
- package/dist/esm/service/match/rally.d.ts +22 -0
- package/dist/esm/service/match/rally.js +13 -0
- package/dist/esm/service/player/index.d.ts +5 -0
- package/dist/esm/service/player/index.js +5 -0
- package/dist/esm/service/player/performance-stats.d.ts +30 -0
- package/dist/esm/service/player/performance-stats.js +34 -0
- package/dist/esm/service/player/player.d.ts +46 -0
- package/dist/esm/service/player/player.js +84 -0
- package/dist/esm/service/player/role.d.ts +17 -0
- package/dist/esm/service/player/role.js +42 -0
- package/dist/esm/service/player/stats.d.ts +11 -0
- package/dist/esm/service/player/stats.js +25 -0
- package/dist/esm/service/player/trait.d.ts +21 -0
- package/dist/esm/service/player/trait.js +108 -0
- package/dist/esm/service/team/index.d.ts +1 -0
- package/dist/esm/service/team/index.js +1 -0
- package/dist/esm/service/team/team.d.ts +31 -0
- package/dist/esm/service/team/team.js +32 -0
- package/dist/esm/service/utils/index.d.ts +2 -0
- package/dist/esm/service/utils/index.js +2 -0
- package/dist/esm/service/utils/object-utils.d.ts +1 -0
- package/dist/esm/service/utils/object-utils.js +1 -0
- package/dist/esm/service/utils/string-utils.d.ts +2 -0
- package/dist/esm/service/utils/string-utils.js +11 -0
- package/dist/esm/src/service/player/trait.js +2 -2
- package/package.json +1 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { GeneralStat } from './stats';
|
|
2
|
+
export class Trait {
|
|
3
|
+
constructor({ id, name, modifier, chance, statThreshold, stat, weight }) {
|
|
4
|
+
this.id = id;
|
|
5
|
+
this.name = name;
|
|
6
|
+
this.modifier = modifier;
|
|
7
|
+
this.chance = chance;
|
|
8
|
+
this.statThreshold = statThreshold;
|
|
9
|
+
this.stat = stat;
|
|
10
|
+
this.weight = weight;
|
|
11
|
+
}
|
|
12
|
+
static getTraits() {
|
|
13
|
+
return [Trait.GUARDIAN, Trait.MARKSMAN, Trait.METEOR_SERVE, Trait.VIGOROUS, Trait.MOVING_WALL, Trait.MASTER_MIND];
|
|
14
|
+
}
|
|
15
|
+
static assignTraits(performanceStats) {
|
|
16
|
+
const qualifiedTraits = this.getTraits().filter(trait => {
|
|
17
|
+
return GeneralStat.calculateScore(performanceStats, trait.stat) >= trait.statThreshold;
|
|
18
|
+
});
|
|
19
|
+
const random = Math.random();
|
|
20
|
+
let traitCount;
|
|
21
|
+
switch (true) {
|
|
22
|
+
case random > 0.95:
|
|
23
|
+
traitCount = 3;
|
|
24
|
+
break;
|
|
25
|
+
case random > 0.85:
|
|
26
|
+
traitCount = 2;
|
|
27
|
+
break;
|
|
28
|
+
case random > 0.6:
|
|
29
|
+
traitCount = 1;
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
traitCount = 0;
|
|
33
|
+
}
|
|
34
|
+
return qualifiedTraits.sort((t1, t2) => t2.weight - t1.weight)
|
|
35
|
+
.slice(0, traitCount);
|
|
36
|
+
}
|
|
37
|
+
toString() {
|
|
38
|
+
return JSON.stringify({
|
|
39
|
+
name: this.name,
|
|
40
|
+
modifier: this.modifier,
|
|
41
|
+
statThreshold: this.statThreshold,
|
|
42
|
+
chance: this.chance,
|
|
43
|
+
stat: this.stat,
|
|
44
|
+
weight: this.weight
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
// A Setter gets a bonus to their score and the receiving attacker gets a bonus as well.
|
|
49
|
+
// Stacks with attacker bonus
|
|
50
|
+
Trait.MASTER_MIND = new Trait({
|
|
51
|
+
id: '0117a315-a743-43e3-9ec2-ad5cf700ef08',
|
|
52
|
+
name: 'Master Mind',
|
|
53
|
+
modifier: 1.1,
|
|
54
|
+
chance: 0.2,
|
|
55
|
+
statThreshold: 80,
|
|
56
|
+
stat: GeneralStat.ATTACK,
|
|
57
|
+
weight: 10
|
|
58
|
+
});
|
|
59
|
+
// Will always participate in blocking regardless of chance and adds
|
|
60
|
+
Trait.MOVING_WALL = new Trait({
|
|
61
|
+
id: '304c53f6-5e7a-44d3-9625-f10d8109421a',
|
|
62
|
+
name: 'Moving Wall',
|
|
63
|
+
modifier: 1.1,
|
|
64
|
+
chance: 1,
|
|
65
|
+
statThreshold: 75,
|
|
66
|
+
stat: GeneralStat.DEFENSE,
|
|
67
|
+
weight: 5
|
|
68
|
+
});
|
|
69
|
+
// On attack, will always pick the worst receiver and adds a 10% to score
|
|
70
|
+
Trait.MARKSMAN = new Trait({
|
|
71
|
+
id: 'ace3458e-69ab-487c-a9c0-d656f705d8dd',
|
|
72
|
+
name: 'Marksman',
|
|
73
|
+
modifier: 1.01,
|
|
74
|
+
chance: 0.3,
|
|
75
|
+
statThreshold: 75,
|
|
76
|
+
stat: GeneralStat.ATTACK,
|
|
77
|
+
weight: 5
|
|
78
|
+
});
|
|
79
|
+
// Increases the score of the serve by 25% when serve type is Jumping.
|
|
80
|
+
Trait.METEOR_SERVE = new Trait({
|
|
81
|
+
id: 'c929a79d-5866-40d6-bbd6-b0b67a929c4c',
|
|
82
|
+
name: 'Meteor Serve',
|
|
83
|
+
modifier: 1.1,
|
|
84
|
+
chance: 0.1,
|
|
85
|
+
statThreshold: 75,
|
|
86
|
+
stat: GeneralStat.SERVE,
|
|
87
|
+
weight: 10
|
|
88
|
+
});
|
|
89
|
+
// Has a 50% chance of taking an action without decreasing energy.
|
|
90
|
+
Trait.VIGOROUS = new Trait({
|
|
91
|
+
id: 'f9599b87-b3b2-49ce-8224-470f6fe6ed64',
|
|
92
|
+
name: 'Vigorous',
|
|
93
|
+
modifier: 1,
|
|
94
|
+
statThreshold: 60,
|
|
95
|
+
chance: 0.5,
|
|
96
|
+
stat: GeneralStat.PHYSICAL,
|
|
97
|
+
weight: 1
|
|
98
|
+
});
|
|
99
|
+
// Takes place of the receiver and increases reception score by 25%, guaranteeing success. Can only trigger in back-row.
|
|
100
|
+
Trait.GUARDIAN = new Trait({
|
|
101
|
+
id: 'c3291953-9256-4559-b5a9-955ccb8f9a6f',
|
|
102
|
+
name: 'Guardian',
|
|
103
|
+
chance: 0.25,
|
|
104
|
+
statThreshold: 75,
|
|
105
|
+
modifier: 1.25,
|
|
106
|
+
stat: GeneralStat.DEFENSE,
|
|
107
|
+
weight: 10
|
|
108
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './team';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './team';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Coach } from '../coach';
|
|
2
|
+
import { Player } from '../player';
|
|
3
|
+
import { Country } from '../country';
|
|
4
|
+
import { League } from '../competition';
|
|
5
|
+
interface TeamParams {
|
|
6
|
+
readonly id: string;
|
|
7
|
+
readonly rating: number;
|
|
8
|
+
readonly name: string;
|
|
9
|
+
readonly shortName: string;
|
|
10
|
+
readonly roster: Player[];
|
|
11
|
+
readonly country?: Country;
|
|
12
|
+
readonly league?: League;
|
|
13
|
+
readonly coach?: Coach;
|
|
14
|
+
}
|
|
15
|
+
export declare class Team {
|
|
16
|
+
readonly id: string;
|
|
17
|
+
readonly roster: Player[];
|
|
18
|
+
readonly name: string;
|
|
19
|
+
readonly shortName: string;
|
|
20
|
+
readonly coach?: Coach;
|
|
21
|
+
readonly league?: League;
|
|
22
|
+
readonly country?: Country;
|
|
23
|
+
private _rating;
|
|
24
|
+
constructor({ id, rating, name, shortName, country, roster, coach, league }: TeamParams);
|
|
25
|
+
get rating(): number;
|
|
26
|
+
set rating(value: number);
|
|
27
|
+
isPlayerInRoster(player: Player): boolean;
|
|
28
|
+
toString(): string;
|
|
29
|
+
updateRating(rankingPoints: number): void;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { validateUUID } from '../utils';
|
|
2
|
+
export class Team {
|
|
3
|
+
constructor({ id, rating, name, shortName, country, roster, coach, league }) {
|
|
4
|
+
validateUUID(id);
|
|
5
|
+
this.id = id;
|
|
6
|
+
this._rating = rating;
|
|
7
|
+
this.roster = roster;
|
|
8
|
+
this.coach = coach;
|
|
9
|
+
this.name = name;
|
|
10
|
+
this.shortName = shortName;
|
|
11
|
+
this.country = country;
|
|
12
|
+
this.league = league;
|
|
13
|
+
}
|
|
14
|
+
get rating() {
|
|
15
|
+
return this._rating;
|
|
16
|
+
}
|
|
17
|
+
set rating(value) {
|
|
18
|
+
this._rating = value;
|
|
19
|
+
}
|
|
20
|
+
isPlayerInRoster(player) {
|
|
21
|
+
return this.roster.some(p => p.id === player.id);
|
|
22
|
+
}
|
|
23
|
+
toString() {
|
|
24
|
+
if (this.country == null) {
|
|
25
|
+
throw new Error('UNKNOWN_COUNTRY');
|
|
26
|
+
}
|
|
27
|
+
return `${this.name} [${this.shortName}] (${this.country?.name}) ELO=${this._rating}`;
|
|
28
|
+
}
|
|
29
|
+
updateRating(rankingPoints) {
|
|
30
|
+
this._rating += rankingPoints;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getKeys: <T extends object>(obj: T) => (keyof T)[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const getKeys = Object.keys;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function formatNumber(n) {
|
|
2
|
+
if (n < 0)
|
|
3
|
+
throw new Error('UNEXPECTED_NEGATIVE_NUMBER');
|
|
4
|
+
return n < 10 ? `0${n}` : `${n}`;
|
|
5
|
+
}
|
|
6
|
+
export function validateUUID(uuid) {
|
|
7
|
+
const regex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/;
|
|
8
|
+
if (!regex.test(uuid))
|
|
9
|
+
throw new Error('INVALID_UUID');
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
@@ -70,7 +70,7 @@ Trait.MOVING_WALL = new Trait({
|
|
|
70
70
|
Trait.MARKSMAN = new Trait({
|
|
71
71
|
id: 'ace3458e-69ab-487c-a9c0-d656f705d8dd',
|
|
72
72
|
name: 'Marksman',
|
|
73
|
-
modifier: 1.
|
|
73
|
+
modifier: 1.01,
|
|
74
74
|
chance: 0.3,
|
|
75
75
|
statThreshold: 75,
|
|
76
76
|
stat: GeneralStat.ATTACK,
|
|
@@ -80,7 +80,7 @@ Trait.MARKSMAN = new Trait({
|
|
|
80
80
|
Trait.METEOR_SERVE = new Trait({
|
|
81
81
|
id: 'c929a79d-5866-40d6-bbd6-b0b67a929c4c',
|
|
82
82
|
name: 'Meteor Serve',
|
|
83
|
-
modifier: 1.
|
|
83
|
+
modifier: 1.1,
|
|
84
84
|
chance: 0.1,
|
|
85
85
|
statThreshold: 75,
|
|
86
86
|
stat: GeneralStat.SERVE,
|