Runtime DataTable - Import/Export text CSV or Google Sheet at runtime and auto-update structs and UObjects!

Quick question as I am trying to see if this plugin will work for my case. I want to share data between 2 instances of unreal engine. This is so I can pass data easily.

think in the main game I have a leaderboard struct and want to also have that on other game instance.

Also how can I create the CSV on first run, in the build directory, then update the CSV when I update my array.

Thanks.
Hopefully this is not that confusing.

Also would this work on Linux?? Thanks.

Hello TFA_aaronfhd,

This plugin can be used for this purpose. You would have to write the CSV to an agnostic directory that both instances can access, or use a Google Sheet.

Save and Update are the same command in RDT, so whether you’re creating a CSV for the first time or it already exists and it will overwrite the existing CSV, the process is the same. The entire CSV will be replaced. Just keep that in mind.

In your application, you should first try to load the CSV if it exists, which will update your application’s understanding of the CSV. When data is updated in the game, first read the existing CSV and update the new array with your new data, then also make a call to update the CSV from the array you just updated. This is something you would manually set up one time. This would keep both instances in sync. Pull data => make additions => push data, just like version control.

Finally, this plugin is supported on Linux (I develop it in Arch) but because the marketplace does not distribute Linux binaries you will be required to build the development and shipping binaries for it yourself.

This is a bug, thank you for finding it! I have solved the issue and will upload it to versions 5.2, 5.3 and 5.4.

New version submitted!

4-5-2024 (5.3.1. 5.2.1, 5.1.2): Fix for ParseKeys removing the first header column when set to false

Hey @JaredTherriault , when do you think you upload the 5.4 version of your plugin?

Hey Hagalin, I submitted it on Monday, we’re just waiting on Epic to approve and post it.

1 Like

Epic informed me that the Runtime DataTable version for 5.4 is now live!

Hello
can you solve this issue please!

the packaged project works so fine with your Plugin but when i have internet on the pc
but when it is offline (without internet) i got this crash :(Assertion failed: IsValid() [File:D:\RocketSync\5.3.0-27405482+++UE5+Release-5.3\Working\Engine\Source\Runtime\Core\Public\Templates\SharedPointer.h] [Line: 1139])

and here is the log:

Assertion failed: IsValid() [File:D:\RocketSync\5.3.0-27405482+++UE5+Release-5.3\Working\Engine\Source\Runtime\Core\Public\Templates\SharedPointer.h] [Line: 1139]

UnrealEditor_RuntimeDataTable!URuntimeDataTableObject::OnResponseReceived_GET_SheetAsCSV() [D:\build\U5M-Marketplace\Sync\LocalBuilds\PluginTemp\HostProject\Plugins\RuntimeDataTable\Source\RuntimeDataTable\Private\RuntimeDataTable.cpp:160]

UnrealEditor_RuntimeDataTable!TBaseUObjectMethodDelegateInstance<0,URuntimeDataTableObject,void __cdecl(TSharedPtr<IHttpRequest,1>,TSharedPtr<IHttpResponse,1>,bool),FDefaultDelegateUserPolicy,FRDTGetStringDelegate,FRuntimeDataTableOperationParams>::ExecuteIf() [D:\RocketSync\5.3.0-27405482+++UE5+Release-5.3\Working\Engine\Source\Runtime\Core\Public\Delegates\DelegateInstancesImpl.h:665]

UnrealEditor_HTTP

UnrealEditor_HTTP

UnrealEditor_HTTP

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor_Core

UnrealEditor

UnrealEditor

UnrealEditor

UnrealEditor

UnrealEditor

UnrealEditor

kernel32

ntdll

Just pushed an update (5.4.1, 5.3.2, 5.2.2) that should solve the offline nullptr issue. Epic should approve it in a few days!

1 Like

Hi Jared,

Great plugin you created, I purchased it and it works just as expected!

One thing to add. Can you please cleanup the warnings in the 5.4 (and any other) version? It prevents us from finishing a project because we can’t have warnings in our code by standard.
Specifically deprecation warnings.

Thank you!

Hey mkderin, you shouldn’t see deprecation warnings unless you’re using deprecated code. Or are they engine deprecations for code the plugin itself is using?

We get warnings like this:

[107/157] Compile [arm64] RuntimeDataTable.cpp
D:/MyProject/Plugins/RuntimeDataTable/Source/RuntimeDataTable/Private/RuntimeDataTable.cpp(83,19): warning: ‘TryGetStringField’ is deprecated: Passing an ANSI string to TryGetStringField has been deprecated outside of UTF-8 mode. Please use the overload that takes a TCHAR string. Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile. [-Wdeprecated-declarations]
if (JsonObject->TryGetStringField(“client_email”, TokenInfo.ServiceAccountEmail) &&
^
D:/UE/UE_5.4/Engine/Source/Runtime/Json/Public/Dom/JsonObject.h(382,2): note: ‘TryGetStringField’ has been explicitly marked deprecated here
UE_DEPRECATED(5.4, “Passing an ANSI string to TryGetStringField has been deprecated outside of UTF-8 mode. Please use the overload that takes a TCHAR string.”)
^
D:/UE/UE_5.4/Engine/Source/Runtime/Core/Public/Misc/CoreMiscDefines.h(274,43): note: expanded from macro ‘UE_DEPRECATED’
#define UE_DEPRECATED(Version, Message) [[deprecated(Message " Please update your code to the new API before upgrading to the next release, otherwise your project will no longer compile.")]]
^

We get this warning for some other TryGetStringField, TryGetArrayField, TryGetObjectField, TryGetNumberField, GetStringField usages too.

Are we missing some config or setting?

Nah, I mean if your organization can disable warnings as errors in the build settings you’ll be fine, but I can update these calls on my end, it’s just a matter of getting it approved on Fab.

Can your organization build plugins or is it policy to only use binaries? If needed, I can send you the updated source to unblock you, but you’ll need to build it yourself until Fab updates.

Very kind of you to fix this, looking forward to it, thank you.

Time is not a pressure now for us so we can wait for the update on FAB.
Let me know when it’s up.

Btw we do build the plugins that’s why we got the warnings. If it’s a simple enough solution to post it here, I’m interested but we can wait for your official update no problem.

Ok, the update has now gone through. Give it a shot and let me know if it works for you!

Boa tarde, pode me msotrar como faz a atualizao em tempo real como faz as conexÔes, sou novo e pra mi esta dificil

Hello, nice plugin, I’ve been using for awhile now
 It works great when on single player.
But I cannot replicate the structure array
 When setting values to a replicated variable using a “dummy” structure array, all changes replicates, but if I use the array updated by the “Update Array from CSV info”, the changes won’t replicate


EDIT:

Actually, if my array is small enough(<400) it replicates properly, but if I want to replicate my full array of structs(way over 1k), nothing gets replicated
 So, I am now thinking this is a UE problem. Could someone point me a direction?

(post deleted by author)

Hello, I must apologize as I do not speak Portuguese. It sounds like you want to update data in realtime - are you asking about sending or receiving data? From where, and to where?

Portuguese (Portugal) machine translation:

‘OlĂĄ, peço desculpa pois nĂŁo falo portuguĂȘs. Parece que pretende atualizar os dados em tempo real. De onde e para onde?’

Truly, Unreal Engine does not like to replicate large arrays. I think the limit is somewhere around 100 elements in practice. For anything larger, you would need to break up the array into chunks of several arrays.

You could also send the raw (or obfuscated) CSV to each client and have them update the array on their end. This does of course make it easier to cheat, but it’s an option worth exploring especially if it’s not competitiion-sensitive data being sent.