//当前的奥义释放过嘛? public bool curAoYiCast(int AoYiSkillId) { bool curUsed = false; CAoYi temp = null; foreach (CAoYi ao in _AoYi.Values) { if (ao.getAoYiItem._ID == AoYiSkillId) { temp = ao; break; } } if (temp != null) { if (temp.getUsed == 0) { curUsed = false; } else { curUsed = true; } } return(curUsed); }
public BT_Skill(int skillNum, int lv, SkillManager skillMgr, BT_Monster ownerBy) { if (skillMgr == null) { throw new DragonException("Skill manager is null."); } if (ownerBy == null) { throw new DragonException("Owner is null"); } SkillData skCfg = skillMgr.getSkillDataConfig(skillNum); if (skCfg == null) { throw new DragonException("Skill configure is null." + skillNum); } //默认一定能释放一次 RdCast = 1; id = skillNum; curLv = lv; name = skCfg.name; mark = skCfg.mark; level = skCfg.level; param = skillMgr.GetSkParamData(skillNum, lv); op = skCfg.op; opObj = skillMgr.getSkillOpDataConfig(op); real = 0; AoYi = null; owner = ownerBy; }
//之前的奥义释放过嘛? public bool prevAoYiCast(int AoYiSkillID) { if (AoYiNumList.Count == 0) { return(false); } int firstAoYiNum = AoYiNumList[0]; bool preUsed = false; //找到第一个 CAoYi firstAoYi = _AoYi[firstAoYiNum]; bool found = false; int index = 0; foreach (int key in AoYiNumList) { if (key == AoYiSkillID) { found = true; break; } index++; } //如果找到了当前的 if (found) { index -= 1; if (index >= 0) { //如果不是第一个,则考虑前一个是否释放过。如果是,则表明可能可以释放当前的。 CAoYi prevAoYi = _AoYi[AoYiNumList[index]]; preUsed = prevAoYi.getUsed == 1; } else { //如果是第一个,则考虑当前是否释放过。如果是,则表明不可以释放当前的。 preUsed = firstAoYi.getUsed == 0; } } return(preUsed); }
//充值该奥义为 可释放状态 public void resetCurAoYi(int AoYiSkillId) { CAoYi temp = null; foreach (CAoYi ao in _AoYi.Values) { if (ao.getAoYiItem._ID == AoYiSkillId) { temp = ao; break; } } if (temp != null) { temp.resetUsed(); } }
// 使用CAoYi来创建技能 public BT_Skill(CAoYi AoYiItem, BT_Monster ownerBy) { owner = ownerBy; int AoYiLevel = AoYiItem.getLv; BT_AoYi AoYi = AoYiItem.getAoYiItem; // 参数信息 float[] effect = AoYiItem.getEffectByLv(AoYiLevel); // 构建真实的技能参数数据 skParam realEffect = new skParam(); int length = AoYi._efinfo.Length; for (int i = 0; i < length; ++i) { //其实可以反射的写入值,但这里不太多,就不用反射了。 string key = AoYi._efinfo[i]; if (!string.IsNullOrEmpty(key)) { switch (key) { case "rate2": realEffect.rate2 = MathHelper.MidpointRounding(effect [i]); break; case "rate": realEffect.rate = MathHelper.MidpointRounding(effect [i]); break; case "gailv": realEffect.gailv = MathHelper.MidpointRounding(effect [i]); break; case "damage": realEffect.damage = MathHelper.MidpointRounding(effect [i]); break; case "nuqi": realEffect.nuqi = MathHelper.MidpointRounding(effect [i]); break; case "num": realEffect.num = MathHelper.MidpointRounding(effect [i]); break; } } } // 构造对象 //默认一定能释放一次 RdCast = 1; id = AoYi._ID; curLv = AoYiLevel; opObj = AoYi._SkillOpConfig; name = AoYi._Name; level = "A"; param = realEffect; op = AoYi._skillOp; }