[Bug Fix] Fix Character EXP Modifiers default (#4161)

# Notes
- The `-1.0f` was causing these modifiers to be set to `0.0` and when people would enable them they would get no experience.
- We now use the zone based grabbed methods when setting which will default to a value of `1.0f` if there is not a value found.
This commit is contained in:
Alex King 2024-03-05 22:54:07 -05:00 committed by GitHub
parent ee3d02bac6
commit 2c2a8cdb63
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 80 additions and 4 deletions

View File

@ -74,9 +74,11 @@ public:
}; };
} }
const auto& m = l.front();
return EXPModifier{ return EXPModifier{
.aa_modifier = l[0].aa_modifier, .aa_modifier = m.aa_modifier,
.exp_modifier = l[0].exp_modifier .exp_modifier = m.exp_modifier
}; };
} }

View File

@ -3165,6 +3165,11 @@ void Zone::ClearEXPModifier(Client* c)
exp_modifiers.erase(c->CharacterID()); exp_modifiers.erase(c->CharacterID());
} }
void Zone::ClearEXPModifierByCharacterID(const uint32 character_id)
{
exp_modifiers.erase(character_id);
}
float Zone::GetAAEXPModifier(Client* c) float Zone::GetAAEXPModifier(Client* c)
{ {
const auto& l = exp_modifiers.find(c->CharacterID()); const auto& l = exp_modifiers.find(c->CharacterID());
@ -3177,6 +3182,18 @@ float Zone::GetAAEXPModifier(Client* c)
return v.aa_modifier; return v.aa_modifier;
} }
float Zone::GetAAEXPModifierByCharacterID(const uint32 character_id)
{
const auto& l = exp_modifiers.find(character_id);
if (l == exp_modifiers.end()) {
return 1.0f;
}
const auto& v = l->second;
return v.aa_modifier;
}
float Zone::GetEXPModifier(Client* c) float Zone::GetEXPModifier(Client* c)
{ {
const auto& l = exp_modifiers.find(c->CharacterID()); const auto& l = exp_modifiers.find(c->CharacterID());
@ -3189,6 +3206,18 @@ float Zone::GetEXPModifier(Client* c)
return v.exp_modifier; return v.exp_modifier;
} }
float Zone::GetEXPModifierByCharacterID(const uint32 character_id)
{
const auto& l = exp_modifiers.find(character_id);
if (l == exp_modifiers.end()) {
return 1.0f;
}
const auto& v = l->second;
return v.exp_modifier;
}
void Zone::SetAAEXPModifier(Client* c, float aa_modifier) void Zone::SetAAEXPModifier(Client* c, float aa_modifier)
{ {
auto l = exp_modifiers.find(c->CharacterID()); auto l = exp_modifiers.find(c->CharacterID());
@ -3209,6 +3238,26 @@ void Zone::SetAAEXPModifier(Client* c, float aa_modifier)
); );
} }
void Zone::SetAAEXPModifierByCharacterID(const uint32 character_id, float aa_modifier)
{
auto l = exp_modifiers.find(character_id);
if (l == exp_modifiers.end()) {
return;
}
auto& m = l->second;
m.aa_modifier = aa_modifier;
CharacterExpModifiersRepository::SetEXPModifier(
database,
character_id,
GetZoneID(),
GetInstanceVersion(),
m
);
}
void Zone::SetEXPModifier(Client* c, float exp_modifier) void Zone::SetEXPModifier(Client* c, float exp_modifier)
{ {
auto l = exp_modifiers.find(c->CharacterID()); auto l = exp_modifiers.find(c->CharacterID());
@ -3229,6 +3278,26 @@ void Zone::SetEXPModifier(Client* c, float exp_modifier)
); );
} }
void Zone::SetEXPModifierByCharacterID(const uint32 character_id, float exp_modifier)
{
auto l = exp_modifiers.find(character_id);
if (l == exp_modifiers.end()) {
return;
}
auto& m = l->second;
m.exp_modifier = exp_modifier;
CharacterExpModifiersRepository::SetEXPModifier(
database,
character_id,
GetZoneID(),
GetInstanceVersion(),
m
);
}
bool Zone::IsIdleWhenEmpty() const bool Zone::IsIdleWhenEmpty() const
{ {
return m_idle_when_empty; return m_idle_when_empty;

View File

@ -269,10 +269,15 @@ public:
void SendReloadMessage(std::string reload_type); void SendReloadMessage(std::string reload_type);
void ClearEXPModifier(Client* c); void ClearEXPModifier(Client* c);
void ClearEXPModifierByCharacterID(const uint32 character_id);
float GetAAEXPModifier(Client* c); float GetAAEXPModifier(Client* c);
float GetAAEXPModifierByCharacterID(const uint32 character_id);
float GetEXPModifier(Client* c); float GetEXPModifier(Client* c);
float GetEXPModifierByCharacterID(const uint32 character_id);
void SetAAEXPModifier(Client* c, float aa_modifier); void SetAAEXPModifier(Client* c, float aa_modifier);
void SetAAEXPModifierByCharacterID(const uint32 character_id, float aa_modifier);
void SetEXPModifier(Client* c, float exp_modifier); void SetEXPModifier(Client* c, float exp_modifier);
void SetEXPModifierByCharacterID(const uint32 character_id, float exp_modifier);
void AddAggroMob() { aggroedmobs++; } void AddAggroMob() { aggroedmobs++; }
void AddAuth(ServerZoneIncomingClient_Struct *szic); void AddAuth(ServerZoneIncomingClient_Struct *szic);

View File

@ -4270,7 +4270,7 @@ void ZoneDatabase::SetAAEXPModifierByCharID(
instance_version, instance_version,
EXPModifier{ EXPModifier{
.aa_modifier = aa_modifier, .aa_modifier = aa_modifier,
.exp_modifier = -1.0f .exp_modifier = zone->GetEXPModifierByCharacterID(character_id)
} }
); );
} }
@ -4288,7 +4288,7 @@ void ZoneDatabase::SetEXPModifierByCharID(
zone_id, zone_id,
instance_version, instance_version,
EXPModifier{ EXPModifier{
.aa_modifier = -1.0f, .aa_modifier = zone->GetAAEXPModifierByCharacterID(character_id),
.exp_modifier = exp_modifier .exp_modifier = exp_modifier
} }
); );