じ☆ve冰风 发表于 2026-7-19 16:06:17

BattleEnd XP

BattleEnd XP

by Kyonides​

Introduction

As many years passed, some RMXP scripts got lost in the sands of time for many reasons. This is why I thought that offering you another option for improving the Party's Victory processing stage was something very convenient for everybody.

What this scriptlet does is simple:

It rewrites the Scene_Battle#start_phase5 by subdividing it into several other methods that handle very specific stuff.
Then I added a Game Variable and a Game Switch to alter its normal behavior.

The Game Variable handles how much EXP your heroes will get.

[*]0 stands for EXP divided by Total Heroes
[*]1 stands for EXP divided by Total Heroes * 2
[*]2 stands for Full EXP
The Game Switch defines if the Party will get the whole list of Treasures.
The Party will only get up to 5 Treasures if the Game Switch is OFF.

                Ruby:       
# * BattleEnd XP * #
#   Scripter : Kyonides Arkanthes
#   2023-06-16

# - Values for VAR_FULL_EXP Game Variable:
# 0 - EXP divided by Total Heroes
# 1 - EXP divided by Total Heroes * 2 (Punishment)
# 2 - Full EXP (Reward)

# - SWITCH_ALL_TREASURES Game Switch allows you to let the party get all of
#   the treasures they have earned instead of just 5 of them.

module BattleEnd
VAR_FULL_EXP = 1
SWITCH_ALL_TREASURES = 1
end

class Scene_Battle
def start_phase5
    @phase = 5
    $game_system.me_play($game_system.battle_end_me)
    $game_system.bgm_play($game_temp.map_bgm)
    process_exp_gold_treasures
    limit_treasures
    distribute_treasures
    distribute_exp_gold
end

def process_exp_gold_treasures
    @exp = 0
    @gold = 0
    @treasures = []
    for enemy in $game_troop.enemies
      next if enemy.hidden
      @exp += enemy.exp
      @gold += enemy.gold
      if rand(100) < enemy.treasure_prob
      if enemy.item_id > 0
          @treasures << $data_items
      elsif enemy.weapon_id > 0
          @treasures << $data_weapons
      elsif enemy.armor_id > 0
          @treasures << $data_armors
      end
      end
    end
end

def limit_treasures
    return if $game_variables
    @treasures = @treasures
end

def gain_treasure(item_id)
    case item
    when RPG::Item
      $game_party.gain_item(item.id, 1)
    when RPG::Weapon
      $game_party.gain_weapon(item.id, 1)
    when RPG::Armor
      $game_party.gain_armor(item.id, 1)
    end
end

def distribute_treasures
    @treasures.each {|treasure| gain_treasure(treasure.id) }
end

def distribute_exp(actor)
    case $game_variables
    when 0
      @final_exp = @exp / $game_party.actors.size
      actor.exp += @final_exp
    when 1
      @final_exp = @exp / $game_party.actors.size / 2
      actor.exp += @final_exp
    when 2
      @final_exp = @exp
      actor.exp += @exp
    end
end

def distribute_exp_gold
    $game_party.actors.each_with_index do |actor, i|
      next if actor.cant_get_exp?
      last_level = actor.level
      distribute_exp(actor)
      @status_window.level_up(i) if actor.level > last_level
    end
    $game_party.gain_gold(@gold)
    @result_window = Window_BattleResult.new(@final_exp, @gold, @treasures)
    @phase5_wait_count = 100
end
end


Terms & Conditions

Free for use in any game.
Due credit is mandatory.
That's it!
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7


本贴来自国际rpgmaker官方论坛作者:kyonides处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/battleend-xp.158407/
页: [1]
查看完整版本: BattleEnd XP