// 后减 public void castDecSkill(float rate, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } // 减血 CMsgSkillRecovery msg = new CMsgSkillRecovery(this); msg.startAtt = owner.curAtt; war.addMsgToRecorder(msg); float finalAtt = owner.curAtt * (1 - rate * Consts.oneHundred); if (finalAtt < 1) { finalAtt = 1; } // 减血 owner.setCurAtt(finalAtt); msg.finalAtt = MathHelper.MidpointRounding(finalAtt); msg.suffer = owner.pveId; }
// TODO: 斩杀 private void castCutSkill(float damage, float rate, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } BT_Monster enemy = war.enemy(owner); CMsgSkillCut msg = new CMsgSkillCut(this, enemy.pveId); msg.startAtt = MathHelper.MidpointRounding(damage); war.addMsgToRecorder(msg); int beforeAtt = enemy.curAtt; float cutAtt = enemy.initAtt * rate * Consts.oneHundred; enemy.sufferAttack(new BT_Hurt() { damageVal = damage, hurtType = BT_Hurt_Type.HURT_SKILL, }, owner); if (enemy.alive && enemy.curAtt < cutAtt) { enemy.setCurAtt(0); } msg.finalAtt = enemy.curAtt - beforeAtt; msg.curAtt = enemy.curAtt; }