Stanos
Veteran OT User
Hello, so i have really really weird problem i looked into a code for like one hour and i couldn't find out whats wrong. So print said
which is really odd because tile pos is correct checked with rme, checked with admin look, pos is completely correct
it says that third tile is incorrect which is non-sense why third, why not first second or fourth. But maybe im blind and miss something? But i would highly doubt. Full code
Code:
Annihilator tile does not exist for position 552, 823, 8
Lua:
[3] = {fromPos = Position(522, 823, 8), toPos = Position(577, 823, 8)},
Lua:
local config = {
duration = 30, -- time till reset, in minutes
level_req = 300, -- minimum level to do quest
min_players = 4, -- minimum players to join quest
lever_id = 1945, -- id of lever before pulled
pulled_id = 1946 -- id of lever after pulled
}
local player_positions = {
[1] = {fromPos = Position(552, 821, 8), toPos = Position(577, 821, 8)},
[2] = {fromPos = Position(552, 822, 8), toPos = Position(577, 822, 8)},
[3] = {fromPos = Position(522, 823, 8), toPos = Position(577, 823, 8)},
[4] = {fromPos = Position(522, 824, 8), toPos = Position(577, 824, 8)}
}
local monsters = {
[1] = {pos = Position(577, 819, 8), name = "Fighter Boss"},
[2] = {pos = Position(575, 820, 8), name = "Fighter"},
[3] = {pos = Position(579, 820, 8), name = "Fighter"},
[4] = {pos = Position(575, 822, 8), name = "Fighter"},
[5] = {pos = Position(579, 822, 8), name = "Fighter"},
[6] = {pos = Position(575, 824, 8), name = "Fighter"},
[7] = {pos = Position(579, 824, 8), name = "Fighter"}
}
function doResetAnnihilator(uid)
local item = Item(uid)
if not item then
return
end
local monster_names = {}
for key, value in pairs(monsters) do
if not isInArray(monster_names, value.name) then
monster_names[monster_names + 1] = value.name
end
end
for i = 1, #monsters do
local creatures = Tile(monsters[i].pos):getCreatures()
for key, creature in pairs(creatures) do
if isInArray(monster_names, creature:getName()) then
creature:remove()
end
end
end
for i = 1, #player_positions do
local creatures = Tile(player_positions[i].toPos):getCreatures()
for key, creature in pairs(creatures) do
if isInArray(monster_names, creature:getName()) then
creature:remove()
end
end
end
item:transform(config.lever_id)
end
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
if item.itemid ~= config.lever_id then
return player:sendCancelMessage("The quest is currently in use. Cooldown is " .. config.duration .. " minutes.")
end
local participants, pull_player = {}, false
for i = 1, #player_positions do
local fromPos = player_positions[i].fromPos
local tile = Tile(fromPos)
if not tile then
print(">> ERROR: Annihilator tile does not exist for Position(" .. fromPos.x .. ", " .. fromPos.y .. ", " .. fromPos.z .. ").")
return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
end
local creature = tile:getBottomCreature()
if creature then
local participant = creature:getPlayer()
if not participant then
return player:sendCancelMessage(participant:getName() .. " is not a valid participant.")
end
if participant:getLevel() < config.level_req then
return player:sendCancelMessage(participant:getName() .. " is not the required level.")
end
if participant.uid == player.uid then
pull_player = true
end
participants[#participants + 1] = {participant = participant, toPos = player_positions[i].toPos}
end
end
if #participants < config.min_players then
return player:sendCancelMessage("You do not have the required amount of participants.")
end
if not pull_player then
return player:sendCancelMessage("You are in the wrong position.")
end
for i = 1, #monsters do
local toPos = monsters[i].pos
if not Tile(toPos) then
print(">> ERROR: Annihilator tile does not exist for Position(" .. toPos.x .. ", " .. toPos.y .. ", " .. toPos.z .. ").")
return player:sendCancelMessage("There is an issue with this quest. Please contact an administrator.")
end
Game.createMonster(monsters[i].name, monsters[i].pos, false, true)
end
for i = 1, #participants do
participants[i].participant:teleportTo(participants[i].toPos)
participants[i].toPos:sendMagicEffect(CONST_ME_TELEPORT)
end
item:transform(config.pulled_id)
addEvent(doResetAnnihilator, config.duration * 60 * 1000, item.uid)
return true
end