#pragma once
#pragma warning (disable:4949)
#include "../../RoleData/RoleBaseDef.h"
#include "..\NetWakerPGEnum.h"
#pragma unmanaged

//----------------------------------------------------------------------------------------------------------
// 加入好友
//----------------------------------------------------------------------------------------------------------
//C -> Chat ClientA 
//要求與 Client B交好友
struct PG_Friend_CtoChat_BefriendRequest
{
	GamePGCommandEnum	Command;

	StaticString<_MAX_NAMERECORD_SIZE_>	Name;
	
	PG_Friend_CtoChat_BefriendRequest()
	{
		Command = EM_PG_Friend_CtoChat_BefriendRequest;
	};
};

//Chat -> C 
//通知Client B  (有人要求交好友)
struct PG_Friend_ChattoC_BefriendRequest
{
	GamePGCommandEnum	Command;

	StaticString<_MAX_NAMERECORD_SIZE_>	Name;

	PG_Friend_ChattoC_BefriendRequest()
	{
		Command = EM_PG_Friend_ChattoC_BefriendRequest;
	};
};

//C -> Chat Client B 
//同意 或 不同意
struct PG_Friend_CtoChat_BefriendResult
{
	GamePGCommandEnum	Command;

	bool				Result;
	StaticString<_MAX_NAMERECORD_SIZE_>	Name;
	

	PG_Friend_CtoChat_BefriendResult()
	{
		Command = EM_PG_Friend_CtoChat_BefriendResult;
	};
};

//Chat -> L 
//通知 Local某人加入好友
struct PG_Friend_ChattoL_AddFriend
{
	GamePGCommandEnum	Command;
	int				OwnerDBID;
	
	StaticString<_MAX_NAMERECORD_SIZE_>	FriendName;


	PG_Friend_ChattoL_AddFriend()
	{
		Command = EM_PG_Friend_ChattoL_AddFriend;
	};
};


//L -> C	
//通知Client加入好友
struct PG_Friend_LtoC_AddFriend
{
	GamePGCommandEnum	Command;

	StaticString<_MAX_NAMERECORD_SIZE_>	FriendName;

	PG_Friend_LtoC_AddFriend()
	{
		Command = EM_PG_Friend_LtoC_AddFriend;
	};
};


//L -> Chat 
//(例外)Local沒有此角色，要求重新通知 玩家所在的Server(換區或登出 )
struct PG_Friend_LtoChat_AddFriendNotFound
{
	GamePGCommandEnum	Command;
	int					OwnerDBID;
	StaticString<_MAX_NAMERECORD_SIZE_>	FriendName;

	PG_Friend_LtoChat_AddFriendNotFound()
	{
		Command = EM_PG_Friend_LtoChat_AddFriendNotFound;
	};
};


//C -> L
//要求移除好友
struct PG_Friend_CtoL_DelFriend
{
	GamePGCommandEnum	Command;

	StaticString<_MAX_NAMERECORD_SIZE_>	FriendName;

	PG_Friend_CtoL_DelFriend()
	{
		Command = EM_PG_Friend_CtoL_DelFriend;
	};
};

//L -> C
//通知移除好友
struct PG_Friend_LtoC_DelFriend
{
	GamePGCommandEnum	Command;

	StaticString<_MAX_NAMERECORD_SIZE_>	FriendName;

	PG_Friend_LtoC_DelFriend()
	{
		Command = EM_PG_Friend_LtoC_DelFriend;
	};
};

//L -> C
//通知擁有的好友名單
struct PG_Friend_LtoC_FriendList
{
	GamePGCommandEnum	Command;

	FriendListStruct FriendList;

	PG_Friend_LtoC_FriendList()
	{
		Command = EM_PG_Friend_LtoC_FriendList;
	};
};

//--------------------------------------------------------------------------------------------------
//上線通知
//下線通知
//--------------------------------------------------------------------------------------------------
// L -> Chat 註冊自己的好有名單資訊
struct PG_Friend_LtoChat_RegisterInfo
{
	GamePGCommandEnum	Command;

	int					OwnerDBID;

	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解
	
	LookStruct			Look;	
	Voc_ENUM		    Voc;							//職業
	Voc_ENUM		    Voc_Sub;						//副職業
	Sex_ENUM			Sex;							//性別
	int					LV;
	int					LV_Sub;

	PG_Friend_LtoChat_RegisterInfo()
	{
		Command = EM_PG_Friend_LtoChat_RegisterInfo;
	};
};

// Chat -> C 通知某好友在線上
struct PG_Friend_ChattoC_PlayerOnline
{
	GamePGCommandEnum	Command;
	StaticString< _MAX_NAMERECORD_SIZE_ >   RoleName;	//角色名稱
	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解
	int					ZoneID;							//所在位置

	LookStruct			Look;	
	Voc_ENUM		    Voc;							//職業
	Voc_ENUM		    Voc_Sub;						//副職業
	Sex_ENUM			Sex;							//性別
	int					LV;
	int					LV_Sub;

	PG_Friend_ChattoC_PlayerOnline()
	{
		Command = EM_PG_Friend_ChattoC_PlayerOnline;
	};
};

// Chat -> C 通知某好友離線
struct PG_Friend_ChattoC_PlayerOffline
{
	GamePGCommandEnum	Command;

	StaticString< _MAX_NAMERECORD_SIZE_ >   RoleName;	//角色名稱

	PG_Friend_ChattoC_PlayerOffline()
	{
		Command = EM_PG_Friend_ChattoC_PlayerOffline;
	};
};

// C -> L	 修改好友名單自己的資料
struct PG_Friend_CtoL_ModifyMyInfo
{
	GamePGCommandEnum	Command;

	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解	

	PG_Friend_CtoL_ModifyMyInfo()
	{
		Command = EM_PG_Friend_CtoL_ModifyMyInfo;
	};
};

// L -> Chat 修改好友名單自己的資料
struct PG_Friend_LtoChat_ModifyInfo
{
	GamePGCommandEnum	Command;
	int		OwnerDBID;

	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解	
	Voc_ENUM		    Voc;							//職業
	Voc_ENUM		    Voc_Sub;						//副職業
	Sex_ENUM			Sex;							//性別
	int					LV;
	int					LV_Sub;

	PG_Friend_LtoChat_ModifyInfo()
	{
		Command = EM_PG_Friend_LtoChat_ModifyInfo;
	};
};
// Chat -> C 通知好友 修改好友名單自己的資料
struct PG_Friend_ChattoC_ModifyInfo
{
	GamePGCommandEnum	Command;

	int					ZoneID;
	StaticString< _MAX_NAMERECORD_SIZE_ >   RoleName;	//角色名稱
	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解	
	Voc_ENUM		    Voc;							//職業
	Voc_ENUM		    Voc_Sub;						//副職業
	Sex_ENUM			Sex;							//性別
	int					LV;
	int					LV_Sub;

	PG_Friend_ChattoC_ModifyInfo()
	{
		Command = EM_PG_Friend_ChattoC_ModifyInfo;
	};
};

//------------------------------------------------------------------------------------------------------------
// C -> L 加入黑名單
struct PG_Friend_CtoL_AddBadFriend
{
	GamePGCommandEnum	Command;

	StaticString< _MAX_NAMERECORD_SIZE_ >   RoleName;	//角色名稱

	PG_Friend_CtoL_AddBadFriend()
	{
		Command = EM_PG_Friend_CtoL_AddBadFriend;
	};
};

// C -> L 移除黑名單
struct PG_Friend_CtoL_DelBadFriend
{
	GamePGCommandEnum	Command;

	StaticString< _MAX_NAMERECORD_SIZE_ >   RoleName;	//角色名稱

	PG_Friend_CtoL_DelBadFriend()
	{
		Command = EM_PG_Friend_CtoL_DelBadFriend;
	};
};

//------------------------------------------------------------------------------------------------------------
// L -> Chat 加入好友
struct PG_Friend_LtoChat_AddFriend
{
	GamePGCommandEnum	Command;
	int		OwnerDBID;
	StaticString< _MAX_NAMERECORD_SIZE_ >   FriendName;	//角色名稱

	PG_Friend_LtoChat_AddFriend()
	{
		Command = EM_PG_Friend_LtoChat_AddFriend;
	};
};

// L -> Chat 移除好友
struct PG_Friend_LtoChat_DelFriend
{
	GamePGCommandEnum	Command;
	int		OwnerDBID;	
	StaticString< _MAX_NAMERECORD_SIZE_ >   FriendName;	//角色名稱

	PG_Friend_LtoChat_DelFriend()
	{
		Command = EM_PG_Friend_LtoChat_DelFriend;
	};
};
//------------------------------------------------------------------------------------------------------------
// C -> L 設定好友資訊
struct PG_Friend_CtoL_SetFriendInfo
{
	GamePGCommandEnum	Command;
	StaticString< _MAX_NAMERECORD_SIZE_ >   FriendName;	//角色名稱
	StaticString< _MAX_NAMERECORD_SIZE_ >   Type;		//角色名稱
	StaticString< _MAX_FRIENDLIST_NOTE_ >   Note;	    //註解	

	PG_Friend_CtoL_SetFriendInfo()
	{
		Command = EM_PG_Friend_CtoL_SetFriendInfo;
	};
};