[Quest API] Allow CreateInstance to be used without a Client initiator. (#2399)

* [Quest API] Allow CreateInstance to be used without a Client initiator.

Currently, you have to create the instance with a client initiator, whether that's in an NPC's EVENT_SAY /EVENT_ITEM or in a player script.

This will allow you to create instances without needing a client, but if there is one and there are errors, the messages will be sent to the client.

* Update questmgr.h

* Instance version.
This commit is contained in:
Kinglykrab 2022-08-28 13:10:19 -04:00 committed by GitHub
parent 57b3255fad
commit 3e703769a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 21 deletions

View File

@ -2780,30 +2780,33 @@ std::string QuestManager::getcleannpcnamebyid(uint32 npc_id) {
return res;
}
uint16 QuestManager::CreateInstance(const char *zone, int16 version, uint32 duration)
uint16 QuestManager::CreateInstance(const char *zone_short_name, int16 instance_version, uint32 duration)
{
QuestManagerCurrentQuestVars();
if(initiator)
{
uint32 zone_id = ZoneID(zone);
if(zone_id == 0)
return 0;
uint16 id = 0;
if(!database.GetUnusedInstanceID(id))
{
initiator->Message(Chat::Red, "Server was unable to find a free instance id.");
return 0;
}
if(!database.CreateInstance(id, zone_id, version, duration))
{
initiator->Message(Chat::Red, "Server was unable to create a new instance.");
return 0;
}
return id;
uint32 zone_id = ZoneID(zone_short_name);
if (!zone_id) {
return 0;
}
return 0;
uint16 instance_id = 0;
if (!database.GetUnusedInstanceID(instance_id)) {
if (initiator) {
initiator->Message(Chat::Red, "Server was unable to find a free instance id.");
}
return 0;
}
if (!database.CreateInstance(instance_id, zone_id, instance_version, duration)) {
if (initiator) {
initiator->Message(Chat::Red, "Server was unable to create a new instance.");
}
return 0;
}
return instance_id;
}
void QuestManager::DestroyInstance(uint16 instance_id)

View File

@ -254,7 +254,7 @@ public:
void UpdateSpawnTimer(uint32 id, uint32 newTime);
void MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity = 0);
uint32 MerchantCountItem(uint32 NPCid, uint32 itemid);
uint16 CreateInstance(const char *zone, int16 version, uint32 duration);
uint16 CreateInstance(const char *zone_short_name, int16 instance_version, uint32 duration);
void UpdateInstanceTimer(uint16 instance_id, uint32 new_duration);
void UpdateZoneHeader(std::string type, std::string value);
uint32 GetInstanceTimer();