public void OutputSVM_Overlay(String output)
        {
            if (this.Address == 0)
            {
                return;
            }

            Process process = Process.ThisProcess();

            zString      str = zString.Create(process, "guc_string_helper");
            zCPar_Symbol sym = zCParser.getParser(process).GetSymbol(str);

            str.Dispose();

            str = zString.Create(process, output);
            sym.SetValue(str, 0);
            str.Dispose();


            str = zString.Create(process, "MOD_OutputSVM_Overlay");
            int id = zCParser.getParser(process).GetIndex(str);

            str.Dispose();

            zCParser.getParser(process).SetInstance(zString.Create(process, "SELF"), this.Address);
            zCParser.getParser(process).SetInstance(zString.Create(process, "OTHER"), this.Address);

            zCParser.CallFunc(process, new CallValue[] {
                new IntArg(zCParser.getParser(process).Address),
                new IntArg(id)
            });
        }
Ejemplo n.º 2
0
        public static void initDefaultScripts()
        {
            String[] arr = new String[] { "GUC.Resources.Constants.d", "GUC.Resources.Classes.d", "GUC.Resources.AI_Constants.d", "GUC.Resources.Text.d",
                                          "GUC.Resources.BodyStates.d", "GUC.Resources.Focus.d", "GUC.Resources.Species.d",
                                          "GUC.Resources.NPC_Default.d", "GUC.Resources.PC_Hero.d" };

            zString str      = null;
            String  fileList = "";

            foreach (String internalFile in arr)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Parse: " + internalFile, 0, "Program.cs", 0);
                using (StreamReader sr = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(internalFile), System.Text.Encoding.Default))
                {
                    String file = getRandomScriptString(".d");
                    File.WriteAllText(file, sr.ReadToEnd(), System.Text.Encoding.Default);
                    fileList += Path.GetFileName(file.ToUpper()) + "\r\n";

                    //str = zString.Create(Process.ThisProcess(), file.ToUpper());
                    //zCParser.getParser(Process.ThisProcess()).ParseFile(str);
                    //str.Dispose();
                }
            }


            String file_FileList = getRandomScriptString(".src");

            srcFile = file_FileList;
            File.WriteAllText(file_FileList, fileList);

            str = zString.Create(Process.ThisProcess(), file_FileList.ToUpper());
            zCParser.getParser(Process.ThisProcess()).ParseSource(str);
            str.Dispose();

            str = zString.Create(Process.ThisProcess(), "C_NPC");
            zCPar_Symbol sym = zCParser.getParser(Process.ThisProcess()).GetSymbol(str);

            str.Dispose();
            sym.SetClassOffset(0x120);

            str = zString.Create(Process.ThisProcess(), "C_ITEM");
            sym = zCParser.getParser(Process.ThisProcess()).GetSymbol(str);
            str.Dispose();
            sym.SetClassOffset(0x120);

            zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Startup-Scripts-parsed!", 0, "Program.cs", 0);
        }
Ejemplo n.º 3
0
        public static Int32 hook_Symbol_GetValue(String message)
        {
            try
            {
                Process process = Process.ThisProcess();
                int     address = Convert.ToInt32(message);

                zCPar_Symbol symbol = new zCPar_Symbol(process, process.ReadInt(address));

                String name = symbol.Name.Value.Trim().ToLower();
                if (name.Equals("spellfxaniletters"))
                {
                    zString str = new zString(process, process.ReadInt(address + 4));
                    int     id  = process.ReadInt(address + 8);

                    String value = "FBT";
                    Spell  spell = null;
                    Spell.SpellDict.TryGetValue(id, out spell);
                    if (spell == null)
                    {
                        spell = new Spell();
                    }
                    value = spell.AniName;

                    //Generating Buffer with String:

                    System.Text.Encoding enc = System.Text.Encoding.Default;
                    byte[] arr = enc.GetBytes(value);

                    //Creating Pointer to char*
                    IntPtr charArr = process.Alloc((uint)arr.Length + 1);
                    if (arr.Length > 0)
                    {
                        process.Write(arr, charArr.ToInt32());
                    }

                    //Calling constructor and free char*
                    process.THISCALL <NullReturnCall>((uint)str.Address, (uint)0x004010C0, new CallValue[] { new IntArg(charArr.ToInt32()) });
                    process.Free(charArr, (uint)arr.Length + 1);


                    if (symbol_GetValue_P_Type != 1)
                    {
                        process.Write(new byte[] { 0xC2, 0x08, 0x00 }, Program.ParSymbol_GetValueHook.oldFuncInNewFunc.ToInt32());

                        symbol_GetValue_P_Type = 1;
                    }
                }
                else
                {
                    if (symbol_GetValue_P_Type == 0)
                    {
                        return(0);
                    }
                    process.Write(Program.ParSymbol_GetValueHook.oldFunc, Program.ParSymbol_GetValueHook.oldFuncInNewFunc.ToInt32());
                    symbol_GetValue_P_Type = 0;
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', ex.ToString(), 0, "Program.cs", 0);
            }
            return(0);
        }
Ejemplo n.º 4
0
        public static Int32 hook_Render_SaveMode(String message)
        {
            Process process = Process.ThisProcess();

            try
            {
                InputHooked.Update(process);



                if (InputHooked.IsPressed((int)DIK_Keys.DIK_O))
                {
                    InputHooked.receivers.Add(new Keytest());
                    //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', new oCMobLockable(process, oCNpc.Player(process).FocusVob.Address).keyInstance.Value + ";" + new oCMobLockable(process, oCNpc.Player(process).FocusVob.Address).PickLockStr.Value, 0, "Program.cs", 0);
                    //new oCMobInter(process, oCNpc.Player(process).FocusVob.Address).StartInteraction(oCNpc.Player(process));
                    //oCGame.Game(process).DiveBar.SetPos(-0x2000, -0x2000);
                    first = false;
                }


                if (InputHooked.IsPressed((int)VirtualKeys.F1) && !saveItemInstances)
                {
                    StringBuilder          sb          = new StringBuilder();
                    zCArray <zCPar_Symbol> symbolArray = zCParser.getParser(process).Table;
                    int len = symbolArray.Size;
                    //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Symbols: " + len, 0, "Program.cs", 0);
                    for (int i = 0; i < len; i++)
                    {
                        zCPar_Symbol symbol     = symbolArray.get(i);
                        String       symbolName = symbol.Name.Value.Trim().ToUpper();

                        //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Symbol found: "+symbolName+" | "+symbol.Offset, 0, "Program.cs", 0);
                        if (symbolName.StartsWith("IT"))
                        {
                            oCItem item = oCObjectFactory.GetFactory(process).CreateItem(symbolName);
                            if (item.Address == 0 || item.VobType != zCVob.VobTypes.Item || item.Visual.Value.Trim().Length == 0)
                            {
                                continue;
                            }

                            String muni = null;
                            if (item.Munition != 0)
                            {
                                oCItem munit = oCObjectFactory.GetFactory(process).CreateItem(item.Munition);
                                muni = munit.ObjectName.Value.Trim().ToUpper();
                            }

                            sb.Append("new ItemInstance(");
                            //DamageType dmgType, int totalDamage, int range,
                            sb.Append("\"" + symbolName + "\", ");
                            sb.Append("\"" + item.Name + "\", ");
                            sb.Append("\"" + item.ScemeName + "\", ");
                            sb.Append("new int[]{" + item.Protection[0] + ", " + item.Protection[1] + ", " + item.Protection[2] + ", " + item.Protection[3] + ", " + item.Protection[4] + ", " + item.Protection[5] + ", " + item.Protection[6] + ", " + item.Protection[7] + "},");
                            sb.Append("new int[]{" + item.Damage[0] + ", " + item.Damage[1] + ", " + item.Damage[2] + ", " + item.Damage[3] + ", " + item.Damage[4] + ", " + item.Damage[5] + ", " + item.Damage[6] + ", " + item.Damage[7] + "},");
                            sb.Append(item.Value + ", ");
                            sb.Append("(MainFlags)(" + item.MainFlag + "), ");
                            sb.Append("(Flags)(" + item.Flags + "), ");
                            sb.Append("(ArmorFlags)(" + item.Wear + "), ");
                            sb.Append("(DamageType)(" + item.DamageType + "), ");
                            sb.Append(item.DamageTotal + ", ");
                            sb.Append(item.Range + ", ");
                            sb.Append("\"" + item.Visual.Value.Trim() + "\", ");
                            sb.Append("\"" + item.VisualChange.Value.Trim() + "\", ");
                            sb.Append("\"" + item.Effect.Value.Trim() + "\", ");
                            sb.Append(item.VisualSkin + ", ");
                            sb.Append("(MaterialTypes)(" + item.Material + "), ");
                            if (muni != null)
                            {
                                sb.Append("ItemInstance.getItemInstance(\"" + muni + "\") ");
                            }
                            else
                            {
                                sb.Append("null");
                            }
                            sb.Append(");\r\n");
                        }
                    }


                    File.WriteAllText("cinstances.cs", sb.ToString());

                    saveItemInstances = true;
                }

                if (InputHooked.IsPressed((int)VirtualKeys.F2) && !saveMapVobs)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("MobInter mi = null;");
                    sb.AppendLine("String mapName = @\"" + oCGame.Game(process).World.WorldFileName.Value.Trim() + "\";");
                    Dictionary <zCVob.VobTypes, List <zCVob> > vobDict = oCGame.Game(process).World.getVobLists(zCVob.VobTypes.MobInter, zCVob.VobTypes.MobBed, zCVob.VobTypes.MobSwitch, zCVob.VobTypes.MobDoor, zCVob.VobTypes.MobContainer);


                    foreach (KeyValuePair <zCVob.VobTypes, List <zCVob> > vobList in vobDict)
                    {
                        foreach (zCVob vob in vobList.Value)
                        {
                            if (!VobVisual.ContainsKey(vob.Address))
                            {
                                sb.Append("//");
                            }
                            if (vob.VobType == zCVob.VobTypes.MobInter || vob.VobType == zCVob.VobTypes.MobBed || vob.VobType == zCVob.VobTypes.MobSwitch)
                            {
                                oCMobInter mi = new oCMobInter(process, vob.Address);
                                if (vob.VobType == zCVob.VobTypes.MobInter)
                                {
                                    sb.Append("mi = new MobInter(");
                                }
                                else if (vob.VobType == zCVob.VobTypes.MobBed)
                                {
                                    sb.Append("mi = new MobBed(");
                                }
                                else if (vob.VobType == zCVob.VobTypes.MobSwitch)
                                {
                                    sb.Append("mi = new MobSwitch(");
                                }
                                if (VobVisual.ContainsKey(vob.Address))
                                {
                                    sb.Append("\"" + VobVisual[vob.Address] + "\", ");
                                }
                                else
                                {
                                    sb.Append("\"\", ");
                                }
                                sb.Append("\"" + mi.Name.Value.Trim() + "\", ");
                                //sb.Append("" + mi.Rewind.ToString().ToLower() + ", ");
                                //sb.Append("" + mi.StateNum + ", ");
                                if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null)
                                {
                                    sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null)
                                {
                                    sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", ");
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n");
                            }

                            if (vob.VobType == zCVob.VobTypes.MobDoor)
                            {
                                oCMobDoor mi = new oCMobDoor(process, vob.Address);
                                sb.Append("mi = new MobDoor(");
                                if (VobVisual.ContainsKey(vob.Address))
                                {
                                    sb.Append("\"" + VobVisual[vob.Address] + "\", ");
                                }
                                else
                                {
                                    sb.Append("\"\", ");
                                }
                                sb.Append("\"" + mi.Name.Value.Trim() + "\", ");
                                sb.Append("" + mi.isLocked.ToString().ToLower() + ", ");
                                if (mi.keyInstance.Address != 0 && mi.keyInstance.getCheckedValue() != null)
                                {
                                    sb.Append("ItemInstance.getItemInstance(\"" + mi.keyInstance.Value.Trim().ToUpper() + "\"), ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.PickLockStr.Address != 0 && mi.PickLockStr.getCheckedValue() != null)
                                {
                                    sb.Append("\"" + mi.PickLockStr.Value.Trim() + "\", ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null)
                                {
                                    sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null)
                                {
                                    sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", ");
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n");
                            }

                            if (vob.VobType == zCVob.VobTypes.MobContainer)
                            {
                                oCMobContainer mi = new oCMobContainer(process, vob.Address);
                                sb.Append("mi = new MobContainer(");
                                if (VobVisual.ContainsKey(vob.Address))
                                {
                                    sb.Append("\"" + VobVisual[vob.Address] + "\", ");
                                }
                                else
                                {
                                    sb.Append("\"\", ");
                                }
                                sb.Append("\"" + mi.Name.Value.Trim() + "\", ");

                                //ItemLists:
                                sb.Append("new ItemInstance[]{");
                                List <oCItem> itemList = mi.getItemList();
                                for (int i = 0; i < itemList.Count; i++)
                                {
                                    oCItem item = itemList[i];
                                    sb.Append("ItemInstance.getItemInstance(\"" + item.ObjectName.Value.Trim().ToUpper() + "\")");
                                    if (i + 1 < itemList.Count)
                                    {
                                        sb.Append(", ");
                                    }
                                }
                                sb.Append("},");
                                sb.Append("new int[]{");
                                for (int i = 0; i < itemList.Count; i++)
                                {
                                    oCItem item = itemList[i];
                                    sb.Append("" + item.Amount);
                                    if (i + 1 < itemList.Count)
                                    {
                                        sb.Append(", ");
                                    }
                                }
                                sb.Append("},");


                                sb.Append("" + mi.isLocked.ToString().ToLower() + ", ");
                                if (mi.keyInstance.Address != 0 && mi.keyInstance.getCheckedValue() != null)
                                {
                                    sb.Append("ItemInstance.getItemInstance(\"" + mi.keyInstance.Value.Trim().ToUpper() + "\"), ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.PickLockStr.Address != 0 && mi.PickLockStr.getCheckedValue() != null)
                                {
                                    sb.Append("\"" + mi.PickLockStr.Value.Trim() + "\", ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.UseWithItem.Address != 0 && mi.UseWithItem.getCheckedValue() != null)
                                {
                                    sb.Append("ItemInstance.getItemInstance(\"" + mi.UseWithItem.Value.Trim().ToUpper() + "\"), ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }

                                if (mi.TriggerTarget.Address != 0 && mi.TriggerTarget.getCheckedValue() != null)
                                {
                                    sb.Append("\"" + mi.TriggerTarget.Value.Trim() + "\", ");
                                }
                                else
                                {
                                    sb.Append("null, ");
                                }
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionDynamic) == (int)zCVob.BitFlag0.collDetectionDynamic).ToString().ToLower() + ", ");
                                sb.Append(((mi.BitField1 & (int)zCVob.BitFlag0.collDetectionStatic) == (int)zCVob.BitFlag0.collDetectionStatic).ToString().ToLower() + "); \r\n");
                            }


                            sb.Append("mi.Spawn(mapName, new Vec3f(");
                            sb.Append(vob.TrafoObjToWorld.getPosition()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[2].ToString().Replace(",", ".") + "f), new Vec3f(");
                            sb.Append(vob.TrafoObjToWorld.getDirection()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[2].ToString().Replace(",", ".") + "f));\r\n\r\n");
                        }
                    }


                    File.WriteAllText("cVobs.cs", sb.ToString());
                    saveMapVobs = true;
                }


                if (InputHooked.IsPressed((int)VirtualKeys.F3) && !saveMapItems)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Item mi = null;");
                    sb.AppendLine("String mapName = @\"" + oCGame.Game(process).World.WorldFileName.Value.Trim() + "\";");
                    Dictionary <zCVob.VobTypes, List <zCVob> > vobDict = oCGame.Game(process).World.getVobLists(zCVob.VobTypes.Item);


                    foreach (KeyValuePair <zCVob.VobTypes, List <zCVob> > vobList in vobDict)
                    {
                        foreach (zCVob vob in vobList.Value)
                        {
                            if (vob.VobType == zCVob.VobTypes.Item)
                            {
                                oCItem mi = new oCItem(process, vob.Address);

                                sb.Append("mi = new Item(");
                                sb.Append("ItemInstance.getItemInstance(\"" + mi.ObjectName.Value.Trim().ToUpper() + "\"), ");
                                sb.Append("" + mi.Amount + ");\r\n");
                            }


                            sb.Append("mi.Spawn(mapName, new Vec3f(");
                            sb.Append(vob.TrafoObjToWorld.getPosition()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getPosition()[2].ToString().Replace(",", ".") + "f), new Vec3f(");
                            sb.Append(vob.TrafoObjToWorld.getDirection()[0].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[1].ToString().Replace(",", ".") + "f, " + vob.TrafoObjToWorld.getDirection()[2].ToString().Replace(",", ".") + "f));\r\n\r\n");
                        }
                    }


                    File.WriteAllText("cItems.cs", sb.ToString());
                    saveMapItems = true;
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.ToString(), 0, "Program.cs", 0);
            }

            return(0);
        }