Ir para conteúdo
  • 0

Error no script de Upgrade


tonynamoral

Pergunta

Error :


[24/01/2013 22:33:23] [Error - Action Interface] 
[24/01/2013 22:33:23] data/actions/scripts/upgrade.lua:onUse
[24/01/2013 22:33:23] Description: 
[24/01/2013 22:33:23] data/actions/scripts/upgrade.lua:87: attempt to call global 'getItemAttack' (a nil value)
[24/01/2013 22:33:23] stack traceback:
[24/01/2013 22:33:23]  data/actions/scripts/upgrade.lua:87: in function 'doTransform'
[24/01/2013 22:33:23]  data/actions/scripts/upgrade.lua:109: in function <data/actions/scripts/upgrade.lua:95>

 

Script ;

 

 

 

--- Perfect refine system by Mock the bear (MTB).

--- Email: <a href="mailto:mock_#####@hotmail.com">mock_#####@hotmail.com</a>

-- &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+#',loseShield='&s-(#+1)',

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

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

chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))',

maxlvl = 5,

blocked_ids = {8881}

}

local it = {

--[itemid] = [percent]

[8306] = 0, -- 0% additional

[8305] = 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) -- 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,22,"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 doPlayerSendTextMessage(cid,22,"Your item is on max level, you can't upgrade it.")

end

doPlayerSendTextMessage(cid, 22,"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(doPlayerSendTextMessage,500,cid,22,"Your item has been upgrated to +"..(level+1)..slot..".")

doSendMagicEffect(toPosition, 12)

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,22,"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(doPlayerSendTextMessage,500,cid,22,"Your item back to normal.")

else

setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)

addEvent(doPlayerSendTextMessage,500,cid,22,"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

doSendMagicEffect(toPosition, 9)

end

doRemoveItem(item.uid,1)

return true

end

 

 

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

ta faltando a funçao ae mano... ;x tente isso..

vai em lib/ e crie um arquivo .lua la com o nome 035-item.lua e cole isso dentro..

 

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

 

Link para o comentário
Compartilhar em outros sites

  • 0

Deu esse error aqui ó :

 


[24/01/2013 23:38:32] [Error - Action Interface] 
[24/01/2013 23:38:32] data/actions/scripts/upgrade.lua:onUse
[24/01/2013 23:38:32] Description: 
[24/01/2013 23:38:32] data/lib/items.lua:2: attempt to index local 'item' (a number value)
[24/01/2013 23:38:32] stack traceback:
[24/01/2013 23:38:32]  data/lib/items.lua:2: in function 'getItemAttack'
[24/01/2013 23:38:32]  data/actions/scripts/upgrade.lua:87: in function 'doTransform'
[24/01/2013 23:38:32]  data/actions/scripts/upgrade.lua:109: in function <data/actions/scripts/upgrade.lua:95>

Link para o comentário
Compartilhar em outros sites

  • 0

na real n faz muito sentido o.O ja tem essas funcoes ae no script do mock... tira o arquivo q eu mandei tu por..

tenta trocar esse teu upgrade ae por esse aki..

 

--- Perfect refine system by Mock the bear (MTB).
--- Email: <a href="mailto:mock_#####@hotmail.com">mock_#####@hotmail.com</a>
-- &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+#',loseShield='&s-(#+1)',
  gainAttack='&a+(1*(#))',loseAttack='&a-(1*(#+1))',
  gainDefense='&d+(1*(#))',loseDefense='&d-(1*(#+1))',
  chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))',
  maxlvl = 5,
  blocked_ids = {8881}
}
local it = {
  --[itemid] = [percent]
  [8306] = 0, -- 0% additional
  [8305] = 100, -- 50%
}

local function setItemName(uid,name)
  return doItemSetAttribute(uid,'name',name)
end
local function setItemArmor(uid,name)
  return doItemSetAttribute(uid,'armor',name)
end
local function setItemDefense(uid,name)
  return doItemSetAttribute(uid,'defense',name)
end
local function setItemAttack(uid,name)
  return doItemSetAttribute(uid,'attack',name)
end
local function getItemAttack(uid)
  return getItemAttribute(uid,'attack')
end
local function getItemDefense(uid)
  return getItemAttribute(uid,'defense')
end
local function getItemArmor(uid)
if type(uid) == 'number' then
  return getItemAttribute(uid,'armor')
else
  return getItemInfo(uid.itemid).armor
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,22,"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 doPlayerSendTextMessage(cid,22,"Your item is on max level, you can't upgrade it.")
  end
  doPlayerSendTextMessage(cid, 22,"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(doPlayerSendTextMessage,500,cid,22,"Your item has been upgrated to +"..(level+1)..slot..".")
  doSendMagicEffect(toPosition, 12)
  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,22,"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(doPlayerSendTextMessage,500,cid,22,"Your item back to normal.")
	 else
	    setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
	    addEvent(doPlayerSendTextMessage,500,cid,22,"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
  doSendMagicEffect(toPosition, 9)
  end
  doRemoveItem(item.uid,1)
return true
end

 

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...