CWDG论坛-专业魔兽插件's Archiver

月色狼影 发表于 2007-9-11 01:02

mobmap数据库分析与初步构架(1)

[size=5]Update and download机制[/size]

fr在前面也进行过研究 参考地址 [url=http://bbs.cwowaddon.com/thread-203-1-4.html]http://bbs.cwowaddon.com/thread-203-1-4.html[/url]

mobmap已经发布
数据库我这几天进行了一些思考

简易的工作流程:
[attach]2799[/attach]

用户收集的数据首先通过更新器上传到服务器缓存端. 首先数据进行[color=red]预处理.[/color][color=black]通过scanning文件内容查找到三个关键函数:[/color]
mobmap_language = "xxxx" 代号zhCN zhTW enUS 这个是判断数据语言是哪种
mobmap_game_version = "2.1.4|cn3.grunt.wowchina.com" 其中含有游戏的版本号以及服务器地址.

必须符合以上条件方可进入下一步.有效的避免其他语言以及SF的干扰.

第二步 通过分析程序将收集的数据进行分类
mobmap_positionsmobmap_quests
mobmap_merchantstock
mobmap_tradeskills
mobmap_lootmob
map_objects
mobmap_trainer
....

然后归类进入数据库

第四步 导出已经数据的运算 huffman core的应用
第五步 传输到用户端.


提问:
[color=#008000]mobmap_scanning = true[/color]
[color=#008000]不知道是啥意思[/color]
[color=#008000][/color]
[color=#008000]这个是第一个框架  大家看看有什么意见以及问题[/color]
[color=#008000]第二个构架 还在研究[/color]

月色狼影 发表于 2007-9-11 03:47

Update data format index

根据fr在前面的分析 我在添加点内容
是在本次1.54新增的

所需要上传的文件是保存在wtf/account/帐号/SavedVariables下的 mobmap.lua

[b]mobmap_position[/b]
  用以存储mob/npc 等级 坐标数据

[b]mobmap_quests
[/b]  用以存储任务数据

[b]mobmap_merchantstock[/b]
  用以存储商人出售物品数据

[b]mobmap_tradeskills[/b]
  用以存储专业技能,制作物品,附魔数据

[b]mobmap_loot[/b]
  用以存储怪物掉落物品数据

[b]mobmap_objects[/b]      
       用以存储那种以 通缉这类任务的文本

[b]mobmap_trainer[/b]        
        用以存储训练师的数据.

月色狼影 发表于 2007-9-11 03:51

download data format index

此表来源于fr的研究  [url=http://bbs.cwowaddon.com/viewthread.php?tid=203&page=1#pid1438]http://bbs.cwowaddon.com/viewthread.php?tid=203&page=1#pid1438[/url]
在1.54新增了一些内容
数据通过更新器下载到 wow目录/interface/addons/mobmap下

[b]MobMapDatabase_fishingpickupdata[/b]   
    mobmap_fishingpickupindex
    mobmap_fishingpickuppointers
    mobmap_fishingpickupdata

[b]MobMapDatabase_herbspickupdata[/b]
    mobmap_herbpickupindex
    mobmap_herbpickuppointers
    mobmap_herbpickupdata

[b]MobMapDatabase_itemdropdata[/b]   
    mobmap_itemdropdataindex
    mobmap_itemdropdata
    mobmap_instancelist (新增BOSS掉落数据)
    mobmap_itemsourcecrates (新增)

[b]MobMapDatabase_itemnamehelper[/b]
     mobmap_itemnamehelperlist
     mobmap_itemnamehelperdata

[b]MobMapDatabase_itemtooltipdata (新增)[/b]
    mobmap_itemtooltipindex
    mobmap_itemtooltipdata
    mobmap_itemtooltipdata_huffmantree
    mobmap_itemtooltipdata_precodingtable

[b]MobMapDatabase_merchants[/b]
    mobmap_merchants
    mobmap_merchantitemdata
    mobmap_merchanttokennames
    mobmap_merchanttokenicons

[b]MobMapDatabase_metadata[/b]
    mobmap_dbinfo  (数据库信息)
    mobmap_zones

[b]MobMapDatabase_miningpickupdata[/b]
    mobmap_miningpickupindex
    mobmap_miningpickuppointers   
    mobmap_miningpickupdata

[b]MobMapDatabase_mobnames[/b]
    mobmap_mobs
    mobmap_mobpointers
    mobmap_mobdetails

[b]MobMapDatabase_positions[/b]
     mobmap_data

[b]MobMapDatabase_questpickupdata
[/b]     mobmap_questpickupindex
     mobmap_questpickuppointers
     mobmap_questpickupdata

[b]MobMapDatabase_quests[/b]
      mobmap_questnames
      mobmap_questdata
      mobmap_questrewarddata
      mobmap_questobjdata
      mobmap_questobjdata_huffmantree
      mobmap_questobjdata_precodingtable
      mobmap_queststartitems

[b]MobMapDatabase_recipes[/b]
      mobmap_tradeskilllist
      mobmap_tradeskilldata
      mobmap_tradeskillreagentdata
      mobmap_tradeskillreagentmappings

biggates 发表于 2007-9-11 10:27

根据对 MobMap.lua 的分析,mobmap_scanning 是对MobMap是否进行记录的一个开关,默认打开。当mobmap_scanning 为 true 时,会对当前目标、物品拾取和任务进行记录。在目前的版本中,仅对 1189 行[code]if(mobmap_scanning==true and (GetLocale()~="deDE" and GetLocale()~="enUS" and GetLocale()~="enGB" and GetLocale()~="zhCN")) then[/code]所规定的语种生效。

另:mobmap_game_version 建议使用正则表达式判断,以适应版本更新的情况。理论上所有数据应该有其对应的版本属性,以便于对WoW版本更新导致的物品/任务变化进行处理。但这样一来将耗费大量空间。

另:如何对 MobMap 现有的数据库存在的偏差进行分析处理,是个难题。难道要人工进行?

UnrealIce 发表于 2007-9-11 14:31

你的图中,server database是指什么?如果指的是生成出来的lua文件,那就没问题。如果指的是传统意义上的数据库,例如mysql之类的关系型数据库,那么按照图示,你是直接用更新器连接数据库获取数据。这种方式的效率将会很低,因为数据库本身的性能以及连接数量限制等。建议使用生成的lua文件,然后通过web方式下载,方便好用,而且能穿防火墙~  =。=

月色狼影 发表于 2007-9-11 15:57

回复 5# 的帖子

整套系统就是如你所说的这样
直接生成mobmapdatabase lua文件
通过bzip2压缩后 web传输

vrman 发表于 2007-9-15 13:13

  对这类信息收集共享插件的一个设计上的想法,不是很清楚MobMap是否已经实现。

  插件中有一个自动同步任务的设置项。该设置项打开后可以自动根据玩家所在位置,例如在主城(或其他安全地区)时,自动将此玩家收集到的任务信息向其他开放了获取任务信息的周围的玩家发送。这样就可以在玩家间自动的迅速同步任务。

  上述设置项默认是打开的。即便用户关闭此项的时候,仍然允许通过发送一个特殊指令给玩家而获得同步的数据。这就使得一些特殊客户端可以强制其他人同步数据给自己。这可以为收集数据的速度带来很大的好处。

  为了防止任务同步影响玩家的性能,几个优化如下:每次任务同步时根据任务等级和任务地点每次只同步1个任务等级、1个地区的最多几十个任务;每个任务中记录的怪物位置最多只保留5个代表点。

  另外就是兼容性的问题。如果有可能应该允许该插件去检测其他任务插件,读取或转换其存储的信息,这样有利于在初期占有率不太高的时候获得任务数据及其同步。

vrman 发表于 2007-9-15 13:28

还有一个主意,跟上面的有联系,就是也许我们大大缩减任务库的大小。

  每个人最多25个任务,就算这25个任务分别在不同的地区,那么最多我们每个角色在一个特定的时刻也就需要25个地区的任务而已。但是我们平时却要存储和管理数百个地区的任务,我猜这可能会让系统消耗比较大。

  实际上根据P2P的思想,我们不一定要长期固定的存储这些任务,我们可为每个人物以建立一个大约25个地区的缓冲区。每当人物接到一个新任务的时候,系统可以根据新任务所在的地点,自动从其他人那里试图同步这个地区的任务集(当然还是在安全地区时才会开启同步功能)。也就是说,只要他在人多的地方出现一下,他就会自动同步到他需要的地区的任务数据列表。

  关于同步数据必须要做性能上的优化。在人多的时候,不能向每个人都发送同步请求。而是设置一个同步频率,最多每分钟发起多少个同步请求,每个请求会向一个用户请求同步一个等级一个地区的任务。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.