FG7 - Easy Weapon Upgrade
Easy Weapon UpgradeBy: FamilyGamer7
Introduction
The easiest way to implement an Weapon Upgrade System while providing many features for flexibility and customization.
Click to expand...
Features
Creates a working weapon upgrade system scene without having to define an actual weapon level through other forms of scripting implementations. This script gives the ability to customize almost everything in the scene and the purpose is to be super user friendly and customize to your liking (for your game). *To script call the WPN Upgrade scene: SceneManager.call(Scene_WeaponUpgrade)
Click to expand...
Screenshots
Click to expand...
Demo
Provided as an "attachment" for reference purposes (The setup).
Click to expand...
Script
Spoiler: FG7 - Easy Weapon Upgrade Ruby:
#==============================================================================
# Title: Easy Weapon Upgrade
# Author: FamilyGamer7 (FG7)
# Version: 1.0
# Engine: RPG Maker VX Ace
#==============================================================================
# ** Change Log |
# ---------------
# 1.0 => Created Script
#==============================================================================
# ** Description |
# ----------------
# The easiest way to implement an Weapon Upgrade System while providing many
# features for flexbility and customization.
#==============================================================================
# ** Terms of Use |
# -----------------
# * Free to use in non-commercial projects and commercial projects
# * Feel free to modify and improve the script. Credit is still required.
# * Credit FamilyGamer7
#==============================================================================
# ** Setup - Required |
# --------------------
# This script works by simply appending a starting value of "1" on the end of
# the weapon name. This makes the script simple without having to define a
# "level" for the weapon as this value acts as a level indicator.
#
# For each actor weapon, you will need need to append the correct setup for the
# script to properly work. If the weapon name is.. Hand Ax, see examples below.
#
# - Acceptable actor weapon name setup in the game database
# EX: Hand Ax 1
# EX: Hand Ax Lv. 1
# Ex: Hand Ax Lv.1
# EX: Hand Ax Lvl. 1
# Ex: Hand Ax Lvl.1
#
# The script will automatically replace the weapon number value that is
# appended on the weapon name and increase by a value of 1.
#
# *** PLEASE ENSURE THE WEAPON PRICE IS SET TO "0" IN THE GAME DATABASE ***
# (You can set a price on the WPN, but incremental upgrade will not work as intended)
#
# To script call the WPN Upgrade scene: SceneManager.call(Scene_WeaponUpgrade)
#
# * All fine tuning will need to be done in the Module section below.
#==============================================================================
# ** WARNING! |
# ------------
# This script leverages the game database "price" on the actor weapon to help
# perform the weapon upgrade. It is NOT intended to be used in a game where
# you buy and sell weapons as this will affect the script in a negative way.
#==============================================================================
# ** Note(s) |
# -----------
# Even though this script was designed for actors to have a weapon equipped at
# all times, logic as been added to check if the actor has a weapon equipped
# or not to prevent errors being thrown. Enjoy!
#==============================================================================
#==============================================================================
# ** Module: FG7::Easy_Weapon_Upgrade
#------------------------------------------------------------------------------
#This modules creates a static variable to be used within the script.
#==============================================================================
module FG7
module Easy_Weapon_Upgrade
#==============================================================================
# -------------------- ALLOWED TO EDIT BELOW THIS LINE ---------------------- #
#==============================================================================
#--------------------------------
# | Game Variable(s) Configuration |
#--------------------------------
# | !!!! REQUIRED !!!! |
#--------------------------------
# Sets the game variable value for the cost to upgrade
# (Choose any unused $game_variable to run this script)
Game_Variable = 10
# Sets the game variable value for the WPN level #
# (Choose any unused $game_variable to run this script)
Game_Variable2 = 11
# Sets/flips the game switch if no WPN is equipped
# (Choose any unused $game_switch to run this script)
Game_Switch = 12
#------------------------------
# | Weapon Upgrade Configuration |
#------------------------------
# Sets the incremental value once you start upgrading the WPN
# (This value is added each time you upgrade)
WPN_Incremental_Value = 1200
# Sets the +attack paramater value when upgrading WPN level ech time
WPN_Attack_Value = 5
# Sets the max level every actor can reach when upgrading the WPN
# (There is technically no limit to the max upgrade level for Weapons)
WPN_Level_Max = 15
#--------------------------
# | Additional Configuration |
#--------------------------
# Sets the name for the Level parameter on the WPN
WPN_Level_Text = "WLVL"
# Sets the name for the weapon attack paramater on the WPN
WPN_Level_Attack_Text = "WATK"
# Sets the text when you do not have enough currency to upgrade actor WPN
Not_Enough_Currency = "Not Enough Currency!"
# Sets the text indicating before the currency value for the WPN upgrade
WPN_Upgrade_Text = "Upgrade Cost:"
# Sets the text when you have reach the Max WPN level upgrade
WPN_Maxed_Out_Text = "Currently Maxed Out!"
# Sets the text when you have reach the Max WPN level upgrade
WPN_Not_Equipped = " No Weapon Equipped!"
# Sets whether to show the actor face on the weapon upgrade window
Show_Actor_Face = true
#--------------------------------------
# | WPN - Window Positioning Configuration |
#--------------------------------------
# Sets the "X" coordinate of the windows
X_Horizontal = 203
# Sets the "Y" coordinate of the windows
Y_Vertical = 139
#------------------------------
# | Title - Window Configuration |
#------------------------------------------
# |!!!! ONLY WORKS IF SET TO "TRUE" !!!! |
#------------------------------------------
# Sets the title window on the weapon upgrade scene
Show_Title_Window = true
# Sets the text on the title window on the weapon upgrade scene
Show_Title_Window_Text = "Blacksmith"
# Sets the "X" coordinate of the windows
Title_X_Horizontal = 10
# Sets the "Y" coordinate of the windows
Title_Y_Vertical = 12
# Sets the "Width" of the title window
Title_Width = 137
# Sets the "Height" of the title window
Title_Height = 50
#==============================================================================
# ---------- DO NOT EDIT BELOW THIS LINE (FOR ADVANCED USERS) --------------- #
#==============================================================================
end
end
#==============================================================================
# ** Window_Gold
#------------------------------------------------------------------------------
#This window displays the party's gold.
#==============================================================================
class Window_Gold < Window_Base
#--------------------------------------------------------------------------
# * Get Window Width
#--------------------------------------------------------------------------
alias :fg7_easy_weapon_upgrade_window_width :window_width
def window_width
if SceneManager.scene_is?(Scene_WeaponUpgrade)
return 126
end
fg7_easy_weapon_upgrade_window_width
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
alias :fg7_easy_weapon_upgrade_refresh :refresh
def refresh
fg7_easy_weapon_upgrade_refresh
if SceneManager.scene_is?(Scene_WeaponUpgrade)
contents.clear
draw_currency_value(value, currency_unit, 1, 0, contents.width - 8)
end
end
end
#==============================================================================
# ** Window_WeaponStatus
#------------------------------------------------------------------------------
#This window displays all the information on the actor for weapon upgrading.
#==============================================================================
class Window_WeaponStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, Graphics.width, Graphics.height)
self.opacity = 0
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Set Actor
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
contents.clear
# Draws actor face
draw_actor_face(@actor, 138, 25) if FG7::Easy_Weapon_Upgrade::Show_Actor_Face == true
# Draws actor name
draw_actor_name(@actor, 12, 110)
# Draws pre-defined text for the scene
change_color(text_color(4))
draw_text(12, 122, 100, 50, FG7::Easy_Weapon_Upgrade::WPN_Level_Text)
draw_text(130, 122, 100, 50, FG7::Easy_Weapon_Upgrade::WPN_Level_Attack_Text)
# Creates static variables for "draw_text" of the upgrade cost
cost_x = -65; cost_y = 195
# Checks if an actor weapon is equipped (Flip $game_switch if not)
if @actor.weapons == nil
$game_variables = false
change_color(text_color(0))
draw_text(12, 145, 800, 50, "----------")
draw_text(-64, 122, 300, 50, "--", 2)
draw_text(-189, 122, 300, 50, "--", 2)
draw_text(cost_x - 13, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::WPN_Not_Equipped, 2)
# Since actor weapon is equipped - show all information for upgrading
else
$game_variables = true
# Actor Weapon - Name (Removes all numbers from name and Lv.)
change_color(text_color(0))
draw_text(12, 145, 800, 50, @actor.weapons.name.tr("0-9", "").tr("Lv.", "").tr("Lvl.", "").strip)
# Actor Weapon - Level (Removes all non-digits from name)
change_color(text_color(0))
draw_text(-189, 122, 300, 50, @actor.weapons.name.tr("^0-9", ""), 2)
# Actor Weapon Attack stat
draw_text(-64, 122, 300, 50, @actor.weapons.params, 2)
change_color(text_color(14))
# Draws WPN database price (that is +value on the WPN upgrade)
change_color(text_color(0))
if $game_party.gold < @actor.weapons.price + FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value
draw_text(cost_x - 11, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::Not_Enough_Currency, 2)
elsif @actor.weapons.name.gsub(/[^0-9]/, '') == "1"
draw_text(cost_x - 91, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::WPN_Upgrade_Text, 2)
draw_text(cost_x, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value.to_s + Vocab::currency_unit, 2)
elsif @actor.weapons.name.gsub(/[^0-9]/, '').to_i == FG7::Easy_Weapon_Upgrade::WPN_Level_Max.to_i
draw_text(cost_x - 13, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::WPN_Maxed_Out_Text , 2)
else
draw_text(cost_x - 91, cost_y, 300, 50, FG7::Easy_Weapon_Upgrade::WPN_Upgrade_Text, 2)
draw_text(cost_x, cost_y, 300, 50, (@actor.weapons.price + FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value).to_s + Vocab::currency_unit, 2)
end
# Sets the actor WPN level into a variable (To disable upgrade button)
$game_variables = @actor.weapons.name.gsub(/[^0-9]/, '')
# Sets the actor WPN price into a variable (To disable upgrade button)
$game_variables = @actor.weapons.price + FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value
end
end
end
#==============================================================================
# ** Window_WeaponCommand
#------------------------------------------------------------------------------
#This window is the weapon upgrade command for the scene.
#==============================================================================
class Window_WeaponCommand < Window_Command
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0)
end
#--------------------------------------------------------------------------
# * Get Digit Count
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# * Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_command("Upgrade", :upgrade, no_gold_or_wpn_max_level_or_no_wpn_equipped)
add_command("Change", :change, no_extra_party_members)
add_command("Cancel", :cancel)
end
#--------------------------------------------------------------------------
# * Disabled - No Gold or WPN mac level
#--------------------------------------------------------------------------
def no_gold_or_wpn_max_level_or_no_wpn_equipped
return true if $game_variables.to_i != FG7::Easy_Weapon_Upgrade::WPN_Level_Max.to_i && $game_party.gold > $game_variables.to_i && $game_variables == true
end
#--------------------------------------------------------------------------
# * Disabled - No Additional/Extra Party Members
#--------------------------------------------------------------------------
def no_extra_party_members
return true if $game_party.members.size > 1
end
end
#==============================================================================
# ** Window_WeaponUpgradeConfirm
#------------------------------------------------------------------------------
#This window is a confirm window when upgrading your actor weapon level.
#==============================================================================
class Window_WeaponUpgradeConfirm < Window_Command
#--------------------------------------------------------------------------
# * Added Method: Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0)
self.opacity = 0
self.openness = 255
end
#--------------------------------------------------------------------------
# * Added Method: Get Digit Count
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# * Added Method: Create Command List
#--------------------------------------------------------------------------
def make_command_list
add_command("Yes", :yes)
add_command("No", :no)
end
end
#==============================================================================
# ** Window_UpgradeText
#------------------------------------------------------------------------------
#Window class created for the single custom single window usage.
#==============================================================================
class Window_UpgradeText < Window_Base
#--------------------------------------------------------------------------
# * Defines the Window used - Used for upgrade & title text
#--------------------------------------------------------------------------
def initialize(x, y, width, height, title)
super(x, y, width, height)
draw_text(4, 0, contents.width + 30, line_height, title)
end
end
#==============================================================================
# ** Scene_MenuBase
#------------------------------------------------------------------------------
#This class performs basic processing related to the menu screen.
#==============================================================================
class Scene_MenuBase < Scene_Base
#--------------------------------------------------------------------------
# * Creates Single Text Window - Used for upgrade text background window
#--------------------------------------------------------------------------
def create_upgrade_text_window(x, y, width, height, title)
@upgrade_text_window = Window_UpgradeText.new(x, y, width, height, title)
end
#--------------------------------------------------------------------------
# * Creates Single Text Window - Used for upgrade title window
#--------------------------------------------------------------------------
def create_upgrade_title_window(x, y, width, height, title)
@upgrade_title_window = Window_UpgradeText.new(x, y, width, height, title)
end
end
#==============================================================================
# ** Scene_WeaponUpgrade
#------------------------------------------------------------------------------
#This class scene performs the upgrading of the weapon level.
#==============================================================================
class Scene_WeaponUpgrade < Scene_MenuBase
#--------------------------------------------------------------------------
# * Start Processing
#--------------------------------------------------------------------------
def start
super
create_upgrade_cost_window
create_gold_window
create_weapon_status_bg_window
create_weapon_status_window
create_weapon_status_command_window
create_upgrade_title_window(FG7::Easy_Weapon_Upgrade::Title_X_Horizontal, FG7::Easy_Weapon_Upgrade::Title_Y_Vertical, FG7::Easy_Weapon_Upgrade::Title_Width, FG7::Easy_Weapon_Upgrade::Title_Height, FG7::Easy_Weapon_Upgrade::Show_Title_Window_Text) if FG7::Easy_Weapon_Upgrade::Show_Title_Window == true
create_upgrade_text_window(9999, FG7::Easy_Weapon_Upgrade::Y_Vertical, 126, 96, "Upgrade?")
create_weapon_upgrade_confirm_window
end
#--------------------------------------------------------------------------
# * Create Cost For Weapon Upgrade Window
#--------------------------------------------------------------------------
def create_upgrade_cost_window
x = FG7::Easy_Weapon_Upgrade::X_Horizontal
y = FG7::Easy_Weapon_Upgrade::Y_Vertical + 96
width = 266
height = 48
@upgrade_cost_window = Window_Base.new(x, y, width, height)
@upgrade_cost_window.show
end
#--------------------------------------------------------------------------
# * Create Weapon Status Window
#--------------------------------------------------------------------------
def create_weapon_status_window
@weapon_status_window = Window_WeaponStatus.new(@actor)
@weapon_status_window.x = FG7::Easy_Weapon_Upgrade::X_Horizontal - 1
@weapon_status_window.y = FG7::Easy_Weapon_Upgrade::Y_Vertical - 111
@weapon_status_window.width = 800
@weapon_status_window.height = 430
end
#--------------------------------------------------------------------------
# * Create Weapon Status Background Window
#--------------------------------------------------------------------------
def create_weapon_status_bg_window
x = FG7::Easy_Weapon_Upgrade::X_Horizontal
y = FG7::Easy_Weapon_Upgrade::Y_Vertical
width = 266
height = 96
@status_weapon_actor_bg_window = Window_Base.new(x, y, width, height)
@status_weapon_actor_bg_window.show
end
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_weapon_status_command_window
@weapon_status_command_window = Window_WeaponCommand.new
@weapon_status_command_window.x = FG7::Easy_Weapon_Upgrade::X_Horizontal - 126
@weapon_status_command_window.y = FG7::Easy_Weapon_Upgrade::Y_Vertical
@weapon_status_command_window.width = 126
@weapon_status_command_window.height = 96
@weapon_status_command_window.activate
@weapon_status_command_window.set_handler(:upgrade, method(:upgrade_weapon))
@weapon_status_command_window.set_handler(:change, method(:next_actor))
@weapon_status_command_window.set_handler(:pagedown, method(:next_actor))
@weapon_status_command_window.set_handler(:pageup, method(:prev_actor))
@weapon_status_command_window.set_handler(:cancel, method(:return_scene))
@weapon_status_command_window.refresh
end
#--------------------------------------------------------------------------
# * Create Weapon Upgrade Confirm Window
#--------------------------------------------------------------------------
def create_weapon_upgrade_confirm_window
@weapon_upgrade_confirm_window = Window_WeaponUpgradeConfirm.new
@weapon_upgrade_confirm_window.x = FG7::Easy_Weapon_Upgrade::X_Horizontal - 126
@weapon_upgrade_confirm_window.y = FG7::Easy_Weapon_Upgrade::Y_Vertical + 24
@weapon_upgrade_confirm_window.width = 126
@weapon_upgrade_confirm_window.height = 84
@weapon_upgrade_confirm_window.hide.deactivate
@weapon_upgrade_confirm_window.set_handler(:yes, method(:upgrade_weapon_confirm))
@weapon_upgrade_confirm_window.set_handler(:no, method(:upgrade_weapon_confirm_cancel))
@weapon_upgrade_confirm_window.set_handler(:cancel, method(:upgrade_weapon_confirm_cancel))
@weapon_upgrade_confirm_window.refresh
end
#--------------------------------------------------------------------------
# * Added Method: Create Gold Window
#--------------------------------------------------------------------------
def create_gold_window
@gold_window = Window_Gold.new
@gold_window.x = FG7::Easy_Weapon_Upgrade::X_Horizontal - 126
@gold_window.y = FG7::Easy_Weapon_Upgrade::Y_Vertical + 96
@gold_window.width = 126
end
#--------------------------------------------------------------------------
# * Upgrade Weapon
#--------------------------------------------------------------------------
def upgrade_weapon
@weapon_status_command_window.hide
@upgrade_text_window.x = FG7::Easy_Weapon_Upgrade::X_Horizontal - 126
@weapon_upgrade_confirm_window.show.activate.select(0)
end
#--------------------------------------------------------------------------
# * Upgrade Weapon - Confirm
#--------------------------------------------------------------------------
def upgrade_weapon_confirm
# Grabs the current weapon level number
@Current_WPN_Level = @actor.weapons.name.gsub(/[^0-9]/, '')
# Adds the current level weapon number and counts +1 on it
@New_WPN_Level = @Current_WPN_Level.to_i + 1
# Strips out the number from the actor weapon name
@actor.weapons.name = @actor.weapons.name.tr("0-9", "")
# Renames the actor weapon to resemble a new level from upgrading
@actor.weapons.name = @actor.weapons.name + @New_WPN_Level.to_s
# Added the paramater back together with a +value
@actor.weapons.params = @actor.weapons.params + FG7::Easy_Weapon_Upgrade::WPN_Attack_Value
# Checks for actor weapon level and adds incremental value on each upgrade
if @actor.weapons.name.gsub(/[^0-9]/, '') == "1"
@actor.weapons.price = FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value
else
@actor.weapons.price = @actor.weapons.price + FG7::Easy_Weapon_Upgrade::WPN_Incremental_Value
end
# Lose gold for upgrading weapon
$game_party.lose_gold(@actor.weapons.price)
# Creates hammer sharpening sound that the weapon has been upgraded
20.times { Graphics.update }
RPG::SE.new("Hammer").play
20.times { Graphics.update }
RPG::SE.new("Hammer").play
20.times { Graphics.update }
RPG::SE.new("Decision2").play
# Refresh and update scenes
@weapon_upgrade_confirm_window.hide.deactivate
@upgrade_text_window.x = 9999
@weapon_status_window.refresh
@gold_window.refresh
@weapon_status_command_window.refresh
@weapon_status_command_window.show.activate
@weapon_status_command_window.select(0)
end
#--------------------------------------------------------------------------
# * Upgrade Weapon - Confirm Cancel
#--------------------------------------------------------------------------
def upgrade_weapon_confirm_cancel
@weapon_upgrade_confirm_window.hide.deactivate
@upgrade_text_window.x = 9999
@weapon_status_command_window.show.activate
@weapon_status_command_window.select(0)
end
#--------------------------------------------------------------------------
# * Change Actors
#--------------------------------------------------------------------------
def on_actor_change
@weapon_status_window.actor = @actor
@weapon_status_window.refresh
@weapon_status_command_window.refresh
@weapon_status_command_window.activate
end
end
How to Use
Add this script in the script editor under in the "Materials" section and above "Main Process".
The instructions and setup for the script are held within the script header itself. No need to repeat here.
Click to expand...
Terms of Use
- Free to use in non-commercial projects and commercial projects
- Feel free to modify and improve the script. Credit is still required.
- Credit FamilyGamer7
Click to expand...
本贴来自国际rpgmaker官方论坛作者:FG7处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/fg7-easy-weapon-upgrade.144627/
页:
[1]