简单的物品掉落扩展插件
偷懒做的简单插件。使用方法:
按照以下格式添加到数据库 敌人 的备注栏
每样物品以 物品类别-物品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 !== item) temp.push(this);
}
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 = /()\[(.*)\]/,
match = loot ? loot.match(re) : null;
//set number of drop items and drop item list
if(match){
this._lootNumber = parseInt(match);
this._lootList = match.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.split(':');
prevRate = temp || 0;
//caculate drop rate for each item in dropitem list
temp = this.calculateDropRate(tokens, total, prevRate);
if(this.isDropped(rand, temp)){
var info = tokens.split('-'),
type = info ? ITEM_TYPE_MAPPING] : null,
item = info ? window['$data'+type]] : null;
//add dropped item into dropped, meanwhile remove from list
dropped.push(item);
list = list.removeItem(list);
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.split(':'),
rate = parseInt(tokens) || 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;
};
Game_Enemy.prototype.isDropped = function(rand, range){
return rand > range && rand < range;
}
本帖来自P1论坛作者dukesward,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址:https://rpg.blue/forum.php?mod=viewthread&tid=388947若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。
页:
[1]