Por s2Emys2, 22 de ago. de 2011 em Archived
info
Grupo: Campones
Registrado: 23/02/07
Posts: 0
Reputação: 0
Char no Tibia: Lady Niih
Olá, estou com um problema no sistema de refinamento e preciso da ajuda de vocês...
Versão do OT: 8.6
Bom, o script nao funciona, vou colar o erro que aparece quando eu uso o item 8306 em um stonecutter axe:
[Error - Action Interface]data/actions/scripts/upgrade.lua:onUse Description: data/actions/scripts/upgrade.lua:48: bad argument #3 to 'gsub' <string/function/table expected> stack traceback: [C]: in function 'gsub' data/actions/scripts/upgrade.lua:48: in function 'doTransform' data/actions/scripts/upgrade.lua:71: in function <data/actions/scripts/upgrade.lua:57>
data/actions/scripts/upgrade.lua:onUse
Description:
data/actions/scripts/upgrade.lua:48: bad argument #3 to 'gsub' <string/function/table expected>
stack traceback:
[C]: in function 'gsub'
data/actions/scripts/upgrade.lua:48: in function 'doTransform'
data/actions/scripts/upgrade.lua:71: in function <data/actions/scripts/upgrade.lua:57>
Scripts que eu uso...
na pasta data/actions/actions.xml :
<action itemid="8306" script="upgrade.lua"/>
data/actions/scripts :
local gain = {gainArmor='&p+5',loseArmor='&p-5', gainShield='&s+#',loseShield='&s-(#+7)', gainAttack='&a+#+1',loseAttack='&a-(#+4)-2', gainDefense='&d+#+2',loseDefense='&d-(#+4)-2', chance='75/((#*(1/(@/2)))*(@/2))', -- Essa equação é boa para ficar perfeito seu refinamento --- Se você colocar "chance=100" sempre irá funcionar o upgrade e se colocar chance=0 sempre ira falhar maxlvl = 10, blocked_ids = {2488,8881} } -- &a = weapon attack -- &d = weapon defense -- &s = shield defense -- &p = armor defense -- # = weapon curr level -- @ = max level function isArmor(uid) -- Function by Mock the bear. uid = uid or 0 if getItemArmor(uid) > 0 and getItemAttack(uid) == 0 and getItemDefense(uid) == 0 and getItemWeaponType(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.find(name,'+(%d+)') return tonumber(lvl) or 0 end function doTransform(s,uid) -- Function by Mock the bear. local c = string.gsub(s,'@',gain.maxlvl) local c = string.gsub(c,'&a',getItemAttack(uid)) local c = string.gsub(c,'&d',getItemDefense(uid)) local c = string.gsub(c,'&s',getItemDefense(uid)) local c = string.gsub(c,'&p',getItemArmor(uid)) local c = string.gsub(c,'#',getWeaponLevel(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.uid) == FALSE) or itemEx.itemid == 0 then doPlayerSendTextMessage(cid, 24,"Você não pode refinar esse item.") return TRUE end if isCreature(itemEx.uid) == TRUE then return FALSE end local level = getWeaponLevel(itemEx.uid) local chance = doTransform(gain.chance,itemEx.uid) if chance >= math.random(0,100) or item.actionid >= 1000 then if level+1 > gain.maxlvl then doSendMagicEffect(toPosition, 2) return doPlayerSendTextMessage(cid, 24,"Seu Item esta no nivel maximo,nao pode mais fazer upgrade nele.") else setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1)) doPlayerSendTextMessage(cid, 24,"Seu item foi almentado para +"..(level+1)..".") doSendMagicEffect(toPosition, 39) if isArmor(itemEx.uid) == TRUE then local get = doTransform(gain.gainArmor,itemEx.uid) setItemArmor(itemEx.uid,get) elseif isWeapon(itemEx.uid) == TRUE then setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx.uid)) setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx.uid)) elseif isShield(itemEx.uid) == TRUE then setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx.uid)) 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,"Seu Item esta no nivel maximo,nao pode mais ser feito upgrade.") elseif level > 0 then if level == 1 then setItemName(itemEx.uid, getItemNameById(itemEx.itemid)) doPlayerSendTextMessage(cid, 24,"Seu item voltou ao normal.") else setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)) doPlayerSendTextMessage(cid, 24,"Seu Item voltou para +"..(level-1)..".") end if isArmor(itemEx.uid) == TRUE then setItemArmor(itemEx.uid,doTransform(gain.loseArmor,itemEx.uid)) elseif isWeapon(itemEx.uid) == TRUE then setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx.uid)) setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx.uid)) elseif isShield(itemEx.uid) == TRUE then setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx.uid)) end end doSendMagicEffect(toPosition, 15) end doRemoveItem(item.uid,1) return TRUE end
gainArmor='&p+5',loseArmor='&p-5',
gainShield='&s+#',loseShield='&s-(#+7)',
gainAttack='&a+#+1',loseAttack='&a-(#+4)-2',
gainDefense='&d+#+2',loseDefense='&d-(#+4)-2',
chance='75/((#*(1/(@/2)))*(@/2))', -- Essa equação é boa para ficar perfeito seu refinamento
--- Se você colocar "chance=100" sempre irá funcionar o upgrade e se colocar chance=0 sempre ira falhar
maxlvl = 10,
blocked_ids = {2488,8881}
}
-- &a = weapon attack
-- &d = weapon defense
-- &s = shield defense
-- &p = armor defense
-- # = weapon curr level
-- @ = max level
function isArmor(uid) -- Function by Mock the bear.
uid = uid or 0
if getItemArmor(uid) > 0 and getItemAttack(uid) == 0 and getItemDefense(uid) == 0 and getItemWeaponType(uid) == 0 then
return TRUE
end
return FALSE
function isWeapon(uid) -- Function by Mock the bear.
local f = getItemWeaponType(uid)
if f == 1 or f == 2 or f == 3 then
function isShield(uid) -- Function by Mock the bear.
if getItemWeaponType(uid) == 4 then
function getWeaponLevel(uid) -- Function by Mock the bear.
local name = getItemName(uid)
local _,_,lvl = string.find(name,'+(%d+)')
return tonumber(lvl) or 0
function doTransform(s,uid) -- Function by Mock the bear.
local c = string.gsub(s,'@',gain.maxlvl)
local c = string.gsub(c,'&a',getItemAttack(uid))
local c = string.gsub(c,'&d',getItemDefense(uid))
local c = string.gsub(c,'&s',getItemDefense(uid))
local c = string.gsub(c,'&p',getItemArmor(uid))
local c = string.gsub(c,'#',getWeaponLevel(uid))
local q,err = loadstring('return '..c)
assert(q,err)
return assert(q())
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.uid) == FALSE)
or itemEx.itemid == 0 then
doPlayerSendTextMessage(cid, 24,"Você não pode refinar esse item.")
if isCreature(itemEx.uid) == TRUE then
local level = getWeaponLevel(itemEx.uid)
local chance = doTransform(gain.chance,itemEx.uid)
if chance >= math.random(0,100) or item.actionid >= 1000 then
if level+1 > gain.maxlvl then
doSendMagicEffect(toPosition, 2)
return doPlayerSendTextMessage(cid, 24,"Seu Item esta no nivel maximo,nao pode mais fazer upgrade nele.")
else
setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level+1))
doPlayerSendTextMessage(cid, 24,"Seu item foi almentado para +"..(level+1)..".")
doSendMagicEffect(toPosition, 39)
if isArmor(itemEx.uid) == TRUE then
local get = doTransform(gain.gainArmor,itemEx.uid)
setItemArmor(itemEx.uid,get)
elseif isWeapon(itemEx.uid) == TRUE then
setItemAttack(itemEx.uid, doTransform(gain.gainAttack,itemEx.uid))
setItemDefense(itemEx.uid, doTransform(gain.gainDefense,itemEx.uid))
elseif isShield(itemEx.uid) == TRUE then
setItemDefense(itemEx.uid, doTransform(gain.gainShield,itemEx.uid))
if level == 0 then
doPlayerSendTextMessage(cid, 24,"No effect.")
elseif level == gain.maxlvl then
return doPlayerSendTextMessage(cid, 24,"Seu Item esta no nivel maximo,nao pode mais ser feito upgrade.")
elseif level > 0 then
if level == 1 then
setItemName(itemEx.uid, getItemNameById(itemEx.itemid))
doPlayerSendTextMessage(cid, 24,"Seu item voltou ao normal.")
setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1))
doPlayerSendTextMessage(cid, 24,"Seu Item voltou para +"..(level-1)..".")
setItemArmor(itemEx.uid,doTransform(gain.loseArmor,itemEx.uid))
setItemAttack(itemEx.uid, doTransform(gain.loseAttack,itemEx.uid))
setItemDefense(itemEx.uid, doTransform(gain.loseDefense,itemEx.uid))
setItemDefense(itemEx.uid, doTransform(gain.loseShield,itemEx.uid))
doSendMagicEffect(toPosition, 15)
doRemoveItem(item.uid,1)
Obrigada desde já
Registrado: 27/06/11
Posts: 36
Tópico Morto !
Editado Janeiro 11 por oFrog
info
Grupo: Campones
Registrado: 23/02/07
Posts: 0
Reputação: 0
Char no Tibia: Lady Niih
Olá, estou com um problema no sistema de refinamento e preciso da ajuda de vocês...
Versão do OT: 8.6
Bom, o script nao funciona, vou colar o erro que aparece quando eu uso o item 8306 em um stonecutter axe:
Scripts que eu uso...
na pasta data/actions/actions.xml :
data/actions/scripts :
Obrigada desde já