pvpArena = { arena = {}, arena3 = {}, arena5 = {} }
pvpArenaEvents = {}
local arenaTeleports = { arena = {tp1 = {x = 1022, y = 1024, z = 7}, tp2 = {x = 1025, y = 1024, z = 7}} }
local tpBack = {x = 1023, y = 1029, z = 7}
local arenaStorage, pointsStorage, registeredStorage, queueStorage = 3142, 3143, 3144, 3145
local function playersIn(arena)
local n = 0
for _ in ipairs(arena) do
n = n + 1
end
return n
end
local function arenaJoin(player, arena, max)
local currentPlayers = playersIn(arena)
if currentPlayers >= max then
player:sendCancelMessage(MESSAGE_INFO_DESCR, "The arena is being used.")
return false
end
if currentPlayers > 0 then
local playerPoints = player:getStorageValue(pointsStorage)
for _, arenaPlayerName in ipairs(arena) do
if arenaPlayerName == player:getName() then
player:sendCancelMessage("You're already in the queue.")
return false
end
end
local arenaPlayer = Player(arena[1])
if (arenaPlayer:getStorageValue(pointsStorage) > playerPoints + 200) or (arenaPlayer:getStorageValue(pointsStorage) < playerPoints - 200) then
player:sendCancelMessage("Your points are too low or high for the current queue.")
return false
end
end
arena[#arena+1] = player:getName()
if playersIn(arena) == max then
for _, arenaPlayerName in ipairs(arena) do
Player(arenaPlayerName):sendTextMessage(MESSAGE_INFO_DESCR, "Arena is ready and will start in one minute, please leave any combat that you're in.")
end
return true
else
player:sendTextMessage(MESSAGE_INFO_DESCR, "You're now in the arena queue.")
end
return false
end
local function arenaCheck(arena)
for _, arenaPlayer in ipairs(arena) do
local arenaPlayer = Player(arenaPlayer)
if arenaPlayer == nil then
for k, arenaPlayerMessage in ipairs(arena) do
if Player(arenaPlayerMessage) ~= nil then
Player(arenaPlayerMessage):sendTextMessage(MESSAGE_INFO_DESCR, "A player is offline, arena was canceled, please join the queue again later.")
end
arena[k] = nil
end
return false
end
if arenaPlayer:getCondition(CONDITION_INFIGHT, CONDITIONID_DEFAULT) then
for k, arenaPlayer in ipairs(arena) do
if Player(arenaPlayer) ~= nil then
Player(arenaPlayer):sendTextMessage(MESSAGE_INFO_DESCR, "A player was in battle, arena was canceled, please join the queue again later.")
end
arena[k] = nil
end
return false
end
if arenaPlayer:getStorageValue(registeredStorage) ~= 1 then
arenaPlayer:sendTextMessage(MESSAGE_INFO_DESCR, "As it's your first arena, you'll get 1000 points to start.")
arenaPlayer:setStorageValue(pointsStorage, 1000)
arenaPlayer:setStorageValue(registeredStorage, 1)
end
end
return true
end
local function finishArena(arena)
for k, arenaPlayer in ipairs(arena) do
local arenaPlayer = Player(arenaPlayer)
arenaPlayer:sendTextMessage(MESSAGE_INFO_DESCR, "Arena is over by time limit.")
arenaPlayer:unregisterEvent("PvpArena")
doTeleportThing(arenaPlayer.uid, tpBack)
arena[k] = nil
end
end
local function tpArena(arena, arenaType)
if arenaCheck(arena) then
for _, arenaPlayer in ipairs(arena) do
local arenaPlayer = Player(arenaPlayer)
arenaPlayer:registerEvent("PvpArena")
arenaPlayer:setStorageValue(arenaStorage, arenaType)
end
if arenaType == 1 then
for k, arenaPlayer in ipairs(arena) do
if k <= #arena/2 then
doTeleportThing(Player(arenaPlayer).uid, arenaTeleports.arena.tp1)
else
doTeleportThing(Player(arenaPlayer).uid, arenaTeleports.arena.tp2)
end
end
pvpArenaEvents.arena1 = addEvent(finishArena, 15 * 60 * 1000, pvpArena.arena)
elseif arenaType == 3 then
--code here
end
end
end
function onSay(player, words, param)
local itemType = ItemType(param)
if param == "arena" then
if arenaJoin(player, pvpArena.arena, 2) then
pvpArenaEvents.tpArena1 = addEvent(tpArena, 1 * 60 * 1000, pvpArena.arena, 1)
end
else
player:sendCancelMessage("Please use !join arena")
end
return false
end