// 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); }
// TODO: 夺取差值 private void castSkillAttDelta(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); if (owner.curAtt >= enemy.curAtt) { return; } float attDistance = Math.Abs(enemy.curAtt - owner.curAtt); attDistance = attDistance * rate * Consts.oneHundred; attDistance = enemy.sufferAttack(new BT_Hurt() { hurtType = BT_Hurt_Type.HURT_SKILL, damageVal = attDistance, }, owner); CMsgSkillAttDelta msg = new CMsgSkillAttDelta(this, MathHelper.MidpointRounding(attDistance)); war.addMsgToRecorder(msg); msg.beforeAtt = owner.curAtt; owner.curAttAdd(attDistance); msg.curAtt = owner.curAtt; msg.enemyAtt = enemy.curAtt; }
// TODO: 伤害加倍 private void castHurtUpSkill(float rate, int round, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } short bufType = CMsgHeader.BUFF_DEBUFF_HURTUP; int bufRound = round; CMsgSkillBuffDebuff msg = new CMsgSkillBuffDebuff(this); msg.type = bufType; msg.round = bufRound; war.addMsgToRecorder(msg); BT_Monster enemy = war.enemy(owner); BT_BuffOrDebuff debuf = new BT_BuffOrDebuff() { type = bufType, round = bufRound, rate = rate, }; enemy.addBuffOrDebuff(debuf, false); msg.sufferArr = new int[] { enemy.pveId }; }
// TODO: 金钟罩 private void castGoldShieldSkill(int round = 1, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } short bufType = CMsgHeader.BUFF_DEBUFF_GOLDDEFENSE; int bufRound = round; CMsgSkillBuffDebuff msg = new CMsgSkillBuffDebuff(this); msg.type = bufType; msg.round = bufRound; war.addMsgToRecorder(msg); BT_BuffOrDebuff buf = new BT_BuffOrDebuff() { type = bufType, round = bufRound, }; owner.addBuffOrDebuff(buf); msg.sufferArr = new int[] { owner.pveId }; }
//设定敌人的关系 public void setupRelation(BT_MonsterTeam enemyTeam) { foreach (BT_Monster pet in _team) { pet.setEnmeyTeam(enemyTeam); } }
// 后减 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: 护盾 0---固定值 1---百分比 private void castShieldSkill(float addRate, int type = 0, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } float suckDmg = addRate; if (1 == type) { suckDmg = owner.curAtt * addRate * Consts.oneHundred; } short bufType = CMsgHeader.BUFF_DEBUFF_DEFENSE; CMsgSkillBuffDebuff msg = new CMsgSkillBuffDebuff(this); msg.type = bufType; msg.arg1 = MathHelper.MidpointRounding(suckDmg); war.addMsgToRecorder(msg); BT_BuffOrDebuff buf = new BT_BuffOrDebuff() { type = bufType, suckDmg = MathHelper.MidpointRounding(suckDmg), }; owner.addBuffOrDebuff(buf); msg.sufferArr = new int[] { owner.pveId }; }
// TODO: 自爆 private void castBombSkill(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); owner.setCurAtt(0, true); float damage = enemy.curAtt * rate * Consts.oneHundred; CMsgSkillBomb msg = new CMsgSkillBomb(this, enemy.pveId, MathHelper.MidpointRounding(damage)); war.addMsgToRecorder(msg); int finalDamage = enemy.sufferAttack(new BT_Hurt() { hurtType = BT_Hurt_Type.HURT_SKILL, damageVal = damage, }, owner); msg.finalAtt = finalDamage; msg.enemyCurAtt = enemy.curAtt; msg.selfCurAtt = owner.curAtt; }
// 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; }
// TODO: 吸血技能. // 吸取敌人攻击力,转换其中一部分变成自己的攻击力 // /num 吸取敌人血的百分比 // /type 0:固定值 1:比例 // /convert 吸取血之后加到自己身上的百分比 // /angryCost 怒气 // /selfInc 0:convert吸取血之后加到自己身上的百分比 1:自身攻击力增加convert private void castSuckSkill(float num, int type, float convert, int angryCost = 0, int selfInc = 0) { BT_Logical war = owner._war; BT_Monster enemy = war.enemy(owner); BT_MonsterTeam selfTeam = owner.ownerTeam; if (selfTeam.curAngry >= angryCost) { if (enemy.alive) { float suck = num; if (type == 1) { suck = num * Consts.oneHundred * enemy.curAtt; } if (suck > enemy.curAtt) { suck = enemy.curAtt; } if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } CMsgSkillSuckAttack msg = new CMsgSkillSuckAttack(this, enemy.pveId, MathHelper.MidpointRounding(suck)); war.addMsgToRecorder(msg); // 减敌方血,加给自己. BT_Hurt hurt = new BT_Hurt() { damageVal = suck, hurtType = BT_Hurt_Type.HURT_SKILL, }; int finalSuck = enemy.sufferAttack(hurt, owner); float addAtt = 0f; if (selfInc == 0) { addAtt = convert * Consts.oneHundred * finalSuck; } else { addAtt = convert * Consts.oneHundred * owner.curAtt; } owner.curAttAdd(addAtt); msg.convertAttack = MathHelper.MidpointRounding(addAtt); msg.finalSuckAtt = finalSuck; msg.sufferCurAtt = enemy.curAtt; msg.casterCurAtt = owner.curAtt; msg.curAngry = selfTeam.curAngry; } } }
// 加气的技能-目前是只有神龙奥义在使用 private void AddAngryCount(int num) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; selfTeam.addAngry(num); CMsgSkillCast msg = new CMsgSkillCast(this, CMsgSkillCast.categoryAddAngryPoint); msg.curAngry = selfTeam.curAngry; war.addMsgToRecorder(msg); }
/// <summary> /// 把消息加入分步模式的动作列表里 /// </summary> private void addMsgToStepRecorder(CMsgHeader msg) { if (bStepMode) { if (msg is CMsgSkillCast) { CMsgSkillCast cast = msg as CMsgSkillCast; BT_MonsterTeam team = teamFromPveId(cast.caster); cast.curAngry = team.curAngry; } StepRecorder.Add(msg); } }
// TODO: 变更当前攻击力技能 // 增加 自己/对手 当前战斗力X% type:0---百分比 1---固定值 private void castChangeAttackSkill(bool beOwner, float addRate, int type = 0, int angryCost = 0) { BT_Logical war = owner._war; BT_Monster enemy = war.enemy(owner); BT_Monster target = beOwner ? owner : enemy; if (target.alive) { if (angryCost > 0) // 扣怒气... { BT_MonsterTeam selfTeam = owner.ownerTeam; selfTeam.costAngry(angryCost); } CMsgSkillChangeAttack msg = new CMsgSkillChangeAttack(this, target.pveId); int beforeAtt = target.curAtt; if (0 == type) { if (beOwner) { target.curAttEnhance(1 + addRate * 0.01f); } else { int hp = target.curAtt; float damage = hp * addRate * 0.01f; damage = returnDamage(owner, enemy, damage); if (false == target.canSufferSkillDamage()) { damage = 0; } target.curAttAdd(-damage); // target.curAttEnhance ( 1 - addRate / 100 ); } } else { target.curAttAdd(addRate); } int afterAtt = target.curAtt; msg.curAtt = afterAtt; msg.addAtt = afterAtt - beforeAtt; war.addMsgToRecorder(msg); } }
//重置奥义 public void resetAoYi(BT_Skill sk, BT_MonsterTeam Team) { int AoYiID = sk.id; BattleAoYi workAoYi = null; if (Team.getTeamName == "Att") { workAoYi = this._attAoYi; } else { workAoYi = this._defAoYi; } //设置这个奥义未使用过 workAoYi.resetCurAoYi(AoYiID); }
/// /// ---- 关于技能的统计,仅仅针对 攻击方 ---- /// //设定普通技能释放次数 public void setTotalNormalSkill(BT_MonsterTeam Team, BT_Skill skill) { if (Team != null && skill != null) { string whichTeam = Team.getTeamName; if (whichTeam == "Att") { //既不是怒气技也不是奥义技 if (skill.opObj.type != SkillOpData.Anger_Skill && skill.real != 1) { statictis._totalNoramSkill++; statictis._NorSkillArr.Add(skill.id); } } } }
// TODO: 怒气回复 private void castAngryRecoverSkill(int addAngry, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } selfTeam.costAngry(-addAngry); CMsgSkillAngryExchange msg = new CMsgSkillAngryExchange(this); war.addMsgToRecorder(msg); msg.costAngry = angryCost; msg.addAngry = addAngry; }
// TODO: 自损技能 // type 0:固定值 1:比例 private void castChangeAttBothSKill(int snum, int stype, int senum, int etype, int angryCost = 0) { BT_Logical war = owner._war; BT_Monster enemy = war.enemy(owner); if (enemy.alive) { if (angryCost > 0) // 扣怒气... { BT_MonsterTeam selfTeam = owner.ownerTeam; selfTeam.costAngry(angryCost); } float sAdd = snum; if (stype == 1) { sAdd = snum * Consts.oneHundred * owner.curAtt; } float eAdd = senum; if (etype == 1) { eAdd = senum * Consts.oneHundred * enemy.curAtt; } sAdd = -sAdd; eAdd = -eAdd; CMsgSkillChangeCurAttackBoth msg = new CMsgSkillChangeCurAttackBoth(this); war.addMsgToRecorder(msg); owner.curAttAdd(sAdd); if (enemy.canSufferSkillDamage()) { enemy.curAttAdd(eAdd); } msg.selfAttChange = MathHelper.MidpointRounding(sAdd); msg.enemyAttChange = MathHelper.MidpointRounding(eAdd); msg.selfCurAtt = owner.curAtt; msg.enemyCurAtt = enemy.curAtt; } }
// TODO: 以下ok // TODO:群体增益 // 增加自己后rate名队友num%的初始战斗力。 0--固定值 1--百分比. private void castChangeAttackAllSkill(float addRate, int sufferCnt, bool beOwnerTeam = true, int type = 1, int angryCost = 0) { BT_Logical war = owner._war; CMsgSkillChangeCurAttackAll msg = new CMsgSkillChangeCurAttackAll(this); war.addMsgToRecorder(msg); BT_MonsterTeam selfTeam = owner.ownerTeam; BT_MonsterTeam enemyTeam = owner.vsTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } BT_MonsterTeam armTeam = beOwnerTeam ? selfTeam : enemyTeam; int teamLen = armTeam._team.Count; int sufferNum = 0; List <CMsgSkillChangeAttack> tmp = new List <CMsgSkillChangeAttack>(); for (int i = armTeam.curPetTeamIndex + 1; i < teamLen && sufferNum < sufferCnt; i++, sufferNum++) { BT_Monster enemy = armTeam._team [i]; float addAtt = addRate; if (1 == type) { addAtt = enemy.initAtt * addRate * Consts.oneHundred; } CMsgSkillChangeAttack msgtmp = new CMsgSkillChangeAttack(this, enemy.pveId); int beforeAtt = enemy.curAtt; enemy.curAttAdd(addAtt); int afterAtt = enemy.curAtt; msgtmp.curAtt = afterAtt; msgtmp.addAtt = afterAtt - beforeAtt; tmp.Add(msgtmp); } msg.sufferArr = tmp.ToArray(); }
public void addMsgToRecorder(CMsgHeader msg) { //可能要加入分步列表里 addMsgToStepRecorder(msg); if (msg is CMsgSkillCast) { CMsgSkillCast cast = msg as CMsgSkillCast; BT_MonsterTeam team = teamFromPveId(cast.caster); cast.curAngry = team.curAngry; } _warRecorder.Add(msg); if (msg is CMsgWarEnd) { CMsgWarEnd end = msg as CMsgWarEnd; WarIsOver = end.winner == "Att" ? 1 : 0; } }
public BT_Monster(Battle_Monster value, int pveIndex, BT_Logical war, BT_MonsterTeam selfTeam, BT_MonsterTeam enemyTeam) { //初始化 技能 _nSkill = new List <SkillObj>(); _aSkill = new List <SkillObj>(); _nskillArr = new List <BT_Skill>(); _askillArr = new List <BT_Skill>(); //初始化 敌人ID _killEnemyId = new List <int>(); //初始化 Buff & Debuff _buffArr = new Dictionary <short, BT_BuffOrDebuff>(); _debuffArr = new Dictionary <short, BT_BuffOrDebuff>(); //初始化底层依赖 skillMgr = Core.Data.skillManager; this._id = value.petId; this._num = value.petNum; this._property = (MonsterAttribute)value.property; _initProperty = _property; //记住默认初始的属性,部分宠物可能会属性转换 this._level = value.lvl; this._finalAtt = value.finalAtt; _killCount = 0; //缘配齐 _fullFated = value.fullfated; _fateNuqi = value.nuqi; float skillup = value.skillUp; // 技能概率的提升 this._isBoss = value.isBoss; // 是否是boss //取出技能1,2,3 //初始化宠物的技能信息 parseSkill(value, skillup); _pveIndex = pveIndex; _war = war; _selfTeam = selfTeam; _enemyTeam = enemyTeam; this.setCurAtt(_finalAtt); }
//能否释放奥义技能 public bool canCastAoYi(BT_Skill sk, BT_MonsterTeam Team) { int AoYiID = sk.id; BattleAoYi workAoYi = null; if (Team.getTeamName == "Att") { workAoYi = this._attAoYi; } else { workAoYi = this._defAoYi; } bool can = false; ConsoleEx.Write(" AY id = " + AoYiID + " name = " + Core.Data.dragonManager.getAoYiData(AoYiID).name, "yellow"); if (workAoYi.isFirstAoYi(AoYiID)) { if (workAoYi.curAoYiCast(AoYiID) == false) { can = true; } } else { //前一个是否已经使用过 bool pre = workAoYi.prevAoYiCast(AoYiID); bool cur = workAoYi.curAoYiCast(AoYiID); //wxl if (/*pre == true &&*/ cur == false) { can = true; } } return(can); }
// TODO: 假死 private void castDeathSkill(float rate, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } CMsgSkillDeath msg = new CMsgSkillDeath(this); msg.suffer = owner.pveId; war.addMsgToRecorder(msg); float leftAtt = owner.initAtt * rate * Consts.oneHundred; owner.setCurAtt(leftAtt); owner.setAlive(); msg.curAtt = owner.curAtt; }
// TODO: 避免死亡,有几率回复生命 private void castAngryAvoidDie(float rate, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (selfTeam.curAngry >= angryCost) { if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } CMsgSkillReviveSelf msg = new CMsgSkillReviveSelf(this); msg.suffer = owner.pveId; msg.startAtt = owner.curAtt; war.addMsgToRecorder(msg); float addAtt = owner.initAtt * rate * Consts.oneHundred; owner.curAttAdd(addAtt); msg.finalAtt = owner.curAtt; } }
// TODO: 自爆技能 // type 0:固定值 1:自身初始战斗比例 2:对方当前战斗比例 private void castBlastSkill(float damage, int type, int sufferCnt = 1, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam enemyTeam = owner.vsTeam; CMsgSkillBlast msg = new CMsgSkillBlast(this); war.addMsgToRecorder(msg); if (1 == type) { damage = owner.initAtt * damage * Consts.oneHundred; } int teamLen = enemyTeam._team.Count; int sufferNum = 0; List <CMsgSkillAttack> temp = new List <CMsgSkillAttack>(); for (int i = enemyTeam.curPetTeamIndex; i < teamLen && sufferNum < sufferCnt; i++, sufferNum++) { BT_Monster enemy = enemyTeam._team [i]; if (2 == type) { if (war.fightDiff != 0) { damage = war.fightDiff * damage * Consts.oneHundred; } else { damage = enemy.curAtt * damage * Consts.oneHundred; } } CMsgSkillAttack attackMsg = makeAttackMsg(enemy, damage); temp.Add(attackMsg); } msg.sufferArr = temp.ToArray(); }
// TODO: 封印实现 ---效果呆实现... [here] private void castSealSkill(int sealCnt, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; BT_MonsterTeam enemyTeam = owner.vsTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } short bufType = CMsgHeader.BUFF_DEBUFF_SEAL; int bufRound = 1; CMsgSkillBuffDebuff msg = new CMsgSkillBuffDebuff(this); msg.type = bufType; msg.round = bufRound; war.addMsgToRecorder(msg); int teamLen = enemyTeam._team.Count; int sufferNum = 0; List <int> sufferList = new List <int>(); for (int i = enemyTeam.curPetTeamIndex; i < teamLen && sufferNum < sealCnt; i++, sufferNum++) { BT_Monster enemy = enemyTeam._team [i]; BT_BuffOrDebuff buf = new BT_BuffOrDebuff() { type = bufType, round = bufRound, }; enemy.addBuffOrDebuff(buf, false); sufferList.Add(enemy.pveId); } msg.sufferArr = sufferList.ToArray(); }
// TODO: 连击技能... // 对对方造成damage的伤害 并且可能有额外几次的伤害... private void castAttackComboSkill(float damage, int extra, int angryCost = 0) { BT_Logical war = owner._war; BT_Monster enemy = war.enemy(owner); if (enemy.alive) { CMsgSkillAttackCombo msg = new CMsgSkillAttackCombo(this); BT_MonsterTeam selfTeam = owner.ownerTeam; // 扣怒气... if (angryCost > 0) { selfTeam.costAngry(angryCost); } war.addMsgToRecorder(msg); // 返回当前的怒气值 msg.curAngry = selfTeam.curAngry; msg.attackArr = null; List <CMsgSkillAttack> realArr = new List <CMsgSkillAttack>(); for (int i = 0; i < extra + 1; i++) { if (enemy.alive) { CMsgSkillAttack attackMsg = makeAttackMsg(enemy, damage); realArr.Add(attackMsg); } } if (realArr.Count > 0) { msg.attackArr = realArr.ToArray(); } } }
// 先增后减 private void castIncDecSkill(float rate, int num, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } short bufType = CMsgHeader.BUFF_DEBUFF_REDUCE_HP; int bufRound = 2; // 加血 CMsgSkillRecovery msg = new CMsgSkillRecovery(this); msg.startAtt = owner.curAtt; war.addMsgToRecorder(msg); BT_BuffOrDebuff buf = new BT_BuffOrDebuff() { type = bufType, round = bufRound, skill = this, }; owner.addBuffOrDebuff(buf); float finalAtt = owner.curAtt * (1 + rate * Consts.oneHundred); owner.setCurAtt(finalAtt); msg.curAngry = selfTeam.curAngry; msg.finalAtt = MathHelper.MidpointRounding(finalAtt); msg.suffer = owner.pveId; }
/// <summary> /// 分析当前队伍的血量总和 /// </summary> public void anaylizeHp(BT_MonsterTeam MonTeam) { int starttotalHp = 0; int endTotalHp = 0; if (MonTeam != null) { foreach (BT_Monster mon in MonTeam._team) { if (mon != null) { if (mon.alive) { endTotalHp += mon.curAtt; } starttotalHp += mon.initAtt; } } } AllHpWhenWarEnd = endTotalHp; AllHpWhenWarStart = starttotalHp; }
// TODO: 战后回复 private void castRecoverySkill(float rate, int angryCost = 0) { BT_Logical war = owner._war; BT_MonsterTeam selfTeam = owner.ownerTeam; BT_Monster enemy = war.enemy(owner); if (angryCost > 0) // 扣怒气... { selfTeam.costAngry(angryCost); } CMsgSkillAfterRecovery msg = new CMsgSkillAfterRecovery(this); msg.suffer = owner.pveId; msg.startAtt = owner.curAtt; msg.enemyAtt = enemy.curAtt; war.addMsgToRecorder(msg); float addAtt = owner.initAtt * rate * Consts.oneHundred; owner.curAttAdd(addAtt); msg.finalAtt = owner.curAtt; }
// TODO: 无视属性克制 public bool castIgnorePropertyKill() { BT_Logical war = owner._war; bool ignore = false; if (opObj.ID == 27 && canCastSkillOpDefault()) { ignore = 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.categoryIgnorePropertyKill); war.addMsgToRecorder(msg); } return(ignore); }