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

📄 packethandler.cpp

📁 L2CasheD Extender [ClanSystem]
💻 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 + -