Ir para conteúdo
  • 0

Percorrer um array dentro de um array. Systema de som.


Pergunta

olá gente, boa noite, queria a ajuda de algum Scripter pra me dá uma ajudinha ligeira. n sou muito conceituado com lua, e sim com java e c++. mas vamos lá.

estou com um sistema de som que reproduz som em uma posição especifica do mapa, porem ele funciona com apenas 1 posição. só que quando ponho uma nova posição ou seja um array novo de posições diferentes dentro do array de "Sons" ele repete somente 1 segundo do arquivo mp3. creio eu que seja algum bug em algum if de comparação dentro do for que percorre o array. se alguém me ajudar fico agradecido.

 

Array sounds, e dentro do array, um array de posições e a string da música.

SOUNDS = {--area sounds
	{fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
}

quando eu ponho somente um array de posições ele funciona. agr se eu fizer assim

SOUNDS = {--area sounds
	{fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	{fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}

ele faz o bug que eu falei a cima.

 

vou deixar a parte do código

 

require('irrklua')
require('ex')

SOUNDS_CONFIG = {
	folder = 'mods/Advanced Sound/Sounds/',
	loop=false,
	start_paused=false,
	checkInterval = 500,
}



local UPDATESOUND_OPCODE = 85
local PAUSESOUND_OPCODE = 81

SOUNDS = {--area sounds
	{fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	{fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}
local toggleSoundEvent
local e
local audio = nil
local window = nil
local volume = 100
local str
function init()
	connect(g_game, { onGameEnd = terminate })
	window = modules.client_options.audioPanel
	str = string.explode(window:getChildById('musicSoundVolumeLabel'):getText(), ":")
	volume = tonumber(str[2])
	ProtocolGame.registerExtendedOpcode(UPDATESOUND_OPCODE, getSound)
	ProtocolGame.registerExtendedOpcode(PAUSESOUND_OPCODE, pauseSound)
	e = cycleEvent(iniciar, SOUNDS_CONFIG.checkInterval)
end
function iniciar()
	if (g_game.isOnline()) then
		removeEvent(e)
		toggleSoundEvent = addEvent(startAsound, SOUNDS_CONFIG.checkInterval)
	end
end

local m 
function startAsound()
	local player = g_game.getLocalPlayer()
	if not player then return end
	
	local pos = player:getPosition()
	for i = 1, #SOUNDS do
		if(isInPos(pos, SOUNDS[i].fromPos, SOUNDS[i].toPos)) then
			if audio == nil then
				m = irrklua.playMusic(SOUNDS_CONFIG.folder..SOUNDS[i].sound, true, SOUNDS_CONFIG.start_paused)
				str = string.explode(window:getChildById('musicSoundVolumeLabel'):getText(), ":")
				volume = tonumber(str[2])
				irrklua.setVolume(m, volume/100)
				audio = true
			end
		else
			audio = nil
			irrklua.setPaused(m, true)
			removeEvent(toggleSoundEvent)
		end
	end
	toggleSoundEvent = scheduleEvent(startAsound, SOUNDS_CONFIG.checkInterval)
end

function pauseSound(protocol, opcode, buffer)
	if opcode == 81 then
		irrklua.pauseAll()
	end
end

function terminate()
	disconnect(g_game, { onGameEnd = terminate })
	e = cycleEvent(iniciar, SOUNDS_CONFIG.checkInterval)
	audio = nil
	irrklua.pauseAll()
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

 

Link para o comentário
https://xtibia.com/forum/topic/250351-percorrer-um-array-dentro-de-um-array-systema-de-som/
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Posso estar enganado mas não esta faltando o índice ai não? Tipo:

SOUNDS = {--area sounds
	[1] = {fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	[2] = {fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}

Testa e me fala xD

  • 0
  Em 11/10/2019 em 16:16, SirDubstep disse:

Posso estar enganado mas não esta faltando o índice ai não? Tipo:

SOUNDS = {--area sounds
	[1] = {fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	[2] = {fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}

Testa e me fala xD

Expand  

fiz com os índices [1] e [2] como vc falou e continuei com o mesmo problema, porem eu modifiquei para [0] e [1] pq 0 é onde inicia o tamanho do array, e funcionou, mas agr ele só está executando o índice [1] e ignorando o indice [0]

 

SOUNDS = {--area sounds
	[0] = {fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	[1] = {fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}
está execultando o vetor [1], porem não execulta o vetor [0]

 

  • 0
  Em 11/10/2019 em 16:39, Developer Berg disse:

fiz com os índices [1] e [2] como vc falou e continuei com o mesmo problema, porem eu modifiquei para [0] e [1] pq 0 é onde inicia o tamanho do array, e funcionou, mas agr ele só está executando o índice [1] e ignorando o indice [0]

 

SOUNDS = {--area sounds
	[0] = {fromPos = {x = 989, y = 884, z = 7}, toPos = {x = 1072, y = 946, z = 7}, sound = "Musica1.mp3"},
	[1] = {fromPos = {x = 940, y = 919, z = 7}, toPos = {x = 968, y = 949, z = 7}, sound = "Musica2.mp3"},
}
está execultando o vetor [1], porem não execulta o vetor [0]

 

Expand  

Perdão pelo erro hahaha

Troca essa linha:

for i = 1, #SOUNDS do

Por:

for i = 0, #SOUNDS do

Assim ele vai começar do índice 0 ao invés do 1 =D

  • 0
  Em 11/10/2019 em 16:40, SirDubstep disse:

Perdão pelo erro hahaha

Troca essa linha:

for i = 1, #SOUNDS do

Por:

for i = 0, #SOUNDS do

Assim ele vai começar do índice 0 ao invés do 1 =D

Expand  

kk, modifiquei mas agr ficou do jeito que tava, continua executando somente somente 1 segundo do arquivo mp3. no caso os 2 arrays dentro do array funcionou, mas é como se o som ficasse parando e repetindo

  • 0
  Em 11/10/2019 em 16:49, Developer Berg disse:

kk, modifiquei mas agr ficou do jeito que tava, continua executando somente somente 1 segundo do arquivo mp3. no caso os 2 arrays dentro do array funcionou, mas é como se o som ficasse parando e repetindo

Expand  

Que estranho hahaha

Bem, tenho um client perdido aqui no PC com sistema de som com um código bem parecido, tenta dar uma comparada ou adaptar (nesse código não tive esse problema de tocar 1 segundo e parar)

  Mostrar conteúdo oculto

 

Editado por SirDubstep
  • 0
  Em 11/10/2019 em 16:56, SirDubstep disse:

Que estranho hahaha

Bem, tenho um client perdido aqui no PC com sistema de som com um código bem parecido, tentar dar uma comparada ou adaptar (nesse código não tive esse problema de tocar 1 segundo e parar)

  Mostrar conteúdo oculto

 

Expand  

blz, vou dá uma olhada aqui. vlw man :) acho que é algo dentro do laço for, alguma condição dentro do laço impedindo a execução.

  • 0
  Em 11/10/2019 em 17:00, Developer Berg disse:

blz, vou dá uma olhada aqui. vlw man :) acho que é algo dentro do laço for, alguma condição dentro do laço impedindo a execução.

Expand  

Sim é o que parece, nesse que mandei o for apenas define qual música tocar, mas a execução ocorre fora do for, então deve ser isso hahaha

  • 0

Deu certo?

 

TwyIHBJ.png


Complemento:

  Mostrar conteúdo oculto

 

  • 0
  Em 11/10/2019 em 19:22, BlazerX disse:

Deu certo?

 

TwyIHBJ.png


Complemento:

  Mostrar conteúdo oculto

 

Expand  

não, estou analisando a script que o  SirDubstep. mas se tiver alguma ideia ou quiser tentar ajudar, agradeço muito.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...