-
Posts
3,875 -
Joined
-
Days Won
67
Everything posted by DNL291
-
Tente fazendo uma verificação if thePlayer == localPlayer then. Edit: Pode ser também o evento sendo chamado pra todos
-
guigridlistsetitemtext Sorting da Gridlist não funciona corretamente
DNL291 replied to Lord Henry's topic in Programação em Lua
Bom, fiz um código aqui pra resolver isso, foi algo meio radical mas consegui resolver. Na verdade eu fiz um sistema de ordenação personalizado, que usa as propriedades "SortDirection" e "SortColumnID" para fazer tudo separadamente da coluna ratio. Quanto à coluna ratio, eu usei o table.sort que já foi mostrado aqui no tópico. Fiz tudo com detecção de clique nas áreas de cada coluna, sendo que a ordenação é feita pelo próprio script como já disse. Deixei o código comentado, testei ele e funcionou muito bem. Aqui está: local sortTable = { -- nick, kills, deaths, ratio { "Nome5", 10, 8, 8 }, { "Nome3", 2, 5, 4.1 }, { "Nome7", 3, 8, 4.2 }, { "Nome9", 4, 10, 4.01 }, { "Nome1", 5, 14, 4.11 }, { "Nome2", 12, 3, 10 }, { "Nome4", 2, 7, 5 }, { "Nome8", 20, 1, 2 }, { "Nome10", 5, 0, 1 }, { "Nome6", 7, 22, 4.001 } } local ratio_column = 4 --[[------------------------------------------------------------- - Você deve estruturar uma tabela para a lista - como acima. - - A coluna do ratio pode ser definida na variável 'ratio_column' ------------------------------------------------------------------]] local columns = {} local lastClickedColumn local selectedRowText addEventHandler( "onClientResourceStart", resourceRoot, function() createGridListInterface() showCursor (true) scoreInfo() -- mapeando as dimensões das colunas local gridX, gridY = guiGetPosition( scoreGrid, false ) local columnStartX = gridX + 8 local columnTop = gridY + 1 local columnBottom = columnTop + 22 columns[1] = { columnStartX, columnTop, columnStartX + guiGridListGetColumnWidth( scoreGrid, 1, false ), columnBottom } -- adicionando as posições das colunas na tabela for i=2, guiGridListGetColumnCount( scoreGrid ) do local left = columns[i-1][3] local columnW = guiGridListGetColumnWidth( scoreGrid, i, false ) columns[i] = { left, columnTop, (left + columnW), columnBottom } end -- teste -- Descomente esta linha se quiser testar as áreas do clique das colunas --addEventHandler("onClientRender", root, drawLines) end ) function createGridListInterface() scoreGrid = guiCreateGridList (10, 20, 580, 330, false) guiGridListSetSortingEnabled( scoreGrid, false ) nameColumn = guiGridListAddColumn (scoreGrid, "Player", 0.33) kills = guiGridListAddColumn (scoreGrid, "kills", 0.2) deaths = guiGridListAddColumn (scoreGrid, "daths", 0.2) numberColumn = guiGridListAddColumn (scoreGrid, "ratio", 0.1) -- criando uma label por cima das colunas para evitar o redimensionamento manual local gridX, gridY = guiGetPosition( scoreGrid, false ) guiSetProperty(guiCreateLabel(gridX, gridY, 580, 22, "", false), "AlwaysOnTop", "True") end function scoreInfo( direction ) if direction then --[[------------------------------------------------------------- - workaround para fazer a ordenação manual. - por algum motivo que eu não consegui descobrir, - as rows simplesmente não são atualizadas quando - clica na coluna do ratio (talvez pelo uso do guiSetProperty). - Nem mesmo removendo as colunas e recriando-as - eu pude resolver, pois me surgiu outro bug com - a posição das colunas -----------------------------------------------------------------]] destroyElement(scoreGrid) createGridListInterface() table.sort( sortTable, function(a, b) if direction == "Ascending" then return a[ratio_column] > b[ratio_column] else return a[ratio_column] < b[ratio_column] end end ) end for i,v in ipairs(sortTable) do local row = guiGridListAddRow (scoreGrid) guiGridListSetItemText ( scoreGrid, row, nameColumn, v[1], false, false ) guiGridListSetItemText ( scoreGrid, row, kills, v[2], false, true ) guiGridListSetItemText ( scoreGrid, row, deaths, v[3], false, true ) guiGridListSetItemText ( scoreGrid, row, numberColumn, v[ratio_column], false, true ) local itemText = guiGridListGetItemText( scoreGrid, row, 1 ) if selectedRowText and (itemText == selectedRowText) then guiGridListSetSelectedItem( scoreGrid, row, 1 ) end end end -- (teste) destacando as áreas de cada coluna function drawLines() if not scoreGrid then return end for i=1, guiGridListGetColumnCount( scoreGrid ) do local left = columns[i][1] local top = columns[i][2] local right = columns[i][3] local bottom = columns[i][4] dxDrawLine ( left, top, right, top, tocolor(255, 20, 20), 1, true ) -- Top dxDrawLine ( left, top, left, bottom, tocolor(255, 20, 20), 1, true ) -- Left dxDrawLine ( left, bottom, right, bottom, tocolor(255, 20, 20), 1, true ) -- Bottom dxDrawLine ( right, top, right, bottom, tocolor(255, 20, 20), 1, true ) -- Right end end addEventHandler ( "onClientGUIClick", guiRoot, function() if source == scoreGrid then selectedRowText = guiGridListGetSelectedText(scoreGrid) end end ) -- detecção do clique nas colunas addEventHandler( "onClientClick", root, function ( button, state ) if button == "left" and state == "up" and not (isMainMenuActive()) and scoreGrid then for i=1, guiGridListGetColumnCount( scoreGrid ) do local left = columns[i][1] local top = columns[i][2] local right = columns[i][3] local bottom = columns[i][4] if isMouseInPosition( left, top, right-left, bottom-top ) then onColumnClick( i ) break end end end end ) -- essa função é chamada quando uma coluna for clicada, -- o parâmetro 'id' é o índice da tabela correspondente à coluna local d = { "Ascending", "Descending" } function onColumnClick( id ) outputChatBox( "@onColumnClick: #" .. tostring(id) ) lastClickedColumn = id if lastClickedColumn ~= id then columns[lastClickedColumn].dir = nil columns[id].dir = d[1] guiSetProperty( scoreGrid, "SortDirection", d[1] ) else local direction = (columns[id].dir == d[1]) and d[2] or d[1] guiSetProperty( scoreGrid, "SortDirection", direction ) columns[id].dir = direction end if id == ratio_column then -- coluna ratio scoreInfo( columns[id].dir ) else guiSetProperty(scoreGrid, "SortColumnID", id ) end end -- funções úteis function isMouseInPosition ( x, y, width, height ) if ( not isCursorShowing( ) ) then return false end local sx, sy = guiGetScreenSize ( ) local cx, cy = getCursorPosition ( ) local cx, cy = ( cx * sx ), ( cy * sy ) if ( cx >= x and cx <= x + width ) and ( cy >= y and cy <= y + height ) then return true else return false end end function guiGridListGetSelectedText(gridList) local selectedItem = guiGridListGetSelectedItem(gridList) if (selectedItem) then local text = guiGridListGetItemText(gridList, selectedItem, 1) if (text) and not (text == "") then return text end end return false end- 16 replies
-
- guicreategridlist
- gridlist sorting
-
(and 3 more)
Tagged with:
-
Exatamente. Tinha esquecido de colocar no código.
-
Em qual lugar você baixou esse script? Pelo que vejo no código, os valores "ocupado" e "vazio" não estão definidos.
-
@KingBC Já existem 2 tópicos iguais, não é floodando o fórum que você vai conseguir ajuda. https://forum.multitheftauto.com/topic/105432-trabalho-de-ubertaxi-ajuda/ https://forum.multitheftauto.com/topic/105464-ajuda-com-script-trabalho-de-ubertaxi/ Você também já deveria saber que o local correto é em Programação em Lua Tópico movido e trancado, você pode postar em um desses tópicos acima em relação a esse problema.
-
Talvez isso corrija a mensagem no debug: function math.round(number, decimals, method) if number and type(number) == "number" then 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 return 0 end
-
function destrui () if veh[source] and isElement(veh[source]) then -- verifica se o elemento existe na tabela destroyElement ( veh[source] ) end end
-
Com certeza tem. Só foi uma suposição minha, até porque eu não vejo a função hideLoginWindow de fato sendo chamada. Uma solução simples seria uma checagem nas variáveis: function hideLoginWindow() guiSetInputEnabled(false) if mainWindow then guiSetVisible(mainWindow, false) end if registerWindow then guiSetVisible(registerWindow, false) end showCursor(false) stopSound(sound) -- Parar a música if blackLoginScreen == true then fadeCamera(true,removeBlackScreenTime) end end addEvent("hideLoginWindow", true) addEventHandler("hideLoginWindow", getRootElement(), hideLoginWindow)
-
Pode ser que a função hideLoginWindow tenha sido chamada sem a janela existir, ou seja, no auto-login.
-
Faça o seguinte: Crie uma pasta de backup no próprio diretório do seu GTA, deixe os arquivos gta_sa_dll.exe e gta_sa_dll.dll dentro dela. E execute normalmente o seu MTA. Se não funcionar, faça o mesmo com os arquivos d3d9.dll, d3dx9_25.dll e d3dx9_26.dll. Caso não funcione também, mova os arquivos proxy_sa.exe e SpedSets.exe pra pasta de backup.
-
PROBLEMA NO MTA?
DNL291 replied to C4mpN~'s topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Já tentou usando um GTA:SA de outra fonte? Escaneou com o antivírus o diretório do seu GTA? -
addEventHandler("cmdHandler",getRootElement(), function(thePlayer, command) if(command == "/dveh") then local vehs = vehicles[thePlayer] if vehs and type(vehs) == "table" and #vehs > 0 then destroyElement( vehicles[thePlayer][#vehs] ) vehicles[thePlayer][#vehs] = nil end end end ) Try it.
-
PROBLEMA NO MTA?
DNL291 replied to C4mpN~'s topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Pode ser que ele tenha rodado o jogo por ter acabado de instalar, mas acontece que essa mensagem é gerada por suspeita de vírus no GTA. https://wiki.multitheftauto.com/wiki/Error_Codes CL30: Data files modified. Possible virus activity.\n\nSee online help if MTA does not work correctly. maybe-virus2 Seu PC pode até estar recém-formatado, mas a sua versão do GTA:SA está tendo problemas. -
Bad argument @ 'stopSound' e Bad argument @ 'killTimer'
DNL291 replied to DouglaS666's topic in Programação em Lua
O argumento não está recebendo um valor válido. Uma simples verificação vai evitar essas menssagens: if radioSound[veh].soundElement then stopSound(radioSound[veh].soundElement) end if isTimer(g_VehicleList[source].idleTimer) then killTimer(g_VehicleList[source].idleTimer) end- 1 reply
-
- 2
-
PROBLEMA NO MTA?
DNL291 replied to C4mpN~'s topic in Ajudas relacionadas ao MTA:SA (Cliente/Servidor)
Seu PC ou GTA:SA pode estar com vírus, faça um escaneamento completo no PC. -
Well, I have no idea what's going on with your chat. Try replacing destroyElement( vehs[#vehs] ) with: destroyElement( vehicles[thePlayer][#vehs] ) On the command /dveh. I had put 'vehicles[source] = nil' inside the loop, so use this: addEventHandler( "onPlayerQuit", root, function() if vehicles[source] then for i, veh in ipairs( vehicles[source] ) do destroyElement( veh ) end vehicles[source] = nil end end )
-
addEventHandler ("destruir", getRootElement(), destruirCarro) O nome do evento que está em addEvent é diferente desse. Edit: Além disso, faça uma checagem antes de tirar o elemento: if veh[source] then destroyElement(veh[source]) end Dá próxima vez crie o post em Programação em Lua que é a seção correta.
-
local vehicles = {} addEventHandler("cmdHandler",getRootElement(), function(thePlayer, command, model) local serverTime = getRealTime() local time = string.format("[%02d:%02d:%02d]", serverTime.hour, serverTime.minute, serverTime.second) if(command == "/cveh") and tonumber(model) then if not vehicles[thePlayer] then vehicles[thePlayer] = {} end local x, y, z = getElementPosition (thePlayer) local veh = createVehicle (tonumber(model), x, y, z, 0, 0, 0, "ADMIN") table.insert (vehicles[thePlayer], veh) setElementPosition (thePlayer, x, y, z +2) return else sendMessageToPlayer ("#ce3737"..time.." Формат команды: '/cveh [model]'", thePlayer) return end end ) addEventHandler("cmdHandler",getRootElement(), function(thePlayer, command) if(command == "/dveh") then local vehs = vehicles[thePlayer] if vehs and type(vehs) == "table" and #vehs > 0 then destroyElement( vehs[#vehs] ) end end end ) Removing all vehicles: addEventHandler( "onPlayerQuit", root, function() if vehicles[source] then for i, veh in ipairs( vehicles[source] ) do destroyElement( veh ) vehicles[source] = nil end end end )
-
Procure em: https://community.multitheftauto.com/ Você pode fazer essa modificação em um script de taxista existente.
-
If nothing happens when you hit the marker, something is wrong, so learn how to debug: Also, make sure the marker really belongs to the script and your player dimension is the same as the marker.
-
I've tested this code and it worked for me.
-
Show here the code you're using. Post it using the formatting for Lua: Also, type /debugscript 3 when testing your script.