启用了判定,就不得不提防那些能改判的人。目前可以直接更改判定的技能有司马懿的鬼才、张角的鬼道、王异的贞烈以及诸葛瑾的缓释四个。如果我们也掌握了改判技能,那将足以在判定领域对抗这些人对我们的影响。
</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)
哈哈哈哈……是不是很酷?
- 编写说明
- 第一章 创建一个新武将
- 1.1 开发环境准备
- 1.2 创建一个新的武将扩展包
- 1.3 创建我们的新武将
- 第二章 添加技能
- 第三章 武将美化
- 3.1 美化环境准备
- 3.2 添加武将卡牌
- 3.3 添加武将头像
- 3.4 添加武将标签
- 第四章 创建一个新技能
- 第五章 添加音效
- 5.1 打造自己的声音工作室
- 5.2 添加技能使用音效
- 5.3 添加武将阵亡音效
- 第六章 添加提示信息
- 6.1 添加代码注释
- 6.2 显示提示信息
- 6.3 启动全屏信息特效
- 第七章 武将变更
- 第八章 启用AI
- 8.1 创建我们的AI文件
- 8.2 真实的AI
- 8.3 动手写AI
- 第九章 修改距离
- 第十章 技能管理
- 10.1 技能判定
- 10.2 创建技能
- 10.3 获得技能
- 10.4 失去技能
- 第十一章 修改手牌上限
- 第十二章 体力变更
- 12.1 流失体力
- 12.2 制造伤害
- 13.3 恢复体力
- 12.4 流失体力上限
- 12.5 增长体力上限
- 第十三章 游戏进程的变更
- 13.1 创建阶段触发技能
- 13.2 跳过回合阶段
- 13.3 插入一个额外的回合阶段
- 13.4 启用翻面
- 13.5 获得一个额外的回合
- 第十四章 启用标记(Mark)
- 14.1 添加标记
- 14.2 获得标记
- 14.3 失去标记
- 14.4 查看标记数目
- 第十五章 卡牌转换
- 15.1 主动牌的转换
- 15.2 被动牌的转换
- 第十六章 卡牌传递
- 16.1 创建摸牌技能
- 16.2 游戏中摸牌
- 16.3 游戏中弃牌
- 16.4 从其他武将处获得牌
- 16.5 判断目标区域是否有牌
- 16.6 移动场上的牌
- 第十七章 用牌实现技能效果
- 第十八章 启用标志(Flag)
- 第十九章 涉足判定领域
- 19.1 启用判定
- 19.2 更改判定
- 19.3 获得判定牌
- 第二十章 私家牌堆
- 20.1 向牌堆中添加牌
- 20.2 查看牌堆中牌的数量
- 20.3 从牌堆中移除牌
- 第二十一章 牌的锁定
- 第二十二章 免疫牌
- 第二十三章 让房间提供牌
- 23.1 提供主动牌
- 23.2 提供被动牌
- 第二十四章 启用标签(Tag)
- 第二十五章 濒死结算
- 第二十六章 交换座次
- 第二十七章 创建主公技
- 27.1 创建由主公发起的主公技
- 27.2 创建由他人发起的主公技
- 第二十八章 强力技能
- 28.1 直接死亡
- 28.2 改换身份
- 28.3 原地复活
- 28.4 立即胜利