📄 user.cpp.bak
字号:
m_sCityRank = 0; // 矫刮 殿鞭
m_sKillCount = 0; // PK穿利 冉荐
m_sMagicSTR = 0; // 概流加己苞 E_Boady蔼俊狼茄 函拳等蔼
m_sMagicCON = 0;
m_sMagicDEX = 0;
m_sMagicVOL = 0;
m_sMagicWIS = 0;
m_sMagicMaxHP = 0;
m_sMagicMaxPP = 0;
m_sMagicMaxSP = 0;
// m_tPsiAbnormal = 0;
EnterCriticalSection( &m_CS_ExchangeItem );
for(i = 0; i < m_arExchangeItem.GetSize(); i++)
{
if(m_arExchangeItem[i] != NULL)
{
delete m_arExchangeItem[i];
m_arExchangeItem[i] = NULL;
}
}
m_arExchangeItem.RemoveAll();
LeaveCriticalSection( &m_CS_ExchangeItem );
EnterCriticalSection( &m_CS_ShopItem );
for(i = 0; i < m_arShopItem.GetSize(); i++)
{
if ( m_arShopItem[i] != NULL )
{
delete m_arShopItem[i];
m_arShopItem[i] = NULL;
}
}
m_arShopItem.RemoveAll();
LeaveCriticalSection( &m_CS_ShopItem );
for( i = 0; i < m_arItemLog.GetSize(); i++ )
{
if( m_arItemLog[i] )
{
delete m_arItemLog[i];
}
}
m_arItemLog.RemoveAll();
m_dwSaintTime = 0;
m_dwSaintTimeCount = GetTickCount();
m_lDeadUsed = 0;
//家葛己 咀辑辑府侩 函荐 檬扁拳
m_bRingOfLife = 0;
m_bNecklaceOfShield = 0;
m_bEarringOfProtect = 0;
return TRUE;
}
void USER::InitEventSlot()
{
for( int i = 0; i < m_arEventNum.GetSize(); i++)
{
if( m_arEventNum[i] )
{
delete m_arEventNum[i];
m_arEventNum[i] = NULL;
}
}
m_arEventNum.RemoveAll();
}
void USER::InitUserItem()
{
int i, j;
for(i = 0; i < TOTAL_ITEM_NUM; i++) // 酒捞袍 浇吩甫 檬扁拳
{
m_UserItem[i].sLevel = 0;
m_UserItem[i].sSid = -1;
m_UserItem[i].sCount = 0;
m_UserItem[i].sBullNum = 0;
m_UserItem[i].sDuration = 0;
m_UserItem[i].tIQ = 0;
for(j = 0; j < MAGIC_NUM; j++) m_UserItem[i].tMagic[j] = 0;
m_UserItem[i].iItemSerial = 0;
}
for(i = 0; i < MAGIC_COUNT; i++)
{
m_DynamicUserData[i] = 0;
}
for(i = 0; i < EBODY_MAGIC_COUNT; i++) // EBody 概流 浇吩 檬扁拳
{
m_DynamicEBodyData[i] = 0;
}
}
void USER::InitUserBankItem()
{
int i, j;
m_dwBankDN = 0;
for(i = 0; i < TOTAL_BANK_ITEM_NUM; i++) // 篮青 酒捞袍 浇吩甫 檬扁拳
{
m_UserBankItem[i].sLevel = 0;
m_UserBankItem[i].sSid = -1;
m_UserBankItem[i].sCount = 0;
m_UserBankItem[i].sBullNum = 0;
m_UserBankItem[i].sDuration = 0;
m_UserBankItem[i].tIQ = 0;
for(j = 0; j < MAGIC_NUM; j++) m_UserBankItem[i].tMagic[j] = 0;
m_UserBankItem[i].iItemSerial = 0;
}
}
void USER::InitAccountBankItem()
{
int i, j;
m_dwAccountBankDN = 0;
for(i = 0; i < TOTAL_ACCOUNT_BANK_ITEM_NUM; i++) // 拌沥 篮青 酒捞袍 浇吩甫 檬扁拳
{
m_AccountBankItem[i].sLevel = 0;
m_AccountBankItem[i].sSid = -1;
m_AccountBankItem[i].sCount = 0;
m_AccountBankItem[i].sBullNum = 0;
m_AccountBankItem[i].sDuration = 0;
m_AccountBankItem[i].tIQ = 0;
for(j = 0; j < MAGIC_NUM; j++) m_AccountBankItem[i].tMagic[j] = 0;
m_AccountBankItem[i].iItemSerial = 0;
}
}
void USER::InitGuildItem()
{
int i, j;
m_dwGuildDN = 0;
for(i = 0; i < TOTAL_BANK_ITEM_NUM; i++) // 篮青 酒捞袍 浇吩甫 檬扁拳
{
m_GuildItem[i].sLevel = 0;
m_GuildItem[i].sSid = -1;
m_GuildItem[i].sCount = 0;
m_GuildItem[i].sBullNum = 0;
m_GuildItem[i].sDuration = 0;
m_GuildItem[i].tIQ = 0;
for(j = 0; j < MAGIC_NUM; j++) m_GuildItem[i].tMagic[j] = 0;
m_GuildItem[i].iItemSerial = 0;
}
}
//////////////////////////////////////////////////////////////////////
// Inline Fn...
//
USER* USER::GetUser(int uid)
{
if( uid < 0 || uid + USER_BAND >= NPC_BAND ) return NULL;
//if(uid >= MAX_USER)
//{
// TRACE("######### USER::GetUser() : Invalid UID = %d\n" , uid);
// return NULL;
//}
return m_pCom->GetUserUid(uid);
}
USER* USER::GetUser(TCHAR* id)
{
if(!strlen(id)) return NULL;
CString szSource = id;
USER *pUser = NULL;
for( int i = 0; i < MAX_USER; i++)
{
pUser = m_pCom->GetUserUid(i);
if(pUser == NULL || pUser->m_state != STATE_GAMESTARTED) continue;
if ( pUser->m_state == STATE_DISCONNECTED || pUser->m_state == STATE_LOGOUT ) continue;
if ( !szSource.CompareNoCase(pUser->m_strUserID) ) return pUser;
}
return NULL;
}
/*
inline int USER::GetUid(int x, int y )
{
MAP* pMap = g_zone[m_ZoneIndex];
return pMap->m_pMap[x][y].m_lUser;
}
inline BOOL USER::SetUid(int x, int y, int id)
{
MAP* pMap = g_zone[m_ZoneIndex];
if(!pMap) return FALSE;
if(pMap->m_pMap[x][y].m_bMove != 0) return FALSE;
if(pMap->m_pMap[x][y].m_lUser != 0 && pMap->m_pMap[x][y].m_lUser != id ) return FALSE;
/*
long lUid = m_uid + USER_BAND;
long temp = pMap->m_pMap[x][y].m_lUser;
if(InterlockedCompareExchange(&pMap->m_pMap[x][y].m_lUser, (LONG)0, lUid) == lUid)
{
long tt = pMap->m_pMap[x][y].m_lUser;
return TRUE;
}
*/
/* pMap->m_pMap[x][y].m_lUser = id;
return TRUE;
}
*/
//-------------------------------------------------------------------------------//
CNpc* USER::GetNpc(int nid)
{
if( nid < 0 || nid >= g_arNpc.GetSize() ) return NULL;
return g_arNpc[nid];
}
CNpc* USER::GetNpc(TCHAR* pNpcName)
{
CNpc* pNpc = NULL;
int nSize = g_arNpc.GetSize();
for( int i = 0; i < g_arNpc.GetSize(); i++)
{
pNpc = g_arNpc[i];
if( !pNpc ) continue;
if( _tcscmp(pNpc->m_strName, pNpcName) == 0)
{
return pNpc;
}
}
return NULL;
}
/////////////////////////////////////////////////////////////////////
// Communication Part
int USER::NoEncodeSend(int length, char *pBuf)
{
if ( m_SockFlag != 1 ) return 0;
int rv = CBSocket::B_Send( length, pBuf );
if ( m_SockFlag == 0 || rv == -2 )
{
//SockCloseProcess();
return rv;
}
return length;
}
void USER::Send(TCHAR *pBuf, int nLength)
{
char pTBuf[RECEIVE_BUF_SIZE+1];
if ( m_SockFlag != 1 ) return;
if ( nLength > PACKET_DATA_SIZE ) return;
if(nLength >= SEND_BUF_SIZE - 6)
{
TRACE("#### Too Big Send Data!!! (%s, %d, size = %d)\n", __FILE__, __LINE__, nLength);
return;
}
// ::ZeroMemory(pTBuf, SEND_BUF_SIZE);
TCHAR tibuf[SEND_BUF_SIZE+1];
::ZeroMemory(pTBuf, SEND_BUF_SIZE);
::ZeroMemory(tibuf, SEND_BUF_SIZE);
int index = 0;
MYSHORT slen;
pTBuf[index++] = (char) PACKET_START1; // 菩哦 矫累阑 舅府绰 2 Byte
pTBuf[index++] = (char) PACKET_START2;
// slen.i = nLength;
if ( m_isCryptionFlag == 1 )
{
m_Send_value++; // 菩哦俊 老访 锅龋甫 何咯茄促.
DWORD nSendOrder = m_Send_value;
m_Send_value &= 0x00ffffff;
nSendOrder &= 0x00ffffff;
memcpy( tibuf, &nSendOrder, sizeof(DWORD) );
memcpy( &tibuf[4], pBuf, nLength );
nLength += sizeof(DWORD);
slen.i = nLength + 1; //鞠龋拳咯何甫 唱鸥郴绰 目盖靛 器窃
}
else slen.i = nLength;
pTBuf[index++] = (char) (slen.b[0]); // 菩哦 辨捞甫 Short(2Byte)肺 角绢 焊辰促
pTBuf[index++] = (char) (slen.b[1]); // 2Byte扼绊 窍咯 1Byte * 256 + 2Byte啊 酒丛
// memcpy(pTBuf + index, pBuf, nLength);
// 鞠龋拳...
if ( m_isCryptionFlag == 1 )
{
pTBuf[index++] = ENCRYPTION_PKT;
memcpy(pTBuf + index, tibuf, nLength);
m_cryptfn.JvEncryptionFast( nLength, (BYTE*)tibuf, (BYTE*)pTBuf + index );
}
else
{
memcpy(pTBuf + index, pBuf, nLength);
}
index += nLength;
pTBuf[index++] = (char) PACKET_END1; // 菩哦 场阑 舅府绰 2 Byte
pTBuf[index++] = (char) PACKET_END2;
NoEncodeSend(index, pTBuf);
}
/*
void USER::ProcessData()
{
if ( m_UserStatus == 0 && m_UserFlag == FALSE ) return;
if(!m_BufCount) return;
int len = 0;
BOOL bEncryption = FALSE;
m_pCB->PutData(m_pBuf, m_BufCount); // 罐篮 Data甫 滚欺俊 持绰促
while (PullOutCore(len, bEncryption))
{
if( len <= 0 ) break;
Parse( len, m_RData, bEncryption );
bEncryption = FALSE;
}
}
*/
void USER::ProcessData(char *pIBuf, int length)
{
if ( m_UserStatus == 0 && m_UserFlag == FALSE ) return;
if(!length) return;
int len = 0;
BOOL bEncryption = FALSE;
m_pCB->PutData(pIBuf, length); // 罐篮 Data甫 滚欺俊 持绰促
while (PullOutCore(len, bEncryption))
{
if( len <= 0 ) break;
Parse( len, m_RData, bEncryption );
bEncryption = FALSE;
}
}
BOOL USER::PullOutCore(int &length, BOOL &bEncryption)
{
BYTE *pTmp;
int len = 0, sPos = 0, ePos = 0;
BOOL foundCore = FALSE;
MYSHORT slen;
len = m_pCB->GetValidCount();
if(len <= 0 || len >= RECEIVE_BUF_SIZE) return FALSE;
pTmp = new BYTE[len];
m_pCB->GetData((char*)pTmp, len);
for (int i = 0; i < len && !foundCore; i++)
{
if (i + 2 >= len) break;
if (pTmp[i] == PACKET_START1 && pTmp[i + 1] == PACKET_START2)
{
sPos = i + 2;
slen.b[0] = pTmp[sPos];
slen.b[1] = pTmp[sPos + 1];
length = (int)slen.i;
if (length <= 0) goto cancelRoutine;
if (length > len || length > CORE_BUFF_SIZE) goto cancelRoutine;
if((BYTE)pTmp[sPos + 2] == ENCRYPTION_PKT)
{
bEncryption = TRUE;
}
ePos = sPos + length + 2;
if((ePos + 2) > len ) goto cancelRoutine;
if (pTmp[ePos] == PACKET_END1 && pTmp[ePos+1] == PACKET_END2)
{
::ZeroMemory(m_RData, CORE_BUFF_SIZE+1);
if(bEncryption) m_cryptfn.JvDecryptionFast( length -1, (BYTE *)(pTmp+sPos+3), (BYTE *)m_RData );
else ::CopyMemory((void *)m_RData, (const void *)(pTmp+sPos+2), length);
// if(bEncryption) ::CopyMemory((void *)m_RData, (const void *)(pTmp+sPos+3), length - 1);
// else ::CopyMemory((void *)m_RData, (const void *)(pTmp+sPos+2), length);
m_RData[length] = 0;
foundCore = TRUE;
break;
}
else
{
m_pCB->HeadIncrease(3);
break;
}
}
}
if (foundCore) m_pCB->HeadIncrease(6 + length); //6: header 2+ end 2+ length 2
delete[] pTmp;
return foundCore;
cancelRoutine:
if(pTmp) delete[] pTmp;
return foundCore;
}
/*
BOOL USER::PullOutCore(char *&data, int &length)
{
BYTE *pTmp;
int len = 0, sPos = 0, ePos = 0;
BOOL foundCore = FALSE;
MYSHORT slen;
len = m_pCB->GetValidCount();
if(len == 0 || len < 0)
{
data = NULL;
return FALSE;
}
pTmp = new BYTE[len];
m_pCB->GetData((char*)pTmp, len);
for (int i = 0; i < len && !foundCore; i++)
{
if (i + 2 >= len) break;
if (pTmp[i] == PACKET_START1 && pTmp[i + 1] == PACKET_START2)
{
sPos = i + 2;
slen.b[0] = pTmp[sPos];
slen.b[1] = pTmp[sPos + 1];
length = (int)slen.i;
if (length <= 0) goto cancelRoutine;
if (length > len) goto cancelRoutine;
ePos = sPos + length + 2;
if((ePos + 2) > len ) goto cancelRoutine;
if (pTmp[ePos] == PACKET_END1 && pTmp[ePos+1] == PACKET_END2)
{
data = new char[length+1];
::CopyMemory((void *)data, (const void *)(pTmp+sPos+2), length);
data[length] = 0;
foundCore = TRUE;
break;
}
else
{
data = NULL;
m_pCB->HeadIncrease(3);
break;
}
}
}
if (foundCore) m_pCB->HeadIncrease(6 + length); //6: header 2+ end 2+ length 2
delete[] pTmp;
return foundCore;
cancelRoutine:
data = NULL;
delete[] pTmp;
return foundCore;
}
*/
//void USER::Parse(int len, TCHAR *pBuf)
void USER::Parse(int len, TCHAR *pBuf, BOOL &bEncryption)
{
/* int index = 0;
BYTE command = GetByte(pBuf+ index, index);
UserTimer();
*/
int index = 0;
DWORD tempVer = 0;
DWORD dwValue = 0;
BYTE command = 0;
if(bEncryption)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -