Ir para conteúdo

Alchemist System - [Sistema De Alquimia]


Posts Recomendados

Esse script é um simples sistema de alquimia, porém é diferente dos outros. Alquimia era uma prática antiga que combinava alguns elementos a fim de formar outros. Esse meu sistema, faz com que os itens sejam "misturados" em um caldeirão e se pareça mais como era antigamente. Abaixo, um vídeo de demonstração e de como instalar. Deixei as mesmas posições no script pra que vocês possam se basear ao instalar no seu. Bom, vamos ao script:

 

-- Como funciona: O player deve colocar os itens da receita emcima do counter (balcão de pedra) e puxar a alavanca. Feito isso, os itens serão "misturados" no caldeirão e com a colher (wooden spoon) o player poderá pegar o seu item.

 

 

Crie um arquivo.xml em data/mods chamado Alchemist.xml e cole isto dentro:

<?xml version="1.0" encoding="UTF-8"?>  
<mod name="Alchemist System" version="1.0" author="Leoxtibia" contact="none" enabled="yes">  
<config name="alch_sys"><![CDATA[

counter = {x = 17, y = 56, z = 7}
efeitos = {x=17, y=53, z=7}

receitas = {
{items = {{2160,1}, {2157,2}} , itemgain = {{5878,100}}, storage = 56000},
{items = {{2148,5}, {2155,1}} , itemgain = {{2113,1}}, storage = 56001},
{items = {{2498,1}, {2113,1}} , itemgain = {{2472,1}}, storage = 56002}
}

function Caldeiron()
  local B  = {  
   {3693,{x=17, y=53, z=7, stackpos = 1}},  
   {3694,{x=18, y=53, z=7, stackpos = 1}}
   }
   for i = 1, #B do
   doTransformItem(getThingfromPos(B[i][2]).uid,getTileItemById(B[i][2], B[i][1]).uid == 0 and B[i][1] or (B[i][1]-4))
   end
   end

 function getItemsInPos(items, pos)
 for i = 1,#items do
    local stack = getTileItemById(pos, items[i][1])
	  if stack.uid > 0 and math.max(1, stack.type) >= items[i][2] and i == #items then
	    return true
	 end
 end
return false
end

 function doRemoveItensInPos(items, pos)
   local items = type(items) == "table" and items or {items}  
	  for i = 1, table.maxn(items) do
    doRemoveItem(getThingFromPos({x=pos.x,y=pos.y,z=pos.z,stackpos=2}).uid)
  end
  return nil
   end

 function effets(position,delay)
  local text = {"Ishhh!", "Kaboom", "Tic Tac", "BUM!", "Blop Blop!", "Cronch!"}
  local effects = {2,  6, 25, 31, 36,40, 54, 51, 65, 66, 67, 68}
 if delay ~= 0 then
  doSendAnimatedText(position, text[math.random(1, #text)], math.random(1, 255))
  doSendMagicEffect(position, effects[math.random(1, #effects)])
  addEvent(effets, 1000, position, delay -1)
 end
end]]></config>
<action actionid="4780" event="script"><![CDATA[
domodlib('alch_sys')
function onUse(cid, item, fromPosition, itemEx, toPosition)
 doTransformItem(item.uid, item.itemid == 1945 and 1946 or 1945)
   for _, t in ipairs(receitas) do
	    if getItemsInPos(t.items, counter) then
		   doRemoveItensInPos(t.items, counter)
		   effets(efeitos,6)
		   Caldeiron()
		   return setPlayerStorageValue(cid, t.storage, 1)
	    end
   end
 return doPlayerSendCancel(cid, "You must put the correct items in the counter.")
end]]></action>
<action itemid="2567" event="script"><![CDATA[
domodlib('alch_sys')
function onUse(cid, item, fromPosition, itemEx, toPosition)
   if itemEx.actionid == 4781 then
  for _, x in ipairs(receitas) do
	 if  getPlayerStorageValue(cid, x.storage) >= 0 then
		 for i=1,#x.itemgain do
		   doPlayerAddItem(cid, x.itemgain[i][1], x.itemgain[i][2])
		   doPlayerPopupFYI(cid, "You have prepared ".. x.itemgain[i][2] .." ".. getItemNameById(x.itemgain[i][1]) ..".")
		 end
		   Caldeiron()
		   setPlayerStorageValue(cid, x.storage, -1)
	 end
  end
   end
return true
end]]></action>
</mod>

 

Configuração:

 

counter = {x = 17, y = 56, z = 7} -- local do counter (balcão) onde os items estarão.

efeitos = {x=17, y=53, z=7} -- é a primeira posição mostrada no vídeo

 

receitas = {

{items = {{2160,1}, {2157,2}} , itemgain = {{5878,100}}, storage = 56000}, --- items = {ITEMS DA RECEITA}, itemgain={ITEMQUEGANHARÁ}

{items = {{2148,5}, {2155,1}} , itemgain = {{2113,1}}, storage = 56001},

{items = {{2498,1}, {2113,1}} , itemgain = {{2472,1}}, storage = 56002}

}

 

function Caldeiron() ----- [só EDITE AS POSIÇÕES]

local B = {

{3693,{x=17, y=53, z=7, stackpos = 1}}, --- PRIMEIRA POSIÇÃO no vídeo -- não mexa no stackpos

{3694,{x=18, y=53, z=7, stackpos = 1}} -- segunda posição no vídeo -- n mexa no stackpos

 

Para adicionar mais receitas, é só adicionar mais uma linha, mudando o storage para +1. Lembrando que a última linha não tem vírgula no final.

{items = {{2666,1}, {2671,1}} , itemgain = {{2672,1}}, storage = 56003}

 

Ainda pretendo incrementar o sistema com novas funções. Mas, por hoje é isso. Espero que tenham gostado.

Link para o comentário
Compartilhar em outros sites

@caotic

Vlw caotic, considerando que estou nisso por volta de 1 mês, acho que consegui aprender um pouco com scripts feitos por scripters mais experientes como você e outros..

 

@Raidou

é, também não tinha encontrado algo parecido. Espero que tenha te ajudado.

Link para o comentário
Compartilhar em outros sites

mto bom cara seu script pode ate ser q caia no meu ot, estou reunindo os melhores scripts do xtibia pra botar no meu ot, so vo ar uma analizada e se for massa mermo concerteza vai pra lá, ah sim, ele vai sair em alguns dias!

Link para o comentário
Compartilhar em outros sites

  • 5 months later...

desculpa tar dando flood....mais como estou usando esse script so agora e descobri 1 bug se o criador quiser arrumar , ai e com ele......não ta presisando dos 2 itens...tipo se eu usa 1 iten q pede e qualquer outro iten pra dar os 2 itens do script ele me da o item....

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 3 months later...
×
×
  • Criar Novo...