📄 mapdata.cpp
字号:
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 + -