赞 | 1 |
VIP | 0 |
好人卡 | 0 |
积分 | 3 |
经验 | 0 |
最后登录 | 2024-6-1 |
在线时间 | 13 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 318
- 在线时间
- 13 小时
- 注册时间
- 2023-3-7
- 帖子
- 8
|
3楼
楼主 |
发表于 2023-5-5 00:02:29
|
只看该作者
本帖最后由 贝尔沃夫 于 2023-5-5 00:46 编辑
Day3:joint penalty
《同生共死》的做法:
本实例需要:
Battle Engine Core
Buffs & States Core
两个插件实现。
只需要写一个状态:同生共死
在原地址下区分了物理,魔法,必中,所有伤害类型4种伤害传导的方式,这里只翻译“所有伤害类型”传导的部分。
<Custom React Effect>
// Check if the damage is positive.检查伤害值是否为正数
if (value > 0) {
// Get the living members of the same party. 若变量大于0,则检索同队内存活的成员。
var members = target.friendsUnit().aliveMembers();
// Make an empty group to list affected members. 制作为空集的受影响队伍列表。
var affected = [];
// We'll go through each member to check them. 开始循环一个一个检索队伍成员
for (var i = 0; i < members.length; ++i) {
// Getting the individual member. 检索到单独成员成为列表中受影响对象
var member = members;
// Does the member exist and is the member affected by state 91 (the Joint Penalty state)? 检索对象是否存活,并是否受到 91 (你的同生共死buff状态的对应ID)影响?
if (member && member.isStateAffected(你同生共死buff对应ID) ){
// If the member is affected, add it to the affected group. 若是,则将其添加入受影响队列清单上。
affected.push(member);
}
}
// Divide up the damage by how many members are affected. 均分并计算每个角色受到的伤害(若要做等额伤害可以删掉这一步或修改)
value = Math.ceil(value / affected.length);
// We'll go through each of the affected members now. 开始循环找寻受影响对象成员
for (var i = 0; i < affected.length; ++i) {
// Getting the individual affected member. 定义受影响对象
var member = affected;
// Ignore the effect if the member is the target of attack. 忽略受到攻击那一个目标,它本身不传导。
if (member !== target) {
// Let's play animation 1 on the affected member. 将动画效果1作为受到传到的动画效果。
member.startAnimation(1);
// The affected member takes damage. 使得受同生共死影响对象承受伤害
member.gainHp(-value);
// We'll have the affected member reveal a damage popup. 跳出受到伤害的数值。
member.startDamagePopup();
// Clear the results of the effect. 清除此效果造成的影响。
member.clearResult();
// Next, check to see if the member is dead. 接下来要检查对象是否死亡。
if (member.isDead()) {
// If the member is dead, we'll make it collapse. 若对象已经死亡,则清除上述进程残留效果。
member.performCollapse();
}
}
}
}
</Custom React Effect>
(找不到什么比较有名的类似梗了只能是让大家理解理解,赛尔号里那个是主动让对方血和自己平衡的,这个是队内或者敌方内部受到传导伤害的)
后续修改:
更新了一个群内讨论后简化版的状态代码写法:
这个写法简化了判断语句和获取对象以及造成影响的语句,极大简化了代码长度。
/是物理的
const isPhysical = this.isPhysical();
//是魔法的
const isMagical = this.isMagical();
//是普通攻击
const isAttack = this.isAttack();
//是伤害
const isDamage = this.isDamage();
//检查动作是否伤害
if (isDamage) {
//获取目标队伍中存活成员 过滤 返回 成员有指定状态 且 不是本次行动的目标
const affectMembers = target.friendsUnit().aliveMembers().filter((member) => {return member.isStateAffected(你同生共死buff对应ID) && member != target});
//受影响的成员 对每一个 成员
affectMembers.forEach((member) => {
//播放受伤害动画
member.startAnimation(1);
//减少生命值
member.gainHp( -1 * Math.ceil(value / affectMembers.length));
//播放伤害弹窗
member.startDamagePopup();
//清除动作结果
member.clearResult();
//如果成员死亡
if (member.isDead()) {
//清除成员
member.performCollapse();
}
})
} |
|