Simple Build System Settings

Simple Build system Settings Explained.

  • Enable Permissions
    If you want to enable the Permissions system, otherwise the system will not check Ownership of buildings
  • Placement Offset
    This is an offset used for building placement, when you spawn the build actor into the world it will inherit this offset, there are also in game functions to adjust the Z value of this offset (up and down)
  • Enable Socket Placement
    If you want to enable the sockets placement system
  • Trace Frequency
    This is how often the LineTrace will run, increase this value if, for whatever reason, you run into performance issues
  • Max Building Distance
    How far the player can build away from the Player’s character (or view)
  • Min ZOffset
    Minimum Z offset you can lower the “Placement Offset” to.
  • Min ZOffset
    Maximum Z offset you can increase the “Placement Offset” to.
  • Enable Line Trace
    You can disable the built in LineTrace timer if you are using a different/your own line trace.
  • Collision Precision
    How precise do you want the collision check to be when placing down buildings (if colliding with another building)
    1.0 = 1:1 scale of the building mesh (lower number is less precise)

If you disable “Enable Line Trace”, be sure to call this event in your own Tick/Looping event/function. “CL_LineTraceOnClient

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!