Jump to content

DNL291

Retired Staff
  • Posts

    3,875
  • Joined

  • Days Won

    67

Everything posted by DNL291

  1. Que eu saiba essas funções funcionam só no servidor que o script tá ativo, Lua não vai aplicar no seu GTA pra deixar em todos servidores , pode ser que você tenha colocado o mod no seu GTA e não está lembrando.
  2. Tente fazendo uma verificação if thePlayer == localPlayer then. Edit: Pode ser também o evento sendo chamado pra todos
  3. 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
  4. Verifique se existe o atacker: if attacker and getElementType ( attacker ) == "ped" then
  5. Exatamente. Tinha esquecido de colocar no código.
  6. Em qual lugar você baixou esse script? Pelo que vejo no código, os valores "ocupado" e "vazio" não estão definidos.
  7. @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.
  8. 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
  9. function destrui () if veh[source] and isElement(veh[source]) then -- verifica se o elemento existe na tabela destroyElement ( veh[source] ) end end
  10. 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)
  11. Pode ser que a função hideLoginWindow tenha sido chamada sem a janela existir, ou seja, no auto-login.
  12. 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.
  13. Já tentou usando um GTA:SA de outra fonte? Escaneou com o antivírus o diretório do seu GTA?
  14. 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.
  15. 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.
  16. 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
  17. Seu PC ou GTA:SA pode estar com vírus, faça um escaneamento completo no PC.
  18. 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 )
  19. 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.
  20. 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 )
  21. What do you mean by 'slow idle'? If you want this to work when the vehicle is braking or stopped, you'll need to find a way to detect these states, then use playSound.
  22. Procure em: https://community.multitheftauto.com/ Você pode fazer essa modificação em um script de taxista existente.
  23. DNL291

    checkpoint

    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.
  24. DNL291

    checkpoint

    I've tested this code and it worked for me.
  25. DNL291

    checkpoint

    Show here the code you're using. Post it using the formatting for Lua: Also, type /debugscript 3 when testing your script.
×
×
  • Create New...