From 1d2de705fbadd1c11552554e537731e26b3573d0 Mon Sep 17 00:00:00 2001 From: David Markowitz <39972741+EmosewaMC@users.noreply.github.com> Date: Mon, 8 Jun 2026 20:44:29 -0700 Subject: [PATCH] fix: old man npc mission (#1982) * fix: old man npc mission tested that the repeatable daily now has to actually be done and also can actually be done. * Update OldManNPC.cpp --- dGame/dUtilities/Preconditions.cpp | 1 + dScripts/02_server/Map/njhub/CMakeLists.txt | 1 + dScripts/02_server/Map/njhub/OldManNPC.cpp | 31 +++++++++++++++++++++ dScripts/02_server/Map/njhub/OldManNPC.h | 10 +++++++ dScripts/CppScripts.cpp | 2 ++ 5 files changed, 45 insertions(+) create mode 100644 dScripts/02_server/Map/njhub/OldManNPC.cpp create mode 100644 dScripts/02_server/Map/njhub/OldManNPC.h diff --git a/dGame/dUtilities/Preconditions.cpp b/dGame/dUtilities/Preconditions.cpp index f0cacad0..da18c81c 100644 --- a/dGame/dUtilities/Preconditions.cpp +++ b/dGame/dUtilities/Preconditions.cpp @@ -230,6 +230,7 @@ PreconditionExpression::PreconditionExpression(const std::string& conditions) { case '&': case ';': case '(': + case ':': b << conditions.substr(i + 1); done = true; break; diff --git a/dScripts/02_server/Map/njhub/CMakeLists.txt b/dScripts/02_server/Map/njhub/CMakeLists.txt index 94d99867..367d4647 100644 --- a/dScripts/02_server/Map/njhub/CMakeLists.txt +++ b/dScripts/02_server/Map/njhub/CMakeLists.txt @@ -18,6 +18,7 @@ set(DSCRIPTS_SOURCES_02_SERVER_MAP_NJHUB "NjJayMissionItems.cpp" "NjNPCMissionSpinjitzuServer.cpp" "NjNyaMissionitems.cpp" + "OldManNPC.cpp" "NjScrollChestServer.cpp" "NjWuNPC.cpp" "RainOfArrows.cpp") diff --git a/dScripts/02_server/Map/njhub/OldManNPC.cpp b/dScripts/02_server/Map/njhub/OldManNPC.cpp new file mode 100644 index 00000000..4d1f1056 --- /dev/null +++ b/dScripts/02_server/Map/njhub/OldManNPC.cpp @@ -0,0 +1,31 @@ +#include "OldManNPC.h" + +#include "eMissionState.h" +#include "Character.h" +#include "MissionComponent.h" + +void ResetMissions(Entity& user) { + for (int32_t i = 1; i < 7; i++) { + int32_t flag = 2020 + i; + auto* const character = user.GetCharacter(); + if (character) character->SetPlayerFlag(flag, false); + } +} + +void OldManNPC::OnUse(Entity* self, Entity* user) { + LOG(""); + const auto* const missionComponent = user->GetComponent(); + if (!missionComponent) return; + + const auto* const mission = missionComponent->GetMission(2039); + if (!mission) { + ResetMissions(*user); // shouldnt be needed for dlu but it is because the mission is null + return; + } + + const auto missionState = mission->GetMissionState(); + LOG("mission state %i", missionState); + if (missionState == eMissionState::AVAILABLE || missionState == eMissionState::COMPLETE_AVAILABLE) { + ResetMissions(*user); + } +} diff --git a/dScripts/02_server/Map/njhub/OldManNPC.h b/dScripts/02_server/Map/njhub/OldManNPC.h new file mode 100644 index 00000000..a7924f98 --- /dev/null +++ b/dScripts/02_server/Map/njhub/OldManNPC.h @@ -0,0 +1,10 @@ +#ifndef OLDMANNPC_H +#define OLDMANNPC_H + +#include "CppScripts.h" + +class OldManNPC : public CppScripts::Script { + void OnUse(Entity* self, Entity* user) override; +}; + +#endif //!OLDMANNPC_H diff --git a/dScripts/CppScripts.cpp b/dScripts/CppScripts.cpp index 4c0ba749..6300716f 100644 --- a/dScripts/CppScripts.cpp +++ b/dScripts/CppScripts.cpp @@ -278,6 +278,7 @@ #include "NjEarthPetServer.h" #include "NjDragonEmblemChestServer.h" #include "NjNyaMissionitems.h" +#include "OldManNPC.h" // Scripted equipment #include "AnvilOfArmor.h" @@ -628,6 +629,7 @@ namespace { {"scripts\\02_server\\Map\\njhub\\L_EARTH_PET_SERVER.lua", []() {return new NjEarthPetServer();}}, {"scripts\\02_server\\Map\\njhub\\L_DRAGON_EMBLEM_CHEST_SERVER.lua", []() {return new NjDragonEmblemChestServer();}}, {"scripts\\02_server\\Map\\njhub\\L_NYA_MISSION_ITEMS.lua", []() {return new NjNyaMissionitems();}}, + {"scripts\\02_server\\Map\\njhub\\L_OLD_MAN_NPC.lua", []() {return new OldManNPC();}}, //DLU {"scripts\\02_server\\DLU\\DLUVanityTeleportingObject.lua", []() {return new DLUVanityTeleportingObject();}},