Ir para conteúdo
  • Cadastre-se

(Resolvido)Criar Mana/Health Cask em 8.6


Ir para solução Resolvido por Agaka,

Posts Recomendados

.Qual servidor ou website você utiliza como base? 

TFS 0.4 8.6

 

Fala galera,

 

Seria possível através de scripts, criar um sistema de Cask semelhante ao TibiaRL?

Um barril, em que ao dar use, retirar os flasks e devolve com mana/health potion? e ter uma quantidade limitada para aquele cask, por exemplo, após 1000 uses, desabilita ele.

 

Obrigado,

Abs!

 

Link para o post
Compartilhar em outros sites

Quando o usuário clicar no Barril ja contaria como 1 use?

Contribuições:
 

=> Distribuições/Servidores

  1. [8.60] The Forgotten Server 1.3 (COMPILADO WIN x64)

 

=> Scripts/Códigos/Tutoriais

  1. Pokemon pescado aparece em volta do seu pokemon
  2. [Gesior]Dobrar pontos PagSeguro a partir de x valor doado

 

 Gostou de alguma contribuição? Rep +?

Link para o post
Compartilhar em outros sites
Em 07/07/2019 em 13:41, Rayo disse:

Quando o usuário clicar no Barril ja contaria como 1 use?

 

Sim, exato. Ai ao dar os 100 use, por exemplo, que seria o limite maximo, o cask fica nulo. ao clicar apareceri msg que o barril esta vazio, algo do tipo...

Exatamente como os casks no RL.

Link para o post
Compartilhar em outros sites
5 minutos atrás, JoviM disse:

@Aldimun Entendi o que você quer, mas, isso vale para todas as potions (normal, strong, great) ? Existe algum limite de quantas flasks eu posso encher a cada use?

 

Ai teria um barril (id) para cada tipo de potion.

Em relação ao limite, ao dar use, retira a qtda de flasks q tiver na mão do player, e devolve com a mesma qtda do respectivo potion daquele barril.

E o barril teria um limite (tipo cargas), de 1.000 potions reabastecidos. ao término dos 1.000, o barril fica inativo a função.

Link para o post
Compartilhar em outros sites

@Aldimun Para configurar é bem simples, segue como está no script e gg. Entre os colchetes [...] vai o id do barril.

 

local config = {

	[1445] = {

		str = 5050512, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7618 -- ID potion
	},
	[3365] = {

		str = 50505326, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7620 -- ID potion
	}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local barrel = config[item.itemid]
	if barrel then
		if getPlayerStorageValue(cid, barrel.str) < barrel.uses then
			local flasks = getPlayerItemCount(cid, barrel.flask)
			if flasks > 0 then
				doPlayerRemoveItem(cid, barrel.flask, flasks)
				doPlayerAddItem(cid, barrel.potion, flasks)
				setPlayerStorageValue(cid, barrel.str, (getPlayerStorageValue(cid, barrel.str) + 1))
			else
				doPlayerSendTextMessage(cid, 27, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

No login.lua adicione isso:

local barrelStr = {11231231, 123123123, 1231231} -- Todas as storages dos barris
for i,_ in ipairs(barrelStr) do
	if getPlayerStorageValue(cid, barrelStr[i]) < 0 then
		setPlayerStorageValue(cid, barrelStr[i], 1)
	end
end

O código acima vai fazer com que todos os player, ao logar, recebam a storage 1, assim não ocorrerá erro no contador de usos lá no barril.

OBS: Lembre-se de não deixar as storages iguais.

Editado por JoviM (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
1 hora atrás, JoviM disse:

@Aldimun Para configurar é bem simples, segue como está no script e gg. Entre os colchetes [...] vai o id do barril.

 


local config = {

	[1445] = {

		str = 5050512, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7618 -- ID potion
	},
	[3365] = {

		str = 50505326, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7620 -- ID potion
	}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local barrel = config[item.itemid]
	if barrel then
		if getPlayerStorageValue(cid, barrel.str) < barrel.uses then
			local flasks = getPlayerItemCount(cid, barrel.flask)
			if flasks > 0 then
				doPlayerRemoveItem(cid, barrel.flask, flasks)
				doPlayerAddItem(cid, barrel.potion, flasks)
				setPlayerStorageValue(cid, barrel.str, (getPlayerStorageValue(cid, barrel.str) + 1))
			else
				doPlayerSendTextMessage(cid, 27, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

No login.lua adicione isso:


local barrelStr = {11231231, 123123123, 1231231} -- Todas as storages dos barris
for i,_ in ipairs(barrelStr) do
	if getPlayerStorageValue(cid, barrelStr[i]) < 0 then
		setPlayerStorageValue(cid, barrelStr[i], 1)
	end
end

O código acima vai fazer com que todos os player, ao logar, recebam a storage 1, assim não ocorrerá erro no contador de usos lá no barril.

OBS: Lembre-se de não deixar as storages iguais.

 

Dúvida de leigo...

Adiciono o script como actions?

Link para o post
Compartilhar em outros sites

Em data/actions/scripts, crie um arquivo .lua, nomeie-o e cole o código dentro.

Spoiler

local config = {

	[1445] = {

		str = 264017, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7618 -- ID potion
	},
	[3365] = {

		str = 264028, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7620 -- ID potion
	}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local barrel = config[item.itemid]
	if barrel then
		if getPlayerStorageValue(cid, barrel.str) < barrel.uses then
			local flasks = getPlayerItemCount(cid, barrel.flask)
			if flasks > 0 then
				doPlayerRemoveItem(cid, barrel.flask, flasks)
				doPlayerAddItem(cid, barrel.potion, flasks)
				setPlayerStorageValue(cid, barrel.str, (getPlayerStorageValue(cid, barrel.str) + 1))
			else
				doPlayerSendTextMessage(cid, 27, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

 

 

Em data/actions, abra o arquivo actions.xml e adicione esta tag:

<action itemid="1445;3365" event="script" value="SEU ARQUIVO.lua"/>

Em itemid você passa o id dos barris e separa eles por vírgulas, assim você não precisa criar 1 tag para cada barril.

 

Em data/creaturescripts/scripts, abra o login.lua e procure pela função onLogin(cid). Abaixo dela adicione:

local barrelStr = {264017, 264028} -- Coloque aqui as storages de cada barril
	for i,_ in ipairs(barrelStr) do
		if getPlayerStorageValue(cid, barrelStr[i]) < 0 then
			setPlayerStorageValue(cid, barrelStr[i], 0)
		end
	end

OBS: As storages de cada barril precisam ser diferentes uma da outra.

Esse script que você vai adicionar em creaturescripts é pra que quando o player logue ele já receba a storage 0 e a contagem de usos (quantas vezes ele poderá usar o barril) ocorra sem erros.

Link para o post
Compartilhar em outros sites

Me soou como gambiarra esse script. Você chegou a testar dar use com 2 players, reiniciar o server, logar com apenas um dos jogadores e checara quantidade de cargas?

Editado por marcot (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
5 horas atrás, JoviM disse:

Em data/actions/scripts, crie um arquivo .lua, nomeie-o e cole o código dentro.

  Mostrar conteúdo oculto


local config = {

	[1445] = {

		str = 264017, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7618 -- ID potion
	},
	[3365] = {

		str = 264028, -- Storage
		uses = 2, -- Quantas vezes pode usar o barril
		flask = 7636, -- ID flask
		potion = 7620 -- ID potion
	}
}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local barrel = config[item.itemid]
	if barrel then
		if getPlayerStorageValue(cid, barrel.str) < barrel.uses then
			local flasks = getPlayerItemCount(cid, barrel.flask)
			if flasks > 0 then
				doPlayerRemoveItem(cid, barrel.flask, flasks)
				doPlayerAddItem(cid, barrel.potion, flasks)
				setPlayerStorageValue(cid, barrel.str, (getPlayerStorageValue(cid, barrel.str) + 1))
			else
				doPlayerSendTextMessage(cid, 27, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

 

 

Em data/actions, abra o arquivo actions.xml e adicione esta tag:


<action itemid="1445;3365" event="script" value="SEU ARQUIVO.lua"/>

Em itemid você passa o id dos barris e separa eles por vírgulas, assim você não precisa criar 1 tag para cada barril.

 

Em data/creaturescripts/scripts, abra o login.lua e procure pela função onLogin(cid). Abaixo dela adicione:


local barrelStr = {264017, 264028} -- Coloque aqui as storages de cada barril
	for i,_ in ipairs(barrelStr) do
		if getPlayerStorageValue(cid, barrelStr[i]) < 0 then
			setPlayerStorageValue(cid, barrelStr[i], 0)
		end
	end

OBS: As storages de cada barril precisam ser diferentes uma da outra.

Esse script que você vai adicionar em creaturescripts é pra que quando o player logue ele já receba a storage 0 e a contagem de usos (quantas vezes ele poderá usar o barril) ocorra sem erros.

 

 

obrigado @JoviM pelo tutorial rsrs

 

Ao iniciar o server, recebi o seguinte erro;

error.png

Consegue me ajudar?

 

Link para o post
Compartilhar em outros sites

@marcot Não encontrei nenhum problema. Caso tenha encontrado algo pode me falar, se quiser.

@Aldimun Esse é um erro de caracteres especiais, eles podem ser copiados junto com o código ao dar ctrl+c. Copia daqui https://pastebin.com/Zs69U3Gk

Editado por JoviM (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
3 horas atrás, JoviM disse:

@marcot Não encontrei nenhum problema. Caso tenha encontrado algo pode me falar, se quiser.

@Aldimun Esse é um erro de caracteres especiais, eles podem ser copiados junto com o código ao dar ctrl+c. Copia daqui https://pastebin.com/Zs69U3Gk

 

Funcionou!

Só um detalhe...

 

Minha ideia era fazer igual ao sistema de cask do tibia real, onde o player compra esse barril como furniture para colocar em sua house.

O que houve foi que, ao terminar as cargas do barril do ID X (receber a msg q esta vazio), e criar um outro barril do mesmo ID X, ele continua não permitindo dar use novamente.

Queria q cada barril fosse único.

Seria possível?

 

Obrigado até agora.

Link para o post
Compartilhar em outros sites

 

4 horas atrás, JoviM disse:

@Aldimun 

EDIT: Pesquisei aqui e pelo que entendi ao gastar as 100 cargas do barril, você só poderá usar se colocar um novo barril seria isso?

No tibia RL, o barriu some após a carga acabar.

https://www.tibiawiki.com.br/wiki/Mana_Cask

 

Uma dica:

Para fazer funcionar na house, basta adicionar o barril em um constructionkit em actions, editar o item.otb para poder dar moveable no barril e um script onMove para que o mesmo não seja possível ser arrastado para fora da house.

Cria um barril em items.xml/otb ou edita algum que não será utilizado, adiciona cargas nele e decayto 0

Exemplo:

<attribute key="charges" value="1000"/>
<attribute key="showcharges" value="1"/>
<attribute key="decayTo" value="0"/>

Você deve por também:

<attribute key="fluidSource" value="mana potion"/>

ou

<attribute key="fluidSource" value="health potion"/>

 

Acho que só isso já deve funcionar. Claro que, você deve testar para saber se as cargas estão contando ao utilizar um vial vazio no cask. Também precisa ver se ao utilizar 100 vials vazios, ele vai encher todos de uma só vez :)

 

 

Eu criei roshamuul 8.6, oramond, war zone... Tudo é possível, só não fica perfeito XD

Até exercise weapon para 8.6 eu fiz, mas a galera q joga na 8.6 nem sabe oq é isso :( 

Editado por KOLISAO (veja o histórico de edições)

 

Link para o post
Compartilhar em outros sites
  • Solução

@KOLISAO Entendi.. thanks!

@Aldimun Vou deixar aqui o script que criei, se quiser usar fica a seu critério hue

Spoiler

local config = {

--	[caskID] = {flask, potion}
	[12661] = {7636, 7618}, -- Health potion
	[12662] = {7636, 7620}, -- Mana potion
	[12663] = {7634, 7588}, -- Strong health potion
	[12664] = {7634, 7589}, -- Strong mana potion
	[12665] = {7635, 7591}, -- Great health potion
	[12666] = {7635, 7590} -- Great mana potion

}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local cask = config[item.itemid]
	if cask then
		local caskCharge = getItemAttribute(item.uid, "charges")
		if caskCharge > 0 then
			local amount = getPlayerItemCount(cid, cask[1])
			if amount > 0 then
				doPlayerRemoveItem(cid, cask[1], amount)
				doPlayerAddItem(cid, cask[2], amount)
				doItemSetAttribute(item.uid, "charges", (getItemAttribute(item.uid, "charges") - 1))
			else
				doPlayerSendTextMessage(cid, 23, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

 

 

Editado por JoviM (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

tem como fazer um igual os mana keg? 

porém só pra quem é PREMIUM?

https://www.tibiawiki.com.br/wiki/Mana_Keg

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

é se não for abusar de mais como faço pra usar igual esse?

Decoration Kit.gif Decoration Kit
It weighs 0.00 oz.
You bought this item in the Store.
This item cannot be traded.
Unwrap it in your own house to create a <nome do item>.
Atributos: Pode ser desembrulhado. Item agrupável. 
Loot de: Ninguém.
   
Notas: Este item não pode ser comercializado pelo Mercado. Ao comprar qualquer objeto de decoração na Store, ele virá dentro de um Decoration Kit. Você pode desembrulhar os objetos jogando no chão NO LOCAL ONDE VAI FICAR O CASK na sua house clicando com o botão direito do mouse e em "USE", quando dentro de sua casa. o decoration kit some é fica o cask no chão. Segue algumas regras do item:
  • O item só ficará agrupável se for do mesmo móvel;
  • O kit só pode ser guardado na BackPack, no Inbox ou no Depot Chest;
  • Para desembrulhar o móvel, você deve ser o dono da casa;
  • Você não pode dar "trade" no kit;
  • Se você perder a sua casa, o móvel será enviado para o seu inbox.
Em 14/07/2019 em 13:48, JoviM disse:

@KOLISAO Entendi.. thanks!

@Aldimun Vou deixar aqui o script que criei, se quiser usar fica a seu critério hue

  Mostrar conteúdo oculto


local config = {

--	[caskID] = {flask, potion}
	[12661] = {7636, 7618}, -- Health potion
	[12662] = {7636, 7620}, -- Mana potion
	[12663] = {7634, 7588}, -- Strong health potion
	[12664] = {7634, 7589}, -- Strong mana potion
	[12665] = {7635, 7591}, -- Great health potion
	[12666] = {7635, 7590} -- Great mana potion

}

function onUse(cid, item, fromPosition, itemEx, toPosition)

local cask = config[item.itemid]
	if cask then
		local caskCharge = getItemAttribute(item.uid, "charges")
		if caskCharge > 0 then
			local amount = getPlayerItemCount(cid, cask[1])
			if amount > 0 then
				doPlayerRemoveItem(cid, cask[1], amount)
				doPlayerAddItem(cid, cask[2], amount)
				doItemSetAttribute(item.uid, "charges", (getItemAttribute(item.uid, "charges") - 1))
			else
				doPlayerSendTextMessage(cid, 23, "You don't have empty potion flasks.")
			end
		else
			doPlayerSendTextMessage(cid, 23, "It is empty.")
		end
	end
	return true
end

 

 

 

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo