From fcddbc53ede4c6dd495dd9063e7049491c4a7127 Mon Sep 17 00:00:00 2001 From: Angel Pons <22937129+Th3Fanbus@users.noreply.github.com> Date: Tue, 23 Apr 2024 08:23:35 +0000 Subject: [PATCH 1/8] Add ScrewIt to open source examples ScrewIt is a meme mod, but it is also rather instructive. It shows how to use the Asset Registry to find all subclasses of some class (in base game as well as in mods) as well as how to asynchronously load the paths obtained from the Asset Registry. --- .../pages/Development/OpenSourceExamples.adoc | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/ROOT/pages/Development/OpenSourceExamples.adoc b/modules/ROOT/pages/Development/OpenSourceExamples.adoc index c773cfe8..cbbabe28 100644 --- a/modules/ROOT/pages/Development/OpenSourceExamples.adoc +++ b/modules/ROOT/pages/Development/OpenSourceExamples.adoc @@ -95,3 +95,29 @@ _Notable Mod Loader Features Used:_ ** Tracking if the user has modified the config from the defaults to know if future mod updates should automatically overwrite them with updated default data ** Programatically modifying config values and saving the changes + +== Screw It + +Meme mod, changes most things to be named and/or look like Screws. + +_Source Code_: Linked on the https://ficsit.app/mod/ScrewIt[Mod Page] + +_Mod Type_: Hybrid Blueprint/{cpp} + +_Notable Techniques Used:_ + +* Using the Asset Registry to quickly discover subclasses (both vanilla and modded) +* Asynchronous asset loading to avoid stalling the game while waiting for disk I/O +* CDO edits in bulk (on the aforementioned loaded classes), implemented in {cpp} +* Hybrid Blueprint/{cpp} game instance module +** Root instance's final implementations is in Blueprint, + but it is backed by a custom {cpp} parent class to be + able to easily reference Blueprint-only assets + +_Notable Satisfactory Features Used:_ + +* None + +_Notable Mod Loader Features Used:_ + +* Access Transformers, to be able to change otherwise inaccessible member variables. From 2c9a828cf3de847b7d84ff80e82845101d7910e3 Mon Sep 17 00:00:00 2001 From: Rob B Date: Tue, 7 May 2024 22:15:41 -0400 Subject: [PATCH 2/8] Add images showcasing checking if a mod supports dedis --- cspell.json | 3 ++- .../ExampleDoesNotSupportDedicatedServers.png | Bin 0 -> 14551 bytes .../ExampleSupportsDedicatedServers.png | Bin 0 -> 28904 bytes .../pages/ForUsers/DedicatedServerSetup.adoc | 25 +++++++++++++----- modules/ROOT/pages/faq.adoc | 4 ++- 5 files changed, 24 insertions(+), 8 deletions(-) create mode 100644 modules/ROOT/images/DedicatedServers/ExampleDoesNotSupportDedicatedServers.png create mode 100644 modules/ROOT/images/DedicatedServers/ExampleSupportsDedicatedServers.png diff --git a/cspell.json b/cspell.json index b6fe149e..d774b31d 100644 --- a/cspell.json +++ b/cspell.json @@ -132,6 +132,7 @@ "reccomend", "outselves", "favortied", - "destory" + "destory", + "conveneint" ] } diff --git a/modules/ROOT/images/DedicatedServers/ExampleDoesNotSupportDedicatedServers.png b/modules/ROOT/images/DedicatedServers/ExampleDoesNotSupportDedicatedServers.png new file mode 100644 index 0000000000000000000000000000000000000000..b233f9852665c193adb820365ba33bf476aa66ef GIT binary patch literal 14551 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 U(sUN^K|mmBaRsq*kx$?M8}i>C>;M1& literal 0 HcmV?d00001 diff --git a/modules/ROOT/images/DedicatedServers/ExampleSupportsDedicatedServers.png b/modules/ROOT/images/DedicatedServers/ExampleSupportsDedicatedServers.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba45b40a4054c29d0dcc7a730e7b25ea12cc8c5 GIT binary patch literal 28904 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%0DnOx*}ivz?Y0XJaNPrk^pIGqYos@ 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 aN4j{jI5zT5AKqUN;iIVZ`{H+>z5fS!Zn?Jr literal 0 HcmV?d00001 diff --git a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc index 2a0f92b4..d1bef057 100644 --- a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc +++ b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc @@ -209,20 +209,33 @@ Contact us on the https://discord.gg/xkVJ73E[Discord Server] if something is con Once you have set up the mod manager of choice you can start installing mods on the server. Read the below warning, then check out the set of directions specific to the mod manager you chose. -[NOTE] -==== +[id="CheckModDedicatedServerSupport"] +=== Checking if a Mod Supports Dedicated Servers + +Not all mods are compatible with dedicated servers. +They must be specially compiled and packaged for the alternative format. +A greater percentage of mods will support servers once Satisfactory 1.0 launches since +all developers will be forced to recompile their mods for that anyways. + As dedicated server support is still a work in progress, -there is not currently a conveneint way to filter mods for dedicated server support on the ficsit.app website. +there is not currently a convenient way to filter mods for dedicated server support on the ficsit.app website. + When viewing the webpage for a mod, check the "Latest Version" section - if you see a table with a "Server" column, and a checkmark is present on your server type, the mod is compatible with dedicated servers. -If you see an X or the table is absent, the mod does not yet support dedicated servers. +If you see an X, or the table is absent, the mod does not yet support dedicated servers. + +.Example Mod that Supports Dedicated Servers +image::DedicatedServers/ExampleSupportsDedicatedServers.png[Supported Example] +.Example Mod that Does NOT Support Dedicated Servers +image::DedicatedServers/ExampleDoesNotSupportDedicatedServers.png[No Support Example] + +This example supports dedicated servers: Satisfactory Mod Manager offers a "compatible" filtering mode which, while managing a server install, causes only server-compatible mods to be displayed. Ficsit-cli does not currently have a way to filter mods for dedicated server support. -==== [id="ServerClientConsistency"] === Important: Server-Client Mod Consistency @@ -233,7 +246,7 @@ preventing you from connecting. It is not feasible to export a profile created in SMM for a client to be used on a server because there are some mods that only exist client or server side. -In the future, the ability to create and share "modpacks" will resolve this problem, +In the future, the ability to create and share "modpacks" will be introduced to resolve this problem, as modpacks will be able to keep track of mods that may not apply for a game target. In the mean time, we suggest using an installation of SMM or ficsit-cli on your client computer diff --git a/modules/ROOT/pages/faq.adoc b/modules/ROOT/pages/faq.adoc index e807b8ac..e8bfec9f 100644 --- a/modules/ROOT/pages/faq.adoc +++ b/modules/ROOT/pages/faq.adoc @@ -145,7 +145,9 @@ and we will investigate and update the info if necessary. == Do mods work with dedicated servers? -In general, yes, but exact support will vary depending on the mod. +_Or: How do I tell if a mod works on Dedicated Servers?_ + +In general, mods do work on dedicated servers, but exact support will vary depending on the mod. See xref:ForUsers/DedicatedServerSetup.adoc[Installing Mods on Dedicated Servers] for more details. The xref:ForUsers/DedicatedServerSetup.adoc#InstallingMods[Installing Mods section] describes how to tell if an individual mod supports Dedicated Servers. From 398e9db770ecd0ea374b46e920a5733759b2e249 Mon Sep 17 00:00:00 2001 From: Rob B Date: Tue, 7 May 2024 22:18:21 -0400 Subject: [PATCH 3/8] Add list of server providers that do NOT support dedicated servers --- .../ROOT/pages/ForUsers/DedicatedServerSetup.adoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc index d1bef057..b30b995c 100644 --- a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc +++ b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc @@ -50,6 +50,19 @@ the Mod Manager and ficsit-cli _should_ be able to interact with them normally. With this in mind, continue to the link:#GetModManager[next section]. +[id="UnsupportedHosting"] +==== Unsupported Hosts + +We do not currently maintain a list of server hosts that support modded servers. + +The following 3rd party hosting services are known to **NOT support mods**, +regardless of what their websites and marketing pages claim: + +- low.ms + +If you believe a site is listed here in error, +contact us about it on the https://discord.gg/xkVJ73E[Discord]. + [id="GetModManager"] == Use a Mod Manager to Connect to the Server From 04951a1d1fcb62a0f0d5d992f63916447ce00017 Mon Sep 17 00:00:00 2001 From: Rob B Date: Tue, 7 May 2024 22:38:12 -0400 Subject: [PATCH 4/8] Add section about joining modded servers --- .../pages/ForUsers/DedicatedServerSetup.adoc | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc index b30b995c..0229804d 100644 --- a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc +++ b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc @@ -77,7 +77,7 @@ You could also install ficsit-cli on the server and interact with its file syste [IMPORTANT] ==== -Since dedicated Server support is still a work in progress, +Since dedicated server support is still a work in progress, there are TWO different versions of Satisfactory Mod Manager available! - SMM2 is the one automatically downloaded when you visit https://smm.ficsit.app/. It doesn't support dedicated servers. @@ -243,8 +243,6 @@ image::DedicatedServers/ExampleSupportsDedicatedServers.png[Supported Example] .Example Mod that Does NOT Support Dedicated Servers image::DedicatedServers/ExampleDoesNotSupportDedicatedServers.png[No Support Example] -This example supports dedicated servers: - Satisfactory Mod Manager offers a "compatible" filtering mode which, while managing a server install, causes only server-compatible mods to be displayed. @@ -292,6 +290,25 @@ Note that applying changes in ficsit-cli is a global action - all installations the program is aware of will have any staged changes they may have applied in parallel. This does _not_ mean that all installs must be on the same profile. +[id="JoiningModdedDedicatedServer"] +== Joining a Modded Dedicated Server + +As described in the link:#ServerClientConsistency[Server-Client Mod Consistency] section, +client players must have the same mods installed as the server to be able to join. +In the case of a failed join due to a mod mismatch, +SML will attempt to provide a meaningful disconnect message, but this is not always possible. + +If you're having trouble joining your server, +first verify that it is possible to connect to the server in its unmodified state +by removing all mods from the server and client. +Most connection issues people encounter also affect the unmodified server. +If that works, try adding mods back in small groups to see which one is causing the problem. + +If you're still encountering problems, +join the https://discord.gg/xkVJ73E[Discord] +and upload logs from both your client and server in the `#help-using-mods` channel. + +[id="ModdedServerConfiguration"] == Configuring Mods on Servers There is not currently an interface for adjusting From 613af9e06bacff7c34346be6d78d7866d526b498 Mon Sep 17 00:00:00 2001 From: Rob B Date: Tue, 7 May 2024 22:42:40 -0400 Subject: [PATCH 5/8] Fix #288 --- modules/ROOT/pages/Development/Cpp/index.adoc | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/modules/ROOT/pages/Development/Cpp/index.adoc b/modules/ROOT/pages/Development/Cpp/index.adoc index daeecf66..71680f27 100644 --- a/modules/ROOT/pages/Development/Cpp/index.adoc +++ b/modules/ROOT/pages/Development/Cpp/index.adoc @@ -89,24 +89,18 @@ If you want to learn more about that, there are plenty of good resources availab In order to write {cpp} mods, you will require both general {cpp} knowledge, and knowledge about how {cpp} applies to Unreal Engine systems. You can find a quick guide to the Unreal portion in the https://docs.unrealengine.com/en-US/Programming/Introduction/index.html[Unreal Documentation]. -== Warning +== Modding Capabilities -Due to technical limitations, there are some functions/features of Satisfactory and Unreal Engine that -we are not able to access or need to use a work around to call correctly. This is the world we live in right now, and we can't do much about it. +As Satisfactory is packaged as a modular build and the developers distribute the headers and `pdb`s for us, +and mods are loaded as Unreal plugins, +there is very little of the game that {cpp} mods _can't_ modify. +It usually just comes down to how much patience you have to figure out how to do it. If you experience a crash or some undefined behavior while using a function from Unreal Engine or Satisfactory, -you should read the javadoc comment that has been added to the function. Sometimes the comment will tell you that it doesn't work -and suggest you use the workaround written in the comment. +you should read the doc comment that has been added to the function. +Sometimes the comment will tell you that it doesn't work +and suggest you use the workaround written in the comment, +or it may contain valuable context about how the function can be used. If it still doesn't work, and you are **absolutely sure** that you are using it correctly, contact the SML developers on the Discord for further advice. - -If your mod requires calling a Satisfactory function that is not compiled into their binaries, -f.e. when the function is marked as `inline`, then it will create a log entry starting with -`[FATAL] Executable missing symbol with mangled name`. -This will you also tell you the mangled symbol name it was not able to find. -You can still run the game, but when your mod tries to call this function, the game will crash. -The crash may not cause the crash reporter to open, which is a signal that you should then checkout -FactoryGame.log since it will tell you which symbol got called. -This information will be very useful in fixing the bug, so keep it on hand if you plan to ask for help with your mod on the Discord. - From 8a4534406acfd9fa27663ee35840efcb9046e46f Mon Sep 17 00:00:00 2001 From: Rob B Date: Tue, 7 May 2024 23:48:59 -0400 Subject: [PATCH 6/8] Replace bare discord join links with ficsit.app subdomain join links --- README.md | 2 +- modules/ROOT/pages/CommunityModLists/QOL.adoc | 2 +- .../Development/BeginnersGuide/SimpleMod/NextSteps.adoc | 2 +- .../Development/BeginnersGuide/SimpleMod/buildable.adoc | 2 +- .../pages/Development/BeginnersGuide/SimpleMod/index.adoc | 2 +- .../pages/Development/BeginnersGuide/SimpleMod/item.adoc | 2 +- .../pages/Development/BeginnersGuide/SimpleMod/recipe.adoc | 2 +- modules/ROOT/pages/Development/BeginnersGuide/index.adoc | 4 ++-- modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc | 6 +++--- modules/ROOT/pages/ForUsers/Welcome.adoc | 2 +- modules/ROOT/pages/faq.adoc | 2 +- modules/ROOT/pages/index.adoc | 4 ++-- supplemental-ui/partials/header-content.hbs | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 0318480b..74ce0e53 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Documentation for Satisfactory Mod Loader (SML) and Satisfactory modding. Master branch is live on . Please contact us on the -[Satisfactory Modding Discord Server](https://discord.gg/xkVJ73E) +[Satisfactory Modding Discord Server](https://discord.ficsit.app) with questions and suggestions, or contribute via PRs (see below). We attempt to use [Semantic Line Break format](https://sembr.org/) in the source files, diff --git a/modules/ROOT/pages/CommunityModLists/QOL.adoc b/modules/ROOT/pages/CommunityModLists/QOL.adoc index 95f4a005..7eed6b01 100644 --- a/modules/ROOT/pages/CommunityModLists/QOL.adoc +++ b/modules/ROOT/pages/CommunityModLists/QOL.adoc @@ -8,7 +8,7 @@ Use the Mod Tags system to xref:ForUsers/Tags.adoc[filter for mods tagged with # Mods in this list are generally considered by the community to add convenient, quality-of-life-improving features to Satisfactory without significantly affecting the game's balance or progression. -If you have any suggestions for this list, feel free to discuss them on the https://discord.gg/xkVJ73E[Discord Server], or add them yourself via the 'Edit this Page' button in the top right. +If you have any suggestions for this list, feel free to discuss them on the https://discord.ficsit.app[Discord Server], or add them yourself via the 'Edit this Page' button in the top right. == Mod List diff --git a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/NextSteps.adoc b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/NextSteps.adoc index f9edeb5c..3aa8efa1 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/NextSteps.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/NextSteps.adoc @@ -9,7 +9,7 @@ Once you have a mod you're ready to upload, follow the xref:Development/BeginnersGuide/ReleaseMod.adoc[Releasing Your Mod] directions to export and upload it for other people to use. -You can also ask questions on the https://discord.gg/xkVJ73E[Discord Server]. +You can also ask questions on the https://discord.ficsit.app[Discord Server]. You may also be interested in {cpp} modding, which allows modifying and creating much more advanced game behaviors. diff --git a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/buildable.adoc b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/buildable.adoc index 30a40eb1..61ffa9ca 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/buildable.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/buildable.adoc @@ -116,7 +116,7 @@ You forgot to assign a hologram class in the FGBuildable - the default is `None` === Something Else -If something went wrong, feel free to contact us on the https://discord.gg/xkVJ73E[Discord] for help. +If something went wrong, feel free to contact us on the https://discord.ficsit.app[Discord] for help. == Next Steps diff --git a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/index.adoc b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/index.adoc index d87f455d..7b309eea 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/index.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/index.adoc @@ -33,7 +33,7 @@ types of items that pass through it Knowledge about 3D modeling is very helpful if you want to add new items, buildings, enemies, etc. to the game. If you have an idea for such a mod but aren't experienced with modeling, consider posting it in the `#ideas-discussion` channel on the -https://discord.gg/xkVJ73E[Discord server]. +https://discord.ficsit.app[Discord server]. You may find an artist willing to work with you on a project. You could also learn how to model in a program like Blender, Meshmixer, Maya, etc. ==== diff --git a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/item.adoc b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/item.adoc index 9343939f..61462029 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/item.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/item.adoc @@ -353,7 +353,7 @@ And you're done! Go ahead and Alpakit your plugin, then check out your fancy new You can find info on how to use Alpakit back on the xref:Development/BeginnersGuide/project_setup.adoc#_setting_up_alpakit[Project Setup] page. -If something went wrong, feel free to contact us on the https://discord.gg/xkVJ73E[Discord] for help. +If something went wrong, feel free to contact us on the https://discord.ficsit.app[Discord] for help. == Next Steps diff --git a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/recipe.adoc b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/recipe.adoc index ade6766b..63cd9f42 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/recipe.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/SimpleMod/recipe.adoc @@ -337,7 +337,7 @@ Go back and check the recipe's properties to see if they match what was describe === Something Else -If something went wrong, feel free to contact us on the https://discord.gg/xkVJ73E[Discord] for help. +If something went wrong, feel free to contact us on the https://discord.ficsit.app[Discord] for help. Even if you fix it yourself, please bring it up on the Discord so we can update the docs with your findings to help other people that might have a similar issue! diff --git a/modules/ROOT/pages/Development/BeginnersGuide/index.adoc b/modules/ROOT/pages/Development/BeginnersGuide/index.adoc index 57c143a9..3e7911f9 100644 --- a/modules/ROOT/pages/Development/BeginnersGuide/index.adoc +++ b/modules/ROOT/pages/Development/BeginnersGuide/index.adoc @@ -65,7 +65,7 @@ Use this to keep track of how far though a page you are or jump between sections == Join the Discord Making mods for Satisfaction can get complex and confusing at times, but we're here to help. -Please consider joining our community https://discord.gg/xkVJ73E[Discord Server] +Please consider joining our community https://discord.ficsit.app[Discord Server] and pick up the `Aspiring Modder` role in the `#rules` channel to get access to dedicated help channels for mod makers. == Contributing to the Docs @@ -74,7 +74,7 @@ These documentation pages are all written by community members, and are publicly You can see the source code by clicking 'Edit this Page' in the top right corner of any page. Please do not hesitate to contact us with corrections, suggestions, or questions. -The best way to reach the team is our https://discord.gg/xkVJ73E[Discord Server]. +The best way to reach the team is our https://discord.ficsit.app[Discord Server]. You can find more info on contributing to the docs https://github.com/satisfactorymodding/Documentation#readme[here]. diff --git a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc index 0229804d..a80c31ab 100644 --- a/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc +++ b/modules/ROOT/pages/ForUsers/DedicatedServerSetup.adoc @@ -61,7 +61,7 @@ regardless of what their websites and marketing pages claim: - low.ms If you believe a site is listed here in error, -contact us about it on the https://discord.gg/xkVJ73E[Discord]. +contact us about it on the https://discord.ficsit.app[Discord]. [id="GetModManager"] == Use a Mod Manager to Connect to the Server @@ -214,7 +214,7 @@ Remember, we can only provided limited support for third-party hosted servers as we do not know or control their systems. Contact your server host's support lines if you encounter problems. -Contact us on the https://discord.gg/xkVJ73E[Discord Server] if something is confusing or goes wrong. +Contact us on the https://discord.ficsit.app[Discord Server] if something is confusing or goes wrong. [id="InstallingMods"] == Installing Mods @@ -305,7 +305,7 @@ Most connection issues people encounter also affect the unmodified server. If that works, try adding mods back in small groups to see which one is causing the problem. If you're still encountering problems, -join the https://discord.gg/xkVJ73E[Discord] +join the https://discord.ficsit.app[Discord] and upload logs from both your client and server in the `#help-using-mods` channel. [id="ModdedServerConfiguration"] diff --git a/modules/ROOT/pages/ForUsers/Welcome.adoc b/modules/ROOT/pages/ForUsers/Welcome.adoc index ae6fe964..e091eacf 100644 --- a/modules/ROOT/pages/ForUsers/Welcome.adoc +++ b/modules/ROOT/pages/ForUsers/Welcome.adoc @@ -10,7 +10,7 @@ If you have a question, there's a pretty good chance it has been answered on our xref:faq.adoc[FAQ - Frequently Asked Questions] page. If it's not answered there, or something is unclear, feel free to ask in our -https://discord.gg/xkVJ73E[Discord server]. +https://discord.ficsit.app[Discord server]. == Installing the Mod Manager diff --git a/modules/ROOT/pages/faq.adoc b/modules/ROOT/pages/faq.adoc index e8bfec9f..c5da5a9b 100644 --- a/modules/ROOT/pages/faq.adoc +++ b/modules/ROOT/pages/faq.adoc @@ -6,7 +6,7 @@ Consider using your browser's Find on Page functionality (usually `Ctrl+F`) to quickly search this page for key words in your question. Is there a question you see asked a lot and would like to see it here? -Feel free to discuss them on the https://discord.gg/xkVJ73E[Discord Server], +Feel free to discuss them on the https://discord.ficsit.app[Discord Server], or add them yourself via the 'Edit this Page' button in the top right. [id="Installation"] diff --git a/modules/ROOT/pages/index.adoc b/modules/ROOT/pages/index.adoc index 71f175a2..68d4b844 100644 --- a/modules/ROOT/pages/index.adoc +++ b/modules/ROOT/pages/index.adoc @@ -15,7 +15,7 @@ In this page, we will provide some surface level information for both mod users [TIP] ==== -We suggest you join our https://discord.gg/xkVJ73E[Discord Server] +We suggest you join our https://discord.ficsit.app[Discord Server] to get support and chat with fellow mod users and developers! ==== @@ -62,7 +62,7 @@ or Lua xref:Development/BeginnersGuide/overwriting.adoc#_tweakit[(TweakIt)]. If you're looking to write your own mods, we suggest you start with making blueprint mods first rather than C++ mods. Check out the xref:Development/BeginnersGuide/index.adoc[Getting Started Guide] -and consider picking up the `Aspiring Modder` role in our https://discord.gg/xkVJ73E[Discord]'s `#rules` channel. +and consider picking up the `Aspiring Modder` role in our https://discord.ficsit.app[Discord]'s `#rules` channel. If you're looking to make models, it's best to learn how to put a mod together first. Once you've completed the `Buildable` step in `Beginners Guide`, then check out our xref:Development/Modeling/index.adoc[Modeling Guide]. diff --git a/supplemental-ui/partials/header-content.hbs b/supplemental-ui/partials/header-content.hbs index e09a20ef..e615163e 100644 --- a/supplemental-ui/partials/header-content.hbs +++ b/supplemental-ui/partials/header-content.hbs @@ -26,7 +26,7 @@