Example #1
0
        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;
        }
Example #2
0
    //根据技能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);
    }
Example #3
0
        // 使用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;
        }