Ir para conteúdo

[Action] Sistema De Refinamento Perfeito!


Doidin

Posts Recomendados

Sistema de Refinamento Perfeito!

Olá pessoal estava andando pelo Otland e me deparei com este script, porem ele está atualizado e os créditos vão inteiramente para o Mock, criador do mesmo.

 

Este script funciona da seguinte maneira é uma pedra preciosa (o script) e quando você usa ela em alguma arma ela adiciona alguns pontos de ataque e defesa a mais durante algum tempo e depois volta ao normal.

 

Vamos ao que interessa:

 

Formulario:

Autor: Mock.

Servidor testado: TFS 0.3.6

Versão: 1.1

 

Vá ate data/actions/actions.xml e adicione essa tag:

 

<action itemid="8306" script="upgrade.lua"/>

Depois salve e vá na pasta scripts e crie o upgrade.lua e dentro dele coloque isto:

 

  --- Perfect refine system by Mock the bear (MTB).
--- Email: [email]mock_#####@hotmail.com[/email]
local gain = {
gainArmor='&p+1',loseArmor='&p-1',
gainShield='&s+#',loseShield='&s-(#+1)',
gainAttack='&a+(2*(#))',loseAttack='&a-(2*(#+1))',
gainDefense='&d+(2*(#))',loseDefense='&d-(2*(#+1))',
chance='100/((#*(1/(@/2)))*(@/2))',  -- Eu fiz essa equação para variar de +0 a +7 o item
--- Essa equação deve retornar em % a chance do item se refinar (0-100) 100 = sempre, 0 = nunca
maxlvl = 7,
blocked_ids = {2488,8881}
}
-- &a = weapon attack
-- &d = weapon defense
-- &s = shield defense
-- &p = armor defense
-- # = nivel do item
-- @ = max level
if not setItemName then
       function setItemName(uid,name)
        return doItemSetAttribute(uid,'name',name)
       end
       function setItemArmor(uid,name)
        return doItemSetAttribute(uid,'armor',name)
       end
       function setItemDefense(uid,name)
        return doItemSetAttribute(uid,'defense',name)
       end
       function setItemAttack(uid,name)
        return doItemSetAttribute(uid,'attack',name)
       end
       function getItemAttack(uid)
          return getItemAttribute(uid,'attack')
       end
       function getItemDefense(uid)
          return getItemAttribute(uid,'defense')
       end
       function getItemArmor(uid)
          if type(uid) == 'number' then
                 return getItemAttribute(uid,'armor')
          else
                 return getItemInfo(uid.itemid).armor
          end
       end
end
function isArmor(uid) -- Function by Mock the bear.
        if (getItemArmor(uid) and getItemArmor(uid) ~= 0 and not getItemInfo(uid.itemid,'attack') and not getItemInfo(uid.itemid,'defense') and getItemWeaponType(uid.uid) == 0) then
           return true
        end
        return false
end
function isWeapon(uid) -- Function by Mock the bear.
        uid = uid or 0
        local f = getItemWeaponType(uid)
        if f == 1 or f == 2 or f == 3 then
            return TRUE
        end
        return FALSE
end
function isShield(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 4 then
            return TRUE
        end
        return FALSE
end

function getWeaponLevel(uid) -- Function by Mock the bear.
  uid = uid or 0
  local name = getItemName(uid)
  local lvl = string.match(name,'+(%d)')
  return tonumber(lvl) or 0
end
function doTransform(s,i) -- Function by Mock the bear.
   local c = string.gsub(s,'@',gain.maxlvl)
   local c = string.gsub(c,'&a',getItemAttack(i.uid) or getItemInfo(i.itemid).attack)
   local c = string.gsub(c,'&d',getItemDefense(i.uid) or getItemInfo(i.itemid).defense)
   local c = string.gsub(c,'&s',getItemDefense(i.uid) or getItemInfo(i.itemid).defense)
   local c = string.gsub(c,'&p',getItemArmor(i.uid) or getItemInfo(i.itemid).armor)
   local c = string.gsub(c,'#',getWeaponLevel(i.uid))
   local q,err = loadstring('return '..c)
   assert(q,err)
   return assert(q())
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
        toPosition.stackpos = 255
        if isInArray(gain.blocked_ids, itemEx.itemid) == TRUE
         or getItemWeaponType(itemEx.uid) > 4
          or (getItemWeaponType(itemEx.uid) == 0
           and isArmor(itemEx) == FALSE)
            or itemEx.itemid == 0 then
               doPlayerSendTextMessage(cid, 24,"You cant refine this item.")
               return TRUE
        end
        if isCreature(itemEx.uid) == TRUE then
           return FALSE
        end
       local level = getWeaponLevel(itemEx.uid)
       local chance = doTransform(gain.chance,itemEx)
       if chance >= math.random(0,100) or item.actionid >= 1000 or (item.actionid == 500 and math.random(0,100) <= 25) then
          if level+1 > gain.maxlvl then
             doSendMagicEffect(toPosition, 2)
             return doPlayerSendTextMessage(cid, 24,"Your item is on max level, you can't upgrade it.")
          else
             setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1))
             doPlayerSendTextMessage(cid, 24,"Your item has been upgrated to +"..(level+1)..".")
             doSendMagicEffect(toPosition, 12)
             if isArmor(itemEx) == TRUE then
                local get = doTransform(gain.gainArmor,itemEx)
                setItemArmor(itemEx.uid,get)
             elseif isWeapon(itemEx.uid) == TRUE then
                 setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
                 setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))
             elseif isShield(itemEx.uid) == TRUE then
                 setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))
             end
          end
       else

          if level == 0 then
              doPlayerSendTextMessage(cid, 24,"No effect.")
              doSendMagicEffect(toPosition, 2)
          elseif level == gain.maxlvl then
                 doSendMagicEffect(toPosition, 2)
                 return doPlayerSendTextMessage(cid, 24,"Your item is on max level, you can't upgrade it.")
          elseif level > 0 then
              if level == 1 then
                  setItemName(itemEx.uid, getItemNameById(itemEx.itemid))
                  doPlayerSendTextMessage(cid, 24,"Your item back to normal.")
              else
                  setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1))
                  doPlayerSendTextMessage(cid, 24,"Your item back to +"..(level-1)..".")
              end
             if isArmor(itemEx) == TRUE then
                setItemArmor(itemEx.uid,doTransform(gain.loseArmor  ,itemEx))
             elseif isWeapon(itemEx.uid) == TRUE then
                 setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
                 setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))
             elseif isShield(itemEx.uid) == TRUE then
                 setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))
             end
          end
          doSendMagicEffect(toPosition, 9)
       end
    doRemoveItem(item.uid,1)
    return TRUE
end 

Pronto seu server já possui o sistema de refinamento. Basta pegar o item 8306 dar usewith nele em uma arma, armor, shield e pronto! O item irá subir de nivel melhorando seu status, caso você ponha actionid 1000 no item 8306 a chance de falha será 0 ou seja sempre funcionará!

 

Observe a imagem:



1270740512-U149188.png

Link para o comentário
Compartilhar em outros sites

cara porque tu não pesquisa logo no fórum se existe um tópico com isso antes de postar?

 

http://www.xtibia.com/forum/topic/120698-action-sistema-de-refinamento-perfeito/page__p__794100__hl__sistema%20de%20refinamento__fromsearch__1entry794100

 

 

 

reportado pra fecharem esse.

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

[27/04/2010 17:13:47] Lua Script Error: [Action Interface]

[27/04/2010 17:13:47] data/actions/scripts/upgrade.lua:onUse

 

[27/04/2010 17:13:48] luaGetItemArmor(). Item not found

 

Toda vez que uso o item no objeto aparece esse erro no tfs.exe

Att

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...
  • 2 months later...
  • 2 weeks later...

Sistema muuuuuito interessante , que existe em outros RPG e falta no Tibia

Só tenho uma duvida , os pontos adicionados no item são permanentes , ou os pontos voltam ao normal depois de algum tempo ?

Se fossem permanentes seria muito bom , a venda de itens seria muito mais interessante , aquela coisa de preço fixo para itens iria desaparecer ,

cada player teria um item melhor que o item do outro , e poderia colocar seu proprio preço em seu item.

Muito Bom !

Doidin admiro muito seu trabalho aqui no Xtibia , sempre com boas ideias.

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

Olha eu tive em mente um script com o refinador mais não consegui de maneira alguma fase-lo,funcionaria assim: você adiciona no seu item,quando ele chega no +7 você ao usar o item fica com um brilho,que seria do item 6491,igual a alguns tipos de RPG famosos como MU que ao adicionar em um certo nivel ao usar o item você brilha.Então caso você esteja interessado a criar este script ou se conseguir criar me adicione msn: lucasjoaquimcardos@hotmail.com

Link para o comentário
Compartilhar em outros sites

  • 2 months later...

ezcelente script porem após fazer umas modificações coloquei o Max pra 15 e pra minha surpresa ele ia +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 apó o +10 ele voltava +2 +3... ai após +10 voltava de novo, o q gerava um aging infinito, tentei colocar até +10 mas mesmo o maximo sendo +10 ele nao parava e ainda ficava infinito, queria que vc arrumasse isso pq quero muito usar o script para um ot, só q vou precisar disso até pelo menos +15 ou +20 o ideal pro meu ot seria até +15, porem em um projeto secundario de outro ot precisaria até +50

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

O meu da o Mesmo Erro que

 

"[27/04/2010 17:13:47] Lua Script Error: [Action Interface]

[27/04/2010 17:13:47] data/actions/scripts/upgrade.lua:onUse

 

[27/04/2010 17:13:48] luaGetItemArmor(). Item not found

 

Toda vez que uso o item no objeto aparece esse erro no tfs.exe

Att "

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...