作者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
1F:推 NDark:玩家谈话 统一套 [TELL] 关键字不就好了? 03/16 18:49
2F:推 asoedarren:建议command放header 不要跟资料混在一起 03/16 18:52
3F:→ green0924:回nd大,这样的话[tell]也要限制玩家聊天时不可使用.. 03/16 18:55
4F:→ green0924:as大说的不太了解,方便举一些例子吗..@@ 03/16 18:56
5F:→ green0924:我现在都是用 [cmd]指令 参数(资料)[/cmd],这样才有办法 03/16 18:57
6F:→ green0924:得知传递的东西到哪边结束. 03/16 18:58
7F:推 darkflier:这种东西要先在client判断好 然後直接送讯息ID就好啦 03/16 19:04
8F:→ darkflier:不要加重server的负担 03/16 19:04
9F:推 NDark:玩家按下送出 由系统统一挂上[TELL] 03/16 19:10
10F:→ NDark:系统的指令送出时统一挂上 [SYS] 03/16 19:10
11F:→ NDark:字尾就一律由系统挂上[END]<---只有最後一个才是真的 03/16 19:11
12F:→ NDark:规则订好除非protocol被破解(有疑虑就要另外在加秘) 03/16 19:12