From 37fe72b8e994023705ca240bdb4bc0abd1346bac Mon Sep 17 00:00:00 2001 From: Bylins Date: Mon, 23 Feb 2026 17:34:12 +0300 Subject: [PATCH] =?UTF-8?q?=C3=93=C3=8C=C3=8F=C3=95=C3=84=C3=94=20=C3=97?= =?UTF-8?q?=20=C3=84=C3=81=C3=8E=C3=96=C3=81=C3=88=20=C3=89=20=C3=9E=C3=81?= =?UTF-8?q?=C3=92=C3=8D=C3=89=C3=93=C3=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/gameplay/ai/mobact.cpp | 2 +- src/gameplay/mechanics/deathtrap.cpp | 2 +- src/gameplay/mechanics/dungeons.cpp | 9 ++++++++- 3 files changed, 10 insertions(+), 3 deletions(-) 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];