Packaging Plugins for upgraded project in 4.8, Workaround
Dear Community,
Here’s the solution to the packaging with plugins errors that Tekoppar posted:
**Epic Response on Answerhub**
[QUOTE=Epic Staff Pete;309191]
Ok, there is definitely an in 4.8. We're looking in to a fix. In the meantime, you can fix the by the following:
Create a new code-based project (the template chosen doesn't matter, I chose FPS)
After the newly created project has been opened in the editor, use explorer to browse to the location of that project on your computer
Search for PCLaunch.rc.res in that project (it will be found in the Intermediate directory)
Copy that file to /Engine/Intermediate/Build/Win64/Development/Launch/ and/or /Engine/Intermediate/Build/Win32/Development/Launch/ (you may have to make the Launch directory)
Open the broken project
Uncheck Rebuild in the Package Settings
Package should now work
Not ideal, but should get you unbroken and still be able to have the enabled plugins.
-Pete
[/QUOTE]
**Full Thread**
https://answers.unrealengine.com/questions/241581/packaging-is-failing-in-48.html
:)
I’m using the file from your link, also working on 4.8.0 version.
BP nodes are working fine, but vertex snap editor just doesn’t show up, I’m selecting static meshes but no Victory Editor HotKeys button shows up, no vertices are being highlighted.
I tried toggling it on and off, etc. nothing helps. I also deleted engine cache just to be sure.
The above nodes let you know when a particular Actor was created (World Seconds) and for how many seconds an actor has been alive!
**Valid Index (Array)**
![ValidIndex.jpg|1280x960](upload://6XEK2boqLAfOT0v5UH4eosnn1Jq.jpeg)
node let's you always know in advance if a particular index is valid for your chosen array!
node simplifies the process of protecting against "array out of bounds" errors with arrays!
Many thanks to for contributing these nodes!
:)
C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(484): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'
1> C:\Program Files\Epic Games\4.7\Engine\Source\Runtime\Engine\Classes\Engine/World.h(503) : see declaration of 'UWorld'
1>C:\Users\r\Documents\Unreal Projects\OceanProject 4.8\Plugins\VictoryPlugin\Source\VictoryEdEngine\Private\VictoryEdAlignMode.cpp(853): error C2039: 'LineTraceSingleByChannel' : is not a member of 'UWorld'
LineTraceSingleByChannel is absolutely a function in UWorld in 4.8!
You must not be compiling with 4.8 somehow?
There’s no way the compiler should miss finding LineTraceSingleByChannel !
GetMainAudioDevice is also new in 4.8
I’d recommend doing :
delete intermmediate folder for the plugin and your main project
delete sln,suo,sdf for main project
right click on .uproject, and select switch engine version to 4.8
recompile both main project and plugin
I’ve been compiling just fine in 4.8 and you simply should not be getting told by compiler that functions are missing that are new in 4.8
You could also try compiling for Development Editor 64 just for more test data.
Do keep me updated on your progress with !
[QUOTE=;311109]
Thank you and for the new nodes.
entire BP suite makes working more convenient with every update!
Thank you again for working on !
[/QUOTE]
Woohoo!
Glad you are enjoying my Victory Plug !
:)
:)
:)
**C++ Code For You**
Here is the core C++ function involved, entire source is in the download! I wrote my own Enum for the file formats.
```
UTexture2D* UVictoryBPFunctionLibrary::Victory_LoadTexture2D_FromFile(const FString& FullFilePath,EJoyImageFormats ImageFormat, bool& IsValid,int32& Width, int32& Height)
{
IsValid = false;
UTexture2D* LoadedT2D = NULL;
IImageWrapperModule& ImageWrapperModule = FModuleManager::LoadModuleChecked<IImageWrapperModule>(FName("ImageWrapper"));
IImageWrapperPtr ImageWrapper = ImageWrapperModule.CreateImageWrapper(GetJoyImageFormat(ImageFormat));
//Load From File
TArray<uint8> RawFileData;
if (!FFileHelper::LoadFileToArray(RawFileData, * FullFilePath))
{
return NULL;
}
//Create T2D!
if (ImageWrapper.IsValid() && ImageWrapper->SetCompressed(RawFileData.GetData(), RawFileData.Num()))
{
const TArray<uint8>* UncompressedBGRA = NULL;
if (ImageWrapper->GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA))
{
LoadedT2D = UTexture2D::CreateTransient(ImageWrapper->GetWidth(), ImageWrapper->GetHeight(), PF_B8G8R8A8);
//Valid?
if (!LoadedT2D)
{
return NULL;
}
//Out!
Width = ImageWrapper->GetWidth();
Height = ImageWrapper->GetHeight();
//Copy!
void* TextureData = LoadedT2D->PlatformData->Mips[0].BulkData.Lock(LOCK_READ_WRITE);
FMemory::Memcpy(TextureData, UncompressedBGRA->GetData(), UncompressedBGRA->Num());
LoadedT2D->PlatformData->Mips[0].BulkData.Unlock();
//Update!
LoadedT2D->UpdateResource();
}
}
// Success!
IsValid = true;
return LoadedT2D;
}
```
**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 link will not start a download instantly, it will just take you to the Media Fire file description.
https://www.mediafire.com/?g6uf9kt5ueb2upj
Enjoy!
:)
Wow, I’d been looking for an image importer for what feels like forever. Thanks so much!
One question: How should I go about translating heightmap values to coordinates/z values?
I’m trying to export my heightmap from UE4, then import it with the image reader to determine the z coordinates when spawning objects, but there’s obviously going to be a difference in magnitude.
I’ve managed to get the coordinates somewhat close with hand drawn maps, but anything exported from UE4 and reimported for reference is pretty off.
For reference, if I set the landscape’s location to 0,0,0, I can get almost kind of accurate Z values by dividing the X/Y Coordinates by 100 and rounding, then adjusting the Z value until it matches up with one coordinate, at which point it generally matches up with the others.
Yea it sounds like you are going to have arbitrary scaling values that you need to apply until you end up in the proper range, and it sounds like it could vary per image.
If you come up with a formula for that I can get you a node to iteratively test faster, or you can create a Blueprint Function Library, the BP asset kind, and do the equation there and then you’ve created your own node to iteratively test with
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
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!
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.
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.
**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!**
Hey ! Is there any way to have a node that can fetch static meshes in obj format so i can apply the textures i already can fetch to them?
It can be, fbx, obj, or w/e is comfortable. I think obj will be more simple to do, but again, i don’t really have a clue.
It will be really awesome to let players use their own modeled weapons, accessories, and in my game’s case, build levels with their own meshes as decoration.
With anything you’v already made ( textures, sounds, config ini ) I think the mesh fetching will make the game the ultimate moddable game.
Allowing Developers to add new content after release has just become supported as of 4.8
Allowing people who buy your game to add their own meshes is not supported because the fbx pipeline runs only on the Editor side of the engine, which we are not allowed to utilize in packaged games.
I had a lot of work during the UE4 Beta to remake 3ds in UE4 (UE4 ), using the procedural mesh component.
Then you can even give people per-vertex creation capacity.
The challenge for me was generating good uv mappings via in-game tools
But so far, I dont think there’s any legal way to utilize UE4’s fbx importing pipeline in a packaged game.
Using my own systems entirely I could make a human-readible / editible file format which thus allows you to make custom .ini files yes.
But why do you need lots of custom .ini files? What is your perceived or actual use case?
I just wanted something like your node above “File IO Save String Array to File” where we could specify our own file name, so instead of using the game.ini we could have our own ones.
Hey , could you add a node like “Execute Console Command” with the addition that it has an output String which prints out the output? For example if I type “sg.ShadowQuality” in the console then the output I get is “sg.ShadowQuality = “3” LastSetBy: Console”. I just want to know the 3, so the info how a certain console variable is set at the moment Would be possible?