Ir para conteúdo

Alchemy System V1.0 By Uissu


bepokemon

Posts Recomendados

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

 

 

16763324.png

91621053.png

45633974.png

89471555.png

38982081.png

43120400.png

As imagens foram feitas na versão 2.0

 

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

Muinto bom REP+

obrigado por liberar o script.

 

Edit: gostaria de saber se tem alguma script pra por em 1 porta pra so 1 pessoa pode entra por vez.

Pq no ot a turma pode pega o item na hora que joga o primeiro item outra pessoa joga 1 item la e da errado dai o cara perde tudo.

E 1 duvida pra por + de 1 receita tem que criar outro script?

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

Muinto bom REP+

obrigado por liberar o script.

 

Edit: gostaria de saber se tem alguma script pra por em 1 porta pra so 1 pessoa pode entra por vez.

Pq no ot a turma pode pega o item na hora que joga o primeiro item outra pessoa joga 1 item la e da errado dai o cara perde tudo.

E 1 duvida pra por + de 1 receita tem que criar outro script?

 

Entao, eu ja tinha pensado nisso, a versao 2.0 nao permite outras pessoas jogarem items e atrapalhar na receita.

Como esse tal script no meu OT vai ser para items dentro de casa eu nunca realmente precisaria, mas voce pode usar um Script que faz a porta teleportar para o outro lado .. Tipo as que sao usadas em Trainers .. E que se ja tivesse alguem no lugar nao pudesse entrar mais ninguem.

Nao, nao precisa, eh soh voce adicionar como eu falei no primeiro topico no script principal .. =) Boa sorte, qualquer coisa soh perguntar.

 

bump

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...