Project1

标题: 关于经验获取的问题 [打印本页]

作者: 765111039    时间: 2016-12-22 21:07
标题: 关于经验获取的问题
XP的默认经验获得脚本,经验获得好像是整个队伍一起获得的,我想做一个可以佩戴增加经验的装备或者状态,但是我试了好多回怎么都是整体获得的。
作者: j296196585    时间: 2016-12-23 00:54
RUBY 代码复制
  1. #==============================================================================
  2. # ■ Scene_Battle (分割定义 2)
  3. #------------------------------------------------------------------------------
  4. #  处理战斗画面的类。
  5. #==============================================================================
  6.  
  7. class Scene_Battle
  8.   #--------------------------------------------------------------------------
  9.   # ● 开始自由战斗回合
  10.   #--------------------------------------------------------------------------
  11.   def start_phase1
  12.     # 转移到回合 1
  13.     @phase = 1
  14.     # 清除全体同伴的行动
  15.     $game_party.clear_actions
  16.     # 设置战斗事件
  17.     setup_battle_event
  18.   end
  19.   #--------------------------------------------------------------------------
  20.   # ● 刷新画面 (自由战斗回合)
  21.   #--------------------------------------------------------------------------
  22.   def update_phase1
  23.     # 胜败判定
  24.     if judge
  25.       # 胜利或者失败的情况下 : 过程结束
  26.       return
  27.     end
  28.     # 开始同伴命令回合
  29.     start_phase2
  30.   end
  31.   #--------------------------------------------------------------------------
  32.   # ● 开始同伴命令回合
  33.   #--------------------------------------------------------------------------
  34.   def start_phase2
  35.     # 转移到回合 2
  36.     @phase = 2
  37.     # 设置角色为非选择状态
  38.     @actor_index = -1
  39.     @active_battler = nil
  40.     # 有效化同伴指令窗口
  41.     @party_command_window.active = true
  42.     @party_command_window.visible = true
  43.     # 无效化角色指令窗口
  44.     @actor_command_window.active = false
  45.     @actor_command_window.visible = false
  46.     # 清除主回合标志
  47.     $game_temp.battle_main_phase = false
  48.     # 清除全体同伴的行动
  49.     $game_party.clear_actions
  50.     # 不能输入命令的情况下
  51.     unless $game_party.inputable?
  52.  
  53.       # 开始主回合
  54.       start_phase4
  55.     end
  56.   end
  57.   #--------------------------------------------------------------------------
  58.   # ● 刷新画面 (同伴命令回合)
  59.   #--------------------------------------------------------------------------
  60.   def update_phase2
  61.     # 按下 C 键的情况下
  62.     if Input.trigger?(Input::C)
  63.       # 同伴指令窗口光标位置分支
  64.       case @party_command_window.index
  65.       when 0  # 战斗
  66.         # 演奏确定 SE
  67.         $game_system.se_play($data_system.decision_se)
  68.         # 开始角色的命令回合
  69.         start_phase3
  70.       when 1  # 逃跑
  71.         # 不能逃跑的情况下
  72.         if $game_temp.battle_can_escape == false
  73.           # 演奏冻结 SE
  74.           $game_system.se_play($data_system.buzzer_se)
  75.           return
  76.         end
  77.         # 演奏确定 SE
  78.         $game_system.se_play($data_system.decision_se)
  79.         # 逃走处理
  80.         update_phase2_escape
  81.       end
  82.       return
  83.     end
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 画面更新 (同伴指令回合 : 逃跑)
  87.   #--------------------------------------------------------------------------
  88.   def update_phase2_escape
  89.     # 计算敌人速度的平均值
  90.     enemies_agi = 0
  91.     enemies_number = 0
  92.     for enemy in $game_troop.enemies
  93.       if enemy.exist?
  94.         enemies_agi += enemy.agi
  95.         enemies_number += 1
  96.       end
  97.     end
  98.     if enemies_number > 0
  99.       enemies_agi /= enemies_number
  100.     end
  101.     # 计算角色速度的平均值
  102.     actors_agi = 0
  103.     actors_number = 0
  104.     for actor in $game_party.actors
  105.       if actor.exist?
  106.         actors_agi += actor.agi
  107.         actors_number += 1
  108.       end
  109.     end
  110.     if actors_number > 0
  111.       actors_agi /= actors_number
  112.     end
  113.     # 逃跑成功判定
  114.     success = rand(100) < 50 * actors_agi / enemies_agi
  115.     # 成功逃跑的情况下
  116.     if success
  117.       # 演奏逃跑 SE
  118.       $game_system.se_play($data_system.escape_se)
  119.       # 还原为战斗开始前的 BGM
  120.       $game_system.bgm_play($game_temp.map_bgm)
  121.       # 战斗结束
  122.       battle_end(1)
  123.     # 逃跑失败的情况下
  124.     else
  125.       # 清除全体同伴的行动
  126.       $game_party.clear_actions
  127.       #逃跑效果音
  128. Audio.se_play("Audio/SE/013-Move01",100,150)
  129. #显示 逃跑失败字样
  130. @help_window.set_text("逃跑失败你完了!",1)
  131. @wait_count= 20      
  132.       # 开始主回合
  133.       start_phase4
  134.     end
  135.   end
  136.   #--------------------------------------------------------------------------
  137.   # ● 开始结束战斗回合
  138.   #--------------------------------------------------------------------------
  139.   def start_phase5
  140.     # 转移到回合 5
  141.     @phase = 5
  142.     # 演奏战斗结束 ME
  143.     $game_system.me_play($game_system.battle_end_me)
  144.     # 还原为战斗开始前的 BGM
  145.     $game_system.bgm_play($game_temp.map_bgm)
  146.     # 初始化 EXP、金钱、宝物
  147.     exp = 0
  148.     gold = 0
  149.     treasures = []
  150.     # 循环
  151.     for enemy in $game_troop.enemies
  152.       # 敌人不是隐藏状态的情况下
  153.       unless enemy.hidden
  154.         # 获得 EXP、增加金钱
  155.         exp += enemy.exp
  156.         gold += enemy.gold
  157.   ###########################################################################
  158.         #将会掉多种宝物的敌人的编号写在@MIDE里面。
  159.         @MIDE = [1, 2, 3]
  160.         for i in [email]0..@MIDE.size[/email]
  161.           #当前敌人会掉多种宝物
  162.           if enemy.id == @MIDE[i]
  163.             lol = true
  164.           end
  165.         end
  166.         if lol == true
  167.           case enemy.id
  168.           when 1 # 敌人编号为1
  169.             # 出现宝物判定,机率请自定义,如果是100%出现的宝物可以省略这行。
  170.             if rand(100) < 50 # 50%掉宝率
  171.               treasures.push($data_items[1]) # 回复剂
  172.             end
  173.             if rand(100) < 20 # 20%掉宝率
  174.               treasures.push($data_weapons[2]) # 铁剑
  175.             end
  176.             if rand(100) < 80 # 80%掉宝率
  177.               treasures.push($data_armors[1]) # 铜盾
  178.             end
  179.           when 2 # 敌人编号为2
  180.             if rand(100) < 50 # 50%掉宝率
  181.               treasures.push($data_items[1]) # 回复剂
  182.             end
  183.             if rand(100) < 50 # 50%掉宝率
  184.               treasures.push($data_items[4]) # 香水
  185.             end
  186.           when 3 # 敌人编号为3
  187.             # 100%掉宝率
  188.             treasures.push($data_items[4]) # 香水
  189.             if rand(100) < 50 # 50%掉宝率
  190.               treasures.push($data_items[7]) # 圣灵药
  191.             end
  192.           end
  193.         else
  194.           # 出现宝物判定
  195.           if rand(100) < enemy.treasure_prob
  196.             if enemy.item_id > 0
  197.               treasures.push($data_items[enemy.item_id])
  198.             end
  199.             if enemy.weapon_id > 0
  200.               treasures.push($data_weapons[enemy.weapon_id])
  201.             end
  202.             if enemy.armor_id > 0
  203.               treasures.push($data_armors[enemy.armor_id])
  204.             end
  205.           end
  206.         end
  207.   ###########################################################################
  208.       end
  209.     end
  210.     # 限制宝物数为 6 个
  211.     treasures = treasures[0..5]
  212.     # 获得 EXP
  213.     for i in 0...$game_party.actors.size
  214.   ###########################################################################
  215.       if actor.cant_get_exp? == false
  216.         last_level = actor.level
  217.         if $game_switches[120] == true#一号开关打开时
  218.           nexp = exp * 2
  219.           actor.exp += nexp
  220.         else
  221.           nexp = exp
  222.           actor.exp += nexp
  223.         end
  224.   ###########################################################################
  225.         if actor.level > last_level
  226.           @status_window.level_up(i)
  227.         end
  228.       end
  229.     end
  230.     # 获得金钱
  231.     $game_party.gain_gold(gold)
  232.     # 获得宝物
  233.     for item in treasures
  234.       case item
  235.       when RPG::Item
  236.         $game_party.gain_item(item.id, 1)
  237.       when RPG::Weapon
  238.         $game_party.gain_weapon(item.id, 1)
  239.       when RPG::Armor
  240.         $game_party.gain_armor(item.id, 1)
  241.       end
  242.     end
  243.     # 生成战斗结果窗口
  244.   ###########################################################################
  245.     @result_window = Window_BattleResult.new(nexp, gold, treasures)
  246.   ###########################################################################
  247.     # 设置等待计数
  248.     @phase5_wait_count = 100
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 画面更新 (结束战斗回合)
  252.   #--------------------------------------------------------------------------
  253.   def update_phase5
  254.     # 等待计数大于 0 的情况下
  255.     if @phase5_wait_count > 0
  256.       # 减少等待计数
  257.       @phase5_wait_count -= 1
  258.       # 等待计数为 0 的情况下
  259.       if @phase5_wait_count == 0
  260.         # 显示结果窗口
  261.         @result_window.visible = true
  262.         # 清除主回合标志
  263.         $game_temp.battle_main_phase = false
  264.         # 刷新状态窗口
  265.         @status_window.refresh
  266.       end
  267.       return
  268.     end
  269.     # 按下 C 键的情况下
  270.     if Input.trigger?(Input::C)
  271.       # 战斗结束
  272.       battle_end(0)
  273.     end
  274.   end
  275. end

作者: j296196585    时间: 2016-12-23 01:01
第二种  
还有更加简单 的多倍经验

https://rpg.blue/forum.php?mod=v ... d=396847&extra=  

360截图20161223010623290.jpg (148.12 KB, 下载次数: 0)

360截图20161223010623290.jpg

作者: jiushiainilip19    时间: 2016-12-23 16:14
我做过这个想法  我的做法就是给角色定义一个属性,然后在战斗中获得经验的时候加上这个属性
不知道这样是否是你想要的
RUBY 代码复制
  1. class Game_Actor < Game_Battler
  2.   attr_accessor :mexp  
  3.   alias mohuaiyuan20161223_setup setup
  4.   def setup(actor_id)
  5.     mohuaiyuan20161223_setup(actor_id)
  6.     @mexp_z = 0
  7.   end
  8.   def mexp # 经验提升
  9.     @mexp_z = [[@mexp_z, 0].max,99999999].min
  10.     n = @mexp_z
  11.    #当角色装备1号防具的时候 经验增益1000点!
  12.     if self.armor1_id ==1
  13.      n+=1000
  14.     end
  15.     return [[n, 0].max,99999999].min
  16. end
  17.   def mexp=(mexp)
  18.     @mexp_z += mexp - self.mexp
  19.     @mexp_z = [[@mexp_z, 0].max,99999999].min
  20.   end  
  21. end

然后找到  Scene_Battle 2 获得 EXP那一行
把下面改一改
RUBY 代码复制
  1. for i in 0...$game_party.actors.size
  2.       actor = $game_party.actors[i]
  3.       if actor.cant_get_exp? == false
  4.         last_level = actor.level
  5.         ##########################
  6.         actor.exp += exp+actor.mexp
  7.         ##########################
  8.         if actor.level > last_level
  9.           @status_window.level_up(i)
  10.         end
  11.       end





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