Ir para conteúdo
Entre para seguir isso  
Oneshot

Sistema de Forja

Recommended Posts

Oneshot    24
Oneshot

Nome: Sistema de Forja
Autor: [s]Garou[/s]
Versão Testada: The Forgotten Server 0.3.6PL1 (8.54)

 

 

Olá.

 

Este é um sistema que eu achei aqui nos confins da quarta dimensão do meu computador. O script está desorganizado, mas creio que funcionará na maioria dos servidores.

 

INSTALAÇÃO

 

1. Crie um arquivo na sua pasta \data\lib chamado 035-item.lua, cole este conteúdo abaixo:

 

function getItemAttack(item)
   return getItemAttribute(item.uid, "attack") or getItemInfo(item.itemid).attack
end

function getItemDefense(item)
   return getItemAttribute(item.uid, "defense") or getItemInfo(item.itemid).defense
end

function getItemArmor(item)
   return getItemAttribute(item.uid, "armor") or getItemInfo(item.itemid).armor
end

function getItemExtraAttack(item)
   return getItemAttribute(item.uid, "extraattack") or getItemInfo(item.itemid).extraattack
end

function getItemExtraDefense(item)
   return getItemAttribute(item.uid, "extradefense") or getItemInfo(item.itemid).extradefense
end

function setItemAttack(item, value)
   return doItemSetAttribute(item.uid, "attack", value)
end

function setItemDefense(item, value)
   return doItemSetAttribute(item.uid, "defense", value)
end

function setItemArmor(item, value)
   return doItemSetAttribute(item.uid, "armor", value)
end

function setItemExtraAttack(item, value)
   return doItemSetAttribute(item.uid, "extraattack", value)
end

function setItemExtraDefense(item, value)
   return doItemSetAttribute(item.uid, "extradefense", value)
end

function isWeapon(item)
   return isInArray({1, 2, 3}, getItemWeaponType(item.uid))
end

function isShield(item)
   return (getItemWeaponType(item.uid) == 5 and true or false)
end

function isArmor(item)
   return (getItemWeaponType(item.uid) == 0 and true or false)
end

 

São funções extras para seu servidor que serão usadas no script principal :)

 

2. Crie um arquivo chamado 036-blacksmith.lua na sua pasta \data\lib, cole este novo conteúdo abaixo:

 

blacksmith = {
   credits = true, -- Adicionar "criado por" na descrição do item?
   variance = {-2, 2}, -- Os atributos serão aleatorizados entre X e Y
   rareConfig = {
       stone = 8306, -- Item que transforma as receitas em receitas épicas 
       chance = 1000, -- A chance da receita épica funcionar? (Padrão: 10%)
       bonus = 6 -- Se a receita épica funcionar, o item receberá um bônus de?
   }
}

forges = {     
   [2400] = { -- o item que será feito
       recipe = {{2376, 1}}, -- a receita do item
       chance = 1000 -- chance do item dar certo (100% = 1000, 1% = 10, 0.5% = 5 e etc)
   }
}

 

3. Crie, agora, um arquivo na sua pasta \data\actions\scripts de nome iron hammer.lua, em seguida adicione o conteúdo abaixo:

 

local chance = nil
local rareOption = nil

function onUse(cid, item, fromPosition, itemEx, toPosition)
   if isInArray({0, 65535}, toPosition.x) then
       return false
   elseif getTileItemById(toPosition, 2555).uid < 1 then
       return doPlayerSendCancel(cid, 'You must put the ingredients on an anvil.')
   end

   local tmp, match = {}

   for ret, v in pairs(forges) do
       for i = 1, #v.recipe do
           local g, rareStone = getTileItemById(toPosition, v.recipe[i][1]), getTileItemById(toPosition, blacksmith.rareConfig.stone)
           if g.uid > 0 and math.max(1, g.type) == v.recipe[i][2] then
               if(rareStone.uid > 0) then
                   if(blacksmith.rareConfig.chance >= math.random(0, 1000)) then
                       rareOption = true
                   end
                   doRemoveItem(rareStone.uid, 1)
               else
                   rareOption = false
               end
               table.insert(tmp, g.uid)
               if i == #v.recipe then
                   match = ret
                   chance = v.chance
               end
           else
               tmp = {}
               break
           end
       end
       if match then
           break
       end
   end

   if match then
       for i = 1, #tmp do
           doRemoveItem(tmp[i], forges[match].recipe[i][2])
       end
       if(chance >= math.random(1, 1000)) then
           doCreateItem(match, 1, toPosition)
           local i, range = getThingFromPos(toPosition), math.random(unpack(blacksmith.variance))
           if(isWeapon(i)) then
               setItemAttack(i, getItemAttack(i)+(rareOption == true and blacksmith.rareConfig.bonus or range))
               setItemDefense(i, getItemDefense(i)+(rareOption == true and blacksmith.rareConfig.bonus or range))
           elseif(isShield(i)) then
               setItemDefense(i, getItemDefense(i)+(rareOption == true and blacksmith.rareConfig.bonus or range))
           elseif(isArmor(i)) then
               setItemArmor(i, getItemArmor(i)+(rareOption == true and blacksmith.rareConfig.bonus or range))
           end
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "You have created ".. getItemInfo(match).article .." ".. (rareOption == true and "epic" or "") .." ".. getItemNameById(match)..".")
           doSendMagicEffect(toPosition, CONST_ME_MAGIC_RED)
           doSendAnimatedText(toPosition, (rareOption == true and "Epic!" or "Success!"), (rareOption == true and COLOR_YELLOW or COLOR_GREEN))
           doItemSetAttribute(i.uid, "description", "".. getItemInfo(match).description .." ".. (blacksmith.credits == true and "\nIt has forged by ".. getCreatureName(cid) .."." or ""))
           doItemSetAttribute(i.uid, "name", "".. (rareOption == true and "epic" or "") .." ".. getItemInfo(match).name .."")
       else
           doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Something went wrong.")
           doSendMagicEffect(toPosition, CONST_ME_POFF)
           doSendAnimatedText(toPosition, "Failure!", TEXTCOLOR_RED)
       end
       return true
   end
   return doPlayerSendCancel(cid, "This forge recipe doesn't exist.")
end

 

4. Abra seu actions.xml em \data\actions e cole a seguinte chave em uma nova linha:

 

<action itemid="4846" event="script" value="iron hammer.lua"/>

 

EXPLICAÇÃO

 

Para começar, gostaria de dizer que o item que está registrado na chave do actions.xml é o Iron Hammer.

 

Iron_Hammer.gif

 

O script é bem simples de ser configurado, várias explicações já são feitas no arquivo 036-blacksmith.lua, este, o único que você precisará "mexer".

 

Para adicionar novas receitas no seu script de Forja, você precisa de um conhecimento mínimo de como editar tabelas, veja abaixo:

 

forges = {     
   [2400] = { -- o item que será feito
       recipe = {{2376, 1}}, -- a receita do item
       chance = 1000 -- chance do item dar certo (100% = 1000, 1% = 10, 0.5% = 5 e etc)
   }
}

 

O que eu configurei acima foi uma receita para a Magic Sword (ID 2400) e como era apenas para testes, seria preciso apenas uma Sword (ID 2376)

 

Para adicionar uma nova receita, basta fazer isso abaixo:

 

forges = {     
   [2400] = { -- o item que será feito
       recipe = {{2376, 1}}, -- a receita do item
       chance = 1000 -- chance do item dar certo (100% = 1000, 1% = 10, 0.5% = 5 e etc)
   }[b][color=red],[/color][/b] -- Não esqueça da vírgula
       [iD DA RECEITA] = {
           recipe = {{ID 1, Q1}, {ID2, Q2}, {ID3, Q3}, ..., {IDN, QN}},
               chance = 1000
       }    
}

 

Preste atenção apenas nessa parte, que é um pouco dificil de ser compreendida:

 

{{ID 1, Q1}, {ID2, Q2}, {ID3, Q3}, ..., {IDN, QN}}

 

Aqui você irá colocar todos os IDs dos itens necessários para a receita, seguido de suas respectivas quantidades, na formatação acima. Por exemplo, se uma receita precisar de 100 Gold Nuggets e 100 Small Rubies, então ficará assim:

 

Obs: O sistema permite que você crie receitas de infinitos itens.

 

[iD DA RECEITA] = {
           recipe = {{2157, 100}, {2147, 100}},
               chance = 1000 -- 100%?
}  

 

Pronto! Agora é só você recarregar as informações do seu servidor e testar.

Qualquer problema, me avise ou não.

 

Obs²: Meu computador é uma porcaria, logo não posso gravar bons vídeos nem ruins vídeos (re-re) para demonstrar o sistema, desculpe :)

 

Obs³: Para usar o sistema no seu servidor, crie uma bigorna (ID 2555) no mapa do seu servidor, amontoe todos os itens nela e bata com o martelinho do mal.

Editado por Garou

Compartilhar este post


Link para o post
iuniX    4
iuniX

Wow, realmente ficou MUITO bem feito. Bem superior ao que temos aqui no fórum. Parabéns pelo sistema. Exclusivo com certeza

 

 

Aprovado e movido.

Compartilhar este post


Link para o post
Ramza    11
Ramza

Ótimo sistema, bem melhor do que o outro que tinha aqui no exclusivos.

Esse com certeza merece o exclusivo, abraços, parabéns, e a propósito: Rep ++

Parabéns mesmo manim xD

Compartilhar este post


Link para o post
Biozard    0
Biozard

Show!!!vai servi de muita utilidad epara min...

Compartilhar este post


Link para o post
Biozard    0
Biozard

Putz deu erro aki..vo posta

Compartilhar este post


Link para o post
Asould Acalaylaa    5
Asould Acalaylaa

Maneiro, vou testar e se achar algo posto aqui. Parabéns =]

 

@EDIT

Porque não colocou os 2 arquivos de LIB num só arquivo? Dá conflito? =o

Compartilhar este post


Link para o post
ADM Bruninho    3
ADM Bruninho

perfeito amigo o melhor sistema de forja que eu vi ate agora ... obrigado por colaborar Rep++ pra vc!

Compartilhar este post


Link para o post
Vítor Amaral    1
Vítor Amaral

Parabéns! Não pensei que fosse liberar :P

 

Rep +

Compartilhar este post


Link para o post
kacalsilvera    0
kacalsilvera

ajud aae amigo eu uso o hamer em que para funfa,, aqui nao esta dando certo naooo!

Compartilhar este post


Link para o post
iuniX    4
iuniX
ajud aae amigo eu uso o hamer em que para funfa,, aqui nao esta dando certo naooo!

 

Ficaria mais fácil se você falasse qual o erro. Não temos bola de cristal para adivinhar...

Compartilhar este post


Link para o post
Guiminhah    0
Guiminhah

Garou, obrigado por liberar. Mas eu vim aqui te dizer que os shields não estão aumentando a def quando forjados. Tem como ver o que é?

 

Abraaços!

 

 

EDIT:

Estranhamente, consegui arrumar.

 

035-item.lua:

function isShield(item)
return (getItemWeaponType(item.uid) == [b]4[/b] and true or false)
end

 

não sei porque precisei mudar para weapon type 4, já que 4 se refere a armas de distance, mas tudo bem. mas aí vai a dica pra quem não conseguiu também!

Editado por Guiminhah

Compartilhar este post


Link para o post
Kydrai    0
Kydrai

daonde você tirou que 4 é distance?

Pela lib é isso:

WEAPON_NONE = 0

WEAPON_SWORD = 1

WEAPON_CLUB = 2

WEAPON_AXE = 3

WEAPON_SHIELD = 4

WEAPON_DIST = 5

WEAPON_WAND = 6

WEAPON_AMMO = 7

 

Esse sistema de forja é muito bom.

Compartilhar este post


Link para o post
Guiminhah    0
Guiminhah

é, fumei um crack kydrai, hahaha.

mas tá aí então, um mini-fix pro teu sistema Garou. Abraços!

Compartilhar este post


Link para o post
kacalsilvera    0
kacalsilvera

No meu da um erro voce pode forja o item sem mesmo usar a pedra (id 9636),basta adicionar o item da receita id(2454 ou 7380) e daleee marreta que forja e a pedra como que fica nesta historia?vou ter que dar pro doido daew de cima fuma? )=

<<script aeee>>\/

 

    credits = true, -- Adicionar "criado por" na descrição do item?
   variance = {-2, 2}, -- Os atributos serão aleatorizados entre X e Y
   rareConfig = {
       stone = 9636, -- Item que transforma as receitas em receitas épicas 
       chance = 1000, -- A chance da receita épica funcionar? (Padrão: 10%)
       bonus = 6 -- Se a receita épica funcionar, o item receberá um bônus de?
   }
}

forges = {     
   [7772] = { -- o item que será feito
       recipe = {{2454, 1}}, -- a receita do item
       chance = 1000 -- chance do item dar certo (100% = 1000, 1% = 10, 0.5% = 5 e etc)
   },

   [7771] = { -- o item que será feito
       recipe = {{7380, 1}}, -- a receita do item
       chance = 1000 -- chance do item dar certo (100% = 1000, 1% = 10, 0.5% = 5 e etc)
   }
}

Editado por kacalsilvera

Compartilhar este post


Link para o post
Salilo    0
Salilo

Parabéns pelo Script :D me ajudou muito!

 

ps: daria para colocar para fazer bolts (mais de 1)?

ex: 50 Bolt (id:2543) Receita: 10 wood (id:5901)

Compartilhar este post


Link para o post
XxHeavenxX    0
XxHeavenxX

ei, aqui n ta funfando :X tipo, n tá dando nenhum erro na hora de ligar o server e talz, mas quando eu emplho os itens na bigorna e do use with no hammer em cima dela, fala "You cannot use this object." =~~ alguem dá um help plx

Compartilhar este post


Link para o post
lucasreales    0
lucasreales

Bom queria saber se esse Scripting tb funciona nos servidores 8.60

Compartilhar este post


Link para o post
namco    0
namco

Gostei muito do Script e resolvi usa-lo em meu servidor, ate ai tudo bem, instalei tudo certinho, liguei o servidor, nao deu nenhum erro, mas na hora eu coloco os itens em cima da bigorna e uso o hammer neles, nao acontece nada. Gostaria de saber o motivo, sera por causa da versao? (8.70)

Compartilhar este post


Link para o post
luishtfs    1
luishtfs

Show, vou testar

Compartilhar este post


Link para o post
Din pajeh II    0
Din pajeh II

Gostei do topico só gostaria de saber como faço para por exemplo, depois de forjar o item ele vir com attack + 6 ou magiclevel +1? obrigado

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×