Introdução
Estava buscando um meio de melhorar a janela de Skills e consegui fazer isso que vou apresentar a vocês
Se for útil para você fique a vontade para usar e modificar como quiser
Se quiser dar algum crédito agradeceria
Apesar de simples ajuda muito a ter um norte das coisas possíveis que se pode fazer futuramente.
Sobre o Script
Esse Script modifica toda janela de Skill atual da engine para uma lista organizada
Com sprite , nome e nível para ter acesso aquela Skill
Nessa lista ativa toda as Skills presente em cada classe que você criou para seu jogo
Exemplo ( se vc está logado com mago só vai ver todas as skills do mago , se está logado com guerreiro você só vai ver todas as skills do guerreiro e assim por diante)
Em sua janela de Skills... é algo parecido com Dofus e Wakfu
As Skills Bloqueadas ( estão com opacidade reduzida para dar um ar de block)
As Skills do seu nível ( estão com opacidade normal e pode ser arrastadas para a Hotkey)
Antes de tudo faça um backup do seu projeto
Printscreen
Arrastando a Skill desbloqueada para a HotKey
A Skill Bloqueada só dá para ler as informações dela.
Basta trocar todo [VS] Window_Skill por esse script abaixo:
- Código:
class RPG::Skill < RPG::UsableItem
def required_level
learning = $data_classes[$game_actors[1].class_id].learnings.find { |learn| learn.skill_id == self.id }
learning ? learning.level : 0
end
end
class Window_Skill < Window_ItemSelectable
def initialize(x = 460, y = 170, width = 480, height = 390)
super(x, y, width, height)
self.visible = false
self.closable = true
self.title = Vocab::skill
self.back_opacity = 255 # Aumentando a opacidade do fundo da janela
@scroll_bar = Scroll_Bar.new(self, 8, line_height * 2 + 8, 8) # Usando o método existente da Scroll_Bar com largura fina
end
def enable?(item)
$game_actors[1].usable?(item) && $game_actors[1].level >= item.required_level
end
def make_item_list
@data = $data_classes[$game_actors[1].class_id].learnings.collect do |learning|
$data_skills[learning.skill_id] if $data_skills[learning.skill_id] && $game_actors[1].added_skill_types.include?($data_skills[learning.skill_id].stype_id)
end.compact
end
def refresh
make_item_list
create_contents
draw_all_items
@scroll_bar.refresh
end
def update
super
disable_attack_while_open
@scroll_bar.update if active
update_scroll if active
end
def update_scroll
if Input.wheel_up?
self.oy -= 10
elsif Input.wheel_down?
self.oy += 10
end
self.oy = [[self.oy, 0].max, [contents_height - height, 0].max].min
end
def update_drag
return unless Mouse.press?(:L)
return if $cursor.object
return if $dragging_window
return unless index >= 0
return unless enable?(item)
$cursor.change_item(item, Enums::Mouse::SKILL)
end
def draw_item(index)
skill = @data[index]
return unless skill
rect = item_rect(index)
# Ajustar fundo para um cinza escuro moderado
background_color = Color.new(40, 40, 40)
contents.fill_rect(rect, background_color)
if index == self.index
# Seleção cinza claro ao passar o mouse
selection_color = Color.new(200, 200, 200)
contents.fill_rect(rect, selection_color)
end
icon_bitmap = Cache.system("Iconset")
icon_index = skill.icon_index
rect_icon = Rect.new((icon_index % 16) * 24, (icon_index / 16) * 24, 24, 24)
opacity = $game_actors[1].level >= skill.required_level ? 255 : 128
contents.blt(rect.x + 2, rect.y + 8, icon_bitmap, rect_icon, opacity)
draw_text(rect.x + 30, rect.y + 8, rect.width - 34, line_height, skill.name)
draw_text(rect.x + 30, rect.y + line_height + 8, rect.width - 34, line_height, "Nível: #{skill.required_level}")
end
def item_rect(index)
rect = Rect.new
rect.width = (width - standard_padding * 4 - 32) / 2 # Ajuste a largura para diminuir o tamanho das skills e centralizar
rect.height = line_height * 2 + 4
rect.x = standard_padding + (index % 2) * (rect.width + 32) # Ajuste o espaçamento horizontal para centralizar e criar espaço nas laterais
rect.y = (index / 2) * (rect.height + 8) + 4
rect
end
def contents_height
((@data.size + 1) / 2) * (line_height * 2 + 8) + 30 # Ajuste para garantir que os últimos 30 pixels sejam visíveis
end
def disable_attack_while_open
if active
$game_player.instance_variable_set(:@disable_attack, true)
end
end
def deactivate
super
$game_player.instance_variable_set(:@disable_attack, false)
end
end
class Game_Player < Game_Character
alias original_update update
def update
if SceneManager.scene_is?(Scene_Map) && SceneManager.scene.skill_window_active?
return if Input.trigger?(Configs::ATTACK_KEY)
end
original_update
end
end
class Scene_Map < Scene_Base
attr_reader :skill_window
def create_all_windows
super
create_skill_window
end
def create_skill_window
@skill_window = Window_Skill.new(0, 0, Graphics.width, Graphics.height)
@skill_window.set_handler(:cancel, method(:on_skill_cancel))
end
def skill_window_active?
@skill_window && @skill_window.active
end
def on_skill_cancel
@skill_window.close
@skill_window.deactivate
end
end
Qualquer bug ou algo do tipo favor reportar nesse post , até o presente momento não tive nenhum
Grande abraço ! e bom desenvolvimento a todos.
Última edição por Merim em Seg Nov 18, 2024 11:26 am, editado 1 vez(es)