基于标签、触发器、和日志的自动化操作优化建议
背景:目前家族模拟器的自动化操作机制不是特别完善,藏经阁、职位设定、自动赏赐仅能满足部分需求(还有很多 bug,比如自动赏赐第二层无法选择练气境界,最后两层无法保存选择),这在一定程度上会成为玩家入手模拟器,扮演家族意志的阻碍(造成很多人只能选择培养少量精英弟子的玩法,因为其它人管不过来),而实际上,我们可以将这些互相独立的自动化操作模块整合成一个通用的触发器,当检测到对应事件触发时,若满足给定条件,则依照给定规则筛选出弟子,执行预定义的操作,同时输出执行的日志。基于这个通用的触发器,我们或许可以在游戏中实现更加灵活的自动化操作
建议:
1. 弟子标签:关于弟子多套职位设定的建议之前也有人提到(比如该精华帖的第十四条内容),目前单职位的设定并不能够完全的满足玩家对弟子按照一定条件分组,并且按照分组对不同类型弟子进行浏览和自动化操作的基本需求,因为同一个弟子完全可以属于不同的分组。
比如我希望能有一个内门和外门的区别,高资质弟子进入内门,给予更好的丹药和功法,主要负责修炼,低资质弟子进入外门,主要负责挖矿,同时我又希望有一个长老和普通弟子的区别,高境界弟子成为长老,单独放置到一个岛上,同时换掉他的修炼功法改成攻击防御类(或者炼丹炼器)功法,在派遣战斗时优先派遣长老出战,此时一个弟子就可能同时属于两个分组,比如”内门“和”长老“。同时我又希望对于部分有独特天赋的弟子进行标记,比如炼丹天赋高的标记为炼丹弟子,这样在找人炼丹的时候可以一下找到,此时一个弟子就可能同时属于三个分组,比如”内门“、”长老"、"炼丹"
因此就需要实现一个同一弟子属于不同分组的功能,我这里暂时称为“标签”,这里需要实现的有关标签的功能如下
① 允许玩家手动给弟子赋予或取消标签,不限制一个弟子标签的数量
◉ 允许通过设置条件批量化赋予标签(比如同时给所有炼丹成功率加成大于等于 10% 的弟子赋予”炼丹弟子“的标签)
◉ 允许通过手动一个个的赋予标签
② 允许通过触发器自动给弟子赋予或取消标签
③ 允许通过标签浏览属于该标签的弟子(类似现在的按照职位浏览,按照境界浏览)
④ 允许在触发器中按照标签选择弟子(类似现在的自动赏赐可以按职位选择弟子,标签就等于职位,不过一个弟子可以有多个)
⑤ 允许浏览或在触发器中选择时进行标签的与、或、非操作,比如选择"同时包含标签 A 和标签 B" 的弟子,选择“包含标签 A 或标签 B”的弟子,选择"包含标签 A 但不包含标签 B" 的弟子(现在的自动赏赐就有一部分这个功能,比如可以选择职位A且境界为筑基大圆满的弟子,但是目前这个功能太弱了,不能多个条件组合,比如不能选择 (职位A 且 (境界为筑基大圆满 或 境界为筑基后期)) 的弟子,这个可能之后要加强)
2. 触发器:现有的自动化机制主要包括了自动赏赐、自动装备、自动学功法、自动调遣、自动吃药、自动找工作这些内容,但是目前需要自动化的地方远不止这些,比如我希望战斗失败后自动给弟子补充遁地符,弟子忠诚度低于 6500 时自动给弟子赏赐杂物提升忠诚度,目前的自动化机制就无法实现。一种解决方法是直接原地再补两个自动化机制,但是这样就会导致游戏里的自动化机制越堆越多,一方面显得很乱,让人不知道哪里还有个自动化,另一方面也增加了玩家的学习成本。因此,建议以一个通用的触发器代替目前所有这些自动化内容。触发器包含事件、条件、执行者、行为四项,当指定事件发生时,若满足给定条件,则指定若干执行者(弟子或者资产),执行指定行为。这样既能够满足玩家各种各样的自动化需求,也能够让游戏的自动化机制变得易于理解,减小玩家的学习成本。
① 事件建议包含以下内容(我暂时只想到了这些,不过应该远不止这些,实际上应该更细化,最好能到给 MOD 作者用的触发器的那种细致程度)
◉ 时间事件:间隔给定时间触发,包括
※ 每 X 旬(X 可手动填写)
※ 每 X 年(X 可手动填写)
◉ 突破事件:有人尝试突破小境界或大境界
◉ 战斗事件:发生战斗
◉ 物品增加事件:某件物品加入仓库
◉ 物品丢失事件:某件物品因掠夺或弟子偷窃等原因而损失
◉ 岛屿占领事件:占领某岛屿
◉ 岛屿丢失事件:某岛屿被占领
◉ 海兽攻岛事件/敌对家族进攻事件
◉ 岛屿灵气超出事件
◉ 弟子加入事件/弟子死亡事件/弟子成年事件/弟子叛逃事件/弟子结婚事件/弟子生娃事件
◉ 启灵装备升阶事件
② 条件建议包含以下内容(目前暂时只想到了这些,不过可以不限于以下)
◉ 无条件:直接通过
◉ 突破成功/失败:用于突破事件,突破者突破成功或失败
◉ 战斗胜利/失败:用于战斗事件
◉ 仓库给定物品数量达到/低于阈值
◉ 岛屿属性(包括岛屿上的修士人数、境界等)满足给定要求:用于岛屿相关事件
◉ 进攻方属性满足要求/防守方属性满足要求:用于海兽、敌方进攻相关事件
◉ 触发弟子属性满足给定要求:用于弟子相关事件(弟子加入、弟子成年等)
◉ 所有弟子中满足给定条件的弟子数大于给定数量
③ 执行者建议包含以下内容(目前暂时只想到了这些,不过可以不限于以下)
◉ 所有弟子:选定所有弟子为执行者
◉ 触发者:选定触发该事件的弟子(比如弟子突破成功事件选定的触发者就是突破的那个弟子,战斗类事件选定的触发者就是战斗参与者)
◉ 弟子属性条件:选定所有属性表达式返回为 true 的弟子为执行者
※ 属性表达式可以是数学算式,当为数学算式时,其支持对任意多的属性和常数进行等式和不等式运算,非数值属性会尝试进行数值化后参与运算(比如不同的元婴在这里会先数值化为“元婴品级”再参与运算,如大道元婴是五品数值化后就是 5,不同的境界可以数值化成不同的等级)。例子:属性[气血] / 属性[总气血] < 10%,选择所有气血过低的弟子(喂回血丹药)
※ 属性表达式可以是字符串表达式,包括包含、不包含、等于等算符,此时所有的属性均会当成是字符串进行处理。例子:属性[灵根] 包含 木,选定所有木灵根弟子做特殊标记
※ 属性表达式中的属性可以选择弟子的所有面板属性和非面板属性的一些参数
◷ 面板属性:面板上有的属性(气血、年龄、最大年龄、灵根数、金丹品级、元婴品级、资质等)
◷ 非面板属性:面板上没有或者需要一番计算的属性(子女个数,剩余寿命,储物袋里面给定物品的个数,不同颜色的天赋数,总加成(总修炼速度加成、总气血加成、总武力加成等))
※ 属性表达式可以无限进行与、或、非的叠加
◉ 给定标签弟子:选择给定标签的弟子
◉ 资产属性条件:满足给定条件的资产,触发器也可以对资产进行操作,可以通过资产属性条件选择合适的资产。资产的属性包括等级、所在岛屿、正在生产的物品等。
※ 可以考虑给资产也加上标签,因为事实上占岛很多之后大部分的矿产、森林等都是没人的,你要操作生产的只是小部分的矿产,这个时候就很难从资产页面上选择你要操作的矿产,加个标签就可以解决这个问题
◉ 可以在设置执行者的界面预先展示符合当前要求的弟子或资产以方便设置
④ 行为建议包含以下内容,其中弟子和资产可以支持的行为不同
◉ 尝试给予物品(X个):给予弟子物品但不使用,X 表示给予的个数,可以手动输入,当仓库中物品数量不足时会失败
◉ 使用物品(X次):弟子使用物品(比如吃丹药或者穿装备),若弟子储物袋里没有该物品,则会从仓库中拿取并使用。X 表示使用的次数,可以手动输入,当仓库中物品数量不足时会失败
※ 使用修为丹药可以考虑加一个“直到丹毒满"次
◉ 切换工作:弟子切换工作
◉ 切换岛屿:弟子切换岛屿
◉ 学习功法:弟子尝试学习指定的功法,可以指定多个功法和学习优先级(就是藏经阁的功能),当弟子已有功法在学习时会失败
◉ 选定生产项目:资产选择生产项目
◉ 开始生产:资产开始生产
◉ 暂停生产:资产暂停生产
◉ 清理海兽:自动选择地图中比执行者境界低的海兽进行清理
⑤ 触发器的实例
◉ 自动给练气期内门弟子吃聚灵丹:事件[每年] + 条件[无条件] + 执行者[(标签 == [内门]) 且 (属性[境界] 包含字符串 “练气”) 且 (属性[丹毒] == 0)] + 行为[使用物品[聚灵丹](3次/直到丹毒满)]
◉ 自动给战败弟子赏赐遁地符:事件[战斗发生] + 条件[战斗失败] + 执行者[触发者] + 行为[给予物品[遁地符]]
◉ 当仓库装备数量足够时给弟子发放装备:事件[每年] + 条件[仓库属性[三阶装备数量] > 25] + 执行者[所有弟子 且 (属性[境界] 包含字符串 "筑基") 且 (属性[已装备三阶装备数] < 5)] + 行为[使用物品[三阶装备]]
※ 注:这里需要额外实现统计三阶装备数作为弟子和仓库的属性以及"自动找没有穿戴的三阶装备穿戴"这个行为,不过这个应该不难,目前的自动装备应该有这方面的代码
◉ 自动学功法:事件[每年] + 条件[无条件] + 执行者[所有弟子 且 属性[功法"青木大法"的学习等级] == 3(大圆满)] + 行为[学习功法["乙木长青决"]]
※ 注:这里需要额外实现统计弟子已学习功法和学习进度作为属性,没有学的等级是 0,学了一层的是 1,三层是 3,这个应该也不难因为目前的藏经阁设定里面应该已经有部分代码
3. 日志:日志是降低自动化机制使用难度的关键所在。设置的每一个触发器都应该有其日志输出,方便设置者进行调试,不像现在的自动赏赐等自动化操作到底执行还是没执行、执行给谁了都很迷。
日志设定如下:
① 日志有四种等级,完整、基本、每X年和不输出
◉ 全输出时触发器每次触发都输出完整的事件、条件、执行者和行为的详细参数,如果给所有弟子发丹药,那么每个弟子都是一行日志。也就是一次触发可能输出多条日志
◉ 基本是默认设置,触发器每次触发都输出,但是一次触发只输出一条日志。比如给所有弟子发丹药,那么只输出发了多少人,一共多少颗丹药这一行数据
◉ 每 X 年顾名思义,每隔 X 年输出一次日志,大概包含这个触发器在这些年里执行了多少次,涉及了多少人,发放了多少物品的一个统计
◉ 不输出:该触发器不输出日志
结尾:以上为个人构思的关于游戏自动化操作的一个改进方向,也不是很完善,制作组有兴趣可以参考一下,主要是感觉目前家族游戏如果修仙人数太少就完全没有家族修仙的味道,但是目前的自动化机制却一定程度上导致了修士人数太多会反而给游戏带来负面影响。在未来的 Steam 版本上,一个完善的自动化操作流程或许可以更大程度的发挥家族游戏的魅力,这也是个人目前的一个游戏期待吧。希望在 Steam 版本上能够看到一个比现在更加方便和灵活的管理框架~