gostei Muito do scrits é bom pra quem quizer fazer uma questy gostei ta de parabéns
Item que Da Level ao Player
Por Wend ll, 28 de abr. de 2014 em Scripts
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
info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino

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 thenO correto é:
if getPlayerLevel(cid) >= 50 thenEmbora 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 endAgora 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:
1398690049Ok, 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 endVeja 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 '>'
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
info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino

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
info
Grupo: Campones
Registrado: 14/10/13
Posts: 55
Reputação: +19

Tenta assim:
function onUse(cid, item, frompos, item2, topos)
local tempo = X -- tempo em segundoslocal storage = 56798if exhaustion.check(cid, storage) thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Aguarde " .. exhaustion.get(cid, storage) .. " segundos para usar novamente.")return falseendif getPlayerLevel(cid) >= 50 thendoPlayerAddLevel(cid, 1)setPlayerStorageValue(cid, 21049, 1)exhaustion.set(cid, storage, tempo)doPlayerSendTextMessage(cid, 25, "Parabéns você upou 1 Level.")doRemoveItem(item.uid, 1)elsedoPlayerSendCancel(cid,"Voce só podera usar Rare Candy quando For Level 50+.")endreturn trueend
info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino

Tenta assim:
Eu não quero a Script dada eu quero aprender a colocar o tempo só *--*
info
Grupo: Campones
Registrado: 14/10/13
Posts: 55
Reputação: +19

Lê o que eu editei e tente aprender.
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
info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino

Obrigado oneshot Dúvida Resolvida
rep+
Será que eu poderia postar a script aqui no xtibia para quem precisa?
Onde seria o Lugar certo?
Seção de Actions.
info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino

Vallew Podem Moverem *--*
+ Uma vez Obrigado Garou [Oneshot]
info
Grupo: Conde
Registrado: 18/01/12
Posts: 988
Reputação: +327
Gênero: Masculino
Char no Tibia: Xerife Woody

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





info
Grupo: Conde
Registrado: 25/02/14
Posts: 589
Reputação: +268
Gênero: Masculino
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 endObs:: Oq Acharam da Minha Primeira Script?
Editado Abril 28 por AnnaFeeh