diff --git a/Source/monster.cpp b/Source/monster.cpp index 8291a30d8..965ee9e68 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -4480,7 +4480,8 @@ Monster *PreSpawnSkeleton() void TalktoMonster(Player &player, Monster &monster) { - monster.mode = MonsterMode::Talk; + if (&player == MyPlayer) + monster.mode = MonsterMode::Talk; if (monster.uniqueType == UniqueMonsterType::SnotSpill && Quests[Q_LTBANNER].IsAvailable() && Quests[Q_LTBANNER]._qvar1 == 2) { diff --git a/Source/objects.cpp b/Source/objects.cpp index 6ea5708d6..95b3a8648 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2099,8 +2099,8 @@ void OperateChamberOfBoneBook(Object &questBook, bool sendmsg) Quests[Q_SCHAMB]._qmsg = textdef; NetSendCmdQuest(true, Quests[Q_SCHAMB]); NetSendCmdLoc(MyPlayerId, false, CMD_OPERATEOBJ, questBook.position); + InitQTextMsg(textdef); } - InitQTextMsg(textdef); } void OperateChest(const Player &player, Object &chest, bool sendLootMsg) @@ -3213,7 +3213,8 @@ void OperateBookcase(Object &bookcase, bool sendmsg, bool sendLootMsg) zhar.talkMsg = TEXT_ZHAR2; M_StartStand(zhar, zhar.direction); // BUGFIX: first parameter in call to M_StartStand should be MAX_PLRS, not 0. (fixed) zhar.goal = MonsterGoal::Attack; - zhar.mode = MonsterMode::Talk; + if (sendmsg) + zhar.mode = MonsterMode::Talk; } } if (sendmsg) diff --git a/Source/towners.cpp b/Source/towners.cpp index 6103ec63a..a877d009a 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -377,7 +377,7 @@ void TalkToDeadguy(Player &player, Towner & /*deadguy*/) void TalkToBlackSmith(Player &player, Towner &blackSmith) { if (Quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) { - if (player._pLvlVisited[4] && Quests[Q_ROCK]._qactive != QUEST_DONE) { + if ((player._pLvlVisited[4] || player._pLvlVisited[5]) && Quests[Q_ROCK]._qactive != QUEST_DONE) { if (Quests[Q_ROCK]._qvar2 == 0) { Quests[Q_ROCK]._qvar2 = 1; Quests[Q_ROCK]._qlog = true;