@rpgjs/server 5.0.0-alpha.4 → 5.0.0-alpha.41
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/Gui/DialogGui.d.ts +5 -0
- package/dist/Gui/GameoverGui.d.ts +23 -0
- package/dist/Gui/Gui.d.ts +6 -0
- package/dist/Gui/MenuGui.d.ts +22 -3
- package/dist/Gui/NotificationGui.d.ts +1 -2
- package/dist/Gui/SaveLoadGui.d.ts +13 -0
- package/dist/Gui/ShopGui.d.ts +28 -3
- package/dist/Gui/TitleGui.d.ts +23 -0
- package/dist/Gui/index.d.ts +10 -1
- package/dist/Player/BattleManager.d.ts +34 -12
- package/dist/Player/ClassManager.d.ts +46 -13
- package/dist/Player/ComponentManager.d.ts +123 -0
- package/dist/Player/Components.d.ts +345 -0
- package/dist/Player/EffectManager.d.ts +86 -0
- package/dist/Player/ElementManager.d.ts +104 -0
- package/dist/Player/GoldManager.d.ts +22 -0
- package/dist/Player/GuiManager.d.ts +259 -0
- package/dist/Player/ItemFixture.d.ts +6 -0
- package/dist/Player/ItemManager.d.ts +450 -9
- package/dist/Player/MoveManager.d.ts +324 -69
- package/dist/Player/ParameterManager.d.ts +344 -14
- package/dist/Player/Player.d.ts +460 -8
- package/dist/Player/SkillManager.d.ts +197 -15
- package/dist/Player/StateManager.d.ts +89 -25
- package/dist/Player/VariableManager.d.ts +74 -0
- package/dist/RpgServer.d.ts +502 -64
- package/dist/RpgServerEngine.d.ts +2 -1
- package/dist/decorators/event.d.ts +46 -0
- package/dist/decorators/map.d.ts +287 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +21653 -20900
- package/dist/index.js.map +1 -1
- package/dist/logs/log.d.ts +2 -3
- package/dist/module.d.ts +43 -1
- package/dist/presets/index.d.ts +0 -9
- package/dist/rooms/BaseRoom.d.ts +132 -0
- package/dist/rooms/lobby.d.ts +10 -2
- package/dist/rooms/map.d.ts +1236 -17
- package/dist/services/save.d.ts +43 -0
- package/dist/storage/index.d.ts +1 -0
- package/dist/storage/localStorage.d.ts +23 -0
- package/package.json +14 -10
- package/src/Gui/DialogGui.ts +19 -4
- package/src/Gui/GameoverGui.ts +39 -0
- package/src/Gui/Gui.ts +23 -1
- package/src/Gui/MenuGui.ts +155 -6
- package/src/Gui/NotificationGui.ts +1 -2
- package/src/Gui/SaveLoadGui.ts +60 -0
- package/src/Gui/ShopGui.ts +146 -16
- package/src/Gui/TitleGui.ts +39 -0
- package/src/Gui/index.ts +15 -2
- package/src/Player/BattleManager.ts +91 -49
- package/src/Player/ClassManager.ts +118 -50
- package/src/Player/ComponentManager.ts +425 -19
- package/src/Player/Components.ts +380 -0
- package/src/Player/EffectManager.ts +81 -44
- package/src/Player/ElementManager.ts +109 -86
- package/src/Player/GoldManager.ts +32 -35
- package/src/Player/GuiManager.ts +308 -150
- package/src/Player/ItemFixture.ts +4 -5
- package/src/Player/ItemManager.ts +774 -355
- package/src/Player/MoveManager.ts +1544 -774
- package/src/Player/ParameterManager.ts +546 -104
- package/src/Player/Player.ts +1163 -88
- package/src/Player/SkillManager.ts +520 -195
- package/src/Player/StateManager.ts +170 -182
- package/src/Player/VariableManager.ts +101 -63
- package/src/RpgServer.ts +525 -63
- package/src/core/context.ts +1 -0
- package/src/decorators/event.ts +61 -0
- package/src/decorators/map.ts +327 -0
- package/src/index.ts +11 -1
- package/src/logs/log.ts +10 -3
- package/src/module.ts +126 -3
- package/src/presets/index.ts +1 -10
- package/src/rooms/BaseRoom.ts +232 -0
- package/src/rooms/lobby.ts +25 -7
- package/src/rooms/map.ts +2502 -194
- package/src/services/save.ts +147 -0
- package/src/storage/index.ts +1 -0
- package/src/storage/localStorage.ts +76 -0
- package/tests/battle.spec.ts +375 -0
- package/tests/change-map.spec.ts +72 -0
- package/tests/class.spec.ts +274 -0
- package/tests/effect.spec.ts +219 -0
- package/tests/element.spec.ts +221 -0
- package/tests/event.spec.ts +80 -0
- package/tests/gold.spec.ts +99 -0
- package/tests/item.spec.ts +609 -0
- package/tests/module.spec.ts +38 -0
- package/tests/move.spec.ts +601 -0
- package/tests/player-param.spec.ts +28 -0
- package/tests/prediction-reconciliation.spec.ts +182 -0
- package/tests/random-move.spec.ts +65 -0
- package/tests/skill.spec.ts +658 -0
- package/tests/state.spec.ts +467 -0
- package/tests/variable.spec.ts +185 -0
- package/tests/world-maps.spec.ts +896 -0
- package/vite.config.ts +16 -0
- package/dist/Player/Event.d.ts +0 -0
- package/src/Player/Event.ts +0 -0
|
@@ -1,86 +1,45 @@
|
|
|
1
|
-
import { arrayUniq, RpgCommonPlayer } from "@rpgjs/common";
|
|
1
|
+
import { arrayUniq, PlayerCtor, RpgCommonPlayer } from "@rpgjs/common";
|
|
2
2
|
import { Constructor } from "@rpgjs/common";
|
|
3
3
|
import { RpgPlayer } from "./Player";
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Element Manager Mixin
|
|
7
|
+
*
|
|
8
|
+
* Provides elemental management capabilities to any class. This mixin handles
|
|
9
|
+
* elemental resistances, vulnerabilities, and attack elements. It manages both
|
|
10
|
+
* defensive capabilities (elementsDefense) and offensive elements from equipment,
|
|
11
|
+
* as well as player-specific elemental efficiency modifiers.
|
|
12
|
+
*
|
|
13
|
+
* @param Base - The base class to extend with element management
|
|
14
|
+
* @returns Extended class with element management methods
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* class MyPlayer extends WithElementManager(BasePlayer) {
|
|
19
|
+
* constructor() {
|
|
20
|
+
* super();
|
|
21
|
+
* this.elementsEfficiency = [{ rate: 0.5, element: 'fire' }];
|
|
22
|
+
* }
|
|
23
|
+
* }
|
|
24
|
+
*
|
|
25
|
+
* const player = new MyPlayer();
|
|
26
|
+
* const fireResistance = player.elementsDefense.find(e => e.element === 'fire');
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
|
|
30
|
+
return class extends Base {
|
|
9
31
|
_elementsEfficiency: { rate: number; element: any }[] = [];
|
|
10
32
|
|
|
11
|
-
/**
|
|
12
|
-
* Recovers the player's elements defense on inventory. This list is generated from the `elementsDefense` property defined on the weapons or armors equipped.
|
|
13
|
-
* If several items have the same element, only the highest rate will be taken into account.
|
|
14
|
-
*
|
|
15
|
-
* ```ts
|
|
16
|
-
* import { Armor } from '@rpgjs/server'
|
|
17
|
-
*
|
|
18
|
-
* enum Elements {
|
|
19
|
-
* Fire = 'fire'
|
|
20
|
-
* }
|
|
21
|
-
*
|
|
22
|
-
* @Armor({
|
|
23
|
-
* name: 'Shield',
|
|
24
|
-
* elementsDefense: [{ rate: 1, element: Elements.Fire }]
|
|
25
|
-
* })
|
|
26
|
-
* class Shield {}
|
|
27
|
-
*
|
|
28
|
-
* @Armor({
|
|
29
|
-
* name: 'FireShield',
|
|
30
|
-
* elementsDefense: [{ rate: 0.5, element: Elements.Fire }]
|
|
31
|
-
* })
|
|
32
|
-
* class FireShield {}
|
|
33
|
-
*
|
|
34
|
-
* player.addItem(Shield)
|
|
35
|
-
* player.addItem(FireShield)
|
|
36
|
-
* player.equip(Shield)
|
|
37
|
-
* player.equip(FireShield)
|
|
38
|
-
*
|
|
39
|
-
* console.log(player.elementsDefense) // [{ rate: 1, element: 'fire' }]
|
|
40
|
-
* ```
|
|
41
|
-
* @title Get Elements Defense
|
|
42
|
-
* @prop {Array<{ rate: number, element: Element}>} player.elementsDefense
|
|
43
|
-
* @readonly
|
|
44
|
-
* @memberof ElementManager
|
|
45
|
-
* */
|
|
46
33
|
get elementsDefense(): { rate: number; element: any }[] {
|
|
47
|
-
return this.getFeature("elementsDefense", "element");
|
|
34
|
+
return (this as any).getFeature("elementsDefense", "element");
|
|
48
35
|
}
|
|
49
36
|
|
|
50
|
-
/**
|
|
51
|
-
* Set or retrieves all the elements where the player is vulnerable or not.
|
|
52
|
-
*
|
|
53
|
-
* ```ts
|
|
54
|
-
* import { Class } from '@rpgjs/server'
|
|
55
|
-
*
|
|
56
|
-
* enum Elements {
|
|
57
|
-
* Fire = 'fire',
|
|
58
|
-
* Ice = 'ice'
|
|
59
|
-
* }
|
|
60
|
-
*
|
|
61
|
-
* @Class({
|
|
62
|
-
* name: 'Fighter',
|
|
63
|
-
* elementsEfficiency: [{ rate: 1, element: Elements.Fire }]
|
|
64
|
-
* })
|
|
65
|
-
* class Hero {}
|
|
66
|
-
*
|
|
67
|
-
* player.setClass(Hero)
|
|
68
|
-
*
|
|
69
|
-
* console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }]
|
|
70
|
-
*
|
|
71
|
-
* player.elementsEfficiency = [{ rate: 2, element: Elements.Ice }]
|
|
72
|
-
*
|
|
73
|
-
* console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }, { rate: 2, element: 'ice' }]
|
|
74
|
-
* ```
|
|
75
|
-
* @title Set/Get Elements Efficiency
|
|
76
|
-
* @prop {Array<{ rate: number, element: Element}>} player.elementsEfficiency
|
|
77
|
-
* @memberof ElementManager
|
|
78
|
-
* */
|
|
79
37
|
get elementsEfficiency(): { rate: number; element: any }[] {
|
|
80
|
-
if (this._class) {
|
|
38
|
+
if (this._class()) {
|
|
39
|
+
const classData = this._class() as any;
|
|
81
40
|
return <any>[
|
|
82
41
|
...this._elementsEfficiency,
|
|
83
|
-
...(
|
|
42
|
+
...(classData?.elementsEfficiency || []),
|
|
84
43
|
];
|
|
85
44
|
}
|
|
86
45
|
return this._elementsEfficiency;
|
|
@@ -90,17 +49,6 @@ export function WithElementManager<TBase extends Constructor<RpgCommonPlayer>>(
|
|
|
90
49
|
this._elementsEfficiency = val;
|
|
91
50
|
}
|
|
92
51
|
|
|
93
|
-
/**
|
|
94
|
-
* Retrieves a array of elements assigned to the player and the elements of the weapons / armor equipped
|
|
95
|
-
*
|
|
96
|
-
* ```ts
|
|
97
|
-
* console.log(player.elements)
|
|
98
|
-
* ```
|
|
99
|
-
* @title Get Elements
|
|
100
|
-
* @prop {Array<Element>} player.elements
|
|
101
|
-
* @readonly
|
|
102
|
-
* @memberof ElementManager
|
|
103
|
-
* */
|
|
104
52
|
get elements(): {
|
|
105
53
|
rate: number;
|
|
106
54
|
element: string;
|
|
@@ -115,7 +63,7 @@ export function WithElementManager<TBase extends Constructor<RpgCommonPlayer>>(
|
|
|
115
63
|
}
|
|
116
64
|
|
|
117
65
|
coefficientElements(otherPlayer: RpgPlayer): number {
|
|
118
|
-
const atkPlayerElements: any = otherPlayer.elements;
|
|
66
|
+
const atkPlayerElements: any = (otherPlayer as any).elements;
|
|
119
67
|
const playerElements: any = this.elementsEfficiency;
|
|
120
68
|
let coefficient = 1;
|
|
121
69
|
|
|
@@ -127,7 +75,7 @@ export function WithElementManager<TBase extends Constructor<RpgCommonPlayer>>(
|
|
|
127
75
|
(el) => el.element == atkElement.element
|
|
128
76
|
);
|
|
129
77
|
if (!elementPlayer) continue;
|
|
130
|
-
const fn = this.getFormulas("coefficientElements");
|
|
78
|
+
const fn = (this as any).getFormulas("coefficientElements");
|
|
131
79
|
if (!fn) {
|
|
132
80
|
return coefficient;
|
|
133
81
|
}
|
|
@@ -139,5 +87,80 @@ export function WithElementManager<TBase extends Constructor<RpgCommonPlayer>>(
|
|
|
139
87
|
}
|
|
140
88
|
return coefficient;
|
|
141
89
|
}
|
|
142
|
-
};
|
|
90
|
+
} as unknown as TBase;
|
|
143
91
|
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Interface for Element Manager functionality
|
|
95
|
+
*
|
|
96
|
+
* Provides elemental management capabilities including resistances, vulnerabilities,
|
|
97
|
+
* and attack elements. This interface defines the public API of the ElementManager mixin.
|
|
98
|
+
*/
|
|
99
|
+
export interface IElementManager {
|
|
100
|
+
/**
|
|
101
|
+
* Gets the defensive capabilities against various elements from equipped items.
|
|
102
|
+
* The system automatically consolidates multiple defensive items, keeping only
|
|
103
|
+
* the highest protection rate for each element type.
|
|
104
|
+
*
|
|
105
|
+
* @returns Array of element defense objects with rate and element properties
|
|
106
|
+
*/
|
|
107
|
+
elementsDefense: { rate: number; element: any }[];
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Manages the player's elemental efficiency modifiers, which determine how
|
|
111
|
+
* effective different elements are against this player. Values greater than 1
|
|
112
|
+
* indicate vulnerability, while values less than 1 indicate resistance.
|
|
113
|
+
* This combines both class-based efficiency and player-specific modifiers.
|
|
114
|
+
*
|
|
115
|
+
* @returns Array of element efficiency objects with rate and element properties
|
|
116
|
+
*/
|
|
117
|
+
elementsEfficiency: { rate: number; element: any }[];
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Gets all offensive elements available to the player from equipped weapons and armor.
|
|
121
|
+
* This determines what elemental damage types the player can deal in combat.
|
|
122
|
+
* The system automatically combines elements from all equipped items and removes duplicates.
|
|
123
|
+
*
|
|
124
|
+
* @returns Array of element objects with rate and element properties for offensive capabilities
|
|
125
|
+
*/
|
|
126
|
+
elements: {
|
|
127
|
+
rate: number;
|
|
128
|
+
element: string;
|
|
129
|
+
}[];
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Calculate elemental damage coefficient against another player
|
|
133
|
+
*
|
|
134
|
+
* Determines the damage multiplier when this player attacks another player,
|
|
135
|
+
* taking into account the attacker's offensive elements, the defender's
|
|
136
|
+
* elemental efficiency, and elemental defense from equipment. This is used
|
|
137
|
+
* in the battle system to calculate elemental damage modifiers.
|
|
138
|
+
*
|
|
139
|
+
* @param otherPlayer - The target player to calculate coefficient against
|
|
140
|
+
* @returns Numerical coefficient to multiply base damage by
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```ts
|
|
144
|
+
* // Calculate elemental damage coefficient
|
|
145
|
+
* const firePlayer = new MyPlayer();
|
|
146
|
+
* const icePlayer = new MyPlayer();
|
|
147
|
+
*
|
|
148
|
+
* // Fire player attacks ice player (assuming ice is weak to fire)
|
|
149
|
+
* const coefficient = icePlayer.coefficientElements(firePlayer);
|
|
150
|
+
* console.log(`Damage multiplier: ${coefficient}`); // e.g., 2.0 for double damage
|
|
151
|
+
*
|
|
152
|
+
* // Use in damage calculation
|
|
153
|
+
* const baseDamage = 100;
|
|
154
|
+
* const finalDamage = baseDamage * coefficient;
|
|
155
|
+
* console.log(`Final damage: ${finalDamage}`);
|
|
156
|
+
*
|
|
157
|
+
* // Check for elemental advantage
|
|
158
|
+
* if (coefficient > 1) {
|
|
159
|
+
* console.log('Attacker has elemental advantage!');
|
|
160
|
+
* } else if (coefficient < 1) {
|
|
161
|
+
* console.log('Defender resists this element');
|
|
162
|
+
* }
|
|
163
|
+
* ```
|
|
164
|
+
*/
|
|
165
|
+
coefficientElements(otherPlayer: RpgPlayer): number;
|
|
166
|
+
}
|
|
@@ -1,44 +1,41 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RpgCommonPlayer } from "@rpgjs/common";
|
|
1
|
+
import { PlayerCtor } from "@rpgjs/common";
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
export interface GoldManager {
|
|
4
|
+
/**
|
|
5
|
+
* You can change the game money
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* player.gold += 100
|
|
9
|
+
* ```
|
|
10
|
+
*
|
|
11
|
+
* @title Change Gold
|
|
12
|
+
* @prop {number} player.gold
|
|
13
|
+
* @default 0
|
|
14
|
+
* @memberof GoldManager
|
|
15
|
+
* */
|
|
16
|
+
gold: number;
|
|
9
17
|
}
|
|
10
18
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
* @param Base - The base class to extend
|
|
17
|
-
* @returns A new class with gold management capabilities
|
|
18
|
-
*/
|
|
19
|
-
export function WithGoldManager<TBase extends Constructor<RpgCommonPlayer>>(Base: TBase) {
|
|
20
|
-
return class extends Base implements IGoldManager {
|
|
21
|
-
/**
|
|
22
|
-
* You can change the game money
|
|
23
|
-
*
|
|
24
|
-
* ```ts
|
|
25
|
-
* player.gold += 100
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* @title Change Gold
|
|
29
|
-
* @prop {number} player.gold
|
|
30
|
-
* @default 0
|
|
31
|
-
* @memberof GoldManager
|
|
32
|
-
* */
|
|
19
|
+
export function WithGoldManager<TBase extends PlayerCtor>(
|
|
20
|
+
Base: TBase
|
|
21
|
+
): new (...args: ConstructorParameters<TBase>) => InstanceType<TBase> &
|
|
22
|
+
GoldManager {
|
|
23
|
+
return class extends Base {
|
|
33
24
|
set gold(val: number) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
25
|
+
if (val < 0) {
|
|
26
|
+
val = 0;
|
|
27
|
+
}
|
|
28
|
+
this._gold.set(val);
|
|
38
29
|
}
|
|
39
30
|
|
|
40
31
|
get gold(): number {
|
|
41
|
-
|
|
32
|
+
return this._gold();
|
|
42
33
|
}
|
|
43
|
-
};
|
|
34
|
+
} as unknown as any;
|
|
44
35
|
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Type helper to extract the interface from the WithGoldManager mixin
|
|
39
|
+
* This provides the type without duplicating method signatures
|
|
40
|
+
*/
|
|
41
|
+
export type IGoldManager = InstanceType<ReturnType<typeof WithGoldManager>>;
|