Skip to content
This repository has been archived by the owner on Dec 9, 2020. It is now read-only.

Commit

Permalink
Fixed #15, added support for game version 1.37
Browse files Browse the repository at this point in the history
* Fixed issue #15
* Added support for game version 1.37 while preserving support for older game versions (hopefully)
* Made loading of MaidClassTypes more future-proof (in case KISS decides to change the structure of them as well)
  • Loading branch information
denikson committed Sep 3, 2016
1 parent 8df09bb commit b50dc41
Show file tree
Hide file tree
Showing 9 changed files with 230 additions and 102 deletions.
8 changes: 5 additions & 3 deletions CM3D2.MaidFiddler.Patch/MaidFiddlerPatcher.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ public class MaidFiddlerPatcher : PatchBase
private const string TAG = "CM3D2_MAID_FIDDLER";
private AssemblyDefinition FiddlerAssembly;
public override string Name => "MaidFiddler Patcher";
public override string Version => "1.2.2.0";
public override string Version => "1.3.0.0";

public override bool CanPatch(PatcherArguments args)
{
Expand Down Expand Up @@ -215,11 +215,13 @@ public override void Patch(PatcherArguments args)

WritePreviousLine("AddMaidClassExp");
PatchFuncEnum(MaidChangeType.MaidClassType,
maidParam.GetMethod("AddMaidClassExp", typeof (MaidClassType), typeof (int)), statusChangeIDHook1);
maidParam.GetMethods("AddMaidClassExp").FirstOrDefault(m => m.Parameters.Count == 2),
statusChangeIDHook1);

WritePreviousLine("AddYotogiClassExp");
PatchFuncEnum(MaidChangeType.YotogiClassType,
maidParam.GetMethod("AddYotogiClassExp", typeof (YotogiClassType), typeof (int)), statusChangeIDHook1);
maidParam.GetMethods("AddYotogiClassExp").FirstOrDefault(m => m.Parameters.Count == 2),
statusChangeIDHook1);

WritePreviousLine("ThumShot");
maidType.GetMethod("ThumShot").InjectWith(thumbnailChangedHook, -1, 0, InjectFlags.PassInvokingInstance);
Expand Down
63 changes: 41 additions & 22 deletions CM3D2.MaidFiddler.Plugin/Gui/MaidFiddlerGUI.Cheats.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Windows.Forms;
using CM3D2.MaidFiddler.Plugin.Utils;
using param;
Expand Down Expand Up @@ -44,6 +45,24 @@ private void ResetVip(object sender, EventArgs e)
}
}

private void SetClassIsHave(Maid maid, string classDataFieldName, int classID, bool value)
{
FieldInfo classDataField = maid.Param.status_.GetType().GetField(classDataFieldName);
object classData =
classDataField.FieldType.GetMethod("GetValue", new[] {typeof (int)})
.Invoke(classDataField.GetValue(maid.Param.status_), new[] {(object) classID});
classData.GetType().GetField("is_have").SetValue(classData, value);
}

private void SetClassLevel(Maid maid, string classDataFieldName, int classID, int level)
{
FieldInfo classDataField = maid.Param.status_.GetType().GetField(classDataFieldName);
object classData =
classDataField.FieldType.GetMethod("GetValue", new[] {typeof (int)})
.Invoke(classDataField.GetValue(maid.Param.status_), new[] {(object) classID});
((SimpleExperienceSystem) classData.GetType().GetField("exp_system").GetValue(classData)).SetLevel(level);
}

private void SetClassLevel(object sender, EventArgs e)
{
Debugger.WriteLine(LogLevel.Info, "Prompting class level set.");
Expand All @@ -65,17 +84,17 @@ private void SetClassLevel(object sender, EventArgs e)
MaidInfo selected = SelectedMaid;
Maid maid = selected.Maid;

for (int maidClass = 0; maidClass < (int) EnumHelper.MaxMaidClass; maidClass++)
for (int maidClass = 0; maidClass < EnumHelper.MaxMaidClass; maidClass++)
{
maid.Param.status_.maid_class_data[maidClass].is_have = true;
maid.Param.status_.maid_class_data[maidClass].exp_system.SetLevel(val);
SetClassIsHave(maid, "maid_class_data", maidClass, true);
SetClassLevel(maid, "maid_class_data", maidClass, val);
}
selected.UpdateMaidClasses();

for (int yotogiClass = 0; yotogiClass < (int) EnumHelper.MaxYotogiClass; yotogiClass++)
for (int yotogiClass = 0; yotogiClass < EnumHelper.MaxYotogiClass; yotogiClass++)
{
maid.Param.status_.yotogi_class_data[yotogiClass].is_have = true;
maid.Param.status_.yotogi_class_data[yotogiClass].exp_system.SetLevel(val);
SetClassIsHave(maid, "yotogi_class_data", yotogiClass, true);
SetClassLevel(maid, "yotogi_class_data", yotogiClass, val);
}
selected.UpdateYotogiClasses();
}
Expand Down Expand Up @@ -130,17 +149,17 @@ private void SetMaxClassLevel(object sender, EventArgs e)
MaidInfo selected = SelectedMaid;
Maid maid = selected.Maid;

for (int maidClass = 0; maidClass < (int) EnumHelper.MaxMaidClass; maidClass++)
for (int maidClass = 0; maidClass < EnumHelper.MaxMaidClass; maidClass++)
{
maid.Param.status_.maid_class_data[maidClass].is_have = true;
maid.Param.status_.maid_class_data[maidClass].exp_system.SetLevel(10);
SetClassIsHave(maid, "maid_class_data", maidClass, true);
SetClassLevel(maid, "maid_class_data", maidClass, 10);
}
selected.UpdateMaidClasses();

for (int yotogiClass = 0; yotogiClass < (int) EnumHelper.MaxYotogiClass; yotogiClass++)
for (int yotogiClass = 0; yotogiClass < EnumHelper.MaxYotogiClass; yotogiClass++)
{
maid.Param.status_.yotogi_class_data[yotogiClass].is_have = true;
maid.Param.status_.yotogi_class_data[yotogiClass].exp_system.SetLevel(10);
SetClassIsHave(maid, "yotogi_class_data", yotogiClass, true);
SetClassLevel(maid, "yotogi_class_data", yotogiClass, 10);
}
selected.UpdateYotogiClasses();
}
Expand Down Expand Up @@ -248,17 +267,17 @@ private void SetUnlockMaxAllMaids(object sender, EventArgs e)
Debugger.WriteLine(LogLevel.Info,
$"Setting all to max for {currentMaid.Param.status.first_name} {currentMaid.Param.status.last_name}");

for (int maidClass = 0; maidClass < (int) EnumHelper.MaxMaidClass; maidClass++)
for (int maidClass = 0; maidClass < EnumHelper.MaxMaidClass; maidClass++)
{
maidParam.status_.maid_class_data[maidClass].is_have = true;
maidParam.status_.maid_class_data[maidClass].exp_system.SetLevel(10);
SetClassIsHave(currentMaid, "maid_class_data", maidClass, true);
SetClassLevel(currentMaid, "maid_class_data", maidClass, 10);
}
maidInfo.UpdateMaidClasses();

for (int yotogiClass = 0; yotogiClass < (int) EnumHelper.MaxYotogiClass; yotogiClass++)
for (int yotogiClass = 0; yotogiClass < EnumHelper.MaxYotogiClass; yotogiClass++)
{
maidParam.status_.yotogi_class_data[yotogiClass].is_have = true;
maidParam.status_.yotogi_class_data[yotogiClass].exp_system.SetLevel(10);
SetClassIsHave(currentMaid, "yotogi_class_data", yotogiClass, true);
SetClassLevel(currentMaid, "yotogi_class_data", yotogiClass, 10);
}
maidInfo.UpdateYotogiClasses();

Expand Down Expand Up @@ -400,9 +419,9 @@ private void UnlockAllItems(object sender, EventArgs e)
private void UnlockAllMaidClasses(object sender, EventArgs e)
{
MaidInfo maid = SelectedMaid;
for (MaidClassType i = 0; i < EnumHelper.MaxMaidClass; i++)
for (int i = 0; i < EnumHelper.MaxMaidClass; i++)
{
maid.SetValue(i, TABLE_COLUMN_HAS, true);
maid.SetMaidClassValue(i, TABLE_COLUMN_HAS, true);
}
}

Expand Down Expand Up @@ -433,9 +452,9 @@ private void UnlockAllValues(object sender, EventArgs e)
private void UnlockAllYotogiClasses(object sender, EventArgs e)
{
MaidInfo maid = SelectedMaid;
for (YotogiClassType i = 0; i < EnumHelper.MaxYotogiClass; i++)
for (int i = 0; i < EnumHelper.MaxYotogiClass; i++)
{
maid.SetValue(i, TABLE_COLUMN_HAS, true);
maid.SetYotogiClassValue(i, TABLE_COLUMN_HAS, true);
}
}
}
Expand Down
19 changes: 8 additions & 11 deletions CM3D2.MaidFiddler.Plugin/Gui/MaidFiddlerGUI.Classes.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
using System.Windows.Forms;
using CM3D2.MaidFiddler.Hook;
using CM3D2.MaidFiddler.Plugin.Utils;
using param;

namespace CM3D2.MaidFiddler.Plugin.Gui
{
Expand All @@ -21,9 +20,9 @@ private void InitClassesTab()
{
Translation.AddTranslationAction(column.HeaderText, s => column.HeaderText = s);
}
for (MaidClassType e = 0; e < EnumHelper.MaxMaidClass; e++)
for (int e = 0; e < EnumHelper.MaxMaidClass; e++)
{
string key = $"Maid_{EnumHelper.GetName(e)}";
string key = $"Maid_{EnumHelper.GetMaidClassName(e)}";
int i = dataGridView_maid_classes.Rows.Add(false, key, 0, 0);
Translation.AddTranslationAction(key, s => dataGridView_maid_classes.Rows[i].Cells[1].Value = s);
}
Expand All @@ -39,9 +38,9 @@ private void InitClassesTab()
{
Translation.AddTranslationAction(column.HeaderText, s => column.HeaderText = s);
}
for (YotogiClassType e = 0; e < EnumHelper.MaxYotogiClass; e++)
for (int e = 0; e < EnumHelper.MaxYotogiClass; e++)
{
string key = $"Yotogi_{EnumHelper.GetName(e)}";
string key = $"Yotogi_{EnumHelper.GetYotogiClassName(e)}";
int i = dataGridView_yotogi_classes.Rows.Add(false, key, 0, 0);
Translation.AddTranslationAction(key, s => dataGridView_yotogi_classes.Rows[i].Cells[1].Value = s);
}
Expand Down Expand Up @@ -80,19 +79,17 @@ private void UpdateMaid_YotogiClassValue<T>(DataGridView table, int col, int row
{
if (!updateMaidClassField)
{
MaidClassType type = (MaidClassType) row;
if (val is T) maid.SetValue(type, col, val);
else maid.UpdateField(MaidChangeType.MaidClassType, (int) type);
if (val is T) maid.SetMaidClassValue(row, col, val);
else maid.UpdateField(MaidChangeType.MaidClassType, row);
}
updateMaidClassField = false;
}
else if (table == dataGridView_yotogi_classes)
{
if (!updateYotogiClassField)
{
YotogiClassType type = (YotogiClassType) row;
if (val is T) maid.SetValue(type, col, val);
else maid.UpdateField(MaidChangeType.YotogiClassType, (int) type);
if (val is T) maid.SetYotogiClassValue(row, col, val);
else maid.UpdateField(MaidChangeType.YotogiClassType, row);
}
updateYotogiClassField = false;
}
Expand Down
8 changes: 4 additions & 4 deletions CM3D2.MaidFiddler.Plugin/Gui/MaidFiddlerGUI.Info.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,17 +81,17 @@ private void InitMaidInfoTab()
}
InitField(label_curr_maid_class, comboBox_current_maid_class, MaidChangeType.MaidClassType);
for (MaidClassType e = 0; e < EnumHelper.MaxMaidClass; e++)
for (int e = 0; e < EnumHelper.MaxMaidClass; e++)
{
key = $"Maid_{EnumHelper.GetName(e)}";
key = $"Maid_{EnumHelper.GetMaidClassName(e)}";
int i = comboBox_current_maid_class.Items.Add(key);
Translation.AddTranslationAction(key, s => comboBox_current_maid_class.Items[i] = s);
}
InitField(label_curr_yotogi_class, comboBox_current_yotogi_class, MaidChangeType.YotogiClassType);
for (YotogiClassType e = 0; e < EnumHelper.MaxYotogiClass; e++)
for (int e = 0; e < EnumHelper.MaxYotogiClass; e++)
{
key = $"Yotogi_{EnumHelper.GetName(e)}";
key = $"Yotogi_{EnumHelper.GetYotogiClassName(e)}";
int i = comboBox_current_yotogi_class.Items.Add(key);
Translation.AddTranslationAction(key, s => comboBox_current_yotogi_class.Items[i] = s);
}
Expand Down
Loading

0 comments on commit b50dc41

Please sign in to comment.