AD商业广告自由选择
AD商业广告自由选择

LgendM2游戏消息流程

正文概述 开源人   2024-10-16 15:40:46  

客户端OnIdle 执行QueryDynCode函数 发送加密信息与LoginGate验证Qfg1234FCOM专注游戏工具及源码例子分享

成功后 返回SM_QUERYDYNCODE 消息  客户端解密出key 用于账号加密Qfg1234FCOM专注游戏工具及源码例子分享

输入账号密码后发送CM_IDPASSWORD 至LoginGate并转发给LoginSrvQfg1234FCOM专注游戏工具及源码例子分享

解析 并返回SM_PASSWD_FAIL(失败) SM_PASSOK_SELECTSERVER(成功)Qfg1234FCOM专注游戏工具及源码例子分享

返回DefMsg := MakeDefaultMsg(SM_PASSOK_SELECTSERVER,Qfg1234FCOM专注游戏工具及源码例子分享

          nIDCost, id充值时间Qfg1234FCOM专注游戏工具及源码例子分享

          LoWord(nIPCost), ip天数Qfg1234FCOM专注游戏工具及源码例子分享

          HiWord(nIPCost),ip小时Qfg1234FCOM专注游戏工具及源码例子分享

          Config.ServerNameList.Count);服务器数量Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

客户端解析函数ClientGetPasswordOK 解析并显示服务器列表Qfg1234FCOM专注游戏工具及源码例子分享

点击事件TFrmDlg.DEngServer1Click 执行frmMain.SendSelectServer(svname);Qfg1234FCOM专注游戏工具及源码例子分享

发送 CM_SELECTSERVER =>LoginSrv => SS_OPENSESSION M2与DBS 两者同时添加SESSIONQfg1234FCOM专注游戏工具及源码例子分享

然后失败返回SM_STARTFAILQfg1234FCOM专注游戏工具及源码例子分享

成功返回 SM_SELECTSERVER_OK 执行 Qfg1234FCOM专注游戏工具及源码例子分享

ClientGetPasswdSuccess 解析出选择网关的ip 与端口 并断开与登录网关的连接Qfg1234FCOM专注游戏工具及源码例子分享

切换场景g_ConnectionStep := cnsSelChr;Qfg1234FCOM专注游戏工具及源码例子分享

当然还有新建账号 找回密码 修改密码的 类似Qfg1234FCOM专注游戏工具及源码例子分享

/////////////////////////////////////////////////////////////////////////////////////////////////////////Qfg1234FCOM专注游戏工具及源码例子分享

客户端OnIdle 继续执行QueryDynCode函数 发送CM_QUERYSELCHARCODE 给Sel网关 这只是预处理命令Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

SelChrWaitTimerTimer定时器 SendQueryChr CM_QUERYCHR 转发到DBS  的UsrSoc得到角色Qfg1234FCOM专注游戏工具及源码例子分享

成功返回SM_QUERYCHR  ClientGetReceiveChrs客户端处理Qfg1234FCOM专注游戏工具及源码例子分享

 失败SM_QUERYCHR_FAILQfg1234FCOM专注游戏工具及源码例子分享

CM_NEWCHRQfg1234FCOM专注游戏工具及源码例子分享

CM_DELCHRQfg1234FCOM专注游戏工具及源码例子分享

CM_SELCHR 返回 SM_STARTPLAY 并给账号服务器发送 FrmIDSoc.SetGlobaSessionPlay(UserInfo.nSessionID); Qfg1234FCOM专注游戏工具及源码例子分享

客户端ClientGetStartPlay 解析出 7200 并g_ConnectionStep := cnsPlay;Qfg1234FCOM专注游戏工具及源码例子分享

发送sendrunlogin sSendMsg := Format(('**%s/%s/%d/%d/%d/%s'), [LoginID, m_sCharName, Certification, CLIENT_VERSION_NUMBER, RUNLOGINCODE, Dest]);Qfg1234FCOM专注游戏工具及源码例子分享

服务端返回SM_SENDNOTICEQfg1234FCOM专注游戏工具及源码例子分享

客户端ClientGetSendNotice解析 CM_LOGINNOTICEOK 点击ok后 服务端设置m_boLoginNoticeOK:=trueQfg1234FCOM专注游戏工具及源码例子分享

 SM_CHECKCLIENT  CM_CHECKCLIENT_RESQfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

RUNGATECODE = $AA55AA55 + $00450045;Qfg1234FCOM专注游戏工具及源码例子分享

RunGate处理第一登录 HandleLoginQfg1234FCOM专注游戏工具及源码例子分享

      m_szAccount := szAccount;Qfg1234FCOM专注游戏工具及源码例子分享

      szTemp := GetValidStr3(szTemp, szCert, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

      szTemp := GetValidStr3(szTemp, szClientVerNO, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

      szTemp := GetValidStr3(szTemp, szCode, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

      szTemp := GetValidStr3(szTemp, szHarewareID, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

szTemp := Format('**%s/%s/%s/%s/%s/%s', [szAccount, szCharName, szCert, szClientVerNO, szCode, MD5Print(m_xHWID)]);Qfg1234FCOM专注游戏工具及源码例子分享

      pszLoginPacket[0] := '#';Qfg1234FCOM专注游戏工具及源码例子分享

      pszLoginPacket[1] := '0';Qfg1234FCOM专注游戏工具及源码例子分享

      pszLoginPacket[Len + 2] := '!';Qfg1234FCOM专注游戏工具及源码例子分享

      m_fHandleLogin := 2;Qfg1234FCOM专注游戏工具及源码例子分享

SendFirstPack(StrPas(pszLoginPacket));Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

最终交给ProcessDelayMsg 发送给m2Qfg1234FCOM专注游戏工具及源码例子分享

m_tLastGameSvr.SendBuffer(DelayMsg.pBuffer, DelayMsg.nBufLen);Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

m2 接受消息处理 ExecGateMsg  GM_DATA:核心处理Qfg1234FCOM专注游戏工具及源码例子分享

首次登陆 DoClientCertificationQfg1234FCOM专注游戏工具及源码例子分享

        sData := Copy(sData, 3, Length(sData) - 2);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sAccount, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sChrName, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sCodeStr, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sClientVersion, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sIdx, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

        sData := GetValidStr3(sData, sHWID, ['/']);Qfg1234FCOM专注游戏工具及源码例子分享

验证成功后 FrontEngine.AddToLoadRcdList  添加到m_LoadRcdListQfg1234FCOM专注游戏工具及源码例子分享

TFrontEngine.ProcessGameData() 与dbserver交互数据 具体的发包函数在 RunDB单元Qfg1234FCOM专注游戏工具及源码例子分享

SendDBSockMsg 执行发包操作Qfg1234FCOM专注游戏工具及源码例子分享

首次登陆后在线人物执行Qfg1234FCOM专注游戏工具及源码例子分享

ProcessUserMessageQfg1234FCOM专注游戏工具及源码例子分享

处理来自客户端的 CM_类消息 交由ObjBase单元处理Qfg1234FCOM专注游戏工具及源码例子分享

游戏的逻辑 消息都是加入一个链表中排队处理 不然会导致数据混乱Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

TUserEngine。ProcessHumansQfg1234FCOM专注游戏工具及源码例子分享

UserOpenInfo人物信息保存到这个结构上Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

  SendSocket(EncodeString(sSendMsg));Qfg1234FCOM专注游戏工具及源码例子分享

服务端 发送SM_SENDNOTICE 客户端ClientGetSendNotice解析弹出公告 然后玩家发生CM_LOGINNOTICEOKQfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

CM_QUERYDELCHRQfg1234FCOM专注游戏工具及源码例子分享

CM_GETBACKDELCHR//这几个都是主动触发Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

也就是说 同一账号的会话标识SessionID必须一致 (M2 LoginSrv DBS)Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

登录步骤 g_ConnectionStepQfg1234FCOM专注游戏工具及源码例子分享

cnsLogin 发送登录请求与LoginGate验证  Qfg1234FCOM专注游戏工具及源码例子分享

cnsSelChr 发送角色请求与SelGate验证Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享

 Qfg1234FCOM专注游戏工具及源码例子分享



声明:本文系互联网搜索而收集整理,不以盈利性为目的,文字、图文资料源于互联网且共享于互联网。
如有侵权,请联系 yao4fvip#qq.com (#改@) 删除。