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

Can you give me the whole crash log?

Do you mean using ?listen or as dedicated server?

Please load the editor / run the game from commandline with -log and send me the whole log after verifying the date and at the top of the log as being your must recent test.

I run games as a listen server the without any issues with the plugin :slight_smile:

So I need more info!

Check out these wikis of mine!

I share code for how to iterate over files and directories!

File Management
https://wiki.unrealengine.com/File_Management,_Create_Folders,_Delete_Files,_and_More

Create Directory Recursively
https://wiki.unrealengine.com/Algorithm_Analysis:_Create_Directory_Recursively

'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![/SIZE]**

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

60+ Extra BP Nodes For You!

No c++ required!

No compile required!

Download and plug in!

Latest plugin download is here:

:slight_smile:

**Two Nodes For You!

Get Path

Load From Asset Path!**

Now you can use Right Click -> Copy Reference and past that into my BP node to load an directly from asset path!

You can also pass in a UObject to retrieve its full asset path using my other node, and these two nodes work together!

I used system in my C++ based In-game editor to load levels from hard disk!

I simply save out the asset paths and then load objects from their paths, setting any user-changed variables!

**Now you can do the same thing entirely in Blueprints!
**
Enjoy!

Latest Victory BP Library Plugin Download

**Get Widgets of Class

Ideal for UMG Level Transitions**

I needed node for Solus and so I am now sharing it with you!

The was that I could not save a reference to my new widget because it is loaded and then a level change occurs which resets my HUD variables.

So I needed to access the widget after it was created dynamically, not relying on stored references within the HUD class.

I also did not want to have to store a reference to it in my Game Instance class cause then that leads to garbage collection issues.

I had to make the node for my own use and I have tested it as working in Solus!

**Now you can retrieve an array of any type of user-made UMG widget that is currently in your game at any!
**


**Download**

https://wiki.unrealengine.com/File:VictoryPlugin.zip

C++ Code

Here’s what my C++ for node looks like!



void UVictoryBPFunctionLibrary::GetAllWidgetsOfClass(UObject* WorldContextObject, TSubclassOf<UUserWidget> WidgetClass, TArray<UUserWidget*>& FoundWidgets)
{
	//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))
		{
			FoundWidgets.Add(*Itr);
		}
	}
}



**Pic**

(right click -&gt; open in new tab to see it better)
![GetAllWidgetsOfClass.jpg|1280x960](upload://k3rJSJemWVjAQ9p7eXZQVNYeJAl.jpeg)

Enjoy!

I’m sorry if I sound ignorant, I just registered and I’m checking out how the blueprint system works, but I’d like to ask a question about your plugin. Why is it a plugin and not integrated into the engine? I mean things like vertex snapping are awesome and honestly I’m surprised that it wasn’t in the editor by default. And it seems like you’ve expanded the blueprint system quite a bit, so what gives? Again I’m sorry if the answer is obvious,I just don’t know how things are running here. I come from Unity and everything there was in the asset store, I guess I had the wrong idea how open source works.

I had a hard understand , but I give it a try…

I guess your question is why isn’t directly added to the Unreal Engine source code, right?
Keep in mind open source doesn’t mean everyone can directly get his code into the engine (or a project for that matter) without hesitation. Open source means that you have access to the full source code and can edit it yourself, but not that you can contribute your code directly to the “root” project.

In the case of the UE4: there is a control instance by/from Epic. They check the contributed code and make sure that it works on platforms and in every way, which in my opinion is a good thing as it keeps out crappy code even though it costs.

Some of the additions of his work are, as far as I know and heard it, getting integrated into the engine, but that takes as the code has to go through quality assurance and the other stuff which Epic puts third party code through.

I hope that I got it right, if not just tell me I will try to correct the post then ^^

Greetz,

That’s an excellent answer to my question. Thank you.

Great answer !

I agree, although it means it takes longer to get code integrated, Epic’s quality assurance standards are really important! :slight_smile:

Great to hear from you Kensei!

Yes I do wish my vertex snapping would get integrated the but the engineers at Epic responsible for handling such matters have been rather exceedingly busy lately.

I hope they get to it one day, I already did the work for them!

Github Link:
/EpicGames/UnrealEngine/pull/62

Editor Vertex Snap Videos

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

Two Nodes For You
For Your Sound Menu

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

**UMG, Get Widgets Of Class

Updated!**

I have been using node the in my UMG menus!

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

Featured Node

Trace for Closest Socket

Perform a trace against a mesh that will identify the closest socket to the trace hit location on the mesh!

8028a3610f7eacb2c5741fd27866b1d186fc6e6e.jpeg

**Get Screen Resolutions
**
Now works in packaged games!

You can use with your UMG menus!

It gathers data specific to the end user’s display adapter, including available refresh rates :slight_smile:

old but has nice in-game pic

actual!

Hi ,

Any change your plugin will work with 4.6 (source)?

Regards,

Peter

Sorry to bug you, and thanks for the awesome work!

I’m working on a Mac and am getting following error when trying to install the Victory plugin:

[msg]
The following modules are missing or built with a different engine version:

UE4Editor-VictoryEdEngine.dylib
UE4Editor-VictoryBPLibrary.dylib

Would you like to rebuild them now?
[/msg]

It does not build if I try to rebuild them…I presume because I’m not using the source code. I downloaded the precompiled plugin.

Does plugin work with Mac? If not, is there a way to compile it so that it would? Or, am I just doing something wrong?

Thanks!

I will upgrade the plugin to 4.6 when it is released! :slight_smile:


@pwsnow,

I dont have a mac so I cant test, can anyone else verify whether they've used my plugin with a mac?

Hey, did you think about putting plugin source on GitHub ?

Then, instead of waiting until it will work with next version, people could make it work themselves and send changes back to you (;.