Ir para conteúdo

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
https://xtibia.com/forum/topic/168635-alchemy-system-v10-by-uissu/
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
https://xtibia.com/forum/topic/168635-alchemy-system-v10-by-uissu/#findComment-1109915
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
https://xtibia.com/forum/topic/168635-alchemy-system-v10-by-uissu/#findComment-1110163
Compartilhar em outros sites

×
×
  • Criar Novo...