public virtual void Serialize(GenericWriter writer) { writer.Write(10); // version SaveFlag flags = SaveFlag.None; int x = m_Location.m_X, y = m_Location.m_Y, z = m_Location.m_Z; if (x != 0 || y != 0 || z != 0) { if (x >= short.MinValue && x <= short.MaxValue && y >= short.MinValue && y <= short.MaxValue && z >= sbyte.MinValue && z <= sbyte.MaxValue) { if (x != 0 || y != 0) { if (x >= byte.MinValue && x <= byte.MaxValue && y >= byte.MinValue && y <= byte.MaxValue) flags |= SaveFlag.LocationByteXY; else flags |= SaveFlag.LocationShortXY; } if (z != 0) flags |= SaveFlag.LocationSByteZ; } else { flags |= SaveFlag.LocationFull; } } if (m_Direction != Direction.North) flags |= SaveFlag.Direction; if (m_Bounce != null) flags |= SaveFlag.Bounce; if (m_LootType != LootType.Regular) flags |= SaveFlag.LootType; if (m_ItemID != 0) flags |= SaveFlag.ItemID; if (m_Hue != 0) flags |= SaveFlag.Hue; if (m_Amount != 1) flags |= SaveFlag.Amount; if (m_Layer != Layer.Invalid) flags |= SaveFlag.Layer; if (m_Name != null) flags |= SaveFlag.Name; if (m_Parent != null) flags |= SaveFlag.Parent; if (m_Items != null && m_Items.Count > 0) flags |= SaveFlag.Items; if (m_Map != Map.Internal) flags |= SaveFlag.Map; //if ( m_InsuredFor != null && !m_InsuredFor.Deleted ) flags |= SaveFlag.InsuredFor; if (m_BlessedFor != null && !m_BlessedFor.Deleted) flags |= SaveFlag.BlessedFor; if (m_HeldBy != null && !m_HeldBy.Deleted) flags |= SaveFlag.HeldBy; if (m_SavedFlags != 0) flags |= SaveFlag.SavedFlags; if (m_RareData != 0) flags |= SaveFlag.RareData; //wea: 13/Mar/2007 Rare Factory if (m_DropRate != 1.0) flags |= SaveFlag.DropRate; //Adam: Spawner Loot Packs if (m_Weight == 0.0) { flags |= SaveFlag.WeightIs0; } else if (m_Weight != 1.0) { if (m_Weight == (int)m_Weight) flags |= SaveFlag.IntWeight; else flags |= SaveFlag.WeightNot1or0; } // see if anything here is set ImplFlag implFlags = (m_Flags & (ImplFlag.Visible | ImplFlag.Movable | ImplFlag.Stackable | ImplFlag.PlayerCrafted | ImplFlag.IsIntMapStorage | ImplFlag.FreezeDried | ImplFlag.Debug | ImplFlag.IsTemplate | ImplFlag.ToDelete | ImplFlag.PlayerQuest | ImplFlag.HideAttributes | ImplFlag.Audited)); if (implFlags != (ImplFlag.Visible | ImplFlag.Movable)) flags |= SaveFlag.ImplFlags; if (IsFreezeDried) flags |= SaveFlag.FreezeDried; // must be the first thing written writer.WriteInt32((int)flags); // version 10: Adam // Spawner Loot Packs if (GetSaveFlag(flags, SaveFlag.DropRate)) writer.Write(m_DropRate); // // older versions follow // /* begin last moved time optimization */ long ticks = m_LastMovedTime.Ticks; long now = DateTime.Now.Ticks; TimeSpan d; try { d = new TimeSpan(ticks - now); } catch { if (ticks < now) d = TimeSpan.MaxValue; else d = TimeSpan.MaxValue; } double minutes = -d.TotalMinutes; if (minutes < int.MinValue) minutes = int.MinValue; else if (minutes > int.MaxValue) minutes = int.MaxValue; writer.WriteEncodedInt((int)minutes); /* end */ if (GetSaveFlag(flags, SaveFlag.Direction)) writer.Write((byte)m_Direction); if (GetSaveFlag(flags, SaveFlag.Bounce)) BounceInfo.Serialize(m_Bounce, writer); if (GetSaveFlag(flags, SaveFlag.LootType)) writer.Write((byte)m_LootType); if (GetSaveFlag(flags, SaveFlag.LocationFull)) { writer.WriteEncodedInt(x); writer.WriteEncodedInt(y); writer.WriteEncodedInt(z); } else { if (GetSaveFlag(flags, SaveFlag.LocationByteXY)) { writer.Write((byte)x); writer.Write((byte)y); } else if (GetSaveFlag(flags, SaveFlag.LocationShortXY)) { writer.Write((short)x); writer.Write((short)y); } if (GetSaveFlag(flags, SaveFlag.LocationSByteZ)) writer.Write((sbyte)z); } if (GetSaveFlag(flags, SaveFlag.ItemID)) writer.WriteEncodedInt((int)m_ItemID); if (GetSaveFlag(flags, SaveFlag.Hue)) writer.WriteEncodedInt((int)m_Hue); if (GetSaveFlag(flags, SaveFlag.Amount)) writer.WriteEncodedInt((int)m_Amount); if (GetSaveFlag(flags, SaveFlag.Layer)) writer.Write((byte)m_Layer); if (GetSaveFlag(flags, SaveFlag.Name)) writer.Write((string)m_Name); if (GetSaveFlag(flags, SaveFlag.Parent)) { if (m_Parent is Mobile && !((Mobile)m_Parent).Deleted) writer.WriteInt32(((Mobile)m_Parent).Serial); else if (m_Parent is Item && !((Item)m_Parent).Deleted) writer.WriteInt32(((Item)m_Parent).Serial); else writer.WriteInt32((int)Serial.MinusOne); } if (GetSaveFlag(flags, SaveFlag.Items)) writer.WriteItemList(m_Items, false); if (GetSaveFlag(flags, SaveFlag.IntWeight)) writer.WriteEncodedInt((int)m_Weight); else if (GetSaveFlag(flags, SaveFlag.WeightNot1or0)) writer.Write((double)m_Weight); if (GetSaveFlag(flags, SaveFlag.Map)) writer.Write((Map)m_Map); if (GetSaveFlag(flags, SaveFlag.ImplFlags)) writer.WriteEncodedInt((int)implFlags); // not to be confused with ImplFlag.FreezeDried if (GetSaveFlag(flags, SaveFlag.FreezeDried)) { writer.WriteInt32(TotalWeight); writer.WriteInt32(TotalItems); writer.WriteInt32(TotalGold); writer.Write((int)m_SerializedContentsIdx.Length); for (int i = 0; i < m_SerializedContentsIdx.Length; i++) writer.Write(m_SerializedContentsIdx[i]); writer.Write((int)m_SerializedContentsBin.Length); for (int i = 0; i < m_SerializedContentsBin.Length; i++) writer.Write(m_SerializedContentsBin[i]); } if (GetSaveFlag(flags, SaveFlag.InsuredFor)) writer.Write((Mobile)null); if (GetSaveFlag(flags, SaveFlag.BlessedFor)) writer.Write(m_BlessedFor); if (GetSaveFlag(flags, SaveFlag.HeldBy)) writer.Write(m_HeldBy); if (GetSaveFlag(flags, SaveFlag.SavedFlags)) writer.WriteEncodedInt(m_SavedFlags); //wea: 13/Mar/2007 Rare Factory if (GetSaveFlag(flags, SaveFlag.RareData)) writer.Write(m_RareData); }
public override void Serialize( GenericWriter writer ) { base.Serialize( writer ); writer.Write( (int) 2 ); // version // version 2 writer.WriteInt32(m_spawners.Count); for (int i = 0; i < m_spawners.Count; ++i) writer.Write((Item)m_spawners[i]); // version 1 writer.Write( m_KinRansomChest ); writer.Write( m_RegStone ); writer.Write( m_OldGuardMode ); writer.Write( m_OldCountMode ); writer.Write( m_RegionName ); writer.Write( (int)m_IOBAlignment ); writer.Write( m_ChestOpenTime ); writer.Write( m_bChestOpenInit ); writer.Write( m_PreEventTime ); writer.Write( m_bPreEventInit ); }
public virtual void Serialize(GenericWriter writer) { writer.Write((int)31); // version writer.Write(m_STRBonusCap); //write flytile array writer.WriteInt32(FlyIDs.Length); for (int i = 0; i < FlyIDs.Length; i++) { writer.Write(FlyIDs[i]); } writer.Write(m_CanFly); writer.WriteDeltaTime(m_LastStatGain); writer.WriteInt32((int)m_Flags); writer.Write(m_Corpse); writer.Write(m_CreationTime); writer.WriteMobileList(m_Stabled, true); writer.Write(m_CantWalk); VirtueInfo.Serialize(writer, m_Virtues); writer.WriteInt32(m_Thirst); writer.WriteInt32(m_BAC); writer.WriteInt32(m_ShortTermMurders); //writer.Write( m_ShortTermElapse ); //writer.Write( m_LongTermElapse ); //writer.Write( m_Followers ); writer.WriteInt32(m_FollowersMax); writer.WriteInt32(m_MagicDamageAbsorb); writer.Write(m_GuildFealty); writer.Write(m_Guild); writer.Write(m_DisplayGuildTitle); writer.Write(m_CanSwim); writer.Write(m_Squelched); writer.Write(m_Holding); writer.WriteInt32(m_VirtualArmor); writer.WriteInt32(m_BaseSoundID); writer.Write(m_DisarmReady); writer.Write(m_StunReady); //Poison.Serialize( m_Poison, writer ); writer.WriteInt32(m_StatCap); writer.WriteInt32(m_NameHue); writer.WriteInt32(m_Hunger); writer.Write(m_Location); writer.WriteInt32((int)m_Body); writer.Write(m_Name); writer.Write(m_GuildTitle); writer.Write(m_Criminal); writer.WriteInt32(m_Kills); writer.WriteInt32(m_SpeechHue); writer.WriteInt32(m_EmoteHue); writer.WriteInt32(m_WhisperHue); writer.WriteInt32(m_YellHue); writer.Write(m_Language); writer.Write(m_Female); writer.Write(m_Warmode); writer.Write(m_Hidden); writer.Write((byte)m_Direction); writer.WriteInt32(m_Hue); writer.WriteInt32(m_Str); writer.WriteInt32(m_Dex); writer.WriteInt32(m_Int); writer.WriteInt32(m_Hits); writer.WriteInt32(m_Stam); writer.WriteInt32(m_Mana); writer.Write(m_Map); writer.Write(m_Blessed); writer.WriteInt32(m_Fame); writer.WriteInt32(m_Karma); writer.Write((byte)m_AccessLevel); m_Skills.Serialize(writer); writer.WriteInt32(m_Items.Count); for (int i = 0; i < m_Items.Count; ++i) writer.Write((Item)m_Items[i]); writer.Write(m_Player); writer.Write(m_Title); writer.Write(m_Profile); writer.Write(m_ProfileLocked); //writer.Write( m_LightLevel ); //writer.Write( m_TotalGold ); //writer.Write( m_TotalWeight ); writer.Write(m_AutoPageNotify); writer.Write(m_LogoutLocation); writer.Write(m_LogoutMap); writer.Write((byte)m_StrLock); writer.Write((byte)m_DexLock); writer.Write((byte)m_IntLock); if (m_StuckMenuUses != null) { writer.Write(true); writer.WriteInt32(m_StuckMenuUses.Length); for (int i = 0; i < m_StuckMenuUses.Length; ++i) { writer.Write(m_StuckMenuUses[i]); } } else { writer.Write(false); } }
public override void Serialize(GenericWriter writer) { int version = 6; writer.Write(version); // version // set the save flags. // clear m_flags &= ~SaveFlags.DesignState_Design; m_flags &= ~SaveFlags.DesignState_Backup; // set if (m_Design != null) m_flags |= SaveFlags.DesignState_Design; if (m_Backup != null) m_flags |= SaveFlags.DesignState_Backup; // version 6 writer.WriteInt32((int)m_flags); writer.Write(m_Signpost); writer.Write((int)m_SignpostGraphic); writer.Write((int)m_Type); writer.Write(m_SignHanger); writer.Write((int)m_LastRevision); writer.WriteItemList(m_Fixtures, true); CurrentState.Serialize(writer); if ((m_flags & SaveFlags.DesignState_Design) != 0) DesignState.Serialize(writer); if ((m_flags & SaveFlags.DesignState_Backup) != 0) BackupState.Serialize(writer); base.Serialize(writer); }