Save-Point
General Methods XP VX & ACE - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Material Development (https://www.save-point.org/forum-8.html)
+--- Forum: Scripts Database (https://www.save-point.org/forum-39.html)
+--- Thread: General Methods XP VX & ACE (/thread-7562.html)

Pages: 1 2


RE: General Methods XP VX & ACE - kyonides - 05-16-2023

Swap Actors aka Party Members at Will! Grinning

XP Script

Code:
# * Swap Party Members XP * #

class Game_Party
  def swap_order(index1, index2)
    @actors[index1], @actors[index2] = @actors[index2], @actors[index1]
    $game_player.refresh
  end

  def swap_member_with_actor(index, actor_id)
    @actors[index] = $game_actors[actor_id]
    $game_player.refresh
  end

  def actor_ids
    @actors.map{|actor| actor.id }
  end

  def swap_actor_with_actor(actor_id1, actor_id2)
    pos = actor_ids.index(actor_id1)
    @actors[pos] = $game_actors[actor_id2]
    $game_player.refresh
  end
  alias :swap_by_actor_ids :swap_actor_with_actor
  alias :swap :swap_order
end

VX & VX ACE Script

Code:
# * Swap Party Members VX & ACE * #

class Game_Party
  def swap_member_with_actor(index, actor_id)
    @actors[index] = actor_id
    $game_player.refresh
  end

  def swap_actor_with_actor(actor_id1, actor_id2)
    pos = @actors.index(actor_id1)
    @actors[pos] = actor_id2
    $game_player.refresh
  end

  def actor_ids
    @actors
  end
  alias :swap_by_actor_ids :swap_actor_with_actor
  alias :swap :swap_order
end

List of Newly Available Script Calls

Code:
$game_party.swap_order(Position1, Position2)
$game_party.swap(Position1, Position2)
$game_party.swap_member_with_actor(Position, ActorID)
$game_party.swap_actor_with_actor(ActorID1, ActorID2)
$game_party.swap_by_actor_ids(ActorID1, ActorID2)
$game_party.actor_ids

Side Note

$game_party.swap_order already existed in RMVX ACE.


RE: General Methods XP VX & ACE - kyonides - 06-01-2023

Find Out Whether or Not an Actor Has Several States

Call for XP
$game_party.actor(ActorIndex).has_states?(state1, etc.)

Code:
# * Has States? XP * #
#   2023-06-01

# * Script Call For XP * #
#  $game_party.actor(ActorIndex).has_states?(state1, etc.)

class Game_Actor
  def has_states?(*new_states)
    states_found = @states & new_states
    states_found.any?
  end
end

class Game_Party
  def actor(pos)
    @actors[pos]
  end
end

Call for VX & VX ACE
$game_party.member(ActorIndex).has_states?(state1, etc.)

Code:
# * Has States? VX & ACE * #
#   2023-06-01

# * Script Call For VX and VX ACE * #
#  $game_party.member(ActorIndex).has_states?(state1, etc.)

class Game_Actor
  def has_states?(*new_states)
    states_found = @states & new_states
    states_found.any?
  end
end

class Game_Party
  def member(pos)
    $game_actors[@actors[pos]]
  end
end



RE: General Methods XP VX & ACE - kyonides - 06-17-2023

BattleEnd XP

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.

Code:
# * 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[enemy.item_id]
        elsif enemy.weapon_id > 0
          @treasures << $data_weapons[enemy.weapon_id]
        elsif enemy.armor_id > 0
          @treasures << $data_armors[enemy.armor_id]
        end
      end
    end
  end

  def limit_treasures
    return if $game_variables[BattleEnd::SWITCH_ALL_TREASURES]
    @treasures = @treasures[0..5]
  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[BattleEnd::VAR_FULL_EXP]
    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