多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
启用了判定,就不得不提防那些能改判的人。目前可以直接更改判定的技能有司马懿的鬼才、张角的鬼道、王异的贞烈以及诸葛瑾的缓释四个。如果我们也掌握了改判技能,那将足以在判定领域对抗这些人对我们的影响。 </br>那么更改判定具体是怎么做到的呢? </br>我们知道,改判技能首先是一个触发技,它的触发时机是sgs.AskForRetrial(判定牌翻开时),所以我们可以用sgs.CreateTriggerSkill创建一个改判技能。 </br>一般情况下,改判还是一个使用了技能卡的视为技,它把我们用于改判的元素(大多是我们打出的牌)视为了一张可以用来改判的技能卡。这样我们可以用sgs.CreateSkillCard创建一张技能卡,并用sgs.CreateViewAsSkill创建一个改判视为技。 </br>这时我们忽然想起了创建触发技时一直以来没有用到的那个`view_as_skill`,这使得我们可以将两种类型的技能联系在一起。 比如,我们为孙悟空设计这样一个技能: > 引导:一名角色的判定牌生效前,你可以打出一张牌代替之。 </br>根据上面的分析我们可以写出这样的代码: </br>引导技能卡: ![](https://img.kancloud.cn/4a/60/4a600857c3642aca291e4d064cf79909_356x90.png) </br>引导视为技: ![](https://img.kancloud.cn/3c/7f/3c7f052d7e833c5aa61e2c7961b5f1c7_551x419.png) </br>主技能:引导触发技 ![](https://img.kancloud.cn/68/6d/686dc1b7edaadde0a5c2f264e1b3e347_616x266.png) </br>先看技能卡部分。 </br>由于我们用于改判的技能卡是直接打出的,没有指定什么目标,所以那个`target_fixed`填true就可以了。同时,后面的`filter`函数、`feasible`函数什么的也就不用写了。 </br>而这张技能卡在改判后是要成为新的判定牌的,不能直接扔到弃牌堆里面,所以`will_throw`要填false。 </br>至于`on_use`和`on_effect`函数,由于技能卡只是被打出来改判,本身并没有产生什么效果(改判的效果是触发技产生的)所以这两个里面什么内容都没有。 </br>于是技能卡的最终代码就是: ![](https://img.kancloud.cn/f1/58/f1580f5b283d30cf0ebaebad6a0697e5_399x174.png) </br>然后看视为技部分。 </br>其实属于视为技的部分我们已经写得差不多了。但是!还有一个非常重要的部分,那就是`enabled_at_response`函数了。我们应该是在系统要求我们使用引导技能时才打出技能卡改判的,也就是说,改判是要求我们用技能作为响应的。在这种情况下,当响应的类型是技能时,我们要在技能名称前面加上`@`,来表示与卡牌类型的区别。 </br>我们用来响应的技能是引导触发技(LuaYindao),所以引导视为技的最终代码为: ![](https://img.kancloud.cn/90/49/9049e09dac33fff03b93daa30ccac7b7_589x483.png) </br>最后就是关键的引导触发技了,也是整个改判过程的核心。在这里,我们要进行具体的改判行为了。 </br>要改判,先要获得原来的判定,好在data已经帮我们带来了储存有原先判定信息的JudgeStruct结构体。获得这些信息,使用的方法是sgs.QVariant为我们提供的`toJudge()`成员函数。 </br>接下来,我们会要求改判人员打出一张卡进行改判。 询问使用或打出一张卡牌,可以使用Room的一个成员函数`askForCard`。它的原型是: ``` askForCard(player, pattern, prompt, data, trigger_event=sgs.CardResponsed, to=NULL) ``` ![](https://img.kancloud.cn/2f/0e/2f0e6017d2130cf39363eb5e06c2daa2_1010x69.png) </br>其中: 1. `player`表示被系统询问的角色。 2. `pattern`表示要求响应的类型,这个类型和上面视为技中的响应类型是一样的。 3. `prompt`表示提示信息。 4. `data`表示询问时的环境数据。 5. `trigger_event`表示触发询问行为的事件,默认是sgs.CardResponsed(打出卡牌时)。 6. `to`表示询问来源处的角色,默认是NULL,也就是非角色发起的询问。 </br>当改判人员按我们的要求提供了一张用于改判的卡牌时,我们就可以用这张牌进行改判了。 </br>最终落实改判行为的,是Room的成员函数`retrial`,它的原型是: ``` retrial(card, player, judge, skill_name, exchange=false) ``` ![](https://img.kancloud.cn/7c/bf/7cbf561319ed660efb488fd564b8988d_692x47.png) </br>在这里: 1. `card`就是用来改判的卡牌了,也就是新的判定牌。 2. `player`是进行改判的角色。 3. `judge`是原先的判定结构体。 4. `skill_name`是改判所用的技能的名字。 5. `exchange`表示改判的方式,填true就是替换判定牌(像鬼道),填false就是代替判定牌(像鬼才)。默认是false,也就是代替的方式。 </br>最后,我们为了告诉太阳神三国杀我们已经更改了判定牌,返回一个false终止原判定牌的判定。 </br>从而引导触发技的最终代码应该是这样的: ![](https://img.kancloud.cn/c9/bb/c9bbd846962d3b872614386898798206_941x352.png) </br>到游戏中体验一下改判的厉害吧! ![](https://img.kancloud.cn/5a/5d/5a5dc56c283783f667cb4d28de785239_217x159.png) 哈哈哈哈……是不是很酷?