void WorldSession::HandleCharDeleteOpcode( WorldPacket & recv_data ) { CHECK_PACKET_SIZE(recv_data,8); uint64 guid; recv_data >> guid; // can't delete loaded character if(objmgr.GetPlayer(guid)) return; { Player plr(this); // "GetAccountId()==db stored account id" checked in LoadFromDB (prevent deleting not own character using cheating tools) if(!plr.LoadFromDB( GUID_LOPART(guid) )) return; sLog.outBasic("Account: %d Delete Character:[%s] (guid:%u)",GetAccountId(),plr.GetName(),guid); plr.DeleteFromDB(); } WorldPacket data(SMSG_CHAR_DELETE, 1); data << (uint8)CHAR_DELETE_SUCCESS; SendPacket( &data ); }
void WorldSession::HandleCharDeleteOpcode( WorldPacket & recv_data ) { uint64 guid; recv_data >> guid; // can't delete loaded character if(objmgr.GetPlayer(guid)) return; { Player plr(this); // "GetAccountId()==db stored account id" checked in LoadFromDB (prevent deleting not own character using cheating tools) if(!plr.LoadFromDB( GUID_LOPART(guid) )) return; sLog.outBasic("Account: %d Delete Character:[%s] (guid:%u)",GetAccountId(),plr.GetName(),guid); plr.DeleteFromDB(); } //data.Initialize(SMSG_CHAR_CREATE); //data << (uint8)0x34; WorldPacket data(SMSG_CHAR_DELETE, 1); // Changed in 1.12.x client branch data << (uint8)0x39; // Changed in 1.12.x client branch SendPacket( &data ); }
// Remove fake players in unused seats. void CTable::freezeTournament() { printf("CTable::freezeTournament\n"); SingleLock l(&tableMutex_); l.lock(); for (int i = 0; i < MaxPlayers; i++) { if (players_[i]->isFreeSeat()) { CpduPlayer plr(this); plr.sendPlayerRaw(players_[i], PLAYER_LOGOUT); players_[i]->setUnused(); players_[i]->setIsFreeSeat(false); } } }
bool ChatHandler::HandlePInfoCommand(const char* args) { Player* target = NULL; uint64 targetGUID = 0; char* px = strtok((char*)args, " "); char* py = NULL; std::string name; if (px) { name = px; normalizePlayerName(name); target = objmgr.GetPlayer(name.c_str()); if (target) py = strtok(NULL, " "); else { targetGUID = objmgr.GetPlayerGUIDByName(name.c_str()); if(targetGUID) py = strtok(NULL, " "); else py = px; } } if(!target && !targetGUID) { target = getSelectedPlayer(); } if(!target && !targetGUID) { SendSysMessage(LANG_PLAYER_NOT_FOUND); return true; } uint32 accId = 0; uint32 money = 0; uint32 total_player_time = 0; uint32 level = 0; // get additional information from Player object if(target) { targetGUID = target->GetGUID(); name = target->GetName(); // re-read for case getSelectedPlayer() target accId = target->GetSession()->GetAccountId(); money = target->GetMoney(); total_player_time = target->GetTotalPlayedTime(); level = target->getLevel(); } // get additional information from DB else { accId = objmgr.GetPlayerAccountIdByGUID(targetGUID); Player plr(m_session); // use current session for temporary load plr.MinimalLoadFromDB(targetGUID); money = plr.GetMoney(); total_player_time = plr.GetTotalPlayedTime(); level = plr.getLevel(); } std::string username = "******"; std::string last_ip = "<error>"; uint32 security = 0; QueryResult* result = loginDatabase.PQuery("SELECT `username`,`gmlevel`,`last_ip` FROM `account` WHERE `id` = '%u'",accId); if(result) { Field* fields = result->Fetch(); username = fields[0].GetCppString(); security = fields[1].GetUInt32(); if(m_session->GetSecurity() >= security) last_ip = fields[2].GetCppString(); else last_ip = "-"; delete result; } PSendSysMessage(LANG_PINFO_ACCOUNT, (target?"":"(offline)"), name.c_str(), GUID_LOPART(targetGUID), username.c_str(), accId, security, last_ip.c_str()); std::string timeStr = secsToTimeString(total_player_time,true,true); uint32 gold = money /GOLD; uint32 silv = (money % GOLD) / SILVER; uint32 copp = (money % GOLD) % SILVER; PSendSysMessage(LANG_PINFO_LEVEL, timeStr.c_str(), level, gold,silv,copp ); if ( py && strncmp(py, "rep", 3) == 0 ) { if(!target) { // rep option not implemented for offline case SendSysMessage(LANG_PINFO_NO_REP); return true; } static const char* ReputationRankStr[MAX_REPUTATION_RANK] = {"Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Reverted", "Exalted"}; char* FactionName; for(FactionsList::const_iterator itr = target->m_factions.begin(); itr != target->m_factions.end(); ++itr) { FactionEntry const *factionEntry = sFactionStore.LookupEntry(itr->ID); if (factionEntry) FactionName = factionEntry->name; else FactionName = "#Not found#"; ReputationRank Rank = target->GetReputationRank(factionEntry); PSendSysMessage("Id:%4d %s %s %5d %1x", itr->ID, FactionName, ReputationRankStr[Rank], target->GetReputation(factionEntry), itr->Flags); } } return true; }