Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Incompatibilidad entre Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Incompatibilidad entre Scripts

Mensaje por AsFzKakarotto el 2018-02-05, 05:35

Hola a todos... bueno. Tengo un sistema que permite que el audio BGM se pause al entrar en Batalla y volver a continuar cuando se termine la batalla, con ello fantástico. El sistema funciona con una .dll similar a la que usa el sistema de Audio Loop para Rpg Maker XP [Definitivo] la cual es fmodex.dll los script por el momento andan bien solo hay un problema y es que quiero combinar este sistema con el de Audio-Loop y uno de los script genera incompatibilidad: Game_System

linea:  Audio.bgm_play("Audio/BGM/" + bgm.name, bgm.volume, bgm.pitch, pos)

DEMO: http://share.cherrytree.at/showfile-30891/music.zip

¿Hay alguna forma de hacer compatible este sistema que memoriza la posición de la bgm junto con los script de Audio_loop?
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 324

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por Wecoc el 2018-02-17, 16:40

No es nada fácil lo que pides... Lo único que se me ocurre es lo siguiente, a ver si te sirve.

Ve al segundo script de Audio Loop, el que se llama Audio (FmodEx)

Cambia esta línea:
[line]def bgm_play(file_name, volume = 100, pitch = 100)[/line]
por esto:
[line]def bgm_play(file_name, volume = 100, pitch = 100, pos = 0)[/line]

Cambia esta:
[line]bgm = ::FmodEx.bgm_play(filename, volume, pitch)[/line]
por esto:
[line]bgm = ::FmodEx.bgm_play(filename, volume, pitch, pos)[/line]

Y del mismo modo cambia esta:
[line]def bgs_play(file_name, volume = 100, pitch = 100)[/line]
por esto:
[line]def bgs_play(file_name, volume = 100, pitch = 100, pos = 0)[/line]

Y esta:
[line]bgs = ::FmodEx.bgs_play(filename, volume, pitch)[/line]
por esto:
[line]bgs = ::FmodEx.bgs_play(filename, volume, pitch, pos)[/line]

Todo lo demás lo dejas igual... A ver si con suerte se te arregla.
He estado mirando los scripts durante mucho rato en busca de posibles modos de integrarlo todo mejor.
Si no se te arregla con eso no creo que sea capaz de ayudarte.
avatar
Wecoc
Administrador
Administrador



Créditos 12314

Gracias : 655

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por orochii el 2018-02-17, 17:53

Hice una chapuza con el de Nuri Yuri, el asunto es que el script ese de Nuri Yuri (el que pusiste en tu post ese que linkeaste) tiene esas opciones también de posición al menos. Quiza lo de reproducir dos ME al mismo tiempo no ._. pero en fin. Nadie necesita eso xDDD, para eso reproduces una como sonido normal y listo :V.

Aquí está el script con las modificaciones. Hice básicamente lo que puso Wec. xD
Código:
#===============================================================================
# Audio (FmodEx)
#  Réécriture du module Audio pour intégrer l'utilisation de FmodEx
#===============================================================================
# ©️️ 2015 - Nuri Yuri (塗 ゆり)
# ©️️ 2015 - GiraPrimal : Concept LOOP_TABLE
#===============================================================================
#Script réalisé par des membres de Community Script Project
#===============================================================================
module Audio
  LOOP_TABLE = [
  # [ "Audio/xxx/Nom_de_fichier", debut, fin ]
  # Ajoutez ici
 
 
  # Note : Pensez à ajouter une virgule après chaque ]
  #        (sauf pour la dernière ligne et le ] ci-dessous).
  ]
  #=============================================================================
  #>Mise en minuscule des noms de fichier pour améliorer la recherche
  #---
  LOOP_TABLE.each do |i| i[0].downcase! end
 
  unless @bgm_play #>Pour éviter le problème du RGSSReset
  #=============================================================================
  #>Chargement et initialisation de FmodEx
  #=============================================================================
  Kernel.load_module("RGSS FmodEx.dll","Init_FmodEx")
  ::FmodEx.init(32)
  #=============================================================================
  #>Indication de la lib' utilisée par défauts
  #=============================================================================
  @library = ::FmodEx
  #=============================================================================
  #>Sauvegarde des fonctions du RGSS
  #=============================================================================
  @bgm_play = method(:bgm_play)
  @bgm_fade = method(:bgm_fade)
  @bgm_stop = method(:bgm_stop)
  @bgs_play = method(:bgs_play)
  @bgs_fade = method(:bgs_fade)
  @bgs_stop = method(:bgs_stop)
  @me_play = method(:me_play)
  @me_fade = method(:me_fade)
  @me_stop = method(:me_stop)
  @se_play = method(:se_play)
  @se_stop = method(:se_stop)
  #=============================================================================
  #>Définition des volumes
  #=============================================================================
  @master_volume = 100
  @sfx_volume = 100
  #=============================================================================
  #>Définition des extensions supportés par FmodEx
  #=============================================================================
  EXT = ['.ogg', '.mp3', '.wav', '.mid', '.aac', '.wma', '.it', '.xm', '.mod', '.s3m', '.midi']
  #=============================================================================
  #>Création/définition des fonctions
  #=============================================================================
  module_function
  def bgm_play(file_name, volume = 100, pitch = 100, pos = 0)
    volume = volume * @master_volume / 100
    return @bgm_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    filename = check_file(file_name)
    bgm = ::FmodEx.bgm_play(filename, volume, pitch, pos)
    loop_audio(bgm, file_name)
  end
  def bgm_fade(time)
    return @bgm_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.bgm_fade(time)
  end
  def bgm_stop
    return @bgm_stop.call if(@library != ::FmodEx)
    ::FmodEx.bgm_stop
  end
  def bgs_play(file_name, volume = 100, pitch = 100, pos = 0)
    volume = volume * @sfx_volume / 100
    return @bgs_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    filename = check_file(file_name)
    bgs = ::FmodEx.bgs_play(filename, volume, pitch, pos)
    loop_audio(bgs, file_name)
  end
  def bgs_fade(time)
    return @bgs_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.bgs_fade(time)
  end
  def bgs_stop
    return @bgs_stop.call if(@library != ::FmodEx)
    ::FmodEx.bgs_stop
  end
  def me_play(file_name, volume = 100, pitch = 100)
    volume = volume * @master_volume / 100
    return @me_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    file_name = check_file(file_name)
    ::FmodEx.me_play(file_name, volume, pitch)
  end
  def me_fade(time)
    return @me_fade.call(time) if(@library != ::FmodEx)
    ::FmodEx.me_fade(time)
  end
  def me_stop
    return @me_stop.call if(@library != ::FmodEx)
    ::FmodEx.me_stop
  end
  def se_play(file_name, volume = 100, pitch = 100)
    volume = volume * @sfx_volume / 100
    return @se_play.call(file_name, volume, pitch) if(@library != ::FmodEx)
    file_name = check_file(file_name)
    ::FmodEx.se_play(file_name, volume, pitch)
  end
  def se_stop
    return @se_stop.call if(@library != ::FmodEx)
    ::FmodEx.se_stop
  end
  #=============================================================================
  #>check_file
  #  Vérifie la présence du fichier et retourne le nom du fichier existant
  #  /!\ Ne corrige pas la connerie
  #=============================================================================
  def check_file(file_name)
    return file_name if File.exist?(file_name)
    EXT.each do |ext|
      filename = file_name+ext
      return filename if File.exist?(filename)
    end
    return file_name
  end
  #=============================================================================
  #>loop_audio
  # Fonction permettant de réaliser automatiquement l'appel de set_loop_points
  #=============================================================================
  def loop_audio(sound, file_name)
    filename = file_name.downcase
    LOOP_TABLE.each do |i|
      if(i[0] == filename)
        return sound.set_loop_points(i[1], i[2])
      end
    end
  end
  end
end

Único contra del script de Nuri Yuri respecto al otro. Necesitas tener los archivos en la carpeta. Es decir, los archivos del RTP no funcionarán si no los importas/copias. Quiza luego le eche una ojeada al otro, algo debió hacer el autor de ese, total es el mismo FmodEx (excepto este, el de Nuri Yuri, es una versión 200Kb más nueva (?)).

Salut!
avatar
orochii
Reportero

0/3

Créditos 7343

Gracias : 477

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por AsFzKakarotto el 2018-02-18, 19:47

Se pasaron. Gracias por la ayuda esperare con ansias revisar estas soluciones, comprendo que es difícil pero a pesar de lo genial que es para mi que se loop un audio, es bastante repetitivo que se comience la música siempre desde el inicio después de la batalla.  muchas gracias Orochi & Wecoc ojala todo funcione como debe de ser.
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 324

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por orochii el 2018-02-18, 20:48

En teoría la solución es usar el de Nuri Yuri, es decir el que tú mismo pasaste xD. Con la modificación que Wecoc y yo hicimos basta para que se reproduzca desde la posición donde quedó. Ya luego de eso pues sería usar el edit del Game_System ese, o lo que sea que estés usando para guardar la posición de la música actual. Creo que yo tomé tu demo de musica, le cambié el FmodEx que tenía por el de NuriYuri, cambié esas líneas, y voilà todo iba igual excepto lo de dos MEs xD.

Anyway ojala todo ande bien, salut.
avatar
orochii
Reportero

0/3

Créditos 7343

Gracias : 477

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por AsFzKakarotto el 2018-02-19, 14:45

Es Curioso ya no hay errores, pero el bgm se vuelve a reiniciar, es una lastima...
Creo que los script de "RGSS Linker" o "FmodEx" hacen que se reinicie la bgm
(lo he revisado todo los script combinados y también lo he revisado solo con los cambios de Wecoc y orochi.

Lo que si he estado investigando son unos llamados de script adicionales que trae, que pronto los compartire en el post principal... uno de ellos me llama la atención:

FmodEx.bgm_sound.set_position(n)

n= Milesegundos

Esto permite moverse instantáneamente al punto especificado en mili segundo de la música actual, tal y como dijo Orochi parece ya traer las posiciones. Si tan solo adivinaría cual es el llamado de script que carga los mili segundos actuales de la música y
reemplazarla en una variable, estariamos listos.

Orochi escribió:voilà todo iba igual excepto lo de dos MEs xD

Seria mucho Orochi pedirte una Demo con tus cambios por favor....
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 324

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por Wecoc el 2018-02-19, 15:07

Es Curioso ya no hay errores, pero el bgm se vuelve a reiniciar, es una lastima...

Esto es raro... ¿El script para que la música del mapa se reinicie tras la batalla no iba a parte?

Si tan solo adivinara cual es el llamado de script que carga los mili segundos actuales de la música

Adivina y acerterás.

[line]FmodEx.bgm_sound.get_position[/line]

Aún así debo decir que tienes un lío de módulos de Audio ahí impresionante xD
No sé ni de donde sacaste el set_position(n) ese, solo he visto que en el script de la demo que has puesto FMod tiene set_position(sound_file, new_pos) y get_position(sound_file) así que intuyo que en tu sistema irá parecido.

Prueba a guardar los milisegundos en una variable normal, si te sirve probaremos a cambiarlo por una variable Game_System todo vía script para que quede optimizado y para no tener que gastar variables.
avatar
Wecoc
Administrador
Administrador



Créditos 12314

Gracias : 655

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por AsFzKakarotto el 2018-02-19, 20:40

@wecoc escribió:FmodEx.bgm_sound.get_position

Encerio Wecoc te Aseguro con mil demonios que use ese llamado pero nunca se me ocurrió unirlo en reemplazo a una variable maldición estaba tan solo en unos eventos al lado mio... ok gracias.

Al principio use todos los script de AUDIO LOOP y el de la otra demo como lo explique en el principal tema (Tenia un CAOS):

Ahora ultimo use tu método y el de Orochi y la melodía se volvía a reiniciar.

La cosa es que no había que hacer prácticamente nada y solo configurar algunos script.
En parte fue culpa mía por haber Combinado dos sistemas sin saber que ya se incluía en el que compartí.

Ahora configure "Scene_Battle 2" y "Scene_Map" y finalmente FUNCIONA PERFECTO.

Ahora  wecoc tu que sabes usar otros métodos en vez de las variables de la base de datos te lo dejo en tus sabias manos,
el script en si, está listo MUCHÍSIMAS GRACIAS aunque si le aplicas un fade de entrada para retomar la melodía sería Magnifico
ya que la melodia se retoma perfectamente pero de forma un tanto brusca XD, pero son detalles, tu decides.

Por cierto el Sistema no funciona con el script de Victoria AUDIO LOOP.

Aqui les dejo la solución.

Código:
#==============================================================================
# musik_tall (modified for waterpg , http://waterpg.coolforum.info)
#==============================================================================
class Scene_Battle
  #
  # í“¬Ÿ—˜uBGMv‚ðŽg—p‚·‚é(""‚Å‚ÍŽg—p‚µ‚È‚¢)
  #
  VICTORY_BGM = "" #   <<<<====== Aquí el nombre de la Melodía de Victoria.
  #
  # ƒtƒF[ƒhŽžŠÔ :
  #     1 ‚ªƒtƒF[ƒh‚µ‚悤‚Æ‚·‚鎞ŠÔ [’PˆÊ:ƒ~ƒŠ•b]
  #     2 ‚ª’âŽ~‚·‚é‚Ü‚Å‚ÌŽžŠÔ       [’PˆÊ:•b]
  #
  FADE_DURATION1 = 1000
  FADE_DURATION2 = 0.25
  #
  # ‚±‚ÌŽžŠÔ‚ð’·‚­‚µ‚āuƒ}ƒbƒv‚É–ß‚Á‚Ä‚à­‚µ‚ÌŠÔBGM‚ªƒtƒF[ƒh‚µ‘±‚¯‚év
  # ‚Æ‚¢‚Á‚½•Œ»‚ª‰Â”B
end

#==============================================================================
# ¡ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  # œ ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp18_start_phase5 start_phase5
  def start_phase5
    # ŒÄ‚Ñ–ß‚·
    if VICTORY_BGM == ""
      xrxs_bp18_start_phase5
      return
    end
    #
    # --- í“¬Ÿ—˜BGM ---
    #
    # í“¬I—¹ME‚͏Á‚³‚ê‚é
    $game_system.battle_end_me.name = ""
    # ŒÄ‚Ñ–ß‚·
    xrxs_bp18_start_phase5
    # ƒoƒgƒ‹I—¹ BGM ‚ð‰‰‘t
    Audio.bgm_play("Audio/BGM/" + VICTORY_BGM)
  end
  #--------------------------------------------------------------------------
  # œ ƒoƒgƒ‹I—¹
  #--------------------------------------------------------------------------
  alias xrxs_bp18_battle_end battle_end
  def battle_end(result)
    # ŒÄ‚Ñ–ß‚·
    xrxs_bp18_battle_end(result)
    #
    # --- BGM/MEƒtƒF[ƒhƒAƒEƒg ---
    #
    if VICTORY_BGM == ""
      # ME‚̃tƒF[ƒhƒAƒEƒg‚ðŠJŽn
      Audio.me_fade(FADE_DURATION1)
      # V‹KƒXƒŒƒbƒh‚ŃtƒF[ƒhI—¹‚ðŠÇ—
      @me_fade_thread = Thread.new do
        sleep(FADE_DURATION2)
        Audio.me_stop
        @me_fade_thread.kill
      end
    else
      # BGM‚̃tƒF[ƒhƒAƒEƒg‚ðŠJŽn
      Audio.bgm_fade(FADE_DURATION1)
      # V‹KƒXƒŒƒbƒh‚ŃtƒF[ƒhI—¹‚ðŠÇ—
      @bgm_fade_thread = Thread.new do
        sleep(FADE_DURATION2)
        # ƒoƒgƒ‹ŠJŽn‘O‚Ì BGM ‚É–ß‚·
        $game_system.bgm_play($game_temp.map_bgm)
        FmodEx.bgm_sound.set_position($game_variables[3]) ######################
        @bgm_fade_thread.kill
           end
        end    
    end
  end

De todas maneras muy, pero muy agradecido, no me sirvieron sus métodos pero me ayudaron mucho a coordinarme si no fuera por que Orochi dijo que estaba ya incluido las posiciones o Wecoc por haber mencionado como cargar dichas posiciones no hubiese podido hacerlo, si no me creen aquí les dejo la DEMO.

DEMOSTRATION

Se configuro:

Scene_Battle 2    linea 120 y 141
Scene_Map         linea 166

Los demas detalles extras que estan en está demo, pronto lo apuntare en Audio Loop para Rpg Maker XP [Definitivo]
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 324

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por Wecoc el 2018-02-19, 21:05

El script tal como yo lo montaría es así. Se guarda la posición de la música del mapa automáticamente al entrar en batalla, así que no necesitas eventos ni variables de evento.

Código:
#==============================================================================
# musik_tall (modified for waterpg , http://waterpg.coolforum.info)
#==============================================================================

class Scene_Battle
  #
  # í“¬Ÿ—˜uBGMv‚ðŽg—p‚·‚é(""‚Å‚ÍŽg—p‚µ‚È‚¢)
  #
  VICTORY_BGM = "" #   <<<<====== Aquí el nombre de la Melodía de Victoria.
  #
  # ƒtƒF[ƒhŽžŠÔ :
  #     1 ‚ªƒtƒF[ƒh‚µ‚悤‚Æ‚·‚鎞ŠÔ [’PˆÊ:ƒ~ƒŠ•b]
  #     2 ‚ª’âŽ~‚·‚é‚Ü‚Å‚ÌŽžŠÔ       [’PˆÊ:•b]
  #
  FADE_DURATION1 = 1000
  FADE_DURATION2 = 0.25
  #
  # ‚±‚ÌŽžŠÔ‚ð’·‚­‚µ‚āuƒ}ƒbƒv‚É–ß‚Á‚Ä‚à­‚µ‚ÌŠÔBGM‚ªƒtƒF[ƒh‚µ‘±‚¯‚év
  # ‚Æ‚¢‚Á‚½•Œ»‚ª‰Â”B
end

#==============================================================================
# ¡ Game_Temp
#==============================================================================

class Game_Temp
  attr_accessor :map_bgm_pos
  alias map_bgm_pos_ini initialize unless $@
  def initialize
    map_bgm_pos_ini
    @map_bgm_pos = 0
  end
end

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

class Game_System
  attr_accessor :save_map_bgm_pos
  alias save_map_pos_ini initialize unless $@
  def initialize
    save_map_pos_ini
    @save_map_bgm_pos = true
  end
end

#==============================================================================
# ¡ Scene_Map
#==============================================================================

class Scene_Map
  alias map_bgm_pos_call_battle call_battle unless $@
  def call_battle
    if $game_system.save_map_bgm_pos == true
      $game_temp.map_bgm_pos = FmodEx.bgm_sound.get_position
    else
      $game_temp.map_bgm_pos = 0
    end
    map_bgm_pos_call_battle
  end
end

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

class Scene_Battle
  #--------------------------------------------------------------------------
  # œ ƒAƒtƒ^[ƒoƒgƒ‹ƒtƒF[ƒYŠJŽn
  #--------------------------------------------------------------------------
  alias xrxs_bp18_start_phase5 start_phase5
  def start_phase5
    # ŒÄ‚Ñ–ß‚·
    if VICTORY_BGM == ""
      xrxs_bp18_start_phase5
      return
    end
    #
    # --- í“¬Ÿ—˜BGM ---
    #
    # í“¬I—¹ME‚͏Á‚³‚ê‚é
    $game_system.battle_end_me.name = ""
    # ŒÄ‚Ñ–ß‚·
    xrxs_bp18_start_phase5
    # ƒoƒgƒ‹I—¹ BGM ‚ð‰‰‘t
    Audio.bgm_play("Audio/BGM/" + VICTORY_BGM)
  end
  #--------------------------------------------------------------------------
  # œ ƒoƒgƒ‹I—¹
  #--------------------------------------------------------------------------
  alias xrxs_bp18_battle_end battle_end
  def battle_end(result)
    # ŒÄ‚Ñ–ß‚·
    xrxs_bp18_battle_end(result)
    #
    # --- BGM/MEƒtƒF[ƒhƒAƒEƒg ---
    #
    if VICTORY_BGM == ""
      # ME‚̃tƒF[ƒhƒAƒEƒg‚ðŠJŽn
      Audio.me_fade(FADE_DURATION1)
      # V‹KƒXƒŒƒbƒh‚ŃtƒF[ƒhI—¹‚ðŠÇ—
      @me_fade_thread = Thread.new do
        sleep(FADE_DURATION2)
        Audio.me_stop
        @me_fade_thread.kill
      end
    else
      # BGM‚̃tƒF[ƒhƒAƒEƒg‚ðŠJŽn
      Audio.bgm_fade(FADE_DURATION1)
      # V‹KƒXƒŒƒbƒh‚ŃtƒF[ƒhI—¹‚ðŠÇ—
      @bgm_fade_thread = Thread.new do
        sleep(FADE_DURATION2)
        # ƒoƒgƒ‹ŠJŽn‘O‚Ì BGM ‚É–ß‚·
        $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

Además puedes activar y desactivar que se guarde la posición al iniciar batalla, por defecto está activado.
Para hacerlo usa $game_system.save_map_bgm_pos = true / false
avatar
Wecoc
Administrador
Administrador



Créditos 12314

Gracias : 655

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por AsFzKakarotto el 2018-02-27, 04:42

Otra vez con las cosillas raras que me pasan a mi :( lo siento íbamos super bien con el script, cuando de repente lo testeo de manera profunda y me di cuenta de algunos errores extras.

Aclarar que no es un pedido ya que todo tubo su solución.
Es más que nada una mención para tener conocimiento de ello y ayudar al que le sea útil.
Aunque siempre es bienvenida cualquier solución más efectivas que las mencionadas.

La cosa es que si en un momento del mapa, no se usan melodías y si se llega a combatir aparecerá este error.



Después de todo es lógico que exista este error por que el comando no va a encontrar el punto de un audio que no existe.

Eh descubierto una pequeña solución:

Cada vez que se detiene una melodía colocando (Ninguno) para reproducir, se debe
usar bajo ese comando este llamado de script:

$game_system.save_map_bgm_pos = false

Es necesario quitar SIEMPRE la pausa de melodías al momento de usar un ambiente de silencio en su mapa o les ocurrirá el error ya mencionado. (Que bueno que wecoc ha hecho este sistema adicional)

Ahora como mencionaba de las cosillas raras que me pasan a mi he intentado de hacer correr lo más fluido y hermosamente posible los audios XD, sin saltos ni nada, de hecho sigo asumiendo que el sistema audio loop va muy bien. Bueno la cosa es que el script que wecoc ha hecho, lo digo de ante mano va bien, de hecho él lo ha unido con el script de Victoria BGM para hacerle loopeo,
he notado una doble repetición del audio al momento de retomar la melodía al terminar la batalla, investigo y solo se trata del querido script "Scene_Battle (part 2)" que dentro de sus comandos está el de reproducir la Melodía. Le he hecho una copia de este y he anulado esos comandos, lo he probado y listo, todo bien.

Ahora el problema es lo siguiente:

He separado el Script de "Victory BGM" y el que guarda la posición del BGM al entrar en batalla, que lo había hecho wecoc, lo hice para los que no quieran el sistema "Victory BGM" (para que vean que pienso siempre en los demás ;)) ya que el script no nos permite dejar vació el nombre del audio o ocurrirán cosas raras, como ejemplo: Dejar en silencio o seguir sonando el bgm de batalla en el mapa.  

Bueno, con ello asumimos que no vamos a usar el sistema de Audio BGM Victory que lo usábamos para loop la melodía de victoria.
Ahora en los comandos de el script "Scene_Battle (part 2)" lo he adaptado según las ediciones previas para que se carguen las
posiciones del BGM ya que antes lo hacia el script que no vamos a usar.

En Resumen a todo lo explicado anteriormente, podría decirse que hay dos modos para que el audio corra perfecto:

1: Con el "Scene_Battle (part 2)" para que cargue las posiciones de bgm
  al ganar o escapar en batallas con el sistema de sonido de victoria
  default.

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)
      # Return to BGM before battle started
      $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
      # 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)
      # 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
    # 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


o

2: Con el "Scene_Battle (part 2)" para borrar sus comandos y que sea Optima
  su función junto al sistema de Victoria BGM para loopear la melodia y que
  cargue las posiciones de bgm al ganar o escapar en batallas.

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)
      # Return to BGM before battle started
      #$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

Que complicado se nos pone RPg maker XP, como que quiere algunas cosas activadas o a veces como que no las quiere.
PD: Por cierto no me di la oportunidad de agradecer tu ultimo script wecoc... muchas gracias
avatar
AsFzKakarotto
Soñador
Soñador

0/3

Créditos 324

Gracias : 70

Volver arriba Ir abajo

RPG Maker XP Re: Incompatibilidad entre Scripts

Mensaje por Contenido patrocinado


Contenido patrocinado


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.