@rpgjs/server 5.0.0-alpha.21 → 5.0.0-alpha.23
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/Player/BattleManager.d.ts +43 -31
- package/dist/Player/ClassManager.d.ts +23 -3
- package/dist/Player/EffectManager.d.ts +49 -3
- package/dist/Player/ElementManager.d.ts +76 -3
- package/dist/Player/ItemManager.d.ts +292 -4
- package/dist/Player/MoveManager.d.ts +145 -4
- package/dist/Player/Player.d.ts +135 -0
- package/dist/Player/SkillManager.d.ts +42 -3
- package/dist/Player/StateManager.d.ts +74 -3
- package/dist/Player/VariableManager.d.ts +47 -3
- package/dist/RpgServer.d.ts +228 -61
- package/dist/decorators/map.d.ts +89 -1
- package/dist/index.js +804 -1703
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts +43 -1
- package/dist/rooms/map.d.ts +676 -12
- package/package.json +8 -8
- package/src/Player/BattleManager.ts +38 -55
- package/src/Player/ClassManager.ts +21 -71
- package/src/Player/EffectManager.ts +50 -96
- package/src/Player/ElementManager.ts +74 -152
- package/src/Player/ItemManager.ts +302 -359
- package/src/Player/MoveManager.ts +141 -438
- package/src/Player/Player.ts +217 -0
- package/src/Player/SkillManager.ts +44 -147
- package/src/Player/StateManager.ts +63 -259
- package/src/Player/VariableManager.ts +53 -150
- package/src/RpgServer.ts +237 -60
- package/src/decorators/map.ts +105 -1
- package/src/module.ts +81 -2
- package/src/rooms/map.ts +757 -23
|
@@ -30,102 +30,16 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
|
|
|
30
30
|
return class extends Base {
|
|
31
31
|
_elementsEfficiency: { rate: number; element: any }[] = [];
|
|
32
32
|
|
|
33
|
-
/**
|
|
34
|
-
* Recovers the player's elements defense on inventory. This list is generated from the `elementsDefense` property defined on the weapons or armors equipped.
|
|
35
|
-
* If several items have the same element, only the highest rate will be taken into account.
|
|
36
|
-
*
|
|
37
|
-
* Gets the defensive capabilities against various elements from equipped items.
|
|
38
|
-
* The system automatically consolidates multiple defensive items, keeping only
|
|
39
|
-
* the highest protection rate for each element type. This provides a comprehensive
|
|
40
|
-
* view of the player's elemental resistances from all equipped gear.
|
|
41
|
-
*
|
|
42
|
-
* @returns Array of element defense objects with rate and element properties
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```ts
|
|
46
|
-
* import { Armor } from '@rpgjs/server'
|
|
47
|
-
*
|
|
48
|
-
* enum Elements {
|
|
49
|
-
* Fire = 'fire'
|
|
50
|
-
* }
|
|
51
|
-
*
|
|
52
|
-
* @Armor({
|
|
53
|
-
* name: 'Shield',
|
|
54
|
-
* elementsDefense: [{ rate: 1, element: Elements.Fire }]
|
|
55
|
-
* })
|
|
56
|
-
* class Shield {}
|
|
57
|
-
*
|
|
58
|
-
* @Armor({
|
|
59
|
-
* name: 'FireShield',
|
|
60
|
-
* elementsDefense: [{ rate: 0.5, element: Elements.Fire }]
|
|
61
|
-
* })
|
|
62
|
-
* class FireShield {}
|
|
63
|
-
*
|
|
64
|
-
* player.addItem(Shield)
|
|
65
|
-
* player.addItem(FireShield)
|
|
66
|
-
* player.equip(Shield)
|
|
67
|
-
* player.equip(FireShield)
|
|
68
|
-
*
|
|
69
|
-
* console.log(player.elementsDefense) // [{ rate: 1, element: 'fire' }]
|
|
70
|
-
*
|
|
71
|
-
* // Check specific element defense
|
|
72
|
-
* const fireDefense = player.elementsDefense.find(def => def.element === 'fire');
|
|
73
|
-
* if (fireDefense) {
|
|
74
|
-
* console.log(`Fire defense rate: ${fireDefense.rate}`);
|
|
75
|
-
* }
|
|
76
|
-
* ```
|
|
77
|
-
*/
|
|
78
33
|
get elementsDefense(): { rate: number; element: any }[] {
|
|
79
34
|
return (this as any).getFeature("elementsDefense", "element");
|
|
80
35
|
}
|
|
81
36
|
|
|
82
|
-
/**
|
|
83
|
-
* Set or retrieves all the elements where the player is vulnerable or not.
|
|
84
|
-
*
|
|
85
|
-
* Manages the player's elemental efficiency modifiers, which determine how
|
|
86
|
-
* effective different elements are against this player. Values greater than 1
|
|
87
|
-
* indicate vulnerability, while values less than 1 indicate resistance.
|
|
88
|
-
* This combines both class-based efficiency and player-specific modifiers.
|
|
89
|
-
*
|
|
90
|
-
* @returns Array of element efficiency objects with rate and element properties
|
|
91
|
-
*
|
|
92
|
-
* @example
|
|
93
|
-
* ```ts
|
|
94
|
-
* import { Class } from '@rpgjs/server'
|
|
95
|
-
*
|
|
96
|
-
* enum Elements {
|
|
97
|
-
* Fire = 'fire',
|
|
98
|
-
* Ice = 'ice'
|
|
99
|
-
* }
|
|
100
|
-
*
|
|
101
|
-
* @Class({
|
|
102
|
-
* name: 'Fighter',
|
|
103
|
-
* elementsEfficiency: [{ rate: 1, element: Elements.Fire }]
|
|
104
|
-
* })
|
|
105
|
-
* class Hero {}
|
|
106
|
-
*
|
|
107
|
-
* player.setClass(Hero)
|
|
108
|
-
*
|
|
109
|
-
* console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }]
|
|
110
|
-
*
|
|
111
|
-
* player.elementsEfficiency = [{ rate: 2, element: Elements.Ice }]
|
|
112
|
-
*
|
|
113
|
-
* console.log(player.elementsEfficiency) // [{ rate: 1, element: 'fire' }, { rate: 2, element: 'ice' }]
|
|
114
|
-
*
|
|
115
|
-
* // Check for vulnerabilities
|
|
116
|
-
* const vulnerabilities = player.elementsEfficiency.filter(eff => eff.rate > 1);
|
|
117
|
-
* console.log('Vulnerable to:', vulnerabilities.map(v => v.element));
|
|
118
|
-
*
|
|
119
|
-
* // Check for resistances
|
|
120
|
-
* const resistances = player.elementsEfficiency.filter(eff => eff.rate < 1);
|
|
121
|
-
* console.log('Resistant to:', resistances.map(r => r.element));
|
|
122
|
-
* ```
|
|
123
|
-
*/
|
|
124
37
|
get elementsEfficiency(): { rate: number; element: any }[] {
|
|
125
38
|
if (this._class()) {
|
|
39
|
+
const classData = this._class() as any;
|
|
126
40
|
return <any>[
|
|
127
41
|
...this._elementsEfficiency,
|
|
128
|
-
...(
|
|
42
|
+
...(classData?.elementsEfficiency || []),
|
|
129
43
|
];
|
|
130
44
|
}
|
|
131
45
|
return this._elementsEfficiency;
|
|
@@ -135,33 +49,6 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
|
|
|
135
49
|
this._elementsEfficiency = val;
|
|
136
50
|
}
|
|
137
51
|
|
|
138
|
-
/**
|
|
139
|
-
* Retrieves a array of elements assigned to the player and the elements of the weapons / armor equipped
|
|
140
|
-
*
|
|
141
|
-
* Gets all offensive elements available to the player from equipped weapons and armor.
|
|
142
|
-
* This determines what elemental damage types the player can deal in combat.
|
|
143
|
-
* The system automatically combines elements from all equipped items and removes duplicates.
|
|
144
|
-
*
|
|
145
|
-
* @returns Array of element objects with rate and element properties for offensive capabilities
|
|
146
|
-
*
|
|
147
|
-
* @example
|
|
148
|
-
* ```ts
|
|
149
|
-
* // Get all offensive elements
|
|
150
|
-
* console.log(player.elements); // [{ rate: 1.5, element: 'fire' }, { rate: 1.2, element: 'ice' }]
|
|
151
|
-
*
|
|
152
|
-
* // Check if player can deal fire damage
|
|
153
|
-
* const hasFireElement = player.elements.some(el => el.element === 'fire');
|
|
154
|
-
* if (hasFireElement) {
|
|
155
|
-
* console.log('Player can deal fire damage');
|
|
156
|
-
* }
|
|
157
|
-
*
|
|
158
|
-
* // Get strongest element
|
|
159
|
-
* const strongestElement = player.elements.reduce((max, current) =>
|
|
160
|
-
* current.rate > max.rate ? current : max
|
|
161
|
-
* );
|
|
162
|
-
* console.log(`Strongest element: ${strongestElement.element} (${strongestElement.rate})`);
|
|
163
|
-
* ```
|
|
164
|
-
*/
|
|
165
52
|
get elements(): {
|
|
166
53
|
rate: number;
|
|
167
54
|
element: string;
|
|
@@ -175,40 +62,6 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
|
|
|
175
62
|
return arrayUniq(elements);
|
|
176
63
|
}
|
|
177
64
|
|
|
178
|
-
/**
|
|
179
|
-
* Calculate elemental damage coefficient against another player
|
|
180
|
-
*
|
|
181
|
-
* Determines the damage multiplier when this player attacks another player,
|
|
182
|
-
* taking into account the attacker's offensive elements, the defender's
|
|
183
|
-
* elemental efficiency, and elemental defense from equipment. This is used
|
|
184
|
-
* in the battle system to calculate elemental damage modifiers.
|
|
185
|
-
*
|
|
186
|
-
* @param otherPlayer - The target player to calculate coefficient against
|
|
187
|
-
* @returns Numerical coefficient to multiply base damage by
|
|
188
|
-
*
|
|
189
|
-
* @example
|
|
190
|
-
* ```ts
|
|
191
|
-
* // Calculate elemental damage coefficient
|
|
192
|
-
* const firePlayer = new MyPlayer();
|
|
193
|
-
* const icePlayer = new MyPlayer();
|
|
194
|
-
*
|
|
195
|
-
* // Fire player attacks ice player (assuming ice is weak to fire)
|
|
196
|
-
* const coefficient = icePlayer.coefficientElements(firePlayer);
|
|
197
|
-
* console.log(`Damage multiplier: ${coefficient}`); // e.g., 2.0 for double damage
|
|
198
|
-
*
|
|
199
|
-
* // Use in damage calculation
|
|
200
|
-
* const baseDamage = 100;
|
|
201
|
-
* const finalDamage = baseDamage * coefficient;
|
|
202
|
-
* console.log(`Final damage: ${finalDamage}`);
|
|
203
|
-
*
|
|
204
|
-
* // Check for elemental advantage
|
|
205
|
-
* if (coefficient > 1) {
|
|
206
|
-
* console.log('Attacker has elemental advantage!');
|
|
207
|
-
* } else if (coefficient < 1) {
|
|
208
|
-
* console.log('Defender resists this element');
|
|
209
|
-
* }
|
|
210
|
-
* ```
|
|
211
|
-
*/
|
|
212
65
|
coefficientElements(otherPlayer: RpgPlayer): number {
|
|
213
66
|
const atkPlayerElements: any = (otherPlayer as any).elements;
|
|
214
67
|
const playerElements: any = this.elementsEfficiency;
|
|
@@ -238,7 +91,76 @@ export function WithElementManager<TBase extends PlayerCtor>(Base: TBase) {
|
|
|
238
91
|
}
|
|
239
92
|
|
|
240
93
|
/**
|
|
241
|
-
*
|
|
242
|
-
*
|
|
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.
|
|
243
98
|
*/
|
|
244
|
-
export
|
|
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
|
+
}
|