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

📄 mapdata.cpp

📁 战场登陆器vc++源代码很好用的哦精彩精彩
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	m_stFrame[67][DEF_OBJECTMOVE].m_sFrameTime		= 120;
	m_stFrame[68][DEF_OBJECTMOVE].m_sMaxFrame		= 3;
	m_stFrame[67][DEF_OBJECTATTACK].m_sFrameTime	= 80;
	m_stFrame[67][DEF_OBJECTATTACK].m_sMaxFrame		= 3;
	m_stFrame[67][DEF_OBJECTDAMAGE].m_sFrameTime	= 60;
	m_stFrame[67][DEF_OBJECTDAMAGE].m_sMaxFrame		= 3;
	m_stFrame[67][DEF_OBJECTDYING].m_sFrameTime		= 65;
	m_stFrame[67][DEF_OBJECTDYING].m_sMaxFrame		= 3+3;

   	// Perry
	m_stFrame[68][DEF_OBJECTSTOP].m_sFrameTime		= 200;
	m_stFrame[68][DEF_OBJECTSTOP].m_sMaxFrame		= 3;
	m_stFrame[68][DEF_OBJECTMOVE].m_sFrameTime		= 90;
	m_stFrame[68][DEF_OBJECTMOVE].m_sMaxFrame		= 3;
	m_stFrame[68][DEF_OBJECTATTACK].m_sFrameTime	= 80;
	m_stFrame[68][DEF_OBJECTATTACK].m_sMaxFrame		= 3;
	m_stFrame[68][DEF_OBJECTDAMAGE].m_sFrameTime	= 60;
	m_stFrame[68][DEF_OBJECTDAMAGE].m_sMaxFrame		= 3;
	m_stFrame[68][DEF_OBJECTDYING].m_sFrameTime		= 65;
	m_stFrame[68][DEF_OBJECTDYING].m_sMaxFrame		= 3 +3;

   	// Devlin
	m_stFrame[69][DEF_OBJECTSTOP].m_sFrameTime		= 200;
	m_stFrame[69][DEF_OBJECTSTOP].m_sMaxFrame		= 3;
	m_stFrame[69][DEF_OBJECTMOVE].m_sFrameTime		= 90;
	m_stFrame[68][DEF_OBJECTMOVE].m_sMaxFrame		= 3;
	m_stFrame[69][DEF_OBJECTATTACK].m_sFrameTime	= 80;
	m_stFrame[69][DEF_OBJECTATTACK].m_sMaxFrame		= 3;
	m_stFrame[69][DEF_OBJECTDAMAGE].m_sFrameTime	= 60;
	m_stFrame[69][DEF_OBJECTDAMAGE].m_sMaxFrame		= 3;
	m_stFrame[69][DEF_OBJECTDYING].m_sFrameTime		= 65;
	m_stFrame[69][DEF_OBJECTDYING].m_sMaxFrame		= 3 +3;
}

void CMapData::Init()
{
	int x, y;
	m_dwFrameCheckTime = timeGetTime();
	m_dwFrameAdjustTime = 0;
	m_sPivotX = -1;
	m_sPivotY = -1;
	for (y = 0; y < MAPDATASIZEY; y++) 
	for (x = 0; x < MAPDATASIZEX; x++) 
		m_pData[x][y].Clear();

	for (x = 0; x < 30000; x++) {
		m_iObjectIDcacheLocX[x] = 0;
		m_iObjectIDcacheLocY[x] = 0;
	}
}

CMapData::~CMapData()
{
}

void CMapData::OpenMapDataFile(char * cFn)
{
	HANDLE hFileRead;
	DWORD  nCount;
	char cHeader[260];
	char *cp, *cpMapData;
	ZeroMemory( cHeader, sizeof(cHeader) );
	hFileRead = CreateFile(cFn, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL, NULL); 
	if (hFileRead == INVALID_HANDLE_VALUE) return;
	SetFilePointer(hFileRead, 0, NULL, FILE_BEGIN);
	ReadFile(hFileRead, cHeader, 256, &nCount, NULL);
	_bDecodeMapInfo(cHeader);
	cpMapData = new char[m_sMapSizeX*m_sMapSizeY*10];
	ReadFile(hFileRead, cpMapData, m_sMapSizeX*m_sMapSizeY*10, &nCount, NULL);
	CloseHandle(hFileRead);
	cp = cpMapData;
	short *sp;
	for (int y=0 ; y<m_sMapSizeY ; y++ )
	{
		for(int x=0 ; x<m_sMapSizeX ; x++ )
		{
			sp = (short *)cp;
			m_tile[x][y].m_sTileSprite        = *sp;
			cp += 2;
			sp = (short *)cp;
			m_tile[x][y].m_sTileSpriteFrame   = *sp;
			cp += 2;
			sp = (short *)cp;
			m_tile[x][y].m_sObjectSprite      = *sp;
			cp += 2;
			sp = (short *)cp;
			m_tile[x][y].m_sObjectSpriteFrame = *sp;
			cp += 2;
			if (((*cp) & 0x80) != 0)
				 m_tile[x][y].m_bIsMoveAllowed = FALSE;
			else m_tile[x][y].m_bIsMoveAllowed = TRUE;
			if (((*cp) & 0x40) != 0)
				 m_tile[x][y].m_bIsTeleport = TRUE;
			else m_tile[x][y].m_bIsTeleport = FALSE;
			cp += 2;
		}
	}
	delete[] cpMapData;
}

void CMapData::_bDecodeMapInfo(char * pHeader)
{
 int i;
 char * token, cReadMode;
 char seps[] = "= ,\t\n";

	// 刚历 澄巩磊甫 绝矩促.
	for (i = 0; i < 256; i++) 
		if (pHeader[i] == NULL) pHeader[i] = ' ';

	cReadMode = 0;

	token = strtok( pHeader, seps );   
	while( token != NULL )
	{			
		if (cReadMode != 0)
		{
			switch (cReadMode)
			{
			case 1:
				m_sMapSizeX = atoi(token);
				cReadMode = 0;
				break;
			case 2:
				m_sMapSizeY = atoi(token);
				cReadMode = 0;
				break;
			}
		}	
		else
		{
			if (memcmp(token, "MAPSIZEX",8) == 0) cReadMode = 1;
			if (memcmp(token, "MAPSIZEY",8) == 0) cReadMode = 2;
		}			
		token = strtok( NULL, seps );
	}
}

void CMapData::ShiftMapData(char cDir)
{
	int ix, iy;
	for (iy = 0; iy < MAPDATASIZEY; iy++) 
	for (ix = 0; ix < MAPDATASIZEX; ix++) 
		m_pTmpData[ix][iy].Clear();

	switch (cDir) {	
	case 1:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 21; ix++) 
			memcpy(&m_pTmpData[4+5+ix][6+5+iy], &m_pData[4+5+ix][5+5+iy], sizeof(class CTile));
		m_sPivotY--;
		break;
	case 2:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[4+5+ix][6+5+iy], &m_pData[5+5+ix][5+5+iy], sizeof(class CTile));
		m_sPivotX++;
		m_sPivotY--;
		break;
	case 3:
		for (iy = 0; iy < 16; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[4+5+ix][5+5+iy], &m_pData[5+5+ix][5+5+iy], sizeof(class CTile));		
		m_sPivotX++;
		break;
	case 4:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[4+5+ix][5+5+iy], &m_pData[5+5+ix][6+5+iy], sizeof(class CTile));		
		m_sPivotX++;
		m_sPivotY++;
		break;
	case 5:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 21; ix++) 
			memcpy(&m_pTmpData[4+5+ix][5+5+iy], &m_pData[4+5+ix][6+5+iy], sizeof(class CTile));		
		m_sPivotY++;
		break;
	case 6:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[5+5+ix][5+5+iy], &m_pData[4+5+ix][6+5+iy], sizeof(class CTile));		
		m_sPivotX--;
		m_sPivotY++;
		break;
	case 7:
		for (iy = 0; iy < 16; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[5+5+ix][5+5+iy], &m_pData[4+5+ix][5+5+iy], sizeof(class CTile));		
		m_sPivotX--;
		break;
	case 8:
		for (iy = 0; iy < 15; iy++) 
		for (ix = 0; ix < 20; ix++) 
			memcpy(&m_pTmpData[5+5+ix][6+5+iy], &m_pData[4+5+ix][5+5+iy], sizeof(class CTile));		
		m_sPivotX--;
		m_sPivotY--;
		break;
	}
	memcpy(&m_pData[0][0], &m_pTmpData[0][0], sizeof(m_pData));
}

BOOL CMapData::bGetIsLocateable(short sX, short sY)
{
 int dX, dY;

	if ((sX < m_sPivotX) || (sX > m_sPivotX + MAPDATASIZEX) || 
		(sY < m_sPivotY) || (sY > m_sPivotY + MAPDATASIZEY)) return FALSE;

	dX = sX - m_sPivotX;
	dY = sY - m_sPivotY;

	if (m_pData[dX][dY].m_sOwnerType != NULL) return FALSE;
	if (m_tile[sX][sY].m_bIsMoveAllowed == FALSE) return FALSE;
	if (m_pData[dX][dY].m_sDynamicObjectType == DEF_DYNAMICOBJECT_MINERAL1) return FALSE;
	if (m_pData[dX][dY].m_sDynamicObjectType == DEF_DYNAMICOBJECT_MINERAL2) return FALSE;
	return TRUE;
}

BOOL CMapData::bIsTeleportLoc(short sX, short sY)
{
	if ((sX < m_sPivotX) || (sX > m_sPivotX + MAPDATASIZEX) || 
		(sY < m_sPivotY) || (sY > m_sPivotY + MAPDATASIZEY)) return FALSE;

	if (m_tile[sX][sY].m_bIsTeleport == FALSE) return FALSE;

	return TRUE;
}

BOOL __fastcall CMapData::bSetOwner(WORD wObjectID, int sX, int sY, int sType, int cDir, short sAppr1, short sAppr2, short sAppr3, short sAppr4, int iApprColor, short sStatus, char * pName, short sAction, short sV1, short sV2, short sV3, int iPreLoc, int iFrame)
{
 int   iX, iY, dX, dY; 
 int   iChatIndex, iAdd;
 char  cTmpName[12];
 DWORD dwTime;
 int   iEffectType, iEffectFrame, iEffectTotalFrame;
	
	if ((m_sPivotX == -1) || (m_sPivotY == -1)) return FALSE;
			
	ZeroMemory(cTmpName, sizeof(cTmpName));
	strcpy(cTmpName, pName);
	dwTime = m_dwFrameTime;

	iEffectType = iEffectFrame = iEffectTotalFrame = 0;

	//////////////// ++++++++++
	// 甘 单捞磐 备炼甫 哈绢唱绰 捞亥飘扼搁 溜阿 甘俊辑 昏力茄促.
	if ((wObjectID < 30000) && ((sX < m_sPivotX) || (sX >= m_sPivotX + MAPDATASIZEX) || 
	    (sY < m_sPivotY) || (sY >= m_sPivotY + MAPDATASIZEY)) ) {
		
		////////////////////////////////////////////
		if (m_iObjectIDcacheLocX[wObjectID] > 0) { 
			// 剧荐. 困俊 辑 乐促.
			iX = m_iObjectIDcacheLocX[wObjectID] - m_sPivotX;
			iY = m_iObjectIDcacheLocY[wObjectID] - m_sPivotY;

			//v1.5 俊矾 焊沥 内靛
			if ((iX < 0) || (iX >= MAPDATASIZEX) || (iY < 0) || (iY >= MAPDATASIZEY)) {
				m_iObjectIDcacheLocX[wObjectID] = 0;
				m_iObjectIDcacheLocY[wObjectID] = 0;
				return FALSE;
			}

			if (m_pData[iX][iY].m_wObjectID == wObjectID) {
				m_pData[iX][iY].m_sOwnerType = NULL;
				ZeroMemory(m_pData[iX][iY].m_cOwnerName, sizeof(m_pData[iX][iY].m_cOwnerName));
				ZeroMemory(pName, strlen(pName));
				
				// v1.411 盲泼 皋矫瘤档 窃膊 昏力 
				if (m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ] != NULL) {
					delete m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ];
					m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ] = NULL;
				}
				
				m_pData[iX][iY].m_iChatMsg = NULL; // v1.4
				m_pData[iX][iY].m_iEffectType = NULL;
				
				m_iObjectIDcacheLocX[wObjectID] = 0;
				m_iObjectIDcacheLocY[wObjectID] = 0;
								
				return FALSE;
			}
		} // 剧荐.. 官蹿俊 辑 乐绰..
		else if (m_iObjectIDcacheLocX[wObjectID] < 0) {
			// 澜荐. 官蹿俊 穿篮 磊府. 开栏肺 秒茄促.
			iX = abs(m_iObjectIDcacheLocX[wObjectID]) - m_sPivotX;
			iY = abs(m_iObjectIDcacheLocY[wObjectID]) - m_sPivotY;
			
			//v1.5 俊矾 焊沥 内靛 
			if ((iX < 0) || (iX >= MAPDATASIZEX) || (iY < 0) || (iY >= MAPDATASIZEY)) {
				m_iObjectIDcacheLocX[wObjectID] = 0;
				m_iObjectIDcacheLocY[wObjectID] = 0;
				return FALSE;
			}

			if ((m_pData[iX][iY].m_cDeadOwnerFrame == -1) && (m_pData[iX][iY].m_wDeadObjectID == wObjectID)) {
				m_pData[iX][iY].m_cDeadOwnerFrame = 0;
				ZeroMemory(pName, strlen(pName));
				
				// v1.411 盲泼 皋矫瘤档 窃膊 昏力 
				if (m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iDeadChatMsg ] != NULL) {
					delete m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iDeadChatMsg ];
					m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iDeadChatMsg ] = NULL;
				}
				
				m_pData[iX][iY].m_iDeadChatMsg = NULL; // v1.4
				
				m_iObjectIDcacheLocX[wObjectID] = 0;
				m_iObjectIDcacheLocY[wObjectID] = 0;

				return FALSE;
			}
		} //Close 甘 单捞磐甫 哈绢抄 捞亥飘 贸府...
		////////////////////////////////////////////
		
		// 困狼 贸府俊辑 茫瘤 给沁促搁 傈眉 甘阑 八祸窍咯 昏力茄促.
		for (iX = 0; iX < MAPDATASIZEX; iX++)
		for (iY = 0; iY < MAPDATASIZEY; iY++) {
			
			if (m_pData[iX][iY].m_wObjectID == wObjectID) {
				m_pData[iX][iY].m_sOwnerType = NULL;
				ZeroMemory(m_pData[iX][iY].m_cOwnerName, sizeof(m_pData[iX][iY].m_cOwnerName));
				ZeroMemory(pName, strlen(pName));
				
				// v1.411 盲泼 皋矫瘤档 窃膊 昏力 
				if (m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ] != NULL) {
					delete m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ];
					m_pGame->m_pChatMsgList[ m_pData[iX][iY].m_iChatMsg ] = NULL;
				}
				m_pData[iX][iY].m_iChatMsg = NULL; // v1.4

⌨️ 快捷键说明

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