-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Damages Display #64
base: main
Are you sure you want to change the base?
Conversation
Deploy preview for vercel-autochessia ready! ✅ Preview Built with commit 2cfab1f. |
我认为需要更改现在的表结构,现在关于英雄的数据类型可读性可扩展性不是很完美。 假设把每个英雄都作为一个721,通过tokenid获得属性:最大血量、最大魔法、攻击、攻击距离、移动距离、购买金钱、售卖金钱、技能、等级、名称、动画地址、预览地址、物品、速度、状态:[商店、棋盘上、备战区、战斗中]、拥有者、x、y、等, 当处于战斗中时,tokenid不变属性增加:buff、乙方棋盘x、乙方棋盘y、对手棋盘x、对手棋盘y、对战者、当前血量、当前魔法。 假设把商店比喻成一个nft交易市场,每次刷新出来都会生成一批721,或者从库存的721随机筛选几个出来,增删改查都是通过tokenid来执行,不再依赖数组的index。 这样会更加易读,易扩展。 可能会修改的地方
Player的heroes、heroAltar、inventory 都返回tokenid,空站位英雄用0来表示
Piece 添加主键tokenid 修改对应属性
Board的pieces、enemyPieces 都返回tokenid
DPS 基于tokenid来查询,不再依赖数组 |
能否详细描述一下 “现在关于英雄的数据类型可读性可扩展性不是很完美” 的原因,在什么场景下遇到了什么问题,我没有看到目前设计存在的问题 |
首先必须肯定的是利用英雄nft构成一局游戏的英雄池,这是很有趣的事情。 其次关于你说的索引,这存在于购买英雄、删除仓库英雄、摆放英雄过程中,用索引的一个目的是将琐碎的计算任务从链上迁移到链下,如果不用索引,链上势必要先找到英雄在数组中的位置,才能继续后面的操作,而这个显然是可以在链下事先计算出来的。简单来讲跟合约交互用索引还是Id等价于通过Id计算英雄在数组中索引的任务是放在合约端还是前端。在链上使用数组来存储同类数据的前提下,这个计算任务无法避免。基于此,我们选择把这个计算任务放在链下的原因就变的很简单,因为链上计算要消耗更多地gas。 另外nft的tokenId不能简单的复用到我们的游戏,因为每个玩家都可能有剑圣,而且每个人可能不止一个剑圣,所以仅仅套用nft的tokenId是不足以解决我们游戏的问题,你仍需要附加一些信息组成在每局游戏概念下唯一的英雄Id。 关于你提及的可读性跟可扩展性问题。
|
packages/contracts/mud.config.ts
Outdated
@@ -243,6 +243,29 @@ export default mudConfig({ | |||
enemyPieces: "bytes32[]", | |||
}, | |||
}, | |||
DPS: { | |||
keySchema: { | |||
pieceId: "address", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
pieceId
is of typebytes32
- what about adding a column named
target
of typebytes32
that denotes which piece receives this damage.
packages/contracts/mud.config.ts
Outdated
// physicalDamages: [300, 200, 100, 300, 0], | ||
// magicalDamages: [200, 100, 0, 0, 0] | ||
// } | ||
// } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
you better update this according to the new table schema or just clear it
No description provided.