Example #1
0
        // TODO: 变为全属性 (ok)
        public bool castPropertyChangeToAll(MonsterAttribute curPro)
        {
            BT_Logical war = owner._war;

            bool change = false;

            if (opObj.ID == 29 && canCastSkillOpDefault())
            {
                if (curPro != MonsterAttribute.ALL)
                {
                    change = true;

                    BT_MonsterTeam selfTeam = owner.ownerTeam;
                    if (selfTeam.getTeamName == "Att")
                    {
                        war._AoYiCastCount_Att = 1;
                    }
                    else
                    {
                        war._AoYiCastCount_Def = 1;
                    }

                    CMsgSkillCast msg = new CMsgSkillCast(this, CMsgSkillCast.categoryPropertyChangeToAll);
                    war.addMsgToRecorder(msg);
                }
                else
                {
                    if (real == 1)
                    {
                        war.resetAoYi(this, owner.ownerTeam);
                    }
                }
            }
            return(change);
        }
Example #2
0
        /// <summary>
        /// 怒气/普通技 能否释放. 普通技和怒气技是一种类型的分类,而死亡技则是另一种分类
        /// </summary>
        /// <returns><c>true</c>, if cast skill was caned, <c>false</c> otherwise.</returns>
        /// <param name="skType">Sk type.</param>
        public List <BT_Skill> canCastSkill(int skType)
        {
            List <BT_Skill> skillArr = skType == SkillOpData.Anger_Skill ? _askillArr : _nskillArr;

            if (skType == SkillOpData.Death_Closed_Skill)
            {
                //如果是死亡技,则需要考虑他可能是普通技能
                skillArr.AddRange(_askillArr);
            }

            List <BT_Skill> castArr = new List <BT_Skill>();

            if (skillArr != null)
            {
                foreach (BT_Skill sk in skillArr)
                {
                    if (sk.isSkillByType(skType) && sk.canCast() && canCastSkillAcc2BuffOrDebuff(sk, skType))
                    {
                        //奥义技能,如果是奥义技能则考虑当前的奥义是否
                        if (sk.real == 1)
                        {
                            bool canAoYICast = false;
                            if (_selfTeam.getTeamName == "Att")
                            {
                                if (_war._AoYiCastCount_Att == 0)
                                {
                                    _war._AoYiCastCount_Att = 1;
                                    canAoYICast             = true;
                                }
                            }
                            else
                            {
                                if (_war._AoYiCastCount_Def == 0)
                                {
                                    _war._AoYiCastCount_Def = 1;
                                    canAoYICast             = true;
                                }
                            }

                            if (canAoYICast)
                            {
                                castArr.Add(sk);
                            }
                            else
                            {
                                //如果这个奥义不适用,则标注为没释放过
                                _war.resetAoYi(sk, _selfTeam);
                            }
                        }
                        else
                        {
                            castArr.Add(sk);
                        }
                    }
                }
            }

            return(castArr);
        }
Example #3
0
        // TODO: 复活技能.
        // type: 0--随机复活 1--从前向后 2--从后到前
        private void castReviveSkill(int num, int type, int angryCost = 0)
        {
            BT_MonsterTeam selfTeam = owner.ownerTeam;

            // 扣怒气...
            if (angryCost > 0)
            {
                selfTeam.costAngry(angryCost);
            }

            List <BT_Monster> dieArr      = new List <BT_Monster>();
            List <BT_Monster> sortDieArry = new List <BT_Monster>();

            foreach (BT_Monster pet in selfTeam._team)
            {
                if (pet == owner)
                {
                    break;
                }
                if (!pet.alive)
                {
                    dieArr.Add(pet);
                }
            }

            int tataoDieCount = dieArr.Count;

            if (tataoDieCount >= 1)
            {
                if (0 == type)
                {
                    BT_WarUtils.Shuffle(dieArr);
                    type = 1;
                }

                int minCount = tataoDieCount > num ? num : tataoDieCount;

                for (int j = 0; j < minCount; j++)
                {
                    sortDieArry.Add(dieArr [j]);
                }

                sortDieArry.Sort(my_sort);

                BT_Logical      war = owner._war;
                CMsgSkillRevive msg = new CMsgSkillRevive(this);
                war.addMsgToRecorder(msg);
                msg.reviveArr = new int[minCount];

                for (int i = 0; i < minCount; i++)
                {
                    BT_Monster pet = type == 1 ? array_shift(sortDieArry) : array_pop(sortDieArry);
                    if (pet != null)
                    {
                        pet.revive();
                        selfTeam._team.Add(pet);
                        msg.reviveArr [i] = pet.pveId;
                    }
                }
                selfTeam.teamLenChanged();
            }
            else
            {
                //如果没有人死亡,则奥义的技能就算没触发过
                if (real == 1)
                {
                    BT_Logical war = owner._war;
                    war.resetAoYi(this, selfTeam);
                }
            }
        }