League of Maidens Cheat Tutorial

Add topics here with methods, analysis, code snippets, mods etc. for a certain game that normally won't make it in the Tables or Requests sections.
x1nam82
Noobzor
Noobzor
Posts: 12
Joined: Tue Mar 16, 2021 3:48 am
Reputation: 19

Re: League of Maidens Cheat Tutorial

Post by x1nam82 »

DarKunor wrote:
Fri Mar 19, 2021 4:18 pm
well mate if you found an easier way to unlock shop item i would say share it with us so we can try it out ive just shared what ive manage to do and it work tough you probably found an easier way wich could be done without touching steaminit so just post it plz so we can all enjoy it
Ok, there's 2 part on this. The 1st is unlocking the items, which is the easy part. The hard part is making sure those custom items won't reset if you exit/restart the game. That involves some heavy IL editing.

For unlocking, go to NewUI_CC_IconItem.Update and search for:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = SteamInit.NPBOPBKMFNH[this.MyID];
As you might have guessed, just change the unlocked to true like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = true;
But I suggest to edit it like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
    	SteamInit.NPBOPBKMFNH[this.MyID] = true;
        this.unlocked = true;
That takes care for the outfit. For others, you can see the code is structured like this:

Code: Select all

	case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
		...
	case NewUI_CC_IconItem.JJPCBOAFJFJ.Race:
		...
Just do the same edit like the above. Don't be discouraged if the code is slightly different, like for hair:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				this.unlocked = SteamInit.CLHBEIOPIEI[this.MyID];
			}
or Tattoo:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			this.unlocked = SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)];
The concept is still the same. Here's those code after edit:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				SteamInit.CLHBEIOPIEI[this.MyID] = true;
				this.unlocked = true;
			}
			....

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)] = true;
			this.unlocked = true;
			....
BTW, don't rely on the all caps variable name to be the same on yours. I've done some heavy editing to the dll, so it's very unlikely that yours will be the same.

So why the extra code and not just setting all the unlocked? Well, it's to sure other part of the game, like Pose3D won't reset your customization, and related to the 2nd part of the edit, making sure your customization won't reset after game start.

The 2nd part involves heavy IL editing. If anyone is unsure about it, you could skip it. Just know that you have to at least enter the customization once after gamestart for the game to recognize the unlocked items.

Fun fact, At game start, if didn't do the 2nd part, all your customization is not lost, just not displayed, assuming you don't enter the customization screen. If you enter the customization screen, the reset became permanent.

I'll post the 2nd part separately.

JAXLOL
Noobzor
Noobzor
Posts: 8
Joined: Fri Mar 19, 2021 5:28 pm
Reputation: 1

Re: League of Maidens Cheat Tutorial

Post by JAXLOL »

x1nam82 wrote:
Fri Mar 19, 2021 6:28 pm
DarKunor wrote:
Fri Mar 19, 2021 4:18 pm
well mate if you found an easier way to unlock shop item i would say share it with us so we can try it out ive just shared what ive manage to do and it work tough you probably found an easier way wich could be done without touching steaminit so just post it plz so we can all enjoy it
Ok, there's 2 part on this. The 1st is unlocking the items, which is the easy part. The hard part is making sure those custom items won't reset if you exit/restart the game. That involves some heavy IL editing.

For unlocking, go to NewUI_CC_IconItem.Update and search for:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = SteamInit.NPBOPBKMFNH[this.MyID];
As you might have guessed, just change the unlocked to true like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = true;
But I suggest to edit it like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
    	SteamInit.NPBOPBKMFNH[this.MyID] = true;
        this.unlocked = true;
That takes care for the outfit. For others, you can see the code is structured like this:

Code: Select all

	case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
		...
	case NewUI_CC_IconItem.JJPCBOAFJFJ.Race:
		...
Just do the same edit like the above. Don't be discouraged if the code is slightly different, like for hair:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				this.unlocked = SteamInit.CLHBEIOPIEI[this.MyID];
			}
or Tattoo:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			this.unlocked = SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)];
The concept is still the same. Here's those code after edit:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				SteamInit.CLHBEIOPIEI[this.MyID] = true;
				this.unlocked = true;
			}
			....

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)] = true;
			this.unlocked = true;
			....
BTW, don't rely on the all caps variable name to be the same on yours. I've done some heavy editing to the dll, so it's very unlikely that yours will be the same.

So why the extra code and not just setting all the unlocked? Well, it's to sure other part of the game, like Pose3D won't reset your customization, and related to the 2nd part of the edit, making sure your customization won't reset after game start.

The 2nd part involves heavy IL editing. If anyone is unsure about it, you could skip it. Just know that you have to at least enter the customization once after gamestart for the game to recognize the unlocked items.

Fun fact, At game start, if didn't do the 2nd part, all your customization is not lost, just not displayed, assuming you don't enter the customization screen. If you enter the customization screen, the reset became permanent.

I'll post the 2nd part separately.
How are you getting your code to compile?
I get errors every time I try to compile.

Actez
Noobzor
Noobzor
Posts: 11
Joined: Sat Aug 18, 2018 9:52 pm
Reputation: 6

Re: League of Maidens Cheat Tutorial

Post by Actez »

x1nam82 wrote:
Fri Mar 19, 2021 6:28 pm
DarKunor wrote:
Fri Mar 19, 2021 4:18 pm
well mate if you found an easier way to unlock shop item i would say share it with us so we can try it out ive just shared what ive manage to do and it work tough you probably found an easier way wich could be done without touching steaminit so just post it plz so we can all enjoy it
Ok, there's 2 part on this. The 1st is unlocking the items, which is the easy part. The hard part is making sure those custom items won't reset if you exit/restart the game. That involves some heavy IL editing.

For unlocking, go to NewUI_CC_IconItem.Update and search for:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = SteamInit.NPBOPBKMFNH[this.MyID];
As you might have guessed, just change the unlocked to true like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
        this.unlocked = true;
But I suggest to edit it like this:

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
    	SteamInit.NPBOPBKMFNH[this.MyID] = true;
        this.unlocked = true;
That takes care for the outfit. For others, you can see the code is structured like this:

Code: Select all

	case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
		...
	case NewUI_CC_IconItem.JJPCBOAFJFJ.Race:
		...
Just do the same edit like the above. Don't be discouraged if the code is slightly different, like for hair:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				this.unlocked = SteamInit.CLHBEIOPIEI[this.MyID];
			}
or Tattoo:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			this.unlocked = SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)];
The concept is still the same. Here's those code after edit:

Code: Select all

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Hair:
			if (this.MyID == -1)
			{
				this.unlocked = true;
			}
			else
			{
				SteamInit.CLHBEIOPIEI[this.MyID] = true;
				this.unlocked = true;
			}
			....

		case NewUI_CC_IconItem.JJPCBOAFJFJ.Tattoo:
			SteamInit.PBJIILLFFBE[Mathf.Max(0, this.MyID - 1)] = true;
			this.unlocked = true;
			....
BTW, don't rely on the all caps variable name to be the same on yours. I've done some heavy editing to the dll, so it's very unlikely that yours will be the same.

So why the extra code and not just setting all the unlocked? Well, it's to sure other part of the game, like Pose3D won't reset your customization, and related to the 2nd part of the edit, making sure your customization won't reset after game start.

The 2nd part involves heavy IL editing. If anyone is unsure about it, you could skip it. Just know that you have to at least enter the customization once after gamestart for the game to recognize the unlocked items.

Fun fact, At game start, if didn't do the 2nd part, all your customization is not lost, just not displayed, assuming you don't enter the customization screen. If you enter the customization screen, the reset became permanent.

I'll post the 2nd part separately.
Thanks for the tut!! I was wondering if you happen to know how to bypass the VerifyVirtualGood to make it just return like funog1 suggested?

x1nam82
Noobzor
Noobzor
Posts: 12
Joined: Tue Mar 16, 2021 3:48 am
Reputation: 19

Re: League of Maidens Cheat Tutorial

Post by x1nam82 »

JAXLOL wrote:
Fri Mar 19, 2021 6:31 pm
How are you getting your code to compile?
I get errors every time I try to compile.
Do you edit the code with "Edit C# Method"? Check again if you missed some semicolon at the end of the line of the new code.
Actez wrote:
Fri Mar 19, 2021 6:38 pm
Thanks for the tut!! I was wondering if you happen to know how to bypass the VerifyVirtualGood to make it just return like funog1 suggested?
Well, fonug1 seemed to be more braver than me, making VerifyVirtualGood to "just return". I'm taking a more paranoid approach, I edited VerifyVirtualGoodCo as well..

So, go to SteamInit.VerifyVirtualGood, the highlight this line of code:

Code: Select all

this.JNMKFPOMOHF = base.StartCoroutine(this.VerifyVirtualGoodCo(PHLEDEBPOJI, EMKHPLIFLNN));
Now, make sure you have your mouse cursor on that line, then right-click and select "Edit IL Instruction". On the resulting window, you see several lines have been highlighted. Now, with your mouse cursor on one of the highlighted line, right-click and select "NOP Instruction". Then close the window by clicking "OK". You should left with VerifyVirtualGood but with the code line above disappeared.

For extra precaution, also look at VerifyVirtualGoodCo directly beneath VerifyVirtualGood. Look for this code:

Code: Select all

if (flag)
{
	LeagueData.instance.ResetStartPos();
	GlobalVar.BanDisplayDescription = "We apologize for the inconvenience. The application has encountered Error 1001. Data corruption has been detected. Please check to ensure that your data folder is valid.";
	SceneUnloader.instance.LoadingSimple("Ban");
}
Now highlight this line:

Code: Select all

if (flag)
Like before, right click while your cursor is on that line.

On the resulting window, you'll see there's 2 lines highlighted:

Code: Select all

ldloc.2
brfalse.s ....
Now click on ldloc.2, then select ldc.i4.0. After closing the window, you're left with code like this:

Code: Select all

if (false)
{
	LeagueData.instance.ResetStartPos();
	GlobalVar.BanDisplayDescription = "We apologize for the inconvenience. The application has encountered Error 1001. Data corruption has been detected. Please check to ensure that your data folder is valid.";
	SceneUnloader.instance.LoadingSimple("Ban");
}
So why the fuss of editing 2 methods instead of 1. VerifyVirtualGood is called whenever you switch outfit, i.e. change your appearance. It create a separate thread running VerifyVirtualGoodCo to check if you use any premium item you haven't bought for. While the 1st edit is enough to stop VerifyVirtualGoodCo to run, there's no stopping other subsystem of the game from calling VerifyVirtualGoodCo directly. While there's no subsystem do that for now, there's no guarantee that it will always be like that. So, why not remove the threat before it becoming a menace.

x1nam82
Noobzor
Noobzor
Posts: 12
Joined: Tue Mar 16, 2021 3:48 am
Reputation: 19

Re: League of Maidens Cheat Tutorial

Post by x1nam82 »

Unlocking items Part 2: Making Sure It Survives Game Restart

When the game restart, there's 2 phase on applying the saved data to your maiden. Namely SaveManager.LoadValue and LeagueData.ApplyLook. Both checks for premium items and if you have bought it. If not, it will reset the data on memory to default values, and if you enter the Customization screen, write it to the savegame. So to ensure your customization using premium items survives, those two methods need to be edited.

The goal is simple, remove all references to variables inside Steaminit. It's easier said than done.

First, LeagueData.ApplyLook, cos it's the easier of the two. Here's the resulting full code after edit. Mind you, all the caps variable names will be different in yours, so read and edit carefully.

Code: Select all

	public void ApplyLook(int JHBEGOOKAEL)
	{
			GlobalVar.CurrentLeagueCharacterData[0].BodyType = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].BodyType;
			GlobalVar.CurrentLeagueCharacterData[0].Part1Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Part1Colour;
			GlobalVar.CurrentLeagueCharacterData[0].Part2Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Part2Colour;
			GlobalVar.CurrentLeagueCharacterData[0].Part3Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Part3Colour;
			GlobalVar.CurrentLeagueCharacterData[0].Part4Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Part4Colour;
			GlobalVar.CurrentLeagueCharacterData[0].OutfitPlug = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].OutfitPlug;
			GlobalVar.CurrentLeagueCharacterData[0].F_Setting.BodyRoughness = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].BodyRoughness;

			GlobalVar.CurrentLeagueCharacterData[0].WeaponSkinID = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WeaponSkinID;
			GlobalVar.CurrentLeagueCharacterData[0].ShowWeapon = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShowWeapon;
			GlobalVar.CurrentLeagueCharacterData[0].WeaponPos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WeaponPos;
			GlobalVar.CurrentLeagueCharacterData[0].WeaponRot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WeaponRot;
			GlobalVar.CurrentLeagueCharacterData[0].WeaponScale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WeaponScale;
			GlobalVar.CurrentLeagueCharacterData[0].WeaponColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WeaponColour;

			GlobalVar.CurrentLeagueCharacterData[0].ShieldType = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShieldType;
			GlobalVar.CurrentLeagueCharacterData[0].ShowShield = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShowShield;
			GlobalVar.CurrentLeagueCharacterData[0].ShieldColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShieldColour;

			GlobalVar.CurrentLeagueCharacterData[0].WingType = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WingType;
			GlobalVar.CurrentLeagueCharacterData[0].ShowWing = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShowWing;
			GlobalVar.CurrentLeagueCharacterData[0].WingColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].WingColour;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn3 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn3;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_ChokerColor1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_ChokerColor1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_ChokerColor2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_ChokerColor2;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_ChokerColor3 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_ChokerColor3;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn3Pos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn3Pos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn3Rot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn3Rot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn3Scale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn3Scale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Glass = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Glass;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_GlassColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_GlassColour;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_GlassPos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_GlassPos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_GlassRot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_GlassRot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_GlassScale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_GlassScale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_MaskColour1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_MaskColour1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask1Pos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask1Pos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask1Rot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask1Rot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask1Scale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask1Scale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask2;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_HeadGearColor1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_HeadGearColor1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_HeadGearColor2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_HeadGearColor2;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_HeadGearColor3 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_HeadGearColor3;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask2Pos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask2Pos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask2Rot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask2Rot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Mask2Scale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Mask2Scale;

			GlobalVar.CurrentLeagueCharacterData[0].CapeID = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeID;
			GlobalVar.CurrentLeagueCharacterData[0].CapeColour1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeColour1;
			GlobalVar.CurrentLeagueCharacterData[0].CapeColour2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeColour2;
			GlobalVar.CurrentLeagueCharacterData[0].CapeColour3 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeColour3;
			GlobalVar.CurrentLeagueCharacterData[0].CapePos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapePos;
			GlobalVar.CurrentLeagueCharacterData[0].CapeRot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeRot;
			GlobalVar.CurrentLeagueCharacterData[0].CapeScale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].CapeScale;

			GlobalVar.CurrentLeagueCharacterData[0].PoseID = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].PoseID;

			GlobalVar.CurrentLeagueCharacterData[0].GauntletID = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].GauntletID;
			GlobalVar.CurrentLeagueCharacterData[0].ShowGauntlet = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].ShowGauntlet;
			GlobalVar.CurrentLeagueCharacterData[0].GauntletColor1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].GauntletColor1;
			GlobalVar.CurrentLeagueCharacterData[0].GauntletColor2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].GauntletColor2;
			GlobalVar.CurrentLeagueCharacterData[0].GauntletColor3 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].GauntletColor3;
			GlobalVar.CurrentLeagueCharacterData[0].GauntletColor4 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].GauntletColor4;

			GlobalVar.CurrentLeagueCharacterData[0].HairType = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].HairType;
			GlobalVar.CurrentLeagueCharacterData[0].HairColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].HairColour;

			GlobalVar.CurrentLeagueCharacterData[0].TattooType = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].TattooType;
			GlobalVar.CurrentLeagueCharacterData[0].Tattoo1Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Tattoo1Colour;
			GlobalVar.CurrentLeagueCharacterData[0].Tattoo2Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Tattoo2Colour;
			GlobalVar.CurrentLeagueCharacterData[0].Tattoo3Colour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Tattoo3Colour;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_HornColour1 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_HornColour1;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn1Pos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn1Pos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn1Rot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn1Rot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn1Scale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn1Scale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn2;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_HornColour2 = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_HornColour2;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn2Pos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn2Pos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn2Rot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn2Rot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_Horn2Scale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Horn2Scale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Ear = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Ear;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_EarColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_EarColour;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_EarPos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_EarPos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_EarRot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_EarRot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_EarScale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_EarScale;

			GlobalVar.CurrentLeagueCharacterData[0].Acc_Tails = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_Tails;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_TailColour = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_TailColour;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_TailsPos = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_TailsPos;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_TailsRot = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_TailsRot;
			GlobalVar.CurrentLeagueCharacterData[0].Acc_TailsScale = GlobalVar.CurrentLeagueCharacterData[0].PlayeLookData[JHBEGOOKAEL].Acc_TailsScale;

		if (GlobalVar.Player != null && !GlobalVar.Player.GetComponent<NewPlayerControl>().BoneScript.ccMode)
		{
			GlobalVar.Player.GetComponent<NewPlayerControl>().BoneScript.ApplyLook();
		}
	}
There's a bunch of lines removed from the original, mainly the if lines. Just make sure to make your code similar to that using the "Edit C# Method".

The hard part is editing SaveManager.LoadValue, cos it requires editing the IL code. And no, it won't just involves setting some fields to ldc.i4.1, cos you need to turn codes such as this:

Code: Select all

if (SteamInit.NPBOPBKMFNH[num3] || (FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form1 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form2 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.GeneralPreset) || flag)
to this

Code: Select all

if (true || (FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form1 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form2 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.GeneralPreset) || flag)
That will be a long "short" tutorial in IL for that kind of edit, and, mind you, the edit is repeated for each item categories. My dll is already filled with junk from unsuccessful edits to post it cos I can't guarantee what havoc it can do on your system.

Suffice to say, anyone who are adventurous can do this workflow:

Return to the edits made on NewUI_CC_IconItem.Update on my previous post. Remember this kind of edits

Code: Select all

    case NewUI_CC_IconItem.JJPCBOAFJFJ.Outfit:
    	SteamInit.NPBOPBKMFNH[this.MyID] = true;
        this.unlocked = true;

Right click on NPBOPBKMFNH, then "Analyze"->"get"->"Used By"->"SaveManager.LoadValue"->"Show Reference in Method (New Tab)". Then you get the corresponding line highlighted, then "Edit IL Instruction". The corresponding lines is then highlighted in IL Editor. The hard part is deciding what to edit.

For outfit, you get these lines highlighted in IL Editor:

Code: Select all

3326	2914	call	bool[] Steamworks.SteamInit::get_OutfitUnlocked()
3327	2919	ldloc.s	V_7 (7)
3328	291B	ldelem.u1
3329	291C	brtrue.s	3343 (2931) ldc.i4.1 
3330	291E	ldarg.2
3331	291F	brfalse.s	3341 (292E) ldc.i4.0 
3332	2921	ldarg.2
3333	2922	ldc.i4.1
3334	2923	beq.s	3341 (292E) ldc.i4.0 
3335	2925	ldarg.2
3336	2926	ldc.i4.2
3337	2927	ceq
3338	2929	ldc.i4.0
3339	292A	ceq
3340	292C	br.s	3344 (2932) ldloc.0 
3341	292E	ldc.i4.0
3342	292F	br.s	3344 (2932) ldloc.0 
3343	2931	ldc.i4.1
3344	2932	ldloc.0
3345	2933	or
3346	2934	brfalse.s	3351 (2940) ldloc.1 
Now remove the highlight, and only highlight the 1st 2 lines:

Code: Select all

3326	2914	call	bool[] Steamworks.SteamInit::get_OutfitUnlocked()
3327	2919	ldloc.s	V_7 (7)
Now right click, and select "NOP Instruction".

After that, click the ldelem.u1 part of the 3rd line:

Code: Select all

3328	291B	ldelem.u1
Select ldc.i4.1. The code now reads as follow:

Code: Select all

3326	2914	nop
3327	2919	nop
3328	291B	ldc.i4.1
3329	291C	brtrue.s	3343 (2931) ldc.i4.1 
3330	291E	ldarg.2
3331	291F	brfalse.s	3341 (292E) ldc.i4.0 
3332	2921	ldarg.2
3333	2922	ldc.i4.1
3334	2923	beq.s	3341 (292E) ldc.i4.0 
3335	2925	ldarg.2
3336	2926	ldc.i4.2
3337	2927	ceq
3338	2929	ldc.i4.0
3339	292A	ceq
3340	292C	br.s	3344 (2932) ldloc.0 
3341	292E	ldc.i4.0
3342	292F	br.s	3344 (2932) ldloc.0 
3343	2931	ldc.i4.1
3344	2932	ldloc.0
3345	2933	or
3346	2934	brfalse.s	3351 (2940) ldloc.1 
After closing the window by clicking OK, you'll get this:

Code: Select all

if (true || (FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form1 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form2 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.GeneralPreset) || flag)
Now repeat the process for all item categories.

There are variations of the edit above. Let's look at Tattoos:

Code: Select all

if (SteamInit.PBJIILLFFBE[Mathf.Max(0, num3 - 1)] || (FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form1 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form2 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.GeneralPreset) || flag)
Getting there by the same process like before, you'll get these il codes:

Code: Select all

3371	2967	call	bool[] Steamworks.SteamInit::get_TattooUnlocked()
3372	296C	ldc.i4.0
3373	296D	ldloc.s	V_7 (7)
3374	296F	ldc.i4.1
3375	2970	sub
3376	2971	call	int32 [UnityEngine.CoreModule]UnityEngine.Mathf::Max(int32, int32)
3377	2976	ldelem.u1
3378	2977	brtrue.s	3392 (298C) ldc.i4.1 
3379	2979	ldarg.2
3380	297A	brfalse.s	3390 (2989) ldc.i4.0 
3381	297C	ldarg.2
3382	297D	ldc.i4.1
3383	297E	beq.s	3390 (2989) ldc.i4.0 
3384	2980	ldarg.2
3385	2981	ldc.i4.2
3386	2982	ceq
3387	2984	ldc.i4.0
3388	2985	ceq
3389	2987	br.s	3393 (298D) ldloc.0 
3390	2989	ldc.i4.0
3391	298A	br.s	3393 (298D) ldloc.0 
3392	298C	ldc.i4.1
3393	298D	ldloc.0
3394	298E	or
3395	298F	brfalse.s	3400 (299B) ldloc.1 
So, highlight the 6 first line, right click, then "NOP Instruction". At the 7th line, change ldelem.u1 to ldc.i4.1. The code now reads:

Code: Select all

3371	2967	nop
3372	296C	nop
3373	296D	nop
3374	296F	nop
3375	2970	nop
3376	2971	nop
3377	2976	ldc.i4.1
3378	2977	brtrue.s	3392 (298C) ldc.i4.1 
3379	2979	ldarg.2
3380	297A	brfalse.s	3390 (2989) ldc.i4.0 
3381	297C	ldarg.2
3382	297D	ldc.i4.1
3383	297E	beq.s	3390 (2989) ldc.i4.0 
3384	2980	ldarg.2
3385	2981	ldc.i4.2
3386	2982	ceq
3387	2984	ldc.i4.0
3388	2985	ceq
3389	2987	br.s	3393 (298D) ldloc.0 
3390	2989	ldc.i4.0
3391	298A	br.s	3393 (298D) ldloc.0 
3392	298C	ldc.i4.1
3393	298D	ldloc.0
3394	298E	or
3395	298F	brfalse.s	3400 (299B) ldloc.1 
After clicking OK, you'll get:

Code: Select all

if (true || (FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form1 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.Normal_Form2 && FMLLCCPHAEE != SaveManager.MLKJGNFODND.GeneralPreset) || flag)
Do you see a pattern here?
For codes like these:

Code: Select all

if ((SteamInit. ....
The IL code will always start with:

Code: Select all

call	bool[] Steamworks.SteamInit::get_ ...
What you want to do is look for the combo of this 2 lines immediately after:

Code: Select all

ldelem.u1
brtrue.s ...
Then, select the lines from the call bool[] Steamworks:: to one line directly above ldelem.u1, and NOP them. Afterward, change the ldelem.u1 to ldc.i4.1

Let's try something harder:

Code: Select all

if (characterData.Acc_Glass > 0 && !flag && !SteamInit.JACFFEPMKKI[characterData.Acc_Glass - 1] && (FMLLCCPHAEE == SaveManager.MLKJGNFODND.Normal_Form1 || FMLLCCPHAEE == SaveManager.MLKJGNFODND.Normal_Form2))
The corresponding IL code:

Code: Select all

2438	1D6A	ldloc.1
2439	1D6B	ldfld	int32 CharacterData::Acc_Glass
2440	1D70	ldc.i4.0
2441	1D71	ble.s	2463 (1D9D) ldloc.s V_4 (4)
2442	1D73	ldloc.0
2443	1D74	brtrue.s	2463 (1D9D) ldloc.s V_4 (4)
2444	1D76	call	bool[] Steamworks.SteamInit::get_GlassUnlock()
2445	1D7B	ldloc.1
2446	1D7C	ldfld	int32 CharacterData::Acc_Glass
2447	1D81	ldc.i4.1
2448	1D82	sub
2449	1D83	ldelem.u1
2450	1D84	brtrue.s	2463 (1D9D) ldloc.s V_4 (4)
2451	1D86	ldarg.2
2452	1D87	brfalse.s	2456 (1D8D) ldloc.1 
2453	1D89	ldarg.2
2454	1D8A	ldc.i4.1
2455	1D8B	bne.un.s	2463 (1D9D) ldloc.s V_4 (4)
Remember the guideline above? Select the lines from call bool[] Steamworks.SteamInit:: to one line above the next ldelem.u1, that is line 2444 to 2448, then NOP them. Afterward, change ldelem.u1 to ldc.i4.1.

The code now looks like this:

Code: Select all

2438	1D6A	ldloc.1
2439	1D6B	ldfld	int32 CharacterData::Acc_Glass
2440	1D70	ldc.i4.0
2441	1D71	ble.s	2463 (1D95) ldloc.s V_4 (4)
2442	1D73	ldloc.0
2443	1D74	brtrue.s	2463 (1D95) ldloc.s V_4 (4)
2444	1D76	nop
2445	1D77	nop
2446	1D78	nop
2447	1D79	nop
2448	1D7A	nop
2449	1D7B	ldc.i4.1
2450	1D7C	brtrue.s	2463 (1D95) ldloc.s V_4 (4)
2451	1D7E	ldarg.2
2452	1D7F	brfalse.s	2456 (1D85) ldloc.1 
2453	1D81	ldarg.2
2454	1D82	ldc.i4.1
2455	1D83	bne.un.s	2463 (1D95) ldloc.s V_4 (4)
And the corresponding C# code:

Code: Select all

if (characterData.Acc_Glass > 0 && !flag && !true && (FMLLCCPHAEE == SaveManager.MLKJGNFODND.Normal_Form1 || FMLLCCPHAEE == SaveManager.MLKJGNFODND.Normal_Form2))
Hope this is enough to get you going.

x1nam82
Noobzor
Noobzor
Posts: 12
Joined: Tue Mar 16, 2021 3:48 am
Reputation: 19

Re: League of Maidens Cheat Tutorial

Post by x1nam82 »

Unlocking Maiden Slots

Just three slots is not enough to create your beauties, well, lets unlock all 12 of them.

Step 1: Go to NewUI_LeagueManage.InitLeagues
Find:

Code: Select all

this.Items[j].Init(num3, phickkimimk, bdlbkbbcdia, num4, num5, j >= SteamInit.MMHKGNLENEE, nlegklnaodl, (double)num6, num7 + 1, memelomdlma, eloonacoiab, this.GetLocationName(ckkinahpifm, knnldecinid));
And

Code: Select all

this.Items[j].Init(j, "EMPTY", 2, 0, 0, j >= SteamInit.MMHKGNLENEE, 0, 0.0, 1, 0f, 0, "");
Replace

Code: Select all

j >= SteamInit.MMHKGNLENEE
to 'false'

Step 2: Go to NewUI_LeagueManage.CreateLeague
Find

Code: Select all

if (SteamInit.MMHKGNLENEE < this.Items.Length)
Change to

Code: Select all

if (12 < this.Items.Length)
Step 3: Go to LeagueData.CanCreateLeague
Find

Code: Select all

if (SaveManager.instance != null && this.LeagueFiles.Count < SteamInit.MMHKGNLENEE)
Change to

Code: Select all

if (SaveManager.instance != null)
Step 4: Go to LeagueData.CreateLeague
Find

Code: Select all

if (SaveManager.instance != null && this.LeagueFiles.Count < SteamInit.MMHKGNLENEE)
Change to

Code: Select all

if (SaveManager.instance != null)
So why 4 steps, not just edit SteamInit.MMHKGNLENEE. Yeah, I tried, and it broke the game, cos it turns out that variable is obfuscated. Changing it yields to erratic value in game and you won't be able to switch characters. So it's safer this way.

BTW the edits are achievable with "Edit C# Method".
Last edited by x1nam82 on Sat Mar 20, 2021 9:14 am, edited 1 time in total.

zekks
What is cheating?
What is cheating?
Posts: 1
Joined: Fri Mar 19, 2021 9:08 pm
Reputation: 0

Re: League of Maidens Cheat Tutorial

Post by zekks »

Thanks for the great work! Would you mind looking into how/why the cheat codes aren't enabled?
DarKunor wrote:
Fri Mar 19, 2021 6:43 am
try to turn those to true sadly i already own all the pack so i cant see if its work but as far as i can see those are the 4 cheat pack nude pack size matter pack breast size and weapon pack


Image
I tried DarKunor's method and it doesn't seem to work in-game. Cheats are still locked, unfortunately.
Last edited by zekks on Fri Mar 19, 2021 10:10 pm, edited 1 time in total.

Alex985
Expert Cheater
Expert Cheater
Posts: 62
Joined: Thu Jul 27, 2017 5:09 pm
Reputation: 4

Re: League of Maidens Cheat Tutorial

Post by Alex985 »

DarKunor wrote:
Fri Mar 19, 2021 6:43 am
I tried DarkKunor's method and it doesn't seem to work in-game. Cheats are still locked, unfortunately.
Yeah, same thing happens to me

RaresShaq
What is cheating?
What is cheating?
Posts: 2
Joined: Sat Mar 13, 2021 4:18 pm
Reputation: 0

Re: League of Maidens Cheat Tutorial

Post by RaresShaq »

BongBongYeah wrote:
Fri Mar 19, 2021 9:29 am
So i found a way to change the size of Size Matters. I'll not disclose it as there are multiple ppl upset if i do so (as you could easily circumvent some checks). However as the macrophiliac i am ofc i have purchased the Cheat Pack prior to searching a few nights for a way to make the scale a bit more to my liking - worth it. (believe it or not, idc)

Also sadly, going beyond (or even) the double makes the character unplayable as the game can't load the data fast enough. Also the Camera is waaaaaaay too high up. For screenshots, however it's quite nice.

You might recognize that little fella.
Image

Was the world boss always so small?
Image
Could you help me doing that please? :roll:

x1nam82
Noobzor
Noobzor
Posts: 12
Joined: Tue Mar 16, 2021 3:48 am
Reputation: 19

Re: League of Maidens Cheat Tutorial

Post by x1nam82 »

Unlocking Cheat & Nude Packs

This will involve some IL editing.

Step 1: SteamInit.isCheatCodeAvaliable
Highlight this line:

Code: Select all

return this.PABMHLFFGHD > this.DFDCGPOCDKH[JHBEGOOKAEL] || (this.BPJKJGNDJGL.Contains(JHBEGOOKAEL) && this.DDGBJAOFOMB[0]) || (this.JDMKJALACOI.Contains(JHBEGOOKAEL) && this.DDGBJAOFOMB[1]) || (this.DFGGJPEIBFD.Contains(JHBEGOOKAEL) && this.DDGBJAOFOMB[2]) || (this.CHCMPFMFIJM.Contains(JHBEGOOKAEL) && this.DDGBJAOFOMB[3]);
Edit IL Instruction:

Code: Select all

0	0000	ldarg.0
1	0001	ldfld	int32 Steamworks.SteamInit::PABMHLFFGHD
2	0006	ldarg.0
3	0007	ldfld	int32[] Steamworks.SteamInit::DFDCGPOCDKH
4	000C	ldarg.1
5	000D	ldelem.i4
6	000E	bgt.s	49 (0071) ldc.i4.1 
7	0010	ldarg.0
8	0011	ldfld	class [mscorlib]System.Collections.Generic.List`1<int32> Steamworks.SteamInit::BPJKJGNDJGL
9	0016	ldarg.1
10	0017	callvirt	instance bool class [mscorlib]System.Collections.Generic.List`1<int32>::Contains(!0)
11	001C	brfalse.s	17 (0028) ldarg.0 
12	001E	ldarg.0
13	001F	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
14	0024	ldc.i4.0
15	0025	ldelem.u1
16	0026	brtrue.s	49 (0071) ldc.i4.1 
17	0028	ldarg.0
18	0029	ldfld	class [mscorlib]System.Collections.Generic.List`1<int32> Steamworks.SteamInit::JDMKJALACOI
19	002E	ldarg.1
20	002F	callvirt	instance bool class [mscorlib]System.Collections.Generic.List`1<int32>::Contains(!0)
21	0034	brfalse.s	27 (0040) ldarg.0 
22	0036	ldarg.0
23	0037	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
24	003C	ldc.i4.1
25	003D	ldelem.u1
26	003E	brtrue.s	49 (0071) ldc.i4.1 
27	0040	ldarg.0
28	0041	ldfld	class [mscorlib]System.Collections.Generic.List`1<int32> Steamworks.SteamInit::DFGGJPEIBFD
29	0046	ldarg.1
30	0047	callvirt	instance bool class [mscorlib]System.Collections.Generic.List`1<int32>::Contains(!0)
31	004C	brfalse.s	37 (0058) ldarg.0 
32	004E	ldarg.0
33	004F	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
34	0054	ldc.i4.2
35	0055	ldelem.u1
36	0056	brtrue.s	49 (0071) ldc.i4.1 
37	0058	ldarg.0
38	0059	ldfld	class [mscorlib]System.Collections.Generic.List`1<int32> Steamworks.SteamInit::CHCMPFMFIJM
39	005E	ldarg.1
40	005F	callvirt	instance bool class [mscorlib]System.Collections.Generic.List`1<int32>::Contains(!0)
41	0064	brfalse.s	47 (006F) ldc.i4.0 
42	0066	ldarg.0
43	0067	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
44	006C	ldc.i4.3
45	006D	ldelem.u1
46	006E	ret
47	006F	ldc.i4.0
48	0070	ret
49	0071	ldc.i4.1
50	0072	ret
Highlight all except the last 2 line, right-click, "NOP Instruction", so it'll look like this:

Code: Select all

0	0000	nop
1	0001	nop
2	0002	nop
3	0003	nop
4	0004	nop
5	0005	nop
6	0006	nop
7	0007	nop
8	0008	nop
9	0009	nop
10	000A	nop
11	000B	nop
12	000C	nop
13	000D	nop
14	000E	nop
15	000F	nop
16	0010	nop
17	0011	nop
18	0012	nop
19	0013	nop
20	0014	nop
21	0015	nop
22	0016	nop
23	0017	nop
24	0018	nop
25	0019	nop
26	001A	nop
27	001B	nop
28	001C	nop
29	001D	nop
30	001E	nop
31	001F	nop
32	0020	nop
33	0021	nop
34	0022	nop
35	0023	nop
36	0024	nop
37	0025	nop
38	0026	nop
39	0027	nop
40	0028	nop
41	0029	nop
42	002A	nop
43	002B	nop
44	002C	nop
45	002D	nop
46	002E	nop
47	002F	nop
48	0030	nop
49	0031	ldc.i4.1
50	0032	ret
close the window by clicking OK. You'll get:

Code: Select all

return true;
Step 2: SteamInit.OwnNudeCheatPack
Highlight this line:

Code: Select all

return this.DDGBJAOFOMB[2] || this.PABMHLFFGHD > this.DFDCGPOCDKH[0];
Edit IL Instruction:

Code: Select all

0	0000	ldarg.0
1	0001	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
2	0006	ldc.i4.2
3	0007	ldelem.u1
4	0008	brtrue.s	13 (001B) ldc.i4.1 
5	000A	ldarg.0
6	000B	ldfld	int32 Steamworks.SteamInit::PABMHLFFGHD
7	0010	ldarg.0
8	0011	ldfld	int32[] Steamworks.SteamInit::DFDCGPOCDKH
9	0016	ldc.i4.0
10	0017	ldelem.i4
11	0018	cgt
12	001A	ret
13	001B	ldc.i4.1
14	001C	ret
Highlight all except the last 2 line, right-click, "NOP Instruction", so it'll look like this:

Code: Select all

0	0000	nop
1	0001	nop
2	0002	nop
3	0003	nop
4	0004	nop
5	0005	nop
6	0006	nop
7	0007	nop
8	0008	nop
9	0009	nop
10	000A	nop
11	000B	nop
12	000C	nop
13	000D	ldc.i4.1
14	000E	ret
close the window by clicking OK. You'll get:

Code: Select all

return true;
Step 3: SteamInit.isCheatPackOwned
Highlight this line:

Code: Select all

return this.DDGBJAOFOMB[JHBEGOOKAEL];
Edit IL Instruction:

Code: Select all

0	0000	ldarg.0
1	0001	ldfld	bool[] Steamworks.SteamInit::DDGBJAOFOMB
2	0006	ldarg.1
3	0007	ldelem.u1
4	0008	ret
Highlight all except the last 2 line, right-click, "NOP Instruction". Then change ldelem.u1 to ldc.i4.1, so it'll look like this:

Code: Select all

0	0000	nop
1	0001	nop
2	0002	nop
3	0003	ldc.i4.1
4	0004	ret
close the window by clicking OK. You'll get:

Code: Select all

return true;
Step 4: OptionManage.FormPatreon
Edit this line using "Edit C# Method":

Code: Select all

this.PatreonBlock.SetActive(SteamInit.instance.GetPateronLevel() < 4 && !SteamInit.instance.isCheatPackOwned(0) && !SteamInit.instance.isCheatPackOwned(1) && !SteamInit.instance.isCheatPackOwned(2) && !SteamInit.instance.isCheatPackOwned(3));
to this:

Code: Select all

this.PatreonBlock.SetActive(false);
And you're done. Just be sure to edit VerifyVirtualGood like I described in my previous post just to be on the safe side.

BongBongYeah
Noobzor
Noobzor
Posts: 6
Joined: Mon Mar 08, 2021 10:29 pm
Reputation: 3

Re: League of Maidens Cheat Tutorial

Post by BongBongYeah »

JAXLOL wrote:
Fri Mar 19, 2021 5:30 pm
Can you send me how you did it?
I bought the size cheat already but it would be fun to mess with.
007 wrote:
Fri Mar 19, 2021 5:35 pm
Yeah i need this. Please Send me a Dm! :D
RaresShaq wrote:
Fri Mar 19, 2021 10:19 pm
Could you help me doing that please? :roll:
As it is out now how to unlock the Cheat Packs, i see no reason why not.

Go to LateUpdate in CharacterBoneControl
search for GlobalVar.Cheats[9] (8, 7, 2 & the else value) and change the value with IL Instructions.

Like i said, i wouldn't recommend going further than doubling the values as at max with Cheat Pack Enabled & fully buffed you won't even see the enemies anymore. It's hell of a fun and a fast leveling method to trample down enemies when you know where they are tho.

Code: Select all

if (SteamInit.instance != null && SteamInit.instance.isCheatPackOwned(0))
{
	SkillData.Instance.Skills[25].isLocked = false;
}
if (GlobalVar.Cheats[9])
{
	this.CMEGKCBKMIP = 2f;
}
else if (GlobalVar.Cheats[8])
{
	this.CMEGKCBKMIP = 1.75f;
}
else if (GlobalVar.Cheats[7])
{
	this.CMEGKCBKMIP = 1.5f;
}
else if (GlobalVar.Cheats[2])
{
	this.CMEGKCBKMIP = 1.25f;
}
else
{
	this.CMEGKCBKMIP = 1f;
}

Aliza_Everheart
Novice Cheater
Novice Cheater
Posts: 20
Joined: Sat Mar 20, 2021 1:16 am
Reputation: 1

Re: League of Maidens Cheat Tutorial

Post by Aliza_Everheart »

id it possible for someone to give me a file with access to nude mod, if you also have cheats i would enjoy that too, thank you

also the link to the dll editor isnt working

Elgordo111
What is cheating?
What is cheating?
Posts: 1
Joined: Tue Mar 16, 2021 11:36 pm
Reputation: 0

Re: League of Maidens Cheat Tutorial

Post by Elgordo111 »

As it is out now how to unlock the Cheat Packs, i see no reason why not.

Go to LateUpdate in CharacterBoneControl
search for GlobalVar.Cheats[9] (8, 7, 2 & the else value) and change the value with IL Instructions.

Like i said, i wouldn't recommend going further than doubling the values as at max with Cheat Pack Enabled & fully buffed you won't even see the enemies anymore. It's hell of a fun and a fast leveling method to trample down enemies when you know where they are tho.

Code: Select all

if (SteamInit.instance != null && SteamInit.instance.isCheatPackOwned(0))
{
 SkillData.Instance.Skills[25].isLocked = false;
}
if (GlobalVar.Cheats[9])
{
 this.CMEGKCBKMIP = 2f;
}
else if (GlobalVar.Cheats[8])
{
 this.CMEGKCBKMIP = 1.75f;
}
else if (GlobalVar.Cheats[7])
{
 this.CMEGKCBKMIP = 1.5f;
}
else if (GlobalVar.Cheats[2])
{
 this.CMEGKCBKMIP = 1.25f;
}
else
{
 this.CMEGKCBKMIP = 1f;
}

Do you need to edit each of the values or, just the 9 next to globalVar.Cheats?

Diperph
Novice Cheater
Novice Cheater
Posts: 19
Joined: Thu Mar 11, 2021 11:46 am
Reputation: 2

Re: League of Maidens Cheat Tutorial

Post by Diperph »

Raider01 wrote:
Fri Mar 19, 2021 1:31 pm
Diperph wrote:
Fri Mar 19, 2021 10:47 am
Guys do you have a copy of a fresh csharp dll? Can i have a copy please? I just forgot to copy the original file then please?
Delete your .dll
go to your Steam library page
right click on League of Maidens
select Properties
go to local files
and click on Verify integrity of game files
now Steam download you a new fresh .dll file
Thanks for the info

Diperph
Novice Cheater
Novice Cheater
Posts: 19
Joined: Thu Mar 11, 2021 11:46 am
Reputation: 2

Re: League of Maidens Cheat Tutorial

Post by Diperph »

Guys question, what is rank beside your name? How can i show it? Not the the number, its the rank sign

Post Reply

Who is online

Users browsing this forum: No registered users