@@ -16,6 +16,7 @@ import { Pathfinding } from './pathfinding';
16
16
import { Attack , AttackDamageType } from './player/attack' ;
17
17
import { Behavior } from './behaviors' ;
18
18
import { Effect , EffectType } from './effect' ;
19
+ import { ActorMetadata } from './metadata' ;
19
20
20
21
21
22
export type ActorType = 'player' | 'npc' ;
@@ -33,7 +34,16 @@ export abstract class Actor {
33
34
public readonly inventory : ItemContainer = new ItemContainer ( 28 ) ;
34
35
public readonly bank : ItemContainer = new ItemContainer ( 376 ) ;
35
36
public readonly actionPipeline = new ActionPipeline ( this ) ;
36
- public readonly metadata : { [ key : string ] : any } = { } ;
37
+
38
+ /**
39
+ * The map of available metadata for this actor.
40
+ *
41
+ * You cannot guarantee that this will be populated with data, so you should always check for the existence of the
42
+ * metadata you are looking for before using it.
43
+ *
44
+ * @author jameskmonger
45
+ */
46
+ public readonly metadata : Partial < ActorMetadata > = { } ;
37
47
38
48
/**
39
49
* @deprecated - use new action system instead
@@ -109,13 +119,13 @@ export abstract class Actor {
109
119
// https://oldschool.runescape.wiki/w/Combat_level#:~:text=Calculating%20combat%20level,-Simply&text=Add%20your%20Strength%20and%20Attack,have%20your%20melee%20combat%20level.&text=Multiply%20this%20by%200.325%20and,have%20your%20magic%20combat%20level
110
120
// https://oldschool.runescape.wiki/w/Damage_per_second/Melee#:~:text=1%20Step%20one%3A%20Calculate%20the%20effective%20strength%20level%3B,1.7%20Step%20seven%3A%20Calculate%20the%20melee%20damage%20output
111
121
public getAttackRoll ( defender ) : Attack {
112
-
122
+
113
123
//the amount of damage is random from 0 to Max
114
124
//stance modifiers
115
125
const _stance_defense = 3 ;
116
126
const _stance_accurate = 0 ;
117
127
const _stance_controlled = 1 ;
118
-
128
+
119
129
// base level
120
130
// ToDo: calculate prayer effects
121
131
// round decimal result calulcation up
@@ -131,7 +141,7 @@ export abstract class Actor {
131
141
132
142
Effective strength level
133
143
Multiply by(Equipment Melee Strength + 64)
134
- Add 320
144
+ Add 320
135
145
Divide by 640
136
146
Round down to nearest integer
137
147
Multiply by gear bonus
@@ -211,7 +221,7 @@ export abstract class Actor {
211
221
return attack ;
212
222
//+ stance modifier
213
223
}
214
- // #endregion
224
+ // #endregion
215
225
216
226
public damage ( amount : number , damageType : DamageType = DamageType . DAMAGE ) {
217
227
const armorReduction = 0 ;
@@ -347,7 +357,7 @@ export abstract class Actor {
347
357
348
358
public follow ( target : Actor ) : void {
349
359
this . face ( target , false , false , false ) ;
350
- this . metadata [ ' following' ] = target ;
360
+ this . metadata . following = target ;
351
361
352
362
this . moveBehind ( target ) ;
353
363
const subscription = target . walkingQueue . movementEvent . subscribe ( ( ) => {
@@ -362,7 +372,7 @@ export abstract class Actor {
362
372
) . subscribe ( ( ) => {
363
373
subscription . unsubscribe ( ) ;
364
374
this . face ( null ) ;
365
- delete this . metadata [ ' following' ] ;
375
+ delete this . metadata . following ;
366
376
} ) ;
367
377
}
368
378
@@ -376,7 +386,7 @@ export abstract class Actor {
376
386
if ( distance <= 1 ) {
377
387
return false ;
378
388
}
379
-
389
+
380
390
if ( distance > 16 ) {
381
391
this . clearFaceActor ( ) ;
382
392
this . metadata . faceActorClearedByWalking = true ;
@@ -398,7 +408,7 @@ export abstract class Actor {
398
408
return ;
399
409
}
400
410
401
- this . metadata [ ' tailing' ] = target ;
411
+ this . metadata . tailing = target ;
402
412
403
413
this . moveTo ( target ) ;
404
414
const subscription = target . walkingQueue . movementEvent . subscribe ( async ( ) => this . moveTo ( target ) ) ;
@@ -409,7 +419,7 @@ export abstract class Actor {
409
419
) . subscribe ( ( ) => {
410
420
subscription . unsubscribe ( ) ;
411
421
this . face ( null ) ;
412
- delete this . metadata [ ' tailing' ] ;
422
+ delete this . metadata . tailing ;
413
423
} ) ;
414
424
}
415
425
@@ -424,8 +434,8 @@ export abstract class Actor {
424
434
this . updateFlags . facePosition = face ;
425
435
} else if ( face instanceof Actor ) {
426
436
this . updateFlags . faceActor = face ;
427
- this . metadata [ ' faceActor' ] = face ;
428
- this . metadata [ ' faceActorClearedByWalking' ] = clearedByWalking ;
437
+ this . metadata . faceActor = face ;
438
+ this . metadata . faceActorClearedByWalking = clearedByWalking ;
429
439
430
440
if ( autoClear ) {
431
441
setTimeout ( ( ) => {
@@ -441,9 +451,9 @@ export abstract class Actor {
441
451
}
442
452
443
453
public clearFaceActor ( ) : void {
444
- if ( this . metadata [ ' faceActor' ] ) {
454
+ if ( this . metadata . faceActor ) {
445
455
this . updateFlags . faceActor = null ;
446
- this . metadata [ ' faceActor' ] = undefined ;
456
+ this . metadata . faceActor = undefined ;
447
457
}
448
458
}
449
459
0 commit comments