using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Lidgren.Network; using MonomiPark.SlimeRancher.DataModel; namespace SRMultiplayer.Packets { [Packet(PacketType.WorldData)] public class PacketWorldData : Packet { public Dictionary Prices { get; set; } public Dictionary Saturation { get; set; } public float Seed; public int Keys; public int Currency; public double WorldTime; public Dictionary Progress { get; set; } public GadgetsModel GadgetsModel { get; set; } public List MapUnlocks { get; set; } public Dictionary Palette { get; set; } public List AvailUpgrades { get; set; } public List Upgrades { get; set; } public List PediaUnlocks { get; set; } public List Mails { get; set; } public List LemonTrees { get; set; } public PacketWorldData() { } public PacketWorldData(NetIncomingMessage im) { Deserialize(im); } public override void Serialize(NetOutgoingMessage om) { base.Serialize(om); om.Write(Progress.Count); foreach (var progress in Progress) { om.Write(progress.Key); om.Write(progress.Value); } om.Write(GadgetsModel.blueprints.Count); foreach (var data in GadgetsModel.blueprints) { om.Write((ushort)data); } om.Write(GadgetsModel.blueprintLockData.Count); foreach (var data in GadgetsModel.blueprintLockData) { om.Write((ushort)data.Key); om.Write(data.Value != null); if (data.Value != null) { om.Write(data.Value.lockedUntil); om.Write(data.Value.timedLock); } } om.Write(GadgetsModel.availBlueprints.Count); foreach (var data in GadgetsModel.availBlueprints) { om.Write((ushort)data); } om.Write(GadgetsModel.registeredBlueprints.Count); foreach (var data in GadgetsModel.registeredBlueprints) { om.Write((ushort)data); } om.Write(GadgetsModel.gadgets.Count); foreach (var data in GadgetsModel.gadgets) { om.Write((ushort)data.Key); om.Write(data.Value); } om.Write(GadgetsModel.craftMatCounts.Count); foreach (var data in GadgetsModel.craftMatCounts) { om.Write((ushort)data.Key); om.Write(data.Value); } om.Write(GadgetsModel.placedGadgetCounts.Count); foreach (var data in GadgetsModel.placedGadgetCounts) { om.Write((ushort)data.Key); om.Write(data.Value); } om.Write(MapUnlocks.Count); foreach (var map in MapUnlocks) { om.Write(map); } om.Write(Palette.Count); foreach (var pal in Palette) { om.Write(pal.Key); om.Write(pal.Value); } om.Write(AvailUpgrades.Count); foreach (var upgrade in AvailUpgrades) { om.Write(upgrade); } om.Write(Upgrades.Count); foreach (var upgrade in Upgrades) { om.Write(upgrade); } om.Write(PediaUnlocks.Count); foreach (var unlock in PediaUnlocks) { om.Write(unlock); } om.Write(Prices.Count); foreach (var data in Prices) { om.Write(data.Key); om.Write(data.Value.currValue); om.Write(data.Value.prevValue); } om.Write(Saturation.Count); foreach (var data in Saturation) { om.Write(data.Key); om.Write(data.Value); } om.Write(Mails.Count); foreach (var mail in Mails) { om.Write(mail.key); om.Write(mail.read); om.Write((byte)mail.type); } om.Write(LemonTrees.Count); foreach(var tree in LemonTrees) { om.Write(tree); } } public override void Deserialize(NetIncomingMessage im) { base.Deserialize(im); Progress = new Dictionary(); int progressCount = im.ReadInt32(); for (int i = 0; i < progressCount; i++) { Progress.Add(im.ReadUInt16(), im.ReadInt32()); } int count = 0; GadgetsModel = new GadgetsModel(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.blueprints.Add((Gadget.Id)im.ReadUInt16()); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { var key = im.ReadUInt16(); GadgetDirector.BlueprintLockData data = null; if (im.ReadBoolean()) { data = new GadgetDirector.BlueprintLockData() { lockedUntil = im.ReadDouble(), timedLock = im.ReadBoolean() }; } GadgetsModel.blueprintLockData.Add((Gadget.Id)key, data); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.availBlueprints.Add((Gadget.Id)im.ReadUInt16()); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.registeredBlueprints.Add((Gadget.Id)im.ReadUInt16()); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.gadgets.Add((Gadget.Id)im.ReadUInt16(), im.ReadInt32()); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.craftMatCounts.Add((Identifiable.Id)im.ReadUInt16(), im.ReadInt32()); } count = im.ReadInt32(); for (int i = 0; i < count; i++) { GadgetsModel.placedGadgetCounts.Add((Gadget.Id)im.ReadUInt16(), im.ReadInt32()); } MapUnlocks = new List(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { MapUnlocks.Add(im.ReadByte()); } Palette = new Dictionary(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { Palette.Add(im.ReadByte(), im.ReadUInt16()); } AvailUpgrades = new List(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { AvailUpgrades.Add(im.ReadByte()); } Upgrades = new List(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { Upgrades.Add(im.ReadByte()); } PediaUnlocks = new List(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { PediaUnlocks.Add(im.ReadUInt16()); } Prices = new Dictionary(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { Prices.Add(im.ReadUInt16(), new EconomyDirector.CurrValueEntry(0, im.ReadFloat(), im.ReadFloat(), 0)); } Saturation = new Dictionary(); count = im.ReadInt32(); for (int i = 0; i < count; i++) { Saturation.Add(im.ReadUInt16(), im.ReadFloat()); } Mails = new List(); int mailCount = im.ReadInt32(); for (int i = 0; i < mailCount; i++) { Mails.Add(new MailDirector.Mail() { key = im.ReadString(), read = im.ReadBoolean(), type = (MailDirector.Type)im.ReadByte() }); } LemonTrees = new List(); count = im.ReadInt32(); for(int i = 0; i < count; i++) { LemonTrees.Add(im.ReadString()); } } } }