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.
|