📄 friendmanager.cpp
字号:
// FriendManager.cpp: implementation of the CFriendManager class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FriendManager.h"
#include "mhnetwork.h"
#include "ObjectManager.h"
#include "Gamein.h"
#include "ChatManager.h"
#include ".\interface\cWindowManager.h"
#include "WindowIDEnum.h"
#include "cMsgBox.h"
#include "MainBarDialog.h"
#include "FriendDialog.h"
#include "MiniNoteDialog.h"
#include "NoteDialog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
GLOBALTON(CFriendManager)
BOOL FriendFunc(char* cheat)
{
char code[256];
sscanf(cheat,"%s",code);
strupr(code);
if(strcmp(code,"ADDFRIEND")==0)
{
char Name[MAX_NAME_LENGTH+1];
sscanf(cheat,"%s %s",code,&Name);
MSG_NAME msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_ADD_SYN;
strcpy(msg.Name, Name);
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
return TRUE;
}
else if(strcmp(code,"DELFRIEND")==0)
{
char Name[MAX_NAME_LENGTH+1];
sscanf(cheat,"%s %s",code,&Name);
MSG_NAME msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_DEL_SYN;
strcpy(msg.Name, Name);
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
return TRUE;
}
else if(strcmp(code,"LISTFRIEND")==0)
{
return TRUE;
}
return FALSE;
}
CFriendManager::CFriendManager()
{
}
void CFriendManager::Init()
{
m_RequestPlayerID = 0;
strcpy(m_RequestPlayerName, "");
m_bFriendInit = FALSE;
m_Friend.Init();
}
CFriendManager::~CFriendManager()
{
}
void CFriendManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
switch(Protocol)
{
case MP_FRIEND_ADD_INVITE:
{
MSG_FRIEND_MEMBER_ADDDELETEID* pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
if(m_Friend.GetFriendNum() == MAX_FRIEND_NUM)
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(84), pmsg->Name );
if(GetRequestPlayerID() == 0)
{
SetRequestPlayer(pmsg->PlayerID, pmsg->Name);
WINDOWMGR->MsgBox( MBI_FRIEND_ADD, MBT_YESNO, CHATMGR->GetChatMsg(80), pmsg->Name);
}
}
break;
case MP_FRIEND_ADD_ACK:
{
MSG_FRIEND_MEMBER_ADDDELETEID * pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(81), pmsg->Name );
m_Friend.Add(pmsg->PlayerID, pmsg->Name);
GAMEIN->GetFriendDialog()->SetFriendList(1);
//FriendListSyn(1);
}
break;
case MP_FRIEND_DEL_ACK:
{
MSG_NAME_DWORD* pmsg = (MSG_NAME_DWORD*)pMsg;
m_Friend.Delete(pmsg->dwData);
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(87), pmsg->Name );
GAMEIN->GetFriendDialog()->SetFriendList(1);
//BYTE page = GAMEIN->GetFriendDialog()->GetSelectedFriendPge();
//FriendListSyn(page);
}
break;
/* case MP_FRIEND_SHOW_LIST_ACK: //盲泼芒俊辑
{
char islogin[MAX_NAME_LENGTH+1];
MSG_FRIEND_LIST* pmsg = (MSG_FRIEND_LIST*)pMsg;
for(int i=0; i<pmsg->count; ++i)
{
if(pmsg->Friend[i].IsLoggIn == TRUE)
strcpy(islogin, CHATMGR->GetChatMsg(293) );
else
strcpy(islogin, CHATMGR->GetChatMsg(294) );
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(89), pmsg->Friend[i].Name, islogin );
}
}
break;
*/ case MP_FRIEND_LOGIN_NOTIFY:
{
MSG_NAME_DWORD* pmsg = (MSG_NAME_DWORD*)pMsg;
// CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(90), pmsg->Name);
m_Friend.SetLogin(pmsg->dwData, TRUE);
/* if(GAMEIN->GetFriendDialog()->IsActive() == TRUE)
{
int page = GAMEIN->GetFriendDialog()->GetSelectedFriendPge();
GAMEIN->GetFriendDialog()->SetFriendList(page);
//FriendListSyn(1);
}
*/
}
break;
case MP_FRIEND_LOGOUT_NOTIFY_TO_CLIENT:
{
MSG_NAME_DWORD* pmsg = (MSG_NAME_DWORD*)pMsg;
// CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(92), pmsg->Name );
m_Friend.SetLogin(pmsg->dwData, FALSE);
if(GAMEIN->GetFriendDialog()->IsActive() == TRUE)
{
BYTE page = GAMEIN->GetFriendDialog()->GetSelectedFriendPge();
GAMEIN->GetFriendDialog()->SetFriendList(page);
// FriendListSyn(page);
}
}
break;
case MP_FRIEND_LIST_ACK: //促捞倔肺弊俊辑
{
MSG_FRIEND_LIST_DLG* pmsg = (MSG_FRIEND_LIST_DLG*)pMsg;
m_Friend.SetInfo(pmsg->FriendList,pmsg->count);
SetFriendInit(TRUE);
GAMEIN->GetFriendDialog()->SetFriendList(1);
GAMEIN->GetFriendDialog()->SetActive(TRUE);
}
break;
case MP_FRIEND_DELID_ACK:
{
MSG_DWORD_WORD *pmsg = (MSG_DWORD_WORD*)pMsg;
m_Friend.Delete(pmsg->dwData);
if(pmsg->wData == TRUE)
{
WORD page = GAMEIN->GetFriendDialog()->GetSelectedFriendPge();
// FriendListSyn(page);
GAMEIN->GetFriendDialog()->SetFriendList(page);
}
}
break;
case MP_FRIEND_ADDID_ACK:
{
MSG_FRIEND_MEMBER_ADDDELETEID* pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(81), pmsg->Name );
}
break;
case MP_FRIEND_ADD_ACCEPT_ACK:
{
MSG_FRIEND_MEMBER_ADDDELETEID* pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(81), pmsg->Name);
m_Friend.Add(pmsg->PlayerID, pmsg->Name);
if(GAMEIN->GetFriendDialog()->IsActive() == TRUE)
{
GAMEIN->GetFriendDialog()->SetFriendList(1);
//FriendListSyn(1);
}
}
break;
//////////////////////////////////////////////////////////////////////////
//率瘤
case MP_FRIEND_RECEIVENOTE:
{
MSGBASE * pmsg = (MSGBASE *) pMsg;
if(GAMEIN->GetNoteDialog()->IsActive() == TRUE)
NoteListSyn(1);
else
GAMEIN->GetMainInterfaceDialog()->SetAlram( OPT_NOTEDLGICON, TRUE );
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(105));
}
break;
case MP_FRIEND_NEW_NOTE:
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(95));
if(GAMEIN->GetNoteDialog()->IsActive() == TRUE)
NoteListSyn(1);
else
GAMEIN->GetMainInterfaceDialog()->SetAlram( OPT_NOTEDLGICON, TRUE );
//努扼捞攫飘 楷免 钢肺 且鳖.
}
break;
case MP_FRIEND_SENDNOTE_ACK:
{
MSG_NAME *pmsg = (MSG_NAME*) pMsg;
GAMEIN->GetMiniNoteDialog()->SetActive(FALSE);
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(93), pmsg->Name );
}
break;
case MP_FRIEND_NOTELIST_ACK:
{
MSG_FRIEND_NOTE_LIST* pmsg = (MSG_FRIEND_NOTE_LIST*) pMsg;
GAMEIN->GetNoteDialog()->SetNoteList(pmsg);
}
break;
case MP_FRIEND_DELNOTE_ACK:
{
MSG_FRIEND_DEL_NOTE* pmsg = (MSG_FRIEND_DEL_NOTE*)pMsg;
if(pmsg->bLast)
{
NoteListSyn(1);
}
GAMEIN->GetMiniNoteDialog()->SetActive(FALSE);
}
break;
case MP_FRIEND_READNOTE_ACK:
{
MSG_FRIEND_READ_NOTE * pmsg = (MSG_FRIEND_READ_NOTE*)pMsg;
GAMEIN->GetMiniNoteDialog()->SetMiniNote(pmsg->FromName, pmsg->Note);
GAMEIN->GetMiniNoteDialog()->SetNoteID(pmsg->NoteID);
GAMEIN->GetMiniNoteDialog()->SetActive(TRUE);
GAMEIN->GetMiniNoteDialog()->ShowMiniNoteMode(eMinNoteMode_Read);
}
break;
case MP_FRIEND_LOGIN_FRIEND:
{
MSG_NAME* pmsg = (MSG_NAME*)pMsg;
//[模备]%s丛捞 柯扼牢 惑怕涝聪促.
// CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(109), pmsg->Name);
}
break;
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//nack
case MP_FRIEND_ADD_ACCEPT_NACK:
{
MSG_BYTE* pmsg = (MSG_BYTE*)pMsg;
if(pmsg->bData == eFriend_AddInvalidUser)
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(97));
else if(pmsg->bData == eFriend_AddFullList)
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(97));
else if(pmsg->bData == eFriend_AddDeny)
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(97));
else if(pmsg->bData == eFriend_NotLogin)
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(97));
}
break;
case MP_FRIEND_ADD_NACK:
{
MSG_FRIEND_MEMBER_ADDDELETEID* pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
if(pmsg->PlayerID == eFriend_AddDeny) //芭例
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(82), pmsg->Name );
}
else if(pmsg->PlayerID == eFriend_AddInvalidUser) //绝绰 蜡历
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(83), pmsg->Name );
}
else if(pmsg->PlayerID == eFriend_AddFullList) //府胶飘俊 促 谩促. max = 20
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(84), pmsg->Name );
}
else if(pmsg->PlayerID == eFriend_NotLogin)
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(85), pmsg->Name );
}
else if(pmsg->PlayerID == eFriend_OptionNoFriend)
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(106));
}
else if(pmsg->PlayerID == eFriend_AlreadyRegist)
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(86), pmsg->Name );
}
}
break;
case MP_FRIEND_DEL_NACK:
{
MSG_FRIEND_MEMBER_ADDDELETEID* pmsg = (MSG_FRIEND_MEMBER_ADDDELETEID*)pMsg;
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(88), pmsg->Name );
}
break;
case MP_FRIEND_SENDNOTE_NACK:
{
MSG_BYTE * pmsg = (MSG_BYTE*)pMsg;
if(pmsg->bData == 2) //invalid user
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(94) );
else if(pmsg->bData == 3) //full list
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(129) );
}
break;
}
}
void CFriendManager::AddDelFriendSyn(char* pFriendName, BYTE Protocol)
{
if(m_Friend.IsInFriendList(pFriendName) == TRUE)
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(86), pFriendName);
return;
}
MSG_NAME msg;
msg.Category = MP_FRIEND;
msg.Protocol = Protocol; //MP_FRIEND_ADD_SYN or MP_FRIEND_DEL_SYN
//strcpy(msg.Name, pFriendName);
SafeStrCpy(msg.Name, pFriendName, MAX_NAME_LENGTH+1);
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(100) );
}
void CFriendManager::FriendInviteAccept()
{
MSG_DWORD msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_ADD_ACCEPT;
msg.dwData = GetRequestPlayerID();
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
SetRequestPlayer(0, "");
}
void CFriendManager::FriendInviteDeny()
{
MSG_FRIEND_MEMBER_ADDDELETEID msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_ADD_DENY;
msg.PlayerID = GetRequestPlayerID();
msg.dwObjectID = HEROID;
strcpy(msg.Name, HERO->GetObjectName());
NETWORK->Send(&msg, sizeof(msg));
SetRequestPlayer(0, "");
}
void CFriendManager::SetRequestPlayer(DWORD FromPlayerID, char* Name)
{
m_RequestPlayerID = FromPlayerID;
strcpy(m_RequestPlayerName, Name);
}
void CFriendManager::FriendListSyn(WORD SelectedPage)
{
if(m_bFriendInit == TRUE)
{
GAMEIN->GetFriendDialog()->SetActive(TRUE);
GAMEIN->GetFriendDialog()->SetFriendList(1);
return;
}
MSG_WORD msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_LIST_SYN;
msg.wData = SelectedPage;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
GAMEIN->GetFriendDialog()->SetSelectedFriendPge(SelectedPage);
// GAMEIN->GetFriendDialog()->SetActive(TRUE);
}
void CFriendManager::DelFriendSynbyID(DWORD FriendID,BOOL bLast)
{
if(m_Friend.IsInFriendList(FriendID) == FALSE)
{
ASSERT(0);
return;
}
MSG_DWORD2 msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_DELID_SYN;
msg.dwObjectID = HEROID;
msg.dwData1 = FriendID;
msg.dwData2 = bLast;
NETWORK->Send(&msg, sizeof(msg));
}
void CFriendManager::AddFriendSynbyID(DWORD TargetID, char* TargetName, char* FromName)
{
if(m_Friend.IsInFriendList(TargetID) == TRUE)
{
CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(86), TargetName);
return;
}
MSG_FRIEND_MEMBER_ADDDELETEID msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_ADDID_SYN;
msg.dwObjectID = HEROID; //FROM PLAYER
msg.PlayerID = TargetID; //TO PLAYER
SafeStrCpy(msg.Name, FromName, MAX_NAME_LENGTH+1);
NETWORK->Send(&msg, sizeof(msg));
}
//////////////////////////////////////////////////////////////////////////
//率瘤
void CFriendManager::WriteNote(char* Note, char* ToName)
{
MSG_FRIEND_SEND_NOTE msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_SENDNOTE_SYN;
msg.FromId = HEROID;
SafeStrCpy(msg.ToName, ToName, MAX_NAME_LENGTH+1);
SafeStrCpy(msg.FromName, HERO->GetObjectName(), MAX_NAME_LENGTH+1);
SafeStrCpy(msg.Note, Note, MAX_FRIEND_NOTE_LENGTH+1);
NETWORK->Send(&msg, msg.GetMsgLength());
}
void CFriendManager::WriteNoteID(char* Note, DWORD TargetID)
{
MSG_FRIEND_SEND_NOTE_ID msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_SENDNOTEID_SYN;
msg.dwObjectID = HEROID;
SafeStrCpy(msg.FromName, HERO->GetObjectName(), MAX_NAME_LENGTH+1);
msg.TargetID = TargetID;
SafeStrCpy(msg.Note, Note, MAX_FRIEND_NOTE_LENGTH+1);
NETWORK->Send(&msg, msg.GetMsgLength());
}
void CFriendManager::DelNoteSyn(DWORD NoteID, BOOL bLast)
{
MSG_FRIEND_DEL_NOTE msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_DELNOTE_SYN;
msg.NoteID = NoteID;
msg.dwObjectID = HEROID;
msg.bLast = bLast;
NETWORK->Send(&msg, sizeof(msg));
}
void CFriendManager::DelAllNoteSyn()
{
MSGBASE msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_DELALLNOTE_SYN;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
}
void CFriendManager::NoteListSyn(WORD SelectedPage)
{
if(HERO->IsInited() == FALSE)
return;
if(HEROID > 10000000)
{
char buf[256];
sprintf(buf, "HeroId: %d, HeroName: %s, HeroSim: %d", HEROID, HERO->GetObjectName(), HERO->GetSimMek());
ASSERTMSG(0, buf);
}
MSG_WORD msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_NOTELIST_SYN;
msg.wData = SelectedPage;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
GAMEIN->GetNoteDialog()->SetSelectedNotePge(SelectedPage);
}
void CFriendManager::ReadNote(DWORD NoteID, BOOL IsFront)
{
MSG_DWORD2 msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_READNOTE_SYN;
msg.dwData1 = NoteID;
msg.dwData2 = IsFront;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
}
void CFriendManager::LogInNotify()
{
MSGBASE msg;
msg.Category = MP_FRIEND;
msg.Protocol = MP_FRIEND_LOGIN;
msg.dwObjectID = HEROID;
NETWORK->Send(&msg, sizeof(msg));
}
void CFriendManager::GetFriendListInfo(FRIEND_LIST* rtInfo, int pagenum)
{
m_Friend.GetFriendListInfo(rtInfo, pagenum);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -