Page 21 of 55

Re: Last Epoch Save Editor

Posted: Thu Jun 01, 2023 4:25 am
by insom999
Hi, new to all this editor stuff, ive downloaded the editor can edit character, but there is no option to create gear do i have to download something else to get this part to work
thanks

Re: Last Epoch Save Editor

Posted: Thu Jun 01, 2023 6:42 am
by Ash06
insom999 wrote:
Thu Jun 01, 2023 4:25 am
Hi, new to all this editor stuff, ive downloaded the editor can edit character, but there is no option to create gear do i have to download something else to get this part to work
thanks
Right click inventory or character slot, then "Add item"
or right click item, "Copy Item", right click inventory "Paste"
If you create an item in your inventory, you have to to move it in a good position (container position) then save before editing your new item
Netninja wrote:
Thu Jun 01, 2023 1:12 am
The newest version of Melon has an issue with Unity Explorer. Finally downgraded and have Unity Explorer working via F7 in Last Epoch, however, the last dependency is :
Melon Preferences Manager
Which no longer exists :( Even the existing fork references a repository that doesn't exist anymore.
Extractor Mod require:
Melon Loader 5.7
Unity explorer
Melon Preferences Manager
MelonPrefManager.IL2CPP.rar
(20.53 KiB) Downloaded 345 times
Result Files (copy to /Src/Icons/) from Icons Extractor Tool (see below)
Netninja wrote:
Thu Jun 01, 2023 1:12 am
I've collected all of the new items and I can browse my save file to pull out the info for each if that helps. I can probably also just extract the image files for each from the Last Epoch Tools website and place the png files in the correct directories
Icons Extractor Tool (work only with [Link] SpriteSheets) :
Image

https://github.com/RCInet/LastEpochIconsExtractor

Requirements : SpritesSheet (convert to .png) and css
All requirements can be found with Developer Tools in any item in [Link]
SpriteSheet https://www.lastepochtools.com/data/be ... 048c.webp
Css https://www.lastepochtools.com/data/be ... e048c.css

I already have apps for doiing all the job (extract items stats, generate database, copy rename icons), don't do it manually ^^

Image
Update V4.5 (Add all new items)

If you have time, edit the Mod for extracting all from game (not only shards)

Re: Last Epoch Save Editor

Posted: Fri Jun 02, 2023 2:10 pm
by Bhaine
Is there a way for me to fix "TableLayoutPanel cannot expand to contain the control, because the panel's GrowStyle property is set to FixedSize"? Only for certain items like belts, amulet and maybe a few more.

Re: Last Epoch Save Editor

Posted: Sat Jun 03, 2023 5:49 pm
by babylondc
Guys, how do i edit an unique item to add some exalted affixes on it?

Re: Last Epoch Save Editor

Posted: Sun Jun 04, 2023 12:11 am
by Ash06
You can't.
Image
If you want to edit item like this, you need to use mods

Code: Select all

private void AddUniqueModToAnother(int item_id, int item2_id)
        {
            UnityEngine.Object obj = GetObject("UniqueList");
            System.Type type = obj.GetActualType();
            if (type == typeof(UniqueList))
            {
                UniqueList unique_list = obj.TryCast<UniqueList>();
                List<UniqueItemMod> mods = new List<UniqueItemMod>();
                //Copy
                int index = -1;
                int i = 0;
                foreach (UniqueList.Entry ul_entry in unique_list.uniques)
                {
                    if ((ul_entry.baseType == item_id) | (ul_entry.baseType == item2_id))
                    {
                        if (ul_entry.baseType == item2_id) { index = i; }
                        foreach (UniqueItemMod m in ul_entry.mods) { mods.Add(m); }
                    }
                    i++;
                }
                //Paste
                if (index > -1) { unique_list.uniques[index].mods = mods; }
            }
        }

Re: Last Epoch Save Editor

Posted: Sun Jun 04, 2023 4:27 am
by Stazz
Ash06 wrote:
Sun Jun 04, 2023 12:11 am
You can't.
Image
If you want to edit item like this, you need to use mods

Code: Select all

private void AddUniqueModToAnother(int item_id, int item2_id)
        {
            UnityEngine.Object obj = GetObject("UniqueList");
            System.Type type = obj.GetActualType();
            if (type == typeof(UniqueList))
            {
                UniqueList unique_list = obj.TryCast<UniqueList>();
                List<UniqueItemMod> mods = new List<UniqueItemMod>();
                //Copy
                int index = -1;
                int i = 0;
                foreach (UniqueList.Entry ul_entry in unique_list.uniques)
                {
                    if ((ul_entry.baseType == item_id) | (ul_entry.baseType == item2_id))
                    {
                        if (ul_entry.baseType == item2_id) { index = i; }
                        foreach (UniqueItemMod m in ul_entry.mods) { mods.Add(m); }
                    }
                    i++;
                }
                //Paste
                if (index > -1) { unique_list.uniques[index].mods = mods; }
            }
        }
Hi, could you please explain how to do that?

Re: Last Epoch Save Editor

Posted: Sun Jun 04, 2023 4:20 pm
by Ash06
Exemple of Editing Unique Mods

Code: Select all

private void EditUniqueMods(int unique_id)
        {
            UnityEngine.Object obj = GetObject("UniqueList");
            System.Type type = obj.GetActualType();
            if (type == typeof(UniqueList))
            {
                UniqueList unique_list = obj.TryCast<UniqueList>();
                List<UniqueList.Entry> Uniques_List_Entry = unique_list.uniques;
                foreach (UniqueList.Entry ul_entry in Uniques_List_Entry)
                {
                    if (ul_entry.uniqueID == unique_id)
                    {
                        List<UniqueItemMod> mods = new List<UniqueItemMod>();
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.AttackSpeed,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.CriticalChance,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.CriticalMultiplier,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.Damage,
                            tags = AT.Physical
                        });

                        ul_entry.mods = mods;
                        break;
                    }
                }
            }
        }

Code: Select all

if (Input.GetKeyDown(KeyCode.F10)) { EditUniqueMods(111); } //Woven Flesh
Exemple here :
https://github.com/RCInet/LastEpoch_Extractor

Code have to be launched at the menu after UnityExplorer Initialized win F10.
You can show only 5 mods in tooltip, but you can add more

Result : crit chance not working because "type = BaseStats.ModType.INCREASED", should be "type = BaseStats.ModType.ADDED"
Image

Re: Last Epoch Save Editor

Posted: Sun Jun 04, 2023 9:13 pm
by Stazz
Ash06 wrote:
Sun Jun 04, 2023 4:20 pm
Exemple of Editing Unique Mods

Code: Select all

private void EditUniqueMods(int unique_id)
        {
            UnityEngine.Object obj = GetObject("UniqueList");
            System.Type type = obj.GetActualType();
            if (type == typeof(UniqueList))
            {
                UniqueList unique_list = obj.TryCast<UniqueList>();
                List<UniqueList.Entry> Uniques_List_Entry = unique_list.uniques;
                foreach (UniqueList.Entry ul_entry in Uniques_List_Entry)
                {
                    if (ul_entry.uniqueID == unique_id)
                    {
                        List<UniqueItemMod> mods = new List<UniqueItemMod>();
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.AttackSpeed,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.CriticalChance,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.CriticalMultiplier,
                            tags = AT.None
                        });
                        mods.Add(new UniqueItemMod
                        {
                            type = BaseStats.ModType.INCREASED,
                            value = 999,
                            maxValue = 999,
                            property = SP.Damage,
                            tags = AT.Physical
                        });

                        ul_entry.mods = mods;
                        break;
                    }
                }
            }
        }

Code: Select all

if (Input.GetKeyDown(KeyCode.F10)) { EditUniqueMods(111); } //Woven Flesh
Exemple here :
https://github.com/RCInet/LastEpoch_Extractor

Code have to be launched at the menu after UnityExplorer Initialized win F10.
You can show only 5 mods in tooltip, but you can add more

Result : crit chance not working because "type = BaseStats.ModType.INCREASED", should be "type = BaseStats.ModType.ADDED"
Image
Ok, thanks, I understand that is an example for Woven Flesh, but what do I have to do to edit another item? If you can explain in detail with screenshots or a video tutorial would be really nice. I also have no idea what do to with those codes that you posted.

Re: Last Epoch Save Editor

Posted: Mon Jun 05, 2023 9:54 am
by Ash06
With this, you can edit all Unity Game Objects and make mods

MelonLoader 5.7 : [Link]
UnityExplorer : [Link] (UnityExplorer.MelonLoader.IL2CPP.zip)
Melon Preferences Manager (link above)
ExempleMod : [Link]

1. Install MelonLoader
2. Extract UnityExplorer to your LastEpochFolder
3. Launch your game once
4. Download Visual Studio and install
5. Extract ExempleMod (source code) in a folder and launch (LastEpochMods.sln)
6. Edit Mod
7. Build (right click LastEpochMods --> Build)
8. Go to folder "ExempleMod\LastEpochMods\LastEpochMods\bin\Debug"
9. Copy "UnityLastEpochMods.dll" to "LastEpochFolder\Mods\"
10. Copy "Src" floder to "LastEpochFolder\Mods\" (For generating Database with F11)
11. Copy "Newtonsoft.Json.dll" to "LastEpochFolder\UserLibs\" (For generating Database with F11)
12. Launch your game (Wait UnityExplorer Initialized)
13. F10 (launch mods) / F11 (Generate LastEpochSaveEditor Database)
14. Select you character and play

F10 Key : in Main.cs
Remove Items Level and Class Req
Edit Drop : Can drop all items or Only Undropables
Edit Unique Mods

Code: Select all

if (Input.GetKeyDown(KeyCode.F10)) //Wait UnityEngine Initialized before
{
	//Level and Class Req
	Mods.ItemsReq.Remove(this); //Comment to Disable
	//Basic Drop
	Mods.ItemsDrop.OnlyUndropablesBasic = true; //False = unlock all / True = Only Undropable
	Mods.ItemsDrop.UnlockForAllBasic(this); //Comment to Disable
	//Unique Drop
	Mods.ItemsDrop.OnlyUndropablesUnique = true; //False = unlock all / True = Only Undropable
	Mods.ItemsDrop.UnlockForAllUniques(this); //Comment to Disable
	//Drop Level minimum for Legenday Potencial
	//Mods.ItemsDrop.SetLevelReqForLegendaryPotencial(0); //Untested //Comment to Disable
	//Unique Mods (UniqueId can be found with Debug Base Option in Save Editor)
	Mods.UniqueMods.Edit(111, Mods.UniqueMods.CustomMods_0(), this); //Wover Flesh : UniqueId = 111
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this); //Edit Here to Add Unique/Set
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this);
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this);
	
	if (!Scenes.MenuNames.Contains(Scenes.CurrentName))
	{ LoggerInstance.Msg("Go Back to Menu for actualize items Mods"); }
}
Create Custom Unique Mods (you can see it in Mobs\UniqueMods.cs)
With this code you have only one Mod (increase attack speed)
Edit for what you want

Code: Select all

public static Il2CppSystem.Collections.Generic.List<UniqueItemMod> CustomMods_1()
{
	//Create new Array of UniqueItemMod
	Il2CppSystem.Collections.Generic.List<UniqueItemMod> mods = new Il2CppSystem.Collections.Generic.List<UniqueItemMod>();
	//Add UniqueItemMod to Array
	mods.Add(new UniqueItemMod
	{
		type = BaseStats.ModType.INCREASED,
		value = 999,
		maxValue = 999,
		property = SP.AttackSpeed,
		tags = AT.None
	});
	//Add More
	
	return mods;
}
Editing Unique Mods
Add one line per item, edit UniqueId and select your CustomMod

Code: Select all

//Mods.UniqueMods.EditUniqueMods(UniqueId , UniqueMods(), this);
Mods.UniqueMods.EditUniqueMods(111, Mods.UniqueMods.CustomMods_0(), this); //Wover Flesh : UniqueId = 111

Re: Last Epoch Save Editor

Posted: Mon Jun 05, 2023 1:50 pm
by bigbambu
Thank you so so much for this Ash, it's an amazing tool.

The past iterations of the Editor allowed for maxing out specific nodes of skills, rather than the entire skill tree. Is this still possible?

i.e. I could put only 1-2 points into nodes to unlock further into each skill then, using the editor, max out said nodes.

Re: Last Epoch Save Editor

Posted: Tue Jun 06, 2023 4:58 pm
by MikeTheG
Hi Ash,

thank you for your editor. maybe i am to dumb, but how to use this editor? i cant seem to isntall it. Do i need all Parts? Part 1-3? when i open the ui exe, i have no path. So no save in this directory? where do i put the files?`

Sorry for my questions, i just cant bring it to work. Cheers ike

Re: Last Epoch Save Editor

Posted: Tue Jun 06, 2023 5:03 pm
by CyrexBabbel
Ash06 wrote:
Mon Jun 05, 2023 9:54 am
With this, you can edit all Unity Game Objects and make mods

MelonLoader 5.7 : [Link]
UnityExplorer : [Link] (UnityExplorer.MelonLoader.IL2CPP.zip)
Melon Preferences Manager (link above)
ExempleMod : [Link]

1. Install MelonLoader
2. Extract UnityExplorer to your LastEpochFolder
3. Launch your game once
4. Download Visual Studio and install
5. Extract ExempleMod (source code) in a folder and launch (LastEpochMods.sln)
6. Edit Mod
7. Build (right click LastEpochMods --> Build)
8. Go to folder "ExempleMod\LastEpochMods\LastEpochMods\bin\Debug"
9. Copy "UnityLastEpochMods.dll" to "LastEpochFolder\Mods\"
10. Copy "Src" floder to "LastEpochFolder\Mods\" (For generating Database with F11)
11. Copy "Newtonsoft.Json.dll" to "LastEpochFolder\UserLibs\" (For generating Database with F11)
12. Launch your game (Wait UnityExplorer Initialized)
13. F10 (launch mods) / F11 (Generate LastEpochSaveEditor Database)
14. Select you character and play

F10 Key : in Main.cs
Remove Items Level and Class Req
Edit Drop : Can drop all items or Only Undropables
Edit Unique Mods

Code: Select all

if (Input.GetKeyDown(KeyCode.F10)) //Wait UnityEngine Initialized before
{
	//Level and Class Req
	Mods.ItemsReq.Remove(this); //Comment to Disable
	//Basic Drop
	Mods.ItemsDrop.OnlyUndropablesBasic = true; //False = unlock all / True = Only Undropable
	Mods.ItemsDrop.UnlockForAllBasic(this); //Comment to Disable
	//Unique Drop
	Mods.ItemsDrop.OnlyUndropablesUnique = true; //False = unlock all / True = Only Undropable
	Mods.ItemsDrop.UnlockForAllUniques(this); //Comment to Disable
	//Drop Level minimum for Legenday Potencial
	//Mods.ItemsDrop.SetLevelReqForLegendaryPotencial(0); //Untested //Comment to Disable
	//Unique Mods (UniqueId can be found with Debug Base Option in Save Editor)
	Mods.UniqueMods.Edit(111, Mods.UniqueMods.CustomMods_0(), this); //Wover Flesh : UniqueId = 111
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this); //Edit Here to Add Unique/Set
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this);
	//Mods.UniqueMods.Edit(UniqueId, CustomMod, this);
	
	if (!Scenes.MenuNames.Contains(Scenes.CurrentName))
	{ LoggerInstance.Msg("Go Back to Menu for actualize items Mods"); }
}
Create Custom Unique Mods (you can see it in Mobs\UniqueMods.cs)
With this code you have only one Mod (increase attack speed)
Edit for what you want

Code: Select all

public static Il2CppSystem.Collections.Generic.List<UniqueItemMod> CustomMods_1()
{
	//Create new Array of UniqueItemMod
	Il2CppSystem.Collections.Generic.List<UniqueItemMod> mods = new Il2CppSystem.Collections.Generic.List<UniqueItemMod>();
	//Add UniqueItemMod to Array
	mods.Add(new UniqueItemMod
	{
		type = BaseStats.ModType.INCREASED,
		value = 999,
		maxValue = 999,
		property = SP.AttackSpeed,
		tags = AT.None
	});
	//Add More
	
	return mods;
}
Editing Unique Mods
Add one line per item, edit UniqueId and select your CustomMod

Code: Select all

//Mods.UniqueMods.EditUniqueMods(UniqueId , UniqueMods(), this);
Mods.UniqueMods.EditUniqueMods(111, Mods.UniqueMods.CustomMods_0(), this); //Wover Flesh : UniqueId = 111
Hey Ash,

thanks for your editor and also this little guide how to mod different stats!

I only have one question: where do i get the right property names of the stats? For example, one propertiy is named SP.CriticalMultiplier. Where can i get the name now, for lets say mana regeneration? Is this possible to get with the unity explorer ingame?

EDIT: nvmd i think i got it, in the enum SP all of them are listed, arent they?
Can you also tell me, how to get the function or how to edit for example the enemy density?

Thank you!

Re: Last Epoch Save Editor

Posted: Tue Jun 06, 2023 8:26 pm
by omarino2011
does this save editor allow my to pick skill nodes withut having the adjacent ones unlocked? so for example i can pick the last node in a given skill tree without starting in the center?

Re: Last Epoch Save Editor

Posted: Tue Jun 06, 2023 8:27 pm
by long13579
I'm stuck at step 7. Could someone help me please ?

Re: Last Epoch Save Editor

Posted: Wed Jun 07, 2023 1:23 am
by Ash06
CyrexBabbel wrote:
Tue Jun 06, 2023 5:03 pm
I only have one question: where do i get the right property names of the stats? For example, one propertiy is named SP.CriticalMultiplier. Where can i get the name now, for lets say mana regeneration? Is this possible to get with the unity explorer ingame?

Can you also tell me, how to get the function or how to edit for example the enemy density?
You can do the same as the function "Edit" in Mods\UniqueMods.cs with UnityExplorer

Code: Select all

UnityEngine.Object obj = Functions.GetObject("UniqueList");
if (type == typeof(UniqueList))
Search with UnityExplorer an object, filter by class "UniqueList", filter by name "UniqueList"
Select the result object

Code: Select all

Il2CppSystem.Collections.Generic.List<UniqueList.Entry> Uniques_List_Entry = unique_list.uniques;
Inspect UniqueList.Uniques
Inspect any UniqueList.Entry
Image

Code: Select all

ul_entry.mods = mods;
Inspect UniqueList.Entry.Mods
Inspect any UniqueItemMod

Code: Select all

mods.Add(new UniqueItemMod
            {
                type = BaseStats.ModType.INCREASED,
                value = 999,
                maxValue = 999,
                property = SP.AttackSpeed,
                tags = AT.None
            });
Inspect UniqueItemMod.Property for "property" Enum, same with type, tags, ...

With the same method, you can edit any object in Unity (not only Last Epoch)

For density :
- SpawnerPlacementRoom.intendedSpawnerDensity (maybe this, edit alls rooms at the beginning of your scene , see github)
- SpawnerPlacementManager.defaultSpawnerDensity
- SpawnerPlacementManager.alwaysRollSpawnerDensity
- MonolithTimeline.enemyDensityModifier

I Update the github with Gold Multiplier, Experience Multiplier, Item drop Multiplier
long13579 wrote:
Tue Jun 06, 2023 8:27 pm
I'm stuck at step 7. Could someone help me please ?
Image
If you don't have "UniverseLib.IL2CPP.Unhollower.dll" in "UserLibs" folder, you have to install UnityExplorer

Image
All refs (LastEpoch default folder)