¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Invocar Estilo Final Fantasy
por akito_squall Hoy a las 16:20

» El poder oculto (Demo)
por alex1633 Ayer a las 20:56

» Tutorial Interactivo [Uso de interruptores]
por Ledai Ayer a las 16:58

» Necesito Script
por Elian84 Ayer a las 04:44

» Holaaa a tod@s!!!
por chronoMxx Ayer a las 03:41

» [AYUDA]Hootshot de moghunter
por Rudy_kinneas Ayer a las 01:06

» El poder oculto (Segunda entrega)
por alex1633 2016-12-03, 23:18

» Hola mucho gusto
por Hk Diamond 2016-12-03, 13:49

» SoraDeathss se presenta!
por chronoMxx 2016-12-03, 07:50

» {AYUDA}Blizz-ABS Script
por chronoMxx 2016-12-03, 06:45

Afiliados
Estadísticas
Tenemos 3383 miembros registrados.
El último usuario registrado es LordBaium.

Nuestros miembros han publicado un total de 79770 mensajes en 11248 argumentos.
Navega con Google Chrome
[DESCARGA]

Ventana de log de acciones en batalla

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

Ventana de log de acciones en batalla

Mensaje por gerrtunk el 2011-07-13, 19:17

Esta ventana muestra una nueva ventana en batalla que muestra la lista de
las ultimas acciones ejecutadas.
Puedes configurar el ancho, alto de linea, x e y y todo el vocabulario usado.


Código:
#==============================================================================
# Ventana de log en batalla
# By gerkrt/gerrtunk
# Version: 1
# License: MIT, credits
# Date: 24/01/2011
# Visita http://usuarios.multimania.es/kisap/spanish_list.html para encontrar
# la version mas corregida o actualizada de este script
#==============================================================================

=begin
 
------INTRODUCCION------
 
Esta ventana muestra una nueva ventana en batalla que muestra la lista de
las ultimas acciones jecutadas.
Puedes configurar el ancho, alto de linea, x e y y todo el vocabulario usado.


-----INSTRUCIONES-------
 
El vocabulario viene explicado en el propio modulo de configuracion. Nota que
un . es añadido siempre de forma automatica al final.

Lines height es el maximo de lineas de altuera.
 
Battle window X and Y control these positions. You can changue they at your will
for aesthetichs or improve interface.
BattleWindow_X, Y, y width controlan la posicion X, Y y ancho de la ventanan.
 
=end
 
module Wep
 
  Lines_height = 6
 
  BattleWindow_Width = 220
  Wep::BattleWindow_X = 0
  Wep::BattleWindow_Y = 96
 
  VocStart = '¡La batalla empieza!'
  VocMiss = ' fallo'
  VocAtk = ' ataco'
  VocDies = ' muere'
  VocWin = '¡Victoria!'
  VocLose = '¡Pierdes!'
  VocEscape = '¡Escapaste!'
  VocEscapeFails = '¡Fallaste al escapar!'
  VocMag = ' lanza '
  VocItem = ' usa '
  VocDef = ' defendio'
  VocNothing = ' no hace nada'
 
end
 
 
 
 
 
class Game_Battler
    #--------------------------------------------------------------------------
  # * Change HP
  #    hp : new HP
  # moded to add log line in battle if dead
  #--------------------------------------------------------------------------
  def hp=(hp)
    @hp = [[hp, maxhp].min, 0].max
    # Add log line if in battle and dead
    if self.dead? and $game_temp.in_battle
      $scene.log_add_line(Wep::VocDies, self)
    end
    # add or exclude incapacitation
    for i in 1...$data_states.size
      if $data_states[i].zero_hp
        if self.dead?
          add_state(i)
        else
          remove_state(i)
        end
      end
    end
  end
 
end
 
class Scene_Battle
  #--------------------------------------------------------------------------
  # * Battle Ends
  #    result : results (0:win 1:escape 2:lose)
  #--------------------------------------------------------------------------
  def battle_end(result)
 
    case result
      when 0; @log_window.add_special_line(Wep::VocWin)
      when 1; @log_window.add_special_line(Wep::VocLose)
    end
 
    # Clear in battle flag
    $game_temp.in_battle = false
    # Clear entire party actions flag
    $game_party.clear_actions
    # Remove battle states
    for actor in $game_party.actors
      actor.remove_states_battle
    end
    # Clear enemies
    $game_troop.enemies.clear
    # Call battle callback
    if $game_temp.battle_proc != nil
      $game_temp.battle_proc.call(result)
      $game_temp.battle_proc = nil
    end
    # Switch to map screen
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # * Make Skill Action Results
  #--------------------------------------------------------------------------
  def make_skill_action_result
    # Get skill
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # If not a forcing action
    unless @active_battler.current_action.forcing
      # If unable to use due to SP running out
      unless @active_battler.skill_can_use?(@skill.id)
        # Clear battler being forced into action
        $game_temp.forcing_battler = nil
        # Shift to step 1
        @phase4_step = 1
        return
      end
    end
    # Use up SP
    @active_battler.sp -= @skill.sp_cost
    # Refresh status window
    @status_window.refresh
    # Show skill name on help window
    @help_window.set_text(@skill.name, 1)
    # Set animation ID
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    # Set command event ID
    @common_event_id = @skill.common_event_id
    # Set target battlers
    set_target_battlers(@skill.scope)
    # Add log line
    $scene.log_add_line(Wep::VocMag, @active_battler, @skill.name)
    # Apply skill effect
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill)
    end
  end
  #--------------------------------------------------------------------------
  # * Make Item Action Results
  #--------------------------------------------------------------------------
  def make_item_action_result
    # Get item
    @item = $data_items[@active_battler.current_action.item_id]
    # If unable to use due to items running out
    unless $game_party.item_can_use?(@item.id)
      # Shift to step 1
      @phase4_step = 1
      return
    end
    # If consumable
    if @item.consumable
      # Decrease used item by 1
      $game_party.lose_item(@item.id, 1)
    end
    # Display item name on help window
    @help_window.set_text(@item.name, 1)
    # Set animation ID
    @animation1_id = @item.animation1_id
    @animation2_id = @item.animation2_id
    # Set common event ID
    @common_event_id = @item.common_event_id
    # Decide on target
    index = @active_battler.current_action.target_index
    target = $game_party.smooth_target_actor(index)
    # Set targeted battlers
    set_target_battlers(@item.scope)
    # Add log line
    $scene.log_add_line(Wep::VocItem, @active_battler, @item.name)
    # Apply item effect
    for target in @target_battlers
      target.item_effect(@item)
    end
  end
  #--------------------------------------------------------------------------
  # * Make Basic Action Results
  #--------------------------------------------------------------------------
  def make_basic_action_result
    # If attack
    if @active_battler.current_action.basic == 0
      # Add log line
      $scene.log_add_line(Wep::VocAtk, @active_battler)
      # Set anaimation ID
      @animation1_id = @active_battler.animation1_id
      @animation2_id = @active_battler.animation2_id
      # If action battler is enemy
      if @active_battler.is_a?(Game_Enemy)
        if @active_battler.restriction == 3
          target = $game_troop.random_target_enemy
        elsif @active_battler.restriction == 2
          target = $game_party.random_target_actor
        else
          index = @active_battler.current_action.target_index
          target = $game_party.smooth_target_actor(index)
        end
      end
      # If action battler is actor
      if @active_battler.is_a?(Game_Actor)
        if @active_battler.restriction == 3
          target = $game_party.random_target_actor
        elsif @active_battler.restriction == 2
          target = $game_troop.random_target_enemy
        else
          index = @active_battler.current_action.target_index
          target = $game_troop.smooth_target_enemy(index)
        end
      end
      # Set array of targeted battlers
      @target_battlers = [target]
      # Apply normal attack results
      for target in @target_battlers
        target.attack_effect(@active_battler)
      end
      return
    end
    # If guard
    if @active_battler.current_action.basic == 1
      # Display "Guard" in help window
      # Add log line
      $scene.log_add_line(Wep::VocDef, @active_battler)
      @help_window.set_text($data_system.words.guard, 1)
      return
    end
    # If escape
    if @active_battler.is_a?(Game_Enemy) and
      @active_battler.current_action.basic == 2
      # Add log line
      # @log_window.add_special_line(Wep::VocEscaping)
 
      # Display "Escape" in help window
      @help_window.set_text("Escape", 1)
      # Escape
      @active_battler.escape
      return
    end
    # If doing nothing
    if @active_battler.current_action.basic == 3
      # Add log line
      $scene.log_add_line(Wep::VocNothing, @active_battler)
      # Clear battler being forced into action
      $game_temp.forcing_battler = nil
      # Shift to step 1
      @phase4_step = 1
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (party command phase: escape)
  #--------------------------------------------------------------------------
  def update_phase2_escape
    # Calculate enemy agility average
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    # Calculate actor agility average
    actors_agi = 0
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_agi += actor.agi
        actors_number += 1
      end
    end
    if actors_number > 0
      actors_agi /= actors_number
    end
    # Determine if escape is successful
    success = rand(100) < 50 * actors_agi / enemies_agi
    # If escape is successful
    if success
      # Add log line
      @log_window.add_special_line(Wep::VocEscape)
      # Play escape SE
      $game_system.se_play($data_system.escape_se)
      # Return to BGM before battle started
      $game_system.bgm_play($game_temp.map_bgm)
      # Battle ends
      battle_end(1)
    # If escape is failure
    else
      # Add log line
      @log_window.add_special_line(Wep::VocEscapeFails)
      # Clear all party member actions
      $game_party.clear_actions
      # Start main phase
      start_phase4
    end
  end
end
 
#==============================================================================
# ** Scene_Battle (part 1)
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================
 
class Scene_Battle
  #--------------------------------------------------------------------------
  # * Main Processing
  # moded to use
  #--------------------------------------------------------------------------
  def main
    # Initialize each kind of temporary battle data
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    # Initialize battle event interpreter
    $game_system.battle_interpreter.setup(nil, 0)
    # Prepare troop
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    # Make actor command window
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
    @actor_command_window.y = 160
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    # Make other windows
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
 
    @log_window = Window_BattleLog.new(@troop_id)
    @log_window.add_special_line(Wep::VocStart)
 
    # Make sprite set
    @spriteset = Spriteset_Battle.new
    # Initialize wait count
    @wait_count = 0
    # Execute transition
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
      $data_system.battle_transition)
    end
    # Start pre-battle phase
    start_phase1
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Refresh map
    $game_map.refresh
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @actor_command_window.dispose
    @party_command_window.dispose
    @help_window.dispose
 
    @log_window.dispose
    @status_window.dispose
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end
    # Dispose of sprite set
    @spriteset.dispose
    # If switching to title screen
    if $scene.is_a?(Scene_Title)
      # Fade out screen
      Graphics.transition
      Graphics.freeze
    end
    # If switching from battle test to any screen other than game over screen
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end
 
  #--------------------------------------------------------------------------
  # * Frame Update
  # moded to use
  #--------------------------------------------------------------------------
  def update
    # If battle event is running
    if $game_system.battle_interpreter.running?
      # Update interpreter
      $game_system.battle_interpreter.update
      # If a battler which is forcing actions doesn't exist
      if $game_temp.forcing_battler == nil
        # If battle event has finished running
        unless $game_system.battle_interpreter.running?
          # Rerun battle event set up if battle continues
          unless judge
            setup_battle_event
          end
        end
        # If not after battle phase
        if @phase != 5
          # Refresh status window
          @status_window.refresh
        end
      end
    end
    # Update system (timer) and screen
    $game_system.update
    $game_screen.update
    # If timer has reached 0
    if $game_system.timer_working and $game_system.timer == 0
      # Abort battle
      $game_temp.battle_abort = true
    end
    # Update windows
    @help_window.update
    @party_command_window.update
    @actor_command_window.update
    @log_window.update
    @status_window.update
    @message_window.update
    # Update sprite set
    @spriteset.update
    # If transition is processing
    if $game_temp.transition_processing
      # Clear transition processing flag
      $game_temp.transition_processing = false
      # Execute transition
      if $game_temp.transition_name == ""
        Graphics.transition(20)
      else
        Graphics.transition(40, "Graphics/Transitions/" +
        $game_temp.transition_name)
      end
    end
    # If message window is showing
    if $game_temp.message_window_showing
      return
    end
    # If effect is showing
    if @spriteset.effect?
      return
    end
    # If game over
    if $game_temp.gameover
      # Switch to game over screen
      $scene = Scene_Gameover.new
      return
    end
    # If returning to title screen
    if $game_temp.to_title
      # Switch to title screen
      $scene = Scene_Title.new
      return
    end
    # If battle is aborted
    if $game_temp.battle_abort
      # Return to BGM used before battle started
      $game_system.bgm_play($game_temp.map_bgm)
      # Battle ends
      battle_end(1)
      return
    end
    # If waiting
    if @wait_count > 0
      # Decrease wait count
      @wait_count -= 1
      return
    end
    # If battler forcing an action doesn't exist,
    # and battle event is running
    if $game_temp.forcing_battler == nil and
      $game_system.battle_interpreter.running?
      return
    end
    # Branch according to phase
    case @phase
    when 1  # pre-battle phase
      update_phase1
    when 2  # party command phase
      update_phase2
    when 3  # actor command phase
      update_phase3
    when 4  # main phase
      update_phase4
    when 5  # after battle phase
      update_phase5
    end
  end
 
 
  # Chequea turno, linea, posa . final,etc
  def log_add_line(line, origin, extra='')
    complete = origin.name + line + extra + '.'
 
    @log_window.add_line(complete)
    @log_window.refresh
  end
 
end
 
#==============================================================================
# ** Window_BattleLog
#------------------------------------------------------------------------------
#  This window displays amount of gold and EXP acquired at the end of a battle.
#==============================================================================
 
class Window_BattleLog < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #    exp      : EXP
  #    gold      : amount of gold
  #    treasures : treasures
  #--------------------------------------------------------------------------
  def initialize(troop_id)
    @small_list = []
    @troop_id = troop_id
    #Wep::Lines_height.times {@list.push('')}
    Wep::Lines_height.times {@small_list.push('')}
    # until this, no contents
    super(Wep::BattleWindow_X, Wep::BattleWindow_Y, Wep::BattleWindow_Width, Wep::Lines_height * 32 + 32)
    self.z = 99
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
 
 
  def end_log
    if Wep::Battle_Ends[@troop_id] != nil
      @list.push Wep::Battle_Ends[@troop_id]
    else
      @list.push Wep::Default_End
    end
 
    @list.push Wep:Battle_Ends[troop_id]
  end
 
  def refresh
    self.contents = Bitmap.new(width - 32, height - 32)
    for i in 0...@small_list.size
      self.contents.draw_text(0, i * 32, Wep::BattleWindow_Width-32, 32, @small_list[i], 1)
    end
 
  end
 
  def add_line(line)
    # Add to the start and move
    @small_list.unshift(line)
    # Remove last element
    @small_list.pop
  end
 
  def add_special_line(line)
    # Add to the start and move
    @small_list.unshift(line)
    # Remove last element
    @small_list.pop
    refresh
  end
 
end
 

gerrtunk
Principiante
Principiante

0/3

Créditos 364

Gracias : 22

Volver arriba Ir abajo

Re: Ventana de log de acciones en batalla

Mensaje por Wecoc el 2011-07-13, 19:31

Utilizé tu script para hacer uno hace un tiempo... Espero que no te enfades por ello. Haha Sweat
Add-on raro de batalla

Bueno, mas bien me inspiré en él... El mecanismo usado no es el mismo, por lo que no se puede considerar un robo... ¿no? xD Ah, y en el script pone "(inspirado en un script de gerrtunk)" en las primeras líneas.

Wecoc
Administrador
Administrador



Créditos 8263

Gracias : 372

Volver arriba Ir abajo

Re: Ventana de log de acciones en batalla

Mensaje por gerrtunk el 2011-07-13, 20:02

Wecoc escribió:Utilizé tu script para hacer uno hace un tiempo... Espero que no te enfades por ello. Haha Sweat
Add-on raro de batalla

Bueno, mas bien me inspiré en él... El mecanismo usado no es el mismo, por lo que no se puede considerar un robo... ¿no? xD Ah, y en el script pone "(inspirado en un script de gerrtunk)" en las primeras líneas.

No pasa nada, aunque uses el codigo, para eso esta la licencia GPL/MIT, y la idea de la experiencia esta bien pensada y es original. Nota que deberias poner tu codigo con esa licencia al estar basado en el por eso.

Pues este script es la version simple en todo caso. La version larga, que corte a medias para publicar este primero, guardaba un registro completo en un array de objetos de acciones estructurado por turnos y tal, y tras el combate podias verlo o guardarlo en formato html. Aunque esta version la sacare para un proyecto mio creo cuando lo necesite terminar, que ahora me voy a dar un descanso de PC y scripting tambien.


gerrtunk
Principiante
Principiante

0/3

Créditos 364

Gracias : 22

Volver arriba Ir abajo

Re: Ventana de log de acciones en batalla

Mensaje por Contenido patrocinado Hoy a las 16:32


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

Permisos de este foro:
No puedes responder a temas en este foro.