From 86c1420f6edbb6f422ba325597bfe1bc415f0527 Mon Sep 17 00:00:00 2001 From: "Michael Cook (mackal)" Date: Wed, 17 Sep 2014 00:01:32 -0400 Subject: [PATCH] Fix some effect value calcs and implement more Derived from the client --- changelog.txt | 1 + zone/spell_effects.cpp | 119 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 110 insertions(+), 10 deletions(-) diff --git a/changelog.txt b/changelog.txt index e629bee6c..a006c9a50 100644 --- a/changelog.txt +++ b/changelog.txt @@ -3,6 +3,7 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) == 09/16/2014 == demonstar55: Implement spell formula 137 (BER AA Desperation) Uleat (NateDog): Fix for LoadBuffs() crash when a spell with a non-persistent Illusion effect was loaded. +demonstar55: Fix some effect calcs + implement more (derived from the client) == 09/15/2014 == Kayen: Nimbus effects will now be reapplied after zoning and will be removed when associated buff fades. diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 3af80aacc..f0bc8498b 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -3127,26 +3127,42 @@ snare has both of them negative, yet their range should work the same: case 110: // confirmed 2/6/04 //is there a reason we dont use updownsign here??? - result = ubase + (caster_level / 5); break; + result = ubase + (caster_level / 6); + break; case 111: - result = updownsign * (ubase + 6 * (caster_level - GetMinLevel(spell_id))); break; + result = updownsign * (ubase + 6 * (caster_level - 16)); + break; case 112: - result = updownsign * (ubase + 8 * (caster_level - GetMinLevel(spell_id))); break; + result = updownsign * (ubase + 8 * (caster_level - 24)); + break; case 113: - result = updownsign * (ubase + 10 * (caster_level - GetMinLevel(spell_id))); break; + result = updownsign * (ubase + 10 * (caster_level - 34)); + break; case 114: - result = updownsign * (ubase + 15 * (caster_level - GetMinLevel(spell_id))); break; + result = updownsign * (ubase + 15 * (caster_level - 44)); + break; - //these formula were updated according to lucy 10/16/04 case 115: // this is only in symbol of transal - result = ubase + 6 * (caster_level - GetMinLevel(spell_id)); break; + result = ubase; + if (caster_level > 15) + result += 7 * (caster_level - 15); + break; case 116: // this is only in symbol of ryltan - result = ubase + 8 * (caster_level - GetMinLevel(spell_id)); break; + result = ubase; + if (caster_level > 24) + result += 10 * (caster_level - 24); + break; case 117: // this is only in symbol of pinzarn - result = ubase + 12 * (caster_level - GetMinLevel(spell_id)); break; + result = ubase; + if (caster_level > 34) + result += 13 * (caster_level - 34); + break; case 118: // used in naltron and a few others - result = ubase + 20 * (caster_level - GetMinLevel(spell_id)); break; + result = ubase; + if (caster_level > 44) + result += 20 * (caster_level - 44); + break; case 119: // confirmed 2/6/04 result = ubase + (caster_level / 8); break; @@ -3166,10 +3182,93 @@ snare has both of them negative, yet their range should work the same: result = MakeRandomInt(ubase, abs(max)); break; + case 124: // check sign + result = ubase; + if (caster_level > 50) + result += caster_level - 50; + break; + + case 125: // check sign + result = ubase; + if (caster_level > 50) + result += 2 * (caster_level - 50); + break; + + case 126: // check sign + result = ubase; + if (caster_level > 50) + result += 3 * (caster_level - 50); + break; + + case 127: // check sign + result = ubase; + if (caster_level > 50) + result += 4 * (caster_level - 50); + break; + + case 128: // check sign + result = ubase; + if (caster_level > 50) + result += 5 * (caster_level - 50); + break; + + case 129: // check sign + result = ubase; + if (caster_level > 50) + result += 10 * (caster_level - 50); + break; + + case 130: // check sign + result = ubase; + if (caster_level > 50) + result += 15 * (caster_level - 50); + break; + + case 131: // check sign + result = ubase; + if (caster_level > 50) + result += 20 * (caster_level - 50); + break; + + case 132: // check sign + result = ubase; + if (caster_level > 50) + result += 25 * (caster_level - 50); + break; + case 137: // used in berserker AA desperation result = ubase - (ubase * (GetHPRatio() / 100.0f)); break; + case 138: { // unused on live? + int maxhps = GetMaxHP() / 2; + if (GetHP() <= maxhps) + result = -(ubase * GetHP() / maxhps); + else + result = -ubase; + break; + } + + case 139: // check sign + result = ubase + (caster_level > 30 ? (caster_level - 30) / 2 : 0); + break; + + case 140: // check sign + result = ubase + (caster_level > 30 ? caster_level - 30 : 0); + break; + + case 141: // check sign + result = ubase + (caster_level > 30 ? (3 * caster_level - 90) / 2 : 0); + break; + + case 142: // check sign + result = ubase + (caster_level > 30 ? 2 * caster_level - 60 : 0); + break; + + case 143: // check sign + result = ubase + (3 * caster_level / 4); + break; + //these are used in stacking effects... formula unknown case 201: case 203: