Ir para conteúdo

[Funções] GetPlayerBy...


caotic

Posts Recomendados

Tava sem nada para fazer e fiz estas funções.

São quatro funções que verificam o player por alguma coisa x.

 

Crie um arquivo lua em lib chamado funcby.lua e coloque isto:

 

function getPlayersByItem(itemid)
local y = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerItemCount(pid, itemid) > 0 then
table.insert(y, pid)
end
end
return y
end


function getPlayersByVocation(voc)
local players = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerVocation(pid) == tonumber(voc) then
table.insert(players, pid)
end
end
return players
end

function getPlayersByMoney(money)
x = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerMoney(pid) > tonumber(money) then
table.insert(x, pid)
end
end
return x
end


function getPlayersByLevel(level)
local z = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerLevel(pid) > tonumber(level) then
table.insert(z, pid)
end
end
return z
end

 

 

Exemplo:

 

function onSay(cid, words, param)

for _, i in ipairs(getPlayersByItem(2152)) do
doPlayerSendTextMessage(i, MESSAGE_STATUS_CONSOLE_BLUE, "Oi")
end
return true
end

Editado por caotic
Link para o comentário
Compartilhar em outros sites

An?

 

Eu testei.

Funciono Normalmente e só uma estrutura de repetição e uma verificação boba

 

Acho que ta faltando table.insert :X

Editado por caotic
Link para o comentário
Compartilhar em outros sites

Tava sem nada para fazer e fiz estas funções.

São quatro funções que verificam o player por alguma coisa x.

 

Crie um arquivo lua em lib chamado funcby.lua e coloque isto:

 

function getPlayersByItem(itemid)
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerItemCount(pid, itemid) > 0 then
return pid
end
end
end

function getPlayersByVocation(voc)
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerVocation(pid) == voc then
return pid
end
end
end

function getPlayersByMoney(money)
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerMoney(pid) > money then
return pid
end
end
end

function getPlayersByLevel(level)
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerLevel(pid) > level then
return pid
end
end
end

horrivel, retorna só o 1º player q encaixa na condicao

 

no caso vc teria q criar 1 array e retornar a array, aí ficaria + util

Link para o comentário
Compartilhar em outros sites

só colocar os players numa tabela

 

function getPlayersByVocation(voc)
local players = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerVocation(pid) == tonumber(voc) then
table.insert(players, pid)
end
end
return players
end

Link para o comentário
Compartilhar em outros sites

cara:

 

 

function getPlayersByMoney(money)
x = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerMoney(pid) > tonumber(money) then
table.insert(x, pid)
return x
end
end
end

function getPlayersByLevel(level)
local z = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerLevel(pid) > tonumber(level) then
table.insert(z, pid)
return z
end
end
end

function getPlayersByItem(itemid)
local y = {}
for _, pid in ipairs(getPlayersOnline()) do
if getPlayerItemCount(pid, itemid) > 0 then
table.insert(y, pid)
return y
end
end
end

 

 

essas três funções vão retornar no máximo uma tabela com 1 player apenas, pois assim que encontra o primeiro player, ele é inserido na tabela e ao mesmo tempo a função para de ser executada pra retornar um valor.

 

os returns tem que ficar antes do último end

Link para o comentário
Compartilhar em outros sites

Interessante, apesar de ser um loop razoável dependendo da quantidade de players.

Por database pode ser feito também, mas ai provavelmente estará trabalhando com numeros bem maiores, terá de redobrar os cuidados para que não fique muito pessada.

Link para o comentário
Compartilhar em outros sites

  • 2 months later...


function getPlayersByLevel(level)
  local z = {}
  for _, pid in ipairs(getPlayersOnline()) do
  if getPlayerLevel(pid) > tonumber(level) then
	 table.insert(z, pid)
  end
  end

  return z
end

 

Nesse caso se um amigo meu for level 50 e eu quiser pegar os que tenham no mínimo level 50, meu amigo não vai estar na lista

 

Nesse sim:

function getPlayersByLevel(level)

  local z = {}
  for _, pid in ipairs(getPlayersOnline()) do
  if getPlayerLevel(pid) >= tonumber(level) then
	 table.insert(z, pid)
  end
  end

  return z
end

 

Não entendi a necessidade de colocar o tonumber alí '-', NUNCA(NUNCA mesmo) ví alguém fazer algo do tipo:

 

local num = "50"
print( tonumber(num) + 2)

 

Até porque não há necessidade .-.

Editado por MaXwEllDeN
Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...