@@ -2,7 +2,7 @@ import { Player } from '@engine/world/actor/player/player';
2
2
import { IHarvestable } from '@engine/world/config/harvestable-object' ;
3
3
import { soundIds } from '@engine/world/config/sound-ids' ;
4
4
import { Skill } from '@engine/world/actor/skills' ;
5
- import { getBestAxe , getBestPickaxe , HarvestTool } from '@engine/world/config/harvest-tool' ;
5
+ import { getBestAxe , getBestPickaxe , HarvestTool , getFishingRod } from '@engine/world/config/harvest-tool' ;
6
6
import { randomBetween } from '@engine/util/num' ;
7
7
import { ObjectInteractionAction } from '@engine/action' ;
8
8
import { colors } from '@engine/util/colors' ;
@@ -18,19 +18,20 @@ import { loopingEvent } from '@engine/plugins';
18
18
*
19
19
* @returns a {@link HarvestTool} if the player can harvest the object, or undefined if they cannot.
20
20
*/
21
- export function canInitiateHarvest ( player : Player , target : IHarvestable , skill : Skill ) : undefined | HarvestTool {
21
+ export function canInitiateHarvest ( player : Player , target : Pick < IHarvestable , 'itemId' | 'level' > , skill : Skill ) : undefined | HarvestTool {
22
22
if ( ! target ) {
23
23
switch ( skill ) {
24
24
case Skill . MINING :
25
25
player . sendMessage ( 'There is current no ore available in this rock.' ) ;
26
+ player . playSound ( soundIds . oreEmpty , 7 , 0 ) ;
27
+ break ;
28
+ case Skill . FISHING :
29
+ player . sendMessage ( 'There are no fish in that spot.' ) ;
26
30
break ;
27
31
default :
28
32
player . sendMessage ( colorText ( 'HARVEST SKILL ERROR, PLEASE CONTACT DEVELOPERS' , colors . red ) ) ;
29
33
break ;
30
-
31
-
32
34
}
33
- player . playSound ( soundIds . oreEmpty , 7 , 0 ) ;
34
35
return ;
35
36
}
36
37
@@ -39,6 +40,9 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
39
40
case Skill . MINING :
40
41
targetName = targetName . replace ( ' ore' , '' ) ;
41
42
break ;
43
+ case Skill . FISHING :
44
+ targetName = 'fish' ;
45
+ break ;
42
46
}
43
47
44
48
@@ -48,27 +52,41 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
48
52
case Skill . MINING :
49
53
player . sendMessage ( `You need a Mining level of ${ target . level } to mine this rock.` , true ) ;
50
54
break ;
55
+ case Skill . FISHING :
56
+ player . sendMessage ( `You need a Fishing level of ${ target . level } to fish at this spot.` ) ;
57
+ break ;
51
58
case Skill . WOODCUTTING :
52
59
player . sendMessage ( `You need a Woodcutting level of ${ target . level } to chop down this tree.` , true ) ;
53
60
break ;
54
61
}
55
62
return ;
56
63
}
64
+
57
65
// Check the players equipment and inventory for a tool
58
66
let tool ;
59
67
switch ( skill ) {
60
68
case Skill . MINING :
61
69
tool = getBestPickaxe ( player ) ;
62
70
break ;
71
+ case Skill . FISHING :
72
+ // TODO (jameshallam93): different spots need different equipment
73
+ tool = getFishingRod ( player ) ;
74
+ break ;
63
75
case Skill . WOODCUTTING :
64
76
tool = getBestAxe ( player ) ;
65
77
break ;
66
78
}
79
+
80
+ // TODO (jameshallam93): some activities need more than one tool, e.g. bait
81
+
67
82
if ( tool == null ) {
68
83
switch ( skill ) {
69
84
case Skill . MINING :
70
85
player . sendMessage ( 'You do not have a pickaxe for which you have the level to use.' ) ;
71
86
break ;
87
+ case Skill . FISHING :
88
+ player . sendMessage ( 'You do not have a fishing rod for which you have the level to use.' ) ;
89
+ break ;
72
90
case Skill . WOODCUTTING :
73
91
player . sendMessage ( 'You do not have an axe for which you have the level to use.' ) ;
74
92
break ;
@@ -88,9 +106,11 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
88
106
89
107
export function handleHarvesting ( details : ObjectInteractionAction , tool : HarvestTool , target : IHarvestable , skill : Skill ) : void {
90
108
let itemToAdd = target . itemId ;
109
+ // This is rune essence to pure essence
91
110
if ( itemToAdd === 1436 && details . player . skills . hasLevel ( Skill . MINING , 30 ) ) {
92
111
itemToAdd = 7936 ;
93
112
}
113
+ // This is to deal with gem rocks
94
114
if ( details . object . objectId === 2111 && details . player . skills . hasLevel ( Skill . MINING , 30 ) ) {
95
115
itemToAdd = rollGemRockResult ( ) . itemId ;
96
116
}
@@ -106,6 +126,9 @@ export function handleHarvesting(details: ObjectInteractionAction, tool: Harvest
106
126
case Skill . MINING :
107
127
details . player . sendMessage ( 'You swing your pick at the rock.' ) ;
108
128
break ;
129
+ case Skill . FISHING :
130
+ details . player . sendMessage ( 'You cast your line out.' ) ;
131
+ break ;
109
132
case Skill . WOODCUTTING :
110
133
details . player . sendMessage ( 'You swing your axe at the tree.' ) ;
111
134
break ;
0 commit comments