From 0c269c420c8096f23959c11c98e20252dcc9ce34 Mon Sep 17 00:00:00 2001 From: ALONSO Laurent Date: Thu, 21 Oct 2021 16:20:00 +0200 Subject: [PATCH] add methods get_shop to check access bounds, + Scenario Editor: display all talk messages --- src/game/boe.dlgutil.cpp | 2 +- src/scenario/scenario.cpp | 24 +++++++++++++++++++++++- src/scenario/scenario.hpp | 9 ++++++--- src/scenedit/scen.actions.cpp | 10 +++++----- src/scenedit/scen.core.cpp | 6 +++--- src/universe/universe.hpp | 2 ++ 6 files changed, 40 insertions(+), 13 deletions(-) diff --git a/src/game/boe.dlgutil.cpp b/src/game/boe.dlgutil.cpp index 004941d8..1bf75747 100644 --- a/src/game/boe.dlgutil.cpp +++ b/src/game/boe.dlgutil.cpp @@ -109,7 +109,7 @@ void start_shop_mode(short which,short cost_adj,std::string store_name) { // This would be a place to hide the text box, if I add it. active_shop_num = which; - active_shop = univ.scenario.shops[which]; + active_shop = univ.get_shop(which); active_shop.setCostAdjust(cost_adj); active_shop.setName(store_name); diff --git a/src/scenario/scenario.cpp b/src/scenario/scenario.cpp index 5c4805c4..5a9b479e 100644 --- a/src/scenario/scenario.cpp +++ b/src/scenario/scenario.cpp @@ -280,13 +280,35 @@ cSpecItem &cScenario::get_special_item(item_num_t item) return badItem; } +static cShop getBadShop() { + cShop badShop; + badShop.setName("Bad Shop"); + badShop.setFace(-3); + return badShop; +} +cShop const &cScenario::get_shop(int shop) const +{ + if (shop>=0 && shop=0 && shopshow(); pal_sbar->hide(); + size_t n_nodes = town->talking.talk_nodes.size(); if(restoring == 0) { right_sbar->setPosition(0); reset_rb(); - right_sbar->setMaximum(70 - NRSONPAGE); + right_sbar->setMaximum(10+n_nodes+1 - NRSONPAGE); } for(short i = 0; i < 10; i++) { std::ostringstream strb; strb << "Personality " << (i + cur_town * 10) << " - " << town->talking.people[i].title; set_rb(i,RB_PERSONALITY, i, strb.str()); } - size_t n_nodes = town->talking.talk_nodes.size(); for(short i = 0; i < n_nodes; i++) { for(short j = 0; j < 4; j++) { s[j] = town->talking.talk_nodes[i].link1[j]; diff --git a/src/scenedit/scen.core.cpp b/src/scenedit/scen.core.cpp index e9f3277f..764cf1c6 100644 --- a/src/scenedit/scen.core.cpp +++ b/src/scenedit/scen.core.cpp @@ -2215,7 +2215,7 @@ static bool save_shop_from_dlog(cDialog& me, cShop& shop, size_t which_shop, boo shop.setFace(dynamic_cast(me["face"]).getPicNum()); // Items are filled in as they're added by the dialog, so that's all we need to do here - scenario.shops[which_shop] = shop; + scenario.get_shop(which_shop) = shop; if(!close) me.untoast(); return true; } @@ -2234,7 +2234,7 @@ static bool change_shop_dlog_page(cDialog& me, std::string dir, cShop& shop, siz which_shop = 0; } - shop = scenario.shops[which_shop]; + shop = scenario.get_shop(which_shop); put_shop_in_dlog(me, shop, which_shop); return true; } @@ -2465,7 +2465,7 @@ bool edit_shop(size_t which_shop, cDialog* parent) { using namespace std::placeholders; if(which_shop == scenario.shops.size()) scenario.shops.emplace_back("New Shop"); - cShop shop = scenario.shops[which_shop]; + cShop shop = scenario.get_shop(which_shop); cDialog shop_dlg("edit-shop", parent); shop_dlg["cancel"].attachClickHandler(std::bind(&cDialog::toast, _1, false)); diff --git a/src/universe/universe.hpp b/src/universe/universe.hpp index 3768a5c1..5d6ee4ce 100644 --- a/src/universe/universe.hpp +++ b/src/universe/universe.hpp @@ -219,6 +219,8 @@ public: cItem &get_item(item_num_t item) { return scenario.get_item(item); } cQuest const &get_quest(int quest) const { return scenario.get_quest(quest); } cQuest &get_quest(int quest) { return scenario.get_quest(quest); } + cShop const &get_shop(int shop) const { return scenario.get_shop(shop); } + cShop &get_shop(int shop) { return scenario.get_shop(shop); } cSpecItem const &get_special_item(item_num_t item) const { return scenario.get_special_item(item); } cSpecItem &get_special_item(item_num_t item) { return scenario.get_special_item(item); } cTerrain const &get_terrain(ter_num_t ter) const { return scenario.get_terrain(ter); }