IAP游戏开发程序设计-等级通行证 #2 数据结构搭建 上一节主要是笼统简绍了一个等级通行证都需要有哪些模块玩家点击领取之后的链路。本节主要介绍如何通过编码搭建对应的数据结构。与存档字段有关系的四种角色GrowthPassSaveData普通对象每份存档有自己的状态。GrowthPassSaveService静态工具类GameDataManager.Instance 单例对象进行存档服务GrowthFundRewardUI每个奖励格子都是一个实例对象。GrowthFundSaveData 通行证存档一份存档中有四个字段publicclassGrowthPassSaveData{publicstringpassId;// 区分玩家拥有的是哪一个通行证后续可能会出新的通行证。publicboolpaidUnlocked;// 是否解锁付费通行证publicListstringfreeClaimedMilestoneIds;// 免费通行证奖励轨道publicListstringpaidClaimedMilestoneIds;// 付费通行证奖励轨道}内存状态表示为data └── GrowthPassSaveData对象 ├── passId growth_pass_01 ├── paidUnlocked false ├── freeClaimedMilestoneIds [] └── paidClaimedMilestoneIds []小插曲如何防作弊对于上述存档字段如果仅仅依靠paidUnlocked来判断玩家是否购买过付费通行证是十分危险的。古语有云知其知彼百战不殆。无论破解者采用何种工具其核心目标都是篡改运行时内存或者篡改持久化文件。CE修改器Cheat Engine游戏运行时paidUnlocked这个布尔值会以二进制0或者1被加载到物理内存RAM中破解者在CE中附加游戏进程输入数值0来扫描此时此刻会扫描到很多内存地址破解者触发某个函数将paidUnlocked由0变为1此时此刻破解者再回到CE的时候筛选1通过变动筛选反复多次即可找到代表paidUnlocked的精确地址然后破解者可以通过修改这个地址对应的值即可完成破解。此时无论游戏逻辑如何尝试把它改回0CE都会在CPU指令周期内将其重置为1即可达到未付费也能领取付费通行证的奖励。篡改存档文件如果直接以明文存储json或者二进制文件破解者只需要打开文件搜索paidUnlocked直接修改布尔值false到true即可。本文章主要分享如何制作通行证功能防作弊的讲解就到这里啦~才不是我不会

本月热点