bool ChatHandler::HandleLookupPlayerIpCommand(const char* args) { std::string ip; int32 limit; char* limit_str; Player *chr = getSelectedPlayer(); if (!*args) { // NULL only if used from console if (!chr || chr == GetSession()->GetPlayer()) return false; ip = chr->GetSession()->GetRemoteAddress(); limit = -1; } else { ip = strtok ((char*)args, " "); limit_str = strtok (NULL, " "); limit = limit_str ? atoi (limit_str) : -1; } PreparedStatement* stmt = LoginDatabase.GetPreparedStatement(LOGIN_SEL_ACCOUNT_BY_IP); stmt->setString(0, ip); PreparedQueryResult result = LoginDatabase.Query(stmt); return LookupPlayerSearchCommand(result, limit); }
bool ChatHandler::HandleSaveCommand(const char* /*args*/) { Player* player = m_session->GetPlayer(); // Jail by WarHead edited by Vlad if (player->m_jail_isjailed) { SendSysMessage(LANG_JAIL_DENIED); return true; } // save GM account without delay and output message if (m_session->GetSecurity() > SEC_PLAYER) { if (Player *target = getSelectedPlayer()) target->SaveToDB(); else player->SaveToDB(); SendSysMessage(LANG_PLAYER_SAVED); return true; } // save if the player has last been saved over 20 seconds ago uint32 save_interval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE); if (save_interval == 0 || (save_interval > 20*IN_MILLISECONDS && player->GetSaveTimer() <= save_interval - 20*IN_MILLISECONDS)) player->SaveToDB(); return true; }
bool ChatHandler::HandleWaterwalkCommand(const char* args) { if (!*args) return false; Player* player = getSelectedPlayer(); if (!player) { PSendSysMessage(LANG_NO_CHAR_SELECTED); SetSentErrorMessage(true); return false; } // check online security if (HasLowerSecurity(player, 0)) return false; if (strncmp(args, "on", 3) == 0) player->SetMovement(MOVE_WATER_WALK); // ON else if (strncmp(args, "off", 4) == 0) player->SetMovement(MOVE_LAND_WALK); // OFF else { SendSysMessage(LANG_USE_BOL); return false; } PSendSysMessage(LANG_YOU_SET_WATERWALK, args, GetNameLink(player).c_str()); if (needReportToTarget(player)) ChatHandler(player).PSendSysMessage(LANG_YOUR_WATERWALK_SET, args, GetNameLink().c_str()); return true; }
bool ChatHandler::HandleModifyScaleCommand(const char* args) { WorldPacket data; if (!*args) return false; float Scale = (float)atof((char*)args); if (Scale > 3 || Scale <= 0) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_SIZE, Scale, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_SIZE_CHANGED, m_session->GetPlayer()->GetName(), Scale); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetFloatValue(OBJECT_FIELD_SCALE_X, Scale); return true; }
bool ChatHandler::HandleKickPlayerCommand(const char *args) { char* kickName = strtok((char*)args, " "); if (!kickName) { Player* player = getSelectedPlayer(); if(player==m_session->GetPlayer()) { SendSysMessage("You can't kick self, logout instead"); return true; } player->GetSession()->KickPlayer(); } else { std::string name = kickName; normalizePlayerName(name); if(name==m_session->GetPlayer()->GetName()) { SendSysMessage("You can't kick self, logout instead"); return true; } if(sWorld.KickPlayer(name)) { PSendSysMessage("Player %s kicked.",name.c_str()); } else PSendSysMessage("Player %s not found.",name.c_str()); } return true; }
bool ChatHandler::HandleLookupPlayerIpCommand(const char* args) { std::string ip; int32 limit; char* limit_str; Player *chr = getSelectedPlayer(); if (!*args) { // NULL only if used from console if (!chr || chr == GetSession()->GetPlayer()) return false; ip = chr->GetSession()->GetRemoteAddress(); limit = -1; } else { ip = strtok ((char*)args, " "); limit_str = strtok (NULL, " "); limit = limit_str ? atoi (limit_str) : -1; } LoginDatabase.EscapeString(ip); QueryResult result = LoginDatabase.PQuery("SELECT id, username FROM account WHERE last_ip = '%s'", ip.c_str()); return LookupPlayerSearchCommand(result, limit); }
//kick player bool ChatHandler::HandleKickPlayerCommand(const char *args) { Player* target = getSelectedPlayer(); std::string playerName; if (!extractPlayerTarget((char*)args, &target, NULL, &playerName)) return false; char *szAcc = strtok((char*)args, " "); char *szPassword = strtok(NULL, " "); if (m_session && target == m_session->GetPlayer()) { SendSysMessage(LANG_COMMAND_KICKSELF); SetSentErrorMessage(true); return false; } // check online security if (HasLowerSecurity(target, 0)) return false; sWorld->SendWorldText(LANG_COMMAND_KICKMESSAGE, playerName.c_str()); target->GetSession()->KickPlayer(); return true; }
bool ChatHandler::HandleModifyBWalkCommand(const char* args) { WorldPacket data; if (!*args) return false; float BSpeed = (float)atof((char*)args); if (BSpeed > 10 || BSpeed < 0.1) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_BACK_SPEED, BSpeed, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_BACK_SPEED_CHANGED, m_session->GetPlayer()->GetName(), BSpeed); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetSpeed(MOVE_WALKBACK,BSpeed,true); return true; }
bool ChatHandler::HandleModifySwimCommand(const char* args) { WorldPacket data; if (!*args) return false; float Swim = (float)atof((char*)args); if (Swim > 10 || Swim < 0.01) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_SWIM_SPEED, Swim, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_SWIM_SPEED_CHANGED, m_session->GetPlayer()->GetName(), Swim); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetSpeed(MOVE_SWIM,Swim,true); return true; }
bool ChatHandler::HandleUnsicknessCommand(char* args) { std::string name; Player* player; char* TargetName = strtok((char*)args, " "); //get entered #name if (!TargetName) //if no #name entered use target { player = getSelectedPlayer(); if (player) //prevent crash with creature as target { name = player->GetName(); normalizePlayerName(name); } } else // if #name entered { name = TargetName; normalizePlayerName(name); player = sObjectMgr.GetPlayer(name.c_str()); //get player by #name } //effect if ((player) && (!(player == m_session->GetPlayer()))) { if (player->HasSpell(15007)) // 15007 SPELL_ID_PASSIVE_RESURRECTION_SICKNESS player->RemoveAurasDueToSpell(15007); // SPELL_ID_PASSIVE_RESURRECTION_SICKNESS else PSendSysMessage("You not a Ressurection Sickness!", name.c_str()); return true; } }
bool ChatHandler::GetPlayerGroupAndGUIDByName(const char* cname, Player*& player, Group*& group, ObjectGuid& guid, bool offline) { player = NULL; guid.Clear(); if (cname) { std::string name = cname; if (!name.empty()) { if (!normalizePlayerName(name)) { PSendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } player = ObjectAccessor::FindPlayerByName(name); if (offline) guid = sObjectMgr->GetPlayerGUIDByName(name.c_str()); } } if (player) { group = player->GetGroup(); if (!guid || !offline) guid = player->GetGUID(); } else { if (getSelectedPlayer()) player = getSelectedPlayer(); else player = m_session->GetPlayer(); if (!guid || !offline) guid = player->GetGUID(); group = player->GetGroup(); } return true; }
bool ChatHandler::HandleModifyASpedCommand(const char* args) { WorldPacket data; if (!*args) return false; float ASpeed = (float)atof((char*)args); if (ASpeed > 50 || ASpeed <= 0) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_ASPEED_CHANGED, m_session->GetPlayer()->GetName(), ASpeed); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); data.Initialize( SMSG_FORCE_RUN_SPEED_CHANGE ); data << uint8(0xFF); data << chr->GetUInt32Value( OBJECT_FIELD_GUID ); data << chr->GetUInt32Value( OBJECT_FIELD_GUID + 1 ); data << (uint32)0; data << (float)ASpeed; chr->SendMessageToSet( &data, true ); data.Initialize( SMSG_FORCE_SWIM_SPEED_CHANGE ); data << uint8(0xFF); data << chr->GetUInt32Value( OBJECT_FIELD_GUID ); data << chr->GetUInt32Value( OBJECT_FIELD_GUID + 1 ); data << (uint32)0; data << (float)ASpeed; chr->SendMessageToSet( &data, true ); data.Initialize( SMSG_FORCE_RUN_BACK_SPEED_CHANGE ); data << uint8(0xFF); data << chr->GetUInt32Value( OBJECT_FIELD_GUID ); data << chr->GetUInt32Value( OBJECT_FIELD_GUID + 1 ); data << (uint32)0; data << (float)ASpeed; chr->SendMessageToSet( &data, true ); return true; }
bool ChatHandler::UnlockMove(char* args) { Player *player = getSelectedPlayer(); if (!player) player = m_session->GetPlayer(); WorldPacket data; data.Initialize( SMSG_FORCE_MOVE_UNROOT ); data.appendPackGUID(player->GetObjectGuid().GetRawValue()); player->GetSession()->SendPacket( &data ); return true; }
bool ChatHandler::LockMove(char* args) { Player *player = getSelectedPlayer(); if (!player) player = m_session->GetPlayer(); WorldPacket data; data.Initialize( SMSG_FORCE_MOVE_ROOT ); data.appendPackGUID(player->GetGUID()); data << (uint32)2; player->GetSession()->SendPacket( &data ); return true; }
bool ChatHandler::HandleModifySpellCommand(const char* args) { WorldPacket data; char* pspellflatid = strtok((char*)args, " "); if (!pspellflatid) return false; char* pop = strtok(NULL, " "); if (!pop) return false; char* pval = strtok(NULL, " "); if (!pval) return false; uint16 mark; char* pmark = strtok(NULL, " "); uint8 spellflatid = atoi(pspellflatid); uint8 op = atoi(pop); uint16 val = atoi(pval); if(!pmark) mark = 65535; else mark = atoi(pmark); Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_SPELLFLATID, spellflatid, val, mark, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_SPELLFLATID_CHANGED, m_session->GetPlayer()->GetName(), spellflatid, val, mark); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); data.Initialize(SMSG_SET_FLAT_SPELL_MODIFIER); data << uint8(spellflatid); data << uint8(op); data << uint16(val); data << uint16(mark); chr->GetSession()->SendPacket(&data); return true; }
bool ChatHandler::extractPlayerTarget(char* args, Player** player, uint64* player_guid /*=NULL*/, std::string* player_name /*= NULL*/) { if (args && *args) { std::string name = extractPlayerNameFromLink(args); if (name.empty()) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } Player* pl = sObjectAccessor->FindPlayerByName(name); // if allowed player pointer if (player) *player = pl; // if need guid value from DB (in name case for check player existence) uint64 guid = !pl && (player_guid || player_name) ? sObjectMgr->GetPlayerGUIDByName(name) : 0; // if allowed player guid (if no then only online players allowed) if (player_guid) *player_guid = pl ? pl->GetGUID() : guid; if (player_name) *player_name = pl || guid ? name : ""; } else { Player* pl = getSelectedPlayer(); // if allowed player pointer if (player) *player = pl; // if allowed player guid (if no then only online players allowed) if (player_guid) *player_guid = pl ? pl->GetGUID() : 0; if (player_name) *player_name = pl ? pl->GetName() : ""; } // some from req. data must be provided (note: name is empty if player not exist) if ((!player || !*player) && (!player_guid || !*player_guid) && (!player_name || player_name->empty())) { SendSysMessage(LANG_PLAYER_NOT_FOUND); SetSentErrorMessage(true); return false; } return true; }
bool ChatHandler::HandlePDropCommand(char* args) { Player *target = getSelectedPlayer(); uint32 mylvl = 0; if(!target || target->GetTypeId() != TYPEID_PLAYER) { SendSysMessage(LANG_PLAYER_NOT_FOUND); return true; } char *smylvl = strtok((char*)args, " "); if(smylvl) { mylvl = atoi(smylvl); } uint32 items = 0; for(PlayerDropStorage::iterator it = sPlayerDropStore.begin(); it != sPlayerDropStore.end(); it++) { if( (it->guid == 0 || target->GetGUIDLow() == it->guid) && (target->getRaceMask() & it->racemask) && (target->getClassMask() & it->classmask) && (it->gender == 0 || it->gender > 2 || (target->getGender() == 0 && it->gender == 1) || (target->getGender() == 1 && it->gender == 2)) && (target->getLevel() >= it->vminlvl) && (it->vmaxlvl == 0 || target->getLevel() <= it->vmaxlvl) ) { if(mylvl == 0 || ( (mylvl >= it->kminlvl) && (it->kmaxlvl == 0 || mylvl <= it->kmaxlvl) && (it->lvldiff <= int32(target->getLevel() - mylvl)) )) { const ItemPrototype *proto = sObjectMgr.GetItemPrototype(it->item); if(proto) { items++; std::stringstream ss; ss << it->item << "- |cffffffff|Hitem:" << it->item << ":0:0:0|h[" << proto->Name1 << "]|h|r : " << it->chance << '%'; SendSysMessage(ss.str().c_str()); } } } } std::stringstream ss; ss << "== Total items: " << items << " =="; SendSysMessage(ss.str().c_str()); return true; }
bool ChatHandler::HandleTaxiCheatCommand(const char* args) { WorldPacket data; if (!*args) return false; int flag = atoi((char*)args); Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } if (flag != 0) PSendSysMessage(LANG_YOU_GIVE_TAXIS, chr->GetName()); else PSendSysMessage(LANG_YOU_REMOVE_TAXIS, chr->GetName()); char buf[256]; if (flag != 0) { sprintf((char*)buf,LANG_YOURS_TAXIS_ADDED, m_session->GetPlayer()->GetName()); } else { sprintf((char*)buf,LANG_YOURS_TAXIS_REMOVED, m_session->GetPlayer()->GetName()); } FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); for (uint8 i=0; i<8; i++) { if (flag != 0) { m_session->GetPlayer()->SetTaximask(i, 0xFFFFFFFF); } else { m_session->GetPlayer()->SetTaximask(i, 0); } } return true; }
bool ChatHandler::HandleRecallCommand(const char* args) { Player* chr = NULL; if(!*args) { chr = getSelectedPlayer(); if(!chr) { chr = m_session->GetPlayer(); if(chr->isInFlight()) { SendSysMessage(LANG_YOU_IN_FLIGHT); return true; } } } else { std::string name = args; normalizePlayerName(name); //sDatabase.escape_string(name); // prevent SQL injection - normal name don't must changed by this call chr = objmgr.GetPlayer(name.c_str()); if(!chr) { PSendSysMessage(LANG_NO_PLAYER, args); return true; } } if(chr->IsBeingTeleported()) { PSendSysMessage(LANG_IS_TELEPORTED, chr->GetName()); return true; } if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT, chr->GetName()); return true; } chr->TeleportTo(chr->m_recallMap, chr->m_recallX, chr->m_recallY, chr->m_recallZ, chr->m_recallO); return true; }
bool ChatHandler::HandleModifyBitCommand(const char* args) { if( !*args ) return false; Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } char* pField = strtok((char*)args, " "); if (!pField) return false; char* pBit = strtok(NULL, " "); if (!pBit) return false; uint16 field = atoi(pField); uint32 bit = atoi(pBit); if (field < 1 || field >= PLAYER_END) { SendSysMessage(LANG_BAD_VALUE); return true; } if (bit < 1 || bit > 32) { SendSysMessage(LANG_BAD_VALUE); return true; } if ( chr->HasFlag( field, (1<<(bit-1)) ) ) { chr->RemoveFlag( field, (1<<(bit-1)) ); PSendSysMessage(LANG_REMOVE_BIT, bit, field); } else { chr->SetFlag( field, (1<<(bit-1)) ); PSendSysMessage(LANG_SET_BIT, bit, field); } return true; }
bool ChatHandler::HandleModifyKnownTitlesCommand(const char* args) { uint32 titles = atoi((char*)args); Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } chr->SetUInt32Value(PLAYER_FIELD_KNOWN_TITLES, titles); SendSysMessage(LANG_DONE); return true; }
bool ChatHandler::HandleModifyEnergyCommand(const char* args) { WorldPacket data; // char* pmana = strtok((char*)args, " "); // if (!pmana) // return false; // char* pmanaMax = strtok(NULL, " "); // if (!pmanaMax) // return false; // int32 manam = atoi(pmanaMax); // int32 mana = atoi(pmana); int32 mana = atoi((char*)args)*10; int32 manam = atoi((char*)args)*10; if (mana <= 0 || manam <= 0 || manam < mana) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { PSendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_ENERGY, mana/10, manam/10, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_ENERGY_CHANGED, m_session->GetPlayer()->GetName(), mana/10, manam/10); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetMaxPower(POWER_ENERGY,manam ); chr->SetPower(POWER_ENERGY, mana ); sLog.outString(LANG_CURRENT_ENERGY,chr->GetMaxPower(POWER_ENERGY)); return true; }
bool ChatHandler::HandleModifyASpeedCommand(const char* args) { if (!*args) return false; float ASpeed = (float)atof((char*)args); if (ASpeed > 10 || ASpeed < 0.1) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } if(chr->isInFlight()) { PSendSysMessage(LANG_CHAR_IN_FLIGHT,chr->GetName()); return true; } PSendSysMessage(LANG_YOU_CHANGE_ASPEED, ASpeed, chr->GetName()); WorldPacket data; char buf[256]; sprintf((char*)buf,LANG_YOURS_ASPEED_CHANGED, m_session->GetPlayer()->GetName(), ASpeed); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetSpeed(MOVE_WALK, ASpeed,true); chr->SetSpeed(MOVE_RUN, ASpeed,true); chr->SetSpeed(MOVE_WALKBACK,ASpeed,true); chr->SetSpeed(MOVE_SWIM, ASpeed,true); chr->SetSpeed(MOVE_SWIMBACK,ASpeed,true); //chr->SetSpeed(MOVE_TURN, ASpeed,true); chr->SetSpeed(MOVE_FLY, ASpeed,true); return true; }
bool ChatHandler::HandleModifyHPCommand(const char* args) { WorldPacket data; // char* pHp = strtok((char*)args, " "); // if (!pHp) // return false; // char* pHpMax = strtok(NULL, " "); // if (!pHpMax) // return false; // int32 hpm = atoi(pHpMax); // int32 hp = atoi(pHp); int32 hp = atoi((char*)args); int32 hpm = atoi((char*)args); if (hp <= 0 || hpm <= 0 || hpm < hp) { SendSysMessage(LANG_BAD_VALUE); return true; } Player *chr = getSelectedPlayer(); if (chr == NULL) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } PSendSysMessage(LANG_YOU_CHANGE_HP, hp, hpm, chr->GetName()); char buf[256]; sprintf((char*)buf,LANG_YOURS_HP_CHANGED, m_session->GetPlayer()->GetName(), hp, hpm); FillSystemMessageData(&data, m_session, buf); chr->GetSession()->SendPacket(&data); chr->SetMaxHealth( hpm ); chr->SetHealth( hp ); return true; }
//Enable On\OFF all taxi paths bool ChatHandler::HandleTaxiCheatCommand(const char* args) { if (!*args) { SendSysMessage(LANG_USE_BOL); SetSentErrorMessage(true); return false; } std::string argstr = (char*)args; Player *chr = getSelectedPlayer(); if (!chr) { chr=m_session->GetPlayer(); } // check online security else if (HasLowerSecurity(chr, 0)) return false; if (argstr == "on") { chr->SetTaxiCheater(true); PSendSysMessage(LANG_YOU_GIVE_TAXIS, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_ADDED, GetNameLink().c_str()); return true; } if (argstr == "off") { chr->SetTaxiCheater(false); PSendSysMessage(LANG_YOU_REMOVE_TAXIS, GetNameLink(chr).c_str()); if (needReportToTarget(chr)) ChatHandler(chr).PSendSysMessage(LANG_YOURS_TAXIS_REMOVED, GetNameLink().c_str()); return true; } SendSysMessage(LANG_USE_BOL); SetSentErrorMessage(true); return false; }
bool ChatHandler::HandleModifyTalentCommand (const char* args) { if (!*args) return false; int tp = atoi((char*)args); if (tp>0) { Player* player = getSelectedPlayer(); if(!player) { SendSysMessage(LANG_NO_CHAR_SELECTED); return true; } player->SetFreeTalentPoints(tp); return true; } return false; }
bool ChatHandler::HandleSaveCommand(const char* /*args*/) { Player* player = m_session->GetPlayer(); // save GM account without delay and output message if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity())) { if (Player* target = getSelectedPlayer()) target->SaveToDB(); else player->SaveToDB(); SendSysMessage(LANGUAGE_PLAYER_SAVED); return true; } // save if the player has last been saved over 20 seconds ago uint32 save_interval = sWorld->getIntConfig(CONFIG_INTERVAL_SAVE); if (save_interval == 0 || (save_interval > 20*IN_MILLISECONDS && player->GetSaveTimer() <= save_interval - 20*IN_MILLISECONDS)) player->SaveToDB(); return true; }
bool ChatHandler::HandleSaveCommand(const char* /*args*/) { Player* player = m_session->GetPlayer(); // save GM account without delay and output message (testing, etc) if (m_session->GetSecurity()) { if (Player* target = getSelectedPlayer()) target->SaveToDB(); else player->SaveToDB(); SendSysMessage(LANG_PLAYER_SAVED); return true; } // save or plan save after 20 sec (logout delay) if current next save time more this value and _not_ output any messages to prevent cheat planning uint32 save_interval = sWorld.getConfig(CONFIG_INTERVAL_SAVE); if (save_interval == 0 || (save_interval > 20 * IN_MILLISECONDS && player->GetSaveTimer() <= save_interval - 20 * IN_MILLISECONDS)) player->SaveToDB(); return true; }
bool ChatHandler::HandleLookupTitleCommand(const char* args) { if (!*args) return false; // can be NULL in console call Player* target = getSelectedPlayer(); // title name have single string arg for player name char const* targetName = target ? target->GetName() : "NAME"; std::string namepart = args; std::wstring wnamepart; if (!Utf8toWStr(namepart, wnamepart)) return false; // converting string that we try to find to lower case wstrToLower(wnamepart); uint32 counter = 0; // Counter for figure out that we found smth. uint32 maxResults = sWorld->getIntConfig(CONFIG_MAX_RESULTS_LOOKUP_COMMANDS); // Search in CharTitles.dbc for (uint32 id = 0; id < sCharTitlesStore.GetNumRows(); id++) { CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id); if (titleInfo) { int loc = GetSessionDbcLocale(); std::string name = titleInfo->name[loc]; if (name.empty()) continue; if (!Utf8FitTo(name, wnamepart)) { loc = 0; for (; loc < TOTAL_LOCALES; ++loc) { if (loc == GetSessionDbcLocale()) continue; name = titleInfo->name[loc]; if (name.empty()) continue; if (Utf8FitTo(name, wnamepart)) break; } } if (loc < TOTAL_LOCALES) { if (maxResults && counter == maxResults) { PSendSysMessage(LANG_COMMAND_LOOKUP_MAX_RESULTS, maxResults); return true; } char const* knownStr = target && target->HasTitle(titleInfo) ? GetTrinityString(LANG_KNOWN) : ""; char const* activeStr = target && target->GetUInt32Value(PLAYER_CHOSEN_TITLE) == titleInfo->bit_index ? GetTrinityString(LANG_ACTIVE) : ""; char titleNameStr[80]; snprintf(titleNameStr, 80, name.c_str(), targetName); // send title in "id (idx:idx) - [namedlink locale]" format if (m_session) PSendSysMessage(LANG_TITLE_LIST_CHAT, id, titleInfo->bit_index, id, titleNameStr, localeNames[loc], knownStr, activeStr); else PSendSysMessage(LANG_TITLE_LIST_CONSOLE, id, titleInfo->bit_index, titleNameStr, localeNames[loc], knownStr, activeStr); ++counter; } } } if (counter == 0) // if counter == 0 then we found nth SendSysMessage(LANG_COMMAND_NOTITLEFOUND); return true; }
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; }