diff --git a/src/gameplay/ai/mobact.cpp b/src/gameplay/ai/mobact.cpp index 9a94d2248..c139a6062 100644 --- a/src/gameplay/ai/mobact.cpp +++ b/src/gameplay/ai/mobact.cpp @@ -1274,7 +1274,7 @@ void extract_charmice(CharData *ch, bool on_ground) { if (on_ground || !ch->get_master()) { DropObjOnZoneReset(ch, charmice_box, true, false); } else { - SendMsgToChar(ch->get_master(), "&YВолшебный узелок с вещами появился у вас в инвентаре.&n"); + SendMsgToChar(ch->get_master(), "&YВолшебный узелок с вещами появился у вас в инвентаре.&n\r\n"); PlaceObjToInventory(charmice_box, ch->get_master()); } } diff --git a/src/gameplay/mechanics/deathtrap.cpp b/src/gameplay/mechanics/deathtrap.cpp index 7dc761962..4db64b25c 100644 --- a/src/gameplay/mechanics/deathtrap.cpp +++ b/src/gameplay/mechanics/deathtrap.cpp @@ -63,7 +63,7 @@ void deathtrap::activity() { for (auto it = room_list.cbegin(); it != room_list.cend(); ++it) { const auto people = (*it)->people; // make copy of people in the room for (const auto i : people) { - if (i->purged() || i->IsNpc()) { + if (i->purged() || (i->IsNpc() && !IS_CHARMICE(i))) { continue; } std::string name = i->get_name_str(); diff --git a/src/gameplay/mechanics/dungeons.cpp b/src/gameplay/mechanics/dungeons.cpp index e78495093..db58a340b 100644 --- a/src/gameplay/mechanics/dungeons.cpp +++ b/src/gameplay/mechanics/dungeons.cpp @@ -17,6 +17,7 @@ #include "engine/entities/char_data.h" #include "utils/utils_time.h" #include "gameplay/ai/spec_procs.h" +#include "gameplay/mechanics/deathtrap.h" #include @@ -397,6 +398,9 @@ void RoomDataCopy(ZoneRnum zrn_from, ZoneRnum zrn_to, std::vectorfires = 0; new_room->gdark = 0; new_room->glight = 0; + if (ROOM_FLAGGED(i, ERoomFlag::kSlowDeathTrap) || ROOM_FLAGGED(i, ERoomFlag::kIceTrap)) { + deathtrap::add(world[new_rnum]); + } for (int dir = 0; dir < EDirection::kMaxDirNum; ++dir) { const auto &from = world[i]->dir_option_proto[dir]; if (from) { @@ -873,10 +877,13 @@ void ClearRoom(RoomData *room) { void RoomDataFree(ZoneRnum zrn) { RoomRnum rrn_start = zone_table[zrn].RnumRoomsLocation.first; - for (RoomVnum rrn = rrn_start; rrn <= rrn_start + 99; rrn++) { + for (RoomRnum rrn = rrn_start; rrn <= rrn_start + 99; rrn++) { while (room_spells::IsRoomAffected(world[rrn], ESpell::kPortalTimer)) { RemovePortalGate(rrn); } + if (ROOM_FLAGGED(rrn, ERoomFlag::kSlowDeathTrap) || ROOM_FLAGGED(rrn, ERoomFlag::kIceTrap)) { + deathtrap::remove(world[rrn]); + } } for (RoomVnum rvn = 0; rvn <= 99; rvn++) { auto &room = world[rrn_start + rvn];