Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Bom eu uso um sistema de refinar os itens. O problema é que o bow refina, mais o ataque não acrescenta!

 

                                                --Exemplo--

Erro:

You see a elvish bow (Range:6, Atk:30, Hit% +35).
usei o item e ficou: 
You see a elvish bow +1 (Range:6, Atk:30, Hit% +35). 
 
Correto:
You see a elvish bow (Range:6, Atk:30, Hit% +35).
Usei o item e ficou:
You see a elvish bow +1 (Range:6, Atk:32, Hit% +35).
 
Obs.Testei em outro server e o bow refina perfeitamente aparecendo o ataque, já nesse meu server eu troquei de distro para rev3777 e aparece esse problema..
 
data/actions/scripts:
Spoiler
Spoiler
 
-- &a = weapon attack
-- &d = weapon defense
-- &s = shield defense
-- &p = armor defense
-- # = nivel do item
-- @ = max level
local gain = {
gainArmor='&p+(2)',loseArmor='&p-(2)',
gainShield='&s+(3)',loseShield='&s-(3)',
gainAttack='&a+(8)',loseAttack='&a-(8)',
gainDefense='&d+(8)',loseDefense='&d-(8)',
chance='100/((#*(1/(@/2)))*(@/2))',
maxlvl = 15,
blocked_ids = {8881},{2128}
}
local it = {
--[itemid] = [percent]
[8305] = 100, -- 70% additional
}
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
 
local function isArmor(uid) -- Function by Mock the bear.
    if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
  return true
end
return false
end
local 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
local function isShield(uid) -- Function by Mock the bear.
uid = uid or 0
if getItemWeaponType(uid) == 4 then
  return true
end
return false
end
local function isBow(uid) -- Function by Mock the bear.
uid = uid or 0
if getItemWeaponType(uid) == 5 then
  return true
end
return false
end
local function getWeaponLevel(uid) -- Function by Mock the bear.
   uid = uid or 0
   local name = getItemName(uid.uid) or getItemInfo(uid.itemid).name or ''
   local lvl = string.match(name,'%s%+(%d+)%s*')
   return tonumber(lvl) or 0
end
local 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) ~= 0 and getItemAttack(i.uid) or getItemInfo(i.itemid).attack))
    local c = string.gsub(c,'&d',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
    local c = string.gsub(c,'&s',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
    local c = string.gsub(c,'&p',(getItemArmor(i.uid) ~= 0 and getItemArmor(i.uid) or getItemInfo(i.itemid).armor))
    local c = string.gsub(c,'#',getWeaponLevel(i))
    local q = assert(loadstring('return '..c))
    return math.floor(assert(q()))
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
                 if item.uid == 0 or item.itemid == 0 then return false end
   toPosition.stackpos = 255
                 if isInArray(gain.blocked_ids, itemEx.itemid)
                  or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
                   or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
                         or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
                            doPlayerSendTextMessage(cid,28,"Você não pode refinar este item.")
                            return TRUE
                 end
                 if isCreature(itemEx.uid) == TRUE then
                    return FALSE
                 end
            local level = getWeaponLevel(itemEx)
            local chance = doTransform(gain.chance,itemEx)
  if level == gain.maxlvl then
   doSendMagicEffect(toPosition, 2)
                    return doPlayerSendTextMessage(cid,19,"Seu item está refinado no nível máximo.")
  end
  doPlayerSendTextMessage(cid, 19,"Tentando refinar com "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% de sucesso!")
            if chance+it[item.itemid] >= math.random(0,100) then
   local nm = getItemName(itemEx.uid)
   local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it happy.png
   slot = slot~='' and ' '..slot or slot
                    setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1)..slot)
                    doSendMagicEffect(fromPosition, 30)
                    doSendAnimatedText(fromPosition, "REFINADO!", TEXTCOLOR_BLUE)
                    addEvent(doPlayerSendTextMessage,500,cid,19,"Seu item foi refinado para +"..(level+1)..slot..".")
                    doSendMagicEffect(toPosition, 30)
                    if isArmor(itemEx) then
    local get = doTransform(gain.gainArmor,itemEx)
    setItemArmor(itemEx.uid,get)
   elseif isBow(itemEx.uid) then
    setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
   elseif isWeapon(itemEx.uid) then
    setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
    setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))
                    elseif isShield(itemEx.uid) then
    setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))
   end
            else
   if level == 0 then
    addEvent(doPlayerSendTextMessage,500,cid,MESSAGE_INFO_DESCR,"No effect.")
    doSendMagicEffect(toPosition, 2)
   elseif level > 0 then
   local nm = getItemName(itemEx.uid)
   local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it happy.png
    slot = slot~='' and ' '..slot or slot
    if level == 1 then
         setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..slot)
         addEvent(doPlayerSendTextMessage,500,cid,19,"Seu item voltou ao normal.")
    else
         setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
         doSendMagicEffect(fromPosition, 29)
         doSendAnimatedText(fromPosition, "FALHOU!", TEXTCOLOR_RED)
         addEvent(doPlayerSendTextMessage,500,cid,19,"Seu item voltou para +"..(level-1)..slot..".")
    end
    if isArmor(itemEx) then
         setItemArmor(itemEx.uid,doTransform(gain.loseArmor  ,itemEx))
    elseif isWeapon(itemEx.uid) then
         setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
         setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))
    elseif isBow(itemEx.uid) then
         setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
    elseif isShield(itemEx.uid) then
         setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))
    end
   end
   doSendMagicEffect(toPosition, 29)
            end
doRemoveItem(item.uid,1)
return true
end
 
 
Editado por gabrielbuff (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 2 weeks later...

to usando esse no meu projeto man testa ai pra ve se funciona

 

Spoiler

-- &a = weapon attack
-- &d = weapon defense
-- &s = shield defense
-- &p = armor defense
-- # = nivel do item
-- @ = max level
local gain = {
gainArmor='&p+(1)',loseArmor='&p-(1)',
gainShield='&s+(1)',loseShield='&s-(1)',
gainAttack='&a+(1)',loseAttack='&a-(1)',
gainDefense='&d+(1)',loseDefense='&d-(1)',
chance='(100/math.sqrt((((@/2)+(#*2))/@)*#*2))',
maxlvl = 15,
blocked_ids = {8881}
}
local it = {
--[itemid] = [percent]
[8301] = 0, -- 0% additional
[8302] = 100, -- 50%
}
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

local function isArmor(uid)
if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
return true
end
return false
end
local function isWeapon(uid)
uid = uid or 0
local f = getItemWeaponType(uid)
if f == 1 or f == 2 or f == 3 then
return true
end
return false
end
local function isShield(uid)
uid = uid or 0
if getItemWeaponType(uid) == 5 then
return true
end
return false
end
local function isBow(uid)
uid = uid or 0
if getItemWeaponType(uid) == 4 then
return true
end
return false
end
local function getWeaponLevel(uid)
uid = uid or 0
local name = getItemName(uid.uid) or getItemInfo(uid.itemid).name or ''
local lvl = string.match(name,'%s%+(%d+)%s*')
return tonumber(lvl) or 0
end
local 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) ~= 0 and getItemAttack(i.uid) or getItemInfo(i.itemid).attack))
local c = string.gsub(c,'&d',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
local c = string.gsub(c,'&s',(getItemDefense(i.uid) ~= 0 and getItemDefense(i.uid) or getItemInfo(i.itemid).defense))
local c = string.gsub(c,'&p',(getItemArmor(i.uid) ~= 0 and getItemArmor(i.uid) or getItemInfo(i.itemid).armor))
local c = string.gsub(c,'#',getWeaponLevel(i))
local q = assert(loadstring('return '..c))
return math.floor(assert(q()))
end
function onUse(cid, item, fromPosition, itemEx, toPosition)
if item.uid == 0 or item.itemid == 0 then return false end
toPosition.stackpos = 255
if isInArray(gain.blocked_ids, itemEx.itemid)
or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
doPlayerSendCancel(cid, "You cant refine this item.")
return TRUE
end
if isCreature(itemEx.uid) == TRUE then
return FALSE
end
local level = getWeaponLevel(itemEx)
local chance = doTransform(gain.chance,itemEx)
if level == gain.maxlvl then
doSendMagicEffect(toPosition, 2)
return doPlayerSendCancel(cid, "Your item is on max level, you can't upgrade it.")
end
doPlayerSendCancel(cid, "Trying refine with "..(chance+it[item.itemid] > 100 and 100 or chance+it[item.itemid]).."% of sucess!")
if chance+it[item.itemid] >= math.random(0,100) then
local nm = getItemName(itemEx.uid)
local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it 
slot = slot~='' and ' '..slot or slot
setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1)..slot)
addEvent(doPlayerSendCancel,1000,cid, "Your item has been upgrated to +"..(level+1)..slot..".")
doSendAnimatedText(getCreaturePosition(cid), 'Sucess!', 35, cid)
doSendMagicEffect(toPosition, 28)
if isArmor(itemEx) then
local get = doTransform(gain.gainArmor,itemEx)
setItemArmor(itemEx.uid,get)
elseif isBow(itemEx.uid) then
setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
elseif isWeapon(itemEx.uid) then
setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx))
setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx))
elseif isShield(itemEx.uid) then
setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx))
end
else
if level == 0 then
addEvent(doPlayerSendCancel,500,cid, "No effect.")
doSendMagicEffect(toPosition, 2)
elseif level > 0 then
local nm = getItemName(itemEx.uid)
local slot = nm:match('(%[.+%])') or '' ---If you server use slot system dont change it 
slot = slot~='' and ' '..slot or slot
if level == 1 then
setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..slot)
addEvent(doPlayerSendCancel,500,cid, "Your item back to normal.")
else
setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
addEvent(doPlayerSendCancel,500,cid, "Your item back to +"..(level-1)..slot..".")
end
if isArmor(itemEx) then
setItemArmor(itemEx.uid,doTransform(gain.loseArmor ,itemEx))
elseif isWeapon(itemEx.uid) then
setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx))
elseif isBow(itemEx.uid) then
setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx))
elseif isShield(itemEx.uid) then
setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx))
end
end
doSendAnimatedText(getCreaturePosition(cid), 'Fail!', 114, cid)
doSendMagicEffect(toPosition, 9)
end
doRemoveItem(item.uid,1)
return true
end

 

 

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo