@@ -4,6 +4,7 @@ import { loopingEvent } from '@engine/plugins';
4
4
import { FIREMAKING_LOGS } from './data' ;
5
5
import { canChain , canLight } from './chance' ;
6
6
import { lightFire } from './light-fire' ;
7
+ import { runFiremakingTask } from './firemaking-task' ;
7
8
8
9
const action : itemOnItemActionHandler = ( details ) => {
9
10
const { player, usedItem, usedWithItem, usedSlot, usedWithSlot } = details ;
@@ -15,7 +16,6 @@ const action: itemOnItemActionHandler = (details) => {
15
16
const log = usedItem . itemId !== itemIds . tinderbox ? usedItem : usedWithItem ;
16
17
const removeFromSlot = usedItem . itemId !== itemIds . tinderbox ? usedSlot : usedWithSlot ;
17
18
const skillInfo = FIREMAKING_LOGS . find ( l => l . logItem . gameId === log . itemId ) ;
18
- const position = player . position ;
19
19
20
20
if ( ! skillInfo ) {
21
21
player . sendMessage ( `Mishandled firemaking log ${ log . itemId } .` ) ;
@@ -30,43 +30,11 @@ const action: itemOnItemActionHandler = (details) => {
30
30
31
31
if ( player . metadata . lastFire && Date . now ( ) - player . metadata . lastFire < 1200 &&
32
32
canChain ( skillInfo . requiredLevel , player . skills . firemaking . level ) ) {
33
- lightFire ( player , position , worldItemLog , skillInfo . experienceGained ) ;
33
+ lightFire ( player , player . position , worldItemLog , skillInfo . experienceGained ) ;
34
34
} else {
35
35
player . sendMessage ( `You attempt to light the logs.` ) ;
36
36
37
- let canLightFire = false ;
38
- let elapsedTicks = 0 ;
39
- const loop = loopingEvent ( { player } ) ;
40
- loop . event . subscribe ( ( ) => {
41
- if ( worldItemLog . removed ) {
42
- loop . cancel ( ) ;
43
- return ;
44
- }
45
-
46
- if ( canLightFire ) {
47
- loop . cancel ( ) ;
48
- player . busy = true ;
49
- setTimeout ( ( ) => lightFire ( player , position , worldItemLog , skillInfo . experienceGained ) , 1200 ) ;
50
- return ;
51
- }
52
-
53
- // @TODO check for existing location objects again (in-case one spawned here during this loop)
54
- // @TODO check for tinderbox in-case it was removed
55
-
56
- if ( elapsedTicks === 0 || elapsedTicks % 12 === 0 ) {
57
- player . playAnimation ( animationIds . lightingFire ) ;
58
- }
59
-
60
- canLightFire = elapsedTicks > 10 && canLight ( skillInfo . requiredLevel , player . skills . firemaking . level ) ;
61
-
62
- if ( ! canLightFire && ( elapsedTicks === 0 || elapsedTicks % 4 === 0 ) ) {
63
- player . playSound ( soundIds . lightingFire , 10 , 0 ) ;
64
- } else if ( canLightFire ) {
65
- player . playSound ( soundIds . fireLit , 7 ) ;
66
- }
67
-
68
- elapsedTicks ++ ;
69
- } ) ;
37
+ runFiremakingTask ( player , worldItemLog , skillInfo ) ;
70
38
}
71
39
} ;
72
40
0 commit comments