Project1

标题: 请问如何设计条件掉落? [打印本页]

作者: zaiy2863    时间: 2014-11-6 13:28
标题: 请问如何设计条件掉落?
本帖最后由 zaiy2863 于 2014-11-6 13:30 编辑

即怪物的掉落物(最好还有经验)会随着战斗条件有所不同,如全员平均等级低于XX时,获得的经验值和掉宝双倍
(战斗中使用战斗事件进行判定,如符合条件则开关打开)
找到了好多掉落脚本,但大多数只是增加掉落种类、或者掉落率修正。自己不会改(事件党的硬伤
别告诉我用事件写条件分歧然后判定战斗结束后获得XX物品,看起来太蠢(因为即使不满足条件也能够获得1个,满足条件后还要额外追加)
作者: chd114    时间: 2014-11-7 23:54
Scene_Battle 2的start_phase5可以修改···
  1.   def start_phase5
  2.     # 转移到回合 5
  3.     @phase = 5
  4.     # 演奏战斗结束 ME
  5.     $game_system.me_play($game_system.battle_end_me)
  6.     # 还原为战斗开始前的 BGM
  7.     $game_system.bgm_play($game_temp.map_bgm)
  8.     # 初始化 EXP、金钱、宝物
  9.     exp = 0
  10.     gold = 0
  11.     treasures = []
  12.     # 循环
  13.     for enemy in $game_troop.enemies
  14.       # 敌人不是隐藏状态的情况下
  15.       unless enemy.hidden
  16.         # 获得 EXP、增加金钱
  17.         exp += enemy.exp
  18.         gold += enemy.gold
  19.         # 出现宝物判定
  20.         
  21.         actors_number = 0
  22.         actors_level = 0#初始化
  23.         for actor in $game_party.actors
  24.           if actor.exist?
  25.             actors_level += actor.level#加入角色等级
  26.             actors_number += 1
  27.           end
  28.         end
  29.         if actors_number > 0
  30.           actors_level /= actors_number#计算平均等级
  31.         end
  32.         #p actors_level#测试而已
  33.         if actors_level>10
  34.         if rand(100) < enemy.treasure_prob
  35.           if enemy.item_id > 0
  36.             treasures.push($data_items[enemy.item_id])
  37.           end
  38.           if enemy.weapon_id > 0
  39.             treasures.push($data_weapons[enemy.weapon_id])
  40.           end
  41.           if enemy.armor_id > 0
  42.             treasures.push($data_armors[enemy.armor_id])
  43.           end
  44.         end
  45.         end
  46.       end
  47.     end
  48.     # 限制宝物数为 6 个
  49.     treasures = treasures[0..5]
  50.     # 获得 EXP
  51.     for i in 0...$game_party.actors.size
  52.       actor = $game_party.actors[i]
  53.       if actor.cant_get_exp? == false
  54.         last_level = actor.level
  55.         actor.exp += exp
  56.         if actor.level > last_level
  57.           @status_window.level_up(i)
  58.         end
  59.       end
  60.     end
  61.     # 获得金钱
  62.     $game_party.gain_gold(gold)
  63.     # 获得宝物
  64.     for item in treasures
  65.       case item
  66.       when RPG::Item
  67.         $game_party.gain_item(item.id, 1)
  68.       when RPG::Weapon
  69.         $game_party.gain_weapon(item.id, 1)
  70.       when RPG::Armor
  71.         $game_party.gain_armor(item.id, 1)
  72.       end
  73.     end
  74.     # 生成战斗结果窗口
  75.     @result_window = Window_BattleResult.new(exp, gold, treasures)
  76.     # 设置等待计数
  77.     @phase5_wait_count = 100
  78.   end
复制代码
换掉原来的就够了,这里我只改了一个掉落,全员等级低于10的时候不计算掉落···

如果这样
  1. if $data_items[enemy.item_id]==10 and actors_level<10
  2. treasures.push($data_items[enemy.item_id])
  3. end
复制代码
加到if enemy.item_id > 0下面就会有如果敌人掉落物品是10号物品且队伍平均等级小于10就再来(掉?)一次的效果···
具体的因为系统问题开XPVX各种卡死所以还没测试···应该可以这样弄




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