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

Hee heee!

You’re welcome!

Great to hear from you!

:slight_smile:


**Video of My Runtime Key Redbinding Project For you
**

 video demonstrates how my Runtime Rebindable Key System does actually have a scrolling !

You can have infinite key bindings in your list!

I also demonstrate how easy and fast it is to add new keybindings usig Project Settings -> Input!

And!

**Remember that I am giving you  whole project for your own use!**

=Hj969IfWhVc


**Project Link**
https://forums.unrealengine.com/showthread.php?51449-Full-Project--s-UMG-Rebindable-Key-System-Rebind-keys-at-Runtime!&p=176136&viewfull=1#post176136

That sounds most awesome! Especially now that I’m thinking I should merge my meshes so they are as few as possible for mobile performance (although I hope I’ll only have about 50 meshes of about 20 polys each so I could probably take that hit), but yeah - with fewer, more complex, meshes my problem will be bigger. And I’d like to have accurate collision hits either way. :slight_smile:

I’ve posted a pic of my problem for clarity in my thread, don’t want to hijack jampacked with goodness thread:

https://forums.unrealengine.com/showthread.php?50949-Can-t-get-hit-event-to-fire

The thread contains another link to a thread that seems to say the same - overlapping non-physics actors don’t respond to hit events, and checking ‘Simulation Generates Hit Events’ doesn’t do anything unless the actor is a physics actor…

You made me hopeful is doable again! :smiley:

Pic and Testing For You

Dear Rumble,

I succeeded in doing what you appear to be trying to do using a new Third Person template project / My Character BP and the setup I show in picture below!

I am easily and accurately getting hit event locations/normals.

Do try my repro yourself and see what is going on in your specific case :slight_smile:

**Set Volume of Any Sound Class

Any From Anywhere!**

is a node that Hourences requested I make!

You can use node to set the volume of any sound class, any, from anywhere!

I am aware of the option of using a sound mixer, however it is not as dynamic because you have to use fixed sound increments.

**My node allows you to offer people an audio slider that is a continuous float value range based only on the slider increments.
**
Enjoy!

Wiki Download Page

Hey thanks ! I’ll try that later on today - I have a little nagging feeling coming from deep down my memory banks that I got a character class to do correctly without physics, same as your case is, but a non-physics pawn class for some reason doesn’t function the same as a non-physics character class when hitting non-physics actors.

I will definitely double check that though. I do hope I’m wrong. Which happens. :slight_smile:

Big thanks for looking into ! It’s really helpful when someone experienced confirms you’re right, says you’re wrong or just puts you in a better direction. Figuring out little gotchas when you start out can eat up so much of dev…

You should never be using the Pawn class!

You are not getting what you paid for in UE4 if you do that!

There is a positively huuuge amount of code that is specific to characters, especially in regards to networking!

:slight_smile:

New Sound Node For you

Keep in mind you can now set the volume of any sound class to any value you want, anywhere in BP, any!

:slight_smile:

You’re probably right, and just changing my class solved the problem. I really thought they should behave the same when it came to collisions as the character class seemed to just add additional code for movement, and since my movement has got nothing to do with an actual character (jumping around etc) I was under the impression I should use pawn. Guess that recommendation came from using less code… not sure.

But anyway, I have some reworking to do now which is great! :slight_smile: my pawn motions seem to work just fine, the overlaps don’t work now although I’m sure I’ll figure that out soonish. :slight_smile: Thanks for kicking me down the right path!!

Awesomes.

Thanks again.

's BP Multiplayer Game Mode Solution

**'s Multiplayer Game Mode Solution

Find Player Start

Choose Player Start

Can Player Restart

These core Multiplayer functions are now fully implementable/overridable in Blueprints!**

I have found a solution for the of implementing FindPlayerStart, ChoosePlayerStart, and CanPlayerRestart in Blueprints!

And I’ve tested it as working!

**You can now implement core network coding of choosing player starts entirely in Blueprints!
**


**How To Use**

In my picture below I show how to use my Game Mode overrides!

1. **First make a new BP and select my VictoryGameMode class** which comes with my Victory BP Library (make sure you have the latest download https://wiki.unrealengine.com/File:VictoryPlugin.zip)

If you already have a Game Mode BP, choose File -> Reparent and use my Victory Game Mode BP


2. Make sure you are using my Victory Game Mode in your **World Settings**!

3. Setup the Victory Game Mode BP the same as my picture below!

4. Celebrate! You can now implement core multiplayer logic in Blueprints!

*(right click -> new tab to see larger pic)*
![VictoryGameMode.jpg|1280x960](upload://1psgB0eeaCt9i59C4zf1sNwPmLm.jpeg)

CPP Override and CPP Override Var

Please note the notation I am using, any variable that has CPPOverride Var in its name is used only with the corresponding event. is how I enable you to implement core multiplayer coding logic in Blueprints!


**Simple Data Types**

Please note that for the function that is designed to return a boolean value, CanPlayerRestart, you must pass the boolean and also a special variable, **CPPOverride SelfReference**,  is how you tell the CPP that you are implementing the Game Mode function in BP!

Non Destructive Solution

My solution is entirely optional and if you do not implement the event in Blueprints, and your programmer does it in C++, my solution will not interfere at with your existing code base!


**Log Message**

If you do implement my solution in BP, I am printing log information to indicate , so you/your programmer knows you are using a BP override and any C++ code will not be run.

C++ Code

Here is my C++ code for FindPlayerStart which shows how I worked around the of overriding FindPlayerStart via Blueprints!

Again I’ve tested as entirely working in PIE and commandline games!

.h



//Find Player Start
public:
	/** Use  var inside the body of CPP Override ~ Find Player Start event to override the C++ functionality! */
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Victory Game Mode")
	AActor* CPPOverrideVar_FindPlayerStart;
	
	/** 
	 * Use CPPOverrideVar_FindPlayerStart inside of  event to implement FindPlayerStart in BP ! <3 
	 *
	 * Return the 'best' player start for  player to start from.
	 * @param Player - is the AController for whom we are choosing a playerstart
	 * @param IncomingName - specifies the tag of a Playerstart to use
	 * @returns Actor chosen as player start (usually a PlayerStart)
	 */
	UFUNCTION(BlueprintImplementableEvent, meta=(FriendlyName = "CPP Override ~ Find Player Start"))
	virtual void CPPOverride_FindPlayerStart();

	virtual class AActor* FindPlayerStart( AController* Player, const FString& IncomingName = TEXT("") ) override;


.cpp



//Find
AActor* AVictoryGameMode::FindPlayerStart( AController* Player, const FString& IncomingName )
{
	//Clear any previous to indicate whether BP did an override
	CPPOverrideVar_FindPlayerStart = NULL;
	
	//=======================
	//BP Hook by 
	->CPPOverride_FindPlayerStart();
	//=======================
	
	if(CPPOverrideVar_FindPlayerStart) //Did BP programmer set the var?
	{ 
		//Indicate that the BP override was found and is being used.
		UE_LOG(VictoryGameModeLog, Log, TEXT("

"));
		UE_LOG(VictoryGameModeLog, Log, TEXT("FindPlayerStart: CPP override found in %s and used instead of C++ implementation"), *GetName());
		UE_LOG(VictoryGameModeLog, Log, TEXT("

"));

		return CPPOverrideVar_FindPlayerStart;
	} 
	 
	//Default C++ Implementation
	return Super::FindPlayerStart(Player,IncomingName);
}



**Enjoy!**

**Full Sample Project For You

Dynamically Re-Bindable Key Menu in UMG!**

Dear Community,

I am giving you a full sample project as a download (8mb) where I’ve created a fully functional UMG Key Rebinding System!

You can click on the name of any key and then simply enter a new one on the keyboard/gamepad (just pressing the button itself that you want to be the new binding!

And I do track ctrl,alt,shift, and command!

And the list is scrollable too!

=Hj969IfWhVc


**Rebind Actions During Runtime**

And best of , because of my Victory BP Library nodes, the changes you make in the Key Rebinding Menu instantly update the ingame character input component!

So if you rebind Jump from spacebar to page up, it takes effect instantly!

I could not have   without some new nodes I made after many hours of C++ research! These nodes are now part of my Victory BP Library!

Why Am I Giving For Free?

Because its really important for any game and I just finished figuring out how to do it for Solus.

I figured you would enjoy it as well, since it was honestly not that easy to do, and I had to really think about how to do both the UMG and the actual C++ code to dynamically update action mappings during runtime

:heart:


**How To Use My Menu**

Go in game and press the K key!

Click on the black and red buttons to rebind the jump button!

Add new actions any using **Project Settings-&gt;Input**

Download (8mb)

Here’s the full project for you!

It was made in UE4 Version 4.5!

Wiki Link to Download Page

:slight_smile:

**Set Volume of Any Sound Class

Any From Anywhere!**

is a node that Hourences requested I make!

You can use node to set the volume of any sound class, any, from anywhere!

I am aware of the option of using a sound mixer, however it is not as dynamic because you have to use fixed sound increments.

**My node allows you to offer people an audio slider that is a continuous float value range based only on the slider increments.
**
Enjoy!

Wiki Download Page

**UMG, Get Widgets Of Class

Updated!**

** node will be in a near future engine release! Epic accepted my github pull request!**

You can start playing with it now though, as part of my plugin!

Now you have an optional bool filter to only return widgets that are at the top level, see Darnell’s comment for more information


**My C++ Code For  Node**



```


void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf<UUserWidget> WidgetClass, TArray<UUserWidget*>& FoundWidgets,bool TopLevelOnly)
{
	//Prevent possibility of an ever-growing array if user uses  in a loop
	FoundWidgets.Empty();
	//~~~~~~~~~~~~
	 
	if(!WidgetClass) return;
	if(!WorldContextObject) return;
	 
	UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject);
	if(!World) return;
	//~~~~~~~~~~~
	
	for(TObjectIterator<UUserWidget> Itr; Itr; ++Itr)
	{
		if(Itr->() != World) continue;
		//~~~~~~~~~~~~~~~~~~~~~
		
		if( ! Itr->IsA(WidgetClass)) continue;
		//~~~~~~~~~~~~~~~~~~~
		 
		//Top Level?
		if(TopLevelOnly)
		{
			//only add top level widgets
			if(Itr->GetIsVisible())			//IsInViewport in 4.6
			{
				FoundWidgets.Add(*Itr);
			}
		}
		else
		{
			//add  internal widgets
			FoundWidgets.Add(*Itr);
		}
	}
}


```



Pic

:heart:

**New Node

Get Static Mesh Vertex Locations!**

** node is live in the current most recent plugin version!**

Please refer carefully to my picture of how to set up node correctly!


**Pictures**

![560b4f2b24fb116ffc5c2ddfd4f04754501ad6c2.jpeg|967x742](upload://chbi83K9r7yN6RpDf900WV9lpJM.jpeg)

![75e2b513ac387b6a626ff0e14fe5743f8f3e6a2b.jpeg|1280x960](upload://gORA6cRKTZxgajgGapD8D7bjC2v.jpeg)

Enjoy!

**New Globally Accessible Sound Node

Get Sound Volume of any Sound Class**

node completes the set!

Now you can set and get the volume of any sound class using my Victory BP Library!

Here’s forum link to my Set Volume Node!


**C++ Code**



```


float UVictoryBPFunctionLibrary::VictoryGetSoundVolume(USoundClass* SoundClassObject)
{
	FAudioDevice* Device = GEngine->GetAudioDevice();
	if (!Device || !SoundClassObject)
	{
		return -1;
	}
	    
	FSoundClassProperties* Props = Device->GetSoundClassCurrentProperties(SoundClassObject);
	if(!Props) return -1;
	return Props->Volume;
}


```

You should make a Pull request for :wink: Nice work.

**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)

As always, thank you ! Very useful stuff.

You’re welcome !

Let me know how your save system goes!

@Everyone

Have fun with my fully Config File BP node system!

Let me know how you use it!

:slight_smile:

Thank you -
Your plugin is making my and (I assume) the lives of many here easier with every release!
You really deserve a medal for your contributions :smiley:

Greetz,

Rename Save file

Your plugin is awesome, its helping a lot with our projects.
Right now we are trying to rename a saved file through FPlatformFileManager and going through your tutorial on File Management, we can’t figure out how to rename a saved file. Can you please guide us how to do that?

Thanks,