O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Upgrade de Armas

Iniciado por LoboShow, 09/03/2013 às 13:55

Upgrade de Armas

Compativel com: RMVX
Compatibilidade: ?
Facilidade de uso: ?
Lag gerado: ?

[box class=titlebg]
Para que serve o script
[/box]
Este script determina um level para cada arma. Armas podem ser melhoradas através de um menu de shop especial. Quando você aumenta o level da arma, os atributos dela são aumentados. O aumento de atributos da arma não leva em consideração o herói que esta equipado. Por padrão o level máximo das armas é 20, porém isto pode ser ajustado.

[box class=titlebg]
Imagens
[/box]

[box class=titlebg]
Script
[/box]
##########################################################
# Sistema de upgrade para a arma #
# by Akin (Obrigado) #
# Traduzida por : ElSake #
##########################################################
# Os niveis das armas irá produzir mais status #
# Para chamar o upgrade de skill bote isso em chamar #
# script: #
# "$scene = Scene_Weapons_Upgrade.new" #
# #
# Procure por A34sZ1A para encontrar a forma utilizada #
# para calcular o ponto de stats e levar para cada arma #
# e acrescentar o preço do upgrade #
# #
# Esse script sua a classe de Windows_Confirm #
# Prexus #
# #
##########################################################

#Essa é a janela da confirmação feita pela classe Prexus
class Window_Confirm < Window_Selectable
def initialize(index = -1)
super(192, 168, 160, 80)
create_contents
@item_max = 2
@column_max = 2
self.index = index
self.active = false
self.openness = 0
refresh
end
#--------------------------------------------------------------------------
def refresh
for i in 0..@item_max
rect = item_rect(i)
self.contents.clear_rect(rect)
end
self.contents.draw_text(0, 0, self.contents.width, WLH, "Confirm?", 1)
rect = item_rect(0)
self.contents.draw_text(rect, "Yes", 1)
rect = item_rect(1)
self.contents.draw_text(rect, "No", 1)
end
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new(0, 0, 0, 0)
rect.width = (contents.width + @spacing) / @column_max - @spacing
rect.height = WLH
rect.x = index % @column_max * (rect.width + @spacing)
rect.y = (index / @column_max * WLH) + WLH
return rect
end
end

#Esse módulo acrescenta o nivel para cada arma
module RPG
class Weapon < BaseItem
attr_accessor :level
alias akin_weapon_level_system_ini initialize
def initialize
akin_weapon_level_system_ini
@level = 1
end
end
end

#Esse módulo calcula o nivel da arma
module Akin_Weapons
def self.level_up(weapon_input)
if weapon_input.level == nil or weapon_input.level == 0
weapon_input.level = 1
end
weapon_input.level += 1
#############################################################################
#--------Level up Funções-------------A34sZ1A ----------------------- #
# As estatisticas irão aumentar em 20% do seu valor anterior +1 #
# Eles sempre sobem um nivel utilizando essa formula #
# Certifique-se de manter o valor fixado para um inteiro usando "Integer ()"#
# Não há mais nem um local a ser mudado #
# Se a fórmula é modificada encontrar esse local com BZ8q1 #
#############################################################################

weapon_input.atk = Integer(weapon_input.atk * 1.2 + 1)
weapon_input.def = Integer(weapon_input.def * 1.2 + 1)
weapon_input.spi = Integer(weapon_input.spi * 1.2 + 1)
weapon_input.agi = Integer(weapon_input.agi * 1.2 + 1)
#-------Final de Level Up Funções-----------------------------------------
end
end

#------------------------------------------------------------------------------
# Adiciona-se métodos de chamar o windows_base do ator a arma equipada
#==============================================================================

class Window_Base < Window
def draw_actor_weapon(actor, x, y)
self.contents.font.color = power_up_color
self.contents.draw_text(x, y, 96, WLH, "Equiped :")
self.contents.font.color = normal_color
n = actor.weapon_id
equiped_weapon = $data_weapons[n]
if equiped_weapon == nil
self.contents.draw_text(x + 8, y + WLH, 192, WLH, "None")
else
self.contents.draw_text(x + 8, y + WLH, 192, WLH, equiped_weapon.name)
if equiped_weapon.level == nil or equiped_weapon.level == 0
$data_weapons[n].level = 1
equiped_weapon = $data_weapons[n]
end
self.contents.font.color = system_color
self.contents.draw_text(x + 8, y + WLH * 2, 112, WLH, "Weapon Lvl:")
self.contents.font.color = normal_color
self.contents.draw_text(x + 120, y + WLH * 2, 64, WLH, equiped_weapon.level)
end
end
end

#==============================================================================
# ** Window_Char_WeaponStatus
#------------------------------------------------------------------------------
# Esta janela mostra cada arma jogadores eo nível sobre a atualização screen
#==============================================================================

class Window_Char_WeaponStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object de inicialização
# x : window X coordenada
# y : window Y coordenada
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 384, 416)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
x = 104
y = actor.index * 96 + WLH / 2
draw_actor_name(actor, x, y)
draw_actor_class(actor, x, y + WLH * 2)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_weapon(actor, x + 96, y)
end
end
#--------------------------------------------------------------------------
# * Update cursor
#--------------------------------------------------------------------------
def update_cursor
if @index < 0 # Sem cursor
self.cursor_rect.empty
elsif @index < @item_max # Normal
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100 # Self
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else # Todos
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end

#==============================================================================
# ** Window_Akin_Price
#------------------------------------------------------------------------------
# This window displays the price of the upgrade
#==============================================================================

class Window_Akin_Price < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# x : window X coordinate
# y : window Y coordinate
#--------------------------------------------------------------------------
def initialize(x, y, price = 0)
super(x, y, 160, 72)
@price = price
refresh(@price)
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(price)
self.contents.clear
self.contents.draw_text(0, -4, 80, 24, "Price")
draw_currency_value(price, 4, 12, 120)
end
end


#==============================================================================
# ** Window_WeapUpgradeStatus
#------------------------------------------------------------------------------
# This window displays the improvement that upgrading would give
#==============================================================================

class Window_WeapUpgradeStatus < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# x : window X coordinate
# y : window Y corrdinate
# actor : actor
#--------------------------------------------------------------------------
def initialize(x, y, weapon)
super(x, y, 160, WLH * 4 + 32)
@weapon = weapon
refresh(@weapon)
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh(weapon)
@weapon = weapon
unless @weapon == nil
self.contents.clear
draw_parameter(0, 0, 0)
draw_parameter(0, WLH * 1, 1)
draw_parameter(0, WLH * 2, 2)
draw_parameter(0, WLH * 3, 3)
end
end
#--------------------------------------------------------------------------
# * Set Parameters After Equipping
# new_atk : attack after equipping
# new_def : defense after equipping
# new_spi : spirit after equipping
# new_agi : agility after equipping
#--------------------------------------------------------------------------
def set_new_stats(new_atk, new_def, new_spi, new_agi)
if @new_atk != new_atk or @new_def != new_def or
@new_spi != new_spi or @new_agi != new_agi
@new_atk = new_atk
@new_def = new_def
@new_spi = new_spi
@new_agi = new_agi
refresh(@weapon)
end
end
#--------------------------------------------------------------------------
# * Get Post Equip Parameter Drawing Color
# old_value : parameter before equipment change
# new_value : parameter after equipment change
#--------------------------------------------------------------------------
def new_parameter_color(old_value, new_value)
if new_value > old_value # Get stronger
return power_up_color
elsif new_value == old_value # No change
return normal_color
else # Get weaker
return power_down_color
end
end
#--------------------------------------------------------------------------
# * Draw Parameters
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# type : type of parameter (0 - 3)
#--------------------------------------------------------------------------
def draw_parameter(x, y, type)
case type
when 0
name = Vocab::atk
value = @weapon.atk
new_value = @new_atk
when 1
name = Vocab::def
value = @weapon.def
new_value = @new_def
when 2
name = Vocab::spi
value = @weapon.spi
new_value = @new_spi
when 3
name = Vocab::agi
value = @weapon.agi
new_value = @new_agi
end
self.contents.font.color = system_color
self.contents.draw_text(x + 4, y, 80, WLH, name)
self.contents.font.color = normal_color
self.contents.draw_text(x + 50, y, 30, WLH, value, 2)
self.contents.font.color = system_color
self.contents.draw_text(x + 79, y, 20, WLH, ">", 1)
if new_value != nil
self.contents.font.color = new_parameter_color(value, new_value)
self.contents.draw_text(x + 98, y, 30, WLH, new_value, 2)
end
end
end

#==============================================================================
# ** Scene_Weapons_Upgrade
#------------------------------------------------------------------------------
# This class performs the weapon upgrade processing.
#==============================================================================

class Scene_Weapons_Upgrade < Scene_Base
#--------------------------------------------------------------------------
# * Object Initialization
# weapon_up_index : command cursor's initial position
#--------------------------------------------------------------------------
def initialize(weapon_up_index = 0, player_index = 0)
@weapon_up_index = weapon_up_index
@actor_index = player_index
@actor = $game_party.members[player_index]
n = @actor.weapon_id
@weapon = $data_weapons[n]
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
create_menu_background
create_select_window
@gold_window = Window_Gold.new(384, 360)
@character_window = Window_Char_WeaponStatus.new(0, 0)
@header_window = Window_Base.new(384, 0, 160, 80)
#--------Shop Heading --------------------A34sZ1A -----------------------
@header_window.contents.draw_text(0, 0, 128, 24, "Select Weapon", 1)
@header_window.contents.draw_text(0, 24, 128, 24, "to Upgrade", 1)
#--------Shop Heading End ----------------A34sZ1A -----------------------
@upgrade_window = Window_WeapUpgradeStatus.new(384, 160, @weapon)
@upgrade_window.visible = false
@price_window = Window_Akin_Price.new(384, 288, 0)
@price_window.visible = false
@confirm_window = Window_Confirm.new
@confirm_window.visible = false
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@select_window.dispose
@gold_window.dispose
@character_window.dispose
@header_window.dispose
@upgrade_window.dispose
@price_window.dispose
@confirm_window.dispose
$game_party.last_actor_index = 0
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
update_menu_background
@select_window.update
@gold_window.update
@character_window.update
@confirm_window.update
if @select_window.active
@upgrade_window.visible = false
@price_window.visible = false
update_select_selection
elsif @character_window.active
@upgrade_window.visible = true
@price_window.visible = true
update_actor_selection
update_weapon_upgrade
elsif @confirm_window.active
update_confirm_window_selection
end
end
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_select_window
#-------- Menu Vocabulary -------------A34sZ1A ------------------------
s1 = "Upgrade"
s2 = "Exit"
#------- Menu Vocabulary End-------------------------------------------
@select_window = Window_Command.new(160, [s1, s2])
@select_window.x = 384
@select_window.y = 80
@select_window.index = @weapon_up_index
end
#--------------------------------------------------------------------------
# * Update Command Selection
#--------------------------------------------------------------------------
def update_select_selection
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
case @select_window.index
when 0 # Upgrade
start_actor_selection
when 1 # Back
return_scene
end
end
end
#--------------------------------------------------------------------------
# * Start Actor Selection
#--------------------------------------------------------------------------
def start_actor_selection
@select_window.active = false
@character_window.active = true
@character_window.index = 0
end
#--------------------------------------------------------------------------
# * End Actor Selection
#--------------------------------------------------------------------------
def end_actor_selection
@select_window.active = true
@character_window.active = false
@character_window.index = -1
end
#--------------------------------------------------------------------------
# * Update Actor Selection
#--------------------------------------------------------------------------
def update_actor_selection
if Input.trigger?(Input::B)
@upgrade_window.visible = false
@price_window.visible = false
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @character_window.index
upgrade_weapon($game_party.last_actor_index)
end
end
#--------------------------------------------------------------------------
# * Update Confirm Window
#--------------------------------------------------------------------------
def update_confirm_window_selection
if Input.trigger?(Input::B)
Sound.play_cancel
@confirm_window.active = false
@confirm_window.visible = false
@confirm_window.index = 0
@character_window.active = true
@confirm_window.close
elsif Input.trigger?(Input::C)
if @confirm_window.index == 0 # Yes
@confirm_window.active = false
@confirm_window.visible = false
@confirm_window.index = 0
@character_window.active = true
Sound.play_use_skill
player_index = @character_window.index
@actor = $game_party.members[player_index]
n = @actor.weapon_id
equiped_weapon = $data_weapons[n]
$game_party.lose_gold(@price)
Akin_Weapons.level_up(equiped_weapon)
@character_window.refresh
@gold_window.refresh
elsif @confirm_window.index == 1 # No
Sound.play_cancel
@confirm_window.active = false
@confirm_window.visible = false
@confirm_window.index = 0
@character_window.active = true
@confirm_window.close
end
end
end
#--------------------------------------------------------------------------
# * Update Upgrade Window
#--------------------------------------------------------------------------
def update_weapon_upgrade
player_index = @character_window.index
@actor = $game_party.members[player_index]
n = @actor.weapon_id
@weapon = $data_weapons[n]
unless @weapon == nil
#--------The Price formula -------------A34sZ1A -----------------------
# The stats will increase by a 20% of their previous value + 1
# Make this formula the same as the lvl up formula to make
# The proper value display in the upgrade window
# Make sure you keep the value set to an Integer by using ".to_i"
# There is one more loaction of the price formula
# find it with "SER23"
temp = Math.exp(@weapon.level / 1.7)
@price = 100 * @weapon.level + temp
@price = @price.to_i
#-------Price formula End ---------------------------------------------
@upgrade_window.refresh(@weapon)
@price_window.refresh(@price)
@upgrade_window.visible = true
@price_window.visible = true
if @weapon.level < 20
#--------Level Up Functions------BZ8q1-------A34sZ1A -----------------------
# The stats will increase by a 20% of their previous value + 1
# Make this formula the same as the lvl up formula to make
# The proper value display in the upgrade window
# Make sure you keep the value set to an Integer by using "Integer()"
after_atk = Integer(@weapon.atk * 1.2 + 1)
after_def = Integer(@weapon.def * 1.2 + 1)
after_spi = Integer(@weapon.spi * 1.2 + 1)
after_agi = Integer(@weapon.agi * 1.2 + 1)
#-------Level Up Functions End-----------------------------------------
@upgrade_window.set_new_stats(after_atk, after_def, after_spi, after_agi)
else
@upgrade_window.set_new_stats(@weapon.atk, @weapon.def, @weapon.spi, @weapon.agi)
@price_window.refresh("N/A")
end
else
@upgrade_window.visible = false
@price_window.visible = false
end
end
#--------------------------------------------------------------------------
# * Upgrade Weapon Selected
#--------------------------------------------------------------------------
def upgrade_weapon(player_index)
@actor = $game_party.members[player_index]
n = @actor.weapon_id
equiped_weapon = $data_weapons[n]
if equiped_weapon == nil
Sound.play_buzzer
else
#--------The Price formula ----SER23---------A34sZ1A -------------------
# The stats will increase by a 20% of their previous value + 1
# Make this formula the same as the lvl up formula to make
# The proper value display in the upgrade window
# Make sure you keep the value set to an Integer by using ".to_i"
temp = Math.exp(@weapon.level / 1.7)
@price = 100 * @weapon.level + temp
@price = @price.to_i
#-------Price formula End ---------------------------------------------

#--------Item Max Level-------------A34sZ1A -----------------------
# Change the number after "if equiped_weapon.level >="
# to whatever you want the max weapon level to be
if equiped_weapon.level >= 20
#--------Item Max Level End----- ---A34sZ1A -----------------------
Sound.play_buzzer
elsif @price > $game_party.gold
Sound.play_buzzer
else
Sound.play_decision
@confirm_window.visible = true
@character_window.active = false
@confirm_window.open
@confirm_window.index = 0
@confirm_window.active = true
end
@character_window.refresh
end
end

#--------------------------------------------------------------------------
# * Return to Original Screen
#--------------------------------------------------------------------------
def return_scene
#--------End Return-------------A34sZ1A -----------------------
# Edit this line of code if you want to use this system as
# part of the main menu
#$scene = Scene_Menu.new(0) #Change this number to the options spot -1 on main menu
$scene = Scene_Map.new
end
end


# This edits the Scene_File class to add on saving and loading of weapon levels
class Scene_File < Scene_Base
#-------------------------------Alias List
alias akin_weaps_write_save_data write_save_data
alias akin_weaps_read_save_data read_save_data

def write_save_data(file)
akin_weaps_write_save_data(file)
Marshal.dump($data_weapons, file)
end

def read_save_data(file)
akin_weaps_read_save_data(file)
$data_weapons = Marshal.load(file)
end
end


[box class=titlebg]
Créditos e Avisos
[/box]
Criador: Akin