长亭外,古道边,芳草碧连天

身披半件长工衣,怀揣一颗地主心

用户操作
[即时聊天] [发私信] [加为好友]
白云哥ID:lfhfut
30867次访问,排名4028,好友4人,关注者11人。
长亭外,古道边,芳草碧连天
lfhfut的文章
原创 38 篇
翻译 1 篇
转载 0 篇
评论 31 篇
白云哥的公告
MSN:beyondlimit2001@hotmail.com
最近评论
Ellan:还有,那个位置点也应该是三维的吧(以防止不在同一高度的玩家却能相互攻击),3个int型就是12字节,再加上玩家状态信息,每秒钟10个15字节左右的包是不是大了点。。。
Ellan:可我觉得,服务器在收到包(含有当前位置和移动方向)的时候还是得计算啊,比如根据上个包的移动方向和两包的间隔时间计算出玩家应在的位置,这样才能防外挂吧?
不然玩家非法修改当前位置的数据,岂不就能瞬移了。。
Ellan:可我觉得,服务器在收到包(含有当前位置和移动方向)的时候还是得计算啊,比如根据上个包的移动方向和两包的间隔时间计算出玩家应在的位置,这样才能防外挂吧?
不然玩家非法修改当前位置的数据,岂不就能瞬移了。。
Ocean:客户端就以10HZ的频率不停向服务器报告自己的当前位置及移动方向状态,服务器再将这个信息向周围玩家广播。
我跟踪mangos发现她是不断有一个heartbeat 数据包,但是似乎不像是10HZ ( 1秒钟10次?)那么高
否则这样的数据量是不是太恐怖了?
还有,方向转动如何同步? 这也需要做类似于移动同步的事情吧,网延也有可能导致双方的转动有视觉上的误差
Ocean:客户端就以10HZ的频率不停向服务器报告自己的当前位置及移动方向状态,服务器再将这个信息向周围玩家广播。
我跟踪mangos发现她是不断有一个heartbeat 数据包,但是似乎不像是10HZ ( 1秒钟10次?)那么高
否则这样的数据量是不是太恐怖了?
还有,方向转动如何同步? 这也需要做类似于移动同步的事情吧,网延也有可能导致双方的转动有视觉上的误差
文章分类
收藏
    相册
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 WoW的WDB数据收藏

    新一篇: M2及WMO导入插件 (Max8) | 旧一篇: 数据接收中粘包及半包的处理

        WOW中的WDB数据用于保存在游戏中看到过的对象的描述信息,包括物品(Item)、游戏对象(GameObject)、任务(Quest)、生物(Creature)等等。


        在我以前参与制作的游戏中,游戏中的对象属性会强制地分为服务端属性和客户端属性两部分,并且会以两个独立的文件来保存。每次增加或者修改游戏中的一个对象属性都有可能需要同时对这两个文件进行修改,并且做好两个表的对应关系。另外客户端属性表的内容发生改变时必须通过客户端版本升级的方式来发布。
        这样做最大的问题是同时修改两个表容易引起错误,另外需要升级客户端版本也会给玩家带来很大的不便。虽然升级的数据量并不大,但也会给玩家不种不好的感受。

        在WOW中,使用了WDB的cache文件后,其本质上并没有变化,对象的属性还是有服务器属性和客户端属性两部分,但记录的数据不需要分成两个文件,所有的数据都放在服务器上,由程序来为客户端生成相应的文件。而且这些文件的内容只在需要时才产生,并不会一次将所有的数据都发给客户端。这样做以后,策划的工作简单了许多。

        WOW的WDB文件中记录了该文件产生时的客户端版本号,当检测到某个文件中的版本信息与当前客户端版本不一致时,会重建cache数据。也就是说,每次客户端版本升级后都会清空客户端的cache数据。并且,cache数据只在客户端版本升级时才重建。
        这样便引入了一个问题:假设在游戏运行过程中,希望更改某个对象的属性,比如修改物品描述中的一个错别字,或者修改某件物品的售卖价格。服务器端一般会支持在不停机的情况下修改这些配置信息,但修改后的信息却不能立即反馈到客户端。而且即使服务器维护后,如果没有升级客户端版本,也是一样看不到最新的信息。
        在WOW中,实际情况也确实如此。我们从WOW的版本更新说明中可以看到一些如“迅猛龙改名为橄榄色迅猛龙来进行更好的描述”和“修改了艾尔文森林管理员莱琳说话中的语法错误”之类的更新信息。其实这些信息都是保存在服务器上,由服务器发给客户端,但是在客户端做了cache,所以要想更新这些信息,除了修改服务器上的数据外,还需要让客户端删除cache,这只有在客户端版本升级的时候才能实现。当然,WOW这样做也许是另一个目的:不在背后偷偷地修改内容。谁知道呢 :)

        那么有没有办法既使用cache还来的好处,又可以在游戏运行过程中动态地修改对象属性呢?人非圣贤,孰能无过?起码得给个立即改过自新的机会吧 :)
        很自然地可以想到,让客户端主动向服务器请求验证数据是否发生了改变。请求的时机可以在客户端需要显示某条属性信息时。客户端会把该信息的编号连同该信息的校验值发给服务器,服务器校验数据,如果未改变,可以直接忽略此条消息,如果数据发生了改变,则返回最新的数据内容给客户端,客户端用新的内容更新cache,这样便实现了数据的动态更改。另外当然不能在每次需要显示数据时都请求校验一次,这样便失去cache的意义了,可以在客户端限制为在线的时间段内,每条信息只会请求验证一次。

        最后就是WDB中到底需要cache哪些数据。在WOW中,客户端数据库文件分为两种:一为DBC文件,另一就是WDB文件。基本上游戏世界的配置信息保存为DBC文件,这些数据只在客户端版本升级时才会改变。WDB即为cache数据,都为游戏内容相关的属性数据,也是游戏中会显示出来的数据。目前已知的有:生物类,保存显示名称、描述以及图标等信息。游戏对象类,指地图上的动态小物件,如火盆、商店招牌、路标等道具的名称信息。任务信息类,记录在游戏中看到过的所有任务的描述、需要搜索的物品、奖励物品、经验值等显示信息。物品类,记录在游戏中看到过的所有物品对象的名称、描述、买卖价格等信息。 

     

    附上将wdb文件转为csv文件的一段代码,目前只转了creaturecache.wdb、gameobjectcache.wdb、questcache.wdb三个文件

    http://helloqinglan.googlepages.com/WDBReader.rar

    发表于 @ 2006年10月12日 23:41:00|评论(loading...)|编辑

    新一篇: M2及WMO导入插件 (Max8) | 旧一篇: 数据接收中粘包及半包的处理

    评论

    #hihi 发表于2007-09-28 19:36:02  IP: 202.101.162.*
    嘿嘿,同志啊,喜欢研究些小玩意~
    #小黑 发表于2008-08-23 23:20:02  IP: 124.79.211.*
    WOW的这个技术还是值得借鉴的呵呵,既节约客户端的size,又方便了策划的工作,对服务器的压力也不是很重.
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 白云哥