存档设置
存档说明
什么是实时和非实时存档,两者有什么区别呢
1.实时存档在本地存档变化后,本帧的所有操作会在下一帧自动进行上传实时,体现实时性。
2.而非实时存档本地存档变化后,需要调用【上传玩家存档】ECA,才会对存档进行上传,并且在两次上传之间现在有一分钟的CD。
3.目前存档的基础类型(字符串 布尔 整数 实数)都是实时存档。
4.表格类型存档,则是根据【禁用覆盖】选项来区分,禁用则表示是实时,不禁用则表示非实时
5.实时存档的表格,需要用配套的ECA来进行值的修改,而不能使用【设置玩家表格存档】ECA来修改对应的值。而且要注意,初始值要么设置一个初始表,要么ECA先创建一个新表,之后才能正常进行修改。
什么是全局存档,如何使用?
全局存档是独立于玩家存档的数据存储,它与地图绑定,属于地图的存档数据。对此存档的读写需要通过对应的ECA来进行增减和获取
为什么我用了一段时间之后,突然拿不到全局存档的值了?
注意:目前全局存档的数值类型为int32,所以范围为-2147483648~2147483647,如果值超出了此范围,则玩家进入游戏时会无法正常获取对应的值!
当然遇到这种情况你也可以直接增加一个当前值的负值,就能把对应的全局存档值重新置为0
什么场景下适合使用实时存档?需要注意什么?
1.一般情况下比较关键的数据,需要及时存储的数据都建议使用实时存档。因为实时存档不会因为闪退丢失还未上传过的存档数据,并且安全性更高(一定程度上防外挂),如:玩家金币
2.使用表格的实时存档时,注意key不要有特殊符号,然后尽量使用纯英文的key,确保不会因为特殊符号(像[、]、=、:、int_、_int、Fix32(、)、["、"]、)而导致出现key识别的问题
3.使用表格的实时存档时,注意value字符串格式也不要有特殊符号,不支持嵌套字符串格式!确保不会因为特殊符号(像[、]、=、:、int_、_int、Fix32(、)、["、"]、)而导致出现解析问题
本地全局存档和本地排行榜的本地文件在哪查看?
本地全局存档对应文件存储位置在地图工程路径下的archive文件夹中,文件名为global_archive.json
本地排行榜没有实际本地存储的数据,运行时是通过存档配置以及玩家存档值计算而得出。因此,想要修改值实际只需要修改对应玩家的存档值即可
在后续的迭代计划中,全局存档也将变成实时存档,表格存档不在支持不安全的允许覆盖性存档,总体上将不再支持非实时存档。
详细流程
为了满足orpg等游戏类型的需要,在1.2.22版本后,编辑器修改了存档功能的上传机制。
在之前的版本,设置存档需要配合上传存档来使用。存档将会先在玩家的客户端发生变化,然后在上传存档调用的时刻上传到服务器进行存储。
由于上传存在最小间隔的限制,玩家消耗物品后如果断开网络链接不再重连,可能会丢失进度,达到save and load刷取理想结果的目的。
为了避免这个问题,1.2.22版本后的字符串、布尔、整数、浮点数存档将在设置后立即上传。
由于表格型存档涉及到的数据量较大,实时上传可能造成多种问题,所以表格型存档和全局存档的数据将仍然通过上传存档的语句进行上传。
为了解决表格型存档的既有问题,编辑器也为表格存档提供了实时上传的修改方式:
1.打开存档槽设置后找到需要升级的表格存档槽。
2.将默认的是否禁用覆盖操作由否改为是。需注意:在修改过后,原来的设置表格存档槽位为表的ECA将不再能够生效。
3.在需要对表格槽位进行修改时,需要使用新的语句直接访问存档槽位进行设置。
4.在设置时,一维表不需要选择可选参数,二维表的索引2为字段名(表格编辑器的多维表默认为二维表),若为三个索引确定的数据,则需选择索引3(如 背包 - 第2格 - 当前堆叠数)
5.当前支持设置和增量设置两种方式。使用设置语句时,会直接将玩家对应字段的存档变为参数值。在使用增量设置时,服务器将会根据玩家服务器的已有数据做运算得到最终结果,相对来说会更加安全,但仅支持数值类型的参数,需要自行保证索引的准确性。
6.在使用时,建议在游戏初始化阶段将存档槽的数据存为表格变量,每次存档操作确保表格变量与存档槽中的数据同步进行修改。
7.为了满足调试需求,提供了新的从表格存档中取值的方式,主要用于验证存档槽与自行管理的表格变量中的数据是否一致。
8.无须对表格型存档槽进行加密表操作,表格型存档槽将会默认加密。
如何查询玩家存档
在作者之家找到“用户运营-存档查询”,输入玩家id即可查询存档
也可以下载查询到的玩家存档直接覆盖本地的存档验证
排行榜功能
什么是存档排行榜?如何使用?
存档排行榜指的是整形存档可以设置是否计入排行榜,如果选择设置,那么玩家存档在实际落地时,会同步记录更新对应槽位的排行榜中。
开始游戏时,排行榜的数据会一起带入进局内,然后可以通过对应的ECA来获取对应排名玩家的昵称和得分。
选择确认计入排行榜才能生效功能。
排行榜最大人数表示记录的最大排名数,最多200,一般默认10。注意,数量大了之后可能导致开始游戏卡顿。一般设置1个排行榜即可。
排行榜排序规则降序表示分数从大到小,升序表示分数从小到大
排行榜的更新时机?数据是同步的嘛?
存档排行榜在游戏流程中,当玩家的存档数据落入数据库时,会同步更新当前存档数据到排行榜中。目前数据只保存[aid#昵称]为排行榜key,存档值为排行榜的分数。
如何清空排行榜
首先需要拥有清空排行榜的权限(权限可以找运营申请)
其次需要明确排行榜数据跟存档数据是隔离的,互不影响,所以清空排行榜并不会清空对应的存档槽数据,清空槽位需要结合eca使用
清空排行榜操作如果是误操作,最多恢复最近一次删除前的排行榜数据
排行榜有拉黑功能吗?如何拉黑排行榜玩家?
排行榜有拉黑功能,玩家被加入黑名单之后,便无法再更新自己的存档数据到排行榜中,但是存档数据是正常更新的。
排行榜中原有的数据如果也不想看到则需要手动删除操作
存档槽
RPG需要保存玩家的装备、等级等数据,RTS游戏需要保存关卡等数据。在编辑器中,你可以在存储槽选项卡中点击加号来设定各种参数,从而搭建项目的存档结构。你还可以通过编写触发器将存档的数据上传到平台的云服务器中,并通过开发者平台来配置存档。
每一行数据,包含槽位,数据类型,数据名称和初始值。数据名称和数据类型可以通过双击进行修改,初始值则通过单击添加。
防作弊配置
防作弊配置主要用于解决玩家通过本地作弊程序修改与存档有关的内存值,将修改后的结果上报存档服务器落盘导致的存档异常增加情况。
你可以在主界面-细节-存档设置界面中找到这个功能的配置入口。
界面打开后,你可以点击新建策略组来创建一个防作弊策略。
目前防作弊配置只能应用于数值型的存档槽位,且每个存档槽位只能同时被一个防作弊策略约束,当你没有办法创建防作弊策略时,请检查你的存档槽位是否有尚未配置防作弊策略的数值型存档。
创建完成防作弊策略后,你可以选中策略条目查看和编辑防刷分的规则,正在编辑的策略对应的存档槽位将会出现在这个下拉列表中。
勾选存档槽右边的仅增加,服务器将会把这个存档槽中所有导致下降的操作否决。
存档槽下面的界面对应着防刷分策略的表单,你可以在表单区域编辑在处于某个地图等级的区间的玩家每天、每局这个存档槽最大的增加量。
点击加号时,将会创建一条约束每日新增的配置。配置规则如下图,语意为在地图等级1-10时,玩家每天经验最多能增加100点。11-30时,每天经验最多能增加2000点,以此类推。
在每天新增上限的基础上,你还可以通过点击每日最大值右侧的加号,创建单局新增的限制,如下图的语意为:玩家在地图等级1-10时,在600秒前结束的游戏,最多只能增长10点经验,在600到1800期间结束的游戏,最多只能增长50点经验,超过1800秒后结束的游戏可以获得最多100点经验。
当玩家的地图等级超过策略配置的最大等级时,他将不再受到防刷分规则的约束。
服务器随机池
基于作者手段在客户端发起掉落请求,在服务器执行掉落结果运算并直接落盘在存档中。从而解决缓解掉落内容基于中间变量落盘所产生的安全性问题。
入口位置
细节-存档设置-服务器随机池
对应ECA
1.存档 - 使【玩家】以【服务器掉落】策略执行服务器掉落,在掉落完成时做动作。
带有动作列表(匿名函数)参数,在服务器对应动作完成后,回调函数到达时执行动作列表的语句。
若发送掉落请求的客户端 不是参数中的玩家,则该请求不生效,但仍会执行动作列表。
2.特殊 - 获取服务器执行结果
仅在1的动作列表中可以看到。 返回整数。0代表成功,1代表不满足触发间隔,2代表不满足每日限制 999代表其他服务器链接问题。
3.特殊 - 遍历服务器掉落结果做动作
仅在1的动作列表中可以看到。带有动作列表(匿名函数)参数,获取方式见4和5。
被遍历的对象为 默认将服务器回调返回的参数(列表),遍历次数对应掉落个数,若掉落个数为1,则仅列表仅有1项内容。列表键值对获取方式见4,5。
当执行失败时,列表为空列表,对应动作不执行。
4.特殊 - 获取遍历到的掉落影响存档所在槽位。
仅在3的动作列表中可以看到。返回整数,代表对应的玩家存档id。
5.特殊 - 获取遍历到的服务器掉落的存档影响值。
仅在3的动作列表中可以看到。返回整数,代表对应玩家存档id的实际增量。
Y3地图防作弊策略
针对Y3地图上线后可能遇到的作弊问题,本文提供了一些逻辑设计上的思路和官方功能的使用说明。 在本文末尾,会介绍一些官方正在制作和准备制作的反作弊功能。
1. 避免随机性数据的延迟存档
在编辑器中,如果使用允许覆盖的表格类型存档槽,会有一定的上传间隔限制。 在前一次上传该表格存档后,一段时间内是不会再次触发上传存档的。 如果游戏中有随机性逻辑修改的数据使用该类型存档,则有可能被用户抓住时机,在随机到不想要的结果后杀端,导致存档失败。 · 随机性逻辑修改的数据如:抽奖机制、洗练属性条目、开箱子等。 这类数据可以使用禁用覆盖操作的表格存档槽或其它类型存档槽
2. 使用加密表保护关键数据
官方提供了加密表的机制,通过特殊算法对指定表中的数据进行了加密操作,提高了数据的安全性。
使用ECA接口: 表-加密表格 即可对目标表进行加密。
但加密表后,对该表格的数据存取将产生较高的性能成本,故仅推荐对关键数据表进行使用。
3. 开启反作弊检查
官方提供了一些作弊检查机制,可在运行时识别一些作弊情况。
使用ECA接口:单位 - 开启属性作弊检查 即可开启对某一单位的检查。
如果官方机制识别到作弊情况,可通过监听 玩家 - 检测到作弊 事件进行监听
4. 根据业务需求,合理设置存档槽的限制规则
编辑器的存档设置中,开发者可以对整数、实数类型的存档进行上传的数值限制
这些限制包括:
上传日期限制
可以限定某个存档槽只能在星期几被修改。适用于一些仅在周期性活动投放的数值。
上传时间段限制
可以限制某个存档槽只能在一天的那几个时间段被修改。适用于一些仅在周期性活动投放的数值。
单局分数限制
可以详细配置不同地图等级时,
· 玩家的单局游戏时长处于指定区间时,最多只能增长多少数值
· · 比如图中配置的,游戏时长一分钟内不能增加,5分钟内只能增长1点等
· 玩家每天或每周可增加的数值限制
· · 按天或周为时间段,限制玩家在该时间段内可获得的数值上限。
5. 使用服务器随机池代替本地逻辑
开发者可在存档槽设置界面中打开服务器随机池配置界面
在条目中可配置掉落个数、每日限制、触发间隔等参数
并可设定随机掉落的权重和修改存档槽的数值
该逻辑会在服务器执行,减少被恶意串改的可能
6. 自定义的加密方式、尽量使用实数类型存档、加密表存档
存档表中的值改成字符串,写入存档函数改成加密后的字符串进行写入
CT代码发现会劫持设置数值函数,无脑设置内存数值,所以设置成自定义的字符串格式后很难进行破解
另外实数类型编辑器内部进行了加密逻辑,无法通过界面上显示的值进行内存定位,能够提高破解难度
7. 利用多人环境的不同步回调进行防作弊检测
如果地图异步问题解决的很好,异步率能够控制在万分之几的状态,且是一个强PVP玩法,可以考虑利用不同步回调进行防作弊逻辑
或者通过GameAPI.add_detail_log指令增加自定义存档检测逻辑,进行多玩家的存档检测,从而防止作弊
8. 正在制作和计划制作的反作弊机制
限制存档槽数值仅能在指定gamemode下修改
例如仅限gamemode=天梯时修改
随机只读存档
通过服务器生成一个随机数值,仅能通过服务器修改
限制存档槽值只能被服务器修改
禁止该存档槽的值被客户端修改
可以于服务器随机池和请求服务器扣除数值回调配合使用
比如货币元宝,通过调用服务器随机池增加,通过请求扣除接口扣除。完全不走客户端本地计算
请求服务器扣除存档槽数值回调
向服务器请求减少某个存档槽的数值。
如果扣除失败,则回调中会返回失败
如果扣除成功,则在回调中响应后续逻辑。
该机制可以避免被作弊器修改/锁定货币数值的情况。
预设存档槽数值变化行为
在编辑器中提前配置2个或多个数值类存档槽的变化行为逻辑
如: 行为ID=1 :元宝-2,金创药 +5
通过纯服务端逻辑,避免客户端自行修改存档槽数值时可能出现的作弊可能。
离线查询存档&非实时存档说明
一、离线存档用于获取非当局玩家的存档数据,可以用此数据做离线pvp竞技场等业务
配置
点击:细节-存档设置。唤起存档槽设置界面
在存档槽设置界面创建一个字符串类型的存档
切换到离线存档页签选择刚才新建的字符串存档配置位离线存档点击确定,完成离线存档的配置
获取
选择动作:玩家 - 请求获取玩家离线存档。并配合函数:玩家 - 获取排行榜指定排名玩家的aid。来异步的获取指定玩家的离线存档
二、非实时存档说明
为了提升存档的易用性与安全性,表格类型存档不在支持允许覆盖类型
当旧存档是允许覆盖存档时,支持修改类型为禁用覆盖
图中已不再支持点击红框中的取消选项