void SendPacketHook(CSocket *pSocket, const char *format, va_list va) { //CLog::Log()->AddAnsi(CLog::SystemConsoleBlue, "[SendPacket] Header: %x format: %s Socket:%x", *(BYTE*)va, format, pSocket); BYTE *pBuffer = (BYTE*)va; BYTE Header = *pBuffer; switch(Header) { //UserInfo case 0x04: { pSocket->SendV(format, va); break; } //StatusUpdate case 0x0E: { pSocket->SendV(format, va); break; } //0x53 PledgeShowMemberListAll case 0x53: { pSocket->SendV(format, va); break; } //SendMessage 0x64 case 0x64: { int *msgID= (int *)(pBuffer+8); switch(*msgID) { case 46: //Use $s1 - SkillName { int *pSkillID = (int *)(pBuffer+32); if(*pSkillID!=NULL) { ChargeSystem(*pSkillID, pSocket->GetUser()->GetDBID()); } break; } case 30: //You have obtained $s1 { int nItemID = *(int *)(pBuffer+32); if(((nItemID >= 8600 )&&(nItemID <= 8614)) || (nItemID == 8190)) //User pick up Herb { // CLog::Log()->AddAnsi(CLog::SystemConsoleBlue, "[HerbSystem] user[%ls] picked herb[%d]- pInventory:%x", pSocket->GetUser()->GetSharedData()->wszName, nItemID, (DWORD) pSocket->GetUser()->GetInventory()); CItem *pItem = pSocket->GetUser()->GetInventory()->GetFirstItemByID(nItemID); if(pItem!=NULL) pSocket->GetUser()->UseItem(pItem); } break; } case 1020: //The pet gave $s1. { int nItemID = *(int *)(pBuffer+32); if(((nItemID >= 8600 )&&(nItemID <= 8614)) || (nItemID == 8190)) //Pet Pick up Herb { CPet *pPet = pSocket->GetUser()->GetPet(); CItem *pItem = pPet->GetInventory()->GetFirstItemByID(nItemID); if(pItem!=NULL) { pPet->DropItem(pItem, 1); //DRop item only pet already got one item } } break; } default: { break; } } pSocket->SendV(format, va); break; } //0x88 PledgeShowInfoUpdate case 0x88: { pSocket->SendV(format, va); break; } //EtcStatusUpdate 0xF3 Format: cddddd case 0xF3: { int *pCharges= (int *)(pBuffer+8); UpdateEtcStatus(pCharges, pSocket->GetUser()); pSocket->SendV(format, va); break; } //0xFA FriendList case 0xFA: { pSocket->SendV(format, va); break; } default: { pSocket->SendV(format, va); break; } } }