Beispiel #1
0
        /// <summary>
        /// 普通攻击
        /// </summary>
        /// <param name="room"></param>
        /// <param name="skillId"></param>
        /// <param name="from"></param>
        /// <param name="to"></param>
        /// <param name="effect"></param>
        /// <returns></returns>
        public static DtoDamage[] NormalAttack(RoomBase <MobaPeer> room, int skillId, DtoMinion from, DtoMinion[] to, EffectModel effect)
        {
            DtoDamage[] damages = new DtoDamage[to.Length];
            int         attack  = from.Attack;

            // 遍历被攻击者
            for (int i = 0; i < to.Length; i++)
            {
                DtoMinion item = to[i];
                if (item == null)
                {
                    continue;
                }

                int defense = item.Defense;
                int damage  = attack - defense;

                // 减少生命值
                item.CurHp -= damage;
                // 死亡处理
                if (item.CurHp <= 0)
                {
                    ((BattleRoom)room).UnitLost(from, item);
                }

                damages[i] = new DtoDamage(from.Id, item.Id, damage, item.CurHp <= 0);
            }
            return(damages);
        }
Beispiel #2
0
    /// <summary>
    ///  处理计算伤害的响应
    /// </summary>
    /// <param name="response"></param>
    public override void OnOperationResponse(OperationResponse response)
    {
        DtoDamage[] damages = JsonMapper.ToObject <DtoDamage[]>(response[(byte)ParameterCode.DtoDamages] as string);
        DtoDamage   item    = null;

        for (int i = 0; i < damages.Length; i++)
        {
            item = damages[i];
            if (item == null)
            {
                continue;
            }

            int toId = item.ToId;
            // 获取目标控制器
            AIBaseCtrl toCtrl = BattleData.Instance.CtrlDict.ExTryGet(toId);
            if (toCtrl == null)
            {
                return;
            }

            toCtrl.Model.CurHp -= item.Damage;
            toCtrl.OnHpChange();

            // 显示伤害数值
            BattlePanel panel = UIManager.Instance.GetPanel(UIPanelType.Battle) as BattlePanel;
            panel.FloatDamage(item.Damage, toCtrl.transform);

            // 如果被攻击的是自己
            if (toId == GameData.HeroData.Id)
            {
                GameData.HeroData = toCtrl.Model as DtoHero;
                // 更新ui界面
                panel.UpdateView();
                if (item.IsDead)
                {
                    // 开始复活倒计时
                    (UIManager.Instance.GetPanel(UIPanelType.Battle) as BattlePanel).StartRebirthCD();
                    // 遮罩
                    UIManager.Instance.ShopPanel(UIPanelType.Mask);
                    toCtrl.DeathResponse();
                }
            }
            else
            {
                // 如果目标死亡了
                if (item.IsDead)
                {
                    toCtrl.DeathResponse();
                }
            }
        }
    }