[Cleanup] Add initiator/owner checks to various methods in questmgr.cpp (#3306)

* [Cleanup] Add initiator/owner checks to various methods in questmgr.cpp

# Notes
- Add `initiator` check to `quest::permaclass()`.
- Add `initiator` check to `quest::permarace()`.
- Add `initiator` check to `quest::permagender()`.
- Add `initiator` check to `quest::scribespells()`.
- Add `initiator` check to `quest::traindiscs()`.
- Add `initiator` check to `quest::unscribespells()`.
- Add `initiator` check to `quest::untraindiscs()`.
- Cleanup `initiator` check in `quest::pvp()`.
- Cleanup `initiator` check in `quest::movepc()`.
- Cleanup `initiator` check in `quest::gmmove()`.
- Cleanup `initiator` check in `quest::movegrp()`.
- Add `owner` check to `quest::doanim()`.
- Cleanup `initiator` check in `quest::addskill()`.
- Cleanup `initiator` check in `quest::setlanguage()`.
- Cleanup `initiator` check in `quest::setskill()`.

* Update questmgr.cpp

* Update questmgr.cpp

* Update questmgr.cpp

* Update questmgr.cpp
This commit is contained in:
Alex King 2023-04-23 15:08:32 -04:00 committed by GitHub
parent e3761cf2a3
commit 576f99f292
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,6 +17,7 @@
*/ */
#include "../common/classes.h" #include "../common/classes.h"
#include "../common/data_verification.h"
#include "../common/global_define.h" #include "../common/global_define.h"
#include "../common/rulesys.h" #include "../common/rulesys.h"
#include "../common/skills.h" #include "../common/skills.h"
@ -1156,7 +1157,11 @@ void QuestManager::surname(std::string last_name) {
void QuestManager::permaclass(int class_id) { void QuestManager::permaclass(int class_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
//Makes the client the class specified
if (!initiator) {
return;
}
initiator->SetBaseClass(class_id); initiator->SetBaseClass(class_id);
initiator->Save(2); initiator->Save(2);
initiator->Kick("Base class change by QuestManager"); initiator->Kick("Base class change by QuestManager");
@ -1164,7 +1169,11 @@ void QuestManager::permaclass(int class_id) {
void QuestManager::permarace(int race_id) { void QuestManager::permarace(int race_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
//Makes the client the race specified
if (!initiator) {
return;
}
initiator->SetBaseRace(race_id); initiator->SetBaseRace(race_id);
initiator->Save(2); initiator->Save(2);
initiator->Kick("Base race change by QuestManager"); initiator->Kick("Base race change by QuestManager");
@ -1172,7 +1181,11 @@ void QuestManager::permarace(int race_id) {
void QuestManager::permagender(int gender_id) { void QuestManager::permagender(int gender_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
//Makes the client the gender specified
if (!initiator) {
return;
}
initiator->SetBaseGender(gender_id); initiator->SetBaseGender(gender_id);
initiator->Save(2); initiator->Save(2);
initiator->Kick("Base gender change by QuestManager"); initiator->Kick("Base gender change by QuestManager");
@ -1180,21 +1193,41 @@ void QuestManager::permagender(int gender_id) {
uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) { uint16 QuestManager::scribespells(uint8 max_level, uint8 min_level) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return 0;
}
return initiator->ScribeSpells(min_level, max_level); return initiator->ScribeSpells(min_level, max_level);
} }
uint16 QuestManager::traindiscs(uint8 max_level, uint8 min_level) { uint16 QuestManager::traindiscs(uint8 max_level, uint8 min_level) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return 0;
}
return initiator->LearnDisciplines(min_level, max_level); return initiator->LearnDisciplines(min_level, max_level);
} }
void QuestManager::unscribespells() { void QuestManager::unscribespells() {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->UnscribeSpellAll(); initiator->UnscribeSpellAll();
} }
void QuestManager::untraindiscs() { void QuestManager::untraindiscs() {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->UntrainDiscAll(); initiator->UntrainDiscAll();
} }
@ -1202,7 +1235,6 @@ void QuestManager::givecash(uint32 copper, uint32 silver, uint32 gold, uint32 pl
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if ( if (
initiator && initiator &&
initiator->IsClient() &&
( (
copper || copper ||
silver || silver ||
@ -1221,78 +1253,102 @@ void QuestManager::givecash(uint32 copper, uint32 silver, uint32 gold, uint32 pl
void QuestManager::pvp(const char *mode) { void QuestManager::pvp(const char *mode) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!strcasecmp(mode,"on"))
{ if (!initiator) {
if (initiator) return;
initiator->SetPVP(true);
} }
else
if (initiator) initiator->SetPVP(Strings::ToBool(mode));
initiator->SetPVP(false);
} }
void QuestManager::movepc(int zone_id, float x, float y, float z, float heading) { void QuestManager::movepc(int zone_id, float x, float y, float z, float heading) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (initiator)
if (!initiator) {
return;
}
initiator->MovePC(zone_id, x, y, z, heading); initiator->MovePC(zone_id, x, y, z, heading);
} }
void QuestManager::gmmove(float x, float y, float z) { void QuestManager::gmmove(float x, float y, float z) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (initiator)
if (!initiator) {
return;
}
initiator->GMMove(x, y, z); initiator->GMMove(x, y, z);
} }
void QuestManager::movegrp(int zoneid, float x, float y, float z) { void QuestManager::movegrp(int zoneid, float x, float y, float z) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (initiator)
{ if (!initiator) {
Group *g = entity_list.GetGroupByClient(initiator); return;
if (g != nullptr) { }
if (Group *g = entity_list.GetGroupByClient(initiator)) {
g->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f); g->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f);
} } else {
else { if (Raid *r = entity_list.GetRaidByClient(initiator)) {
Raid *r = entity_list.GetRaidByClient(initiator); const auto group_id = r->GetGroup(initiator);
if (r != nullptr) { if (EQ::ValueWithin(group_id, 0, MAX_RAID_GROUPS)) {
uint32 gid = r->GetGroup(initiator); r->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f, group_id);
if (gid >= 0 && gid < 12) { } else {
r->TeleportGroup(owner, zoneid, 0, x, y, z, 0.0f, gid);
}
else {
initiator->MovePC(zoneid, x, y, z, 0.0f); initiator->MovePC(zoneid, x, y, z, 0.0f);
} }
} } else {
else {
initiator->MovePC(zoneid, x, y, z, 0.0f); initiator->MovePC(zoneid, x, y, z, 0.0f);
} }
} }
} }
}
void QuestManager::doanim(int animation_id, int animation_speed, bool ackreq, eqFilterType filter) { void QuestManager::doanim(int animation_id, int animation_speed, bool ackreq, eqFilterType filter) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
owner->DoAnim(animation_id, animation_speed, ackreq, filter); owner->DoAnim(animation_id, animation_speed, ackreq, filter);
} }
void QuestManager::addskill(int skill_id, int value) { void QuestManager::addskill(int skill_id, int value) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL)
if (!initiator) {
return; return;
if (initiator) }
if (!EQ::ValueWithin(skill_id, EQ::skills::Skill1HBlunt, EQ::skills::HIGHEST_SKILL)) {
return;
}
initiator->AddSkill((EQ::skills::SkillType) skill_id, value); initiator->AddSkill((EQ::skills::SkillType) skill_id, value);
} }
void QuestManager::setlanguage(int skill_id, int value) { void QuestManager::setlanguage(int skill_id, int value) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (initiator)
if (!initiator) {
return;
}
initiator->SetLanguageSkill(skill_id, value); initiator->SetLanguageSkill(skill_id, value);
} }
void QuestManager::setskill(int skill_id, int value) { void QuestManager::setskill(int skill_id, int value) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (skill_id < 0 || skill_id > EQ::skills::HIGHEST_SKILL)
if (!initiator) {
return; return;
if (initiator) }
if (!EQ::ValueWithin(skill_id, EQ::skills::Skill1HBlunt, EQ::skills::HIGHEST_SKILL)) {
return;
}
initiator->SetSkill((EQ::skills::SkillType) skill_id, value); initiator->SetSkill((EQ::skills::SkillType) skill_id, value);
} }
@ -1980,21 +2036,41 @@ void QuestManager::toggle_spawn_event(int event_id, bool enable, bool strict, bo
bool QuestManager::has_zone_flag(int zone_id) { bool QuestManager::has_zone_flag(int zone_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
return initiator ? initiator->HasZoneFlag(zone_id) : false;
if (!initiator) {
return false;
}
return initiator->HasZoneFlag(zone_id);
} }
void QuestManager::set_zone_flag(int zone_id) { void QuestManager::set_zone_flag(int zone_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->SetZoneFlag(zone_id); initiator->SetZoneFlag(zone_id);
} }
void QuestManager::clear_zone_flag(int zone_id) { void QuestManager::clear_zone_flag(int zone_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->ClearZoneFlag(zone_id); initiator->ClearZoneFlag(zone_id);
} }
void QuestManager::sethp(int64 hpperc) { void QuestManager::sethp(int64 hpperc) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
int64 newhp = (owner->GetMaxHP() * (100 - hpperc)) / 100; int64 newhp = (owner->GetMaxHP() * (100 - hpperc)) / 100;
owner->Damage(owner, newhp, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false, 0, false); owner->Damage(owner, newhp, SPELL_UNKNOWN, EQ::skills::SkillHandtoHand, false, 0, false);
} }
@ -2111,55 +2187,103 @@ bool QuestManager::isdooropen(uint32 doorid) {
} }
return false; return false;
} }
void QuestManager::npcrace(int race_id) void QuestManager::npcrace(int race_id)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
owner->SendIllusionPacket(race_id); owner->SendIllusionPacket(race_id);
} }
void QuestManager::npcgender(int gender_id) void QuestManager::npcgender(int gender_id)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
owner->SendIllusionPacket(owner->GetRace(), gender_id); owner->SendIllusionPacket(owner->GetRace(), gender_id);
} }
void QuestManager::npcsize(int newsize) void QuestManager::npcsize(int newsize)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
owner->ChangeSize(newsize, true); owner->ChangeSize(newsize, true);
} }
void QuestManager::npctexture(int newtexture) void QuestManager::npctexture(int newtexture)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
owner->SendIllusionPacket(owner->GetRace(), 0xFF, newtexture); owner->SendIllusionPacket(owner->GetRace(), 0xFF, newtexture);
} }
void QuestManager::playerrace(int race_id) void QuestManager::playerrace(int race_id)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->SendIllusionPacket(race_id); initiator->SendIllusionPacket(race_id);
} }
void QuestManager::playergender(int gender_id) void QuestManager::playergender(int gender_id)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->SendIllusionPacket(initiator->GetRace(), gender_id); initiator->SendIllusionPacket(initiator->GetRace(), gender_id);
} }
void QuestManager::playersize(int newsize) void QuestManager::playersize(int newsize)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->ChangeSize(newsize, true); initiator->ChangeSize(newsize, true);
} }
void QuestManager::playertexture(int newtexture) void QuestManager::playertexture(int newtexture)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->SendIllusionPacket(initiator->GetRace(), 0xFF, newtexture); initiator->SendIllusionPacket(initiator->GetRace(), 0xFF, newtexture);
} }
void QuestManager::playerfeature(const char* feature, int setting) void QuestManager::playerfeature(const char* feature, int setting)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
uint16 Race = initiator->GetRace(); uint16 Race = initiator->GetRace();
uint8 Gender = initiator->GetGender(); uint8 Gender = initiator->GetGender();
uint8 Texture = 0xFF; uint8 Texture = 0xFF;
@ -2176,47 +2300,68 @@ void QuestManager::playerfeature(const char* feature, int setting)
uint32 DrakkinDetails = initiator->GetDrakkinDetails(); uint32 DrakkinDetails = initiator->GetDrakkinDetails();
float Size = initiator->GetSize(); float Size = initiator->GetSize();
if (!strcasecmp(feature,"race")) if (!strcasecmp(feature, "race")) {
Race = setting; Race = setting;
else if (!strcasecmp(feature,"gender")) } else if (!strcasecmp(feature, "gender")) {
Gender = setting; Gender = setting;
else if (!strcasecmp(feature,"texture")) } else if (!strcasecmp(feature, "texture")) {
Texture = setting; Texture = setting;
else if (!strcasecmp(feature,"helm")) } else if (!strcasecmp(feature, "helm")) {
HelmTexture = setting; HelmTexture = setting;
else if (!strcasecmp(feature,"haircolor")) } else if (!strcasecmp(feature, "haircolor")) {
HairColor = setting; HairColor = setting;
else if (!strcasecmp(feature,"beardcolor")) } else if (!strcasecmp(feature, "beardcolor")) {
BeardColor = setting; BeardColor = setting;
else if (!strcasecmp(feature,"eyecolor1")) } else if (!strcasecmp(feature, "eyecolor1")) {
EyeColor1 = setting; EyeColor1 = setting;
else if (!strcasecmp(feature,"eyecolor2")) } else if (!strcasecmp(feature, "eyecolor2")) {
EyeColor2 = setting; EyeColor2 = setting;
else if (!strcasecmp(feature,"hair")) } else if (!strcasecmp(feature, "hair")) {
HairStyle = setting; HairStyle = setting;
else if (!strcasecmp(feature,"face")) } else if (!strcasecmp(feature, "face")) {
LuclinFace = setting; LuclinFace = setting;
else if (!strcasecmp(feature,"beard")) } else if (!strcasecmp(feature, "beard")) {
Beard = setting; Beard = setting;
else if (!strcasecmp(feature,"heritage")) } else if (!strcasecmp(feature, "heritage")) {
DrakkinHeritage = setting; DrakkinHeritage = setting;
else if (!strcasecmp(feature,"tattoo")) } else if (!strcasecmp(feature, "tattoo")) {
DrakkinTattoo = setting; DrakkinTattoo = setting;
else if (!strcasecmp(feature,"details")) } else if (!strcasecmp(feature, "details")) {
DrakkinDetails = setting; DrakkinDetails = setting;
else if (!strcasecmp(feature,"size")) } else if (!strcasecmp(feature, "size")) {
Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size
else } else {
return; return;
}
initiator->SendIllusionPacket(Race, Gender, Texture, HelmTexture, HairColor, BeardColor, initiator->SendIllusionPacket(
EyeColor1, EyeColor2, HairStyle, LuclinFace, Beard, 0xFF, Race,
DrakkinHeritage, DrakkinTattoo, DrakkinDetails, Size); Gender,
Texture,
HelmTexture,
HairColor,
BeardColor,
EyeColor1,
EyeColor2,
HairStyle,
LuclinFace,
Beard,
0xFF,
DrakkinHeritage,
DrakkinTattoo,
DrakkinDetails,
Size
);
} }
void QuestManager::npcfeature(const char* feature, int setting) void QuestManager::npcfeature(const char* feature, int setting)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!owner) {
return;
}
uint16 Race = owner->GetRace(); uint16 Race = owner->GetRace();
uint8 Gender = owner->GetGender(); uint8 Gender = owner->GetGender();
uint8 Texture = owner->GetTexture(); uint8 Texture = owner->GetTexture();
@ -2233,48 +2378,68 @@ void QuestManager::npcfeature(const char* feature, int setting)
uint32 DrakkinDetails = owner->GetDrakkinDetails(); uint32 DrakkinDetails = owner->GetDrakkinDetails();
float Size = owner->GetSize(); float Size = owner->GetSize();
if (!strcasecmp(feature,"race")) if (!strcasecmp(feature, "race")) {
Race = setting; Race = setting;
else if (!strcasecmp(feature,"gender")) } else if (!strcasecmp(feature, "gender")) {
Gender = setting; Gender = setting;
else if (!strcasecmp(feature,"texture")) } else if (!strcasecmp(feature, "texture")) {
Texture = setting; Texture = setting;
else if (!strcasecmp(feature,"helm")) } else if (!strcasecmp(feature, "helm")) {
HelmTexture = setting; HelmTexture = setting;
else if (!strcasecmp(feature,"haircolor")) } else if (!strcasecmp(feature, "haircolor")) {
HairColor = setting; HairColor = setting;
else if (!strcasecmp(feature,"beardcolor")) } else if (!strcasecmp(feature, "beardcolor")) {
BeardColor = setting; BeardColor = setting;
else if (!strcasecmp(feature,"eyecolor1")) } else if (!strcasecmp(feature, "eyecolor1")) {
EyeColor1 = setting; EyeColor1 = setting;
else if (!strcasecmp(feature,"eyecolor2")) } else if (!strcasecmp(feature, "eyecolor2")) {
EyeColor2 = setting; EyeColor2 = setting;
else if (!strcasecmp(feature,"hair")) } else if (!strcasecmp(feature, "hair")) {
HairStyle = setting; HairStyle = setting;
else if (!strcasecmp(feature,"face")) } else if (!strcasecmp(feature, "face")) {
LuclinFace = setting; LuclinFace = setting;
else if (!strcasecmp(feature,"beard")) } else if (!strcasecmp(feature, "beard")) {
Beard = setting; Beard = setting;
else if (!strcasecmp(feature,"heritage")) } else if (!strcasecmp(feature, "heritage")) {
DrakkinHeritage = setting; DrakkinHeritage = setting;
else if (!strcasecmp(feature,"tattoo")) } else if (!strcasecmp(feature, "tattoo")) {
DrakkinTattoo = setting; DrakkinTattoo = setting;
else if (!strcasecmp(feature,"details")) } else if (!strcasecmp(feature, "details")) {
DrakkinDetails = setting; DrakkinDetails = setting;
else if (!strcasecmp(feature,"size")) } else if (!strcasecmp(feature, "size")) {
Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size Size = (float) setting / 10; //dividing by 10 to allow 1 decimal place for adjusting size
else } else {
return; return;
}
owner->SendIllusionPacket(Race, Gender, Texture, HelmTexture, HairColor, BeardColor, owner->SendIllusionPacket(
EyeColor1, EyeColor2, HairStyle, LuclinFace, Beard, 0xFF, Race,
DrakkinHeritage, DrakkinTattoo, DrakkinDetails, Size); Gender,
Texture,
HelmTexture,
HairColor,
BeardColor,
EyeColor1,
EyeColor2,
HairStyle,
LuclinFace,
Beard,
0xFF,
DrakkinHeritage,
DrakkinTattoo,
DrakkinDetails,
Size
);
} }
void QuestManager::popup(const char *title, const char *text, uint32 popupid, uint32 buttons, uint32 Duration) void QuestManager::popup(const char *title, const char *text, uint32 popupid, uint32 buttons, uint32 Duration)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if(initiator)
if (!initiator) {
return;
}
initiator->SendPopupToClient(title, text, popupid, buttons, Duration); initiator->SendPopupToClient(title, text, popupid, buttons, Duration);
} }
@ -2753,48 +2918,41 @@ void QuestManager::whisper(const char *message) {
int QuestManager::getlevel(uint8 type) int QuestManager::getlevel(uint8 type)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (type == 0)
{ if (!initiator) {
return (initiator->GetLevel());
}
else if(type == 1)
{
Group *g = entity_list.GetGroupByClient(initiator);
if (g != nullptr)
return (g->GetAvgLevel());
else
return 0; return 0;
} }
else if(type == 2)
{ if (type == 0) {
Raid *r = entity_list.GetRaidByClient(initiator); return initiator->GetLevel();
if (r != nullptr) } else if (type == 1) {
return (r->GetAvgLevel()); if (Group *g = entity_list.GetGroupByClient(initiator)) {
else return g->GetAvgLevel();
} else {
return 0; return 0;
} }
else if(type == 3) } else if (type == 2) {
{ if (Raid *r = entity_list.GetRaidByClient(initiator)) {
Raid *r = entity_list.GetRaidByClient(initiator); return r->GetAvgLevel();
if(r != nullptr) } else {
{
return (r->GetAvgLevel());
}
Group *g = entity_list.GetGroupByClient(initiator);
if(g != nullptr)
{
return (g->GetAvgLevel());
}
else
return (initiator->GetLevel());
}
else if(type == 4)
{
return (initiator->CastToClient()->GetLevel2());
}
else
return 0; return 0;
} }
} else if (type == 3) {
if (Raid *r = entity_list.GetRaidByClient(initiator)) {
return r->GetAvgLevel();
}
if (Group *g = entity_list.GetGroupByClient(initiator)) {
return g->GetAvgLevel();
} else {
return initiator->GetLevel();
}
} else if (type == 4) {
return initiator->CastToClient()->GetLevel2();
} else {
return 0;
}
}
uint16 QuestManager::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time) uint16 QuestManager::CreateGroundObject(uint32 itemid, const glm::vec4& position, uint32 decay_time)
{ {
@ -2818,38 +2976,35 @@ void QuestManager::ModifyNPCStat(std::string stat, std::string value)
} }
} }
int QuestManager::collectitems_processSlot(int16 slot_id, uint32 item_id, int QuestManager::collectitems_processSlot(
bool remove) int16 slot_id,
{ uint32 item_id,
bool remove
) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
EQ::ItemInstance *item = nullptr;
int quantity = 0;
item = initiator->GetInv().GetItem(slot_id); if (!initiator) {
return 0;
}
const auto item = initiator->GetInv().GetItem(slot_id);
// If we have found matching item, add quantity // If we have found matching item, add quantity
if (item && item->GetID() == item_id) if (item && item->GetID() == item_id) {
{
// If item is stackable, add its charges (quantity) // If item is stackable, add its charges (quantity)
if (item->IsStackable()) const auto quantity = item->IsStackable() ? item->GetCharges() : 1;
{
quantity = item->GetCharges();
}
else
{
quantity = 1;
}
// Remove item from inventory // Remove item from inventory
if (remove) if (remove) {
{
initiator->DeleteItemInInventory(slot_id, 0, true); initiator->DeleteItemInInventory(slot_id, 0, true);
} }
}
return quantity; return quantity;
} }
return 0;
}
// Returns number of item_id that exist in inventory // Returns number of item_id that exist in inventory
// If remove is true, items are removed as they are counted. // If remove is true, items are removed as they are counted.
int QuestManager::collectitems(uint32 item_id, bool remove) int QuestManager::collectitems(uint32 item_id, bool remove)
@ -2857,13 +3012,11 @@ int QuestManager::collectitems(uint32 item_id, bool remove)
int quantity = 0; int quantity = 0;
int slot_id; int slot_id;
for (slot_id = EQ::invslot::GENERAL_BEGIN; slot_id <= EQ::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); quantity += collectitems_processSlot(slot_id, item_id, remove);
} }
for (slot_id = EQ::invbag::GENERAL_BAGS_BEGIN; slot_id <= EQ::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); quantity += collectitems_processSlot(slot_id, item_id, remove);
} }
@ -2872,11 +3025,21 @@ int QuestManager::collectitems(uint32 item_id, bool remove)
int QuestManager::countitem(uint32 item_id) { int QuestManager::countitem(uint32 item_id) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return 0;
}
return initiator->CountItem(item_id); return initiator->CountItem(item_id);
} }
void QuestManager::removeitem(uint32 item_id, uint32 quantity) { void QuestManager::removeitem(uint32 item_id, uint32 quantity) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->RemoveItem(item_id, quantity); initiator->RemoveItem(item_id, quantity);
} }
@ -3322,8 +3485,16 @@ uint8 QuestManager::FactionValue()
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
FACTION_VALUE oldfac; FACTION_VALUE oldfac;
uint8 newfac = 0; uint8 newfac = 0;
if(initiator && owner->IsNPC()) { if (initiator && owner && owner->IsNPC()) {
oldfac = initiator->GetFactionLevel(initiator->GetID(), owner->GetID(), initiator->GetFactionRace(), initiator->GetClass(), initiator->GetDeity(), owner->GetPrimaryFaction(), owner); oldfac = initiator->GetFactionLevel(
initiator->GetID(),
owner->GetID(),
initiator->GetFactionRace(),
initiator->GetClass(),
initiator->GetDeity(),
owner->GetPrimaryFaction(),
owner
);
// now, reorder the faction to have it make sense (higher values are better) // now, reorder the faction to have it make sense (higher values are better)
switch (oldfac) { switch (oldfac) {
@ -3362,62 +3533,76 @@ uint8 QuestManager::FactionValue()
void QuestManager::enabletitle(int titleset) { void QuestManager::enabletitle(int titleset) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->EnableTitle(titleset); initiator->EnableTitle(titleset);
} }
bool QuestManager::checktitle(int titleset) { bool QuestManager::checktitle(int titleset) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
return initiator ? initiator->CheckTitle(titleset) : false;
if (!initiator) {
return false;
}
return initiator->CheckTitle(titleset);
} }
void QuestManager::removetitle(int titleset) { void QuestManager::removetitle(int titleset) {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if (!initiator) {
return;
}
initiator->RemoveTitle(titleset); initiator->RemoveTitle(titleset);
} }
void QuestManager::wearchange(uint8 slot, uint16 texture, uint32 hero_forge_model /*= 0*/, uint32 elite_material /*= 0*/) void QuestManager::wearchange(uint8 slot, uint16 texture, uint32 hero_forge_model /*= 0*/, uint32 elite_material /*= 0*/)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if(owner){
if (!owner) {
return;
}
owner->SendTextureWC(slot, texture, hero_forge_model, elite_material); owner->SendTextureWC(slot, texture, hero_forge_model, elite_material);
if (owner->IsNPC()) { if (owner->IsNPC()) {
owner->CastToNPC()->NPCSlotTexture(slot, texture); owner->CastToNPC()->NPCSlotTexture(slot, texture);
} }
} }
}
void QuestManager::voicetell(const char *str, int macronum, int racenum, int gendernum) void QuestManager::voicetell(const char *str, int macronum, int racenum, int gendernum)
{ {
QuestManagerCurrentQuestVars(); QuestManagerCurrentQuestVars();
if(owner && str)
{ if (!owner) {
return;
}
if (str) {
Client *c = entity_list.GetClientByName(str); Client *c = entity_list.GetClientByName(str);
if(c) if (c) {
{
auto outapp = new EQApplicationPacket(OP_VoiceMacroOut, sizeof(VoiceMacroOut_Struct)); auto outapp = new EQApplicationPacket(OP_VoiceMacroOut, sizeof(VoiceMacroOut_Struct));
auto* vmo = (VoiceMacroOut_Struct *) outapp->pBuffer;
VoiceMacroOut_Struct* vmo = (VoiceMacroOut_Struct*)outapp->pBuffer;
strn0cpy(vmo->From, owner->GetCleanName(), sizeof(vmo->From)); strn0cpy(vmo->From, owner->GetCleanName(), sizeof(vmo->From));
vmo->Type = 1; vmo->Type = 1;
vmo->Voice = (racenum * 2) + gendernum; vmo->Voice = (racenum * 2) + gendernum;
vmo->MacroNumber = macronum; vmo->MacroNumber = macronum;
c->QueuePacket(outapp); c->QueuePacket(outapp);
safe_delete(outapp); safe_delete(outapp);
} } else {
else
LogQuests("from [{}]. Client [{}] not found", owner->GetName(), str); LogQuests("from [{}]. Client [{}] not found", owner->GetName(), str);
} }
} }
}
void QuestManager::SendMail(const char *to, const char *from, const char *subject, const char *message) { void QuestManager::SendMail(const char *to, const char *from, const char *subject, const char *message) {
if(to == nullptr || from == nullptr || subject == nullptr || message == nullptr) { if (!to || !from || !subject || !message) {
return; return;
} }