11import React , { useMemo } from 'react' ;
22import { useStore } from '@/state' ;
33import { observer } from 'mobx-react-lite' ;
4- import { getCdnImage } from '@/utils' ;
4+ import { getCdnImage , isDefined } from '@/utils' ;
55import { EquipmentPiece } from '@/types/Player' ;
66import LazyImage from '@/app/components/generic/LazyImage' ;
77import { cross } from 'd3-array' ;
88import { availableEquipment , equipmentAliases , noStatExceptions } from '@/lib/Equipment' ;
9+ import { BLOWPIPE_IDS } from '@/lib/constants' ;
910import Combobox from '../../generic/Combobox' ;
1011
1112interface EquipmentOption {
@@ -16,29 +17,30 @@ interface EquipmentOption {
1617 equipment : EquipmentPiece ;
1718}
1819
19- const BLOWPIPE_IDS : string [ ] = [
20- '12926' , // regular
21- '28688' , // blazing
22- ] ;
23-
24- const DART_IDS : string [ ] = [
25- '806' , // bronze
26- '807' , // iron
27- '808' , // steel
28- '809' , // mithril
29- '810' , // adamant
30- '811' , // rune
31- '3093' , // black
32- '11230' , // dragon
33- '25849' , // amethyst
34- ] ;
20+ const findDart = ( name : string ) : EquipmentPiece | undefined => {
21+ const eq = availableEquipment . find ( ( e ) => e . name === name ) ;
22+ if ( ! eq ) {
23+ console . warn ( `Failed to locate dart [${ name } ] for blowpipe dart entry generation, proceeding without this option.` ) ;
24+ }
25+ return eq ;
26+ } ;
27+ const DARTS : EquipmentPiece [ ] = [
28+ findDart ( 'Bronze dart' ) ,
29+ findDart ( 'Iron dart' ) ,
30+ findDart ( 'Steel dart' ) ,
31+ findDart ( 'Mithril dart' ) ,
32+ findDart ( 'Adamant dart' ) ,
33+ findDart ( 'Rune dart' ) ,
34+ findDart ( 'Black dart' ) ,
35+ findDart ( 'Dragon dart' ) ,
36+ findDart ( 'Amethyst dart' ) ,
37+ ] . filter ( isDefined ) ;
3538
3639const EquipmentSelect : React . FC = observer ( ( ) => {
3740 const store = useStore ( ) ;
3841
3942 const options : EquipmentOption [ ] = useMemo ( ( ) => {
4043 const blowpipeEntries : EquipmentOption [ ] = [ ] ;
41- const dartEntries : EquipmentOption [ ] = [ ] ;
4244
4345 const entries : EquipmentOption [ ] = [ ] ;
4446 for ( const v of availableEquipment . filter ( ( eq ) => {
@@ -67,27 +69,23 @@ const EquipmentSelect: React.FC = observer(() => {
6769 equipment : v ,
6870 } ;
6971
70- if ( BLOWPIPE_IDS . includes ( e . value ) ) {
72+ if ( BLOWPIPE_IDS . includes ( v . id ) ) {
7173 blowpipeEntries . push ( e ) ;
72- } else if ( DART_IDS . includes ( e . value ) ) {
73- dartEntries . push ( e ) ;
74- entries . push ( e ) ;
7574 } else {
7675 entries . push ( e ) ;
7776 }
7877 }
7978
80- cross ( blowpipeEntries , dartEntries ) . forEach ( ( [ blowpipe , dart ] ) => {
81- const newStrength = blowpipe . equipment . bonuses . ranged_str + dart . equipment . bonuses . ranged_str ;
79+ cross ( blowpipeEntries , DARTS ) . forEach ( ( [ blowpipe , dart ] ) => {
8280 entries . push ( {
8381 ...blowpipe ,
84- label : `${ blowpipe . label } (${ dart . label . split ( ' ' , 2 ) [ 0 ] } )` ,
85- value : `${ blowpipe . value } _${ dart . value } ` ,
82+ label : `${ blowpipe . label } (${ dart . name . replace ( ' dart ' , '' ) } )` ,
83+ value : `${ blowpipe . value } _${ dart . id } ` ,
8684 equipment : {
8785 ...blowpipe . equipment ,
88- bonuses : {
89- ...blowpipe . equipment . bonuses ,
90- ranged_str : newStrength ,
86+ itemVars : {
87+ ...blowpipe . equipment . itemVars ,
88+ blowpipeDartId : dart . id ,
9189 } ,
9290 } ,
9391 } ) ;
0 commit comments