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

本文详细分析了天龙源码中角色选择的流程,包括客户端如何显示角色列表,如何根据角色信息创建角色,以及如何响应脚本命令进入游戏场景。在角色选择过程中,客户端接收到服务器的角色列表后,调用AddCharacter方法创建角色,并通过SendEnterGameMsg发送进入游戏的消息。进入游戏阶段,客户端发送请求并等待进入场景。
摘要由CSDN通过智能技术生成

一 角色选择流程开始

可能的一种情况是,客户端接到服务器发送的包(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流程(等待进入场景流程),不过暂时没有找到更新到这个状态的合理地方,有待进一步分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值