Friday Facts #174 - Mod gui

Regular reports on Factorio development.
Rseding91
Factorio Staff
Factorio Staff
Posts: 9981
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Rseding91 » Fri Jan 20, 2017 8:14 pm

badgamernl wrote:Plss make the mod-gui scenario friendly, it would help my server allot! It would also be cool if there was a way to make server side and client side code and the communication between the client and the server. Take for instance garry's mod it has client and server side code and a way to communicate with a database. This would add the possibility to make a ranking system that will in return get you a more stable player base. Or add a permissions system, but wy make it yourself when the community can make it! The problem with factorio now is that when you make a server and want admins on it they can run commands and then the achievement system says console command used in return players will leave because of it. It would also be cool if there was a server list ranking system and a bookmark system to make the life of players easier!
Factorio doesn't have a concept of client vs. server when it comes to mods.

Mod devs can't even get the basic system we have now correct and frequently cause desyncs. Making them client vs. server and leaving it up to the mod author(s) to do it correctly just sounds like a horrible idea.
If you want to get ahold of me I'm almost always on Discord.

User avatar
Proxy
Fast Inserter
Fast Inserter
Posts: 162
Joined: Mon Mar 30, 2015 11:10 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Proxy » Fri Jan 20, 2017 8:45 pm

Klonan wrote:
Wingman24 wrote:Do we have an ETA on .15? (Sorry if I missed this in a previous FF)
No ETA yet - Further news when we have it folks
Wait, last FFF it was said to be February 2017....
Let's just wait til the Age of Iron Stars

aober93
Filter Inserter
Filter Inserter
Posts: 446
Joined: Tue Aug 30, 2016 9:07 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by aober93 » Fri Jan 20, 2017 9:08 pm

Mod GUI? mmm is it a good idea to have mod sets, that when you join different multiplayer servers ,or just play different singleplayer maps you select a set of mod with a click of a button, so you dont go over selecting and deselecting mods manually. Which would be ok, but its becoming difficult to remember mod names.

Rseding91
Factorio Staff
Factorio Staff
Posts: 9981
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Rseding91 » Fri Jan 20, 2017 9:15 pm

Proxy wrote:
Klonan wrote:
Wingman24 wrote:Do we have an ETA on .15? (Sorry if I missed this in a previous FF)
No ETA yet - Further news when we have it folks
Wait, last FFF it was said to be February 2017....
No, we didn't: https://www.factorio.com/blog/post/fff-173
If you want to get ahold of me I'm almost always on Discord.

Nexela
Smart Inserter
Smart Inserter
Posts: 1816
Joined: Wed May 25, 2016 11:09 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Nexela » Fri Jan 20, 2017 9:42 pm

I for one will not install any mods that do not conform to this new unifying script :)

mohkev
Manual Inserter
Manual Inserter
Posts: 1
Joined: Fri Nov 06, 2015 11:38 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by mohkev » Fri Jan 20, 2017 9:52 pm

I cannot express to you guys how much I appreciate the work that happens on this game. The constant updates, tweaks and full blown additions to this game is awesome. It's obvious that this product is a labor of love for you all. The changes you make really are about bettering the game and the community at large. I am always surprised at how much more awesome this game gets with every change. Thank you. Thank you. Thank you.

User avatar
y.petremann
Filter Inserter
Filter Inserter
Posts: 393
Joined: Mon Mar 17, 2014 4:24 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by y.petremann » Fri Jan 20, 2017 10:21 pm

Rseding91 wrote:
badgamernl wrote:Plss make the mod-gui scenario friendly, it would help my server allot! It would also be cool if there was a way to make server side and client side code and the communication between the client and the server. Take for instance garry's mod it has client and server side code and a way to communicate with a database. This would add the possibility to make a ranking system that will in return get you a more stable player base. Or add a permissions system, but wy make it yourself when the community can make it! The problem with factorio now is that when you make a server and want admins on it they can run commands and then the achievement system says console command used in return players will leave because of it. It would also be cool if there was a server list ranking system and a bookmark system to make the life of players easier!
Factorio doesn't have a concept of client vs. server when it comes to mods.

Mod devs can't even get the basic system we have now correct and frequently cause desyncs. Making them client vs. server and leaving it up to the mod author(s) to do it correctly just sounds like a horrible idea.
Here is a flowchart of how I think it should works.
Factorio-Modding.png
Factorio-Modding.png (196.43 KiB) Viewed 2621 times
Almost everything can be put in those part already for prototypes, like all visual thing in prototypes are client side, and shouldn't affect checksum and synchronisation, I simply can't see a server side entity for now.
So the only thing needed would be that when registering mods, it would temporary crop every esthetic information and do the checksum, mods that modify nothing that needed for synchronisation could be marked as safe for synchronisation.

Almost all gui are either a informative one the client could hold, a sensitive one the server could handle in conjunction with the client side one, and the other scripts with are common to client and server.

client side control could be naned : control-client.lua
server side control could be naned : control-server.lua

User avatar
y.petremann
Filter Inserter
Filter Inserter
Posts: 393
Joined: Mon Mar 17, 2014 4:24 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by y.petremann » Fri Jan 20, 2017 10:24 pm

Also if this is a simple optional lua file, could you provide it for modders somewhere, so they could update to this system asap in 0.14 and use it in 0.15 natively ?

Nexela
Smart Inserter
Smart Inserter
Posts: 1816
Joined: Wed May 25, 2016 11:09 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Nexela » Fri Jan 20, 2017 10:29 pm

y.petremann wrote:Also if this is a simple optional lua file, could you provide it for modders somewhere, so they could update to this system asap in 0.14 and use it in 0.15 natively ?

I was thinking along the same lines :)

Rseding91
Factorio Staff
Factorio Staff
Posts: 9981
Joined: Wed Jun 11, 2014 5:23 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Rseding91 » Fri Jan 20, 2017 11:03 pm

y.petremann wrote:Almost all gui are either a informative one the client could hold, a sensitive one the server could handle in conjunction with the client side one, and the other scripts with are common to client and server.

client side control could be naned : control-client.lua
server side control could be naned : control-server.lua
You seem to be missing 2 major issues:
  • If a given GUI is persisted between save/load it must be part of the game state and must be present on all peers
  • If a mod can read information about a GUI existing or read information from the GUI then that information must be part of the game state and must be present on all peers
If not, then it will cause desyncs when mod A on peer 1 says "I've got a GUI so I'll do X" and mod A on peer 2 says "I have no GUI so I won't do X" and the 2 simulations now aren't the same and it desyncs.
If you want to get ahold of me I'm almost always on Discord.

User avatar
Proxy
Fast Inserter
Fast Inserter
Posts: 162
Joined: Mon Mar 30, 2015 11:10 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Proxy » Fri Jan 20, 2017 11:48 pm

Rseding91 wrote:
Proxy wrote:
Klonan wrote:
Wingman24 wrote:Do we have an ETA on .15? (Sorry if I missed this in a previous FF)
No ETA yet - Further news when we have it folks
Wait, last FFF it was said to be February 2017....
No, we didn't: https://www.factorio.com/blog/post/fff-173
Wait... what did i read then?
aww, my Plans have been Smashed. :c
Let's just wait til the Age of Iron Stars

shimadouma
Manual Inserter
Manual Inserter
Posts: 1
Joined: Wed Jan 11, 2017 5:33 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by shimadouma » Sat Jan 21, 2017 12:18 am

Proxy wrote: Wait... what did i read then?
aww, my Plans have been Smashed. :c
I think it's fff-164
It's two months ago and their situation might have changed...?

Karakaz
Inserter
Inserter
Posts: 22
Joined: Sat Jan 21, 2017 12:00 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Karakaz » Sat Jan 21, 2017 12:22 am

Hi, I am quite new to Factorio modding but I've made some addons for wow. I have to say the Ace library is great for making guis in wow. You guys seem to know what you're doing already, but I would definitely take inspiration from that library if I could, as it is quite easy to use for addon creators.

User avatar
bobingabout
Smart Inserter
Smart Inserter
Posts: 6860
Joined: Fri May 09, 2014 1:01 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by bobingabout » Sat Jan 21, 2017 12:33 am

That example GUI you used doesn't include Bob's Inserters! :o
Creator of Bob's mods. Expanding your gameplay since version 0.9.8.
I also have a Patreon.

Nexela
Smart Inserter
Smart Inserter
Posts: 1816
Joined: Wed May 25, 2016 11:09 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Nexela » Sat Jan 21, 2017 12:59 am

Sorry Bob, I removed the button because it didn't conform to my "standards" :)
viewtopic.php?f=89&t=31641#p199567

BenSeidel
Filter Inserter
Filter Inserter
Posts: 546
Joined: Tue Jun 28, 2016 1:44 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by BenSeidel » Sat Jan 21, 2017 1:43 am

Can you make the style an optional parameter? so in the API do a
if(style == nil)
style = mod_gui.frame_style
end

I only say that because then the 99% of modders will just automatically fall into the default style guide. If someone wants a different behaviour then they can read up on the parameter and do what they currently do.

User avatar
y.petremann
Filter Inserter
Filter Inserter
Posts: 393
Joined: Mon Mar 17, 2014 4:24 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by y.petremann » Sat Jan 21, 2017 4:13 am

Rseding91 wrote:
y.petremann wrote:Almost all gui are either a informative one the client could hold, a sensitive one the server could handle in conjunction with the client side one, and the other scripts with are common to client and server.

client side control could be naned : control-client.lua
server side control could be naned : control-server.lua
You seem to be missing 2 major issues:
  • If a given GUI is persisted between save/load it must be part of the game state and must be present on all peers
  • If a mod can read information about a GUI existing or read information from the GUI then that information must be part of the game state and must be present on all peers
If not, then it will cause desyncs when mod A on peer 1 says "I've got a GUI so I'll do X" and mod A on peer 2 says "I have no GUI so I won't do X" and the 2 simulations now aren't the same and it desyncs.
In the case if GUI, there is two major parts, client and common gui. They are separated and are not relevant to the other one, they don't even can access to each other unless they use the remote remote call (which could try to call a interface function on a specific part)

If the gui is part of control.lua, then it's totally relevant to the game state and then work like now, clicking in a common gui element wouldn't fire a click event on the client part.
If the gui is part of control-client.lua, then the gui is totally irrelevant to the game state, click on a client gui element wouldn't fire a click event on the common part.
The gui would need to rebuild from scratch at each connection, but could ask the server if it has information for him, here a example :
Finaly if any part want to do something (including geting information), it needs to call a interface of the corresponding part, unless this is exposed informations so each part can access their respective environement, client and server have read-only access to common environement)
Here a quick simplified example of what I had in mind :
control-client.lua
control-server.lua
control.lua
For this I've created a temporary script :
advanced_remote.lua
ALso to have control-client and control-server, I've put a require "control-client" and require "control-server" on the control.lua, but that not the way it should work in the future
Rseding91 wrote: You seem to be missing 2 major issues:
  • If a given GUI is persisted between save/load it must be part of the game state and must be present on all peers
  • If a mod can read information about a GUI existing or read information from the GUI then that information must be part of the game state and must be present on all peers
If not, then it will cause desyncs when mod A on peer 1 says "I've got a GUI so I'll do X" and mod A on peer 2 says "I have no GUI so I won't do X" and the 2 simulations now aren't the same and it desyncs.
In fact if information from the client or the server are given to the other part like controls or chat commands. Here I think what your saying is irelevant since common part don't see client or server things (gui included).
Additionnaly if the server hold sensitive informations, if any player try to save the world localy, it would not get the server side informations, Which is an additionnal layer of security.

Crixomix
Inserter
Inserter
Posts: 32
Joined: Wed Feb 24, 2016 1:10 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Crixomix » Sat Jan 21, 2017 4:15 am

So is there a way to copy train schedules? One of the longer parts of setting up a new train outpost is creating all the wait conditions and such for the new train. I would love to just copy from another one, and then just change one little thing.

Weresmilodon
Inserter
Inserter
Posts: 40
Joined: Thu Jul 10, 2014 8:11 pm
Contact:

Re: Friday Facts #174 - Mod gui

Post by Weresmilodon » Sat Jan 21, 2017 4:32 am

Crixomix wrote:So is there a way to copy train schedules? One of the longer parts of setting up a new train outpost is creating all the wait conditions and such for the new train. I would love to just copy from another one, and then just change one little thing.
You do it the same way you copy between assemblers, or really anything. Shift Left and Right clicking.

Xeteth
Fast Inserter
Fast Inserter
Posts: 158
Joined: Tue Feb 17, 2015 6:06 am
Contact:

Re: Friday Facts #174 - Mod gui

Post by Xeteth » Sat Jan 21, 2017 4:53 am

Love the coloured Train Stops!

Can I put in a request for Twinsen to do a FFF soon on upcoming 0.15 circuit network/combinator additions and changes? I have many ideas planned combinator-wise and would love to hear exactly what come out of the development proposal thread (viewtopic.php?f=9&t=30853).

Post Reply

Return to “News”

Who is online

Users browsing this forum: jdtitans