- 累计送礼:
- 0 个
- 累计收礼:
- 0 个
TA的每日心情 | 开心 昨天 00:43 |
---|
签到天数: 144 天 连续签到: 3 天 [LV.7]常住居民III

管理员
  
- VIP
- 6
- 卡币
- 12392
- OK点
- 16
- 推广点
- 0
- 同能卷
- 0
- 积分
- 15279


|
偷懒做的简单插件。
使用方法:
按照以下格式添加到数据库 敌人 的备注栏
每样物品以 物品类别-物品id:权重 格式添加,物品之间用逗号分隔
例如:
表示该敌人将会从id3的武器,id1的道具和id2的防具中选择两样掉落
注: i=道具 w=武器 a=防具
功能:
1.根据权重判断掉落。权重数字越大掉落的概率越大。
2.允许掉落任意数量的物品。在备注栏定义 掉落数 即可。
JAVASCRIPT 代码 - //===========================================================
- //RPG Maker MV Improved Loot System
- //使用方法:
- //按照以下格式添加到数据库 敌人 的备注栏
- //
- //每样物品以 物品类别-物品id:权重 格式添加,物品之间用','分隔
- //例如:
- //i:道具 w:武器 a:防具
- //author:dukesward
- //version: 1.0
- //===========================================================
- //rpg_objects.js::4267
- var Game_Enemy_Alias = Game_Enemy_Alias || {},
- ITEM_TYPE_MAPPING = {
- 'i': 'Items',
- 'w': 'Weapons',
- 'a': 'Armors'
- };
- Array.prototype.removeItem = function(item){
- var temp = [];
- for(var i inthis){
- if(this.hasOwnProperty(i) && this[i] !== item) temp.push(this[i]);
- }
- return temp;
- };
- Game_Enemy_Alias.setup = Game_Enemy.prototype.setup;
- Game_Enemy.prototype.setup = function(enemyId, x, y){
- Game_Enemy_Alias.setup.call(this, enemyId, x, y);
- //load loot data from enemy metadata
- this.processLoot();
- }
- Game_Enemy.prototype.processLoot = function(){
- var loot = this.enemy().meta.loot,
- re = /([0-9])\[(.*)\]/,
- match = loot ? loot.match(re) : null;
- //set number of drop items and drop item list
- if(match){
- this._lootNumber = parseInt(match[1]);
- this._lootList = match[2].split(',');
- }
- }
- //rpg_objects::4327
- Game_Enemy.prototype.makeDropItems = function(){
- var list = this._lootList,
- dropped = [],
- debug = 0;
- while(dropped.length < this._lootNumber && list.length > 0){
- var prevRate = 0, temp = [], total = this.calculateTotalRate(list);
- var rand = Math.random();
- inner:
- for(var i in list){
- if(list.hasOwnProperty(i)){
- var tokens = list[i].split(':');
- prevRate = temp[1] || 0;
- //caculate drop rate for each item in dropitem list
- temp = this.calculateDropRate(tokens[1], total, prevRate);
- if(this.isDropped(rand, temp)){
- var info = tokens[0].split('-'),
- type = info[0] ? ITEM_TYPE_MAPPING[info[0]] : null,
- item = info[1] ? window['$data'+type][info[1]] : null;
- //add dropped item into dropped, meanwhile remove from list
- dropped.push(item);
- list = list.removeItem(list[i]);
- break inner;
- }
- }
- }
- }
- return dropped;
- }
- Game_Enemy.prototype.calculateTotalRate = function(items){
- var total = 0;
- //loop through items and add all rates up
- for(var i in items){
- if(items.hasOwnProperty(i)){
- var tokens = items[i].split(':'),
- rate = parseInt(tokens[1]) || 0;
- total += rate;
- }
- }
- return total;
- }
- Game_Enemy.prototype.calculateDropRate = function(rate, total, prev){
- var temp = prev,
- rate = parseInt(rate) || 0,
- rateToAdd = Math.round(rate/total*100)/100 + prev;
- //the range of drop rate is determined by both current and prev items
- return[temp, rateToAdd];
- };
- Game_Enemy.prototype.isDropped = function(rand, range){
- return rand > range[0] && rand < range[1];
- }
复制代码
本帖来自P1论坛作者dukesward,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=388947 若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。 |
|