From af26199afb38482de7c0e428b6e38be4bf271d1d Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Tue, 20 May 2025 11:37:56 -0600 Subject: [PATCH 1/7] set clean event --- client/src/components/Tamagotchi/Chat/index.tsx | 6 +++++- client/src/components/Tamagotchi/index.tsx | 2 ++ client/vite.config.ts | 14 +++++++------- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/client/src/components/Tamagotchi/Chat/index.tsx b/client/src/components/Tamagotchi/Chat/index.tsx index 57bac745..7752da7d 100644 --- a/client/src/components/Tamagotchi/Chat/index.tsx +++ b/client/src/components/Tamagotchi/Chat/index.tsx @@ -1,5 +1,6 @@ // React and external libraries import { useState, useRef } from "react"; +import { Account } from "starknet"; // Internal components import MessageComponent from "../../ui/message"; @@ -29,7 +30,7 @@ const context = `Remembre this is your context, `; -const Chat = ({ beast, expanded, botMessage, setBotMessage }: { beast: any, expanded: boolean, botMessage: any, setBotMessage: any }) => { +const Chat = ({ beast, expanded, botMessage, setBotMessage, client, account }: { beast: any, expanded: boolean, botMessage: any, setBotMessage: any, client: any, account: any }) => { const { isLoading, error, sendMessage } = useBeastChat({ beast, setBotMessage }); const [input, setInput] = useState(""); @@ -43,6 +44,9 @@ const Chat = ({ beast, expanded, botMessage, setBotMessage }: { beast: any, expa const handleSendMessage = async () => { if (input.trim() === "" || isLoading) return; + + const tccc = await client.achieve.achieveBeastChat(account as Account); + console.info('tccc', tccc); const messageWithContext = `${context}\n\nUser: ${input}`; await sendMessage(messageWithContext); diff --git a/client/src/components/Tamagotchi/index.tsx b/client/src/components/Tamagotchi/index.tsx index a61b727b..96f18e28 100644 --- a/client/src/components/Tamagotchi/index.tsx +++ b/client/src/components/Tamagotchi/index.tsx @@ -141,6 +141,8 @@ function Tamagotchi() { /> ) : currentView === 'chat' ? ( Date: Tue, 20 May 2025 20:23:27 -0600 Subject: [PATCH 2/7] add new methods --- client/src/config/cartridgeConnector.tsx | 8 ++++-- client/src/dojo/contracts.gen.ts | 35 ++++++++++++++++++++---- client/src/dojo/manifest_dev.json | 14 ++++++++-- 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/client/src/config/cartridgeConnector.tsx b/client/src/config/cartridgeConnector.tsx index b62b2945..c7689408 100644 --- a/client/src/config/cartridgeConnector.tsx +++ b/client/src/config/cartridgeConnector.tsx @@ -107,8 +107,12 @@ const policies: SessionPolicies = { entrypoint: "achieve_player_new_total_points" }, { - name: "achieve_social_share", - entrypoint: "achieve_social_share" + name: "achieve_score_share", + entrypoint: "achieve_score_share" + }, + { + name: "achieve_beast_share", + entrypoint: "achieve_beast_share" }, ], }, diff --git a/client/src/dojo/contracts.gen.ts b/client/src/dojo/contracts.gen.ts index 5f1376a6..b4a0b24a 100644 --- a/client/src/dojo/contracts.gen.ts +++ b/client/src/dojo/contracts.gen.ts @@ -192,19 +192,40 @@ export function setupWorld(provider: DojoProvider) { } }; - const build_achieve_achieveSocialShare_calldata = (score: number): DojoCall => { + const build_achieve_achieveScoreShare_calldata = (score: number): DojoCall => { return { contractName: "achieve", - entrypoint: "achieve_social_share", + entrypoint: "achieve_score_share", calldata: [score], }; }; - const achieve_achieveSocialShare = async (snAccount: Account | AccountInterface, score: number) => { + const achieve_achieveScoreShare = async (snAccount: Account | AccountInterface, score: number) => { try { return await provider.execute( snAccount as any, - build_achieve_achieveSocialShare_calldata(score), + build_achieve_achieveScoreShare_calldata(score), + "tamagotchi", + ); + } catch (error) { + console.error(error); + throw error; + } + }; + + const build_achieve_achieveBeastShare_calldata = (): DojoCall => { + return { + contractName: "achieve", + entrypoint: "achieve_beast_share", + calldata: [], + }; + }; + + const achieve_achieveBeastShare = async (snAccount: Account | AccountInterface) => { + try { + return await provider.execute( + snAccount as any, + build_achieve_achieveBeastShare_calldata(), "tamagotchi", ); } catch (error) { @@ -655,8 +676,10 @@ export function setupWorld(provider: DojoProvider) { buildAchievePlayMinigameCalldata: build_achieve_achievePlayMinigame_calldata, achievePlayerNewTotalPoints: achieve_achievePlayerNewTotalPoints, buildAchievePlayerNewTotalPointsCalldata: build_achieve_achievePlayerNewTotalPoints_calldata, - achieveSocialShare: achieve_achieveSocialShare, - buildAchieveSocialShareCalldata: build_achieve_achieveSocialShare_calldata, + achieveBeastShare: achieve_achieveBeastShare, + buildAchieveBeastShareCalldata: build_achieve_achieveBeastShare_calldata, + achieveScoreShare: achieve_achieveScoreShare, + buildAchieveScoreShareCalldata: build_achieve_achieveScoreShare_calldata, }, player: { addOrUpdateFoodAmount: player_addOrUpdateFoodAmount, diff --git a/client/src/dojo/manifest_dev.json b/client/src/dojo/manifest_dev.json index 69fe09a7..966459e8 100644 --- a/client/src/dojo/manifest_dev.json +++ b/client/src/dojo/manifest_dev.json @@ -1313,7 +1313,7 @@ "contracts": [ { "address": "0x1005116a48c9a8f7a6c946091e64dc8ced37962dc2bbb74355868229307c20d", - "class_hash": "0x5a4c23fa69d235e89b7607a1b8ba8aadae993cd7cd9adaa8e94310f3c7b100f", + "class_hash": "0x5a0717d24dae3e31ca2e15fd1f06cf26d9de52b84e56500d1179e38647c056e", "abi": [ { "type": "impl", @@ -1449,7 +1449,14 @@ }, { "type": "function", - "name": "achieve_social_share", + "name": "achieve_beast_share", + "inputs": [], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "achieve_score_share", "inputs": [ { "name": "score", @@ -1600,7 +1607,8 @@ "achieve_beast_pet", "achieve_beast_sleep", "achieve_beast_clean", - "achieve_social_share", + "achieve_beast_share", + "achieve_score_share", "achieve_beast_chat", "upgrade" ] From e8d9e5e0e980e933bab8adf510fe7f5fac577ea5 Mon Sep 17 00:00:00 2001 From: RolandoDrRobot Date: Tue, 20 May 2025 21:52:26 -0600 Subject: [PATCH 3/7] set all achievments --- client/dev-dist/sw.js | 2 +- .../components/FlappyBeasts/flappyBeasts.tsx | 25 ++++++++----------- client/src/components/Header/index.tsx | 6 ++++- .../src/components/SkyJumpMiniGame/index.tsx | 10 +++++++- .../src/components/Tamagotchi/Play/index.tsx | 3 ++- .../src/components/Twitter/ShareProgress.tsx | 21 +++++++++++----- 6 files changed, 42 insertions(+), 25 deletions(-) diff --git a/client/dev-dist/sw.js b/client/dev-dist/sw.js index 096d6781..5dc6c9cb 100644 --- a/client/dev-dist/sw.js +++ b/client/dev-dist/sw.js @@ -82,7 +82,7 @@ define(['./workbox-20a2f87f'], (function (workbox) { 'use strict'; "revision": "3ca0b8505b4bec776b69afdba2768812" }, { "url": "index.html", - "revision": "0.shqbum89m38" + "revision": "0.ln7260njc9o" }], {}); workbox.cleanupOutdatedCaches(); workbox.registerRoute(new workbox.NavigationRoute(workbox.createHandlerBoundToURL("index.html"), { diff --git a/client/src/components/FlappyBeasts/flappyBeasts.tsx b/client/src/components/FlappyBeasts/flappyBeasts.tsx index e16afd11..e3278972 100644 --- a/client/src/components/FlappyBeasts/flappyBeasts.tsx +++ b/client/src/components/FlappyBeasts/flappyBeasts.tsx @@ -62,6 +62,7 @@ const BIRD_COLLIDER_OFFSET_Y = (BIRD_HEIGHT - BIRD_COLLIDER_HEIGHT) / 2; // Types and Interfaces import { FlappyBirdRefHandle, FlappyBirdProps } from '../../types/components'; +import { Account } from 'starknet'; const FlappyBirdMiniGame = forwardRef(({ className = '', @@ -168,20 +169,10 @@ const FlappyBirdMiniGame = forwardRef(({ await handleAction( "SaveGameResults", async () => { - await client.player.updatePlayerTotalPoints( - account, - score - ) - await client.player.updatePlayerMinigameHighestScore( - account, - score, - 2 - ) - await client.player.addOrUpdateFoodAmount( - account, - foodId, - foodCollected - ) + await client.player.updatePlayerTotalPoints(account, score); + await client.achieve.achievePlayerNewTotalPoints(account); + await client.player.updatePlayerMinigameHighestScore(account, score, 2); + await client.player.addOrUpdateFoodAmount(account, foodId, foodCollected); }); return true; } else { @@ -217,7 +208,7 @@ const FlappyBirdMiniGame = forwardRef(({ }; // Handle game over - const handleGameEnd = () => { + const handleGameEnd = async () => { const score = currentScoreRef.current; setFinalScore(score); @@ -226,6 +217,8 @@ const FlappyBirdMiniGame = forwardRef(({ if (score > actualHighScore) { setCurrentHighScore(score); + const tx = await client.achieve.achieveFlappyBeastHighscore(account as Account, score); + console.info('tx', tx); } else { setCurrentHighScore(actualHighScore); } @@ -893,6 +886,8 @@ const FlappyBirdMiniGame = forwardRef(({ {currentScreen === 'sharing' && (
{ setIsShareModalOpen(false); diff --git a/client/src/components/Header/index.tsx b/client/src/components/Header/index.tsx index 3c66eb65..bf8b0d22 100644 --- a/client/src/components/Header/index.tsx +++ b/client/src/components/Header/index.tsx @@ -29,6 +29,7 @@ import download from "../../assets/img/icon-download.svg"; // Styles import './main.css'; +import { useDojoSDK } from "@dojoengine/sdk/react"; // Constants const WEBSITE_URL = 'https://website.bytebeasts.games'; @@ -56,8 +57,9 @@ const Header: React.FC = ({ tamagotchiStats }) => { // Hooks const { beastsData: beasts } = useBeasts(); const { player } = usePlayer(); + const { client } = useDojoSDK(); const location = useLocation(); - const { connector } = useAccount(); + const { account, connector } = useAccount(); const [buttonSound] = useSound(buttonClick, { volume: SOUND_VOLUME, preload: true }); // Derived state @@ -176,6 +178,8 @@ const Header: React.FC = ({ tamagotchiStats }) => { {tamagotchiStats && ( setIsShareModalOpen(false)} type="beast" diff --git a/client/src/components/SkyJumpMiniGame/index.tsx b/client/src/components/SkyJumpMiniGame/index.tsx index d98878b8..80a7fd57 100644 --- a/client/src/components/SkyJumpMiniGame/index.tsx +++ b/client/src/components/SkyJumpMiniGame/index.tsx @@ -26,6 +26,7 @@ import { InputHandler } from './inputHandler'; import RestartIcon from '../../assets/img/icon-restart.svg'; import './main.css'; +import { Account } from 'starknet'; const CanvasSkyJumpGame = forwardRef(({ className = '', @@ -84,7 +85,7 @@ const CanvasSkyJumpGame = forwardRef { + const handleEngineGameOver = useCallback(async (engineFinalScore: number) => { setFinalScore(engineFinalScore); setIsGameOverState(true); @@ -92,6 +93,8 @@ const CanvasSkyJumpGame = forwardRef dojoHighScore) { setCurrentHighScore(engineFinalScore); + const tx = await client.achieve.achievePlatformHighscore(account as Account, engineFinalScore); + console.info('tx', tx); } else { setCurrentHighScore(dojoHighScore); } @@ -203,6 +206,9 @@ const CanvasSkyJumpGame = forwardRef setCurrentScreen('gameover')} type="minigame" diff --git a/client/src/components/Tamagotchi/Play/index.tsx b/client/src/components/Tamagotchi/Play/index.tsx index 5efe3320..4aa2880d 100644 --- a/client/src/components/Tamagotchi/Play/index.tsx +++ b/client/src/components/Tamagotchi/Play/index.tsx @@ -51,7 +51,8 @@ const Play: React.FC = ({ handleAction( "Play", async () => { - return await client.game.play(account); + await client.game.play(account); + await client.achieve.achieve_achievePlayMinigame(account); }, beastsDex[beast.specie - 1].playPicture ); diff --git a/client/src/components/Twitter/ShareProgress.tsx b/client/src/components/Twitter/ShareProgress.tsx index 31d6f393..1d584bf7 100644 --- a/client/src/components/Twitter/ShareProgress.tsx +++ b/client/src/components/Twitter/ShareProgress.tsx @@ -20,6 +20,8 @@ interface ShareModalProps { name: string; score: number; }; + account: any; + client: any; } export const ShareProgress: React.FC = ({ @@ -28,6 +30,8 @@ export const ShareProgress: React.FC = ({ type, stats, minigameData, + account, + client, }) => { const [tweetMsg, setTweetMsg] = useState(""); @@ -35,7 +39,7 @@ export const ShareProgress: React.FC = ({ if (type === 'beast' && stats) { setTweetMsg( `🎮 Playing ByteBeasts Tamagotchi, and here is my Beast's progress:\n\n` + - `🕰️ Age: ${stats.age}` + ` ${stats.age == 1 ? 'day' : 'days' }\n` + + `🕰️ Age: ${stats.age}` + ` ${stats.age == 1 ? 'day' : 'days'}\n` + `⚡ Energy: ${stats.energy} \n` + `🍖 Hunger: ${stats.hunger} \n` + `😊 Happiness: ${stats.happiness} \n` + @@ -72,15 +76,15 @@ export const ShareProgress: React.FC = ({

Share on X

-
- +