mirror of
https://github.com/billsonnn/nitro-react.git
synced 2025-02-21 10:52:36 +01:00
More changes
This commit is contained in:
parent
da1b0c508d
commit
afb8b8b48b
@ -281,8 +281,8 @@ export class GroupItem
|
|||||||
|
|
||||||
while(index < items.length)
|
while(index < items.length)
|
||||||
{
|
{
|
||||||
const item = items[index];
|
const item = items[index];
|
||||||
const locked = (itemIds.indexOf(item.ref) >= 0);
|
const locked = (itemIds.indexOf(item.ref) >= 0);
|
||||||
|
|
||||||
if(item.locked !== locked)
|
if(item.locked !== locked)
|
||||||
{
|
{
|
||||||
|
@ -6,10 +6,9 @@ export class TradeUserData
|
|||||||
constructor(
|
constructor(
|
||||||
public userId: number = -1,
|
public userId: number = -1,
|
||||||
public userName: string = '',
|
public userName: string = '',
|
||||||
public userItems: AdvancedMap<string, GroupItem> = null,
|
public userItems: AdvancedMap<string, GroupItem> = new AdvancedMap(),
|
||||||
public itemCount: number = 0,
|
public itemCount: number = 0,
|
||||||
public creditsCount: number = 0,
|
public creditsCount: number = 0,
|
||||||
public accepts: boolean = false,
|
public accepts: boolean = false,
|
||||||
public canTrade: boolean = false,
|
public canTrade: boolean = false) {}
|
||||||
public items: AdvancedMap<string, GroupItem> = new AdvancedMap()) {}
|
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
import { FC } from 'react';
|
import { FC } from 'react';
|
||||||
import { LocalizeText } from '../../../../../api';
|
import { LocalizeText } from '../../../../../api';
|
||||||
import { Base } from '../../../../../common/Base';
|
import { Base, Column, Flex, Grid, Text } from '../../../../../common';
|
||||||
import { Column } from '../../../../../common/Column';
|
|
||||||
import { Flex } from '../../../../../common/Flex';
|
|
||||||
import { Grid } from '../../../../../common/Grid';
|
|
||||||
import { Text } from '../../../../../common/Text';
|
|
||||||
import { useCatalogContext } from '../../../CatalogContext';
|
import { useCatalogContext } from '../../../CatalogContext';
|
||||||
import { CatalogBadgeSelectorWidgetView } from '../widgets/CatalogBadgeSelectorWidgetView';
|
import { CatalogBadgeSelectorWidgetView } from '../widgets/CatalogBadgeSelectorWidgetView';
|
||||||
import { CatalogFirstProductSelectorWidgetView } from '../widgets/CatalogFirstProductSelectorWidgetView';
|
import { CatalogFirstProductSelectorWidgetView } from '../widgets/CatalogFirstProductSelectorWidgetView';
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { StringDataType } from '@nitrots/nitro-renderer';
|
import { StringDataType } from '@nitrots/nitro-renderer';
|
||||||
import { FC, useEffect, useMemo, useState } from 'react';
|
import { FC, useEffect, useMemo, useState } from 'react';
|
||||||
import { IBadgeItem } from '../../../../../api';
|
|
||||||
import { AutoGrid, AutoGridProps, LayoutBadgeImageView, LayoutGridItem } from '../../../../../common';
|
import { AutoGrid, AutoGridProps, LayoutBadgeImageView, LayoutGridItem } from '../../../../../common';
|
||||||
import { useSharedInventoryBadges } from '../../../../../hooks';
|
import { useSharedInventoryBadges } from '../../../../../hooks';
|
||||||
import { useCatalogContext } from '../../../CatalogContext';
|
import { useCatalogContext } from '../../../CatalogContext';
|
||||||
@ -15,20 +14,20 @@ interface CatalogBadgeSelectorWidgetViewProps extends AutoGridProps
|
|||||||
export const CatalogBadgeSelectorWidgetView: FC<CatalogBadgeSelectorWidgetViewProps> = props =>
|
export const CatalogBadgeSelectorWidgetView: FC<CatalogBadgeSelectorWidgetViewProps> = props =>
|
||||||
{
|
{
|
||||||
const { columnCount = 5, ...rest } = props;
|
const { columnCount = 5, ...rest } = props;
|
||||||
const [ currentBadge, setCurrentBadge ] = useState<IBadgeItem>(null);
|
const [ currentBadgeCode, setCurrentBadgeCode ] = useState<string>(null);
|
||||||
const { currentOffer = null, setPurchaseOptions = null } = useCatalogContext();
|
const { currentOffer = null, setPurchaseOptions = null } = useCatalogContext();
|
||||||
const { badges = [] } = useSharedInventoryBadges();
|
const { badgeCodes = [] } = useSharedInventoryBadges();
|
||||||
|
|
||||||
const previewStuffData = useMemo(() =>
|
const previewStuffData = useMemo(() =>
|
||||||
{
|
{
|
||||||
if(!currentBadge) return null;
|
if(!currentBadgeCode) return null;
|
||||||
|
|
||||||
const stuffData = new StringDataType();
|
const stuffData = new StringDataType();
|
||||||
|
|
||||||
stuffData.setValue([ '0', currentBadge.badgeCode, '', '' ]);
|
stuffData.setValue([ '0', currentBadgeCode, '', '' ]);
|
||||||
|
|
||||||
return stuffData;
|
return stuffData;
|
||||||
}, [ currentBadge ]);
|
}, [ currentBadgeCode ]);
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
@ -48,11 +47,11 @@ export const CatalogBadgeSelectorWidgetView: FC<CatalogBadgeSelectorWidgetViewPr
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<AutoGrid columnCount={ columnCount } { ...rest }>
|
<AutoGrid columnCount={ columnCount } { ...rest }>
|
||||||
{ badges && (badges.length > 0) && badges.map((badge, index) =>
|
{ badgeCodes && (badgeCodes.length > 0) && badgeCodes.map((badgeCode, index) =>
|
||||||
{
|
{
|
||||||
return (
|
return (
|
||||||
<LayoutGridItem key={ index } itemActive={ (currentBadge === badge) } onClick={ event => setCurrentBadge(badge) }>
|
<LayoutGridItem key={ index } itemActive={ (currentBadgeCode === badgeCode) } onClick={ event => setCurrentBadgeCode(badgeCode) }>
|
||||||
<LayoutBadgeImageView badgeCode={ badge.badgeCode } />
|
<LayoutBadgeImageView badgeCode={ badgeCode } />
|
||||||
</LayoutGridItem>
|
</LayoutGridItem>
|
||||||
);
|
);
|
||||||
}) }
|
}) }
|
||||||
|
@ -1,10 +1,9 @@
|
|||||||
import { BadgePointLimitsEvent, ILinkEventTracker, IRoomSession, RoomEngineObjectEvent, RoomEngineObjectPlacedEvent, RoomPreviewer, RoomSessionEvent, TradingOpenComposer } from '@nitrots/nitro-renderer';
|
import { BadgePointLimitsEvent, ILinkEventTracker, IRoomSession, RoomEngineObjectEvent, RoomEngineObjectPlacedEvent, RoomPreviewer, RoomSessionEvent } from '@nitrots/nitro-renderer';
|
||||||
import { FC, useCallback, useEffect, useState } from 'react';
|
import { FC, useCallback, useEffect, useState } from 'react';
|
||||||
import { AddEventLinkTracker, GetLocalization, GetRoomEngine, LocalizeText, RemoveLinkEventTracker, SendMessageComposer, UnseenItemCategory } from '../../api';
|
import { AddEventLinkTracker, GetLocalization, GetRoomEngine, LocalizeText, RemoveLinkEventTracker, UnseenItemCategory } from '../../api';
|
||||||
import { isObjectMoverRequested, setObjectMoverRequested } from '../../api/inventory/InventoryUtilities';
|
import { isObjectMoverRequested, setObjectMoverRequested } from '../../api/inventory/InventoryUtilities';
|
||||||
import { NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../common';
|
import { NitroCardContentView, NitroCardHeaderView, NitroCardTabsItemView, NitroCardTabsView, NitroCardView } from '../../common';
|
||||||
import { InventoryTradeRequestEvent } from '../../events';
|
import { UseMessageEventHook, UseRoomEngineEvent, UseRoomSessionManagerEvent, useSharedInventoryTrade, useSharedInventoryUnseenTracker } from '../../hooks';
|
||||||
import { UseMessageEventHook, UseRoomEngineEvent, UseRoomSessionManagerEvent, useSharedInventoryUnseenTracker, UseUiEvent } from '../../hooks';
|
|
||||||
import { InventoryBadgeView } from './views/InventoryBadgeView';
|
import { InventoryBadgeView } from './views/InventoryBadgeView';
|
||||||
import { InventoryBotView } from './views/InventoryBotView';
|
import { InventoryBotView } from './views/InventoryBotView';
|
||||||
import { InventoryFurnitureView } from './views/InventoryFurnitureView';
|
import { InventoryFurnitureView } from './views/InventoryFurnitureView';
|
||||||
@ -24,40 +23,15 @@ export const InventoryView: FC<{}> = props =>
|
|||||||
const [ currentTab, setCurrentTab ] = useState<string>(TABS[0]);
|
const [ currentTab, setCurrentTab ] = useState<string>(TABS[0]);
|
||||||
const [ roomSession, setRoomSession ] = useState<IRoomSession>(null);
|
const [ roomSession, setRoomSession ] = useState<IRoomSession>(null);
|
||||||
const [ roomPreviewer, setRoomPreviewer ] = useState<RoomPreviewer>(null);
|
const [ roomPreviewer, setRoomPreviewer ] = useState<RoomPreviewer>(null);
|
||||||
|
const { isTrading = false, stopTrading = null } = useSharedInventoryTrade();
|
||||||
const { getCount = null, resetCategory = null } = useSharedInventoryUnseenTracker();
|
const { getCount = null, resetCategory = null } = useSharedInventoryUnseenTracker();
|
||||||
|
|
||||||
const close = useCallback(() =>
|
const close = () =>
|
||||||
{
|
{
|
||||||
// close the trade
|
if(isTrading) stopTrading();
|
||||||
// if(furnitureState.tradeData)
|
|
||||||
// {
|
|
||||||
// switch(furnitureState.tradeData.state)
|
|
||||||
// {
|
|
||||||
// case TradeState.TRADING_STATE_RUNNING:
|
|
||||||
// SendMessageComposer(new TradingCloseComposer());
|
|
||||||
// return;
|
|
||||||
// default:
|
|
||||||
// SendMessageComposer(new TradingCancelComposer());
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
setIsVisible(false);
|
setIsVisible(false);
|
||||||
}, []);
|
}
|
||||||
|
|
||||||
const onInventoryTradeRequestEvent = useCallback((event: InventoryTradeRequestEvent) =>
|
|
||||||
{
|
|
||||||
switch(event.type)
|
|
||||||
{
|
|
||||||
case InventoryTradeRequestEvent.REQUEST_TRADE: {
|
|
||||||
const tradeEvent = (event as InventoryTradeRequestEvent);
|
|
||||||
|
|
||||||
SendMessageComposer(new TradingOpenComposer(tradeEvent.objectId));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
UseUiEvent(InventoryTradeRequestEvent.REQUEST_TRADE, onInventoryTradeRequestEvent);
|
|
||||||
|
|
||||||
const onRoomEngineObjectPlacedEvent = useCallback((event: RoomEngineObjectPlacedEvent) =>
|
const onRoomEngineObjectPlacedEvent = useCallback((event: RoomEngineObjectPlacedEvent) =>
|
||||||
{
|
{
|
||||||
@ -143,13 +117,8 @@ export const InventoryView: FC<{}> = props =>
|
|||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
if(!isVisible)
|
if(!isVisible && isTrading) setIsVisible(true);
|
||||||
{
|
}, [ isVisible, isTrading ]);
|
||||||
// if trading show it
|
|
||||||
}
|
|
||||||
}, [ isVisible ]);
|
|
||||||
|
|
||||||
const isTrading = false;
|
|
||||||
|
|
||||||
if(!isVisible) return null;
|
if(!isVisible) return null;
|
||||||
|
|
||||||
|
@ -1,16 +1,16 @@
|
|||||||
import { FC, useEffect } from 'react';
|
import { FC, useEffect } from 'react';
|
||||||
import { IBadgeItem, LocalizeBadgeName, LocalizeText, UnseenItemCategory } from '../../../api';
|
import { LocalizeBadgeName, LocalizeText, UnseenItemCategory } from '../../../api';
|
||||||
import { AutoGrid, Button, Column, Flex, Grid, LayoutBadgeImageView, LayoutGridItem, Text } from '../../../common';
|
import { AutoGrid, Button, Column, Flex, Grid, LayoutBadgeImageView, LayoutGridItem, Text } from '../../../common';
|
||||||
import { useSharedInventoryBadges, useSharedInventoryUnseenTracker } from '../../../hooks';
|
import { useSharedInventoryBadges, useSharedInventoryUnseenTracker } from '../../../hooks';
|
||||||
|
|
||||||
export const InventoryBadgeView: FC<{}> = props =>
|
export const InventoryBadgeView: FC<{}> = props =>
|
||||||
{
|
{
|
||||||
const { badges = [], activeBadges = [], selectedBadge = null, isWearingBadge = null, canWearBadges = null, toggleBadge = null, selectBadge = null } = useSharedInventoryBadges();
|
const { badgeCodes = [], activeBadgeCodes = [], selectedBadgeCode = null, isWearingBadge = null, canWearBadges = null, toggleBadge = null, selectBadge = null, getBadgeId = null } = useSharedInventoryBadges();
|
||||||
const { getCount = null, resetCategory = null, isUnseen = null, removeUnseen = null } = useSharedInventoryUnseenTracker();
|
const { getCount = null, resetCategory = null, isUnseen = null, removeUnseen = null } = useSharedInventoryUnseenTracker();
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
if(!badges || !badges.length) return;
|
if(!badgeCodes || !badgeCodes.length) return;
|
||||||
|
|
||||||
return () =>
|
return () =>
|
||||||
{
|
{
|
||||||
@ -20,23 +20,24 @@ export const InventoryBadgeView: FC<{}> = props =>
|
|||||||
|
|
||||||
resetCategory(UnseenItemCategory.BADGE);
|
resetCategory(UnseenItemCategory.BADGE);
|
||||||
}
|
}
|
||||||
}, [ badges, getCount, resetCategory ]);
|
}, [ badgeCodes, getCount, resetCategory ]);
|
||||||
|
|
||||||
const InventoryBadgeItemView: FC<{ badge: IBadgeItem }> = props =>
|
const InventoryBadgeItemView: FC<{ badgeCode: string }> = props =>
|
||||||
{
|
{
|
||||||
const { badge = null, children = null, ...rest } = props;
|
const { badgeCode = null, children = null, ...rest } = props;
|
||||||
const unseen = isUnseen(UnseenItemCategory.BADGE, badge.id);
|
const badgeId = getBadgeId(badgeCode);
|
||||||
|
const unseen = isUnseen(UnseenItemCategory.BADGE, badgeId);
|
||||||
|
|
||||||
const select = () =>
|
const select = () =>
|
||||||
{
|
{
|
||||||
selectBadge(badge);
|
selectBadge(badgeCode);
|
||||||
|
|
||||||
if(unseen) removeUnseen(UnseenItemCategory.BADGE, badge.id);
|
if(unseen) removeUnseen(UnseenItemCategory.BADGE, badgeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<LayoutGridItem itemActive={ (selectedBadge === badge) } itemUnseen={ unseen } onMouseDown={ select } { ...rest }>
|
<LayoutGridItem itemActive={ (selectedBadgeCode === badgeCode) } itemUnseen={ unseen } onMouseDown={ select } { ...rest }>
|
||||||
<LayoutBadgeImageView badgeCode={ badge.badgeCode } />
|
<LayoutBadgeImageView badgeCode={ badgeCode } />
|
||||||
{ children }
|
{ children }
|
||||||
</LayoutGridItem>
|
</LayoutGridItem>
|
||||||
);
|
);
|
||||||
@ -46,11 +47,11 @@ export const InventoryBadgeView: FC<{}> = props =>
|
|||||||
<Grid>
|
<Grid>
|
||||||
<Column size={ 7 } overflow="hidden">
|
<Column size={ 7 } overflow="hidden">
|
||||||
<AutoGrid columnCount={ 4 }>
|
<AutoGrid columnCount={ 4 }>
|
||||||
{ badges && (badges.length > 0) && badges.map((badge, index) =>
|
{ badgeCodes && (badgeCodes.length > 0) && badgeCodes.map((badgeCode, index) =>
|
||||||
{
|
{
|
||||||
if(activeBadges.indexOf(badge) >= 0) return null;
|
if(activeBadgeCodes.indexOf(badgeCode) >= 0) return null;
|
||||||
|
|
||||||
return <InventoryBadgeItemView key={ index } badge={ badge } />
|
return <InventoryBadgeItemView key={ index } badgeCode={ badgeCode } />
|
||||||
}) }
|
}) }
|
||||||
</AutoGrid>
|
</AutoGrid>
|
||||||
</Column>
|
</Column>
|
||||||
@ -58,16 +59,16 @@ export const InventoryBadgeView: FC<{}> = props =>
|
|||||||
<Column overflow="hidden" gap={ 2 }>
|
<Column overflow="hidden" gap={ 2 }>
|
||||||
<Text>{ LocalizeText('inventory.badges.activebadges') }</Text>
|
<Text>{ LocalizeText('inventory.badges.activebadges') }</Text>
|
||||||
<AutoGrid columnCount={ 3 }>
|
<AutoGrid columnCount={ 3 }>
|
||||||
{ activeBadges && (activeBadges.length > 0) && activeBadges.map((badge, index) => <InventoryBadgeItemView key={ index } badge={ badge } />) }
|
{ activeBadgeCodes && (activeBadgeCodes.length > 0) && activeBadgeCodes.map((badgeCode, index) => <InventoryBadgeItemView key={ index } badgeCode={ badgeCode } />) }
|
||||||
</AutoGrid>
|
</AutoGrid>
|
||||||
</Column>
|
</Column>
|
||||||
{ !!selectedBadge &&
|
{ !!selectedBadgeCode &&
|
||||||
<Column grow justifyContent="end" gap={ 2 }>
|
<Column grow justifyContent="end" gap={ 2 }>
|
||||||
<Flex alignItems="center" gap={ 2 }>
|
<Flex alignItems="center" gap={ 2 }>
|
||||||
<LayoutBadgeImageView shrink badgeCode={ selectedBadge.badgeCode } />
|
<LayoutBadgeImageView shrink badgeCode={ selectedBadgeCode } />
|
||||||
<Text>{ LocalizeBadgeName(selectedBadge.badgeCode) }</Text>
|
<Text>{ LocalizeBadgeName(selectedBadgeCode) }</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Button variant={ (isWearingBadge(selectedBadge) ? 'danger' : 'success') } disabled={ !isWearingBadge(selectedBadge) && !canWearBadges() } onClick={ event => toggleBadge(selectedBadge) }>{ LocalizeText(isWearingBadge(selectedBadge) ? 'inventory.badges.clearbadge' : 'inventory.badges.wearbadge') }</Button>
|
<Button variant={ (isWearingBadge(selectedBadgeCode) ? 'danger' : 'success') } disabled={ !isWearingBadge(selectedBadgeCode) && !canWearBadges() } onClick={ event => toggleBadge(selectedBadgeCode) }>{ LocalizeText(isWearingBadge(selectedBadgeCode) ? 'inventory.badges.clearbadge' : 'inventory.badges.wearbadge') }</Button>
|
||||||
</Column> }
|
</Column> }
|
||||||
</Column>
|
</Column>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
@ -26,9 +26,9 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
|
|
||||||
const canTradeItem = (isWallItem: boolean, spriteId: number, category: number, groupable: boolean, stuffData: IObjectData) =>
|
const canTradeItem = (isWallItem: boolean, spriteId: number, category: number, groupable: boolean, stuffData: IObjectData) =>
|
||||||
{
|
{
|
||||||
if(!ownUser || ownUser.accepts || !ownUser.items) return false;
|
if(!ownUser || ownUser.accepts || !ownUser.userItems) return false;
|
||||||
|
|
||||||
if(ownUser.items.length < MAX_ITEMS_TO_TRADE) return true;
|
if(ownUser.userItems.length < MAX_ITEMS_TO_TRADE) return true;
|
||||||
|
|
||||||
if(!groupable) return false;
|
if(!groupable) return false;
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return !!ownUser.items.getValue(type);
|
return !!ownUser.userItems.getValue(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
const attemptItemOffer = (count: number) =>
|
const attemptItemOffer = (count: number) =>
|
||||||
@ -71,7 +71,7 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
if(!coreItem) coreItem = item;
|
if(!coreItem) coreItem = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
const ownItemCount = ownUser.items.length;
|
const ownItemCount = ownUser.userItems.length;
|
||||||
|
|
||||||
if((ownItemCount + itemIds.length) <= 1500)
|
if((ownItemCount + itemIds.length) <= 1500)
|
||||||
{
|
{
|
||||||
@ -130,12 +130,7 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
{
|
{
|
||||||
const newValue = (prevValue - 1);
|
const newValue = (prevValue - 1);
|
||||||
|
|
||||||
if(newValue === 0)
|
if(newValue === 0) clearInterval(interval);
|
||||||
{
|
|
||||||
setTradeState(TradeState.TRADING_STATE_CONFIRMING);
|
|
||||||
|
|
||||||
clearInterval(interval);
|
|
||||||
}
|
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
});
|
});
|
||||||
@ -144,6 +139,15 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
return () => clearInterval(interval);
|
return () => clearInterval(interval);
|
||||||
}, [ tradeState, setTradeState ]);
|
}, [ tradeState, setTradeState ]);
|
||||||
|
|
||||||
|
useEffect(() =>
|
||||||
|
{
|
||||||
|
if(countdownTick !== 0) return;
|
||||||
|
|
||||||
|
setTradeState(TradeState.TRADING_STATE_CONFIRMING);
|
||||||
|
}, [ countdownTick, setTradeState ]);
|
||||||
|
|
||||||
|
if((tradeState === TradeState.TRADING_STATE_READY) || !ownUser || !otherUser) return null;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Grid>
|
<Grid>
|
||||||
<Column size={ 4 } overflow="hidden">
|
<Column size={ 4 } overflow="hidden">
|
||||||
@ -179,7 +183,7 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
<AutoGrid columnCount={ 3 }>
|
<AutoGrid columnCount={ 3 }>
|
||||||
{ Array.from(Array(MAX_ITEMS_TO_TRADE), (e, i) =>
|
{ Array.from(Array(MAX_ITEMS_TO_TRADE), (e, i) =>
|
||||||
{
|
{
|
||||||
const item = (ownUser.items.getWithIndex(i) || null);
|
const item = (ownUser.userItems.getWithIndex(i) || null);
|
||||||
|
|
||||||
if(!item) return <LayoutGridItem key={ i } />;
|
if(!item) return <LayoutGridItem key={ i } />;
|
||||||
|
|
||||||
@ -205,7 +209,7 @@ export const InventoryTradeView: FC<InventoryTradeViewProps> = props =>
|
|||||||
<AutoGrid columnCount={ 3 }>
|
<AutoGrid columnCount={ 3 }>
|
||||||
{ Array.from(Array(MAX_ITEMS_TO_TRADE), (e, i) =>
|
{ Array.from(Array(MAX_ITEMS_TO_TRADE), (e, i) =>
|
||||||
{
|
{
|
||||||
const item = (otherUser.items.getWithIndex(i) || null);
|
const item = (otherUser.userItems.getWithIndex(i) || null);
|
||||||
|
|
||||||
if(!item) return <LayoutGridItem key={ i } />;
|
if(!item) return <LayoutGridItem key={ i } />;
|
||||||
|
|
||||||
|
@ -9,40 +9,41 @@ export const parseTradeItems = (items: ItemDataStructure[]) =>
|
|||||||
const existingItems = new AdvancedMap<string, GroupItem>();
|
const existingItems = new AdvancedMap<string, GroupItem>();
|
||||||
const totalItems = items.length;
|
const totalItems = items.length;
|
||||||
|
|
||||||
if(!totalItems) return null;
|
if(totalItems)
|
||||||
|
|
||||||
for(const item of items)
|
|
||||||
{
|
{
|
||||||
const spriteId = item.spriteId;
|
for(const item of items)
|
||||||
const category = item.category;
|
|
||||||
|
|
||||||
let name = (item.furniType + spriteId);
|
|
||||||
|
|
||||||
if(!item.isGroupable || isExternalImage(spriteId))
|
|
||||||
{
|
{
|
||||||
name = ('itemid' + item.itemId);
|
const spriteId = item.spriteId;
|
||||||
|
const category = item.category;
|
||||||
|
|
||||||
|
let name = (item.furniType + spriteId);
|
||||||
|
|
||||||
|
if(!item.isGroupable || isExternalImage(spriteId))
|
||||||
|
{
|
||||||
|
name = ('itemid' + item.itemId);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(item.category === FurniCategory.POSTER)
|
||||||
|
{
|
||||||
|
name = (item.itemId + 'poster' + item.stuffData.getLegacyString());
|
||||||
|
}
|
||||||
|
|
||||||
|
else if(item.category === FurniCategory.GUILD_FURNI)
|
||||||
|
{
|
||||||
|
name = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
let groupItem = ((item.isGroupable && !isExternalImage(item.spriteId)) ? existingItems.getValue(name) : null);
|
||||||
|
|
||||||
|
if(!groupItem)
|
||||||
|
{
|
||||||
|
groupItem = createGroupItem(spriteId, category, item.stuffData);
|
||||||
|
|
||||||
|
existingItems.add(name, groupItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
groupItem.push(new FurnitureItem(item));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(item.category === FurniCategory.POSTER)
|
|
||||||
{
|
|
||||||
name = (item.itemId + 'poster' + item.stuffData.getLegacyString());
|
|
||||||
}
|
|
||||||
|
|
||||||
else if(item.category === FurniCategory.GUILD_FURNI)
|
|
||||||
{
|
|
||||||
name = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
let groupItem = ((item.isGroupable && !isExternalImage(item.spriteId)) ? existingItems.getValue(name) : null);
|
|
||||||
|
|
||||||
if(!groupItem)
|
|
||||||
{
|
|
||||||
groupItem = createGroupItem(spriteId, category, item.stuffData);
|
|
||||||
|
|
||||||
existingItems.add(name, groupItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
groupItem.push(new FurnitureItem(item));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return existingItems;
|
return existingItems;
|
||||||
|
@ -2,34 +2,35 @@ import { BadgeReceivedEvent, BadgesEvent, RequestBadgesComposer, SetActivatedBad
|
|||||||
import { useCallback, useEffect, useState } from 'react';
|
import { useCallback, useEffect, useState } from 'react';
|
||||||
import { useBetween } from 'use-between';
|
import { useBetween } from 'use-between';
|
||||||
import { BatchUpdates, UseMessageEventHook } from '..';
|
import { BatchUpdates, UseMessageEventHook } from '..';
|
||||||
import { GetConfiguration, IBadgeItem, SendMessageComposer } from '../../api';
|
import { GetConfiguration, SendMessageComposer } from '../../api';
|
||||||
import { useSharedVisibility } from '../useSharedVisibility';
|
import { useSharedVisibility } from '../useSharedVisibility';
|
||||||
|
|
||||||
const useInventoryBadges = () =>
|
const useInventoryBadges = () =>
|
||||||
{
|
{
|
||||||
const [ isVisible, setIsVisible ] = useState(false);
|
const [ isVisible, setIsVisible ] = useState(false);
|
||||||
const [ needsUpdate, setNeedsUpdate ] = useState(true);
|
const [ needsUpdate, setNeedsUpdate ] = useState(true);
|
||||||
const [ badges, setBadges ] = useState<IBadgeItem[]>([]);
|
const [ badgeCodes, setBadgeCodes ] = useState<string[]>([]);
|
||||||
const [ activeBadges, setActiveBadges ] = useState<IBadgeItem[]>([]);
|
const [ badgeIds, setBadgeIds ] = useState<number[]>([]);
|
||||||
const [ selectedBadge, setSelectedBadge ] = useState<IBadgeItem>(null);
|
const [ activeBadgeCodes, setActiveBadgeCodes ] = useState<string[]>([]);
|
||||||
|
const [ selectedBadgeCode, setSelectedBadgeCode ] = useState<string>(null);
|
||||||
|
|
||||||
const maxBadgeCount = GetConfiguration<number>('user.badges.max.slots', 5);
|
const maxBadgeCount = GetConfiguration<number>('user.badges.max.slots', 5);
|
||||||
const isWearingBadge = (badge: IBadgeItem) => (activeBadges.indexOf(badge) >= 0);
|
const isWearingBadge = (badgeCode: string) => (activeBadgeCodes.indexOf(badgeCode) >= 0);
|
||||||
const canWearBadges = () => (activeBadges.length < maxBadgeCount);
|
const canWearBadges = () => (activeBadgeCodes.length < maxBadgeCount);
|
||||||
|
|
||||||
const toggleBadge = (badge: IBadgeItem) =>
|
const toggleBadge = (badgeCode: string) =>
|
||||||
{
|
{
|
||||||
setActiveBadges(prevValue =>
|
setActiveBadgeCodes(prevValue =>
|
||||||
{
|
{
|
||||||
const newValue = [ ...prevValue ];
|
const newValue = [ ...prevValue ];
|
||||||
|
|
||||||
const index = newValue.indexOf(badge);
|
const index = newValue.indexOf(badgeCode);
|
||||||
|
|
||||||
if(index === -1)
|
if(index === -1)
|
||||||
{
|
{
|
||||||
if(!canWearBadges()) return prevValue;
|
if(!canWearBadges()) return prevValue;
|
||||||
|
|
||||||
newValue.push(badge);
|
newValue.push(badgeCode);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -38,7 +39,7 @@ const useInventoryBadges = () =>
|
|||||||
|
|
||||||
const composer = new SetActivatedBadgesComposer();
|
const composer = new SetActivatedBadgesComposer();
|
||||||
|
|
||||||
for(let i = 0; i < maxBadgeCount; i++) composer.addActivatedBadge((newValue[i] && newValue[i].badgeCode) || null);
|
for(let i = 0; i < maxBadgeCount; i++) composer.addActivatedBadge(newValue[i] || null);
|
||||||
|
|
||||||
SendMessageComposer(composer);
|
SendMessageComposer(composer);
|
||||||
|
|
||||||
@ -46,11 +47,20 @@ const useInventoryBadges = () =>
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const selectBadge = (badge: IBadgeItem) =>
|
const selectBadge = (badgeCode: string) =>
|
||||||
{
|
{
|
||||||
if(badges.indexOf(badge) === -1) return;
|
if(badgeCodes.indexOf(badgeCode) === -1) return;
|
||||||
|
|
||||||
setSelectedBadge(badge);
|
setSelectedBadgeCode(badgeCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
const getBadgeId = (badgeCode: string) =>
|
||||||
|
{
|
||||||
|
const index = badgeCodes.indexOf(badgeCode);
|
||||||
|
|
||||||
|
if(index === -1) return 0;
|
||||||
|
|
||||||
|
return (badgeIds[index] || 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
const onBadgesEvent = useCallback((event: BadgesEvent) =>
|
const onBadgesEvent = useCallback((event: BadgesEvent) =>
|
||||||
@ -59,25 +69,14 @@ const useInventoryBadges = () =>
|
|||||||
|
|
||||||
BatchUpdates(() =>
|
BatchUpdates(() =>
|
||||||
{
|
{
|
||||||
setBadges(prevValue =>
|
const newBadgeCodes = parser.getAllBadgeCodes();
|
||||||
{
|
const newBadgeIds: number[] = [];
|
||||||
const newValue: IBadgeItem[] = [];
|
|
||||||
const badgeCodes = parser.getAllBadgeCodes();
|
|
||||||
|
|
||||||
for(const badgeCode of badgeCodes) newValue.push({ id: parser.getBadgeId(badgeCode), badgeCode });
|
for(const newBadgeCode of newBadgeCodes) newBadgeIds.push(parser.getBadgeId(newBadgeCode));
|
||||||
|
|
||||||
return newValue;
|
setBadgeCodes(newBadgeCodes);
|
||||||
});
|
setBadgeIds(newBadgeIds);
|
||||||
|
setActiveBadgeCodes(parser.getActiveBadgeCodes());
|
||||||
setActiveBadges(prevValue =>
|
|
||||||
{
|
|
||||||
const newValue: IBadgeItem[] = [];
|
|
||||||
const badgeCodes = parser.getActiveBadgeCodes();
|
|
||||||
|
|
||||||
for(const badgeCode of badgeCodes) newValue.push({ id: parser.getBadgeId(badgeCode), badgeCode });
|
|
||||||
|
|
||||||
return newValue;
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@ -87,33 +86,45 @@ const useInventoryBadges = () =>
|
|||||||
{
|
{
|
||||||
const parser = event.getParser();
|
const parser = event.getParser();
|
||||||
|
|
||||||
setBadges(prevValue =>
|
BatchUpdates(() =>
|
||||||
{
|
{
|
||||||
const newValue = [ ...prevValue ];
|
setBadgeCodes(prevValue =>
|
||||||
|
{
|
||||||
|
const newValue = [ ...prevValue ];
|
||||||
|
|
||||||
newValue.push({ id: parser.badgeId, badgeCode: parser.badgeCode });
|
newValue.push(parser.badgeCode);
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
setBadgeIds(prevValue =>
|
||||||
|
{
|
||||||
|
const newValue = [ ...prevValue ];
|
||||||
|
|
||||||
|
newValue.push(parser.badgeId);
|
||||||
|
|
||||||
|
return newValue;
|
||||||
|
})
|
||||||
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
UseMessageEventHook(BadgeReceivedEvent, onBadgeReceivedEvent);
|
UseMessageEventHook(BadgeReceivedEvent, onBadgeReceivedEvent);
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
if(!badges || !badges.length) return;
|
if(!badgeCodes || !badgeCodes.length) return;
|
||||||
|
|
||||||
setSelectedBadge(prevValue =>
|
setSelectedBadgeCode(prevValue =>
|
||||||
{
|
{
|
||||||
let newValue = prevValue;
|
let newValue = prevValue;
|
||||||
|
|
||||||
if(newValue && (badges.indexOf(newValue) === -1)) newValue = null;
|
if(newValue && (badgeCodes.indexOf(newValue) === -1)) newValue = null;
|
||||||
|
|
||||||
if(!newValue) newValue = badges[0];
|
if(!newValue) newValue = badgeCodes[0];
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
});
|
});
|
||||||
}, [ badges ]);
|
}, [ badgeCodes ]);
|
||||||
|
|
||||||
useEffect(() =>
|
useEffect(() =>
|
||||||
{
|
{
|
||||||
@ -124,7 +135,7 @@ const useInventoryBadges = () =>
|
|||||||
setNeedsUpdate(false);
|
setNeedsUpdate(false);
|
||||||
}, [ isVisible, needsUpdate ]);
|
}, [ isVisible, needsUpdate ]);
|
||||||
|
|
||||||
return { badges, activeBadges, selectedBadge, isWearingBadge, canWearBadges, toggleBadge, selectBadge, setIsVisible };
|
return { badgeCodes, activeBadgeCodes, selectedBadgeCode, isWearingBadge, canWearBadges, toggleBadge, selectBadge, getBadgeId, setIsVisible };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useSharedInventoryBadges = () =>
|
export const useSharedInventoryBadges = () =>
|
||||||
|
@ -116,7 +116,12 @@ const useInventoryFurni = () =>
|
|||||||
const group = newValue[index];
|
const group = newValue[index];
|
||||||
const item = group.remove(existingId);
|
const item = group.remove(existingId);
|
||||||
|
|
||||||
if(!item) index++;
|
if(!item)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(getPlacingItemId() === item.ref)
|
if(getPlacingItemId() === item.ref)
|
||||||
{
|
{
|
||||||
@ -183,7 +188,12 @@ const useInventoryFurni = () =>
|
|||||||
const group = newValue[index];
|
const group = newValue[index];
|
||||||
const item = group.remove(parser.itemId);
|
const item = group.remove(parser.itemId);
|
||||||
|
|
||||||
if(!item) index++;
|
if(!item)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(getPlacingItemId() === item.ref)
|
if(getPlacingItemId() === item.ref)
|
||||||
{
|
{
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
import { AdvancedMap, TradingAcceptComposer, TradingAcceptEvent, TradingCloseEvent, TradingCloseParser, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListItemEvent, TradingListItemRemoveComposer, TradingNotOpenEvent, TradingOpenEvent, TradingOpenFailedEvent, TradingOpenFailedParser, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent } from '@nitrots/nitro-renderer';
|
import { AdvancedMap, TradingAcceptComposer, TradingAcceptEvent, TradingCancelComposer, TradingCloseComposer, TradingCloseEvent, TradingCloseParser, TradingCompletedEvent, TradingConfirmationComposer, TradingConfirmationEvent, TradingListItemEvent, TradingListItemRemoveComposer, TradingNotOpenEvent, TradingOpenComposer, TradingOpenEvent, TradingOpenFailedEvent, TradingOpenFailedParser, TradingOtherNotAllowedEvent, TradingUnacceptComposer, TradingYouAreNotAllowedEvent } from '@nitrots/nitro-renderer';
|
||||||
import { useCallback, useState } from 'react';
|
import { useCallback, useState } from 'react';
|
||||||
import { useBetween } from 'use-between';
|
import { useBetween } from 'use-between';
|
||||||
import { useSharedInventoryFurni } from '.';
|
import { useSharedInventoryFurni } from '.';
|
||||||
import { BatchUpdates, UseMessageEventHook } from '..';
|
import { BatchUpdates, UseMessageEventHook } from '..';
|
||||||
import { CloneObject, GetRoomSession, GetSessionDataManager, GroupItem, LocalizeText, NotificationUtilities, SendMessageComposer, TradeState, TradeUserData, TradingNotificationMessage, TradingNotificationType } from '../../api';
|
import { CloneObject, GetRoomSession, GetSessionDataManager, GroupItem, LocalizeText, NotificationUtilities, SendMessageComposer, TradeState, TradeUserData, TradingNotificationMessage, TradingNotificationType } from '../../api';
|
||||||
|
import { InventoryTradeRequestEvent } from '../../events';
|
||||||
|
import { UseUiEvent } from '../events';
|
||||||
import { parseTradeItems } from './common';
|
import { parseTradeItems } from './common';
|
||||||
|
|
||||||
const useInventoryTrade = () =>
|
const useInventoryTrade = () =>
|
||||||
@ -12,6 +14,7 @@ const useInventoryTrade = () =>
|
|||||||
const [ otherUser, setOtherUser ] = useState<TradeUserData>(null);
|
const [ otherUser, setOtherUser ] = useState<TradeUserData>(null);
|
||||||
const [ tradeState, setTradeState ] = useState(TradeState.TRADING_STATE_READY);
|
const [ tradeState, setTradeState ] = useState(TradeState.TRADING_STATE_READY);
|
||||||
const { groupItems = [], setGroupItems = null } = useSharedInventoryFurni();
|
const { groupItems = [], setGroupItems = null } = useSharedInventoryFurni();
|
||||||
|
const isTrading = (tradeState >= TradeState.TRADING_STATE_RUNNING);
|
||||||
|
|
||||||
const progressTrade = () =>
|
const progressTrade = () =>
|
||||||
{
|
{
|
||||||
@ -49,6 +52,35 @@ const useInventoryTrade = () =>
|
|||||||
SendMessageComposer(new TradingListItemRemoveComposer(item.id));
|
SendMessageComposer(new TradingListItemRemoveComposer(item.id));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const stopTrading = () =>
|
||||||
|
{
|
||||||
|
if(!isTrading) return;
|
||||||
|
|
||||||
|
switch(tradeState)
|
||||||
|
{
|
||||||
|
case TradeState.TRADING_STATE_RUNNING:
|
||||||
|
SendMessageComposer(new TradingCloseComposer());
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
SendMessageComposer(new TradingCancelComposer());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const onInventoryTradeRequestEvent = useCallback((event: InventoryTradeRequestEvent) =>
|
||||||
|
{
|
||||||
|
switch(event.type)
|
||||||
|
{
|
||||||
|
case InventoryTradeRequestEvent.REQUEST_TRADE: {
|
||||||
|
const tradeEvent = (event as InventoryTradeRequestEvent);
|
||||||
|
|
||||||
|
SendMessageComposer(new TradingOpenComposer(tradeEvent.objectId));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
UseUiEvent(InventoryTradeRequestEvent.REQUEST_TRADE, onInventoryTradeRequestEvent);
|
||||||
|
|
||||||
const onTradingAcceptEvent = useCallback((event: TradingAcceptEvent) =>
|
const onTradingAcceptEvent = useCallback((event: TradingAcceptEvent) =>
|
||||||
{
|
{
|
||||||
const parser = event.getParser();
|
const parser = event.getParser();
|
||||||
@ -102,6 +134,7 @@ const useInventoryTrade = () =>
|
|||||||
{
|
{
|
||||||
setOwnUser(null);
|
setOwnUser(null);
|
||||||
setOtherUser(null);
|
setOtherUser(null);
|
||||||
|
setTradeState(TradeState.TRADING_STATE_READY);
|
||||||
});
|
});
|
||||||
}, [ ownUser ]);
|
}, [ ownUser ]);
|
||||||
|
|
||||||
@ -115,6 +148,7 @@ const useInventoryTrade = () =>
|
|||||||
{
|
{
|
||||||
setOwnUser(null);
|
setOwnUser(null);
|
||||||
setOtherUser(null);
|
setOtherUser(null);
|
||||||
|
setTradeState(TradeState.TRADING_STATE_READY);
|
||||||
});
|
});
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
@ -143,18 +177,18 @@ const useInventoryTrade = () =>
|
|||||||
{
|
{
|
||||||
newValue.creditsCount = parser.firstUserNumCredits;
|
newValue.creditsCount = parser.firstUserNumCredits;
|
||||||
newValue.itemCount = parser.firstUserNumItems;
|
newValue.itemCount = parser.firstUserNumItems;
|
||||||
newValue.items = firstUserItems;
|
newValue.userItems = firstUserItems;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newValue.creditsCount = parser.secondUserNumCredits;
|
newValue.creditsCount = parser.secondUserNumCredits;
|
||||||
newValue.itemCount = parser.secondUserNumItems;
|
newValue.itemCount = parser.secondUserNumItems;
|
||||||
newValue.items = secondUserItems;
|
newValue.userItems = secondUserItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
const tradeIds: number[] = [];
|
const tradeIds: number[] = [];
|
||||||
|
|
||||||
for(const groupItem of newValue.items.getValues())
|
for(const groupItem of newValue.userItems.getValues())
|
||||||
{
|
{
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
|
||||||
@ -188,13 +222,13 @@ const useInventoryTrade = () =>
|
|||||||
{
|
{
|
||||||
newValue.creditsCount = parser.firstUserNumCredits;
|
newValue.creditsCount = parser.firstUserNumCredits;
|
||||||
newValue.itemCount = parser.firstUserNumItems;
|
newValue.itemCount = parser.firstUserNumItems;
|
||||||
newValue.items = firstUserItems;
|
newValue.userItems = firstUserItems;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
newValue.creditsCount = parser.secondUserNumCredits;
|
newValue.creditsCount = parser.secondUserNumCredits;
|
||||||
newValue.itemCount = parser.secondUserNumItems;
|
newValue.itemCount = parser.secondUserNumItems;
|
||||||
newValue.items = secondUserItems;
|
newValue.userItems = secondUserItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
return newValue;
|
return newValue;
|
||||||
@ -206,8 +240,6 @@ const useInventoryTrade = () =>
|
|||||||
const onTradingNotOpenEvent = useCallback((event: TradingNotOpenEvent) =>
|
const onTradingNotOpenEvent = useCallback((event: TradingNotOpenEvent) =>
|
||||||
{
|
{
|
||||||
const parser = event.getParser();
|
const parser = event.getParser();
|
||||||
|
|
||||||
console.log(parser);
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
UseMessageEventHook(TradingNotOpenEvent, onTradingNotOpenEvent);
|
UseMessageEventHook(TradingNotOpenEvent, onTradingNotOpenEvent);
|
||||||
@ -287,7 +319,7 @@ const useInventoryTrade = () =>
|
|||||||
|
|
||||||
UseMessageEventHook(TradingYouAreNotAllowedEvent, onTradingYouAreNotAllowedEvent);
|
UseMessageEventHook(TradingYouAreNotAllowedEvent, onTradingYouAreNotAllowedEvent);
|
||||||
|
|
||||||
return { ownUser, otherUser, tradeState, setTradeState, groupItems, progressTrade, removeItem };
|
return { ownUser, otherUser, tradeState, setTradeState, isTrading, groupItems, progressTrade, removeItem, stopTrading };
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useSharedInventoryTrade = () => useBetween(useInventoryTrade);
|
export const useSharedInventoryTrade = () => useBetween(useInventoryTrade);
|
||||||
|
@ -109,8 +109,6 @@ const useInventoryUnseenTracker = () =>
|
|||||||
{
|
{
|
||||||
const parser = event.getParser();
|
const parser = event.getParser();
|
||||||
|
|
||||||
console.log(parser);
|
|
||||||
|
|
||||||
setUnseenItems(prevValue =>
|
setUnseenItems(prevValue =>
|
||||||
{
|
{
|
||||||
const newValue = new Map(prevValue);
|
const newValue = new Map(prevValue);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user