diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 61ce723b0..1bd461fdf 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -359,6 +359,11 @@ bool Perl__hastimer(const char* timer_name) return quest_manager.hastimer(timer_name); } +bool Perl__ispausedtimer(const char* timer_name) +{ + return quest_manager.ispausedtimer(timer_name); +} + uint32_t Perl__getremainingtimeMS(const char* timer_name) { return quest_manager.getremainingtimeMS(timer_name); @@ -379,6 +384,16 @@ void Perl__settimerMS(const char* timer_name, int milliseconds) quest_manager.settimerMS(timer_name, milliseconds); } +void Perl__pausetimer(const char* timer_name) +{ + quest_manager.pausetimer(timer_name); +} + +void Perl__resumetimer(const char* timer_name) +{ + quest_manager.resumetimer(timer_name); +} + void Perl__stoptimer(const char* timer_name) { quest_manager.stoptimer(timer_name); @@ -4550,6 +4565,7 @@ void perl_register_quest() package.add("isdooropen", &Perl__isdooropen); package.add("ishotzone", &Perl__ishotzone); package.add("isnpcspawned", &Perl__isnpcspawned); + package.add("ispausedtimer", &Perl__ispausedtimer); package.add("istaskactive", &Perl__istaskactive); package.add("istaskactivityactive", &Perl__istaskactivityactive); package.add("istaskappropriate", &Perl__istaskappropriate); @@ -4579,6 +4595,7 @@ void perl_register_quest() package.add("npcsize", &Perl__npcsize); package.add("npctexture", &Perl__npctexture); package.add("pause", &Perl__pause); + package.add("pausetimer", &Perl__pausetimer); package.add("permaclass", &Perl__permaclass); package.add("permagender", &Perl__permagender); package.add("permarace", &Perl__permarace); @@ -4622,6 +4639,7 @@ void perl_register_quest() package.add("resettaskactivity", &Perl__resettaskactivity); package.add("respawn", &Perl__respawn); package.add("resume", &Perl__resume); + package.add("resumetimer", &Perl__resumetimer); package.add("rewardfaction", &Perl__rewardfaction); package.add("safemove", &Perl__safemove); package.add("save", &Perl__save); diff --git a/zone/lua_mob.cpp b/zone/lua_mob.cpp index 4face4b8f..8fee8297c 100644 --- a/zone/lua_mob.cpp +++ b/zone/lua_mob.cpp @@ -2935,6 +2935,56 @@ int64 Lua_Mob::GetActReflectedSpellDamage(uint16 spell_id, int64 value, int effe return self->GetActReflectedSpellDamage(spell_id, value, effectiveness); } +uint32 Lua_Mob::GetRemainingTimeMS(const char* timer_name) { + Lua_Safe_Call_Int(); + return quest_manager.getremainingtimeMS(timer_name, self); +} + +uint32 Lua_Mob::GetTimerDurationMS(const char* timer_name) { + Lua_Safe_Call_Int(); + return quest_manager.gettimerdurationMS(timer_name, self); +} + +bool Lua_Mob::HasTimer(const char* timer_name) { + Lua_Safe_Call_Bool(); + return quest_manager.hastimer(timer_name, self); +} + +bool Lua_Mob::IsPausedTimer(const char* timer_name) { + Lua_Safe_Call_Bool(); + return quest_manager.ispausedtimer(timer_name, self); +} + +void Lua_Mob::PauseTimer(const char* timer_name) { + Lua_Safe_Call_Void(); + quest_manager.pausetimer(timer_name, self); +} + +void Lua_Mob::ResumeTimer(const char* timer_name) { + Lua_Safe_Call_Void(); + quest_manager.resumetimer(timer_name, self); +} + +void Lua_Mob::SetTimer(const char* timer_name, int seconds) { + Lua_Safe_Call_Void(); + quest_manager.settimer(timer_name, seconds, self); +} + +void Lua_Mob::SetTimerMS(const char* timer_name, int milliseconds) { + Lua_Safe_Call_Void(); + quest_manager.settimerMS(timer_name, milliseconds, self); +} + +void Lua_Mob::StopAllTimers() { + Lua_Safe_Call_Void(); + quest_manager.stopalltimers(self); +} + +void Lua_Mob::StopTimer(const char* timer_name) { + Lua_Safe_Call_Void(); + quest_manager.stoptimer(timer_name, self); +} + luabind::scope lua_register_mob() { return luabind::class_("Mob") .def(luabind::constructor<>()) @@ -3232,6 +3282,7 @@ luabind::scope lua_register_mob() { .def("GetPhR", &Lua_Mob::GetPhR) .def("GetRace", &Lua_Mob::GetRace) .def("GetRaceName", &Lua_Mob::GetRaceName) + .def("GetRemainingTimeMS", &Lua_Mob::GetRemainingTimeMS) .def("GetResist", (int(Lua_Mob::*)(int))&Lua_Mob::GetResist) .def("GetReverseFactionCon", (int(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetReverseFactionCon) .def("GetRunspeed", &Lua_Mob::GetRunspeed) @@ -3249,6 +3300,7 @@ luabind::scope lua_register_mob() { .def("GetSpellHPBonuses", &Lua_Mob::GetSpellHPBonuses) .def("GetTarget", &Lua_Mob::GetTarget) .def("GetTexture", &Lua_Mob::GetTexture) + .def("GetTimerDurationMS", &Lua_Mob::GetTimerDurationMS) .def("GetUltimateOwner", &Lua_Mob::GetUltimateOwner) .def("GetWIS", &Lua_Mob::GetWIS) .def("GetWalkspeed", &Lua_Mob::GetWalkspeed) @@ -3270,6 +3322,7 @@ luabind::scope lua_register_mob() { .def("HasPet", (bool(Lua_Mob::*)(void))&Lua_Mob::HasPet) .def("HasProcs", &Lua_Mob::HasProcs) .def("HasShieldEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasShieldEquiped) + .def("HasTimer", &Lua_Mob::HasTimer) .def("HasTwoHandBluntEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHandBluntEquiped) .def("HasTwoHanderEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHanderEquipped) .def("Heal", &Lua_Mob::Heal) @@ -3297,6 +3350,7 @@ luabind::scope lua_register_mob() { .def("IsMeleeDisabled", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMeleeDisabled) .def("IsMezzed", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMezzed) .def("IsMoving", &Lua_Mob::IsMoving) + .def("IsPausedTimer", &Lua_Mob::IsPausedTimer) .def("IsPet", (bool(Lua_Mob::*)(void))&Lua_Mob::IsPet) .def("IsRoamer", (bool(Lua_Mob::*)(void))&Lua_Mob::IsRoamer) .def("IsRooted", (bool(Lua_Mob::*)(void))&Lua_Mob::IsRooted) @@ -3318,6 +3372,7 @@ luabind::scope lua_register_mob() { .def("NPCSpecialAttacks", (void(Lua_Mob::*)(const char*,int,bool))&Lua_Mob::NPCSpecialAttacks) .def("NPCSpecialAttacks", (void(Lua_Mob::*)(const char*,int,bool,bool))&Lua_Mob::NPCSpecialAttacks) .def("NavigateTo", (void(Lua_Mob::*)(double,double,double))&Lua_Mob::NavigateTo) + .def("PauseTimer", &Lua_Mob::PauseTimer) .def("ProcessSpecialAbilities", (void(Lua_Mob::*)(std::string))&Lua_Mob::ProcessSpecialAbilities) .def("ProjectileAnimation", (void(Lua_Mob::*)(Lua_Mob,int))&Lua_Mob::ProjectileAnimation) .def("ProjectileAnimation", (void(Lua_Mob::*)(Lua_Mob,int,bool))&Lua_Mob::ProjectileAnimation) @@ -3338,6 +3393,7 @@ luabind::scope lua_register_mob() { .def("ResistSpell", (double(Lua_Mob::*)(int,int,Lua_Mob,bool))&Lua_Mob::ResistSpell) .def("ResistSpell", (double(Lua_Mob::*)(int,int,Lua_Mob,bool,int))&Lua_Mob::ResistSpell) .def("ResistSpell", (double(Lua_Mob::*)(int,int,Lua_Mob,bool,int,bool))&Lua_Mob::ResistSpell) + .def("ResumeTimer", &Lua_Mob::ResumeTimer) .def("RunTo", (void(Lua_Mob::*)(double, double, double))&Lua_Mob::RunTo) .def("Say", (void(Lua_Mob::*)(const char*))& Lua_Mob::Say) .def("Say", (void(Lua_Mob::*)(const char*, int))& Lua_Mob::Say) @@ -3401,6 +3457,10 @@ luabind::scope lua_register_mob() { .def("SetTarget", &Lua_Mob::SetTarget) .def("SetTargetable", (void(Lua_Mob::*)(bool))&Lua_Mob::SetTargetable) .def("SetTexture", (void(Lua_Mob::*)(int))&Lua_Mob::SetTexture) + .def("SetTimer", &Lua_Mob::SetTimer) + .def("SetTimerMS", &Lua_Mob::SetTimerMS) + .def("StopAllTimers", &Lua_Mob::StopAllTimers) + .def("StopTimer", &Lua_Mob::StopTimer) .def("Shout", (void(Lua_Mob::*)(const char*))& Lua_Mob::Shout) .def("Shout", (void(Lua_Mob::*)(const char*, int))& Lua_Mob::Shout) .def("Signal", (void(Lua_Mob::*)(int))&Lua_Mob::Signal) diff --git a/zone/lua_mob.h b/zone/lua_mob.h index a3bcace30..3657b3323 100644 --- a/zone/lua_mob.h +++ b/zone/lua_mob.h @@ -528,6 +528,16 @@ public: int64 GetActSpellHealing(uint16 spell_id, int64 value, Lua_Mob target); int64 GetActSpellHealing(uint16 spell_id, int64 value, Lua_Mob target, bool from_buff_tic); float GetActSpellRange(uint16 spell_id, float range); + uint32 GetRemainingTimeMS(const char* timer_name); + uint32 GetTimerDurationMS(const char* timer_name); + bool HasTimer(const char* timer_name); + bool IsPausedTimer(const char* timer_name); + void PauseTimer(const char* timer_name); + void ResumeTimer(const char* timer_name); + void SetTimer(const char* timer_name, int seconds); + void SetTimerMS(const char* timer_name, int milliseconds); + void StopAllTimers(); + void StopTimer(const char* timer_name); }; #endif diff --git a/zone/perl_mob.cpp b/zone/perl_mob.cpp index 4ce5df213..fb83bb496 100644 --- a/zone/perl_mob.cpp +++ b/zone/perl_mob.cpp @@ -9,6 +9,7 @@ #include "client.h" #include "dialogue_window.h" #include "bot.h" +#include "questmgr.h" bool Perl_Mob_IsClient(Mob* self) // @categories Script Utility { @@ -2886,6 +2887,56 @@ float Perl_Mob_GetDefaultRaceSize(Mob* self) // @categories Script Utility return self->GetDefaultRaceSize(); } +uint32 Perl_Mob_GetRemainingTimeMS(Mob* self, const char* timer_name) +{ + return quest_manager.getremainingtimeMS(timer_name, self); +} + +uint32 Perl_Mob_GetTimerDurationMS(Mob* self, const char* timer_name) +{ + return quest_manager.gettimerdurationMS(timer_name, self); +} + +bool Perl_Mob_HasTimer(Mob* self, const char* timer_name) +{ + return quest_manager.hastimer(timer_name, self); +} + +bool Perl_Mob_IsPausedTimer(Mob* self, const char* timer_name) +{ + return quest_manager.ispausedtimer(timer_name, self); +} + +void Perl_Mob_PauseTimer(Mob* self, const char* timer_name) +{ + quest_manager.pausetimer(timer_name, self); +} + +void Perl_Mob_ResumeTimer(Mob* self, const char* timer_name) +{ + quest_manager.resumetimer(timer_name, self); +} + +void Perl_Mob_SetTimer(Mob* self, const char* timer_name, int seconds) +{ + quest_manager.settimer(timer_name, seconds, self); +} + +void Perl_Mob_SetTimerMS(Mob* self, const char* timer_name, int milliseconds) +{ + quest_manager.settimerMS(timer_name, milliseconds, self); +} + +void Perl_Mob_StopAllTimers(Mob* self) +{ + quest_manager.stopalltimers(self); +} + +void Perl_Mob_StopTimer(Mob* self, const char* timer_name) +{ + quest_manager.stoptimer(timer_name, self); +} + void perl_register_mob() { perl::interpreter perl(PERL_GET_THX); @@ -3166,6 +3217,7 @@ void perl_register_mob() package.add("GetPhR", &Perl_Mob_GetPhR); package.add("GetRace", &Perl_Mob_GetRace); package.add("GetRaceName", &Perl_Mob_GetRaceName); + package.add("GetRemainingTimeMS", &Perl_Mob_GetRemainingTimeMS); package.add("GetResist", &Perl_Mob_GetResist); package.add("GetReverseFactionCon", &Perl_Mob_GetReverseFactionCon); package.add("GetRunAnimSpeed", &Perl_Mob_GetRunAnimSpeed); @@ -3185,6 +3237,7 @@ void perl_register_mob() package.add("GetSpellStat", (int(*)(Mob*, uint32, const char*, uint8))&Perl_Mob_GetSpellStat); package.add("GetTarget", &Perl_Mob_GetTarget); package.add("GetTexture", &Perl_Mob_GetTexture); + package.add("GetTimerDurationMS", &Perl_Mob_GetTimerDurationMS); package.add("GetUltimateOwner", &Perl_Mob_GetUltimateOwner); package.add("GetWIS", &Perl_Mob_GetWIS); package.add("GetWalkspeed", &Perl_Mob_GetWalkspeed); @@ -3205,6 +3258,7 @@ void perl_register_mob() package.add("HasPet", &Perl_Mob_HasPet); package.add("HasProcs", &Perl_Mob_HasProcs); package.add("HasShieldEquiped", &Perl_Mob_HasShieldEquiped); + package.add("HasTimer", &Perl_Mob_HasTimer); package.add("HasTwoHandBluntEquiped", &Perl_Mob_HasTwoHandBluntEquiped); package.add("HasTwoHanderEquipped", &Perl_Mob_HasTwoHanderEquipped); package.add("HateSummon", &Perl_Mob_HateSummon); @@ -3242,6 +3296,7 @@ void perl_register_mob() package.add("IsNPC", &Perl_Mob_IsNPC); package.add("IsNPCCorpse", &Perl_Mob_IsNPCCorpse); package.add("IsObject", &Perl_Mob_IsObject); + package.add("IsPausedTimer", &Perl_Mob_IsPausedTimer); package.add("IsPet", &Perl_Mob_IsPet); package.add("IsPlayerCorpse", &Perl_Mob_IsPlayerCorpse); package.add("IsRoamer", &Perl_Mob_IsRoamer); @@ -3272,6 +3327,7 @@ void perl_register_mob() package.add("NPCSpecialAttacks", (void(*)(Mob*, const char*, int, bool))&Perl_Mob_NPCSpecialAttacks); package.add("NPCSpecialAttacks", (void(*)(Mob*, const char*, int, bool, bool))&Perl_Mob_NPCSpecialAttacks); package.add("NavigateTo", &Perl_Mob_NavigateTo); + package.add("PauseTimer", &Perl_Mob_PauseTimer); package.add("ProcessSpecialAbilities", &Perl_Mob_ProcessSpecialAbilities); package.add("ProjectileAnim", (void(*)(Mob*, Mob*, int))&Perl_Mob_ProjectileAnim); package.add("ProjectileAnim", (void(*)(Mob*, Mob*, int, bool))&Perl_Mob_ProjectileAnim); @@ -3290,6 +3346,7 @@ void perl_register_mob() package.add("RemoveNimbusEffect", &Perl_Mob_RemoveNimbusEffect); package.add("RemovePet", &Perl_Mob_RemovePet); package.add("ResistSpell", &Perl_Mob_ResistSpell); + package.add("ResumeTimer", &Perl_Mob_ResumeTimer); package.add("RogueAssassinate", &Perl_Mob_RogueAssassinate); package.add("RunTo", &Perl_Mob_RunTo); package.add("Say", &Perl_Mob_Say); @@ -3397,6 +3454,10 @@ void perl_register_mob() package.add("SetTarget", &Perl_Mob_SetTarget); package.add("SetTargetable", &Perl_Mob_SetTargetable); package.add("SetTexture", &Perl_Mob_SetTexture); + package.add("SetTimer", &Perl_Mob_SetTimer); + package.add("SetTimerMS", &Perl_Mob_SetTimerMS); + package.add("StopAllTimers", &Perl_Mob_StopAllTimers); + package.add("StopTimer", &Perl_Mob_StopTimer); package.add("ShieldAbility", (void(*)(Mob*, uint32))&Perl_Mob_ShieldAbility); package.add("ShieldAbility", (void(*)(Mob*, uint32, int32))&Perl_Mob_ShieldAbility); package.add("ShieldAbility", (void(*)(Mob*, uint32, int32, int32))&Perl_Mob_ShieldAbility); diff --git a/zone/questmgr.cpp b/zone/questmgr.cpp index ea41f1e63..7c2898c7c 100644 --- a/zone/questmgr.cpp +++ b/zone/questmgr.cpp @@ -458,7 +458,7 @@ void QuestManager::ZoneRaid(const char *zone_name) { } } -void QuestManager::settimer(const char *timer_name, int seconds) { +void QuestManager::settimer(const char* timer_name, int seconds, Mob* mob) { QuestManagerCurrentQuestVars(); if(questitem) { @@ -469,9 +469,11 @@ void QuestManager::settimer(const char *timer_name, int seconds) { std::list::iterator cur = QTimerList.begin(), end; end = QTimerList.end(); + + const auto m = mob ? mob : owner; + while (cur != end) { - if(cur->mob && cur->mob == owner && cur->name == timer_name) - { + if (cur->mob && cur->mob == m && cur->name == timer_name) { cur->Timer_.Enable(); cur->Timer_.Start(seconds * 1000, false); return; @@ -482,7 +484,7 @@ void QuestManager::settimer(const char *timer_name, int seconds) { QTimerList.push_back(QuestTimer(seconds * 1000, owner, timer_name)); } -void QuestManager::settimerMS(const char *timer_name, int milliseconds) { +void QuestManager::settimerMS(const char* timer_name, int milliseconds) { QuestManagerCurrentQuestVars(); if(questitem) { @@ -506,13 +508,13 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds) { QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name)); } -void QuestManager::settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst) { +void QuestManager::settimerMS(const char* timer_name, int milliseconds, EQ::ItemInstance *inst) { if (inst) { inst->SetTimer(timer_name, milliseconds); } } -void QuestManager::settimerMS(const char *timer_name, int milliseconds, Mob *mob) { +void QuestManager::settimerMS(const char* timer_name, int milliseconds, Mob *mob) { std::list::iterator cur = QTimerList.begin(), end; end = QTimerList.end(); @@ -529,7 +531,7 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds, Mob *mob QTimerList.push_back(QuestTimer(milliseconds, mob, timer_name)); } -void QuestManager::stoptimer(const char *timer_name) { +void QuestManager::stoptimer(const char* timer_name) { QuestManagerCurrentQuestVars(); if (questitem) { @@ -549,13 +551,13 @@ void QuestManager::stoptimer(const char *timer_name) { } } -void QuestManager::stoptimer(const char *timer_name, EQ::ItemInstance *inst) { +void QuestManager::stoptimer(const char* timer_name, EQ::ItemInstance *inst) { if (inst) { inst->StopTimer(timer_name); } } -void QuestManager::stoptimer(const char *timer_name, Mob *mob) { +void QuestManager::stoptimer(const char* timer_name, Mob *mob) { std::list::iterator cur = QTimerList.begin(), end; end = QTimerList.end(); @@ -605,7 +607,7 @@ void QuestManager::stopalltimers(Mob *mob) { } } -void QuestManager::pausetimer(const char *timer_name) { +void QuestManager::pausetimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator cur = QTimerList.begin(), end; @@ -613,11 +615,11 @@ void QuestManager::pausetimer(const char *timer_name) { PausedTimer pt; uint32 milliseconds = 0; + const auto m = mob ? mob : owner; + pend = PTimerList.end(); - while (pcur != pend) - { - if (pcur->owner && pcur->owner == owner && pcur->name == timer_name) - { + while (pcur != pend) { + if (pcur->owner && pcur->owner == m && pcur->name == timer_name) { LogQuests("Timer [{}] is already paused for [{}]. Returning", timer_name, owner->GetName()); return; } @@ -625,10 +627,8 @@ void QuestManager::pausetimer(const char *timer_name) { } end = QTimerList.end(); - while (cur != end) - { - if (cur->mob && cur->mob == owner && cur->name == timer_name) - { + while (cur != end) { + if (cur->mob && cur->mob == m && cur->name == timer_name) { milliseconds = cur->Timer_.GetRemainingTime(); QTimerList.erase(cur); break; @@ -644,7 +644,7 @@ void QuestManager::pausetimer(const char *timer_name) { PTimerList.push_back(pt); } -void QuestManager::resumetimer(const char *timer_name) { +void QuestManager::resumetimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator cur = QTimerList.begin(), end; @@ -652,11 +652,11 @@ void QuestManager::resumetimer(const char *timer_name) { PausedTimer pt; uint32 milliseconds = 0; + const auto m = mob ? mob : owner; + pend = PTimerList.end(); - while (pcur != pend) - { - if (pcur->owner && pcur->owner == owner && pcur->name == timer_name) - { + while (pcur != pend) { + if (pcur->owner && pcur->owner == m && pcur->name == timer_name) { milliseconds = pcur->time; PTimerList.erase(pcur); break; @@ -664,40 +664,40 @@ void QuestManager::resumetimer(const char *timer_name) { ++pcur; } - if (milliseconds == 0) - { + if (milliseconds == 0) { LogQuests("Paused timer [{}] not found or has expired. Returning", timer_name); return; } end = QTimerList.end(); - while (cur != end) - { - if (cur->mob && cur->mob == owner && cur->name == timer_name) - { + while (cur != end) { + if (cur->mob && cur->mob == m && cur->name == timer_name) { cur->Timer_.Enable(); cur->Timer_.Start(milliseconds, false); - LogQuests("Resuming timer [{}] for [{}] with [{}] ms remaining", timer_name, owner->GetName(), milliseconds); + LogQuests("Resuming timer [{}] for [{}] with [{}] ms remaining", + timer_name, + owner->GetName(), + milliseconds); return; } ++cur; } - QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name)); + QTimerList.push_back(QuestTimer(milliseconds, m, timer_name)); LogQuests("Creating a new timer and resuming [{}] for [{}] with [{}] ms remaining", timer_name, owner->GetName(), milliseconds); } -bool QuestManager::ispausedtimer(const char *timer_name) { +bool QuestManager::ispausedtimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator pcur = PTimerList.begin(), pend; + const auto m = mob ? mob : owner; + pend = PTimerList.end(); - while (pcur != pend) - { - if (pcur->owner && pcur->owner == owner && pcur->name == timer_name) - { + while (pcur != pend) { + if (pcur->owner && pcur->owner == m && pcur->name == timer_name) { return true; } ++pcur; @@ -706,18 +706,17 @@ bool QuestManager::ispausedtimer(const char *timer_name) { return false; } -bool QuestManager::hastimer(const char *timer_name) { +bool QuestManager::hastimer(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator cur = QTimerList.begin(), end; + const auto m = mob ? mob : owner; + end = QTimerList.end(); - while (cur != end) - { - if (cur->mob && cur->mob == owner && cur->name == timer_name) - { - if (cur->Timer_.Enabled()) - { + while (cur != end) { + if (cur->mob && cur->mob == m && cur->name == timer_name) { + if (cur->Timer_.Enabled()) { return true; } } @@ -726,18 +725,17 @@ bool QuestManager::hastimer(const char *timer_name) { return false; } -uint32 QuestManager::getremainingtimeMS(const char *timer_name) { +uint32 QuestManager::getremainingtimeMS(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator cur = QTimerList.begin(), end; + const auto m = mob ? mob : owner; + end = QTimerList.end(); - while (cur != end) - { - if (cur->mob && cur->mob == owner && cur->name == timer_name) - { - if (cur->Timer_.Enabled()) - { + while (cur != end) { + if (cur->mob && cur->mob == m && cur->name == timer_name) { + if (cur->Timer_.Enabled()) { return cur->Timer_.GetRemainingTime(); } } @@ -746,18 +744,17 @@ uint32 QuestManager::getremainingtimeMS(const char *timer_name) { return 0; } -uint32 QuestManager::gettimerdurationMS(const char *timer_name) { +uint32 QuestManager::gettimerdurationMS(const char* timer_name, Mob* mob) { QuestManagerCurrentQuestVars(); std::list::iterator cur = QTimerList.begin(), end; + const auto m = mob ? mob : owner; + end = QTimerList.end(); - while (cur != end) - { - if (cur->mob && cur->mob == owner && cur->name == timer_name) - { - if (cur->Timer_.Enabled()) - { + while (cur != end) { + if (cur->mob && cur->mob == m && cur->name == timer_name) { + if (cur->Timer_.Enabled()) { return cur->Timer_.GetDuration(); } } diff --git a/zone/questmgr.h b/zone/questmgr.h index 5d9f81636..cdf1051f2 100644 --- a/zone/questmgr.h +++ b/zone/questmgr.h @@ -81,22 +81,22 @@ public: void Zone(const char *zone_name); void ZoneGroup(const char *zone_name); void ZoneRaid(const char *zone_name); - void settimer(const char *timer_name, int seconds); - void settimerMS(const char *timer_name, int milliseconds); - void settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst); - void settimerMS(const char *timer_name, int milliseconds, Mob *mob); - void stoptimer(const char *timer_name); - void stoptimer(const char *timer_name, EQ::ItemInstance *inst); - void stoptimer(const char *timer_name, Mob *mob); + void settimer(const char* timer_name, int seconds, Mob* mob = nullptr); + void settimerMS(const char* timer_name, int milliseconds); + void settimerMS(const char* timer_name, int milliseconds, EQ::ItemInstance *inst); + void settimerMS(const char* timer_name, int milliseconds, Mob *mob); + void stoptimer(const char* timer_name); + void stoptimer(const char* timer_name, EQ::ItemInstance *inst); + void stoptimer(const char* timer_name, Mob *mob); void stopalltimers(); void stopalltimers(EQ::ItemInstance *inst); void stopalltimers(Mob *mob); - void pausetimer(const char *timer_name); - void resumetimer(const char *timer_name); - bool ispausedtimer(const char *timer_name); - bool hastimer(const char *timer_name); - uint32 getremainingtimeMS(const char *timer_name); - uint32 gettimerdurationMS(const char *timer_name); + void pausetimer(const char* timer_name, Mob* mob = nullptr); + void resumetimer(const char* timer_name, Mob* mob = nullptr); + bool ispausedtimer(const char* timer_name, Mob* mob = nullptr); + bool hastimer(const char* timer_name, Mob* mob = nullptr); + uint32 getremainingtimeMS(const char* timer_name, Mob* mob = nullptr); + uint32 gettimerdurationMS(const char* timer_name, Mob* mob = nullptr); void emote(const char *str); void shout(const char *str); void shout2(const char *str);