天龙源码分析 - 选择角色流程
一 角色选择流程开始
可能的一种情况是,客户端接到服务器发送的包(LCRetCharList)开始的,这个包里面有玩家角色的个数等信息
{
__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
天龙源码分析 - 选择角色流程相关推荐
- 天龙源码框架分析_天龙源码分析 – 选择角色流程
一 角色选择流程开始 可能的一种情况是,客户端接到服务器发送的包(LCRetCharList)开始的,这个包里面有玩家角色的个数等信息 UINT LCRetCharListHandler::Ex ...
- 天龙源码框架分析_天龙源码分析 - 客户端登录流程
1 登录状态定义 //登录状态enumPLAYER_LOGIN_STATUS { LOGIN_DEBUG_SETTING,//! 2 登录流程采用轮回方式,在Tick中判断当前所处状态 VOID CG ...
- openxr runtime Monado 源码解析 源码分析:CreateInstance流程(设备系统和合成器系统)Compositor comp_main client compositor
monado系列文章索引汇总: openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读 openxr runtime Monado 源码解析 源码 ...
- Android 音频源码分析——音量调节流程
源码分析基于android9.0 一.声音类型 对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体.铃声.闹钟.通话,但是其系统内部则分为十几种类型. 声⾳类型用来区分不同播放用 ...
- Nginx源码分析:启动流程
nginx源码分析 nginx-1.11.1 参考书籍<深入理解nginx模块开发与架构解析> nginx简介 Nginx的作为服务端软件,表现的主要特点是更快.高扩展.高可靠性.低内存消 ...
- Kubelet源码分析(一):启动流程分析
源码版本 kubernetes version: v1.3.0 简介 在Kubernetes急群众,在每个Node节点上都会启动一个kubelet服务进程.该进程用于处理Master节点下发到本节点的 ...
- Android进阶——Small源码分析之启动流程详解
前言 插件化现在已经是Android工程师必备的技能之一,只是学会怎么使用是不行的,所以蹭有时间研究一下Small的源码.对于插件化主要解决的问题是四大组件的加载和资源的加载,读懂所有Small源码需 ...
- Zookeeper源码分析:选举流程
参考资料 <<从PAXOS到ZOOKEEPER分布式一致性原理与实践>> zookeeper-3.0.0 Zookeeper选举模式 针对zookeeper-3.0.0版本,选 ...
- MMKV_微信MMKV源码分析(一) | 整体流程
在使用MMKV框架前,需调用以下方法进行初始化 MMKV.initialize(context); 复制代码 这里的 Java 层主要是获取到保存文件的路径,传入Native层,这里默认的路径是APP ...
最新文章
- shiro 同时实现url和按钮的拦截_一个“保存”按钮同时存在“增删改”三种操作,该如何去实现?...
- 打破学习的玻璃墙_打破Google背后的创新深度学习
- android组建之间通信_Android组件化(三)组件之间的通信
- C++ STL 一个简单的stack程序
- php5.4之分布式缓存memcache(windows7下安装配置)
- python实现遗传算法实例_遗传算法求解旅行商问题
- 3点画矩形的lisp_AutoCAD LISP矩形窗格绘制
- Linux文件其他操作
- 谈谈时间管理--陶哲轩
- ROS实验笔记之——JCV-450无人机初入门
- 2019年新个税计算器及源代码
- sql如何查看数据库表的关联关系?
- CS106B Assignment #4:Boggle
- 98城市联合发行全国旅游年票一卡通
- 青龙面板库 大全(9.6更新)
- java 无符号右移_java中的无符号移位运算
- <<和>>运算符的用法
- 第3.8节 Python百分号占位符的字符串格式化方法
- 白痴学日语系列之Last Term附语法一
- spring4+hibernate4+springmvc+nginx+redis实现session共享
热门文章
- php把数组组成xml,php 怎么将数组转xml的函数?
- 禅道设置bug模板_JPress v3.0 beta.2 发布,修复 bug 和完善产品细节
- linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
- python输入文字字符串、如何提取某个汉字_python提取字符串中的汉字数字字母
- 网闸与防火墙的区别是什么
- 【Java】内部类 语法总结
- 【Java】 链表的回文结构
- Himmelblau函数优化实战
- [JSOI2007]建筑抢修
- P4619 [SDOI2018]旧试题(莫比乌斯反演,建图优化三重枚举,三元环计数,神仙好题,超级清晰易懂)