//将一个需要Ask的obj放入
    public bool TryAddLoadTask(int idObj)
    {
        //玩家自己不放入队列
        CObject pObj = CObjectManager.Instance.FindObject(idObj);

        if (pObj == null || pObj == CObjectManager.Instance.getPlayerMySelf())
        {
            return(false);
        }

        if (m_LoadDirect)
        {
            //立即请求
            CGCharAskBaseAttrib msgAskBaseAttrib = new CGCharAskBaseAttrib();
            msgAskBaseAttrib.setTargetID((uint)pObj.ServerID);
            GameProcedure.s_NetManager.SendPacket(msgAskBaseAttrib);
            //LogManager.LogWarning("Ask Char BaseAttrib id=" + pObj.ServerID);
        }
        else
        {
            //自己位置
            Vector3 fvPosMySelf = CObjectManager.Instance.getPlayerMySelf().GetPosition();
            float   fDistanceSq = Utility.TDU_GetDistSq(pObj.GetPosition(), fvPosMySelf);

            if (m_mapLoadTask.ContainsValue(idObj))
            {
                LogManager.LogWarning("该角色ID<" + idObj + ">已经在加载队列中");
            }
            else
            {
                m_mapLoadTask.Add(fDistanceSq, idObj);

                //LogManager.Log("Ask Char BaseAttrib in queue id" + idObj);
            }
        }

        return(true);
    }
    //工作桢
    public void             Tick()
    {
        if (m_mapLoadTask.Count != 0)
        {
            int nDoRealWork = 0;
            do
            {
                //存在需要加载的OBJ
                int idObj = m_mapLoadTask.Values[0];

                CObject pObj = CObjectManager.Instance.FindObject(idObj);
                if (pObj != null)
                {
                    //处理消息
                    CGCharAskBaseAttrib msgAskBaseAttrib = new CGCharAskBaseAttrib();
                    msgAskBaseAttrib.setTargetID((uint)pObj.ServerID);
                    GameProcedure.s_NetManager.SendPacket(msgAskBaseAttrib);
                    //LogManager.LogWarning("Ask Char BaseAttrib id=" + pObj.ServerID);
                    nDoRealWork++;
                }
                else
                {
                    //该Object已经被删除
                }

                //从队列中删除
                m_mapLoadTask.RemoveAt(0);

                //做过真实工作,退出
                if (nDoRealWork >= WORK_SPEED || m_mapLoadTask.Count == 0)
                {
                    break;
                }
            }while(true);
        }
    }
Пример #3
0
    public override void Init()
    {
        base.Init();
        m_pMySelf = s_pObjectManager.getPlayerMySelf();
        int m_nID = m_pMySelf.ServerID;
        //      m_pActiveSkill = NULL;
        //      m_pSkillArea = NULL;
        //      m_pMouseTarget = NULL;
        //      m_bAutoRun = FALSE;
        //      m_bAutoMoveAlong = FALSE;
        //------------------------------------------------------------------
        //重置LogicCount
        //	    m_pMySelf->ResetLogicCount();

        //------------------------------------------------------------------
        //清空加载队列
        //	    CObjectManager::GetMe()->GetLoadQueue()->ClearAllTask();

        //------------------------------------------------------------------
        //发送环境请求
        //	    CGEnvRequest msgEnvRequest;
        //	    CNetManager::GetMe()->SendPacket(&msgEnvRequest);

        //------------------------------------------------------------------
        //发送自身数据请求

        //自身基本信息
        CGCharAskBaseAttrib msgMyBaseAttrib = new CGCharAskBaseAttrib();

        msgMyBaseAttrib.setTargetID((uint)m_nID);
        s_NetManager.SendPacket(msgMyBaseAttrib);

        //基本属性
        CGAskDetailAttrib msgMyAttrib = new CGAskDetailAttrib();

        msgMyAttrib.ObjID = (uint)m_nID;
        s_NetManager.SendPacket(msgMyAttrib);

        ////自身装备(用于创建渲染层外形)
        //CGCharAskEquipment msgAskMyEquip;
        //msgAskMyEquip.setObjID(m_nID);
        //CNetManager::GetMe()->SendPacket(&msgAskMyEquip);

        //生活技能
        CGAskDetailAbilityInfo msgAbility = new CGAskDetailAbilityInfo();

        msgAbility.ObjID = m_nID;
        NetManager.GetNetManager().SendPacket(msgAbility);
        //
        //      //技能系
        CGAskSkillClass msgMySkillClass = new CGAskSkillClass();

        msgMySkillClass.ObjID = m_nID;
        s_NetManager.SendPacket(msgMySkillClass);

        //技能
        CGAskDetailSkillList msgMyDetailSkill = new CGAskDetailSkillList();

        msgMyDetailSkill.ObjID = m_nID;
        s_NetManager.SendPacket(msgMyDetailSkill);
        //
        //      //组队数据
        //      CUIDataPool::GetMe()->ClearTeamInfo();
        //      CGAskTeamInfo msgTeamInfo;
        //      msgTeamInfo.SetObjID( m_nID );
        //      CNetManager::GetMe()->SendPacket(&msgTeamInfo);
        //
        //      //如果是城市向服务器请求城市数据
        //      CGCityAskAttr	MsgCityBuilding;
        //      CNetManager::GetMe()->SendPacket( &MsgCityBuilding );
        //
        //      //所有称号
        //      CGCharAllTitles	msgAllTitles;
        //      msgAllTitles.setTargetID( m_nID );
        //      CNetManager::GetMe()->SendPacket(&msgAllTitles);

        //是第一次登陆
        if (GameProcedure.s_ProcEnter.GetEnterType() == (uint)ENTER_TYPE.ENTER_TYPE_FIRST)
        {
            //详细装备(用于在数据池中存储物品详细属性)
            CGAskDetailEquipList msgAskEquip = new CGAskDetailEquipList();
            msgAskEquip.ObjId = (uint)m_nID;
            msgAskEquip.Mode  = ASK_EQUIP_MODE.ASK_EQUIP_ALL;
            s_NetManager.SendPacket(msgAskEquip);

            //背包
            CGAskMyBagList msgMyBag = new CGAskMyBagList();
            msgMyBag.Mode = ASK_BAG_MODE.ASK_ALL;
            s_NetManager.SendPacket(msgMyBag);

            CGAskMail msgAskMail = new CGAskMail();
            msgAskMail.AskType = (byte)ASK_TYPE.ASK_TYPE_LOGIN;
            s_NetManager.SendPacket(msgAskMail);

            //MissionList
            CGAskMissionList msgMissionList = new CGAskMissionList();
            msgMissionList.ObjID = (uint)m_nID;
            s_NetManager.SendPacket(msgMissionList);

            //向服务器请求快捷栏数据
            CGAskSetting msgSetting = new CGAskSetting();
            s_NetManager.SendPacket(msgSetting);
            //请求法宝栏数据
            CGAskTalismanBag AskTalismanBag = new CGAskTalismanBag();
            s_NetManager.SendPacket(AskTalismanBag);



            //向服务器请求关系人列表
            CGRelation MsgRelation           = new CGRelation();
            MsgRelation.GetRelation().m_Type = (byte)RELATION_REQUEST_TYPE.REQ_RELATIONLIST;
            NetManager.GetNetManager().SendPacket(MsgRelation);

            //想服务器请求符印信息
            CGAskFlushCharmInfo msgFlushCharmInfo = new CGAskFlushCharmInfo();
            NetManager.GetNetManager().SendPacket(msgFlushCharmInfo);

            //广播第一次进入游戏,用来初始化ui或者一些组件
            CEventSystem.Instance.PushEvent(GAME_EVENT_ID.GE_APPLICATION_INITED);
        }
    }