Lune Elemental Level
Compativel com: RMVXAceCompatibilidade :média
Facilidade de uso: médio
Lag gerado: baixo
Condições de Uso
Pode ser modificado, e divulgado em outros lugares, mas peço que não retire os créditos.Para que serve o script
Oscript permite que no jogo tenha leveis para diferentes elementos,
permitindo que suba niveis do mesmo e que adicionem dano extra de acordo
com o level do elemento.
Detalhes do script
Compatível com a maioria dos scripts que se baseiam no sistema de
batalha padrão, ou seja, quase todos com exceção de Sistemas de batalha
ativo.- Os elementos ficam organizados no menu de acordo com o número do mesmo.
- fórmula de experiência, dano, cores das barras no menu, elementos que dão dano tudo configurável dentro do script.
- Não necessita imagens.
- Para ativar a janela de elementos, Chamar Script: SceneManager.call(Scene_Raizen_Elements)
- Instruções no script.
Script.
- Código:
#=======================================================
# Lune Element Level
# Autor: Raizen
# Compativel com: RMVXAce
# O script permite que seja possivel subir niveis de elementos
# de acordo com o quanto cada elemento é utilizado.
# Os niveis aumentarão o dano causado por aquele elemento.
#IMPORTANTE: Não é muito simples a configuração, preste bastante
# atenção para deixar do jeito mais desejavel possivel.
# Lembrando que é possivel mudar uma afinidade elemental no próprio
# database, na classe de cada personagem.
# Para criar novos elementos, vá até a aba "Termos" dentro do database.
# É compativel com a maioria dos scripts que se baseiam no sistema padrão,
# que em geral é um número elevado.
# Para chamar a janela de elementos.
# Chamar Script: SceneManager.call(Scene_Raizen_Elements)
module Raizen_Elements
# Escolha os elementos do database que recebem dano
# extra e sobem de acordo com a exp.
Extra_Damage = [3,4,5,6,7,8,9,10]
# Indique as cores de cada elemento como aparecerá na janela de Elementos.
# Seguindo a mesma ordem dos Ids acima.
# lembrando da ordem (r, g, b) r = red(vermelho), g = green(verde)
# b = blue(azul)
# Para conseguir a cor desejada, olhe essa tabela por exemplo.
# http://shibolete.tripod.com/RGB.html
Damage_Elements = [
Color.new(255, 55, 55),
Color.new(30, 255, 255),
Color.new(255, 255, 30),
Color.new(50, 50, 255),
Color.new(92, 51, 23),
Color.new(20, 230, 100),
Color.new(240, 240, 240),
Color.new(255, 255, 255),]
# Mesma coisa que acima, mas dessa vez indique a nomenclatura para
# cada elemento. Sempre entre aspas
Name_Elements = [
"Fogo",
"Gelo",
"Trovão",
"Água",
"Terra",
"Vento",
"Sagrado",
"Sombrio",]
# Funciona apenas com magia? Caso seja uma arma ignora
# o efeito de bonus de dano, além da experiência.
# true = aceita as armas, false = ignora armas.
Accept_Weapons = false
# formula da experiência.
# lembrando que o level é adquirido conforme a quantidade
# de dano causado.
def self.formula(level)
level * level * 200 + 100 # modifique essa linha com os calculos da experiência.
end
# formula de dano extra a partir do level.
def self.damage(level)
l = level.to_f
l / 10 + 1 # modifique essa linha para obter o dano extra.
end
# Quantidade de elementos no database.
Size = 10
# Nomenclatura do level no Menu.
Lv = "Lv."
# Nome que aparecerá no menu.
Elements = "Elements"
# Nome que indicará os leveis no menu.
LevelTotal = "Level Total"
end
#==========================================================================
# ======================Aqui começa o Script===============================
#==========================================================================
#==============================================================================
# ** Scene_Status
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de atributos.
#==============================================================================
class Scene_Raizen_Elements < Scene_MenuBase
#--------------------------------------------------------------------------
# * Inicialização do processo
#--------------------------------------------------------------------------
def start
super
@status_window = Window_Raizen_Elements.new(@actor)
@status_window.set_handler(:cancel, method(:return_scene))
@status_window.set_handler(:pagedown, method(:next_actor))
@status_window.set_handler(:pageup, method(:prev_actor))
end
#--------------------------------------------------------------------------
# * Processo da mudança de herói
#--------------------------------------------------------------------------
def on_actor_change
@status_window.actor = @actor
@status_window.activate
end
end
#==============================================================================
# ** Window_Status
#------------------------------------------------------------------------------
# Esta janela exibe as especificações completas na janela de atributos.
#==============================================================================
class Window_Raizen_Elements < Window_Selectable
include Raizen_Elements
#--------------------------------------------------------------------------
# * Inicialização do objeto
# actor : herói
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, Graphics.width, Graphics.height)
@actor = actor
refresh
activate
end
#--------------------------------------------------------------------------
# * Definição de herói
# actor : herói
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Renovação
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_block1 (line_height * 0)
draw_block2 (line_height * 2)
draw_block3 (line_height * 7)
draw_vert_line (250)
for n in 0...Extra_Damage.size
draw_bars(n)
end
end
#--------------------------------------------------------------------------
# * Desenho do bloco 1
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_bars(n)
y = n * 360 / Extra_Damage.size + 40
contents.fill_rect(300, y, 200, 12, bar_color)
contents.fill_rect(302, y + 2, 196, 8, line_color)
x = 196
e = Extra_Damage[n]
x *= $affinity_exp[@actor.class_id][e] / Raizen_Elements.formula($affinity_levels[@actor.class_id][e])
contents.fill_rect(302, y + 2, x, 8, Damage_Elements[n])
draw_text(310, y - 14, 100, 25, Name_Elements[n], 0)
draw_text(430, y - 14, 100, 25, Lv, 0)
draw_text(410, y - 14, 80, 25, $affinity_levels[@actor.class_id][e], 2)
end
def draw_block1(y)
draw_actor_name(@actor, 4, y)
draw_actor_class(@actor, 128, y)
end
#--------------------------------------------------------------------------
# * Desenho do bloco 1
# y : coordenada Y
#--------------------------------------------------------------------------
def bar_color
color = Color.new(0,0,0, 150)
color
end
def draw_block2(y)
draw_actor_face(@actor, 8, y)
draw_exp_info(0, 330)
end
#--------------------------------------------------------------------------
# * Desenho do bloco 3
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_block3(y)
draw_parameters(32, y)
end
#--------------------------------------------------------------------------
# * Desenho de uma linha horzontal
#--------------------------------------------------------------------------
def draw_vert_line(x)
line_x = x
contents.fill_rect(line_x, 0, 2, contents_height, line_color)
end
#--------------------------------------------------------------------------
# * Aquisção da cor da linha horizontal
#--------------------------------------------------------------------------
def line_color
color = normal_color
color.alpha = 48
color
end
#--------------------------------------------------------------------------
# * Desenho das informações básicas
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_basic_info(x, y)
draw_actor_icons(@actor, x, y + line_height * 1)
draw_actor_hp(@actor, x, y + line_height * 2)
draw_actor_mp(@actor, x, y + line_height * 3)
end
#--------------------------------------------------------------------------
# * Desenho dos parâmetros
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_parameters(x, y)
6.times {|i| draw_actor_param(@actor, x, y + line_height * i, i + 2) }
end
#--------------------------------------------------------------------------
# * Desenho das informações de experiência
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_exp_info(x, y)
s1 = 0
for n in 1...Raizen_Elements::Size
s1 += $affinity_levels[@actor.class_id][n]
end
change_color(system_color)
draw_text(x, y + line_height * 0, 180, line_height, LevelTotal)
change_color(normal_color)
draw_text(x, y + line_height * 1, 180, line_height, s1, 2)
end
#--------------------------------------------------------------------------
# * Desenho da descrição
# x : coordenada X
# y : coordenada Y
#--------------------------------------------------------------------------
def draw_description(x, y)
draw_text_ex(x, y, @actor.description)
end
end
class Game_Actor < Game_Battler
alias raizen_element_initialize initialize
def initialize(actor_id)
raizen_element_initialize(actor_id)
if $affinity_start == nil
$affinity_levels = []
$affinity_exp = []
for i in 1...$data_classes.size
$affinity_levels[i] = Array.new(Raizen_Elements::Size + 1, 0)
$affinity_exp[i] = Array.new(Raizen_Elements::Size + 1, 0)
end
$affinity_start = true
end
end
end
module DataManager
def self.make_save_contents
contents = {}
contents[:system] = $game_system
contents[:timer] = $game_timer
contents[:message] = $game_message
contents[:switches] = $game_switches
contents[:variables] = $game_variables
contents[:self_switches] = $game_self_switches
contents[:actors] = $game_actors
contents[:party] = $game_party
contents[:troop] = $game_troop
contents[:map] = $game_map
contents[:player] = $game_player
contents[:affin] = $affinity_levels
contents[:affinl] = $affinity_exp
contents
end
#--------------------------------------------------------------------------
# * Extrair conteúdo salvo
#--------------------------------------------------------------------------
def self.extract_save_contents(contents)
$game_system = contents[:system]
$game_timer = contents[:timer]
$game_message = contents[:message]
$game_switches = contents[:switches]
$game_variables = contents[:variables]
$game_self_switches = contents[:self_switches]
$game_actors = contents[:actors]
$game_party = contents[:party]
$game_troop = contents[:troop]
$game_map = contents[:map]
$game_player = contents[:player]
$affinity_levels = contents[:affin]
$affinity_exp = contents[:affinl]
end
end
class Game_Battler < Game_BattlerBase
def make_damage_value(user, item)
value = item.damage.eval(user, self, $game_variables)
value *= item_element_rate(user, item)
value *= pdr if item.physical?
value *= mdr if item.magical?
value *= rec if item.damage.recover?
value = apply_critical(value) if @result.critical
value = apply_variance(value, item.damage.variance)
value = apply_guard(value)
if @class_id == nil
value *= item_element_afinity(user.class_id, user.atk_elements.pop)
value.to_i
call_exp_element(user.class_id, user.atk_elements.pop, value, item)
end
@result.make_damage(value.to_i, item)
end
def call_exp_element(id, elem, value, item)
return if item.damage.element_id < 0 and !Raizen_Elements::Accept_Weapons
return unless Raizen_Elements::Extra_Damage.include?(elem)
$affinity_exp[id][elem] += value
if $affinity_exp[id][elem] >= Raizen_Elements.formula($affinity_levels[id][elem])
$affinity_exp[id][elem] = 0
$affinity_levels[id][elem] += 1
end
end
def item_element_afinity(class_id, item)
item_damage = item
return 1 unless item_damage >= 0 or Raizen_Elements::Accept_Weapons
value = Raizen_Elements.damage($affinity_levels[class_id][item_damage])
return value
end
end
Caso use o menu padrão e pretende adicionar essa opção nele.
- Código:
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# Esta classe executa o processamento da tela de menu.
#==============================================================================
class Scene_Menu < Scene_MenuBase
def create_command_window
@command_window = Window_MenuCommand.new
@command_window.set_handler(:item, method(:command_item))
@command_window.set_handler(:skill, method(:command_personal))
@command_window.set_handler(:equip, method(:command_personal))
@command_window.set_handler(:status, method(:command_personal))
@command_window.set_handler(:elements, method(:command_personal))
@command_window.set_handler(:formation, method(:command_formation))
@command_window.set_handler(:save, method(:command_save))
@command_window.set_handler(:game_end, method(:command_game_end))
@command_window.set_handler(:cancel, method(:return_scene))
end
def on_personal_ok
case @command_window.current_symbol
when :skill
SceneManager.call(Scene_Skill)
when :equip
SceneManager.call(Scene_Equip)
when :status
SceneManager.call(Scene_Status)
when :elements
SceneManager.call(Scene_Raizen_Elements)
end
end
end
#==============================================================================
# ** Window_MenuCommand
#------------------------------------------------------------------------------
# Esta janela exibe os comandos do menu.
#==============================================================================
class Window_MenuCommand < Window_Command
alias raizen_add_main_commands add_main_commands
def add_main_commands
raizen_add_main_commands
add_command(Raizen_Elements::Elements, :elements, main_commands_enabled)
end
end
Imagens
- Spoiler:
Download
Não necessárioCréditos e Avisos
Raizen pelo script