From e7032bc2c2d6a3b9a23a95b8fdb78e0bcfc2d9dc Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Sat, 4 Jan 2014 19:20:59 -0500 Subject: [PATCH] Implemented SE_SongModCap Bard AAs Ayonaes Tutelage and Echo of Taelosia implemented as bonuses Remember to run the SQL! --- common/spdat.h | 2 +- .../git/required/2014_01_04_SongModCapAAs.sql | 9 +++++++++ zone/bonuses.cpp | 7 +++++++ zone/client_mods.cpp | 18 ++++++++---------- zone/common.h | 1 + zone/spell_effects.cpp | 1 + 6 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 utils/sql/git/required/2014_01_04_SongModCapAAs.sql diff --git a/common/spdat.h b/common/spdat.h index c66e8413e..19e965ad6 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -407,7 +407,7 @@ typedef enum { #define SE_TripleBackstab 258 // implemented[AA] - chance to perform a triple backstab #define SE_CombatStability 259 // implemented[AA] - damage mitigation #define SE_AddSingingMod 260 // implemented[AA] - Instrument/Singing Mastery, base1 is the mod, base2 is the ItemType -//#define SE_SongModCap 261 // not used +#define SE_SongModCap 261 // implemented[AA] - Song Mod cap increase (no longer used on live) #define SE_RaiseStatCap 262 // implemented #define SE_TradeSkillMastery 263 // implemented - lets you raise more than one tradeskill above master. #define SE_HastenedAASkill 264 // not implemented as bonus - Use redux field in aa_actions table for this effect diff --git a/utils/sql/git/required/2014_01_04_SongModCapAAs.sql b/utils/sql/git/required/2014_01_04_SongModCapAAs.sql new file mode 100644 index 000000000..791061b1b --- /dev/null +++ b/utils/sql/git/required/2014_01_04_SongModCapAAs.sql @@ -0,0 +1,9 @@ +-- Ayonaes Tutelage +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('571', '1', '261', '1', '0'); +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('572', '1', '261', '2', '0'); +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('573', '1', '261', '3', '0'); +-- Echo of Taelosia +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('707', '1', '261', '1', '0'); +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('708', '1', '261', '2', '0'); +INSERT INTO `aa_effects` (`aaid`, `slot`, `effectid`, `base1`, `base2`) VALUES ('709', '1', '261', '3', '0'); + diff --git a/zone/bonuses.cpp b/zone/bonuses.cpp index 1ce576da2..7bf88a215 100644 --- a/zone/bonuses.cpp +++ b/zone/bonuses.cpp @@ -904,6 +904,9 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon) break; } break; + case SE_SongModCap: + newbon->songModCap += base1; + break; case SE_PetCriticalHit: newbon->PetCriticalHit += base1; break; @@ -2327,6 +2330,10 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne } break; + case SE_SongModCap: + newbon->songModCap += effect_value; + break; + case SE_PetAvoidance: newbon->PetAvoidance += effect_value; break; diff --git a/zone/client_mods.cpp b/zone/client_mods.cpp index 45504510d..925aa15a4 100644 --- a/zone/client_mods.cpp +++ b/zone/client_mods.cpp @@ -1792,9 +1792,10 @@ int16 Client::CalcATK() { return(ATK); } -uint16 Mob::GetInstrumentMod(uint16 spell_id) const { - if(GetClass() != BARD) - return(10); +uint16 Mob::GetInstrumentMod(uint16 spell_id) const +{ + if (GetClass() != BARD) + return 10; uint16 effectmod = 10; int effectmodcap = RuleI(Character, BaseInstrumentSoftCap); @@ -1804,7 +1805,7 @@ uint16 Mob::GetInstrumentMod(uint16 spell_id) const { //because the spells are supposed to act just like having the intrument. //item mods are in 10ths of percent increases - switch(spells[spell_id].skill) { + switch (spells[spell_id].skill) { case SkillPercussionInstruments: if(itembonuses.percussionMod == 0 && spellbonuses.percussionMod == 0) effectmod = 10; @@ -1863,12 +1864,9 @@ uint16 Mob::GetInstrumentMod(uint16 spell_id) const { break; } - // TODO: These shouldn't be hardcoded. - effectmodcap += GetAA(aaAyonaesTutelage); - effectmodcap += GetAA(aaEchoofTaelosia); + effectmodcap += aabonuses.songModCap + spellbonuses.songModCap; - - if(effectmod < 10) + if (effectmod < 10) effectmod = 10; if (effectmod > effectmodcap) @@ -1877,7 +1875,7 @@ uint16 Mob::GetInstrumentMod(uint16 spell_id) const { _log(SPELLS__BARDS, "%s::GetInstrumentMod() spell=%d mod=%d modcap=%d\n", GetName(), spell_id, effectmod, effectmodcap); - return(effectmod); + return effectmod; } void Client::CalcMaxEndurance() diff --git a/zone/common.h b/zone/common.h index 9b253cd5e..be9ce79f4 100644 --- a/zone/common.h +++ b/zone/common.h @@ -230,6 +230,7 @@ struct StatBonuses { uint16 percussionMod; uint16 windMod; uint16 stringedMod; + uint16 songModCap; int8 hatemod; int32 EnduranceReduction; diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 9790610a3..85d15ede8 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -2890,6 +2890,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial) case SE_MaxBindWound: case SE_CombatStability: case SE_AddSingingMod: + case SE_SongModCap: case SE_PetAvoidance: case SE_GiveDoubleRiposte: case SE_Ambidexterity: