查看: 1610|回复: 6
收起左侧

[教程] 如何编写Zerbu's Mod Constructor(V4)脚本系列课程(二)——流程可视化

  [复制链接]

发表于 2021-12-31 00:56:03 | 显示全部楼层 |阅读模式

快快登录说出你的故事吧~!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 K大叔 于 2022-1-8 00:53 编辑

系列课程索引:
如何编写Zerbu's MOD Constructor(V4)脚本系列课程(二)——流程可视化
==========================================================================================

上一篇我们完成了一个简单线性流程脚本,下边我们以一个简易的真心话大冒险MOD为例,做个扩展。

实现目标:
==========================================================================================
真心话大冒险(简易版)
  • 玩家控制角色与另一个小人对话,选择“一起真心话大冒险(单机版)”或“一起真心话大冒险(联机版)”,对方接受后开启小游戏;
  • 首先是转酒瓶,看酒瓶朝向谁,转酒瓶用一个情绪Buff来展示;
  • 转酒瓶Buff持续一小会后,随机出酒瓶的指向,酒瓶指向也是情绪Buff,分别展示给参与的双方;
  • 酒瓶指向的人成为挑战者,需要进行真心话或者大冒险,另一方成为监督者;
  • 从题库中随机真心话或大冒险题目(根据最开始单机版、或联机版的对话选择,题目会不一样);
  • 把题目通过情绪Buff展示给双方;
  • 挑战者在规定时间内完成了题目要求的挑战,本轮结束;
  • 联机版中,真心话题目是需要挑战者线下口述或线上连麦语音进行回答,监督者认为挑战者回答的靠谱,可以通过对话“对他/她的回答表示满意”来触发对方挑战成功;
  • 挑战者在规定时间内没有完成题目要求,或主动放弃挑战,获得惩罚情绪Buff,本轮结束。

==========================================================================================

我们先看一下针对这个简易MOD,可视化流程会是什么样子的:


下面介绍具体节点的定义和实现方式,大家可以对照上边的流程图来理解:

1.BUFF
图片3.png
用方块代表BUFF,注意上一篇重点讲述的概念,BUFF可以当成函数,作为函数,可以被调用,可以执行各种功能,可以根据条件再去调用其他函数(通过LOOT)
=======================


有一些BUFF具备特定的功能,为了方便识别,我们给它们标注不同的颜色:

2.展示类BUFF
图片4.png
在小人的情绪栏作为情绪显示出来
也是大家理解BUFF最正常的用法,通过BuffInfo、Duration、Emotion等组件来控制展示内容、时长、情绪

=======================

3.状态类BUFF
图片5.png
状态类BUFF,添加BUFF就是设定状态,之后可以通过BUFF是否存在来进行状态判定
状态Buff脚本里可以没有任何组件,完全由其他流程产生和判断

=======================

4.延时类BUFF
图片6.png
实现延时执行的功能
一个延时类BUFF的实现方法是通过设定BUFF的持续时间,然后给这个BUFF添加Actions->Loot on Remval组件,再接需要延时执行的Loot
=======================

注意:一个BUFF可以同时具备展示、状态、延时等功能,以上颜色标记只是为了理解方便,你可以根据一个BUFF主要承担什么功能来标记颜色

=======================

5.LOOT
图片7.png
用三角代表LOOT,Loot可以理解为对其他函数进行调用的指令
=======================

一些LOOT有特定功能,为了方便识别,我们给它们标记字母:

6.随机型LOOT
图片8.png
从一群BUFF中随机一个调用
实现方式是通过Buff Actions->Add Random Buff组件来调用Buff

=======================

7.判断型LOOT
图片9.png
根据条件判断来决定是否调用指定BUFF
在Add Buff或Add RandomBuff组件中通过Test Condition Sets项进行条件设定
具体的条件也应当在流程图中表述清楚
=======================

注意:
  • 一个LOOT可以同时具备随机调用、条件判定,你可以根据自己的习惯来标示,例如同时标记RJ字母;
  • 一个LOOT可以同时进行多个BUFF的调用,可能很多小伙伴以为一个Loot只能添加一个Add Buff/Add Random Buff组件,不是的,可以添加多个!!从ADD COMPONENT里再添加一次就可以了。像这样:
image.png
=======================


8.多重调用LOOT
图片10.png
当一个LOOT有多个Add Buff/Add Random Buff组件(很可能是因为执行条件不同,所以不能放在一个Add Buff中)时,为了清晰表达每个调用的条件和指向,这里用小圆圈来区分不同的AddBuff/Add Random Buff
=======================


9.移除BUFF
图片11.png
移除指定Buff,通过Loot调用Buff Actions->Remove Buffs组件来实现
=======================


10.广播
图片12.png
广播Broadcaster,可以让附近的SIMS触发Loot或者Buff,MC的广播机制有一些坑点,我们在下一篇教程里详细介绍

=======================

11.调用关系
图片13.png
节点之间用有方向的箭头来表示调用关系

=======================

12.调用关系B
图片14.png
从Buff直接引出的箭头,是通过Buff里Actions->Loot on Addition组件来实现,意思是在Buff被添加时,执行箭头指向的Loot
=======================


13.调用关系C
图片15.png
对于依赖于Buff持续时间的功能,在Buff下边增加两个横线,来表示Buff持续时间的起止,从下横线引出的箭头,意思是Buff结束/被移除时,执行箭头指向的Loot,通过Buff里Actions->Loot on Removal组件来实现

=======================

14.调用关系D
F2.png
这也是一个依赖于Buff持续时间的功能,在Buff存续期间,检测到指定行为,执行箭头指向的Buff
实现方式是,在Buff中添加Actions->ContinuousLoots组件,然后在这个组件中添加Continuous Loots,用这个Loot调用接下来的Buff
=======================

PS.一个MC使用的小技巧:

一般一个ELEMENT有两种方式创建:


方式一,通过主菜单的ADD ELEMENT创建:
F3.png
通过这种方式创建,左侧列表会出现你创建的ELEMENT,之后可以方便快速的选择、编辑,同时这个ELEMENT也有你定义的名称,可以方便的调用(一般可通过ReferenceType->Existing Element或者 来调用)

方式二,在组件的Reference Type中,通过New Element创建:
image.png
image.png
通过这个方式创建ELEMENT,在创建时比较方便,没有额外冗余的创建和调用流程,缺点是不会出现在主界面左侧的列表上、别的组件想调用这个ELEMENT也很难选择;
注意:你固然可以给通过方式二创建的ELEMENT设定一个特定的名称(通过SET LABEL)来实现方便的给其他流程调用,但是强烈建议你不要这样做,一个实际的情景:
踩坑示例:假设通过LOOT1,New Element了一个new Buff1,这时候你觉着这个new Buff1是个比较通用的Buff,LOOT2、LOOT3、LOOT4……也需要调用,这时候你在LOOT2/3/4中通过Existing Element调用了这个new Buff1,过一会儿,你因为各种原因觉着不再需要LOOT1了,或者LOOT1不需要调用new Buff1了,这时候你删除/修改了LOOT1,然后你会发现悲剧了,整个new Buff1消失了……,LOOT2/3/4中也找不到了

综上,我建议以下情况使用方案一来创建ELEMENT:
  • 具备通用性/潜在的通用性,会被其他多个流程调用的;
  • 需要经常调整组件功能、参数进行测试的;
  • 展示型Buff;

而,只会且未来也预期只会被父节点调用、功能简单不太会经常反复调试的ELEMENT可以采用方案二方便的创建;


==========================================================================================
OK,以上是一种流程可视化的MC脚本编写方法,对于大型项目,有助于理清流程思路,符号都是我自己定义的,你可以有你自己习惯的定义,这个教程主要目的是启发思路。

教程示例是简易版真心话大冒险流程,我有制作正式可玩的版本,有兴趣可以从这个帖子下载:【游戏交友】真心话大冒险MODv1.0——崭新感情培养方式,支持联机交友
相应的这里附上完整版真心话大冒险流程见下图:

后续课程,我会继续给大家讲解一些常用组件的用法和坑点。

==========================================================================================


关于SIMS的功能脚本,本人也还在持续学习中,有志同道合的小伙伴可以加我的 QQ:231726237 ,一起学习、一起讨论、有机会一起合作~~


==========================================================================================

评分

参与人数 3肥皂 +5 S币 +510 辣条 +10 收起 理由
samysims4 + 5 + 2
喜久福 + 5 + 2 点赞!
北城卧龙 + 5 + 500 + 6 点赞!

查看全部评分

楼主热帖

共收到 50 菊花
打赏榜
喜久福
共打赏 50 菊花
暂无
捷足先登
暂无
捷足先登
4
暂无
--
5
暂无
--
6
暂无
--
7
暂无
--
版权声明
本站积极遵守中华人民共和国各项法律法规,促进良好社会公共道德,鼓励劳动者劳有所得。
为保护作者和平台的共同利益,在本站发布的原创内容所包含模型、图片、代码等版权归作者和平台共有,平台承诺不将此权利行使于法律行为以外用途。
本站原创作品仅供购买或下载者本人使用,任何平台或个人擅自转载、售卖本站原创作品,本站均保留诉讼权利。
此条款自作品发布起即时生效。

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

发表于 2021-12-31 01:21:52 | 显示全部楼层
给力!!
我要说一句

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

回复 支持 反对

使用道具 举报

发表于 2021-12-31 13:42:02 手机访问 | 显示全部楼层
单从这个教程的仔细程度,就很敬佩了,真的辛苦大佬了!!!
我要说一句

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

回复 支持 反对

使用道具 举报

发表于 2021-12-31 13:44:01 手机访问 | 显示全部楼层
自己研究软件的时候差点吐了,对大型MOD完全不知道怎么做,感谢大佬,跪等大佬之后的教程~~~跪了跪了
我要说一句

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

回复 支持 反对

使用道具 举报

发表于 2021-12-31 15:02:45 | 显示全部楼层
谢谢大佬,大佬好厉害!!!
我要说一句

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

回复 支持 反对

使用道具 举报

发表于 2022-1-1 02:30:21 手机访问 | 显示全部楼层
十分感谢教程!!!先马!
我要说一句

【三宫六院论坛】唯一官方店为:sgly.taobao.com,除此之外都是假的!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则