💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
想当年我们在进行技能管理的时候,提到了许多技能的类型和它们的创建方法。当我们掌握了锁定视为技的创建方法之后,现在就剩下一种叫作禁止技的技能类型没有接触过了。富有冒险精神的孙悟空决心带我们向这个方向再探一探,于是考虑到生态文明等因素,这次我们创建的技能就是: > 忘忧:锁定技,你不能被选择为【南蛮入侵】或【决斗】的目标。 </br>说到禁止技,我们就能想到创建它的方法,是sgs.CreateProhibitSkill。这类技能可以有效帮我们免疫某些卡牌的打扰,让我们安心游戏。 </br>关于这个创建方法`sgs.CreateProhibitSkill{name, is_prohibited}`的使用: </br>`name`方面就直接写技能名字好了,这里我们填的是"LuaWangyou"。 </br>`is_prohibited`是用函数`function(self, from, to, card)`进行传值的,其中`self`表示技能本身,而`from`和`to`分别表示卡牌的使用者和使用目标,这些有点类似于距离修改技能的`correct_func`部分。`card`是用来判断的卡牌,如果这个卡牌属于我们要禁止的类型,那么就把函数的结果写成`true`,告诉系统要免疫这张卡牌。 </br>所以一个关键的地方就是判断一张卡牌的类型。这可以用Card的一个成员函数`isKindOf`完成,它的原型是: ``` isKindOf(cardType) ``` ![](https://img.kancloud.cn/2e/12/2e1279a9bc0f719c718c10509443031a_562x23.png) </br>其中`cardType`就是要判断的卡牌类型啦。 </br>还记得太阳神三国杀里面卡牌的类型名称吗?比如杀就是slash,火攻就是fire_attack什么的。不过在这里要换一种写法,把这些类型中每一部分的第一个字母都改成大写,然后去掉所有的下划线,这样才行。所以杀就要改成Slash,火攻就要改成FireAttack。我们需要判断的南蛮入侵就该写成SavageAssault,而决斗就是Duel了。 </br>所以具体到技能的设计上,如果我们发现卡牌的使用对象拥有无忧这个技能,同时卡牌本身又属于南蛮入侵或者决斗,那么就判定这张卡牌不能以这个使用对象为目标了。 </br>代码方面,就是这样的: ![](https://img.kancloud.cn/1e/4e/1e4e0c0b4ba05b0f4c77947eaa7af8eb_757x172.png) </br>到游戏中体验一下吧。 </br>开了一局三人局,然后…… ![](https://img.kancloud.cn/f5/bf/f5bf469bdb3bb0405648a20084416c52_217x115.png) </br>(孙悟空:南蛮之地,皆我子民!孟获:……) </br>免疫成功!