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;
            }
        }
    }
Exemple #2
0
    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++;
                        }
                    }
                }
            }
        }
    }
Exemple #3
0
    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();
    }
Exemple #4
0
            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;
                    }
                }
            }
Exemple #5
0
        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++;
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
    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();
    }
Exemple #8
0
        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...");
                }
            }
        }
Exemple #9
0
    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();
    }