Exemplo n.º 1
0
        // 后减
        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;
        }
Exemplo n.º 2
0
        // 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;
        }