Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[Ayuda] Musik_tall función extra

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Ayuda] Musik_tall función extra

Mensaje por AsFzKakarotto el 2018-09-28, 03:57

Hola, como están? espero que bien mis queridos colegas, estaba intentando de hacer un pequeño cambio de un script...
Bueno estaba intentando de hacer que la melodía de victoria se pudiera hacer loopeada y que a su vez tampoco se loopee
todo para dar mayor elección al momento de crear nuestro juego. todo esto es referente al sistema audio loop que
compartí hace un tiempo atrás.

Bueno quisiera dejar mis 2 script como resultado:

He observado algunos métodos y he aprendido a hacer algunas cosillas, pero necesito la mano de algún experto para que me ayude a resolver algo que me a quitado un día entero, demonios que manera de hacer intentos por resolver pero siempre quedo allí, con una falla extra.

Código:
#==============================================================================
# Musik_tall (modified for waterpg , http://waterpg.coolforum.info)
# Edit by Wecoc
#==============================================================================

#==============================================================================
#  Game_System
#==============================================================================

class Game_System
  attr_accessor :victory_bgm
  attr_accessor :victory_fade_duration1
  attr_accessor :victory_fade_duration2
  attr_accessor :victory_system
  alias musik_tall_ini initialize unless $@
  def initialize
    musik_tall_ini
    # Aquí el nombre de la Melodía de Victoria (BGM)
    @victory_bgm = "Results"
    # Aquí el tiempo que decrece el BGM de Batalla
    @victory_fade_duration1 = 1000
    # Aquí el tiempo que decrece el BGM de Victoria
    @victory_fade_duration2 = 0.25
    # Melodía de Victoria: BGM = true / ME = false
    @victory_system = true
  end
end

#==============================================================================
#  Scene_Battle
#==============================================================================

class Scene_Battle

  alias xrxs_bp18_start_phase5 start_phase5
  def start_phase5
    if $game_system.victory_bgm == ""
      xrxs_bp18_start_phase5
      return
    end
    $game_system.battle_end_me.name = ""
    xrxs_bp18_start_phase5
    if $game_system.victory_system == true
    Audio.bgm_play("Audio/BGM/" + $game_system.victory_bgm)
     else
      Audio.me_play("Audio/ME/" + $game_system.victory_bgm)
      Audio.bgm_fade($game_system.victory_fade_duration1)
      @bgm_fade_thread = Thread.new do
        sleep($game_system.victory_fade_duration2)
         $game_system.bgm_play($game_temp.map_bgm)
        # Volver a cargar la música del mapa donde estaba
        if $game_temp.map_bgm_pos > 0
          FmodEx.bgm_sound.set_position($game_temp.map_bgm_pos)
        end
        @bgm_fade_thread.kill
      end
    end
  end
  alias xrxs_bp18_battle_end battle_end
  def battle_end(result)
    xrxs_bp18_battle_end(result)
    if $game_system.victory_bgm == ""
      Audio.me_fade($game_system.victory_fade_duration1)
         @me_fade_thread = Thread.new do
        sleep($game_system.victory_fade_duration2)
        Audio.me_stop
        @me_fade_thread.kill
      end
    else
      if $game_system.victory_system == true
      Audio.bgm_fade($game_system.victory_fade_duration1)
      @bgm_fade_thread = Thread.new do
        sleep($game_system.victory_fade_duration2)
         $game_system.bgm_play($game_temp.map_bgm)
        # Volver a cargar la música del mapa donde estaba
        if $game_temp.map_bgm_pos > 0
          FmodEx.bgm_sound.set_position($game_temp.map_bgm_pos)
        end
        @bgm_fade_thread.kill
      end
    end    
  end
end
end

este código como verán es el de Musik_tall que para ser sincero he trolleado más que nada (sin intensiones), por hacerle una que otra mejora... no quiero molestar nuevamente a Wecoc que me ha ayudado bastante. Ahora he intentado hacer un sistema que permita cambiar entre el audio BGM a ME como audio de victoria y viceversa con este simple llamado de script:

$game_system.victory_system = true/ false

Al pasar de BGM a ME el ME de victoria no se genera un bucle, suena da termino y suena la melodía de el mapa a comparación
de BGM, que suena eternamente hasta que le demos a continuar.

Todo iba muy mal, hasta que de a poquito le fui tomando el rumbo, pero también se necesito editar el siguiente script:

Código:
#==============================================================================
# ** Scene_Battle (part 2)
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Start Pre-Battle Phase
  #--------------------------------------------------------------------------
  def start_phase1
    # Shift to phase 1
    @phase = 1
    # Clear all party member actions
    $game_party.clear_actions
    # Set up battle event
    setup_battle_event
  end
  #--------------------------------------------------------------------------
  # * Frame Update (pre-battle phase)
  #--------------------------------------------------------------------------
  def update_phase1
    # Determine win/loss situation
    if judge
      # If won or lost: end method
      return
    end
    # Start party command phase
    start_phase2
  end
  #--------------------------------------------------------------------------
  # * Start Party Command Phase
  #--------------------------------------------------------------------------
  def start_phase2
    # Shift to phase 2
    @phase = 2
    # Set actor to non-selecting
    @actor_index = -1
    @active_battler = nil
    # Enable party command window
    @party_command_window.active = true
    @party_command_window.visible = true
    # Disable actor command window
    @actor_command_window.active = false
    @actor_command_window.visible = false
    # Clear main phase flag
    $game_temp.battle_main_phase = false
    # Clear all party member actions
    $game_party.clear_actions
    # If impossible to input command
    unless $game_party.inputable?
      # Start main phase
      start_phase4
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (party command phase)
  #--------------------------------------------------------------------------
  def update_phase2
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by party command window cursor position
      case @party_command_window.index
      when 0  # fight
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Start actor command phase
        start_phase3
      when 1  # escape
        # If it's not possible to escape
        if $game_temp.battle_can_escape == false
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Escape processing
        update_phase2_escape
      end
      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
      # Play escape SE ###############################
      $game_system.se_play($data_system.escape_se)
      if $game_system.victory_system == true
   else
      $game_system.bgm_play($game_temp.map_bgm)
    if $game_temp.map_bgm_pos > 0
      FmodEx.bgm_sound.set_position($game_temp.map_bgm_pos)
    end
  end
      #$game_system.bgm_play($game_temp.map_bgm)
      # Battle ends
      battle_end(1)
    # If escape is failure
    else
      # Clear all party member actions
      $game_party.clear_actions
      # Start main phase
      start_phase4
    end
  end
  #--------------------------------------------------------------------------
  # * Start After Battle Phase
  #--------------------------------------------------------------------------
  def start_phase5
    # Shift to phase 5
    @phase = 5
    # Play battle end ME ###########################
    $game_system.me_play($game_system.battle_end_me)
    # Return to BGM before battle started
    #$game_system.bgm_play($game_temp.map_bgm)
    # Initialize EXP, amount of gold, and treasure
    exp = 0
    gold = 0
    treasures = []
    # Loop
    for enemy in $game_troop.enemies
      # If enemy is not hidden
      unless enemy.hidden
        # Add EXP and amount of gold obtained
        exp += enemy.exp
        gold += enemy.gold
        # Determine if treasure appears
        if rand(100) < enemy.treasure_prob
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    # Treasure is limited to a maximum of 6 items
    treasures = treasures[0..5]
    # Obtaining EXP
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    # Obtaining gold
    $game_party.gain_gold(gold)
    # Obtaining treasure
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    # Make battle result window
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    # Set wait count
    @phase5_wait_count = 100
  end
  #--------------------------------------------------------------------------
  # * Frame Update (after battle phase)
  #--------------------------------------------------------------------------
  def update_phase5
    # If wait count is larger than 0
    if @phase5_wait_count > 0
      # Decrease wait count
      @phase5_wait_count -= 1
      # If wait count reaches 0
      if @phase5_wait_count == 0
        # Show result window
        @result_window.visible = true
        # Clear main phase flag
        $game_temp.battle_main_phase = false
        # Refresh status window
        @status_window.refresh
      end
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Battle ends
      battle_end(0)
    end
  end
end

Este código se modifico para que al momento de escapar o terminar la batalla no ocurrieran cosillas raras...

Todo va perfecto, hasta que de repente me aparece este mensaje:



Quien me puede dar una solución? es muy raro el error ya que a veces no aparece y a veces si.
y de pasada aprovecho a decir si existe algún modo de que el audio de victoria se desactive, ya que el método que trae sobre
dejar como nombre "" trae alguna que otra cosilla rara... si no me equivoco esto se puede observar en:

La siguiente imagen (spoiler):

Todo esto es compatible con el sistema de pausa de melodía a entrar en batalla. si necesitan una demo solo díganmelo,
pero en ese caso si han descargado la ultima demo del sistema  audio loop  simplemente hay que reemplazar los 2 script.
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 314

Gracias : 68

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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