void WorldSession::HandleGMTicketCreateOpcode(WorldPacket & recv_data) { // Don't accept tickets if the ticket queue is disabled. (Ticket UI is greyed out but not fully dependable) if (sTicketMgr->GetStatus() == GMTICKET_QUEUE_STATUS_DISABLED) return; if (GetPlayer()->getLevel() < sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ)) { SendNotification(GetCoreString(LANG_TICKET_REQ), sWorld->getIntConfig(CONFIG_TICKET_LEVEL_REQ)); return; } GMTicketResponse response = GMTICKET_RESPONSE_CREATE_ERROR; // Player must not have ticket if (!sTicketMgr->GetTicketByPlayer(GetPlayer()->GetGUID())) { GmTicket* ticket = new GmTicket(GetPlayer(), recv_data); sTicketMgr->AddTicket(ticket); sTicketMgr->UpdateLastChange(); sWorld->SendGMText(LANG_COMMAND_TICKETNEW, GetPlayer()->GetName(), ticket->GetId()); response = GMTICKET_RESPONSE_CREATE_SUCCESS; } WorldPacket data(SMSG_GMTICKET_CREATE, 4); data << uint32(response); SendPacket(&data); }
std::string ChatHandler::PGetParseString(int32 entry, ...) { const char *format = GetCoreString(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 = GetCoreString(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); } }
void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket) { if (GetPlayer()->_trade) return; uint64 ID; if (!GetPlayer()->isAlive()) { SendTradeStatus(TRADE_STATUS_YOU_DEAD); return; } if (GetPlayer()->HasUnitState(UNIT_STATE_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(GetCoreString(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->_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_STATE_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(GetCoreString(LANG_TRADE_OTHER_REQ), sWorld->getIntConfig(CONFIG_TRADE_LEVEL_REQ)); return; } // OK start trade _player->_trade = new TradeData(_player, pOther); pOther->_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); }
void WorldSession::SendTrainerList(uint64 guid) { std::string str = GetCoreString(LANG_NPC_TAINER_HELLO); SendTrainerList(guid, str); }