在太阳神三国杀中,制造一次伤害可比流失一次体力要更复杂了。首先我们应该先认识一下太阳神三国杀中专门负责管理伤害信息的一个结构体: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……)
- 编写说明
- 第一章 创建一个新武将
- 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 立即胜利