Re: [請益] client端的指令(字串)分析

看板GameDesign (遊戲設計)作者 (胖有錯嗎?)時間16年前 (2009/03/16 19:13), 編輯推噓3(309)
留言12則, 3人參與, 最新討論串2/2 (看更多)
突然想回文賺個p幣XD 在這種字串的掃描中 絕對不要丟給server去做字串的掃描 應該要在Client端先判定好這個訊息是要幹嘛 然後在封包的起始值給予訊息ID 讓server去判斷這個訊息是否需要解壓 取出其中的內容 或是只是單純的將這封包在轉送給畫面中的人 不然serve光是處理這些有的沒的封包就浪費一堆頻寬跟時間了 最簡單最沒營養的就是對話封包 只要判斷訊息是對話然後取得傳送對象之後 將內容原封不動以壓縮過的資料傳出可以省一點點頻寬也省了記憶體mapping的時間 不過每個人的習慣都不同有的人覺得這樣訊息事件過於龐大 很不好整理 比較喜歡多table去互相索引找出事件 這點就看個人爽了... ※ 引述《green0924 (hmm...)》之銘言: : 請問一下大家,像一般線上遊戲,由server端傳資料給client :  ,都是怎麼做字串的分析的呢? :  我現在都是用很笨的做法,逐字去檢查以取得指令的前後端, :  再由此取得指令與參數,比如說server端傳給client這樣的字 : 串.. : [cmd]kill monster 1[/cmd] : 先計算字串長度,再用迴圈跑,刪除掉[cmd]跟[/cmd],就可 :  以得到 kill monster 1,其中 kill是指令, monster 1 是 :  參數,由此再做動作。 : ex: :   for(i=0;i<sizeof(s);i++){ : if((i+4)>sizeof(s)) break; : if(s[i..(i+4)]=="[cmd]") start=i; : if(s[i..(i+5)]=="[/cmd]") end=i; : } : 感覺這樣的方法效率滿差的,尤其當資料量大的時候..XD : 不知道有沒有其他更好的方法呢? :   : 另外,字串分析時,要是玩家在用聊天功能有出現[cmd]這樣 :  的系統字,字串分析就會出問題,所以玩家輸入部份,我的 :  方法是限制不可使用系統字,不知道線上遊戲都是怎麼做的? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.116.118.21

03/16 19:14, , 1F
剛剛沒仔細看原來是serve傳給client資料XDDD
03/16 19:14, 1F

03/16 19:15, , 2F
不過方法都一樣啦不要讓費時間在分析以知資料
03/16 19:15, 2F

03/16 19:15, , 3F
只有發出訊息的那個人需要去分析即可
03/16 19:15, 3F

03/16 19:16, , 4F
所以大大意思是,若常重覆出現的訊息或資料就存在client
03/16 19:16, 4F

03/16 19:17, , 5F
端..ex: A使用技能X攻擊B,造成10點傷害.
03/16 19:17, 5F

03/16 19:17, , 6F
資料就只要傳 A atk B,10 這樣嗎?
03/16 19:17, 6F
Orz..... 最近在減肥所以沒去吃晚餐就回應你一下好了 訊息的傳送 理論上會有幾種方法 最基本的封包會有 1.message Event ID 2.subID 3.data size 4.data_content 1.代表這訊息的ID 可能是對話可能是攻擊可能是移動....else ex: MESSAGE_TALK = 0 MESSAGE_ATTACK = 1 MESSAGE_GAMEOVER = 2 MESSAGE_PLAY = 3 2.subID就不一定會用到 用到的時候大多是快速的再做封包傳遞的時候使用 例如可能是立即傳送給其他玩家或是檢查之類的訊息 3.就是這包封包整個的size有多大 看到這裡我們可以知道這個封包前面三個資料的大小一定是固定的 所以真正的資料是放在壓縮過的封包裡面 至於壓縮解壓縮的過程就不詳提看個家做法 所以你現在有問題的部分是死在1 你需要的不是去檢查他傳過來的字串 是要檢查他這個ID是要幹什麼的 不過聽你的講法好像你完全不是這樣搞Orz..... 像你所提到的 tag 內容 tag/ 這時候你要做的是把你的tag編一個ID 然後傳送出去 並把內容做好壓縮(或不壓也看端看資料流量) 所以你收到的訊息之後就立刻知道這ID是要幹嘛的 然後就把資料解開去做你要做的事情 以上 不過每個人用法都不同不過都大同小異啦... 如果你相信大家電腦都很好server超級強壯 也是可以直接用字串去判斷現在要幹嘛就是啦XDDD 不過這樣你在判斷那邊可能......會寫到吐血吧 我個人是偏好多table index 這樣在寫成是比較好理解也可以畫出圖讓人一目了然 每個ID互隊的關係... 最後... 我已經四年沒寫過網路程試 搞不好這套已經落伍很久了XDDDDD ※ 編輯: darkflier 來自: 122.116.118.21 (03/16 19:30)

03/16 19:20, , 7F
訊息ID..這個是指.. ex: 1--使用技能a, 2--使用技能b
03/16 19:20, 7F

03/16 19:20, , 8F
109--跟npc xx對話
03/16 19:20, 8F

03/16 19:20, , 9F
類似這樣的東西?
03/16 19:20, 9F

03/16 19:21, , 10F
簡單有簡單的作法,難有難的作法.也不一定全部都查表.
03/16 19:21, 10F

03/16 19:42, , 11F
終於瞭解了,於來是這樣子的用法,這樣就不用逐字分析了
03/16 19:42, 11F

03/16 19:43, , 12F
謝謝大大的說明囉~^_____^ (這篇板主應該要M起來的)
03/16 19:43, 12F
文章代碼(AID): #19lZGySp (GameDesign)
討論串 (同標題文章)
文章代碼(AID): #19lZGySp (GameDesign)