Merge pull request #391 from KayenEQ/Development

More sympathetic proc fixes
This commit is contained in:
KayenEQ 2015-03-24 07:13:58 -04:00
commit eed57ddf97
4 changed files with 54 additions and 27 deletions

View File

@ -1268,7 +1268,7 @@ protected:
bool client_data_loaded;
int16 GetFocusEffect(focusType type, uint16 spell_id);
int16 GetSympatheticFocusEffect(focusType type, uint16 spell_id);
uint16 GetSympatheticFocusEffect(focusType type, uint16 spell_id);
Mob* bind_sight_target;

View File

@ -3615,13 +3615,19 @@ bool Mob::TryFadeEffect(int slot)
void Mob::TrySympatheticProc(Mob *target, uint32 spell_id)
{
if(target == nullptr || !IsValidSpell(spell_id))
if(target == nullptr || !IsValidSpell(spell_id) || !IsClient())
return;
int focus_spell = CastToClient()->GetSympatheticFocusEffect(focusSympatheticProc,spell_id);
uint16 focus_spell = CastToClient()->GetSympatheticFocusEffect(focusSympatheticProc,spell_id);
if(!IsValidSpell(focus_spell))
return;
uint16 focus_trigger = GetSympatheticSpellProcID(focus_spell);
if(!IsValidSpell(focus_trigger))
return;
if(IsValidSpell(focus_spell)){
int focus_trigger = spells[focus_spell].base2[0];
// For beneficial spells, if the triggered spell is also beneficial then proc it on the target
// if the triggered spell is detrimental, then it will trigger on the caster(ie cursed items)
if(IsBeneficialSpell(spell_id))
@ -3645,7 +3651,6 @@ void Mob::TrySympatheticProc(Mob *target, uint32 spell_id)
CheckNumHitsRemaining(NumHit::MatchingSpells, -1, focus_spell);
}
}
int32 Mob::GetItemStat(uint32 itemid, const char *identifier)
{

View File

@ -1063,6 +1063,8 @@ protected:
void PrintRoute();
virtual float GetSympatheticProcChances(uint16 spell_id, int16 ProcRateMod, int32 ItemProcRate = 0);
int16 GetSympatheticSpellProcRate(uint16 spell_id);
uint16 GetSympatheticSpellProcID(uint16 spell_id);
enum {MAX_PROCS = 4};
tProc PermaProcs[MAX_PROCS];

View File

@ -5177,7 +5177,7 @@ int16 Mob::CalcFocusEffect(focusType type, uint16 focus_id, uint16 spell_id, boo
return(value*lvlModifier/100);
}
int16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
uint16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
if (IsBardSong(spell_id))
return 0;
@ -5253,7 +5253,7 @@ int16 Client::GetSympatheticFocusEffect(focusType type, uint16 spell_id) {
if (IsValidSpell(proc_spellid)){
ProcChance = GetSympatheticProcChances(spell_id, spells[focusspellid].base[0]);
ProcChance = GetSympatheticProcChances(spell_id, GetSympatheticSpellProcRate(spell_id));
if(zone->random.Roll(ProcChance))
SympatheticProcList.push_back(proc_spellid);
}
@ -5929,6 +5929,26 @@ float Mob::GetSympatheticProcChances(uint16 spell_id, int16 ProcRateMod, int32 I
return ProcChance;
}
int16 Mob::GetSympatheticSpellProcRate(uint16 spell_id)
{
for (int i = 0; i < EFFECT_COUNT; i++){
if (spells[spell_id].effectid[i] == SE_SympatheticProc)
return spells[spell_id].base[i];
}
return 0;
}
uint16 Mob::GetSympatheticSpellProcID(uint16 spell_id)
{
for (int i = 0; i < EFFECT_COUNT; i++){
if (spells[spell_id].effectid[i] == SE_SympatheticProc)
return spells[spell_id].base2[i];
}
return 0;
}
bool Mob::DoHPToManaCovert(uint16 mana_cost)
{
if (spellbonuses.HPToManaConvert){