⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 关于掉物品的算法设计.txt

📁 魔域的源代码
💻 TXT
字号:


		关于掉物品/金钱的算法
==========================================================
冷紫龙 2003-11-13


功能要求:
========
  1、每种怪都有可能掉某些特定类型的物品,掉每种物品都有特定的概率;
  2、怪物掉物品可以有普通、小爆、中爆、大爆等几种方式,具体的每种方式如何掉物品、掉多少物品需要与策划讨论确认


数据库表要求:
============
  1、修改cq_monstertype表

	1)将drop_money和drop_itemtype字段分别改为:
	drop_money_min		//所掉金钱的下限
	drop_money_max		//所掉金钱的上限

	★爆怪的时候如果有掉钱,则掉的金钱为正常的1.6倍

	2)增加字段
	drop_money_chance		//掉钱的概率			——需要确认是否与掉物品一起处理
	drop_item_chance		//掉物品的概率	掉1个物品
	explode_item_chance1		//小爆的概率	掉2 - 5个物品
	explode_item_chance2		//中爆的概率	掉6 - 9个物品
	explode_item_chance3		//大爆的概率	掉10 - ?个物品
	drop_item_rule			//掉物品的规则组id

	★★掉(爆)物品的数量如何计算?固定值还是某个固定范围内浮动(如上↑)


	用于计算掉金钱的概率以及掉多少钱,避免大量的零碎银子产生
	drop_item_chance 用于计算是否掉物品,如果drop_item_rule存在并且计算出来掉物品,才执行掉物品函数
	drop_item_rule 指向DropItemRule表中的某个规则组


  2、增加cq_dropitemrule表
	cq_dropitemrule表结构:
---------------------------------------------------------------------------------------------------------
| 字段名	| 类型							| 说明				| 
---------------------------------------------------------------------------------------------------------
| id		| INT(4) UNSIGNED zerofill NOT NULL			| 规则组ID			| 
| RuleId	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 规则ID			| 
| Chance	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0001'	| 掉宝概率(1 / Chance)		| 
| Item0		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 物品类别id			| 
| Item1		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item2		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item3		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item4		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item5		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item6		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item7		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item8		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item9		| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item10	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item11	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item12	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item13	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
| Item14	| INT(4) UNSIGNED zerofill NOT NULL DEFAULT '0000'	| 				| 
---------------------------------------------------------------------------------------------------------
PRIMARYKEY(id, RuleId)


该表中记录了若干组掉物品的规则,cq_monstertype表中每个记录可以对应最多一个规则组,每组规则由若干条规则(记录)组成,每条记录包括掉宝的概率以及最多15个ItemType(若同一种掉宝几率对应的不止15种物品,可以分多条记录保存,处理的时候统一处理)。

★★可以有一个默认的规则组:规则组id=0,不掉任何物品


算法设计:
========

  掉物品概率计算:
	1、根据monstertype表的drop_item_chance、explode_item_chance1、explode_item_chance2、explode_item_chance3字段值计算是否掉物品、掉几个物品,如果计算结果不掉,或者drop_item_rule不存在,则退出;

	2、根据dropitemrule表的Probability字段,按照概率从低到高计算是否掉物品,如果计算出来掉落某条规则的物品,则从该规则的物品列表中随机选择一个,重复以上步骤直到找到足够数量的物品(爆的时候物品数大于1)。


  ★★按照掉物品的概率从低到高计算,会导致降低高概率物品的实际概率值。
	例如:某个规则组有10%和50%两个概率的规则,则50%的规则实际概率为(100 - 10)% * 50% = 45%



  内存中规则的存储格式:
	应该以规则组id为键存储规则组,每个规则组又分别以规则id存储各自的规则
	★★??是否考虑把所有概率相同的规则合并为一条





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -