O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Evento que emite som

Iniciado por Nogueira, 26/12/2019 às 19:15

26/12/2019 às 19:15 Última edição: 29/12/2019 às 00:46 por Nogueira
Lemony's Sound Emitting Events
By: Lemony (disponibilizado por ♥SOURCE♥)

Compativel com: RMVX Ace
Dificuldade: Fácil
Lag gerado: Baixo

[box class=titlebg]
Condições de Uso
[/box]
O autor libera o script para uso em projetos comerciais e não comerciais, sem a necessidade de créditos.

[box class=titlebg]
Para que serve o script
[/box]
Este script permite que eventos emitam sons, sons estes que aumentam o volume conforme o jogador se aproxima e diminuem conforme ele se afasta.
  E qual a utilidade disso? Bem, aí vai da sua imaginação. Em meu projeto, coloquei um carro de polícia que você ouve a rádio policial vindo de dentro dele conforme se aproxima e vai deixando de a ouvir conforme se afasta; coloquei também para o jogador ouvir o "tuts tuts" cada vez mais alto conforme se aproxima de uma balada do mapa.

[box class=titlebg]
Imagens
[/box]
Não perceptível por imagens.

[box class=titlebg]
Download e Script
[/box]
Copie e cole acima do "Main":

#==============================================================================
# ** Lemony's Sound Emitting Events
#------------------------------------------------------------------------------
# * This little script allows to make certain events play music/sounds based
# on player proximity.
# * It is currently limited by one bgs at a time, resulting in lag if one
# sound emitting event's area is overlapping other's sound emitting event area.
#------------------------------------------------------------------------------
# To use it, simple make a comment inside the target event with the following
# LSEE TYPE RANGE PITCH VOLUME FILENAME => LSEE BGS 8 100 100 Fire
# If type is SE or ME, you need two additional variables
# LSEE TYPE RANGE PITCH VOLUME FILENAME DELAY RANDOM
#==============================================================================
class Game_Event < Game_Character
  #--------------------------------------------------------------------------
  # * Refresh Alias
  #--------------------------------------------------------------------------
  alias lemony_see_refresh refresh
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
	lemony_see_refresh
	return if (@page.nil? || @page.list.nil?)
	@page.list.each {|p| b = p.parameters[0]
	s, @lsee_out = (b != nil && b.is_a?(String)) ? b.split : '', false
	if (p.code == 108 || p.code == 408) && b.include?('LSEE')
	  @lsee_data = [s[1], s[2], s[3].to_i, s[4], s[5], s[6].to_i, s[7].to_i]
	  break if @lsee_data != nil
	else @lsee_out = true end}
  end
  #--------------------------------------------------------------------------
  # * Update Alias
  #--------------------------------------------------------------------------
  alias lemony_see_update update
  #--------------------------------------------------------------------------
  # * Update
  #--------------------------------------------------------------------------
  def update
	lemony_see_update
	if !@lsee_data.nil?
	  xx, yy = (@real_x - $game_player.real_x), (@real_y - $game_player.real_y)
	  close = (Math.sqrt((xx * xx) + (yy * yy)) <= @lsee_data[1].to_i)
	  r, d = @lsee_data[1].to_i, Math.sqrt((xx * xx) + (yy * yy))
	  v, go, ms = (r - (d - 1 % r)) * @lsee_data[3].to_i / r, true, ['ME', 'SE']
	  if !@lsee_out
		if ms.include?(@lsee_data[0])
		  @lsee_timer ||= @lsee_data[5] + rand(@lsee_data[6])
		  @lsee_timer = [@lsee_timer - 1, 0].max
		  go = @lsee_timer <= 0
		  @lsee_timer = nil if go
		end
		out = (!@lsee_data[7].nil? && (@lsee_data[7].volume > 0 && !close)) && go
		f = "#{@lsee_data[0]}.new('#{@lsee_data[4]}', #{v}, #{@lsee_data[2]})"
		@lsee_data[7] ||= eval("RPG::" + f) if close && go
		@lsee_data[7].volume = v if !@lsee_data[7].nil? && close
		@lsee_data[7].play if ((!@lsee_data[7].nil? && close) && go) || out
		@lsee_data[7].volume -= 1 if !@lsee_data[7].nil? && !close
		@lsee_data[7] = nil if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
	  elsif @lsee_out
		@lsee_data[7].volume -= 1 if !@lsee_data[7].nil?
		@lsee_data[7].play if !@lsee_data[7].nil? && !ms.include?(@lsee_data[0])
		if (!@lsee_data[7].nil? && @lsee_data[7].volume <= 0)
		  @lsee_data, @lsee_out = nil, false
		end
	  end
	end
  end
end

 

Para usar, coloque dentro do evento um comentário contendo as seguintes informações:
LSEE TYPE RANGE PITCH VOLUME FILENAME


Por exemplo:
LSEE BGS 8 100 100 Fire


Para usar ME's e SE's é necessário colocar mais dois indicadores, indicando delay e variação. Exemplo:
LSEE SE 8 100 45 Absorb2 60 100


Obs: Utilizar BGS em dois eventos que possuam a mesma área de atuação pode resultar em lag segundo o autor.


[box class=titlebg]
Créditos e Avisos
[/box]
Criador: Lemony
Link para o tópico oficial: https://forums.rpgmakerweb.com/index.php?threads/sound-emitting-events.1714/