Jump to content

Lord Henry

Other Languages Moderators
  • Posts

    3,980
  • Joined

  • Last visited

  • Days Won

    181

Everything posted by Lord Henry

  1. Vai sempre bugar pois ela usa dados que meu sistema não tem. Por exemplo EXP.
  2. Pronto, adicionado o Ratio (Kills dividido pelas Deaths) e corrigido bug de duplicar os dados ao usar o comando várias vezes. server.lua 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 if death == 0 and kill == 0 then table.insert (killDeath, 0) else table.insert (killDeath, kill / death) end end triggerClientEvent (client, "showRank", client, accTable, killsTable, deathsTable, killDeath) end addEvent ("getRank", true) addEventHandler ("getRank", getRootElement(), recebeKills) function salvaKills (ammo, killer, weapon, bodypart, stealth) if not isGuestAccount (getPlayerAccount(source)) then local deaths = getAccountData (getPlayerAccount(source), "deaths") if deaths then setAccountData (getPlayerAccount(source), "deaths", deaths + 1) else setAccountData (getPlayerAccount(source), "deaths", 1) end end if killer and killer ~= source then if getElementType (killer) == "player" then if not isGuestAccount (getPlayerAccount(killer)) then local kills = getAccountData (getPlayerAccount(killer), "kills") if kills then setAccountData (getPlayerAccount(killer), "kills", kills + 1) else setAccountData (getPlayerAccount(killer), "kills", 1) end end elseif getElementType (killer) == "vehicle" then killer = getVehicleController (killer) if killer then if not isGuestAccount (getPlayerAccount(killer)) then local kills = getAccountData (getPlayerAccount(killer), "kills") if kills then setAccountData (getPlayerAccount(killer), "kills", kills + 1) else setAccountData (getPlayerAccount(killer), "kills", 1) end end end end end end addEventHandler ("onPlayerWasted", getRootElement(), salvaKills) client.lua scoreGrid = guiCreateGridList (0.4, 0.3, 0.2, 0.4, true) guiGridListAddColumn (scoreGrid, "Account", 0.4) guiGridListAddColumn (scoreGrid, "Kills", 0.15) guiGridListAddColumn (scoreGrid, "Deaths", 0.15) guiGridListAddColumn (scoreGrid, "Ratio", 0.15) guiSetAlpha (scoreGrid, 0.8) guiSetVisible (scoreGrid, false) closeGrid = guiCreateButton (0.6, 0.3, 0.018, 0.03, "X", true) guiSetAlpha (closeGrid, 0.8) guiSetVisible (closeGrid, false) function scoreInfo (accounts, kills, deaths, ratio) guiSetVisible (scoreGrid, 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 (scoreGrid, false) guiSetVisible (closeGrid, false) showCursor (false) guiGridListClear (scoreGrid) end end end addEventHandler ("onClientGUIClick", getRootElement(), clickOptions) function sendScores () if not guiGetVisible (scoreGrid) then triggerServerEvent ("getRank", localPlayer) end end addCommandHandler ("rank", sendScores) Agora ficou 100%.
  3. Se refere a usar o comando /rank duas vezes seguidas?
  4. Se tu resetar a internal, todo mundo perde sua conta e seus dados! '-' Mas sim, o script já está funcionando tranquilamente. E se quiser, ta ae o meta.xml dele: <meta> <info author="LordHenry" version="1.0.1" name="Ranking Kills/Death" type="script" description="When you use /rank command, you can see everyone's kill/death." /> <script src="server.lua" type="server" /> <script src="client.lua" type="client" /> </meta>
  5. A propósito, fiz um script para mostrar pra você como fazer o rank de jogadores por Kill/Death. Você usa /rank para mostrar a lista com todas as contas dos jogadores e seus respectivos Kills e Deaths. No server.lua, já criei uma função que salva esses dados quando alguém mata/morre. server.lua function recebeKills () local data = getAccounts () local accTable = {} local killsTable = {} local deathsTable = {} local kill = 0 local death = 0 if not data[1] then triggerClientEvent (client, "showRank", 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") else table.insert (killsTable, tostring (getAccountData (data[i], "kills"))) end if not getAccountData (data[i], "deaths") then table.insert (deathsTable, "0") else table.insert (deathsTable, tostring (getAccountData (data[i], "deaths"))) end end triggerClientEvent (client, "showRank", client, accTable, killsTable, deathsTable) end addEvent ("getRank", true) addEventHandler ("getRank", getRootElement(), recebeKills) function salvaKills (ammo, killer, weapon, bodypart, stealth) if not isGuestAccount (getPlayerAccount(source)) then local deaths = getAccountData (getPlayerAccount(source), "deaths") if deaths then setAccountData (getPlayerAccount(source), "deaths", deaths + 1) else setAccountData (getPlayerAccount(source), "deaths", 1) end end if killer and killer ~= source then if getElementType (killer) == "player" then if not isGuestAccount (getPlayerAccount(killer)) then local kills = getAccountData (getPlayerAccount(killer), "kills") if kills then setAccountData (getPlayerAccount(killer), "kills", kills + 1) else setAccountData (getPlayerAccount(killer), "kills", 1) end end elseif getElementType (killer) == "vehicle" then killer = getVehicleController (killer) if killer then if not isGuestAccount (getPlayerAccount(killer)) then local kills = getAccountData (getPlayerAccount(killer), "kills") if kills then setAccountData (getPlayerAccount(killer), "kills", kills + 1) else setAccountData (getPlayerAccount(killer), "kills", 1) end end end end end end addEventHandler ("onPlayerWasted", getRootElement(), salvaKills) client.lua scoreGrid = guiCreateGridList (0.4, 0.3, 0.2, 0.4, true) guiGridListAddColumn (scoreGrid, "Account", 0.5) guiGridListAddColumn (scoreGrid, "Kills", 0.19) guiGridListAddColumn (scoreGrid, "Deaths", 0.19) guiSetAlpha (scoreGrid, 0.8) guiSetVisible (scoreGrid, false) closeGrid = guiCreateButton (0.6, 0.3, 0.018, 0.03, "X", true) guiSetAlpha (closeGrid, 0.8) guiSetVisible (closeGrid, false) function scoreInfo (accounts, kills, deaths) guiSetVisible (scoreGrid, true) guiSetVisible (closeGrid, true) showCursor (true) if accounts then for i, v in ipairs (accounts) do guiGridListAddRow (scoreGrid, accounts[i], kills[i], deaths[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 (scoreGrid, false) guiSetVisible (closeGrid, false) showCursor (false) guiGridListClear (scoreGrid) end end end addEventHandler ("onClientGUIClick", getRootElement(), clickOptions) function sendScores () triggerServerEvent ("getRank", localPlayer) end addCommandHandler ("rank", sendScores) Espero que ajude, fique a vontade para editar.
  6. Ah... uso de hacks... Não sei sobre hacks. O máximo que uso no meu server é Superman para os Staffs. Tem também estes Glitches que são permitidos no MTA e são fáceis de se fazer usando SetGlitchEnabled
  7. Nunca ouvi falar xD. Relaxa, não estou me irritando com tantas perguntas. Acho mais válido do que ficar criando mil tópicos depois.
  8. Depende. No Console do servidor (Prompt de Comando) é normal sim, e isso não tem como tirar. Inclusive não tem problema de aparecer lá pois somente quem tem acesso ao Console pode ver. Mas se for no Console do jogador (F8) dai não era pra aparecer.
  9. Bom, apague a parte dos colchetes no connect. O resto mantenha igual. <connect string="* %s #FF6464is connecting" /> <disconnect_save string="* %s #FF6464has left the game [%s]%s [Saved]" /> <disconnect string="* %s #FF6464has left the game [%s]%s" />
  10. Bom, vc pode tirar eles do meta.xml do gamemode. Assim eles não são iniciados com o gamemode.
  11. Se não mostra então não está lá. É outro resource que está fazendo isso. Provavelmente algum dos resources compilados. Tente desligar um por um pra ver se a mensagem para de aparecer.
  12. joinquit é o nome de um resource, não o nome da função. Você pode abrir todos os scripts do gamemode e buscar pelos texto que aparece na tela. Sugiro que use o notepad++ para abrir os scripts. Dai use Ctrl+F e busque por has joined the server em todos eles. Também procure por eventos do tipo onPlayerJoin.
  13. É ilegal descriptografar as senhas das contas dos jogadores. Se você ver algum servidor que faz isso, pode denunciar. Só porque outros servidores fazem coisa errada, não significa que você deva fazer também.
  14. Supondo que na sua lista, existam 3 contas. Cada uma com seu Kills/Death. Então vc deve criar a lista assim: | AccountName | Kills | Deaths | | joaozinho123 | 12 | 5 | | logindocara2 | 25 | 55 | | usuarioJames | 4 | 0 | No caso, se você quer atualizar as kills de usuarioJames, você vai especificar a linha 3 e a coluna 2 para substituir aquele valor por um novo. Mas se você clicar na coluna de Kills, ele vai reorganizar por ordem do menor pro maior, e então as kills do usuarioJames passa a ser na linha 1 e coluna 2. Por isso que é muito difícil vc especificar o item a ser atualizado, é mais fácil limpar a lista e preenchê-la com os dados atualizados. É... Não precisa se preocupar com bancos de dados nesse caso.
  15. Não. As listas (GuiCreateGridList) não funcionam da mesma forma que os bancos de dados. É mais difícil vc "atualizar" um valor da lista do que do banco de dados, você precisa especificar a linha e coluna exata da lista cujo item você quer mudar. É mais fácil você simplesmente limpar a lista inteira usando guiGridListClear quando o usuário fechar o painel. E quando ele abrir o painel, preencher novamente a lista com os novos valores. Se você preencher sem limpar a lista, ele vai adicionar os novos valores após os que já existem, duplicando os dados. Lembre-se: A lista não está salvando nenhum dado. Está apenas mostrando-os a você de maneira organizada. Não há problema em limpar a lista, pois os dados não são salvos nela e sim nas contas dos jogadores.
  16. Então você está tentando explodir o servidor de tanto processamento, né? Ficar verificando todas as contas é algo bem pesado para se fazer, ainda mais repetidamente. Em vez de ficar atualizando a cada tanto tempo, é mais fácil vc limpar a lista ao fechar o menu, e preenchê-la novamente quando abrir o painel.
  17. Se o seu objetivo é apenas salvar a quantidade de Kills e Deaths de um jogador, sem fazer um ranking de jogadores. Dai basta salvar esses dados na conta do jogador usando setAccountData, e para obter esses dados depois, use getAccountData. É mais fácil e não precisa nem saber manipular bancos de dados. DB Browser for SQLite As senhas são criptografadas, não adianta abrir o banco de dados para verificá-las. O MTA já pensou nisso para proteger os usuários de Admins mal-intencionados.
  18. Bom, se tem eu não sei. Faz tempo que não pego nada da internet. Eu no seu lugar faria um do 0 usando banco de dados. Quando vc pega da internet geralmente vem bugado ou com alguma coisa que você sempre vai querer mudar. Prefira sempre fazer o seu próprio, além de treinar programação, fica do jeito perfeito que você quer. Entenda sobre Banco de dados e SQLite aqui.
  19. Se for o GM e ele está compilado, não há oq fazer. O proprietário do GM não quer que você mexa nele. Tente entrar em contato com quem desenvolveu e solicite tal alteração.
  20. Verifique o resource joinquit. Por padrão ele não mostra IP algum. Se não for ele, deve ser algum resource que você baixou de algum lugar que está mostrando o IP.
  21. No seu Log diz: Você possui o arquivo loader.dll? Ele deve estar na pasta J:\MTA San Andreas 1.5\mta\
×
×
  • Create New...