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。 关于你提及的可读性跟可扩展性问题。
|
| }, | ||
| DPS: { | ||
| keySchema: { | ||
| pieceId: "address", |
There was a problem hiding this comment.
pieceIdis of typebytes32- what about adding a column named
targetof typebytes32that denotes which piece receives this damage.
| // physicalDamages: [300, 200, 100, 300, 0], | ||
| // magicalDamages: [200, 100, 0, 0, 0] | ||
| // } | ||
| // } |
There was a problem hiding this comment.
you better update this according to the new table schema or just clear it

No description provided.