原文链接

掉落的分类

1、 固定掉落
2、 随机掉落(包含分组随机和组内随机两种情况)
3、 条件掉落(在一定条件下才会产出的掉落,比如任务道具)

下面举例说明一种最复杂的情况:
击杀关底BOSS即可获得200W金币,并有几率获得橙色宝剑(共6种)、护具(共4种)或头盔(共3种)中的两种(甚至多种),如果你的运气足够好,每种装备可能都不止一个哦!当然如果你是奉乔帮主的命而来,你还可以获得IPAD任务道具一件!

从玩家的角度分析一下,玩家可能获得的物品:
200W金币
宝剑、护具、头盔中的两种(甚至多种)
每种装备数量可能多于1件
如果有指定任务在身,则会获得相应的任务道具IPAD

从策划的角度分析一下,策划需要一个可以同时支持固定掉落、随机掉落和条件掉落的强大掉落系统,以满足游戏设计的需要。

从程序员的角度分析一下,程序员需要提供一个足够强大的掉落表(DROP),用于满足复杂的掉落情况。

掉落表设计(DROP)

id——必不可少的字段,用于区别其他drop的关键字
name——可以用做显示,也可以用于策划标识不同的掉落描述
iconId——如果需要显示,则显示的DROP图片ID
mustDropGroup——固定掉落的物品集合(建议只配置在同一组GROUP中,维护方便)
mayDropGroups——随机掉落的GROUP集合(建议将同一类型物品配置在同一GROUP中)
mayDropGroupCount——需要随机出来的掉落组数量(最小为0,最大为mayDropGroups.size)
questDroup——条件掉落的物品集合(可以是固定GROUP,也可以是随机GROUP)
relationQuestType——关联的条件类型
relationQuestId——关联的条件ID

GROUP表设计

id——必不可少的字段,用于区别其他group的关键字
name——可以用做显示,也可以用于策划标识不同的掉落描述
iconId——如果需要显示,则显示本组GROUP图片ID
type——掉落组类型(枚举:0 固定掉落 1 随机掉落)
index——group中各物品的顺序,如需要显示则按照该顺序进行排序
mayDropTypeCount——如果是随机掉落,则掉落几条(最小为0,最大为group.size)
rate——随机概率
intervals——随机数量区间[0-5],当随机数量区间内等概率随机
relationType——随机物品的类型(枚举,资源、道具、装备等等)
relationId——随机物品的关联ID

掉落拾取流程图

此设计中有一个根据随机概率和随机数量随机GROUP中掉落条数的算法,想请看到这篇博客的朋友做个交流:
问个问题,有5个字母 a b c d e,出现的概率分别为 10%,20%,30%,25%,15%,现在要随机3个不重复的字母出来,怎么写算法是最优的?


大的思路很棒,在这里我把掉落控制分为:
有条件掉落 –除去掉落ID外,必须至少再满足一个条件的称为有条件掉落。
无条件掉落–进通过掉落ID掉落。
池掉落–也就是循环掉落。
有条件掉落比较复杂,条件可以无限的给予,那么可能性就有无限种。比较常见的有任务掉落,时间掉落,活动掉落,等等。
无条件掉落相对比较基础,我把它分为独立掉落和圆桌掉落,