mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-03-22 23:30:14 +00:00
feat: implement quest sharing with party via CMSG_PUSHQUESTTOPARTY
This commit is contained in:
parent
e781ede5b2
commit
71b0a18238
4 changed files with 41 additions and 1 deletions
|
|
@ -1252,6 +1252,7 @@ public:
|
|||
};
|
||||
const std::vector<QuestLogEntry>& getQuestLog() const { return questLog_; }
|
||||
void abandonQuest(uint32_t questId);
|
||||
void shareQuestWithParty(uint32_t questId); // CMSG_PUSHQUESTTOPARTY
|
||||
bool requestQuestQuery(uint32_t questId, bool force = false);
|
||||
bool isQuestTracked(uint32_t questId) const { return trackedQuestIds_.count(questId) > 0; }
|
||||
void setQuestTracked(uint32_t questId, bool tracked) {
|
||||
|
|
|
|||
|
|
@ -16096,6 +16096,28 @@ void GameHandler::abandonQuest(uint32_t questId) {
|
|||
gossipPois_.end());
|
||||
}
|
||||
|
||||
void GameHandler::shareQuestWithParty(uint32_t questId) {
|
||||
if (state != WorldState::IN_WORLD || !socket) {
|
||||
addSystemChatMessage("Cannot share quest: not in world.");
|
||||
return;
|
||||
}
|
||||
if (!isInGroup()) {
|
||||
addSystemChatMessage("You must be in a group to share a quest.");
|
||||
return;
|
||||
}
|
||||
network::Packet pkt(wireOpcode(Opcode::CMSG_PUSHQUESTTOPARTY));
|
||||
pkt.writeUInt32(questId);
|
||||
socket->send(pkt);
|
||||
// Local feedback: find quest title
|
||||
for (const auto& q : questLog_) {
|
||||
if (q.questId == questId && !q.title.empty()) {
|
||||
addSystemChatMessage("Sharing quest: " + q.title);
|
||||
return;
|
||||
}
|
||||
}
|
||||
addSystemChatMessage("Quest shared.");
|
||||
}
|
||||
|
||||
void GameHandler::handleQuestRequestItems(network::Packet& packet) {
|
||||
QuestRequestItemsData data;
|
||||
if (!QuestRequestItemsParser::parse(packet, data)) {
|
||||
|
|
|
|||
|
|
@ -6833,6 +6833,11 @@ void GameScreen::renderQuestObjectiveTracker(game::GameHandler& gameHandler) {
|
|||
gameHandler.setQuestTracked(q.questId, true);
|
||||
}
|
||||
}
|
||||
if (gameHandler.isInGroup() && !q.complete) {
|
||||
if (ImGui::MenuItem("Share Quest")) {
|
||||
gameHandler.shareQuestWithParty(q.questId);
|
||||
}
|
||||
}
|
||||
if (!q.complete) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::MenuItem("Abandon Quest")) {
|
||||
|
|
|
|||
|
|
@ -377,6 +377,11 @@ void QuestLogScreen::render(game::GameHandler& gameHandler, InventoryScreen& inv
|
|||
if (ImGui::MenuItem(tracked ? "Untrack" : "Track")) {
|
||||
gameHandler.setQuestTracked(q.questId, !tracked);
|
||||
}
|
||||
if (gameHandler.isInGroup() && !q.complete) {
|
||||
if (ImGui::MenuItem("Share Quest")) {
|
||||
gameHandler.shareQuestWithParty(q.questId);
|
||||
}
|
||||
}
|
||||
if (!q.complete) {
|
||||
ImGui::Separator();
|
||||
if (ImGui::MenuItem("Abandon Quest")) {
|
||||
|
|
@ -559,12 +564,19 @@ void QuestLogScreen::render(game::GameHandler& gameHandler, InventoryScreen& inv
|
|||
}
|
||||
}
|
||||
|
||||
// Track / Abandon buttons
|
||||
// Track / Share / Abandon buttons
|
||||
ImGui::Separator();
|
||||
bool isTracked = gameHandler.isQuestTracked(sel.questId);
|
||||
if (ImGui::Button(isTracked ? "Untrack" : "Track", ImVec2(100.0f, 0.0f))) {
|
||||
gameHandler.setQuestTracked(sel.questId, !isTracked);
|
||||
}
|
||||
if (gameHandler.isInGroup() && !sel.complete) {
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Share", ImVec2(80.0f, 0.0f))) {
|
||||
gameHandler.shareQuestWithParty(sel.questId);
|
||||
}
|
||||
if (ImGui::IsItemHovered()) ImGui::SetTooltip("Share this quest with your party");
|
||||
}
|
||||
if (!sel.complete) {
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Abandon Quest", ImVec2(150.0f, 0.0f))) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue