Announcement

Collapse
No announcement yet.

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

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Originally posted by Sahkan View Post
    I tried the "get sound wav from file" and it didn't work for me.
    While "get texture from file" worked great, trying to get the wav files the exact same way and it gives me nulls.
    Did someone try that node already?
    I didnt write that node, I"ll have to review it and see what's going on


    Originally posted by aWinter View Post
    Thank you Rama, and everybody who ever contributed for this great Plugin, it's really awesome.

    I have a question and a request:

    In January you wrote on answerhub that it will be possible "very soon" to package BP only projects - is there any new information?

    I really would love to see Apply Multiple Damage & Event Multiple Damage nodes. Similar to the current ones, but instead of a float as base damage it would carry a float array, so it may affect various attributes at once with different intensity - e.g. Life, Mana, Stamina. In addition it may also have a bool array and another float array for "is DoT (damage over time)" and "DoT (damage over time) duration". The Bool array is not really necessary, but it may be a bit more comfortable to work with.
    Very nice to hear from you aWinter!

    Is there a reason you cant make these nodes yourself as functions in your character class?

    What is the reason it needs to be done with C++ code?

    Happy to assist but need to know the reason for involving C++ code

    Have fun today!

    Rama
    100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

    UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

    Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

    Comment


      Draw Thick Circle With Axis Control

      Fun node for you!

      With this node you can draw circles!

      And you can control their thickness, as well as how many points make up the circle!

      You can also have axis control!

      So you can draw circles horizontally, vertically, at angles, any way you like, with convenient BP node inputs!

      See pics!

      Click image for larger version

Name:	drawthickcircle3.jpg
Views:	11
Size:	100.4 KB
ID:	1076254

      Click image for larger version

Name:	drawthickcircle2.jpg
Views:	2
Size:	99.7 KB
ID:	1076255

      Click image for larger version

Name:	DrawThickCircle4.jpg
Views:	11
Size:	131.1 KB
ID:	1076256

      ~~~

      Most Recent Plugin Download From UE4 Wiki
      Download Size: 648 KB (about half of a MB)

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




      Rama
      Last edited by Rama; 05-12-2015, 01:57 PM.
      100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

      UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

      Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

      Comment


        Ok Rama i just had to use *.ogg files and it works great, it should be mentioned in the function's description though.
        Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

        Comment


          Hey Rama, I tried to use your victory plugin in 4.8.0 Preview 2, and UE rejected saying that this version is incompatible and that you'd need to recompile it for this version. Can you help?

          here is the image
          Click image for larger version

Name:	Capture.JPG
Views:	1
Size:	25.5 KB
ID:	1076301
          Last edited by malospam; 05-12-2015, 11:09 PM.
          Unreal/Unity Blog http://unity-unreal.blogspot.com/

          Comment


            Originally posted by malospam View Post
            Hey Rama, I tried to use your victory plugin in 4.8.0 Preview 2, and UE rejected saying that this version is incompatible and that you'd need to recompile it for this version. Can you help?

            here is the image
            [ATTACH=CONFIG]39203[/ATTACH]
            Have you tried to recompile your project it in visual studio ?
            Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

            Comment


              Originally posted by Rama View Post
              Is there a reason you cant make these nodes yourself as functions in your character class?
              I could of course implement my own functions to transfer the damage from the damage causer to the receiver. Just as I might use twenty "append string" nodes in a row instead of one "append multiple" from the victory plugin. However, there are many situations when the damage nodes are just ideal and casting or bp interfaces would be really cumbersome to use. The only issue of the damage nodes is that you may only pass one float at a time (and afaik you can't change or workaround this at the moment without c++). Since really many games use some kind of damage I think many people would benefit from a default damage node which may pass various floats. Hence even racing or sport games may use it to pass some data from one actor to another. Two wildcard/ a struct array(s) would of course be even more useful than two float arrays, but I don't know if this is a good idea for something crucial as damage processing or if it's possible at all.

              Comment


                Originally posted by Sahkan View Post
                Have you tried to recompile your project it in visual studio ?
                There's a lot of outdated code that won't work according to my 4.8 :/
                KITATUS
                "Information shouldn't be behind a paywall, It should be free for all!"

                Comment


                  Originally posted by Sahkan View Post
                  Ok Rama i just had to use *.ogg files and it works great, it should be mentioned in the function's description though.
                  That's great to know, thanks! I have updated the in-editor Node descriptions!

                  ~~~

                  Victory BP Library ~ Primary Releases Only Unless Have Community Help

                  Originally posted by malospam View Post
                  Hey Rama, I tried to use your victory plugin in 4.8.0 Preview 2, and UE rejected saying that this version is incompatible and that you'd need to recompile it for this version. Can you help?
                  Originally posted by KitatusStudios View Post
                  There's a lot of outdated code that won't work according to my 4.8
                  Dear Community,

                  It is to be expected that my plugin wont automatically work with new preview builds because a very large quantity of C++ code (over 4,000 lines!) is involved.

                  Because C++ code changes are so plentiful in Preview builds, I cannot afford to support them myself.

                  Please recall that I am not getting paid by Epic or anyone else to support my Victory BP Library plugin and I do all that I can, just for you!

                  I simply dont have the time to support preview builds!

                  Keep in mind that Epic states clearly that preview builds are just for testing and you should not be running your main project on a preview build as many things can change during the preview process!

                  ~~~

                  Do PM Me if You Do A Preview Build Upgrade

                  If anyone upgrades my plugin to 4.8 for their own use they can pm me and I can add the preview build to this thread.



                  Rama
                  Last edited by Rama; 05-14-2015, 03:09 PM.
                  100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                  UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                  Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                  Comment


                    Originally posted by aWinter View Post
                    I could of course implement my own functions to transfer the damage from the damage causer to the receiver. Just as I might use twenty "append string" nodes in a row instead of one "append multiple" from the victory plugin. However, there are many situations when the damage nodes are just ideal and casting or bp interfaces would be really cumbersome to use. .
                    Just casting to your custom character class which has extended versions of the Damage nodes, where you pass in the float array and take each entry out and apply damage nodes to each float is quite simple, I am not sure wherein lies the complication other than casting from base character class to your character class.

                    Let's wait and see what casting is like in 4.8!

                    There's a bug that makes it hard to make BP Libary Assets (Blueprint Only) to expedite casting to custom classes via pure nodes, I am hoping this is fixed in 4.8



                    Rama
                    100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                    UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                    Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                    Comment


                      Click image for larger version

Name:	MoveRenameMostRecent.jpg
Views:	3
Size:	331.9 KB
ID:	1076381

                      Dear Community,

                      New node for you!

                      This node will move / rename the most recently taken screenshot!

                      So the intended work flow is

                      1. Exec Console Command -> "HighResShot 2" or "shot showui"

                      2. Possibly put in a short Delay node

                      3. Use my new node! ScreenShots Move Rename Most Recent!

                      ~~~

                      More Power for You in BP

                      Now you can specify an absolute path directory and also file name for the most recent screen shot, and it will be relocated for you!

                      So please note you can only do this after you create the image using UE4's console commands.

                      ~~~

                      Bonus For You

                      You can specify a destination folder that does not exist yet and my node will create it for you!

                      This is great for if you delete your custom screen shots folder and expect my node to work anyway!

                      My node will!



                      ~~~

                      High Res vs Regular Screen Shots

                      You can filter for High Resolution and regular screen shots independently using my node!

                      So if you have High Res selected, ONLY High Resolution screenshots are considered when sorting by file time.

                      Otherwise, if this is unchecked, I will ONLY look for regular screenshots taken with "shot showui"



                      ~~~

                      Keep in Same Directory?

                      To keep the file in the same directory, use my new Paths node that retrieves your project's ScreenShot directory!

                      ~~~

                      Pro Tip

                      If you have a bunch of shots, you can:

                      1. use my node in a for loop with a break and a max count of 1000, (or while loop if you are feeling confident)

                      2. Ensure that you are moving the files OUT of their current directory (otherwise for loop will run to its limit)

                      3. The break condition is when my new node returns false, so just plug the false end of the branch right back into the break condition!

                      This will work because my node is only checking the dates of the files that are within the screenshots directory, so as you keep moving the files out, my node will keep finding the new most recent picture!

                      ~~~

                      My C++ Code For You

                      I had to write a lot of custom File Operations code to fulfill this request, so a lot of the functions you see in this node are not stock UE4 code.

                      Code:
                      bool UVictoryBPFunctionLibrary::ScreenShots_Rename_Move_Most_Recent(
                      	FString& OriginalFileName,
                      	FString NewName, 
                      	FString NewAbsoluteFolderPath, 
                      	bool HighResolution
                      ){ 
                      	OriginalFileName = "None";
                      
                      	//File Name given?
                      	if(NewName.Len() <= 0) return false;
                      	
                      	//Normalize
                      	FPaths::NormalizeDirectoryName(NewAbsoluteFolderPath);
                      	
                      	//Ensure target directory exists, 
                      	//		_or can be created!_ <3 Rama
                      	if(!VCreateDirectory(NewAbsoluteFolderPath)) return false;
                      	
                      	FString ScreenShotsDir = VictoryPaths__ScreenShotsDir();
                      	
                      	//Find all screenshots
                      	TArray<FString> Files;	  //false = not recursive, not expecting subdirectories
                      	bool Success = GetFiles(ScreenShotsDir, Files, false);
                      	
                      	if(!Success)
                      	{
                      		return false;
                      	}
                      	
                      	//Filter
                      	TArray<FString> ToRemove; //16 bytes each, more stable than ptrs though since RemoveSwap is involved
                      	for(FString& Each : Files)
                      	{
                      		if(HighResolution)
                      		{
                      			//remove those that dont have it
                      			if(Each.Left(4) != "High")
                      			{
                      				ToRemove.Add(Each);
                      			}
                      		}
                      		else
                      		{ 
                      			//Remove those that have it!
                      			if(Each.Left(4) == "High")
                      			{
                      				ToRemove.Add(Each);
                      			}
                      		}
                      	}
                      	
                      	//Remove!
                      	for(FString& Each : ToRemove)
                      	{
                      		Files.RemoveSwap(Each); //Fast remove! Does not preserve order
                      	}
                      	
                      	//No files?
                      	if(Files.Num() < 1)
                      	{ 
                      		return false;
                      	}
                      	
                      	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      	// Rama's Sort Files by Time Stamp Feature
                      	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      	//Sort the file names by time stamp
                      	//  This is my custom c++ struct to do this,
                      	//  	combined with my operator< and UE4's
                      	//			TArray::Sort() function!
                      	TArray<FFileStampSort> FileSort;
                      	for(FString& Each : Files)
                      	{
                      		FileSort.Add(FFileStampSort(&Each,GetFileTimeStamp(Each)));
                      		
                      	}
                      
                      	//Sort all the file names by their Time Stamp!
                      	FileSort.Sort();
                      	
                      	//Biggest value = last entry
                      	OriginalFileName = *FileSort.Last().FileName;
                      	//~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      
                      	    
                      	//Generate new Full File Path!
                      	FString NewFullFilePath = NewAbsoluteFolderPath + "/" + NewName + ".bmp";
                      	
                      	//Move File!
                      	return RenameFile(NewFullFilePath, ScreenShotsDir + "/" + OriginalFileName);
                      }
                      ~~~

                      How It Works

                      The core feature of my logic and this node is that I used a custom C++ struct in order to sort all of the files by date!

                      I do this in a super-efficient way, using UE4's TArray::Sort function which leverages all of Epic's hard work to create a fast sorting function!

                      I defined the C++ operator< for my custom struct so that UE4 could do the sorting for me!

                      In addition I have developed my own File I/O library since my time in the UE4 Beta program.

                      So I had all the supporting functions I needed!

                      ~~~

                      C++ Code Speed

                      Please note that in my internal file sorting system I do not duplicate the FString data! I refer to it via pointer, and use the FDateTime as the only data I access.

                      So essentially my custom C++ struct is a FDateTime wrapper for a FString ptr so that UE4 can sort the files for me like Lightning!

                      ~~~

                      Download and plug in!

                      Latest plugin download is here:
                      https://wiki.unrealengine.com/File:VictoryPlugin.zip

                      Enjoy!

                      Rama
                      Last edited by Rama; 05-14-2015, 03:05 PM.
                      100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                      UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                      Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                      Comment


                        Is there a way i can use those functions in C++ as well? i'm trying to include the header file it says it doesn't found.
                        Check out my game OldSchool Nightmare : http://www.indiedb.com/games/oldschool-nightmare

                        Comment


                          Right now we have Current Floor Hit Result which gets updated every tick while walking but there is no easy way to store it for comparisons.

                          What about a node that stores the previous ticks floor hit result, call it "Last Floor Hit Result" or "Old Floor Hit Result"? I know in 4.8 OnWalkOffLedge does this but only when you walk off a ledge and not the whole hit result. If we change movement modes it would store the last ground contact, possibly even a timestamp until we switch back to walking
                          Last edited by DEDRICK; 05-15-2015, 11:16 AM.

                          Comment


                            How to Include Plugin Functions and Classes in Project-Level Code

                            Originally posted by Sahkan View Post
                            Is there a way i can use those functions in C++ as well? i'm trying to include the header file it says it doesn't found.
                            I did actually expose my Victory Core BP Library yes, so you can include it in your build cs!

                            Code:
                            UCLASS()
                            class VICTORYBPLIBRARY_API UVictoryBPFunctionLibrary : public UBlueprintFunctionLibrary
                            {
                            The fact that I include VICTORYBPLIBRARY_API means that the symbols get exported so that you include my plugin functions and classes and compile code at the project level.

                            You need to include my plugin module in your build cs as a dependency in order to use #include "VictoryBPLibrary.h"

                            Code:
                            PublicDependencyModuleNames.AddRange(new string[] { 
                            	"Core", "CoreUObject", "Engine", "InputCore",
                            			
                            	"VictoryPlugin"
                            });
                            Once you do this, you can then call my Victory BP Library functions wherever you #include "VictoryBPLibrary.h"

                            ~~~

                            Fancy Extra Feature

                            Another neat feature is that you can even have classes in your project code that extend C++ classes that I've included in the plugin such as JoyISM (instanced static mesh)!

                            Enjoy!

                            Rama
                            100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                            UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                            Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                            Comment


                              Originally posted by DEDRICK View Post
                              Right now we have Current Floor Hit Result which gets updated every tick while walking but there is no easy way to store it for comparisons.

                              What about a node that stores the previous ticks floor hit result, call it "Last Floor Hit Result" or "Old Floor Hit Result"? I know in 4.8 OnWalkOffLedge does this but only when you walk off a ledge and not the whole hit result. If we change movement modes it would store the last ground contact, possibly even a timestamp until we switch back to walking
                              My plugin only operates in a static context, as all Blueprint Libraries do, so I can't store variables for you, you can create variables at the project-level and save off the result yourself though

                              Great to hear from you!



                              Rama
                              100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                              UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                              Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                              Comment


                                Get Current Operating System Time

                                annnnd

                                Get Milliseconds/Seconds/Minutes/Hours Passed Since Previous Recorded Time!


                                These two nodes can be used to

                                1. obtain the current local Operating System Time for your computer.

                                2. obtain the amount of milliseconds/seconds/minutes/hours that have passed since the time you recorded for the first node! You can stores as many times as you want! They are simply stored as a string!


                                You can use these two nodes to record down to the sub-millisecond the amount of time passing between game events!

                                The milliseconds portion is a float, so you can record far smaller than 1 millisecond!


                                In the attached picture I record the amount of real-world time between two play sessions!

                                Click image for larger version

Name:	DateTime1.jpg
Views:	2
Size:	357.2 KB
ID:	1076442

                                Click image for larger version

Name:	datetimediff.jpg
Views:	2
Size:	191.6 KB
ID:	1076443

                                ~~~

                                Download and plug in! (Files Size: Less Than 1 MB)

                                Latest plugin download is here:
                                https://wiki.unrealengine.com/File:VictoryPlugin.zip

                                Enjoy!

                                Rama
                                100+ UE4 C++ Tutorials on the UE4 Code Wiki, including UE4 Multi-Threading!

                                UE4 Marketplace: Melee Weapon Plugin & Compressed Binary Save System Plugin | Rama's C++ AI Jumping Videos | Vertex Snap Editor Plugin

                                Visit www.ue4code.com to see lots of videos about my C++ Creations! ♥ Rama

                                Comment

                                Working...
                                X