Jump to content

zezzok7

Members
  • Posts

    7
  • Joined

  • Last visited

zezzok7's Achievements

Newbie

Newbie (4/54)

0

Reputation

  1. Olá a alguns dias atrás pedi conselhos no forum para desenvolver um sistema de ranking com accountData, bom digamos que consegui, adaptando um codigo que encontrei aqui no forum de sistema K/D/KDR, porém estou lidando com um erro meio chato já tentei resolver de algumas maneiras e a forma na qual ocorre nem passa pela minha cabeça, quando o jogador passa em cima do marcador ele exibe o painel com o ranking tudo beleza mas ele mostra um ranking desatualizado, se o jogador conseguiu ficar em primeiro no ranking ele so vai mostrar na proxima vez q ele hitar o marker e nao quando o jogador pegou o marker, queria que ele exibisse a informação em "tempo real" e não como um sistema de atualização. se puderem me ajudar agradeço. Codigo: Client-side function painel(accounts, kills, deaths, ratio) if accounts then for i, v in ipairs (accounts) do function painel_kdr() kill1 = kills[1] or 0 kill2 = kills[2] or 0 kill3 = kills[3] or 0 kill4 = kills[4] or 0 kill5 = kills[5] or 0 conta1 = accounts[1] or "N/A" conta2 = accounts[2] or "N/A" conta3 = accounts[3] or "N/A" conta4 = accounts[4] or "N/A" conta5 = accounts[5] or "N/A" morte1 = deaths[1] or "N/A" morte2 = deaths[2] or "N/A" morte3 = deaths[3] or "N/A" morte4 = deaths[4] or "N/A" morte5 = deaths[5] or "N/A" dxDrawText("Pressione 'backspace' para fechar", screenW * 0.2281, screenH * 0.7549, screenW * 0.7586, screenH * 0.7949, tocolor(255, 255, 255, 255), 1.50, "default", "center", "center", false, false, false, false, false) dxDrawRoundedRectangle(screenW * 0.2281, screenH * 0.2490, screenW * 0.5312, screenH * 0.5068, tocolor(32, 32, 32, 255), 4) dxDrawText("Liders kills", screenW * 0.2641, screenH * 0.2568, screenW * 0.5258, screenH * 0.3086, tocolor(255, 255, 255, 255), 1.50, "default-bold", "left", "center", false, false, false, false, false) dxDrawRoundedRectangle(screenW * 0.2641, screenH * 0.3330, screenW * 0.4578, screenH * 0.3535, tocolor(38, 38, 38, 255), 9) dxDrawText("Jogador", screenW * 0.2641, screenH * 0.3320, screenW * 0.4602, screenH * 0.3760, tocolor(255, 255, 255, 255), 1.30, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("Kill", screenW * 0.4602, screenH * 0.3330, screenW * 0.5852, screenH * 0.3779, tocolor(255, 255, 255, 255), 1.30, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("Morte", screenW * 0.5852, screenH * 0.3330, screenW * 0.7219, screenH * 0.3779, tocolor(255, 255, 255, 255), 1.30, "default-bold", "center", "center", false, false, false, false, false) dxDrawRectangle(screenW * 0.2633, screenH * 0.3779, screenW * 0.4586, screenH * 0.0508, tocolor(32, 32, 32, 255), false) dxDrawRectangle(screenW * 0.2641, screenH * 0.4795, screenW * 0.4586, screenH * 0.0508, tocolor(32, 32, 32, 255), false) dxDrawRectangle(screenW * 0.2633, screenH * 0.5811, screenW * 0.4586, screenH * 0.0508, tocolor(32, 32, 32, 255), false) dxDrawText("1-", screenW * 0.2641, screenH * 0.3779, screenW * 0.2953, screenH * 0.4287, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("2-", screenW * 0.2641, screenH * 0.4287, screenW * 0.2953, screenH * 0.4785, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("3-", screenW * 0.2641, screenH * 0.4785, screenW * 0.2953, screenH * 0.5283, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("4-", screenW * 0.2641, screenH * 0.5283, screenW * 0.2953, screenH * 0.5811, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("5-", screenW * 0.2641, screenH * 0.5811, screenW * 0.2953, screenH * 0.6309, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..conta1, screenW * 0.2953, screenH * 0.3779, screenW * 0.4602, screenH * 0.4277, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..conta2, screenW * 0.2953, screenH * 0.4287, screenW * 0.4602, screenH * 0.4795, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..conta3, screenW * 0.2953, screenH * 0.4795, screenW * 0.4602, screenH * 0.5303, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..conta4, screenW * 0.2953, screenH * 0.5283, screenW * 0.4602, screenH * 0.5811, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..conta5, screenW * 0.2953, screenH * 0.5811, screenW * 0.4602, screenH * 0.6309, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("Você", screenW * 0.2953, screenH * 0.6357, screenW * 0.4602, screenH * 0.6865, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..kill1, screenW * 0.4602, screenH * 0.3760, screenW * 0.5852, screenH * 0.4277, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..kill2, screenW * 0.4602, screenH * 0.4277, screenW * 0.5852, screenH * 0.4795, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..kill3, screenW * 0.4602, screenH * 0.4795, screenW * 0.5852, screenH * 0.5312, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..kill4, screenW * 0.4602, screenH * 0.5303, screenW * 0.5852, screenH * 0.5820, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..kill5, screenW * 0.4602, screenH * 0.5811, screenW * 0.5852, screenH * 0.6328, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText("N/A", screenW * 0.4602, screenH * 0.6357, screenW * 0.5852, screenH * 0.6875, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..morte1, screenW * 0.5852, screenH * 0.3770, screenW * 0.7219, screenH * 0.4277, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..morte2, screenW * 0.5852, screenH * 0.4287, screenW * 0.7219, screenH * 0.4795, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..morte3, screenW * 0.5852, screenH * 0.4795, screenW * 0.7219, screenH * 0.5303, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..morte4 , screenW * 0.5852, screenH * 0.5303, screenW * 0.7219, screenH * 0.5811, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) dxDrawText(""..morte5, screenW * 0.5852, screenH * 0.5820, screenW * 0.7219, screenH * 0.6328, tocolor(255, 255, 255, 255), 1.20, "default-bold", "center", "center", false, false, false, false, false) end end end end addEvent("showRank", true) addEventHandler("showRank", getRootElement(), painel) ------------------------------ MARKER PARA ABRIR O PAINEL --------------------------------------- local marker = createMarker(1715.93628, -1920.92944, 13.23579, "cylinder", 10.5, 255, 255, 255, 0) function onMarkerHit(hitElement, matchingDimension) local markerPosition = Vector3(1715.93628, -1920.92944, 13.23579) if hitElement and getElementType(hitElement) == "player" and matchingDimension then local playerPosition = Vector3(getElementPosition(hitElement)) triggerServerEvent("getRank", hitElement) setTimer(function() if rankingpanel == false then addEventHandler("onClientRender", root, painel_kdr) rankingpanel = true end end, 500, 1) end end addEventHandler("onClientMarkerHit", marker, onMarkerHit) Server-side local marker = createMarker(1715.93628, -1920.92944, 13.23579, "cylinder", 10.5, 255, 255, 255, 0) function recebeKills() local data = getAccounts() local accTable = {} local killsTable = {} local deathsTable = {} local killDeath = {} if not data[1] then triggerClientEvent(client, "showRank", client) return end -- Preencher as tabelas apenas para jogadores com kills maiores que 1 ou não vazios for i, acc in ipairs(data) do local accName = getAccountName(data[i]) local kills = tonumber(getAccountData(data[i], "kill.s1")) or 0 local deaths = getAccountData(data[i], "morte.s1") or 0 if kills > 1 or (kills > 0 and deaths > 0) then table.insert(accTable, accName) table.insert(killsTable, kills) table.insert(deathsTable, deaths) end end -- Criar uma tabela temporária com índices classificados local indices = {} for i = 1, #accTable do table.insert(indices, i) end -- Classificar os índices com base no número de kills (menor vai primeiro) table.sort(indices, function(a, b) if killsTable[a] == 0 and killsTable[b] == 0 then return a < b -- Mantenha a ordem original para aqueles com 0 kills else return killsTable[a] < killsTable[b] end end) -- Criar tabelas classificadas usando os índices local sortedAccTable = {} local sortedKillsTable = {} local sortedDeathsTable = {} local sortedKillDeath = {} for _, index in ipairs(indices) do table.insert(sortedAccTable, accTable[index]) table.insert(sortedKillsTable, killsTable[index]) table.insert(sortedDeathsTable, deathsTable[index]) table.insert(sortedKillDeath, killDeath[index]) end -- Enviar dados classificados para o cliente triggerClientEvent(client, "showRank", client, sortedAccTable, sortedKillsTable, sortedDeathsTable, sortedKillDeath) end addEvent("getRank", true) addEventHandler("getRank", getRootElement(), recebeKills) sei que o codigo ta bem bagunçado mas pretendo dar uma "limpada" depois de finalizar se alguem conseguir me ajudar agradeço mt
  2. Olá estou desenvolvendo um script no qual defino alguns valores e crio algumas chaves através de account data, gostaria de saber se existe um modo no qual eu possa obter um determinado valor de todas as contas incluindo as offlines, exemplo: utilizei o setAccountData para definir que o valor "numero.caixas" do jogador toda vez que ele entrega uma caixa, +1 é adicionado a esse "numero.caixas" gostaria de saber se é possivel (e como) poderia realizar para obter o numero total de caixas de todos os jogadores, tipo um ranking comparando esses valores por conta e exibilos. desde já agradeço qualquer tentativa de ajuda, tentei navegar por algumas paginas da wiki e procurar até mesmo em outros idiomas mas acabei não encontrando algo semelhante.
  3. to tentando fazer um script de menor tempo que pretendo reutilizar para muitos outros como corridas, trabalhos e etc consegui fazer praticamente tudo mas estou com um pequeno problema na hora de salvar o tempo na conta do usuário que o erro é o seguinte. Optei por usar accountData para salvar o melhor tempo e pensei em uma logica seguinte para salvar o tempo: ao jogador passar pelo ultimo marker o server-side chama a função de comparação de tempo e essa comparação de tempo funcionaria da seguinte maneira, ao passar pelo ultimo marker o tempo atual é salvo por uma elementData e essa elementData é comparada com a accountData e se a elementData for menor ela vira a accountData subistituindo a anterior porém o erro é que quando o jogador finaliza esses markers o tempo dele não é salvo mas o elementData sim exemplo: accountData não é salva mas o elementData é salvo em 3 minutos, ai quando o jogador realiza novamente esse processo seu accountData vira 3 minutos e se o cara fizer 2 minutos nessa tarefa atual ele não vai subistituir. não sei se deu pra entender mas oque eu esperava com isso era ambos salvarem em tempo real e efetuar a comparação, tipo o cara fez a primeira tarefa na conta dele em 2 minutos ambos devem ser setados em 2 minutos o accountData e o elementData e após isso o accountData só deve ser subistituido caso ele consiga um elementData menor. server-side: function compare() dataTime = getElementData(source, "LastTime") or false account = getPlayerAccount(source) accountTime = getAccountData(account, "bestTimeData") or false if accountTime == false then setAccountData(account, "bestTimeData", dataTime) outputChatBox("conta sem registro, melhor tempo setado", source, 255, 255, 0) outputChatBox("tempo agora: "..accountTime, source, 255, 255, 0) else outputChatBox("ja tem", source, 255, 255, 255) if dataTime < accountTime then setAccountData(account, "bestTimeData", dataTime) outputChatBox("novo tempo registrado!", source, 0, 255, 0) else outputChatBox("seu tempo não foi melhor!", source, 255, 0, 0) end end end compare() é a função que eu chamo no ultimo marker para realizar a comparação do tempo. client-side: function startTimer() local screenX, screenY = guiGetScreenSize() local currentCount = 0 local startTime = 0 local timerVisible = true function onClientRenderClock() local playerTick = getElementData(localPlayer, "startTick") or 0 currentCount = getTickCount() elapsedTime = currentCount - startTime dxDrawText(formatTime(elapsedTime), screenW * 0.8099, screenH * 0.0868, screenW * 0.9826, screenH * 0.1400, tocolor(0, 0, 0, 124), 3.50, "default-bold", "left", "top", false, false, false, false, false) end addEventHandler("onClientRender", root, onClientRenderClock) function formatTime(milliseconds) local totalSeconds = math.floor(milliseconds / 1000) local minutes = math.floor(totalSeconds / 60) local seconds = totalSeconds % 60 local remainingMilliseconds = milliseconds % 1000 return string.format("%02d:%02d.%03d", minutes, seconds, remainingMilliseconds) end startTime = getTickCount() elapsedTime = 0 -- Zera o tempo decorrido function markersave() setElementData(source, "LastTime", elapsedTime) outputChatBox("tempo formatado agora: "..formatTime(elapsedTime), 255, 255, 255) end addEvent("saveTiming1", true) addEventHandler("saveTiming1", root, markersave) function stopTimerF() if currentCount > 0 then currentCount = 0 else outputChatBox("erro.") end if timerVisible == true then timerVisible = false removeEventHandler("onClientRender", getRootElement(), onClientRenderClock) end end addEvent("stopTimer", true) addEventHandler("stopTimer", localPlayer, stopTimerF) se alguem puder me ajudar ficarei grato.
  4. bom então fiz algo um pouco diferente precisava que o tempo ficasse na tela e obtive um erro que não consegui identificar quando ocorre, se puder me ajudar ficarei grato, o erro é o seguinte: o jogador libera o getTickCount quando inicia a rota e finaliza quando passa pelo ultimo marker, nisso a logica que eu tentei usar seria de salvar o tempo mais recente com setElementData e compara-lo com o tempo registrado na conta com getAccountData e se o setElementData for menor subistituir o tempo salvo na conta, porém ao executar isso ele não salva o primeiro tempo e só começa a salvar a partir do segundo oque resulta em um erro que se o jogador concluiu o percurso em 3 minutos na primeira vez que fez esse tempo é salvo na data mas nao é salvo na conta e a segunda vez q ele realizar a tarefa ele terminar em 5 minutos o tempo de 3 minutos vai ser salvo na conta e o 5 minutos vai ficar salvo na elementData, tenho uma noção do que pode ser mas não estou conseguindo resolver. Codigo. server: function compare() dataTime = getElementData(source, "LastTime") or false account = getPlayerAccount(source) accountTime = getAccountData(account, "bestTimeData") or false if accountTime == false then setAccountData(account, "bestTimeData", dataTime) outputChatBox("conta sem registro, melhor tempo setado", source, 255, 255, 0) outputChatBox("tempo agora: "..accountTime, source, 255, 255, 0) else outputChatBox("ja tem", source, 255, 255, 255) if dataTime < accountTime then setAccountData(account, "bestTimeData", dataTime) outputChatBox("novo tempo registrado!", source, 0, 255, 0) else outputChatBox("seu tempo não foi melhor!", source, 255, 0, 0) end end end client: function startTimer() local screenX, screenY = guiGetScreenSize() local currentCount = 0 local startTime = 0 local timerVisible = true function onClientRenderClock() local playerTick = getElementData(localPlayer, "startTick") or 0 currentCount = getTickCount() elapsedTime = currentCount - startTime dxDrawText(formatTime(elapsedTime), screenW * 0.8099, screenH * 0.0868, screenW * 0.9826, screenH * 0.1400, tocolor(0, 0, 0, 124), 3.50, "default-bold", "left", "top", false, false, false, false, false) end addEventHandler("onClientRender", root, onClientRenderClock) function formatTime(milliseconds) local totalSeconds = math.floor(milliseconds / 1000) local minutes = math.floor(totalSeconds / 60) local seconds = totalSeconds % 60 local remainingMilliseconds = milliseconds % 1000 return string.format("%02d:%02d.%03d", minutes, seconds, remainingMilliseconds) end startTime = getTickCount() elapsedTime = 0 -- Zera o tempo decorrido function markersave() setElementData(source, "LastTime", elapsedTime) outputChatBox("tempo formatado agora: "..formatTime(elapsedTime), 255, 255, 255) end addEvent("saveTiming1", true) addEventHandler("saveTiming1", root, markersave) function stopTimerF() if currentCount > 0 then currentCount = 0 else outputChatBox("erro.") end if timerVisible == true then timerVisible = false removeEventHandler("onClientRender", getRootElement(), onClientRenderClock) end end addEvent("stopTimer", true) addEventHandler("stopTimer", localPlayer, stopTimerF)
  5. criei um script simples na qual o jogador ao iniciar uma tarefa dispara um cronometro criado com getTickCount no lado client porém preciso agora armazenar esse tempo em um rank de quem levou mais tempo para fazer uma coisa tipo. exemplo: 1- Player 1, 5 Minutos para entregar. e assim vai, é melhor eu realizar isso com o setAccountData ou criar um script separado com os comandos em sqlite para armazenar no propio script? e em ambos vai funcionar essa ideia? Função que esta salvando por enquanto:
  6. consegui funcionou perfeitamente, tenho outra duvida como eu posso deixar uma imagem determinados segundos na tela? por exemplo quero que apareça a imagem de uma caixa por 5 segundos na tela e após isso ela suma porem não consegui achar um jeito de fazer isso.
  7. Olá estou tentando fazer um trabalho de entregas, consegui faze-lo funcionar porem percebi que quando fui testar com um amigo a minha rota ele consegue ver e também interagir com ela pegando os meus checkpoints como posso resolver isso? function onStartBind(thePlayer) if getElementData(thePlayer, "entregadorP") == false then setElementData (thePlayer, "entregadorP", true) outputChatBox("rota iniciada.", thePlayer, 122, 255, 122) marker1 = createMarker(2133.99487, -1213.40466, 23.9657, "checkpoint", 5.5, 33, 255, 255, 170) btrabalho = createBlipAttachedTo(marker1, 12, 2) function markerHitTb(hitElement, matchingDimension) if source == marker1 and getElementType(hitElement) == "player" then destroyElement(marker1) destroyElement(btrabalho) marker2 = createMarker(1984.42798, -1233.10547, 20.0678, "checkpoint", 5.5, 33, 255, 255, 170) btrabalho = createBlipAttachedTo(marker2, 12, 2) end end addEventHandler("onMarkerHit", root, markerHitTb) function markerHitTb2(hitElement, matchingDimension) if source == marker2 and getElementType(hitElement) == "player" then destroyElement(marker2) destroyElement(btrabalho) marker3 = createMarker(1833.17200, -1318.03601, 13.5799, "checkpoint", 5.5, 33, 255, 255, 170) btrabalho = createBlipAttachedTo(marker3, 12, 2) end end addEventHandler("onMarkerHit", root, markerHitTb2) function markerHitTb3(hitElement, matchingDimension) if source == marker3 and getElementType(hitElement) == "player" then destroyElement(marker3) destroyElement(btrabalho) marker4 = createMarker(1714.52161, -1253.03369, 13.3915, "checkpoint", 5.5, 33, 255, 255, 170) btrabalho = createBlipAttachedTo(marker4, 12, 2) end end addEventHandler("onMarkerHit", root, markerHitTb3)
×
×
  • Create New...