(39) 's Extra Blueprint Nodes for You as a Plugin, No C++ Required!

FYI if anyone is using 4.7.0 here are the steps you need to take in order to get the plugin to work. Latest version above:

  1. In VictoryEdAlignMode.cpp (Line 602) change RV_TraceParams.IgnoreActors.Empty(); to RV_TraceParams.IgnoreComponents.Empty();

  2. Comment out (temp measure) lines 220 & 883 in VictoryBPFunctionLibrary.cpp

  3. In VictoryEdEngine.Build.cs add “Slatecore” (inc quotes) after “Slate”

Works perfectly!

Peter

Those stock variants seem like the most useful. most other data types could technically be stored using one of those, at the cost of some memory and conversion.

The two use cases I have would be covered by storing strings, and storing an int.

Thanks again for contributing so much to our community!

BP Node to Get Your Computer’s IP Address!

UPDATE: The VictoryPC class got removed from my plugin somehow between updates, post below is now fully integrated into the plugin again!

Now you can get your computer’s IP from within UE4, from within Blueprints!

Dear Community,

I’ve finally succeeded at implementing a node that many have been trying to implement since the Beta!

is a BP node that gets the IP address of your computer!

My node relies on http://api.ipify.org, a free and easy way to get your current IP address.

Because node involves an HTTP request I can’t make it a static library node, so I instead made a VictoryPC class that contains only functionality.

You can easily re-parent your current player controller blueprint to use my plugin VictoryPC class!

File->Reparent

and if you are not using a PC already, make sure to go to World Settings and use my VictoryPC as your player controller!

As long as my Victory BP Library is an active plugin for you, then VictoryPC class will show up!

Download:


**Celebration!**

Yay!

Now we can  get the IP address of the local computer for use with multiplayer games or webserver activities!

Enjoy!



Pic

Here’s the setup you should create in your Blueprinted version of my VictoryPC!


**C++ Source Code For You**

Here is the C++ source code I wrote just earlier today!



```


bool AVictoryPC::VictoryPC_GetMyIP_SendRequest()
{
	FHttpModule* Http = &FHttpModule::Get();
	
	if(!Http)
	{
		return false;
	}
	 
	if(!Http->IsHttpEnabled()) 
	{
		return false;
	} 
	//~~~~~~~~~~~~~~~~~~~
	
	FString TargetHost = "http://api.ipify.org";
	TSharedRef < IHttpRequest > Request = Http->CreateRequest(); 
	Request->SetVerb("GET");
	Request->SetURL(TargetHost);
	Request->SetHeader("User-Agent", "VictoryBPLibrary/1.0");
	Request->SetHeader("Content-Type" ,"text/html");
 
	Request->OnProcessRequestComplete().BindUObject(, &AVictoryPC::HTTPOnResponseReceived);
	if (!Request->ProcessRequest())
	{
		return false;
	}
	  
	return true;
}
	
void AVictoryPC::HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
	->VictoryPC_GetMyIP_DataReceived(Response->GetContentAsString());
}
 


```



♥

's Blueprints TMap Solution!

I’ve now made a BP TMap solution!

TMap is a data structure that is not yet exposed to BP, but I’ve made a component-based solution for you so that you can use TMaps in BP!


**What's a TMap?**

A TMap is a data structure based on Key,Value pairs, where for any Key there is only one Value.

 allows internal data structure look up times that are much faster than a regular dynamic array.

 also allows for the association of dissimilar data types in a way that you organize.

For example, you can map a set of integers to a set of Vectors, so that each integer is related to exactly one vector.

Or, as I provide you with in my plugin, you can **relate a String to an Actor**!

 means you can look up an Actor reference via a simple string input!

Or you can look up Vector data based on String data!

**The primary use of TMaps is for efficient lookup of data**, which dynamic arrays simply cannot do because there is no guarantee or assumption with dynamic arrays of anything like a key,value where each key has only 1 value.

**The rules of TMaps allow for efficient look up to speed up your game flow!**

Actor Component

My solution is component-based, which means you can have per-instance TMap data for your game’s actors!

You simply add my Victory TMap Component to any actor you want!

I used the My Character blueprint in my own tests!!!

You can use literally any actor you want, or make a new actor BP whose only role is to house the TMap Component


**Supported Types**

![aa1ade53f3ff0021436f1a76aac85d11992bbd7c.jpeg|1265x798](upload://ogOJATwlYRl6WYup8uRYQZ9AtGc.jpeg)

Supported TMap Functions


**Additional TMap Combinations**

If you find that you cannot use my existing set of TMap Combinations to fulfill your game's needs, let me know by posting in  thread and I can add additional TMaps to the component.

Per Instance

Remember that what I providing you with is a component-based solution, so you can add TMap data to as many actors in your game as you want, and have per-instance variations in the data contained therein!

Enjoy!

Hi - is a brilliant node (The image loader) that will make my life very much easier! I was using VaQuole to load images through a web address (to a local path) - is going to make my life so much easier!

Thanks, and thanks again for my socket plugin.

.

Hello ,
Great piece of work!
I do have some requests on the tmap comp.
could you also provide a node to only add unique KV pair?
could you add a node wher value is Transform?
and a node where value is struct?
and lastly a node where value is targetpoint?

Many tnx in advance.

Greetz,
G

Wow, Thanks for the Tmap nodes that will be so handy! :smiley:

Hee hee! You’re welcome !

" only add unique KV pair" ** KV pairs are unique already! That’s how a TMap works.**

“value is Transform?” What do you want the key to be?

“targetpoint?” you can do that already, target points are Actor, you can use FString,Actor

“where value is struct?” no I can’t do a generic struct like that in c++

Let me know how it goes Hyperloop!

Hello ,

They key for value Transform could be an int.
I asked about unique kv pair, because i saw in the image you posted a comment that when you add a kv pair where key already exists, the value will be overwritten.
So i meant an extra node where adding will fail if key already exist, instead of overwrite the value.
I thought targetpoint could be handy, so that casting/ extra checking isn’t neccesary.

Many tnx in advance.

Greetz,
G

's Blueprints TMap Solution!

I’ve now made a BP TMap solution!

TMap is a data structure that is not yet exposed to BP, but I’ve made a component-based solution for you so that you can use TMaps in BP!

My solution is component-based for per-instance variations!


**Supported Types**

![aa1ade53f3ff0021436f1a76aac85d11992bbd7c.jpeg|1265x798](upload://ogOJATwlYRl6WYup8uRYQZ9AtGc.jpeg)

Full details here!

**New Node

Save String Array To File**

The previous String File IO could only save a single line of text, even if you put "
" into your string

So I’ve made a new node that lets you save multiple lines of text to file.

Each FString of the array is on its own line in the file!

See pic!

Enjoy!

Download Link (6.5mb)

UE4 Wiki, Plugin Download Page

!

Are these compat with the preview 5 4.7? :>

I dont do Victory BP library upgrades until the official release, but Peter explained how you can upgrade to 4.7 early if you want to!

:slight_smile:

**New Release!

’ Suite of Custom Config Section BP Nodes!**

Using my new suite of BP nodes, you can create as many of your own custom config file sections as you want!

You can both create and retrieve ini variables with any name and fundamental type that you want!


**Supported Types:**

Bool
Int
Float
Rotator
Vector
Color
String

Why Use a Config Var?

Config vars have several benefits

  1. Persistent data storage without using a SaveGame struct or GameInstance, store simple quantities of data and player customization way! Data is stored between level loads and even after the current instance of the game is shut down.

So in way config vars have greater persistence than the GameInstance class!

  1. Player-Driven Customization, Players of your game can tweak the config vars that you make available for them on their hard disk, by editing the .ini file directly, just like AAA games! is the most significant advantage of using config files, and their real core purpose. :slight_smile:

  2. Simplicity, simpler to use than the BP SaveSystem (which is quite wonderful by the way), but not quite as powerful in that you can only store basic data types, not UObjects and Actors.

  3. **Organization, **you can create as many config header sections as you want using my nodes, organizing your custom settings way!


**Game.ini**

 of your custom created config vars and sections are stored in:

**Saved/Config/Windows/Game.ini**

Players can navigate to  location on their harddrive to edit your ini files just like any AAA game would allow!

Here's what my **Game.ini** file looks like after running some tests!



```


[DebugWindows]
ConsoleWidth=160
ConsoleHeight=4000
ConsoleX=-32000
ConsoleY=-32000

[/Script/UnrealEd.ProjectPackagingSettings]
BuildConfiguration=PPBC_Development
StagingDirectory=(Path="E:/MYPROJECT_DELETE")
FullRebuild=True
ForDistribution=False
UsePakFile=True
UseOBB_InAPK=False
CulturesToStage=en

[Victory]
BoolVar=True
VectorVar=X=1.000 Y=2.000 Z=9000.123
StrVar=Yay For Custom Config Vars!!!
FloatVar=234.000000


```



**Now you have fully featured ability to use config variables entirely in BP!**



PS: Here's example usage!

![Usage.jpg|1280x960](upload://vJ8VyiQCZXj6G59JXlBNDrMdZow.jpeg)

's Suite of Powerful UMG Nodes

Here are the 3 core BP nodes that I’ve been using to make of my complicated interacting UMG menus, including an in-game file browser and a menu that allows you to change the materials on any skeletal mesh, while in-game!

These nodes are available to you now!


**Get  Widgets of Class**

Allows you to not have to store references everywhere to your widgets, making it easy to interact with the Player Controller and My Character blueprints :) 

Also makes it easy to remove a loading screen after a level transition, without storing refs in Game Instance class

Remove Widgets Of Class

You can find and remove any widget any way, no matter where you are in BP! (here I am in the Level BP)

** Tip:**
If you make a general superclass for your widgets (Reparent to a blank UserWidget of your own making), you can clear your entire UI system from the viewport with a single call to RemoveAllWidgetsOfClass, supplying the class that is your super class for your user widgets!

So lets say you have 3 user widgets that you made, make a 4th that is blank, reparent your existing 3 to your new empty 4th widget (“WidgetMaster” for example).

Now you can just call RemoveAllWidgetsOfClass on your new 4th widget, WidgetMaster, and 3 of your existing widgets will be removed automatically from the viewport!


**Is Widget Of Class In Viewport**

Take action based on the dynamic lookup of whether a certain widget is currently visible!

No need to store refs or bools anywhere, just do a dynamic look up that is lightning fast!

♥

Hi ,
Thank you for your answer ! sorry I took my to respond and i did a lot of tests.
I understand your explication about power, but English is not my native language, and i will try to explain better what i want :slight_smile:

In fact, I have updated my blueprint from v4.6.1 to current version and I discover a wonderful parameter in the Physics category : the “Override Mass” parameter.
It’s exactly what I want !!! but is it possible for you to create a blueprint node to be able to :

  • modify the “Mass in Kg” value
    and optionnaly :
  • set true/false for “Override Mass”
  • be able to modify others parameters like “Center of Mass offset”

I hope it’s a better explication !
Let me know if it’s possible :wink:
Thanks a lot !

Does anyone know if would work for an iOS game? I’m trying to find a way to use large string arrays with out having to add code to the project.

**Load Texture 2D From File!

JPG, PNG, BMP, ICO, EXR, and ICNS are Supported File Formats !**

With node you can load a Texture 2D from a file during runtime!

I output for you the width and height of the loaded image!

Now you can easily create Texture 2D’s from image files in Blueprints, during runtime!

Special Note!

Sweeney liked node!

Enjoy!

PS: Make sure to include the file extension when you use node!


**C++ Code For You**

Here is the core C++ function involved, entire source is in the download! I wrote my own Enum for the file formats.



```


UTexture2D* UVictoryBPFunctionLibrary::Victory_LoadTexture2D_FromFile(const FString& FullFilePath,EJoyImageFormats ImageFormat, bool& IsValid,int32& Width, int32& Height)
{
	IsValid = false;
	UTexture2D* LoadedT2D = NULL;
	
	IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
	
	IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat));
 
	//Load From File
	TArray<uint8> RawFileData;
	if (!FFileHelper::LoadFileToArray(RawFileData, * FullFilePath)) 
	{
		return NULL;
	}
	
	  
	//Create T2D!
	if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))
	{ 
		const TArray<uint8>* UncompressedBGRA = NULL;
		if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
		{
			LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);
			
			//Valid?
			if (!LoadedT2D) 
			{
				return NULL;
			}
			
			//Out!
			Width = ImageWrapper->GetWidth();
			Height = ImageWrapper->GetHeight();
			 
			//Copy!
			void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
			FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());
			LoadedT2D->PlatformData->Mips[0].BulkData.Unlock();

			//Update!
			LoadedT2D->UpdateResource();
		}
	}
	 
	// Success!
	IsValid = true;
	return LoadedT2D;
}


```



Download Link (6.5mb)

UE4 Wiki, Plugin Download Page

Hi again ! I asked what you told me in the answer hub. Here it is: Change game's culture (language) during runtime (without restart) - Community & Industry Discussion - Epic Developer Community Forums

I hope someone solves because well… I’ve been messing around with your binding Bps and ohh boy! They work soo good! Here is a picture of my Menu. But I have one question. What if a input have 2 or more bindings asigned? For Example. SHOOT; Left Mouse Button and Gamepad Left Trigger. Next week I’m going to buy a compatible gamepad with ue4 and try it out but I would like to know your point about it.

About my experience with the bindings bp: The menu you see below is not a widget hud menu. They are indeed static meshes and the mouse is not a mouse, but another static mesh projected on a plane. Why? Because VR, that’s why. In short, I had to cheat the menu functionality. What does that means? well, I used the bindings with UE4 savegames for the strings and had no problem with them and also the info from the bindings BPs can be easily used anywhere.

In the other hand, I hope Epic Games will put more working on the localization management. I don’t remember where, but they said is not their main area because big companies use their own localization systems and they haven’t asked them to work on that but… what about the indies? I know a lot of developers don’t pay too much atention to localization but in a sales perspective… it is HUUUUGE.

Anyways, thanks for the awesome work :wink:

~~

**2 Two Nodes For You

Create UObject

Create Primitive Component, Added to Scene at Location!**

These two nodes let you create UObjects at runtime!

I recently needed to create UObjects in Blueprints for a special inventory system! Please note you can use my node to create UObjects that you make Blueprintable via C++ !

Please note you absolutely must save off the return value to a variable or UE4 will Garbage Collect your new UObject within a short!

Please especially note that if you create a Primitive Component, I actually add it to the world for you so it is visible and has collision!


**C++ Code For You**

Here's the code!



```


UObject* UVictoryBPFunctionLibrary::**CreateObject**(UObject* WorldContextObject,UClass* TheObjectClass, FName Name)
{
	if(!TheObjectClass) return NULL;
	//~~~~~~~~~~~~~~~~~
	
	//using a context  to get the world!
    UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return NULL;
	//~~~~~~~~~~~
	 
	return StaticConstructObject( TheObjectClass, World, Name);
}


```





```


UPrimitiveComponent* UVictoryBPFunctionLibrary::**CreatePrimitiveComponent**(
	UObject* WorldContextObject, 
	TSubclassOf<UPrimitiveComponent> CompClass, 
	FName Name,
	FVector Location, 
	FRotator Rotation
){
	if(!CompClass) return NULL;
	//~~~~~~~~~~~~~~~~~
	
	//using a context  to get the world!
    UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return NULL;
	//~~~~~~~~~~~
	 
	UPrimitiveComponent* NewComp = ConstructObject<UPrimitiveComponent>( CompClass, World, Name);
	if(!NewComp) return NULL;
	//~~~~~~~~~~~~~
	 
	NewComp->SetWorldLocation(Location);
	NewComp->SetWorldRotation(Rotation);
	NewComp->RegisterComponentWithWorld(World);
	
	return NewComp;
}


```



♥