@rpgjs/server 4.3.0 → 5.0.0-alpha.1

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.
Files changed (219) hide show
  1. package/{lib → dist}/Gui/DialogGui.d.ts +1 -2
  2. package/{lib → dist}/Gui/Gui.d.ts +1 -2
  3. package/dist/Player/BattleManager.d.ts +22 -0
  4. package/dist/Player/ClassManager.d.ts +18 -0
  5. package/dist/Player/Event.d.ts +0 -0
  6. package/dist/Player/ItemManager.d.ts +17 -0
  7. package/dist/Player/MoveManager.d.ts +177 -0
  8. package/dist/Player/ParameterManager.d.ts +42 -0
  9. package/dist/Player/Player.d.ts +73 -0
  10. package/dist/Player/SkillManager.d.ts +23 -0
  11. package/dist/Player/StateManager.d.ts +39 -0
  12. package/{lib → dist}/RpgServer.d.ts +32 -15
  13. package/dist/RpgServerEngine.d.ts +5 -0
  14. package/dist/core/context.d.ts +2 -0
  15. package/dist/core/inject.d.ts +5 -0
  16. package/dist/core/setup.d.ts +6 -0
  17. package/dist/index.d.ts +9 -0
  18. package/dist/index.js +29673 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/module.d.ts +2 -0
  21. package/dist/rooms/lobby.d.ts +6 -0
  22. package/dist/rooms/map.d.ts +110 -0
  23. package/package.json +15 -37
  24. package/src/Gui/DialogGui.ts +3 -4
  25. package/src/Gui/Gui.ts +4 -6
  26. package/src/Player/BattleManager.ts +108 -99
  27. package/src/Player/ClassManager.ts +47 -46
  28. package/src/Player/ComponentManager.ts +26 -535
  29. package/src/Player/EffectManager.ts +44 -59
  30. package/src/Player/ElementManager.ts +70 -72
  31. package/src/Player/Event.ts +0 -0
  32. package/src/Player/GoldManager.ts +24 -6
  33. package/src/Player/GuiManager.ts +106 -97
  34. package/src/Player/ItemFixture.ts +22 -17
  35. package/src/Player/ItemManager.ts +234 -225
  36. package/src/Player/MoveManager.ts +1047 -457
  37. package/src/Player/ParameterManager.ts +59 -37
  38. package/src/Player/Player.ts +272 -1058
  39. package/src/Player/SkillManager.ts +146 -137
  40. package/src/Player/StateManager.ts +124 -98
  41. package/src/Player/VariableManager.ts +23 -3
  42. package/src/RpgServer.ts +36 -12
  43. package/src/RpgServerEngine.ts +7 -0
  44. package/src/core/context.ts +3 -0
  45. package/src/core/inject.ts +17 -0
  46. package/src/core/setup.ts +20 -0
  47. package/src/index.ts +9 -31
  48. package/src/module.ts +32 -0
  49. package/src/presets/index.ts +1 -3
  50. package/src/rooms/lobby.ts +24 -0
  51. package/src/rooms/map.ts +311 -0
  52. package/tsconfig.json +26 -23
  53. package/vite.config.ts +21 -0
  54. package/CHANGELOG.md +0 -174
  55. package/LICENSE +0 -19
  56. package/browser/manifest.json +0 -7
  57. package/browser/rpg.server.js +0 -22379
  58. package/browser/rpg.server.umd.cjs +0 -22410
  59. package/lib/Game/EventManager.d.ts +0 -54
  60. package/lib/Game/EventManager.js +0 -107
  61. package/lib/Game/EventManager.js.map +0 -1
  62. package/lib/Game/Map.d.ts +0 -191
  63. package/lib/Game/Map.js +0 -419
  64. package/lib/Game/Map.js.map +0 -1
  65. package/lib/Game/WorldMaps.d.ts +0 -17
  66. package/lib/Game/WorldMaps.js +0 -28
  67. package/lib/Game/WorldMaps.js.map +0 -1
  68. package/lib/Gui/DialogGui.js +0 -57
  69. package/lib/Gui/DialogGui.js.map +0 -1
  70. package/lib/Gui/Gui.js +0 -37
  71. package/lib/Gui/Gui.js.map +0 -1
  72. package/lib/Gui/MenuGui.js +0 -23
  73. package/lib/Gui/MenuGui.js.map +0 -1
  74. package/lib/Gui/NotificationGui.js +0 -8
  75. package/lib/Gui/NotificationGui.js.map +0 -1
  76. package/lib/Gui/ShopGui.js +0 -40
  77. package/lib/Gui/ShopGui.js.map +0 -1
  78. package/lib/Gui/index.js +0 -7
  79. package/lib/Gui/index.js.map +0 -1
  80. package/lib/Interfaces/Gui.d.ts +0 -4
  81. package/lib/Interfaces/Gui.js +0 -2
  82. package/lib/Interfaces/Gui.js.map +0 -1
  83. package/lib/Interfaces/StateStore.d.ts +0 -5
  84. package/lib/Interfaces/StateStore.js +0 -2
  85. package/lib/Interfaces/StateStore.js.map +0 -1
  86. package/lib/MatchMaker.d.ts +0 -24
  87. package/lib/MatchMaker.js +0 -42
  88. package/lib/MatchMaker.js.map +0 -1
  89. package/lib/Monitor/index.d.ts +0 -17
  90. package/lib/Monitor/index.js +0 -72
  91. package/lib/Monitor/index.js.map +0 -1
  92. package/lib/Player/BattleManager.d.ts +0 -36
  93. package/lib/Player/BattleManager.js +0 -101
  94. package/lib/Player/BattleManager.js.map +0 -1
  95. package/lib/Player/ClassManager.d.ts +0 -47
  96. package/lib/Player/ClassManager.js +0 -65
  97. package/lib/Player/ClassManager.js.map +0 -1
  98. package/lib/Player/ComponentManager.d.ts +0 -397
  99. package/lib/Player/ComponentManager.js +0 -505
  100. package/lib/Player/ComponentManager.js.map +0 -1
  101. package/lib/Player/EffectManager.d.ts +0 -46
  102. package/lib/Player/EffectManager.js +0 -75
  103. package/lib/Player/EffectManager.js.map +0 -1
  104. package/lib/Player/ElementManager.d.ts +0 -108
  105. package/lib/Player/ElementManager.js +0 -120
  106. package/lib/Player/ElementManager.js.map +0 -1
  107. package/lib/Player/GoldManager.d.ts +0 -17
  108. package/lib/Player/GoldManager.js +0 -27
  109. package/lib/Player/GoldManager.js.map +0 -1
  110. package/lib/Player/GuiManager.d.ts +0 -247
  111. package/lib/Player/GuiManager.js +0 -291
  112. package/lib/Player/GuiManager.js.map +0 -1
  113. package/lib/Player/ItemFixture.d.ts +0 -7
  114. package/lib/Player/ItemFixture.js +0 -19
  115. package/lib/Player/ItemFixture.js.map +0 -1
  116. package/lib/Player/ItemManager.d.ts +0 -331
  117. package/lib/Player/ItemManager.js +0 -475
  118. package/lib/Player/ItemManager.js.map +0 -1
  119. package/lib/Player/MoveManager.d.ts +0 -333
  120. package/lib/Player/MoveManager.js +0 -450
  121. package/lib/Player/MoveManager.js.map +0 -1
  122. package/lib/Player/ParameterManager.d.ts +0 -316
  123. package/lib/Player/ParameterManager.js +0 -408
  124. package/lib/Player/ParameterManager.js.map +0 -1
  125. package/lib/Player/Player.d.ts +0 -828
  126. package/lib/Player/Player.js +0 -927
  127. package/lib/Player/Player.js.map +0 -1
  128. package/lib/Player/SkillManager.d.ts +0 -163
  129. package/lib/Player/SkillManager.js +0 -223
  130. package/lib/Player/SkillManager.js.map +0 -1
  131. package/lib/Player/StateManager.d.ts +0 -185
  132. package/lib/Player/StateManager.js +0 -228
  133. package/lib/Player/StateManager.js.map +0 -1
  134. package/lib/Player/VariableManager.d.ts +0 -46
  135. package/lib/Player/VariableManager.js +0 -52
  136. package/lib/Player/VariableManager.js.map +0 -1
  137. package/lib/Query.d.ts +0 -127
  138. package/lib/Query.js +0 -159
  139. package/lib/Query.js.map +0 -1
  140. package/lib/RpgServer.js +0 -2
  141. package/lib/RpgServer.js.map +0 -1
  142. package/lib/Scenes/Map.d.ts +0 -136
  143. package/lib/Scenes/Map.js +0 -273
  144. package/lib/Scenes/Map.js.map +0 -1
  145. package/lib/decorators/event.d.ts +0 -43
  146. package/lib/decorators/event.js +0 -13
  147. package/lib/decorators/event.js.map +0 -1
  148. package/lib/decorators/map.d.ts +0 -178
  149. package/lib/decorators/map.js +0 -43
  150. package/lib/decorators/map.js.map +0 -1
  151. package/lib/entry-point.d.ts +0 -34
  152. package/lib/entry-point.js +0 -70
  153. package/lib/entry-point.js.map +0 -1
  154. package/lib/express/api.d.ts +0 -3
  155. package/lib/express/api.js +0 -105
  156. package/lib/express/api.js.map +0 -1
  157. package/lib/express/errors/NotAuthorized.d.ts +0 -4
  158. package/lib/express/errors/NotAuthorized.js +0 -7
  159. package/lib/express/errors/NotAuthorized.js.map +0 -1
  160. package/lib/express/errors/NotFound.d.ts +0 -4
  161. package/lib/express/errors/NotFound.js +0 -7
  162. package/lib/express/errors/NotFound.js.map +0 -1
  163. package/lib/express/server.d.ts +0 -18
  164. package/lib/express/server.js +0 -70
  165. package/lib/express/server.js.map +0 -1
  166. package/lib/index.d.ts +0 -20
  167. package/lib/index.js +0 -19
  168. package/lib/index.js.map +0 -1
  169. package/lib/inject.d.ts +0 -22
  170. package/lib/inject.js +0 -29
  171. package/lib/inject.js.map +0 -1
  172. package/lib/logs/index.js +0 -6
  173. package/lib/logs/index.js.map +0 -1
  174. package/lib/logs/item.js +0 -34
  175. package/lib/logs/item.js.map +0 -1
  176. package/lib/logs/log.js +0 -7
  177. package/lib/logs/log.js.map +0 -1
  178. package/lib/logs/skill.js +0 -19
  179. package/lib/logs/skill.js.map +0 -1
  180. package/lib/logs/state.js +0 -13
  181. package/lib/logs/state.js.map +0 -1
  182. package/lib/models/Item.d.ts +0 -10
  183. package/lib/models/Item.js +0 -2
  184. package/lib/models/Item.js.map +0 -1
  185. package/lib/presets/index.js +0 -65
  186. package/lib/presets/index.js.map +0 -1
  187. package/lib/server.d.ts +0 -137
  188. package/lib/server.js +0 -443
  189. package/lib/server.js.map +0 -1
  190. package/rpg.toml +0 -14
  191. package/src/Game/EventManager.ts +0 -125
  192. package/src/Game/Map.ts +0 -500
  193. package/src/Game/WorldMaps.ts +0 -45
  194. package/src/Interfaces/Gui.ts +0 -4
  195. package/src/Interfaces/StateStore.ts +0 -5
  196. package/src/MatchMaker.ts +0 -65
  197. package/src/Monitor/index.ts +0 -78
  198. package/src/Query.ts +0 -172
  199. package/src/Scenes/Map.ts +0 -310
  200. package/src/decorators/event.ts +0 -58
  201. package/src/decorators/map.ts +0 -226
  202. package/src/entry-point.ts +0 -111
  203. package/src/express/api.ts +0 -118
  204. package/src/express/errors/NotAuthorized.ts +0 -6
  205. package/src/express/errors/NotFound.ts +0 -6
  206. package/src/express/server.ts +0 -94
  207. package/src/inject.ts +0 -33
  208. package/src/models/Item.ts +0 -11
  209. package/src/server.ts +0 -459
  210. /package/{lib → dist}/Gui/MenuGui.d.ts +0 -0
  211. /package/{lib → dist}/Gui/NotificationGui.d.ts +0 -0
  212. /package/{lib → dist}/Gui/ShopGui.d.ts +0 -0
  213. /package/{lib → dist}/Gui/index.d.ts +0 -0
  214. /package/{lib → dist}/logs/index.d.ts +0 -0
  215. /package/{lib → dist}/logs/item.d.ts +0 -0
  216. /package/{lib → dist}/logs/log.d.ts +0 -0
  217. /package/{lib → dist}/logs/skill.d.ts +0 -0
  218. /package/{lib → dist}/logs/state.d.ts +0 -0
  219. /package/{lib → dist}/presets/index.d.ts +0 -0
@@ -1,111 +1,125 @@
1
- import { Utils } from '@rpgjs/common'
2
- import { Effect } from '@rpgjs/database'
3
- import { SkillLog } from '../logs'
4
- import { StateManager } from './StateManager'
5
- import { EffectManager } from './EffectManager'
6
- import { ParameterManager } from './ParameterManager';
7
- import { RpgPlayer } from './Player';
1
+ import {
2
+ Constructor,
3
+ isArray,
4
+ isInstanceOf,
5
+ isString,
6
+ RpgCommonPlayer,
7
+ } from "@rpgjs/common";
8
+ import { SkillLog } from "../logs";
9
+ import { RpgPlayer } from "./Player";
10
+ import { Effect } from "./EffectManager";
8
11
 
9
- const {
10
- isArray,
11
- isString,
12
- isInstanceOf,
13
- applyMixins
14
- } = Utils
15
-
16
- type SkillClass = { new(...args: any[]) }
17
-
18
- export class SkillManager {
12
+ /**
13
+ * Interface defining dependencies from other mixins that SkillManager needs
14
+ */
15
+ interface SkillManagerDependencies {
16
+ sp: number;
17
+ skills(): any[];
18
+ hasEffect(effect: string): boolean;
19
+ databaseById(id: string): any;
20
+ applyStates(player: RpgPlayer, skill: any): void;
21
+ }
19
22
 
20
- skills: any[]
23
+ /**
24
+ * Interface defining what SkillManager adds to a class
25
+ */
26
+ export interface IWithSkillManager {
27
+ getSkill(skillClass: any | string): any;
28
+ learnSkill(skillId: any | string): any;
29
+ forgetSkill(skillId: any | string): any;
30
+ useSkill(skillId: any | string, otherPlayer?: RpgPlayer | RpgPlayer[]): any;
31
+ }
21
32
 
22
- private _getSkillIndex(skillClass: SkillClass | string) {
23
- return this.skills.findIndex(skill => {
24
- if (isString(skill)) {
25
- return skill.id == skillClass
26
- }
27
- if (isString(skillClass)) {
28
- return skillClass == (skill.id || skill)
29
- }
30
- return isInstanceOf(skill, skillClass)
31
- })
33
+ export function WithSkillManager<TBase extends Constructor<RpgCommonPlayer & SkillManagerDependencies>>(
34
+ Base: TBase
35
+ ): Constructor<IWithSkillManager> & TBase {
36
+ return class extends Base implements IWithSkillManager {
37
+ private _getSkillIndex(skillClass: any | string) {
38
+ return this.skills().findIndex((skill) => {
39
+ if (isString(skill)) {
40
+ return skill.id == skillClass;
41
+ }
42
+ if (isString(skillClass)) {
43
+ return skillClass == (skill.id || skill);
44
+ }
45
+ return isInstanceOf(skill, skillClass);
46
+ });
32
47
  }
33
48
 
34
49
  /**
35
50
  * Retrieves a learned skill. Returns null, if not found
36
51
  * ```ts
37
52
  * import Fire from 'your-database/skills/fire'
38
- *
53
+ *
39
54
  * player.getSkill(Fire)
40
55
  * ```
41
- *
56
+ *
42
57
  * @title Get Skill
43
58
  * @method player.getSkill(skillClass)
44
59
  * @param {SkillClass | string} skillClass or data id
45
60
  * @returns {instance of SkillClass | null}
46
61
  * @memberof SkillManager
47
62
  */
48
- getSkill(skillClass: SkillClass | string) {
49
- const index = this._getSkillIndex(skillClass)
50
- return this.skills[index] ?? null
63
+ getSkill(skillClass: any | string) {
64
+ const index = this._getSkillIndex(skillClass);
65
+ return this.skills()[index] ?? null;
51
66
  }
52
67
 
53
68
  /**
54
- * Learn a skill. Attributes the coefficient 1 to the parameter INT (intelligence) if cd is not present on the class.
55
- *
56
- * `onLearn()` method is called on the SkillClass
57
- *
58
- * ```ts
59
- * import Fire from 'your-database/skills/fire'
60
- *
61
- * player.learnSkill(Fire)
62
- * ```
63
- *
64
- * @title Learn Skill
65
- * @method player.learnSkill(skillClass)
66
- * @param {SkillClass | string} skillClass or data id
67
- * @throws {SkillLog} alreadyLearned
68
- * If the player already knows the skill
69
- * ```
70
- {
71
- id: SKILL_ALREADY_LEARNED,
72
- msg: '...'
73
- }
74
- ```
75
- * @returns {instance of SkillClass}
76
- * @memberof SkillManager
77
- */
78
- learnSkill(skillClass: SkillClass | string) {
79
- if (this.getSkill(skillClass)) {
80
- throw SkillLog.alreadyLearned(skillClass)
81
- }
82
- if (isString(skillClass)) skillClass = this.databaseById(skillClass)
83
- const instance = new (skillClass as SkillClass)()
84
- this.skills.push(instance)
85
- this['execMethod']('onLearn', [this], instance)
86
- return instance
69
+ * Learn a skill. Attributes the coefficient 1 to the parameter INT (intelligence) if cd is not present on the class.
70
+ *
71
+ * `onLearn()` method is called on the SkillClass
72
+ *
73
+ * ```ts
74
+ * import Fire from 'your-database/skills/fire'
75
+ *
76
+ * player.learnSkill(Fire)
77
+ * ```
78
+ *
79
+ * @title Learn Skill
80
+ * @method player.learnSkill(skillClass)
81
+ * @param {SkillClass | string} skillId or data id
82
+ * @throws {SkillLog} alreadyLearned
83
+ * If the player already knows the skill
84
+ * ```
85
+ {
86
+ id: SKILL_ALREADY_LEARNED,
87
+ msg: '...'
88
+ }
89
+ ```
90
+ * @returns {instance of SkillClass}
91
+ * @memberof SkillManager
92
+ */
93
+ learnSkill(skillId: any | string) {
94
+ if (this.getSkill(skillId)) {
95
+ throw SkillLog.alreadyLearned(skillId);
96
+ }
97
+ const instance = this.databaseById(skillId);
98
+ this.skills().push(instance);
99
+ this["execMethod"]("onLearn", [this], instance);
100
+ return instance;
87
101
  }
88
102
 
89
103
  /**
90
104
  * Forget a skill
91
- *
105
+ *
92
106
  * `onForget()` method is called on the SkillClass
93
- *
107
+ *
94
108
  * ```ts
95
109
  * import Fire from 'your-database/skills/fire'
96
- *
110
+ *
97
111
  * try {
98
- * player.forgetSkill(Fire)
112
+ * player.forgetSkill(Fire)
99
113
  * }
100
114
  * catch (err) {
101
115
  * console.log(err)
102
116
  * }
103
117
  * ```
104
- *
118
+ *
105
119
  * @title Forget Skill
106
120
  * @method player.learnSkill(skillClass)
107
- * @param {SkillClass | string} skillClass or data id
108
- * @throws {SkillLog} notLearned
121
+ * @param {SkillClass | string} skillId or data id
122
+ * @throws {SkillLog} notLearned
109
123
  * If trying to forget a skill not learned
110
124
  * ```
111
125
  * {
@@ -116,63 +130,63 @@ export class SkillManager {
116
130
  * @returns {instance of SkillClass}
117
131
  * @memberof SkillManager
118
132
  */
119
- forgetSkill(skillClass: SkillClass | string) {
120
- if (isString(skillClass)) skillClass = this.databaseById(skillClass)
121
- const index = this._getSkillIndex(skillClass)
122
- if (index == -1) {
123
- throw SkillLog.notLearned(skillClass)
124
- }
125
- const instance = this.skills[index]
126
- this.skills.splice(index, 1)
127
- this['execMethod']('onForget', [this], instance)
128
- return instance
133
+ forgetSkill(skillId: any | string) {
134
+ if (isString(skillId)) skillId = this.databaseById(skillId);
135
+ const index = this._getSkillIndex(skillId);
136
+ if (index == -1) {
137
+ throw SkillLog.notLearned(skillId);
138
+ }
139
+ const instance = this.skills()[index];
140
+ this.skills().splice(index, 1);
141
+ this["execMethod"]("onForget", [this], instance);
142
+ return instance;
129
143
  }
130
144
 
131
145
  /**
132
146
  * Using a skill
133
- *
147
+ *
134
148
  * `onUse()` method is called on the SkillClass
135
- *
149
+ *
136
150
  * If other players are indicated then damage will be done to these other players. The method `applyDamage()` will be executed
137
- *
151
+ *
138
152
  * ```ts
139
153
  * import Fire from 'your-database/skills/fire'
140
- *
154
+ *
141
155
  * try {
142
- * player.useSkill(Fire)
156
+ * player.useSkill(Fire)
143
157
  * }
144
158
  * catch (err) {
145
159
  * console.log(err)
146
160
  * }
147
161
  * ```
148
- *
149
- * or
150
- *
151
- *
162
+ *
163
+ * or
164
+ *
165
+ *
152
166
  * * ```ts
153
167
  * import Fire from 'your-database/skills/fire'
154
- *
168
+ *
155
169
  * try {
156
- * player.useSkill(Fire, otherPlayer)
170
+ * player.useSkill(Fire, otherPlayer)
157
171
  * }
158
172
  * catch (err) {
159
173
  * console.log(err)
160
174
  * }
161
175
  * ```
162
- *
176
+ *
163
177
  * @title Use Skill
164
178
  * @method player.useSkill(skillClass,otherPlayer)
165
- * @param {SkillClass | string} skillClass or data id
166
- * @param {Array<RpgPlayer> | RpgPlayer} [otherPlayer]
167
- * @throws {SkillLog} restriction
168
- * If the player has the `Effect.CAN_NOT_SKILL` effect
179
+ * @param {SkillClass | string} skillId or data id
180
+ * @param {Array<RpgPlayer> | RpgPlayer} [otherPlayer]
181
+ * @throws {SkillLog} restriction
182
+ * If the player has the `Effect.CAN_NOT_SKILL` effect
169
183
  * ```
170
184
  * {
171
185
  * id: RESTRICTION_SKILL,
172
186
  * msg: '...'
173
187
  * }
174
188
  * ```
175
- * @throws {SkillLog} notLearned
189
+ * @throws {SkillLog} notLearned
176
190
  * If the player tries to use an unlearned skill
177
191
  * ```
178
192
  * {
@@ -180,7 +194,7 @@ export class SkillManager {
180
194
  * msg: '...'
181
195
  * }
182
196
  * ```
183
- * @throws {SkillLog} notEnoughSp
197
+ * @throws {SkillLog} notEnoughSp
184
198
  * If the player does not have enough SP to use the skill
185
199
  * ```
186
200
  * {
@@ -188,7 +202,7 @@ export class SkillManager {
188
202
  * msg: '...'
189
203
  * }
190
204
  * ```
191
- * @throws {SkillLog} chanceToUseFailed
205
+ * @throws {SkillLog} chanceToUseFailed
192
206
  * If the chance to use the skill has failed (defined with the `hitRate` property)
193
207
  * ```
194
208
  * {
@@ -196,47 +210,42 @@ export class SkillManager {
196
210
  * msg: '...'
197
211
  * }
198
212
  * ```
199
- *
213
+ *
200
214
  * `onUseFailed()` method is called on the SkillClass
201
- *
215
+ *
202
216
  * @returns {instance of SkillClass}
203
217
  * @memberof SkillManager
204
218
  * @todo
205
219
  */
206
- useSkill(skillClass: SkillClass | string, otherPlayer?: RpgPlayer | RpgPlayer[]) {
207
- const skill = this.getSkill(skillClass)
208
- if (this.hasEffect(Effect.CAN_NOT_SKILL)) {
209
- throw SkillLog.restriction(skillClass)
220
+ useSkill(skillId: any | string, otherPlayer?: RpgPlayer | RpgPlayer[]) {
221
+ const skill = this.getSkill(skillId);
222
+ if (this.hasEffect(Effect.CAN_NOT_SKILL)) {
223
+ throw SkillLog.restriction(skillId);
224
+ }
225
+ if (!skill) {
226
+ throw SkillLog.notLearned(skillId);
227
+ }
228
+ if (skill.spCost > this.sp) {
229
+ throw SkillLog.notEnoughSp(skillId, skill.spCost, this.sp);
230
+ }
231
+ this.sp -= skill.spCost / (this.hasEffect(Effect.HALF_SP_COST) ? 2 : 1);
232
+ const hitRate = skill.hitRate ?? 1;
233
+ if (Math.random() > hitRate) {
234
+ this["execMethod"]("onUseFailed", [this, otherPlayer], skill);
235
+ throw SkillLog.chanceToUseFailed(skillId);
236
+ }
237
+ if (otherPlayer) {
238
+ let players: any = otherPlayer;
239
+ if (!isArray(players)) {
240
+ players = [otherPlayer];
210
241
  }
211
- if (!skill) {
212
- throw SkillLog.notLearned(skillClass)
242
+ for (let player of players) {
243
+ this.applyStates(player, skill);
244
+ player.applyDamage(this, skill);
213
245
  }
214
- if (skill.spCost > this.sp) {
215
- throw SkillLog.notEnoughSp(skillClass, skill.spCost, this.sp)
216
- }
217
- this.sp -= (skill.spCost / (this.hasEffect(Effect.HALF_SP_COST) ? 2 : 1))
218
- const hitRate = skill.hitRate ?? 1
219
- if (Math.random() > hitRate) {
220
- this['execMethod']('onUseFailed', [this, otherPlayer], skill)
221
- throw SkillLog.chanceToUseFailed(skillClass)
222
- }
223
- if (otherPlayer) {
224
- let players: any = otherPlayer
225
- if (!isArray(players)) {
226
- players = [otherPlayer]
227
- }
228
- for (let player of players) {
229
- this.applyStates(player, skill)
230
- player.applyDamage(this, skill)
231
- }
232
- }
233
- this['execMethod']('onUse', [this, otherPlayer], skill)
234
- return skill
246
+ }
247
+ this["execMethod"]("onUse", [this, otherPlayer], skill);
248
+ return skill;
235
249
  }
236
- }
237
-
238
- applyMixins(SkillManager, [ParameterManager, StateManager, EffectManager])
239
-
240
- export interface SkillManager extends ParameterManager, StateManager, EffectManager {
241
- databaseById(skillClass: any),
250
+ };
242
251
  }