一 角色选择流程开始

可能的一种情况是,客户端接到服务器发送的包(LCRetCharList)开始的,这个包里面有玩家角色的个数等信息

UINT    LCRetCharListHandler::Execute(LCRetCharList* pPacket, Player* pPlayer )
{
    __ENTER_FUNCTION

if(pPacket&&(pPacket->GetResult() == ASKCHARLIST_SUCCESS))
        {

int iCharacterCount = pPacket->GetCharNumber();
            // 保存角色的个数
            CGameProcedure::s_pProcCharSel->m_iCharacterCount = 0;

if( iCharacterCount > 0)
            {
                DB_CHAR_BASE_INFO* pInfo = NULL;
                for(int i = 0; i < iCharacterCount; i++)
                {
                    pInfo = pPacket->GetCharBaseInfo(i);
                    if(pInfo)
                    {
                        // 添加一个角色
                        CGameProcedure::s_pProcCharSel->AddCharacter(*pInfo);
                
                        CGameProcedure::s_pProcCharCreate->m_iCamp = pInfo->m_Camp;
                    }

}
                
            }
            else
            {
                CGameProcedure::s_pProcCharCreate->m_iCamp = -1;
            }

CGameProcedure::s_pEventSystem->PushEvent( GE_GAMELOGIN_CLOSE_SYSTEM_INFO);

// 转换到人物选择界面。
            if(CGameProcedure::GetActiveProcedure() == (CGameProcedure*)CGameProcedure::s_pProcCharCreate)
            {
                if(CGameProcedure::s_pProcCharCreate->m_Status == CGamePro_CharCreate::CHAR_CREATE_CREATE_OK)
                {
                    CGameProcedure::s_pProcCharCreate->ChangeToRoleSel();
                }
            }

上面流程做了两件事:

(1)在界面上显示玩家所有角色,通过AddCharacter方法执行,等下分析

(2)把流程修改为角色选择,ChangeToRoleSel()

二 AddCharacter

服务器会发送玩家角色列表,角色信息保存在这个结构里面DB_CHAR_BASE_INFO,包括GUID,名字,等级,发型等。AddCharacter函数会根据上述信息,创建角色,而且所有角色都会一次创建完毕

三 进入场景

触发条件是脚本发送命令

    // 发送进入游戏消息
    INT CGameProduce_Login::SendEnterGameMsg(LuaPlus::LuaState* state)
    {
        
        LuaStack args(state);
        if (!(args[2].IsInteger()))
        {
            TDThrow("LUA:GetBuffIconNameByIndex param parameter error");
        }

if(CGameProcedure::s_pProcCharSel)
        {
            int iRoleIndex = args[2].GetInteger();
            CGameProcedure::s_pProcCharSel->SendEnterGameMsg(iRoleIndex);

}//

return 0;
    }

根据传下来的ID,发送进入游戏的包

// 进入游戏
int CGamePro_CharSel::SendEnterGameMsg(int iRoleIndex)
{
    if((iRoleIndex < m_iCharacterCount)&&(iRoleIndex >= 0))
    {
        if(iRoleIndex < MAX_SHOW_IN_UI)
        {
            CLAskCharLogin msg;

m_EnterGameGUID = m_CharacterInfo[iRoleIndex].m_GUID;
            msg.SetCharGuid(m_EnterGameGUID);

// 删除角色
            CNetManager::GetMe()->SendPacket(&msg);
            CGameProcedure::s_pEventSystem->PushEvent( GE_GAMELOGIN_SHOW_SYSTEM_INFO_NO_BUTTON, "准备进入游戏.....");    
            return 0;
        }
    }

CGameProcedure::s_pEventSystem->PushEvent( GE_GAMELOGIN_SHOW_SYSTEM_INFO, "请选择一个角色");    
    return 1;
}

三 经过上面的发包,客户端应当进入CGamePro_Enter流程(等待进入场景流程),不过暂时没有找到更新到这个状态的合理地方,有待进一步分析

转载于:https://www.cnblogs.com/lancidie/archive/2011/04/07/2007580.html

天龙源码分析 - 选择角色流程相关推荐

  1. 天龙源码框架分析_天龙源码分析 – 选择角色流程

    一 角色选择流程开始 可能的一种情况是,客户端接到服务器发送的包(LCRetCharList)开始的,这个包里面有玩家角色的个数等信息 UINT    LCRetCharListHandler::Ex ...

  2. 天龙源码框架分析_天龙源码分析 - 客户端登录流程

    1 登录状态定义 //登录状态enumPLAYER_LOGIN_STATUS { LOGIN_DEBUG_SETTING,//! 2 登录流程采用轮回方式,在Tick中判断当前所处状态 VOID CG ...

  3. openxr runtime Monado 源码解析 源码分析:CreateInstance流程(设备系统和合成器系统)Compositor comp_main client compositor

    monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码 ...

  4. Android 音频源码分析——音量调节流程

    源码分析基于android9.0 一.声音类型 对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体.铃声.闹钟.通话,但是其系统内部则分为十几种类型. 声⾳类型用来区分不同播放用 ...

  5. Nginx源码分析:启动流程

    nginx源码分析 nginx-1.11.1 参考书籍<深入理解nginx模块开发与架构解析> nginx简介 Nginx的作为服务端软件,表现的主要特点是更快.高扩展.高可靠性.低内存消 ...

  6. Kubelet源码分析(一):启动流程分析

    源码版本 kubernetes version: v1.3.0 简介 在Kubernetes急群众,在每个Node节点上都会启动一个kubelet服务进程.该进程用于处理Master节点下发到本节点的 ...

  7. Android进阶——Small源码分析之启动流程详解

    前言 插件化现在已经是Android工程师必备的技能之一,只是学会怎么使用是不行的,所以蹭有时间研究一下Small的源码.对于插件化主要解决的问题是四大组件的加载和资源的加载,读懂所有Small源码需 ...

  8. Zookeeper源码分析:选举流程

    参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Zookeeper选举模式 针对zookeeper-3.0.0版本,选 ...

  9. MMKV_微信MMKV源码分析(一) | 整体流程

    在使用MMKV框架前,需调用以下方法进行初始化 MMKV.initialize(context); 复制代码 这里的 Java 层主要是获取到保存文件的路径,传入Native层,这里默认的路径是APP ...

最新文章

  1. shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...
  2. 打破学习的玻璃墙_打破Google背后的创新深度学习
  3. android组建之间通信_Android组件化(三)组件之间的通信
  4. C++ STL 一个简单的stack程序
  5. php5.4之分布式缓存memcache(windows7下安装配置)
  6. python实现遗传算法实例_遗传算法求解旅行商问题
  7. 3点画矩形的lisp_AutoCAD LISP矩形窗格绘制
  8. Linux文件其他操作
  9. 谈谈时间管理--陶哲轩
  10. ROS实验笔记之——JCV-450无人机初入门
  11. 2019年新个税计算器及源代码
  12. sql如何查看数据库表的关联关系?
  13. CS106B Assignment #4:Boggle
  14. 98城市联合发行全国旅游年票一卡通
  15. 青龙面板库 大全(9.6更新)
  16. java 无符号右移_java中的无符号移位运算
  17. <<和>>运算符的用法
  18. 第3.8节 Python百分号占位符的字符串格式化方法
  19. 白痴学日语系列之Last Term附语法一
  20. spring4+hibernate4+springmvc+nginx+redis实现session共享

热门文章

  1. php把数组组成xml,php 怎么将数组转xml的函数?
  2. 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
  3. linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
  4. python输入文字字符串、如何提取某个汉字_python提取字符串中的汉字数字字母
  5. 网闸与防火墙的区别是什么
  6. 【Java】内部类 语法总结
  7. 【Java】 链表的回文结构
  8. Himmelblau函数优化实战
  9. [JSOI2007]建筑抢修
  10. P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)