Download

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

Hey Rama how is it going? :slight_smile:

I have successfully compiled and fixed all the errors/warnings for 4.9 (the changes in get mesh triangles function was the toughest part to fix for me :stuck_out_tongue: but I think it works fine).
Maybe I can save you some trouble?

Here is the link:

Woohoo thank you so much TK-Master for helping out!

Actually we finished around the same time!

I tested both your version and mine, and the 4.9 plugin template code, there’s a bug whenever UnrealEd is included. Just wanted to know I did test your version too to honor your contribution!

See next post!

:slight_smile:

Rama

Upgrade to 4.9, Vertex Snap Editor Temp Disabled

Dear Community,

I’ve upgraded my Victory BP plugin to 4.9! (And TK-Master did too!)

Unfortunately in 4.9.0 there’s a bug involved with editor plugins that I believe has to be fixed engine-side as it is affecting the new 4.9 plugin templates as well.

So this version of my plugin does not include the Vertex Snap Editor.

To avoid a crash on editor startup, please remember to remove these lines from your config file if you were using the vertex snap editor:

this



[/Script/Engine.Engine]
UnrealEdEngine=/Script/VictoryEdEngine.VictoryEdEngine


becomes this



;[/Script/Engine.Engine]
;UnrealEdEngine=/Script/VictoryEdEngine.VictoryEdEngine


Full description:


**4.9 Download**

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

Much happiness glows around me :smiley: Java this semester, c++ next. And then the Unreal API for all its hugeness and oddness.

Seems the IsValidIndex node doesn’t like 4.9.
I’ll get the fix to Rama shortly :slight_smile:

Victory Ed Engine Plugin, Separate Plugin and Download Now

Dear Community,

As of 4.9.0, My Vertex Snap Editor Plugin is now a separate plugin, called VictoryEdEngine!

Download Link (145kb)

This is a plugin that does not package with your game as it is only designed to modify Unreal Engine 4 to add support for vertex snapping while in the Level Editor Viewport.

More Details about my Vertex Snapping Editor Feature

Installation Steps

Enjoy!

Rama

Hey Rama!

Why not just upload the plugin here in the forums or just link in the wiki to a separate download location (like google drive)?

Another question: Could you somehow integrate this into your plugin?

Epic seems to be quite slow with integrating custom hardware cursors into the engine, they don’t say anything about it, no idea whether it will happen within the next 1 or 2 years :stuck_out_tongue: So there is the code which just needs to get added to the source for making custom cursors work, but of course doing this manually after each new version and each hotfix and compile the engine is just a drawback regarding usability. But so many games need custom cursors! The default windows hand cursor is not really fitting for most games, and software cursors feel laggy, even at 60 fps.

Could you integrate the code mentioned in the thread above into your plugin and make it work as a BP node or would it not work inside of a plugin?

Thanks! :slight_smile:

Could you post a fix here? I’m currently stuck on this.

-steve

IsValidIndex fix:



    DECLARE_FUNCTION(execArray_IsValidIndex)
    {
        Stack.MostRecentProperty = nullptr;
        Stack.StepCompiledIn<UArrayProperty>(NULL);
        void* ArrayAddr = Stack.MostRecentPropertyAddress;
        UArrayProperty* ArrayProperty = Cast<UArrayProperty>(Stack.MostRecentProperty);
        if (!ArrayProperty)
        {
            Stack.bArrayContextFailed = true;
            return;
        }
        P_GET_PROPERTY(UIntProperty, Index);
        P_FINISH;

        bool WasValid = GenericArray_IsValidIndex(ArrayAddr, ArrayProperty, Index);
        *(bool*)RESULT_PARAM = WasValid;
    }




bool UVictoryBPFunctionLibrary::GenericArray_IsValidIndex(void* TargetArray, const UArrayProperty* ArrayProp, int32 Index)
{
    bool bResult = false;

    if (TargetArray)
    {
        FScriptArrayHelper ArrayHelper(ArrayProp, TargetArray);
        bResult = ArrayHelper.IsValidIndex(Index);
    }

    return bResult;
}

I’m still getting crashes.

-steve

Hey Kris, your LoadTexture2D_FromFileByExtension node isn’t working correctly for me any more in 4.9, I’m getting a sort of hue shifted effect:

RIAK4bK.png

How the colours should look:

G2k8WOa.png

edit:
Changing
Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);

to

Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8;

fixes it

I have a problem with a linux build. I tried a version of the plugin from June and also a version from 08-26-15. The both had this error. Any ideas?

Thanks for your awesome plugin!

Edit: Fixed, see below

Funny, that’s what my version already has.
I must have updated it a while back without sending it to Rama.
My bad :frowning:

This fixed my problem as well. Thanks Stormwind!

I’m getting an error saying “VictoryPlugin could not be loaded because the module VictoryBPLibrary could not be found.” I’ve looked in the plugin’s Source folder and… well… it’s right there. Not sure what the plugin is not seeing that I can.

Dear Mosel3y,

I just checked and the current version of the function has this source code, which includes your fix, nice to hear from you!

This is the most recent Victory Plugin on mediafire and the wiki



UTexture2D* UVictoryBPFunctionLibrary::LoadTexture2D_FromFileByExtension(const FString& ImagePath, bool& IsValid, int32& OutWidth, int32& OutHeight)
{
	UTexture2D* Texture = nullptr;
	IsValid = false;

	// To avoid log spam, make sure it exists before doing anything else.
	if (!FPlatformFileManager::Get().GetPlatformFile().FileExists(*ImagePath))
	{
		return nullptr;
	}

	TArray<uint8> CompressedData;
	if (!FFileHelper::LoadFileToArray(CompressedData, *ImagePath))
	{
		return nullptr;
	}
	
	IImageWrapperPtr ImageWrapper = GetImageWrapperByExtention(ImagePath);

	if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(CompressedData.GetData(), CompressedData.Num()))
	{ 
		const TArray<uint8>* UncompressedRGBA = nullptr;
		
		if (ImageWrapper->GetRaw(ERGBFormat::RGBA, 8, UncompressedRGBA))
		{
			Texture = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_R8G8B8A8);
			
			if (Texture != nullptr)
			{
				IsValid = true;
				
				OutWidth = ImageWrapper->GetWidth();
				OutHeight = ImageWrapper->GetHeight();

				void* TextureData = Texture->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
				FMemory::Memcpy(TextureData, UncompressedRGBA->GetData(), UncompressedRGBA->Num());
				Texture->PlatformData->Mips[0].BulkData.Unlock();
				Texture->UpdateResource();
			}
		}
	}

	return Texture;
}


:slight_smile:

Rama

You’re welcome, and I am glad Stormwind’s Linux packaging fix worked for you!

:slight_smile:

Rama

Yes, sorry about that guys, I’ve just realized I’d coppied in an older version that I had broken myself, not the latest :eek:

All good, hee hee!

:slight_smile:

Rama

In regard to IsValidIndex

I can confirm I was still getting crashes too, I looked into the code and fixed it, here is the correct .h file for 4.9.0



/* 
 *See if index is a valid index for this array
 *    
 *@param    TargetArray        The array to perform the operation on
 *@param    Index            The index to check.
 *@return    Bool if integer is valid index for this array
*/
UFUNCTION(Category="VictoryBPLibrary|Utilities|Array", BlueprintPure, CustomThunk, meta=(DisplayName = "Valid Index", CompactNodeTitle = "VALID INDEX", ArrayParm = "TargetArray"))
static bool Array_IsValidIndex(const TArray<int32>& TargetArray, int32 Index);

static bool GenericArray_IsValidIndex(void* TargetArray, const UArrayProperty* ArrayProp, int32 Index);
  
DECLARE_FUNCTION(execArray_IsValidIndex)
{
	Stack.MostRecentProperty = nullptr;
	Stack.StepCompiledIn<UArrayProperty>(NULL);
	void* ArrayAddr = Stack.MostRecentPropertyAddress;
	UArrayProperty* ArrayProperty = Cast<UArrayProperty>(Stack.MostRecentProperty);
	if (!ArrayProperty)
	{
		Stack.bArrayContextFailed = true;
		return;
	}
	P_GET_PROPERTY(UIntProperty, Index);
	P_FINISH;

	bool WasValid = GenericArray_IsValidIndex(ArrayAddr, ArrayProperty, Index);
	*(bool*)RESULT_PARAM = WasValid;
}


Uploading new plugin version shortly.

:slight_smile:

Rama