pvpgn-server/lua/handle_game.lua

107 lines
2.8 KiB
Lua

--[[
Copyright (C) 2014 HarpyWar (harpywar@gmail.com)
This file is a part of the PvPGN Project http://pvpgn.pro
Licensed under the same terms as Lua itself.
]]--
-- Global function to handle game create
function handle_game_create(game)
--for i,j in pairs(game) do
-- api.message_send_text(game.owner, message_type_info, game.owner, i.." = "..j)
--end
end
-- Global function to handle user join to game
function handle_game_userjoin(game, account)
if config.ghost then
gh_handle_game_userjoin(game, account)
end
end
-- Global function to handle user left from game
function handle_game_userleft(game, account)
--for username in string.split(str,",") do
-- if (account.name ~= username) then
-- api.message_send_text(username, message_type_whisper, nil, "Bye ".. account.name)
-- end
--end
end
-- Global function to handle game end
function handle_game_end(game)
--api.message_send_text(game.owner, message_type_whisper, nil, "End game")
end
-- Global function to handle game report
function handle_game_report(game)
--for i,j in pairs(game) do
-- api.message_send_text("harpywar", message_type_info, game.owner, i.." = "..j)
-- api.message_send_text(game.owner, message_type_info, game.owner, i.." = "..j)
--end
--DEBUG(game.last_access)
end
-- Global function to handle game destroy
function handle_game_destroy(game)
--api.message_send_text(game.owner, message_type_whisper, nil, "Destroy game")
end
-- Global function to handle game status
function handle_game_changestatus(game)
--api.message_send_text(game.owner, message_type_info, nil, "Change status of the game to ".. game.status)
end
function handle_game_list(account)
local gamelist = {}
if (config.ghost and config.ghost_dota_server and account.clienttag == CLIENTTAG_WAR3XP) then
-- get gamelist
local glist = server_get_games()
-- and add ping field for each game
for i,game in pairs(glist) do
glist[i].ping = 1000 -- initial ping value for all games
-- if game owner is ghost bot
if gh_is_bot(game.owner) then
local pings = account_get_botping(account.name)
local is_found = false
for k,v in pairs(pings) do
-- fetch user ping for current bot
if (v.bot == game.owner) then
glist[i].ping = pings[k].ping
is_found = true
end
end
-- if ping not found for the bot then use ping "0" to move the game on top
-- (so, after join the game user will receive a ping from the bot)
if not is_found then
glist[i].ping = 0
end
end
end
-- sort gamelist by ping ascending
table.sort(glist, function(a,b) return tonumber(a.ping) < tonumber(b.ping) end)
-- iterate sorted gamelist and fill a final list with a new order
for i,game in pairs(glist) do
table.insert(gamelist, game.id)
table.insert(gamelist, game.name)
end
return {"id", "name"}, gamelist
end
end