铃心自定义——C3:好感度实例分析

要按我说,好感度啊,什么的,全都是虚幻。真正的情感还是要来源于制作者本身。

编辑于2020.2.6 转载请注明作者

好感度是个什么玩意

问得好,最早的铃心好感度回复我也不知道我是怎么想的,就做出来了。当时大概的想法是通过好感度来限制某些功能的使用——后来在逐渐的演化中,变成了一个更好的表达机器人人设的手段。

好感度回复的预期是什么样的

  • 能够通过某些手段升高好感度
  • 能够查询目前好感度的值
  • 能够通过好感度进行区分回复

首先,我们需要一个储存好感度的文件。在预期使用数量较少(小于2万)的情况下,采用读写配置文件的方法还是比较快的。

好了,现在好感度增加有了,我们还需要一个好感度查询,让用户能够自由的查询自己的好感度。

好了,一个简单的好感度查询功能我们也有了。
接下来,我们就需要一个极其重要的部分——那就是一个受好感度参数控制的回复系统。

受参数限制的回复系统&基础的嵌套比较思想

首先我们的想法肯定是——好感度高于某个值,回复就由第一级回复切换至第二级——这个想法是相当正确的,因此我们找到了这样的一个变量。

由此,我们就有了初代的好感度回复代码!

简单吧!这样我们就有了一个非常基础的好感度回复。
如果我们要多个好感度区间的话,可以增加更多的比较来进行判断。

同样,按照这个规律,我们可以嵌套三层,四层,五层…甚至更多层。

但是我们很容易就会发现——当嵌套层数增加的时候,别说是一般人了,地中海都会迷惑——在早期的无编辑器时代,这种排查括号的工作相当的繁琐,尽管现在有了,但是一般人也搞不定太多的嵌套括号的。

所以这种书写方式,我只推荐低于四层的时候可以写写,再多了,就几乎没法做了。

真的没有办法了吗?

有,怎么可能没有。下面就是本篇的难点和重点——利用循环代替嵌套形式的比较——如果感觉困难的话,可以选择性的跳过。

在理想的情况下,我们想要的最好的添加好感度回复的方法是这样的。

因此,根据这个目标,我规定了一个书写好感度回复的标准格式

上面的就是一个好感度回复的结构示例,其代表的意思是——好感度低于20就触发回复“好感度一级”,如果处于20-40之间,就触发“好感度二级”,以此类推——直到好感度大于80,则回复“好感度四级”

好,有了这个思路之后,我们就需要针对性的开发一个读取的方式。

请注意,下文内容可能引起不适,相对于前文的简单内容难度可能略大——但是我们会在后面的一篇“迭代法介绍”中专门的讲解这类处理方式。在这里,你只需要知道这是一种近乎万能的处理方式即可。

如果看不懂没关系——考虑到大部分使用者都看不懂,因此我采用了铃心的最新科研成果——函数系统,将其打包成函数了!

函数的具体使用方法可以参考铃心的变量文档,在这里我就不多赘述什么了。

这里采用的方案其实本质上来说还是传统的比较方案。只是用了一个循环迭代的思想,来读取了一个理想化格式的好感度回复而已。

3.3更新:Fori循环查找进行区间回复

作者为铃心群老大,因为看到我写的迭代觉得太复杂了,就用Fori写了一个,缺陷是不能够处理[]信息。但是可以在中间加入一个【替换】来进行处理,防止[]导致的歧义。总体上是优越于我的迭代方案的。

4.4更新

由于旧版无法匹配负数,因此特此带来兼容负数的函数更新:

结语

给力吗?最后一个给力吗?

其实就是这样,在开发的过程中,我们也会偷懒——但是偷懒正是我们不断改进的主要方案。
好感度系统的函数化,极大的降低了书写好感度回复的难度和成本,使得几乎所有人都可以快速的完成好感度区间回复的编辑。
同时,由于铃心的特殊性,在好感度回复中也可以调用铃心原有的变量。是不会有任何影响的。

对于本篇来说,我们接触了基本的嵌套思想,并且见识了利用现有的变量到底可以做到什么地步。

在下一篇,我会以开关系统的发展和演化来向大家介绍如何设计一个不错的铃心功能,敬请期待!

其实好感度回复的那个,我是直接把我骰子用的复制过来了,根本没有测试过。

如果出错了,请务必用留言通知我!

Yorunina

24 Comments

  • 此前好感度有一个小小的bug,当好感度等于边界值的情况下,比较函数会失效,传回最高好感度区间的数值,需要调换比较中参数的位置来修复。
    目前已经修复。

  • 唔,咱查询好感和回复一直都是零,好迷惑阿

    • @唯心 是不是因为路径问题?这个理论上是不会出现问题的。你所说的查询为0,很有可能是没有新建好感度配置,或者增加模块出了问题。

    • @唯心 在第一行补充一下 【赋值变量路径>=<【运行目录】\app\config】就可以了

  • 有没有办法让机器人回复上涨的好感度数值是多少呢?

    • @萌新闪闪的眼神 帖子中已经有对应部分的说明。

  • 请问如果想要在同一个好感度区间插入几条不同的回复,随机选一条该怎么做?

    • @cacslis 使用【随取】或者【选择】即可

  • 那么什么时候讲迭代法介绍呢

  • 未使用函数的循环在好感在最高和第二高之间会因为正则表达中第一和第二相同跳到最后从而输出最高好感的话。
    如何处理这一段?

    • @bio和pip 很有可能是因为【比较】的问题,比较的返回时[前者大返回]、[否则返回],因此如果出现了相等的情况就会返还最大值。
      此时只需要将比较的两个参数调换位置,就可以规避这个问题。
      在下文中的函数中,已经发现该问题并进行了解决。如果还有问题,请戳QQ

  • 太给力了!谢谢♥

  • 请问一下,打包好的函数要怎么在指令中使用呢……可能是我打开变量文档的方式不对,并没有弄懂函数具体的使用方法……【卑微】

    • @Vindur 只需要执行一次,那么就可以调用了。(推荐在[初始化xxx]中,加入函数。这样每次初始化的时候都会执行函数的录入)

    • @Vindur 添加一条自定义回复,触发关键词用[初始化1],对应的回复内容就把作者的这段函数原封不动的抄上去。
      然后就可以直接调用作者范例里【好感度回复内容1[好感度阈值1]回复内容2[好感度阈值2]回复内容3[好感度阈值3]>=<触发者好感度】的格式了。

  • 弄完之后查询和回复都是0,但是txt上有显示增加,怎么处理啊

    • @乆亓仝屴 大概率是你读配置出问题了. . .自己好好检查一次吧。

  • 想请教一下,请问如果框架换成mirai后变量路径应该怎么填呢……orz

    • @Poriacocos 在铃心自带的回复调试哪里发【运行目录】就能看到了

  • 大概要在回复里面复制哪些呢(看着有点多,怎么改都生成出奇怪的东西)

  • 大佬好,想问一下mirai框架下变量路径应该怎么填orz是单纯在MiraiNative/data下的铃心数据目录里填吗

    • @Yumeaki5 在铃心自带的回复调试哪里发【运行目录】就能看到了

  • 大佬大佬,请问cqxq的变量路径怎么填啊(☍﹏⁰)

    • @Anonymous 在铃心自带的回复调试哪里发【运行目录】就能看到了。

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐