@@ -29,6 +29,10 @@ export enum Skill {
29
29
CONSTRUCTION = 22
30
30
}
31
31
32
+ export type SkillName = 'attack' | 'defence' | 'strength' | 'hitpoints' | 'ranged' | 'prayer' | 'magic' | 'cooking' |
33
+ 'woodcutting' | 'fletching' | 'fishing' | 'firemaking' | 'crafting' | 'smithing' | 'mining' | 'herblore' |
34
+ 'agility' | 'thieving' | 'slayer' | 'farming' | 'runecrafting' | 'construction' ;
35
+
32
36
export interface SkillDetail {
33
37
readonly name : string ;
34
38
readonly advancementWidgetId ?: number ;
@@ -89,12 +93,12 @@ export class Skills {
89
93
* Also add a new method to get the unboostedLevel incase it's ever needed
90
94
* Then think about some way to reliably and easily fade those boosts out over time
91
95
*/
92
- public getSkillLevel ( skillId : number , level : number ) : number {
93
- return this . values [ skillId ] . level ;
96
+ public getSkillLevel ( skill : number | SkillName ) : number {
97
+ return this . get ( skill ) . level ;
94
98
}
95
99
96
- public hasSkillLevel ( skillId : number , level : number ) : boolean {
97
- return this . values [ skillId ] . level >= level ;
100
+ public hasSkillLevel ( skill : number | SkillName , level : number ) : boolean {
101
+ return this . get ( skill ) . level >= level ;
98
102
}
99
103
100
104
public getLevelForExp ( exp : number ) : number {
@@ -112,8 +116,8 @@ export class Skills {
112
116
return 99 ;
113
117
}
114
118
115
- public addExp ( skillId : number , exp : number ) : void {
116
- const currentExp = this . _values [ skillId ] . exp ;
119
+ public addExp ( skill : number | SkillName , exp : number ) : void {
120
+ const currentExp = this . get ( skill ) . exp ;
117
121
const currentLevel = this . getLevelForExp ( currentExp ) ;
118
122
let finalExp = currentExp + ( exp * serverConfig . expRate ) ;
119
123
if ( finalExp > 200000000 ) {
@@ -122,34 +126,35 @@ export class Skills {
122
126
123
127
const finalLevel = this . getLevelForExp ( finalExp ) ;
124
128
125
- this . setExp ( skillId , finalExp ) ;
129
+ this . setExp ( skill , finalExp ) ;
126
130
127
131
if ( this . actor instanceof Player ) {
128
- this . actor . outgoingPackets . updateSkill ( skillId , finalLevel , finalExp ) ;
132
+ this . actor . outgoingPackets . updateSkill ( this . getSkillId ( skill ) , finalLevel , finalExp ) ;
129
133
}
130
134
131
135
if ( currentLevel !== finalLevel ) {
132
- this . setLevel ( skillId , finalLevel ) ;
136
+ this . setLevel ( skill , finalLevel ) ;
133
137
134
138
if ( this . actor instanceof Player ) {
135
- const achievementDetails = skillDetails [ skillId ] ;
139
+ const achievementDetails = skillDetails [ this . getSkillId ( skill ) ] ;
136
140
if ( ! achievementDetails ) {
137
141
return ;
138
142
}
139
143
140
- this . actor . sendMessage ( `Congratulations, you just advanced a ${ achievementDetails . name . toLowerCase ( ) } level.` ) ;
141
- this . showLevelUpDialogue ( skillId , finalLevel ) ;
144
+ this . actor . sendMessage ( `Congratulations, you just advanced a ` +
145
+ `${ achievementDetails . name . toLowerCase ( ) } level.` ) ;
146
+ this . showLevelUpDialogue ( skill , finalLevel ) ;
142
147
}
143
148
}
144
149
}
145
150
146
- public showLevelUpDialogue ( skillId : number , level : number ) : void {
151
+ public showLevelUpDialogue ( skill : number | SkillName , level : number ) : void {
147
152
if ( ! ( this . actor instanceof Player ) ) {
148
153
return ;
149
154
}
150
155
151
156
const player = this . actor as Player ;
152
- const achievementDetails = skillDetails [ skillId ] ;
157
+ const achievementDetails = skillDetails [ this . getSkillId ( skill ) ] ;
153
158
const widgetId = achievementDetails . advancementWidgetId ;
154
159
155
160
if ( ! widgetId ) {
@@ -164,9 +169,10 @@ export class Skills {
164
169
closeOnWalk : true ,
165
170
beforeOpened : ( ) => {
166
171
player . modifyWidget ( widgetId , { childId : 0 ,
167
- text : `<col=000080>Congratulations, you just advanced ${ startsWithVowel ( skillName ) ? 'an' : 'a' } ${ skillName } level.</col>` } ) ;
172
+ text : `<col=000080>Congratulations, you just advanced ${ startsWithVowel ( skillName ) ? 'an' : 'a' } ` +
173
+ `${ skillName } level.</col>` } ) ;
168
174
player . modifyWidget ( widgetId , { childId : 1 ,
169
- text : `Your ${ skillName } level is now ${ level } .` } ) ;
175
+ text : `Your ${ skillName } level is now ${ level } .` } ) ;
170
176
} ,
171
177
afterOpened : ( ) => {
172
178
player . playGraphics ( { id : gfxIds . levelUpFireworks , delay : 0 , height : 125 } ) ;
@@ -175,14 +181,34 @@ export class Skills {
175
181
} ) ;
176
182
}
177
183
178
- public setExp ( skillId : number , exp : number ) : void {
184
+ public setExp ( skill : number | SkillName , exp : number ) : void {
185
+ const skillId = this . getSkillId ( skill ) ;
179
186
this . _values [ skillId ] . exp = exp ;
180
187
}
181
188
182
- public setLevel ( skillId : number , level : number ) : void {
189
+ public setLevel ( skill : number | SkillName , level : number ) : void {
190
+ const skillId = this . getSkillId ( skill ) ;
183
191
this . _values [ skillId ] . level = level ;
184
192
}
185
193
194
+ public getSkillId ( skill : number | SkillName ) : number {
195
+ if ( typeof skill === 'number' ) {
196
+ return skill ;
197
+ } else {
198
+ const skillName = skill . toString ( ) . toUpperCase ( ) ;
199
+ return Skill [ skillName ] . valueOf ( ) ;
200
+ }
201
+ }
202
+
203
+ public get ( skill : number | SkillName ) : SkillValue {
204
+ if ( typeof skill === 'number' ) {
205
+ return this . _values [ skill ] ;
206
+ } else {
207
+ const skillName = skill . toString ( ) . toUpperCase ( ) ;
208
+ return this . _values [ Skill [ skillName ] . valueOf ( ) ] ;
209
+ }
210
+ }
211
+
186
212
public get values ( ) : SkillValue [ ] {
187
213
return this . _values ;
188
214
}
0 commit comments