查看: 33|回复: 1

回收系统只有五个接口,但它把 "装备换资源" 这件事做成了配置驱动的引擎

[复制链接]

30

主题

72

回帖

1301

积分

金牌会员

积分
1301
发表于 2026-8-21 08:05:28 | 显示全部楼层 |阅读模式
一、设计理念:配置驱动,脚本只做调度

理解回收系统,先要理解它的核心设计思路 ——回收规则在配置表里,脚本只负责调度


很多初学者做回收系统,第一反应是在脚本里写一大堆判断:如果物品名是 "屠龙" 给 100 万元宝,如果是 "裁决" 给 50 万元宝,如果是 "骨玉" 给 30 万元宝…… 这种硬编码的方式有几个问题:一是装备多了之后脚本又长又乱,维护困难;二是改回收价格要改脚本,还要重启或热重载;三是不同版本、不同活动想换一套回收规则,得改代码。


VV 引擎的回收系统换了一种思路:把 "什么物品回收给什么" 这个规则抽到配置表里,用 group 字段分组。脚本不需要知道具体的回收规则,只需要告诉引擎 "我要用哪个组别的回收规则",然后执行回收,引擎自动根据配置表里的规则计算回收结果,把物品换成对应的资源。


这种设计的好处非常明显:


第一,规则和逻辑分离。 回收规则在配置表里,脚本逻辑是通用的,两者互不干扰。改回收价格只需要改配置表,不需要动脚本。


第二,支持多套规则并存。 配置表里可以有多个 group,每个 group 是一套独立的回收规则。脚本可以根据场景切换不同的组别 —— 普通回收用 A 组,活动期间用 B 组,VIP 玩家用 C 组。不需要写多套回收逻辑,只需要切换组别。


第三,维护成本低。 新增可回收物品只需要在配置表里加一行,不需要改脚本。删除回收物品也只需要删配置行。运营人员甚至可以自己改配置表调整回收价格,不需要找程序改代码。


这种 "配置驱动" 的设计思路,在整个 VV 引擎里反复出现 —— 怪物配置、技能配置、物品配置、地图配置,都是配置表驱动。回收系统把这个思路贯彻得很彻底,脚本层薄到只有 "设组别、执行回收" 两个操作。



二、工作流程:设组别、执行回收、拿结果,三步搞定

回收系统的使用流程非常简单,就三步:设置回收组别、执行回收、通过触发拿到回收结果。


第一步是设置回收组别。 用 addrecyclingtype 接口,传玩家对象和回收组别名称。组别名称对应配置表里的 group 字段,告诉引擎 "这个玩家接下来要用哪套回收规则"。


这个接口支持多类别配置,用分号 ; 分割。也就是说你可以一次设置多个组别,引擎会同时应用多套回收规则。这个设计的应用场景是:不同类别的物品走不同的回收规则 —— 比如装备走 A 组、材料走 B 组、消耗品走 C 组,一次设置三个组别,所有类别的物品都能回收。不需要分别执行三次回收。


第二步是执行回收。 用 execrecycling 接口,就一个玩家对象参数。引擎会扫描玩家背包里的物品,根据当前设置的回收组别规则,把符合条件的物品回收掉,换成对应的资源(经验、元宝、货币等)。


执行回收是一次性的 —— 调用一次就扫描一次背包,回收当前符合条件的物品。如果玩家后来又捡了新物品,需要再调用一次才能回收新物品。


第三步是通过触发拿到结果。 回收执行后会触发 recycling 回调,在这个回调里可以拿到回收的详细信息。文档里给了三个常量: <$RECYITEMS> 是回收输出(具体回收了哪些物品), <$RECYITEMSCNT> 是回收总数(回收了多少件), <$TOTALRECYITEMS> 是回收获得的总物品(回收后得到了什么资源)。


通过这三个常量,你可以在回调里做回收后的处理 —— 比如给玩家发提示 "回收了 5 件装备,获得 100 万元宝",或者记录回收日志,或者触发额外奖励(比如回收满 10 件额外送一个道具)。


三步流程,简洁明了。脚本不需要关心回收的具体计算逻辑,全部交给引擎和配置表。脚本只做调度 —— 设什么规则、什么时候执行、执行完做什么后续处理。



三、回收组别:动态增删,支持多套规则切换

回收组别是这套系统的核心概念,也是它灵活性的来源。


组别对应配置表里的一套回收规则。 每个 group 定义了哪些物品可以回收、回收给什么、给多少。不同的 group 是完全独立的规则集,互不干扰。


组别可以动态增加和删除。 addrecyclingtype 增加组别, delrecyclingtype 删除组别(传索引删除指定组别,传 - 1 清空所有组别)。这意味着玩家的回收规则不是固定的,可以根据场景动态切换。


动态切换的应用场景非常多:


活动期间切换回收倍率。 平时用普通回收组别,双倍回收活动期间加一个高倍率组别,活动结束删掉。玩家在活动期间回收就能获得双倍奖励,活动结束自动恢复正常。不需要改配置表,只需要在活动开始和结束时调接口切换组别。


VIP 专属回收规则。 普通玩家用基础回收组别,VIP 玩家额外加一个 VIP 专属组别(比如稀有装备回收额外给奖励)。VIP 到期删掉专属组别,恢复普通回收。不同 VIP 等级可以有不同的专属组别,实现差异化的回收福利。


地图专属回收。 玩家进入特殊地图(比如高级打宝地图)时加一个专属回收组别(这个地图爆的装备只能用这个规则回收),离开地图时删掉。实现不同地图有不同回收规则的效果。


多类别物品分别回收。 一次设置多个组别(用分号分割),装备走装备回收规则、材料走材料回收规则、宝石走宝石回收规则。不同类别的物品用最适合的回收规则,不需要混在一个 group 里。


组别的删除是按索引的,不是按名称。 delrecyclingtype 传的是索引(第几个组别),不是组别名称。这个设计意味着你需要记住自己加的组别在第几个位置,或者用 - 1 清空全部重来。如果组别是动态增减的,索引管理可能会有点麻烦 —— 加了几个之后删了中间一个,后面的索引会变。实际使用的时候,建议要么固定顺序(比如第 0 个是基础组、第 1 个是活动组、第 2 个是 VIP 组),要么每次切换前用 - 1 清空全部再重新加,避免索引混乱。



四、自动回收:间隔检测加背包阈值,解放双手

手动回收需要玩家主动点 NPC 或者用技能,有时候玩家背包满了来不及回收就捡不了新东西。自动回收就是为了解决这个问题。


autorecycling 接口开启自动回收,传两个参数: interval 是检测间隔(秒), max_bag_space 是执行回收的背包空格阈值。文档里的示例是 autorecycling(actor, 2, 10),意思是每 2 秒检测一次,如果背包空格小于等于 10 就执行回收。


这个设计的思路是:不是一直回收,而是背包快满了才回收。间隔检测是为了不那么频繁地扫描背包(性能考虑),背包阈值是为了只在需要的时候才回收(玩家可能想保留一些物品,不想一捡就被回收)。两个参数配合,实现了 "背包快满了自动回收,平时不干预" 的效果。


自动回收的规则和手动回收一样,用当前设置的回收组别。所以开启自动回收之前要先设置好组别,否则自动回收可能用的是默认规则或者不回收。


关闭自动回收很简单,调用 autorecycling(actor) 不传参数就行。这种 "传参开启、不传参关闭" 的设计在 VV 引擎里很常见,简洁直观。


自动回收是一个非常实用的功能,尤其是在打宝场景 —— 玩家挂机刷怪,背包满了自动回收,不需要手动操作,解放双手。做挂机系统、内挂功能的时候,自动回收几乎是标配。


这里有个心得:自动回收的间隔和阈值要根据场景调整。 打宝地图掉率高,背包容易满,间隔可以短一点(1-2 秒)、阈值可以高一点(15-20 格),避免背包满了捡不了东西。普通地图掉率低,间隔可以长一点(5-10 秒)、阈值低一点(5 格),减少不必要的扫描。参数不是固定的,根据实际掉落情况调整,在性能和体验之间找平衡。



五、回收触发与常量:拿到回收结果做后续处理

recycling 触发是回收系统唯一的回调,在每次回收执行后触发。通过三个常量可以拿到回收的详细信息。


<$RECYITEMS> 是回收输出,记录了这次具体回收了哪些物品。这个常量可以用来做详细的回收提示 —— 比如告诉玩家 "回收了:屠龙 ×1、裁决 ×2、骨玉 ×1",让玩家清楚知道什么东西被回收了。做回收日志的时候也可以用这个常量记录具体回收了什么。


<$RECYITEMSCNT> 是回收总数,记录了这次回收了多少件物品。做简单提示的时候用这个就行 ——"回收了 5 件装备",不需要列具体清单。做回收成就的时候也可以用这个累计 —— 比如累计回收 1000 件装备解锁成就。


<$TOTALRECYITEMS> 是回收获得的总物品,记录了回收后得到了什么资源(经验、元宝、货币等)。这个是最重要的常量,告诉玩家回收获得了什么 ——"获得 100 万元宝、500 万经验"。做回收奖励统计的时候也用这个。


三个常量从不同维度描述了回收结果:回收了什么、回收了多少、得到了什么。基本上回收后需要的信息都覆盖了。


recycling 触发还支持可变参数(文档里函数签名是 function recycling(actor, ...)),说明除了玩家对象之外,引擎可能还会传其他参数。具体传了什么需要实际测试打印出来看,文档里没有详细说明。做复杂的回收后处理时,可以把所有参数打印出来看看,可能有额外的信息可以用。


回收触发的应用场景很多:


回收提示。 最基础的用法,在触发里给玩家发消息,告诉玩家回收了什么、得到了什么。


回收成就。 累计回收件数、累计回收获得的元宝数,达到阈值解锁成就或给奖励。


回收额外奖励。 比如回收满 10 件额外送一个道具,回收获得满 100 万元宝额外送经验。在触发里判断累计值,达到条件就给额外奖励。


回收日志。 记录玩家的回收行为,用于数据分析或者异常排查(比如玩家投诉回收给少了,可以查日志确认)。


回收联动其他系统。 比如回收的装备数量计入帮派贡献,回收获得的元宝计入活动排行榜。在触发里把回收数据同步到其他系统。


回收触发是整个回收系统的 "出口"—— 回收计算在引擎里完成,结果通过触发交给脚本,脚本想做什么后续处理都可以。这种 "引擎计算、脚本扩展" 的设计,既保证了回收计算的效率和一致性,又给了脚本足够的扩展空间。



六、应用场景:回收系统能做什么

回收系统的核心功能是 "物品换资源",但围绕这个核心可以延伸出很多应用场景。


装备回收是最经典的场景。玩家打 BOSS 爆了用不上的装备,回收换成经验或元宝。这是传奇类游戏的标配功能,几乎每个版本都有。配置表里定义每件装备的回收价格,玩家点回收 NPC 执行回收,简单高效。


材料回收是另一个常见场景。打怪掉落的各种材料(矿石、皮革、宝石碎片等),积累到一定数量可以回收换成高级材料或者货币。材料回收通常和合成系统配合 —— 低级材料多了用不完,回收换成更高级的材料,或者直接换钱。


垃圾清理是更基础的场景。玩家背包里有一堆没用的垃圾物品,一键回收清空背包,比一个个扔要方便。这种回收可能不给资源或者给很少,主要目的是清理背包空间。


活动专属回收是运营玩法。活动期间开启特殊回收规则,特定物品回收倍率提升,或者特定物品才能回收。通过切换回收组别实现,活动开始加组别、活动结束删组别,不需要改配置。


VIP / 会员专属回收是付费玩法。VIP 玩家有专属的回收规则 —— 更高的回收倍率、更多的可回收物品、专属的回收奖励。通过动态增加 VIP 专属组别实现,VIP 到期删掉组别。


自动回收挂机是内挂功能。玩家挂机刷怪,背包满了自动回收,不需要手动操作。配合自动打怪、自动拾取,实现完整的挂机体验。


回收成就 / 任务是目标玩法。累计回收多少件装备、回收获得多少元宝,达到目标给成就或奖励。通过回收触发累计数据实现。


这些应用场景的共同基础是:配置表定义规则、组别切换规则、触发扩展后续。三个核心机制配合,几乎能覆盖所有 "物品换资源" 的需求。



30

主题

72

回帖

1301

积分

金牌会员

积分
1301
楼主 发表于 2026-8-21 08:06:00 | 显示全部楼层
挠头的500贡献
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表