[Quest API] Add Timer related methods to Mobs in Perl/Lua (#3133)

* [Quest API] Add Timer related methods to Mobs in Perl/Lua

# Perl
- Add `quest::ispausedtimer(timer_name)`.
- Add `quest::pausetimer(timer_name)`.
- Add `quest::resumetimer(timer_name)`.
- Add `$mob->GetRemainingTimeMS(timer_name)`.
- Add `$mob->GetTimerDurationMS(timer_name)`.
- Add `$mob->HasTimer(timer_name)`.
- Add `$mob->IsPausedTimer(timer_name)`.
- Add `$mob->PauseTimer(timer_name)`.
- Add `$mob->ResumeTimer(timer_name)`.
- Add `$mob->SetTimer(timer_name)`.
- Add `$mob->SetTimerMS(timer_name)`.
- Add `$mob->StopTimer(timer_name)`.

# Lua
- Add `mob:GetRemainingTimeMS(timer_name)`.
- Add `mob:GetTimerDurationMS(timer_name)`.
- Add `mob:HasTimer(timer_name)`.
- Add `mob:IsPausedTimer(timer_name)`.
- Add `mob:PauseTimer(timer_name)`.
- Add `mob:ResumeTimer(timer_name)`.
- Add `mob:SetTimer(timer_name)`.
- Add `mob:SetTimerMS(timer_name)`.
- Add `mob:StopTimer(timer_name)`.

# Notes
- The mob-based methods allow operators to loop entity list or whatever to set, stop, resume, pause, etc for timers.

* StopAllTimers()

* Update questmgr.cpp
This commit is contained in:
Alex King 2023-03-20 16:18:51 -04:00 committed by GitHub
parent 63a8d2d641
commit 4fe44f4cb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 216 additions and 70 deletions

View File

@ -359,6 +359,11 @@ bool Perl__hastimer(const char* timer_name)
return quest_manager.hastimer(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) uint32_t Perl__getremainingtimeMS(const char* timer_name)
{ {
return quest_manager.getremainingtimeMS(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); 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) void Perl__stoptimer(const char* timer_name)
{ {
quest_manager.stoptimer(timer_name); quest_manager.stoptimer(timer_name);
@ -4550,6 +4565,7 @@ void perl_register_quest()
package.add("isdooropen", &Perl__isdooropen); package.add("isdooropen", &Perl__isdooropen);
package.add("ishotzone", &Perl__ishotzone); package.add("ishotzone", &Perl__ishotzone);
package.add("isnpcspawned", &Perl__isnpcspawned); package.add("isnpcspawned", &Perl__isnpcspawned);
package.add("ispausedtimer", &Perl__ispausedtimer);
package.add("istaskactive", &Perl__istaskactive); package.add("istaskactive", &Perl__istaskactive);
package.add("istaskactivityactive", &Perl__istaskactivityactive); package.add("istaskactivityactive", &Perl__istaskactivityactive);
package.add("istaskappropriate", &Perl__istaskappropriate); package.add("istaskappropriate", &Perl__istaskappropriate);
@ -4579,6 +4595,7 @@ void perl_register_quest()
package.add("npcsize", &Perl__npcsize); package.add("npcsize", &Perl__npcsize);
package.add("npctexture", &Perl__npctexture); package.add("npctexture", &Perl__npctexture);
package.add("pause", &Perl__pause); package.add("pause", &Perl__pause);
package.add("pausetimer", &Perl__pausetimer);
package.add("permaclass", &Perl__permaclass); package.add("permaclass", &Perl__permaclass);
package.add("permagender", &Perl__permagender); package.add("permagender", &Perl__permagender);
package.add("permarace", &Perl__permarace); package.add("permarace", &Perl__permarace);
@ -4622,6 +4639,7 @@ void perl_register_quest()
package.add("resettaskactivity", &Perl__resettaskactivity); package.add("resettaskactivity", &Perl__resettaskactivity);
package.add("respawn", &Perl__respawn); package.add("respawn", &Perl__respawn);
package.add("resume", &Perl__resume); package.add("resume", &Perl__resume);
package.add("resumetimer", &Perl__resumetimer);
package.add("rewardfaction", &Perl__rewardfaction); package.add("rewardfaction", &Perl__rewardfaction);
package.add("safemove", &Perl__safemove); package.add("safemove", &Perl__safemove);
package.add("save", &Perl__save); package.add("save", &Perl__save);

View File

@ -2935,6 +2935,56 @@ int64 Lua_Mob::GetActReflectedSpellDamage(uint16 spell_id, int64 value, int effe
return self->GetActReflectedSpellDamage(spell_id, value, effectiveness); 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() { luabind::scope lua_register_mob() {
return luabind::class_<Lua_Mob, Lua_Entity>("Mob") return luabind::class_<Lua_Mob, Lua_Entity>("Mob")
.def(luabind::constructor<>()) .def(luabind::constructor<>())
@ -3232,6 +3282,7 @@ luabind::scope lua_register_mob() {
.def("GetPhR", &Lua_Mob::GetPhR) .def("GetPhR", &Lua_Mob::GetPhR)
.def("GetRace", &Lua_Mob::GetRace) .def("GetRace", &Lua_Mob::GetRace)
.def("GetRaceName", &Lua_Mob::GetRaceName) .def("GetRaceName", &Lua_Mob::GetRaceName)
.def("GetRemainingTimeMS", &Lua_Mob::GetRemainingTimeMS)
.def("GetResist", (int(Lua_Mob::*)(int))&Lua_Mob::GetResist) .def("GetResist", (int(Lua_Mob::*)(int))&Lua_Mob::GetResist)
.def("GetReverseFactionCon", (int(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetReverseFactionCon) .def("GetReverseFactionCon", (int(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetReverseFactionCon)
.def("GetRunspeed", &Lua_Mob::GetRunspeed) .def("GetRunspeed", &Lua_Mob::GetRunspeed)
@ -3249,6 +3300,7 @@ luabind::scope lua_register_mob() {
.def("GetSpellHPBonuses", &Lua_Mob::GetSpellHPBonuses) .def("GetSpellHPBonuses", &Lua_Mob::GetSpellHPBonuses)
.def("GetTarget", &Lua_Mob::GetTarget) .def("GetTarget", &Lua_Mob::GetTarget)
.def("GetTexture", &Lua_Mob::GetTexture) .def("GetTexture", &Lua_Mob::GetTexture)
.def("GetTimerDurationMS", &Lua_Mob::GetTimerDurationMS)
.def("GetUltimateOwner", &Lua_Mob::GetUltimateOwner) .def("GetUltimateOwner", &Lua_Mob::GetUltimateOwner)
.def("GetWIS", &Lua_Mob::GetWIS) .def("GetWIS", &Lua_Mob::GetWIS)
.def("GetWalkspeed", &Lua_Mob::GetWalkspeed) .def("GetWalkspeed", &Lua_Mob::GetWalkspeed)
@ -3270,6 +3322,7 @@ luabind::scope lua_register_mob() {
.def("HasPet", (bool(Lua_Mob::*)(void))&Lua_Mob::HasPet) .def("HasPet", (bool(Lua_Mob::*)(void))&Lua_Mob::HasPet)
.def("HasProcs", &Lua_Mob::HasProcs) .def("HasProcs", &Lua_Mob::HasProcs)
.def("HasShieldEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasShieldEquiped) .def("HasShieldEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasShieldEquiped)
.def("HasTimer", &Lua_Mob::HasTimer)
.def("HasTwoHandBluntEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHandBluntEquiped) .def("HasTwoHandBluntEquiped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHandBluntEquiped)
.def("HasTwoHanderEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHanderEquipped) .def("HasTwoHanderEquipped", (bool(Lua_Mob::*)(void))&Lua_Mob::HasTwoHanderEquipped)
.def("Heal", &Lua_Mob::Heal) .def("Heal", &Lua_Mob::Heal)
@ -3297,6 +3350,7 @@ luabind::scope lua_register_mob() {
.def("IsMeleeDisabled", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMeleeDisabled) .def("IsMeleeDisabled", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMeleeDisabled)
.def("IsMezzed", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMezzed) .def("IsMezzed", (bool(Lua_Mob::*)(void))&Lua_Mob::IsMezzed)
.def("IsMoving", &Lua_Mob::IsMoving) .def("IsMoving", &Lua_Mob::IsMoving)
.def("IsPausedTimer", &Lua_Mob::IsPausedTimer)
.def("IsPet", (bool(Lua_Mob::*)(void))&Lua_Mob::IsPet) .def("IsPet", (bool(Lua_Mob::*)(void))&Lua_Mob::IsPet)
.def("IsRoamer", (bool(Lua_Mob::*)(void))&Lua_Mob::IsRoamer) .def("IsRoamer", (bool(Lua_Mob::*)(void))&Lua_Mob::IsRoamer)
.def("IsRooted", (bool(Lua_Mob::*)(void))&Lua_Mob::IsRooted) .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))&Lua_Mob::NPCSpecialAttacks)
.def("NPCSpecialAttacks", (void(Lua_Mob::*)(const char*,int,bool,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("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("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))&Lua_Mob::ProjectileAnimation)
.def("ProjectileAnimation", (void(Lua_Mob::*)(Lua_Mob,int,bool))&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))&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))&Lua_Mob::ResistSpell)
.def("ResistSpell", (double(Lua_Mob::*)(int,int,Lua_Mob,bool,int,bool))&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("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*))& Lua_Mob::Say)
.def("Say", (void(Lua_Mob::*)(const char*, int))& 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("SetTarget", &Lua_Mob::SetTarget)
.def("SetTargetable", (void(Lua_Mob::*)(bool))&Lua_Mob::SetTargetable) .def("SetTargetable", (void(Lua_Mob::*)(bool))&Lua_Mob::SetTargetable)
.def("SetTexture", (void(Lua_Mob::*)(int))&Lua_Mob::SetTexture) .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*))& Lua_Mob::Shout)
.def("Shout", (void(Lua_Mob::*)(const char*, int))& Lua_Mob::Shout) .def("Shout", (void(Lua_Mob::*)(const char*, int))& Lua_Mob::Shout)
.def("Signal", (void(Lua_Mob::*)(int))&Lua_Mob::Signal) .def("Signal", (void(Lua_Mob::*)(int))&Lua_Mob::Signal)

View File

@ -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);
int64 GetActSpellHealing(uint16 spell_id, int64 value, Lua_Mob target, bool from_buff_tic); int64 GetActSpellHealing(uint16 spell_id, int64 value, Lua_Mob target, bool from_buff_tic);
float GetActSpellRange(uint16 spell_id, float range); 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 #endif

View File

@ -9,6 +9,7 @@
#include "client.h" #include "client.h"
#include "dialogue_window.h" #include "dialogue_window.h"
#include "bot.h" #include "bot.h"
#include "questmgr.h"
bool Perl_Mob_IsClient(Mob* self) // @categories Script Utility 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(); 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() void perl_register_mob()
{ {
perl::interpreter perl(PERL_GET_THX); perl::interpreter perl(PERL_GET_THX);
@ -3166,6 +3217,7 @@ void perl_register_mob()
package.add("GetPhR", &Perl_Mob_GetPhR); package.add("GetPhR", &Perl_Mob_GetPhR);
package.add("GetRace", &Perl_Mob_GetRace); package.add("GetRace", &Perl_Mob_GetRace);
package.add("GetRaceName", &Perl_Mob_GetRaceName); package.add("GetRaceName", &Perl_Mob_GetRaceName);
package.add("GetRemainingTimeMS", &Perl_Mob_GetRemainingTimeMS);
package.add("GetResist", &Perl_Mob_GetResist); package.add("GetResist", &Perl_Mob_GetResist);
package.add("GetReverseFactionCon", &Perl_Mob_GetReverseFactionCon); package.add("GetReverseFactionCon", &Perl_Mob_GetReverseFactionCon);
package.add("GetRunAnimSpeed", &Perl_Mob_GetRunAnimSpeed); 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("GetSpellStat", (int(*)(Mob*, uint32, const char*, uint8))&Perl_Mob_GetSpellStat);
package.add("GetTarget", &Perl_Mob_GetTarget); package.add("GetTarget", &Perl_Mob_GetTarget);
package.add("GetTexture", &Perl_Mob_GetTexture); package.add("GetTexture", &Perl_Mob_GetTexture);
package.add("GetTimerDurationMS", &Perl_Mob_GetTimerDurationMS);
package.add("GetUltimateOwner", &Perl_Mob_GetUltimateOwner); package.add("GetUltimateOwner", &Perl_Mob_GetUltimateOwner);
package.add("GetWIS", &Perl_Mob_GetWIS); package.add("GetWIS", &Perl_Mob_GetWIS);
package.add("GetWalkspeed", &Perl_Mob_GetWalkspeed); package.add("GetWalkspeed", &Perl_Mob_GetWalkspeed);
@ -3205,6 +3258,7 @@ void perl_register_mob()
package.add("HasPet", &Perl_Mob_HasPet); package.add("HasPet", &Perl_Mob_HasPet);
package.add("HasProcs", &Perl_Mob_HasProcs); package.add("HasProcs", &Perl_Mob_HasProcs);
package.add("HasShieldEquiped", &Perl_Mob_HasShieldEquiped); package.add("HasShieldEquiped", &Perl_Mob_HasShieldEquiped);
package.add("HasTimer", &Perl_Mob_HasTimer);
package.add("HasTwoHandBluntEquiped", &Perl_Mob_HasTwoHandBluntEquiped); package.add("HasTwoHandBluntEquiped", &Perl_Mob_HasTwoHandBluntEquiped);
package.add("HasTwoHanderEquipped", &Perl_Mob_HasTwoHanderEquipped); package.add("HasTwoHanderEquipped", &Perl_Mob_HasTwoHanderEquipped);
package.add("HateSummon", &Perl_Mob_HateSummon); package.add("HateSummon", &Perl_Mob_HateSummon);
@ -3242,6 +3296,7 @@ void perl_register_mob()
package.add("IsNPC", &Perl_Mob_IsNPC); package.add("IsNPC", &Perl_Mob_IsNPC);
package.add("IsNPCCorpse", &Perl_Mob_IsNPCCorpse); package.add("IsNPCCorpse", &Perl_Mob_IsNPCCorpse);
package.add("IsObject", &Perl_Mob_IsObject); package.add("IsObject", &Perl_Mob_IsObject);
package.add("IsPausedTimer", &Perl_Mob_IsPausedTimer);
package.add("IsPet", &Perl_Mob_IsPet); package.add("IsPet", &Perl_Mob_IsPet);
package.add("IsPlayerCorpse", &Perl_Mob_IsPlayerCorpse); package.add("IsPlayerCorpse", &Perl_Mob_IsPlayerCorpse);
package.add("IsRoamer", &Perl_Mob_IsRoamer); 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))&Perl_Mob_NPCSpecialAttacks);
package.add("NPCSpecialAttacks", (void(*)(Mob*, const char*, int, bool, 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("NavigateTo", &Perl_Mob_NavigateTo);
package.add("PauseTimer", &Perl_Mob_PauseTimer);
package.add("ProcessSpecialAbilities", &Perl_Mob_ProcessSpecialAbilities); package.add("ProcessSpecialAbilities", &Perl_Mob_ProcessSpecialAbilities);
package.add("ProjectileAnim", (void(*)(Mob*, Mob*, int))&Perl_Mob_ProjectileAnim); package.add("ProjectileAnim", (void(*)(Mob*, Mob*, int))&Perl_Mob_ProjectileAnim);
package.add("ProjectileAnim", (void(*)(Mob*, Mob*, int, bool))&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("RemoveNimbusEffect", &Perl_Mob_RemoveNimbusEffect);
package.add("RemovePet", &Perl_Mob_RemovePet); package.add("RemovePet", &Perl_Mob_RemovePet);
package.add("ResistSpell", &Perl_Mob_ResistSpell); package.add("ResistSpell", &Perl_Mob_ResistSpell);
package.add("ResumeTimer", &Perl_Mob_ResumeTimer);
package.add("RogueAssassinate", &Perl_Mob_RogueAssassinate); package.add("RogueAssassinate", &Perl_Mob_RogueAssassinate);
package.add("RunTo", &Perl_Mob_RunTo); package.add("RunTo", &Perl_Mob_RunTo);
package.add("Say", &Perl_Mob_Say); package.add("Say", &Perl_Mob_Say);
@ -3397,6 +3454,10 @@ void perl_register_mob()
package.add("SetTarget", &Perl_Mob_SetTarget); package.add("SetTarget", &Perl_Mob_SetTarget);
package.add("SetTargetable", &Perl_Mob_SetTargetable); package.add("SetTargetable", &Perl_Mob_SetTargetable);
package.add("SetTexture", &Perl_Mob_SetTexture); 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))&Perl_Mob_ShieldAbility);
package.add("ShieldAbility", (void(*)(Mob*, uint32, int32))&Perl_Mob_ShieldAbility); package.add("ShieldAbility", (void(*)(Mob*, uint32, int32))&Perl_Mob_ShieldAbility);
package.add("ShieldAbility", (void(*)(Mob*, uint32, int32, int32))&Perl_Mob_ShieldAbility); package.add("ShieldAbility", (void(*)(Mob*, uint32, int32, int32))&Perl_Mob_ShieldAbility);

View File

@ -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(); QuestManagerCurrentQuestVars();
if(questitem) { if(questitem) {
@ -469,9 +469,11 @@ void QuestManager::settimer(const char *timer_name, int seconds) {
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
end = QTimerList.end(); end = QTimerList.end();
const auto m = mob ? mob : owner;
while (cur != end) { 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_.Enable();
cur->Timer_.Start(seconds * 1000, false); cur->Timer_.Start(seconds * 1000, false);
return; return;
@ -482,7 +484,7 @@ void QuestManager::settimer(const char *timer_name, int seconds) {
QTimerList.push_back(QuestTimer(seconds * 1000, owner, timer_name)); 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(); QuestManagerCurrentQuestVars();
if(questitem) { if(questitem) {
@ -506,13 +508,13 @@ void QuestManager::settimerMS(const char *timer_name, int milliseconds) {
QTimerList.push_back(QuestTimer(milliseconds, owner, timer_name)); 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) { if (inst) {
inst->SetTimer(timer_name, milliseconds); 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<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
end = QTimerList.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)); QTimerList.push_back(QuestTimer(milliseconds, mob, timer_name));
} }
void QuestManager::stoptimer(const char *timer_name) { void QuestManager::stoptimer(const char* timer_name) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (questitem) { 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) { if (inst) {
inst->StopTimer(timer_name); inst->StopTimer(timer_name);
} }
} }
void QuestManager::stoptimer(const char *timer_name, Mob *mob) { void QuestManager::stoptimer(const char* timer_name, Mob *mob) {
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
end = QTimerList.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(); QuestManagerCurrentQuestVars();
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
@ -613,11 +615,11 @@ void QuestManager::pausetimer(const char *timer_name) {
PausedTimer pt; PausedTimer pt;
uint32 milliseconds = 0; uint32 milliseconds = 0;
const auto m = mob ? mob : owner;
pend = PTimerList.end(); pend = PTimerList.end();
while (pcur != pend) while (pcur != pend) {
{ if (pcur->owner && pcur->owner == m && pcur->name == timer_name) {
if (pcur->owner && pcur->owner == owner && pcur->name == timer_name)
{
LogQuests("Timer [{}] is already paused for [{}]. Returning", timer_name, owner->GetName()); LogQuests("Timer [{}] is already paused for [{}]. Returning", timer_name, owner->GetName());
return; return;
} }
@ -625,10 +627,8 @@ void QuestManager::pausetimer(const char *timer_name) {
} }
end = QTimerList.end(); end = QTimerList.end();
while (cur != end) while (cur != end) {
{ if (cur->mob && cur->mob == m && cur->name == timer_name) {
if (cur->mob && cur->mob == owner && cur->name == timer_name)
{
milliseconds = cur->Timer_.GetRemainingTime(); milliseconds = cur->Timer_.GetRemainingTime();
QTimerList.erase(cur); QTimerList.erase(cur);
break; break;
@ -644,7 +644,7 @@ void QuestManager::pausetimer(const char *timer_name) {
PTimerList.push_back(pt); PTimerList.push_back(pt);
} }
void QuestManager::resumetimer(const char *timer_name) { void QuestManager::resumetimer(const char* timer_name, Mob* mob) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
@ -652,11 +652,11 @@ void QuestManager::resumetimer(const char *timer_name) {
PausedTimer pt; PausedTimer pt;
uint32 milliseconds = 0; uint32 milliseconds = 0;
const auto m = mob ? mob : owner;
pend = PTimerList.end(); pend = PTimerList.end();
while (pcur != pend) while (pcur != pend) {
{ if (pcur->owner && pcur->owner == m && pcur->name == timer_name) {
if (pcur->owner && pcur->owner == owner && pcur->name == timer_name)
{
milliseconds = pcur->time; milliseconds = pcur->time;
PTimerList.erase(pcur); PTimerList.erase(pcur);
break; break;
@ -664,40 +664,40 @@ void QuestManager::resumetimer(const char *timer_name) {
++pcur; ++pcur;
} }
if (milliseconds == 0) if (milliseconds == 0) {
{
LogQuests("Paused timer [{}] not found or has expired. Returning", timer_name); LogQuests("Paused timer [{}] not found or has expired. Returning", timer_name);
return; return;
} }
end = QTimerList.end(); end = QTimerList.end();
while (cur != end) while (cur != end) {
{ if (cur->mob && cur->mob == m && cur->name == timer_name) {
if (cur->mob && cur->mob == owner && cur->name == timer_name)
{
cur->Timer_.Enable(); cur->Timer_.Enable();
cur->Timer_.Start(milliseconds, false); 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; return;
} }
++cur; ++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); 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(); QuestManagerCurrentQuestVars();
std::list<PausedTimer>::iterator pcur = PTimerList.begin(), pend; std::list<PausedTimer>::iterator pcur = PTimerList.begin(), pend;
const auto m = mob ? mob : owner;
pend = PTimerList.end(); pend = PTimerList.end();
while (pcur != pend) while (pcur != pend) {
{ if (pcur->owner && pcur->owner == m && pcur->name == timer_name) {
if (pcur->owner && pcur->owner == owner && pcur->name == timer_name)
{
return true; return true;
} }
++pcur; ++pcur;
@ -706,18 +706,17 @@ bool QuestManager::ispausedtimer(const char *timer_name) {
return false; return false;
} }
bool QuestManager::hastimer(const char *timer_name) { bool QuestManager::hastimer(const char* timer_name, Mob* mob) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
const auto m = mob ? mob : owner;
end = QTimerList.end(); end = QTimerList.end();
while (cur != end) while (cur != end) {
{ if (cur->mob && cur->mob == m && cur->name == timer_name) {
if (cur->mob && cur->mob == owner && cur->name == timer_name) if (cur->Timer_.Enabled()) {
{
if (cur->Timer_.Enabled())
{
return true; return true;
} }
} }
@ -726,18 +725,17 @@ bool QuestManager::hastimer(const char *timer_name) {
return false; return false;
} }
uint32 QuestManager::getremainingtimeMS(const char *timer_name) { uint32 QuestManager::getremainingtimeMS(const char* timer_name, Mob* mob) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
const auto m = mob ? mob : owner;
end = QTimerList.end(); end = QTimerList.end();
while (cur != end) while (cur != end) {
{ if (cur->mob && cur->mob == m && cur->name == timer_name) {
if (cur->mob && cur->mob == owner && cur->name == timer_name) if (cur->Timer_.Enabled()) {
{
if (cur->Timer_.Enabled())
{
return cur->Timer_.GetRemainingTime(); return cur->Timer_.GetRemainingTime();
} }
} }
@ -746,18 +744,17 @@ uint32 QuestManager::getremainingtimeMS(const char *timer_name) {
return 0; return 0;
} }
uint32 QuestManager::gettimerdurationMS(const char *timer_name) { uint32 QuestManager::gettimerdurationMS(const char* timer_name, Mob* mob) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
std::list<QuestTimer>::iterator cur = QTimerList.begin(), end; std::list<QuestTimer>::iterator cur = QTimerList.begin(), end;
const auto m = mob ? mob : owner;
end = QTimerList.end(); end = QTimerList.end();
while (cur != end) while (cur != end) {
{ if (cur->mob && cur->mob == m && cur->name == timer_name) {
if (cur->mob && cur->mob == owner && cur->name == timer_name) if (cur->Timer_.Enabled()) {
{
if (cur->Timer_.Enabled())
{
return cur->Timer_.GetDuration(); return cur->Timer_.GetDuration();
} }
} }

View File

@ -81,22 +81,22 @@ public:
void Zone(const char *zone_name); void Zone(const char *zone_name);
void ZoneGroup(const char *zone_name); void ZoneGroup(const char *zone_name);
void ZoneRaid(const char *zone_name); void ZoneRaid(const char *zone_name);
void settimer(const char *timer_name, int seconds); 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);
void settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst); void settimerMS(const char* timer_name, int milliseconds, EQ::ItemInstance *inst);
void settimerMS(const char *timer_name, int milliseconds, Mob *mob); void settimerMS(const char* timer_name, int milliseconds, Mob *mob);
void stoptimer(const char *timer_name); void stoptimer(const char* timer_name);
void stoptimer(const char *timer_name, EQ::ItemInstance *inst); void stoptimer(const char* timer_name, EQ::ItemInstance *inst);
void stoptimer(const char *timer_name, Mob *mob); void stoptimer(const char* timer_name, Mob *mob);
void stopalltimers(); void stopalltimers();
void stopalltimers(EQ::ItemInstance *inst); void stopalltimers(EQ::ItemInstance *inst);
void stopalltimers(Mob *mob); void stopalltimers(Mob *mob);
void pausetimer(const char *timer_name); void pausetimer(const char* timer_name, Mob* mob = nullptr);
void resumetimer(const char *timer_name); void resumetimer(const char* timer_name, Mob* mob = nullptr);
bool ispausedtimer(const char *timer_name); bool ispausedtimer(const char* timer_name, Mob* mob = nullptr);
bool hastimer(const char *timer_name); bool hastimer(const char* timer_name, Mob* mob = nullptr);
uint32 getremainingtimeMS(const char *timer_name); uint32 getremainingtimeMS(const char* timer_name, Mob* mob = nullptr);
uint32 gettimerdurationMS(const char *timer_name); uint32 gettimerdurationMS(const char* timer_name, Mob* mob = nullptr);
void emote(const char *str); void emote(const char *str);
void shout(const char *str); void shout(const char *str);
void shout2(const char *str); void shout2(const char *str);