Added server connect button

This commit is contained in:
Cooldude2606
2020-06-14 23:07:51 +01:00
parent aff3fea29d
commit 5150d28fd3
5 changed files with 97 additions and 45 deletions

View File

@@ -30,13 +30,13 @@ end)
@treturn boolean If the external data is valid, if false you should not call any other methods from External
@usage-- Check that external data is valid
if not External.validate() then
if not External.valid() then
-- error code here
end
]]
function External.validate()
if ext ~= nil and var ~= nil then
function External.valid()
if ext ~= nil and ext == global.ext then
return true
elseif global.ext ~= nil then
ext = global.ext
@@ -54,7 +54,7 @@ local servers = External.get_servers()
]]
function External.get_servers()
assert(ext, 'No external data was found, use External.validate() to ensure external data exists.')
assert(ext, 'No external data was found, use External.valid() to ensure external data exists.')
return assert(ext.servers, 'No server list was found, please ensure that the external service is running')
end
@@ -67,7 +67,7 @@ local servers = External.get_servers_filtered(public)
]]
function External.get_servers_filtered(search)
assert(ext, 'No external data was found, use External.validate() to ensure external data exists.')
assert(ext, 'No external data was found, use External.valid() to ensure external data exists.')
local servers = assert(ext.servers, 'No server list was found, please ensure that the external service is running')
local found_servers = {}
search = search:lower()
@@ -79,14 +79,14 @@ function External.get_servers_filtered(search)
end
--[[-- Gets the details of the current server
@treturn table The details for the current server
@treturn table The details of the current server
@usage-- Get the details of the current server
local server = External.get_current_server()
]]
function External.get_current_server()
assert(ext, 'No external data was found, use External.validate() to ensure external data exists.')
assert(ext, 'No external data was found, use External.valid() to ensure external data exists.')
local servers = assert(ext.servers, 'No server list was found, please ensure that the external service is running')
local server_id = assert(ext.current, 'No current id was found, please ensure that the external service is running')
return servers[server_id]
@@ -101,7 +101,7 @@ local server = External.get_server_details('eu-01')
]]
function External.get_server_details(server_id)
assert(ext, 'No external data was found, use External.validate() to ensure external data exists.')
assert(ext, 'No external data was found, use External.valid() to ensure external data exists.')
local servers = assert(ext.servers, 'No server list was found, please ensure that the external service is running')
return servers[server_id]
end
@@ -115,8 +115,8 @@ local status = External.get_server_status('eu-01')
]]
function External.get_server_status(server_id)
assert(var, 'No external data was found, use External.validate() to ensure external data exists.')
local servers = assert(ext.status, 'No server status was found, please ensure that the external service is running')
assert(var, 'No external data was found, use External.valid() to ensure external data exists.')
local servers = assert(var.status, 'No server status was found, please ensure that the external service is running')
return servers[server_id]
end
@@ -126,7 +126,7 @@ local server_ups = External.get_server_ups()
]]
function External.get_server_ups()
assert(var, 'No external data was found, use External.validate() to ensure external data exists.')
assert(var, 'No external data was found, use External.valid() to ensure external data exists.')
return assert(var.server_ups, 'No server ups was found, please ensure that the external service is running')
end
@@ -143,14 +143,14 @@ External.request_connection(player, 'eu-01', true)
]]
function External.request_connection(player, server_id, self_requested)
assert(ext, 'No external data was found, use External.validate() to ensure external data exists.')
assert(ext, 'No external data was found, use External.valid() to ensure external data exists.')
local servers = assert(ext.servers, 'No server list was found, please ensure that the external service is running')
local server = servers[server_id] or { address = server_id, name = 'Unknown Server', description = 'This server is not ran by us, please check the address of the server.' }
local message = 'Please press the connect button below to join.'
if not self_requested then message = 'You have been asked to switch to a different server. '..message end
if not self_requested then message = 'You have been asked to switch to a different server.\n'..message end
player.connect_to_server{
address = server.address,
name = '\n[color=orange]'..server.name..'[/color]\n',
name = '\n[color=orange][font=heading-1]'..server.name..'[/font][/color]\n',
description = server.description..'\n'..message
}
end

View File

@@ -146,6 +146,11 @@ servers-7=S7 Event
servers-d7=This is our event server, we try to run events at least once per week.
servers-8=S8 T̷-̶s̶-̴:̷
servers-d8=N̵o̴ ̶o̷-̶e̵ ̴k̸n̷-̶w̵s̸ ̴w̷h̷a̶-̶ ̷h̴a̴p̷p̴e̷n̷s̸ ̷o̶n̴ ̷t̶h̴-̶s̶ ̷s̷e̶r̸v̸e̴r̷,̶ ̸i̸t̴ ̷m̶-̸g̴h̶t̷ ̸n̸-̶t̵ ̷e̴v̸e̸n̶t̷ ̵-̷x̴i̵s̶t̸.̸
servers-connect-Offline=Server is currently offline
servers-connect-Version=Server is on a different version: __1__
servers-connect-Password=Server requires a password
servers-connect-Modded=Server requires mods to be downloaded
servers-connect-Online=Server is online
servers-external=External Links
servers-open-in-browser=Open in your browser
backers-tab=Backers

View File

@@ -5,25 +5,23 @@
local Commands = require 'expcore.commands' --- @dep expcore.commands
local Global = require 'utils.global' --- @dep utils.global
local Common = require 'expcore.common' --- @dep expcore.common
-- modules that are loaded into the interface env to be accessed
local interface_modules = {
['Game']='utils.game',
['_C']=Common,
['Commands']=Commands,
['output']=Common.player_return,
['Group']='expcore.permission_groups',
['Roles']='expcore.roles',
['Gui']='expcore.gui',
['Async']='expcore.async',
['Datastore']='expcore.datastore'
['Commands'] = Commands,
['output'] = _C.player_return,
['Group'] = 'expcore.permission_groups',
['Roles'] = 'expcore.roles',
['Gui'] = 'expcore.gui',
['Async'] = 'expcore.async',
['Datastore'] = 'expcore.datastore',
['External'] = 'expcore.external'
}
-- loads all the modules given in the above table
for key, value in pairs(interface_modules) do
if type(value) == 'string' then
interface_modules[key] = Common.opt_require(value)
interface_modules[key] = _C.opt_require(value)
end
end

View File

@@ -4,12 +4,12 @@
@alias readme
]]
local Event = require 'utils.event' --- @dep utils.event
local Gui = require 'expcore.gui' --- @dep expcore.gui
local Roles = require 'expcore.roles' --- @dep expcore.roles
local Commands = require 'expcore.commands' --- @dep expcore.commands
local PlayerData = require 'expcore.player_data' --- @dep expcore.player_data
local Event = require 'utils.event' --- @dep utils.event
local Game = require 'utils.game' --- @dep utils.game
local External = require 'expcore.external' --- @dep expcore.external
local format_time = _C.format_time --- @dep expcore.common
local format_number = require('util').format_number --- @dep util
@@ -18,9 +18,9 @@ local function Tab(caption, tooltip, element_define)
tabs[#tabs+1] = {caption, tooltip, element_define}
end
local frame_width = 595 -- controls width of top descritions
local frame_width = 595 -- controls width of top descriptions
local title_width = 270 -- controls the centering of the titles
local scroll_hieght = 275 -- controls the height of the scrolls
local scroll_height = 275 -- controls the height of the scrolls
--- Sub content area used within the content areas
-- @element sub_content
@@ -70,15 +70,52 @@ Gui.element{
}
:style{
padding = {1, 3},
maximal_height = scroll_hieght,
maximal_height = scroll_height,
horizontally_stretchable = true,
}
--- Used to connect to servers in server list
-- @element join_server
local join_server =
Gui.element(function(event_trigger, parent, server_id, wrong_version)
local status = wrong_version and 'Version' or External.get_server_status(server_id) or 'Offline'
local flow = parent.add{ name = server_id, type = 'flow' }
local button = flow.add{
name = event_trigger,
type = 'sprite-button',
sprite = 'utility/circuit_network_panel_white', --- network panel white, warning white, download white
hovered_sprite = 'utility/circuit_network_panel_black', --- network panel black, warning black, download black
tooltip = {'readme.servers-connect-'..status, wrong_version}
}
if status == 'Offline' then
button.enabled = false
button.sprite = 'utility/circuit_network_panel_black'
elseif status == 'Version' then
button.enabled = false
button.sprite = 'utility/shuffle'
elseif status == 'Password' then
button.sprite = 'utility/warning_white'
button.hovered_sprite = 'utility/warning'
elseif status == 'Modded' then
button.sprite = 'utility/downloading_white'
button.hovered_sprite = 'utility/downloading'
end
return button
end)
:style(Gui.sprite_style(20, -1))
:on_click(function(player, element, _)
local server_id = element.parent.name
External.request_connection(player, server_id, true)
end)
--- Content area for the welcome tab
-- @element welcome_content
Tab({'readme.welcome-tab'}, {'readme.welcome-tooltip'},
Gui.element(function(_, parent)
local server_details = global.server_details or { name='ExpGaming S0 - Local', description='Failed to load description: disconnected from sync api.', reset_time='Non Set', branch='Unknown'}
local server_details = { name='ExpGaming S0 - Local', welcome='Failed to load description: disconnected from external api.', reset_time='Non Set', branch='Unknown'}
if External.valid() then server_details = External.get_current_server() end
local container = parent.add{ type='flow', direction='vertical' }
local player = Gui.get_player_from_element(parent)
@@ -91,7 +128,7 @@ Gui.element(function(_, parent)
-- Add the title and description to the top flow
Gui.title_label(top_vertical_flow, 62, 'Welcome to '..server_details.name)
Gui.centered_label(top_vertical_flow, 380, server_details.description)
Gui.centered_label(top_vertical_flow, 380, server_details.welcome)
Gui.bar(container)
-- Get the names of the roles the player has
@@ -124,7 +161,7 @@ Gui.element(function(_, parent)
container.add{ type='flow' }
-- Add a table for the rules
local rules = Gui.scroll_table(container, scroll_hieght, 1)
local rules = Gui.scroll_table(container, scroll_height, 1)
rules.style = 'bordered_table'
rules.style.cell_padding = 4
@@ -150,7 +187,7 @@ Gui.element(function(_, parent)
container.add{ type='flow' }
-- Add a table for the commands
local commands = Gui.scroll_table(container, scroll_hieght, 2)
local commands = Gui.scroll_table(container, scroll_height, 2)
commands.style = 'bordered_table'
commands.style.cell_padding = 0
@@ -177,13 +214,23 @@ Gui.element(function(_, parent)
-- Draw the scroll
local scroll_pane = title_table_scroll(container)
scroll_pane.style.maximal_height = scroll_hieght + 20 -- the text is a bit shorter
scroll_pane.style.maximal_height = scroll_height + 20 -- the text is a bit shorter
-- Add the factorio servers
local factorio_servers = title_table(scroll_pane, 225, {'readme.servers-factorio'}, 2)
for i = 1, 8 do
Gui.centered_label(factorio_servers, 110, {'readme.servers-'..i})
Gui.centered_label(factorio_servers, 460, {'readme.servers-d'..i})
if External.valid() then
local factorio_servers = title_table(scroll_pane, 225, {'readme.servers-factorio'}, 3)
local current_version = External.get_current_server().version
for server_id, server in pairs(External.get_servers()) do
Gui.centered_label(factorio_servers, 110, server.short_name)
Gui.centered_label(factorio_servers, 436, server.description)
join_server(factorio_servers, server_id, current_version ~= server.version and server.version)
end
else
local factorio_servers = title_table(scroll_pane, 225, {'readme.servers-factorio'}, 2)
for i = 1, 8 do
Gui.centered_label(factorio_servers, 110, {'readme.servers-'..i})
Gui.centered_label(factorio_servers, 460, {'readme.servers-d'..i})
end
end
-- Add the external links
@@ -418,7 +465,7 @@ end)
--- When a player joins the game for the first time show this gui
Event.add(defines.events.on_player_created, function(event)
local player = Game.get_player_by_index(event.player_index)
local player = game.players[event.player_index]
local element = readme(player.gui.center)
element.pane.selected_tab_index = 1
player.opened = element
@@ -426,7 +473,7 @@ end)
--- When a player joins clear center unless the player has something open
Event.add(defines.events.on_player_joined_game, function(event)
local player = Game.get_player_by_index(event.player_index)
local player = game.players[event.player_index]
if not player.opened then
player.gui.center.clear()
end
@@ -434,7 +481,7 @@ end)
--- When a player respawns clear center unless the player has something open
Event.add(defines.events.on_player_respawned, function(event)
local player = Game.get_player_by_index(event.player_index)
local player = game.players[event.player_index]
if not player.opened then
player.gui.center.clear()
end

View File

@@ -7,6 +7,7 @@
local Gui = require 'expcore.gui' --- @dep expcore.gui
local Event = require 'utils.event' --- @dep utils.event
local Commands = require 'expcore.commands' --- @dep expcore.commands
local External = require 'expcore.external' --- @dep expcore.external
--- Stores the visible state of server ups
local PlayerData = require 'expcore.player_data' --- @dep expcore.player_data
@@ -42,7 +43,8 @@ Commands.new_command('server-ups', 'Toggle the server UPS display')
:add_alias('sups', 'ups')
:register(function(player)
local label = player.gui.screen[server_ups.name]
if not global.ext or not global.ext.server_ups then
if not External.valid() then
label.visible = false
return Commands.error{'expcom-server-ups.no-ext'}
end
label.visible = not label.visible
@@ -69,8 +71,8 @@ end)
-- Update the caption for all online players
Event.on_nth_tick(60, function()
if global.ext and global.ext.server_ups then
local caption = 'SUPS = '..global.ext.server_ups
if External.valid() then
local caption = 'SUPS = '..External.get_server_ups()
for _, player in pairs(game.connected_players) do
player.gui.screen[server_ups.name].caption = caption
end