💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
在太阳神三国杀中,制造一次伤害可比流失一次体力要更复杂了。首先我们应该先认识一下太阳神三国杀中专门负责管理伤害信息的一个结构体:DamageStruct。 </br>从源码(可在群文件里搜索 秒沉水 查找到源码)的src\core\structs.h中可以找到关于DamageStruct结构体的详细信息: ![](https://img.kancloud.cn/4b/a6/4ba661bd0f40a2640197a9950a7a2519_796x402.png) </br>可以看到DamageStruct包含如下一些成员变量: 1. `from`表示伤害来源(无来源伤害的值为nil)。 2. `to`表示伤害对象。 3. `card`表示造成伤害的卡牌(无卡牌伤害的值为nil)。 4. `damage`表示伤害的点数。 5. `nature`表示伤害的属性,有三个取值: sgs.DamageStruct_Normal:无属性伤害,或者说普通伤害; sgs.DamageStruct_Fire:火焰属性伤害,如业炎造成的伤害; sgs.DamageStruct_Thunder:雷电属性伤害,如雷击造成的伤害。 6. `chain`表示该伤害是否可以通过铁锁链环传导,填true表示可以传导,填false表示不传导,一般火焰伤害和雷电伤害都会默认为true。 7. `transfer`表示该伤害是否被转移,填true表示转移伤害,填false表示不转移。 8. `trigger_chain`表示该伤害造成后是否会触发铁锁链环,填true表示触发铁锁链环,填false表示不触发。 </br>在太阳神三国杀中,就是通过设置DamageStruct中各成员变量的不同取值,来描述各种各样的伤害的。 </br>所以要想造成伤害,就首先要定义一个这样的伤害结构体对象。方法是: local 对象名 = sgs.DamageStruct() </br>接下来就是按照我们的需要,填充各种各样的伤害信息。 </br>然而,我们已经写好了伤害信息了,怎样真正造成伤害呢? </br>这就要用到Room老兄的另一个成员函数了,它叫:`damage`。 </br>没错,我们没有看错,这个函数的名字也叫`damage`,和DamageStruct结构体中的那个成员变量`damage`的名字是一样的!不过含义肯定是不同的啦,所以千万小心,不要搞混了它们。 </br>其实区分起来也很容易。Room中的`damage`毕竟是个成员函数,调用的时候是用冒号":"的;而DamageStruct中的`damage`则是个成员变量,调用的时候用的可是小点"."呀。 </br>嗯,那么damage函数的原型是这样的: ``` damage(data) ``` ![](https://img.kancloud.cn/9f/dc/9fdcbde9be935008eb80af0dbbeb3143_327x27.png) </br>这里的data就是一个我们刚刚结识的DamageStruct的对象了。 </br>现在我们就把技能"自满"中的体力流失改成伤害: > 自满:锁定技:回合开始阶段,你须对自己造成的一点伤害。 </br>首先定义一个伤害结构体吧: * 这个伤害的来源是自己,所以from = player; * 而伤害目标也是自己,所以to = player; * 没有造成伤害的卡牌,所以就把card忽略掉好了; * 造成了一点伤害,所以damage = 1; * 没说伤害是什么属性的,所以就认为nature = sgs.DamageStruct_Normal; * 剩下的什么铁索连环啊、转移啊,统统忽略掉吧,我们用不到。 </br>然后,代码就是…… ![](https://img.kancloud.cn/9b/14/9b14f40fbbad5e28e83974a785d04b60_489x282.png) </br>放到游戏里面看看效果吧! </br>(孙悟空:敢说俺老孙自虐狂?吃俺一棒!编者:我闪~) ![](https://img.kancloud.cn/06/c1/06c111edbb06af48bebede1a0bd1a2ee_243x198.png) </br>搞定!(孙悟空:5555……)