Jump to content

AJUDA PARA VER ESSES ERROS


Recommended Posts

29 minutes ago, DNL291 said:

Quando o evento é chamado pelo server ele é tido como inexistente. Motivo: ou o outro script tem algum erro ou o lado server está chamando ele antes que o script do client é carregado.

Mas os scripts estão funcionando perfeitamente, inclusive as funções que estão apresentando erros, sera que pode deixar assim? ou sera que isso pode ser conflito , pois eu criei um client e um arquivo server para mim colocar os scripts dentro da pasta do gamemode, isso pode causar algum conflito com o gamemode?

Link to comment

Não sei como tá o seu código, mas vou dar um exemplo de como ocorre esse erro:

-- server
triggerClientEvent( root, "onServerSend", root )

--

-- client
addEvent( "onServerSend", true )
addEventHandler( "onServerSend", root,
	function()
		outputChatBox("@onServerSend")
	end
)

Nesse exemplo o lado server tem apenas a função triggerClientEvent fora de qualquer função, e ela vai executar ao mesmo tempo que carregar o script.

Enquanto que o lado client, que sempre é baixado e executado não estará carregado no mesmo momento da chamada do server.

No seu caso, não sei se é isso que ocorre, essa é uma possibilidade, enfim, só vendo o script pra saber o que é exatamente.

  • Like 1
Link to comment
  • Other Languages Moderators

Eu tinha alguns scripts com esse erro.

Eles sempre funcionaram normalmente. Mas sempre que eu dava start neles, ocorriam esses erros. A solução foi colocar dentro de funções ou de timers.

  • Like 1
Link to comment
1 hour ago, Lord Henry said:

Eu tinha alguns scripts com esse erro.

Eles sempre funcionaram normalmente. Mas sempre que eu dava start neles, ocorriam esses erros. A solução foi colocar dentro de funções ou de timers.

Vou deixar com os erros, pois o GM é compilado, não da para resolver, mas estão funcionando perfeitamente!

1 hour ago, DNL291 said:

Não sei como tá o seu código, mas vou dar um exemplo de como ocorre esse erro:


-- server
triggerClientEvent( root, "onServerSend", root )

--


-- client
addEvent( "onServerSend", true )
addEventHandler( "onServerSend", root,
	function()
		outputChatBox("@onServerSend")
	end
)

Nesse exemplo o lado server tem apenas a função triggerClientEvent fora de qualquer função, e ela vai executar ao mesmo tempo que carregar o script.

Enquanto que o lado client, que sempre é baixado e executado não estará carregado no mesmo momento da chamada do server.

No seu caso, não sei se é isso que ocorre, essa é uma possibilidade, enfim, só vendo o script pra saber o que é exatamente.

Obrigado por sanar minhas dúvidas, mas não tem cmo eu resolver os erros, e os scripts estao funcionando perfeitamente, só queria entender os erros!

Link to comment
  • Other Languages Moderators

Sugiro que evite GMs compilados de terceiros. Estude e crie seu próprio sem erros.

Ou se quiser mesmo continuar usando este GM, peça correção ao desenvolvedor.

Edited by Lord Henry
Link to comment
10 hours ago, Lord Henry said:

Sugiro que evite GMs compilados de terceiros. Estude e crie seu próprio sem erros.

Ou se quiser mesmo continuar usando este GM, peça correção ao desenvolvedor.

Tactics é um GM criado em 2012, com proposito de fazer que jogadores treine sua mira , mas não só nos modo, DM,ARENA tem vários outros modos como derby etc !

12 hours ago, DNL291 said:

Não sei como tá o seu código, mas vou dar um exemplo de como ocorre esse erro:


-- server
triggerClientEvent( root, "onServerSend", root )

--


-- client
addEvent( "onServerSend", true )
addEventHandler( "onServerSend", root,
	function()
		outputChatBox("@onServerSend")
	end
)

Nesse exemplo o lado server tem apenas a função triggerClientEvent fora de qualquer função, e ela vai executar ao mesmo tempo que carregar o script.

Enquanto que o lado client, que sempre é baixado e executado não estará carregado no mesmo momento da chamada do server.

No seu caso, não sei se é isso que ocorre, essa é uma possibilidade, enfim, só vendo o script pra saber o que é exatamente.

Oi DNL, aproveitando o mesmo tópico, acho que a função match.round esta com falha , eu adicionei a função que você me mandou aquele dia no tópico, mas ele reduz as casas só de alguns jogadores.

 

TOPO DO SCRIPT: 

function math.round(number, decimals, method)
    decimals = decimals or 0
    local factor = 10 ^ decimals
    if (method == "ceil" or method == "floor") then
		return math[method](number * factor) / factor
    else
		return tonumber(("%."..decimals.."f"):format(number))
	end
end

 

PARTE DA REDUÇÃO QUE DEVERIA REDUZIR DE TODOS:

function recebeKills ()
	local data = getAccounts ()
	local accTable = {}
	local killsTable = {}
	local deathsTable = {}
	local killDeath = {}
	local kill = 0
	local death = 0
	if not data[1] then
		triggerClientEvent (client, "showScores", client)
		return
	end
	for i, acc in ipairs (data) do
		table.insert (accTable, getAccountName (data[i]))
		if not getAccountData (data[i], "kills") then
			table.insert (killsTable, "0")
			kill = 0
		else
			table.insert (killsTable, tostring (getAccountData (data[i], "kills")))
			kill = tonumber (getAccountData (data[i], "kills"))
		end
		if not getAccountData (data[i], "deaths") then
			table.insert (deathsTable, "0")
			death = 0
		else
			table.insert (deathsTable, tostring (getAccountData (data[i], "deaths")))
			death = tonumber (getAccountData (data[i], "deaths"))
		end
		local ratio = kill / death
		if death == 0 and kill == 0 then -- Se ambos os valores forem 0, deixa o ratio em 0 também.
			table.insert (killDeath, 0)
		elseif kill ~= 0 and death == 0 then -- Se death for 0 mas kill não, deixa o ratio como desconhecido, pois não é possível dividir algo por 0.
			table.insert (killDeath, "?")
		else -- Se nenhum valor for 0, faz a divisão normalmente e aplica o REDUTOR DECIMAL.
			table.insert (killDeath, math.round (ratio, 2))
		end
	end
	triggerClientEvent (client, "showRank", client, accTable, killsTable, deathsTable, killDeath)
end
addEvent ("getRank", true)
addEventHandler ("getRank", getRootElement(), recebeKills)

Consegue me auxiliar a corrigir? não sei como ele só diminui as casas de alguns jogadores, poucos mesmo, dependendo de quantas kills x ele tem no rank e deaths volta a bugar novamente com as casas gigantes por exemplo 0.011111111

Edited by OverKILL
Link to comment

@OverKILL Como esse assunto já é outro, você deveria criar outro tópico, mas vou relevar dessa vez.

Então, acho que você deve adicionar a função no lado client e não no server. Esse erro das casas decimais aumentarem vai acontecer quando o valor for passado ao client.

Link to comment
25 minutes ago, DNL291 said:

@OverKILL Como esse assunto já é outro, você deveria criar outro tópico, mas vou relevar dessa vez.

Então, acho que você deve adicionar a função no lado client e não no server. Esse erro das casas decimais aumentarem vai acontecer quando o valor for passado ao client.

Deixar todo o script do lado client? nem 1 server? 

Link to comment
26 minutes ago, DNL291 said:

A função eu digo, a math.round, use ela no lado client.

Deu erro: print do erro: http://prntscr.com/jos6xt

Como ficou o Server size - 

function recebeKills ()
	local data = getAccounts ()
	local accTable = {}
	local killsTable = {}
	local deathsTable = {}
	local killDeath = {}
	local kill = 0
	local death = 0
	if not data[1] then
		triggerClientEvent (client, "showScores", client)
		return
	end
	for i, acc in ipairs (data) do
		table.insert (accTable, getAccountName (data[i]))
		if not getAccountData (data[i], "kills") then
			table.insert (killsTable, "0")
			kill = 0
		else
			table.insert (killsTable, tostring (getAccountData (data[i], "kills")))
			kill = tonumber (getAccountData (data[i], "kills"))
		end
		if not getAccountData (data[i], "deaths") then
			table.insert (deathsTable, "0")
			death = 0
		else
			table.insert (deathsTable, tostring (getAccountData (data[i], "deaths")))
			death = tonumber (getAccountData (data[i], "deaths"))
		end
		local ratio = kill / death
		if death == 0 and kill == 0 then -- Se ambos os valores forem 0, deixa o ratio em 0 também.
			table.insert (killDeath, 0)
		elseif kill ~= 0 and death == 0 then -- Se death for 0 mas kill não, deixa o ratio como desconhecido, pois não é possível dividir algo por 0.
			table.insert (killDeath, "?")
		else -- Se nenhum valor for 0, faz a divisão normalmente e aplica o REDUTOR DECIMAL.
			table.insert (killDeath, math.round (ratio, 2))
		end
	end
	triggerClientEvent (client, "showRank", client, accTable, killsTable, deathsTable, killDeath)
end
addEvent ("getRank", true)
addEventHandler ("getRank", getRootElement(), recebeKills)

Lembrando removi a função math round la do começo do script e coloquei no começo do script do client ficando assim:

Client size

--//-- REDUZIR CASAS DECIMAIS !
function math.round(number, decimals, method)
    decimals = decimals or 0
    local factor = 10 ^ decimals
    if (method == "ceil" or method == "floor") then
		return math[method](number * factor) / factor
    else
		return tonumber(("%."..decimals.."f"):format(number))
	end
end
--/--
scoreWindow = guiCreateWindow (167, 144, 666, 499, "Rank System Legend Mercy Tactics v1.4", false)
scoreGrid = guiCreateGridList (9, 26, 646, 420, false, scoreWindow)
guiWindowSetSizable (scoreWindow, false)
guiGridListAddColumn (scoreGrid, "Account", 0.2)
guiGridListAddColumn (scoreGrid, "Kills", 0.2)
guiGridListAddColumn (scoreGrid, "Deaths", 0.2)
guiGridListAddColumn (scoreGrid, "K/D", 0.2)
closeGrid = guiCreateButton (68, 456, 500, 29, "Fechar Painel", false, scoreWindow)
guiSetVisible (scoreWindow, false)

function scoreInfo (accounts, kills, deaths, ratio)
	guiSetVisible (scoreWindow, true)
	guiSetVisible (closeGrid, true)
	showCursor (true)
	if accounts then
		for i, v in ipairs (accounts) do
			guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], ratio[i])
		end
	end
end
addEvent ("showRank", true)
addEventHandler ("showRank", getRootElement(), scoreInfo)

function clickOptions (button, state, absoluteX, absoluteY)
	if button == "left" then
		if source == closeGrid then
			guiSetVisible (scoreWindow, false)
			showCursor (false)
			guiGridListClear (scoreGrid)
		end
	end
end
addEventHandler ("onClientGUIClick", getRootElement(), clickOptions)

function sendScores ()
	if not guiGetVisible (scoreWindow) then
		triggerServerEvent ("getRank", localPlayer)
	end
end
addCommandHandler ("rank", sendScores)

 

Edited by OverKILL
Link to comment

Esse erro é porque o math.round ainda tá lá no script server, sendo que você tirou a função. Então edite a  linha do insert:

table.insert (killDeath, ratio)

No client, edite a linha:

guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], ratio[i])

E coloque o math.round:

guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], math.round(tonumber(ratio[i]), 2))

 

Edited by DNL291
  • Like 1
Link to comment
1 hour ago, DNL291 said:

Esse erro é porque o math.round ainda tá lá no script server, sendo que você tirou a função. Então edite a  linha do insert:


table.insert (killDeath, ratio)

No client, edite a linha:


guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], ratio[i])

E coloque o math.round:


guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[i], math.round(tonumber(ratio[i]), 2))

 

Obrigado funcionou perfeitamente, tem como eu mudar essa função de mostrar o nick de login e colocar pra mostrar o nick da pessoal atual no servidor sem o uso de #hex ?

Link to comment

Com certeza, mas o problema é que todas as contas do server vão ser mostradas. E obviamente terão contas deslogadas. Então se você realmente quer mostrar o nick, você pode guardar o nick do dono nos dados da conta e usar esse valor pra passar pro client.

Ou se quiser deixar só os jogadores online, use getElementsByType em um loop no lugar do getAccounts.

Edited by DNL291
Link to comment
10 minutes ago, DNL291 said:

Com certeza, mas o problema é que todas as contas do server vão ser mostradas. E obviamente terão contas deslogadas. Então se você realmente quer mostrar o nick, você pode guardar o nick do dono nos dados da conta e usar esse valor pra passar pro client.

Entendi, irei tentar!

Edited by OverKILL
Link to comment
  • Other Languages Moderators
15 hours ago, DNL291 said:

A função eu digo, a math.round, use ela no lado client.

Esse problema ocorre devido a transferência server>client? Ou essa função só funciona direito no lado client mesmo?

Link to comment
On 31/05/2018 at 11:07, Lord Henry said:

Esse problema ocorre devido a transferência server>client? Ou essa função só funciona direito no lado client mesmo?

Desculpa a demora na resposta, tinha esquecido de responder. Pelo que me lembro é um bug com a transferência de números quebrados. Já tive esse tipo de problema há um tempo e não lembro exatamente. Como string deve funcionar normal.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...