Download

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

I just upgraded to the 4.8 source version but now whenever I package the game, it says VictoryPlugin failed to load because the module could not be found. I am using the latest version of the plugin and this never happened before in the 4.7.6 source version. Any help would be appreciated.

Hi,
how can I use Rama’s plugin in C++ code?

Are you sure you get it when you pack and not when you build(compile) the project in visual studio?

Add “VictoryBPLibrary” to the modules array in your projectName.Build.cs inside your source folder
(Example: C:\ProjectName\Source\ProjectName.Build.cs).
it Supposed to look something like this:


        PublicDependencyModuleNames.AddRange(new string] { "Core", "CoreUObject", "Engine", "InputCore", "VictoryBPLibrary", "UMG", "Slate", "SlateCore" ,"AIModule"});


And then when you want to use it, just add this header on the top of your cpp file:


#include "MyBlueprintFunctionLibrary.h"

Yes as of 4.8 they have added support for you to be able to add both patch content as well as DLC content! The point that is fuzzy for me is whether people wanting to add content will need the entire original project, which means the original Dev needs to be willing to share the entirety of their project (which doesnt seem likely for a commerical game).

Epic had mentioned “feature packs” in an earlier release, I wonder if feature packs can more easily be used in any project as opposed to patchs/DLC that are indended to extend some original project.

The question is whether feature packs can be used by a packaged game!

Very interesting request, I’ll have to work on that!

@Sahkan,

Thanks for helping out with question answering!

:slight_smile:

Rama

Two AI Nodes For You

**Get Closest Actor Of Class In Radius of Location

Get Closest Actor of Class In Radius of Actor**

These nodes are great for use with AI calculations!


**Latest plugin download on the UE4 Wiki: (7.91 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

Live as of May 1st, 2015

Dear Community,

I have the May Celebration node release for you today!

Community member TK-Master has gifted us with over 30 new BP nodes for Math, Physics, and 3D Geometry calculations!

I highlighted my personal favorite nodes in green!


**UMG Anchor Conversion**
Please note you can now convert UMG Anchor coordinates to other coordinate spaces!

Snap To 3D Grid
You can use the Snap Node to snap any 3D space Vector to a grid size of your choosing!

So you could use this node to to regulate the position of an in-game 3D positioning tool (like for RTS Games!) to a grid of your choosing, while still accounting for rolling hills of landscapes and big vertical differences!


**Convert Physics Linear Velocity**

Ever wonder how fast in **Km/hr** an in-game Unreal Engine physics ball was hurling through the air?

Ever want to know the **meters/second** speed of a falling physics-simulating box?

Or how about the **miles/hour** of your UE4 Physics Vehicle?

Well thanks to TK-Master's new node you can now easily convert the value that you get from GetPhysicsLinearVelocity of any physics-simulating body to a speed in the units of your choosing!

Here's is TK-Master's current list of available conversions!



```


/* Speed Units Enum. */
UENUM()
enum ESpeedUnit
{
	/* Centimeter / second (cm/s). This is default unreal velocity unit. */
	CentimeterPerSecond,

	/* Foot / second (ft/s). */
	FootPerSecond,

	/* Meter / second (m/s). */
	MeterPerSecond,

	/* Meter / minute (m/min). */
	MeterPerMinute,

	/* Kilometer / second (km/s). */
	KilometerPerSecond,

	/* Kilometer / minute (km/min). */
	KilometerPerMinute,

	/*Kilometer / hour (km/h). */
	KilometerPerHour,

	/* Mile / hour (mph). */
	MilePerHour,

	/* Knot (kn). Nautical mile per hour. */
	Knot,

	/* Mach (speed of sound) (M) at standard atm. */
	Mach,

	/* Speed of light. */
	SpeedOfLight,

	/* Yard / second. */
	YardPerSecond
};


```



BP Nodes for 3D Geometric Analysis!

Here are pics showing the complete list of the new 3D Geometry Nodes!

To see the full list, get the latest version of my plugin and type in “TK” and you will see all the 30+ new nodes available to you!

3347099af001a575814d73a9d38845c3ad7ceef1.jpeg


**Thank You!**

**Thank you TK-Master for your contribution!**

These nodes are going to be extremely useful for a lot of people !

**Latest plugin download on the UE4 Wiki: (7.91 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

Get All Bones Below Bone

(6/23/15)

This node returns all the bones that are below the given bone in the Skeleton bone hierarchy!


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

I used a recursive function to traverse the skeleton tree and get all child bones, starting from the Starting Bone!



```


static int32 **GetChildBones**(const FReferenceSkeleton& ReferenceSkeleton, int32 ParentBoneIndex, TArray<int32> & Children)
{ 
	Children.Empty();

	const int32 NumBones = ReferenceSkeleton.GetNum();
	for(int32 ChildIndex=ParentBoneIndex+1; ChildIndex<NumBones; ChildIndex++)
	{
		if ( ParentBoneIndex == ReferenceSkeleton.GetParentIndex(ChildIndex) )
		{
			Children.Add(ChildIndex);
		}
	}

	return Children.Num();
}
static void **GetChildBoneNames_Recursive**(USkeletalMeshComponent* SkeletalMeshComp, int32 ParentBoneIndex, TArray<FName>& ChildBoneNames)
{	
	TArray<int32> BoneIndicies;  
	GetChildBones(SkeletalMeshComp->SkeletalMesh->RefSkeleton, ParentBoneIndex, BoneIndicies);
	   
	if(BoneIndicies.Num() < 1)
	{
		//Stops the recursive skeleton search
		return;
	}
	 
	for(const int32& BoneIndex : BoneIndicies)
	{
		FName ChildBoneName = SkeletalMeshComp->GetBoneName(BoneIndex);
		ChildBoneNames.Add(ChildBoneName);
		 
		//Recursion
		GetChildBoneNames_Recursive(SkeletalMeshComp, BoneIndex,ChildBoneNames);
	}
}

int32 UVictoryBPFunctionLibrary::**GetAllBoneNamesBelowBone**( USkeletalMeshComponent* SkeletalMeshComp, FName StartingBoneName,  TArray<FName>& BoneNames )
{
	BoneNames.Empty();
	
	if(!SkeletalMeshComp || !SkeletalMeshComp->SkeletalMesh)
	{
		return -1;
		//~~~~
	}
	 
	int32 StartingBoneIndex = SkeletalMeshComp->GetBoneIndex(StartingBoneName);
	 
	//Recursive
	GetChildBoneNames_Recursive(SkeletalMeshComp, StartingBoneIndex, BoneNames);
	     
	return BoneNames.Num();
}


```



**Latest plugin download on the UE4 Wiki: (7.92 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

I had included a function to read console variables on my post with the math functions :stuck_out_tongue:

This would allow you to read the current value of sg.ShadowQuality for example, is that what you meant John Alcatraz?

I don’t know if it works in a packaged game though, a better method might be required.

Thanks for that TK-Master!

I will see about integrating those at my next opportunity

:slight_smile:

Rama

This is perfect for editing config files now. :slight_smile:

This is brilliant!
Thanks for all the hard work.

Should this work with http?

None of my URLs for PNGs work, it only works with local file paths, even though a link in this thread through claims it does:
https://answers.unrealengine.com/questions/75929/is-it-possible-to-load-bitmap-or-jpg-files-at-runt.html

Hi Rama, this is great! Any chance of unlocking this for the EQ settings in a Sound Mix as well? :slight_smile: would be perfect for dynamic audio filtering through BP.

Hello, i would like to ask you, how did you attach the weapon to the ragdoll’s hand without having it jitter/lag behind it? Because when i try to attach a static mesh to a skeletal mesh’s bone socket with physics enabled, the static mesh wobbles around like it’s not properly attached or having some delay, i’ve been searching everywhere for a solution for this for days, but i just can’t find anything on google or anywhere, please you’re my only hope! ;_;

Hey Rama, I’m trying to use the server travel node to do a async map change where a UMG widget is playing throughout the load.
The level loads fine, but my widget stops playing during the load every time (then resumes when the new level is done loading)

Is there some trick to getting this to work properly? It seemed really straightforward but I’m having no luck.

Thanks, I’m loving the plugin btw, so much great stuff!

Great to hear from you Isaac!

Can you explain / show a pic of exactly which settings you would like exposed to runtime BP modification?

:slight_smile:

I wil have to do a thorough test of the state of things in 4.8 and then get back to you on this! I am glad you are enjoying my plugin!

:slight_smile:

Http involves internet connection which necessarily always involves async calculations (have to wait to receive the data, can’t proceed instantly). This means that all things involving live internet connection have to be done in a special class or actor component, and can’t be a static node in my BP library.

It is a very nice goal though, to be able to download image from a website, and I shall work on it when I can :slight_smile:

[FONT=Comic Sans MS]Welcome to the forums Staus!

Are you saying the weapon jitters only when the character is actively ragdolling, or the weapon jitters even when running around prior to ragdoll ?


Have fun today everyone!

:)

Rama

It’s only during ragdoll, when the skeletal mesh is using animations, everything works perfectly fine, the static mesh is perfectly attached to the bone socket. :confused:
P.S. Impressed to see that you still reply to comments after 960+ replies ^^

BTW I’m on 4.7 :slight_smile:

Hee hee!

I can confirm having problems with a static mesh attached to a socket wobbling after initiating ragdoll. To be clear this is not a drag or a delay in location update, but a severe jittery wobble/bouncing all over the place.

I’d recommend you do the following:

  1. make a 3rd person BP only project, with no sample content (save almost a gb of extra stuff)

  2. bring in your weapon asset

  3. set up the attachment the way you like, on begin play in character BP

  4. activate ragdoll on key press

  5. zip this project and submit to Epic on the answerhub, demonstrating the problem

Your zipped project should only be a few mb as long as you dont include sample content!

Once you do this I can comment in your answerhub post.


**My Repro**

I used a resized cube made into a bar and attached to third person character skeleton on begin play using two methos (1) weapon as actor, (2) weapon as component of the character.

In both cases there was severe wobbling/jittering/skipping after activating ragdoll and once the character hit the ground

(3) I made sure collision was turned off for the weapon mesh.

♥

Rama

eb652c750e94a53fb78dc80487e1e47c03a503ce.jpeg

Live as of 4/27/15

Dear Community,

I’ve created a new node that allows you to save a Linear Color array to disk as a PNG image!

So you can draw transparency using the Alpha channel of the Linear Color!

For those who have not used Linear Color much, it has 4 floats (R G B A) and so saving to PNG and supporting transparency is easy!


**Bonus ~ I create target directory for you!**

My node will create the directory you are trying to save to if it does not already exist!

This can be very helpful if you delete your whole generated image folder at once!

Absolute File Paths

This node receives absolute file paths, you can use my Path nodes to get various absolute paths that are relative to your project directory!

Victory BP Library Path Nodes (link inside this thread)


**Error String**

I provide you with an Error string to help narrow down the reason the node returned false, if it does! 

Even more debugging info for you!

**The most common error will be that your array size does not equal Width x Height** that you inputted into the node.

Solution:

**You can avoid this by using variables for Width and Height** and multiplying them together and using that as the max for the for loop where you initialize the image to black (see picture above)!

If you use my method, make sure the for loop first index is 1 not 0 !

Post Your BP-Generated Images!

Feel free to post images you create using this node!


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

Here's the entire C++ code for my node! 

If you use it please credit me somewhere appropriate!



```


bool UVictoryBPFunctionLibrary::Victory_SavePixels(const FString& FullFilePath,int32 Width, int32 Height, const TArray<FLinearColor>& ImagePixels, FString& ErrorString)
{
	if(FullFilePath.Len() < 1) 
	{
		ErrorString = "No file path";
		return false;
	}
	//~~~~~~~~~~~~~~~~~
	
	//Ensure target directory exists, 
	//		_or can be created!_ <3 Rama
	FString NewAbsoluteFolderPath = FPaths::GetPath(FullFilePath);
	FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath);
	if(!VCreateDirectory(NewAbsoluteFolderPath)) 
	{
		ErrorString = "Folder could not be created, check read/write permissions~ " + NewAbsoluteFolderPath;
		return false;
	}
	
	//Create FColor version
	TArray<FColor> ColorArray;
	for(const FLinearColor& Each : ImagePixels)
	{
		ColorArray.Add(Each);
	}
	 
	if(ColorArray.Num() != Width * Height) 
	{
		ErrorString = "Error ~ height x width is not equal to the total pixel array length!";
		return false;
	}
	  
	//Remove any supplied file extension and/or add accurate one
	FString FinalFilename = FPaths::GetBaseFilename(FullFilePath, false) + ".png";  //false = dont remove path

	//~~~
	
	TArray<uint8> CompressedPNG;
	FImageUtils::CompressImageArray( 
		Width, 
		Height, 
		ColorArray, 
		CompressedPNG
	);
	    
	ErrorString = "Success! or if returning false, the saving of file to disk did not succeed for File IO reasons";
	return FFileHelper::SaveArrayToFile(CompressedPNG, *FinalFilename);
}


```



**Latest plugin download on the UE4 Wiki: (7.92 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

Oh I’ve got an awesome idea for what you might be able to use that node + another one of your nodes for.