Dedicated Server

Windward comes with a dedicated server executable called WWServer.exe, this is the only file you need to actually host the dedicated server. Simply launching it in Windows will start a private dedicated server. Others will be able to join your server by using the Direct Connect option in Windward, if you don't list the server publicly, and entering your external IP address or Hostname if you have this networking feature setup. If you use the -public option, it will simply appear under the internet tab.

The latest version of the executable can always be found at https://www.tasharen.com/windward/WWServer.zip

## Dedicated Server Command Lines

A series of command lines can be used to customize your Dedicated Server. These need to be added to the execution of the WWServer.exe file when run. The easiest way to do this is to create a batch file that calls the executable and includes the command lines.

* **-name** : Your Server Name
* **-world** : Specify which world file to load (or the world name if starting from scratch)
* **-tcp** : Specify the TCP port to use (default is 5127)
* **-public** : Register your dedicated server to the public lobby so everyone in the world can see it
* **-service** : Run it as a windows service

For example:

`WWServer.exe -name "Your Server Name" -world "World" -tcp 5127 -public`

### Launching on Linux

To launch this server on Linux, you may use the mono framework.

#### Install Mono

##### *Installing Mono on Debian Derivatives (Ubuntu, Mint, Devuan, Debian)*

Run this command:

* `sudo apt-get update`
* `sudo apt-get install mono-complete`

##### *Installing Mono on RHEL Derivatives (CentOS, Fedora, RHEL)*

Run these commands:

`sudo yum update -y`

`sudo rpmkeys --import "http://pool.sks-keyservers.net/pks/lookup?op=get&search=0x3fa7e0328081bff6a14da29aa6a19b38d3d831ef"`

`sudo su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'`

`sudo yum install mono-complete`

#### Verify Mono Installation

To make sure mono installed correctly, you may run this command:

`mono --version`

If you receive an output beginning with a Mono JIT compiler version, e.g. `Mono JIT compiler version 6.12.0.90`, then mono has been successfully installed.

#### Launch the Server

To launch the server, you may use the following command:

*`mono WWServer.exe -name "Your Server Name" -world "World" -tcp 5127 -public`*

If you have issues with the server closing, you can use tmux to keep the server up. First, run command *tmux* to create a tmux session. Then run the server launch command. You can then exit the tmux session simply by closing the terminal you are using if you are SSHing into the server, or use Ctrl-B then D to close the session.

## In-game Admin Commands

There are a series of in-game command you can use once you have been authenticated as a Server Admin. These commands are typed into the chat window and are prefixed by a forward-slash "/".

* + /rep ← Shows your current reputation standings with various factions.
	+ /r ← Reply to the last person who sent you a private message.
	+ /pm <name>: <text> ← Send a private message to the specified player. In most cases it’s easier to click their name in chat or in the list of players instead (Tab).
	+ /g <text> ← Send a global message to everyone on the server, even if they are not in your local region.
	+ /gt <text> ← Send a global team message to everyone in your faction. Only your faction’s members will be able to see this.
	+ /team <text> ← Send a team message to everyone in your region. Same as local chat, but only for your team.
	+ /ad <text> ← Special global chat for administrators that everyone can see. Useful for announcements and such.
	+ /pac <text> ← Administrator-only private global chat. Only administrators will be able to see this.
	+ /invite <name> ← Invite the specified player to your instance. In most cases it’s easier to right-click the player’s name in chat or on the list of players and choose the “Invite” option instead.
	+ /ignore <name> ← Ignore or un-ignore the specified player.
	+ /who ← Shows who else is in the same region as you.
	+ /who all ← Shows who else is on the same server as you. Key shortcut: Tab.
	+ /who <name> ← Shows where the specified player is.
	+ /summon <name> ← Summon the specified player to your region. Admin-only.
	+ /goto # ← Quickly Fast Travel to the specified region. You can even fast travel to regions that are not accessible by default, such as 9999. Admin-only.
	+ /motd <text> ← Set a message-of-the-day. Admin-only.
	+ /set <option> = value ← Set a world option. The “option” can be a path inside the configuration file, such as /set Factions/Fac0/pennant = “New Pennant”. Only administrators can change these in multiplayer. Be careful with this command, it can drastically alter your world’s behaviour. The list of options are as follows:
		- pirateSpeak ← Specify true to enable pirate speak auto-translator or false to turn it off. ARRR!!
		- kingRequirement ← How many players are required to be present in a Heroic instance before a Pirate King will spawn. The default value is 11.
		- morePirates ← Specify true to make pirates more abundant.
		- canLiberate ← Specify false if you don’t want to have towns get occasionally liberated by members of other factions. Liberated towns are useful for letting you gain reputation with other factions. This lets you purchase ships at a discount, as well as giving you the option to switch your faction to one more suitable for your current tasks.
		- minSpeed ← (0.0 to 1.0) value representing how quickly ships can travel when sailing into the wind. Default: varies based on challenge level, anywhere from 0.3 at 200% challenge to 1 at 50% challenge. The default value at 100% challenge is 0.65 (35% movement penalty when sailing into the wind).
		- maxSpeed ← (0.0 to 1.0) how quickly ships can travel when sailing with the wind. Default: 1.0.
		- worldRegionSize ← Valid values are 128 through 512, default 256. Changing this value will make world regions larger or smaller than the default. This simply enlarges the terrain giving you more room to sail around.
		- combatRegionSize ← Same as worldRegionSize, but for combat instances.
		- heroicRegionSize ← Same as worldRegionSize but for heroic instances.
		- battleRegionSize ← Same as worldRegionSize but for battlegrounds.
		- freeControl ← Specify true or false to allow any player control any AI ship, regardless of their level. By default the ability to control AI ships is limited by player’s level.
		- playersForRaids ← Specify how many players are needed for pirates to occasionally raid non-frontier regions. By default at least 5 players are needed for pirate raids to occur in regions that are not next to a pirate-controlled region.
		- Mute/<PlayerName> = [true/false] ← Mute or unmute the specified player. It’s a shadow-mute. That player will still see all of their messages, but no one else will see them. For example: /set Mute/Aren Mook = true
		- war = [true/false] ← Permanent PvP or not
		- playerShips = [true/false ← allow player ships or not
		- challenge = [0.0 - 1.0] ← 0 being 50% challenge, 0.5 being 100%, 1 = 200%
		- damage = [0.0 - 1.0] ← 0 being 50% damage, 0.5 being 100%, 1 = 200%
	+ /set <filename> ← parse the specified filename’s contents as if it was a configuration file, merge it with the current configuration and upload the merged config to the server. Admin-only.
	+ /get ← Print the current world’s options. You can then fine-tune your Get selection:
		- /get <Option Path> ← Print the specified sub-option. For example: /get Mute will show you who’s muted, while /get Factions/Fac1 will show you Valiant’s configuration factions. Only administrators can use the detailed /get command.
	+ /remove <option> ← Remove a previously set option. Note that relogging will be required after removing any option. Admin-only.
	+ /deleteRegion # ← Delete all progress within the specified region. Admin-only.
	+ /fps ← Show or hide your current framerate in the top-left corner.
	+ /upload <filename> ← Upload the specified file to the server. This command requires administrator privileges.
		- /upload Symbols/Some Texture.png ← will upload My Documents/Windward/Symbols/Some Texture.png to the server if it’s present. By default the texture is treated as a mask where alpha channel determines which sail color affects the texture. Have the texture filename end with “RGB” if you want it to be interpreted as a color texture instead. For example “Some Texture RGB.png”. Ideal texture size is 128x128.
		- /upload Pennants/Awesome Pennant.png ← will upload My Documents/Windward/Pennants/Awesome Pennant.png to the server. By default the texture is treated as a mask where alpha channel determines which sail color affects the texture. Have the texture filename end with “RGB” if you want it to be interpreted as a color texture instead. For example “Some Pennant RGB.png”. Ideal texture size is 128x32, with the left side attached to the mainmast.
		- /upload Ships/New Awesome Ship.bytes ← will upload My Documents/Windward/Ships/New Awesome Ship.bytes to the server.
	+ /createSymbol <name> ← Create a new symbol item that you can then give to other players. The “name” should match a texture in the Symbols folder on the server (don’t include the PNG extension). Admin-only. Using the /upload example above, the command to create the symbol would be /createSymbol Some Texture
	+ /createPennant <name> ← Create a new pennant item that you can then give to other players. The “name” should match a texture in the Pennants folder on the server (don’t include the PNG extension). You can upload a local PNG to the server using the /upload command. Admin-only.
	+ /summon# # ← Summon a new ship. First # represents the size of the ship: 0, 1, 2, 3. These stand for regular ship (0), Captain (1), Lord (2), Dread Lord (3), respectively. The second # represents the desired faction, 0 through 6. 0 is Pirate, 1 through 6 are your world factions. These commands have a level requirement of 150, 225, 300 and 375, respectively.
	+ /award# ← Award an item to other players. # represents the desired quality, 2 through 5. 2 is light blue (uncommon, +2) item, 3 is blue (rare, +3), 4 is purple (epic, +4), 5 is orange (legendary, +5). These commands have a level requirement of 150, 225, 300 and 375, respectively.
	+ /reloadServerData ← This command will reload the server configuration files. Use it after modifying the world’s configuration, admin or ban lists. This command requires Administrator privileges.
	+ /anon ← Toggle anonymous mode. Anonymous players don’t show up on the players list and don’t show up in the chat window when talking in local chat. Great for role-playing or enriching the experience of others. Administrators can still see anonymous players.
	+ /obs ← Toggle observer mode. Observer mode lets you watch other players or AI ships, as well as take control of AI ships. You can also enter the observer mode by right-clicking any player on the players list and choosing the Observe option.
	+ /admin ← Verify as an administrator manually. Usually this is done as soon as you log in, so executing the command isn’t necessary.
	+ /admin <name> ← Give administrator privileges to another player. Only administrators can use this command.
	+ /info ← Print your own information, such as kills, contribution points, quests, etc.
	+ /info <name> ← Print information of another player (gold, wood etc). Admin-only.
	+ /stats <name> ← Print the specified player’s stats. Admin-only.
	+ /kick <name> ← Administrators can kick other players.
	+ /ban <name> ← Permanently ban the specified player. Admin-only.
	+ /unban <name> ← Unban the specified player. Note that to properly unban a player you will need to unban all of their associated data: their Steam / GOG ID, their machine ID and their IP address. Admin-only.
	+ /rename <name> ← If controlling an AI ship, rename it to the “<name>”. If not controlling an AI ship, rename the player “<name>” to a randomly generated name such as “WSS Someguy”. Useful to quickly rename offensively named players. Admin-only.
	+ /report <name> ← Report this player to administrators.
	+ /bug <text> ← Submit a bug report. Admins can see this right away.
	+ /log <text> ← Write down a log entry to My Documents/Windward/log.txt.
	+ /grow ← Grow the closest town to 10 (or maximum possible). Admin-only.
	+ /takeover ← Flip the closest town to the player’s faction. Admin-only.
	+ /globalTakeover ← Flip all towns and NPCs to the player’s faction. Admin-only.
	+ /juggernaut ← Immediately start or end the Ghost King game mode (juggernaut). Admin-only.
	+ /ctf ← Immediately start or end the Booty Run (capture the flag) game mode in the current region. Admin-only.
	+ /allowMod <name> ← Allow the specified mod to be used on this server. The mod must be active. The chosen mod will be moved from the “required” section into the “allowed” section, making it optional. It’s only recommended to allow pure client-side mods, such as the camera mod. Admin-only. /disallowMod <name> ← Undoes the previous /allowMod command, removing the specified mod from the list of allowed mods. Clients using that mod will no longer be able to log into the server. Admin-only.

## Advanced Server Config

This section is for advanced configuration of your Dedicated Windward Server, it's not hard to do, just a little more understanding is required.

#### Folder Structure

Advanced server configuration is stored in sub-folders under your Windward folder. If it is in the default location, it will look like:

\My Documents\Windward\ServerConfig\

\My Documents\Windward\ServerConfig\admin.txt

\My Documents\Windward\Symbols\

\My Documents\Windward\Worlds\PirateFun.dat

\My Documents\Windward\Worlds\PirateFun.dat.config

##### ServerConfig Folder

Create a sub-folder underneath your Windward folder called "ServerConfig". Within this folder you can create two text files

* **admin.txt** : Contains Steam IDs of administrators (one per line). First one in this file must be yours (use **/info** while in-game to find out what your ID is, should be about 17 numbers long), others can be added from in-game by an existing administrator.

* **ban.txt** : Contains keywords, IPs, steam IDs, steam usernames, etc -- anything you want to ban. For example, “crap”, when added, will not allow players with “crap” in their name to connect to your server. You can add to this list from within the game using **/ban <target>**, where target is a partial player name, steam ID, IP address, or just a keyword.

##### Symbols Folder

If you plan to have Custom Sail Symbols added to your server, you will need to copy your PNG files in here. You will also need to add a reference to each symbol you wish to use in your World Config file. If symbols are saved in this folder, and correctly added to the World Config for the world your server is running, they will be automatically downloaded and visible to all players who join your server. They are also included in-game as items to be purchased, picked up and traded.

##### Worlds Folder

Contains the world(s) your server can load when run as well as their respective World Config files.