📄 packets.cpp
字号:
SetString(Client->Account.Username, 1784); } // Envia o pacote cClient::Send(*Client->Socket, pak, len);}// Envia as informacoes do personagem para entrar no jogovoid cPacket::SendCharacter(cClient *Client){ // Header SetShort(1244, 0); SetShort(0x114, 4); SetShort(0x7531, 6); // Posicao inicial SetBytes(&Client->Pos, 12, sizeof(sPoint)); // Nome do personagem SetString(Client->Character->Name, 16); // Pontos de fama SetByte(Client->Character->kPoint, 28); SetByte(Client->Character->currentKill, 29); SetShort(Client->Character->totalKill, 30); // Informacao do mob SetByte(Client->Character->Race, 32); SetByte(Client->Character->City.x, 33); // Unknown SetShort(0xFFFF, 34); // Classe do personagem e Informacoes da quest SetShort(Client->Character->charClass, 36); SetShort(Client->Character->Quest, 38); // Experiencia e dinheiro SetInt(Client->Character->Gold, 40); SetInt(Client->Character->Exp, 44); // Posicao salva na gema SetBytes(&Client->Character->Last, 48, sizeof(sPoint)); // Informacoes sobre o Status SetBytes(&Client->Character->bStatus, 52, sizeof(sStatus)); SetBytes(&Client->Character->Status, 80, sizeof(sStatus)); // Items do equipamento e do inventorio SetBytes(Client->Character->Equip, 108, sizeof(sItem) * 16); SetBytes(Client->Character->Inventory, 236, sizeof(sItem) * 64); // Pontos de atributos SetInt(Client->Character->sLearn, 748); SetShort(Client->Character->pStatus, 752); SetShort(Client->Character->pMaster, 754); SetShort(Client->Character->pSkill, 756); SetByte(Client->Character->Critical, 758); // Unknown SetByte(0xFF, 759); // Primeira parte da barra de skill SetBytes(Client->Character->qSkillBar1, 760, 4); // Unknown SetByte(0xFF, 764); SetByte(0xFF, 765); SetByte(0xFF, 766); SetByte(0xFF, 767); // Outras informacoes SetInt(Client->Character->Resist.x, 768); // Unknown SetByte(0xFF, 772); SetByte(0xFF, 773); // ID do client SetShort(Client->Character->clientID, 774); // Unknown SetByte(0xFF, 776); SetByte(0xFF, 777); // Segunda parte da barra de skill SetBytes(Client->Character->qSkillBar2, 778, 16); // Unknown SetByte(0xCC, 794); SetByte(0xCC, 795); // Experiencia perdida SetInt(Client->Character->Hold, 796); // Skills em uso SetBytes(Client->Character->Skill, 828, sizeof(sSkill) * 16); // Envia o pacote cClient::Send(*Client->Socket, pak, len);}// Envia as informacoes do personagem para entrar no jogovoid cPacket::SendSpawn(sCharacter *ptrchar, sPoint &pos, const char *tab, sSocket &sSock, u32 typeOfSpawn = 0){ // Header SetShort(176, 0); SetShort(0x364, 4); SetShort(30000, 6); // Posicao do client SetBytes(&pos, 12, sizeof(sPoint)); // ID do client SetShort(ptrchar->clientID, 16); // Nome do personagem SetString(ptrchar->Name, 18); // Pontos de fama SetByte(ptrchar->kPoint, 30); SetByte(ptrchar->currentKill, 31); SetShort(ptrchar->totalKill, 32); for(u32 x = 0; x < 16; ++x) { // Escreve o id do item com a refinacao SetShort(GetItemIDAndEffect(&ptrchar->Equip[x], x == 14), (2 * x) + 34); SetByte(GetAnctCode(&ptrchar->Equip[x], x == 14), x + 130); // Escreve as skill
SetByte(ptrchar->Skill[x].sTime, (2 * x) + 66); SetByte(ptrchar->Skill[x].Effect, (2 * x) + 67); }
// Unknown
SetByte(0, 99);
// Informacoes do status SetBytes(&ptrchar->Status, 100, sizeof(sStatus)); // Tipo do efeito SetShort(typeOfSpawn, 128); // Tab SetString(tab, 146); // Unknown SetInt(0xCCCCCCCC, 172);
// Cidadania
SetByte(ptrchar->Equip[0].EFV3, 172);
// Envia o pacote cClient::Send(sSock, pak, len);}// Envia as informacoes das skill que o personagem esta usandovoid cPacket::SendSkill(sCharacter *ptrchar, sSocket &sSock){ // Header SetShort(140, 0); SetShort(0x3B9, 4); SetShort(ptrchar->clientID, 6); // Skill em uso SetBytes(ptrchar->Skill, 12, sizeof(sSkill) * 16); // Envia o pacote cClient::Send(sSock, pak, len);}/** Pacotes enviados pela database**/// Mostra o log na janela
void cPacket::RequestLog(sSocket &sSock, pGS_1h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_1h)) { // Escreve a mensagem no log Log(INFO, pServer->strMessage); }}// Envia uma mensagem para o clientvoid cPacket::RequestMessage(sSocket &sSock, cClient *Client, pGS_2h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_2h)) { // Envia a mensagem para o client SendServerMessage(*Client->Socket, pServer->strMessage); }}// Desconecta e deleta o client do servidorvoid cPacket::RequestDisconnectClient(sSocket &sSock, pGS_3h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_3h)) { // Desconecta o client Server.DeleteSocket(pServer->Header.clientID); }}// Atualiza as informacoes da conta do clientvoid cPacket::RequestAccount(sSocket &sSock, cClient *Client, pGS_4h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_4h)) { // Client esta logado Client->isLogged = true; // Copia as informacoes da conta memcpy(&Client->Account, &pServer->account, sizeof(sAccount)); }}// Envia a lista dos personagens do char listvoid cPacket::RequestCharList(sSocket &sSock, cClient *Client, pGS_5h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_5h)) { if(pServer->isReSend) { // Personagem criado ou deletado Client->Account.Info.Flag.CharInfo = pServer->charinfo; } // Envia a lista para o client SendCharList(Client, pServer->Character, pServer->isReSend); }}// Envia o personagem para o jogovoid cPacket::RequestCharacter(sSocket &sSock, cClient *Client, pGS_6h *pServer){ if(pServer->Header.packetSize == sizeof(pGS_6h)) { // Define o slot que o personagem esta Client->charIndex = pServer->charIndex; // Copia as informacoes do personagem Client->Character = new sCharacter; memcpy(Client->Character, &pServer->Character, sizeof(sCharacter)); // Define o id no personagem Client->Character->clientID = Client->clientID; // Define a posicao inicial do personagem if(Client->Character->Status.Level <= 35) { // Campo inicial Client->Pos.X = 2112; Client->Pos.Y = 2042; } else { // Verifica a ultima cidade acessada srand(time(NULL)); switch(Client->Character->City.Flag.ID) { // Armia case 0: Client->Pos.X = 2090; Client->Pos.Y = 2096; break; // Azran case 1: Client->Pos.X = 2500; Client->Pos.Y = 1708; break; // Erion case 2: Client->Pos.X = 2456; Client->Pos.Y = 1992; break; // Gelo case 3: Client->Pos.X = 3642; Client->Pos.Y = 3126; break; } Client->Pos.X += rand() % 12; Client->Pos.Y += rand() % 12; } // Verificar se existe um client nesta posicao ; // Envia as informacoes do personagem SendCharacter(Client);
// Envia as informacoes do personagem no mapa SendSpawn(Client->Character,
Client->Pos,
Client->Tab,
*Client->Socket,
Client->typeOfSpawn);
// Envia as skill em uso SendSkill(Client->Character,
*Client->Socket); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -