示例#1
0
        public static void ReceiveCablePlacement(BinaryReader reader, int sender)
        {
            TagCompound tag      = TagIO.Read(reader);
            Point16     position = tag.Get <Point16>("Position");
            string      name     = tag.GetString("Name");

            Cable cable = new Cable();

            cable.SetDefaults(name);
            cable.position = position;
            cable.layer    = PTWorld.Instance.layer;
            cable.grid     = new CableGrid
            {
                energy = new EnergyStorage(cable.MaxIO * 2, cable.MaxIO),
                tiles  = new List <Cable> {
                    cable
                }
            };
            PTWorld.Instance.layer.Add(position, cable);

            cable.Merge();
            cable.Frame();

            foreach (Cable merge in Cable.sides.Select(x => x + position).Where(PTWorld.Instance.layer.ContainsKey).Select(x => PTWorld.Instance.layer[x]).Where(x => x.name == name))
            {
                merge.Frame();
            }

            if (Main.netMode == NetmodeID.Server)
            {
                SendCablePlacement(cable, sender);
            }
        }
示例#2
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int messageID = reader.ReadByte();

            if (messageID == 0)
            {
                int player = reader.ReadByte();
                if (Main.netMode == NetmodeID.Server || player != Main.myPlayer)
                {
                    Main.player[player].GetModPlayer <PartsPlayer>().parts = TagIO.Read(reader);
                    return;
                }
            }
            if (messageID == 1)
            {
                int player = reader.ReadByte();
                int info   = reader.ReadInt32();
                if (Main.netMode == NetmodeID.Server || player != Main.myPlayer)
                {
                    PartsPlayer pl = Main.player[player].GetModPlayer <PartsPlayer>();
                    pl.ZoneFakeGranite    = ((info & 0x1) != 0);
                    pl.ZoneRealGranite    = ((info & 0x2) != 0);
                    pl.ZoneFakeMarble     = ((info & 0x4) != 0);
                    pl.ZoneRealMarble     = ((info & 0x8) != 0);
                    pl.ZoneFakeSpiderCave = ((info & 0x10) != 0);
                    pl.ZoneRealSpiderCave = ((info & 0x20) != 0);
                }
            }
        }
 public static void SyncQEReceive(BinaryReader reader, int sender)
 {
     if (Main.netMode == NetmodeID.Server)
     {
         PortableStorage.Instance.GetModWorld <PSWorld>().Load(TagIO.Read(reader));
     }
 }
示例#4
0
        public override void NetReceive(BinaryReader reader, bool lightReceive)
        {
            TagCompound tag = TagIO.Read(reader);

            energy = new EnergyCore(tag.GetAsInt("maxEnergy"));
            energy.addEnergy(tag.GetAsInt("energy"));
        }
示例#5
0
        public static void ReceiveGridReform(BinaryReader reader, int sender)
        {
            TagCompound tag   = TagIO.Read(reader);
            Cable       cable = PTWorld.Instance.layer[tag.Get <Point16>("Position")];

            cable.grid.ReformGrid();

            if (Main.netMode == NetmodeID.Server)
            {
                SendGridReform(cable, sender);
            }
        }
示例#6
0
        public static void ReceiveGridMerge(BinaryReader reader, int sender)
        {
            TagCompound tag    = TagIO.Read(reader);
            Cable       cable1 = PTWorld.Instance.layer[tag.Get <Point16>("Position1")];
            Cable       cable2 = PTWorld.Instance.layer[tag.Get <Point16>("Position2")];

            cable1.grid.MergeGrids(cable2.grid);

            if (Main.netMode == NetmodeID.Server)
            {
                SendGridMerge(cable1, cable2, sender);
            }
        }
示例#7
0
        public static void ReceiveCableModification(BinaryReader reader, int sender)
        {
            TagCompound tag   = TagIO.Read(reader);
            Cable       cable = PTWorld.Instance.layer[tag.Get <Point16>("Position")];

            cable.connections = tag.GetList <bool>("Connections").ToList();
            cable.IO          = (IO)tag.GetInt("IO");
            cable.Frame();

            if (Main.netMode == NetmodeID.Server)
            {
                SendCableModification(cable, sender);
            }
        }
示例#8
0
        public static void ReceiveGridEnergy(BinaryReader reader, int sender)
        {
            TagCompound tag      = TagIO.Read(reader);
            Point16     position = tag.Get <Point16>("Position");
            long        delta    = tag.GetLong("Energy");

            if (PTWorld.Instance.layer.ContainsKey(position))
            {
                PTWorld.Instance.layer[position].grid.energy.ModifyEnergyStored(delta);

                if (Main.netMode == NetmodeID.Server)
                {
                    SendGridEnergy(position, delta, sender);
                }
            }
        }
示例#9
0
        public static void ReceiveCableRemovement(BinaryReader reader, int sender)
        {
            Cable cable = PTWorld.Instance.layer[TagIO.Read(reader).Get <Point16>("Position")];

            cable.grid.RemoveTile(cable);
            PTWorld.Instance.layer.Remove(cable.position);

            foreach (Point16 point in Cable.sides.Select(x => x + cable.position).Where(x => PTWorld.Instance.layer.ContainsKey(x)))
            {
                PTWorld.Instance.layer[point].Frame();
            }

            if (Main.netMode == NetmodeID.Server)
            {
                SendCableRemovement(cable, sender);
            }
        }
示例#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 NetRecieve(BinaryReader reader) => Load(TagIO.Read(reader));
示例#12
0
        public override void HandlePacket(BinaryReader reader, int whoAmI)
        {
            int messageID = reader.ReadByte();

            Logger.Info("Received Message id " + messageID);

            /*message 0: Share research with server (not used)
             * int Player
             * TAGCompound Research*/
            if (messageID == 0)
            {
                int player = reader.ReadByte();
                if (Main.netMode == NetmodeID.Server || player != Main.myPlayer)
                {
                    TagCompound tempResearch = TagIO.Read(reader);
                    foreach (KeyValuePair <string, object> read in tempResearch)
                    {
                        Main.player[player].GetModPlayer <ResearchPlayer>().research[read.Key] = tempResearch.GetAsInt(read.Key);
                    }
                    Main.player[player].GetModPlayer <ResearchPlayer>().dirtyCache = true;
                    Main.player[player].GetModPlayer <ResearchPlayer>().RebuildCache();
                    return;
                }
            }

            /*message 1: dirty cache
             * int player
             * refreshes the cache*/
            if (messageID == 1)
            {
                int player = reader.ReadByte();
                Main.player[player].GetModPlayer <ResearchPlayer>().dirtyCache = true;
                Main.player[player].GetModPlayer <ResearchPlayer>().RebuildCache();
                return;
            }

            /*message 10 : P2P item cache sharing
             * byte player
             * int count
             * int[count] itemIDs
             * Share the cache with another player. Meant to share multiple, fully researched items at once.
             * Will send another such message to the sender (with this whoAmI) with the researched items,
             * and will keep sending them to one another until the cache is equal*/
            if (messageID == 10) //Shared item Cache
            {
                ResearchPlayer rp     = Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>();
                int            sendTo = reader.ReadByte();
                //Logger.Info("Received shared cache Message to "+i);
                List <int> oldCache = new List <int>();
                oldCache.AddRange(rp.researchedCache);

                int count = reader.ReadInt32();
                for (int i = 0; i < count; i++)
                {
                    int id = reader.ReadInt32();
                    if (!rp.IsResearched(id))
                    {
                        rp.AddResearchedAmount(id, ResearchTable.GetTotalResearch(id));
                        rp.CheckRecipesForItem(id);
                    }
                }
                if (Main.netMode == NetmodeID.Server || sendTo != Main.myPlayer)
                {
                    rp.shareCacheTo(sendTo);
                }
                return;
            }

            /*message 11: Share single item with intermediate result
             * byte player to send to
             * byte player that sent the message
             * int item
             * int research count
             *
             * Adds the research count to the player's research, and replies with the same message with its previous research count
             */
            if (messageID == 11)
            {
                ResearchPlayer rp           = Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>();
                int            sendTo       = reader.ReadByte();
                int            orgSender    = reader.ReadByte();
                int            itm          = reader.ReadInt32();
                int            amount       = reader.ReadInt32();
                int            prevResearch = rp.GetResearchedAmount(itm);
                int            res          = rp.AddResearchedAmount(itm, amount);
                if (Main.netMode == NetmodeID.Server)
                {
                    ModPacket pk = GetPacket();
                    pk.Write((byte)11);
                    pk.Write((byte)(sendTo));
                    pk.Write((byte)(orgSender));
                    pk.Write(itm);
                    pk.Write(amount);
                    pk.Send(sendTo);
                    return;
                }
                //Logger.Info("Received share single item Message from " + sender + ". Item " + itm + " with amount "+ amount);

                if (rp.IsResearched(itm) && res != amount)
                {
                    rp.CheckRecipesForItem(itm);

                    //Logger.Info("Item "+ itm + " was fully researched with " + amount);
                    rp.RebuildCache();
                    if (orgSender == Main.myPlayer)
                    {
                        return;
                    }
                    ModPacket pk = GetPacket();
                    pk.Write((byte)11);
                    pk.Write((byte)(orgSender));
                    pk.Write((byte)(orgSender));
                    pk.Write(itm);
                    pk.Write(prevResearch + amount);
                    pk.Send();
                }
                else
                {
                    //Logger.Info("Item " + itm + " was not fully researched with " + amount);
                }
                return;
            }

            /*message 12: Share prefixes
             * byte player to send to
             * int itm
             * int count
             * byte[count] prefixes
             *
             * Sends all prefixes for item itm, with no replies. Only adds prefixes.*/
            if (messageID == 12)
            {
                ResearchPlayer rp       = Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>();
                int            sendTo   = reader.ReadByte();
                int            itm      = reader.ReadInt32();
                int            count    = reader.ReadInt32();
                List <byte>    prefixes = new List <byte>();
                for (int i = 0; i < count; i++)
                {
                    byte p = reader.ReadByte();
                    prefixes.Add(p);
                    rp.AddResearchPrefix(itm, p);
                }
                if (Main.netMode == NetmodeID.Server)
                {
                    ModPacket pk = GetPacket();
                    pk.Write((byte)12);
                    pk.Write((byte)(sendTo));

                    pk.Write(prefixes.Count);
                    for (int k = 0; k < prefixes.Count; k++)
                    {
                        pk.Write((byte)(prefixes[k]));
                    }
                    pk.Send(sendTo);
                }
                return;
            }

            if (messageID == 99)
            {
                int player = reader.ReadByte();
                ResearchTable.InitResearchTable();
                if (Main.netMode == NetmodeID.Server)
                {
                    ModPacket pk = this.GetPacket();
                    pk.Write((byte)99);
                    pk.Write((byte)player);
                    pk.Send(-1, player);
                    ModContent.GetInstance <ExceptionListConfig>().forceReload = false;
                    SaveListConfig();
                }
                else
                {
                    Main.player[Main.myPlayer].GetModPlayer <ResearchPlayer>().RebuildCache();
                }
                ModContent.GetInstance <ExceptionListConfig>().forceReload = false;
                return;
            }
        }
示例#13
0
 public override void NetReceive(BinaryReader reader, bool lightReceive) => Load(TagIO.Read(reader));
示例#14
0
 public override void NetRecieve(BinaryReader reader)
 {
     data     = TagIO.Read(reader);
     modName  = data.GetString("mod");
     itemName = data.GetString("name");
 }
示例#15
0
 /// <summary>
 /// Do not override this method to class work correctly.
 /// </summary>
 public override void Receive(BinaryReader reader)
 {
     SavedDimensionsTag = TagIO.Read(reader) ?? new TagCompound();
 }
示例#16
0
 public override void NetReceive(BinaryReader reader)
 {
     Setup(TagIO.Read(reader));
 }
示例#17
0
 public override void NetReceive(BinaryReader reader, bool lightReceive)
 {
     Load(TagIO.Read(reader));
     timer = reader.ReadInt32();
 }
示例#18
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
             * {
             *
             * }
             */
        }
示例#19
0
 public static IList <Item> Read(this BinaryReader reader) => Load(TagIO.Read(reader));