@@ -2,25 +2,49 @@ import React, { Component } from 'react';
2
2
import ReactDOM from 'react-dom' ;
3
3
import Melvor from '../melvor' ;
4
4
5
+ const typedKeys : { < T > ( o : T ) : Array < keyof T > } = Object . keys as any ;
6
+
5
7
export default class Bank extends Component {
6
8
renderTarget = document . querySelector ( '#bank-container > div > div:nth-child(2)' ) ! ;
9
+ consumeInterval ?: NodeJS . Timeout ;
7
10
8
11
render ( ) {
9
12
return ReactDOM . createPortal (
10
- < button type = "button" className = "btn btn-lg btn-info ml-2" onClick = { this . onConsumeTokens } >
13
+ < button type = "button" className = "btn btn-lg btn-info ml-2" onClick = { this . onConsumeTokens . bind ( this ) } >
11
14
Consume Mastery Tokens
12
15
</ button > ,
13
16
this . renderTarget
14
17
) ;
15
18
}
16
19
17
- onConsumeTokens ( ) {
18
- for ( const id in Melvor . bank ) {
19
- const item = Melvor . bank [ id ] ;
20
+ clearConsumeInterval ( ) {
21
+ if ( this . consumeInterval ) {
22
+ clearInterval ( this . consumeInterval ) ;
23
+ this . consumeInterval = undefined ;
24
+ }
25
+ }
26
+
27
+ onConsumeInterval ( ) {
28
+ // Find mastery token in bank
29
+ const bankId = typedKeys ( Melvor . bank ) . find ( ( bankId ) => Melvor . bank [ bankId ] . category === 'Mastery' ) ;
30
+ if ( bankId === undefined ) {
31
+ // No mastery tokens found
32
+ this . clearConsumeInterval ( ) ;
33
+ return ;
34
+ }
35
+
36
+ const itemId = Melvor . bank [ bankId ] . id ;
37
+ Melvor . claimToken ( bankId , itemId ) ;
38
+ }
20
39
21
- if ( item . category === 'Mastery' ) {
22
- Melvor . claimToken ( id , item . id , true ) ;
23
- }
40
+ onConsumeTokens ( ) {
41
+ if ( this . consumeInterval ) {
42
+ this . clearConsumeInterval ( ) ;
43
+ return ;
24
44
}
45
+
46
+ // Try to claim a token every 250ms
47
+ this . consumeInterval = setInterval ( this . onConsumeInterval . bind ( this ) , 250 ) ;
48
+ this . onConsumeInterval ( ) ;
25
49
}
26
50
}
0 commit comments