Project1

标题: 如何制作出“掉宝率”的属性 [打印本页]

作者: YeYe.    时间: 2012-8-12 02:33
标题: 如何制作出“掉宝率”的属性
比如A物品掉率是50%,如果添加了1点XX变量之后,A物品的掉率就会提升到51%

也就是可以提高物品装备掉率的变量,唉~我脚本忙又来勒~
三千经验相当于3VIP了吧,我实在不懂~只好请求高手帮忙了~~~~~

希望大家不要把我当成伸手党啊····谢谢了dsu_plus_rewardpost_czw
作者: R-零    时间: 2012-8-12 10:49
本帖最后由 R-零 于 2012-8-12 10:51 编辑

掉宝率的判定位于默认脚本Scene_Battle 2的第152行,
  1. if rand(100) < enemy.treasure_prob
复制代码
简单翻译是 如果 随机数0~100 小于 敌人的掉宝率,(则执行以下动作)
也就是说,只要将后面的“enemy.treasure_prob”改成原数增加某个指定变量就可以达到该效果。

根据楼主的“比如A物品掉率是50%,如果添加了1点XX变量之后,A物品的掉率就会提升到51%“这句话,也就是不能只限定于一个变量,因此我们需要一个物品id与变量id的映射表

鉴于物品种类有3种,这里建立了三组对应物品、武器、防具
  1. #        物品id 变量id
  2. #物品
  3. Z_ITM = {1 => 2              
  4. }
  5. #武器
  6. Z_WEP = {1 => 2
  7. }
  8. #防具
  9. Z_ARM = {1 => 2
  10. }
复制代码
然后再在
  1.   #--------------------------------------------------------------------------
  2.   # ● 开始结束战斗回合
  3.   #--------------------------------------------------------------------------
  4.   def start_phase5
  5.     # 转移到回合 5
  6.     @phase = 5
  7.     # 演奏战斗结束 ME
  8.     $game_system.me_play($game_system.battle_end_me)
  9.     # 还原为战斗开始前的 BGM
  10.     $game_system.bgm_play($game_temp.map_bgm)
  11.     # 初始化 EXP、金钱、宝物
  12.     exp = 0
  13.     gold = 0
  14.     treasures = []
  15.     # 循环
  16.     for enemy in $game_troop.enemies
  17.       # 敌人不是隐藏状态的情况下
  18.       unless enemy.hidden
  19.         # 获得 EXP、增加金钱
  20.         exp += enemy.exp
  21.         gold += enemy.gold
  22.         # 出现宝物判定
  23.         if rand(100) < enemy.treasure_prob
  24.           if enemy.item_id > 0
  25.             treasures.push($data_items[enemy.item_id])
  26.           end
  27.           if enemy.weapon_id > 0
  28.             treasures.push($data_weapons[enemy.weapon_id])
  29.           end
  30.           if enemy.armor_id > 0
  31.             treasures.push($data_armors[enemy.armor_id])
  32.           end
  33.         end
  34.       end
  35.     end
  36. ……
复制代码
这段进行小幅改写
  #--------------------------------------------------------------------------
  # ● 开始结束战斗回合
  #--------------------------------------------------------------------------
  def start_phase5
    # 转移到回合 5
    @phase = 5
    # 演奏战斗结束 ME
    $game_system.me_play($game_system.battle_end_me)
    # 还原为战斗开始前的 BGM
    $game_system.bgm_play($game_temp.map_bgm)
    # 初始化 EXP、金钱、宝物
    exp = 0
    gold = 0
    treasures = []
    # 循环
    for enemy in $game_troop.enemies
      # 敌人不是隐藏状态的情况下
      unless enemy.hidden
        # 获得 EXP、增加金钱
        exp += enemy.exp
        gold += enemy.gold
        # 出现宝物判定
        n = enemy.treasure_prob
        #原#:if rand(100) < enemy.treasure_prob
          if enemy.item_id > 0
            n = enemy.treasure_prob
            n += $game_variables[Z_ITM[enemy.item_id]] if Z_ITM[enemy.item_id] != nil
            if rand(100) < n
            treasures.push($data_items[enemy.item_id])
            end
          end
          if enemy.weapon_id > 0
            n = enemy.treasure_prob
            n += $game_variables[Z_WEP[enemy.weapon_id]] if Z_WEP[enemy.weapon_id] != nil
            if rand(100) < n
            treasures.push($data_weapons[enemy.weapon_id])
            end
          end
          if enemy.armor_id > 0
            n = enemy.treasure_prob
            n += $game_variables[Z_ARM[enemy.armor_id]] if Z_ARM[enemy.armor_id] != nil
            if rand(100) < n
            treasures.push($data_armors[enemy.armor_id])
            end
          end
        #end
      end
    end
……


当然,这些都已经写好了,只要自己设置即可,上面的是思路,希望大家也可以作为参考,把下面的脚本插入main前面作为一个独立的脚本页,注意这个修改用于默认系统,不保证与其他战斗系统不存在冲突,如果需要为其他系统改写请回复
  1. #        物品id 变量id
  2. #物品
  3. Z_ITM = {1 => 2              
  4. }
  5. #武器
  6. Z_WEP = {1 => 2
  7. }
  8. #防具
  9. Z_ARM = {1 => 2
  10. }
  11. class Scene_Battle
  12.   def start_phase5
  13.     # 转移到回合 5
  14.     @phase = 5
  15.     # 演奏战斗结束 ME
  16.     $game_system.me_play($game_system.battle_end_me)
  17.     # 还原为战斗开始前的 BGM
  18.     $game_system.bgm_play($game_temp.map_bgm)
  19.     # 初始化 EXP、金钱、宝物
  20.     exp = 0
  21.     gold = 0
  22.     treasures = []
  23.     # 循环
  24.     for enemy in $game_troop.enemies
  25.       # 敌人不是隐藏状态的情况下
  26.       unless enemy.hidden
  27.         # 获得 EXP、增加金钱
  28.         exp += enemy.exp
  29.         gold += enemy.gold
  30.         # 出现宝物判定
  31.         n = enemy.treasure_prob
  32.         #原#:if rand(100) < enemy.treasure_prob
  33.           if enemy.item_id > 0
  34.             n = enemy.treasure_prob
  35.             n += $game_variables[Z_ITM[enemy.item_id]] if Z_ITM[enemy.item_id] != nil
  36.             if rand(100) < n
  37.             treasures.push($data_items[enemy.item_id])
  38.             end
  39.           end
  40.           if enemy.weapon_id > 0
  41.             n = enemy.treasure_prob
  42.             n += $game_variables[Z_WEP[enemy.weapon_id]] if Z_WEP[enemy.weapon_id] != nil
  43.             if rand(100) < n
  44.             treasures.push($data_weapons[enemy.weapon_id])
  45.             end
  46.           end
  47.           if enemy.armor_id > 0
  48.             n = enemy.treasure_prob
  49.             n += $game_variables[Z_ARM[enemy.armor_id]] if Z_ARM[enemy.armor_id] != nil
  50.             if rand(100) < n
  51.             treasures.push($data_armors[enemy.armor_id])
  52.             end
  53.           end
  54.         #end
  55.       end
  56.     end
  57.     # 限制宝物数为 6 个
  58.     treasures = treasures[0..5]
  59.     # 获得 EXP
  60.     for i in 0...$game_party.actors.size
  61.       actor = $game_party.actors[i]
  62.       if actor.cant_get_exp? == false
  63.         last_level = actor.level
  64.         actor.exp += exp
  65.         if actor.level > last_level
  66.           @status_window.level_up(i)
  67.         end
  68.       end
  69.     end
  70.     # 获得金钱
  71.     $game_party.gain_gold(gold)
  72.     # 获得宝物
  73.     for item in treasures
  74.       case item
  75.       when RPG::Item
  76.         $game_party.gain_item(item.id, 1)
  77.       when RPG::Weapon
  78.         $game_party.gain_weapon(item.id, 1)
  79.       when RPG::Armor
  80.         $game_party.gain_armor(item.id, 1)
  81.       end
  82.     end
  83.     # 生成战斗结果窗口
  84.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  85.     # 设置等待计数
  86.     @phase5_wait_count = 100
  87.   end
  88. end
复制代码
���
作者: YeYe.    时间: 2012-8-12 10:52
R-零 发表于 2012-8-12 10:49
掉宝率的判定位于默认脚本Scene_Battle 2的第152行,简单翻译是 如果 随机数0~100 小于 敌人的掉宝率,(则 ...

那么,如果不限制指定的物品掉率呢?
比如 加XX变量,可以提升所有怪物的物品装备的掉率?
指定的物品掉率设置太麻烦了
作者: R-零    时间: 2012-8-12 11:28
YeYe. 发表于 2012-8-12 10:52
那么,如果不限制指定的物品掉率呢?
比如 加XX变量,可以提升所有怪物的物品装备的掉率?
指定的物品掉 ...

RUBY 代码复制
  1. if enemy.item_id > 0
  2.             n = enemy.treasure_prob
  3.             n += $game_variables[Z_ITM[enemy.item_id]] if Z_ITM[enemy.item_id] != nil
  4.             if rand(100) < n
  5.             treasures.push($data_items[enemy.item_id])
  6.             end
  7.           end
  8.           if enemy.weapon_id > 0
  9.             n = enemy.treasure_prob
  10.             n += $game_variables[Z_WEP[enemy.weapon_id]] if Z_WEP[enemy.weapon_id] != nil
  11.             if rand(100) < n
  12.             treasures.push($data_weapons[enemy.weapon_id])
  13.             end
  14.           end
  15.           if enemy.armor_id > 0
  16.             n = enemy.treasure_prob
  17.             n += $game_variables[Z_ARM[enemy.armor_id]] if Z_ARM[enemy.armor_id] != nil
  18.             if rand(100) < n
  19.             treasures.push($data_armors[enemy.armor_id])
  20.             end
  21.           end

只要对这里的n的运算再增加一步,
代码在下面,可以直接使用、保留单个物品设定,增加全局设定
RUBY 代码复制
  1. #        物品id 变量id
  2. #物品
  3. Z_ITM = {1 => 2              
  4. }
  5. #武器
  6. Z_WEP = {1 => 2
  7. }
  8. #防具
  9. Z_ARM = {1 => 2
  10. }
  11. #以上是设置特例
  12. #以下是设置全局
  13. $全局控制掉宝率的变量编号 = 1
  14. class Scene_Battle
  15.   def start_phase5
  16.     # 转移到回合 5
  17.     @phase = 5
  18.     # 演奏战斗结束 ME
  19.     $game_system.me_play($game_system.battle_end_me)
  20.     # 还原为战斗开始前的 BGM
  21.     $game_system.bgm_play($game_temp.map_bgm)
  22.     # 初始化 EXP、金钱、宝物
  23.     exp = 0
  24.     gold = 0
  25.     treasures = []
  26.     # 循环
  27.     for enemy in $game_troop.enemies
  28.       # 敌人不是隐藏状态的情况下
  29.       unless enemy.hidden
  30.         # 获得 EXP、增加金钱
  31.         exp += enemy.exp
  32.         gold += enemy.gold
  33.         # 出现宝物判定
  34.         n = enemy.treasure_prob
  35.         #原#:if rand(100) < enemy.treasure_prob
  36.           if enemy.item_id > 0
  37.             n = enemy.treasure_prob
  38.             n += $game_variables[Z_ITM[enemy.item_id]] if Z_ITM[enemy.item_id] != nil
  39.             n += $game_variables[$全局控制掉宝率的变量编号]
  40.             if rand(100) < n
  41.             treasures.push($data_items[enemy.item_id])
  42.             end
  43.           end
  44.           if enemy.weapon_id > 0
  45.             n = enemy.treasure_prob
  46.             n += $game_variables[Z_WEP[enemy.weapon_id]] if Z_WEP[enemy.weapon_id] != nil
  47.             n += $game_variables[$全局控制掉宝率的变量编号]
  48.             if rand(100) < n
  49.             treasures.push($data_weapons[enemy.weapon_id])
  50.             end
  51.           end
  52.           if enemy.armor_id > 0
  53.             n = enemy.treasure_prob
  54.             n += $game_variables[Z_ARM[enemy.armor_id]] if Z_ARM[enemy.armor_id] != nil
  55.             n += $game_variables[$全局控制掉宝率的变量编号]
  56.             if rand(100) < n
  57.             treasures.push($data_armors[enemy.armor_id])
  58.             end
  59.           end
  60.         #end
  61.       end
  62.     end
  63.     # 限制宝物数为 6 个
  64.     treasures = treasures[0..5]
  65.     # 获得 EXP
  66.     for i in 0...$game_party.actors.size
  67.       actor = $game_party.actors[i]
  68.       if actor.cant_get_exp? == false
  69.         last_level = actor.level
  70.         actor.exp += exp
  71.         if actor.level > last_level
  72.           @status_window.level_up(i)
  73.         end
  74.       end
  75.     end
  76.     # 获得金钱
  77.     $game_party.gain_gold(gold)
  78.     # 获得宝物
  79.     for item in treasures
  80.       case item
  81.       when RPG::Item
  82.         $game_party.gain_item(item.id, 1)
  83.       when RPG::Weapon
  84.         $game_party.gain_weapon(item.id, 1)
  85.       when RPG::Armor
  86.         $game_party.gain_armor(item.id, 1)
  87.       end
  88.     end
  89.     # 生成战斗结果窗口
  90.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  91.     # 设置等待计数
  92.     @phase5_wait_count = 100
  93.   end
  94. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1