Tomah Sargento
| Assunto: [RMVX] Troca de Formação VX Seg Jun 29, 2009 3:01 pm | |
| Troca de Formação VX por Timeaisis IntroduçãoEsse é um script simples que adiciona formação (frente/trás) à sua equipe. Personagens na frente vão tomar e desferir mais dano do que os que estão atrás. Editável para funcionar com itens e habilidades. Mais detalhes no script. Características 1. Interface simples de troca de formação adicionada ao menu padrão 2. Porcentagens de dano customizáveis para personagens de Frente/Trás 3. Porcentagens de defesa customizáveis para personagens de Frente/Trás 4. A Instalação é muito fácil - é só copiar e colar! ScreenshotsComo usarCopie o script e insira-o em um espaço vazio acima de Principal. Depois, modifique as primeiras informações, da linha 27 até a 30, se quiser mudar o dano das posições. Pronto! Se for customizar ainda mais, você pode mudar o texto da janela de formação. Esses textos customizáveis estão em roxo no script. DemoDesnecessária, já que é só copiar e colar o script. script - Código:
-
#============================================================== # - Troca de Formação VX - Versão 1.0 #============================================================== # Autor : Timeaisis (timeaisis@gmail.com) # Versão : 1.0 revisão 1 # Data : 06 / 08 / 2008 #============================================================== # Características: # -> Interface simples de troca de formação adicionada ao menu padrão # -> Porcentagens de dano customizáveis para personagens de Frente/Trás # -> Porcentagens de defesa customizáveis para personagens de Frente/Trás # -> Instalação muito fácil - é só copiar e colar! #============================================================== # Instalação # 1. Copie isso em um novo bloco de scrpt acima de Principal. # 2. Mude os valores do topo ao seu gosto. # 3. Feito! #==============================================================
# Os seguintes valores determinam a diferença em porcentagem de um membro atrás # quando está atacando ou defendendo. # BACK_ATTDEF_PERCENT, por exemplo é o porcento de dano dado a um personagem de # trás por um ataque físico. # BACK_ATTACK_PERCENT é o porcento de dano dado a um inimigo por um personagem # de trás por um ataque físico. # Os outros 2 são a mesma coisa, só que eles se aplicam a habilidades. BACK_ATTDEF_PERCENT = 0.6 BACK_ATTACK_PERCENT = 0.7 BACK_SKILLDEF_PERCENT = 0.6 BACK_SKILL_PERCENT = 0.7 class Scene_Formation < Scene_Base #============================================================= # * [SETUP] SCENE Janelas e texto da Formação #------------------------------------------------------------- WIDTH = 172 # Largura da janela
TOP_TEXT = '- Formação de personagens -' # Texto mostrado na janela do topo quando iniciado BOTTOM_TEXT = 'Escolha o personagem para mudar sua formação' # Texto a ser usado depois
EXIT_BUTTON = '- Sair -' # Texto do botão de saída def start super create_menu_background @help1 = Window_Help.new @help2 = Window_Help.new @help2.y = Graphics.height - @help2.height @front_list = [] @back_list = [] @act_list = Window_ActorList.new(WIDTH) @act_list.x = (Graphics.width - @act_list.width) / 2 @act_list.y = (Graphics.height - @act_list.height) / 2 @front_string = "Frente: " @back_string = "Trás: " @form_select = Window_FormSelect.new(WIDTH) @form_select.active = @form_select.visible = false @form_select.x = (Graphics.width - @act_list.width) / 2 @form_select.y = (Graphics.height - @act_list.height) / 2 $game_party.members.each do |i| if i.position @back_list << i @back_string = @back_string + i.name + " " else @front_list << i @front_string = @front_string + i.name + " " end end @help2.set_text(@front_string + " " + @back_string, 1) runstep(0) end def update super if @act_list.active @act_list.update if Input.trigger?(Input::C) @act_list.visible = @act_list.active = true @act_list.visible = @act_list.active = true case @act_list.define[@act_list.index] when 'exit' Sound.play_cancel $scene = Scene_Menu.new(4) else runstep(1) end elsif Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Menu.new(4) end end end def terminate super @act_list.dispose @help1.dispose @help2.dispose dispose_menu_background end def runstep(id) case id when 0 @act_list.active = @act_list.visible = true @help1.set_text(TOP_TEXT, 1) when 1 Sound.play_decision @act_list.define[@act_list.index].change_pos @back_list2 = [] @back_string2 = "Trás: " @front_list2 = [] @front_string2 = "Frente: " $game_party.members.each do |i| if i.position @back_string2 = @back_string2 + i.name + " " else @front_string2 = @front_string2 + i.name + " " end end @help2.set_text(@front_string2 + " " + @back_string2) end end end
#============================================================================== # * Window_ActorList #============================================================================== class Window_ActorList < Window_Command attr_reader :define def initialize(width) commands = [] @define = [] $game_party.members.each do |i| commands << i.name @define << i end commands << Scene_Formation::EXIT_BUTTON @define << 'exit' super(width, commands) end end
#============================================================================== # * Window_FormationSelect #============================================================================== class Window_FormSelect < Window_Command attr_reader :define def initialize(width) commands = [] @define = [] commands << 'Front' commands << 'Back' commands << Scene_Formation::EXIT_BUTTON @define << 'exit' @define << 'front' @define << 'back' super(width, commands) end end
class Scene_Menu < Scene_Base #-------------------------------------------------------------------------- # * Criar Command Window #-------------------------------------------------------------------------- def create_command_window s1 = Vocab::item s2 = Vocab::skill s3 = Vocab::equip s4 = Vocab::status s6 = Vocab::save s7 = Vocab::game_end s5 = "Formação" @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7]) @command_window.index = @menu_index if $game_party.members.size == 0 # Se o numero de membros é 0 @command_window.draw_item(0, false) # Desabilitar item @command_window.draw_item(1, false) # Desabilitar habilidade @command_window.draw_item(2, false) # Desabilitar equipamento @command_window.draw_item(3, false) # Desabilitar status end if $game_system.save_disabled # Se o save é proibido @command_window.draw_item(5, false) # Desabilitar save end end #-------------------------------------------------------------------------- # * Atualização da Seleção de comando #-------------------------------------------------------------------------- def update_command_selection if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) if $game_party.members.size == 0 and @command_window.index < 4 Sound.play_buzzer return elsif $game_system.save_disabled and @command_window.index == 5 Sound.play_buzzer return end Sound.play_decision case @command_window.index when 0 # Item $scene = Scene_Item.new when 1,2,3 # Habilidade, equipmento, status start_actor_selection when 4 # Save $scene = Scene_Formation.new when 5 # Formação $scene = Scene_File.new(true, false, false) when 6 # Finalizar o jogo $scene = Scene_End.new end end end end
class Game_Battler attr_reader :position def initialize @battler_name = "" @battler_hue = 0 @hp = 0 @mp = 0 @position = false #false = frente @action = Game_BattleAction.new(self) @states = [] # Estados (array de ID) @state_turns = {} # Turnos restantes para os estados (Hash) @hidden = false @immortal = false @counter = false clear_extra_values clear_sprite_effects clear_action_results end def change_pos @position = !@position #changed from !@position end #-------------------------------------------------------------------------- # * Cálculo de dano de ataque normal # attacker : Attacker # Os resultados são substituídos por @hp_damage #-------------------------------------------------------------------------- def make_attack_damage_value(attacker) #De-sets counter (For if no enemy attacked last turn) if attacker.counter attacker.counter_switch end damage = attacker.atk * 4 - self.def * 2 # base do cálculo damage = 0 if damage < 0 # se negativo, faça 0 damage *= elements_max_rate(attacker.element_set) # ajuste elemental damage /= 100 if damage == 0 # se dano é 0, damage = rand(2) # metade do tempo, 1 dano elsif damage > 0 # um número positivo? @critical = (rand(100) < attacker.cri) # dano crítico? @critical = false if prevent_critical # prevenido contra críticos? damage *= 3 if @critical # ajuste crítico end damage = apply_variance(damage, 20) # variação damage = apply_guard(damage) # ajuste de defesa #--------------------- #Começar sistema de posicionamento #--------------------- if self.position # ajuste de posição damage *= BACK_ATTDEF_PERCENT #para dano de personagem damage = damage.round end if attacker.position #ajuste de posição damage *= BACK_ATTACK_PERCENT #para o dano de inimigos damage = damage.round end #--------------------- #Finalizar sistema de posicionamento #--------------------- @hp_damage = damage # Dano de HP end #-------------------------------------------------------------------------- # * Cálculo de dano cusado por Habilidades ou itens # user : Usuário da habilidade ou item # obj : Habilidade ou item (para ataques normal, isso é nulo) # Os resultados são substituídos por @hp_damage ou @mp_damage. #-------------------------------------------------------------------------- def make_obj_damage_value(user, obj) damage = obj.base_damage # base do dano if damage > 0 # um número positivo? damage += user.atk * 4 * obj.atk_f / 100 # Ataque F do usuário damage += user.spi * 2 * obj.spi_f / 100 # Espírito F do usuário unless obj.ignore_defense # Exceto para ignorar defesa damage -= self.def * 2 * obj.atk_f / 100 # Ataque F do alvo damage -= self.spi * 1 * obj.spi_f / 100 # Espírito F do alvo end damage = 0 if damage < 0 # Se negativo, tornar 0 elsif damage < 0 # um número negativo? damage -= user.atk * 4 * obj.atk_f / 100 # Ataque F do usuário damage -= user.spi * 2 * obj.spi_f / 100 # Espírito F do usuário end damage *= elements_max_rate(obj.element_set) # ajuste elemental damage /= 100 damage = apply_variance(damage, obj.variance) # variação damage = apply_guard(damage) # ajuste de defesa #--------------------- #Começar sistema de posicionamento #--------------------- if self.position # ajuste de posição damage *= BACK_SKILLDEF_PERCENT #para dano de personagem damage = damage.round end if user.position #ajuste de posição damage *= BACK_SKILL_PERCENT #para dano de inimigos damage = damage.round end #--------------------- #Finalizar sistema de posicionamento #--------------------- if obj.damage_to_mp @mp_damage = damage # dano de MP else @hp_damage = damage # dano de HP end end end
class Window_Status < Window_Base
def draw_basic_info(x, y) draw_actor_level(@actor, x, y + WLH * 0) draw_actor_state(@actor, x, y + WLH * 1) draw_actor_hp(@actor, x, y + WLH * 2) draw_actor_mp(@actor, x, y + WLH * 3) #Start Formation Draw self.contents.font.bold = true self.contents.font.color = system_color self.contents.draw_text(8, 110, 64, WLH*3, "Formação:") self.contents.font.color = normal_color if @actor.position self.contents.draw_text(70, 110, 32, WLH*3, "Trás") else self.contents.draw_text(70, 110, 32, WLH*3, "Frente") end self.contents.font.bold = false
end end
class Scene_File < Scene_Base def return_scene if @from_title $scene = Scene_Title.new elsif @from_event $scene = Scene_Map.new else $scene = Scene_Menu.new(5) end end end
class Scene_End < Scene_Base def return_scene $scene = Scene_Menu.new(6) end end
class Window_MenuStatus < Window_Selectable 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 + 120, y) draw_actor_level(actor, x, y + WLH * 1) draw_actor_state(actor, x, y + WLH * 2) draw_actor_hp(actor, x + 120, y + WLH * 1) draw_actor_mp(actor, x + 120, y + WLH * 2) self.contents.font.bold = true self.contents.font.color = system_color #self.contents.font.color = normal_color if actor.position self.contents.draw_text(x+20, y+30, 32, WLH*3, "Trás") else self.contents.draw_text(x+20, y+30, 32, WLH*3, "Frente") end self.contents.font.bold = false
end end end
Perguntas FrequentesNão há perguntas frequentes. Créditos e Agradecimentos 1. Timeasis pelo script 2. Tomah (eu) por traduzir. Observações do AutorSe quiser usar em um projeto, seria bom dar créditos. |
|
Book Brat Aspirante
Ocupação : Eventer e Mapper
| Assunto: Re: [RMVX] Troca de Formação VX Seg Jun 29, 2009 3:09 pm | |
| Legal esse script, mais simples que o KGC LargeParty, que aqui sempre dá bug. Parabéns! |
|