Save-Point
Weapons Swap XP - 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)
+---- Forum: RPGMaker XP (RGSS) Engine (https://www.save-point.org/forum-116.html)
+---- Thread: Weapons Swap XP (/thread-8639.html)



Weapons Swap XP - kyonides - 01-15-2023

Weapons Swap XP

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.

To get the corresponding Skill Scripts, click Here!

XP Script

Code:
# * Weapons Swap XP * #
#   Scripter : Kyonides Arkanthes
#   2023-01-15

# - Free for use in Non Commercial Projects - #

# * Script Calls - #

# - Swap Weapons either by Force or by Unequipping Forbidden Weapons
#   Force? stands for true or false.
#   $game_party.swap_weapons(Force?, PartyIndex1, PartyIndex2)

# - Allow Dual Wield alias Two Swords Style
#   $game_actors[ActorID].dual_wield = true

class Game_Actor
  attr_writer :weapon_id, :armor1_id
  attr_accessor :dual_wield
  alias :two_swords_style :dual_wield
  alias :two_swords_style= :dual_wield=
  def equip_weapon?
    $data_classes[@class_id].weapon_set.include?(@weapon_id)
  end
   
  def equip_armor1?
    klass = $data_classes[@class_id]
    if @dual_wield
      return klass.weapon_set.include?(@weapon_id)
    else
      return klass.armor_set.include?(@armor1_id)
    end
  end

  def unequip_weapon
    $game_party.gain_weapon(@weapon_id, 1)
    @weapon_id = 0
    nil
  end

  def unequip_armor1
    $game_party.gain_armor(@armor1_id, 1)
    @armor1_id = 0
    nil
  end

  def swap_weapon(new_id, force=true)
    return unequip_weapon if equip_fix?(0) or (!force and equip_weapon?)
    @weapon_id = new_id
    true
  end

  def swap_armor1(new_id, force=true)
    return unequip_armor1 if equip_fix?(1) or (!force and !equip_armor1?)
    @armor1_id = new_id
    true
  end
end

class Game_Party
  def swap_weapons(force, *indexes)
    return if indexes[0] == indexes[1]
    heroes = indexes.map{|n| @actors[n] }
    r1, r2 = nil, nil
    if heroes[0].dual_wield and heroes[1].dual_wield
      r2 = swap_armor_ids(force, *heroes)
    end
    r1 = swap_weapon_ids(force, *heroes)
    return (r1 or r2)
  end
  private
  def swap_weapon_ids(force, hero1, hero2)
    w1, w2 = hero1.weapon_id, hero2.weapon_id
    r1 = hero1.swap_weapon(w2, force)
    r2 = hero2.swap_weapon(w1, force)
    return (r1 or r2)
  end

  def swap_armor_ids(force, hero1, hero2)
    a1, a2 = hero1.armor1_id, hero2.armor1_id
    r1 = hero1.swap_armor1(a2, force)
    r2 = hero2.swap_armor1(a1, force)
    return (r1 or r2)
  end
end

Terms & Conditions

Check out the comments embedded in each script! Happy with a sweat
Just keep in mind you should mention me in your game credits. Winking
Do Not Repost It!


RE: Weapons Swap - kyonides - 01-15-2023

Weapons Swap Skill XP

by Kyonides

Introduction

This is the natural outcome of implementing the Weapons Swap script:

to let Witch Ghost Zombie Golem Your Foes Use It Against You! Slayne Ghim Deedlit Orson 

The Scripts

XP Script with Enemy's Skill

Code:
# * Weapons Swap & Skill XP * #
#   Scripter : Kyonides Arkanthes
#   2023-01-15

# - Free for use in Non Commercial Projects - #

# * Script Calls * #

# - Swap Weapons either by Force or by Unequipping Forbidden Weapons
#   Force? stands for true or false.
#   $game_party.swap_weapons(Force?, PartyIndex1, PartyIndex2)

# - Allow Dual Wield alias Two Swords Style
#   $game_actors[ActorID].dual_wield = true

# * NOTES * #

# Set the SKILL_ID Constant to the corresponding Skill Number in the DB.

# Set the ID of the BY_FORCE_SWITCH_ID Constant and set the corresponding
# Game Variable to true before any battle where you want the mobsters to
# perform the swap BY FORCE.

module KWSwap
  SKILL_ID = 91
  BY_FORCE_SWITCH_ID = 3
end

class Game_Battler
  alias :kyon_weapon_swap_skill_skill_fx :skill_effect
  def skill_effect(user, skill)
    if user.is_a?(Game_Enemy) and KWSwap::SKILL_ID == skill.id
      heroes = $game_party.actors
      return if heroes.size < 2
      pos1 = self.index
      pos2 = rand(heroes.size)
      force = $game_switches[KWSwap::BY_FORCE_SWITCH_ID]
      return $game_party.swap_weapons(force, pos1, pos2)
    end
    kyon_weapon_swap_skill_skill_fx(user, skill)
  end
end

class Game_Actor
  attr_writer :weapon_id, :armor1_id
  attr_accessor :dual_wield
  alias :two_swords_style :dual_wield
  alias :two_swords_style= :dual_wield=
  def equip_weapon?
    $data_classes[@class_id].weapon_set.include?(@weapon_id)
  end
   
  def equip_armor1?
    klass = $data_classes[@class_id]
    if @dual_wield
      return klass.weapon_set.include?(@weapon_id)
    else
      return klass.armor_set.include?(@armor1_id)
    end
  end

  def unequip_weapon
    $game_party.gain_weapon(@weapon_id, 1)
    @weapon_id = 0
    nil
  end

  def unequip_armor1
    $game_party.gain_armor(@armor1_id, 1)
    @armor1_id = 0
    nil
  end

  def swap_weapon(new_id, force=true)
    return unequip_weapon if equip_fix?(0) or (!force and equip_weapon?)
    @weapon_id = new_id
    true
  end

  def swap_armor1(new_id, force=true)
    return unequip_armor1 if equip_fix?(1) or (!force and !equip_armor1?)
    @armor1_id = new_id
    true
  end
end

class Game_Party
  def swap_weapons(force, *indexes)
    return if indexes[0] == indexes[1]
    heroes = indexes.map{|n| @actors[n] }
    r1, r2 = nil, nil
    if heroes[0].dual_wield and heroes[1].dual_wield
      r2 = swap_armor_ids(force, *heroes)
    end
    r1 = swap_weapon_ids(force, *heroes)
    return (r1 or r2)
  end
  private
  def swap_weapon_ids(force, hero1, hero2)
    w1, w2 = hero1.weapon_id, hero2.weapon_id
    r1 = hero1.swap_weapon(w2, force)
    r2 = hero2.swap_weapon(w1, force)
    return (r1 or r2)
  end

  def swap_armor_ids(force, hero1, hero2)
    a1, a2 = hero1.armor1_id, hero2.armor1_id
    r1 = hero1.swap_armor1(a2, force)
    r2 = hero2.swap_armor1(a1, force)
    return (r1 or r2)
  end
end


Same Terms & Conditions as the Main Script on the Main Thread.