Jonas^ Posted September 1, 2018 Share Posted September 1, 2018 (edited) Olá pessoal, bom estive pensando, queria saber como posso fazer para obter a localização dos jogadores, vou usar o exemplo do GetPlayerCount, como posso obter os jogadores de outro pais, qual função devo usar, não sei se é falta de leitura minha, mas dei uma procurada na wiki algo relacionado com os paises dos jogadores e até mesmo IP, e não encontrei nada. Exemplo: Ao digitar /players envie: Jogadores Brasileiros: 3 Jogadores Gringos: 2 -- Aqui é todos os paises fora o brasil . Total: 5 Usei a função GetPlayerCount e fiz este exemplo totalizando o total de jogadores: function listarJogadores(thePlayer) outputChatBox ( "Total: #889123" .. getPlayerCount(), thePlayer, 255, 255, 255, true ) end addCommandHandler("players", listarJogadores) Edited September 1, 2018 by OverKILL Link to comment
#RooTs Posted September 2, 2018 Share Posted September 2, 2018 (edited) Tento o getPlayerCountry ? Nem sei de existe essa função. Procurei no wiki e nao vi nada Edited September 2, 2018 by #RooTs Link to comment
DNL291 Posted September 2, 2018 Share Posted September 2, 2018 O resource Admin tem a função getPlayerCountry. Use getElementsByType e faça um loop obtendo o país de cada jogador; use uma variável pra fazer a contagem. 1 Link to comment
Jonas^ Posted September 2, 2018 Author Share Posted September 2, 2018 1 hour ago, DNL291 said: O resource Admin tem a função getPlayerCountry. Use getElementsByType e faça um loop obtendo o país de cada jogador; use uma variável pra fazer a contagem. Obrigado, passei despercebido por essa função. Link to comment
DNL291 Posted September 3, 2018 Share Posted September 3, 2018 Sobre o loop, usar a função exportada, etc: function getPlayerCountFromCountry( c ) local players = 0 for _, p in pairs( getElementsByType("player") ) do country = exports.admin:getPlayerCountry( p ) if country == tostring(c) then players = players + 1 end end return players end 1 Link to comment
Jonas^ Posted September 3, 2018 Author Share Posted September 3, 2018 10 minutes ago, DNL291 said: Sobre o loop, usar a função exportada, etc: function getPlayerCountFromCountry( c ) local players = 0 for _, p in pairs( getElementsByType("player") ) do country = exports.admin:getPlayerCountry( p ) if country == tostring(c) then players = players + 1 end end return players end É meio confuso, como vou adicionar este loop junto a função GetPlayerCount ? Link to comment
#RooTs Posted September 3, 2018 Share Posted September 3, 2018 21 minutes ago, OverKILL said: É meio confuso, como vou adicionar este loop junto a função GetPlayerCount ? Copie a função que ele fez e use local country = getPlayerCountFromCountry() 1 Link to comment
Jonas^ Posted September 3, 2018 Author Share Posted September 3, 2018 (edited) 3 minutes ago, #RooTs said: Copie a função que ele fez e use local country = getPlayerCountFromCountry() Esta parte eu já havia feito, to em dúvida na parte do loop quando puxa os paises, como vou usar a GetPlayerCount pra ele listar em cada output os paises: Como vou separar por exemplo Jogadores Brasileiros: 3 Jogadores Gringos: 2 -- Aqui é todos os paises fora o brasil . Total: 5 Edited September 3, 2018 by OverKILL Link to comment
[M]ister Posted September 3, 2018 Share Posted September 3, 2018 function listarJogadores(thePlayer) local br, gringo = 0,0 for _,p in ipairs (getElementsByType ( "player" )) do local pais = call(getResourceFromName("admin"), "getPlayerCountry", p) if (pais == "BR") then br = br + 1 else gringo = gringo + 1 end end outputChatBox ( "Jogadores Brasileiros: #889123" .. br, thePlayer, 255, 255, 255, true ) outputChatBox ( "Jogadores Gringos: #889123" .. gringo, thePlayer, 255, 255, 255, true ) outputChatBox ( "Total: #889123" .. getPlayerCount(), thePlayer, 255, 255, 255, true ) end addCommandHandler("players", listarJogadores) 1 Link to comment
Jonas^ Posted September 3, 2018 Author Share Posted September 3, 2018 7 minutes ago, MaligNos said: function listarJogadores(thePlayer) local br, gringo = 0,0 for _,p in ipairs (getElementsByType ( "player" )) do local pais = call(getResourceFromName("admin"), "getPlayerCountry", p) if (pais == "BR") then br = br + 1 else gringo = gringo + 1 end end outputChatBox ( "Jogadores Brasileiros: #889123" .. br, thePlayer, 255, 255, 255, true ) outputChatBox ( "Jogadores Gringos: #889123" .. gringo, thePlayer, 255, 255, 255, true ) outputChatBox ( "Total: #889123" .. getPlayerCount(), thePlayer, 255, 255, 255, true ) end addCommandHandler("players", listarJogadores) Testei aqui no local e ele seta como Jogador Gringo Link to comment
[M]ister Posted September 3, 2018 Share Posted September 3, 2018 7 minutes ago, OverKILL said: Testei aqui no local e ele seta como Jogador Gringo Se não me engano, quando testa localmente ele não retorna a localização correta do jogador, faz o seguinte no painel do Admin, veja se ele mostra o seu país. 1 Link to comment
Jonas^ Posted September 3, 2018 Author Share Posted September 3, 2018 2 minutes ago, MaligNos said: Se não me engano, quando testa localmente ele não retorna a localização correta do jogador, faz o seguinte no painel do Admin, veja se ele mostra o seu país. Eu testei isto agora, e realmente não mostra, testei no servidor e mostrou. obrigado. Link to comment
Gw8 Posted September 3, 2018 Share Posted September 3, 2018 (edited) Adicionar resource na ACL - SERVERSIDE: function onCountryStart() for i,thePlayer in pairs(getElementsByType("player")) do getPlayerCountry(thePlayer) end end addEventHandler("onResourceStart",resourceRoot,onCountryStart) function getPlayerCountry(thePlayer) if thePlayer then local playerIP = getPlayerIP(thePlayer) if playerIP then fetchRemote("http://www.geoplugin.net/json.gp?ip="..playerIP, setPlayerCountry, "", false, thePlayer ) end end end function setPlayerCountry(countryTable,errorCode,thePlayer) if thePlayer and countryTable and errorCode == 0 then local countryTable = fromJSON("["..countryTable.."]") if countryTable then setElementData(thePlayer,"country",countryTable.geoplugin_countryCode) setElementData(thePlayer,"countryName",countryTable.geoplugin_countryName) end end end function listarJogadores(thePlayer,cmd) local br = 0 local players = getElementsByType("player") for _,p in ipairs(players) do if getElementData(p,"country") == "br" then br = br + 1 end end outputChatBox("Jogadores Brasileiros: #889123"..br,thePlayer,255,255,255,true) outputChatBox("Jogadores Gringos: #889123"..(#players-br),thePlayer,255,255,255,true) outputChatBox("Total: #889123"..#players,thePlayer,255,255,255,true) end addCommandHandler("players",listarJogadores) Edited September 3, 2018 by Gw8 1 Link to comment
DNL291 Posted September 3, 2018 Share Posted September 3, 2018 Se você for usar o script no seu servidor hospedado, pra pra economizar a largura de banda, te recomendo usar o código da função exportada do Admin: E se quiser reconhecido como "BR" no local, mesmo com outro IP, você pode fazer uma edição no código e definir seu local com base na conta, nick, IP. 1 Link to comment
#RooTs Posted September 4, 2018 Share Posted September 4, 2018 eu tinha visto uma vez um joinquit com ( Pais, Estado, e cidade) como é feito isso ? é usado "FetchRemote" com um link ? tipo isso. fetchRemote("http://www.geoplugin.net/json.gp?ip="..playerIP, setPlayerCountry, "", false, thePlayer ) Link to comment
Jonas^ Posted September 4, 2018 Author Share Posted September 4, 2018 (edited) 34 minutes ago, #RooTs said: eu tinha visto uma vez um joinquit com ( Pais, Estado, e cidade) como é feito isso ? é usado "FetchRemote" com um link ? tipo isso. fetchRemote("http://www.geoplugin.net/json.gp?ip="..playerIP, setPlayerCountry, "", false, thePlayer ) Sim. Ex: addEventHandler("onPlayerJoin", root, function() local ip = getPlayerIP(source) fetchRemote("http://ip-api.com/json/"..ip, outputJoin, "", false, source) end) Edited September 4, 2018 by OverKILL Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now