[Feature] Add Data Bucket support for scaling of Heroic Stats. (#3058)

* [Feature] Add Data Bucket support for scaling of Heroic Stats.

* update

* fixes, still reworking logic

* fixes, still reworking logic

* logic done

* logic done

* fixes

* Cleanup

* Cleanup

* Cleanup naming, verify behaviors

* formatting

* formatting

* fix issue with endurance and mana.

* update rule desc

* cleanup

* DataBucket Struct

* Cleanup data_bucket.cpp and add constants

* cleanup

* changes

* formatting

* fix from merge

* escape keyword `key`

* Add `key` to generator, run repository-generator.pl

* fix for change to key

* cleanup

* formatting

* formatting

* typo
This commit is contained in:
Aeadoin
2023-03-23 21:42:13 -04:00
committed by GitHub
parent abc27ab423
commit 59ad91a140
28 changed files with 433 additions and 243 deletions
+49 -6
View File
@@ -13,7 +13,7 @@
* @param bucket_value
* @param expires_time
*/
void DataBucket::SetData(std::string bucket_key, std::string bucket_value, std::string expires_time) {
void DataBucket::SetData(const std::string& bucket_key, const std::string& bucket_value, std::string expires_time) {
uint64 bucket_id = DataBucket::DoesBucketExist(bucket_key);
std::string query;
@@ -57,7 +57,7 @@ void DataBucket::SetData(std::string bucket_key, std::string bucket_value, std::
* @param bucket_key
* @return
*/
std::string DataBucket::GetData(std::string bucket_key) {
std::string DataBucket::GetData(const std::string& bucket_key) {
std::string query = StringFormat(
"SELECT `value` from `data_buckets` WHERE `key` = '%s' AND (`expires` > %lld OR `expires` = 0) LIMIT 1",
bucket_key.c_str(),
@@ -82,7 +82,7 @@ std::string DataBucket::GetData(std::string bucket_key) {
* @param bucket_key
* @return
*/
std::string DataBucket::GetDataExpires(std::string bucket_key) {
std::string DataBucket::GetDataExpires(const std::string& bucket_key) {
std::string query = StringFormat(
"SELECT `expires` from `data_buckets` WHERE `key` = '%s' AND (`expires` > %lld OR `expires` = 0) LIMIT 1",
bucket_key.c_str(),
@@ -102,7 +102,7 @@ std::string DataBucket::GetDataExpires(std::string bucket_key) {
return std::string(row[0]);
}
std::string DataBucket::GetDataRemaining(std::string bucket_key) {
std::string DataBucket::GetDataRemaining(const std::string& bucket_key) {
if (DataBucket::GetDataExpires(bucket_key).empty()) {
return "0";
}
@@ -130,7 +130,7 @@ std::string DataBucket::GetDataRemaining(std::string bucket_key) {
* @param bucket_key
* @return
*/
uint64 DataBucket::DoesBucketExist(std::string bucket_key) {
uint64 DataBucket::DoesBucketExist(const std::string& bucket_key) {
std::string query = StringFormat(
"SELECT `id` from `data_buckets` WHERE `key` = '%s' AND (`expires` > %lld OR `expires` = 0) LIMIT 1",
Strings::Escape(bucket_key).c_str(),
@@ -154,7 +154,7 @@ uint64 DataBucket::DoesBucketExist(std::string bucket_key) {
* @param bucket_key
* @return
*/
bool DataBucket::DeleteData(std::string bucket_key) {
bool DataBucket::DeleteData(const std::string& bucket_key) {
std::string query = StringFormat(
"DELETE FROM `data_buckets` WHERE `key` = '%s'",
Strings::Escape(bucket_key).c_str()
@@ -164,3 +164,46 @@ bool DataBucket::DeleteData(std::string bucket_key) {
return results.Success();
}
bool DataBucket::GetDataBuckets(Mob* mob)
{
auto l = BaseDataBucketsRepository::GetWhere(
database,
fmt::format(
"`key` LIKE '{}-%'",
Strings::Escape(mob->GetBucketKey())
)
);
if (l.empty()) {
return false;
}
mob->m_data_bucket_cache.clear();
DataBucketCache d;
for (const auto& e : l) {
d.bucket_id = e.id;
d.bucket_key = e.key_;
d.bucket_value = e.value;
d.bucket_expires = e.expires;
mob->m_data_bucket_cache.emplace_back(d);
}
return true;
}
std::string DataBucket::CheckBucketKey(const Mob* mob, std::string_view full_name)
{
std::string bucket_value;
for (const auto &d : mob->m_data_bucket_cache) {
if (d.bucket_key == full_name) {
bucket_value = d.bucket_value;
break;
}
}
return bucket_value;
}