using ProtoBuf;

using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
using Fantasy.Network.Interface;
using Fantasy.Serialize;
// ReSharper disable InconsistentNaming
// ReSharper disable RedundantUsingDirective
// ReSharper disable RedundantOverriddenMember
// ReSharper disable PartialTypeWithSinglePart
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable CheckNamespace
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#pragma warning disable CS8618

namespace Fantasy
{	
	/// <summary>
	///  角色基础信息
	/// </summary>
	[ProtoContract]
	public partial class RoleBaseInfo : AMessage, IProto
	{
		public static RoleBaseInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<RoleBaseInfo>();
		}
		public override void Dispose()
		{
			NickName = default;
			Head = default;
			Country = default;
			Level = default;
			Exp = default;
			VipInfo = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<RoleBaseInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public string NickName { get; set; }
		[ProtoMember(2)]
		public string Head { get; set; }
		[ProtoMember(3)]
		public string Country { get; set; }
		[ProtoMember(4)]
		public int Level { get; set; }
		[ProtoMember(5)]
		public int Exp { get; set; }
		[ProtoMember(6)]
		public VipInfo VipInfo { get; set; }
	}
	[ProtoContract]
	public partial class KeyValueInt64 : AMessage, IProto
	{
		public static KeyValueInt64 Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<KeyValueInt64>();
		}
		public override void Dispose()
		{
			Key = default;
			Value = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<KeyValueInt64>(this);
#endif
		}
		[ProtoMember(1)]
		public int Key { get; set; }
		[ProtoMember(2)]
		public long Value { get; set; }
	}
	/// <summary>
	///  角色信息
	/// </summary>
	[ProtoContract]
	public partial class RoleInfo : AMessage, IProto
	{
		public static RoleInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<RoleInfo>();
		}
		public override void Dispose()
		{
			BaseInfo = default;
			RoleId = default;
			Items.Clear();
			ItemBinds.Clear();
			Fishs.Clear();
			Activities.Clear();
			Currency.Clear();
			Slots.Clear();
			Skills.Clear();
			MapId = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<RoleInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public RoleBaseInfo BaseInfo { get; set; }
		[ProtoMember(2)]
		public long RoleId { get; set; }
		[ProtoMember(3)]
		public List<ItemInfo> Items = new List<ItemInfo>();
		[ProtoMember(4)]
		public List<ItemBindInfo> ItemBinds = new List<ItemBindInfo>();
		[ProtoMember(5)]
		public List<FishInfo> Fishs = new List<FishInfo>();
		[ProtoMember(6)]
		public List<ActivityInfo> Activities = new List<ActivityInfo>();
		[ProtoMember(7)]
		public List<KeyValueInt64> Currency = new List<KeyValueInt64>();
		[ProtoMember(8)]
		public List<KeyValueInt64> Slots = new List<KeyValueInt64>();
		[ProtoMember(9)]
		public List<SkillInfo> Skills = new List<SkillInfo>();
		[ProtoMember(10)]
		public int MapId { get; set; }
	}
	/// <summary>
	///  角色信息
	/// </summary>
	[ProtoContract]
	public partial class RoleSimpleInfo : AMessage, IProto
	{
		public static RoleSimpleInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<RoleSimpleInfo>();
		}
		public override void Dispose()
		{
			RoleId = default;
			NickName = default;
			Head = default;
			Country = default;
			Level = default;
			Vip = default;
			MapId = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<RoleSimpleInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public long RoleId { get; set; }
		[ProtoMember(2)]
		public string NickName { get; set; }
		[ProtoMember(3)]
		public string Head { get; set; }
		[ProtoMember(4)]
		public string Country { get; set; }
		[ProtoMember(5)]
		public int Level { get; set; }
		[ProtoMember(6)]
		public int Vip { get; set; }
		[ProtoMember(7)]
		public int MapId { get; set; }
	}
	/// <summary>
	///  VIP信息
	/// </summary>
	[ProtoContract]
	public partial class VipInfo : AMessage, IProto
	{
		public static VipInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<VipInfo>();
		}
		public override void Dispose()
		{
			Level = default;
			OpenTime = default;
			ExpirationTime = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<VipInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public int Level { get; set; }
		[ProtoMember(2)]
		public long OpenTime { get; set; }
		[ProtoMember(3)]
		public long ExpirationTime { get; set; }
	}
	/// <summary>
	/// 奖励信息
	/// </summary>
	[ProtoContract]
	public partial class AwardInfo : AMessage, IProto
	{
		public static AwardInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<AwardInfo>();
		}
		public override void Dispose()
		{
			ConfigId = default;
			Count = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<AwardInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public long ConfigId { get; set; }
		[ProtoMember(2)]
		public int Count { get; set; }
	}
	/// <summary>
	/// 玩家当前使用钓组信息
	/// </summary>
	[ProtoContract]
	public partial class ItemBindInfo : AMessage, IProto
	{
		public static ItemBindInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<ItemBindInfo>();
		}
		public override void Dispose()
		{
			Item = default;
			BindItems.Clear();
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<ItemBindInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public long Item { get; set; }
		[ProtoMember(2)]
		public List<long> BindItems = new List<long>();
	}
	/// <summary>
	/// 物品信息
	/// </summary>
	[ProtoContract]
	public partial class ItemInfo : AMessage, IProto
	{
		public static ItemInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<ItemInfo>();
		}
		public override void Dispose()
		{
			ConfigId = default;
			Id = default;
			Count = default;
			ExpirationTime = default;
			GetTime = default;
			Abrasion = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<ItemInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public int ConfigId { get; set; }
		[ProtoMember(2)]
		public long Id { get; set; }
		[ProtoMember(3)]
		public int Count { get; set; }
		[ProtoMember(4)]
		public long ExpirationTime { get; set; }
		[ProtoMember(5)]
		public long GetTime { get; set; }
		[ProtoMember(6)]
		public int Abrasion { get; set; }
	}
	/// <summary>
	/// fish信息
	/// </summary>
	[ProtoContract]
	public partial class FishInfo : AMessage, IProto
	{
		public static FishInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<FishInfo>();
		}
		public override void Dispose()
		{
			ConfigId = default;
			Id = default;
			Weight = default;
			GetTime = default;
			ExpirationTime = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<FishInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public int ConfigId { get; set; }
		[ProtoMember(2)]
		public long Id { get; set; }
		[ProtoMember(3)]
		public int Weight { get; set; }
		[ProtoMember(4)]
		public long GetTime { get; set; }
		[ProtoMember(5)]
		public long ExpirationTime { get; set; }
	}
	[ProtoContract]
	public partial class ActivityInfo : AMessage, IProto
	{
		public static ActivityInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<ActivityInfo>();
		}
		public override void Dispose()
		{
			Id = default;
			StartTime = default;
			EndTime = default;
			Data.Clear();
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<ActivityInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public long Id { get; set; }
		[ProtoMember(2)]
		public long StartTime { get; set; }
		[ProtoMember(3)]
		public long EndTime { get; set; }
		[ProtoMember(4)]
		public List<KeyValueInt64> Data = new List<KeyValueInt64>();
	}
	/// <summary>
	/// 技能情况
	/// </summary>
	[ProtoContract]
	public partial class SkillInfo : AMessage, IProto
	{
		public static SkillInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<SkillInfo>();
		}
		public override void Dispose()
		{
			ConfigId = default;
			Level = default;
			Exp = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<SkillInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public int ConfigId { get; set; }
		[ProtoMember(2)]
		public int Level { get; set; }
		[ProtoMember(3)]
		public int Exp { get; set; }
	}
}
