• 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 Error with tfs 1.3 Boss Reward script

mRefaat

Marketing and Coding
Joined
Jan 18, 2014
Messages
854
Solutions
3
Reaction score
141
Location
Egypt
Hello

I converted a script from 0.3.7 to 1.3 but i got an error and need help to fix it.

Here is the script.

Lua:
local config = {
    ["[Boss] Curselich"] = {
        loot = {{302,100,1},{2157,20,10},{8900,5,1},{5958,10,1},{2471,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Curselich, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Taintstrike"] = {
        loot = {{302,100,2},{2157,20,20},{8902,5,1},{11240,6,1},{9999,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Taintstrike, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Terrorfreak"] = {
        loot = {{302,100,3},{2157,20,30},{8904,5,1},{11304,6,1},{2349,10,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Terrorfreak, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Vamphag"] = {
        loot = {{302,100,4},{2157,20,40},{8918,5,1},{11302,3,1},{7760,7,1},{7761,6,1},{6574,10,1},{8303,8,1}},
        message = "Congratulations for defeating [Boss] Vamphag, Your reward is now in your backpack",
        BagId = 9774
    },
    ["Gazharagoth"] = {
        loot = {{302,100,5},{302,10,5},{2157,20,50},{8918,5,1},{8303,8,1},{7760,7,1},{7761,6,1},{6574,9,1},{11242,4,1},{3939,2,1},{11302,3,1}},
        message = "Congratulations for defeating Gazharagoth, Your reward is now in your backpack",
        BagId = 10518
    },
    ["Cartpis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Cartpis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Latryus"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Latryus, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Palwosis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Palwosis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Yatris"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Yatris, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Zargotex"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Zargotex, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Aspdex"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{611,0.,1},{603,1,1},{607,1,1}},
        message = "Congratulations for defeating Aspdex, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Farfit"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{619,1,1},{615,1,1},{623,1,1}},
        message = "Congratulations for defeating Farfit, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Qatro"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{631,1,1},{627,1,1},{635,1,1}},
        message = "Congratulations for defeating Qatro, Your reward is now in your backpack",
        BagId = 5801
    },
    ["The Many"] = {
        loot = {{2157,100,50},{302,100,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating The Many, Your reward is now in your backpack",
        BagId = 5926
    },
    ["Zulazza the Corruptor"] = {
        loot = {{2157,50,50},{302,10,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating Zulazza the Corruptor, Your reward is now in your backpack",
        BagId = 5926
    }
}
--[[
["NameOfMonster"] = {
  loot = {{itemid,chance,count},{itemid,chance,count}},
  message = "Message produced when you kill the boss",
  BagId = dont need explanation
  }
]]

function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]
        if monster then
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    local bag = Game.createItem(monster.BagId, 1)
                    Container(bag):addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                    player:addItemEx(bag, true)
                    player:sendTextMessage(22, monster.message)
                end
            end
        end
    end
    return true
end

and i got this error

Code:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/custom/bossreward.lua:onKill
data/creaturescripts/scripts/custom/bossreward.lua:93: attempt to index a nil value
stack traceback:
        [C]: in function '__index'
        data/creaturescripts/scripts/custom/bossreward.lua:93: in function <data/creaturescripts/scripts/custom/bossreward.lua:86>

I tried to use this change this line
from
Lua:
Container(bag):addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
to
Lua:
bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
but each item looted, player gets it separated in bag ( not all items in 1 bag ) and the message is repeated with each item.

Any help to fix it?
 
Solution
A
Lua:
local config = {
    ["[Boss] Curselich"] = {
        loot = {{302,100,1},{2157,20,10},{8900,5,1},{5958,10,1},{2471,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Curselich, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Taintstrike"] = {
        loot = {{302,100,2},{2157,20,20},{8902,5,1},{11240,6,1},{9999,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Taintstrike, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Terrorfreak"] = {
        loot = {{302,100,3},{2157,20,30},{8904,5,1},{11304,6,1},{2349,10,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Terrorfreak, Your reward is now in your backpack"...
Lua:
local config = {
    ["[Boss] Curselich"] = {
        loot = {{302,100,1},{2157,20,10},{8900,5,1},{5958,10,1},{2471,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Curselich, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Taintstrike"] = {
        loot = {{302,100,2},{2157,20,20},{8902,5,1},{11240,6,1},{9999,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Taintstrike, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Terrorfreak"] = {
        loot = {{302,100,3},{2157,20,30},{8904,5,1},{11304,6,1},{2349,10,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Terrorfreak, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Vamphag"] = {
        loot = {{302,100,4},{2157,20,40},{8918,5,1},{11302,3,1},{7760,7,1},{7761,6,1},{6574,10,1},{8303,8,1}},
        message = "Congratulations for defeating [Boss] Vamphag, Your reward is now in your backpack",
        BagId = 9774
    },
    ["Gazharagoth"] = {
        loot = {{302,100,5},{302,10,5},{2157,20,50},{8918,5,1},{8303,8,1},{7760,7,1},{7761,6,1},{6574,9,1},{11242,4,1},{3939,2,1},{11302,3,1}},
        message = "Congratulations for defeating Gazharagoth, Your reward is now in your backpack",
        BagId = 10518
    },
    ["Cartpis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Cartpis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Latryus"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Latryus, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Palwosis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Palwosis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Yatris"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Yatris, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Zargotex"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Zargotex, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Aspdex"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{611,0.,1},{603,1,1},{607,1,1}},
        message = "Congratulations for defeating Aspdex, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Farfit"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{619,1,1},{615,1,1},{623,1,1}},
        message = "Congratulations for defeating Farfit, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Qatro"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{631,1,1},{627,1,1},{635,1,1}},
        message = "Congratulations for defeating Qatro, Your reward is now in your backpack",
        BagId = 5801
    },
    ["The Many"] = {
        loot = {{2157,100,50},{302,100,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating The Many, Your reward is now in your backpack",
        BagId = 5926
    },
    ["Zulazza the Corruptor"] = {
        loot = {{2157,50,50},{302,10,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating Zulazza the Corruptor, Your reward is now in your backpack",
        BagId = 5926
    }
}
--[[
["NameOfMonster"] = {
  loot = {{itemid,chance,count},{itemid,chance,count}},
  message = "Message produced when you kill the boss",
  BagId = dont need explanation
  }
]]

function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]
        local bag = player:addItem(monster.BagId, 1)
        
        if monster then
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                end
            end
            
            player:sendTextMessage(22, monster.message)
        end
    end
    return true
end
 
Solution
Lua:
local config = {
    ["[Boss] Curselich"] = {
        loot = {{302,100,1},{2157,20,10},{8900,5,1},{5958,10,1},{2471,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Curselich, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Taintstrike"] = {
        loot = {{302,100,2},{2157,20,20},{8902,5,1},{11240,6,1},{9999,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Taintstrike, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Terrorfreak"] = {
        loot = {{302,100,3},{2157,20,30},{8904,5,1},{11304,6,1},{2349,10,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Terrorfreak, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Vamphag"] = {
        loot = {{302,100,4},{2157,20,40},{8918,5,1},{11302,3,1},{7760,7,1},{7761,6,1},{6574,10,1},{8303,8,1}},
        message = "Congratulations for defeating [Boss] Vamphag, Your reward is now in your backpack",
        BagId = 9774
    },
    ["Gazharagoth"] = {
        loot = {{302,100,5},{302,10,5},{2157,20,50},{8918,5,1},{8303,8,1},{7760,7,1},{7761,6,1},{6574,9,1},{11242,4,1},{3939,2,1},{11302,3,1}},
        message = "Congratulations for defeating Gazharagoth, Your reward is now in your backpack",
        BagId = 10518
    },
    ["Cartpis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Cartpis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Latryus"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Latryus, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Palwosis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Palwosis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Yatris"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Yatris, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Zargotex"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Zargotex, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Aspdex"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{611,0.,1},{603,1,1},{607,1,1}},
        message = "Congratulations for defeating Aspdex, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Farfit"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{619,1,1},{615,1,1},{623,1,1}},
        message = "Congratulations for defeating Farfit, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Qatro"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{631,1,1},{627,1,1},{635,1,1}},
        message = "Congratulations for defeating Qatro, Your reward is now in your backpack",
        BagId = 5801
    },
    ["The Many"] = {
        loot = {{2157,100,50},{302,100,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating The Many, Your reward is now in your backpack",
        BagId = 5926
    },
    ["Zulazza the Corruptor"] = {
        loot = {{2157,50,50},{302,10,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating Zulazza the Corruptor, Your reward is now in your backpack",
        BagId = 5926
    }
}
--[[
["NameOfMonster"] = {
  loot = {{itemid,chance,count},{itemid,chance,count}},
  message = "Message produced when you kill the boss",
  BagId = dont need explanation
  }
]]

function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]
        local bag = player:addItem(monster.BagId, 1)
       
        if monster then
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                end
            end
           
            player:sendTextMessage(22, monster.message)
        end
    end
    return true
end
Thanks it worked perfect!
 
Lua:
local config = {
    ["[Boss] Curselich"] = {
        loot = {{302,100,1},{2157,20,10},{8900,5,1},{5958,10,1},{2471,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Curselich, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Taintstrike"] = {
        loot = {{302,100,2},{2157,20,20},{8902,5,1},{11240,6,1},{9999,12,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Taintstrike, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Terrorfreak"] = {
        loot = {{302,100,3},{2157,20,30},{8904,5,1},{11304,6,1},{2349,10,1},{6132,18,1}},
        message = "Congratulations for defeating [Boss] Terrorfreak, Your reward is now in your backpack",
        BagId = 9774
    },
    ["[Boss] Vamphag"] = {
        loot = {{302,100,4},{2157,20,40},{8918,5,1},{11302,3,1},{7760,7,1},{7761,6,1},{6574,10,1},{8303,8,1}},
        message = "Congratulations for defeating [Boss] Vamphag, Your reward is now in your backpack",
        BagId = 9774
    },
    ["Gazharagoth"] = {
        loot = {{302,100,5},{302,10,5},{2157,20,50},{8918,5,1},{8303,8,1},{7760,7,1},{7761,6,1},{6574,9,1},{11242,4,1},{3939,2,1},{11302,3,1}},
        message = "Congratulations for defeating Gazharagoth, Your reward is now in your backpack",
        BagId = 10518
    },
    ["Cartpis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Cartpis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Latryus"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Latryus, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Palwosis"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Palwosis, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Yatris"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Yatris, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Zargotex"] = {
        loot = {{11400,100,1},{302,10,5}},
        message = "Congratulations for defeating Zargotex, Your reward is now in your backpack",
        BagId = 1998
    },
    ["Aspdex"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{611,0.,1},{603,1,1},{607,1,1}},
        message = "Congratulations for defeating Aspdex, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Farfit"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{619,1,1},{615,1,1},{623,1,1}},
        message = "Congratulations for defeating Farfit, Your reward is now in your backpack",
        BagId = 5801
    },
    ["Qatro"] = {
        loot = {{2157,50,50},{2157,50,50},{302,10,5},{631,1,1},{627,1,1},{635,1,1}},
        message = "Congratulations for defeating Qatro, Your reward is now in your backpack",
        BagId = 5801
    },
    ["The Many"] = {
        loot = {{2157,100,50},{302,100,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating The Many, Your reward is now in your backpack",
        BagId = 5926
    },
    ["Zulazza the Corruptor"] = {
        loot = {{2157,50,50},{302,10,5},{7450,1,1},{7455,1,1},{7420,1,1},{7367,1,1},{7387,1,1},{7429,1,1},{11400,1,1}},
        message = "Congratulations for defeating Zulazza the Corruptor, Your reward is now in your backpack",
        BagId = 5926
    }
}
--[[
["NameOfMonster"] = {
  loot = {{itemid,chance,count},{itemid,chance,count}},
  message = "Message produced when you kill the boss",
  BagId = dont need explanation
  }
]]

function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]
        local bag = player:addItem(monster.BagId, 1)
       
        if monster then
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                end
            end
           
            player:sendTextMessage(22, monster.message)
        end
    end
    return true
end

im using tfs 1.3 downgrane by nekiro and everything its ok, but when i kill other normal monster(not on the list) then i got error in console:

Lua:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/others/bossreward.lua:onKill
data/creaturescripts/scripts/others/bossreward.lua:29: attempt to index local 'monster' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/creaturescripts/scripts/others/bossreward.lua:29: in function <data/creaturescripts/scripts/others/bossreward.lua:26>
 
im using tfs 1.3 downgrane by nekiro and everything its ok, but when i kill other normal monster(not on the list) then i got error in console:

Lua:
Lua Script Error: [CreatureScript Interface]
data/creaturescripts/scripts/others/bossreward.lua:onKill
data/creaturescripts/scripts/others/bossreward.lua:29: attempt to index local 'monster' (a nil value)
stack traceback:
        [C]: in function '__index'
        data/creaturescripts/scripts/others/bossreward.lua:29: in function <data/creaturescripts/scripts/others/bossreward.lua:26>
Lua:
function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]        
        if monster then
            local bag = player:addItem(monster.BagId, 1)
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                end
            end
            
            player:sendTextMessage(22, monster.message)
        end
    end
    return true
end
 
Lua:
function onKill(player, target)
    if player:isPlayer() and target:isMonster() then
        local monster = config[Creature(target):getName()]       
        if monster then
            local bag = player:addItem(monster.BagId, 1)
            for i = 1,#monster.loot do
                if monster.loot[i][2] >= math.random(1,100) then
                    bag:addItem(monster.loot[i][1], monster.loot[i][3], INDEX_WHEREEVER, FLAG_NOLIMIT)
                end
            end
           
            player:sendTextMessage(22, monster.message)
        end
    end
    return true
end

thanks :)
 
Back
Top