CA

[Funções] GetPlayerBy...

Por caotic, 16 de set. de 2012 em Mods, funções e outros

10
2.2k
caoticC
16 de setembro de 2012 às 13:52

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 Setembro 22 por caotic

OneshotO
16 de setembro de 2012 às 13:53

Isso não vai funcionar do jeito que você está querendo.

caoticC
16 de setembro de 2012 às 13:55

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 Setembro 16 por caotic

EskyloE
16 de setembro de 2012 às 14:07

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

caoticC
16 de setembro de 2012 às 14:10

Então ta.

 

Vo editar e fazer melhor.

 

Depois eu faço ele por Database ai player off poderia ser verificado.

VodkartV
16 de setembro de 2012 às 14:13

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

brun123B
22 de setembro de 2012 às 00:34

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

27 de setembro de 2012 às 20:04

boa função irei usa no meu client!!!

1 mês depois...
dalvorsnD
05 de outubro de 2012 às 10:12

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.

3 meses depois...
MaXwEllDeNM
04 de janeiro de 2013 às 16:09

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 Janeiro 4 por MaXwEllDeN