[Feature] Add support for -1 extradmgskill to allow all skills to be scaled. (#3136)

* [Feature] Add support for -1 extradmgskill to allow all skills to be scaled.

- `$mob->GetSkillDmgAmt(skill_id)` now uses `int` instead of `uint16`.

- `statbonuses:GetSkillDamageAmount(skill_id)` now uses `-1` properly.
- `mob:GetSkillDmgAmt(skill_id)` now uses `int` instead of `uint16`.

- A `-1` value in `extradmgskill` denotes the ability to scale all skills at once.
- Consolidated `AddItemBonuses()`, `AdditiveWornBonuses()`, `CalcItemBonuses()`, and `CalcRecommendedLevelBonus()` to mob-based methods to avoid code duplication.
- Bots, NPCs, and Mercs can now use additive worn effects if the rule is enabled, as well as all other proper stat bonuses that only clients had before.
- No SQL update required to change `extradmgskill` and `extradmgamt` to `int` as they already are this type in the database, just had to adjust `item_data.h` and `shareddb.cpp`.

* Update mob.cpp

* Cleanup.

* Cleanup.

* Move #include <vector> to header.

* Add method for GetExtraDamageSkills

* fix additembonuses

* Update bonuses.cpp

* Update mob.cpp

* Out of bounds.

* Update bonuses.cpp

---------

Co-authored-by: Aeadoin <109764533+Aeadoin@users.noreply.github.com>
This commit is contained in:
Alex King
2023-03-25 20:26:01 -04:00
committed by GitHub
parent ec3ef411a1
commit 9d1ace627c
17 changed files with 569 additions and 1167 deletions
+33 -7
View File
@@ -16,6 +16,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "../common/data_verification.h"
#include "../common/spdat.h"
#include "../common/strings.h"
#include "../common/misc_functions.h"
@@ -3999,7 +4000,7 @@ void Mob::QuestJournalledSay(Client *QuestInitiator, const char *str, Journal::O
const char *Mob::GetCleanName()
{
if (!strlen(clean_name)) {
if (!strlen(clean_name)) {
CleanMobName(GetName(), clean_name);
}
@@ -5549,16 +5550,41 @@ int16 Mob::GetSkillReuseTime(uint16 skill)
return skill_reduction;
}
int Mob::GetSkillDmgAmt(uint16 skill)
int Mob::GetSkillDmgAmt(int skill_id)
{
int skill_dmg = 0;
// All skill dmg(only spells do this) + Skill specific
skill_dmg += spellbonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] + aabonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1]
+ itembonuses.SkillDamageAmount[skill] + spellbonuses.SkillDamageAmount[skill] + aabonuses.SkillDamageAmount[skill];
if (!EQ::ValueWithin(skill_id, ALL_SKILLS, EQ::skills::HIGHEST_SKILL)) {
return skill_dmg;
}
skill_dmg += spellbonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] + itembonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1]
+ itembonuses.SkillDamageAmount2[skill] + spellbonuses.SkillDamageAmount2[skill];
skill_dmg += (
spellbonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] +
itembonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1] +
aabonuses.SkillDamageAmount[EQ::skills::HIGHEST_SKILL + 1]
);
if (skill_id != ALL_SKILLS) {
skill_dmg += (
itembonuses.SkillDamageAmount[skill_id] +
spellbonuses.SkillDamageAmount[skill_id] +
aabonuses.SkillDamageAmount[skill_id]
);
}
skill_dmg += (
spellbonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] +
itembonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1] +
aabonuses.SkillDamageAmount2[EQ::skills::HIGHEST_SKILL + 1]
);
if (skill_id != ALL_SKILLS) {
skill_dmg += (
itembonuses.SkillDamageAmount2[skill_id] +
spellbonuses.SkillDamageAmount2[skill_id] +
aabonuses.SkillDamageAmount2[skill_id]
);
}
return skill_dmg;
}