Ola galera do XTibia.
Não costumo liberar muitos dos meus sistemas aqui, mas como fiz esse, que ficou um pouco simples demais e não se encaixava com oque eu precisava, então tive que fazer outro, a versão 2.0 que não sera liberada por agora.
Como o script funciona
Eh um MoveEvent entao quando voce jogar um item qualquer no item selecionado pela tag do script ele verifica se faz parte de uma receita, e se for ele começa aquela receita.
Se você errar o próximo item, ou qualquer outro da receita, ela para e você perde tudo que já foi usado.
Instalação
De forma bem simples, siga o passo-a-passo no spoiler abaixo.
Va para X:/.../SeuServidor/data/movements/scripts e crie um arquivo lua qualquer, nomeie-o para oque quiser, aconselho algo como Alchemy ou Chemistry.
Em seguida abra o arquivo, delete tudo dentro, se tiver, e coloque o seguinte code:
function onAddItem(moveitem, tileitem, position, cid) -- Script feito por Uissu (Zorrox) e postado apenas para o Forum XTibia, por favor nao remova os creditos nem use-o como de sua autoria. Obrigado local esucc = 29 local efail = 2 local eboom = 4 local eburn = 15 local estar = 27 local recipes = { [5944] = {-- health potion fc = 2, lid = 7620, count = 1, [1] = {id = 7636, count = 1}, [2] = {id = "stop"}}, [2177] = {-- mana potion fc = 1, lid = 7618, count = 1, [1] = {id = 7636, count = 1}, [2] = {id = "stop"}} } if moveitem.type == 0 then count = 1 else count = moveitem.type end if getItemAttribute(tileitem.uid, "i") == nil then doItemSetAttribute(tileitem.uid, "i", 0) end if getItemAttribute(tileitem.uid, "i") <= 0 then if recipes[moveitem.itemid] == nil then doPlayerSendCancel(cid, "This item is not part of a recipe.") doSendMagicEffect(position, efail) doRemoveItem(moveitem.uid) return TRUE end if recipes[moveitem.itemid].fc ~= count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The quantity is not right.") doSendMagicEffect(position, efail) doSendAnimatedText(position, "FAIL!", COLOR_YELLOW) doItemSetAttribute(tileitem.uid, "fid", 0) doItemSetAttribute(tileitem.uid, "i", 0) doRemoveItem(moveitem.uid) return TRUE else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "A new recipe has started. Remember, if you miss it you\'ll need to start it over.") doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You\'ve added a "..getItemNameById(moveitem.itemid).." to your recipe successfully!") doSendMagicEffect(position, estar) doSendAnimatedText(position, "START!", COLOR_PURPLE) doItemSetAttribute(tileitem.uid, "fid", moveitem.itemid) doItemSetAttribute(tileitem.uid, "i", 1) doRemoveItem(moveitem.uid) return TRUE end end if recipes[getItemAttribute(tileitem.uid, "fid")][getItemAttribute(tileitem.uid, "i")].id ~= moveitem.itemid then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "This item is not part of the recipe.") doSendMagicEffect(position, eboom) doSendAnimatedText(position, "FAIL!", COLOR_YELLOW) doItemSetAttribute(tileitem.uid, "fid", 0) doItemSetAttribute(tileitem.uid, "i", 0) doRemoveItem(moveitem.uid) return TRUE end if recipes[getItemAttribute(tileitem.uid, "fid")][getItemAttribute(tileitem.uid, "i")].count ~= count then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "The quantity is not right.") doSendMagicEffect(position, efail) doSendAnimatedText(position, "FAIL!", COLOR_YELLOW) doItemSetAttribute(tileitem.uid, "fid", 0) doItemSetAttribute(tileitem.uid, "i", 0) doRemoveItem(moveitem.uid) return TRUE end if recipes[getItemAttribute(tileitem.uid, "fid")][getItemAttribute(tileitem.uid, "i")+1].id ~= "stop" then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You\'ve added a "..getItemNameById(moveitem.itemid).." to your recipe successfully!") doSendMagicEffect(position, eburn) doSendAnimatedText(position, "SUCCESS!", COLOR_RED) doItemSetAttribute(tileitem.uid, "i", getItemAttribute(tileitem.uid, "i")+1) doRemoveItem(moveitem.uid) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You\'ve added a "..getItemNameById(moveitem.itemid).." to your recipe successfully!") if recipes[getItemAttribute(tileitem.uid, "fid")].count == 1 then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You\'ve received "..getItemArticleById(recipes[getItemAttribute(tileitem.uid, "fid")].lid).." "..getItemNameById(recipes[getItemAttribute(tileitem.uid, "fid")].lid)..".") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "You\'ve received ("..recipes[getItemAttribute(tileitem.uid, "fid")].count..") "..getItemNameById(recipes[getItemAttribute(tileitem.uid, "fid")].lid)..".") end doSendMagicEffect(position, esucc) doSendAnimatedText(position, "FINISH!", COLOR_GREEN) doPlayerAddItem(cid, recipes[getItemAttribute(tileitem.uid, "fid")].lid, recipes[getItemAttribute(tileitem.uid, "fid")].count) doItemSetAttribute(tileitem.uid, "i", 0) doItemSetAttribute(tileitem.uid, "fid", 0) doRemoveItem(moveitem.uid) end return TRUE end
Em seguide volte para a pasta /movements e abra o movements.xml.
Adiciona esta TAG:
<movevent type="AddItem" tileitem="1" itemid="id1;id2;idx" event="script" value="ho/nomedoscript.lua"/>
Mude nomedoscript para o nome do arquivo .LUA dentro da pasta Scripts.
Mude os ids para os IDs de onde voce quer que sejam jogados os items, aconselho colocar o Counter, ID: 1620.
Como adicionar novas receitas
Tambem de forma muito simples apenas mude tudo que estiver colorido DE VERDE na tabela a seguir como quiser:
local recipes = {
[IDDOPRIMEIROITEM] = {
fc = NUMERODEITEMSDOPRIMEIROITEM (Ex: 20 para 20 Gold Coins, OBS: Deixa 1 se o item nao for StackAble (nao juntar)),
lid = NUMERODOITEMGERADONOFINAL (Ex: ID da Scarab Coin),
count = QUANTOSITEMSSERAOGERADOS (Ex: 20 para 20 Scarab Coins),
[1] = {id = SEGUNDOITEMDARECEITA, count = QUANTOS},
[2] = {id = TERCEIROITEMDARECEITA, count = QUANTOS},
[3] = {id = "stop"}} (OBS: Aqui sera aonde o Script vai parar, o item anterior a esse vai ser o ultimo para que a receita acabe)
}
Imagens






As imagens foram feitas na versão 2.0