// Handle a character delete request void _Server::HandleCharacterDelete(_Buffer &Data, _Peer *Peer) { if(!Peer->AccountID) return; // Get delete slot uint32_t Slot = Data.Read<uint8_t>(); uint32_t CharacterID = 0; // Get character id CharacterID = Save->GetCharacterIDBySlot(Peer->AccountID, Slot); if(!CharacterID) return; // Delete character Save->DeleteCharacter(CharacterID); // Update the player SendCharacterList(Peer); }
void GameSocket::OnCharacter() { char pType = Reader.ReadByte(); switch(pType) { case 1: OnCharCreation(); break; case 2: SendCharacterList(); break; case 3: OnCharDeletion(); break; case 4: OnCharnameCheck(); break; case 5: OnCharRestore(); break; } }
void GameSocket::OnCharDeletion() { /* This is where we should set restore flag, deletion time, etc. Just deleting from database for now. Also, we MIGHT want to delete items related to this character from items table. */ unsigned short charlen = Reader.ReadWord(); char* name = new char[charlen+1]; memset(name, 0x00, charlen+1); Reader.ReadString((unsigned char*)name, charlen); int charid = CharacterExists(name); Writer.Create(GAME_SERVER_CHARACTER); Writer.WriteByte(0x03); if(charid) { db.Query("delete from characters where name='%s'", name).execute(); db.Query("delete from items where owner=%d", charid).execute(); Writer.WriteByte(0x01); } else { Writer.WriteByte(0x02); Writer.WriteByte(0x01); } Writer.Finalize(); Send(Writer.Buffer, Writer.Size()); SendCharacterList(); delete[] name; }
// Sends a player his/her character list void _Server::HandleCharacterListRequest(_Buffer &Data, _Peer *Peer) { if(!Peer->AccountID) return; SendCharacterList(Peer); }