Exemplo n.º 1
0
        a3_BagItemData SetDataFromVariant(a3_BagItemData itemData, Variant item)
        {
            itemData.summondata.id         = item["id"];
            itemData.summondata.tpid       = item["tpid"];
            itemData.summondata.level      = item["level"];
            itemData.summondata.currentexp = item["exp"];
            if (item.ContainsKey("hp"))
            {
                itemData.summondata.currenthp = item["hp"];
            }
            itemData.summondata.lifespan = item["life"];
            itemData.summondata.power    = item["combpt"];
            //itemData.summondata.grade = item["quality"];
            //itemData.summondata.isSpecial = item["type"]==2;
            //itemData.summondata.naturaltype = item["speciality"];
            //itemData.summondata.blood = item["bloodline"];
            itemData.summondata.luck = item["luckly"];
            //itemData.summondata.talent_type = item["talent_type"];
            //itemData.summondata.skillNum = item["skill_num"];
            itemData.summondata.attNatural = item["att"];
            itemData.summondata.defNatural = item["def"];
            itemData.summondata.agiNatural = item["agi"];
            itemData.summondata.conNatural = item["con"];
            itemData.summondata.star       = item["talent"];
            if (item.ContainsKey("status"))
            {
                itemData.summondata.status = item["status"];
            }
            if (itemData.summondata.status > 0)
            {
                nowShowAttackID = (uint)itemData.summondata.id;
            }
            Variant atts = item["battleAttrs"];

            itemData.summondata.maxhp              = atts["max_hp"];
            itemData.summondata.max_attack         = atts["max_attack"];
            itemData.summondata.min_attack         = atts["min_attack"];
            itemData.summondata.physics_def        = atts["physics_def"];
            itemData.summondata.magic_def          = atts["magic_def"];
            itemData.summondata.physics_dmg_red    = atts["physics_dmg_red"];
            itemData.summondata.magic_dmg_red      = atts["magic_dmg_red"];
            itemData.summondata.double_damage_rate = atts["fatal_att"];
            itemData.summondata.reflect_crit_rate  = atts["fatal_dodge"];
            itemData.summondata.fatal_damage       = atts["fatal_damage"];
            itemData.summondata.hit   = atts["hit"];
            itemData.summondata.dodge = atts["dodge"];

            if (item.ContainsKey("skills"))
            {
                Variant sks = item["skills"];
                if (itemData.summondata.skills == null)
                {
                    itemData.summondata.skills = new Dictionary <int, summonskill>();
                }
                for (int i = 0; i < sks.Count; i++)
                {
                    //itemData.summondata.skills[sks[i]["index"]] = sks[i]["skill_id"];
                    summonskill skill = new summonskill();
                    skill.skillid = sks[i]["skill_id"];
                    skill.skilllv = sks[i]["skill_lvl"];
                    itemData.summondata.skills[sks[i]["skill_id"]] = skill;
                }
            }


            if (item.ContainsKey("link_ply"))
            {
                Variant link = item["link_ply"];
                if (itemData.summondata.linkdata == null)
                {
                    itemData.summondata.linkdata = new Dictionary <int, link_data>();
                }
                float Combpt = 0;
                for (int i = 0; i < link.Count; i++)
                {
                    link_data li = new link_data();
                    li.type       = link[i]["att_type"];
                    li.per        = link[i]["att_per"];
                    li.lock_state = link[i]["lock_state"];
                    itemData.summondata.linkdata[i] = li;

                    SXML x = XMLMgr.instance.GetSXML("calculate.combpt", "att_id==" + li.type);
                    if (x != null)
                    {
                        float attvalue = (int)Math.Ceiling((A3_SummonModel.getInstance().getAttValue(itemData.summondata, li.type) * ((float)li.per / 100.00f)));
                        Combpt += (attvalue * x.getFloat("sm_per")) / 10000;
                    }
                }
                itemData.summondata.linkCombpt = (int)Combpt;
            }
            if (item.ContainsKey("att_soul"))
            {
                Variant soul = item["att_soul"];
                if (itemData.summondata.shouhun == null)
                {
                    itemData.summondata.shouhun = new Dictionary <int, summonshouhun>();
                }


                for (int i = 0; i < soul.Count; i++)
                {
                    summonshouhun sh = new summonshouhun();
                    sh.soul_type = soul[i]["soul_type"];
                    sh.lvl       = soul[i]["soul_lvl"];
                    sh.exp       = soul[i]["soul_exp"];
                    itemData.summondata.shouhun[soul[i]["soul_type"]] = sh;
                }
            }

            if (item.ContainsKey("reset_talent") && item["reset_talent"].Count > 0)
            {
                Variant reset_talent = item["reset_talent"];
                itemData.summondata.haveReset = true;
                itemData.summondata.resetluck = reset_talent["luckly"];
                itemData.summondata.resetatt  = reset_talent["att"];
                itemData.summondata.resetdef  = reset_talent["def"];
                itemData.summondata.resetagi  = reset_talent["agi"];
                itemData.summondata.resetcon  = reset_talent["con"];
            }
            else
            {
                itemData.summondata.haveReset = false;
            }

            return(itemData);
        }
        private void SummonOP_new(Variant data)
        {
            Debug.LogError("召唤兽信息" + data.dump());
            int tp = -1;

            if (data.ContainsKey("res"))
            {
                tp = data["res"];
                if (tp < 0)
                {
                    Globle.err_output(tp);
                    return;
                }
            }
            uint    summon_id = 0;
            Variant info      = new Variant();

            switch (tp)
            {
            case 0:     //读取召唤兽列表
                info = data["summons"];
                if (info != null)
                {
                    foreach (Variant item in info._arr)
                    {
                        A3_SummonModel.getInstance().AddSummon(item);
                    }
                }
                if (data.ContainsKey("summon_on"))
                {
                    Variant so = data["summon_on"];
                    A3_SummonModel.getInstance().nowShowAttackID    = so["id"];
                    A3_SummonModel.getInstance().nowShowAttackModel = so["att_type"];
                    A3_SummonModel.getInstance().lastSummonID       = so["id"];
                }
                if (data.ContainsKey("link_list"))
                {
                    A3_SummonModel.getInstance().link_list.Clear();
                    foreach (Variant item in data["link_list"]._arr)
                    {
                        A3_SummonModel.getInstance().link_list.Add(item);
                    }
                }

                break;

            case 1:     // 获得新的召唤兽
                getNewSum = true;
                dispatchEvent(GameEvent.Create(EVENT_SHOWIDENTIFYANSWER, this, data));
                break;

            case 2:     // 资质洗练
                if (data.ContainsKey("reset_info"))
                {
                    Variant reset_info = data["reset_info"];
                    if (data.ContainsKey("summon_id"))
                    {
                        summon_id = data["summon_id"];
                        if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id))
                        {
                            var sm = A3_SummonModel.getInstance().GetSummons()[summon_id];
                            sm.summondata.haveReset = true;
                            sm.summondata.resetluck = reset_info["luckly"];
                            sm.summondata.resetatt  = reset_info["att"];
                            sm.summondata.resetdef  = reset_info["def"];
                            sm.summondata.resetagi  = reset_info["agi"];
                            sm.summondata.resetcon  = reset_info["con"];
                            A3_SummonModel.getInstance().GetSummons().Remove(summon_id);
                            A3_SummonModel.getInstance().GetSummons()[summon_id] = sm;
                        }
                    }
                    dispatchEvent(GameEvent.Create(EVENT_XILIAN, this, data));
                }

                break;

            case 3:     // 资质替换
                if (data.ContainsKey("summon"))
                {
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                    dispatchEvent(GameEvent.Create(EVENT_SAVE, this, data));
                }
                break;

            case 4:     // 兽魂强化
                if (data.ContainsKey("summon_id"))
                {
                    summon_id = data["summon_id"];
                    if (data.ContainsKey("soul_info"))
                    {
                        int type = data["soul_info"]["soul_type"];
                        int lvl  = data["soul_info"]["soul_lvl"];
                        int exp  = data["soul_info"]["soul_exp"];
                        if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id))
                        {
                            var sm = A3_SummonModel.getInstance().GetSummons()[summon_id];
                            if (sm.summondata.shouhun.ContainsKey(type))
                            {
                                summonshouhun sh = new summonshouhun();
                                sh.soul_type = type;
                                sh.lvl       = lvl;
                                sh.exp       = exp;
                                sm.summondata.shouhun[type] = sh;
                            }
                        }
                    }
                }
                else if (data.ContainsKey("summon"))
                {
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                }
                dispatchEvent(GameEvent.Create(EVENT_SHOUHUN, this, data));
                break;

            case 5:     // 喂食经验
                if (data.ContainsKey("summon_id"))
                {
                    summon_id = data["summon_id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id))
                    {
                        if (data.ContainsKey("add_exp"))
                        {
                            int addexp = data["add_exp"];
                            var sm     = A3_SummonModel.getInstance().GetSummons()[summon_id];
                            sm.summondata.currentexp = addexp;
                            A3_SummonModel.getInstance().GetSummons().Remove(summon_id);
                            A3_SummonModel.getInstance().GetSummons()[summon_id] = sm;
                        }
                    }
                }
                else if (data.ContainsKey("summon"))
                {
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                }
                dispatchEvent(GameEvent.Create(EVENT_FEEDEXP, this, data));
                break;

            case 6:     // 喂食寿命
                if (data.ContainsKey("summon_id"))
                {
                    summon_id = data["summon_id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id))
                    {
                        if (data.ContainsKey("summon_life"))
                        {
                            int lifespan = data["summon_life"];
                            var sm       = A3_SummonModel.getInstance().GetSummons()[summon_id];
                            sm.summondata.lifespan = lifespan;
                            A3_SummonModel.getInstance().GetSummons().Remove(summon_id);
                            A3_SummonModel.getInstance().GetSummons()[summon_id] = sm;
                        }
                    }
                    dispatchEvent(GameEvent.Create(EVENT_FEEDSM, this, data));
                    if (data["summon_id"] == A3_SummonModel.getInstance().nowShowAttackID || data["summon_id"] == A3_SummonModel.getInstance().lastatkID)
                    {
                        if (a3_herohead.instance)
                        {
                            a3_herohead.instance.refresh_sumbar();
                        }
                    }
                }
                break;

            case 7:     // 转移到召唤兽列表
                info = data["summon"];
                A3_SummonModel.getInstance().AddSummon(info);
                flytxt.instance.fly(ContMgr.getCont("a3_summon_chenggongzh"));
                dispatchEvent(GameEvent.Create(EVENT_INSUMMON, this, data));
                break;

            case 8:     // 查询召唤兽信息
                dispatchEvent(GameEvent.Create(EVENT_SUMINFO, this, data));
                break;

            case 9:     // 出战召唤兽
                summon_id = data["summon_id"];
                A3_SummonModel.getInstance().lastSummonID    = summon_id;
                A3_SummonModel.getInstance().nowShowAttackID = summon_id;
                if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id))
                {
                    var sd = A3_SummonModel.getInstance().GetSummons()[summon_id];
                    sd.summondata.status = 1;
                }
                flytxt.instance.fly(ContMgr.getCont("A3_SummonProxy_togo"));
                if (a3_herohead.instance)
                {
                    a3_herohead.instance.refresh_sumbar();
                }
                dispatchEvent(GameEvent.Create(EVENT_CHUZHAN, this, data));
                break;

            case 10:     // 召回召唤兽

                //休息
                uint summon_id_10 = data["summon_id"];
                A3_SummonModel.getInstance().nowShowAttackID = 0;
                if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id_10))
                {
                    var sd = A3_SummonModel.getInstance().GetSummons()[summon_id_10];
                    sd.summondata.status = 0;
                }
                if (data.ContainsKey("summon_life"))
                {
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(summon_id_10))
                    {
                        var sm    = A3_SummonModel.getInstance().GetSummons()[summon_id_10];
                        int oldsm = sm.summondata.lifespan;
                        sm.summondata.lifespan = data["summon_life"];
                        A3_SummonModel.getInstance().GetSummons().Remove(summon_id_10);
                        A3_SummonModel.getInstance().GetSummons()[summon_id_10] = sm;
                        //A3_SummonModel.getInstance().SortSummon();
                        if (oldsm > data["summon_life"] && data.ContainsKey("die_timelist"))
                        {
                            //召唤兽死亡
                            A3_SummonModel.getInstance().addSumCD((int)summon_id_10, data["die_timelist"][0]._int64 - muNetCleint.instance.CurServerTimeStamp);
                            debug.Log("time" + (data["die_timelist"][0]._int - muNetCleint.instance.CurServerTimeStamp));
                            if (a3_herohead.instance)
                            {
                                A3_SummonModel.getInstance().lastatkID = summon_id_10;
                                a3_herohead.instance.refresh_sumbar();
                                a3_herohead.instance.refresh_sumHp(0, 1);    //召唤兽出视野同步不到血量,这里强行降血条设为0
                            }
                        }
                    }
                }
                else
                {
                    //召回
                    if (a3_herohead.instance)
                    {
                        A3_SummonModel.getInstance().lastatkID = 0;  //清除出战召唤兽id缓存
                        a3_herohead.instance.refresh_sumbar();
                        a3_herohead.instance.refresh_sumHp(0, 1);    //召唤兽出视野同步不到血量,这里强行降血条设为0
                    }
                }
                if (!data.ContainsKey("summon_life") || data["summon_life"] > 0)
                {
                    flytxt.instance.fly(ContMgr.getCont("A3_SummonProxy_torest"));
                }
                dispatchEvent(GameEvent.Create(EVENT_XIUXI, this, data));
                break;

            case 11:     //设置召唤兽三种攻击模式
                break;

            case 12:     //查询分解信息

                dispatchEvent(GameEvent.Create(EVENT_FENJIEINFO, this, data));
                break;

            case 13:    //分解结果
                if (data.ContainsKey("rmv_id"))
                {
                    uint rmvid = data["rmv_id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(rmvid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(rmvid);
                    }
                }

                dispatchEvent(GameEvent.Create(EVENT_FENJIERES, this, data));
                break;

            case 14:
                if (data.ContainsKey("rmv_id"))
                {
                    uint rmvid = data["rmv_id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(rmvid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(rmvid);
                    }
                }
                if (data.ContainsKey("summon"))
                {
                    flytxt.instance.fly(ContMgr.getCont("TunshiChengGong"));
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                }
                else
                {
                    flytxt.instance.fly(ContMgr.getCont("TunshiShiBai"));
                }
                dispatchEvent(GameEvent.Create(EVENT_TUNSHI, this, data));
                break;

            case 15:    //融合
                if (data.ContainsKey("rmv_id"))
                {
                    uint rmvid = data["rmv_id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(rmvid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(rmvid);
                    }
                }
                if (data.ContainsKey("summon"))
                {
                    flytxt.instance.fly(ContMgr.getCont("RongheChengGong"));
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                }
                else
                {
                    flytxt.instance.fly(ContMgr.getCont("RongheShiBai"));
                }
                dispatchEvent(GameEvent.Create(EVENT_RONGHE, this, data));
                break;

            case 16:    //技能升级
                if (data.ContainsKey("summon"))
                {
                    info = data["summon"];
                    uint uid = info["id"];
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(uid))
                    {
                        A3_SummonModel.getInstance().GetSummons().Remove(uid);
                    }
                    A3_SummonModel.getInstance().AddSummon(info);
                    dispatchEvent(GameEvent.Create(EVENT_SKILLUP, this, data));
                }
                break;

            case 18:
                if (data.ContainsKey("summon_id"))
                {
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(data["summon_id"]))
                    {
                        var sd = A3_SummonModel.getInstance().GetSummons()[data["summon_id"]];
                        if (data.ContainsKey("link_ply"))
                        {
                            if (sd.summondata.linkdata == null)
                            {
                                sd.summondata.linkdata = new Dictionary <int, link_data>();
                            }
                            sd.summondata.linkdata.Clear();
                            Variant link = data["link_ply"];
                            for (int i = 0; i < link.Count; i++)
                            {
                                link_data li = new link_data();
                                li.type                   = link[i]["att_type"];
                                li.per                    = link[i]["att_per"];
                                li.lock_state             = link[i]["lock_state"];
                                sd.summondata.linkdata[i] = li;
                            }
                        }
                        dispatchEvent(GameEvent.Create(EVENT_REFLIANXIE, this, data));
                    }
                }
                break;

            case 17:
                if (data.ContainsKey("summon_id"))
                {
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(data["summon_id"]))
                    {
                        var sd = A3_SummonModel.getInstance().GetSummons()[data["summon_id"]];
                        if (data.ContainsKey("link_ply"))
                        {
                            if (sd.summondata.linkdata == null)
                            {
                                sd.summondata.linkdata = new Dictionary <int, link_data>();
                            }
                            sd.summondata.linkdata.Clear();
                            Variant link = data["link_ply"];
                            for (int i = 0; i < link.Count; i++)
                            {
                                link_data li = new link_data();
                                li.type                   = link[i]["att_type"];
                                li.per                    = link[i]["att_per"];
                                li.lock_state             = link[i]["lock_state"];
                                sd.summondata.linkdata[i] = li;
                            }
                        }
                        dispatchEvent(GameEvent.Create(EVENT_REFLIANXIE, this, data));
                    }
                }
                break;

            case 19:
                if (data.ContainsKey("summon_id"))
                {
                    if (A3_SummonModel.getInstance().GetSummons().ContainsKey(data["summon_id"]))
                    {
                        var sd = A3_SummonModel.getInstance().GetSummons()[data["summon_id"]];
                        if (data.ContainsKey("link_ply"))
                        {
                            float Combpt = 0;
                            if (sd.summondata.linkdata == null)
                            {
                                sd.summondata.linkdata = new Dictionary <int, link_data>();
                            }
                            sd.summondata.linkdata.Clear();
                            Variant link = data["link_ply"];
                            for (int i = 0; i < link.Count; i++)
                            {
                                link_data li = new link_data();
                                li.type                   = link[i]["att_type"];
                                li.per                    = link[i]["att_per"];
                                li.lock_state             = link[i]["lock_state"];
                                sd.summondata.linkdata[i] = li;
                                SXML x = XMLMgr.instance.GetSXML("calculate.combpt", "att_id==" + li.type);
                                if (x != null)
                                {
                                    float attvalue = (int)Math.Ceiling((A3_SummonModel.getInstance().getAttValue(sd.summondata, li.type) * ((float)li.per / 100.00f)));
                                    Combpt += (attvalue * x.getFloat("sm_per")) / 10000;
                                }
                            }
                            sd.summondata.linkCombpt = (int)Combpt;
                        }
                        dispatchEvent(GameEvent.Create(EVENT_REFLIANXIE, this, data));
                    }
                }
                break;

            case 20:
                if (data.ContainsKey("link_list"))
                {
                    A3_SummonModel.getInstance().link_list.Clear();
                    foreach (Variant item in data["link_list"]._arr)
                    {
                        A3_SummonModel.getInstance().link_list.Add(item);
                    }
                    dispatchEvent(GameEvent.Create(EVENT_LINK, this, data));
                }
                break;
            }

            List <uint> removeid = new List <uint>();

            foreach (uint id in A3_SummonModel.getInstance().link_list)
            {
                if (!A3_SummonModel.getInstance().GetSummons().ContainsKey(id))
                {
                    removeid.Add(id);
                }
            }

            foreach (uint remove in removeid)
            {
                if (A3_SummonModel.getInstance().link_list.Contains(remove))
                {
                    A3_SummonModel.getInstance().link_list.Remove(remove);
                }
            }
        }