• 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!

Solved Upgrading System Heko

Justin123456

New Member
Joined
Mar 24, 2011
Messages
177
Reaction score
4
Edit: WOOPS! I meant "Help" not "Heko" lmfao SORRY!

I'm currently using this script:
PHP:
--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
maxSlotCount=2,
ignoredIds={}
}
--End
function choose(...) --- Function by mock.
	local arg = {...}
	return arg[math.random(1,#arg)]
end
if not getItemAttack then
	function getItemAttack(uid)
		return getItemAttribute(uid,'attack')
	end
	function getItemDefense(uid)
		return getItemAttribute(uid,'defense')
	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 and not isItemStackable(uid) then
		return true
	end
	return false
end
function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
	if item.uid == 0 or item.itemid == 0 then return false end
	toPosition.stackpos = 255
    if isInArray(conf.ignoredIds, 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, 24,"You cant open a slot on this item.")
        return TRUE
    end
    if isCreature(itemEx.uid) then
        return FALSE
    end
	local nam = getItemName(itemEx.uid)
	function getper()
		local n = 1
		for i=1,10 do
			n = n+math.random(0,10)
			if n < 8*i then
				break
			end
		end
		return n
	end
	function getSlotCount(nam)
		local c = 0
		for _ in nam:gmatch('%[(.-)%]') do
			c = c+1
		end
		return c
	end
	if getSlotCount(nam) < conf.maxSlotCount then
		local l = choose('hp','mp','ml','cas','shield','dist')
		local p = getper()
 
		doSendMagicEffect(toPosition,30)
		nam = nam..' ['..l..'.+'..p..'%]'
		doSendAnimatedText(toPosition,l..' '..p..'%',120)
		doItemSetAttribute(itemEx.uid,'name',nam)
		doRemoveItem(item.uid,1)
	else
		doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
	end
	return true
end
However, I need another script that will take off the upgrades for example so if a mage gets +dist then they can't take it off and try to upgrade it again.
 
Last edited:
Okay, the script that I'm using that I posted above will upgrade items to give for example hp+5% or ml+8% etc... Now, I was wondering if you know how to make another script that will take the upgrades off?
 
Lua:
--[[
Slot system 100% by mock \o
]]
---Config
local conf = {
	maxSlotCount=2,
	ignoredIds={}
}
--End
function choose(...) --- Function by mock.
    local arg = {...}
    return arg[math.random(1,#arg)]
end
if not getItemAttack then
    function getItemAttack(uid)
        return getItemAttribute(uid,'attack')
    end
    function getItemDefense(uid)
        return getItemAttribute(uid,'defense')
    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 and not isItemStackable(uid) then
        return true
    end
    return false
end

local function getper()
	local n = 1
	for i=1,10 do
		n = n+math.random(0,10)
		if n < 8*i then
			break
		end
	end
	return n
end
local function getSlotCount(nam)
	local c = 0
	for _ in nam:gmatch('%[(.-)%]') do
		c = c+1
	end
	return c
end
local function getSlots(nam)
	local c = {}
	for slot in nam:gmatch('%[(.-)%]') do
		table.insert(c, slot)
	end
	return c
end


local removeUpgrade = {
	[2420] = "last" -- "all", "last" or "first"
}

function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
	if removeUpgrade[item.itemid] then
		if item.uid == 0 or item.itemid == 0 then return false end
		toPosition.stackpos = 255
		if isInArray(conf.ignoredIds, 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, 24,"You cannot remove a slot from this item. #")
			return true
		end
		if isCreature(itemEx.uid) then
			return false
		end
		local nam = getItemName(itemEx.uid)
		if getSlotCount(nam) >= 1 then
			local slots = getSlots(nam)
			local newName = getItemInfo(itemEx.itemid).name
			for i = 1, #slots do
				if removeUpgrade[item.itemid] ~= "all" and (not((removeUpgrade[item.itemid] == "first" and i == 1) or (removeUpgrade[item.itemid] == "last" and i == #slots))) then
					newName = newName .. ' [' .. slots[i] .. ']'
				end
			end

			doSendMagicEffect(toPosition,30)
			doSendAnimatedText(toPosition,'REMOVED',120)
			doItemSetAttribute(itemEx.uid,'name', newName)
			doRemoveItem(item.uid, 1)
		else
			doPlayerSendTextMessage(cid, 24,"You cannot remove a slot here.")
		end
	else
		if item.uid == 0 or item.itemid == 0 then return false end
		toPosition.stackpos = 255
		if isInArray(conf.ignoredIds, 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, 24,"You cant open a slot on this item.")
			return true
		end
		if isCreature(itemEx.uid) then
			return false
		end
		local nam = getItemName(itemEx.uid)
		if getSlotCount(nam) < conf.maxSlotCount then
			local l = choose('hp','mp','ml','cas','shield','dist')
			local p = getper()
	 
			doSendMagicEffect(toPosition,30)
			nam = nam..' ['..l..'.+'..p..'%]'
			doSendAnimatedText(toPosition,l..' '..p..'%',120)
			doItemSetAttribute(itemEx.uid,'name',nam)
			doRemoveItem(item.uid,1)
		else
			doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
		end
	end
    return true
end

- - - Updated - - -

Add another itemid you want as the "remover" in items.xml and then add it in that table or replace 2420 with the id
local removeUpgrade = {
[2420] = "last" -- "all", "last" or "first"
}

"last" removes last upgrade in name, "first" first upgrade in name and "all" will restore the item to default.
 
Back
Top