zoukankan      html  css  js  c++  java
  • ms人物上线

    在看MS人物上线
    else if(gs2ms_add_player == pkt.cmd)
    {
        PlayerChannel* pPC = new PlayerChannel(this);
        //加到地图中,但是并未激活该玩家
        int nChannelId = pPC->OnPlayerEnter(pkt.data, pkt.len);//主要playchannel人物基本信息的初始化
        m_vecPlayerChannel[nChannelId] = pPC;
        AddPlayer(nChannelId);    //人物上线位置和血量处理    
    }
    
    m_fnSendCmd2Client(s2c_enter_newmap, &cPkt, sizeof(cPkt));//向客户端发送enter_map包,以前这个是走json的,现在服务器全部不走json,因为read_json效率很低
    然后客户端想服务器发送c2s_activate_player激活包
    激活包做的事情很多
    void Map::ActivatePlayer(int mapChannelId) //激活玩家
    {
        PlayerChannel* pPC = m_vecPlayerChannel[mapChannelId];
        if (pPC->m_bBeActived)
            return;
        pPC->m_bBeActived = true;
        auto& pActorInfoEx = pPC->m_pActorInfoEx;
    
        if (!pActorInfoEx->m_bGaming) 
        {//第一次进游戏
            pActorInfoEx->m_bGaming = true;
            StartGame(mapChannelId);//好友上线通知,任务面板的显示
        }        
        pos2d& cPlayerMapPos = m_spBase->GetMapPos(pPC->tgtPos); 
    //    SetMapColl(mpos.x, mpos.y, true);
        GetAllPlayers()[pPC->objId.id] = pPC;
        m_MapCellMgr.AddObj(cPlayerMapPos.x, cPlayerMapPos.y, pPC);
    
        //在新进入块中通知
        pos2d newBlockPos = {pPC->m_nBlockX, pPC->m_nBlockY};
        pPC->m_fnSendStatChange(pPC->stat);
        NotifyBlock(pos2d(), newBlockPos, pPC, true);
    
        //让玩家上线就能看到所有附近角色的动作。
        m_MapCellMgr.m_vecRolesBlock[pPC->m_nBlockX][pPC->m_nBlockY].Add(pPC);
    
        UpdateRegionInfo(pPC, cPlayerMapPos);
    
        //判断罪恶值
        if(pPC->m_pActorInfoEx->GetSinValue() > 0)
        {
            m_spSinMgr->AddPlayer(pPC);
        }
    
        //宠物(现在主要是切图时宠物携带)
        if(pPC->m_pActorInfoEx->IsCarryTempPet())
        {
            const ShuiHu::PetInfo* pTempPetInfo = pPC->m_pActorInfoEx->GetTempPetInfoPtr();
            if (pTempPetInfo->m_nCurHP <= 0)
            {
                ShuiHu::GetLogger()->Warning("玩家(ID=%d)进入新地图(%d),带了个血量为<=0的宠物(ID=%d)!",
                    pPC->objId.id, m_nMapId, pTempPetInfo->m_nID);
                return;
            }
            pos2d cPetMapPos = {0};
            if (!Round(1, cPlayerMapPos, cPetMapPos))
            {
                pPC->m_pActorInfoEx->SetNoneTempPet();
                return; 
            }
    
            // 召唤正式宠物
            m_pSkill->CallPetByPos(pPC, *pTempPetInfo, cPetMapPos);
        }
    }
    map暂时就看到这了,在回到share中
  • 相关阅读:
    windows下大数据开发环境搭建(3)——Scala环境搭建
    windows下大数据开发环境搭建(1)——Java环境搭建
    windows下大数据开发环境搭建(2)——Hadoop环境搭建
    I/O复用
    SuRF : Practical Range Query Filtering with Fast Succinct Tries
    信号处理
    进程间通信
    简易内存分配器的实现
    socket编程(C++)
    C++—程序的内存分区
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/4168467.html
Copyright © 2011-2022 走看看