make ep2 quests have orange icon on non-BB versions
This commit is contained in:
+2
-1
@@ -17,7 +17,8 @@ constexpr uint32_t MAIN = 0x11000011;
|
|||||||
constexpr uint32_t INFORMATION = 0x22000022;
|
constexpr uint32_t INFORMATION = 0x22000022;
|
||||||
constexpr uint32_t LOBBY = 0x33000033;
|
constexpr uint32_t LOBBY = 0x33000033;
|
||||||
constexpr uint32_t GAME = 0x44000044;
|
constexpr uint32_t GAME = 0x44000044;
|
||||||
constexpr uint32_t QUEST = 0x55010155;
|
constexpr uint32_t QUEST_EP1 = 0x55010155;
|
||||||
|
constexpr uint32_t QUEST_EP2 = 0x55020255;
|
||||||
constexpr uint32_t QUEST_CATEGORIES = 0x66010166;
|
constexpr uint32_t QUEST_CATEGORIES = 0x66010166;
|
||||||
constexpr uint32_t PROXY_DESTINATIONS = 0x77000077;
|
constexpr uint32_t PROXY_DESTINATIONS = 0x77000077;
|
||||||
constexpr uint32_t PROGRAMS = 0x88000088;
|
constexpr uint32_t PROGRAMS = 0x88000088;
|
||||||
|
|||||||
@@ -1668,7 +1668,8 @@ static void on_09(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
|
|||||||
// descriptions included with the entries, which the client shows in the
|
// descriptions included with the entries, which the client shows in the
|
||||||
// usual location on the screen.
|
// usual location on the screen.
|
||||||
break;
|
break;
|
||||||
case MenuID::QUEST: {
|
case MenuID::QUEST_EP1:
|
||||||
|
case MenuID::QUEST_EP2: {
|
||||||
bool is_download_quest = !c->lobby.lock();
|
bool is_download_quest = !c->lobby.lock();
|
||||||
auto quest_index = s->quest_index_for_version(c->version());
|
auto quest_index = s->quest_index_for_version(c->version());
|
||||||
if (!quest_index) {
|
if (!quest_index) {
|
||||||
@@ -2071,12 +2072,12 @@ static void on_10(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
|
|||||||
const auto& categories = quest_index->categories(menu_type, Episode::EP3, c->version());
|
const auto& categories = quest_index->categories(menu_type, Episode::EP3, c->version());
|
||||||
if (categories.size() == 1) {
|
if (categories.size() == 1) {
|
||||||
auto quests = quest_index->filter(menu_type, Episode::EP3, c->version(), categories[0]->category_id);
|
auto quests = quest_index->filter(menu_type, Episode::EP3, c->version(), categories[0]->category_id);
|
||||||
send_quest_menu(c, MenuID::QUEST, quests, true);
|
send_quest_menu(c, quests, true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
send_quest_categories_menu(c, MenuID::QUEST_CATEGORIES, s->quest_index_for_client(c), menu_type, Episode::NONE);
|
send_quest_categories_menu(c, s->quest_index_for_version(c->version()), menu_type, Episode::NONE);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2344,11 +2345,12 @@ static void on_10(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const auto& quests = quest_index->filter(menu_type, episode, c->version(), item_id, include_condition);
|
const auto& quests = quest_index->filter(menu_type, episode, c->version(), item_id, include_condition);
|
||||||
send_quest_menu(c, MenuID::QUEST, quests, !l);
|
send_quest_menu(c, quests, !l);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case MenuID::QUEST: {
|
case MenuID::QUEST_EP1:
|
||||||
|
case MenuID::QUEST_EP2: {
|
||||||
auto s = c->require_server_state();
|
auto s = c->require_server_state();
|
||||||
auto quest_index = s->quest_index_for_version(c->version());
|
auto quest_index = s->quest_index_for_version(c->version());
|
||||||
if (!quest_index) {
|
if (!quest_index) {
|
||||||
@@ -2699,7 +2701,7 @@ static void on_A2(shared_ptr<Client> c, uint16_t, uint32_t flag, string& data) {
|
|||||||
throw logic_error("invalid game mode");
|
throw logic_error("invalid game mode");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
send_quest_categories_menu(c, MenuID::QUEST_CATEGORIES, s->quest_index_for_client(c), menu_type, l->episode);
|
send_quest_categories_menu(c, s->quest_index_for_version(c->version()), menu_type, l->episode);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+16
-17
@@ -1413,7 +1413,6 @@ void send_game_menu(
|
|||||||
template <typename EntryT>
|
template <typename EntryT>
|
||||||
void send_quest_menu_t(
|
void send_quest_menu_t(
|
||||||
shared_ptr<Client> c,
|
shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
||||||
bool is_download_menu) {
|
bool is_download_menu) {
|
||||||
auto v = c->version();
|
auto v = c->version();
|
||||||
@@ -1425,7 +1424,7 @@ void send_quest_menu_t(
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto& e = entries.emplace_back();
|
auto& e = entries.emplace_back();
|
||||||
e.menu_id = menu_id;
|
e.menu_id = (it.second->episode == Episode::EP2) ? MenuID::QUEST_EP2 : MenuID::QUEST_EP1;
|
||||||
e.item_id = it.second->quest_number;
|
e.item_id = it.second->quest_number;
|
||||||
e.name.encode(vq->name, c->language());
|
e.name.encode(vq->name, c->language());
|
||||||
e.short_description.encode(add_color(vq->short_description), c->language());
|
e.short_description.encode(add_color(vq->short_description), c->language());
|
||||||
@@ -1435,7 +1434,6 @@ void send_quest_menu_t(
|
|||||||
|
|
||||||
void send_quest_menu_bb(
|
void send_quest_menu_bb(
|
||||||
shared_ptr<Client> c,
|
shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
||||||
bool is_download_menu) {
|
bool is_download_menu) {
|
||||||
auto v = c->version();
|
auto v = c->version();
|
||||||
@@ -1447,7 +1445,7 @@ void send_quest_menu_bb(
|
|||||||
}
|
}
|
||||||
|
|
||||||
auto& e = entries.emplace_back();
|
auto& e = entries.emplace_back();
|
||||||
e.menu_id = menu_id;
|
e.menu_id = MenuID::QUEST_EP1;
|
||||||
e.item_id = it.second->quest_number;
|
e.item_id = it.second->quest_number;
|
||||||
e.name.encode(vq->name, c->language());
|
e.name.encode(vq->name, c->language());
|
||||||
e.short_description.encode(add_color(vq->short_description), c->language());
|
e.short_description.encode(add_color(vq->short_description), c->language());
|
||||||
@@ -1459,7 +1457,6 @@ void send_quest_menu_bb(
|
|||||||
template <typename EntryT>
|
template <typename EntryT>
|
||||||
void send_quest_categories_menu_t(
|
void send_quest_categories_menu_t(
|
||||||
shared_ptr<Client> c,
|
shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
shared_ptr<const QuestIndex> quest_index,
|
shared_ptr<const QuestIndex> quest_index,
|
||||||
QuestMenuType menu_type,
|
QuestMenuType menu_type,
|
||||||
Episode episode) {
|
Episode episode) {
|
||||||
@@ -1472,7 +1469,7 @@ void send_quest_categories_menu_t(
|
|||||||
vector<EntryT> entries;
|
vector<EntryT> entries;
|
||||||
for (const auto& cat : quest_index->categories(menu_type, episode, c->version(), include_condition)) {
|
for (const auto& cat : quest_index->categories(menu_type, episode, c->version(), include_condition)) {
|
||||||
auto& e = entries.emplace_back();
|
auto& e = entries.emplace_back();
|
||||||
e.menu_id = menu_id;
|
e.menu_id = MenuID::QUEST_CATEGORIES;
|
||||||
e.item_id = cat->category_id;
|
e.item_id = cat->category_id;
|
||||||
e.name.encode(cat->name, c->language());
|
e.name.encode(cat->name, c->language());
|
||||||
e.short_description.encode(add_color(cat->description), c->language());
|
e.short_description.encode(add_color(cat->description), c->language());
|
||||||
@@ -1484,12 +1481,11 @@ void send_quest_categories_menu_t(
|
|||||||
|
|
||||||
void send_quest_menu(
|
void send_quest_menu(
|
||||||
shared_ptr<Client> c,
|
shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
const vector<pair<QuestIndex::IncludeState, shared_ptr<const Quest>>>& quests,
|
||||||
bool is_download_menu) {
|
bool is_download_menu) {
|
||||||
switch (c->version()) {
|
switch (c->version()) {
|
||||||
case Version::PC_V2:
|
case Version::PC_V2:
|
||||||
send_quest_menu_t<S_QuestMenuEntry_PC_A2_A4>(c, menu_id, quests, is_download_menu);
|
send_quest_menu_t<S_QuestMenuEntry_PC_A2_A4>(c, quests, is_download_menu);
|
||||||
break;
|
break;
|
||||||
case Version::DC_NTE:
|
case Version::DC_NTE:
|
||||||
case Version::DC_V1_11_2000_PROTOTYPE:
|
case Version::DC_V1_11_2000_PROTOTYPE:
|
||||||
@@ -1499,24 +1495,27 @@ void send_quest_menu(
|
|||||||
case Version::GC_V3:
|
case Version::GC_V3:
|
||||||
case Version::GC_EP3_TRIAL_EDITION:
|
case Version::GC_EP3_TRIAL_EDITION:
|
||||||
case Version::GC_EP3:
|
case Version::GC_EP3:
|
||||||
send_quest_menu_t<S_QuestMenuEntry_DC_GC_A2_A4>(c, menu_id, quests, is_download_menu);
|
send_quest_menu_t<S_QuestMenuEntry_DC_GC_A2_A4>(c, quests, is_download_menu);
|
||||||
break;
|
break;
|
||||||
case Version::XB_V3:
|
case Version::XB_V3:
|
||||||
send_quest_menu_t<S_QuestMenuEntry_XB_A2_A4>(c, menu_id, quests, is_download_menu);
|
send_quest_menu_t<S_QuestMenuEntry_XB_A2_A4>(c, quests, is_download_menu);
|
||||||
break;
|
break;
|
||||||
case Version::BB_V4:
|
case Version::BB_V4:
|
||||||
send_quest_menu_bb(c, menu_id, quests, is_download_menu);
|
send_quest_menu_bb(c, quests, is_download_menu);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw logic_error("unimplemented versioned command");
|
throw logic_error("unimplemented versioned command");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void send_quest_categories_menu(shared_ptr<Client> c, uint32_t menu_id,
|
void send_quest_categories_menu(
|
||||||
shared_ptr<const QuestIndex> quest_index, QuestMenuType menu_type, Episode episode) {
|
shared_ptr<Client> c,
|
||||||
|
shared_ptr<const QuestIndex> quest_index,
|
||||||
|
QuestMenuType menu_type,
|
||||||
|
Episode episode) {
|
||||||
switch (c->version()) {
|
switch (c->version()) {
|
||||||
case Version::PC_V2:
|
case Version::PC_V2:
|
||||||
send_quest_categories_menu_t<S_QuestMenuEntry_PC_A2_A4>(c, menu_id, quest_index, menu_type, episode);
|
send_quest_categories_menu_t<S_QuestMenuEntry_PC_A2_A4>(c, quest_index, menu_type, episode);
|
||||||
break;
|
break;
|
||||||
case Version::DC_NTE:
|
case Version::DC_NTE:
|
||||||
case Version::DC_V1_11_2000_PROTOTYPE:
|
case Version::DC_V1_11_2000_PROTOTYPE:
|
||||||
@@ -1526,13 +1525,13 @@ void send_quest_categories_menu(shared_ptr<Client> c, uint32_t menu_id,
|
|||||||
case Version::GC_V3:
|
case Version::GC_V3:
|
||||||
case Version::GC_EP3_TRIAL_EDITION:
|
case Version::GC_EP3_TRIAL_EDITION:
|
||||||
case Version::GC_EP3:
|
case Version::GC_EP3:
|
||||||
send_quest_categories_menu_t<S_QuestMenuEntry_DC_GC_A2_A4>(c, menu_id, quest_index, menu_type, episode);
|
send_quest_categories_menu_t<S_QuestMenuEntry_DC_GC_A2_A4>(c, quest_index, menu_type, episode);
|
||||||
break;
|
break;
|
||||||
case Version::XB_V3:
|
case Version::XB_V3:
|
||||||
send_quest_categories_menu_t<S_QuestMenuEntry_XB_A2_A4>(c, menu_id, quest_index, menu_type, episode);
|
send_quest_categories_menu_t<S_QuestMenuEntry_XB_A2_A4>(c, quest_index, menu_type, episode);
|
||||||
break;
|
break;
|
||||||
case Version::BB_V4:
|
case Version::BB_V4:
|
||||||
send_quest_categories_menu_t<S_QuestMenuEntry_BB_A2_A4>(c, menu_id, quest_index, menu_type, episode);
|
send_quest_categories_menu_t<S_QuestMenuEntry_BB_A2_A4>(c, quest_index, menu_type, episode);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw logic_error("unimplemented versioned command");
|
throw logic_error("unimplemented versioned command");
|
||||||
|
|||||||
@@ -257,12 +257,10 @@ void send_game_menu(
|
|||||||
bool is_tournament_game_list);
|
bool is_tournament_game_list);
|
||||||
void send_quest_menu(
|
void send_quest_menu(
|
||||||
std::shared_ptr<Client> c,
|
std::shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
const std::vector<std::pair<QuestIndex::IncludeState, std::shared_ptr<const Quest>>>& quests,
|
const std::vector<std::pair<QuestIndex::IncludeState, std::shared_ptr<const Quest>>>& quests,
|
||||||
bool is_download_menu);
|
bool is_download_menu);
|
||||||
void send_quest_categories_menu(
|
void send_quest_categories_menu(
|
||||||
std::shared_ptr<Client> c,
|
std::shared_ptr<Client> c,
|
||||||
uint32_t menu_id,
|
|
||||||
std::shared_ptr<const QuestIndex> quest_index,
|
std::shared_ptr<const QuestIndex> quest_index,
|
||||||
QuestMenuType menu_type,
|
QuestMenuType menu_type,
|
||||||
Episode episode);
|
Episode episode);
|
||||||
|
|||||||
Reference in New Issue
Block a user