Merge branch 'testing'

This commit is contained in:
Cooldude2606
2018-04-08 17:09:43 +01:00
6 changed files with 153 additions and 22 deletions

View File

@@ -118,18 +118,14 @@ end):add_tab('rules',{'readme.rules-name'},{'readme.rules-tooltip'},function(fra
end
end)
Event.register(defines.events.on_player_joined_game,function(event)
local player = Game.get_player(event)
if not player.admin and player.online_time < 60 then
script.raise_event(defines.events.on_gui_click,{
name=defines.events.on_gui_click,
tick=event.tick,
element=mod_gui.get_button_flow(player).readme,
player_index=player.index,
button=defines.mouse_button_type.left,
alt=false,
control=false,
shift=false
})
end
end)
Sync.add_to_gui(Gui.inputs.add_button('readme-sync-guildlines','View Guildlines','View the guildlines in the readme',function(player,element)
Gui.center.open_tab(player,'readme','guildlines')
end))
Sync.add_to_gui(Gui.inputs.add_button('readme-sync-links','View Other Links','View the links in the readme',function(player,element)
Gui.center.open_tab(player,'readme','links')
end))
Sync.add_to_gui(Gui.inputs.add_button('readme-sync-rules','View All Rules','View the all rules in the readme',function(player,element)
Gui.center.open_tab(player,'readme','rules')
end))

View File

@@ -25,24 +25,63 @@ function center.add(obj)
return obj
end
-- used to get the center frame of the player, used mainly in script
--- Used to get the center frame of the player, used mainly in script
-- @usage Gui.center.get_flow(player) -- returns gui emelemt
-- @param player a player indifier to get the flow for
-- @treturn table the gui element flow
function center.get_flow(player)
local player = Game.get_player(player)
return player.gui.center.exp_center or player.gui.center.add{name='exp_center',type='flow'}
end
-- used to clear the center frame of the player, used mainly in script
--- Used to open a center frame for a player
-- @usage Gui.center.open(player,'server-info') -- return true
-- @param player a player indifier to get the flow for
-- @tparam center string the name of the center frame to open
-- @treturn boelon based on if it successed or not
function center.open(player,center)
local player = Game.get_player(player)
Gui.center.clear(player)
if not Gui._get_data('center')[center] then return false end
Gui._get_data('center')[center].open{
element={name=center},
player_index=player.index
}
return true
end
--- Used to open a center frame for a player
-- @usage Gui.center.open_tab(player,'readme','rules') -- return true
-- @param player a player indifier to get the flow for
-- @tparam center string the name of the center frame to open
-- @tparam tab string the name of the tab to open
-- @treturn boelon based on if it successed or not
function center.open_tab(player,center,tab)
local player = Game.get_player(player)
if not Gui.center.open(player,center) then return false end
local name = center..'_'..tab
if not Gui._get_data('inputs_button')[name] then return false end
Gui._get_data('inputs_button')[name].events[defines.events.on_gui_click]{
element=Gui.center.get_flow(player)[center].tab_bar.tab_bar_scroll.tab_bar_scroll_flow[name],
}
return true
end
--- Used to clear the center frame of the player, used mainly in script
-- @usage Gui.center.clear(player)
-- @param player a player indifier to get the flow for
function center.clear(player)
local player = Game.get_player(player)
center.get_flow(player).clear()
end
-- used on the button press when the toolbar button is press, can be overriden
-- not recomented for direct use see Gui.center.open
function center._center.open(event)
local player = Game.get_player(event)
local _center = Gui._get_data('center')[event.element.name]
local center_flow = center.get_flow(player)
if center_flow[_center.name] then center.clear(player) return end
if center_flow[_center.name] then Gui.center.clear(player) return end
local center_frame = center_flow.add{
name=_center.name,
type='frame',
@@ -59,7 +98,8 @@ function center._center.open(event)
player.opened=center_frame
end
-- this is the default draw function if one is not provided
-- this is the default draw function if one is not provided, can be overriden
-- not recomented for direct use see Gui.center.open
function center._center:draw(frame)
Gui.bar(frame,510)
local tab_bar = frame.add{

View File

@@ -164,7 +164,7 @@ function inputs.add_button(name,display,tooltip,callbacks)
local keys = {alt=event.alt,ctrl=event.control,shift=event.shift}
local element = event.element
local callbacks = button.data._callbacks
if is_type(callbacks,'function') then callbacks = {function(...) return true end,callbacks} end
if is_type(callbacks,'function') then callbacks = {{function(...) return true end,callbacks}} end
for _,data in pairs(callbacks) do
if is_type(data[1],'function') and is_type(data[2],'function') then
local success, err = pcall(data[1],player,mouse,keys,event)

View File

@@ -18,8 +18,8 @@ Pass a table with the names of the objects you want and it will be return in tha
local StdExpCoreLib = {}
require '/commands'
StdExpCoreLib.Server = require '/server'
StdExpCoreLib.Ranking = require '/ranking'
StdExpCoreLib.Server = require '/server'
StdExpCoreLib.Sync = require '/sync'
StdExpCoreLib.Gui = require '/gui'
StdExpCoreLib.Gui:_load_parts{

View File

@@ -9,8 +9,10 @@ Discord: https://discord.gg/r6dC2uK
--Please Only Edit Below This Line-----------------------------------------------------------
-- this file is used to allow easy syncing with out side programes
local Sync = {}
local Sync_gui_functions = {}
-- only used as a faster way to get to the ranking function
--- Used as a faster way to get to the ranking function, overrides previous
-- @usage Sync.set_ranks{name=rank_name}
function Sync.set_ranks(...)
Ranking._base_preset(...)
end
@@ -156,6 +158,7 @@ function Sync.info(set)
if not global.exp_core then global.exp_core = {} end
if not global.exp_core.sync then global.exp_core.sync = {
server_name='Factorio Server',
server_description='A factorio server for everyone',
reset_time='On Demand',
time='Day Mth 00 00:00:00 UTC Year',
time_set={0,tick_to_display_format(0)},
@@ -235,4 +238,95 @@ Event.register(defines.events.on_tick,function(event)
if (event.tick%time)==0 then Sync.update() Sync.emit_data() end
end)
--- Adds a emeltent to the sever info gui
-- @usage Sync.add_to_gui('string') -- return trues
-- @param element see examples before for what can be used, it can also be a return from Gui.inputs.add
-- @treturn bolean based on weather it was successful or not
function Sync.add_to_gui(element,...)
if game then return false end
if is_type(element,'function') then
table.insert(Sync_gui_functions,{'function',element,...})
elseif is_type(element,'table') then
if element.draw then table.insert(Sync_gui_functions,{'gui',element})
else table.insert(Sync_gui_functions,{'table',element}) end
else table.insert(Sync_gui_functions,{'string',element}) end
return true
end
-- Examples for Sync.add_to_gui
-- adds a basic string to the table
Sync.add_to_gui('Welcome to the Explosive Gaming comunity! This is one of many servers which we host.')
-- adds a string that can have depentant values
Sync.add_to_gui(function(player,frame)
return 'This server will reset at: '..Sync.info().reset_time
end)
-- adds a string that can have depentant values
Sync.add_to_gui(function(player,frame)
return 'You have been given the rank '..Ranking.get_rank(player).name..' from our Discord'
end)
-- if readme is included then see addons/guis/readme.lua for more examples
-- used to load the gui infomation when _G.Gui is not yet loaded
-- internal use not recomend to be used
function Sync._load()
Gui.center.add{
name='server-info',
caption='Server Info',
tooltip='Basic info about the current server',
draw=function(self,frame)
frame.caption = ''
local info = Sync.info()
local frame = frame.add{type='flow',direction='vertical'}
local _flow = frame.add{type='flow'}
Gui.bar(_flow,200)
_flow.add{
type='label',
caption='Welcome To '..info.server_name,
style='caption_label'
}.style.width = 185
Gui.bar(_flow,200)
frame.add{
type='label',
caption=info.server_description,style='description_label'
}
Gui.bar(frame,600)
local _frame = frame
local frame = frame.add{
type='frame',
direction='vertical',
style='image_frame'
}
frame.style.width = 600
local text_flow = frame.add{type='flow',direction='vertical'}
local button_flow = frame.add{type='table',column_count=4}
for _,element in pairs(table.deepcopy(Sync_gui_functions)) do
local _type = table.remove(element,1)
if _type == 'function' then
local success, err = pcall(table.remove(element,1),frame.player_index,frame,unpack(element))
if not success then error(err) else
if is_type(err,'table') then
if element.draw then element:draw(button_flow)
else text_flow.add{type='label',caption=err} end
else text_flow.add{type='label',caption=tostring(err)} end
end
elseif _type == 'gui' then element[1]:draw(button_flow)
elseif _type == 'string' then text_flow.add{type='label',caption=tostring(element[1])}
elseif _type == 'table' then text_flow.add{type='label',caption=element[1]} end
end
_frame.add{
type='label',
caption='Press Ecs or E to close; this is only visible once!',
style='fake_disabled_label'
}
end}
end
-- opens the server info gui for all new joins except admins
Event.register(defines.events.on_player_joined_game,function(event)
local player = Game.get_player(event)
if not player.admin and player.online_time < 60 then
Gui.center.open(player,'server-info')
end
end)
return Sync

View File

@@ -48,6 +48,7 @@ Ranking, Sync, Server, Gui = require('/ExpCore/load'){'Ranking','Sync','Server',
local success,err = pcall(require,'/ExpCore/GuiParts/test')
if success then Gui.test = err end
if Gui.popup then Gui.popup._load() end
if Sync._load then Sync._load() end
-- this loads the ranks that Ranking uses
require('/ExpCore/ranks')
-- this loads any edits that are not need in core pcall as file may not be preset