Ir para conteúdo
  • 0

Ajuda com esse script.


gabriel28

Pergunta

Eu estava tentando por um limite de vocação em um script que acrescenta bônus de hp, só que sempre da erro, e meus conhecimentos em lua beiram a nada.

Alguém pode dar uma luz pondo esse limite de vocação, e ver se o limite de uso por dia está certo?

 

Segue o script:

local storage = 80777local vocs = {9,10,11,12}function onUse(cid, item, frompos, item2, topos)local value = getCreatureMaxHealth(cid) / 10	if getPlayerLevel(cid) >= 8 and getPlayerVocation(cid, vocs) then	 setCreatureMaxHealth(cid, math.floor(getCreatureMaxHealth(cid)+ value))	doCreatureAddHealth(cid, getCreatureMaxHealth(cid))	doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")	doCreatureSetStorage(cid, storage, math.max(0, getCreatureStorage(cid, storage)) + 1)	doSendMagicEffect(getCreaturePosition(cid), 30)	doRemoveItem(item.uid, 1)	end	doPlayerSendTextMessage(cid, 27, "You have received "..it[2].." "..getItemNameById(it[1])..". You can take your reward in "..time.." minutes.")	setPlayerStorageValue(cid, storage, os.time() + time * 60)	else	return doPlayerSendCancel(cid, "You have already received your reward for today.")	elseif getPlayerVocation(cid, vocs) = false	return doPlayerSendCancel(cid, "Your vocation don't use it.")	return trueend

Agradeço desde já.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0
Em 20/10/2016 at 11:44, Poccnn disse:

Eu não entendi o que tu queres.

Esse script está com varios erros.

O script real é esse:

Spoiler
local storage = 80777function onUse(cid, item, frompos, item2, topos)local value = getCreatureMaxHealth(cid) / 10if getPlayerLevel(cid) >= 8 thensetCreatureMaxHealth(cid, math.floor(getCreatureMaxHealth(cid)+ value))doCreatureAddHealth(cid, getCreatureMaxHealth(cid))doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")doCreatureSetStorage(cid, storage, math.max(0, getCreatureStorage(cid, storage)) + 1)doSendMagicEffect(getCreaturePosition(cid), 30)doRemoveItem(item.uid, 1)enddoPlayerSendTextMessage(cid, 27, "You have received "..it[2].." "..getItemNameById(it[1])..". You can take your reward in "..time.." minutes.")setPlayerStorageValue(cid, storage, os.time() + time * 60)elsereturn doPlayerSendCancel(cid, "You have already received your reward for today.")endreturn trueend

 

E está com esse erro:  input:14: 'end' expected (to close 'function' at line 2) near 'else'

O que mandei antes foi uma tentativa minha fracassada de corrigir o script e acrescentar um limite de vocações.

 

Gostaria que alguém experiente o fizesse por mim, corrigir esse erro e por o limite de vocação, e verificar se também está com o limite de uso de apenas umas vez por dia.

Editado por gabriel28
Link para o comentário
Compartilhar em outros sites

  • 0
Citar

local storage = 80777

local dia = tonumber (os.date ("&d"))

 

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

local value = math.floor (getCreatureMaxHealth(cid) / 10)

 

if getPlayerLevel(cid) >= 8 and getCreatureStorage(cid, storage) ~= dia then -- verifica se o dia marcado na chave é diferente do dia de "hoje".

setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+ value) 

doCreatureAddHealth(cid, getCreatureMaxHealth(cid)) doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")

doCreatureSetStorage(cid, storage, dia) -- marca o dia na chave.

doSendMagicEffect(getCreaturePosition(cid), 30) doRemoveItem(item.uid, 1)

-- falta saber se existe a tabela "it" vista pelo código. 

-- falta verificar se a variável "time" existe e seja visível pelo código. 

-- não sei pra quê serve a marcação de store nesse bloco, portanto não o removi.

 

doPlayerSendTextMessage(cid, 27, "You have received "..it[2].." "..getItemNameById(it[1])..". You can take your reward in "..time.." minutes.")

setPlayerStorageValue(cid, storage, os.time() + time * 60)

else

return doPlayerSendCancel(cid, "You have already received your reward for today.")

end

return true

end

 

 

Não consigo editar o meu post. 

Muda no código essa parte:

Citar

local dia = tonumber (os.date ("&d"))

 

Por este:

Citar

local dia = tonumber (os.date ("%d"))

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

1 minuto atrás, DuuhCarvalho disse:

explica o que você quer que o script faça, desde o inicio..

ao da user no item, fazer isso e isso, mas só se isso...

 

Aumente o life de quem o usar em 10%, de acordo com o life total que o player tiver. Que só possa ser usado uma vez ao dia e que apenas knights possam usar.

Link para o comentário
Compartilhar em outros sites

  • 0
function onUse(cid, item, frompos, item2, topos)local storage = 80777local vocation = 4 -- id da vocation knight (ou outra)if getPlayerVocation(cid) == vocation then   if getPlayerStorageValue(cid, storage) <= 0 then      doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*0.10)      setPlayerStorageValue(cid, storage, os.time()+ 1*24*60*60)      doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")      doSendMagicEffect(getCreaturePosition(cid), 30)      doRemoveItem(item.uid, 1)   else      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item hoje, tente novamente em 24 horas.")   endelse   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item exclusivo para knights.")endreturn trueend

 

<action itemid="IDdoITEM" script="nomedoarquivo.lua"/>

 

Link para o comentário
Compartilhar em outros sites

  • 0
4 minutos atrás, zipter98 disse:

^ recomendaria você comparar a storage com os.time, já que o autor pediu que o item pudesse ser usado uma vez por dia.

 

vdd vlw, tanto tempo sem fazer script, esqueci kk (;:

 

function onUse(cid, item, frompos, item2, topos)local storage = 80777local vocation = 4 -- id da vocation knight (ou outra)if getPlayerVocation(cid) == vocation then   if os.time() > getPlayerStorageValue(cid, storage) then      doCreatureAddHealth(cid, getCreatureMaxHealth(cid)*0.10)      setPlayerStorageValue(cid, storage, os.time()+ 1*24*60*60)      doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")      doSendMagicEffect(getCreaturePosition(cid), 30)      doRemoveItem(item.uid, 1)   else      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item hoje, tente novamente em 24 horas.")   endelse   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item exclusivo para knights.")endreturn trueend

 

Link para o comentário
Compartilhar em outros sites

  • 0
Em 29/11/2016 at 20:51, DuuhCarvalho disse:

 

vdd vlw, tanto tempo sem fazer script, esqueci kk (;:

 

 

 

Desculpa a demora pra dar o feedback, eu tava fazendo uma maratona com uns animes dai me esqueci de tudo haha.

Desculpa não ter sido claro na hora de explicar, mas o item era pra adicionar +10% do valor total do life do player, no life dele. Ex: O player tem 100 de life, ele usa o item e fica com 110 de life.

O teu script está healando 10% do life total do player. Mas eu fiz umas modificações aqui no seu script, usando outros que tenho e agora está funcionando como falei, até onde testei. Ele ficou assim:

 

Spoiler
function onUse(cid, item, frompos, item2, topos)local storage = 80777local vocation = {4,8,12} -- id da vocation knight (ou outra)local value = getCreatureMaxHealth(cid) / 10if isInArray(vocation, getPlayerVocation(cid)) then   if os.time() > getPlayerStorageValue(cid, storage) then	  setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+ value)      doCreatureAddHealth(cid, getCreatureMaxHealth(cid))      setPlayerStorageValue(cid, storage, os.time()+ 1*24*60*60)      doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")      doSendMagicEffect(getCreaturePosition(cid), 30)      doRemoveItem(item.uid, 1)   else      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item hoje, tente novamente em 24 horas.")   endelse   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item exclusivo para knights.")endreturn trueend

 

Tive que por "if isInArray(vocation, getPlayerVocation(cid)) then" porque não tava dando pra acrescentar mais vocações ao script.

Agora, tem como acrescentar algo pra quando o player deslogar, esse "efeito" sair? Apesar que imagino que pra fazer isso acontecer, vai ter que setar a storage pra 0 e quando o player relogar, vai poder usar de novo, mas espero que tenha alguma forma pra fazer isso. hahaha 

 

Vou estar te reputando por já ter me ajudado muito. =D

Link para o comentário
Compartilhar em outros sites

  • 0
8 horas atrás, gabriel28 disse:

 

Desculpa a demora pra dar o feedback, eu tava fazendo uma maratona com uns animes dai me esqueci de tudo haha.

Desculpa não ter sido claro na hora de explicar, mas o item era pra adicionar +10% do valor total do life do player, no life dele. Ex: O player tem 100 de life, ele usa o item e fica com 110 de life.

O teu script está healando 10% do life total do player. Mas eu fiz umas modificações aqui no seu script, usando outros que tenho e agora está funcionando como falei, até onde testei. Ele ficou assim:

 

  Mostrar conteúdo oculto
function onUse(cid, item, frompos, item2, topos)local storage = 80777local vocation = {4,8,12} -- id da vocation knight (ou outra)local value = getCreatureMaxHealth(cid) / 10if isInArray(vocation, getPlayerVocation(cid)) then   if os.time() > getPlayerStorageValue(cid, storage) then	  setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+ value)      doCreatureAddHealth(cid, getCreatureMaxHealth(cid))      setPlayerStorageValue(cid, storage, os.time()+ 1*24*60*60)      doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")      doSendMagicEffect(getCreaturePosition(cid), 30)      doRemoveItem(item.uid, 1)   else      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item hoje, tente novamente em 24 horas.")   endelse   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item exclusivo para knights.")endreturn trueend

 

Tive que por "if isInArray(vocation, getPlayerVocation(cid)) then" porque não tava dando pra acrescentar mais vocações ao script.

Agora, tem como acrescentar algo pra quando o player deslogar, esse "efeito" sair? Apesar que imagino que pra fazer isso acontecer, vai ter que setar a storage pra 0 e quando o player relogar, vai poder usar de novo, mas espero que tenha alguma forma pra fazer isso. hahaha 

 

Vou estar te reputando por já ter me ajudado muito. =D

 

vamos lá, o player vai usar o item, e vai aumentar a o hp dele, ai quando ele sair o hp volta para o valor original ? e ele só vai poder usar novamente no outro dia..

Link para o comentário
Compartilhar em outros sites

  • 0
4 horas atrás, DuuhCarvalho disse:

 

vamos lá, o player vai usar o item, e vai aumentar a o hp dele, ai quando ele sair o hp volta para o valor original ? e ele só vai poder usar novamente no outro dia..

É isso ai. O script que coloquei acima já está acrescentando esse hp extra mas não está fazendo esse outra parte. O tempo de 24h começa a contar a partir do momento em que o player usou o item e não quando eles desloga do servidor. Ex: Ele usou de 13:00 e deslogou as 17:00, dai o tempo pra usar de novo já começou a contar às 13:00 que foi quando ele usou.

Espero que eu tenha conseguido explicar direito. kkkkk

Link para o comentário
Compartilhar em outros sites

  • 0
Em 28/11/2016 at 20:03, gabriel28 disse:

 

Ainda não testei, mas tem como por só pra knight usar?

Troca iso:

Citar

 

if getPlayerLevel(cid) >= 8 and getCreatureStorage(cid, storage) ~= dia then 

 

Por isto:

Citar

 

if getPlayerLevel(cid) >= 8 and getCreatureStorage(cid, storage) ~= dia and isKnight(cid) then 

 

Link para o comentário
Compartilhar em outros sites

  • 0

substitui o script por esse:

 

function onUse(cid, item, frompos, item2, topos)local storage = 80777local storage2 = 80888local vocation = {4,8,12} -- id da vocation knight (ou outra)local value = getCreatureMaxHealth(cid) / 10if isInArray(vocation, getPlayerVocation(cid)) then   if os.time() > getPlayerStorageValue(cid, storage) then	  setCreatureMaxHealth(cid, getCreatureMaxHealth(cid)+ value)      doCreatureAddHealth(cid, getCreatureMaxHealth(cid))      setPlayerStorageValue(cid, storage, os.time()+ 1*24*60*60)      setPlayerStorageValue(cid, storage2, 1)      doPlayerSendTextMessage(cid, 22, "You add 10% hp to you health!")      doSendMagicEffect(getCreaturePosition(cid), 30)      doRemoveItem(item.uid, 1)   else      doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Você já usou esse item hoje, tente novamente em 24 horas.")   endelse   doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item exclusivo para knights.")endreturn trueend

 

e coloca esse onlogin em creaturescript:

 

function onLogin(cid)local storage2 = 80888local health = getCreatureMaxHealth(cid)*0.10	if getPlayerStorageValue(cid, storage2) >= 1 then		setPlayerStorageValue(cid, storage2, 0)		setCreatureMaxHealth(cid, getCreatureMaxHealth(cid) - health)		doRemoveCreature(cid)	end	return trueend

 

não testei, vê se funciona ai.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...