Ir para conteúdo
Entre para seguir isso  
Mock

Sistema de refinamento perfeito.

O que você achou do script?  

228 votos

  1. 1. O que você achou do script?



Recommended Posts

Mock    32
Mock

Autor:bearpaw.png

Servidor testado: TFS 0.3.4

Versao: 1.1

Requerimento: APENAS NO TFS 0.3.6 OTAL. Link: http://forums.otserv.com.br/f154/open-tibia-advanced-lib-otal-v1-3-135855/

 

 

Olá! Bem des de que o pharenight (meu server) fechou eu tenho ficado com varios sistemas dele mofando em meu PC, porem como tem sistemas MUITO boms e que muita gente presisa que algums ja existem porem muitos nao funcionam direito ou tem muitos problemas decidi liberar aos poucos os sistemas, nao começando mais continuando por este sistema de aprimoramento muito mais simples facil configuração e nao da trabalho instalar!

 

Pois bem o script você so tem que configurar nele os items que nao vao ser aprimorados. O script identifica sosinho se o item é armor, shield ou weapon.

 

Vamos continuar.

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

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

 

Depois salve e vá em scripts e crie o upgrade.lua e dentro dele coloque isso:

--- Perfect refine system by Mock the bear (MTB).
--- Email: [email protected]
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

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

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

Para 0.3.4 http://lua.pastey.net/134570

Pronto seu server ja possue o sistema de aprimoramento! basta pegar o item 8306 dar usewith nele em uma arma, armor, shield e pronto! o item ira subir de nivel melhorando seu status! caso você ponha actionid 1000 no item 8306 a chance de falha será 0 ou seja semre funcionará!

 

Divirtam-se

 

fdssfdsfd.png

 

Script atualizado para 0.3.6

 

UPDATE: agora funciona em tfs 0.3.5!! ajeitei o bug de nao subir de nivel!

 

Arquivo de auto instalação: http://lualand.net/luaifiles/seefile.php?file=Mock-Perfect%20upgrade-1266873975-TFS%200.3.6-.luai

Editado por Mock

Compartilhar este post


Link para o post
Fereu    0
Fereu

já vi isso antes, mas pelo visto esse ta mais organizado, melhor, bla bla.

 

flw;

Compartilhar este post


Link para o post
Mock    32
Mock

@fereu

Esse sitema eu so mudei ele pra configurar + facil

ele foi um dos primeiros a surgir :P

so nao foi postado.

Compartilhar este post


Link para o post
Elys Zarox    0
Elys Zarox

Oo? você já não postou isso não? se esse é outro qual é a diferença desse para o outro?

Compartilhar este post


Link para o post
Seu Nick    0
Seu Nick

mock ja postou isso na vip eu lembro

mas não funcionava direito ;p

Compartilhar este post


Link para o post
Mock    32
Mock

@seunick

sim so q o da vip so funciona 1x esse qtas quiser e vai atéw o nivel 1kk

Compartilhar este post


Link para o post
fandemim    0
fandemim

Muito obrigado, mock,exelente script !!

 

Finalmente Funcionou !

Compartilhar este post


Link para o post
Mock    32
Mock
Muito obrigado, mock,exelente script !!

 

Finalmente Funcionou !

 

Esse script tem garantia que funciona, caso ache um bug me avise.

Compartilhar este post


Link para o post
Tunoc    0
Tunoc

ótimo!

pq?

porque é algo bem inovador e que é muito bom, da mais RPG para qualquer server.

 

ficaria tbm bem massa tipo, se tivesse uma pedrinha bem rara que aumentava +3 de def/atk e 1% de defesa contra fire/ice/poison... etc...

Compartilhar este post


Link para o post
Mock    32
Mock

@Tunoc

o script pode fazer isso.

Se vc quer +3 de ataque mude as formulas ficando assim:

local gain = {
gainArmor='&p+1',loseArmor='&p-1',
gainShield='&s+#',loseShield='&s-(#+1)',
gainAttack='&a+3',loseAttack='&a-3',
gainDefense='&d+((3/&d)*100)',loseDefense='&d-((3/&d)*100)',
chance='100/((#*(1/(@/2)))*(@/2))', 
maxlvl = 7,
blocked_ids = {2488,8881}
}

gainDefense='&d+((3/&d)*100)'

Isso é a formula

&d é a defesa da arma ai vc faz

&d MAIS 3 dividido pela defesa veses 100 que é a porcentagem ^^

Compartilhar este post


Link para o post
gust~    0
gust~

Mock, primeiramente parabéns, é um ótimo script.

Segundo, e caso eu queira colocar um limite de upgrades? Como faria isso? Por exemplo, quando a Demon Armor (ou outro iten qualquer) chegar no "+5", a armor (ou o iten) parar de receber upgrades e enviar uma mensagem falando que não é mais possível receber upgrades.

To perguntando isso porque eu estou começando a aprender a fazer script e to vendo e revendo scripts para entender as funções e tudo mais.

 

Abraços,

gust~

Compartilhar este post


Link para o post
Mock    32
Mock
local gain = {

gainArmor='&p+1',loseArmor='&p-1',

gainShield='&s+#',loseShield='&s-(#+1)',

gainAttack='&a+#+1',loseAttack='&a-(#+1)-1',

gainDefense='&d+#+2',loseDefense='&d-(#+1)-2',

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}

}

muda maxlvl pra

maxlvl = 5,

Compartilhar este post


Link para o post
lukibrr    0
lukibrr

Achei muito bom e ja coloquei no meu ot ;)

continue nos mostrando + ae!

Vlws ;)

Compartilhar este post


Link para o post
Sparken    0
Sparken

nossa velho, tem akele sistema que o Lordbelkill botou aki tambem, mais esse ta bem melhor (akele era por leveis. exemplo: You See A Demon Armor (Def:16) (Level 1).

 

E Aproveitando oque meu irmao (tunoc (COCO))falou , tem como fazer o item ficar com defesa elemental contra todos os elementos?? (pros knight se defenderem de sorceres pq se nao so os sorcer bate...)

Editado por Sparken

Compartilhar este post


Link para o post
Gorgulf    0
Gorgulf

achei otimo por que como alguem já disse .-.

ele é muito facil de configurar, e é um bom sistema pra servers serios :P

Compartilhar este post


Link para o post
Mock    32
Mock

@Sparken

isso é impossivel.

ao n ser q vc fassa por si mesmo na source, por scripting não dá

Compartilhar este post


Link para o post
Raphael Carnaúba    1
Raphael Carnaúba

Parabéns, Mock!!

 

Ficou mt bom o código e bem estruturado :) pelo visto, você melhorou bastante com o tempo hein???

 

Forte abraço!!

Compartilhar este post


Link para o post
Sparken    0
Sparken

Mock, mais uma vez eu aki pedindo outro conselho, tem como fazer uma outra pedra que tivesse sempre 100% de aumentar +1? se tiver, pode me dizer como?? dai eu ponho para Vender no site como itens VIP... ficaria show ne?

Compartilhar este post


Link para o post
Mock    32
Mock

@Sparken

dificil d+ ler o topico né?

se vc por actionid na pedra a chance dela fica 100%

Compartilhar este post


Link para o post
Sparken    0
Sparken

desculpa ae, mais eh q to sem tempo... descupa mesmo... onde eu coloco actionid?? em que arquivo eu mecho? e no caso de eu deixar o maxlevel do item ser +13, qual deveria ser a equacao para q fosse balanceado?? (100/((#*(1/(@/2)))*(@/2)))

 

oque ocorreu aki?

20:05 Your item has been upgrated to +10.

20:05 You see a demonwing axe +10 (Atk:109, Def:86).

It weighs 120.00 oz.

ItemID: [8926].

Position: [X: 144] [Y: 50] [Z: 7].

20:05 Your item has been upgrated to +2.

20:05 You see a demonwing axe +2 (Atk:112, Def:90).

It weighs 120.00 oz.

ItemID: [8926].

Position: [X: 144] [Y: 50] [Z: 7].

 

ele voltou a +0 com atk de +10 (O.o)

Editado por Sparken

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.

×