|
今天看了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个,一个怪物可以丰富的掉落这么多种道具,数值策划们,填表去吧,拿头撞墙去吧。 |
|