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); }
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); }
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(); } }
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); }
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(); }
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); }
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); }
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(); }
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(); } } }
public override void NetSend(BinaryWriter writer) { TagIO.Write(data ?? new TagCompound(), writer); }
public override void NetSend(BinaryWriter writer) => TagIO.Write(Save(), writer);
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 * { * * } */ }
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); } }
/// <summary> /// Do not override this method to class work correctly. /// </summary> public override void Send(BinaryWriter writer) { TagIO.Write(SavedDimensionsTag, writer); }
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); }
public static void Write(this BinaryWriter writer, IList <Item> items) => TagIO.Write(items.Save(), writer);
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(); } } }