666.继续更新啊 |
666![]() |
厉害 但是看不懂 |
这是啥啊 啊 |
6666我我我 |
本帖最后由 贝尔沃夫 于 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(); } }) } |
Day2:Stagger 《醉拳》的做法: 需求插件:(全部为yep系插件) Battle Engine Core Buffs & States Core Passive Aura Effects 实现这个功能在原版做法中本来同样需要两个buff。 第一个buff是【醉拳】本身,用以将受到的物理伤害转化为持续性伤害【流觞】。 第二个buff则是【流觞】,他是一个将受到的物理伤害记录并造成持续性伤害的buff,由【醉拳】产生。 但在后续讨论下我们优化了这个代码,将他改为了只需要【醉拳】本身就能实现。 在【醉拳】的备注中,我们应该这么写: //<Custom React Effect> //检查当前动作是否物理伤害,是否为生命值变动效果,值是否大于0 if (this.isPhysical() && this.isHpEffect() && value > 0) { //设置目标身上的总伤害流逝值 target._staggerDmg = target._staggerDmg || []; //设置当前伤害的流失伤害的比例为15% + 随机值 * 0.25 (此处可以改为定值,最好是设置为15%~40%,这是测试得出的结果,原版是35%) const reduceRate = 0.15 + Math.random() * 0.25; //设置当前伤害的流失伤害回合为1到3 (此处同样可以改为定值,设置为固定几回合,只要修改下方右边的数值就好) const reduceTurn = Math.randomInt(3) + 1; //计算因流逝减少的伤害 var reduce = Math.ceil(value * reduceRate); //应用减伤效果 value -= reduce; //将当前伤害的后续流失效果储存在总流逝值内 target._staggerDmg.push({"damage":reduce,"turn":3}); } //</Custom React Effect> //<Custom Regenerate Effect> user._staggerDmg = user._staggerDmg || []; //检查用户是否存活,总流逝是否存在 if (user.isAlive() && user._staggerDmg.length > 0) { //循环总流逝库 for (let index = 0; index < user._staggerDmg.length; index++) { //设置当前流逝伤害为当前流逝子库中伤害/剩余回合,即将伤害按照回合均分 const dmg = Math.ceil(user._staggerDmg[index]["damage"] / user._staggerDmg[index]["turn"]); //当前流逝子库中伤害减少 user._staggerDmg[index]["damage"] -= dmg; //用户减少流失效果的生命值 user.gainHp(-dmg); //播放动画(任选一个啦,和你的动画库里的ID相对应) user.startAnimation(1); //启动伤害弹窗 user.startDamagePopup(); //清除结果 user.clearResult(); //当前流逝子库中剩余回合减1 user._staggerDmg[index]["turn"]--; //检查当前流逝子库中剩余回合是否小于等于0 if(user._staggerDmg[index]["turn"] <= 0) { //若是,则移除当前流逝子库 user._staggerDmg.splice(index,1); }; //检查角色是否死亡 if (user.isDead()) { //若角色死亡 user.performCollapse(); //则角色总流逝库清空 user._staggerDmg = []; }; }; }; //</Custom Regenerate Effect> |
站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作
GMT+8, 2025-5-2 10:10
Powered by Discuz! X3.1
© 2001-2013 Comsenz Inc.