From 9948bc347754b46f6720abccecc0fc695a852494 Mon Sep 17 00:00:00 2001 From: obligaron Date: Wed, 28 Dec 2022 10:15:10 +0100 Subject: [PATCH] Multiplayer: Fix Poisoned Water Supply purify --- Source/quests.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Source/quests.cpp b/Source/quests.cpp index e003e6ee5..d96069adc 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -225,6 +225,14 @@ void PrintQLString(const Surface &out, int x, int y, string_view str, bool marke } } +void StartPWaterPurify() +{ + PlaySfxLoc(IS_QUESTDN, MyPlayer->position.tile); + LoadPalette("levels\\l3data\\l3pwater.pal", false); + UpdatePWaterPalette(); + WaterDone = 32; +} + } // namespace void InitQuests() @@ -352,10 +360,7 @@ void CheckQuests() && Quests[Q_PWATER]._qactive != QUEST_DONE) { Quests[Q_PWATER]._qactive = QUEST_DONE; NetSendCmdQuest(true, Quests[Q_PWATER]); - PlaySfxLoc(IS_QUESTDN, MyPlayer->position.tile); - LoadPalette("levels\\l3data\\l3pwater.pal", false); - UpdatePWaterPalette(); - WaterDone = 32; + StartPWaterPurify(); } } else if (MyPlayer->_pmode == PM_STAND) { for (auto &quest : Quests) { @@ -831,6 +836,7 @@ void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2) return; auto &quest = Quests[q]; + quest_state oldQuestState = quest._qactive; if (quest._qactive != QUEST_DONE) { if (s > quest._qactive) quest._qactive = s; @@ -843,6 +849,10 @@ void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2) if (!UseMultiplayerQuests()) { // Ensure that changes on another client is also updated on our own ResyncQuests(); + + // Ensure that water also changes for remote players + if (quest._qidx == Q_PWATER && oldQuestState == QUEST_ACTIVE && quest._qactive == QUEST_DONE && MyPlayer->isOnLevel(quest._qslvl)) + StartPWaterPurify(); } }