100

主题

161

回帖

1821

积分

管理员

编辑器交流群:656413818

积分
1821

论坛管理

发表于  2023-7-6 10:21:20 | 显示全部楼层 |阅读模式 3015 4
存档须知基本信息

表格存档是y3编辑器为了便于存档功能开发提供的数据工具。其原理为将y3中的合法表格 通过既定格式转换为字符串来进行存储和解析。表格存档并不是万能的。若你的预计你的地图业务逻辑特别复杂(如orpg),最终会在存档容量限制的边缘试探,那么建议使用字符串进行存储,且后续一些防作弊措施(如服务器的击杀掉落、数值增量上限等)可能不会支持表格存档,如果有对应的需求,也建议提前规划。
目前y3编辑器的表格存档分为实时上传型和主动上传型(下文称实时型和主动型),二者通过表格型存档槽位中“禁用覆盖操作”进行区分,若禁用覆盖操作,那么对表格中的修改将会实时生效,若未禁用覆盖操作,需要执行“上传存档”的语句后,才会生效。

图片1.png
实时型与主动型(或者表格或非表格)建议在上线前进行长远规划,因为二者的使用方式完全不同,互相迁移存在较大的修改成本,修改过程中若产生bug可能导致的玩家数据丢失,影响比较严重。
实时型目前最多支持限制200*200*200个索引,每个索引对应的值最长不超过128字节。
除实时型表格存档自有限制外,其他类型存档需保证单个玩家单个槽位的值大小在256kb以内,所有存档数据在512kb以内,主动型表格同样适用于这个规则,具体的大小可在本地存档中复制出来查看。
在满足以上限制的前提下,建议尽可能压缩所有存档总的占用空间,由于不合理的数据规划将会导致数据库资源的浪费,为了对存储空间滥用行为有所限制,后续Y3将会对数据库资源进行分级收费,鉴于游戏上线后对数据结构的优化可能带来较大影响,提早进行数据存储优化可以避免负担额外的成本。
此处需注意,在存储中文时,实际存储的为ASCII编码,可能导致大小不符合预期,可以斟酌是否有必要进行优化。
图片2.png
图片3.png
加密
目前y3会默认对所有处于存档槽内的信息进行加密,具体的加密逻辑不表。
在调用 “表格 - 对表格进行加密”语句后,对应的表格内容将会加密,这个操作适用于存储较为关键的玩家内存信息。避免作弊工具修改里面的内容达到“爽一局”的作用。
由于加密后的表格解析也需要经过解密,会导致表格操作的性能压力陡增,不建议滥用加密操作,也不建议将过多信息打到一张表中再进行加密,分成多张表可以有效降低瞬时的性能负荷,使玩家不易感受到卡顿。

初始值
存档的初始值主要的意义在于避免解析报错,以及发放一些初始道具。
如果进入游戏的玩家没有这个槽位,那么这个槽位中的数据将会被设置为初始值。
修改初始值时并不会影响到已有存档的玩家,也就是说,并不能通过修改初始值然后发布地图来达到补发、增发初始道具或类似的功能场景。
常见的错误使用方式为:在使用前将所有的未来数据塞到存档槽中,后续不再增加行列,仅修改内容对应的键值。
如:在存档中直接使用武器图鉴功能的配置表,每个图鉴可能包含id,图片,标题,说明文本,剪影图片,是否解锁等信息,在解锁图鉴后,将“是否解锁”的属性值改为是。
这种使用方式会导致两个严重后果:
1.存储空间被大量浪费。
2.由于存档的信息是加密的,在访问对应的功能时,产生较大的性能压力,玩家卡顿。
上述案例 正确的使用方式是初始值配为空表,或带有初始武器的表,在解锁图鉴后,将解锁的对应id插入存档槽存储。在界面显示时,遍历预设的图鉴表,根据存档槽中已有的id判断是否显示以及显示什么内容。
武器强化等场景同理,如何拓展空行空列可见使用方式。

使用方式
实时型的基础操作说明可见:实时存档说明
无论是实时型还是主动型,在编写业务逻辑时,均不建议直接访问存档槽内部数据,因为访问存档槽内部逻辑涉及到解密及解析过程,会增加无谓的性能损耗。
正确的方式是在初始化时,将存档槽内部的数据加载到全局变量中,后续访问变量进行使用。

对于主动型存档表,在全局变量中进行表格操作后直接使用设置存档语句即可将存档槽中的内容更新为“修改过的表”
图片4.png
关于这条语句,需要注意的是将表格转为合规的字符串这一步并非上传时完成,而是在设置时完成,意味着频繁调用将会产生极大的性能压力。若需要多次修改表格中的内容,不需要修改一次就设置一次,尽量等所有预期的表格操作完成后执行一次,并尽量控制执行的频次。
若内容的修改较为高频,强烈建议使用实时型存档表,实时型存档表的设置语句更为分散,在高频操作时性能可能有百倍以上的提升。
语句执行的时间与表格中的内容量正相关,首先建议尽可能优化数据内容(一般可采用常量、大量程序可批量处理的默认值从存档中转到预设表格中、程序增加空值保护等手段),其次尽量将表格中的功能模块粒度切细,以压缩单一表格体积,同时避免在一帧中设置较多主动型表格槽位的值(通过计时器延时处理等方式)。

在执行过设置操作后,此时对应的数据仍然处于玩家本地,需要调用上传存档语句进行更新。除主动型存档表外,全局存档的上传也并非实时的,修改过后也需要调用上传存档语句。
图片5.png
若数据量过大,存档上传行为可能发生卡顿,建议周期或在特点业务节点结合界面告知进行上传,尽可能避免在战斗过程中进行上传,若有类似的需求,建议换用实时型存档表。
在玩家退出游戏事件是上传这个玩家的存档是不可取的,因为在这个事件发出之前,退出玩家本地的数据已经被销毁了。但是若玩家通过正常的途径退出游戏,将会尝试在数据销毁前进行一次上传操作。这并不意味着你不需要在业务逻辑中为玩家进行存档,因为游戏崩溃或网络通信不畅等原因可能导致保底的上传行为不能生效,导致产生进度丢失。

常见问题:
1.我尝试设置值为空表后发现丢失了表格编辑器的字段名。我应该如何在多维表存档中插入新的数据?
回答:触发器中的表格能够容纳绝大多数游戏中的数据类型,是一种强大的数据容器。而表格编辑器只是提供了一种在编辑时构建容器内容的方式。表格编辑器能够构建的表格是触发器能够构建的表格的子集。
表格编辑器中的多维表功能暂时仅支持二维表格的构建,其构建规则是,创建一张空的表A ,逐一设置这个空的表 在表格编辑器的索引列 单元格 填写的字段指向的值 为 新的空的表,设置这些空的表的 表头 字段的值为对应单元格中的值。
图片6.png
可以看出,多维表是由一维表组成的,所以为表格编辑器定义的多维表增加行的方式为 设置多维表需要增加行的字段的值为新的空表,再设置这张表(一维)的键值即可。

下文演示实时型的实例操作,主动型将无索引2的语句对应设置一维表的值,将有索引2的的语句对应设置多维表的值,流程同理。
假设存档槽【实例表格】中现有的表格样式如下:
图片7.png
希望新增第五行,并保持表头索引正常,流程如下:
图片8.png
在此之上,若希望对现有的五行新增一个新表头,流程如下:
图片9.png

编辑器交流群:656413818

0

主题

5

回帖

69

积分

普通创作者

积分
69
发表于  2023-7-12 14:51:41 | 显示全部楼层
为了降低性能影响,目前在本地多开测试时,实时存档也只会进行一次落盘(测试大厅正常实时生效),直接关闭窗口可能导致本次落盘不触发,建议测试存档时,通过游戏UI的方式进行正常退出。

96

主题

59

回帖

1188

积分

精英创作者

积分
1188

夏日·活跃之王勋章

QQ
发表于  2023-7-26 17:59:27 | 显示全部楼层
关于实时表格的使用,只是用了二维表去初始化,都看不到保存数据····建议提供地图案例,不知道有什么细节没做···
逆袭研究院:810363663,y3公益,义务互助,分享地图技术、创作思维、市场分析,帮助别人就是帮助自己

0

主题

19

回帖

84

积分

普通创作者

积分
84
发表于  2023-8-12 11:04:51 | 显示全部楼层
好想看完整的存档,没有经验的根本不能理解。不知道有没有人做了视频的讲解?

7

主题

18

回帖

302

积分

优秀创作者

积分
302
发表于  2023-10-4 22:39:35 | 显示全部楼层
讲得很好 但是我现在连个整数型存档本地设置了服务器那边都不更新  不知道官方什么时候能修一下呢