public void SetPerso(Perso perso) { this.perso = perso; if (perso != null && perso.brain != null && perso.brain.mind != null) { dsgMem = perso.brain.mind.dsgMem; if (dsgMem != null) { dsgVar = dsgMem.dsgVar; } else { dsgVar = perso.brain.mind.AI_model?.dsgVar; } dsgVarEntries = dsgVar.dsgVarInfos; editableEntries = new DsgVarEditableEntry[dsgVarEntries.Length]; for (int i = 0; i < editableEntries.Length; i++) { DsgVarEditableEntry editableEntry = new DsgVarEditableEntry( dsgVar.dsgVarInfos[i], dsgMem?.values?[i], dsgMem?.valuesInitial?[i], dsgVar?.defaultValues?[i]); editableEntries[i] = editableEntry; } } }
public void PrintDsgVarFromMindMem() { MapLoader l = MapLoader.Loader; if (loaded && hasStates) { if (perso.brain != null && perso.brain.mind != null) { DsgMem dsgMem = perso.brain.mind.dsgMem; if (dsgMem != null) { l.print("DsgMem.offset: " + dsgMem.offset); DsgVar dsgVar = perso.brain.mind.dsgMem.dsgVar; if (dsgVar != null) { l.print("DsgVar.offset: " + dsgVar.offset); l.print("DsgVarFromMem.amountOfInfos: " + dsgVar.amountOfInfos); l.print("DsgVarFromMem.dsgMemBufferLength: " + dsgVar.dsgMemBufferLength); int c = 0; foreach (DsgVarInfoEntry entry in dsgVar.dsgVarInfos) { l.print("Info Entry " + c + ", type " + entry.type + ", offset " + entry.offsetInBuffer + " , value " + entry.value + ", initType " + entry.initType + ", saveType " + entry.saveType); c++; } } } } } }
public override void OnInspectorGUI() { DrawDefaultInspector(); DsgVarComponent c = (DsgVarComponent)target; GUILayout.BeginVertical(); GUILayout.BeginHorizontal(); GUILayout.Label("Type/name"); GUILayout.Label("Current value"); GUILayout.Label("Initial value"); GUILayout.EndHorizontal(); foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries) { GUILayout.BeginHorizontal(); DrawDsgVarEntry(entry); GUILayout.EndHorizontal(); } if (GUILayout.Button("Print initial dsgvar assignments")) { string printResult = ""; foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine; } MapLoader.Loader.print(printResult); } if (GUILayout.Button("Print dsgvar value offsets")) { string printResult = ""; DsgMem dsgMem = c.dsgMem; foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer); printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine; } MapLoader.Loader.print(printResult); } GUILayout.EndVertical(); }
public void Write(DsgMem dsgMem, Writer writer) { Pointer.Goto(ref writer, dsgMem.memBuffer + entry.offsetInBuffer); switch (entry.type) { case DsgVarInfoEntry.DsgVarType.Boolean: writer.Write(this.valueAsBool); break; case DsgVarInfoEntry.DsgVarType.Int: writer.Write(this.valueAsInt); break; case DsgVarInfoEntry.DsgVarType.UInt: writer.Write(this.valueAsUInt); break; case DsgVarInfoEntry.DsgVarType.Short: writer.Write(this.valueAsShort); break; case DsgVarInfoEntry.DsgVarType.UShort: writer.Write(this.valueAsUShort); break; case DsgVarInfoEntry.DsgVarType.Byte: writer.Write(this.valueAsSByte); break; case DsgVarInfoEntry.DsgVarType.UByte: writer.Write(this.valueAsByte); break; case DsgVarInfoEntry.DsgVarType.Float: writer.Write(this.valueAsFloat); break; case DsgVarInfoEntry.DsgVarType.Vector: writer.Write(this.valueAsVector.x); writer.Write(this.valueAsVector.y); writer.Write(this.valueAsVector.z); break; } if (entry.initialValue != null && dsgMem.memBufferInitial != null) { Pointer.Goto(ref writer, dsgMem.memBufferInitial + entry.offsetInBuffer); switch (entry.type) { case DsgVarInfoEntry.DsgVarType.Boolean: writer.Write(this.valueAsBool_initial); break; case DsgVarInfoEntry.DsgVarType.Int: writer.Write(this.valueAsInt_initial); break; case DsgVarInfoEntry.DsgVarType.UInt: writer.Write(this.valueAsUInt_initial); break; case DsgVarInfoEntry.DsgVarType.Short: writer.Write(this.valueAsShort_initial); break; case DsgVarInfoEntry.DsgVarType.UShort: writer.Write(this.valueAsUShort_initial); break; case DsgVarInfoEntry.DsgVarType.Byte: writer.Write(this.valueAsSByte_initial); break; case DsgVarInfoEntry.DsgVarType.UByte: writer.Write(this.valueAsByte_initial); break; case DsgVarInfoEntry.DsgVarType.Float: writer.Write(this.valueAsFloat_initial); break; case DsgVarInfoEntry.DsgVarType.Vector: writer.Write(this.valueAsVector_initial.x); writer.Write(this.valueAsVector_initial.y); writer.Write(this.valueAsVector_initial.z); break; } } }
public void SetDsgMem(DsgMem dsgMem) { this.dsgMem = dsgMem; this.dsgVar = dsgMem.dsgVar; this.dsgVarEntries = this.dsgVar.dsgVarInfos; this.editableEntries = new DsgVarEditableEntry[this.dsgVarEntries.Length]; int i = 0; foreach (DsgVarInfoEntry entry in this.dsgVarEntries) { DsgVarEditableEntry editableEntry = new DsgVarEditableEntry(i, entry); editableEntries[i] = editableEntry; i++; } }
public EDsgVar GetExportableDsgVar(DsgMem dsgMem, DsgVar dsgVar, int infoIndex) { DsgVarInfoEntry infoEntry = dsgVar.dsgVarInfos[infoIndex]; EDsgVar d = new EDsgVar(); d.type = infoEntry.type; if (dsgMem.values == null || dsgMem.values[infoIndex] == null) { return(d); } DsgVarValue val = dsgMem.values[infoIndex]; d.value = GetExportableDsgVarValueString(val); return(d); }
public override void OnInspectorGUI() { DrawDefaultInspector(); DsgVarComponent c = (DsgVarComponent)target; if (c.editableEntries != null) { Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, 400f); InitDsgVarsTreeIfNeeded(rect, c); if (treeviewDsgVars.target != c) { treeviewDsgVars.target = c; treeviewDsgVars.treeModel.SetData(GetData()); treeviewDsgVars.Reload(); } treeviewDsgVars.OnGUI(rect); } //GUILayout.BeginVertical(); /*GUILayout.BeginHorizontal(); * * GUILayout.Label("Type/name"); * GUILayout.Label("Current value"); * GUILayout.Label("Initial value"); * * GUILayout.EndHorizontal(); * * foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries) { * * GUILayout.BeginHorizontal(); * * DrawDsgVarEntry(entry); * * GUILayout.EndHorizontal(); * }*/ /*if (GUILayout.Button("Print initial dsgvar assignments")) { * * string printResult = ""; * * foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { * * printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine; * } * * MapLoader.Loader.print(printResult); * }*/ if (GUILayout.Button("Print dsgvar value offsets")) { string printResult = ""; DsgMem dsgMem = c.dsgMem; foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer); printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine; } MapLoader.Loader.print(printResult); } //GUILayout.EndVertical(); }
public SerializedPersoData(List <Perso> persos) { Persos = new Dictionary <string, EPerso>(); foreach (Perso perso in persos) { EPerso ePerso = new EPerso() { Position = perso.Gao.transform.localPosition, Rotation = perso.Gao.transform.localRotation.eulerAngles, Scale = perso.Gao.transform.localScale, Family = perso.p3dData?.family?.name, AIModel = perso.brain?.mind?.AI_model.name }; if (perso.brain?.mind != null && perso.brain.mind.dsgMem != null && perso.brain.mind.dsgMem.dsgVar != null) { Mind mind = perso.brain.mind; DsgMem dsgMem = mind.dsgMem; DsgVarInfoEntry[] dsgVars = dsgMem.dsgVar.dsgVarInfos; Dictionary <string, EDsgVar> variables = new Dictionary <string, EDsgVar>(); for (int i = 0; i < dsgMem.dsgVar.dsgVarInfos.Length; i++) { variables.Add("dsgVar_" + i, GetExportableDsgVar(dsgMem, dsgMem.dsgVar, i)); } ePerso.Variables = variables; } if (perso.Gao != null && perso.Gao.transform.parent != null) { GameObject parent = perso.Gao.transform.parent.gameObject; PersoBehaviour pb = parent.GetComponent <PersoBehaviour>(); if (pb != null && pb.perso != null) { ePerso.ParentPerso = pb.perso.namePerso; } } ePerso.StandardGame = new EStandardGame() { CustomBits = perso.stdGame.customBits, IsAlwaysActive = perso.stdGame.IsAlwaysActive, IsMainActor = perso.stdGame.IsMainActor, IsAPlatform = perso.stdGame.platformType != 0 ? true:false, UpdateCheckByte = perso.stdGame.miscFlags, TransparencyZoneMin = perso.stdGame.transparencyZoneMin, TransparencyZoneMax = perso.stdGame.transparencyZoneMax, TooFarLimit = perso.stdGame.tooFarLimit }; if (!Persos.ContainsKey(perso.namePerso)) { Persos.Add(perso.namePerso, ePerso); } else { Debug.LogWarning("Warning: duplicate perso name " + perso.namePerso + ", ignoring duplicates..."); } } }
public override void OnInspectorGUI() { DrawDefaultInspector(); DsgVarComponent c = (DsgVarComponent)target; if (c.editableEntries != null) { Rect rect = GUILayoutUtility.GetRect(EditorGUIUtility.currentViewWidth, 400f); InitDsgVarsTreeIfNeeded(rect, c); if (treeviewDsgVars.target != c) { treeviewDsgVars.target = c; treeviewDsgVars.treeModel.SetData(GetData()); treeviewDsgVars.Reload(); } treeviewDsgVars.OnGUI(rect); } //GUILayout.BeginVertical(); /*GUILayout.BeginHorizontal(); * * GUILayout.Label("Type/name"); * GUILayout.Label("Current value"); * GUILayout.Label("Initial value"); * * GUILayout.EndHorizontal(); * * foreach (DsgVarComponent.DsgVarEditableEntry entry in c.editableEntries) { * * GUILayout.BeginHorizontal(); * * DrawDsgVarEntry(entry); * * GUILayout.EndHorizontal(); * }*/ /*if (GUILayout.Button("Print initial dsgvar assignments")) { * * string printResult = ""; * * foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { * * printResult += DsgVarUtil.DsgVarEntryToCSharpAssignment(dsgVarEntry.entry) + Environment.NewLine; * } * * MapLoader.Loader.print(printResult); * }*/ if (GUILayout.Button("Print dsgvar value offsets")) { string printResult = ""; DsgMem dsgMem = c.dsgMem; foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer); printResult += dsgVarEntry.entry.NiceVariableName + " " + offsetOfValue + Environment.NewLine; } MapLoader.Loader.print(printResult); } if (GUILayout.Button("Copy DsgVars as CheatEngine table")) { string printResult = ""; DsgMem dsgMem = c.dsgMem; foreach (DsgVarComponent.DsgVarEditableEntry dsgVarEntry in c.editableEntries) { Pointer offsetOfValue = (dsgMem.memBuffer + dsgVarEntry.entry.offsetInBuffer); string variableType; switch (dsgVarEntry.Type) { case DsgVarType.Float: variableType = "Float"; break; case DsgVarType.Byte: variableType = "Byte"; break; case DsgVarType.UByte: variableType = "Byte"; break; case DsgVarType.Short: variableType = "2 Bytes"; break; case DsgVarType.UShort: variableType = "2 Bytes"; break; case DsgVarType.Vector: variableType = "Float"; break; case DsgVarType.Boolean: variableType = "Byte"; break; default: variableType = "4 Bytes"; break; } for (int i = 0; i <= ((dsgVarEntry.Type == DsgVarType.Vector) ? 8 : 0); i += 4) { printResult += "<CheatEntry>" + $"<ID>0</ID>" + $"<Description>\"{dsgVarEntry.entry.NiceVariableName}\"</Description>" + $"<LastState Value=\"\" RealAddress=\"{(offsetOfValue+i).offset.ToString("X8")}\"/>" + $"<VariableType>{variableType}</VariableType>" + $"<Address>{(offsetOfValue + i).offset.ToString("X8")}</Address>" + "</CheatEntry>"; } } printResult = $"<?xml version=\"1.0\" encoding=\"utf-8\"?><CheatTable><CheatEntries>{printResult}</CheatEntries></CheatTable>"; cheatTableString = printResult; EditorGUIUtility.systemCopyBuffer = cheatTableString; } //GUILayout.EndVertical(); }