What you need before continuing:
- You must have imported your building Mesh that you want to use
The Fishing system for Unreal Engine 4 has been relased!
If you are using regular Listen servers, then this does not apply to you!
It has come to my attention that running the Foliage System on Dedicated Servers causes the server to crash.
Assertion failed: Assertion failed: (Index >= 0) & (Index < ArrayNum) [File:Runtime/Core/Public\Containers/Array.h] [Line: 634]
Array index out of bounds: 3530 from an array of size 0
I have a simple solution for this, all you need to do is change a few lines of Engine code to fix it, this is because the Dedicated Server doesn’t consider the Instance array valid since they are not being rendered on the server.
Open up “C:\UnrealEngine\Engine\Source\Runtime\Engine\Private\HierarchicalInstancedStaticMesh.cpp”
Go to line 2394 (UE Source 4.17.2)
Inside the function UHierarchicalInstancedStaticMeshComponent::BuildTreeAsync()
const bool bMeshIsValid =
// make sure we have instances
PerInstanceSMData.Num() > 0 &&
// make sure we have an actual staticmesh
GetStaticMesh() &&
GetStaticMesh()->HasValidRenderData() &&
// You really can’t use hardware instancing on the consoles with multiple elements because they share the same index buffer.
// @todo: Level error or something to let LDs know this
1;//GetStaticMesh()->LODModels(0).Elements.Num() == 1;
}
// Verify that the mesh is valid before using it.
bool bMeshIsValid =
// make sure we have instances
PerInstanceSMData.Num() > 0 &&
// make sure we have an actual staticmesh
GetStaticMesh() &&
GetStaticMesh()->HasValidRenderData() &&
// You really can’t use hardware instancing on the consoles with multiple elements because they share the same index buffer.
// @todo: Level error or something to let LDs know this
1;//GetStaticMesh()->LODModels(0).Elements.Num() == 1;if (GetNetMode() == NM_DedicatedServer)
{
bMeshIsValid =
// make sure we have instances
PerInstanceSMData.Num() > 0 &&
// make sure we have an actual staticmesh
GetStaticMesh() &&
// You really can’t use hardware instancing on the consoles with multiple elements because they share the same index buffer.
// @todo: Level error or something to let LDs know this
1;
}
You can now have an array of meshes for the same resource, if they have the same rewards & uses, you no longer have to have multiple entries and blueprints for each actor/resource!
Port: 7777-7778 [udp]
Port: 27015-27016 [udp]
Install steamcmd, unless you already have this installed
sudo apt get install steamcmdThis will install the dedicated server files into your home directory, eg /home/user/TSAServer
steamcmd +login anonymous +force_install_dir ~/TSAServer/ +app_update 713970 +quit
That’s it for installation of the server files, next I’ll give you some command line examples:
For windows users, the server software is located under your “Tools” section, in your Library.
Once you’ve installed the dedicated server software, you can put a Shortcut to TSAServer.exe on your desktop.
You can also use steamcmd for Windows, but you MUST have the steam client running in order for the server to be registered as a steam Game Server.
https://developer.valvesoftware.com/wiki/SteamCMD#Downloading_SteamCMD
./TSAServer.sh Level_01?SERVERNAME=MY_AWESOME_SERVER?MAXPLAYERS=6?Game=COOP -log -server
“C:\Program Files (x86)\Steam\steamapps\common\TSAServer\TSAServer.exe” Level_01?SERVERNAME=MY_AWESOME_SERVER?MAXPLAYERS=6?Game=COOP -log -server
SERVERNAME = The Servers name, without spaces!
MAXPLAYERS = 2-6, max players for the time being is hard-coded to 6 players max per server
GAME = Which game mode to run
DM
COOP
CIV
ZBRAWL
ROYALE
Level_01 (Abandoned City)
Level_02 (Trailer Park)
In case you want to run multiple servers on the same machine, or if you’re already hosting another game server on the same machine, you can use these prefixes
?Port=7778?QueryPort=27016
Example:
./TSAServer.sh Level_01?SERVERNAME=MY_SERVER?MAXPLAYERS=6?Game=COOP?Port=7778?QueryPort=27016 -log -server
which will allow the game server to use alternative ports, remember to open these in your firewall!