游戏开发论坛

 找回密码
 立即注册
搜索
查看: 38327|回复: 56

[讨论] WOW物品掉落分析(上)

[复制链接]

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
发表于 2006-4-20 21:56:00 | 显示全部楼层 |阅读模式
今天看了galoisx同志的《物品掉落》一文,介绍了一种物品掉落的设计方法,此种方法也是目前国内大不部分游戏开发普遍采用的方法之一。我也曾经使用过类似的物品掉落方法,深知此类物品掉落的设计结构简陋、功能单一。目前制作的游戏物品掉落方法根据WOW的设计作了改动,但由于项目正在开发之中,一切属于公司保密协议之内容,不方便向大家介绍并探讨。不过我很乐意和大家在此一起分析一下WOW的物品掉落,共同探讨,互相补足。

WOW物品掉落功能介绍
1)物品掉落种类丰富——WOW中光一个黑龙MM可以掉落出10多样物品,而且各种怪物掉落的物品数量基本恒定的,一般一种怪物掉出5种左右的东西,就在4种到6种左右浮动,绝对不会突然掉出1、2个物品,也不会突然掉出10个物品。
2)物品指定掉落某种物品——每个BOSS怪物都会指定掉落一类物品,比如黑龙MM肯定会掉落2个T2的套装头部。
3)任务道具掉落——一个小队的成员一同杀死一个怪物,怪物掉落的任务道具,有任务的人每人都有一个,而没有任务的人,看到的只是其他掉落的物品。
4)物品拾取权限——一个怪物死亡后,尸体中掉落的物品只能由杀死这个怪物的小队成员拾取,未攻击过这个怪物并且距离这个怪物一定距离范围之外的队员也没有物品拾取权限。
5)物品轮流拾取优先权——一个小队的成员,物品分配方式如果为队伍分配,每个小队成员轮流拥有一只怪物掉落物品的拾取优先权。
6)物品ROLL点分配和队长分配——物品掉落后,属于整个小队或团队,玩家通过ROLL点或队长分配取得物品的拥有权。

WOW物品掉落功能实现分析
看一看上面列举的WOW物品掉落功能,想想如何实现,头顿时暴大200%,赞叹玻璃渣经典之处,一个物品掉落居然都设计的如此复杂体贴。让我们来仔细分析一下这些功能如何实现。

首先看第一个和第二个功能,物品掉落种类丰富,倒是可以采用galoisx同志的《物品掉落》一文中介绍的怪物掉落物品填表法,但是,一个能掉10多种物品的怪物身上至少要填上50种左右的物品和各自的掉落几率,而且如果单靠物品掉落几率来决定表中物品是否掉落,那怪物掉落的物品数量就难以控制,可能只掉出一个物品,或者一下掉出几十个物品。以我个人的分析,每个怪物有设定好的物品掉落数量区间,比如黑龙MM物品掉落数量区间是10到12,每个将要掉落的物品读取它指定的物品表,如果用LUA脚本控制的话,物品填表方式和物品掉落函数可能如下:

----------------------
假设条件1:这个怪物掉落物品数量是3~4种
假设条件2:这个怪物掉落的普通物品ID是1005~1014
假设条件3:这个怪物必定掉落一种头盔,头盔的ID是1000~1004
假设条件4:这个怪物可能会掉落好一点的物品甚至是极品物品,ID是1014~1019
为了模拟填表方法,用以下LUA数组表示填表方法,item_list数组假设是通过读取数据库得到以下的数据:

item_list={
--怪物掉落的第一种物品的物品ID和掉落几率
        {
        {itemid = 1000 ,item_random_min = 1 ,item_random_max = 15 }
        {itemid = 1001 ,item_random_min = 16,item_random_max = 35 }
        {itemid = 1002 ,item_random_min = 36,item_random_max = 50 }
        {itemid = 1003 ,item_random_min = 51,item_random_max = 75 }
        {itemid = 1004 ,item_random_min = 76,item_random_max = 100}
        },
--怪物掉落的第二种物品的物品ID和掉落几率       
        {
        {itemid = 1005 ,item_random_min = 1 ,item_random_max = 15 }
        {itemid = 1006 ,item_random_min = 16,item_random_max = 30 }
        {itemid = 1007 ,item_random_min = 31,item_random_max = 50 }
        {itemid = 1008 ,item_random_min = 51,item_random_max = 80 }
        {itemid = 1009 ,item_random_min = 81,item_random_max = 100}
        },
--怪物掉落的第三种物品的物品ID和掉落几率       
        {
        {itemid = 1010 ,item_random_min = 1 ,item_random_max = 15 }
        {itemid = 1011 ,item_random_min = 16,item_random_max = 30 }
        {itemid = 1012 ,item_random_min = 31,item_random_max = 50 }
        {itemid = 1013 ,item_random_min = 51,item_random_max = 75 }
        {itemid = 1014 ,item_random_min = 76,item_random_max = 100}
        },
--怪物掉落的第四种物品的物品ID和掉落几率       
        {
        {itemid = 1015 ,item_random_min = 1 ,item_random_max = 20 }
        {itemid = 1016 ,item_random_min = 21,item_random_max = 30 }
        {itemid = 1017 ,item_random_min = 31,item_random_max = 50 }
        {itemid = 1018 ,item_random_min = 51,item_random_max = 75 }
        {itemid = 1019 ,item_random_min = 76,item_random_max = 100}
        }
}



假设WOW的物品掉落函数如下:

function item()
item_mub = math.random(3,4)                                               
--随机取得这个怪物这次掉落3个还是4个物品

for i = 1,item_mub  do       
        item_random = math.random(1,100)                       
        --根据随机数掉物品ID
       
        for ii = 1,5  do
                min = item_list[ii].item_random_min
                --在数组中取得一个物品的几率最小值
               
                max = item_list[ii].item_random_max
                --在数组中取得一个物品的几率最大值
               
                if (item_random >= min and item_random <= max) then
                        AddItemId(item_list[ii].itemid)
                        --给玩家掉落一个物品ID
                end
        end
end
----------------------

从以上方式中我们可以看出,由于极品装备在数组的最后一个小数组中,只有怪物随机掉落第四种物品时才有可能随机到极品物品ID,而且怪物掉落物品控制在3到4个,一个怪物可以丰富的掉落这么多种道具,数值策划们,填表去吧,拿头撞墙去吧。

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-20 22:01:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

今天写累了,先分析WOW物品掉落的前两种功能,希望大家能多提意见,互相交流,相互学习。

PS:如果有人看不懂LUA,以后有空可能会写LUA脚本的教材。如果有懂PYTHON脚本语言的大侠,请留个联系方式,小弟想学习一下,请教请教!

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-4-20 22:10:00 | 显示全部楼层

Re: WOW物品掉落分析(上)

[em10]应该不是一个一个搞把、、、、那不是累死人、、、、

记得看过 暗黑的掉宝流程,那是一个系统的解决方案,估计wow也是参考暗黑的 统筹分类 的方案来定怪物的掉宝把。或许是把 财宝等级与怪物等级挂钩 变成 其他的挂钩(具体不清楚)

我不是业内人士,只是YY而已

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-20 22:13:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

不谈理论啦,都是空话。
希望大家也留下交流的具体实现方案,一起研究一下,哪种最可能是WOW物品掉落的实现方案。

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-4-20 23:13:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

function item()
item_mub = math.random(3,4)
--随机取得这个怪物这次掉落3个还是4个物品

favorite=read_favor(monster_id)
-- 读取这个怪物的偏爱掉宝的装备类型
favorite_num=read_favor_num(monster_id)
-- 读取这个怪物的偏爱掉宝的个数

favoritr_num_old=favorite_num
for i = 1,favorite_num do
ItemId=ChooseItem(favorite)
--参考暗黑那个按TC ——》ItemType——》ItemQuality等等的选择流程,有favorite参数则直接指定某个ItemType


AddItemId(ItemId)
end

for i=1 ,item_mub-favoritr_num_old do
ItemId=ChooseItem()
--没有favorite参数,则走完全流程
AddItemId(ItemId)
end
end

这样的话,只要写好ChooseItem()这个函数,具体那个怪物掉什么,就是设定它的等级、偏爱和在装备表编辑好装备等级等等就可以,而ChooseItem()函数在暗黑都有成功的范例,估计暴雪会采取“拿来主义”的

这样做的好处有:程序利用率高,不需要太频繁为特定的怪物编写程序来生成 item_list,那么同时带来的好处是维护简单,只需要维护好几张表就可以、、、、、

PS:还是强调一下,非专业人士,我只是YY想增加认识而已,LUA代码也是第一次看,不过和base差不多

10

主题

70

帖子

100

积分

注册会员

Rank: 2

积分
100
 楼主| 发表于 2006-4-20 23:30:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

TO zfscnu

这个论坛页面不支持TAB,代码看起来好累,复制到ULTRAEDIT里仔细的看了一下,真的是种好方法,您的意思我大体领会了,受教受教。
对了,有暗黑掉宝的相关网页嘛?请给个链接,好想看看。

补充一点,LUA脚本自身运行速度是非常快的,只是进栈出栈需要花点时间。item_list{}这个数组我是想表现的清楚一点,给大家看一下一个怪物掉落的物品表是大概怎么填的。在真正的脚本中,用个循环读表对数组填内容是很快的。而且LUA的数组和C的不同,不用定义大小,不论一个怪物填写了多少个物品,都可以全部读进来,给下面的item()函数调用。

433

主题

4233

帖子

4403

积分

论坛元老

Rank: 8Rank: 8

积分
4403
发表于 2006-4-21 03:53:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

...

俗尘你好象用的是basic语法写的吧?寒...看到了if then.嘿嘿。.

433

主题

4233

帖子

4403

积分

论坛元老

Rank: 8Rank: 8

积分
4403
发表于 2006-4-21 03:57:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

代码我到没看明白,不擅长。

不过物品掉落是服务器端场景表格+你的物品规则+你的物品掉落规则 一起来统一处理...

假设条件1:这个怪物掉落物品数量是3~4种
假设条件2:这个怪物掉落的普通物品ID是1005~1014
假设条件3:这个怪物必定掉落一种头盔,头盔的ID是1000~1004
假设条件4:这个怪物可能会掉落好一点的物品甚至是极品物品,ID是1014~1019

就你写的这些。不过不需要 写lua呀?在excel表格里就可以搞定了,只要程序支持如何读取这些表格就行,内部代码定义好读取的各种接口///其实这样更方便于策划的更新...大大降低了每次服务器程序维护的问题...哈,实现了俗尘说的 一切都让策划来处理。..

还是手机RPG游戏物品掉落简单。嘿嘿。..

49

主题

1388

帖子

1432

积分

金牌会员

Rank: 6Rank: 6

积分
1432
发表于 2006-4-21 08:51:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

家里电脑才有 那个资料,不过记起前几天在包子的blog见过、、、、

http://xiaobig.blog.163.com/article/-aTYY-ri-o8r.html

大概看了下,差不多把

0

主题

124

帖子

125

积分

注册会员

Rank: 2

积分
125
发表于 2006-4-21 10:37:00 | 显示全部楼层

Re:WOW物品掉落分析(上)

wow物品应当是分2部分处理,一个是boss固定掉落,一个是世界掉落。世界掉落应当是类似暗黑,boss固定掉落就是标准的eq类了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-8-18 05:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表