Weapons Swap VX + ACE - kyonides -  09-27-2024
 
 
Weapons Swap VX + ACE 
 
by Kyonides 
 
 
Introduction 
 
The title makes it extremely clear, but just case here we go: your party members can now swap their weapons at any given time. It will do it either BY FORCE or Lazily (by running a couple of internal checks). 
 
Just call: 
Force? is a placeholder for true or false. 
Code: $game_party.swap_weapons(Force?, FirstPosition, SecondPosition)
  
...and it will let you make the change swiftly! 
 
It will ignore your request if for ANY REASON you provide it with identical positions. 
 
Just in Case you are using VX or VX ACE: 
 
It does NOT ALTER the Actor's Two Swords Style or Dual Wield feature at all. 
 
To get the corresponding Skill Scripts, click Here! 
 
The Scripts 
 
VX Script 
 
Code: # * Weapons Swap VX * # 
#   Scripter : Kyonides Arkanthes 
#   2023-01-14 
 
# - It's free as in beer. - # 
 
# * Script Call * # 
#   $game_party.swap_weapons(PartyIndex1, PartyIndex2) 
 
class Game_Actor 
  attr_writer :weapon_id, :armor1_id 
end 
 
class Game_Party 
  def swap_weapons(*indexes) 
    return if indexes[0] == indexes[1] 
    heroes = indexes.map{|n| $game_actors[@actors[n]] } 
    if heroes[0].two_swords_style and heroes[1].two_swords_style 
      swap_armor_ids(*heroes) 
    end 
    swap_weapon_ids(*heroes) 
  end 
  private 
  def swap_weapon_ids(hero1, hero2) 
    hero1.weapon_id, hero2.weapon_id = hero2.weapon_id, hero1.weapon_id 
  end 
 
  def swap_armor_ids(hero1, hero2) 
    hero1.armor1_id, hero2.armor1_id = hero2.armor1_id, hero1.armor1_id 
  end 
end
  
VX ACE Script 
 
Code: # * Weapons Swap ACE * # 
#   Scripter : Kyonides Arkanthes 
#   2023-01-15 
 
# - It's free as in beer. - # 
 
# * Script Call - # 
 
# - Swap Weapons - Force? Options: true or false - # 
#   $game_party.swap_weapons(Force?, PartyIndex1, PartyIndex2) 
 
class Game_BaseItem 
  attr_accessor :item_id 
end 
 
class Game_Actor 
  def just_equips() @equips end 
end 
 
class Game_Party 
  def get_hero(pos) 
    $game_actors[@actors[pos]] 
  end 
 
  def swap_equip_item_ids(force, pos, hero1, hero2) 
    he1 = hero1.just_equips[pos] 
    he2 = hero2.just_equips[pos] 
    he1.item_id, he2.item_id = he2.item_id, he1.item_id 
    return if force 
    hero1.refresh 
    hero2.refresh 
  end 
  private :get_hero, :swap_equip_item_ids 
 
  def swap_weapons(force, *indexes) 
    return if indexes[0] == indexes[1] 
    hero1 = get_hero(indexes.shift) 
    hero2 = get_hero(indexes.shift) 
    if hero1.dual_wield? and hero2.dual_wield? 
      swap_equip_item_ids(force, 1, hero1, hero2) 
    end 
    swap_equip_item_ids(force, 0, hero1, hero2) 
    return true 
  end 
  def member_ids() @actors end 
end
  
 
Terms & Conditions 
 
Check out the comments embedded in each script!    
Just keep in mind you should mention me in your game credits.   
Do Not Repost It!
 
 
 
RE: Weapons Swap VX + ACE - kyonides -  09-27-2024
 
 
Weapons Swap Skill VX + ACE 
 
by Kyonides 
 
Introduction 
 
This is the natural outcome of implementing the Weapons Swap script: 
 
 
The Scripts 
VX Script 
 
Code: # * Weapons Swap Skill VX * # 
#   Scripter : Kyonides Arkanthes 
#   2023-01-14 
 
# - It's free as in beer. - # 
 
# Just leave the following comment in the Skill's Note Box: 
#   <weapon swap> 
 
class Game_Battler 
  WEAPON_SWAP_REGEX = /<weapon swap>/i 
  alias :kyon_weapon_swap_skill_skill_fx :skill_effect 
  def apply_weapon_swap(user, skill) 
    if skill.note[WEAPON_SWAP_REGEX] and user.is_a?(Game_Enemy) 
      clear_action_results 
      heroes = $game_party.member_ids 
      return @skipped = true if heroes.size < 2 
      pos1 = self.index 
      pos2 = rand(heroes.size) 
      result = $game_party.swap_weapons(pos1, pos2) 
      return @missed = nil 
    end 
  end 
 
  def skill_effect(user, skill) 
    kyon_weapon_swap_skill_skill_fx(user, skill) 
    apply_weapon_swap(user, skill) 
  end 
end
  
VX ACE Script with Enemy's Skill 
 
NOTE: VX Ace will always attempt to remove the forbidden weapons as stated in the comments embedded in my script. What I did was creating a WS state to prevent it from doing it while in battle. Once you go back to the map, you will find your weapons in your party's inventory. 
 
Code: # * Weapons Swap & Skill ACE * # 
#  Scripter : Kyonides Arkanthes 
#  2023-01-15 
 
# - It's free as in beer. - # 
 
# * Script Call - # 
 
# - Swap Weapons - Force? Options: true or false - # 
#  $game_party.swap_weapons(Force?, PartyIndex1, PartyIndex2) 
 
# - Define the WS Skill by leaving a comment in the Skill's Note Box: 
#  <weapon swap force>  or  <weapon swap lazy> 
 
# - Create a Weapons Swap State in the States DB and Set the value of the 
#  STATE Constant accordingly. It is found in the KWSwap Module. 
 
# * Warning * # 
 
#  VX ACE will ALWAYS attempt to REMOVE unequippable weapons whenever ANY 
#  State Change or Buff or Debuff and other alterations takes place. 
 
module KWSwap 
  STATE = 26 
  REGEX = /<weapon swap (force|lazy)>/i 
end 
 
class Game_BaseItem 
  attr_accessor :item_id 
end 
 
class Game_Battler 
  alias :kyon_weapon_swap_skill_item_user_fx :item_user_effect 
  def apply_weapon_swap(user, skill) 
    return unless skill.note[KWSwap::REGEX] and user.is_a?(Game_Enemy) 
    heroes = $game_party.member_ids 
    if heroes.size < 2 
      @result.missed = true 
      return 
    end 
    pos1 = self.index 
    pos2 = rand(heroes.size) 
    force = $1[/force/] != nil 
    success = $game_party.swap_weapons(force, pos1, pos2) 
    if success 
      hero2 = heroes[pos2] 
      $game_actors[hero2].add_state(KWSwap::STATE) 
      add_state(KWSwap::STATE) 
    end 
    @result.used = success 
  end 
 
  def item_user_effect(user, item) 
    swapped = false 
    swapped |= apply_weapon_swap(user, item) if item.is_a?(RPG::Skill) 
    kyon_weapon_swap_skill_item_user_fx(user, item) unless swapped 
  end 
end 
 
class Game_Actor 
  alias :kyon_weapon_swap_skill_refresh :refresh 
  def refresh 
    if state?(KWSwap::STATE) 
      super 
      return 
    end 
    kyon_weapon_swap_skill_refresh 
  end 
  def just_equips() @equips end 
end 
 
class Game_Party 
  def get_hero(pos) 
    $game_actors[@actors[pos]] 
  end 
 
  def swap_equip_item_ids(force, pos, hero1, hero2) 
    he1 = hero1.just_equips[pos] 
    he2 = hero2.just_equips[pos] 
    he1.item_id, he2.item_id = he2.item_id, he1.item_id 
    return if force 
    hero1.refresh 
    hero2.refresh 
  end 
  private :get_hero, :swap_equip_item_ids 
 
  def swap_weapons(force, *indexes) 
    return if indexes[0] == indexes[1] 
    hero1 = get_hero(indexes.shift) 
    hero2 = get_hero(indexes.shift) 
    if hero1.dual_wield? and hero2.dual_wield? 
      swap_equip_item_ids(force, 1, hero1, hero2) 
    end 
    swap_equip_item_ids(force, 0, hero1, hero2) 
    return true 
  end 
  def member_ids() @actors end 
end
  
 
Same Terms & Conditions as the Main Script on the Main Thread. 
 
 
 
 |