Simple Build System Adding a new Building

What you need before continuing:

  • You must have imported your building Mesh that you want to use

Make a Child Blueprint Class of “BP_Master_Building” and name it whatever you want.

Add a new Row to the DataTable “DT_Buildings”

Fill in the information

It should look something like this when done:

In the player controller, select the DataTable “Row Name”.

That’s it!

Dedicated Server Bug with Interactive Foliage

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()

 

Old code

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;
}

New code

// 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;
}

Adding new resources to the Foliage System 1.2

In the latest version of the Foliage System, I’ve made it super simple to add new Resources!

All you have to do now is open up DT_Resources data table and sets the mesh(es) for your resource, and you’re done!

 

 

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!

TSA Dedicated Server Setup

Required Firewall Ports

Port: 7777-7778 [udp]
Port: 27015-27016 [udp]

Linux: Ubuntu/Debian

Install steamcmd, unless you already have this installed
sudo apt get install steamcmd

This 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:

WINDOWS

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

PARAMETERS

Linux:

./TSAServer.sh Level_01?SERVERNAME=MY_AWESOME_SERVER?MAXPLAYERS=6?Game=COOP -log -server

Windows:

“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

 

Valid game modes

DM
COOP
CIV
ZBRAWL
ROYALE

Valid level names

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!

Categories all