@@ -2,7 +2,7 @@ import { Player } from '@engine/world/actor/player/player';
22import { IHarvestable } from '@engine/world/config/harvestable-object' ;
33import { soundIds } from '@engine/world/config/sound-ids' ;
44import { 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' ;
66import { randomBetween } from '@engine/util/num' ;
77import { ObjectInteractionAction } from '@engine/action' ;
88import { colors } from '@engine/util/colors' ;
@@ -18,19 +18,20 @@ import { loopingEvent } from '@engine/plugins';
1818 *
1919 * @returns a {@link HarvestTool} if the player can harvest the object, or undefined if they cannot.
2020 */
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 {
2222 if ( ! target ) {
2323 switch ( skill ) {
2424 case Skill . MINING :
2525 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.' ) ;
2630 break ;
2731 default :
2832 player . sendMessage ( colorText ( 'HARVEST SKILL ERROR, PLEASE CONTACT DEVELOPERS' , colors . red ) ) ;
2933 break ;
30-
31-
3234 }
33- player . playSound ( soundIds . oreEmpty , 7 , 0 ) ;
3435 return ;
3536 }
3637
@@ -39,6 +40,9 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
3940 case Skill . MINING :
4041 targetName = targetName . replace ( ' ore' , '' ) ;
4142 break ;
43+ case Skill . FISHING :
44+ targetName = 'fish' ;
45+ break ;
4246 }
4347
4448
@@ -48,27 +52,41 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
4852 case Skill . MINING :
4953 player . sendMessage ( `You need a Mining level of ${ target . level } to mine this rock.` , true ) ;
5054 break ;
55+ case Skill . FISHING :
56+ player . sendMessage ( `You need a Fishing level of ${ target . level } to fish at this spot.` ) ;
57+ break ;
5158 case Skill . WOODCUTTING :
5259 player . sendMessage ( `You need a Woodcutting level of ${ target . level } to chop down this tree.` , true ) ;
5360 break ;
5461 }
5562 return ;
5663 }
64+
5765 // Check the players equipment and inventory for a tool
5866 let tool ;
5967 switch ( skill ) {
6068 case Skill . MINING :
6169 tool = getBestPickaxe ( player ) ;
6270 break ;
71+ case Skill . FISHING :
72+ // TODO (jameshallam93): different spots need different equipment
73+ tool = getFishingRod ( player ) ;
74+ break ;
6375 case Skill . WOODCUTTING :
6476 tool = getBestAxe ( player ) ;
6577 break ;
6678 }
79+
80+ // TODO (jameshallam93): some activities need more than one tool, e.g. bait
81+
6782 if ( tool == null ) {
6883 switch ( skill ) {
6984 case Skill . MINING :
7085 player . sendMessage ( 'You do not have a pickaxe for which you have the level to use.' ) ;
7186 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 ;
7290 case Skill . WOODCUTTING :
7391 player . sendMessage ( 'You do not have an axe for which you have the level to use.' ) ;
7492 break ;
@@ -88,9 +106,11 @@ export function canInitiateHarvest(player: Player, target: IHarvestable, skill:
88106
89107export function handleHarvesting ( details : ObjectInteractionAction , tool : HarvestTool , target : IHarvestable , skill : Skill ) : void {
90108 let itemToAdd = target . itemId ;
109+ // This is rune essence to pure essence
91110 if ( itemToAdd === 1436 && details . player . skills . hasLevel ( Skill . MINING , 30 ) ) {
92111 itemToAdd = 7936 ;
93112 }
113+ // This is to deal with gem rocks
94114 if ( details . object . objectId === 2111 && details . player . skills . hasLevel ( Skill . MINING , 30 ) ) {
95115 itemToAdd = rollGemRockResult ( ) . itemId ;
96116 }
@@ -106,6 +126,9 @@ export function handleHarvesting(details: ObjectInteractionAction, tool: Harvest
106126 case Skill . MINING :
107127 details . player . sendMessage ( 'You swing your pick at the rock.' ) ;
108128 break ;
129+ case Skill . FISHING :
130+ details . player . sendMessage ( 'You cast your line out.' ) ;
131+ break ;
109132 case Skill . WOODCUTTING :
110133 details . player . sendMessage ( 'You swing your axe at the tree.' ) ;
111134 break ;
0 commit comments