Пример #1
0
            public void UpdateInfo(List <PkgBossInfo> boss_list)
            {
                if (m_bossArray == null)
                {
                    m_bossArray = new List <BossInfoItem>();
                }

                foreach (var boss_info in boss_list)
                {
                    if (mBossInfoAll != null)
                    {
                        var find_item = mBossInfoAll.Find((a) =>
                        {
                            if (a.id == boss_info.id)
                            {
                                return(true);
                            }
                            return(false);
                        });
                        if (find_item != null)
                        {
                            mBossInfoAll.Remove(find_item);
                        }
                        var protocol_info = RedefineBossInfo.GetInfo(boss_info);
                        mBossInfoAll.Add(protocol_info);
                    }

                    var data_mon_attr = DBManager.Instance.GetDB <DBSpecialMon>().GetData(boss_info.id);
                    if (data_mon_attr == null)
                    {
                        GameDebug.LogError("Cannot find special monster info,id:" + boss_info.id);
                        continue;
                    }

                    if (xc.SceneHelp.Instance.CurSceneID != data_mon_attr.DungeonId)
                    {
                        continue;
                    }

                    BossInfoItem tmp_item = new BossInfoItem();
                    tmp_item.m_pkgBossInfo = boss_info;
                    tmp_item.m_need_update_exchange_model = true;
                    tmp_item.m_uid = new InterObjectUnitID(InterObjectType.TOMB_STONE, tmp_item.m_pkgBossInfo.id);
                    if (tmp_item.m_pkgBossInfo.pos != null)
                    {
                        tmp_item.m_pos.x = tmp_item.m_pkgBossInfo.pos.px * 0.01f;
                        tmp_item.m_pos.z = tmp_item.m_pkgBossInfo.pos.py * 0.01f;
                    }
                    tmp_item.m_pos.y = PhysicsHelp.GetHeight(tmp_item.m_pos.x, tmp_item.m_pos.z);
                    if (tmp_item.m_pos.y < -500)
                    {
                        GameDebug.LogError(string.Format("[MSG_BOSS_INFO] boss_actor pos maybe is error new_pos = {0}, {1}, {2}",
                                                         tmp_item.m_pos.x, tmp_item.m_pos.y, tmp_item.m_pos.z));
                        tmp_item.m_pos.y = 0;
                        var local_player = Game.Instance.GetLocalPlayer();
                        if (local_player != null && local_player.transform != null)
                        {
                            tmp_item.m_pos.y = local_player.transform.position.y;
                        }
                    }
                    tmp_item.m_model_Quaternion = Quaternion.identity;
                    bool can_add_new_monster = true;
                    for (int index = 0; index < m_bossArray.Count; ++index)
                    {
                        BossInfoItem find_item = m_bossArray[index];
                        if (find_item.m_uid != null && find_item.m_uid.m_Idx == tmp_item.m_uid.m_Idx)
                        {
                            if (find_item.m_pkgBossInfo != null &&
                                find_item.m_pkgBossInfo.state == tmp_item.m_pkgBossInfo.state)
                            {
                                can_add_new_monster = false;
                            }
                            else
                            {
                                InterObjectManager.Instance.DestroyObject(find_item.m_uid);
                                m_bossArray.Remove(find_item);
                            }
                            break;
                        }
                    }
                    if (can_add_new_monster)
                    {
                        m_bossArray.Add(tmp_item);
                    }
                }
            }
Пример #2
0
            public virtual void HandleServerData(ushort protocol, byte[] data)
            {
                switch (protocol)
                {
                case NetMsg.MSG_SPAN_BOSS_INFO:
                {
                    var pack      = S2CPackBase.DeserializePack <S2CSpanBossInfo>(data);
                    var boss_list = pack.mon_boss;

                    UpdateInfo(boss_list);

                    ClientEventMgr.Instance.FireEvent(xc.EnumUtil.EnumToInt(xc.ClientEvent.CE_WORLD_BOSS_UPDATE_BOSS_INFO_ALL), null);
                    break;
                }

                case NetMsg.MSG_BOSS_INFO:
                {
                    var pack      = S2CPackBase.DeserializePack <S2CBossInfo>(data);
                    var boss_list = pack.mons;
                    //m_isNeedUpdate = true;

                    UpdateInfo(boss_list);

                    ClientEventMgr.Instance.FireEvent(xc.EnumUtil.EnumToInt(xc.ClientEvent.CE_WORLD_BOSS_UPDATE_BOSS_INFO_ALL), null);
                    break;
                }

                case NetMsg.MSG_BOSS_AFFILIS:
                {
                    S2CBossAffilis pack = S2CPackBase.DeserializePack <S2CBossAffilis>(data);

                    mBossAffiTeamIds[pack.boss] = pack.team_id;

                    List <UpdateBossAffiItem> item_array = GetOneBossAffiItemArray_tryAdd(pack.boss);
                    for (int index = 0; index < item_array.Count; ++index)
                    {
                        item_array[index].m_before_isAffi = item_array[index].m_now_isAffi;
                        item_array[index].m_now_isAffi    = false;
                    }
                    //GameDebug.LogError("************** start");
                    //GameDebug.LogError(string.Format("[pack.uuids] pack.uuids.Count = {0}", pack.uuids.Count));
                    for (int index = 0; index < pack.uuids.Count; ++index)
                    {
                        //GameDebug.LogError(string.Format("[pack.uuids] index = {0} player_id = {1}", index, pack.uuids[index]));
                        UpdateBossAffiItem item = item_array.Find((a) =>
                            {
                                return(a.m_player_id == pack.uuids[index]);
                            });
                        if (item == null)
                        {
                            UpdateBossAffiItem tmp_item = new UpdateBossAffiItem();
                            tmp_item.m_player_id  = pack.uuids[index];
                            tmp_item.m_now_isAffi = true;
                            item_array.Add(tmp_item);
                        }
                        else
                        {
                            item.m_now_isAffi = true;
                        }
                    }
//
//                             for(int index = 0; index < m_updateBossAffiItemArray.Count; ++index)
//                             {
//                                 GameDebug.LogError(string.Format("index = {0} player_id = {1} m_now_isAffi = {2}", index, m_updateBossAffiItemArray[index].m_player_id,
//                                     m_updateBossAffiItemArray[index].m_now_isAffi));
//                             }

                    // GameDebug.LogError("************** end");
                    UpdateAffiliation(item_array);
                    break;
                }

                case NetMsg.MSG_BOSS_INFO_ALL:
                {
                    var pack = S2CPackBase.DeserializePack <S2CBossInfoAll>(data);
                    m_affili_times = pack.affili_times;
                    mBossInfoAll.Clear();
                    for (int index = 0; index < pack.mons.Count; ++index)
                    {
                        var tmp_protocol_info = RedefineBossInfo.GetInfo(pack.mons[index]);
                        mBossInfoAll.Add(tmp_protocol_info);
                    }

                    C2SSpanBossInfo pkg = new C2SSpanBossInfo();
                    Net.NetClient.GetBaseClient().SendData <C2SSpanBossInfo>(NetMsg.MSG_SPAN_BOSS_INFO, pkg);

                    ClientEventMgr.Instance.FireEvent(xc.EnumUtil.EnumToInt(xc.ClientEvent.CE_WORLD_BOSS_UPDATE_BOSS_INFO_ALL), null);
                    break;
                }

                case NetMsg.MSG_DUNGEON_BOSS_GUIDE_AFFI:
                {
                    if (SceneHelp.Instance.IsInWorldBossExperienceInstance == false)
                    {
                        return;
                    }
                    S2CDungeonBossGuideAffi   pack       = S2CPackBase.DeserializePack <S2CDungeonBossGuideAffi>(data);
                    List <UpdateBossAffiItem> item_array = GetOneBossAffiItemArray_tryAdd(1);
                    for (int index = 0; index < item_array.Count; ++index)
                    {
                        item_array[index].m_before_isAffi = item_array[index].m_now_isAffi;
                        item_array[index].m_now_isAffi    = false;
                    }
                    //GameDebug.LogError("************** start");
                    //GameDebug.LogError(string.Format("[pack.uuids] pack.uuids.Count = {0}", pack.uuids.Count));
                    for (int index = 0; index < pack.uuids.Count; ++index)
                    {
                        //GameDebug.LogError(string.Format("[pack.uuids] index = {0} player_id = {1}", index, pack.uuids[index]));
                        UpdateBossAffiItem item = item_array.Find((a) =>
                            {
                                return(a.m_player_id == pack.uuids[index]);
                            });
                        if (item == null)
                        {
                            UpdateBossAffiItem tmp_item = new UpdateBossAffiItem();
                            tmp_item.m_player_id  = pack.uuids[index];
                            tmp_item.m_now_isAffi = true;
                            item_array.Add(tmp_item);
                        }
                        else
                        {
                            item.m_now_isAffi = true;
                        }
                    }
                    UpdateAffiliation(item_array);
                    break;
                }

                default:
                    break;
                }
            }