• 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 system error

Morrison

Intermediate OT User
Joined
Mar 15, 2009
Messages
283
Solutions
3
Reaction score
123
Location
Exive me
GitHub
none
I have Updrade system

And this script have error:
PHP:
[21/03/2010 14:23:19] [Error - Action Interface] 
[21/03/2010 14:23:19] data/actions/scripts/other/upgrade.lua:onUse
[21/03/2010 14:23:19] Description: 
[21/03/2010 14:23:19] data/actions/scripts/other/upgrade.lua:49: attempt to call field 'get' (a nil value)
[21/03/2010 14:23:19] stack traceback:
[21/03/2010 14:23:20] 	data/actions/scripts/other/upgrade.lua:49: in function <data/actions/scripts/other/upgrade.lua:38>

And this the script:
Code:
-- Config
local maxupgradetimes = 50 -- How many times can upgrade the item
local messagetype = 25 -- Color of the message
-- End Config
 
local upgrades = {
    [7800] = {chance = 100, amount = {1, 5}, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7801] = {chance = 80, amount = {6, 10}, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7802] = {chance = 60, amount = {11, 15}, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7803] = {chance = 40, amount = {16, 20}, set = setItemAttack, get = getItemAttack, name = "attack", reset = TRUE},
    [7804] = {chance = 20, amount = {21, 30}, set = setItemAttack, get = getItemAttack, name = "attack", reset = TRUE},
    [7805] = {chance = 100, amount = {1, 5}, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7806] = {chance = 80, amount = {6, 10}, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7807] = {chance = 60, amount = {11, 15}, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7808] = {chance = 40, amount = {16, 20}, set = setItemDefense, get = getItemDefense, name = "defense", reset = TRUE},
    [7809] = {chance = 20, amount = {26, 30}, set = setItemDefense, get = getItemDefense, name = "defense", reset = TRUE},
    [7810] = {chance = 100, amount = {1, 5}, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7811] = {chance = 80, amount = {6, 10}, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7812] = {chance = 60, amount = {11, 15}, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7813] = {chance = 40, amount = {16, 20}, set = setItemArmor, get = getItemArmor, name = "armor", reset = TRUE},
    [7814] = {chance = 20, amount = {21, 30}, set = setItemArmor, get = getItemArmor, name = "armor", reset = TRUE},
    [7815] = {chance = 100, amount = {1, 5}, set = setItemHitChance, get = getItemHitChance, name = "hit"},
    [7816] = {chance = 80, amount = {6, 10}, set = setItemHitChance, get = getItemHitChance, name = "hit"},
    [7817] = {chance = 60, amount = {11, 15}, set = setItemHitChance, get = getItemHitChance, name = "hit"},
    [7818] = {chance = 40, amount = {16, 20}, set = setItemHitChance, get = getItemHitChance, name = "hit", reset = TRUE},
    [7819] = {chance = 20, amount = {21, 30}, set = setItemHitChance, get = getItemHitChance, name = "hit", reset = TRUE},
    [7850] = {chance = 100, amount = {100, 100}, set = setItemAttack, get = getItemAttack, name = "attack"}, -- Only give when your acces is >= 5
    [7851] = {chance = 100, amount = {100, 100}, set = setItemDefense, get = getItemDefense, name = "defense"}, -- Only give when your acces is >= 5
    [7852] = {chance = 100, amount = {100, 100}, set = setItemArmor, get = getItemArmor, name = "armor"}, -- Only give when your acces is >= 5
    [7853] = {chance = 100, amount = {100, 100}, set = setItemHitChance, get = getItemHitChance, name = "hit"} -- Only give when your acces is >= 5
}
local minmax = {
    min1 = 7800, -- Minimum actionid for access < 5
    max1 = 7819, -- Maximum actionid for access < 5
    min2 = 7850, -- Minimum actionid for access >= 5
    max2 = 7853, -- Maximum actionid for access >= 5
}
function onUse(cid, item, fromPosition, itemEx, toPosition)
-- From here on down is a bit difficult (for the noob) understand the structure
    if item.actionid == 0 then
        local new = getPlayerAccess(cid) >= 5 and math.random(minmax.min2, minmax.max2) or math.random(minmax.min1, minmax.max1)
        local text = "You remove the dust and revealed that it is a "..upgrades[new].chance.."% upgrade for "..upgrades[new].name.." +("..upgrades[new].amount[1].."~"..upgrades[new].amount[2]..")."..(upgrades[new].reset ~= nil and "It has a slight chance of reset your item." or "")
        local description = "This crystal has "..upgrades[new].chance.."% upgrade for "..upgrades[new].name.." +("..upgrades[new].amount[1].."~"..upgrades[new].amount[2]..")."..(upgrades[new].reset ~= nil and "It has a slight chance of reset your item." or "")
        doPlayerSendTextMessage(cid, messagetype, text)
        doItemSetAttribute(item.uid, "aid", new) 
        doItemSetAttribute(item.uid, description)
        setItemName(item.uid, "active upgrade crystal")
    elseif upgrades[item.actionid] ~= nil then
        if upgrades[item.actionid].get(itemEx.uid) >= 0 then
            if itemEx.actionid < 100+maxupgradetimes then
                local randomamount = math.ceil(math.random(upgrades[item.actionid].amount[1],upgrades[item.actionid].amount[2]))
                local amount = math.max(0, itemEx.actionid - 100)
                local chance = math.random(0, 100)
                local text = "Upgrade of "..getItemName(itemEx.uid).." failed in "..upgrades[item.actionid].name.." +"..randomamount.."."
                local animation = "Failed!"
                --doSetItemActionId(itemEx.uid, 100+(amount+1))
                --setItemName(itemEx.uid, getItemNameById(itemEx.itemid).." (+"..(amount+1)..")")
                if chance <= upgrades[item.actionid].chance then
                    text = "Upgrade of "..getItemName(itemEx.uid).." up in "..upgrades[item.actionid].name.." +"..randomamount.."."
                    upgrades[item.actionid].set(itemEx.uid, (upgrades[item.actionid].get(itemEx.uid)+randomamount))
                    setItemName(itemEx.uid, getItemNameById(itemEx.itemid).." (+"..(amount+1)..")")
                    doSetItemActionId(itemEx.uid, 100+(amount+1))
                elseif upgrades[item.actionid].reset ~= nil or upgrades[item.actionid].reset == TRUE then
                    if math.random(0, 1) == 1 then
                        text = "The item "..getItemName(itemEx.uid).." was reset."
                        animation = "Reset!"
                        doRemoveItem(itemEx.uid)
                        doPlayerAddItem(cid, getItemIdByName(getItemNameById(itemEx.itemid)))
                    end
                end
                    if (not text == "The item "..getItemName(itemEx.uid).." was reset.") then
                        if getItemAttack(itemEx.uid) >= 0 then
                            setItemAttackSpeed(itemEx.uid, 1)
                        end
                    end
                doPlayerSendTextMessage(cid, messagetype, text)
                doSendMagicEffect(toPosition, (chance <= upgrades[item.actionid].chance and 13 or 2))
                doSendAnimatedText(toPosition, (chance <= upgrades[item.actionid].chance and "Success!" or animation),(chance <= upgrades[item.actionid].chance and TEXTCOLOR_WHITE or TEXTCOLOR_RED))
                doRemoveItem(item.uid)
            else
                doPlayerSendCancel(cid, "This item already has "..maxupgradetimes.." times of upgrades.")
            end
        else
            doPlayerSendCancel(cid, "This item can't upgrade.")
        end
    else
        doPlayerSendCancel(cid, "Sorry, not possible.")
    end
        return TRUE
end

I need this script for tfs0.3.6 or other script +Rep
 
A lot of people have been asking for this, hopefully someone will fix it soon for the community. If not then perhaps I can when I have some time.
 
These functions won't work on TFS 0.3.6

Even if you change them to getItemAttribute(itemEx.uid, "attribute"), it still won't work.
 
PHP:
[21/03/2010 15:03:50] [Error - Action Interface] 
[21/03/2010 15:03:50] data/actions/scripts/other/upgrade.lua:onUse
[21/03/2010 15:03:50] Description: 
[21/03/2010 15:03:50] data/actions/scripts/other/upgrade.lua:49: attempt to call field 'getItemAttribute' (a nil value)
[21/03/2010 15:03:50] stack traceback:
[21/03/2010 15:03:50] 	data/actions/scripts/other/upgrade.lua:49: in function <data/actions/scripts/other/upgrade.lua:38>
 
PHP:
[21/03/2010 15:03:50] [Error - Action Interface] 
[21/03/2010 15:03:50] data/actions/scripts/other/upgrade.lua:onUse
[21/03/2010 15:03:50] Description: 
[21/03/2010 15:03:50] data/actions/scripts/other/upgrade.lua:49: attempt to call field 'getItemAttribute' (a nil value)
[21/03/2010 15:03:50] stack traceback:
[21/03/2010 15:03:50] 	data/actions/scripts/other/upgrade.lua:49: in function <data/actions/scripts/other/upgrade.lua:38>
You're doing it wrong, but as I said it wouldn't work either way.
 
Cykotitan I need this script I'm not the only to need more ussers that occupy this script you are the master of the scripts please
 
hint:

LUA:
local getAttribute = getItemAttribute(itemEx.uid, attribute) or getItemInfo(ItemEx.itemid).attribute

You should be able to figure out the rest yourself now :p
 
hint:

LUA:
local getAttribute = getItemAttribute(itemEx.uid, attribute) or getItemInfo(ItemEx.itemid).attribute

You should be able to figure out the rest yourself now :p
getItemAttribute doesn't work, which means it would fallback to getItemInfo every time.
 
getItemAttribute doesn't work, which means it would fallback to getItemInfo every time.

nope, test an item like this.

give it an attribute and then check for that specificated attribute which you set, it wont return nil then

Elf made it the way, that it returns nil, if the item hasn't yet recieved any new attribute but once the item has an attribute, it'll return the attribute instead of nil.
 
Back
Top