Revert custom changes that came with my code load

This commit is contained in:
SecretsOTheP 2015-05-25 12:39:36 -04:00
parent 788959a5e2
commit 5c4389effb
2 changed files with 95 additions and 148 deletions

View File

@ -335,8 +335,8 @@ void Client::AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAu
} }
//FatherNitwit: New style haste, shields, and regens //FatherNitwit: New style haste, shields, and regens
if((int32)item->Haste > 0) { if(newbon->haste < (int32)item->Haste) {
newbon->haste += item->Haste; newbon->haste = item->Haste;
} }
if(item->Regen > 0) if(item->Regen > 0)
newbon->HPRegen += item->Regen; newbon->HPRegen += item->Regen;
@ -390,10 +390,10 @@ void Client::AddItemBonuses(const ItemInst *inst, StatBonuses* newbon, bool isAu
newbon->HitChance += item->Accuracy; newbon->HitChance += item->Accuracy;
} }
if(item->CombatEffects > 0) { if(item->CombatEffects > 0) {
if((newbon->MeleeDamage + item->CombatEffects) > RuleI(Character, ItemCombatEffectsCap)) if((newbon->ProcChance + item->CombatEffects) > RuleI(Character, ItemCombatEffectsCap))
newbon->MeleeDamage = RuleI(Character, ItemCombatEffectsCap); newbon->ProcChance = RuleI(Character, ItemCombatEffectsCap);
else else
newbon->MeleeDamage += item->CombatEffects; newbon->ProcChance += item->CombatEffects;
} }
if(item->DotShielding > 0) { if(item->DotShielding > 0) {
if((newbon->DoTShielding + item->DotShielding) > RuleI(Character, ItemDoTShieldingCap)) if((newbon->DoTShielding + item->DotShielding) > RuleI(Character, ItemDoTShieldingCap))
@ -1449,7 +1449,7 @@ void Mob::CalcSpellBonuses(StatBonuses* newbon)
int buff_count = GetMaxTotalSlots(); int buff_count = GetMaxTotalSlots();
for(i = 0; i < buff_count; i++) { for(i = 0; i < buff_count; i++) {
if(buffs[i].spellid != SPELL_UNKNOWN){ if(buffs[i].spellid != SPELL_UNKNOWN){
ApplySpellsBonuses(buffs[i].spellid, buffs[i].casterlevel, newbon, buffs[i].casterid, 0, buffs[i].ticsremaining,i); ApplySpellsBonuses(buffs[i].spellid, buffs[i].casterlevel, newbon, buffs[i].casterid, 0, buffs[i].ticsremaining, i, buffs[i].instrument_mod);
if (buffs[i].numhits > 0) if (buffs[i].numhits > 0)
Numhits(true); Numhits(true);
@ -1472,8 +1472,9 @@ void Mob::CalcSpellBonuses(StatBonuses* newbon)
if (GetClass() == BARD) newbon->ManaRegen = 0; // Bards do not get mana regen from spells. if (GetClass() == BARD) newbon->ManaRegen = 0; // Bards do not get mana regen from spells.
} }
void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* new_bonus, uint16 casterId, uint8 WornType, uint32 ticsremaining, int buffslot, void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses *new_bonus, uint16 casterId,
bool IsAISpellEffect, uint16 effect_id, int32 se_base, int32 se_limit, int32 se_max) uint8 WornType, int32 ticsremaining, int buffslot, int instrument_mod,
bool IsAISpellEffect, uint16 effect_id, int32 se_base, int32 se_limit, int32 se_max)
{ {
int i, effect_value, base2, max, effectid; int i, effect_value, base2, max, effectid;
bool AdditiveWornBonus = false; bool AdditiveWornBonus = false;
@ -1511,7 +1512,7 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
AdditiveWornBonus = true; AdditiveWornBonus = true;
effectid = spells[spell_id].effectid[i]; effectid = spells[spell_id].effectid[i];
effect_value = CalcSpellEffectValue(spell_id, i, casterlevel, caster, ticsremaining); effect_value = CalcSpellEffectValue(spell_id, i, casterlevel, instrument_mod, caster, ticsremaining);
base2 = spells[spell_id].base2[i]; base2 = spells[spell_id].base2[i];
max = spells[spell_id].max[i]; max = spells[spell_id].max[i];
} }
@ -1560,100 +1561,49 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
case SE_AttackSpeed: case SE_AttackSpeed:
{ {
if ((effect_value - 100) > 0) { // Haste
if (AdditiveWornBonus) { if (new_bonus->haste < 0) break; // Slowed - Don't apply haste
if ((effect_value - 100) > 0) { // Haste if ((effect_value - 100) > new_bonus->haste) {
if (new_bonus->haste < 0) break; // Slowed - Don't apply haste new_bonus->haste = effect_value - 100;
if ((effect_value - 100) > new_bonus->haste) {
new_bonus->haste += effect_value - 100;
}
}
else if ((effect_value - 100) < 0) { // Slow
int real_slow_value = (100 - effect_value) * -1;
real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (real_slow_value < new_bonus->haste)
new_bonus->haste += real_slow_value;
} }
} }
else else if ((effect_value - 100) < 0) { // Slow
{ int real_slow_value = (100 - effect_value) * -1;
if ((effect_value - 100) > 0) { // Haste real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (new_bonus->haste < 0) break; // Slowed - Don't apply haste if (real_slow_value < new_bonus->haste)
if ((effect_value - 100) > new_bonus->haste) { new_bonus->haste = real_slow_value;
new_bonus->haste = effect_value - 100;
}
}
else if ((effect_value - 100) < 0) { // Slow
int real_slow_value = (100 - effect_value) * -1;
real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (real_slow_value < new_bonus->haste)
new_bonus->haste = real_slow_value;
}
} }
break; break;
} }
case SE_AttackSpeed2: case SE_AttackSpeed2:
{ {
if (AdditiveWornBonus) { if ((effect_value - 100) > 0) { // Haste V2 - Stacks with V1 but does not Overcap
if ((effect_value - 100) > 0) { // Haste if (new_bonus->hastetype2 < 0) break; //Slowed - Don't apply haste2
if (new_bonus->hastetype2 < 0) break; // Slowed - Don't apply haste if ((effect_value - 100) > new_bonus->hastetype2) {
if ((effect_value - 100) > new_bonus->hastetype2) { new_bonus->hastetype2 = effect_value - 100;
new_bonus->hastetype2 += effect_value - 100;
}
}
else if ((effect_value - 100) < 0) { // Slow
int real_slow_value = (100 - effect_value) * -1;
real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (real_slow_value < new_bonus->hastetype2)
new_bonus->hastetype2 += real_slow_value;
} }
} }
else else if ((effect_value - 100) < 0) { // Slow
{ int real_slow_value = (100 - effect_value) * -1;
if ((effect_value - 100) > 0) { // Haste real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (new_bonus->hastetype2 < 0) break; // Slowed - Don't apply haste if (real_slow_value < new_bonus->hastetype2)
if ((effect_value - 100) > new_bonus->hastetype2) { new_bonus->hastetype2 = real_slow_value;
new_bonus->hastetype2 = effect_value - 100;
}
}
else if ((effect_value - 100) < 0) { // Slow
int real_slow_value = (100 - effect_value) * -1;
real_slow_value -= ((real_slow_value * GetSlowMitigation()/100));
if (real_slow_value < new_bonus->hastetype2)
new_bonus->hastetype2 = real_slow_value;
}
} }
break; break;
} }
case SE_AttackSpeed3: case SE_AttackSpeed3:
{ {
if (AdditiveWornBonus) { if (effect_value < 0){ //Slow
if (effect_value < 0){ //Slow effect_value -= ((effect_value * GetSlowMitigation()/100));
effect_value -= ((effect_value * GetSlowMitigation()/100)); if (effect_value < new_bonus->hastetype3)
if (effect_value < new_bonus->hastetype3) new_bonus->hastetype3 = effect_value;
new_bonus->hastetype3 += effect_value;
}
else if (effect_value > 0) { // Haste V3 - Stacks and Overcaps
if (effect_value > new_bonus->hastetype3) {
new_bonus->hastetype3 += effect_value;
}
}
} }
else
{
if (effect_value < 0){ //Slow
effect_value -= ((effect_value * GetSlowMitigation()/100));
if (effect_value < new_bonus->hastetype3)
new_bonus->hastetype3 = effect_value;
}
else if (effect_value > 0) { // Haste V3 - Stacks and Overcaps else if (effect_value > 0) { // Haste V3 - Stacks and Overcaps
if (effect_value > new_bonus->hastetype3) { if (effect_value > new_bonus->hastetype3) {
new_bonus->hastetype3 = effect_value; new_bonus->hastetype3 = effect_value;
}
} }
} }
break; break;
@ -1668,21 +1618,13 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
if (effect_value < 0) //A few spells use negative values(Descriptions all indicate it should be a slow) if (effect_value < 0) //A few spells use negative values(Descriptions all indicate it should be a slow)
effect_value = effect_value * -1; effect_value = effect_value * -1;
if (AdditiveWornBonus) {
if (effect_value > 0 && effect_value > new_bonus->inhibitmelee) { if (effect_value > 0 && effect_value > new_bonus->inhibitmelee) {
effect_value -= ((effect_value * GetSlowMitigation()/100)); effect_value -= ((effect_value * GetSlowMitigation()/100));
if (effect_value > new_bonus->inhibitmelee) if (effect_value > new_bonus->inhibitmelee)
new_bonus->inhibitmelee += effect_value; new_bonus->inhibitmelee = effect_value;
}
}
else
{
if (effect_value > 0 && effect_value > new_bonus->inhibitmelee) {
effect_value -= ((effect_value * GetSlowMitigation()/100));
if (effect_value > new_bonus->inhibitmelee)
new_bonus->inhibitmelee = effect_value;
}
} }
break; break;
} }
@ -3167,7 +3109,7 @@ void NPC::CalcItemBonuses(StatBonuses *newbon)
newbon->HitChance += cur->Accuracy; newbon->HitChance += cur->Accuracy;
} }
if(cur->CombatEffects > 0) { if(cur->CombatEffects > 0) {
newbon->MeleeDamage += cur->CombatEffects; newbon->ProcChance += cur->CombatEffects;
} }
if (cur->Worn.Effect>0 && (cur->Worn.Type == ET_WornEffect)) { // latent effects if (cur->Worn.Effect>0 && (cur->Worn.Type == ET_WornEffect)) { // latent effects
ApplySpellsBonuses(cur->Worn.Effect, cur->Worn.Level, newbon, 0, cur->Worn.Type); ApplySpellsBonuses(cur->Worn.Effect, cur->Worn.Level, newbon, 0, cur->Worn.Type);

View File

@ -138,7 +138,7 @@ int32 Mob::GetActSpellDamage(uint16 spell_id, int32 value, Mob* target) {
value -= GetFocusEffect(focusFcDamageAmt, spell_id); value -= GetFocusEffect(focusFcDamageAmt, spell_id);
if(itembonuses.SpellDmg) if(itembonuses.SpellDmg && spells[spell_id].classes[(GetClass()%16) - 1] >= GetLevel() - 5)
value -= GetExtraSpellAmt(spell_id, itembonuses.SpellDmg, value); value -= GetExtraSpellAmt(spell_id, itembonuses.SpellDmg, value);
if (IsNPC() && CastToNPC()->GetSpellScale()) if (IsNPC() && CastToNPC()->GetSpellScale())
@ -200,11 +200,6 @@ int32 Mob::GetActDoTDamage(uint16 spell_id, int32 value, Mob* target) {
extra_dmg /= duration; extra_dmg /= duration;
} }
//Sanctuary Custom: Spelldmg per tick
if(itembonuses.SpellDmg)
value -= GetExtraSpellAmt(spell_id, itembonuses.SpellDmg / 6, value); //per tick
value -= extra_dmg; value -= extra_dmg;
} }
@ -216,6 +211,23 @@ int32 Mob::GetActDoTDamage(uint16 spell_id, int32 value, Mob* target) {
int32 Mob::GetExtraSpellAmt(uint16 spell_id, int32 extra_spell_amt, int32 base_spell_dmg) int32 Mob::GetExtraSpellAmt(uint16 spell_id, int32 extra_spell_amt, int32 base_spell_dmg)
{ {
int total_cast_time = 0;
if (spells[spell_id].recast_time >= spells[spell_id].recovery_time)
total_cast_time = spells[spell_id].recast_time + spells[spell_id].cast_time;
else
total_cast_time = spells[spell_id].recovery_time + spells[spell_id].cast_time;
if (total_cast_time > 0 && total_cast_time <= 2500)
extra_spell_amt = extra_spell_amt*25/100;
else if (total_cast_time > 2500 && total_cast_time < 7000)
extra_spell_amt = extra_spell_amt*(167*((total_cast_time - 1000)/1000)) / 1000;
else
extra_spell_amt = extra_spell_amt * total_cast_time / 7000;
if(extra_spell_amt*2 < base_spell_dmg)
return 0;
return extra_spell_amt; return extra_spell_amt;
} }
@ -258,7 +270,7 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) {
value += GetFocusEffect(focusFcHealAmt, spell_id); value += GetFocusEffect(focusFcHealAmt, spell_id);
value += target->GetFocusIncoming(focusFcHealAmtIncoming, SE_FcHealAmtIncoming, this, spell_id); value += target->GetFocusIncoming(focusFcHealAmtIncoming, SE_FcHealAmtIncoming, this, spell_id);
if(itembonuses.HealAmt) if(itembonuses.HealAmt && spells[spell_id].classes[(GetClass()%16) - 1] >= GetLevel() - 5)
value += GetExtraSpellAmt(spell_id, itembonuses.HealAmt, value) * modifier; value += GetExtraSpellAmt(spell_id, itembonuses.HealAmt, value) * modifier;
value += value*target->GetHealRate(spell_id, this)/100; value += value*target->GetHealRate(spell_id, this)/100;
@ -289,9 +301,6 @@ int32 Mob::GetActSpellHealing(uint16 spell_id, int32 value, Mob* target) {
if(chance && zone->random.Roll(chance)) if(chance && zone->random.Roll(chance))
value *= 2; value *= 2;
if(itembonuses.HealAmt)
value += GetExtraSpellAmt(spell_id, itembonuses.HealAmt / 6, value) * modifier;
} }
if (IsNPC() && CastToNPC()->GetHealScale()) if (IsNPC() && CastToNPC()->GetHealScale())
@ -412,14 +421,10 @@ int32 Mob::GetActSpellDuration(uint16 spell_id, int32 duration)
int tic_inc = 0; int tic_inc = 0;
tic_inc = GetFocusEffect(focusSpellDurByTic, spell_id); tic_inc = GetFocusEffect(focusSpellDurByTic, spell_id);
// Only need this for clients, since the change was for bard songs, I assume we should keep non bard songs getting +1 // unsure on the exact details, but bard songs that don't cost mana at some point get an extra tick, 60 for now
// However if its bard or not and is mez, charm or fear, we need to add 1 so that client is in sync // a level 53 bard reported getting 2 tics
if (IsClient() && !(IsShortDurationBuff(spell_id) && IsBardSong(spell_id)) || if (IsShortDurationBuff(spell_id) && IsBardSong(spell_id) && spells[spell_id].mana == 0 && GetClass() == BARD && GetLevel() > 60)
IsFearSpell(spell_id) || tic_inc++;
IsCharmSpell(spell_id) ||
IsMezSpell(spell_id) ||
IsBlindSpell(spell_id))
tic_inc += 1;
return (((duration * increase) / 100) + tic_inc); return (((duration * increase) / 100) + tic_inc);
} }