示例#1
0
		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 );
		}
示例#3
0
		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);
			}
		}
示例#4
0
        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);
        }