Download

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

Hee hee! Seems as though you figured me out!

Though more than one of us came from the Future!

If you are reading this, then you likely came from the Future too!!

Rama

Aww thanks Hyperloop!

I’m gonna think about that!

In the meantime, anyone can send me a donation via my lighting fitness website!


**Victory BP Library Donations Page**

If my plugin has benefitted you and you'd like to send me a donation, you can do so via the link below:

**Victory BP Library Donations**
http://lightningfitness.org/donate/

:)

Rama

Hey Rama,
is there a way to use relative paths instead of an absolute path at the “Load String Array From File” function?
I can’t get it to work.

Thank you!

Edit: I should read the other posts :smiley: thanks.

Edit2: Could you make more Array Load and Save file functions? Like, for floats?

I will add that to my list :slight_smile:

Have fun today!

:slight_smile:

Rama

Project File Paths For Saving and Loading in BP

0f36d3a4f869f97b5c23aa7135946654a25f7c74.jpeg

Victory Absolute Paths!
Live as of March 3rd 2015 build

Get the File Path to your project .exe, your project root directory, and more!

These paths are dynamically updated even if you move the entire project to a new location on your computer!

All these nodes are fully compatible with packaged builds and return absolute paths!

These nodes also work in Development/Editor builds!


**More Power For You in BP**

Now you can easily create your own folders/files, relative to the project root directory or your project's .exe!

Please note that in editor builds, the .exe returns your UE4Editor.exe location, but in packaged games it returns your game's .exe

![ca6e47c3de4ce0fc029accc855a97ab3b66c7f0f.jpeg|1260x774](upload://sSMIRl140vUkZisnTkYGaDdAz4X.jpeg)

Recommendation:

I recommend using the Project Game directory for most of your relative path needs! This works the same in Editor and packaged builds!

You can also get your Saved and Logs folders for your project in both packaged and editor builds!


**Download**

**Latest plugin download on the UE4 Wiki: (7.99 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

Get Your IP Address From In-Game via BP Node

BP Node to Get Your Computer’s IP Address!

Dear Community,

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

This 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 this node involves an HTTP request I can’t make it a static library node, so I instead made a VictoryPC class that contains only this 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 this VictoryPC class will show up!


**Celebration!**

Yay!

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

Enjoy!

Rama

Pic

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

2902549c08d489d31bb43f8a7049793370d4801e.jpeg


**C++ Source Code For You**

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



```


/** This node relies on http://api.ipify.org, so if this node ever stops working, check out http://api.ipify.org.  Returns false if the operation could not occur because HTTP module was not loaded or unable to process request. */
	UFUNCTION(BlueprintCallable, Category="Victory PC")
	bool VictoryPC_GetMyIP_SendRequest();
	
	/** Implement this event to receive your IP once the request is processed! This requires that your computer has a live internet connection */
	UFUNCTION(BlueprintImplementableEvent, Category = "Victory PC", meta = (DisplayName = "Victory PC ~ GetMyIP ~ Data Received!"))
	void VictoryPC_GetMyIP_DataReceived(const FString& YourIP);
	
	void HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);


```





```


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(this, &AVictoryPC::HTTPOnResponseReceived);
	if (!Request->ProcessRequest())
	{
		return false;
	}
	  
	return true;
}
	
void AVictoryPC::HTTPOnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful)
{
	this->VictoryPC_GetMyIP_DataReceived(Response->GetContentAsString());
}
 


```



**Latest plugin download on the UE4 Wiki: (8 mb) **


**Victory Plugin on Media Fire**

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

https://www.mediafire.com/?g6uf9kt5ueb2upj

Enjoy!

:)

Rama

And what about snapping blueprint actors in the level, since in the current version you can only snap static meshes right?

Hi @Rama,

Thanks for the plugin!

I had to make a fix to get it building under Linux - the diff follows.

Have you considered putting your code on Github so people can send you pull requests for fixes/additions that you can easily decide to accept or not? If you are wlling, I offer to help set it up for you.



diff --git a/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp b/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
index 014cab1..6fe8e0e 100644
--- a/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
+++ b/GameProject/Plugins/VictoryPlugin/Source/VictoryBPLibrary/Private/VictoryBPFunctionLibrary.cpp
@@ -2711,13 +2711,13 @@ AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestSocket(

        //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        //Check All Bones Locations
-       for (int32 Itr = 0; Itr < SocketNames.Num(); Itr++ )
+       for (int32 SItr = 0; SItr < SocketNames.Num(); SItr++ )
        {
                //Is this a Bone not a socket?
-               if(SocketNames[Itr].Type == EComponentSocketType::Bone) continue;
+               if(SocketNames[SItr].Type == EComponentSocketType::Bone) continue;
                //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

-               CurLoc = AsCharacter->Mesh->GetSocketLocation(SocketNames[Itr].Name);
+               CurLoc = AsCharacter->Mesh->GetSocketLocation(SocketNames[SItr].Name);

                //Dist
                CurDist = FVector::Dist(OutImpactPoint, CurLoc);
@@ -2725,7 +2725,7 @@ AActor* UVictoryBPFunctionLibrary::Traces__CharacterMeshTrace___ClosestSocket(
                //Min
                if (ClosestDistance < 0 || ClosestDistance >= CurDist)
                {
-                       ClosestVibe = Itr;
+                       ClosestVibe = SItr;
                        ClosestDistance = CurDist;
                }
        }



Now I need to see how to deal with the Dedicated Server build failing because VictoryBPLibrary depends on UElibPNG - the build error:



Building DescentServer...
Using clang version '3.5.0' (string), 3 (major), 5 (minor), 0 (patch)
Linux dedicated server is made to depend on UElibPNG. We want to avoid this, please correct module dependencies.
ERROR: Exception thrown while processing dependent modules of VictoryBPLibrary
Exception thrown while processing dependent modules of ImageWrapper
ERROR: Unable to instantiate instance of 'UElibPNG' object type from compiled assembly 'DescentServerModuleRules'.  Unreal Build Tool creates an instance of your module's 'Rules' object in order to find out about your module's requirements.  The CLR exception details may provide more information:  System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> ERROR: Linux dedicated server is made to depend on UElibPNG. We want to avoid this, please correct module dependencies.


Edit: I had to remove ImageWrapper as a dependency and ifdef out all code using it in the plugin to get DedicatedServer to build.

That would be grand yes, adding it to my to do list :slight_smile:

Dear Stormwind,

Thanks for your fixes and taking the time to share them!

Will PM you about github possibilities

Thanks again!

:slight_smile:

Rama

Load and Save Custom Game.ini Config File Variable Data!

Rama’ 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 this way! Data is stored between level loads and even after the current instance of the game is shut down.

So in this 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! This 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 all your custom settings this way!


**Game.ini**

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

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

Players can navigate to this 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!**

Example Usage

Here’s example usage!


**Latest plugin download on the UE4 Wiki: (8 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

That’s awesome thank you Rama! Using this last node would be possible for me to save and reload any character information on a text file too, like an easy to edit save file?
For example character inventory, points/money, objects on a “house” on a savegame.sav (or txt, of course the extension doesn’t matter).

Thank you again!

I’m a little bit late with this but I just found out about 4.8’s procedural mesh component. I successfully imported and converted an obj file to an ingame mesh using your plugin but it took some time to create the mesh. Is there any way a bp node could be added that saves the imported mesh for later use? Maybe as an .uasset file?

Edit: Nevermind, I tried the obj import again and there were more problems than achievements.

You’re welcome!

You could use the game.ini config file for this purpose, if you do want people to be able to go in and edit the values!

You can’t save pointers though, only basic types, so you’d need to do a Switch on String based on house object name to then give those objects back to the player after loading from file.

:slight_smile:

Rama

AI Navigation ~ Move To With Filter, Create Custom Pathing Using Nav Modifiers

Dear Community,

I’ve created a video and a sample BP-Only project (+ my Victory Plugin) that shows you how to use Nav Modifier Volumes and Navigation Query Filters to create custom pathing for your units!


**Use Case: Electric Currents and 2 Types of Characters**

In my example, I have two types of units.

The **blue unit** is immune to electricity, and does not need to path around electric currents.

The **red unit** bids us all a fond farewell if it passes thruogh an electric current.

So in this case I can't just block of areas that have electric currents completely from the nav mesh, or else the blue unit cannot pass through freely as it should be able to, taking a shortcut as a result.

**This is a case where Nav Modifiers and Query Filters really shine!**

I only want to **filter out** certain sections of the nav mesh for the red unit, while still allowing the blue unit to pass through those areas freely.

Custom BP Node

In order to actually be able to use query filters and nav modifiers in a BP only project effectively, I made a custom BP node, AI Move To With Filter.

This node allows me to tell the unit to move to a certain location, while using a query filter, only in Blueprints!


**Changes Nav Behavior Filters  ~ Per Move ~  If You Want To!**

Using my Victory BP Library node, you can actually have a unit changes its navigation filter per move if you want to!

This enables you to have the AI respond to dynamic level conditions (like if the electricity in my example gets turned off), or if you just want the AI to confuse the player by randomly switching its pathing preferences!

Project Download Link

Visit my Community Content Thread for full details and updates:


**Latest plugin download on the UE4 Wiki: (8 mb) **
https://wiki.unrealengine.com/File:VictoryPlugin.zip

Victory Plugin on Media Fire

If your browser is not updating the Wiki download page to the most recent version, you can use my alternative Media Fire download link!

Please note clicking this link will not start a download instantly, it will just take you to the Media Fire file description.

Enjoy!

:slight_smile:

Rama

Very useful! Thanks a lot for sharing, Rama!

Hi Rama,

This is really awesome!!! Thank you so much for this updated plugin. I can now propagate fire to skeletal meshes and characters.

I am gonna try incorporate this into my current propagation script.

Cheers,
CatchPhyre

Hey Rama,

I noticed minor mistake while using your rotation/vector conversion nodes:
2015-08-09_15-07-33.png
The tooltips say opposite of what they do!

Edit: Also I just found out that there’s a node called RotationFromXVector that does the same thing, but yours is named a lot more clearly/easier to understand.

Yay! Great to hear from you Jacky!

Ahh thanks for pointing that out, I’ve fixed the comments in my local version, and it will be in my next update!

:slight_smile:

You’re welcome, I hope my animated vertices of skeletal meshes BP node takes your thesis research to the next level!

:slight_smile:

Rama

Get a Float as a String, With Precision and Optional Leading 0 !

8972b9ac2a0bda258dccf2e561750858aa4c6454.jpeg

Dear Community,

I’ve updated my Get Float As String With Precision node to

  1. Be pure (no exec chain)

  2. Utilize Epic’s FText C++ code to leverage all of their hard work on float decimal precision.

  3. Add bool to make the leading 0 optional, so 0.5 could be shown as 0.5 or .5 depending on your preferences!

Yay!


**My C++ Code For You!**

Here's how it works in C++ !



```


void UVictoryBPFunctionLibrary::StringConversion__GetFloatAsStringWithPrecision(float TheFloat, FString & FloatString, uint8 Precision, bool IncludeLeadingZero)
{ 
	FNumberFormattingOptions NumberFormat;					//Text.h
	NumberFormat.MinimumIntegralDigits = **(IncludeLeadingZero) ? 1 : 0;**
	NumberFormat.MaximumIntegralDigits = 10000;
	NumberFormat.MinimumFractionalDigits = **Precision;**
	NumberFormat.MaximumFractionalDigits = **Precision; **
	FloatString = FText::AsNumber(**TheFloat**, &NumberFormat).ToString();
}


```



**Latest plugin download is here: (about 8 mb) **

Enjoy!

:slight_smile:

Rama

Ragarding the ability to save the Color Array to a Texture2D:

Have you get anything to work?