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

📄 mapgroup.cpp

📁 魔域源代码需要的可以学习一下真么这么麻烦啊
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			struct tm time0, time1;
			memset(&time0, 0L, sizeof(tm));
			memset(&time1, 0L, sizeof(tm));
			
			time0.tm_year	=pTime->tm_year;
			time0.tm_mon	=pTime->tm_mon;	
			time0.tm_mday	=nDay0;
			time0.tm_hour	=nHour0;
			time0.tm_min	=nMinute0;
			time0.tm_isdst	=pTime->tm_isdst;
			
			time1.tm_year	=pTime->tm_year;
			time1.tm_mon	=pTime->tm_mon;
			time1.tm_mday	=nDay1;
			time1.tm_hour	=nHour1;
			time1.tm_min	=nMinute1;
			time1.tm_isdst	=pTime->tm_isdst;
			
			time_t t0	=mktime(&time0);
			time_t t1	=mktime(&time1);
			
			if (ltime >= t0 && ltime<= t1)
				return true;
		}
	}
	else if (dwType == 3)	//周时间
	{
		if (6 == sscanf(pszParam, "%d %d:%d %d %d:%d",
			&nDay0, &nHour0, &nMinute0,
			&nDay1, &nHour1, &nMinute1))
		{
			DWORD timeNow	=nCurWeekDay*24*60+nCurHour*60+nCurMinute;
			if (timeNow >= nDay0*24*60+nHour0*60+nMinute0 && 
					timeNow <= nDay1*24*60+nHour1*60+nMinute1)
			{
				return true;
			}
		}
	}
	else if (dwType == 4)	//日时间
	{
		if (4 == sscanf(pszParam, "%d:%d %d:%d",
			&nHour0, &nMinute0,
			&nHour1, &nMinute1))
		{
			DWORD timeNow	=nCurHour*60+nCurMinute;
			if (timeNow >= nHour0*60+nMinute0 && 
					timeNow <= nHour1*60+nMinute1)
			{
				return true;
			}
		}
	}
	else if (dwType == 5)	//小时时间
	{
		if (2 == sscanf(pszParam, "%d %d",
			&nMinute0,
			&nMinute1))
		{
			if (nCurMinute >= nMinute0 && nCurMinute <= nMinute1)
			{
				return true;
			}
		}
	}

	return false;
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::ProcessEvent(void)
{
	CONST OBJID ID_EVENT_BEGIN	= 2000000;
	CONST DWORD MAX_EVENT		= 100;

	OBJID idBegin = ID_EVENT_BEGIN+m_idProcess*10000;
	for (OBJID id=idBegin; id<idBegin+MAX_EVENT; id++)
	{
		//this->ProcessAction(id);
		if (ActionSet()->GetObj(id))
			GameAction()->ProcessAction(id);
	}
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SendClientMsg(SOCKET_ID idSocket, CNetMsg* pMsg)
{
	pMsg->AppendInfo(m_idProcess, idSocket, ID_NONE);
	return m_pSocket->SendMsg(pMsg);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SendNpcMsg(OBJID idNpc, CNetMsg* pMsg)
{
	pMsg->AppendInfo(m_idProcess, SOCKET_NONE, idNpc);
	return m_pSocket->SendMsg(pMsg);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SendBroadcastMsg(CNetMsg* pMsg)
{
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
		{
			MESSAGESTR	buf;
			CLIENTMSG_PACKET0* pPacket = (CLIENTMSG_PACKET0*)buf;
			pPacket->idSocket	= pMsg->GetSocketID();
			pPacket->idPacket	= pMsg->GetType();
			memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
			pPacket->nSize		= pMsg->GetSize();
			m_pMsgPort->Send(i, MAPGROUP_BROADCASTMSG, STRUCT_TYPE(buf), pPacket);
		}
	}
	return true;
}

//////////////////////////////////////////////////////////////////////
// 广播给其它地图组核心处理
bool CMapGroup::TransmitMsg(CNetMsg* pMsg, SOCKET_ID idSocket, OBJID idNpc)
{
	ASSERT(idSocket != SOCKET_NONE || idNpc != ID_NONE);

	MESSAGESTR	buf;
	TRANSMSG_PACKET0* pPacket = (TRANSMSG_PACKET0*)buf;
	pPacket->idSocket	= idSocket;
	pPacket->idNpc		= idNpc;
	pPacket->idPacket	= pMsg->GetType();
	memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
	pPacket->nSize		= pMsg->GetSize();
	pPacket->nTrans		= pMsg->GetTransData();
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
			m_pMsgPort->Send(i, MAPGROUP_TRANSMITMSG, STRUCT_TYPE(buf), pPacket);
	}
	return true;
}

//////////////////////////////////////////////////////////////////////
// 广播给其它地图组核心处理
void CMapGroup::RemoteCall(REMOTE_CALL0* pInfo,bool bSendToLocal)
{
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if (i != m_idProcess || bSendToLocal)
			m_pMsgPort->Send(i, MAPGROUP_REMOTECALL, BUFFER_TYPE(pInfo->nSize), pInfo);
	}
}

//////////////////////////////////////////////////////////////////////
// 广播给世界核心处理
bool CMapGroup::TransmitWorldMsg(CNetMsg* pMsg)
{
	MESSAGESTR	buf;
	TRANSMSG_PACKET0* pPacket = (TRANSMSG_PACKET0*)buf;
	pPacket->idSocket	= pMsg->GetSocketID();
	pPacket->idNpc		= pMsg->GetNpcID();
	pPacket->idPacket	= pMsg->GetType();
	memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
	pPacket->nSize		= pMsg->GetSize();
	pPacket->nTrans		= pMsg->GetTransData();

	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_TRANSMITMSG, STRUCT_TYPE(buf), pPacket);
	return true;
}

//////////////////////////////////////////////////////////////////////
// 通过世界核心转发给玩家
bool CMapGroup::TransmitWorldMsg(CNetMsg* pMsg, LPCTSTR szName)
{
	MESSAGESTR	buf;
	USERNAMEMSG_PACKET0* pPacket = (USERNAMEMSG_PACKET0*)buf;
	pPacket->idSocket	= pMsg->GetSocketID();
	pPacket->idPacket	= pMsg->GetType();
	memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
	pPacket->nSize		= pMsg->GetSize();
	SafeCopy(pPacket->szName, szName, _MAX_NAMESIZE);
	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_USERNAMEMSG, STRUCT_TYPE(buf), pPacket);

	return true;
}

//////////////////////////////////////////////////////////////////////
// 通过世界核心转发给玩家
bool CMapGroup::TransmitWorldMsg(CNetMsg* pMsg, OBJID idUser)
{
	MESSAGESTR	buf;
	USERIDMSG_PACKET0* pPacket = (USERIDMSG_PACKET0*)buf;
	pPacket->idSocket	= pMsg->GetSocketID();
	pPacket->idPacket	= pMsg->GetType();
	memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
	pPacket->nSize		= pMsg->GetSize();
	pPacket->idUser		= idUser;
	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_USERIDMSG, STRUCT_TYPE(buf), pPacket);

	return true;
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SendSocketUserInfo(PROCESS_ID idProcess, SOCKET_ID idSocket, UserInfoStruct* pInfo)
{
	// 通知另一地图组
	MESSAGESTR	buf;
	ST_USERCHANGEMAPGORUP* pPacket = (ST_USERCHANGEMAPGORUP*)buf;
	pPacket->idSocket	= idSocket;
	memcpy(&pPacket->info, pInfo, sizeof(UserInfoStruct));
	return m_pMsgPort->Send(idProcess, MAPGROUP_SOCKETUSERINFO, STRUCT_TYPE(ST_USERCHANGEMAPGORUP), &buf);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SendObjInfo(PROCESS_ID idProcess, OBJID idUser, INFO_ID nInfoID, void* pInfo, int nSize)
{
	CHECKF(nInfoID > INFO_NONE && nInfoID < 20); // 20 最多20种INFO
	MESSAGESTR	buf;
	CHANGEMAPGORUP_INFO0* pPacket		= (CHANGEMAPGORUP_INFO0*)buf;
	pPacket->idUser		= idUser;
	pPacket->nInfoType	= nInfoID;
	memcpy(&pPacket->info, pInfo, nSize);
	return m_pMsgPort->Send(idProcess, MAPGROUP_SENDOBJINFO, STRUCT_TYPE(buf), pPacket);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::SetNpcProcessID(OBJID idNpc, bool bAddNew)
{
	CHANGE_NPCPROCESSID	buf;
	buf.idNpc		= idNpc;
	if(bAddNew)
		buf.idProcess	= m_idProcess;
	else
		buf.idProcess	= PROCESS_NONE;
	return m_pMsgPort->Send(MSGPORT_SOCKET, SOCKET_SETNPCPROCESSID, STRUCT_TYPE(CHANGE_NPCPROCESSID), &buf);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::ChangeMapGroup(PROCESS_ID idProcess, OBJID idUser, OBJID idMap, int nPosX, int nPosY)
{
	ST_CHANGEMAPGROUP	st;
	st.idUser	= idUser;
	st.idMap	= idMap;
	st.nPosX	= nPosX;
	st.nPosY	= nPosY;
	return m_pMsgPort->Send(idProcess, MAPGROUP_CHANGEMAPGROUP, STRUCT_TYPE(ST_CHANGEMAPGROUP), &st);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::PrintText			(LPCTSTR szText)
{
	return m_pMsgPort->Send(MSGPORT_SHELL, SHELL_PRINTTEXT, STRING_TYPE(szText), szText);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::CloseMapGroup(SOCKET_ID idGmSocket)		// 关闭所有socket(除GM),禁止登录
{
	// TODO: 请在此添加关闭客户端SOCKET的代码
	return m_pMsgPort->Send(MSGPORT_SOCKET, SOCKET_BREAKALLCONNECT, VARTYPE_INT, &idGmSocket);

	RoleManager()->SaveAll();
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::ChangeTeam(int nAction, OBJID idTeam, OBJID idUser, int nData)			// 组队相关
{
	ST_CHANGETEAM	st;
	st.nAction	= nAction;
	st.idTeam	= idTeam;
	st.idUser	= idUser;
	st.nData	= nData;
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
			m_pMsgPort->Send(i, MAPGROUP_CHANGETEAM, STRUCT_TYPE(st), &st);
	}
	return true;
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::ModifyNpc(OBJID idNpc, LPCTSTR szField, LPCTSTR szData)
{
	char	buf[1024];
	char*	ptr = buf;
	*(int*)ptr	= idNpc;
	ptr	+= sizeof(int);
	strcpy(ptr, szField);
	ptr	= ptr + strlen(szField) + 1;
	strcpy(ptr, szData);
	ptr = ptr + strlen(szData) + 1;

	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
			m_pMsgPort->Send(i, MAPGROUP_CHANGENPC, BUFFER_TYPE(ptr - buf), buf);
	}
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::DelTransNpc(OBJID idMasterNpc, bool bBroadcast)
{
	for(IRoleSet::Iter i = RoleManager()->QuerySet()->Begin(); i != RoleManager()->QuerySet()->End(); i++)
	{
		IRole* pRole = RoleManager()->QuerySet()->GetObjByIter(i);
		if(pRole)
		{
			CNpc* pNpc;
			if(pRole->QueryObj(OBJ_NPC, IPP_OF(pNpc)))
			{
				if(pNpc->GetType() == _SYNTRANS_NPC && pNpc->GetInt(NPCDATA_LINKID) == idMasterNpc)
					ASSERT(pNpc->DelNpc());
			}
		}
	}

	if(bBroadcast)
	{
		for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
		{
			if(i != m_idProcess)		// 不回送
				m_pMsgPort->Send(i, MAPGROUP_DELTRANSNPC, VARTYPE_INT, &idMasterNpc);
		}
	}
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::ChangeCode (SOCKET_ID idSocket, DWORD dwData)
{
	CHANGE_USERDATA	st;
	st.idSocket		= idSocket;
	st.nData		= dwData;
	m_pMsgPort->Send(MSGPORT_SOCKET, SOCKET_CHANGECODE, STRUCT_TYPE(CHANGE_USERDATA), &st);
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::SendRpc(const CEventPack& pack)
{
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
			m_pMsgPort->Send(i, MAPGROUP_RPC, BUFFER_TYPE(pack.GetSize()), pack.GetBuf());
	}
}

//////////////////////////////////////////////////////////////////////
// syndicate
//////////////////////////////////////////////////////////////////////
bool CMapGroup::CreateSyndicate		(const CreateSyndicateInfo* pInfo)
{
	return m_pMsgPort->Send(MSGPORT_WORLD, KERNEL_CREATESYNDICATE, STRUCT_TYPE(CreateSyndicateInfo), pInfo);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::DestroySyndicate(OBJID idSyn, OBJID idTarget)
{
	OBJID	setID[2];
	setID[0]	= idSyn;
	setID[1]	= idTarget;
	return m_pMsgPort->Send(MSGPORT_WORLD, KERNEL_DESTROYSYNDICATE,	STRUCT_TYPE(setID), &setID);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::CombineSyndicate(OBJID idSyn, OBJID idTarget)
{
	OBJID	setID[2];
	setID[0]	= idSyn;
	setID[1]	= idTarget;
	return m_pMsgPort->Send(MSGPORT_WORLD, KERNEL_COMBINESYNDICATE, STRUCT_TYPE(setID), &setID);
}

//////////////////////////////////////////////////////////////////////
bool CMapGroup::ChangeSyndicate		(const SynFuncInfo0* pFuncInfo)
{
	return m_pMsgPort->Send(MSGPORT_WORLD, KERNEL_CHANGESYNDICATE, BUFFER_TYPE(pFuncInfo->nSize), pFuncInfo);
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::SetMapSynID(OBJID idMap, OBJID idSyn)
{
	OBJID	setID[2];
	setID[0]	= idMap;
	setID[1]	= idSyn;
	for(int i = MSGPORT_MAPGROUP_FIRST; i < m_pMsgPort->GetSize(); i++)
	{
		if(i != m_idProcess)		// 不回送
			m_pMsgPort->Send(i, MAPGROUP_SETMAPSYNID, STRUCT_TYPE(setID), &setID);
	}
}

//////////////////////////////////////////////////////////////////////
int CMapGroup::GetMapGroupAmount()
{
	CHECKF(m_pMsgPort);
	return m_pMsgPort->GetSize() - MSGPORT_MAPGROUP_FIRST + 1;
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::LevelUp		(OBJID idUser, int nLevel)
{
	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_LEVELUP, VARTYPE_INT, &idUser);
}

//////////////////////////////////////////////////////////////////////
void CMapGroup::QueryFee		(OBJID idAccount)
{
	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_QUERYFEE, VARTYPE_INT, &idAccount);
}



bool CMapGroup::TransmitWorldMsg(SOCKET_ID idSocket,CNetMsg *pMsg)
{
	MESSAGESTR	buf;
	TRANSMSG_PACKET0* pPacket = (TRANSMSG_PACKET0*)buf;
	pPacket->idSocket	= idSocket;
	pPacket->idNpc		= pMsg->GetNpcID();
	pPacket->idPacket	= pMsg->GetType();
	memcpy(pPacket->buf, pMsg->GetBuf(), pMsg->GetSize());
	pPacket->nSize		= pMsg->GetSize();
	pPacket->nTrans		= pMsg->GetTransData();

	m_pMsgPort->Send(MSGPORT_WORLD, WORLD_TRANSMITMSG, STRUCT_TYPE(buf), pPacket);

	return true;
}

⌨️ 快捷键说明

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