Ir para conteúdo
  • 0

como colocar 2 tipos de sons diferentes na mesma area, otc


Developer Berg

Pergunta

Olá gente happy.png é o seguinte, to usando otclient e to colocando sons nas citys do meu server, e eu queria saber como eu poderia colocar 2 tipos de sons ( Musicas ) nas mesmas coordenadas, tipo, a pessoa ta em um " Cp " de um poketibia, e ta tocando uma " Tal Musica " ai a pessoa sai desse cp e entra de novo, ai vai tocar outro tipo de musica, e se a pessoa sair e entrar de novo nesse cp, vai tocar outra musica, e assim por diante ^^ vou deixar a minha script do " Rc-sound " que tem em meu otc, e vou deixar um video demonstrando como eu quero rsrs, e ah s, no outro tópico que criei um carinha falou uma coisa, e isso pode ajudar ^^

Só você adicionar varios sons ali na tabela da mesma area, depois faz um math.random pra quando o cara entrar tocar uma musica aleatoria.

n sei oque significa esse " Math.random " e n sei como faço isso rsrs

 

Script

 

SOUNDS_CONFIG = {
    soundChannel = SoundChannels.Music,
    checkInterval = 500,
    folder = 'music/',
    noSound = 'No sound file for this area.',
}

SOUNDS = {
-- PVP
    {fromPos = {x=936, y=1025, z=13}, toPos = {x=952, y=1043, z=13}, priority = 1, sound="Balada.ogg"},
} ----------

-- Sound
local rcSoundChannel
local showPosEvent
local playingSound

-- Design
soundWindow = nil
soundButton = nil

function toggle()
if soundButton:isOn() then
soundWindow:close()
soundButton:setOn(false)
else
soundWindow:open()
soundButton:setOn(true)
end
end

function onMiniWindowClose()
soundButton:setOn(false)
end

function init()
    for i = 1, #SOUNDS do
        SOUNDS[i].sound = SOUNDS_CONFIG.folder .. SOUNDS[i].sound
    end
    
    connect(g_game, { onGameStart = onGameStart,
onGameEnd = onGameEnd })
    
    rcSoundChannel = g_sounds.getChannel(SOUNDS_CONFIG.soundChannel)
    -- rcSoundChannel:setGain(value/COUNDS_CONFIG.volume)

    soundButton = modules.client_topmenu.addRightGameToggleButton('soundButton', tr('Sound Info') .. '', '/images/audio', toggle)
    soundButton:setOn(true)
    
    soundWindow = g_ui.loadUI('rcsound', modules.game_interface.getRightPanel())
    soundWindow:disableResize()
    soundWindow:setup()
    
    if(g_game.isOnline()) then
        onGameStart()
    end
end

function terminate()
    disconnect(g_game, { onGameStart = onGameStart,
onGameEnd = onGameEnd })
    onGameEnd()
    soundWindow:destroy()
    soundButton:destroy()
end

function onGameStart()
    stopSound()
    toggleSoundEvent = addEvent(toggleSound, SOUNDS_CONFIG.checkInterval)
end

function onGameEnd()
    stopSound()
    removeEvent(toggleSoundEvent)
end

function isInPos(pos, fromPos, toPos)
    return
        pos.x>=fromPos.x and
        pos.y>=fromPos.y and
        pos.z>=fromPos.z and
        pos.x<=toPos.x and
        pos.y<=toPos.y and
        pos.z<=toPos.z
end

function toggleSound()
    local player = g_game.getLocalPlayer()
    if not player then return end
    
    local pos = player:getPosition()
    local toPlay = nil

    for i = 1, #SOUNDS do
        if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
            if(toPlay) then
                toPlay.priority = toPlay.priority or 0
                if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                    toPlay = SOUNDS[i]
                end
            else
                toPlay = SOUNDS[i]
            end
        end
    end

    playingSound = playingSound or {sound='', priority=0}
    
    if(toPlay~=nil and playingSound.sound~=toPlay.sound) then
        g_logger.info("RC Sounds: New sound area detected:")
        g_logger.info(" Position: {x=" .. pos.x .. ", y=" .. pos.y .. ", z=" .. pos.z .. "}")
        g_logger.info(" Music: " .. toPlay.sound)
        stopSound()
        playSound(toPlay.sound)
        playingSound = toPlay
    elseif(toPlay==nil) and (playingSound.sound~='') then
        g_logger.info("RC Sounds: New sound area detected:")
        g_logger.info(" Left music area.")
        stopSound()
    end

    toggleSoundEvent = scheduleEvent(toggleSound, SOUNDS_CONFIG.checkInterval)
end

function playSound(sound)
    rcSoundChannel:enqueue(sound, 0)
    setLabel(clearName(sound))
end

function clearName(soundName)
    local explode = string.explode(soundName, "/")
    soundName = explode[#explode]
    explode = string.explode(soundName, ".ogg")
    soundName = ''
    for i = 1, #explode-1 do
        soundName = soundName .. explode[i]
    end
    return soundName
end

function stopSound()
    setLabel(SOUNDS_CONFIG.noSound)
    rcSoundChannel:stop()
    playingSound = nil
end

function setLabel(str)
    soundWindow:recursiveGetChildById('currentSound'):getChildById('value'):setText(str)
end

 

 

 

Video

 

http://www.youtube.com/watch?v=m_O6CxImOzU

 

 

 

Do Rep+ Quem Me Ajudar ^^


Up


Up

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Troque:

for i = 1, #SOUNDS do
    if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
        if(toPlay) then
            toPlay.priority = toPlay.priority or 0
            if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                toPlay = SOUNDS[i]
            end
        else
            toPlay = SOUNDS[i]
        end
    end
end

por:

for i = 1, #SOUNDS do
    if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
        if(toPlay) then
            toPlay.priority = toPlay.priority or 0
            if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                toPlay = SOUNDS[i]
            end
        else
            toPlay = SOUNDS[i]
            if type(toPlay.sound) == "table" then
                toPlay.sound = toPlay.sound[math.random(#toPlay.sound)]
            end
        end
    end
end

Para mais de uma música, coloque-as numa tabela. Exemplo:

SOUNDS = {
-- PVP
    {fromPos = {x=936, y=1025, z=13}, toPos = {x=952, y=1043, z=13}, priority = 1, sound="Balada.ogg"},                                      
    {fromPos = {x=x, y=y, z=z}, toPos = {x=x, y=y, z=z}, priority = 1, sound = {"PkmCenter.ogg", "PkmCenter2.ogg", "BW_PkmCenter.ogg"}},
} ----------
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Troque:

for i = 1, #SOUNDS do
    if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
        if(toPlay) then
            toPlay.priority = toPlay.priority or 0
            if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                toPlay = SOUNDS[i]
            end
        else
            toPlay = SOUNDS[i]
        end
    end
end

por:

for i = 1, #SOUNDS do
    if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
        if(toPlay) then
            toPlay.priority = toPlay.priority or 0
            if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                toPlay = SOUNDS[i]
            end
        else
            toPlay = SOUNDS[i]
            if type(toPlay.sound) == "table" then
                toPlay.sound = toPlay.sound[math.random(#toPlay.sound)]
            end
        end
    end
end

Para mais de uma música, coloque-as numa tabela. Exemplo:

SOUNDS = {
-- PVP
    {fromPos = {x=936, y=1025, z=13}, toPos = {x=952, y=1043, z=13}, priority = 1, sound="Balada.ogg"},                                      
    {fromPos = {x=x, y=y, z=z}, toPos = {x=x, y=y, z=z}, priority = 1, sound = {"PkmCenter.ogg", "PkmCenter2.ogg", "BW_PkmCenter.ogg"}},
} ----------

 

N pegou, deu esse erro aqui

ERROR: Unable to load module 'Up Area Sound': LUA ERROR:
/rc_sound/rcsound.lua:40: attempt to concatenate field 'sound' (a table value)
stack traceback:
    [C]: ?
    /rc_sound/rcsound.lua:40: in function 'init'
    /rc_sound/rcsound.otmod:12:[@onLoad]:1: in main chunk
    [C]: in function 'autoLoadModules'
    /init.lua:49: in main chunk
Link para o comentário
Compartilhar em outros sites

  • 0

Ops. Troque:

for i = 1, #SOUNDS do
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. SOUNDS[i].sound
end
por:
for i = 1, #SOUNDS do
    local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Ops. Troque:

for i = 1, #SOUNDS do
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. SOUNDS[i].sound
end
por:
for i = 1, #SOUNDS do
    local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
end

 

 

deu esse erro agr rs


ERROR: Unable to load module 'Up Area Sound': LUA ERROR: /rc_sound/rcsound.lua:58: '<eof>' expected near 'end'
stack traceback:
    [C]: ?
    [C]: in function 'autoLoadModules'
    /init.lua:49: in main chunk
Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

  • 0

Se possível, poste como ficou o código alterado.

olha aqui

SOUNDS_CONFIG = {
	soundChannel = SoundChannels.Music,
	checkInterval = 500,
	folder = 'music/',
	noSound = 'No sound file for this area.',
}

SOUNDS = {
		
	{fromPos = {x=1045, y=1040, z=7}, toPos = {x=1063, y=1058, z=7}, priority = 2, sound = {"CP.ogg", "CP2.ogg", "Vermilion.ogg", "Mark Shop.ogg"}},

} ----------

-- Sound
local rcSoundChannel
local showPosEvent
local playingSound

-- Design
soundWindow = nil
soundButton = nil

function toggle()
  if soundButton:isOn() then
    soundWindow:close()
    soundButton:setOn(false)
  else
    soundWindow:open()
    soundButton:setOn(true)
  end
end

function onMiniWindowClose()
  soundButton:setOn(false)
end

for i = 1, #SOUNDS do
    local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
end
	
	connect(g_game, { onGameStart = onGameStart,
                    onGameEnd = onGameEnd })
	
	rcSoundChannel = g_sounds.getChannel(SOUNDS_CONFIG.soundChannel)
	-- rcSoundChannel:setGain(value/COUNDS_CONFIG.volume)

	soundButton = modules.client_topmenu.addRightGameToggleButton('soundButton', tr('Sound Info') .. '', '/images/audio', toggle)
	soundButton:setOn(true)
	
	soundWindow = g_ui.loadUI('rcsound', modules.game_interface.getRightPanel())
	soundWindow:disableResize()
	soundWindow:setup()
	
	if(g_game.isOnline()) then
		onGameStart()
	end
end

function terminate()
	disconnect(g_game, { onGameStart = onGameStart,
                       onGameEnd = onGameEnd })
	onGameEnd()
	soundWindow:destroy()
	soundButton:destroy()
end

function onGameStart()
	stopSound()
	toggleSoundEvent = addEvent(toggleSound, SOUNDS_CONFIG.checkInterval)
end

function onGameEnd()
	stopSound()
	removeEvent(toggleSoundEvent)
end

function isInPos(pos, fromPos, toPos)
	return
		pos.x>=fromPos.x and
		pos.y>=fromPos.y and
		pos.z>=fromPos.z and
		pos.x<=toPos.x and
		pos.y<=toPos.y and
		pos.z<=toPos.z
end

function toggleSound()
	local player = g_game.getLocalPlayer()
	if not player then return end
	
	local pos = player:getPosition()
	local toPlay = nil

	for i = 1, #SOUNDS do
    if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
        if(toPlay) then
            toPlay.priority = toPlay.priority or 0
            if((toPlay.sound~=SOUNDS[i].sound) and (SOUNDS[i].priority>toPlay.priority)) then
                toPlay = SOUNDS[i]
            end
        else
            toPlay = SOUNDS[i]
            if type(toPlay.sound) == "table" then
                toPlay.sound = toPlay.sound[math.random(#toPlay.sound)]
            end
        end
    end
end

	playingSound = playingSound or {sound='', priority=0}
	
	if(toPlay~=nil and playingSound.sound~=toPlay.sound) then
		g_logger.info("RC Sounds: New sound area detected:")
		g_logger.info("  Position: {x=" .. pos.x .. ", y=" .. pos.y .. ", z=" .. pos.z .. "}")
		g_logger.info("  Music: " .. toPlay.sound)
		stopSound()
		playSound(toPlay.sound)
		playingSound = toPlay
	elseif(toPlay==nil) and (playingSound.sound~='') then
		g_logger.info("RC Sounds: New sound area detected:")
		g_logger.info("  Left music area.")
		stopSound()
	end

	toggleSoundEvent = scheduleEvent(toggleSound, SOUNDS_CONFIG.checkInterval)
end

function playSound(sound)
	rcSoundChannel:enqueue(sound, 0)
	setLabel(clearName(sound))
end

function clearName(soundName)
	local explode = string.explode(soundName, "/")
	soundName = explode[#explode]
	explode = string.explode(soundName, ".ogg")
	soundName = ''
	for i = 1, #explode-1 do
		soundName = soundName .. explode[i]
	end
	return soundName
end

function stopSound()
	setLabel(SOUNDS_CONFIG.noSound)
	rcSoundChannel:stop()
	playingSound = nil
end

function setLabel(str)
	soundWindow:recursiveGetChildById('currentSound'):getChildById('value'):setText(str)
end
Link para o comentário
Compartilhar em outros sites

  • 0

Você removeu uma linha importante...

Acima de:

for i = 1, #SOUNDS do
    local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
end
coloque:
function init()
ficando:
function init()
    for i = 1, #SOUNDS do
        local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
        SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
    end
Editado por zipter98
Link para o comentário
Compartilhar em outros sites

  • 0

 

Você removeu uma linha importante...

Acima de:

for i = 1, #SOUNDS do
    local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
    SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
end
coloque:
function init()
ficando:
function init()
    for i = 1, #SOUNDS do
        local newSound = type(SOUNDS[i].sound) == "table" and SOUNDS[i].sound[math.random(#SOUNDS[i].sound)] or SOUNDS[i].sound
        SOUNDS[i].sound = SOUNDS_CONFIG.folder .. newSound
    end

 

ainda continua do mesmo jeito, sem tocar as musicas aleatórias olha o video

 

Link para o comentário
Compartilhar em outros sites

  • 0

Hm, troque:

 

math.random(#SOUNDS[i].sound)
por:
math.random(1, #SOUNDS[i].sound)
e troque:
math.random(#toPlay.sound)
por:
math.random(1, #toPlay.sound)
Link para o comentário
Compartilhar em outros sites

  • 0

 

Hm, troque:

math.random(#SOUNDS[i].sound)
por:
math.random(1, #SOUNDS[i].sound)
e troque:
math.random(#toPlay.sound)
por:
math.random(1, #toPlay.sound)

 

ficou do mesmo jeito rs

mas se eu mudar o numero dessas tags ai que vc mandou, tipo mudar pra 2 ou 3 vai tocar a musica da ordem, tipo na tabela

sound = {"CP.ogg", "CP2.ogg", "Vermilion.ogg", "Mark Shop.ogg"}},

cp.ogg seria 1

cp2.ogg seria 2

vermilion.ogg seria 3

e mark shop.ogg seria 4

ai se eu coloca-se o numero 3 nas tags que vc mandou agr tocaria Vermilion.ogg

e se eu coloca-se o numero 2 nas tags que vc me mandou agr, tocaria Cp2.ogg

 

eu testei só por curiosidade rs, tipo ainda n ta mandando as musicas aleatórias rs

Up

Up

Up, zipter98 ajuda ai rs

 

 

Up, aff tava tão perto de conseguir rs, ajuda ai alguém pfv

Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...