/// <summary> /// Recreates this object with new values. /// </summary> /// <param name="id">The game ID of the item.</param> /// <param name="name">The name of the item.</param> /// <param name="description">The description of the item.</param> /// <param name="image">The asset ID of the thumbnail image of the item.</param> /// <param name="weight">The weight of the item.</param> /// <param name="value">The item's value in Poke Dollars.</param> /// <param name="tradeable">A value indicating whether the item is tradeable.</param> /// <param name="healthMod">The modification to the Pokemon's health by this item.</param> /// <param name="staminaMod">The modification to the Pokemon's stamina by this item.</param> /// <param name="inflictedStatuses">The status conditions inflicted by this item.</param> /// <param name="curedStatuses">The status conditions cured by this item.</param> /// <returns>The new object.</returns> public Restorative Recreate(int id, string name, string description, ushort image, float weight, int value, bool tradeable, int healthMod, int staminaMod, InflictedStatus[] inflictedStatuses, Status[] curedStatuses) { this.ID = id; this.Name = name; this.Description = description; this.Image = image; this.Weight = weight; this.Value = value; this.Tradeable = tradeable; this.HealthMod = healthMod; this.StaminaMod = staminaMod; this.InflictedStatuses = inflictedStatuses; this.CuredStatuses = curedStatuses; return this; }
public static void Deserialize(byte[] serialized, out InflictedStatus status) { // TODO status = null; }
public static void Deserialize(byte[] serialized, out Item item) { using (MemoryStream stream = new MemoryStream(serialized)) using (BinaryReader reader = new BinaryReader(stream)) { try { ItemIdentifier type = (ItemIdentifier)reader.ReadByte(); int id = reader.ReadInt32(); string name = reader.ReadString(); string description = reader.ReadString(); ushort image = reader.ReadUInt16(); bool tradeable = reader.ReadBoolean(); float weight = reader.ReadSingle(); int value = reader.ReadInt32(); if (type == ItemIdentifier.ClothingMesh) { ClothingMesh clothing = ObjectPool.Instance.New<ClothingMesh>(); ClothingCategory category = (ClothingCategory)reader.ReadByte(); ushort mesh = reader.ReadUInt16(); ColoredTexture[] textures = new ColoredTexture[reader.ReadByte()]; for (int i = 0; i < textures.Length; i++) { textures[i] = ObjectPool.Instance.New<ColoredTexture>(); bool colorable = reader.ReadBoolean(); Color color = Utility.ReadColor(reader); ushort texture = reader.ReadUInt16(); textures[i].Recreate(colorable, color, texture); } clothing.Recreate(id, name, description, image, weight, value, tradeable, category, mesh, textures); item = clothing; } else if (type == ItemIdentifier.ClothingTexture) { ClothingTexture clothing = ObjectPool.Instance.New<ClothingTexture>(); ClothingCategory category = (ClothingCategory)reader.ReadByte(); ColoredTexture[] textures = new ColoredTexture[reader.ReadByte()]; for (int i = 0; i < textures.Length; i++) { textures[i] = ObjectPool.Instance.New<ColoredTexture>(); bool colorable = reader.ReadBoolean(); Color color = Utility.ReadColor(reader); ushort texture = reader.ReadUInt16(); textures[i].Recreate(colorable, color, texture); } clothing.Recreate(id, name, description, image, weight, value, tradeable, category, textures); item = clothing; } else if (type == ItemIdentifier.Dye) { Dye dye = ObjectPool.Instance.New<Dye>(); Color color = Utility.ReadColor(reader); dye.Recreate(id, name, description, image, weight, value, tradeable, color); item = dye; } else if (type == ItemIdentifier.Machine) { Machine machine = ObjectPool.Instance.New<Machine>(); Move move; Deserialize(reader.ReadBytes(reader.ReadInt32()), out move); machine.Recreate(id, name, description, image, weight, value, tradeable, move); item = machine; } else if (type == ItemIdentifier.PokeBall) { PokeBall pokeBall = ObjectPool.Instance.New<PokeBall>(); float catchRate = reader.ReadSingle(); float breakRate = reader.ReadSingle(); PokeBall.Attribute[] attributes = new PokeBall.Attribute[reader.ReadInt32()]; for (int i = 0; i < attributes.Length; i++) { attributes[i] = (PokeBall.Attribute)reader.ReadInt32(); } pokeBall.Recreate(id, name, description, image, weight, value, tradeable, catchRate, breakRate, attributes); item = pokeBall; } else if (type == ItemIdentifier.Recipe) { Recipe recipe = ObjectPool.Instance.New<Recipe>(); Ingredient[] ingredients = new Ingredient[reader.ReadUInt16()]; for (int i = 0; i < ingredients.Length; i++) { ingredients[i] = ObjectPool.Instance.New<Ingredient>(); Item ingredientItem; Deserialize(reader.ReadBytes(reader.ReadInt32()), out ingredientItem); int amount = reader.ReadInt32(); ingredients[i].Recreate(ingredientItem, amount); } Item creation; Deserialize(reader.ReadBytes(reader.ReadInt32()), out creation); recipe.Recreate(id, name, description, image, weight, value, tradeable, ingredients, creation); item = recipe; } else if (type == ItemIdentifier.Restorative) { Restorative restorative = ObjectPool.Instance.New<Restorative>(); int healthMod = reader.ReadInt32(); int staminaMod = reader.ReadInt32(); InflictedStatus[] inflictedStatuses = new InflictedStatus[reader.ReadByte()]; for (int i = 0; i < inflictedStatuses.Length; i++) { inflictedStatuses[i] = ObjectPool.Instance.New<InflictedStatus>(); Status status; Deserialize(reader.ReadBytes(reader.ReadInt32()), out status); float duration = reader.ReadSingle(); inflictedStatuses[i].Recreate(status, duration); } Status[] curedStatuses = new Status[reader.ReadByte()]; for (int i = 0; i < curedStatuses.Length; i++) { Deserialize(reader.ReadBytes(reader.ReadInt32()), out curedStatuses[i]); } restorative.Recreate(id, name, description, image, weight, value, tradeable, healthMod, staminaMod, inflictedStatuses, curedStatuses); item = restorative; } else if (type == ItemIdentifier.Unique) { Unique unique = ObjectPool.Instance.New<Unique>(); Unique.Trigger[] triggers = new Unique.Trigger[reader.ReadInt32()]; for (int i = 0; i < triggers.Length; i++) { triggers[i] = (Unique.Trigger)reader.ReadInt32(); } bool usable = reader.ReadBoolean(); bool reusable = reader.ReadBoolean(); bool discardable = reader.ReadBoolean(); unique.Recreate(id, name, description, image, weight, value, tradeable, triggers, usable, reusable, discardable); item = unique; } else { Common common = ObjectPool.Instance.New<Common>(); common.Recreate(id, name, description, image, weight, value, tradeable); item = common; } } catch (Exception e) { item = null; Debug.Log("Exception at Serialization.Deserialize: " + e.Message); } } }
public static byte[] Serialize(InflictedStatus status) { // TODO return null; }