1
0

LUA Function Added HasPendingQuest(Spawn: Player, Int32: QuestID)

This commit is contained in:
Emagi 2025-03-21 08:48:50 -04:00
parent 2a89989e0c
commit fd147a0fd0
5 changed files with 33 additions and 0 deletions

View File

@ -3747,6 +3747,25 @@ int EQ2Emu_lua_HasQuest(lua_State* state) {
return 0;
}
int EQ2Emu_lua_HasPendingQuest(lua_State* state) {
if (!lua_interface)
return 0;
Spawn* player = lua_interface->GetSpawn(state);
int32 quest_id = lua_interface->GetInt32Value(state, 2);
lua_interface->ResetFunctionStack(state);
if(!player || !player->IsPlayer()) {
lua_interface->LogError("%s: LUA HasPendingQuest command error: player is not valid", lua_interface->GetScriptName(state));
return 0;
}
if(!player->GetClient()) {
lua_interface->LogError("%s: LUA HasPendingQuest command error: client is not valid", lua_interface->GetScriptName(state));
return 0;
}
lua_interface->SetBooleanValue(state, (((Player*)player)->GetClient()->HasPendingQuest(quest_id)));
return 1;
}
int EQ2Emu_lua_QuestReturnNPC(lua_State* state) {
if (!lua_interface)
return 0;

View File

@ -302,6 +302,7 @@ int EQ2Emu_lua_UpdateQuestZone(lua_State* state);
int EQ2Emu_lua_SetCompletedDescription(lua_State* state);
int EQ2Emu_lua_ProvidesQuest(lua_State* state);
int EQ2Emu_lua_HasQuest(lua_State* state);
int EQ2Emu_lua_HasPendingQuest(lua_State* state);
int EQ2Emu_lua_HasCompletedQuest(lua_State* state);
int EQ2Emu_lua_QuestIsComplete(lua_State* state);
int EQ2Emu_lua_QuestReturnNPC(lua_State* state);

View File

@ -1262,6 +1262,7 @@ void LuaInterface::RegisterFunctions(lua_State* state) {
lua_register(state, "OfferQuest", EQ2Emu_lua_OfferQuest);
lua_register(state, "ProvidesQuest", EQ2Emu_lua_ProvidesQuest);
lua_register(state, "HasQuest", EQ2Emu_lua_HasQuest);
lua_register(state, "HasPendingQuest", EQ2Emu_lua_HasPendingQuest);
lua_register(state, "HasCompletedQuest", EQ2Emu_lua_HasCompletedQuest);
lua_register(state, "QuestIsComplete", EQ2Emu_lua_QuestIsComplete);
lua_register(state, "QuestReturnNPC", EQ2Emu_lua_QuestReturnNPC);

View File

@ -6990,6 +6990,17 @@ void Client::AcceptQuest(int32 quest_id) {
MPendingQuestAccept.unlock_shared();
}
bool Client::HasPendingQuest(int32 quest_id) {
std::shared_lock lock(MPendingQuestAccept);
if (player->pending_quests.count(quest_id) > 0) {
Quest* quest = player->pending_quests[quest_id];
if (quest) {
return true;
}
}
return false;
}
void Client::RemovePendingQuest(int32 quest_id) {
bool send_updates = false;
MPendingQuestAccept.lock_shared();

View File

@ -375,6 +375,7 @@ public:
void CheckPlayerQuestsLocationUpdate();
void AddPendingQuest(Quest* quest, bool forced = false);
void AcceptQuest(int32 quest_id);
bool HasPendingQuest(int32 quest_id);
void RemovePendingQuest(int32 quest_id);
void SetPlayerQuest(Quest* quest, map<int32, int32>* progress);
void AddPlayerQuest(Quest* quest, bool call_accepted = true, bool send_packets = true);