Skip to content

Commit 1273777

Browse files
committed
Merge branch 'dev'
2 parents 42f3ba4 + 5c2a6aa commit 1273777

File tree

5 files changed

+42
-7
lines changed

5 files changed

+42
-7
lines changed

Config/DefaultEngine.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ bSmoothFrameRate=False
160160
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/SocketSubsystemEOS.NetDriverEOSBase",DriverClassNameFallback="/Script/SocketSubsystemEOS.NetDriverEOSBase")
161161
+NetDriverDefinitions=(DefName="BeaconNetDriver",DriverClassName="/Script/OnlineSubsystemUtils.IpNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")
162162
+NetDriverDefinitions=(DefName="DemoNetDriver",DriverClassName="/Script/Engine.DemoNetDriver",DriverClassNameFallback="/Script/Engine.DemoNetDriver")
163+
WorldSettingsClassName=/Script/FactoryGame.FGWorldSettings
163164

164165
[/Script/HardwareTargeting.HardwareTargetingSettings]
165166
TargetedHardwareClass=Desktop

Mods/SML/Source/SML/Private/Player/SMLRemoteCallObject.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,17 @@ void USMLRemoteCallObject::HandleChatCommand_Implementation(const FString& Comma
2626

2727
void USMLRemoteCallObject::SendChatMessage_Implementation(const FString& Message, const FLinearColor& Color) {
2828
AFGChatManager* ChatManager = AFGChatManager::Get(GetWorld());
29-
FChatMessageStruct MessageStruct;
30-
MessageStruct.MessageString = Message;
31-
MessageStruct.MessageType = EFGChatMessageType::CMT_SystemMessage;
32-
MessageStruct.ServerTimeStamp = GetWorld()->TimeSeconds;
33-
MessageStruct.CachedColor = Color;
34-
ChatManager->AddChatMessageToReceived(MessageStruct);
29+
if (ChatManager) {
30+
FChatMessageStruct MessageStruct;
31+
MessageStruct.MessageString = Message;
32+
MessageStruct.MessageType = EFGChatMessageType::CMT_SystemMessage;
33+
MessageStruct.ServerTimeStamp = GetWorld()->TimeSeconds;
34+
MessageStruct.CachedColor = Color;
35+
ChatManager->AddChatMessageToReceived(MessageStruct);
36+
} else {
37+
UE_LOG(LogSatisfactoryModLoader, Error, TEXT("A mod tried to send a chat message before the game's ChatManager was ready! It has been prevented to avoid a crash. The mod developer must fix this by waiting for the chat manager to be valid. The message would have been: %s"), *Message);
38+
}
39+
3540
}
3641

3742
bool USMLRemoteCallObject::HandleChatCommand_Validate(const FString& CommandLine) {

Mods/SML/Source/SML/Private/Registry/ModContentRegistry.cpp

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -860,13 +860,39 @@ void UModContentRegistry::AutoRegisterRecipeReferences( TSubclassOf<UFGRecipe> R
860860
}
861861
}
862862

863+
static bool IsResourceFormFilteredOut(EResourceForm ResourceForm, EGetObtainableItemDescriptorsFlags Flags)
864+
{
865+
using enum EGetObtainableItemDescriptorsFlags;
866+
using enum EResourceForm;
867+
868+
switch (ResourceForm) {
869+
case RF_INVALID:
870+
return !EnumHasAnyFlags(Flags, EGetObtainableItemDescriptorsFlags(IncludeBuildings | IncludeCustomizations | IncludeVehicles | IncludeCreatures | IncludeSpecial));
871+
case RF_SOLID:
872+
return false;
873+
case RF_LIQUID:
874+
case RF_GAS:
875+
return !EnumHasAnyFlags(Flags, EGetObtainableItemDescriptorsFlags(IncludeNonSolid));
876+
case RF_HEAT: /* FIXME: Could be omitted, so that the default case handles it */
877+
return true;
878+
default:
879+
return true;
880+
}
881+
}
882+
863883
bool UModContentRegistry::IsDescriptorFilteredOut( const UObject* ItemDescriptor, EGetObtainableItemDescriptorsFlags Flags )
864884
{
865885
if (!ItemDescriptor) {
866886
UE_LOG(LogContentRegistry, Warning, TEXT("IsDescriptorFilteredOut called with null ItemDescriptor, returning true (filtering out)"));
867887
return true;
868888
}
869-
const auto descriptorClass = Cast<UClass>(ItemDescriptor);
889+
const TSubclassOf<UFGItemDescriptor> descriptorClass = const_cast<UClass*>(Cast<UClass>(ItemDescriptor));
890+
if (!descriptorClass) {
891+
return true;
892+
}
893+
if (IsResourceFormFilteredOut(UFGItemDescriptor::GetForm(descriptorClass), Flags)) {
894+
return true;
895+
}
870896

871897
if (!EnumHasAnyFlags(Flags, EGetObtainableItemDescriptorsFlags::IncludeBuildings) && descriptorClass->IsChildOf<UFGBuildingDescriptor>()) {
872898
return true;

Mods/SML/Source/SML/Public/Registry/ModContentRegistry.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#include "FGRecipe.h"
66
#include "FGResourceSinkSubsystem.h"
77
#include "Engine/DataTable.h"
8+
#include "Misc/EnumClassFlags.h"
89
#include "ModContentRegistry.generated.h"
910

1011
DECLARE_LOG_CATEGORY_EXTERN(LogContentRegistry, Log, All);
@@ -140,6 +141,8 @@ enum class EGetObtainableItemDescriptorsFlags : uint8
140141
Default = None,
141142
};
142143

144+
ENUM_CLASS_FLAGS(EGetObtainableItemDescriptorsFlags);
145+
143146
/**
144147
* Manages registration and lifetime of the modded content
145148
*

0 commit comments

Comments
 (0)