Ir para conteúdo

Featured Replies

Postado

Será que alguém conseguiria fazer o seguinte script para mim?
Funciona assim, seria uma "food" mas  que lembra uma potion, que vai dar heal por segundo e buff. Exemplo:
O player usa o item e por x tempo em segundos ele se cura em x% de vida e ganha um buff de x em fishing skill, fica um effect constante nele e o item some como se fosse uma food

e so pode ser usado novamente quando acabar o tempo do primeiro uso.
No caso preciso restringir o uso para apenas algumas vocations!

Desde já agradeço.

 

Resolvido por FeeTads

Ir para solução
  • Respostas 8
  • Visualizações 769
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • a distro deixou o erro ali kkkkkk " ' , ' expected near '#' " ? kkkkkk faltou uma virgula no for da linha 46 aki nesse for i=1 #need_vocation for i=1 #need_vocation do -- chec

  • GG mano, testa certinho, faz varios tipos de testes que os players podem tentar fazer, tipo usar e deslogar, usar varios, etc.. e ve se da algum bug, se der volta aki kkkkkkkk, tmj mano

Posted Images

  • 4 weeks later...
  • 4 weeks later...
Postado
  • Autor
Em 15/06/2022 em 15:49, daviscript disse:

Quando o player relogar ele perderá esse buff?

Desculpe a demora, sim, ao relogar ou morrer ele vai perder o buff e a cura

Postado
Em 21/05/2022 em 15:20, Nother disse:

Será que alguém conseguiria fazer o seguinte script para mim?
Funciona assim, seria uma "food" mas  que lembra uma potion, que vai dar heal por segundo e buff. Exemplo:
O player usa o item e por x tempo em segundos ele se cura em x% de vida e ganha um buff de x em fishing skill, fica um effect constante nele e o item some como se fosse uma food

e so pode ser usado novamente quando acabar o tempo do primeiro uso.
No caso preciso restringir o uso para apenas algumas vocations!

Desde já agradeço.

 

 

fiz aqui meu bom, mas creio que será necessário você testar antes de por em prática kkkkkk, caso tenha algum bug, manda print do erro no console que aparecer PF.

colocar em qualquer arquivo action.lua ex:

data > actions > scripts > foodBuff.lua

 

colocar no actions.xml

data > actions > actions.xml

<action itemid="9998 script="foodBuff.lua"/> 

 

TROCAR O 9998 PELO ID DO SEU FOOD/ITEM

 

local itemID = 9998    				 -- id do item
local tempoDeBuff = 60      		 -- em segundos
local porcentagemDeCura = 2 		 -- vai curar 2% por [tempo entre curas] durante [tempo de buff]
local qtdDeSkill = 10				 -- quantidade de skill que dará
local efeito = 4					 -- efeito que sairá do player
local removerItem = true      		 -- remover o item? true = remove, false = não remove
local tempoEntreCuras = 1 * 1000	 -- tempo entre o efeito da cura, 1 * 1000 = 1000ms logo //1 segundo
local need_vocation = {1,2,3,4,5}	 -- IDs da vocações QUE PODEM usar o food
local buff = SKILL_FISHING			 -- qual skill vai aumentar //pra saber qual skill vc quer aumentar procure por "skill" em "lib/000-constant.lua"
local storage = 5474767				 -- pode ser qualquer numero //não pode repetir numero de outra storage existente
local storage_buff_ativo = 5474768

local function CuraFoodBuff(cid, flag)
	
	if isCreature(cid)  then		--se estiver logado entra, se não termina o loop, ou seja, se deslogar/morrer perde o efeito do food
		if flag > 0 then
			doCreatureAddHealth(cid, (getCreatureMaxHealth(cid) * (porcentagemDeCura/100)))		-- n mexer :P
			doSendMagicEffect(getThingPos(cid), efeito)					  				-- efeito que vai sair do player
			flag = getPlayerStorageValue(cid, storage) - os.time()
			addEvent(CuraFoodBuff, tempoEntreCuras, cid, flag)		  					-- chama de novo a função passando -1 segundo pro tempo
		else
			doPlayerAddSkill(cid, buff, -qtdDeSkill, true)    		     		  -- quando acabar o efeito seta o fishing pro normal
      		setPlayerStorageValue(cid, storage_buff_ativo, -1)
			return true
		end
	else
		return true
	end
end


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

	local msg_no_vocation = "Sua Vocação não pode usar esse item!"									-- mensagem caso não tenha a voc necessária
	local msg_sucess = "Você usou o Heal Food, o efeito irá durar"..tempoDeBuff.." segundos"		-- mensagem de sucesso
	local no_have_voc = true
	
	if item.itemid == itemID then
		local tempo = getPlayerStorageValue(cid, storage) - os.time()		-- tempo recebe o tempo restante pra usar a potion de novo
		if tempo > 0 then													-- se tempo for maior que 0, significa que está em uso
			if tempo > 60 then												-- só pra mostrar bonitinho
				doPlayerSendCancel(cid,"Você precisa esperar "..math.floor(tempo/60).." minutos e "..(tempo%60).." segundos.")
			else
				doPlayerSendCancel(cid,"Você precisa esperar "..(tempo%60).." segundos.")
			end
			return true
		end

		for i=1, #need_vocation do										-- checa as vocações que podem usar o food //setadas no cabeçalho
			if getPlayerVocation(cid) == need_vocation[i] then			-- se for, aparece msg de sucesso na tela
				doPlayerSendTextMessage(cid, 22, msg_sucess)
				no_have_voc = false										-- seta a variavel de não ter voc pra false, ou seja tem a voc necessaria
				break													-- quebra o for depois disso //necessario deixar o BREAK
			end
		end
		
		if no_have_voc then
			doPlayerSendTextMessage(cid, 22, msg_no_vocation)		-- se não tiver a vocação necessaria, manda msg avisando
			return true												-- e sai da função
		end
		
		setPlayerStorageValue(cid, storage, os.time() + tempoDeBuff)		-- storage pra salvar o tempo de buff, apenas pra tirar o skill de fishing caso o player deslogue/morra
		doPlayerAddSkill(cid, buff, qtdDeSkill, true)						-- aumenta o skill setado no cabeçalho
		setPlayerStorageValue(cid, storage_buff_ativo, 1)
    	if removerItem then													-- se removerItem no cabeçalho for true REMOVE O ITEM, se não, não remove
			doRemoveItem(item.uid, 1)										-- função de remover o item, não precisa mexer
		end
		CuraFoodBuff(cid, tempoDeBuff)									-- chama a função
	end
	return true
end

 

 

coloquei como exemplo no script > 2% de cura por segundo, durante 60 segundos, OU SEJA, o player vai curar 100% (na vdd ele irá curar 120%) de life (PORÉM não irá bugar pq caso o tibia reconheça que o player está com 100% de vida, ele não extrapola esse limite de 100%, só ignora a cura).

 

obviamente vc pode alterar como quiser no script

 

tempoDebuff = 30  (durante 30 segundos)

tempoEntreCuras = 1 * 500 (a cada meio segundo)

 

e o MAIS IMPORTANTE, itemID = 9998 (trocar o 9998 pro id do item)

 

PS: caso o player morra/deslogue, irá perder o buff de cura da potion, PORÉM não perderá o skill

 

**OBRIGATÓRIAMENTE** você precisará checar isso em algum creaturescript de login

ex: data > creaturescripts > scripts > login.lua  (login.lua é um arquivo padrão que existe em todo ot)

 

procura por:

function onLogin(cid)

 

e logo abaixo adicione isso:

 

if getPlayerStorageValue(cid, 5474768) == 1 then
  local buff = SKILL_FISHING					-- PRECISA SER O MESMO do colocado no script do actions
  local qtdDeSkill = 10							-- PRECISA SER O MESMO do colocado no script do actions
  local liberar_food_pra_uso_apos_morte = true	--Liberar o uso do food após o player morrer com ele ativo? true = libera o uso / false = o player tem que esperar o cooldown do uso acabar
  
  if liberar_food_pra_uso_apos_morte then    
    setPlayerStorageValue(cid, 5474767, 0)
  end
  doPlayerAddSkill(cid, buff, -qtdDeSkill, true)   
  setPlayerStorageValue(cid, 5474768, -1)
end

 

assim que ele logar, após ter deslogado/morrido com o food la ativo, irá tirar o buff de skill que foi adicionado.

 

 

CASO queira mudar o EFEITO que sai do player, vai no teu GOD, e digita /z e o numero

ex: /z 5

vai sair no GOD um efeito

existem 69 efeitos (em tibia normal)

ai vc procura um legal, e coloca no lugar de

local efeito = 10

Editado por FeeTads
AJUSTES no for de checagem de vocação (veja o histórico de edições)

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo