d6a8df448c
* rename command: `ban ...` => `ban player ...` To enable adding other subcommands starting with `ban`. Moving ban list and crash related code into its own class to tidy the Program class up. Change Id values of the crash cmds, to fit into the 16 byte max length imposed by ChangeStagePacket.IdSize. * add command: `ban ip <ipv4-address>` To add an IPv4 address to the ban list. * add command: `ban profile <profile-id>` To add a profile ID to the ban list. * add command: `unban ip <ipv4-address>` To remove a banned IPv4 address from the ban list. * add command: `unban profile <profile-id>` To remove a banned profile ID from the ban list. * add commands: `ban enable` and `ban disable` To set the value of `BanList.Enabled` to `true` or `false` without editing the `settings.json` file. * add command: `ban list` To show the current ban list settings. * fix: actually working ban functionality Changes: - ignore new sockets from banned IP addresses way earlier. - ignore all packets by banned profiles. Intentionally keeping the connection open instead of d/c banned clients. This is to prevent endless server logs due to automatically reconnecting clients. Before: Reconnecting clients aren't entering `ClientJoined` and therefore the d/c is only working on first connections. Effectively banned clients got a d/c and then automatically reconnected again without getting a d/c again. Therefore allowing them to play normally. * use SortedSet instead of List for settings To enforce unique entries and maintain a stable order inside of the `settings.json`. * add commands: `ban stage <stage-name>` and `unban stage <stage-name>` To kick players from the server when they enter a banned stage. <stage-name> can also be a kingdom alias, which bans/unbans all stages in that kingdom. Because we aren't banning the player, d/c them would be no good, because of the client auto reconnect. Instead send them the crash and ignore all packets by them until they d/c on their own. This is an alternative solution for issue #43. * Update Server.cs --------- Co-authored-by: Sanae <32604996+Sanae6@users.noreply.github.com> |
||
---|---|---|
.github/workflows | ||
Server | ||
Shared | ||
TestClient | ||
.gitignore | ||
docker-compose.yml | ||
Dockerfile | ||
README.md | ||
smo.service | ||
SmoMultiplayerServer.sln |
Super Mario Odyssey: Online Server
The official server for the Super Mario Odyssey: Online mod.
Windows Setup
- Download latest build from Releases
- Run
Server.exe
settings.json
is autogenerated in step 2, modify it however you'd like.
Building (Mac/Linux Setup)
Must have the .NET 6 SDK and Git installed. Run these commands in your shell:
git clone https://github.com/Sanae6/SmoOnlineServer
cd SmoOnlineServer
# replace run with build to only build the server
dotnet run --project Server/Server.csproj -c Release
If you ran dotnet build
instead of dotnet run
, you can find the binary at Server/bin/net6.0/Release/Server.exe
Running under systemd
If you have systemd, you can use the existing systemd serivce.
cp smo.serivce /etc/systemd/system/smo.service
# edit ExecStart to your path for the server executable and change WorkingDirectory to the server directory
chmod +x filepath to the server executable
systemctl enable --now smo.service
# for TTY access i would recommand conspy but there is also reptyr, chvt
Run docker image
If you have docker on your system, you can use the existing docker image. That way you don't have to build this server yourself or manually handle executables.
docker run --rm -it -p 1027:1027 -v "/$PWD/data/://data/" ghcr.io/sanae6/smo-online-server
# on Windows, depending on the shell you're using, $PWD might not work. Use an absolute path instead.
To always check for and use the latest server version you can add --pull=always
to the options.
Alternatively there's a docker-compose.yml
for docker-compose to simplify the command line options:
# update server
docker-compose pull
# start server
docker-compose up -d
# open the server cli
docker attach `docker-compose ps -q` --sig-proxy=false
# watch server logs
docker-compose logs --tail=20 --follow
# stop server
docker-compose stop
Commands
Run help
to get what commands are available in the server console.
Run the loadsettings
command in the console to update the settings without restarting.
Server address and port will require a server restart, but everything else should update when you run loadsettings
.
Settings
Server
Address: the ip address of the server, default: 0.0.0.0 # this shouldn't be changed
Port: the port of the server, default 1027
Maxplayers: the max amount of players that can join, default: 8
Flip: flips the player upside down, defaults: enabled: true, pov: both
Scenario: sync's scenario's for all players on the server, default: false
Banlist: banned people are unable to join the server, default: false
PersistShines/Moons: Allows the server to remember moon progress across crashes/restarts
Discord
Note: Token and LogChannel needs to a string puts "" around it
Token: the token of the bot you want to load into, default: null
Prefix: the bot prefix to be used, default: $
LogChannel: logs the server console to that channel, default: null