⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailmgr.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MailMgr.cpp: implementation of the CMailMgr class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Chat.h"
#include "Hangul.h"
#include "menu.h"
#include "dragon.h"
#include "Hong_Sub.h"
#include "Map.h"
#include "CharDataTable.h"
#include "TeamBattle.h"
#include "GameProc.h"
#include "LineCommand.h"
#include "Tool.h"
#include "Hong_Sprite.h"
#include "directsound.h"
#include "SmallMenu.h"
#include "TextOutMgr.h"
#include "MailMgr.h"
#include "menudef2.h"
#include "NetWork.h"
#include <direct.h>
//////////////////////////////////////////////////////////////////////
// Construction / Destruction
//////////////////////////////////////////////////////////////////////
//LC_GUILD_MAIL 捞芭 辨靛 皋老 焊绰芭促 炼缴 ~
/* ETC
200 : "皋老鸥涝俊 巩力啊 乐嚼聪促."
201 : "罐绰 荤恩阑 瘤沥秦 林绞矫夸."
202 : "皋老 力格阑 涝仿秦 林绞矫夸."
203 : "皋老 郴侩阑 涝仿秦 林绞矫夸."
204 : "皋老捞 '%s'俊 历厘登菌嚼聪促."
205 : "皋老 历厘俊 角菩 沁嚼聪促."
*/
CMailMgr g_MailMgr;
CMailMgr::CMailMgr()
{
	Clear();
}

CMailMgr::~CMailMgr()
{
	Clear();
	ClearTempData();
}

bool CMailMgr::Send(const int iType, const char* szTarget, const char *szTitle, const char *szBody)//焊郴扁
{
	switch(iType)
	{
	case GUILD_MAIL:
		{
			if( !CheckGuildCode(Hero->GetGuildCode()) ) //辨靛内靛啊 绝促
			{	// 皋矫瘤 冠胶 免仿
				Kein_PutMessage( KM_FAIL, kein_GetMenuString( 79 ));
				return false;		// 辨靛甫 啊瘤绊 乐绢具 辨靛 皋老阑 焊尘荐 乐促.
			}
		}break;
	case NORMAL_MAIL:
	case GAMEMASTER_MAIL:
	case NORMAL_MAIL_REPLY:
	case GAMEMASTER_MAIL_REPLY:
		{
		}break;
	default:
		{
			::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(5,200) );
			return false;//鸥涝捞 撇啡家
		}break;
	}
	
	const int iTargetLen	= ::strlen(szTarget);
	const int iTitleLen		= ::strlen(szTitle);
	const int iBodyLen		= ::strlen(szBody);

	if( (GUILD_MAIL != iType) && !iTargetLen)
	{
		::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(5,201) );
		
		return false;
	}

	if(	!iTitleLen)
	{
		::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(5,202));
		return false;
	}

	if(	!iBodyLen)
	{
		::AddCurrentStatusMessage( 250, 100, 100, lan->OutputMessage(5,203));
		return false;
	}

	//皋老阑 焊忱聪促.
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Mail Send");

	//皋老阑 焊郴摆瘤~.. 
	{	//< CSD-030324
//		ConvString(szTitle);
//		ConvString(szBody);
		t_packet p;

		p.h.header.type = CMD_MAIL_SEND;
		
		p.h.header.size = sizeof( MAILSEND ) - 1000 + ::strlen( szBody )+1;

		p.u.Hwoa.rang.MailSend.iType = iType;
		
		::strcpy(p.u.Hwoa.rang.MailSend.szTarget, szTarget);
		
		if(GUILD_MAIL == iType)
		{
			::strcpy(p.u.Hwoa.rang.MailSend.szTarget, " ");
		}
		
		::strcpy(p.u.Hwoa.rang.MailSend.szSender, Hero->name);
		::strcpy(p.u.Hwoa.rang.MailSend.szTitle, szTitle);
		::strcpy(p.u.Hwoa.rang.MailSend.szBody, szBody );
		
		::QueuePacket( &p, 1 );
	}
	return true;
}

void CMailMgr::SendDelete(const int iCallType)//泅犁 急琶等 府胶飘甫 瘤矿聪促.
{//Force 啊 1 捞绊 牢郸胶啊 逞绢坷搁 瘤快扼绊 焊忱聪促.
	
	t_packet p;
	p.h.header.type = CMD_MAIL_DELETE;
	p.h.header.size = sizeof( MAILDELETE );
	::strcpy(p.u.Hwoa.rang.MailDelete.szName, Hero->name);

	ZeroMemory( p.u.Hwoa.rang.MailDelete.aiMailIndex,sizeof(int)*MAX_MAIL_PAGE);

	bool bIsCanSend = false;
	if(iCallType)//焊绊乐绰 其捞瘤
	{
		p.u.Hwoa.rang.MailDelete.aiMailIndex[0]  = GetTempMailIndex();
		bIsCanSend = true;
	}
	else
	{
		for(int i = 0; MAX_MAIL_PAGE > i ; i++)
		{
			if(m_MailList[i].bIsSelect)//伎泛飘 等仇篮
			{
				p.u.Hwoa.rang.MailDelete.aiMailIndex[i] = GetMailIndex(i);
				bIsCanSend = true;
			}
		}
	}
	if(bIsCanSend)
	{
		::QueuePacket( &p, 1 );
		SendReqMailList(m_iNowViewType,GetNowViewPageNo());
	}
}//瘤快扁(府胶飘 锅龋甫 焊忱聪促.)

void CMailMgr::SendRepair()//泅犁 急琶等 府胶飘甫 汗盔钦聪促.
{//Force 啊 1 捞绊 牢郸胶啊 逞绢坷搁 瘤快扼绊 焊忱聪促.
	t_packet p;
	p.h.header.type = CMD_MAIL_REPAIR;
	p.h.header.size = sizeof( MAILDELETE );
	::strcpy(p.u.Hwoa.rang.MailDelete.szName, Hero->name);

	ZeroMemory( p.u.Hwoa.rang.MailDelete.aiMailIndex,sizeof(int)*MAX_MAIL_PAGE);

	bool bIsCanSend = false;

	for(int i = 0; MAX_MAIL_PAGE > i ; i++)
	{
		if(m_MailList[i].bIsSelect)//伎泛飘 等仇篮
		{
			p.u.Hwoa.rang.MailDelete.aiMailIndex[i] = GetMailIndex(i);
			bIsCanSend = true;
		}
	}

	if(bIsCanSend)
	{
		::QueuePacket( &p, 1 );
		SendReqMailList(m_iNowViewType,GetNowViewPageNo());
	}
}//瘤快扁(府胶飘 锅龋甫 焊忱聪促.)

void CMailMgr::RequestBody(const int iMailIndex)//秦寸 皋老狼 郴侩 罐扁
{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Req Mail Body, INDEX [%d]",iMailIndex);
//	ConvString(szTitle);
//	ConvString(szBody);
	t_packet p;

	p.h.header.type = CMD_MAIL_REQ_BODY;
	
	p.h.header.size = sizeof( REQESTMAILBODY );
	
	p.u.Hwoa.rang.ReqestMailBody.iMailIndex = iMailIndex;
	::strcpy(p.u.Hwoa.rang.ReqestMailBody.szName, Hero->name);

//	aiMailIndex[MAX_MAIL_PAGE];
	::QueuePacket( &p, 1 );
}

void CMailMgr::RecvBody(t_packet *p)//秦寸 皋老狼 郴侩 罐扁
{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Recv Mail Body");
	ClearTempData();
	
	m_TempMailData;//咯扁促 悸泼阑 窍绊 剁况 凛矫促.
	m_TempMailBody;//罐绊 镜锭 烙矫 傍埃

	LPREQESTMAILBODYRESULT pRMBR = &p->u.Hwoa.rang.ReqestMailBodyResult;

	m_TempMailData.iIndex = pRMBR->iMailIndex;

	m_TempMailData.iType = pRMBR->iType;
	m_TempMailData.bIsRead = true;
	
	::EatRearWhiteChar(pRMBR->szSender);
	::strcpy(m_TempMailData.szSender, pRMBR->szSender);

	::EatRearWhiteChar(pRMBR->szReceiver);
	::strcpy(m_TempMailData.szReceiver,pRMBR->szReceiver);

	::EatRearWhiteChar(pRMBR->szTitle);
	::strcpy(m_TempMailData.szTitle,pRMBR->szTitle);
	
	::EatRearWhiteChar(pRMBR->szBody);
	::strcpy(m_TempMailBody.szBody, pRMBR->szBody);

	m_TempMailData.date = pRMBR->date;
	
	::CallSmallMenu(MN_MAIL_READ);
}

void CMailMgr::SaveMailToLocal()//急琶等 皋老 历厘 窍扁.
{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Mail Save To Pc");
	const char szMailSaveFolder[] = "/MyMail";
	char szTargetFolder[MAX_PATH] = {0,};

	::sprintf(szTargetFolder,"%s%s",GetCurrentWorkingDirectory(),szMailSaveFolder);

	::mkdir(szTargetFolder);
	
	//皋老 技捞宏 钦聪促.
	
	char szTime[MAX_PATH] = {0,};
	GetTempMailDate(false,szTime);

	char szMailName[MAX_PATH] = {0,};
	
	static int iCt = 0;
	::sprintf(szMailName,"%s/From %s %s(%d).txt",
		szTargetFolder,GetTempMailSender(),	szTime,iCt++);
	
	FILE *fp = ::fopen(szMailName, "wt");
	if(fp)
	{
		::fprintf(fp,"Title:\n");
		::fprintf(fp,"%s\n",GetTempMailTitle());
		::fprintf(fp,"\n");

		::fprintf(fp,"From:" );
		::fprintf(fp,"	%s\n",GetTempMailSender());
		::fprintf(fp,"\n");

		::fprintf(fp,"Date:" );
		char szTime[MAX_PATH] = {0,};
		GetTempMailDate(true,szTime);
		::fprintf(fp,"	%s\n",szTime);
		::fprintf(fp,"\n");

		::fprintf(fp,"%s\n",GetTempMailBody());
		::fclose(fp);
		::AddCurrentStatusMessage( FONT_COLOR_RARE_MAIN, lan->OutputMessage(5,204),szTargetFolder);
		
	}
	else
	{
		::AddCurrentStatusMessage( FONT_COLOR_SOLID_RED, lan->OutputMessage(5,205));
	}
}

void CMailMgr::ClearTempData()
{
	ZeroMemory(&m_TempMailData, sizeof(MAILDATA));
	ZeroMemory(&m_TempMailBody, sizeof(MAILBODY));
}

void CMailMgr::Clear()
{
	SetExistNotRead(false);
	m_iNowViewType = MVT_RECV_LIST;
	ZeroMemory(m_MailList, sizeof(INTERFACEMAILDATA)*MAX_MAIL_PAGE);
}

void CMailMgr::SendReqMailList(const int eViewType, const int iPageIndex)//牢郸胶 其捞瘤 荐
{
	if( 0 > iPageIndex || 5 <= iPageIndex)
	{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Page Index Too Over/Down");
		return;
	}
	::CloseAllMenu();
	Clear();
	switch(eViewType)//eMAIL_VIEW_TYPE
	{
	case MVT_RECV_LIST:
		{
		}break;
	case MVT_DELETE_LIST:
		{
		}break;
	default:
		{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "View Type Error");
			return;
		}break;
	}

	t_packet packet;
	packet.h.header.type = CMD_MAIL_REQUEST_LIST;
	packet.h.header.size = sizeof(REQESTMAILLIST);
	
	packet.u.Hwoa.rang.ReqestMailList.iPageIndex = iPageIndex;
	packet.u.Hwoa.rang.ReqestMailList.iWantMailType = eViewType;
	
	::strcpy(packet.u.Hwoa.rang.ReqestMailList.szName,Hero->name);
	
	packet.u.Hwoa.rang.ReqestMailList.szName[MAX_NAME-1] = NULL;
	::QueuePacket(&packet,1);

//COMMENT	RecvMailList( (eMAIL_VIEW_TYPE)eViewType);
}

void CMailMgr::SetInterFaceMailData(const int iMailListIndex, const bool bIsSelect , LPMAILDATA pMailData)
{
	if(!CheckIndex(iMailListIndex))
	{
		return;
	}

	m_MailList[iMailListIndex].MailData = *pMailData;
}

void CMailMgr::RecvMailList(t_packet *p)
{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Call Mail Main Menu");	
	Clear();	
	ClearTempData();
	
	LPMAILLISTRESULT pMLR = &p->u.Hwoa.rang.MailListResult;

	const int iViewType =  pMLR->iWantViewType;

	for(int i = 0; MAX_MAIL_PAGE > i; i++)
	{
		SetInterFaceMailData(i, false , &pMLR->MailData[i]);
	}

	switch(iViewType)//eMAIL_VIEW_TYPE
	{
	case MVT_RECV_LIST:
		{
			::SMenuReg(MN_MAIL_MENU, 400, 0, MAIL_MENU,0,11,0);

			::SMenuFTReg(MN_MAIL_MENU,0,FT_NONE, SWD_CALL_MAILMENU, //徘阑 厚劝己拳 矫挪促
			20,61,73,19, MAIL_MENU, 49, 49,MVT_RECV_LIST);

			::SMenuFTReg(MN_MAIL_MENU,1,FT_HIDE_SPECIAL_WILLDO_AUTO_PUT, SWD_CALL_MAILMENU, //徘阑 劝己拳 矫挪促
			98,61,72,19, MAIL_MENU, 50, 50,MVT_DELETE_LIST);

			//皋老 汗盔
			::SMenuFTReg(MN_MAIL_MENU,2,FT_NONE, SWD_MAIL_REPAIR, //厚劝己拳
			186,442 ,78,30, MAIL_MENU, 51, 52,MVT_DELETE_LIST);
		}break;
	case MVT_DELETE_LIST:
		{
			::SMenuReg(MN_MAIL_MENU, 400, 0, MAIL_MENU,1,11,0);

			::SMenuFTReg(MN_MAIL_MENU,0,FT_HIDE_SPECIAL_WILLDO_AUTO_PUT, SWD_CALL_MAILMENU, //徘阑 劝己拳 矫挪促
			20,61,73,19, MAIL_MENU, 49, 49,MVT_RECV_LIST);

			::SMenuFTReg(MN_MAIL_MENU,1,FT_NONE, SWD_CALL_MAILMENU, //徘阑 厚劝己拳 矫挪促
			98,61,72,19, MAIL_MENU, 50, 50,MVT_DELETE_LIST);

			//皋老 汗盔
			::SMenuFTReg(MN_MAIL_MENU,2,FT_HIDE_SPECIAL_WILLDO_AUTO_PUT, SWD_MAIL_REPAIR, //劝己拳
			186,442 ,78,30, MAIL_MENU, 51, 52,MVT_DELETE_LIST);
		}break;
	default:
		{
COMMENT	::AddCurrentStatusMessage( 250, 100, 100, "Mail List is Wrong!! Call Developer");				
		}break;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -