Merge branch 'master' of https://github.com/EQEmu/Server into integration/multi-tenancy-expansions-repository

This commit is contained in:
Akkadius
2020-05-23 22:33:34 -05:00
225 changed files with 7700 additions and 6657 deletions
+139 -43
View File
@@ -55,7 +55,7 @@ QuestManager quest_manager;
#define QuestManagerCurrentQuestVars() \
Mob *owner = nullptr; \
Client *initiator = nullptr; \
EQEmu::ItemInstance* questitem = nullptr; \
EQ::ItemInstance* questitem = nullptr; \
bool depop_npc = false; \
std::string encounter; \
do { \
@@ -117,7 +117,7 @@ void QuestManager::Process() {
}
}
void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQEmu::ItemInstance* _questitem, std::string encounter) {
void QuestManager::StartQuest(Mob *_owner, Client *_initiator, EQ::ItemInstance* _questitem, std::string encounter) {
running_quest run;
run.owner = _owner;
run.initiator = _initiator;
@@ -371,14 +371,14 @@ void QuestManager::castspell(int spell_id, int target_id) {
if (owner) {
Mob *tgt = entity_list.GetMob(target_id);
if(tgt != nullptr)
owner->SpellFinished(spell_id, tgt, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff);
owner->SpellFinished(spell_id, tgt, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff);
}
}
void QuestManager::selfcast(int spell_id) {
QuestManagerCurrentQuestVars();
if (initiator)
initiator->SpellFinished(spell_id, initiator, EQEmu::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff);
initiator->SpellFinished(spell_id, initiator, EQ::spells::CastingSlot::Item, 0, -1, spells[spell_id].ResistDiff);
}
void QuestManager::addloot(int item_id, int charges, bool equipitem, int aug1, int aug2, int aug3, int aug4, int aug5, int aug6) {
@@ -456,7 +456,7 @@ 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, EQEmu::ItemInstance *inst) {
void QuestManager::settimerMS(const char *timer_name, int milliseconds, EQ::ItemInstance *inst) {
if (inst) {
inst->SetTimer(timer_name, milliseconds);
}
@@ -499,7 +499,7 @@ void QuestManager::stoptimer(const char *timer_name) {
}
}
void QuestManager::stoptimer(const char *timer_name, EQEmu::ItemInstance *inst) {
void QuestManager::stoptimer(const char *timer_name, EQ::ItemInstance *inst) {
if (inst) {
inst->StopTimer(timer_name);
}
@@ -537,7 +537,7 @@ void QuestManager::stopalltimers() {
}
}
void QuestManager::stopalltimers(EQEmu::ItemInstance *inst) {
void QuestManager::stopalltimers(EQ::ItemInstance *inst) {
if (inst) {
inst->ClearTimers();
}
@@ -848,12 +848,12 @@ void QuestManager::traindisc(int discipline_tome_item_id) {
}
bool QuestManager::isdisctome(int item_id) {
const EQEmu::ItemData *item = database.GetItem(item_id);
const EQ::ItemData *item = database.GetItem(item_id);
if(item == nullptr) {
return(false);
}
if (!item->IsClassCommon() || item->ItemType != EQEmu::item::ItemTypeSpell) {
if (!item->IsClassCommon() || item->ItemType != EQ::item::ItemTypeSpell) {
return(false);
}
@@ -921,8 +921,8 @@ std::string QuestManager::getspellname(uint32 spell_id) {
}
std::string QuestManager::getskillname(int skill_id) {
if (skill_id >= 0 && skill_id < EQEmu::skills::SkillCount) {
std::map<EQEmu::skills::SkillType, std::string> Skills = EQEmu::skills::GetSkillTypeMap();
if (skill_id >= 0 && skill_id < EQ::skills::SkillCount) {
std::map<EQ::skills::SkillType, std::string> Skills = EQ::skills::GetSkillTypeMap();
for (auto skills_iter : Skills) {
if (skill_id == skills_iter.first) {
return skills_iter.second;
@@ -1010,7 +1010,7 @@ uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) {
bool SpellGlobalCheckResult = false;
bool SpellBucketCheckResult = false;
for ( ; spell_id < SPDAT_RECORDS && book_slot < EQEmu::spells::SPELLBOOK_SIZE; ++spell_id) {
for ( ; spell_id < SPDAT_RECORDS && book_slot < EQ::spells::SPELLBOOK_SIZE; ++spell_id) {
if (book_slot == -1) {
initiator->Message(
13,
@@ -1025,8 +1025,8 @@ uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) {
initiator->Message(Chat::Red, "FATAL ERROR: Spell id out-of-range (id: %i, min: 0, max: %i)", spell_id, SPDAT_RECORDS);
return count;
}
if (book_slot < 0 || book_slot >= EQEmu::spells::SPELLBOOK_SIZE) {
initiator->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQEmu::spells::SPELLBOOK_SIZE);
if (book_slot < 0 || book_slot >= EQ::spells::SPELLBOOK_SIZE) {
initiator->Message(Chat::Red, "FATAL ERROR: Book slot out-of-range (slot: %i, min: 0, max: %i)", book_slot, EQ::spells::SPELLBOOK_SIZE);
return count;
}
@@ -1287,10 +1287,10 @@ void QuestManager::doanim(int anim_id) {
void QuestManager::addskill(int skill_id, int value) {
QuestManagerCurrentQuestVars();
if (skill_id < 0 || skill_id > EQEmu::skills::HIGHEST_SKILL)
if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL)
return;
if (initiator && initiator->IsClient())
initiator->AddSkill((EQEmu::skills::SkillType) skill_id, value);
initiator->AddSkill((EQ::skills::SkillType) skill_id, value);
}
void QuestManager::setlanguage(int skill_id, int value) {
@@ -1301,10 +1301,10 @@ void QuestManager::setlanguage(int skill_id, int value) {
void QuestManager::setskill(int skill_id, int value) {
QuestManagerCurrentQuestVars();
if (skill_id < 0 || skill_id > EQEmu::skills::HIGHEST_SKILL)
if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL)
return;
if (initiator && initiator->IsClient())
initiator->SetSkill((EQEmu::skills::SkillType) skill_id, value);
initiator->SetSkill((EQ::skills::SkillType) skill_id, value);
}
void QuestManager::setallskill(int value) {
@@ -1312,8 +1312,8 @@ void QuestManager::setallskill(int value) {
if (!initiator)
return;
if (initiator && initiator->IsClient()) {
EQEmu::skills::SkillType sk;
for (sk = EQEmu::skills::Skill1HBlunt; sk <= EQEmu::skills::HIGHEST_SKILL; sk = (EQEmu::skills::SkillType)(sk + 1)) {
EQ::skills::SkillType sk;
for (sk = EQ::skills::Skill1HBlunt; sk <= EQ::skills::HIGHEST_SKILL; sk = (EQ::skills::SkillType)(sk + 1)) {
initiator->SetSkill(sk, value);
}
}
@@ -1439,12 +1439,12 @@ void QuestManager::settime(uint8 new_hour, uint8 new_min, bool update_world /*=
void QuestManager::itemlink(int item_id) {
QuestManagerCurrentQuestVars();
if (initiator) {
const EQEmu::ItemData* item = database.GetItem(item_id);
const EQ::ItemData* item = database.GetItem(item_id);
if (item == nullptr)
return;
EQEmu::SayLinkEngine linker;
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
EQ::SayLinkEngine linker;
linker.SetLinkType(EQ::saylink::SayLinkItemData);
linker.SetItemData(item);
initiator->Message(Chat::White, "%s tells you, %s", owner->GetCleanName(), linker.GenerateLink().c_str());
@@ -1909,7 +1909,7 @@ void QuestManager::clear_zone_flag(int zone_id) {
void QuestManager::sethp(int hpperc) {
QuestManagerCurrentQuestVars();
int newhp = (owner->GetMaxHP() * (100 - hpperc)) / 100;
owner->Damage(owner, newhp, SPELL_UNKNOWN, EQEmu::skills::SkillHandtoHand, false, 0, false);
owner->Damage(owner, newhp, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false, 0, false);
}
bool QuestManager::summonburiedplayercorpse(uint32 char_id, const glm::vec4& position) {
@@ -2568,7 +2568,7 @@ int QuestManager::collectitems_processSlot(int16 slot_id, uint32 item_id,
bool remove)
{
QuestManagerCurrentQuestVars();
EQEmu::ItemInstance *item = nullptr;
EQ::ItemInstance *item = nullptr;
int quantity = 0;
item = initiator->GetInv().GetItem(slot_id);
@@ -2603,12 +2603,12 @@ int QuestManager::collectitems(uint32 item_id, bool remove)
int quantity = 0;
int slot_id;
for (slot_id = EQEmu::invslot::GENERAL_BEGIN; slot_id <= EQEmu::invslot::GENERAL_END; ++slot_id)
for (slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::invslot::GENERAL_END; ++slot_id)
{
quantity += collectitems_processSlot(slot_id, item_id, remove);
}
for (slot_id = EQEmu::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQEmu::invbag::GENERAL_BAGS_END; ++slot_id)
for (slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::invbag::GENERAL_BAGS_END; ++slot_id)
{
quantity += collectitems_processSlot(slot_id, item_id, remove);
}
@@ -2619,15 +2619,15 @@ int QuestManager::collectitems(uint32 item_id, bool remove)
int QuestManager::countitem(uint32 item_id) {
QuestManagerCurrentQuestVars();
int quantity = 0;
EQEmu::ItemInstance *item = nullptr;
EQ::ItemInstance *item = nullptr;
static const int16 slots[][2] = {
{ EQEmu::invslot::POSSESSIONS_BEGIN, EQEmu::invslot::POSSESSIONS_END },
{ EQEmu::invbag::GENERAL_BAGS_BEGIN, EQEmu::invbag::GENERAL_BAGS_END },
{ EQEmu::invbag::CURSOR_BAG_BEGIN, EQEmu::invbag::CURSOR_BAG_END},
{ EQEmu::invslot::BANK_BEGIN, EQEmu::invslot::BANK_END },
{ EQEmu::invbag::BANK_BAGS_BEGIN, EQEmu::invbag::BANK_BAGS_END },
{ EQEmu::invslot::SHARED_BANK_BEGIN, EQEmu::invslot::SHARED_BANK_END },
{ EQEmu::invbag::SHARED_BANK_BAGS_BEGIN, EQEmu::invbag::SHARED_BANK_BAGS_END },
{ EQ::invslot::POSSESSIONS_BEGIN, EQ::invslot::POSSESSIONS_END },
{ EQ::invbag::GENERAL_BAGS_BEGIN, EQ::invbag::GENERAL_BAGS_END },
{ EQ::invbag::CURSOR_BAG_BEGIN, EQ::invbag::CURSOR_BAG_END},
{ EQ::invslot::BANK_BEGIN, EQ::invslot::BANK_END },
{ EQ::invbag::BANK_BAGS_BEGIN, EQ::invbag::BANK_BAGS_END },
{ EQ::invslot::SHARED_BANK_BEGIN, EQ::invslot::SHARED_BANK_END },
{ EQ::invbag::SHARED_BANK_BAGS_BEGIN, EQ::invbag::SHARED_BANK_BAGS_END },
};
const size_t size = sizeof(slots) / sizeof(slots[0]);
for (int slot_index = 0; slot_index < size; ++slot_index) {
@@ -2683,7 +2683,7 @@ void QuestManager::MerchantSetItem(uint32 NPCid, uint32 itemid, uint32 quantity)
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
return; // don't do anything if NPCid isn't a merchant
const EQEmu::ItemData* item = nullptr;
const EQ::ItemData* item = nullptr;
item = database.GetItem(itemid);
if (!item) return; // if the item id doesn't correspond to a real item, do nothing
@@ -2696,7 +2696,7 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) {
if (merchant == 0 || !merchant->IsNPC() || (merchant->GetClass() != MERCHANT))
return 0; // if it isn't a merchant, it doesn't have any items
const EQEmu::ItemData* item = nullptr;
const EQ::ItemData* item = nullptr;
item = database.GetItem(itemid);
if (!item)
return 0; // if it isn't a valid item, the merchant doesn't have any
@@ -2719,12 +2719,12 @@ uint32 QuestManager::MerchantCountItem(uint32 NPCid, uint32 itemid) {
// Item Link for use in Variables - "my $example_link = quest::varlink(item_id);"
const char* QuestManager::varlink(char* perltext, int item_id) {
QuestManagerCurrentQuestVars();
const EQEmu::ItemData* item = database.GetItem(item_id);
const EQ::ItemData* item = database.GetItem(item_id);
if (!item)
return "INVALID ITEM ID IN VARLINK";
EQEmu::SayLinkEngine linker;
linker.SetLinkType(EQEmu::saylink::SayLinkItemData);
EQ::SayLinkEngine linker;
linker.SetLinkType(EQ::saylink::SayLinkItemData);
linker.SetItemData(item);
strcpy(perltext, linker.GenerateLink().c_str());
@@ -2733,7 +2733,7 @@ const char* QuestManager::varlink(char* perltext, int item_id) {
}
std::string QuestManager::getitemname(uint32 item_id) {
const EQEmu::ItemData* item_data = database.GetItem(item_id);
const EQ::ItemData* item_data = database.GetItem(item_id);
if (!item_data) {
return "INVALID ITEM ID IN GETITEMNAME";
}
@@ -2949,7 +2949,7 @@ std::string QuestManager::saylink(char *saylink_text, bool silent, const char *l
{
QuestManagerCurrentQuestVars();
return EQEmu::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name);
return EQ::SayLinkEngine::GenerateQuestSaylink(saylink_text, silent, link_name);
}
const char* QuestManager::getcharnamebyid(uint32 char_id) {
@@ -3212,6 +3212,33 @@ void QuestManager::CrossZoneSignalPlayerByCharID(int charid, uint32 data){
safe_delete(pack);
}
void QuestManager::CrossZoneSignalPlayerByGroupID(int group_id, uint32 data){
auto pack = new ServerPacket(ServerOP_CZSignalGroup, sizeof(CZGroupSignal_Struct));
CZGroupSignal_Struct* CZGS = (CZGroupSignal_Struct*) pack->pBuffer;
CZGS->group_id = group_id;
CZGS->data = data;
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSignalPlayerByRaidID(int raid_id, uint32 data){
auto pack = new ServerPacket(ServerOP_CZSignalRaid, sizeof(CZRaidSignal_Struct));
CZRaidSignal_Struct* CZRS = (CZRaidSignal_Struct*) pack->pBuffer;
CZRS->raid_id = raid_id;
CZRS->data = data;
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSignalPlayerByGuildID(int guild_id, uint32 data){
auto pack = new ServerPacket(ServerOP_CZSignalGuild, sizeof(CZGuildSignal_Struct));
CZGuildSignal_Struct* CZGS = (CZGuildSignal_Struct*) pack->pBuffer;
CZGS->guild_id = guild_id;
CZGS->data = data;
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSignalPlayerByName(const char *CharName, uint32 data){
uint32 message_len = strlen(CharName) + 1;
auto pack = new ServerPacket(ServerOP_CZSignalClientByName, sizeof(CZClientSignalByName_Struct) + message_len);
@@ -3235,6 +3262,39 @@ void QuestManager::CrossZoneMessagePlayerByName(uint32 Type, const char *CharNam
safe_delete(pack);
}
void QuestManager::CrossZoneMessagePlayerByGroupID(uint32 Type, int GroupID, const char *Message){
uint32 message_len = strlen(Message) + 1;
auto pack = new ServerPacket(ServerOP_CZMessageGroup, sizeof(CZMessageGroup_Struct) + message_len);
CZMessageGroup_Struct* CZGM = (CZMessageGroup_Struct*) pack->pBuffer;
CZGM->Type = Type;
CZGM->GroupID = GroupID;
strn0cpy(CZGM->Message, Message, 512);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneMessagePlayerByRaidID(uint32 Type, int RaidID, const char *Message){
uint32 message_len = strlen(Message) + 1;
auto pack = new ServerPacket(ServerOP_CZMessageRaid, sizeof(CZMessageRaid_Struct) + message_len);
CZMessageRaid_Struct* CZRM = (CZMessageRaid_Struct*) pack->pBuffer;
CZRM->Type = Type;
CZRM->RaidID = RaidID;
strn0cpy(CZRM->Message, Message, 512);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneMessagePlayerByGuildID(uint32 Type, int GuildID, const char *Message){
uint32 message_len = strlen(Message) + 1;
auto pack = new ServerPacket(ServerOP_CZMessageGuild, sizeof(CZMessageGuild_Struct) + message_len);
CZMessageGuild_Struct* CZGM = (CZMessageGuild_Struct*) pack->pBuffer;
CZGM->Type = Type;
CZGM->GuildID = GuildID;
strn0cpy(CZGM->Message, Message, 512);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName, const char *id, const char *m_var){
uint32 message_len = strlen(id) + 1;
uint32 message_len2 = strlen(m_var) + 1;
@@ -3249,6 +3309,42 @@ void QuestManager::CrossZoneSetEntityVariableByClientName(const char *CharName,
safe_delete(pack);
}
void QuestManager::CrossZoneSetEntityVariableByGroupID(int group_id, const char *id, const char *m_var){
uint32 message_len = strlen(id) + 1;
uint32 message_len2 = strlen(m_var) + 1;
auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGroupID, sizeof(CZSetEntVarByGroupID_Struct) + message_len + message_len2);
CZSetEntVarByGroupID_Struct* CZ = (CZSetEntVarByGroupID_Struct*)pack->pBuffer;
CZ->group_id = group_id;
strn0cpy(CZ->id, id, 256);
strn0cpy(CZ->m_var, m_var, 256);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSetEntityVariableByRaidID(int raid_id, const char *id, const char *m_var){
uint32 message_len = strlen(id) + 1;
uint32 message_len2 = strlen(m_var) + 1;
auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByRaidID, sizeof(CZSetEntVarByRaidID_Struct) + message_len + message_len2);
CZSetEntVarByRaidID_Struct* CZ = (CZSetEntVarByRaidID_Struct*)pack->pBuffer;
CZ->raid_id = raid_id;
strn0cpy(CZ->id, id, 256);
strn0cpy(CZ->m_var, m_var, 256);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSetEntityVariableByGuildID(int guild_id, const char *id, const char *m_var){
uint32 message_len = strlen(id) + 1;
uint32 message_len2 = strlen(m_var) + 1;
auto pack = new ServerPacket(ServerOP_CZSetEntityVariableByGuildID, sizeof(CZSetEntVarByGuildID_Struct) + message_len + message_len2);
CZSetEntVarByGuildID_Struct* CZ = (CZSetEntVarByGuildID_Struct*)pack->pBuffer;
CZ->guild_id = guild_id;
strn0cpy(CZ->id, id, 256);
strn0cpy(CZ->m_var, m_var, 256);
worldserver.SendPacket(pack);
safe_delete(pack);
}
void QuestManager::CrossZoneSetEntityVariableByNPCTypeID(uint32 npctype_id, const char *id, const char *m_var){
uint32 message_len = strlen(id) + 1;
uint32 message_len2 = strlen(m_var) + 1;
@@ -3332,7 +3428,7 @@ Mob *QuestManager::GetOwner() const {
return nullptr;
}
EQEmu::ItemInstance *QuestManager::GetQuestItem() const {
EQ::ItemInstance *QuestManager::GetQuestItem() const {
if(!quests_running_.empty()) {
running_quest e = quests_running_.top();
return e.questitem;