// 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); }
/// <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); }
// 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); } } }