From 143f2d551a7ee0a1b1dbe122e52216b2f9dd695d Mon Sep 17 00:00:00 2001 From: raschel <38816784+aymericdelab@users.noreply.github.com> Date: Sun, 22 Dec 2024 17:34:49 +0100 Subject: [PATCH 1/7] fix realms limit (#2583) * fix weight config * fix realms limit * add structures to bridge * feedback --- landing/src/components/modules/bridge-in.tsx | 61 +++++--------- .../components/modules/bridge-out-step-1.tsx | 58 +++++--------- .../components/modules/bridge-out-step-2.tsx | 20 ++--- .../src/dojo/modelManager/ConfigManager.ts | 11 +-- landing/src/hooks/gql/gql.ts | 61 +++++++++----- landing/src/hooks/gql/graphql.ts | 2 +- landing/src/hooks/helpers/use-sync-entity.tsx | 39 --------- landing/src/hooks/helpers/useEntities.tsx | 79 ++++++++++++------- landing/src/hooks/query/entities.tsx | 2 +- 9 files changed, 144 insertions(+), 189 deletions(-) delete mode 100644 landing/src/hooks/helpers/use-sync-entity.tsx diff --git a/landing/src/components/modules/bridge-in.tsx b/landing/src/components/modules/bridge-in.tsx index c2c4d23734..851a1e0fee 100644 --- a/landing/src/components/modules/bridge-in.tsx +++ b/landing/src/components/modules/bridge-in.tsx @@ -1,7 +1,6 @@ import { configManager } from "@/dojo/setup"; import { execute } from "@/hooks/gql/execute"; import { useEntities } from "@/hooks/helpers/useEntities"; -import { useRealm } from "@/hooks/helpers/useRealms"; import { useResourceBalance } from "@/hooks/helpers/useResources"; import { GET_CAPACITY_SPEED_CONFIG } from "@/hooks/query/capacityConfig"; import { useLords } from "@/hooks/use-lords"; @@ -25,30 +24,24 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../ui/ import { calculateDonkeysNeeded, getSeasonAddresses, getTotalResourceWeight } from "../ui/utils/utils"; import { BridgeFees } from "./bridge-fees"; -interface S0EternumRealm { - __typename: "s0_eternum_Realm"; - realm_id: number; -} - -function isS0EternumRealm(model: any): model is S0EternumRealm { - return model?.__typename === "s0_eternum_Realm"; -} - export const BridgeIn = () => { const { address } = useAccount(); const [realmEntityId, setRealmEntityId] = useState(); - const { getBalance, isLoading: isResourcesLoading } = useResourceBalance({entityId: realmEntityId}); + const { getBalance, isLoading: isResourcesLoading } = useResourceBalance({ entityId: realmEntityId }); const { data } = useQuery({ queryKey: ["capacitySpeedConfig"], - queryFn: () => execute(GET_CAPACITY_SPEED_CONFIG, { category: "Donkey", entityType: DONKEY_ENTITY_TYPE }), + queryFn: () => execute(GET_CAPACITY_SPEED_CONFIG, { category: "Donkey", entityType: DONKEY_ENTITY_TYPE }), refetchInterval: 10_000, }); - const donkeyConfig = useMemo(() => ({ - capacity: Number(data?.s0EternumCapacityConfigModels?.edges?.[0]?.node?.weight_gram ?? 0), - speed: data?.s0EternumSpeedConfigModels?.edges?.[0]?.node?.sec_per_km ?? 0 - }), [data]); + const donkeyConfig = useMemo( + () => ({ + capacity: Number(data?.s0EternumCapacityConfigModels?.edges?.[0]?.node?.weight_gram ?? 0), + speed: data?.s0EternumSpeedConfigModels?.edges?.[0]?.node?.sec_per_km ?? 0, + }), + [data], + ); const [resourceFees, setResourceFees] = useState< { @@ -66,7 +59,6 @@ export const BridgeIn = () => { configManager.getSpeedConfig(DONKEY_ENTITY_TYPE), true, ); - const { getRealmNameById } = useRealm(); const [isLoading, setIsLoading] = useState(false); const [selectedResourceIds, setSelectedResourceIds] = useState([ResourcesIds.Lords]); const [selectedResourceAmounts, setSelectedResourceAmounts] = useState<{ [key: string]: number }>({ @@ -85,26 +77,11 @@ export const BridgeIn = () => { }); }; - const { data: playerRealms } = useEntities(); - const playerRealmsIdAndName = useMemo(() => { - return playerRealms?.s0EternumOwnerModels?.edges?.map((realm) => { - const realmModel = realm?.node?.entity?.models?.find(isS0EternumRealm); - return { - realmId: realmModel?.realm_id, - entityId: realm?.node?.entity_id, - name: getRealmNameById(realmModel?.realm_id ?? 0), - }; - }); - }, [playerRealms, getRealmNameById]); + const { playerStructures } = useEntities(); const travelTime = useMemo(() => { if (realmEntityId) { - return computeTravelTime( - Number(ADMIN_BANK_ENTITY_ID), - Number(realmEntityId!), - donkeyConfig.speed, - true, - ); + return computeTravelTime(Number(ADMIN_BANK_ENTITY_ID), Number(realmEntityId!), donkeyConfig.speed, true); } else { return 0; } @@ -139,7 +116,7 @@ export const BridgeIn = () => { } }, [orderWeight, donkeyConfig.capacity]); - const donkeyBalance = getBalance(ResourcesIds.Donkey) + const donkeyBalance = getBalance(ResourcesIds.Donkey); const { bridgeIntoRealm } = useBridgeAsset(); useEffect(() => { @@ -261,21 +238,21 @@ export const BridgeIn = () => { } > {address ? ( - + ) : (
-- Connect your wallet --
)} - {playerRealmsIdAndName?.length - ? playerRealmsIdAndName.map((realm) => { + {playerStructures?.length + ? playerStructures.map((structure) => { return ( - - #{realm.realmId} - {realm.name} + + #{structure.realmId} - {structure.name} ); }) - : "No Realms settled in Eternum"} + : "No Structure settled in Eternum"} @@ -399,7 +376,7 @@ const ResourceInputRow = ({ const { data: balance } = useBalance({ token: resourceAddress as `0x${string}`, address: address }); const { lordsBalance } = useLords({ disabled: id !== ResourcesIds.Lords }); - const { data, getBalance } = useResourceBalance({entityId: realmEntityId}); + const { data, getBalance } = useResourceBalance({ entityId: realmEntityId }); const fetchedBalance = id !== ResourcesIds.Lords diff --git a/landing/src/components/modules/bridge-out-step-1.tsx b/landing/src/components/modules/bridge-out-step-1.tsx index c8c1786803..a8dd204ded 100644 --- a/landing/src/components/modules/bridge-out-step-1.tsx +++ b/landing/src/components/modules/bridge-out-step-1.tsx @@ -1,7 +1,6 @@ import { configManager } from "@/dojo/setup"; import { execute } from "@/hooks/gql/execute"; import { useEntities } from "@/hooks/helpers/useEntities"; -import { useRealm } from "@/hooks/helpers/useRealms"; import { useResourceBalance } from "@/hooks/helpers/useResources"; import { GET_CAPACITY_SPEED_CONFIG } from "@/hooks/query/capacityConfig"; import { useBridgeAsset } from "@/hooks/useBridge"; @@ -33,35 +32,30 @@ import { } from "../ui/utils/utils"; import { BridgeFees } from "./bridge-fees"; -interface S0EternumRealm { - __typename: "s0_eternum_Realm"; - realm_id: number; -} - -function isS0EternumRealm(model: any): model is S0EternumRealm { - return model?.__typename === "s0_eternum_Realm"; -} export const BridgeOutStep1 = () => { const { address } = useAccount(); const [realmEntityId, setRealmEntityId] = useState(""); - const { getRealmNameById } = useRealm(); const { computeTravelTime } = useTravel( Number(ADMIN_BANK_ENTITY_ID), Number(realmEntityId!), configManager.getSpeedConfig(DONKEY_ENTITY_TYPE), true, - ); const [isFeesOpen, setIsFeesOpen] = useState(false); + ); + const [isFeesOpen, setIsFeesOpen] = useState(false); const { data } = useQuery({ queryKey: ["capacitySpeedConfig"], - queryFn: () => execute(GET_CAPACITY_SPEED_CONFIG, { category: "Donkey", entityType: DONKEY_ENTITY_TYPE }), + queryFn: () => execute(GET_CAPACITY_SPEED_CONFIG, { category: "Donkey", entityType: DONKEY_ENTITY_TYPE }), refetchInterval: 10_000, }); - const donkeyConfig = useMemo(() => ({ - capacity: Number(data?.s0EternumCapacityConfigModels?.edges?.[0]?.node?.weight_gram ?? 0), - speed: data?.s0EternumSpeedConfigModels?.edges?.[0]?.node?.sec_per_km ?? 0 - }), [data]); + const donkeyConfig = useMemo( + () => ({ + capacity: Number(data?.s0EternumCapacityConfigModels?.edges?.[0]?.node?.weight_gram ?? 0), + speed: data?.s0EternumSpeedConfigModels?.edges?.[0]?.node?.sec_per_km ?? 0, + }), + [data], + ); const [isLoading, setIsLoading] = useState(false); const { bridgeStartWithdrawFromRealm } = useBridgeAsset(); @@ -84,7 +78,7 @@ export const BridgeOutStep1 = () => { }[] >([]); - const { getBalance } = useResourceBalance({entityId: Number(realmEntityId)}); + const { getBalance } = useResourceBalance({ entityId: Number(realmEntityId) }); const donkeyBalance = useMemo(() => { if (realmEntityId) { return getBalance(ResourcesIds.Donkey); @@ -93,26 +87,11 @@ export const BridgeOutStep1 = () => { } }, [getBalance, realmEntityId]); - const { data: playerRealms } = useEntities(); - const playerRealmsIdAndName = useMemo(() => { - return playerRealms?.s0EternumOwnerModels?.edges?.map((realm) => { - const realmModel = realm?.node?.entity?.models?.find(isS0EternumRealm); - return { - realmId: realmModel?.realm_id, - entityId: realm?.node?.entity_id, - name: getRealmNameById(realmModel?.realm_id ?? 0), - }; - }); - }, [playerRealms, getRealmNameById]); + const { playerStructures } = useEntities(); const travelTime = useMemo(() => { if (realmEntityId) { - return computeTravelTime( - Number(ADMIN_BANK_ENTITY_ID), - Number(realmEntityId!), - donkeyConfig.speed, - false, - ); + return computeTravelTime(Number(ADMIN_BANK_ENTITY_ID), Number(realmEntityId!), donkeyConfig.speed, false); } else { return 0; } @@ -247,13 +226,13 @@ export const BridgeOutStep1 = () => { : "border-gold/40") } > - {address ? :
-- Connect your wallet --
} + {address ? :
-- Connect your wallet --
} - {playerRealmsIdAndName?.map((realm) => { + {playerStructures?.map((structure) => { return ( - - #{realm.realmId} - {realm.name} + + #{structure.realmId} - {structure.name} ); })} @@ -295,8 +274,7 @@ export const BridgeOutStep1 = () => {
- {donkeysNeeded} / {divideByPrecision(donkeyBalance)}{" "} - + {donkeysNeeded} / {divideByPrecision(donkeyBalance)}
{ const { address } = useAccount(); - const dojo = useDojo(); + const { playerStructures } = useEntities(); - const { data: playerRealms } = useEntities(); - const realmEntityIds = useMemo(() => { - return playerRealms?.s0EternumOwnerModels?.edges?.map((realm) => realm?.node?.entity_id) ?? []; - }, [playerRealms]); - - const { donkeyInfos } = useDonkeyArrivals(realmEntityIds); + const { donkeyInfos } = useDonkeyArrivals(playerStructures.map((structure) => structure.entityId)); const [isLoading, setIsLoading] = useState(false); const [isRefreshing, setIsRefreshing] = useState(false); @@ -46,7 +40,6 @@ export const BridgeOutStep2 = () => { }[] >([]); - const [refreshTrigger, setRefreshTrigger] = useState(0); /*const donkeysArrivals = useMemo(() => { if (bankPosition) { @@ -63,8 +56,6 @@ export const BridgeOutStep2 = () => { //useSyncEntity(donkeyArrivalsEntityIds); - - const { bridgeFinishWithdrawFromRealm } = useBridgeAsset(); const onFinishWithdrawFromBank = async () => { @@ -97,7 +88,8 @@ export const BridgeOutStep2 = () => { const updateResourcesFromSelectedDonkeys = (selectedDonkeyIds: Set) => { const allResources = Array.from(selectedDonkeyIds).flatMap( - (id) => donkeyInfos?.find((d) => d?.donkeyEntityId && BigInt(d.donkeyEntityId) === id)?.donkeyResourceBalances || [], + (id) => + donkeyInfos?.find((d) => d?.donkeyEntityId && BigInt(d.donkeyEntityId) === id)?.donkeyResourceBalances || [], ); setSelectedResourceIds(allResources.map((r) => r.resourceId as never)); @@ -250,7 +242,7 @@ export const BridgeOutStep2 = () => { className={`${ selectedDonkeys.has(BigInt(donkey?.donkeyEntityId || 0)) ? "bg-gold/10" : "" } hover:bg-gold/5 ${!isArrived ? "opacity-60" : "cursor-pointer"}`} - onClick={(e) => { + onClick={(e) => { if (!isArrived) return; const newSelected = new Set(selectedDonkeys); diff --git a/landing/src/dojo/modelManager/ConfigManager.ts b/landing/src/dojo/modelManager/ConfigManager.ts index 9b3eaafc34..f71880dc9a 100644 --- a/landing/src/dojo/modelManager/ConfigManager.ts +++ b/landing/src/dojo/modelManager/ConfigManager.ts @@ -231,12 +231,13 @@ export class ClientConfigManager { } getResourceWeight(resourceId: number): number { + // todo: using EternumGlobalConfig because no access to recs return this.getValueOrDefault(() => { - const weightConfig = getComponentValue( - this.components.WeightConfig, - getEntityIdFromKeys([WORLD_CONFIG_ID, BigInt(resourceId)]), - ); - return Number(weightConfig?.weight_gram ?? 0); + const weightGram = + EternumGlobalConfig.resources.resourceWeightsGrams[ + resourceId as keyof typeof EternumGlobalConfig.resources.resourceWeightsGrams + ]; + return weightGram; }, 0); } diff --git a/landing/src/hooks/gql/gql.ts b/landing/src/hooks/gql/gql.ts index 7effd4df3c..dd58633a66 100644 --- a/landing/src/hooks/gql/gql.ts +++ b/landing/src/hooks/gql/gql.ts @@ -1,7 +1,5 @@ /* eslint-disable */ -import * as types from './graphql'; - - +import * as types from "./graphql"; /** * Map of all GraphQL operations in the project. @@ -15,49 +13,72 @@ import * as types from './graphql'; * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size */ const documents = { - "\n query getCapacitySpeedConfig($category: Enum!, $entityType: u32!) {\n s0EternumCapacityConfigModels(where: {category: $category }) {\n edges{\n node {\n weight_gram\n }\n }\n }\n s0EternumSpeedConfigModels(where: {entity_type: $entityType }) {\n edges{\n node {\n sec_per_km\n }\n }\n }\n }\n": types.GetCapacitySpeedConfigDocument, - "\n query getEternumOwnerRealmIds($accountAddress: ContractAddress!) {\n s0EternumOwnerModels(where: { address: $accountAddress }) {\n edges {\n node {\n address\n entity_id\n entity {\n models {\n __typename\n ... on s0_eternum_Realm {\n realm_id\n }\n }\n }\n }\n }\n }\n }\n": types.GetEternumOwnerRealmIdsDocument, - "\n query getEternumEntityOwner($entityOwnerIds: [u32!]!) {\n s0EternumEntityOwnerModels(where: { entity_owner_idIN: $entityOwnerIds}, limit: 200) {\n edges {\n node {\n entity_id\n entity_owner_id\n entity {\n models {\n __typename\n ... on s0_eternum_OwnedResourcesTracker {\n resource_types\n }\n ... on s0_eternum_Position {\n x\n y\n }\n ... on s0_eternum_ArrivalTime {\n arrives_at\n }\n ... on s0_eternum_Weight {\n value\n }\n }\n }\n }\n }\n }\n }\n": types.GetEternumEntityOwnerDocument, - "\n query getAccountTokens($accountAddress: String!) {\n tokenBalances(accountAddress: $accountAddress, limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n": types.GetAccountTokensDocument, - "\n query getERC721Mints {\n tokenTransfers(accountAddress: \"0x0\", limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n": types.GetErc721MintsDocument, - "\n query eternumStatistics {\n s0EternumAddressNameModels {\n totalCount\n }\n s0EternumHyperstructureModels {\n totalCount\n }\n s0EternumRealmModels {\n totalCount\n }\n s0EternumFragmentMineDiscoveredModels {\n totalCount\n }\n }\n": types.EternumStatisticsDocument, - "\n query getEntityPosition($entityIds: [u32!]!) {\n s0EternumPositionModels(where: { entity_idIN: $entityIds }) {\n edges {\n node {\n x\n y\n entity_id\n entity {\n __typename\n }\n }\n }\n }\n }\n": types.GetEntityPositionDocument, - "\n query getEntitiesResources($entityIds: [u32!]!) {\n s0EternumResourceModels(\n where: { \n entity_idIN: $entityIds\n }\n limit: 100\n ) {\n edges {\n node {\n entity_id\n resource_type\n balance\n entity {\n __typename\n }\n }\n }\n }\n }\n": types.GetEntitiesResourcesDocument, + "\n query getCapacitySpeedConfig($category: Enum!, $entityType: u32!) {\n s0EternumCapacityConfigModels(where: {category: $category }) {\n edges{\n node {\n weight_gram\n }\n }\n }\n s0EternumSpeedConfigModels(where: {entity_type: $entityType }) {\n edges{\n node {\n sec_per_km\n }\n }\n }\n }\n": + types.GetCapacitySpeedConfigDocument, + "\n query getEternumOwnerRealmIds($accountAddress: ContractAddress!) {\n s0EternumOwnerModels(where: { address: $accountAddress }, limit: 1000) {\n edges {\n node {\n address\n entity_id\n entity {\n models {\n __typename\n ... on s0_eternum_Realm {\n realm_id\n }\n }\n }\n }\n }\n }\n }\n": + types.GetEternumOwnerRealmIdsDocument, + "\n query getEternumEntityOwner($entityOwnerIds: [u32!]!) {\n s0EternumEntityOwnerModels(where: { entity_owner_idIN: $entityOwnerIds}, limit: 200) {\n edges {\n node {\n entity_id\n entity_owner_id\n entity {\n models {\n __typename\n ... on s0_eternum_OwnedResourcesTracker {\n resource_types\n }\n ... on s0_eternum_Position {\n x\n y\n }\n ... on s0_eternum_ArrivalTime {\n arrives_at\n }\n ... on s0_eternum_Weight {\n value\n }\n }\n }\n }\n }\n }\n }\n": + types.GetEternumEntityOwnerDocument, + "\n query getAccountTokens($accountAddress: String!) {\n tokenBalances(accountAddress: $accountAddress, limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n": + types.GetAccountTokensDocument, + '\n query getERC721Mints {\n tokenTransfers(accountAddress: "0x0", limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n': + types.GetErc721MintsDocument, + "\n query eternumStatistics {\n s0EternumAddressNameModels {\n totalCount\n }\n s0EternumHyperstructureModels {\n totalCount\n }\n s0EternumRealmModels {\n totalCount\n }\n s0EternumFragmentMineDiscoveredModels {\n totalCount\n }\n }\n": + types.EternumStatisticsDocument, + "\n query getEntityPosition($entityIds: [u32!]!) {\n s0EternumPositionModels(where: { entity_idIN: $entityIds }) {\n edges {\n node {\n x\n y\n entity_id\n entity {\n __typename\n }\n }\n }\n }\n }\n": + types.GetEntityPositionDocument, + "\n query getEntitiesResources($entityIds: [u32!]!) {\n s0EternumResourceModels(\n where: { \n entity_idIN: $entityIds\n }\n limit: 100\n ) {\n edges {\n node {\n entity_id\n resource_type\n balance\n entity {\n __typename\n }\n }\n }\n }\n }\n": + types.GetEntitiesResourcesDocument, }; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getCapacitySpeedConfig($category: Enum!, $entityType: u32!) {\n s0EternumCapacityConfigModels(where: {category: $category }) {\n edges{\n node {\n weight_gram\n }\n }\n }\n s0EternumSpeedConfigModels(where: {entity_type: $entityType }) {\n edges{\n node {\n sec_per_km\n }\n }\n }\n }\n"): typeof import('./graphql').GetCapacitySpeedConfigDocument; +export function graphql( + source: "\n query getCapacitySpeedConfig($category: Enum!, $entityType: u32!) {\n s0EternumCapacityConfigModels(where: {category: $category }) {\n edges{\n node {\n weight_gram\n }\n }\n }\n s0EternumSpeedConfigModels(where: {entity_type: $entityType }) {\n edges{\n node {\n sec_per_km\n }\n }\n }\n }\n", +): typeof import("./graphql").GetCapacitySpeedConfigDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getEternumOwnerRealmIds($accountAddress: ContractAddress!) {\n s0EternumOwnerModels(where: { address: $accountAddress }) {\n edges {\n node {\n address\n entity_id\n entity {\n models {\n __typename\n ... on s0_eternum_Realm {\n realm_id\n }\n }\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetEternumOwnerRealmIdsDocument; +export function graphql( + source: "\n query getEternumOwnerRealmIds($accountAddress: ContractAddress!) {\n s0EternumOwnerModels(where: { address: $accountAddress }, limit: 1000) {\n edges {\n node {\n address\n entity_id\n entity {\n models {\n __typename\n ... on s0_eternum_Realm {\n realm_id\n }\n }\n }\n }\n }\n }\n }\n", +): typeof import("./graphql").GetEternumOwnerRealmIdsDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getEternumEntityOwner($entityOwnerIds: [u32!]!) {\n s0EternumEntityOwnerModels(where: { entity_owner_idIN: $entityOwnerIds}, limit: 200) {\n edges {\n node {\n entity_id\n entity_owner_id\n entity {\n models {\n __typename\n ... on s0_eternum_OwnedResourcesTracker {\n resource_types\n }\n ... on s0_eternum_Position {\n x\n y\n }\n ... on s0_eternum_ArrivalTime {\n arrives_at\n }\n ... on s0_eternum_Weight {\n value\n }\n }\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetEternumEntityOwnerDocument; +export function graphql( + source: "\n query getEternumEntityOwner($entityOwnerIds: [u32!]!) {\n s0EternumEntityOwnerModels(where: { entity_owner_idIN: $entityOwnerIds}, limit: 200) {\n edges {\n node {\n entity_id\n entity_owner_id\n entity {\n models {\n __typename\n ... on s0_eternum_OwnedResourcesTracker {\n resource_types\n }\n ... on s0_eternum_Position {\n x\n y\n }\n ... on s0_eternum_ArrivalTime {\n arrives_at\n }\n ... on s0_eternum_Weight {\n value\n }\n }\n }\n }\n }\n }\n }\n", +): typeof import("./graphql").GetEternumEntityOwnerDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getAccountTokens($accountAddress: String!) {\n tokenBalances(accountAddress: $accountAddress, limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetAccountTokensDocument; +export function graphql( + source: "\n query getAccountTokens($accountAddress: String!) {\n tokenBalances(accountAddress: $accountAddress, limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n", +): typeof import("./graphql").GetAccountTokensDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getERC721Mints {\n tokenTransfers(accountAddress: \"0x0\", limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetErc721MintsDocument; +export function graphql( + source: '\n query getERC721Mints {\n tokenTransfers(accountAddress: "0x0", limit: 8000) {\n edges {\n node {\n tokenMetadata {\n __typename\n ... on ERC721__Token {\n tokenId\n metadataDescription\n imagePath\n contractAddress\n metadata\n }\n }\n }\n }\n }\n }\n', +): typeof import("./graphql").GetErc721MintsDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query eternumStatistics {\n s0EternumAddressNameModels {\n totalCount\n }\n s0EternumHyperstructureModels {\n totalCount\n }\n s0EternumRealmModels {\n totalCount\n }\n s0EternumFragmentMineDiscoveredModels {\n totalCount\n }\n }\n"): typeof import('./graphql').EternumStatisticsDocument; +export function graphql( + source: "\n query eternumStatistics {\n s0EternumAddressNameModels {\n totalCount\n }\n s0EternumHyperstructureModels {\n totalCount\n }\n s0EternumRealmModels {\n totalCount\n }\n s0EternumFragmentMineDiscoveredModels {\n totalCount\n }\n }\n", +): typeof import("./graphql").EternumStatisticsDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getEntityPosition($entityIds: [u32!]!) {\n s0EternumPositionModels(where: { entity_idIN: $entityIds }) {\n edges {\n node {\n x\n y\n entity_id\n entity {\n __typename\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetEntityPositionDocument; +export function graphql( + source: "\n query getEntityPosition($entityIds: [u32!]!) {\n s0EternumPositionModels(where: { entity_idIN: $entityIds }) {\n edges {\n node {\n x\n y\n entity_id\n entity {\n __typename\n }\n }\n }\n }\n }\n", +): typeof import("./graphql").GetEntityPositionDocument; /** * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. */ -export function graphql(source: "\n query getEntitiesResources($entityIds: [u32!]!) {\n s0EternumResourceModels(\n where: { \n entity_idIN: $entityIds\n }\n limit: 100\n ) {\n edges {\n node {\n entity_id\n resource_type\n balance\n entity {\n __typename\n }\n }\n }\n }\n }\n"): typeof import('./graphql').GetEntitiesResourcesDocument; - +export function graphql( + source: "\n query getEntitiesResources($entityIds: [u32!]!) {\n s0EternumResourceModels(\n where: { \n entity_idIN: $entityIds\n }\n limit: 100\n ) {\n edges {\n node {\n entity_id\n resource_type\n balance\n entity {\n __typename\n }\n }\n }\n }\n }\n", +): typeof import("./graphql").GetEntitiesResourcesDocument; export function graphql(source: string) { return (documents as any)[source] ?? {}; diff --git a/landing/src/hooks/gql/graphql.ts b/landing/src/hooks/gql/graphql.ts index 7bc17ca3ea..34c0aceaad 100644 --- a/landing/src/hooks/gql/graphql.ts +++ b/landing/src/hooks/gql/graphql.ts @@ -7352,7 +7352,7 @@ export const GetCapacitySpeedConfigDocument = new TypedDocumentString(` `) as unknown as TypedDocumentString; export const GetEternumOwnerRealmIdsDocument = new TypedDocumentString(` query getEternumOwnerRealmIds($accountAddress: ContractAddress!) { - s0EternumOwnerModels(where: {address: $accountAddress}) { + s0EternumOwnerModels(where: {address: $accountAddress}, limit: 1000) { edges { node { address diff --git a/landing/src/hooks/helpers/use-sync-entity.tsx b/landing/src/hooks/helpers/use-sync-entity.tsx deleted file mode 100644 index e3511daff4..0000000000 --- a/landing/src/hooks/helpers/use-sync-entity.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { addToSubscription } from "@/dojo/queries"; -import { useEffect, useMemo, useState } from "react"; -import { useDojo } from "../context/DojoContext"; -import { useEntities } from "./useEntities"; - -export const useSyncEntity = (entityIds: number | number[]) => { - const dojo = useDojo(); - const [isSyncing, setIsSyncing] = useState(false); - - useEffect(() => { - setIsSyncing(true); - const fetch = async () => { - try { - const ids = Array.isArray(entityIds) ? entityIds : [entityIds]; - await Promise.all( - ids.map((id) => - addToSubscription(dojo.network.toriiClient, dojo.network.contractComponents as any, id.toString()), - ), - ); - } catch (error) { - console.error("Fetch failed", error); - } finally { - setIsSyncing(false); - } - }; - fetch(); - }, [entityIds]); - - return isSyncing; -}; - -export const useSyncPlayerRealms = () => { - const { playerRealms } = useEntities(); - const realmEntityIds = useMemo(() => { - return playerRealms.map((realm) => realm!.entity_id); - }, [playerRealms]); - - return useSyncEntity(realmEntityIds); -}; diff --git a/landing/src/hooks/helpers/useEntities.tsx b/landing/src/hooks/helpers/useEntities.tsx index c0b9c3451e..df7543947a 100644 --- a/landing/src/hooks/helpers/useEntities.tsx +++ b/landing/src/hooks/helpers/useEntities.tsx @@ -1,36 +1,26 @@ import { useAccount } from "@starknet-react/core"; import { useQuery } from "@tanstack/react-query"; +import { useMemo } from "react"; import { execute } from "../gql/execute"; import { GET_ETERNUM_OWNER_REALM_IDS } from "../query/entities"; +import { useRealm } from "./useRealms"; -export const useEntities = () => { - /*const { - account: { account }, - setup: { - components: { Realm, Owner }, - }, - } = useDojo();*/ - - const { address } = useAccount(); +export interface S0EternumRealm { + __typename: "s0_eternum_Realm"; + realm_id: number; +} - /* const dojoAddress = ContractAddress(account?.address || ""); +export function isS0EternumRealm(model: any): model is S0EternumRealm { + return model?.__typename === "s0_eternum_Realm"; +} - // Get all realms - const allRealms = useEntityQuery([Has(Realm)]); +export function isS0EternumStructure(model: any) { + return model?.__typename === "s0_eternum_Structure"; +} - const filterPlayerRealms = useMemo(() => { - return allRealms.filter((id) => { - const owner = getComponentValue(Owner, id); - return owner && ContractAddress(owner.address) === ContractAddress(dojoAddress); - }); - }, [allRealms, dojoAddress]); - - const playerRealms = useMemo(() => { - return filterPlayerRealms.map((id) => { - const realm = getComponentValue(Realm, id); - return realm; - }); - }, [filterPlayerRealms]);*/ +export const useEntities = () => { + const { address } = useAccount(); + const { getRealmNameById } = useRealm(); const { data, isLoading } = useQuery({ queryKey: ["entityResources", address], @@ -38,8 +28,43 @@ export const useEntities = () => { refetchInterval: 10_000, }); + const playerRealms = useMemo(() => { + if (!data) return []; + + return data.s0EternumOwnerModels?.edges + ?.map((realm) => { + const realmModel = realm?.node?.entity?.models?.find(isS0EternumRealm); + if (!realmModel) return null; + return { + realmId: realmModel?.realm_id, + entityId: realm?.node?.entity_id, + name: getRealmNameById(realmModel?.realm_id ?? 0), + }; + }) + .filter(Boolean) as { realmId: number; entityId: number; name: string }[]; + }, [data, getRealmNameById]); + + const playerStructures = useMemo(() => { + if (!data) return []; + + return data.s0EternumOwnerModels?.edges + ?.map((structure) => { + const structureModel = structure?.node?.entity?.models?.find(isS0EternumStructure); + if (!structureModel) return null; + const realmModel = structure?.node?.entity?.models?.find(isS0EternumRealm); + const entityId = structure?.node?.entity_id; + return { + realmId: realmModel?.realm_id || entityId, + entityId, + name: realmModel ? getRealmNameById(realmModel?.realm_id ?? 0) : "Structure", + }; + }) + .filter(Boolean) as { realmId: number | undefined; entityId: number; name: string }[]; + }, [data, getRealmNameById]); + return { - data, - //playerRealms, + playerRealms, + playerStructures, + isLoading, }; }; diff --git a/landing/src/hooks/query/entities.tsx b/landing/src/hooks/query/entities.tsx index 430d611943..0abfb41dbf 100644 --- a/landing/src/hooks/query/entities.tsx +++ b/landing/src/hooks/query/entities.tsx @@ -2,7 +2,7 @@ import { graphql } from "../gql"; export const GET_ETERNUM_OWNER_REALM_IDS = graphql(` query getEternumOwnerRealmIds($accountAddress: ContractAddress!) { - s0EternumOwnerModels(where: { address: $accountAddress }) { + s0EternumOwnerModels(where: { address: $accountAddress }, limit: 1000) { edges { node { address From e0c23e42901dfe6ddaf7e2c9e49a6acc087f6ac7 Mon Sep 17 00:00:00 2001 From: raschel <38816784+aymericdelab@users.noreply.github.com> Date: Sun, 22 Dec 2024 22:58:57 +0100 Subject: [PATCH 2/7] sync armies fix (#2585) --- client/src/dojo/debouncedQueries.ts | 6 ++-- client/src/dojo/queries.ts | 35 ++++------------------ client/src/hooks/store/useWorldLoading.tsx | 4 +-- client/src/ui/components/WorldLoading.tsx | 2 +- client/src/ui/layouts/World.tsx | 8 ++--- 5 files changed, 15 insertions(+), 40 deletions(-) diff --git a/client/src/dojo/debouncedQueries.ts b/client/src/dojo/debouncedQueries.ts index 58558184eb..ea350511ac 100644 --- a/client/src/dojo/debouncedQueries.ts +++ b/client/src/dojo/debouncedQueries.ts @@ -2,7 +2,7 @@ import { Component, Metadata, Schema } from "@dojoengine/recs"; import { ToriiClient } from "@dojoengine/torii-client"; import debounce from "lodash/debounce"; import { - addArrivalsSubscription, + addDonkeysAndArmiesSubscription, addHyperstructureSubscription, addMarketSubscription, addToSubscription, @@ -103,14 +103,14 @@ export const debouncedAddToSubscriptionOneKey = debounce( { leading: true }, ); -export const debounceAddResourceArrivals = debounce( +export const debounceAddDonkeysAndArmiesSubscription = debounce( async ( client: ToriiClient, components: Component[], entityID: number[], onComplete?: () => void, ) => { - await subscriptionQueue.add(() => addArrivalsSubscription(client, components, entityID), onComplete); + await subscriptionQueue.add(() => addDonkeysAndArmiesSubscription(client, components, entityID), onComplete); }, 250, { leading: true }, diff --git a/client/src/dojo/queries.ts b/client/src/dojo/queries.ts index 20f2e334d2..99575f481d 100644 --- a/client/src/dojo/queries.ts +++ b/client/src/dojo/queries.ts @@ -191,7 +191,7 @@ export const addHyperstructureSubscription = async ( console.log("HyperstructureEnd", end - start); }; -export const addArrivalsSubscription = async ( +export const addDonkeysAndArmiesSubscription = async ( client: ToriiClient, components: Component[], entityIds: number[], @@ -200,35 +200,6 @@ export const addArrivalsSubscription = async ( console.log("ArrivalsEnd: starting resource arrivals"); await getEntities( client, - // todo: waiting on ghlim to check issue with this query - // { - // Composite: { - // operator: "And", - // clauses: [ - // { - // Composite: { - // operator: "Or", - // clauses: entityIds.map((id) => ({ - // Member: { - // model: "s0_eternum-EntityOwner", - // member: "entity_owner_id", - // operator: "Eq", - // value: { Primitive: { U32: id } }, - // }, - // })), - // }, - // }, - // { - // Member: { - // model: "s0_eternum-OwnedResourcesTracker", - // member: "resource_types", - // operator: "Neq", - // value: { Primitive: { U256: "0" } }, - // }, - // }, - // ], - // }, - // }, { Composite: { operator: "Or", @@ -248,10 +219,14 @@ export const addArrivalsSubscription = async ( [ "s0_eternum-Army", "s0_eternum-Position", + "s0_eternum-Health", "s0_eternum-EntityOwner", + "s0_eternum-Protectee", + "s0_eternum-Stamina", "s0_eternum-Weight", "s0_eternum-OwnedResourcesTracker", "s0_eternum-ArrivalTime", + "s0_eternum-Quantity", ], 1000, false, diff --git a/client/src/hooks/store/useWorldLoading.tsx b/client/src/hooks/store/useWorldLoading.tsx index 5a1ab77b57..55e76cf111 100644 --- a/client/src/hooks/store/useWorldLoading.tsx +++ b/client/src/hooks/store/useWorldLoading.tsx @@ -7,7 +7,7 @@ export enum LoadingStateKey { Market = "market", PlayerStructuresOneKey = "playerStructuresOneKey", PlayerStructuresTwoKey = "playerStructuresTwoKey", - Arrivals = "arrivals", + DonkeysAndArmies = "donkeysAndArmies", Map = "map", Bank = "bank", World = "world", @@ -32,7 +32,7 @@ export const createWorldStoreSlice = (set: any) => ({ [LoadingStateKey.Market]: false, [LoadingStateKey.PlayerStructuresOneKey]: false, [LoadingStateKey.PlayerStructuresTwoKey]: false, - [LoadingStateKey.Arrivals]: false, + [LoadingStateKey.DonkeysAndArmies]: false, [LoadingStateKey.Map]: false, [LoadingStateKey.Bank]: false, [LoadingStateKey.World]: false, diff --git a/client/src/ui/components/WorldLoading.tsx b/client/src/ui/components/WorldLoading.tsx index 71d7534863..fbb45c35ac 100644 --- a/client/src/ui/components/WorldLoading.tsx +++ b/client/src/ui/components/WorldLoading.tsx @@ -12,7 +12,7 @@ export const WorldLoading = () => { if (loadingStates[LoadingStateKey.Market]) items.push("Market"); if (loadingStates[LoadingStateKey.PlayerStructuresOneKey] || loadingStates[LoadingStateKey.PlayerStructuresTwoKey]) items.push("Player Structures"); - if (loadingStates[LoadingStateKey.Arrivals]) items.push("Arrivals"); + if (loadingStates[LoadingStateKey.DonkeysAndArmies]) items.push("Donkeys and Armies"); if (loadingStates[LoadingStateKey.Map]) items.push("Map"); if (loadingStates[LoadingStateKey.Bank]) items.push("Bank"); if (loadingStates[LoadingStateKey.World]) items.push("World"); diff --git a/client/src/ui/layouts/World.tsx b/client/src/ui/layouts/World.tsx index 5448f989e6..1817fc8dd1 100644 --- a/client/src/ui/layouts/World.tsx +++ b/client/src/ui/layouts/World.tsx @@ -4,7 +4,7 @@ import { Redirect } from "wouter"; import useUIStore from "../../hooks/store/useUIStore"; import { - debounceAddResourceArrivals, + debounceAddDonkeysAndArmiesSubscription, debouncedAddHyperstructureSubscription, debouncedAddMarketSubscription, debouncedAddToSubscription, @@ -164,7 +164,7 @@ export const World = ({ backgroundImage }: { backgroundImage: string }) => { const fetch = async () => { setLoading(LoadingStateKey.PlayerStructuresOneKey, true); setLoading(LoadingStateKey.PlayerStructuresTwoKey, true); - setLoading(LoadingStateKey.Arrivals, true); + setLoading(LoadingStateKey.DonkeysAndArmies, true); const isSyncing = true; @@ -186,11 +186,11 @@ export const World = ({ backgroundImage }: { backgroundImage: string }) => { ), ]); - await debounceAddResourceArrivals( + await debounceAddDonkeysAndArmiesSubscription( dojo.network.toriiClient, dojo.network.contractComponents as any, [...structures.map((structure) => structure.entity_id)], - () => setLoading(LoadingStateKey.Arrivals, false), + () => setLoading(LoadingStateKey.DonkeysAndArmies, false), ); } catch (error) { console.error("Fetch failed", error); From d70eb4af9a2511faddf4a825e3f7665e364c0f91 Mon Sep 17 00:00:00 2001 From: Bob <80072466+bob0005@users.noreply.github.com> Date: Mon, 23 Dec 2024 13:22:17 +0100 Subject: [PATCH 3/7] remove lords filter (#2588) --- client/src/ui/components/trading/SelectResources.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/client/src/ui/components/trading/SelectResources.tsx b/client/src/ui/components/trading/SelectResources.tsx index cdfdf1c16b..58c6848e3c 100644 --- a/client/src/ui/components/trading/SelectResources.tsx +++ b/client/src/ui/components/trading/SelectResources.tsx @@ -27,7 +27,6 @@ export const SelectResources = ({ const orderedResources = useMemo(() => { return Object.values(RESOURCE_TIERS) .flat() - .filter((resourceId) => resourceId !== ResourcesIds.Lords) .map((resourceId) => ({ id: resourceId, trait: ResourcesIds[resourceId], From b07a075ba085b1981a618321d20b6f471e8b0641 Mon Sep 17 00:00:00 2001 From: tedison <76473430+edisontim@users.noreply.github.com> Date: Mon, 23 Dec 2024 07:43:00 -0500 Subject: [PATCH 4/7] Fix decimals in transfer (#2589) --- .../resources/EntityResourceTable.tsx | 4 ++-- .../ui/components/resources/ResourceChip.tsx | 2 +- .../components/resources/realm-transfer.tsx | 21 ++++++++++++------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/client/src/ui/components/resources/EntityResourceTable.tsx b/client/src/ui/components/resources/EntityResourceTable.tsx index 7407fbb650..6657507075 100644 --- a/client/src/ui/components/resources/EntityResourceTable.tsx +++ b/client/src/ui/components/resources/EntityResourceTable.tsx @@ -1,13 +1,12 @@ import { configManager } from "@/dojo/setup"; import { useDojo } from "@/hooks/context/DojoContext"; -import { useStructures } from "@/hooks/helpers/useStructures"; import useNextBlockTimestamp from "@/hooks/useNextBlockTimestamp"; import { getEntityIdFromKeys, gramToKg, multiplyByPrecision } from "@/ui/utils/utils"; import { BuildingType, CapacityConfigCategory, ID, RESOURCE_TIERS, StructureType } from "@bibliothecadao/eternum"; import { useComponentValue } from "@dojoengine/react"; +import { getComponentValue } from "@dojoengine/recs"; import { useMemo } from "react"; import { ResourceChip } from "./ResourceChip"; -import { getComponentValue } from "@dojoengine/recs"; export const EntityResourceTable = ({ entityId }: { entityId: ID | undefined }) => { const dojo = useDojo(); @@ -42,6 +41,7 @@ export const EntityResourceTable = ({ entityId }: { entityId: ID | undefined }) tick={tick} /> )); + return (
{resources}
diff --git a/client/src/ui/components/resources/ResourceChip.tsx b/client/src/ui/components/resources/ResourceChip.tsx index 7cddae57f3..7ab753521c 100644 --- a/client/src/ui/components/resources/ResourceChip.tsx +++ b/client/src/ui/components/resources/ResourceChip.tsx @@ -164,7 +164,7 @@ export const ResourceChip = ({ > {icon}
-
{currencyFormat(balance ? Number(balance) : 0, 0)}
+
{currencyFormat(balance ? Number(balance) : 0, 2)}
{timeUntilValueReached !== 0 diff --git a/client/src/ui/components/resources/realm-transfer.tsx b/client/src/ui/components/resources/realm-transfer.tsx index 038c288056..72b781feab 100644 --- a/client/src/ui/components/resources/realm-transfer.tsx +++ b/client/src/ui/components/resources/realm-transfer.tsx @@ -59,20 +59,24 @@ export const RealmTransfer = memo( setResourceWeight(multipliedWeight); }, [calls]); - const handleTransfer = useCallback(() => { + const handleTransfer = useCallback(async () => { setIsLoading(true); const cleanedCalls = calls.map(({ sender_entity_id, recipient_entity_id, resources }) => ({ sender_entity_id, recipient_entity_id, - resources: [resources[0], BigInt(resources[1]) * BigInt(1000)], + resources: [resources[0], BigInt(Number(resources[1]) * 1000)], })); - send_resources_multiple({ - signer: account, - calls: cleanedCalls, - }).finally(() => { + try { + await send_resources_multiple({ + signer: account, + calls: cleanedCalls, + }); + } catch (error) { + console.error(error); + } finally { setIsLoading(false); - }); + } setCalls([]); }, [calls]); @@ -102,7 +106,7 @@ export const RealmTransfer = memo( size="xxl" className="mr-3 self-center" /> -
{currencyFormat(balance ? Number(balance) : 0, 0)}
+
{currencyFormat(balance ? Number(balance) : 0, 2)}
{playerStructures().map((structure) => ( @@ -225,6 +229,7 @@ export const RealmTransferBalance = memo( min={0} step={100} value={input} + allowDecimals disabled={!canCarry || (type === "receive" && getDonkeyBalance() === 0)} onChange={(amount) => { setInput(amount); From b60f1aae145e73b2d4c3e001aacb49a2d54fdcd5 Mon Sep 17 00:00:00 2001 From: Bob <80072466+bob0005@users.noreply.github.com> Date: Mon, 23 Dec 2024 16:15:05 +0100 Subject: [PATCH 5/7] filter dead guilds (#2587) --- client/src/hooks/helpers/useGuilds.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/src/hooks/helpers/useGuilds.tsx b/client/src/hooks/helpers/useGuilds.tsx index b197add822..5b55996980 100644 --- a/client/src/hooks/helpers/useGuilds.tsx +++ b/client/src/hooks/helpers/useGuilds.tsx @@ -2,7 +2,7 @@ import { ClientComponents } from "@/dojo/createClientComponents"; import { formatTime, toHexString } from "@/ui/utils/utils"; import { ContractAddress, GuildInfo, GuildMemberInfo, GuildWhitelistInfo, ID, Player } from "@bibliothecadao/eternum"; import { useEntityQuery } from "@dojoengine/react"; -import { Component, Entity, Has, HasValue, getComponentValue, runQuery } from "@dojoengine/recs"; +import { Component, Entity, Has, HasValue, NotValue, getComponentValue, runQuery } from "@dojoengine/recs"; import { getEntityIdFromKeys } from "@dojoengine/utils"; import { useCallback } from "react"; import { shortString } from "starknet"; @@ -181,7 +181,7 @@ export const useGuilds = () => { const useGuildQuery = () => { const guildsRanked = useLeaderBoardStore.getState().guildsByRank; - const guilds = useEntityQuery([Has(Guild)]); + const guilds = useEntityQuery([Has(Guild), NotValue(Guild, { member_count: 0 })]); return { guilds: formatGuilds( From 6600efebf24172854e061b3c8ef787479d2fd603 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 24 Dec 2024 09:12:42 +0100 Subject: [PATCH 6/7] bump controller version --- client/package.json | 4 +-- landing/package.json | 4 +-- pnpm-lock.yaml | 62 ++++++++++++++++++++++---------------------- 3 files changed, 35 insertions(+), 35 deletions(-) diff --git a/client/package.json b/client/package.json index 1249bad2c8..58b9f2ac81 100644 --- a/client/package.json +++ b/client/package.json @@ -17,8 +17,8 @@ }, "dependencies": { "@bibliothecadao/eternum": "workspace:^", - "@cartridge/connector": "0.5.6", - "@cartridge/controller": "0.5.6", + "@cartridge/connector": "0.5.7", + "@cartridge/controller": "0.5.7", "@dojoengine/core": "1.0.4-alpha.3.1.0", "@dojoengine/create-burner": "1.0.4-alpha.3.1.0", "@dojoengine/react": "1.0.4-alpha.3.1.0", diff --git a/landing/package.json b/landing/package.json index 47bc97b9ab..1f0cfb9696 100644 --- a/landing/package.json +++ b/landing/package.json @@ -17,8 +17,8 @@ "@ark-project/core": "3.0.0-beta.1", "@ark-project/react": "2.0.0-beta.2", "@bibliothecadao/eternum": "workspace:^", - "@cartridge/connector": "^0.5.6", - "@cartridge/controller": "^0.5.6", + "@cartridge/connector": "^0.5.7", + "@cartridge/controller": "^0.5.7", "@dojoengine/core": "1.0.3-alpha.2", "@dojoengine/create-burner": "1.0.3-alpha.2", "@dojoengine/react": "1.0.3-alpha.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 807be357c3..4931f53baf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,11 +131,11 @@ importers: specifier: workspace:^ version: link:../sdk/packages/eternum '@cartridge/connector': - specifier: 0.5.6 - version: 0.5.6(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2) + specifier: 0.5.7 + version: 0.5.7(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2) '@cartridge/controller': - specifier: 0.5.6 - version: 0.5.6(encoding@0.1.13) + specifier: 0.5.7 + version: 0.5.7(encoding@0.1.13) '@dojoengine/core': specifier: 1.0.4-alpha.3.1.0 version: 1.0.4-alpha.3.1.0(starknet@6.11.0(encoding@0.1.13))(typescript@5.7.2) @@ -144,13 +144,13 @@ importers: version: 1.0.4-alpha.3.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(typescript@5.7.2) '@dojoengine/react': specifier: 1.0.4-alpha.3.1.0 - version: 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@types/react@18.3.16)(@vitest/ui@2.1.8)(jsdom@24.1.3)(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(type-fest@2.19.0)(typescript@5.7.2)(zod@3.24.1) + version: 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@types/react@18.3.16)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(type-fest@2.19.0)(typescript@5.7.2)(zod@3.24.1) '@dojoengine/recs': specifier: ^2.0.13 version: 2.0.13(typescript@5.7.2)(zod@3.24.1) '@dojoengine/state': specifier: 1.0.4-alpha.3.1.0 - version: 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1) + version: 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1) '@dojoengine/torii-client': specifier: 1.0.4-alpha.3.1.0 version: 1.0.4-alpha.3.1.0 @@ -285,7 +285,7 @@ importers: version: 0.20.5(@vite-pwa/assets-generator@0.2.6)(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0) vitest-canvas-mock: specifier: ^0.3.3 - version: 0.3.3(vitest@2.1.8) + version: 0.3.3(vitest@2.1.8(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0)) wouter: specifier: ^2.12.1 version: 2.12.1(react@18.3.1) @@ -325,7 +325,7 @@ importers: version: 4.3.4(vite@5.4.11(@types/node@20.17.10)(terser@5.37.0)) '@vitest/coverage-v8': specifier: ^2.0.5 - version: 2.1.8(vitest@2.1.8) + version: 2.1.8(vitest@2.1.8(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0)) '@vitest/ui': specifier: ^2.0.1 version: 2.1.8(vitest@2.1.8) @@ -424,11 +424,11 @@ importers: specifier: workspace:^ version: link:../sdk/packages/eternum '@cartridge/connector': - specifier: ^0.5.6 - version: 0.5.6(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2) + specifier: ^0.5.7 + version: 0.5.7(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2) '@cartridge/controller': - specifier: ^0.5.6 - version: 0.5.6(encoding@0.1.13) + specifier: ^0.5.7 + version: 0.5.7(encoding@0.1.13) '@dojoengine/core': specifier: 1.0.3-alpha.2 version: 1.0.3-alpha.2(starknet@6.11.0(encoding@0.1.13))(typescript@5.7.2) @@ -1430,14 +1430,14 @@ packages: '@canvas/image-data@1.0.0': resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==} - '@cartridge/account-wasm@0.5.6': - resolution: {integrity: sha512-2mNuFkRqePe5PiJP0ReZVgiIv41o7KOLzY0/eDtDWKXqOZW6PHkEyaFTXvircyHncfwSsGyPoWg+Z1B//D9H+w==} + '@cartridge/account-wasm@0.5.7': + resolution: {integrity: sha512-tUz3fUOAI9RkZPBQ3+ylm4CcVISB0oWTWHeKvm4hmWk2nX7ROxgvLrhxnTH87mRKijma6QRZUhDzEKYsxZTCjQ==} - '@cartridge/connector@0.5.6': - resolution: {integrity: sha512-MqmWlAuvWYWJroB8xvQb/rXFqfqV2YwuuLIT/Sw1bCUAhHlDI62xC1oS7JN+ojVe76Poqob8fw/ZW/VHtz8BxA==} + '@cartridge/connector@0.5.7': + resolution: {integrity: sha512-fW0hCOVkEopOtExceXSi/lssA7ox7rjdnsAzQVVRRuuSnWbyJ8973+mGHSqKzGFsvaVXzSaowpN4FUbizzIE5g==} - '@cartridge/controller@0.5.6': - resolution: {integrity: sha512-TJO0irbbwsBlJQcBmf2Szo33qIpKkMLVaYfqQ3sqtp23TE/QSxvPxB3NI3hbW27k0xdziOBwXjPI5NEhPptuqg==} + '@cartridge/controller@0.5.7': + resolution: {integrity: sha512-54+PmRA8nVGCzzAKqHt6NEELa5t/b7ZCE/+nKjEAiO5Pe8qZC9844/RpZY170lerOJYdLouGwB4afgfxpJLs3Q==} '@cartridge/penpal@6.2.3': resolution: {integrity: sha512-K8h9VqBfFPXcAFQNnvgBnejF/dp7249pS4jXu3NhNYR6JqMQxtcrDqfnPmJvbF4ECEBs+8Z2UiwlRQiKt5nNsg==} @@ -10592,11 +10592,11 @@ snapshots: '@canvas/image-data@1.0.0': {} - '@cartridge/account-wasm@0.5.6': {} + '@cartridge/account-wasm@0.5.7': {} - '@cartridge/connector@0.5.6(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2)': + '@cartridge/connector@0.5.7(encoding@0.1.13)(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(typescript@5.7.2)': dependencies: - '@cartridge/controller': 0.5.6(encoding@0.1.13) + '@cartridge/controller': 0.5.7(encoding@0.1.13) '@starknet-react/core': 3.6.2(get-starknet-core@3.3.4(starknet@6.11.0(encoding@0.1.13)))(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(typescript@5.7.2) starknet: 6.11.0(encoding@0.1.13) transitivePeerDependencies: @@ -10607,9 +10607,9 @@ snapshots: - typescript - utf-8-validate - '@cartridge/controller@0.5.6(encoding@0.1.13)': + '@cartridge/controller@0.5.7(encoding@0.1.13)': dependencies: - '@cartridge/account-wasm': 0.5.6 + '@cartridge/account-wasm': 0.5.7 '@cartridge/penpal': 6.2.3 '@starknet-io/types-js': 0.7.10 '@telegram-apps/sdk': 2.9.1 @@ -10784,10 +10784,10 @@ snapshots: - utf-8-validate - zod - '@dojoengine/react@1.0.4-alpha.3.1.0(@types/node@20.17.10)(@types/react@18.3.16)(@vitest/ui@2.1.8)(jsdom@24.1.3)(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(type-fest@2.19.0)(typescript@5.7.2)(zod@3.24.1)': + '@dojoengine/react@1.0.4-alpha.3.1.0(@types/node@20.17.10)(@types/react@18.3.16)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(react@18.3.1)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(type-fest@2.19.0)(typescript@5.7.2)(zod@3.24.1)': dependencies: '@dojoengine/recs': 2.0.13(typescript@5.7.2)(zod@3.24.1) - '@dojoengine/state': 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1) + '@dojoengine/state': 1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1) '@dojoengine/torii-client': 1.0.4-alpha.3.1.0 '@dojoengine/utils': 1.0.4-alpha.3.1.0(starknet@6.11.0(encoding@0.1.13))(typescript@5.7.2)(zod@3.24.1) '@latticexyz/utils': 2.2.14 @@ -10851,7 +10851,7 @@ snapshots: '@dojoengine/recs': 2.0.13(typescript@5.7.2)(zod@3.24.1) '@dojoengine/torii-client': 1.0.3-alpha.2 starknet: 6.11.0(encoding@0.1.13) - vitest: 1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0) + vitest: 1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(terser@5.37.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -10872,12 +10872,12 @@ snapshots: - utf-8-validate - zod - '@dojoengine/state@1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1)': + '@dojoengine/state@1.0.4-alpha.3.1.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(starknet@6.11.0(encoding@0.1.13))(terser@5.37.0)(typescript@5.7.2)(zod@3.24.1)': dependencies: '@dojoengine/recs': 2.0.13(typescript@5.7.2)(zod@3.24.1) '@dojoengine/torii-client': 1.0.4-alpha.3.1.0 starknet: 6.11.0(encoding@0.1.13) - vitest: 1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0) + vitest: 1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(terser@5.37.0) transitivePeerDependencies: - '@edge-runtime/vm' - '@types/node' @@ -14315,7 +14315,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitest/coverage-v8@2.1.8(vitest@2.1.8)': + '@vitest/coverage-v8@2.1.8(vitest@2.1.8(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 @@ -20097,12 +20097,12 @@ snapshots: tsx: 4.19.2 yaml: 2.6.1 - vitest-canvas-mock@0.3.3(vitest@2.1.8): + vitest-canvas-mock@0.3.3(vitest@2.1.8(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0)): dependencies: jest-canvas-mock: 2.5.2 vitest: 2.1.8(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0) - vitest@1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8)(jsdom@24.1.3)(terser@5.37.0): + vitest@1.6.0(@types/node@20.17.10)(@vitest/ui@2.1.8(vitest@2.1.8))(jsdom@24.1.3)(terser@5.37.0): dependencies: '@vitest/expect': 1.6.0 '@vitest/runner': 1.6.0 From 60c6a2c02ae473cdea49750e4ac617af089ea947 Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 24 Dec 2024 10:12:06 +0100 Subject: [PATCH 7/7] Fix market lords consumption for wonders --- client/src/dojo/modelManager/ResourceManager.ts | 8 -------- 1 file changed, 8 deletions(-) diff --git a/client/src/dojo/modelManager/ResourceManager.ts b/client/src/dojo/modelManager/ResourceManager.ts index 113f5fe26f..5cac006208 100644 --- a/client/src/dojo/modelManager/ResourceManager.ts +++ b/client/src/dojo/modelManager/ResourceManager.ts @@ -204,14 +204,6 @@ export class ResourceManager { let consumptionRate = Number(production.consumption_rate); - // Check if this is a Wonder producing Lords - const isWonder = - getComponentValue(this.setup.components.Realm, getEntityIdFromKeys([BigInt(this.entityId)]))?.has_wonder || false; - - if (isWonder && resourceId === ResourcesIds.Lords) { - consumptionRate = consumptionRate * 0.1; // 10% of normal production rate for Wonders - } - const difference = Number(production.production_rate) - consumptionRate; return [difference > 0, difference]; }