企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
下面要谈一个很严肃的问题了。嗯,就是体力上限的问题。这是关乎到武将们的切身利益的严重问题。流失体力上限,这是一种几乎不可逆的行为,使用前请务必三思啊……(☆SP刘备:不要学我玩嗓子!) </br>不过在代码中,流失体力上限和流失体力一样简单,都是可以一行代码解决的小问题。Room麾下一员大将`loseMaxHp`正等待着我们的召唤!那么我们就来考察考察这个成员函数吧: </br>`loseMaxHp`,原型与`loseHp`极其类似: ``` loseMaxHp(victim, lose=1) ``` </br>甚至连参数都一模一样。以`victim`表示受害者,`lose`表示流失体力上限的数目,默认为1。 </br>话不多说,接着拿我们的孙大圣做个实验吧!(孙悟空:别……) </br>创建一个新技能 > 灭妖:每当你对一名角色造成一次伤害后,你可以令该角色流失一点体力上限。 </br>(孙悟空:……) </br>这也是个触发技,触发时机是造成伤害后,应该是sgs.Damage。由于会是询问发动,所以设定它的触发频率是不频繁触发sgs.Skill_NotFrequent。 </br>代码如下: ![](https://img.kancloud.cn/21/32/2132269d87522919100c3ba7d460951c_678x288.png) </br>哦,这里有个小细节需要注意一下: </br>还记得询问是否发动技能的`askForSkillInvoke`函数吧?我们又见面了。 </br>在研究AI文件的时候我们就知道了,`askForSkillInvoke`的第三个参数`data`是用于保存和传递环境数据的。其实`data`的本领可大了,能储存许多类型的数据。所以随着环境的不同,`data`中存放的数据也是不一样的。 </br>在我们这个造成伤害的时机(sgs.Damage)下,`data`里面储存的之前我们提到的伤害结构体。而我们如果要查阅这个伤害结构体里的信息的话,需要进行一下所谓的“类型转换”。于是就有了这么一句: ``` local damage = data:toDamage() ``` </br>`toDamage`是`data`提供的一个用于转换到伤害结构体的方法。有了它,我们就可以很轻松地取得了这次伤害的伤害结构体了。 </br>那么`data`的真身究竟是什么样的呢?为什么可以变化成那么多的样子? </br>偷偷地记住:`data`的真身是一个叫做sgs.QVariant的结构。关于这个结构的具体信息,可以参考源码(可在群文件里搜索 秒沉水 查找到源码)里的swig\qvariant.i文件的说明。 </br>接下来的事情就像我们预想的那样行动了…… ![](https://img.kancloud.cn/42/81/42819d42f37b9f9b7cc34a58c1c14276_235x118.png) </br>结果…… ![](https://img.kancloud.cn/1a/05/1a05bffd5a97840c1ea44cd709de782f_172x186.png) </br>(黄忠:欺负老年人,这世道啊……) </br>向黄老表示一下歉意……然后宣布,我们的实验成功了!