Como Fazer Loop Para Checar Quais Players Têm Storage X.

iansinho
em Scripts

iansinho

Ian Ramos
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/05/08Posts: 21Char no Tibia: Ian Ramos

Olá novamente xtibianos :D

 

Bom, eu queria saber como que faz um loop para fazer uma certa ação com os players que possuem certo storage.

 

Na linguagem .lua eu nunca vi, mas na linguagem pawn é assim que se faz:

for(new i = 0; i < PlayersOnline); ++i )
{
   if (PlayerStorage(i) == 12345)
   {
    FazerAcão(i)
   }
}

 

Obrigado desde já.

dragao500x200.jpg

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

depende do que você quer fazer, você diz em todos os players online?, em certa position? ou checar a storage individualmente de cada player?

bossisg.png

caotic

Afinal de contas,sou um mordomo e tanto
avatar
Infante
Infante

INFOS

Grupo: InfanteRegistrado: 04/03/11Posts: 1599Char no Tibia: No Have

Como o vodkart depende de qual maneira vai verificar a storage se e de o player ou se uma verificaçao a todos os players.

Todos os dois sao possiveis de modo que a verificaçao de todos os players se nao estivessem online teria que fazer uma verificaçao na db.

iansinho

Ian Ramos
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/05/08Posts: 21Char no Tibia: Ian Ramos

Entendi a pergunta.

É para fazer o seguinte, por exemplo:

Eu quero que todos os jogadores ONLINE que têm a storage 12345, ganhem 10kk.

Neste exemplo eu poderia colocar esta função no globalevents, para dar 10kk a quem estivesse online e com a storage 12345, a cada 1 hora.

Entenderam?

dragao500x200.jpg

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino
function onThink(interval, lastExecution)
local players = {}
local storage,items = 12345, {2160, 100}
for _, pid in pairs (getPlayersOnline()) do
if getPlayerStorageValue(pid, storage) >= 1 then
table.insert(players, pid)
end
end
	if #players > 0 then
for i = 1, #players do
doPlayerAddItem(players[i], items[1], items[2])
end
	end
return TRUE
end

bossisg.png

jhon992

Dono JhonBot
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 30/06/11Posts: 631Char no Tibia: Warrior of Mort

A logica é a mesma que na outra linguagem, sóh irá mudar as funções:

local online = getPlayersOnline()											-- retorna todos os players online
for i=1, #online do						    -- abre uma estrutura de repetição que vai de 1 até a última posição do vetor online.
if getPlayerStorageValue(online[i], 12345) > 0 then		   -- verifica se o player da posição i do vetor tem a determinada storage.
	doPlayerAddMoney(online[i], 1000000)						 -- adiciona 10kk ao player da posição i do vetor.
end												    -- finaliza o if
end																						 -- finaliza o for

 

Lista de função que pode te ajudar nos seus códigos: http://www.xtibia.co...sta-de-funcoes/

 

-edit

Tava escrevendo e nem tinha visto que o Vod postou. Agora que ja postei deixa aew, quem sabe ajuda ele a entender melhor. happy.png

iansinho

Ian Ramos
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/05/08Posts: 21Char no Tibia: Ian Ramos

Vodkart muito obrigado, mas eu não entendi nada de cada linha que você postou ali... A do Jhon922 está explicada mas está tão diferente da função que você pois.

Obrigado também Jhon922 :D

 

Mas pera ai, eu posso usar tanto a do Jhon922 quanto a do Vodkart?

dragao500x200.jpg

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

bom a diferença do meu é que eu coloquei os jogadores que tem a storage numa tabela, porque imagina se não tiver ninguém online com essa storage?

iria dar erro no distro, enão o meu faz a checagem se tem algum online e executa o script, já o do jhon funciona perfeitamente também, mas tem esse possível bug que eu te disse.

bossisg.png

iansinho

Ian Ramos
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/05/08Posts: 21Char no Tibia: Ian Ramos

Ah entendi. Mas neste caso esse bug não vai ser possível, porque aquilo foi só um exemplo rsrs.

Era pra fazer um sistema que o jogador escolhe se vai entrar no evento... se ele escolher sim (!participar) vai setar a storage nele, ai eu vou criar um comando pra fazer broadcast só pra eles entendeu? Mas as broadcasts são automaticas, e elas só vão ser ativadas quando pelo menos 1 jogador digitar !sim... Entendeu porque esse possível bug não será possível? rsrs.

 

Bom então, duvida resolvida, obrigado aos 2... Como terei que escolher apenas 1 pra dar REP+, eu vou escolher o Vodkart, mas Jhon922, relaxa que eu fico te devendo uma ;)

dragao500x200.jpg

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

Ah entendi. Mas neste caso esse bug não vai ser possível, porque aquilo foi só um exemplo rsrs.

Era pra fazer um sistema que o jogador escolhe se vai entrar no evento... se ele escolher sim (!participar) vai setar a storage nele, ai eu vou criar um comando pra fazer broadcast só pra eles entendeu? Mas as broadcasts são automaticas, e elas só vão ser ativadas quando pelo menos 1 jogador digitar !sim... Entendeu porque esse possível bug não será possível? rsrs.

 

Bom então, duvida resolvida, obrigado aos 2... Como terei que escolher apenas 1 pra dar REP+, eu vou escolher o Vodkart, mas Jhon922, relaxa que eu fico te devendo uma ;)

 

ai já é outro script, é talkactions, globalevents é uma coisa, outra forma de fazer, talkactions é outra.

bossisg.png

iansinho

Ian Ramos
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 17/05/08Posts: 21Char no Tibia: Ian Ramos

Ah entendi. Mas neste caso esse bug não vai ser possível, porque aquilo foi só um exemplo rsrs.

Era pra fazer um sistema que o jogador escolhe se vai entrar no evento... se ele escolher sim (!participar) vai setar a storage nele, ai eu vou criar um comando pra fazer broadcast só pra eles entendeu? Mas as broadcasts são automaticas, e elas só vão ser ativadas quando pelo menos 1 jogador digitar !sim... Entendeu porque esse possível bug não será possível? rsrs.

 

Bom então, duvida resolvida, obrigado aos 2... Como terei que escolher apenas 1 pra dar REP+, eu vou escolher o Vodkart, mas Jhon922, relaxa que eu fico te devendo uma ;)

 

ai já é outro script, é talkactions, globalevents é uma coisa, outra forma de fazer, talkactions é outra.

Mas pra fazer o loop não é a mesma coisa? Você tá falando que é diferente no sentido de que no globalevents pode ocorrer o bug né?

dragao500x200.jpg

Vodkart

Sumus Validus
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 21/05/10Posts: 3406Gênero: Masculino

o loop é o mesmo sim, estou dizendo que o script para dar uma premio a cada uma hr é uma coisa, e outro de setar a storage pelo talk é outra coisa, envolve mais parâmetros....

bossisg.png