[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
+24 -1
View File
@@ -20,6 +20,7 @@
#define MOB_H
#include "common.h"
#include "data_bucket.h"
#include "entity.h"
#include "hate_list.h"
#include "pathfinder_interface.h"
@@ -618,10 +619,13 @@ public:
inline int64 GetHP() const { return current_hp; }
inline int64 GetMaxHP() const { return max_hp; }
virtual int64 CalcMaxHP();
virtual int64 CalcHPRegenCap() { return 0; }
inline int64 GetMaxMana() const { return max_mana; }
virtual int64 CalcManaRegenCap() { return 0; }
inline int64 GetMana() const { return current_mana; }
virtual int64 GetEndurance() const { return 0; }
virtual int64 GetMaxEndurance() const { return 0; }
virtual int64 CalcEnduranceRegenCap() { return 0; }
virtual void SetEndurance(int32 newEnd) { return; }
int64 GetItemHPBonuses();
int64 GetSpellHPBonuses();
@@ -654,7 +658,10 @@ public:
inline int32 GetHeroicStrikethrough() const { return heroic_strikethrough; }
inline const bool GetKeepsSoldItems() const { return keeps_sold_items; }
inline void SetKeepsSoldItems(bool in_keeps_sold_items) { keeps_sold_items = in_keeps_sold_items; }
virtual int32 GetHealAmt() const { return 0; }
virtual int32 GetSpellDmg() const { return 0; }
void ProcessItemCaps();
virtual int32 CalcItemATKCap() { return 0; }
virtual bool IsSitting() const { return false; }
int CalcRecommendedLevelBonus(uint8 level, uint8 reclevel, int basestat);
@@ -1390,6 +1397,9 @@ public:
/// this cures timing issues cuz dead animation isn't done but server side feigning is?
inline bool GetFeigned() const { return(feigned); }
std::vector<DataBucketCache> m_data_bucket_cache;
// Data Bucket Methods
void DeleteBucket(std::string bucket_name);
std::string GetBucket(std::string bucket_name);
std::string GetBucketExpires(std::string bucket_name);
@@ -1397,6 +1407,9 @@ public:
std::string GetBucketRemaining(std::string bucket_name);
void SetBucket(std::string bucket_name, std::string bucket_value, std::string expiration = "");
// Heroic Stat Benefits
float CheckHeroicBonusesDataBuckets(std::string bucket_name);
int DispatchZoneControllerEvent(QuestEventID evt, Mob* init, const std::string& data, uint32 extra, std::vector<std::any>* pointers);
// Bots HealRotation methods
@@ -1418,6 +1431,8 @@ public:
void DrawDebugCoordinateNode(std::string node_name, const glm::vec4 vec);
void CalcHeroicBonuses(StatBonuses* newbon);
protected:
void CommonDamage(Mob* other, int64 &damage, const uint16 spell_id, const EQ::skills::SkillType attack_skill, bool &avoidable, const int8 buffslot, const bool iBuffTic, eSpecialAttacks specal = eSpecialAttacks::None);
static uint16 GetProcID(uint16 spell_id, uint8 effect_index);
@@ -1701,6 +1716,7 @@ protected:
bool is_boat;
CombatRecord m_combat_record{};
public:
const CombatRecord &GetCombatRecord() const;
@@ -1833,6 +1849,13 @@ private:
std::shared_ptr<HealRotation> m_target_of_heal_rotation;
bool m_manual_follow;
void SetHeroicStrBonuses(StatBonuses* n);
void SetHeroicStaBonuses(StatBonuses* n);
void SetHeroicAgiBonuses(StatBonuses* n);
void SetHeroicDexBonuses(StatBonuses* n);
void SetHeroicIntBonuses(StatBonuses* n);
void SetHeroicWisBonuses(StatBonuses* n);
void DoSpellInterrupt(uint16 spell_id, int32 mana_cost, int my_curmana);
};