示例#1
0
        public override void SyncPlayer(int toWho, int fromWho, bool newPlayer)
        {
            ModPacket   packet    = mod.GetPacket();
            int         cnt       = 0;
            TagCompound research2 = new TagCompound();
            IEnumerator <KeyValuePair <string, object> > enume = research.GetEnumerator();

            enume.Reset();
            while (enume.MoveNext())
            {
                research2[enume.Current.Key] = research.GetAsInt(enume.Current.Key);
                cnt += (enume.Current.Key.ToByteArray().Length / 128) + 1;
                if (cnt >= 500)
                {
                    packet.Write((byte)0);
                    packet.Write((byte)player.whoAmI);
                    TagIO.Write(research2, packet);
                    packet.Send(toWho, fromWho);
                    cnt    = 0;
                    packet = mod.GetPacket();
                    research2.Clear();
                }
            }
            if (cnt > 0)
            {
                packet.Write((byte)0);
                packet.Write((byte)player.whoAmI);
                TagIO.Write(research2, packet);
                packet.Send(toWho, fromWho);
            }
            packet = mod.GetPacket();
            packet.Write((byte)1);
            packet.Write((byte)player.whoAmI);
            packet.Send(toWho, fromWho);
        }
示例#2
0
        public override void NetSend(BinaryWriter writer, bool lightSend)
        {
            TagCompound tag = new TagCompound();

            tag.Add("energy", energy.getCurrentEnergyLevel());
            tag.Add("maxEnergy", energy.getMaxEnergyLevel());
            TagIO.Write(tag, writer);
        }
示例#3
0
        public override void SyncPlayer(int toWho, int fromWho, bool newPlayer)
        {
            ModPacket packet = mod.GetPacket();

            packet.Write((byte)0);
            packet.Write((byte)player.whoAmI);
            TagIO.Write(parts, packet);
            packet.Send(toWho, fromWho);
        }
 public static void SyncQE()
 {
     if (Main.netMode == NetmodeID.MultiplayerClient)
     {
         ModPacket packet = PortableStorage.Instance.GetPacket();
         packet.Write((byte)MessageType.SyncQE);
         TagIO.Write(PortableStorage.Instance.GetModWorld <PSWorld>().Save(), packet);
         packet.Send();
     }
 }
示例#5
0
        public static void SendGridReform(Cable cable, int excludedPlayer = -1)
        {
            if (Main.netMode == NetmodeID.SinglePlayer)
            {
                return;
            }

            ModPacket packet = PotentiaTransport.Instance.GetPacket();

            packet.Write((byte)MessageType.GridReform);
            TagIO.Write(new TagCompound
            {
                ["Position"] = cable.position
            }, packet);
            packet.Send(ignoreClient: excludedPlayer);
        }
示例#6
0
        public virtual void emptyBagOnFloor(Player p)
        {
            int stackSize = 0;

            /*TagCompound result = new TagCompound();*/
            long remainingOre = 0;
            int  ffs          = firstFreeItemSlot();

            if (ffs >= 396)
            {
                return;
            }
            foreach (String key in order)
            {
                if (items.ContainsKey(key))
                {
                    remainingOre = items.GetAsLong(key);
                    Item i = getItemFromTag(key);
                    if (i.type != 0)
                    {
                        while (remainingOre > 0 && (ffs < 396))
                        {
                            stackSize = (int)Math.Min(remainingOre, i.maxStack);
                            p.QuickSpawnItem(i.type, stackSize);
                            remainingOre -= stackSize;
                            ffs++;
                        }
                        items.Remove(key);
                        if (remainingOre > 0)
                        {
                            items[key] = (long)remainingOre;
                        }
                    }
                }
            }
            if (Main.netMode == NetmodeID.MultiplayerClient)
            {
                ModPacket pack = mod.GetPacket();
                pack.Write((byte)2);
                pack.Write((byte)p.whoAmI);
                pack.Write((byte)p.selectedItem);
                TagIO.Write(items, pack);
                pack.Send();
            }
            recalculateValue();
        }
示例#7
0
        public static void SendGridEnergy(Point16 position, long delta, int excludedPlayer = -1)
        {
            if (Main.netMode == NetmodeID.SinglePlayer)
            {
                return;
            }

            ModPacket packet = PotentiaTransport.Instance.GetPacket();

            packet.Write((byte)MessageType.GridEnergy);
            TagIO.Write(new TagCompound
            {
                ["Position"] = position,
                ["Energy"]   = delta
            }, packet);
            packet.Send(ignoreClient: excludedPlayer);
        }
示例#8
0
        public static void SendCableModification(Cable cable, int excludedPlayer = -1)
        {
            if (Main.netMode == NetmodeID.SinglePlayer)
            {
                return;
            }

            ModPacket packet = PotentiaTransport.Instance.GetPacket();

            packet.Write((byte)MessageType.CableModification);
            TagIO.Write(new TagCompound
            {
                ["Position"]    = cable.position,
                ["Connections"] = cable.connections,
                ["IO"]          = (int)cable.IO
            }, packet);
            packet.Send(ignoreClient: excludedPlayer);
        }
示例#9
0
        public virtual void emptyBagOnInventory(Player p, Item[] inv, int chest)
        {
            //TagCompound result = new TagCompound();


            foreach (String key in order)
            {
                placeItemInInventory(key, inv, chest);
            }
            if (Main.netMode == NetmodeID.MultiplayerClient)
            {
                ModPacket pack = mod.GetPacket();
                pack.Write((byte)2);
                pack.Write((byte)p.whoAmI);
                pack.Write((byte)p.selectedItem);
                TagIO.Write(items, pack);
                pack.Send();
            }
            recalculateValue();
        }
示例#10
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int type = reader.ReadByte();

            if (type == 1)
            {
                int vmID = reader.ReadInt16();
                if (VendingMachineWorld.vm[vmID] == null)
                {
                    VendingMachineWorld.vm[vmID] = new VendingMachineData();
                    //VendingMachineWorld.vm[vmID].Load(TagIO.Read(reader));
                }
                TagCompound vmTag = TagIO.Read(reader);
                VendingMachineWorld.vm[vmID].Load(vmTag);
                if (Main.netMode == 2)
                {
                    ModPacket p = this.GetPacket();
                    p.Write((byte)1);
                    p.Write((short)vmID);
                    TagIO.Write(vmTag, p);
                    p.Send();
                }
            }
            if (type == 2)
            {
                int vmID = reader.ReadInt16();
                if (VendingMachineWorld.vm[vmID] != null && !VendingMachineWorld.vm[vmID].isClear())
                {
                    WorldGen.KillTile(VendingMachineWorld.vm[vmID].x, VendingMachineWorld.vm[vmID].y);
                    //VendingMachineWorld.vm[vmID] = null;
                }

                if (Main.netMode == 2)
                {
                    ModPacket p = this.GetPacket();
                    p.Write((byte)2);
                    p.Write((short)vmID);
                    p.Send();
                }
            }
        }
示例#11
0
 public override void NetSend(BinaryWriter writer)
 {
     TagIO.Write(data ?? new TagCompound(), writer);
 }
示例#12
0
 public override void NetSend(BinaryWriter writer) => TagIO.Write(Save(), writer);
示例#13
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int type = reader.ReadByte();

            if (type == 1)
            {
                int         playerID    = reader.ReadByte();
                int         slot        = reader.ReadByte();
                int         chest       = reader.ReadInt32();
                int         x           = reader.ReadInt32();
                int         y           = reader.ReadInt32();
                TagCompound bagContents = TagIO.Read(reader);
                if (Main.netMode == NetmodeID.Server)
                {
                    GenericHoldingBag bag = Main.player[playerID].inventory[slot].modItem as GenericHoldingBag;
                    if (bag == null)
                    {
                        bag = new TrueOmniBag();
                    }

                    bag.items = bagContents;
                    if (chest > -1)
                    {
                        int trueChest = GenericHoldingBag.getChestAtTarget(x, y);
                        if (Main.chest[trueChest] != null && !GenericHoldingBag.IsPlayerInChest(trueChest) && !Chest.isLocked(Main.chest[trueChest].x, Main.chest[trueChest].y))
                        {
                            bag.emptyBagOnInventory(Main.player[playerID], Main.chest[trueChest].item, trueChest);
                        }
                    }
                    else
                    {
                        bag.emptyBagOnMagicStorage(Main.player[playerID], x, y);
                    }

                    bagContents = bag.items;
                }
                ModPacket p = GetPacket();
                p.Write((byte)2);
                p.Write((byte)playerID);
                p.Write((byte)slot);
                TagIO.Write(bagContents, p);
                p.Send(playerID);
                return;
            }

            if (type == 2)
            {
                int               playerID    = reader.ReadByte();
                int               slot        = reader.ReadByte();
                TagCompound       bagContents = TagIO.Read(reader);
                GenericHoldingBag bag         = Main.player[playerID].inventory[slot].modItem as GenericHoldingBag;
                if (bag != null)
                {
                    bag.items.Clear();
                    foreach (KeyValuePair <string, object> k in bagContents)
                    {
                        bag.items.Add(k);
                    }
                }
            }

            if (type == 3)
            {
                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    int       flags = reader.ReadByte();
                    BagPlayer pl    = Main.player[Main.myPlayer].GetModPlayer <BagPlayer>();
                    pl.checkAccessories = (flags & 1) == 1;
                    pl.checkVanity      = (flags & 2) == 2;
                    pl.checkHotbar      = (flags & 4) == 4;
                    pl.checkInventory   = (flags & 8) == 1;
                    pl.tryPlace         = (flags & 16) == 1;
                }
            }

            /*
             * if(type == 4) // check Order lists with server
             * {
             *  if (Main.netMode == NetmodeID.Server) {
             *      int player = reader.ReadByte();
             *
             *      ulong dirtBagHash = reader.ReadUInt64();
             *      ulong oreBagHash = reader.ReadUInt64();
             *      ulong gemBagHash = reader.ReadUInt64();
             *
             *      GenericHoldingBag bg = new DirtBag();
             *      bool anyBag = false;
             *      if (dirtBagHash != bg.getOrderHashCode())
             *      {
             *          sendBagOrder(player, bg);
             *          anyBag = true;
             *      }
             *      bg = new OreBag();
             *      if(oreBagHash != bg.getOrderHashCode())
             *      {
             *          sendBagOrder(player, bg);
             *          anyBag = true;
             *      }
             *      bg = new GemBag();
             *      if (gemBagHash != bg.getOrderHashCode())
             *      {
             *          sendBagOrder(player, bg);
             *          anyBag = true;
             *      }
             *
             *      if (anyBag)
             *      {
             *          ModPacket pk = GetPacket();
             *          pk.Write((byte)5);
             *          pk.Write((byte)new OmniBag().bagID);
             *          pk.Send(player);
             *      }
             *
             *  }
             *
             *
             *
             * }
             *
             * if(type == 5) // Clear order and not pickup list for this bag
             * {
             *  if(Main.netMode == NetmodeID.MultiplayerClient)
             *  {
             *      GenericHoldingBag bg = getBagFromID(reader.ReadByte());
             *      bg.order.Clear();
             *      bg.preventPickup.Clear();
             *  }
             * }
             * if(type == 6) // add String to order list;
             * {
             *
             * }
             * if(type == 7) // add String to not pickup
             * {
             *
             * }
             */
        }
示例#14
0
 public override void NetSend(BinaryWriter writer, bool lightSend)
 {
     TagIO.Write(Save(), writer);
     writer.Write(timer);
 }
        public static int PlaceNewVendingMachine(int x, int y, int type, int style, int direction = 0)
        {
            try
            {
                Point16 point = new Point16(x, y);
                TileObjectData.OriginToTopLeft(type, style, ref point);

                VendingMachineItem toPlace = (Main.player[Main.myPlayer].inventory[Main.player[Main.myPlayer].selectedItem].modItem) as VendingMachineItem;
                if (toPlace == null)
                {
                    return(399);
                }
                if (toPlace.hasShop && (toPlace.npcType == null || toPlace.npcType == ""))
                {
                    toPlace.npcType = SoulOfNPC.ItemToTag(toPlace.item);
                }

                for (int i = 0; i < vm.Length; i++)
                {
                    if (vm[i] != null && vm[i].x == x && vm[i].y == y)
                    {
                        vm[i].setDefaults(point.X, point.Y, toPlace.npcType, toPlace.hasShop);
                        if (Main.netMode != 0)
                        {
                            ModPacket pk = ModLoader.GetMod("VendingMachines").GetPacket();
                            pk.Write((byte)1);
                            pk.Write((short)i);
                            TagIO.Write(vm[i].Save(), pk);
                            pk.Send();
                        }
                        return(i);
                    }
                }

                for (int i = 0; i < vm.Length; i++)
                {
                    if (vm[i] == null)
                    {
                        vm[i] = new VendingMachineData();
                        vm[i].setDefaults(point.X, point.Y, toPlace.npcType, toPlace.hasShop);
                        if (Main.netMode != 0)
                        {
                            ModPacket pk = ModLoader.GetMod("VendingMachines").GetPacket();
                            pk.Write((byte)1);
                            pk.Write((short)i);
                            TagIO.Write(vm[i].Save(), pk);
                            pk.Send();
                        }
                        return(i);
                    }
                    else if (vm[i].isClear())
                    {
                        vm[i].setDefaults(point.X, point.Y, toPlace.npcType, toPlace.hasShop);
                        if (Main.netMode != 0)
                        {
                            ModPacket pk = ModLoader.GetMod("VendingMachines").GetPacket();
                            pk.Write((byte)1);
                            pk.Write((short)i);
                            TagIO.Write(vm[i].Save(), pk);
                            pk.Send();
                        }
                        return(i);
                    }
                }
                return(399);
            }catch (Exception e)
            {
                Main.NewText(e.ToString());
                return(399);
            }
        }
示例#16
0
 /// <summary>
 /// Do not override this method to class work correctly.
 /// </summary>
 public override void Send(BinaryWriter writer)
 {
     TagIO.Write(SavedDimensionsTag, writer);
 }
示例#17
0
        public override bool UseItem(Player p)
        {
            //if(p.selectedItem == 58)
            //return false;
            //Player owner = Main.player[item.owner];

            if (Main.netMode == NetmodeID.Server || p.whoAmI != Main.myPlayer)
            {
                return(true);
            }

            if (order == null)
            {
                setupItemList();
            }

            if (p.altFunctionUse == 2)
            {
                if (GenericBagUI.visible)
                {
                    BagsOfHoldingMod.bagUIState.close(false);
                }
                else
                {
                    BagsOfHoldingMod.bagUIState.open(p, this, false);
                }
            }
            else if ((leftClickOnPiggyBank || leftClickOnChest || leftClickOnFloor) && HasContent())
            {
                if (leftClickOnPiggyBank || leftClickOnChest)
                {
                    int chest = getChestAtTarget(p);
                    if (chest >= 0)
                    {
                        ErrorLogger.Log("Chest is no. " + chest);
                        if (Main.netMode == NetmodeID.MultiplayerClient)
                        {
                            ModPacket pack = mod.GetPacket();
                            pack.Write((byte)1);
                            pack.Write((byte)p.whoAmI);
                            pack.Write((byte)p.selectedItem);
                            pack.Write((int)chest);
                            pack.Write((int)Player.tileTargetX);
                            pack.Write((int)Player.tileTargetY);
                            TagIO.Write(items, pack);
                            pack.Send();
                        }
                        else if (Main.netMode == NetmodeID.SinglePlayer)
                        {
                            if (Main.chest[chest] != null && !IsPlayerInChest(chest) && !Chest.isLocked(Main.chest[chest].x, Main.chest[chest].y))
                            {
                                emptyBagOnChest(p, chest);
                            }
                        }
                        return(true);
                    }
                    else if (chest < -1 && chest > -5)
                    {
                        if (p.chest != chest)
                        {
                            if (Main.netMode != NetmodeID.Server)
                            {
                                emptyBagOnBank(p, chest);
                            }
                            return(true);
                        }
                    }
                    else if (chest == Int32.MinValue)
                    {
                        if (Main.netMode == NetmodeID.MultiplayerClient)
                        {
                            ModPacket pack = mod.GetPacket();
                            pack.Write((byte)1);
                            pack.Write((byte)p.whoAmI);
                            pack.Write((byte)p.selectedItem);
                            pack.Write((int)chest);
                            pack.Write((int)Player.tileTargetX);
                            pack.Write((int)Player.tileTargetY);
                            TagIO.Write(items, pack);
                            pack.Send();
                        }
                        if (Main.netMode == NetmodeID.SinglePlayer)
                        {
                            emptyBagOnMagicStorage(p, Player.tileTargetX, Player.tileTargetY);
                        }
                    }
                    else
                    {
                        if (leftClickOnFloor)
                        {
                            emptyBagOnFloor(p);
                        }
                    }
                }
                else
                {
                    if (leftClickOnFloor)
                    {
                        emptyBagOnFloor(p);
                    }
                }

                if (GenericBagUI.visible && GenericBagUI.openBag == this)
                {
                    GenericBagUI.buildItem();
                }
            }
            return(true);
        }
示例#18
0
 public static void Write(this BinaryWriter writer, IList <Item> items) => TagIO.Write(items.Save(), writer);
示例#19
0
        public virtual void emptyBagOnMagicStorage(Player p, int x, int y)
        {
            Mod magicStorage = ModLoader.GetMod("MagicStorage");

            if (magicStorage != null)
            {
                try
                {
                    if (Main.tile[x, y].frameX % 36 == 18)
                    {
                        x--;
                    }
                    if (Main.tile[x, y].frameY % 36 == 18)
                    {
                        y--;
                    }
                    ModTile    t        = TileLoader.GetTile(Main.tile[x, y].type);
                    MethodInfo getHeart = (t.GetType()).GetMethod("GetHeart", BindingFlags.Public | BindingFlags.Instance, null, new Type[] { typeof(int), typeof(int) }, null);
                    if (getHeart == null)
                    {
                        BagsOfHoldingMod.debugChat("GetHeart() is null. Report to author.");
                        ErrorLogger.Log("GetHeart() is null on " + (Main.netMode == NetmodeID.MultiplayerClient ? "client" : "server"));
                        return;
                    }
                    object[] param = new object[2];
                    param[0] = x;
                    param[1] = y;
                    TileEntity heart = (TileEntity)getHeart.Invoke(t, param);
                    if (heart == null)
                    {
                        BagsOfHoldingMod.sendChat("This Access does not have an associated Storage Heart.");
                        return;
                    }
                    Type[] depCal = new Type[1];
                    depCal[0] = typeof(Item);
                    MethodInfo deposit = heart.GetType().GetMethod("DepositItem", BindingFlags.Public | BindingFlags.Instance, null, depCal, null);
                    if (deposit == null)
                    {
                        BagsOfHoldingMod.debugChat("DepositItem(Item) is null. Report to author.");
                        ErrorLogger.Log("DepositItem(Item) is null on " + (Main.netMode == NetmodeID.MultiplayerClient ? "client" : "server"));
                        return;
                    }

                    for (int i = 0; i < order.Count; i++)
                    {
                        if (items.ContainsKey(order[i]))
                        {
                            long remain         = items.GetAsLong(order[i]);
                            bool prematureBreak = false;
                            while (remain > 0 && !prematureBreak)
                            {
                                Item itm       = getItemFromTag(order[i]);
                                int  stackSize = (int)Math.Min(remain, itm.maxStack);
                                itm.stack = stackSize;
                                deposit.Invoke(heart, new object[] { itm });
                                if (itm.IsAir)
                                {
                                    remain -= stackSize;
                                }
                                else
                                {
                                    remain        -= (stackSize - itm.stack);
                                    prematureBreak = true;
                                }
                            }
                            items.Remove(order[i]);
                            if (remain > 0)
                            {
                                items[order[i]] = remain;
                            }
                        }
                    }
                }catch (Exception e)
                {
                    BagsOfHoldingMod.debugChat(e.ToString());
                }
                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    ModPacket pack = mod.GetPacket();
                    pack.Write((byte)2);
                    pack.Write((byte)p.whoAmI);
                    pack.Write((byte)p.selectedItem);
                    TagIO.Write(items, pack);
                    pack.Send();
                }
            }
        }