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

Lua New Function?

Trader

New Member
Joined
Aug 12, 2009
Messages
219
Reaction score
2
Well I got this line in a script that I got:

Code:
        if fetishs[item.actionid].[B][I][COLOR="red"]get[/COLOR][/I][/B](itemEx.uid) > 0

And I get this error:

Code:
[30/08/2010 15:35:22] data/actions/scripts/.lua:38: attempt to call field 'get' (a nil value)
[30/08/2010 15:35:22] stack traceback:

Can someone tell me how to fix this? Rep+
 
Code:
  local messagetype = MESSAGE_EVENT_ORANGE
local fetishs = {
    [7800] = {chance = 100, amount = 1, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7801] = {chance = 90, amount = 2, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7802] = {chance = 75, amount = 3, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7803] = {chance = 60, amount = 4, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7804] = {chance = 50, amount = 5, set = setItemAttack, get = getItemAttack, name = "attack", destroy = TRUE},
    [7805] = {chance = 100, amount = 1, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7806] = {chance = 90, amount = 2, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7807] = {chance = 75, amount = 3, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7808] = {chance = 60, amount = 4, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7809] = {chance = 50, amount = 5, set = setItemDefense, get = getItemDefense, name = "defense", destroy = TRUE},
    [7810] = {chance = 100, amount = 1, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7811] = {chance = 90, amount = 2, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7812] = {chance = 75, amount = 3, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7813] = {chance = 60, amount = 4, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7814] = {chance = 50, amount = 5, set = setItemArmor, get = getItemArmor, name = "armor", destroy = TRUE},
    [7850] = {chance = 100, amount = 5, set = setItemAttack, get = getItemAttack, name = "attack"}, -- only given when access >= 5
    [7851] = {chance = 100, amount = 5, set = setItemDefense, get = getItemDefense, name = "defense"}, -- only given when access >= 5
    [7852] = {chance = 100, amount = 5, set = setItemArmor, get = getItemArmor, name = "armor"}, -- only given when access >= 5
}
local minmax = {
    min1 = 7800, -- minimum of the random fetishs for access < 5
    max1 = 7814, -- maximum of the random fetishs for access < 5
    min2 = 7850, -- minimum of the random fetishs for access >= 5
    max2 = 7852, -- maximum of the random fetishs for access >= 5
}
-- WARNING: look further down and your eyes will burn. --
function onUse(cid, item, fromPosition, itemEx, toPosition)
    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 reveal that it is a "..fetishs[new].chance.."% upgrade crystal for "..fetishs[new].name.." +"..fetishs[new].amount.."."..(fetishs[new].destroy ~= nil and " It has a slight chance of breaking your item." or "")
        doPlayerSendTextMessage(cid, messagetype, text)
        doSetItemActionId(item.uid, new)
        doItemSetAttribute(item.uid, "description", text)
        setItemName(item.uid, fetishs[new].chance.."% upgrade crystal for "..fetishs[new].name.." +"..fetishs[new].amount)
    elseif fetishs[item.actionid] ~= nil then
        if fetishs[item.actionid].get(itemEx.uid) > 0 then
            if itemEx.actionid < 110 then
                local amount = math.max(0, itemEx.actionid - 100)
                local chance = math.random(0, 100)
                local text = fetishs[item.actionid].name.." upgrade on "..getItemNameById(itemEx.itemid).." failed."
                if chance <= fetishs[item.actionid].chance then
                    fetishs[item.actionid].set(itemEx.uid, (fetishs[item.actionid].get(itemEx.uid)+fetishs[item.actionid].amount))
                    text = getItemNameById(itemEx.itemid).." "..fetishs[item.actionid].name.." +"..fetishs[item.actionid].amount.."."
                elseif fetishs[item.actionid].destroy ~= nil or fetishs[item.actionid].destroy == TRUE then
                    if math.random(0, 1) == 1 then
                        doRemoveItem(itemEx.uid)
                        text = getItemNameById(itemEx.itemid).." has been destroyed."
                    end
                end
		if (chance <= fetishs[item.actionid].chance) then
                doPlayerSendTextMessage(cid, messagetype, text)
                doSetItemActionId(itemEx.uid, 100+(amount+1))
                setItemName(itemEx.uid, getItemNameById(itemEx.itemid).." (+ "..(amount+1)..")")
                doSendMagicEffect(toPosition,13)
		doSendAnimatedText(toPosition,"Success!",TEXTCOLOR_WHITE)
		else
		doSendMagicEffect(toPosition,2)
		doSendAnimatedText(toPosition,"Failed!",TEXTCOLOR_RED)
		end		 
		doRemoveItem(item.uid)
            else
                doPlayerSendCancel(cid, "This weapon has already been upgraded 10 times.")
            end
        else
            doPlayerSendCancel(cid, "This item may not be upgraded.")
        end
    else
        doPlayerSendCancel(cid, "Sorry, not possible.")
    end
        return TRUE
end

Here is the whole thing, I just need to fix the function that I mentioned above I think :0
 
try that and see if script function well
Lua:
  local messagetype = MESSAGE_EVENT_ORANGE
local fetishs = {
    [7800] = {chance = 100, amount = 1, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7801] = {chance = 90, amount = 2, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7802] = {chance = 75, amount = 3, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7803] = {chance = 60, amount = 4, set = setItemAttack, get = getItemAttack, name = "attack"},
    [7804] = {chance = 50, amount = 5, set = setItemAttack, get = getItemAttack, name = "attack", destroy = TRUE},
    [7805] = {chance = 100, amount = 1, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7806] = {chance = 90, amount = 2, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7807] = {chance = 75, amount = 3, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7808] = {chance = 60, amount = 4, set = setItemDefense, get = getItemDefense, name = "defense"},
    [7809] = {chance = 50, amount = 5, set = setItemDefense, get = getItemDefense, name = "defense", destroy = TRUE},
    [7810] = {chance = 100, amount = 1, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7811] = {chance = 90, amount = 2, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7812] = {chance = 75, amount = 3, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7813] = {chance = 60, amount = 4, set = setItemArmor, get = getItemArmor, name = "armor"},
    [7814] = {chance = 50, amount = 5, set = setItemArmor, get = getItemArmor, name = "armor", destroy = TRUE},
    [7850] = {chance = 100, amount = 5, set = setItemAttack, get = getItemAttack, name = "attack"}, -- only given when access >= 5
    [7851] = {chance = 100, amount = 5, set = setItemDefense, get = getItemDefense, name = "defense"}, -- only given when access >= 5
    [7852] = {chance = 100, amount = 5, set = setItemArmor, get = getItemArmor, name = "armor"}, -- only given when access >= 5
}
local minmax = {
    min1 = 7800, -- minimum of the random fetishs for access < 5
    max1 = 7814, -- maximum of the random fetishs for access < 5
    min2 = 7850, -- minimum of the random fetishs for access >= 5
    max2 = 7852, -- maximum of the random fetishs for access >= 5
}
-- WARNING: look further down and your eyes will burn. --
function onUse(cid, item, fromPosition, itemEx, toPosition)
    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 reveal that it is a "..fetishs[new].chance.."% upgrade crystal for "..fetishs[new].name.." +"..fetishs[new].amount.."."..(fetishs[new].destroy ~= nil and " It has a slight chance of breaking your item." or "")
        doPlayerSendTextMessage(cid, messagetype, text)
        doSetItemActionId(item.uid, new)
        doItemSetAttribute(item.uid, "description", text)
        setItemName(item.uid, fetishs[new].chance.."% upgrade crystal for "..fetishs[new].name.." +"..fetishs[new].amount)
    elseif fetishs[item.actionid] ~= nil then
        if itemEx.uid > 0 then
            if itemEx.actionid < 110 then
                local amount = math.max(0, itemEx.actionid - 100)
                local chance = math.random(0, 100)
                local text = fetishs[item.actionid].name.." upgrade on "..getItemNameById(itemEx.itemid).." failed."
                if chance <= fetishs[item.actionid].chance then
                    fetishs[item.actionid].set(itemEx.uid, (fetishs[item.actionid].get(itemEx.uid)+fetishs[item.actionid].amount))
                    text = getItemNameById(itemEx.itemid).." "..fetishs[item.actionid].name.." +"..fetishs[item.actionid].amount.."."
                elseif fetishs[item.actionid].destroy ~= nil or fetishs[item.actionid].destroy == TRUE then
                    if math.random(0, 1) == 1 then
                        doRemoveItem(itemEx.uid)
                        text = getItemNameById(itemEx.itemid).." has been destroyed."
                    end
                end
		if (chance <= fetishs[item.actionid].chance) then
                doPlayerSendTextMessage(cid, messagetype, text)
                doSetItemActionId(itemEx.uid, 100+(amount+1))
                setItemName(itemEx.uid, getItemNameById(itemEx.itemid).." (+ "..(amount+1)..")")
                doSendMagicEffect(toPosition,13)
		doSendAnimatedText(toPosition,"Success!",TEXTCOLOR_WHITE)
		else
		doSendMagicEffect(toPosition,2)
		doSendAnimatedText(toPosition,"Failed!",TEXTCOLOR_RED)
		end		 
		doRemoveItem(item.uid)
            else
                doPlayerSendCancel(cid, "This weapon has already been upgraded 10 times.")
            end
        else
            doPlayerSendCancel(cid, "This item may not be upgraded.")
        end
    else
        doPlayerSendCancel(cid, "Sorry, not possible.")
    end
        return TRUE
end
 
Last edited:
Code:
[30/08/2010 16:30:37] [Error - Action Interface] 
[30/08/2010 16:30:37] data/actions/scripts/upgrade.lua:onUse
[30/08/2010 16:30:37] Description: 
[30/08/2010 16:30:37] data/actions/scripts/upgrade.lua:38: attempt to compare number with nil
[30/08/2010 16:30:37] stack traceback:
[30/08/2010 16:30:37] 	data/actions/scripts/upgrade.lua:38: in function <data/actions/scripts/upgrade.lua:29>

:S
 
Code:
[30/08/2010 17:11:32] [Error - Action Interface] 
[30/08/2010 17:11:32] data/actions/scripts/upgrade.lua:onUse
[30/08/2010 17:11:32] Description: 
[30/08/2010 17:11:32] data/actions/scripts/upgrade.lua:44: attempt to call field 'get' (a nil value)
[30/08/2010 17:11:32] stack traceback:
[30/08/2010 17:11:32] 	data/actions/scripts/upgrade.lua:44: in function <data/actions/scripts/upgrade.lua:29>

Still getting this error :/
 
after taking a deper look at the script i see it is a sux one. And will gave error in get and set... so you need a better one.
Tell m,e how it is suppsoed to work and i >may< make one for you.
 

Similar threads

Back
Top