• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Upgrade items

Kippetjee

Member
Joined
Jun 17, 2009
Messages
1,197
Reaction score
11
Location
The Netherlands
Got a error on this script when you use the cystal on yourself this error will come

LUA:
[22/01/2011 19:34:30] [Error - Action Interface] 
[22/01/2011 19:34:30] data/actions/scripts/upgrade.lua:onUse
[22/01/2011 19:34:30] Description: 
[22/01/2011 19:34:30] data/actions/scripts/upgrade.lua:87: attempt to compare number with boolean
[22/01/2011 19:34:30] stack traceback:
[22/01/2011 19:34:30] 	data/actions/scripts/upgrade.lua:87: in function <data/actions/scripts/upgrade.lua:85>

[22/01/2011 19:34:40] [Error - Action Interface] 
[22/01/2011 19:34:40] data/actions/scripts/upgrade.lua:onUse
[22/01/2011 19:34:40] Description: 
[22/01/2011 19:34:40] data/actions/scripts/upgrade.lua:87: attempt to compare number with boolean
[22/01/2011 19:34:40] stack traceback:
[22/01/2011 19:34:40] 	data/actions/scripts/upgrade.lua:87: in function <data/actions/scripts/upgrade.lua:85>

LUA:
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 can't refine this item.")
		return true
	end
 
	if(isCreature(itemEx.uid) == true) then
		return false
	end
 
Last edited:
Well, you posted like 10 lines and we should guess what is written in like 87? No thanks
 
Should this "isArmor(itemEx)" be like "isArmor(itemEx.uid)" or "isArmor(itemEx.itemid)"
If it doesn't work which version?
 
Should this "isArmor(itemEx)" be like "isArmor(itemEx.uid)" or "isArmor(itemEx.itemid)"
If it doesn't work which version?

The isArmor function is with (itemEx)
@ON: Just add a checking if is a creature?
LUA:
if isPlayer(cid) or isMonster(cid) then
   doPlayerSendCancel(cid, "You can't use this item in creatures")
 
LUA:
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 can't refine this item.")
		return true
	end
 
	if(isCreature(itemEx.uid) == true) then
		doPlayerSendCancel(cid, "You can't use this item on creatures")
	end
 
Dont work:(

whole script

LUA:
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))',
 
	maxlvl = 3,
	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)
	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)
	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)
	uid = uid or 0
	if(getItemWeaponType(uid) == 4) then
		return true
	end
	return false
end
function getWeaponLevel(uid)
	uid = uid or 0
	local name = getItemName(uid)
	local lvl = string.match(name,'+(%d)')
	return tonumber(lvl) or 0
end
function doTransform(s,i)
	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
 
-- //DO NOT EDIT\\ --
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 can't 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 "..getItemNameById(itemEx.itemid).." has been upgraded 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, "The upgrading failed. It went back to normal.")
			else
				setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1))
				doPlayerSendTextMessage(cid, 24, "The upgrading failed. It went 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
 
Test:
LUA:
--- Perfect refine system by Mock the bear (MTB).
--- Email: [email][email protected][/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

	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
 
The isArmor function is with (itemEx)
@ON: Just add a checking if is a creature?
LUA:
if isPlayer(cid) or isMonster(cid) then
   doPlayerSendCancel(cid, "You can't use this item in creatures")

>implying monsters or npcs can execute action script
 
Test:
LUA:
--- Perfect refine system by Mock the bear (MTB).
--- Email: [email][email protected][/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

	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


This script got the same error... When you use it on a player it give error
 
LUA:
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))',
 
	maxlvl = 3,
	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)
	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)
	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)
	uid = uid or 0
	if(getItemWeaponType(uid) == 4) then
		return true
	end
	return false
end
function getWeaponLevel(uid)
	uid = uid or 0
	local name = getItemName(uid)
	local lvl = string.match(name,'+(%d)')
	return tonumber(lvl) or 0
end
function doTransform(s,i)
	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
 
-- //DO NOT EDIT\\ --
function onUse(cid, item, fromPosition, itemEx, toPosition)
	toPosition.stackpos = 255
	if(isCreature(itemEx.uid) == true) then
		doPlayerSendTextMessage(cid, 24, "Fuck tha player.")
		return true
	end
	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 can't refine this item.")
		return true
	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 "..getItemNameById(itemEx.itemid).." has been upgraded 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, "The upgrading failed. It went back to normal.")
			else
				setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1))
				doPlayerSendTextMessage(cid, 24, "The upgrading failed. It went 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
 
Back
Top