示例#1
0
        public static Int32 StartInteraction(String message)
        {
            int     address = Convert.ToInt32(message);
            Process process = Process.ThisProcess();

            try
            {
                oCNpc npc = new oCNpc(process, process.ReadInt(address + 4));
                if (oCNpc.Player(process).Address == npc.Address)
                {
                    oCMobInter mobInter = new oCMobInter(process, process.ReadInt(address));

                    if (!sWorld.SpawnedVobDict.ContainsKey(mobInter.Address))
                    {
                        return(0);
                    }
                    MobInter mI = (MobInter)sWorld.SpawnedVobDict[mobInter.Address];

                    BitStream stream = Program.client.sentBitStream;
                    stream.Reset();
                    stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                    stream.Write((byte)NetworkID.MobInterMessage);
                    stream.Write((byte)MobInterNetwork.StartInteraction);
                    stream.Write(Player.Hero.ID);
                    stream.Write(mI.ID);
                    Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.ToString(), 0, "hMobInter.cs", 0);
            }
            return(0);
        }
示例#2
0
        public override void Spawn(String map, Vec3f position, Vec3f direction)
        {
            this.Map       = map;
            this.Position  = position;
            this.Direction = direction;

            spawned = true;

            if (this.Address != 0)
            {
                return;
            }

            if (this.Map != Player.Hero.Map)
            {
                return;
            }

            Process process = Process.ThisProcess();

            oCMobInter gVob = oCMobInter.Create(process);

            gVob.VobType = zCVob.VobTypes.MobInter;


            this.Address = gVob.Address;
            sWorld.SpawnedVobDict.Add(this.Address, this);

            setVobData(process, gVob);
            setMobInterData(process, gVob);

            oCGame.Game(process).World.AddVob(gVob);

            triggerMobInter(process, gVob);
        }
示例#3
0
        /// <summary>
        /// Not in use anymore!
        /// </summary>
        /// <param name="message"></param>
        /// <returns></returns>
        public static Int32 EV_CreateInteractItem(String message)
        {
            Process Process = Process.ThisProcess();

            try
            {
                int address = Convert.ToInt32(message);

                oCNpc           npc = new oCNpc(Process, Process.ReadInt(address));
                oCMsgManipulate oDD = new oCMsgManipulate(Process, Process.ReadInt(address + 4));

                oCMobInter mobinter = npc.GetInteractMob();
                MobInter   mobInt   = null;
                if (sWorld.SpawnedVobDict.ContainsKey(mobinter.Address))
                {
                    mobInt = (MobInter)sWorld.SpawnedVobDict[mobinter.Address];
                    oDD.InstanceName.Set("ITGUC_" + mobInt.UseWithItem.ID);

                    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "MobInter-Setted! " + mobInt.UseWithItem.ID, 0, "Program.cs", 0);
                }
                else
                {
                    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Not founded: MobInter! " + mobinter.Address, 0, "Program.cs", 0);
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Exception: " + ex.Message + " " + ex.StackTrace + " " + ex.Source, 0, "Program.cs", 0);
            }
            return(0);
        }
示例#4
0
        protected void setMobInterData(Process process, oCMobInter mobinter)
        {
            if (this.FocusName != null && this.FocusName.Length != 0)
            {
                mobinter.SetName(this.FocusName);
                mobinter.Name.Set(this.FocusName);
            }

            if (this.UseWithItem != null)
            {
                mobinter.SetUseWithItem("ITGUC_" + this.UseWithItem.ID);
            }
            mobinter.Rewind = false;
            if (this.TriggerTarget != null && this.TriggerTarget.Length != 0)
            {
                mobinter.TriggerTarget.Set(this.TriggerTarget);
            }
        }
示例#5
0
 protected void triggerMobInter(Process process, oCMobInter v)
 {
     if (v.State == 0 && this.State != 0)
     {
         v.OnTrigger(new zCVob(process, 0), new zCVob(process, 0));
         if (this.VobType == VobType.MobDoor)
         {
             v.GetModel().StartAnimation("T_S0_2_S1");
         }
     }
     else if (v.State != 0 && this.State == 0)
     {
         v.OnUnTrigger(new zCVob(process, 0), new zCVob(process, 0));
         if (this.VobType == VobType.MobDoor)
         {
             v.GetModel().StartAnimation("T_S1_2_S0");
         }
     }
 }
示例#6
0
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client)
        {
            int  vobID = 0, playerID = 0;
            byte mobInterTypeInt = 0;
            char mobInterKey     = '0';

            short startChangeState0 = 0, startChangeState1 = 1;

            stream.Read(out mobInterTypeInt);
            stream.Read(out playerID);
            stream.Read(out vobID);

            MobInterNetwork mobInterFlags = (MobInterNetwork)mobInterTypeInt;

            if (mobInterFlags.HasFlag(MobInterNetwork.PickLock))
            {
                stream.Read(out mobInterKey);
            }

            if (mobInterFlags.HasFlag(MobInterNetwork.StartStateChange))
            {
                stream.Read(out startChangeState0);
                stream.Read(out startChangeState1);
            }

            if (playerID == 0 || !sWorld.VobDict.ContainsKey(playerID))
            {
                throw new Exception("Player not found!");
            }
            Vob plVob = sWorld.VobDict[playerID];

            if (!(plVob is NPCProto))
            {
                throw new Exception("PlayerVob was not from type Player: " + plVob);
            }
            NPCProto player = (NPCProto)plVob;

            if (vobID == 0 || !sWorld.VobDict.ContainsKey(vobID))
            {
                throw new Exception("Vob not found!");
            }
            Vob vob = sWorld.VobDict[vobID];

            if (!(vob is MobInter))
            {
                throw new Exception("Vob was not from type MobInter: " + vob);
            }


            MobInter mob     = (MobInter)vob;
            Process  process = Process.ThisProcess();

            if (mobInterFlags == MobInterNetwork.PickLock)
            {
                if (!(vob is MobLockable))
                {
                    throw new Exception("Vob was not from type MobLockable: " + vob);
                }
            }
            else if (mobInterFlags == MobInterNetwork.OnTrigger)
            {
                mob.State = 1;
                if (mob.Address != 0)
                {
                    oCMobInter mI = new oCMobInter(process, mob.Address);

                    //mI.GetModel().StartAnimation("T_S0_2_S1");

                    mI.OnTrigger(new zCVob(process, mI.Address), new zCVob(process, player.Address));
                    //mI.State = 1;


                    //mI.StateAniID = mI.GetModel().GetAniIDFromAniName("S_S1");
                }
            }
            else if (mobInterFlags == MobInterNetwork.OnUnTrigger)
            {
                mob.State = 0;
                if (mob.Address != 0)
                {
                    oCMobInter mI = new oCMobInter(process, mob.Address);
                    //mI.GetModel().StartAnimation("T_S1_2_S0");
                    mI.OnUnTrigger(new zCVob(process, mI.Address), new zCVob(process, player.Address));
                    //mI.State = 0;


                    //mI.StateAniID = mI.GetModel().GetAniIDFromAniName("S_S0");
                    //mI.StateAniID = mI.GetModel().
                }
            }
            else if (mobInterFlags == MobInterNetwork.StartInteraction)
            {
                if (mob.Address != 0)
                {
                    new oCMobInter(process, mob.Address).StartInteraction(new oCNpc(process, player.Address));
                }
            }
            else if (mobInterFlags == MobInterNetwork.StopInteraction)
            {
                if (mob.Address != 0)
                {
                    new oCMobInter(process, mob.Address).StopInteraction(new oCNpc(process, player.Address));
                }
            }
            else if (mobInterFlags == MobInterNetwork.StartStateChange)
            {
                if (mob.Address != 0)
                {
                    oCMobInter mI = new oCMobInter(process, mob.Address);
                    mI.StartStateChange(new oCNpc(process, player.Address), startChangeState0, startChangeState1);
                }
            }
        }
示例#7
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);
        }