傳奇原始碼分析-客戶端(遊戲邏輯處理源分析二)
5.接受登入成功後,接收GameSrv伺服器傳送的訊息:
接收GameGate傳送的訊息:CClientSocket::OnSocketMessage的FD_READ事件中,PacketQ.PushQ((BYTE*)pszPacket);把接收到的訊息,壓入PacketQ佇列中。處理PacketQ佇列資料是由CGameProcess::Load()時呼叫OnTimer在CGameProcess::OnTimer中處理的,
處理過程為:
OnMessageReceive;
ProcessPacket();
ProcessDefaultPacket();
OnMessageReceive函式;
1. 判斷是否收到心跳資料包,傳送'*',傳送心跳資料包。
2. 呼叫OnSocketMessageRecieve函式。這個函式裡面詳細處理了客戶端的遊戲執行邏輯。如果是‘+’開頭(資料包)則呼叫OnProcPacketNotEncode處理這種型別資料包。否則得到_TDEFAULTMESSAGE資料包,進行遊戲邏輯處理。
OnProcPacketNotEncode說明:
收到GameSrv伺服器的相應訊息:
"GOOD":可以執行動作。 m_bMotionLock為假。
"FAIL":不允許執行動作。人物被拉回移動前位置。
"LNG":
"ULNG":
"WID":
"UWID":
"FIR":
"UFIR":
"PWR":
3. CGameProcess::OnSocketMessageRecieve(char *pszMsg)函式。處理遊戲相關的訊息。
SM_SENDNOTICE: 伺服器提示資訊:
SM_NEWMAP: 使用者登入後,伺服器傳送的初始化地圖訊息。
SM_LOGON: 使用者登入訊息(伺服器處理後返回結果)。使用者登入成功後,在本地建立遊戲物件,併傳送訊息,請求返回使用者物品清單(魔法,等級,物品等)。
SM_MAPDESCRIPTION: 得到伺服器傳送的地圖的描述資訊。
SM_ABILITY:伺服器傳送的本玩家金錢,職業資訊。
SM_WINEXP:
SM_SUBABILITY : 伺服器傳送的玩家技能(魔法,殺傷力,速度,毒藥,中毒恢復,生命恢復,符咒恢復)
SM_ SM_SENDMYMAGIC: 使用者魔法列表資訊。
SM_MAGIC_LVEXP: 魔法等級列表。
SM_BAGITEMS:使用者物品清單 (玩家CM_QUERYBAGITEMS訊息)
SM_SENDUSEITEMS:使用者裝備清單
SM_ADDITEM: 揀東西
SM_DELITEM: 丟棄物品。
等等。
4. 部分資料未處理,加入m_xWaitPacketQueue佇列中由ProcessPacket處理。
新登入遊戲玩家:在OnSocketMessageRecieve函式中依次收到的訊息為:
1. GameSrv 伺服器ProcessLogin執行緒返回GameGate伺服器後返回的:
AddProcess(this, RM_LOGON, 0, 0, 0, 0, NULL);加入登入訊息。
SM_NEWMAP, SM_LOGON, SM_USERNAME, SM_MAPDESCRIPTION訊息
AddProcess(this, RM_ABILITY, 0, 0, 0, 0, NULL); 等級
SM_ABILITY
AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
SM_SUBABILITY
AddProcess(this, RM_DAYCHANGING, 0, 0, 0, 0, NULL); 校時
SM_DAYCHANGING
AddProcess(this, RM_SENDUSEITEMS, 0, 0, 0, 0, NULL); 裝備
SM_SENDUSEITEMS
AddProcess(this, RM_SENDMYMAGIC, 0, 0, 0, 0, NULL); 魔法
SM_SENDMYMAGIC
客戶端收到訊息後相應的處理:
SM_NEWMAP 接受地圖訊息 OnSvrMsgNewMap
初始化玩家座標,m_xMyHero.m_wPosX = ptdm->wParam;
m_xMyHero.m_wPosY = ptdm->wTag;
載入地圖檔案 m_xMap.LoadMapData(szMapName);
設定場景。 m_xLightFog.ChangeLightColor(dwFogColor);
SM_LOGON 返回登入訊息 OnSvrMsgLogon
m_xMyHero.Create初始化玩家資訊(頭髮,武器,載入圖片等),設定玩家
地圖m_xMyHero.SetMapHandler(&m_xMap),建立使用者魔法。加入m_xMagicList列表,pxMagic->CreateMagic, m_xMagicList.AddNode(pxMagic);並向伺服器傳送CM_QUERYBAGITEMS訊息(使用者物品清單,血,氣,衣服,兵器等)。
SM_USERNAME 獲取玩家的遊戲角色名字。
SM_MAPDESCRIPTION 地圖對應的名字。
SM_BAGITEMS 使用者物品清單 (玩家CM_QUERYBAGITEMS訊息)
SM_CHARSTATUSCHANGED 通知玩家狀態改變訊息(攻擊力,狀態)。
SM_ABILITY 玩家金錢,職業
SM_SUBABILITY 玩家技能(魔法,殺傷力,速度,毒藥,中毒恢復,生命恢復,符
咒恢復)
SM_DAYCHANGING 返回遊戲狀態。(Day, Fog)讓客戶端隨著伺服器的時間,載入不同場景。
SM_SENDUSEITEMS 使用者裝備清單
SM_SENDMYMAGIC 使用者魔法列表資訊。
總結:
客戶端連線到GameGate遊戲閘道器伺服器,並通過GameSrv伺服器驗證之後,就會收到GameSrv伺服器發來的訊息。主要是地圖訊息,登入訊息,玩家的裝備,技能,魔法,個人設定等等。GameSrv把地圖分成若干塊,把該玩家加入其中一塊,並加入這一塊的使用者物件列表中,設定其狀態為OS_MOVINGOBJECT。客戶端載入地圖,設定場景,設定自己的玩家狀態(此時還沒有怪物和其它玩家,所以玩家還需要接收其它遊戲玩家和怪物的清單列表)。
相關文章
- external-attacher原始碼分析(2)-核心處理邏輯分析原始碼
- kube-scheduler原始碼分析(2)-核心處理邏輯分析原始碼
- Tars-Java客戶端原始碼分析Java客戶端原始碼
- MapReduce——客戶端提交任務原始碼分析客戶端原始碼
- Netty原始碼分析(三):客戶端啟動Netty原始碼客戶端
- Fabric 1.0原始碼分析(36) Peer #EndorserClient(Endorser客戶端)原始碼client客戶端
- vscode原始碼分析【二】程式的啟動邏輯VSCode原始碼
- Vue2原始碼分析-邏輯梳理Vue原始碼
- Petstore原始碼追蹤記(3)-商業邏輯處理(二) (轉)原始碼
- Fabric 1.0原始碼分析(37) Peer #DeliverClient(Deliver客戶端)原始碼client客戶端
- Fabric 1.0原始碼分析(38) Peer #BroadcastClient(Broadcast客戶端)原始碼ASTclient客戶端
- spring事務管理原始碼分析(二)事務處理流程分析Spring原始碼
- Kafka原始碼分析(四) - Server端-請求處理框架Kafka原始碼Server框架
- Linux程式排程邏輯與原始碼分析Linux原始碼
- 邏輯分析
- Mapreduce原始碼分析分片、處理流程原始碼
- 【Zookeeper】原始碼分析之請求處理鏈(二)之PrepRequestProcessor原始碼
- Springboot中mybatis執行邏輯原始碼分析Spring BootMyBatis原始碼
- 打通前後端邏輯,客戶端Flutter程式碼一天上線後端客戶端Flutter
- 短影片原始碼,實現預處理防止客戶端頻繁請求原始碼客戶端
- SpringCloud 原始碼學習筆記2——Feign宣告式http客戶端原始碼分析SpringGCCloud原始碼筆記HTTP客戶端
- metaforce佛薩奇模式系統開發邏輯分析模式
- USB 邏輯分析儀分析丟包怎麼分析(lecroy USB 邏輯分析儀)
- Redis客戶端選型再分析Redis客戶端
- Kafka 處理器客戶端介紹Kafka客戶端
- MyBatis原始碼分析之核心處理層MyBatis原始碼
- Laravel Excpetions(錯誤處理) 原始碼分析Laravel原始碼
- Sidekiq 訊號處理原始碼分析IDE原始碼
- Nginx(二): worker 程式處理邏輯-流程框架Nginx框架
- 關於CAS SSO單點登入客戶端環境搭建原始碼分析客戶端原始碼
- 武器系統邏輯程式碼分析
- 區塊鏈遊戲DAO模式開發應用技術(邏輯及原始碼分析)區塊鏈遊戲模式原始碼
- Fabric 1.0原始碼分析(17)gossip(流言演算法) #deliverclient(deliver客戶端)原始碼Go演算法client客戶端
- 故障分析 | 從 Insert 併發死鎖分析 Insert 加鎖原始碼邏輯原始碼
- python socketserver處理客戶端的流程PythonServer客戶端
- Redis 是如何處理命令的(客戶端)Redis客戶端
- ZooKeeper客戶端事件序列化處理客戶端事件
- 億憶網客戶端原始碼開源!歡迎探討!客戶端原始碼