📄 packethandler.cpp
字号:
#include "PacketHandler.h"
bool __cdecl PacketHandler(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DWORD wSubId=NULL;
Cached::Disassemble(packet, "d", &wSubId);
switch(wSubId){
case 1: return F9_2_1_SetPledgePrivilege(pQuerySocket, packet+4);
break;
case 2: return F9_2_2_SetPledgeMemberRank(pQuerySocket, packet+4);
break;
case 3: return F9_2_3_GetPledgeMemberRank(pQuerySocket, packet+4);
break;
case 4: return F9_2_4_GetPledgeMemberInfo(pQuerySocket, packet+4);
break;
case 5: return F9_2_5_AddPledge(pQuerySocket, packet+4);
break;
case 6: return F9_2_6_UpdateRepPoints(pQuerySocket, packet+4);
break;
case 7: return F9_2_7_UpdateClanSkill(pQuerySocket, packet+4);
break;
case 8: return F9_2_8_GetRank(pQuerySocket, packet+4);
break;
case 9: return F9_2_9_GetEnemyList(pQuerySocket, packet+4);
break;
case 10: return F9_2_10_GetAttackerList(pQuerySocket, packet+4);
break;
default: return Cached::DummyPacket(pQuerySocket, packet);
break;
}
return false;
}
bool __cdecl F9_2_1_SetPledgePrivilege(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dPledgeID, dRank, dPrivilege;
Cached::Disassemble(packet, "ddd", &dPledgeID, &dRank, &dPrivilege);
if(pDBConn->Execute(L"UPDATE [lin2world].[dbo].[pledge_ext] SET [Rank%d] = %d WHERE pledge_id = %d", dRank, dPrivilege, dPledgeID))
;
else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- SetPledgePrivilege() PledgeID[%d] Rank[%d] Privilege[%d]", dPledgeID, dRank, dPrivilege);
delete pDBConn;
return false;
};
bool __cdecl F9_2_2_SetPledgeMemberRank(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dPledgeID, dRank;
wchar_t wszName[14];
Cached::Disassemble(packet, "Sdd", sizeof(wszName), &wszName, &dPledgeID, &dRank);
if(pDBConn->Execute(L"UPDATE [lin2world].[dbo].[user_data] SET [Rank] = %d WHERE [char_name] = '%ls' AND [pledge_id]=%d", dRank, wszName, dPledgeID))
;
else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- SetPledgeMemberRank() Name[%ls] PledgeID[%d] Rank[%d]", wszName, dPledgeID, dRank);
delete pDBConn;
return false;
};
bool __cdecl F9_2_3_GetPledgeMemberRank(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dUserObjID, dPledgeID, dRank;
wchar_t wszMemberName[14];
Cached::Disassemble(packet, "ddS", &dUserObjID, &dPledgeID, sizeof(wszMemberName),&wszMemberName);
pDBConn->Bind(&dRank);
if(pDBConn->Execute(L"SELECT [Rank] FROM [lin2world].[dbo].[user_data] WHERE [char_name] = '%ls' AND [pledge_id]= %d", wszMemberName, dPledgeID))
{
pDBConn->Fetch();
pQuerySocket->Send("chddSdd", 0xD8, 0x03, 0x01, dUserObjID, wszMemberName, dPledgeID, dRank);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- GetPledgeMemberRank() Member[%ls] PledgeID[%d] Rank[%d]", wszMemberName, dPledgeID, dRank);
delete pDBConn;
return false;
};
bool __cdecl F9_2_4_GetPledgeMemberInfo(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dUserObjID, dPledgeID, dRank;
wchar_t wszMemberName[14];
wchar_t wszTitle[28];
Cached::Disassemble(packet, "ddS", &dUserObjID, &dPledgeID, sizeof(wszMemberName),&wszMemberName);
pDBConn->Bind(&dRank);
pDBConn->BindS(&wszTitle, 28);
if(pDBConn->Execute(L"SELECT [Rank], [nickname] FROM [lin2world].[dbo].[user_data] WHERE [char_name] = '%ls' AND [pledge_id]= %d", wszMemberName, dPledgeID))
{
pDBConn->Fetch();
pQuerySocket->Send("chddSSdd", 0xD8, 0x03, 0x02, dUserObjID, wszMemberName, wszTitle, dPledgeID, dRank);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- GetPledgeMemberRank() Member[%ls] PledgeID[%d] Rank[%d]", wszMemberName, dPledgeID, dRank);
delete pDBConn;
return false;
};
bool __cdecl F9_2_5_AddPledge(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dPledgeID;
Cached::Disassemble(packet, "d", &dPledgeID);
if(pDBConn->Execute(L"INSERT INTO [lin2world].[dbo].[pledge_ext] ([pledge_id] ,[reputation_points],[Rank1],[Rank2],[Rank3],[Rank4],[Rank5],[Rank6],[Rank7],[Rank8],[Rank9],[Skill0],[Skill1],[Skill2],[Skill3],[Skill4],[Skill5],[Skill6],[Skill7],[Skill8],[Skill9],[Skill10],[Skill11],[Skill12],[Skill13],[Skill14],[Skill15],[Skill16],[Skill17],[Skill18],[Skill19],[Skill20],[Skill21])VALUES(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)",
dPledgeID,
1000,
0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0))
;
else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- AddPledge() PledgeID[%d]", dPledgeID);
delete pDBConn;
return false;
}
bool __cdecl F9_2_6_UpdateRepPoints(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dPledgeID, dPoints;
Cached::Disassemble(packet, "dd", &dPledgeID, &dPoints);
if(pDBConn->Execute(L"UPDATE [lin2world].[dbo].[pledge_ext] SET [reputation_points] = %d WHERE pledge_id = %d", dPoints, dPledgeID))
;
else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- UpdateRepPoints() PledgeID[%d] RepPoints[%d]", dPledgeID, dPoints);
delete pDBConn;
return false;
}
bool __cdecl F9_2_7_UpdateClanSkill(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dPledgeID, dRepPoints, dPlace, dLevel;
Cached::Disassemble(packet, "dddd", &dPledgeID, &dRepPoints, &dPlace, &dLevel);
if(pDBConn->Execute(L"UPDATE [lin2world].[dbo].[pledge_ext] SET [reputation_points] = %d, [Skill%d] = %d WHERE pledge_id = %d", dRepPoints, dPlace, dLevel, dPledgeID))
{
CLog::In()->Add(CLog::SystemConsoleBlue, L"[PacketHandler] Pledge[%d] bought clan skill[%d] lvl [%d]", dPledgeID, dPlace, dLevel);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- UpdateClanSkill() PledgeID[%d] SkillNo[%d] SkillLvl[%d]", dPledgeID, dPlace, dLevel);
delete pDBConn;
return false;
}
bool __cdecl F9_2_8_GetRank(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dUserObjID, dRank, dDBID;
Cached::Disassemble(packet, "dd", &dUserObjID, &dDBID);
pDBConn->Bind(&dRank);
if(pDBConn->Execute(L"SELECT [Rank] FROM [lin2world].[dbo].[user_data] WHERE [char_id] = '%d'", dDBID))
{
pDBConn->Fetch();
pQuerySocket->Send("chdddd", 0xD8, 0x03, 0x03, dUserObjID, dRank);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- GetRank() DBID[%d] Rank[%d]", dDBID, dRank);
delete pDBConn;
return false;
}
bool __cdecl F9_2_9_GetEnemyList(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dUserObjID, dPledgeID;
wchar_t wszPledgeName[28];
int nEnemyAmount = 0;
//Vars for packet
unsigned char cBuff[8192];
int nBuffSize = 0;
int nStrLen = 0;
ZeroMemory(cBuff, 8192);
Cached::Disassemble(packet, "dd", &dUserObjID, &dPledgeID);
pDBConn->BindS(&wszPledgeName, 28);
if(pDBConn->Execute(L"SELECT [name] FROM [lin2world].[dbo].[pledge],[lin2world].[dbo].[war_declare] WHERE ([lin2world].[dbo].[pledge].pledge_id = [lin2world].[dbo].[war_declare].challengee AND [lin2world].[dbo].[war_declare].challenger = %d)", dPledgeID))
{
while(pDBConn->Fetch())
{
//there was something wrong with assembly function so...
nStrLen = wcslen(wszPledgeName);
wcscpy((wchar_t*)(cBuff+nBuffSize), wszPledgeName);
nBuffSize = nBuffSize+nStrLen+nStrLen+2+8; //2b end of unicode text 8 = 2xDWORD - 0 0
nEnemyAmount++;
}
pQuerySocket->Send("chddddb", 0xD8, 0x03, 0x04, dUserObjID, nEnemyAmount, nBuffSize, nBuffSize, cBuff);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- GetEnemyList() PledgeID[%d]", dPledgeID);
delete pDBConn;
return false;
}
bool __cdecl F9_2_10_GetAttackerList(CQuerySocket *pQuerySocket, const unsigned char* packet)
{
DBConn *pDBConn = new DBConn;
DWORD dUserObjID, dPledgeID;
wchar_t wszPledgeName[28];
int nAttackerAmount = 0;
//Vars for packet
unsigned char cBuff[8192];
ZeroMemory(cBuff, 8192);
int nBuffSize = 0;
int nStrLen = 0;
Cached::Disassemble(packet, "dd", &dUserObjID, &dPledgeID);
pDBConn->BindS(&wszPledgeName, 28);
if(pDBConn->Execute(L"SELECT [name] FROM [lin2world].[dbo].[pledge],[lin2world].[dbo].[war_declare] WHERE ([lin2world].[dbo].[pledge].pledge_id = [lin2world].[dbo].[war_declare].challenger AND [lin2world].[dbo].[war_declare].challengee = %d)", dPledgeID))
{
while(pDBConn->Fetch())
{
//there was something wrong with assembly function so...
nStrLen = wcslen(wszPledgeName);
wcscpy((wchar_t*)(cBuff+nBuffSize), wszPledgeName);
nBuffSize = nBuffSize+nStrLen+nStrLen+2; //2b end of unicode text
*(DWORD*)(cBuff+nBuffSize)= 1; //DWORD 1
nBuffSize+=8; //DWORD 0
nAttackerAmount++;
}
pQuerySocket->Send("chddddb", 0xD8, 0x03, 0x05, dUserObjID, nAttackerAmount, nBuffSize, nBuffSize, cBuff);
}else CLog::In()->Add(CLog::ErrorConsoleRed, L"[PacketHandler] Error in executing- GetAttackerList() PledgeID[%d]", dPledgeID);
delete pDBConn;
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -