I just cant figgure out what is wrong. I've used this for another boss that works fine, The only difference is that this monster have an space bar.
[Lua script error: C:\Users\M\data\scripts\quests\egna_bossar\black_ninja.lua:callback
[2021-31-05 03:26:36.743] [error] ...nkar bra\data\scripts\quests\egna_bossar\black_ninja.lua:34: attempt to index a nil value
stack traceback:
[C]: in function '__index'
...\data\scripts\quests\egna_bossar\black_ninja.lua:34: in function <...a\data\scripts\quests\egna_bossar\black_ninja.lua:23>
[Lua script error: C:\Users\M\data\scripts\quests\egna_bossar\black_ninja.lua:callback
[2021-31-05 03:26:36.743] [error] ...nkar bra\data\scripts\quests\egna_bossar\black_ninja.lua:34: attempt to index a nil value
stack traceback:
[C]: in function '__index'
...\data\scripts\quests\egna_bossar\black_ninja.lua:34: in function <...a\data\scripts\quests\egna_bossar\black_ninja.lua:23>
Lua:
-- lever to black ninja
local config = {
requiredLevel = 200,
daily = true,
roomCenterPosition = Position(33291, 27224, 13),
playerPositions = {
Position(33288, 27243, 13),
Position(33389, 27243, 13),
Position(33390, 27243, 13),
Position(33391, 27243, 13),
Position(33392, 27243, 13)
},
teleportPosition = Position(33291, 27221, 13),
bossPosition = Position(33291, 27229, 13),
kickMinutes = 15, -- minutes
kickPosition = Position(33289, 27247, 13)
}
local leverboss = Action()
function leverboss.onUse(player, item, fromPosition, target, toPosition, isHotkey)
if item.itemid == 9825 then
-- Check if the player that pulled the lever is on the correct position
if player:getPosition() ~= config.playerPositions[1] then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You can\'t start the battle.")
return true
end
local team, participant = {}
for i = 1, #config.playerPositions do
participant = Tile(config.playerPositions[i]):getTopCreature()
-- Check there is a participant player
if participant and participant:isPlayer() then
-- Check participant level
if participant:getLevel() < config.requiredLevel then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE,
"All the players need to be level ".. config.requiredLevel .." or higher.")
return true
end
-- -- Check participant boss timer
if config.daily and participant:getStorageValue(Storage.EgnaBossar.Blackninja) > os.time() then
player:getPosition():sendMagicEffect(CONST_ME_POFF)
player:sendCancelMessage("Not all players are ready yet from last battle.")
return true
end
team[#team + 1] = participant
end
end
-- Check if a team currently inside the boss room
local specs, spec = Game.getSpectators(config.roomCenterPosition, false, false, 14, 14, 13, 13)
for i = 1, #specs do
spec = specs[i]
if spec:isPlayer() then
player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "A team is already inside the boss room.")
return true
end
spec:remove()
end
-- Spawn boss
Game.createMonster("Black Ninja", config.bossPosition)
-- Teleport team participants
for i = 1, #team do
team[i]:getPosition():sendMagicEffect(CONST_ME_POFF)
team[i]:teleportTo(config.teleportPosition)
-- Assign boss timer
team[i]:setStorageValue(Storage.EgnaBossar.Blackninja, os.time() + 20*60*60) -- 20 hours
end
config.teleportPosition:sendMagicEffect(CONST_ME_ENERGYAREA)
-- remove all creatures and teleport to players after 15 minutes
config.kickEventId = addEvent(function ()
for _, spectator in pairs(Game.getSpectators(config.roomCenterPosition, false, false, 14, 14, 13, 13)) do
if spectator:isPlayer() then
spectator:teleportTo(config.kickPosition, false)
spectator:sendCancelMessage("Time is up!")
else
spectator:remove()
end
end
config.kickPosition:sendMagicEffect(CONST_ME_TELEPORT)
end, config.kickMinutes * 60 * 1000)
end
item:transform(9825)
return true
end
leverboss:uid(13002)
leverboss:register()
local cancelKickEvent = CreatureEvent("CancelKickEvent")
function cancelKickEvent.onDeath(...) stopEvent(config.kickEventId) return true end
cancelKickEvent:register()