Untitled
unknown
lua
a year ago
6.9 kB
6
Indexable
local gain = { gainArmor='&p+(1000)',loseArmor='&p-(1000)', gainShield='&s+#',loseShield='&s-(#+1000)', gainAttack='&a+(50000*(#))',loseAttack='&a-(0*(#+50000))', gainDefense='&d+(1000*(#))',loseDefense='&d-(0*(#+1000))', chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))', maxlvl = 15, blocked_ids = {12430} } local it = { --[itemid] = [percent] [8306] = 101 } local wands = { availableIds = {2436}, damagePerUpgrade = 100000000 } 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 setItemWandAttack(uid,value) return doItemSetAttribute(uid,'wand_attack',value) end function getItemAttack(uid) return getItemAttribute(uid,'attack') end function getItemWandAttack(uid) return getItemAttribute(uid,'wand_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 isWand(uid) return getItemWeaponType(uid or 0) == 7 end local function isBow(uid) uid = uid or 0 if getItemWeaponType(uid) == 4 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 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) 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 local function getBoostLevel(item) local name = "" local level = getItemAttribute(item, "boostTimes") or 0 if level >= 1 and level < 3 then name = "Unique " elseif level >= 3 and level < 5 then name = "Super " elseif level >= 5 then name = "Epic " end return name end function onUse(cid, item, fromPosition, itemEx, toPosition) if item.aid == 3822 then return false end for s = 1, 10 do local item_boost = itemEx if (getPlayerSlotItem(cid, s).uid == item_boost.uid) then return doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Please unEquip your item to transform it.") end end 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 and (not getItemWeaponType(itemEx.uid) == 7 or not isInArray(wands.availableIds, itemEx.itemid)))) or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx)) or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then doPlayerSendTextMessage(cid, 24,"You cant upgrade 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, 24,"Your item is already +15.") end if chance+it[item.itemid] >= math.random(0,100) then local nm = getItemName(itemEx.uid) local slot = nm:match('(%[.+%])') or '' slot = slot~='' and ' '..slot or slot setItemName(itemEx.uid, getBoostLevel(itemEx.uid)..getItemNameById(itemEx.itemid)..' +'..(level+1)..slot) addEvent(doPlayerSendTextMessage,1,cid, 24,"Your item has been upgrated to +"..(level+1)..slot..".") doSendAnimatedText(getThingPos(cid), "Up +"..(level+1)..slot.."", TEXTCOLOR_LIGHTBLUE) 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.gainDefense,itemEx)) elseif isWand(itemEx.uid) then setItemWandAttack(itemEx.uid, wands.damagePerUpgrade * (level + 1)) end else if level == 0 then addEvent(doPlayerSendTextMessage,500,cid, 24,"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, getBoostLevel(itemEx.uid)..getItemNameById(itemEx.itemid)..slot) addEvent(doPlayerSendTextMessage,500,cid, 24,"Your item back to normal.") else doSendAnimatedText(getThingPos(cid), "Failed!", TEXTCOLOR_RED) end if isWand(itemEx.uid) then setItemWandAttack(itemEx.uid, wands.damagePerUpgrade * level) end end doSendMagicEffect(toPosition, 0) end doRemoveItem(item.uid,1) return true end
Editor is loading...
Leave a Comment