mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-14 07:21:48 +00:00
[Bug Fix] Fix Mercenaries Buffs/Zoning Issues (#4000)
# Notes - Mercenaries were disappearing on zoning because they were saving to slot `1` and being loaded from slot `0`. - Mercenaries were not displaying properly in group window because of this as well. - Mercenary buffs were saving even when they did not have any buffs.
This commit is contained in:
parent
fbc2b7c152
commit
5298abe6bc
@ -5575,20 +5575,17 @@ Merc* Client::GetMerc() {
|
|||||||
return (tmp);
|
return (tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 Client::GetNumberOfMercenaries() {
|
uint8 Client::GetNumberOfMercenaries()
|
||||||
|
{
|
||||||
|
uint8 count = 0;
|
||||||
|
|
||||||
uint8 numMercs = 0;
|
for (int slot_id = 0; slot_id < MAXMERCS; slot_id++) {
|
||||||
|
if (m_mercinfo[slot_id].mercid != 0) {
|
||||||
for(int i=0; i<MAXMERCS; i++)
|
count++;
|
||||||
{
|
|
||||||
if(m_mercinfo[i].mercid != 0)
|
|
||||||
{
|
|
||||||
numMercs++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log(Logs::General, Logs::Mercenaries, "GetNumberOfMercenaries Number: %i for %s.", numMercs, GetName());
|
|
||||||
|
|
||||||
return numMercs;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Merc::SetMercData( uint32 template_id ) {
|
void Merc::SetMercData( uint32 template_id ) {
|
||||||
@ -5738,17 +5735,17 @@ void NPC::LoadMercenaryTypes()
|
|||||||
);
|
);
|
||||||
|
|
||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
if (!results.Success()) {
|
if (!results.Success() || !results.RowCount()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row : results) {
|
||||||
MercType t;
|
mercTypeList.push_back(
|
||||||
|
MercType{
|
||||||
t.Type = Strings::ToInt(row[0]);
|
.Type = Strings::ToUnsignedInt(row[0]),
|
||||||
t.ClientVersion = Strings::ToInt(row[1]);
|
.ClientVersion = Strings::ToUnsignedInt(row[1])
|
||||||
|
}
|
||||||
mercTypeList.push_back(t);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5772,21 +5769,21 @@ void NPC::LoadMercenaries()
|
|||||||
);
|
);
|
||||||
|
|
||||||
auto results = database.QueryDatabase(query);
|
auto results = database.QueryDatabase(query);
|
||||||
if (!results.Success()) {
|
if (!results.Success() || !results.RowCount()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto row = results.begin(); row != results.end(); ++row) {
|
for (auto row : results) {
|
||||||
MercData t;
|
mercDataList.push_back(
|
||||||
|
MercData{
|
||||||
t.MercTemplateID = Strings::ToInt(row[0]);
|
.MercTemplateID = Strings::ToUnsignedInt(row[0]),
|
||||||
t.MercType = Strings::ToInt(row[1]);
|
.MercType = Strings::ToUnsignedInt(row[1]),
|
||||||
t.MercSubType = Strings::ToInt(row[2]);
|
.MercSubType = Strings::ToUnsignedInt(row[2]),
|
||||||
t.CostFormula = Strings::ToInt(row[3]);
|
.CostFormula = Strings::ToUnsignedInt(row[3]),
|
||||||
t.ClientVersion = Strings::ToInt(row[4]);
|
.ClientVersion = Strings::ToUnsignedInt(row[4]),
|
||||||
t.NPCID = Strings::ToInt(row[5]);
|
.NPCID = Strings::ToUnsignedInt(row[5])
|
||||||
|
}
|
||||||
mercDataList.push_back(t);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -2295,7 +2295,7 @@ bool ZoneDatabase::SaveMercenary(Merc* m)
|
|||||||
auto e = MercsRepository::NewEntity();
|
auto e = MercsRepository::NewEntity();
|
||||||
|
|
||||||
e.OwnerCharacterID = m->GetMercenaryCharacterID();
|
e.OwnerCharacterID = m->GetMercenaryCharacterID();
|
||||||
e.Slot = c->GetNumberOfMercenaries();
|
e.Slot = (c->GetNumberOfMercenaries() - 1);
|
||||||
e.Name = m->GetCleanName();
|
e.Name = m->GetCleanName();
|
||||||
e.TemplateID = m->GetMercenaryTemplateID();
|
e.TemplateID = m->GetMercenaryTemplateID();
|
||||||
e.SuspendedTime = c->GetMercInfo().SuspendedTime;
|
e.SuspendedTime = c->GetMercInfo().SuspendedTime;
|
||||||
@ -2336,7 +2336,7 @@ bool ZoneDatabase::SaveMercenary(Merc* m)
|
|||||||
auto e = MercsRepository::FindOne(*this, m->GetMercenaryID());
|
auto e = MercsRepository::FindOne(*this, m->GetMercenaryID());
|
||||||
|
|
||||||
e.OwnerCharacterID = m->GetMercenaryCharacterID();
|
e.OwnerCharacterID = m->GetMercenaryCharacterID();
|
||||||
e.Slot = c->GetNumberOfMercenaries();
|
e.Slot = (c->GetNumberOfMercenaries() - 1);
|
||||||
e.Name = m->GetCleanName();
|
e.Name = m->GetCleanName();
|
||||||
e.TemplateID = m->GetMercenaryTemplateID();
|
e.TemplateID = m->GetMercenaryTemplateID();
|
||||||
e.SuspendedTime = c->GetMercInfo().SuspendedTime;
|
e.SuspendedTime = c->GetMercInfo().SuspendedTime;
|
||||||
@ -2416,7 +2416,9 @@ void ZoneDatabase::SaveMercenaryBuffs(Merc* m)
|
|||||||
v.emplace_back(e);
|
v.emplace_back(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!v.empty()) {
|
||||||
MercBuffsRepository::InsertMany(*this, v);
|
MercBuffsRepository::InsertMany(*this, v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZoneDatabase::LoadMercenaryBuffs(Merc* m)
|
void ZoneDatabase::LoadMercenaryBuffs(Merc* m)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user