Fixed crash when getting items and some other improper use of std::ostringstream

This commit is contained in:
2014-04-14 15:07:12 -04:00
parent b68abf037d
commit 1ce6c6cc94
2 changed files with 13 additions and 15 deletions

View File

@@ -870,8 +870,8 @@ void put_item_graphics(cDialog& me)
} }
for (i = 0; i < 6; i++) { for (i = 0; i < 6; i++) {
std::ostringstream sout("pc"); std::ostringstream sout;
sout << i + 1; sout << "pc" << i + 1;
std::string id = sout.str(); std::string id = sout.str();
if ((univ.party[i].main_status == 1) && (pc_has_space(i) < 24) if ((univ.party[i].main_status == 1) && (pc_has_space(i) < 24)
&& ((!is_combat()) || (current_pc == i))) { && ((!is_combat()) || (current_pc == i))) {
@@ -898,8 +898,8 @@ void put_item_graphics(cDialog& me)
else me["down"].show(); else me["down"].show();
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
std::ostringstream sout("item"); std::ostringstream sout;
sout << i + 1; sout << "item" << i + 1;
std::string pict = sout.str() + "-g", name = sout.str() + "-name"; std::string pict = sout.str() + "-g", name = sout.str() + "-name";
std::string detail = sout.str() + "-detail", weight = sout.str() + "-weight"; std::string detail = sout.str() + "-detail", weight = sout.str() + "-weight";
@@ -940,8 +940,8 @@ void put_item_graphics(cDialog& me)
for (i = 0; i < 6; i++) for (i = 0; i < 6; i++)
if (univ.party[i].main_status == 1) { if (univ.party[i].main_status == 1) {
std::ostringstream sout("pc"); std::ostringstream sout;
sout << i + 1 << "-g"; sout << "pc" << i + 1 << "-g";
dynamic_cast<cPict&>(me[sout.str()]).setPict(univ.party[i].which_graphic); dynamic_cast<cPict&>(me[sout.str()]).setPict(univ.party[i].which_graphic);
} }
} }
@@ -966,14 +966,12 @@ bool display_item_event_filter(cDialog& me, std::string id, eKeyMod mods)
put_item_graphics(me); put_item_graphics(me);
} }
} else if(id.substr(0,2) == "pc") { } else if(id.substr(0,2) == "pc") {
sscanf("pc%d", id.c_str(), &current_getting_pc); current_getting_pc = id[2] - '1';
current_getting_pc--;
put_item_graphics(me); put_item_graphics(me);
} else { } else {
if(current_getting_pc == 6) return true; if(current_getting_pc == 6) return true;
short item_hit; short item_hit;
sscanf("item%d", id.c_str(), &item_hit); item_hit = id[4] - '1';
item_hit--;
item_hit += first_item_shown; item_hit += first_item_shown;
if(item_array[item_hit] >= NUM_TOWN_ITEMS) if(item_array[item_hit] >= NUM_TOWN_ITEMS)
return true; return true;
@@ -1055,7 +1053,7 @@ bool display_item(location from_loc,short pc_num,short mode, bool check_containe
} }
if (!pc_gworld_loaded) if (!pc_gworld_loaded)
pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>(902)); pc_gworld.loadFromImage(*ResMgr::get<ImageRsrc>("pcs"));
cDialog itemDialog("get-items.xml"); cDialog itemDialog("get-items.xml");
itemDialog.attachClickHandlers(display_item_event_filter, {"done", "up", "down"}); itemDialog.attachClickHandlers(display_item_event_filter, {"done", "up", "down"});
@@ -1070,8 +1068,8 @@ bool display_item(location from_loc,short pc_num,short mode, bool check_containe
else title.setText("Getting all nearby items:"); else title.setText("Getting all nearby items:");
for(i = 1; i <= 8; i++) { for(i = 1; i <= 8; i++) {
std::ostringstream sout("item"); std::ostringstream sout;
sout << i << "-key"; sout << "item" << i << "-key";
itemDialog[sout.str()].attachKey({false, static_cast<unsigned char>('`' + i), mod_none}); itemDialog[sout.str()].attachKey({false, static_cast<unsigned char>('`' + i), mod_none});
itemDialog[sout.str()].attachClickHandler(display_item_event_filter); itemDialog[sout.str()].attachClickHandler(display_item_event_filter);
} }

View File

@@ -1063,8 +1063,8 @@ void print_monst_attacks(m_num_t m_type,short target)
//// ////
void damaged_message(short damage,short type) void damaged_message(short damage,short type)
{ {
std::ostringstream sout(" "); std::ostringstream sout;
sout << get_str("monster-abilities",130 + type); sout << " " << get_str("monster-abilities",130 + type);
sout << " for " << damage; sout << " for " << damage;
add_string_to_buf(sout.str().c_str()); add_string_to_buf(sout.str().c_str());
} }