作者green0924 (hmm...)
看板GameDesign
標題[請益] client端的指令(字串)分析
時間Mon Mar 16 18:42:26 2009
請問一下大家,像一般線上遊戲,由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: 220.133.117.77
推 NDark:玩家談話 統一套 [TELL] 關鍵字不就好了? 03/16 18:49
推 asoedarren:建議command放header 不要跟資料混在一起 03/16 18:52
→ green0924:回nd大,這樣的話[tell]也要限制玩家聊天時不可使用.. 03/16 18:55
→ green0924:as大說的不太瞭解,方便舉一些例子嗎..@@ 03/16 18:56
→ green0924:我現在都是用 [cmd]指令 參數(資料)[/cmd],這樣才有辦法 03/16 18:57
→ green0924:得知傳遞的東西到哪邊結束. 03/16 18:58
推 darkflier:這種東西要先在client判斷好 然後直接送訊息ID就好啦 03/16 19:04
→ darkflier:不要加重server的負擔 03/16 19:04
推 NDark:玩家按下送出 由系統統一掛上[TELL] 03/16 19:10
→ NDark:系統的指令送出時統一掛上 [SYS] 03/16 19:10
→ NDark:字尾就一律由系統掛上[END]<---只有最後一個才是真的 03/16 19:11
→ NDark:規則訂好除非protocol被破解(有疑慮就要另外在加秘) 03/16 19:12