Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Merged
merged 3 commits into from
Mar 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 18 additions & 0 deletions zone/embparser_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
60 changes: 60 additions & 0 deletions zone/lua_mob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_<Lua_Mob, Lua_Entity>("Mob")
.def(luabind::constructor<>())
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
10 changes: 10 additions & 0 deletions zone/lua_mob.h
Original file line number Diff line number Diff line change
Expand Up @@ -528,6 +528,16 @@ class Lua_Mob : public Lua_Entity
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
Expand Down
61 changes: 61 additions & 0 deletions zone/perl_mob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down