- 累计送礼:
 - 0 个
 
 - 累计收礼:
 - 0 个
 
 TA的每日心情  | 开心 2025-10-18 22:41 | 
|---|
 
  签到天数: 165 天 连续签到: 1 天 [LV.7]常住居民III 
  
管理员 
    
    
        - VIP
 
        - 6 
 
     
    
        - 卡币
 
        - 14829 
 
     
    
        - OK点
 
        - 16 
 
     
    
    - 推广点
 
    - 0 
 
     
	
    - 同能卷
 
    - 0 
 
     
  
	- 积分
 - 17954
 
 
  
 
  
 | 
 
偷懒做的简单插件。 
使用方法: 
按照以下格式添加到数据库  敌人 的备注栏
 
每样物品以 物品类别-物品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在线咨询功能删除,谢谢。  |   
 
		
		
		 
 
 |