📄 user.cpp.bak
字号:
TempBuf.Add(result);
if(result != SUCCESS)
{
ReInitMemoryDB();
TempBuf.Add(error_code);
Send(TempBuf, TempBuf.GetLength());
return;
}
SendCharData(); // 蜡历狼 惑技 沥焊甫 焊辰促.
TempBuf.Add((short)m_curz);
TempBuf.Add(m_uid + USER_BAND);
TempBuf.Add((short)pt.x);
TempBuf.Add((short)pt.y);
TempBuf.Add(m_tDir);
TempBuf.Add((BYTE)g_GameTime);
TempBuf.Add((BYTE)g_GameMinute);
Send(TempBuf, TempBuf.GetLength());
SetGameStartInfo();
SendSystemMsg( IDS_USER_OPERATOR_MAIL1, SYSTEM_NORMAL, TO_ME);
// SendSystemMsg( IDS_USER_OPERATOR_MAIL2, SYSTEM_NORMAL, TO_ME);
}
void USER::AccountLoginReqWithThread(TCHAR *pBuf)
{
char id[MAX_ID+1];
int index = 0;
BYTE result = FAIL, error_code = 0;
int nIDLength = GetVarString(sizeof(id), id, pBuf, index);
if(nIDLength == 0 || nIDLength > ACCOUNT_LENGTH)
{
error_code = 1;
index = 0;
SetByte(m_TempBuf, ACCOUNT_LOGIN_RESULT, index );
SetByte(m_TempBuf, result, index );
SetByte(m_TempBuf, error_code, index);
Send( m_TempBuf, index );
SoftClose();
return;
}
LOGINOUTTHREADDATA *pLIOTD;
pLIOTD = new LOGINOUTTHREADDATA;
pLIOTD->CODE = ACCOUNT_LOGIN_REQ;
pLIOTD->UID = m_uid;
memset(pLIOTD->ID, NULL, CHAR_NAME_LENGTH+sizeof(int)+1);
memcpy(pLIOTD->ID, pBuf, index );
EnterCriticalSection( &m_CS_LoginData );
RecvLoginData.AddTail(pLIOTD);
nLoginDataCount = RecvLoginData.GetCount();
LeaveCriticalSection( &m_CS_LoginData );
}
///////////////////////////////////////////////////////////////////////////////////
// Character 沥焊甫 啊廉柯促.
//
BOOL USER::LoadCharData(TCHAR *id)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[1024]; ::ZeroMemory(szSQL, sizeof(szSQL));
BOOL bFind = FALSE;
_sntprintf(szSQL, sizeof(szSQL), TEXT("{call LOAD_CHAR_DATA (\'%s\')}")/*, m_iMyServer*/, id );
SQLCHAR strChar[3][CHAR_NAME_LENGTH+1];
SQLINTEGER strCharInd[3];
int db_index = 0;
CDatabase* pDB = g_DB[m_iModSid].GetDB( db_index );
if( !pDB ) return FALSE;
for( int i = 0; i < 3; i++)
{
::ZeroMemory(strChar[i], CHAR_NAME_LENGTH+1);
strCharInd[i] = SQL_NTS;
}
retcode = SQLAllocHandle((SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt);
if( retcode != SQL_SUCCESS )
{
// g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS );
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
retcode = SQLFetch( hstmt );
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
SQLGetData( hstmt, 1, SQL_C_CHAR, strChar[0], CHAR_NAME_LENGTH, &strCharInd[0] );
SQLGetData( hstmt, 2, SQL_C_CHAR, strChar[1], CHAR_NAME_LENGTH, &strCharInd[1] );
SQLGetData( hstmt, 3, SQL_C_CHAR, strChar[2], CHAR_NAME_LENGTH, &strCharInd[2] );
}
else
{
DisplayErrorMsg(hstmt);
retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
}
else
{
DisplayErrorMsg(hstmt);
retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
//BREAKPOINT();
g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
g_DB[m_iModSid].ReleaseDB(db_index);
m_nCharNum = 0;
int nSize = sizeof(m_strChar);
::ZeroMemory(m_strChar, sizeof(m_strChar));
_tcscpy( m_strChar[0], (LPCTSTR)strChar[0]); if( strlen( m_strChar[0] ) ) m_nCharNum++;
_tcscpy( m_strChar[1], (LPCTSTR)strChar[1]); if( strlen( m_strChar[1] ) ) m_nCharNum++;
_tcscpy( m_strChar[2], (LPCTSTR)strChar[2]); if( strlen( m_strChar[2] ) ) m_nCharNum++;
return TRUE;
}
///////////////////////////////////////////////////////////////////////////////
// Client俊 Character 扁夯 沥焊甫 焊辰促.
//
BOOL USER::SendCharInfo(TCHAR *strChar, TCHAR* pBuf, int& index)
{
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
BOOL bFind = FALSE;
TCHAR szSQL[1024]; ::ZeroMemory(szSQL, sizeof(szSQL));
_sntprintf(szSQL, sizeof(szSQL), TEXT("{call SEND_CHAR_DATA (\'%s\')}"), strChar );
SQLCHAR strCharID[CHAR_NAME_LENGTH + 1], strFace[10];
SQLINTEGER strCharInd = SQL_NTS;
SQLSMALLINT sSTR, sCON, sDEX, sVOL, sWIS, sGender;
SQLINTEGER sInd;
SDWORD dSkin, dHair;
SQLSMALLINT sLevel;
SQLCHAR byClass;
SQLSMALLINT sHP, sPP, sSP;
SQLCHAR strSkill[_SKILL_DB], strItem[_ITEM_DB];
::ZeroMemory(strCharID, sizeof(strCharID));
::ZeroMemory(strFace, sizeof(strFace));
::ZeroMemory(strSkill, sizeof(strSkill));
::ZeroMemory(strItem, sizeof(strItem));
sSTR = sCON = sDEX = sVOL = sWIS = sGender = 0;
dSkin = dHair = 0;
byClass = 0;
sLevel = 1;
int db_index = 0;
CDatabase* pDB = g_DB[m_iModSid].GetDB( db_index );
if( !pDB ) return FALSE;
retcode = SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, pDB->m_hdbc, &hstmt );
if( retcode != SQL_SUCCESS )
{
// g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
retcode = SQLExecDirect( hstmt, (unsigned char*)szSQL, SQL_NTS );
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
retcode = SQLFetch( hstmt );
if( retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO )
{
int i = 1;
SQLGetData( hstmt, i++, SQL_C_CHAR, strCharID, sizeof(strCharID), &strCharInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sSTR, sizeof(sSTR), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sCON, sizeof(sCON), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sDEX, sizeof(sDEX), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sVOL, sizeof(sVOL), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sWIS, sizeof(sWIS), &sInd);
SQLGetData( hstmt, i++, SQL_C_ULONG, &dSkin, sizeof(dSkin), &sInd);
SQLGetData( hstmt, i++, SQL_C_ULONG, &dHair, sizeof(dHair), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sGender, sizeof(sGender), &sInd);
SQLGetData( hstmt, i++, SQL_C_BINARY, strFace, sizeof(strFace), &sInd);
SQLGetData( hstmt, i++, SQL_C_TINYINT, &byClass, sizeof(byClass), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sLevel, sizeof(sLevel), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sHP, sizeof(sHP), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sPP, sizeof(sPP), &sInd);
SQLGetData( hstmt, i++, SQL_C_SSHORT, &sSP, sizeof(sSP), &sInd);
SQLGetData( hstmt, i++, SQL_C_BINARY, strSkill, sizeof(strSkill), &sInd);
SQLGetData( hstmt, i++, SQL_C_BINARY, strItem, sizeof(strItem), &sInd);
}
else
{
DisplayErrorMsg(hstmt);
retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
}
else
{
DisplayErrorMsg(hstmt);
retcode = SQLFreeHandle((SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
g_DB[m_iModSid].ReleaseDB(db_index);
return FALSE;
}
retcode = SQLFreeHandle( (SQLSMALLINT)SQL_HANDLE_STMT, hstmt);
g_DB[m_iModSid].ReleaseDB(db_index);
TCHAR strID[CHAR_NAME_LENGTH+1];
_tcscpy(strID, (TCHAR*)strCharID);
short nSTR = sSTR;
short nCON = sCON;
short nDEX = sDEX;
short nVOL = sVOL;
short nWIS = sWIS;
short sMaxHP = 0;
short sMaxPP = 0;
short sMaxSP = 0;
DWORD dwSkin = dSkin;
DWORD dwHair = dHair;
BYTE cGender = (BYTE)sGender;
CBufferEx TempBuf;
TempBuf.AddString(strID);
TempBuf.Add(nSTR);
TempBuf.Add(nCON);
TempBuf.Add(nDEX);
TempBuf.Add(nVOL);
TempBuf.Add(nWIS);
TempBuf.Add(dwSkin);
TempBuf.Add(dwHair);
TempBuf.Add(cGender);
TempBuf.AddData((LPTSTR)strFace, 10);
TempBuf.Add(byClass);
TempBuf.Add(sLevel);
TempBuf.Add((short)sHP);
TempBuf.Add((short)sPP);
TempBuf.Add((short)sSP);
sMaxHP = g_sHPConst[byClass] * nCON + g_sHPLV[byClass] * (sLevel - 1) + g_sHPAdd[byClass];
sMaxPP = g_sPPConst[byClass] * nWIS + g_sPPLV[byClass] * (sLevel - 1) + g_sPPAdd[byClass];
sMaxSP = g_sSPConst[byClass] * nCON + g_sSPLV[byClass] * (sLevel - 1) + g_sSPAdd[byClass];
TempBuf.Add((short)sMaxHP);
TempBuf.Add((short)sMaxPP);
TempBuf.Add((short)sMaxSP);
// Parse Skill
CHAR szSkillBuf[3 * TOTAL_SKILL_NUM];
::ZeroMemory(szSkillBuf, sizeof(szSkillBuf));
if(!GetSkillNameLevel(byClass, (LPTSTR)strSkill, szSkillBuf)) return FALSE;
// Parse Item
TCHAR szItemBuf[2 * EQUIP_ITEM_NUM]; // 2 = Item Pid, 10 = Totoal Equip Slot Count
::ZeroMemory(szItemBuf, sizeof(szItemBuf));
if(!GetEquipItemPid((LPTSTR)strItem, szItemBuf))
{
return FALSE;
}
TempBuf.AddData(szSkillBuf, 3 * TOTAL_SKILL_NUM);
TempBuf.AddData(szItemBuf, 2* EQUIP_ITEM_NUM);
::CopyMemory(pBuf + index, TempBuf, TempBuf.GetLength());
index += TempBuf.GetLength();
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////////////
// 货肺款 某腐磐甫 父电促.
//
void USER::NewCharReq(TCHAR *pBuf)
{
if ( pBuf == NULL ) return;
SQLHSTMT hstmt = NULL;
SQLRETURN retcode;
TCHAR szSQL[4096];
SDWORD sFaceLen = 10;
SDWORD sSkillLen = _SKILL_DB;
SDWORD sPsiLen = _PSI_DB;
SDWORD sItemLen = _ITEM_DB;
int db_index = 0;
CDatabase* pDB;
int i;
const int nInitMax = 25;
int SumPoint = 0;
int index = 0;
TCHAR szAccount[ACCOUNT_LENGTH + 1], szName[CHAR_NAME_LENGTH + 1], szFace[10];
BYTE result = FAIL, error_code = 0;
BYTE nCharNum = 0;
int nTempLength = 0;
CString szTemp = _T("");
short nSTR = 0;
short nCON = 0;
short nDEX = 0;
short nVOL = 0;
short nWIS = 0;
short sHP = 0;
short sPP = 0;
short sSP = 0;
DWORD dwSkin = 0;
DWORD dwHair = 0;
BYTE cGender = 0;
BYTE byClass = 0;
if(!GetVarString(sizeof(szAccount), szAccount, pBuf, index)) {error_code = 1; goto result_send; }
nCharNum = GetByte(pBuf, index);
if(!GetVarString(sizeof(szName), szName, pBuf, index)) {error_code = 2; goto result_send; }
nTempLength = _tcslen(szAccount);
if(!szAccount[0] || nTempLength > ACCOUNT_LENGTH)
{
error_code = 1;
goto result_send;
}
if(m_nCharNum >= 3 || nCharNum > 2 || nCharNum < 0)
{
error_code = 2;
goto result_send;
}
nTempLength = _tcslen(szName);
if(nTempLength == 0 || nTempLength > CHAR_NAME_LENGTH)
{
error_code = 8;
goto result_send;
}
szTemp = szName;
if(!UNI_CHAR::CheckString(szTemp))
{
result = FAIL;
error_code = 8;
index = 0;
SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
SetByte(m_TempBuf, result, index);
SetByte(m_TempBuf, error_code, index);
Send(m_TempBuf, index);
return;
}
/* if(szTemp.Find(' ') != -1 || szTemp.Find('\'') != -1 || szTemp.Find('"') != -1 || szTemp.Find('.') != -1 || szTemp.Find(',') != -1)
{
result = FAIL;
error_code = 8;
index = 0;
SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
SetByte(m_TempBuf, result, index);
SetByte(m_TempBuf, error_code, index);
Send(m_TempBuf, index);
return;
}
*/
if(IsReservedID(szName))
{
result = FAIL;
error_code = 7;
index = 0;
SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
SetByte(m_TempBuf, result, index);
SetByte(m_TempBuf, error_code, index);
Send(m_TempBuf, index);
return;
}
switch(m_iMyServer)
{
case 0: // 抛胶飘
break;
case 1: // 捞墨风胶
strcat( szName, "[I]" );
break;
case 2: // 郡颇档福
strcat( szName, "[E]" );
break;
case 3: // 啊匙瘤酒
strcat( szName, "[K]" );
break;
case 4: // 鞘赋器
strcat( szName, "[F]" );
break;
case 5: // 酒胶飘
strcat( szName, "[A]" );
break;
case 6: // 弊尔叼俊
strcat( szName, "[G]" );
break;
case 7: // 其技快胶
strcat( szName, "[P]" );
break;
case 8: // 剐扼叼
strcat( szName, "[M]" );
break;
case 9: // 风捞匙飘
strcat( szName, "[R]" );
break;
case 10: // 鸥福箕
strcat( szName, "[T]" );
break;
default:
result = FAIL;
error_code = 255;
index = 0;
SetByte(m_TempBuf, NEW_CHAR_RESULT, index);
SetByte(m_TempBuf, result, index);
SetByte(m_TempBuf, error_code, index);
Send(m_TempBuf, index);
return;
}
// 粮犁窍绰 ID牢瘤 八荤
if(IsExistCharId(szName))
{
error_code = 7;
goto result_send;
}
nSTR = (short)m_sTempSTR;
nCON = (short)m_sTempCON;
nDEX = (short)m_sTempDEX;
nVOL = (short)m_sTempVOL;
nWIS = (short)m_sTempWIS;
sHP = 0;
sPP = 0;
sSP = 0;
dwSkin = GetDWORD(pBuf, index);
dwHair = GetDWORD(pBuf, index);
cGender = GetByte (pBuf, index);
::ZeroMemory(szFace, sizeof(szFace));
GetString(szFace, pBuf, 10, index);
byClass = GetByte(pBuf, index);
if(byClass != m_tTempClass)
{
error_code = 10;
goto result_send;
}
if(byClass < 0 || byClass > 3)
{
error_code = 10;
goto result_send;
}
//-------------[ 檬扁 瓷仿摹 八荤 ]-----------------------------//
if(SumPoint > 65) // 檬扁 瓷仿摹狼 钦篮 65
{
error_code = 9;
goto result_send;
}
if(nSTR < 1 || nSTR > nInitMax ||
nCON < 1 || nCON > nInitMax ||
nDEX < 1 || nDEX > nInitMax ||
nVOL < 1 || nVOL > nInitMax ||
nWIS < 1 || nWIS > nInitMax)
{
error_code = 3;
goto result_send;
}
//-----------[ 纳腐磐 Reroll 荐摹 檬扁拳 ] -------------------------------//
m_sTempSTR = 0;
m_sTempCON = 0;
m_sTempDEX = 0;
m_sTempVOL = 0;
m_sTempWIS = 0;
m_tTempClass = 255;
SumPoint = nSTR + nCON + nDEX + nVOL + nWIS;
// 乔何祸, 赣府祸, 庆绢胶鸥老俊 措茄 八荤绰 眠饶俊...
pDB = g_DB[m_iModSid].GetDB( db_index ); // 困俊辑 葛电 俊矾蔼甫 眉农窍绊 唱辑 且寸
if( !pDB ) return ;
sHP = g_sHPConst[byClass] * nCON + g_sHPAdd[byClass];
sPP = g_sP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -