std::string ChatHandler::PGetParseString(int32 entry, ...) { const char *format = GetArkCoreString(entry); va_list ap; char str [1024]; va_start(ap, entry); vsnprintf(str, 1024, format, ap); va_end(ap); return (std::string)str; }
void WorldSession::SendNotification(uint32 string_id, ...) { char const* format = GetArkCoreString(string_id); if (format) { va_list ap; char szStr[1024]; szStr[0] = '\0'; va_start(ap, string_id); vsnprintf(szStr, 1024, format, ap); va_end(ap); WorldPacket data(SMSG_NOTIFICATION, (strlen(szStr) + 1)); data << szStr; SendPacket(&data); } }
//this void causes that auction window is opened void WorldSession::SendAuctionHello(uint64 guid, Creature* unit) { if (GetPlayer()->getLevel() < sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ)) { SendNotification(GetArkCoreString(LANG_AUCTION_REQ), sWorld->getIntConfig(CONFIG_AUCTION_LEVEL_REQ)); return; } AuctionHouseEntry const* ahEntry = AuctionHouseMgr::GetAuctionHouseEntry( unit->getFaction()); if (!ahEntry) return; WorldPacket data(MSG_AUCTION_HELLO, 12); data << uint64(guid); data << uint32(ahEntry->houseId); data << uint8(1); // 3.3.3: 1 - AH enabled, 0 - AH disabled SendPacket(&data); }
void WorldSession::SendNameQueryOpcodeFromDBCallBack(QueryResult result) { if (!result) return; Field *fields = result->Fetch(); uint32 guid = fields[0].GetUInt32(); std::string name = fields[1].GetString(); uint8 pRace = 0, pGender = 0, pClass = 0; if (name == "") name = GetArkCoreString(LANG_NON_EXIST_CHARACTER); else { pRace = fields[2].GetUInt8(); pGender = fields[3].GetUInt8(); pClass = fields[4].GetUInt8(); } // guess size WorldPacket data(SMSG_NAME_QUERY_RESPONSE, (8 + 1 + 1 + 1 + 1 + 1 + 1 + 10)); data.appendPackGUID(MAKE_NEW_GUID(guid, 0, HIGHGUID_PLAYER)); data << uint8(0); // added in 3.1 data << name; data << uint8(0); // realm name for cross realm BG usage data << uint8(pRace); // race data << uint8(pGender); // gender data << uint8(pClass); // class // if the first declined name field (5) is empty, the rest must be too if (sWorld->getBoolConfig(CONFIG_DECLINED_NAMES_USED) && fields[5].GetString() != "") { data << uint8(1); // is declined for (int i = 5; i < MAX_DECLINED_NAME_CASES + 5; ++i) data << fields[i].GetString(); } else data << uint8(0); // is not declined SendPacket(&data); }
void WorldSession::SendTrainerList (uint64 guid) { std::string str = GetArkCoreString(LANG_NPC_TAINER_HELLO); SendTrainerList(guid, str); }
void WorldSession::HandleMessagechatOpcode(WorldPacket & recv_data) { uint32 type = 0; uint32 lang; // Les types sont maintenant ger�s par opcode, un opcode par type // Changement en place depuis la 4.0.1 13164 switch (recv_data.GetOpcode()) { case CMSG_MESSAGECHAT_SAY: type = CHAT_MSG_SAY; break; case CMSG_MESSAGECHAT_YELL: type = CHAT_MSG_YELL; break; case CMSG_MESSAGECHAT_CHANNEL: type = CHAT_MSG_CHANNEL; break; case CMSG_MESSAGECHAT_WHISPER: type = CHAT_MSG_WHISPER; break; case CMSG_MESSAGECHAT_GUILD: type = CHAT_MSG_GUILD; break; case CMSG_MESSAGECHAT_OFFICER: type = CHAT_MSG_OFFICER; break; case CMSG_MESSAGECHAT_AFK: type = CHAT_MSG_AFK; break; case CMSG_MESSAGECHAT_DND: type = CHAT_MSG_DND; break; case CMSG_MESSAGECHAT_EMOTE: type = CHAT_MSG_EMOTE; break; case CMSG_MESSAGECHAT_PARTY: type = CHAT_MSG_PARTY; break; case CMSG_MESSAGECHAT_PARTY_LEADER: type = CHAT_MSG_PARTY_LEADER; break; case CMSG_MESSAGECHAT_RAID: type = CHAT_MSG_RAID; break; case CMSG_MESSAGECHAT_RAID_LEADER: type = CHAT_MSG_RAID_LEADER; break; case CMSG_MESSAGECHAT_BATTLEGROUND: type = CHAT_MSG_BATTLEGROUND; break; case CMSG_MESSAGECHAT_BATTLEGROUND_LEADER: type = CHAT_MSG_BATTLEGROUND_LEADER; break; case CMSG_MESSAGECHAT_RAID_WARNING: type = CHAT_MSG_RAID_WARNING; break; default: sLog->outDetail("HandleMessagechatOpcode : Unknown chat opcode (%u)", recv_data.GetOpcode()); recv_data.hexlike(); return; } // no language for AFK and DND messages if (type == CHAT_MSG_AFK) { std::string msg; recv_data >> msg; if ((msg.empty() || !_player->isAFK()) && !_player->isInCombat()) { if (!_player->isAFK()) { if (msg.empty()) msg = GetArkCoreString(LANG_PLAYER_AFK_DEFAULT); _player->afkMsg = msg; } sScriptMgr->OnPlayerChat(_player, type, LANG_UNIVERSAL, msg); _player->ToggleAFK(); if (_player->isAFK() && _player->isDND()) _player->ToggleDND(); } return; } else if (type == CHAT_MSG_DND) {
void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) { if (GetPlayer()->m_trade) return; uint64 ID; if (!GetPlayer()->isAlive()) { SendTradeStatus(TRADE_STATUS_YOU_DEAD); return; } if (GetPlayer()->HasUnitState(UNIT_STAT_STUNNED)) { SendTradeStatus(TRADE_STATUS_YOU_STUNNED); return; } if (isLogingOut()) { SendTradeStatus(TRADE_STATUS_YOU_LOGOUT); return; } if (GetPlayer()->isInFlight()) { SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR); return; } if (GetPlayer()->getLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)) { SendNotification(GetArkCoreString(LANG_TRADE_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); return; } recvPacket >> ID; Player* pOther = ObjectAccessor::FindPlayer(ID); if (!pOther) { SendTradeStatus(TRADE_STATUS_NO_TARGET); return; } if (pOther == GetPlayer() || pOther->m_trade) { SendTradeStatus(TRADE_STATUS_BUSY); return; } if (!pOther->isAlive()) { SendTradeStatus(TRADE_STATUS_TARGET_DEAD); return; } if (pOther->isInFlight()) { SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR); return; } if (pOther->HasUnitState(UNIT_STAT_STUNNED)) { SendTradeStatus(TRADE_STATUS_TARGET_STUNNED); return; } if (pOther->GetSession()->isLogingOut()) { SendTradeStatus(TRADE_STATUS_TARGET_LOGOUT); return; } if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUIDLow())) { SendTradeStatus(TRADE_STATUS_IGNORE_YOU); return; } if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && pOther->GetTeam() != _player->GetTeam()) { SendTradeStatus(TRADE_STATUS_WRONG_FACTION); return; } if (!pOther->IsWithinDistInMap(_player, 10.0f, false)) { SendTradeStatus(TRADE_STATUS_TARGET_TO_FAR); return; } if (pOther->getLevel() < sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)) { SendNotification(GetArkCoreString(LANG_TRADE_OTHER_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); return; } // OK start trade _player->m_trade = new TradeData(_player, pOther); pOther->m_trade = new TradeData(pOther, _player); WorldPacket data(SMSG_TRADE_STATUS, 1 + 8 + 4 + 4 + 4 + 1 + 4 + 4 + 4); data << uint8(0); data << uint64(_player->GetGUID()); data << uint32(0); data << uint32(TRADE_STATUS_BEGIN_TRADE); data << uint32(0); data << uint8(0); data << uint32(0); data << uint32(0); data << uint32(0); pOther->GetSession()->SendPacket(&data); }