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; }
//根据技能ID和技能等级,得到技能参数 public skParam GetSkParamData(int skillID, int skillLv) { SkillLvData skillUpData = GetSkillLvDataConfig(skillID); //技能没找到 if (skillUpData == null) { StringBuilder strBld = new StringBuilder(); strBld.Append(skillID.ToString()); strBld.Append(" skill not find up data"); RED.LogWarning(strBld.ToString()); return(null); } // 非法等级 if (skillLv < 1 || skillLv > skillUpData.max_lv) { StringBuilder strBld = new StringBuilder(); strBld.Append(skillID.ToString()); strBld.Append(" skill's level is out of range "); strBld.Append(skillLv.ToString()); RED.LogWarning(strBld.ToString()); return(null); } SkillData sd = getSkillDataConfig(skillID); skParam param = new skParam(); if (skillLv - 1 < skillUpData.absorb.Length) { param.absorb = (int)(skillUpData.absorb[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.add.Length) { param.add = (int)(skillUpData.add[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.damage.Length) { param.damage = (int)(skillUpData.damage[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.dec.Length) { param.dec = (int)(skillUpData.dec[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.gailv.Length) { param.gailv = (int)(skillUpData.gailv[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.num.Length) { param.num = (int)(skillUpData.num[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.rate.Length) { param.rate = (int)(skillUpData.rate[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.rate2.Length) { param.rate2 = (int)(skillUpData.rate2[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.seal.Length) { param.seal = (int)(skillUpData.seal[skillLv - 1] + 0.5f); } if (skillLv - 1 < skillUpData.nuqi.Length) { param.nuqi = sd.param.nuqi; } return(param); }
// 使用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; }