fix: activity id not using overridden id (#1400)

* patch activity id not using overridden id

Update ActivityComponent.h

* Update ActivityComponent.cpp

* Update ActivityComponent.cpp
This commit is contained in:
David Markowitz 2024-01-07 05:43:53 -08:00 committed by GitHub
parent dbe4a0ced3
commit e4469f997e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 16 deletions

View File

@ -30,23 +30,17 @@
#include "LeaderboardManager.h" #include "LeaderboardManager.h"
ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Component(parent) { ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Component(parent) {
if (activityID > 0) m_ActivityID = activityID; /*
else m_ActivityID = parent->GetVar<int32_t>(u"activityID"); * This is precisely what the client does functionally
CDActivitiesTable* activitiesTable = CDClientManager::Instance().GetTable<CDActivitiesTable>(); * Use the component id as the default activity id and load its data from the database
std::vector<CDActivities> activities = activitiesTable->Query([this](CDActivities entry) {return (entry.ActivityID == m_ActivityID); }); * if activityID is specified and if that column exists in the activities table, update the activity info with that data.
*/
for (CDActivities activity : activities) { m_ActivityID = activityID;
m_ActivityInfo = activity; LoadActivityData(activityID);
if (static_cast<Leaderboard::Type>(activity.leaderboardType) == Leaderboard::Type::Racing && Game::config->GetValue("solo_racing") == "1") { if (m_Parent->HasVar(u"activityID")) {
m_ActivityInfo.minTeamSize = 1; m_ActivityID = parent->GetVar<int32_t>(u"activityID");
m_ActivityInfo.minTeams = 1; LoadActivityData(m_ActivityID);
}
if (m_ActivityInfo.instanceMapID == -1) {
const auto& transferOverride = parent->GetVarAsString(u"transferZoneID");
if (!transferOverride.empty()) {
GeneralUtils::TryParse(transferOverride, m_ActivityInfo.instanceMapID);
}
}
} }
auto* destroyableComponent = m_Parent->GetComponent<DestroyableComponent>(); auto* destroyableComponent = m_Parent->GetComponent<DestroyableComponent>();
@ -74,6 +68,25 @@ ActivityComponent::ActivityComponent(Entity* parent, int32_t activityID) : Compo
} }
} }
} }
void ActivityComponent::LoadActivityData(const int32_t activityId) {
CDActivitiesTable* activitiesTable = CDClientManager::Instance().GetTable<CDActivitiesTable>();
std::vector<CDActivities> activities = activitiesTable->Query([activityId](CDActivities entry) {return (entry.ActivityID == activityId); });
bool soloRacing = Game::config->GetValue("solo_racing") == "1";
for (CDActivities activity : activities) {
m_ActivityInfo = activity;
if (static_cast<Leaderboard::Type>(activity.leaderboardType) == Leaderboard::Type::Racing && soloRacing) {
m_ActivityInfo.minTeamSize = 1;
m_ActivityInfo.minTeams = 1;
}
if (m_ActivityInfo.instanceMapID == -1) {
const auto& transferOverride = m_Parent->GetVarAsString(u"transferZoneID");
if (!transferOverride.empty()) {
GeneralUtils::TryParse(transferOverride, m_ActivityInfo.instanceMapID);
}
}
}
}
void ActivityComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) { void ActivityComponent::Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) {
outBitStream->Write(m_DirtyActivityInfo); outBitStream->Write(m_DirtyActivityInfo);

View File

@ -152,6 +152,8 @@ class ActivityComponent : public Component {
public: public:
ActivityComponent(Entity* parent, int32_t activityID); ActivityComponent(Entity* parent, int32_t activityID);
void LoadActivityData(const int32_t activityId);
void Update(float deltaTime) override; void Update(float deltaTime) override;
void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override; void Serialize(RakNet::BitStream* outBitStream, bool bIsInitialUpdate) override;