ssiwyy158
Member
- Joined
- Jan 24, 2011
- Messages
- 128
- Solutions
- 2
- Reaction score
- 13
Hello. I use this script :
on my server. All works but when i use item to upgrade on myself or NPC, monster i get this error. Im using tfs 1.2.
Action script:
global.lua:
Action - [TFS 1.1] Item's upgrading by jewels
This is a very very old upgrade system(April 22 2010). It was so good that it deserved to be rewritten. Credits: @Azi original thread(0.3.6): http://otland.net/threads/items-upgrading-by-jewels-ver-3-for-tfs-0-3-6.79098/ 07:15 You see a runed sword (Atk:45, Def:32 +2). It can only be wielded...
otland.net
Lua:
Lua Script Error: [Action Interface]
data/actions/scripts/other/cup.lua:onUse
data/upgrade.lua:2: attempt to index a nil value
stack traceback:
[C]: in function '__index'
data/upgrade.lua:2: in function 'getItemAttribute'
data/actions/scripts/other/cup.lua:53: in function <data/actions/scripts/other/cup.lua:50>
Action script:
Code:
local conf = {
["level"] = {
-- [item_level] = {successPercent= CHANCE TO UPGRADE ITEM, downgradeLevel = ITEM GETS THIS LEVEL IF UPGRADE FAILS}
[1] = {successPercent = 75, downgradeLevel = 0},
[2] = {successPercent = 60, downgradeLevel = 1},
[3] = {successPercent = 55, downgradeLevel = 2},
[4] = {successPercent = 40, downgradeLevel = 3},
[5] = {successPercent = 35, downgradeLevel = 4},
[6] = {successPercent = 20, downgradeLevel = 5},
[7] = {successPercent = 15, downgradeLevel = 0},
[8] = {successPercent = 10, downgradeLevel = 0},
[9] = {successPercent = 5, downgradeLevel = 0}
},
["upgrade"] = { -- how many percent attributes are rised?
attack = 1, -- attack %
defense = 1, -- defense %
extraDefense = 1, -- extra defense %
armor = 1, -- armor %
}
}
-- // do not touch // --
-- Upgrading system by Azi [Ersiu] --
-- Edited for TFS 1.1 by Zbizu --
local upgrading = {
upValue = function (value, level, percent)
if value < 0 then return 0 end
if level == 0 then return value end
local nVal = value
for i = 1, level do
nVal = nVal + (math.ceil((nVal/100*percent)))
end
return nVal > 0 and nVal or value
end,
getLevel = function (item)
local name = Item(item):getName():split('+')
if (#name == 1) then
return 0
end
return math.abs(name[2])
end,
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
local it = ItemType(itemEx.itemid)
if (((it:getWeaponType() > 0 and it:getWeaponType() ~= WEAPON_WAND) or getItemAttribute(itemEx.uid, ITEM_ATTRIBUTE_ARMOR) > 0) and not isItemStackable(itemEx.itemid)) then
local level = upgrading.getLevel(itemEx.uid)
if(level < #conf["level"])then
local nLevel = (conf["level"][(level+1)].successPercent >= math.random(1,100)) and (level+1) or conf["level"][level].downgradeLevel
if(nLevel > level)then
doSendMagicEffect(toPosition, CONST_ME_MAGIC_GREEN)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Upgrade to level " .. nLevel .. " successful!")
else
doSendMagicEffect(toPosition, CONST_ME_BLOCKHIT)
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Upgrade failed. Your " .. it:getName() .. " is now on level " .. nLevel .. "")
end
doItemSetAttribute(itemEx.uid, ITEM_ATTRIBUTE_NAME, it:getName()..((nLevel>0) and "+"..nLevel or ""))
doItemSetAttribute(itemEx.uid, ITEM_ATTRIBUTE_ATTACK, upgrading.upValue(it:getAttack(), nLevel, conf["upgrade"].attack))
doItemSetAttribute(itemEx.uid, ITEM_ATTRIBUTE_DEFENSE, upgrading.upValue(it:getDefense(), nLevel, conf["upgrade"].defense))
doItemSetAttribute(itemEx.uid, ITEM_ATTRIBUTE_EXTRADEFENSE, upgrading.upValue(it:getExtraDefense(), nLevel, conf["upgrade"].extraDefense))
doItemSetAttribute(itemEx.uid, ITEM_ATTRIBUTE_ARMOR, upgrading.upValue(it:getArmor(), nLevel, conf["upgrade"].armor))
doRemoveItem(item.uid, 1)
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "Your " .. it:getName() .. " is on max level alredy.")
end
else
doPlayerSendTextMessage(cid, MESSAGE_INFO_DESCR, "You cannot upgrade this item.")
end
end
global.lua:
Code:
---0.3.7 Function ---
function getItemAttribute(uid, key)
local i = ItemType(Item(uid):getId())
local string_attributes = {
[ITEM_ATTRIBUTE_NAME] = i:getName(),
[ITEM_ATTRIBUTE_ARTICLE] = i:getArticle(),
[ITEM_ATTRIBUTE_PLURALNAME] = i:getPluralName(),
["name"] = i:getName(),
["article"] = i:getArticle(),
["pluralname"] = i:getPluralName()
}
local numeric_attributes = {
[ITEM_ATTRIBUTE_WEIGHT] = i:getWeight(),
[ITEM_ATTRIBUTE_ATTACK] = i:getAttack(),
[ITEM_ATTRIBUTE_DEFENSE] = i:getDefense(),
[ITEM_ATTRIBUTE_EXTRADEFENSE] = i:getExtraDefense(),
[ITEM_ATTRIBUTE_ARMOR] = i:getArmor(),
[ITEM_ATTRIBUTE_HITCHANCE] = i:getHitChance(),
[ITEM_ATTRIBUTE_SHOOTRANGE] = i:getShootRange(),
["weight"] = i:getWeight(),
["attack"] = i:getAttack(),
["defense"] = i:getDefense(),
["extradefense"] = i:getExtraDefense(),
["armor"] = i:getArmor(),
["hitchance"] = i:getHitChance(),
["shootrange"] = i:getShootRange()
}
local attr = Item(uid):getAttribute(key)
if tonumber(attr) then
if numeric_attributes[key] then
return attr ~= 0 and attr or numeric_attributes[key]
end
else
if string_attributes[key] then
if attr == "" then
return string_attributes[key]
end
end
end
return attr
end
function doItemSetAttribute(uid, key, value)
return Item(uid):setAttribute(key, value)
end
function doItemEraseAttribute(uid, key)
return Item(uid):removeAttribute(key)
end
--- END 0.3.7 Function ---