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

Action Perfect items upgrade 2.0 -- Slot sytem

Mock

Mock the bear (MTB)
Joined
Jul 29, 2008
Messages
619
Reaction score
106
Location
Brazil

  • [*]Author: Mock
    [*]Tested:
    TFS 0.3.6

News:
You can upgrade items with slot: http://otland.net/f81/slot-system-89448/
You can upgrade bows and xbows
Items +1 to +999...

I think now all bugs was fixed :D

Add this tags on actions.xml
Code:
<action itemid="8306" event="script" value="upgrade.lua"/>
<action itemid="8305" event="script" value="upgrade.lua"/>

The fisrt tag is to item 8306 (normal item upgrade)
and seconds 8305 (an another item with 100% chance addtional
grin.gif
)

Now on upgrade.lua:

Lua:
--- Perfect refine system by Mock the bear (MTB).
--- Email: [email][email protected][/email]
-- &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 = 17,
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, 24,"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, 24,"Your item is on max level, you can't upgrade it.")
		end
		doPlayerSendTextMessage(cid, 24,"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, 24,"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, 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, getItemNameById(itemEx.itemid)..slot)
					addEvent(doPlayerSendTextMessage,500,cid, 24,"Your item back to normal.")
				else
					setItemName(itemEx.uid, getItemNameById(itemEx.itemid)..' +'..(level-1)..slot)
					addEvent(doPlayerSendTextMessage,500,cid, 24,"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
upu.png

:thumbup:

Its good use this scrpt with my slot system: http://otland.net/f81/slot-system-89448/

So you can do something like this:


Code:
[B]12:02[COLOR="DarkSlateGray"] You see a knife [/COLOR][COLOR="Navy"]+1[/COLOR] [COLOR="Red"][hp.+7%][/COLOR][COLOR="DarkGreen"] (Atk:8, Def:6).[/COLOR][/B]
 
Last edited:
Item 1
Code:
[29/06/2010 00:24:36] [Error - Action Interface] 
[29/06/2010 00:24:36] data/actions/scripts/upgrade.lua:onUse
[29/06/2010 00:24:36] Description: 
[29/06/2010 00:24:36] data/actions/scripts/upgrade.lua:83: attempt to call global 'getItemArmor' (a nil value)
[29/06/2010 00:24:36] stack traceback:
[29/06/2010 00:24:36] 	data/actions/scripts/upgrade.lua:83: in function 'doTransform'
[29/06/2010 00:24:36] 	data/actions/scripts/upgrade.lua:102: in function <data/actions/scripts/upgrade.lua:88>

Item 2
Code:
[29/06/2010 00:25:13] [Error - Action Interface] 
[29/06/2010 00:25:13] data/actions/scripts/upgrade.lua:onUse
[29/06/2010 00:25:13] Description: 
[29/06/2010 00:25:13] data/actions/scripts/upgrade.lua:83: attempt to call global 'getItemArmor' (a nil value)
[29/06/2010 00:25:13] stack traceback:
[29/06/2010 00:25:13] 	data/actions/scripts/upgrade.lua:83: in function 'doTransform'
[29/06/2010 00:25:13] 	data/actions/scripts/upgrade.lua:102: in function <data/actions/scripts/upgrade.lua:88>

tfs 0.3.6pl1


Strange.. It's almost new tfs, without other bugs ; o
 
como alguem pode ser tão inteligente x_x
mock, me ensnia matemática? HUEAUEAUEAUE
essas suas formulas mano, AHAHAH SOBRENATURAIS HAUEAUEAUEAHE

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

Fala isso de uma forma que eu consiga ler? pufavo *-*
Adorei o script!
Posso usar ele junto com aquele seu upgrade +1 +2 +3 ?
O que eu tenho seu, não é o de Slot.
é o outro Peerfect Item upgrade!

é so jogar esse script , dentro do antigo?



Error -

[28/06/2010 22:14:32] [Error - Action Interface]
[28/06/2010 22:14:32] data/actions/scripts/upgrade.lua:eek:nUse
[28/06/2010 22:14:32] Description:
[28/06/2010 22:14:32] data/actions/scripts/upgrade.lua:83: attempt to call global 'getItemArmor' (a nil value)
[28/06/2010 22:14:32] stack traceback:
[28/06/2010 22:14:32] data/actions/scripts/upgrade.lua:83: in function 'doTransform'
[28/06/2010 22:14:32] data/actions/scripts/upgrade.lua:102: in function <data/actions/scripts/upgrade.lua:88>


HELP USSSSSS MOOOOOOCK =T

Agora mock, qd eu usei a shardzinha de Slot, deu Crash :D!
Usei em mim , ai paareceu a golden boots, qd eu usei na boots, puft !

0.3.6!
 
Last edited:
Fixed? opa, vo ver! vamo ver noq vai dar :D !!!!!
Agora o Slot continua crashando!

--
jaja edito esse topic!

-- Boa mockão.
now is working perfeclty, just wait the Slot :) !!!!!!

BR MODE-
O Mock, como é calculado essa chance mesmo?
Cada nivel que sobe, diminui 10% ? coisa de Pitágoras o_O
 
Last edited:
@MrLipzZz
-- &a = weapon attack
-- &d = weapon defense
-- &s = shield defense
-- &p = armor defense
-- # = nivel do item > item level > 5
-- @ = max level >> 17
chance='(100/math.sqrt((((@/4)+(#*2))/@)*#))',
(100/math.sqrt((((17/4)+(5*2))/17)*5))
100/math.sqrt((((4,25)+(10))/17)*5)
100/math.sqrt((((14,25))/17)*5)
100/math.sqrt((0,832...)*5)
100/math.sqrt(4,191..)
100/2,something = 48.846339804336% ---> 48%
 
An, ok..

Isso diz mais ou menos o seguinte.
No nivel 1 a chance é 100% e no nivel 5 ja fica 48% ?
 
Não sou bom essa matemática Pitagoras MODE ..
Então, pra abaixar as chances, simplesmente troquei o 100 por 40 o.o
agora, upar o item pela primeira x eh 100%, dps cai direto pra 50 XDD
agora ta bão :D peaokepoa
vlw mockevisk !
 
@MrLipzZz
chance='math.random(0,100)'
pronto.
RIRAIRAIRAIRAIRAI
 
ASOHSASAIEHSAEASOIEOASHE
essa eu entendi JASEASEASPOEK
mas se o cara tive sorte, ele vai ate +9 facil KASEOAEAPSASk
 
This works in TFS 0.3.6?
And... always will be perfect the upgrade or have a chance %?
 
Back
Top