WE
dúvida

Item que Da Level ao Player

Por Wend ll, 28 de abr. de 2014 em Scripts

rare candy
otserv
tibia
script
14
2k
Wend llW
28 de abril de 2014 às 09:28

Oiie Pessoal :)

 

Tava dando uma estudada nas Antigas aulas de scripting que o Roksas Postou, Link:

http://www.xtibia.com/forum/forum/965-aulas/

 

ai desenvolvi essa "Script", OQ faz? Faz um Player acima de level 50+ usar o Tal item e ganhar + um Level..

Mais eu tou querendo adiciona uma Função de Tempo Para que quando o Player tentasse 2 vez seguida usar o Item apareçesse uma mensagem Falando que só poderia usar o TAL item com X tempo..

function onUse(cid, item, frompos, item2, topos)
 if getPlayerLevel (cid) >= 50 then
 doPlayerAddLevel(cid, 1) 
 setPlayerStorageValue(cid, 21049, 1)
 doPlayerSendTextMessage(cid, 25, "Parabéns você upou 1 Level.")
 doRemoveItem(item.uid, 1)
 else
 doPlayerSendCancel(cid,"voce só podera usar Rare Candy quando For Level 50+.")
        end
    return true
end

Obs:: Oq Acharam da Minha Primeira Script?

Editado Abril 28 por AnnaFeeh

DbkoD
28 de abril de 2014 às 09:33

gostei Muito do scrits é bom pra quem quizer fazer uma questy gostei ta de parabéns

OneshotO
28 de abril de 2014 às 10:07

Legal ver o interesse das pessoas por scripting. Vamos seguir com algumas dicas.

 

Não separe os parâmetros de função com espaço como você fez na linha 2.

 if getPlayerLevel (cid) >= 50 then

O correto é:

if getPlayerLevel(cid) >= 50 then

Embora a maioria das pessoas não ligue para isso, os scripts precisam de indentação, pois organiza suas linhas de código, e a leitura não fica pesada, mas sim agradável aos olhos dos programadores. Procure sobre indentação e tente praticar nos próximos scripts.

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) >= 50 then
		doPlayerAddLevel(cid)
		doRemoveItem(item.uid, 1)
	else
		doPlayerSendCancel(cid, "You need level 50 to use this item.")
	end
	return true
end

Agora para limitar o uso, durante um período de tempo, existe uma função chamada os.time() que armazena o tempo decorrido em segundos desde 01/01/1970. Para exemplificar, eu dei um print os.time() que retornou isso:

1398690049

Ok, aí você me pergunta, como eu vou fazer para limitar o uso de um item, usando essa função?

 

Armazene o valor dela acrescido de X segundos em uma storage e depois compare ela com ela mesmo e... não pera...

 

É isso mesmo.

 

Seu script ficaria assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) >= 50 and os.time() > getCreatureStorage(cid, 33665) then
		doPlayerAddLevel(cid)
		doRemoveItem(item.uid, 1)
		doCreatureSetStorage(cid, 33665, (os.time() + 60))
	else
		doPlayerSendCancel(cid, "You need level 50 to use this item or need to wait a minute.")
	end
	return true
end

Veja o que eu fiz, no momento que o jogador usou o item, peguei o tempo em segundos daquele momento, somei mais 60 segundos e armazenei em uma storage.

 

Na linha 2, faço uma comparação, se o tempo em segundos do momento de uma nova tentativa de uso já passou o tempo armazenado na storage, se já passou, é porque já passou um minuto e por aí vai.

 

Acho que dá pra entender desse jeito, só acho.

 

Abraço.

Editado Abril 28 por Oneshot

Wend llW
28 de abril de 2014 às 10:53

Legal ver o interesse das pessoas por scripting. Vamos seguir com algumas dicas.

 

Não separe os parâmetros de função com espaço como você fez na linha 2.

 if getPlayerLevel (cid) >= 50 then

O correto é:

if getPlayerLevel(cid) >= 50 then

Embora a maioria das pessoas não ligue para isso, os scripts precisam de indentação, pois organiza suas linhas de código, e a leitura não fica pesada, mas sim agradável aos olhos dos programadores. Procure sobre indentação e tente praticar nos próximos scripts.

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) >= 50 then
		doPlayerAddLevel(cid)
		doRemoveItem(item.uid, 1)
	else
		doPlayerSendCancel(cid, "You need level 50 to use this item.")
	end
	return true
end

Agora para limitar o uso, durante um período de tempo, existe uma função chamada os.time() que armazena o tempo decorrido em segundos desde 01/01/1970. Para exemplificar, eu dei um print os.time() que retornou isso:

1398690049

Ok, aí você me pergunta, como eu vou fazer para limitar o uso de um item, usando essa função?

 

Armazene o valor dela acrescido de X segundos em uma storage e depois compare ela com ela mesmo e... não pera...

 

É isso mesmo.

 

Seu script ficaria assim:

function onUse(cid, item, fromPosition, itemEx, toPosition)
	if getPlayerLevel(cid) >= 50 and os.time() > getCreatureStorage(cid, 33665) then
		doPlayerAddLevel(cid)
		doRemoveItem(item.uid, 1)
		doCreatureSetStorage(cid, 33665, (os.time() + 60))
	else
		doPlayerSendCancel(cid, "You need level 50 to use this item or need to wait a minute.")
	end
	return true
end

Veja o que eu fiz, no momento que o jogador usou o item, peguei o tempo em segundos daquele momento, somei mais 60 segundos e armazenei em uma storage.

 

Na linha 2, faço uma comparação, se o tempo em segundos do momento de uma nova tentativa de uso já passou o tempo armazenado na storage, se já passou, é porque já passou um minuto e por aí vai.

 

Acho que dá pra entender desse jeito, só acho.

 

Abraço.

Deu Para entende Sim :) Obrigado

Edit

Oneshot deu esse erro Aqui na distro::

 

[Error - LuaScriptInterface::loadFile] data/actions/scripts/rarecandy.lua:4: unexpected symbol near '>'
[28/04/2014 10:52:42] [Warning - Event::loadScript] Cannot load script (data/actions/scripts/rarecandy.lua)
[28/04/2014 10:52:42] data/actions/scripts/rarecandy.lua:4: unexpected symbol near '>'
OneshotO
28 de abril de 2014 às 11:11

Posta o script, porque o meu exemplo não era pra dar esse erro, pelo menos eu acho que não.

Editado Abril 28 por Oneshot

Wend llW
28 de abril de 2014 às 11:19

 

function onUse(cid, item, frompos, item2, topos)
            if getPlayerLevel(cid) >= 50 then os.time() > getCreatureStorage(cid, 33665) then
                       doPlayerAddLevel(cid, 1) 
                       doPlayerSendTextMessage(cid, 25, "Parabéns você upou 1 Level.")
                       doRemoveItem(item.uid, 1)
                       doCreatureSetStorage(cid, 33665, (os.time() + 60))
             else
                       doPlayerSendCancel(cid,"voce precisa de Level 50+ para usar Rare Candy ou Precisa Esperar 1 Hora.")
             end
             return true
end
Alencar522A
28 de abril de 2014 às 11:30

Tenta assim:

function onUse(cid, item, frompos, item2, topos)

local tempo = X -- tempo em segundos
local storage = 56798
if exhaustion.check(cid, storage) then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar novamente.")
return false
end
if getPlayerLevel(cid) >= 50 then
doPlayerAddLevel(cid, 1)
setPlayerStorageValue(cid, 21049, 1)
exhaustion.set(cid, storage, tempo)
doPlayerSendTextMessage(cid, 25, "Parabéns você upou 1 Level.")
doRemoveItem(item.uid, 1)
else
doPlayerSendCancel(cid,"Voce só podera usar Rare Candy quando For Level 50+.")
end
return true
end
Wend llW
28 de abril de 2014 às 11:32

Tenta assim:

Eu não quero a Script dada eu quero aprender a colocar o tempo só *--*

Alencar522A
28 de abril de 2014 às 11:34

Lê o que eu editei e tente aprender.

OneshotO
28 de abril de 2014 às 12:09
Melhor resposta

Seu erro foi aqui:

if getPlayerLevel(cid) >= 50 then os.time() > getCreatureStorage(cid, 33665) then

Só tem um then no final do if, AnaFeeh.

 

O resto devem ser conectores and ou or.

 

Ficando:

if getPlayerLevel(cid) >= 50 and os.time() > getCreatureStorage(cid, 33665) then
Wend llW
28 de abril de 2014 às 14:45

Obrigado oneshot Dúvida Resolvida :) rep+

Será que eu poderia postar a script aqui no xtibia para quem precisa?

Onde seria o Lugar certo?

OneshotO
28 de abril de 2014 às 14:46

Seção de Actions.

Wend llW
28 de abril de 2014 às 14:49

Vallew Podem Moverem *--*

+ Uma vez Obrigado Garou [Oneshot]

28 de abril de 2014 às 17:12

Tópico movido para Pedidos e dúvidas resolvidos.