예제 #1
0
        public static Int32 oCNpc_EV_UseItem(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                int address = Convert.ToInt32(message);

                int ItemMessage = process.ReadInt(address + 4);


                oCItem          item         = new oCItem(process, process.ReadInt(ItemMessage + 0x6C));
                oCMsgManipulate manipulation = new oCMsgManipulate(process, ItemMessage);

                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item UseItem: " + item.Name + " " + manipulation.InstanceName, 0, "ItemSynchro.cs", 0);

                if (item.Address != 0 && item.ObjectName.Address != 0 && item.ObjectName.Value.Trim().Length != 0)
                {
                    //for (int i = 0; i < 200; i++)
                    //{
                    //    int id = process.ReadInt(ItemMessage + i);//0x6C
                    //    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item : " + i + " | :" + id, 0, "ItemSynchro.cs", 0);
                    //}
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0);
            }
            return(0);
        }
        partial void addItemToContainer(Item item)
        {
            if (this.Address == 0)
            {
                return;
            }
            Process process = Process.ThisProcess();
            oCItem  it      = null;

            if (item.Address == 0)
            {
                it = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + item.ItemInstance.ID);
            }
            else
            {
                it = new oCItem(process, item.Address);
            }
            it.Amount = item.Amount;

            oCMobContainer mobContainer = new oCMobContainer(Process.ThisProcess(), Address);

            mobContainer.Insert(it);

            if (item.Address == 0)
            {
                item.Address = it.Address;
                sWorld.SpawnedVobDict.Add(item.Address, item);
            }
        }
예제 #3
0
        public static Int32 InitByScript(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                int address = Convert.ToInt32(message);
                itemaddr = process.ReadInt(address);
                int parserID = process.ReadInt(address + 4);
                int anz      = process.ReadInt(address + 8);


                oCItem item     = new oCItem(process, itemaddr);
                String itemname = zCParser.getParser(process).GetSymbol(parserID).Name.Value;

                if (itemname.Trim().ToUpper().StartsWith("ITGUC_".ToUpper()))
                {
                    if (!ItemInstance.ItemInstanceDict.ContainsKey(Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))))
                    {
                        return(0);
                    }
                    ItemInstance sitem = (ItemInstance)ItemInstance.ItemInstanceDict[Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))];
                    sitem.toItem(item);
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0);
            }
            return(0);
        }
예제 #4
0
        public static Int32 InitByScript_End(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                oCItem item     = new oCItem(process, itemaddr);
                String itemname = item.ObjectName.Value;

                if (itemname.Trim().ToUpper().StartsWith("ITGUC_".ToUpper()))
                {
                    if (!ItemInstance.ItemInstanceDict.ContainsKey(Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))))
                    {
                        return(0);
                    }
                    ItemInstance sitem = (ItemInstance)ItemInstance.ItemInstanceDict[Convert.ToInt32(itemname.Trim().ToUpper().Substring("ITGUC_".Length))];
                    sitem.toItem(item);
                }
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0);
            }
            return(0);
        }
예제 #5
0
        public override void Spawn(string map, Types.Vec3f position, Types.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();
            oCItem  item    = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + this.ItemInstance.ID);

            item.Amount = this.Amount;


            oCGame.Game(process).World.AddVob(item);
            this.Address = item.Address;
            sWorld.SpawnedVobDict.Add(item.Address, this);

            this.setDirection(Direction);
            this.setPosition(Position);
        }
예제 #6
0
        partial void pAfterEquip(NPCSlots slot, ItemInst item)
        {
            if (!this.IsSpawned)
            {
                return;
            }

            oCNpc  gNpc  = this.BaseInst.gVob;
            oCItem gItem = item.BaseInst.gVob;

            Gothic.Types.zString node;
            bool undraw = true;
            bool ininv  = true;

            switch (slot)
            {
            case NPCSlots.OneHanded1:
                node = oCNpc.NPCNodes.Sword;
                break;

            case NPCSlots.TwoHanded:
                node = oCNpc.NPCNodes.Longsword;
                break;

            case NPCSlots.Ranged:
                node = item.ItemType == ItemTypes.WepBow ? oCNpc.NPCNodes.Bow : oCNpc.NPCNodes.Crossbow;
                break;

            case NPCSlots.Armor:
                node = oCNpc.NPCNodes.Torso;
                gItem.VisualChange.Set(item.Definition.VisualChange);
                break;

            case NPCSlots.RightHand:
                node   = oCNpc.NPCNodes.RightHand;
                undraw = false;
                break;

            case NPCSlots.LeftHand:
                node   = oCNpc.NPCNodes.LeftHand;
                undraw = false;
                break;

            default:
                return;
            }

            if (item.ModelDef.Visual.EndsWith(".ZEN"))
            {
                ininv = false;
            }

            gItem.Material = (int)item.Material;
            gNpc.PutInSlot(node, gItem, ininv);
            PlayDrawItemSound(item, undraw);
        }
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client)
        {
            int itemID = 0, amount = 0;

            stream.Read(out itemID);
            stream.Read(out amount);

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

            if (!(vob is Item))
            {
                throw new Exception("Vob is not an Item!");
            }

            Item item = (Item)vob;

            item.Amount = amount;


            zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item-Change-Amount message!", 0, "Program.cs", 0);

            if (item.Address != 0)
            {
                Process process = Process.ThisProcess();
                oCItem  gI      = new oCItem(process, item.Address);


                if (item.Amount <= 0)
                {
                    if (item.Container is NPCProto)
                    {
                        new oCNpc(process, ((NPCProto)item.Container).Address).RemoveFromInv(gI, gI.Amount);
                    }
                    else if (item.Container is MobContainer)
                    {
                        new oCMobContainer(process, ((MobContainer)item.Container).Address).Remove(gI, gI.Amount);
                    }
                    else if (item.Container is World)
                    {
                        oCGame.Game(process).World.RemoveVob(gI);
                    }
                }

                gI.Amount = item.Amount;
            }

            if (item.Amount <= 0)
            {
                sWorld.removeVob(item);
            }
        }
예제 #8
0
        public static Int32 oCNpc_UnEquipItem(String message)
        {
            if (blockSendUnEquip)
            {
                blockSendUnEquip = false;
                return(0);
            }
            try
            {
                Process process = Process.ThisProcess();

                int    address = Convert.ToInt32(message);
                oCNpc  npc     = new oCNpc(process, process.ReadInt(address));
                oCItem item    = new oCItem(process, process.ReadInt(address + 4));


                if (npc.Address != Player.Hero.Address)
                {
                    return(0);
                }
                if (item.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(item.Address))
                {
                    return(0);
                }
                if (npc.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(npc.Address))
                {
                    return(0);
                }

                NPCProto npcP  = (NPCProto)sWorld.SpawnedVobDict[npc.Address];
                Item     itemP = (Item)sWorld.SpawnedVobDict[item.Address];

                npcP.EquippedList.Remove(itemP);

                BitStream stream = Program.client.sentBitStream;
                stream.Reset();
                stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                stream.Write((byte)NetworkID.EquipItemMessage);
                stream.Write(npcP.ID);
                stream.Write(itemP.ID);
                stream.Write(false);
                Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);


                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "UnEquip Item : " + item.Name.Value, 0, "ItemSynchro.cs", 0);
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0);
            }
            return(0);
        }
예제 #9
0
        public static Int32 ViewDraw_DrawChildren(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                return(0);


                GUC.WorldObjects.Character.Player pl = GUC.WorldObjects.Character.Player.Hero;
                if (pl == null)
                {
                    return(0);
                }

                if (pl.ItemList.Count == 0)
                {
                    return(0);
                }

                if (pl.ItemList[0].Address == 0)
                {
                    return(0);
                }
                if (oCGame.Game(process).World.Address == 0)
                {
                    return(0);
                }

                if (rndrWorld == null)
                {
                    rndrWorld = zCWorld.Create(process);
                    rndrWorld.IsInventoryWorld = true;
                }
                oCItem item = new oCItem(process, pl.ItemList[0].Address);

                zCView zV = zCView.Create(Process.ThisProcess(), 0, 0, 0x2000, 0x2000);
                zV.FillZ = true;
                zV.Blit();

                zCView.GetScreen(Process.ThisProcess()).InsertItem(zV, 0);
                item.RenderItem(rndrWorld, zV, 0.0f);
                zCView.GetScreen(Process.ThisProcess()).RemoveItem(zV);
                zV.Dispose();
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(4, 'G', ex.ToString(), 0, "ViewDraw_DrawChildren", 0);
            }
            return(0);
        }
예제 #10
0
        public override zCVob CreateVob(zCVob vob = null)
        {
            oCItem ret = (vob == null || !(vob is oCItem)) ? oCItem.Create() : (oCItem)vob;

            base.CreateVob(ret); // vob.CreateVob

            ret.Amount   = 1;
            ret.Instance = this.ID;
            //ret.ItemVisual.Set(Visual);
            //ret.Name.Set(Name);
            //ret.Material = (int)Material;

            return(ret);
        }
예제 #11
0
        public static Int32 oCNpc_UseItem(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                int    address = Convert.ToInt32(message);
                oCItem item    = new oCItem(process, process.ReadInt(address + 4));
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item : " + item.Name.Value, 0, "ItemSynchro.cs", 0);
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0);
            }
            return(0);
        }
예제 #12
0
        public static Int32 DoTakeVob(String message)
        {
            try{
                if (dontSend)
                {
                    dontSend = false;
                    return(0);
                }


                int     address = Convert.ToInt32(message);
                Process process = Process.ThisProcess();

                if (oCNpc.Player(process).Address == process.ReadInt(address))
                {
                    oCItem vob = new oCItem(process, process.ReadInt(address + 4));

                    if (!sWorld.SpawnedVobDict.ContainsKey(vob.Address))
                    {
                        return(0);
                    }

                    Vob sWVob = sWorld.SpawnedVobDict[vob.Address];
                    if (!(sWVob is Item))
                    {
                        return(0);
                    }
                    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "TakeVob: " + sWVob.ID + ", " + vob.Address + " | " + sWVob.Address, 0, "Program.cs", 0);

                    Item swItem = (Item)sWVob;
                    Player.Hero.TakeItem(swItem);

                    BitStream stream = Program.client.sentBitStream;
                    stream.Reset();
                    stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                    stream.Write((byte)NetworkID.TakeItemMessage);
                    stream.Write(Player.Hero.ID);
                    stream.Write(swItem.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', "Exception: " + ex.Message + " " + ex.StackTrace + " " + ex.Source, 0, "Program.cs", 0);
            }
            return(0);
        }
예제 #13
0
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client)
        {
            int plID = 0, itemID = 0;

            stream.Read(out plID);
            stream.Read(out itemID);

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

            if (!(vob is NPCProto))
            {
                throw new Exception("Vob is not an NPC!");
            }

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

            if (!(item is Item))
            {
                throw new Exception("Vob is not an Item!");
            }

            NPCProto proto = (NPCProto)vob;

            proto.DropItem((Item)item);



            if (vob.Address == 0 || item.Address == 0)
            {
                return;
            }
            Process process = Process.ThisProcess();
            oCNpc   npc     = new oCNpc(process, vob.Address);
            oCItem  it      = new oCItem(process, item.Address);

            hNpc.dontSend = true;
            npc.DoDropVob(it);
        }
        partial void addItemToContainer(Item item)
        {
            if (this.Address == 0)
            {
                return;
            }
            Process process = Process.ThisProcess();
            oCItem  it      = oCObjectFactory.GetFactory(process).CreateItem("ITGUC_" + item.ItemInstance.ID);

            it.Amount = item.Amount;
            oCNpc npc = new oCNpc(Process.ThisProcess(), Address);

            npc.PutInInv(it);

            item.Address = it.Address;
            sWorld.SpawnedVobDict.Add(item.Address, item);
        }
예제 #15
0
        partial void pBeforeUnequip(ItemInst item)
        {
            if (!this.IsSpawned)
            {
                return;
            }

            oCNpc  gNpc  = this.BaseInst.gVob;
            oCItem gItem = item.BaseInst.gVob;

            Gothic.Types.zString node;
            switch ((NPCSlots)item.BaseInst.Slot)
            {
            case NPCSlots.OneHanded1:
                node = oCNpc.NPCNodes.Sword;
                break;

            case NPCSlots.TwoHanded:
                node = oCNpc.NPCNodes.Longsword;
                break;

            case NPCSlots.Ranged:
                node = item.ItemType == ItemTypes.WepBow ? oCNpc.NPCNodes.Bow : oCNpc.NPCNodes.Crossbow;
                break;

            case NPCSlots.Armor:
                node = oCNpc.NPCNodes.Torso;
                break;

            case NPCSlots.RightHand:
                node = oCNpc.NPCNodes.RightHand;
                break;

            case NPCSlots.LeftHand:
                node = oCNpc.NPCNodes.LeftHand;
                break;

            default:
                return;
            }

            gNpc.RemoveFromSlot(node, false, true);
        }
예제 #16
0
        public void Read(RakNet.BitStream stream, RakNet.Packet packet, Client client)
        {
            int playerID = 0;

            stream.Read(out playerID);

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

            if (!(vob is NPCProto))
            {
                throw new Exception("Vob is not an NPCProto! " + playerID);
            }

            NPCProto npc = (NPCProto)vob;

            if (npc.Address != 0)
            {
                foreach (Item item in npc.ItemList)
                {
                    Process process = Process.ThisProcess();
                    oCItem  gI      = new oCItem(process, item.Address);

                    oCNpc n = new oCNpc(process, npc.Address);
                    hNpc.blockSendUnEquip = true;
                    n.UnequipItem(gI);
                    n.RemoveFromInv(gI, gI.Amount);


                    gI.Amount = 0;
                }
            }

            foreach (Item item in npc.ItemList)
            {
                sWorld.removeVob(item);
            }
            npc.ItemList.Clear();
        }
예제 #17
0
        public static Int32 oCNpc_EV_UseItemToState(String message)
        {
            try
            {
                Process process = Process.ThisProcess();

                int address = Convert.ToInt32(message);

                int ItemMessage = process.ReadInt(address + 4);

                oCNpc           npc          = new oCNpc(process, process.ReadInt(address));
                oCItem          item         = new oCItem(process, process.ReadInt(ItemMessage + 0x6C));
                oCMsgManipulate manipulation = new oCMsgManipulate(process, ItemMessage);


                UseItemNPC = npc;
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0);
            }
            return(0);
        }
        public void setSlotItem(int slot, Item item)
        {
            //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set Slot Item 1: " + Slots[slot] + "; NewItem: "+item + " ", 0, "NPCProto.Client.cs", 0);
            Item oldItem = Slots[slot];

            Slots[slot] = item;

            //if (oldItem == item)
            //    return;

            if (this.Address != 0)
            {
                Process process = Process.ThisProcess();
                oCNpc   npc     = new oCNpc(process, this.Address);

                if (Slots[slot] == null || oldItem != null)
                {
                    zString slotString = oCNpc.getSlotString(process, slot);
                    oCItem  oldITem    = npc.GetSlotItem(slotString);
                    if (oldITem.Address != 0)
                    {
                        npc.RemoveFromSlot(slotString, oldITem.Instanz, oldITem.Amount);
                    }
                }

                if (Slots[slot] != null)
                {
                    if (Slots[slot].Address == 0)
                    {
                        throw new Exception("Adress can't be null if player using it is spawned!");
                    }
                    //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set Slot Item: "+Slots[slot]+" "+Slots[slot].ItemInstance.Name, 0, "NPCProto.Client.cs", 0);
                    npc.PutInSlot(oCNpc.getSlotString(process, slot), new oCItem(process, Slots[slot].Address), 1);
                }
            }
        }
예제 #19
0
        public static Int32 oCItemContainer_Insert(String message)
        {
            try
            {
                Process process = Process.ThisProcess();
                if (!ItemContainerBlocked && itemsUntilBlock == 0)
                {
                    process.Write(new byte[] { 0x33, 0xC0, 0xC2, 0x04, 0x00 }, Program.insertItemToList.oldFuncInNewFunc.ToInt32());
                    ItemContainerBlocked = true;
                }
                else if (itemsUntilBlock != 0)
                {
                    itemsUntilBlock -= 1;
                }



                int address = Convert.ToInt32(message);


                oCNpc           player = oCNpc.Player(process);
                oCItemContainer oIC    = new oCItemContainer(process, process.ReadInt(address));
                oCItem          item   = new oCItem(process, process.ReadInt(address + 4));


                oCMobContainer mC = new oCMobContainer(process, player.GetInteractMob().Address);
                if (!sWorld.SpawnedVobDict.ContainsKey(mC.Address))
                {
                    return(0);
                }
                Vob mobContainerVob = sWorld.SpawnedVobDict[mC.Address];
                if (!(mobContainerVob is MobContainer))
                {
                    return(0);
                }
                MobContainer mobContainer = (MobContainer)mobContainerVob;
                if (!sWorld.SpawnedVobDict.ContainsKey(item.Address))//Multislot-Item
                {
                    BitStream stream = Program.client.sentBitStream;
                    stream.Reset();
                    stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                    stream.Write((byte)NetworkID.ContainerItemChangedMessage);
                    stream.Write((byte)ContainerItemChanged.itemInsertedNew);
                    stream.Write(Player.Hero.ID);
                    stream.Write(mobContainerVob.ID);
                    stream.Write(ItemInstance.getIndex(item.ObjectName.Value.Trim()));
                    Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
                }
                else//Normal-Item:
                {
                    //mobContainer.addItem((Item)sWorld.SpawnedVobDict[item.Address]);

                    Item      it     = (Item)sWorld.SpawnedVobDict[item.Address];
                    BitStream stream = Program.client.sentBitStream;
                    stream.Reset();
                    stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                    stream.Write((byte)NetworkID.ContainerItemChangedMessage);
                    stream.Write((byte)ContainerItemChanged.itemInsertedOld);
                    stream.Write(Player.Hero.ID);
                    stream.Write(mobContainerVob.ID);
                    stream.Write(it.ID);
                    Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
                }



                zERROR.GetZErr(process).Report(2, 'G', "Insert Item, Item: " + sWorld.SpawnedVobDict.ContainsKey(process.ReadInt(address + 4)) + " | " + item.Address + " | " + item.ObjectName.Value + "| " + item.Name.Value + " | " + item.Visual.Value + " |" + " Amount: " + item.Amount, 0, "Itemsynchro.cs", 0);
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.Source + ": " + ex.Message + " " + ex.StackTrace, 0, "hItemContainer.cs", 0);
            }
            return(0);
        }
예제 #20
0
        public void toItem(oCItem item)
        {
            ItemInstanceParameters p = getParams();


            //Setting up defaults:
            //item.VTBL = 8636420;
            //item.ObjectName.Set("ITGUC_" + ID);



            item.Name.Set(this.Name);


            if (p.HasFlag(ItemInstanceParameters.scemeName))
            {
                item.ScemeName.Set(this.ScemeName);
            }
            for (int i = 0; i < 8; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.protection0 << i)))
                {
                    item.setProtection(i, Protection[i]);
                }
            }
            if (p.HasFlag(ItemInstanceParameters.damageType))
            {
                item.DamageType = (int)DamageType;
            }
            if (p.HasFlag(ItemInstanceParameters.totalDamage))
            {
                item.DamageTotal = TotalDamage;
            }
            for (int i = 0; i < 8; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.damages0 << i)))
                {
                    item.setDamage(i, Damages[i]);
                }
            }

            if (p.HasFlag(ItemInstanceParameters.range))
            {
                item.Range = Range;
            }

            for (int i = 0; i < conditionAttributes.Length; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.conditionAttributes0 << i)))
                {
                    item.setConditionalAttribute(i, ConditionAttributes[i]);
                }
            }
            for (int i = 0; i < conditionValues.Length; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.conditionValues0 << i)))
                {
                    item.setConditionalValue(i, ConditionValues[i]);
                }
            }

            if (p.HasFlag(ItemInstanceParameters.value))
            {
                item.Value = Value;
            }

            if (p.HasFlag(ItemInstanceParameters.mainFlags))
            {
                item.MainFlag = (int)MainFlags;
            }

            if (p.HasFlag(ItemInstanceParameters.flags) || p.HasFlag(ItemInstanceParameters.mainFlags))
            {
                item.Flags = (int)Flags | (int)MainFlags;
            }

            if (p.HasFlag(ItemInstanceParameters.wear))
            {
                item.Wear = (int)Wear;
            }

            if (p.HasFlag(ItemInstanceParameters.materials))
            {
                item.Material = (int)Materials;
            }

            if (p.HasFlag(ItemInstanceParameters.description))
            {
                item.Description.Set(Description);
            }


            for (int i = 0; i < text.Length; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.text0 << i)))
                {
                    item.setText(i, Text[i]);
                }
            }
            for (int i = 0; i < count.Length; i++)
            {
                if (p.HasFlag((ItemInstanceParameters)((ulong)ItemInstanceParameters.count0 << i)))
                {
                    item.setCount(i, Count[i]);
                }
            }

            if (p.HasFlag(ItemInstanceParameters.visual))
            {
                item.Visual.Set(Visual.ToUpper());
            }
            if (p.HasFlag(ItemInstanceParameters.visual_Change))
            {
                item.VisualChange.Set(Visual_Change.Trim());
            }


            if (p.HasFlag(ItemInstanceParameters.effect))
            {
                item.Effect.Set(Effect.ToUpper().Trim());
            }

            if (p.HasFlag(ItemInstanceParameters.visual_skin))
            {
                item.VisualSkin = Visual_skin;
            }
            if (p.HasFlag(ItemInstanceParameters.munition))
            {
                Process process = Process.ThisProcess();
                item.Munition = zCParser.getParser(process).GetIndex("ITGUC_" + munition.ID);////item.Munition =
                //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Set munition: " + munition.ID + " | " + item.Munition + "||" + munition.Visual + " " + this.Visual, 0, "Program.cs", 0);
            }

            if (p.HasFlag(ItemInstanceParameters.Spell))
            {
                item.Spell = Spell.ID;
            }
            item.CreateVisual();
        }
예제 #21
0
        public void Read(BitStream stream, Packet packet, Client client)
        {
            Vec3f locHit = null, flydir = null;
            int   victim = 0, attacker = 0, weaponMode = 0, spellID = 0, weapon = 0;
            byte  sendFlags, damageMode;

            stream.Read(out victim);
            stream.Read(out damageMode);
            stream.Read(out sendFlags);

            if ((sendFlags &= 1) == 1)
            {
                stream.Read(out locHit);
            }
            if ((sendFlags &= 2) == 2)
            {
                stream.Read(out flydir);
            }
            if ((sendFlags &= 4) == 4)
            {
                stream.Read(out attacker);
            }
            if ((sendFlags &= 8) == 8)
            {
                stream.Read(out weaponMode);
            }
            if ((sendFlags &= 16) == 16)
            {
                stream.Read(out spellID);
            }
            if ((sendFlags &= 32) == 32)
            {
                stream.Read(out weapon);
            }


            Process Process = Process.ThisProcess();

            oCNpc  victimNPC = null, attackerNPC = null;
            oCItem weaponItem = null;

            if (victim != 0)
            {
                victimNPC = new oCNpc(Process, sWorld.VobDict[victim].Address);
            }
            if (attacker != 0)
            {
                attackerNPC = new oCNpc(Process, sWorld.VobDict[attacker].Address);
            }
            if (weapon != 0)
            {
                weaponItem = new oCItem(Process, sWorld.VobDict[weapon].Address);
            }

            IntPtr ptr = Process.Alloc(500);

            byte[] arr = new byte[500];
            Process.Write(arr, ptr.ToInt32());

            oSDamageDescriptor oDD = new oSDamageDescriptor(Process, ptr.ToInt32());

            oDD.AttackerNPC = attackerNPC;
            oDD.AttackerVob = attackerNPC;
            oDD.Weapon      = weaponItem;
            oDD.ModeDamage  = damageMode;
            oDD.ModeWeapon  = weaponMode;


            victimNPC.OnDamage(oDD);


            Process.Free(ptr, 500);
        }
        public static void Write(NPCProto proto)
        {
            if (proto.Address == 0)
            {
                return;
            }
            Process process = Process.ThisProcess();
            oCNpc   npc     = new oCNpc(process, proto.Address);

            if (npc.AniCtrl.Address == 0)
            {
                return;
            }

            NPCChangedFlags changeFlags = 0;

            oCItem iArmor = npc.GetEquippedArmor();
            Item   armor  = null;

            oCItem iWeapon = npc.GetEquippedMeleeWeapon();
            Item   weapon  = null;

            oCItem iRangeWeapon = npc.GetEquippedRangedWeapon();
            Item   rangeWeapon  = null;

            Vob      focusVobID      = null;
            NPCProto enemyVobID      = null;
            MobInter MobInterID      = null;
            int      mobInterAddress = npc.GetInteractMob().Address;

            if (npc.FocusVob.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(npc.FocusVob.Address))
            {
                focusVobID = sWorld.SpawnedVobDict[npc.FocusVob.Address];
            }
            if (npc.Enemy.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(npc.Enemy.Address))
            {
                enemyVobID = (NPCProto)sWorld.SpawnedVobDict[npc.Enemy.Address];
            }
            if (mobInterAddress != 0 && sWorld.SpawnedVobDict.ContainsKey(mobInterAddress))
            {
                MobInterID = (MobInter)sWorld.SpawnedVobDict[mobInterAddress];
            }


            Item selectedSpell = null;

            if (npc.MagBook != null && npc.MagBook.Address != 0)
            {
                oCItem spellItem = npc.MagBook.GetSpellItem(npc.MagBook.GetSelectedSpellNr());
                if (spellItem != null && spellItem.Address != 0)
                {
                    Vob spellVob = null;
                    sWorld.SpawnedVobDict.TryGetValue(spellItem.Address, out spellVob);
                    selectedSpell = (Item)spellVob;
                }
            }

            if (iArmor.Address != 0)
            {
                armor = (Item)sWorld.SpawnedVobDict[iArmor.Address];
            }
            if (iWeapon.Address != 0)
            {
                weapon = (Item)sWorld.SpawnedVobDict[iWeapon.Address];
            }
            if (iRangeWeapon.Address != 0)
            {
                rangeWeapon = (Item)sWorld.SpawnedVobDict[iRangeWeapon.Address];
            }

            int weaponMode = npc.WeaponMode;

            Item[] SlotItems = new Item[9];
            for (int i = 0; i < SlotItems.Length; i++)
            {
                oCItem slItem = npc.GetSlotItem(oCNpc.getSlotString(process, i));
                if (slItem.Address != 0 && sWorld.SpawnedVobDict.ContainsKey(slItem.Address))
                {
                    SlotItems[i] = (Item)sWorld.SpawnedVobDict[slItem.Address];
                }
            }


            bool isdead = false;

            if (npc.IsDead() > 0)
            {
                isdead = true;
            }
            bool isUnconscious = false;

            if (npc.IsUnconscious() > 0)
            {
                isUnconscious = true;
            }
            bool isSwimming = false;

            if (npc.AniCtrl.GetWalkModeString() == null || npc.AniCtrl.GetWalkModeString().Trim().ToLower().Length == 0)
            {
                isSwimming = true;
            }

            zString str        = npc.GetSectorNameVobIsIn();
            String  portalRoom = "";

            if (str.Address != 0)
            {
                portalRoom = str.Value.Trim().ToLower();
            }



            //Setting ChangeFlags:
            if (proto.Armor != armor)
            {
                changeFlags |= NPCChangedFlags.EQUIP_ARMOR;
            }
            if (proto.Weapon != weapon)
            {
                changeFlags |= NPCChangedFlags.EQUIP_NW;
            }
            if (proto.RangeWeapon != rangeWeapon)
            {
                changeFlags |= NPCChangedFlags.EQUIP_RW;
            }
            if (proto.WeaponMode != weaponMode)
            {
                changeFlags |= NPCChangedFlags.WeaponMode;
            }
            for (int i = 0; i < SlotItems.Length; i++)
            {
                if (proto.Slots[i] != SlotItems[i])
                {
                    changeFlags |= (NPCChangedFlags)((int)NPCChangedFlags.SLOT1 << i);
                }
            }
            if (proto.FocusVob != focusVobID)
            {
                changeFlags |= NPCChangedFlags.VOBFOCUS;
            }
            if (proto.Enemy != enemyVobID)
            {
                changeFlags |= NPCChangedFlags.ENEMYFOCUS;
            }
            if (proto.MobInter != MobInterID)
            {
                changeFlags |= NPCChangedFlags.MOBINTERACT;
            }


            if (proto.IsDead != isdead)
            {
                changeFlags |= NPCChangedFlags.ISDEAD;
            }
            if (proto.IsUnconcious != isUnconscious)
            {
                changeFlags |= NPCChangedFlags.ISUNCONSCIOUS;
            }
            if (proto.IsSwimming != isSwimming)
            {
                changeFlags |= NPCChangedFlags.ISSWIMMING;
            }

            if (!proto.PortalRoom.Equals(portalRoom))
            {
                changeFlags |= NPCChangedFlags.PORTALROOM;
            }
            if (selectedSpell != proto.ActiveSpell)
            {
                changeFlags |= NPCChangedFlags.ACTIVE_SPELL;
            }

            if (changeFlags == 0)
            {
                return;
            }
            //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "ChangeFlags: " + changeFlags, 0, "Client.cs", 0);
            //Writing Data:
            BitStream stream = Program.client.sentBitStream;

            stream.Reset();
            stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
            stream.Write((byte)NetworkID.NPCUpdateMessage);
            stream.Write(proto.ID);
            stream.Write((int)changeFlags);

            //Equipment:
            if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_ARMOR))
            {
                proto.Armor = armor;
                if (proto.Armor == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(proto.Armor.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_NW))
            {
                proto.Weapon = weapon;
                if (proto.Weapon == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(proto.Weapon.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.EQUIP_RW))
            {
                proto.RangeWeapon = rangeWeapon;
                if (proto.RangeWeapon == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(proto.RangeWeapon.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.WeaponMode))
            {
                proto.WeaponMode = weaponMode;
                stream.Write(weaponMode);
            }

            for (int i = 0; i < SlotItems.Length; i++)
            {
                if (changeFlags.HasFlag((NPCChangedFlags)((int)NPCChangedFlags.SLOT1 << i)))
                {
                    proto.Slots[i] = SlotItems[i];
                    if (SlotItems[i] == null)
                    {
                        stream.Write(0);
                    }
                    else
                    {
                        stream.Write(SlotItems[i].ID);
                    }
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.VOBFOCUS))
            {
                proto.FocusVob = focusVobID;
                if (focusVobID == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(focusVobID.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.ENEMYFOCUS))
            {
                proto.Enemy = enemyVobID;
                if (enemyVobID == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(enemyVobID.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.MOBINTERACT))
            {
                proto.MobInter = MobInterID;
                if (MobInterID == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(MobInterID.ID);
                }
            }

            if (changeFlags.HasFlag(NPCChangedFlags.ISDEAD))
            {
                proto.IsDead = isdead;
                stream.Write(proto.IsDead);
            }

            if (changeFlags.HasFlag(NPCChangedFlags.ISUNCONSCIOUS))
            {
                proto.IsUnconcious = isUnconscious;
                stream.Write(proto.IsUnconcious);
            }

            if (changeFlags.HasFlag(NPCChangedFlags.ISSWIMMING))
            {
                proto.IsSwimming = isSwimming;
                stream.Write(proto.IsSwimming);
            }

            if (changeFlags.HasFlag(NPCChangedFlags.PORTALROOM))
            {
                proto.PortalRoom = portalRoom;
                stream.Write(proto.PortalRoom);
            }

            if (changeFlags.HasFlag(NPCChangedFlags.ACTIVE_SPELL))
            {
                proto.ActiveSpell = selectedSpell;
                if (proto.ActiveSpell == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(proto.ActiveSpell.ID);
                }
            }
            zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Getted ChangeFlags: " + changeFlags, 0, "Client.cs", 0);
            Program.client.client.Send(stream, PacketPriority.MEDIUM_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
        }
예제 #23
0
        public static Int32 MagBook_Spell_Cast(String message)
        {
            try
            {
                Process process = Process.ThisProcess();
                int     address = Convert.ToInt32(message);

                oCMag_Book magBook = new oCMag_Book(process, process.ReadInt(address));

                oCNpc player = oCNpc.Player(process);
                if (player.MagBook.Address != magBook.Address)
                {
                    return(0);
                }

                //int spellID = player.GetActiveSpellNr();
                oCSpell gSpell = magBook.GetSelectedSpell();


                if (gSpell.Caster == null || gSpell.Caster.Address != player.Address)
                {
                    return(0);
                }

                NPCProto caster = Player.Hero;
                Vob      target = null;
                if (gSpell.Target != null && gSpell.Target.Address != 0)
                {
                    sWorld.SpawnedVobDict.TryGetValue(gSpell.Target.Address, out target);
                }


                int castLevel = 0;
                Externals.npcProcessManaList.TryGetValue(player.Address, out castLevel);

                //Item:
                oCItem spellItem = magBook.GetSpellItem(magBook.GetSelectedSpellNr());
                Vob    spellI    = null;
                sWorld.SpawnedVobDict.TryGetValue(spellItem.Address, out spellI);
                int itemID = 0;
                if (spellI != null && spellI is Item)
                {
                    itemID = spellI.ID;
                }

                BitStream stream = Program.client.sentBitStream;
                stream.Reset();
                stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                stream.Write((byte)NetworkID.CastSpell);
                stream.Write(itemID);
                stream.Write(caster.ID);
                if (target == null)
                {
                    stream.Write(0);
                }
                else
                {
                    stream.Write(target.ID);
                }
                stream.Write(gSpell.GetSpellID());
                stream.Write(castLevel);

                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(4, 'G', "Hook oCStartAnim_ModelAnim: " + ex.ToString(), 0, "Hooks.zCModelHook.cs", 0);
            }
            return(0);
        }
예제 #24
0
        public static Int32 oCNpc_EV_UseItemToState_CALLFUNC(String message)
        {
            try
            {
                Process process = Process.ThisProcess();
                //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState + " | " + UseItemNPC.InteractItemTargetState +
                //": " + (UseItemNPC.Address != Player.Hero.Address) + " | " + (!sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.InteractItem.Address))+
                //" | " + (!sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.Address)) + " | " + UseItemNPC.Address + " | " + Player.Hero.Address + " | " + UseItemNPC.InteractItem.Address, 0, "ItemSynchro.cs", 0);

                if (UseItemNPC.InteractItemState == -1 && UseItemNPC.InteractItemTargetState == 0)
                {
                    UsedItem = UseItemNPC.InteractItem;
                }

                //bool start = (UseItemNPC.InteractItemState == -1 && UseItemNPC.InteractItemTargetState == 0);
                //bool end = (UseItemNPC.InteractItemState == 0 && UseItemNPC.InteractItemTargetState == -1);

                //if (!start && !end)
                //    return 0;

                if (UsedItem == null)
                {
                    UsedItem = UseItemNPC.InteractItem;
                }

                if (UseItemNPC.Address != Player.Hero.Address)
                {
                    return(0);
                }
                if (UsedItem.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(UsedItem.Address))
                {
                    return(0);
                }
                if (UseItemNPC.Address == 0 || !sWorld.SpawnedVobDict.ContainsKey(UseItemNPC.Address))
                {
                    return(0);
                }

                NPCProto npcP  = (NPCProto)sWorld.SpawnedVobDict[UseItemNPC.Address];
                Item     itemP = (Item)sWorld.SpawnedVobDict[UsedItem.Address];

                BitStream stream = Program.client.sentBitStream;
                stream.Reset();
                stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                stream.Write((byte)NetworkID.UseItemMessage);
                stream.Write(npcP.ID);
                stream.Write(itemP.ID);
                stream.Write((short)UseItemNPC.InteractItemState);
                stream.Write((short)UseItemNPC.InteractItemTargetState);
                Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);


                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem 2: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState + " | " + UseItemNPC.InteractItemTargetState, 0, "ItemSynchro.cs", 0);


                //zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value + " | " + UseItemNPC.InteractItemState+" | "+UseItemNPC.InteractItemTargetState, 0, "ItemSynchro.cs", 0);
                //if (UseItemNPC.InteractItemState == 1)
                //{
                //    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Start-UseItem: "+UseItemNPC.ObjectName.Value+": "+UseItemNPC.InteractItem.Name.Value, 0, "ItemSynchro.cs", 0);
                //}
                //else if (UseItemNPC.InteractItemState == 2)
                //{
                //    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "End-UseItem: " + UseItemNPC.ObjectName.Value + ": " + UseItemNPC.InteractItem.Name.Value, 0, "ItemSynchro.cs", 0);
                //}
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Use Item failure:" + ex.ToString(), 0, "ItemSynchro.cs", 0);
            }
            return(0);
        }
예제 #25
0
        public static Int32 oCItemContainer_Remove_2(String message)
        {
            try
            {
                int     address = Convert.ToInt32(message);
                Process process = Process.ThisProcess();

                oCNpc           player   = oCNpc.Player(process);
                oCNpc           stealNPC = oCNpc.StealNPC(process);
                oCItemContainer oIC      = new oCItemContainer(process, process.ReadInt(address));
                oCItem          item     = new oCItem(process, process.ReadInt(address + 4));
                int             amount   = process.ReadInt(address + 8);

                oCMobContainer mC = new oCMobContainer(process, player.GetInteractMob().Address);
                if (oIC.Address == mC.ItemContainer.Address && (item.Amount == amount || item.Amount - amount <= 0))
                {
                    mC.Remove(item);
                }
                else if ((oIC.Address == process.ReadInt(0x00AB27E0) || oIC.Address == process.ReadInt(0x00AB27DC)) && (item.Amount == amount || item.Amount - amount <= 0))
                {
                    oIC.Remove(item);

                    zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', "Item stolen from npc!", 0, "hItemContainer.cs", 0);
                }
                else
                {
                    item.Amount -= amount;
                }


                int containerID = 0;
                if (oIC.Address == mC.ItemContainer.Address)
                {
                    if (!sWorld.SpawnedVobDict.ContainsKey(mC.Address))
                    {
                        return(0);
                    }
                    Vob mobContainerVob = sWorld.SpawnedVobDict[mC.Address];
                    if (!(mobContainerVob is MobContainer))
                    {
                        return(0);
                    }
                    MobContainer mobContainer = (MobContainer)mobContainerVob;
                    containerID = mobContainer.ID;
                }
                else if (oIC.Address == process.ReadInt(0x00AB27E0) || oIC.Address == process.ReadInt(0x00AB27DC))
                {
                    if (!sWorld.SpawnedVobDict.ContainsKey(stealNPC.Address))
                    {
                        return(0);
                    }
                    Vob sVob = sWorld.SpawnedVobDict[stealNPC.Address];
                    if (!(sVob is NPCProto))
                    {
                        return(0);
                    }
                    NPCProto npc = (NPCProto)sVob;
                    containerID = npc.ID;
                }


                if (!sWorld.SpawnedVobDict.ContainsKey(item.Address))
                {
                    return(0);
                }

                Item it = (Item)sWorld.SpawnedVobDict[item.Address];

                BitStream stream = Program.client.sentBitStream;
                stream.Reset();
                stream.Write((byte)RakNet.DefaultMessageIDTypes.ID_USER_PACKET_ENUM);
                stream.Write((byte)NetworkID.ContainerItemChangedMessage);
                stream.Write((byte)ContainerItemChanged.itemRemoved);
                stream.Write(Player.Hero.ID);
                stream.Write(containerID);
                stream.Write(it.ID);
                stream.Write(amount);
                Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);
                //stream.Write(item.ID);
                //stream.Write(amount);
                //Program.client.client.Send(stream, PacketPriority.HIGH_PRIORITY, PacketReliability.RELIABLE_ORDERED, (char)0, RakNet.RakNet.UNASSIGNED_SYSTEM_ADDRESS, true);

                zERROR.GetZErr(process).Report(2, 'G', "Removed Item, Item: " + item.ObjectName.Value + " Found: " + sWorld.SpawnedVobDict.ContainsKey(item.Address) + " Amount: " + amount, 0, "Itemsynchro.cs", 0);
            }
            catch (Exception ex)
            {
                zERROR.GetZErr(Process.ThisProcess()).Report(2, 'G', ex.Source + ": " + ex.Message + " " + ex.StackTrace, 0, "hItemContainer.cs", 0);
            }
            return(0);
        }
예제 #26
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);
        }