Ir para conteúdo
  • 0

Item que Da Level ao Player


Wend ll

Pergunta

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 por AnnaFeeh
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

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 por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

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 '>'
Link para o comentário
Compartilhar em outros sites

  • 0

 

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
Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

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
Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado oneshot Dúvida Resolvida :) rep+

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

Onde seria o Lugar certo?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...