mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-30 15:22:25 +00:00
Update for spell effect SE_LimitHPPercent, SE_LimitManaPercent, SE_LimitEndPercent
to utilize limit values. These effects cap your hp/end/mana at a set percent (base) OR flat value (limit) which is ever is lower.
This commit is contained in:
parent
fc79521dd3
commit
87ecdd38e5
@ -2151,28 +2151,40 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
|||||||
|
|
||||||
case SE_LimitHPPercent:
|
case SE_LimitHPPercent:
|
||||||
{
|
{
|
||||||
if(newbon->HPPercCap != 0 && newbon->HPPercCap > effect_value)
|
if(newbon->HPPercCap[0] != 0 && newbon->HPPercCap[0] > effect_value){
|
||||||
newbon->HPPercCap = effect_value;
|
newbon->HPPercCap[0] = effect_value;
|
||||||
else if(newbon->HPPercCap == 0)
|
newbon->HPPercCap[1] = base2;
|
||||||
newbon->HPPercCap = effect_value;
|
}
|
||||||
|
else if(newbon->HPPercCap[0] == 0){
|
||||||
|
newbon->HPPercCap[0] = effect_value;
|
||||||
|
newbon->HPPercCap[1] = base2;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SE_LimitManaPercent:
|
case SE_LimitManaPercent:
|
||||||
{
|
{
|
||||||
if(newbon->ManaPercCap != 0 && newbon->ManaPercCap > effect_value)
|
if(newbon->ManaPercCap[0] != 0 && newbon->ManaPercCap[0] > effect_value){
|
||||||
newbon->ManaPercCap = effect_value;
|
newbon->ManaPercCap[0] = effect_value;
|
||||||
else if(newbon->ManaPercCap == 0)
|
newbon->ManaPercCap[1] = base2;
|
||||||
newbon->ManaPercCap = effect_value;
|
}
|
||||||
|
else if(newbon->ManaPercCap[0] == 0) {
|
||||||
|
newbon->ManaPercCap[0] = effect_value;
|
||||||
|
newbon->ManaPercCap[1] = base2;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SE_LimitEndPercent:
|
case SE_LimitEndPercent:
|
||||||
{
|
{
|
||||||
if(newbon->EndPercCap != 0 && newbon->EndPercCap > effect_value)
|
if(newbon->EndPercCap[0] != 0 && newbon->EndPercCap[0] > effect_value) {
|
||||||
newbon->EndPercCap = effect_value;
|
newbon->EndPercCap[0] = effect_value;
|
||||||
else if(newbon->EndPercCap == 0)
|
newbon->EndPercCap[1] = base2;
|
||||||
newbon->EndPercCap = effect_value;
|
}
|
||||||
|
|
||||||
|
else if(newbon->EndPercCap[0] == 0){
|
||||||
|
newbon->EndPercCap[0] = effect_value;
|
||||||
|
newbon->EndPercCap[1] = base2;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10649,10 +10649,10 @@ int32 Bot::CalcMaxHP() {
|
|||||||
if (cur_hp > max_hp)
|
if (cur_hp > max_hp)
|
||||||
cur_hp = max_hp;
|
cur_hp = max_hp;
|
||||||
|
|
||||||
int hp_perc_cap = spellbonuses.HPPercCap;
|
int hp_perc_cap = spellbonuses.HPPercCap[0];
|
||||||
if(hp_perc_cap) {
|
if(hp_perc_cap) {
|
||||||
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
||||||
if (cur_hp > curHP_cap)
|
if (cur_hp > curHP_cap || (spellbonuses.HPPercCap[1] && cur_hp > spellbonuses.HPPercCap[1]))
|
||||||
cur_hp = curHP_cap;
|
cur_hp = curHP_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -10671,10 +10671,10 @@ int32 Bot::CalcMaxEndurance()
|
|||||||
cur_end = max_end;
|
cur_end = max_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
int end_perc_cap = spellbonuses.EndPercCap;
|
int end_perc_cap = spellbonuses.EndPercCap[0];
|
||||||
if(end_perc_cap) {
|
if(end_perc_cap) {
|
||||||
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
||||||
if (cur_end > curEnd_cap)
|
if (cur_end > curEnd_cap || (spellbonuses.EndPercCap[1] && cur_end > spellbonuses.EndPercCap[1]))
|
||||||
cur_end = curEnd_cap;
|
cur_end = curEnd_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -255,10 +255,10 @@ int32 Client::CalcMaxHP() {
|
|||||||
if (cur_hp > max_hp)
|
if (cur_hp > max_hp)
|
||||||
cur_hp = max_hp;
|
cur_hp = max_hp;
|
||||||
|
|
||||||
int hp_perc_cap = spellbonuses.HPPercCap;
|
int hp_perc_cap = spellbonuses.HPPercCap[0];
|
||||||
if(hp_perc_cap) {
|
if(hp_perc_cap) {
|
||||||
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
||||||
if (cur_hp > curHP_cap)
|
if (cur_hp > curHP_cap || (spellbonuses.HPPercCap[1] && cur_hp > spellbonuses.HPPercCap[1]))
|
||||||
cur_hp = curHP_cap;
|
cur_hp = curHP_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -950,10 +950,10 @@ int32 Client::CalcMaxMana()
|
|||||||
cur_mana = max_mana;
|
cur_mana = max_mana;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mana_perc_cap = spellbonuses.ManaPercCap;
|
int mana_perc_cap = spellbonuses.ManaPercCap[0];
|
||||||
if(mana_perc_cap) {
|
if(mana_perc_cap) {
|
||||||
int curMana_cap = (max_mana * mana_perc_cap) / 100;
|
int curMana_cap = (max_mana * mana_perc_cap) / 100;
|
||||||
if (cur_mana > curMana_cap)
|
if (cur_mana > curMana_cap || (spellbonuses.ManaPercCap[1] && cur_mana > spellbonuses.ManaPercCap[1]))
|
||||||
cur_mana = curMana_cap;
|
cur_mana = curMana_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1890,10 +1890,10 @@ void Client::CalcMaxEndurance()
|
|||||||
cur_end = max_end;
|
cur_end = max_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
int end_perc_cap = spellbonuses.EndPercCap;
|
int end_perc_cap = spellbonuses.EndPercCap[0];
|
||||||
if(end_perc_cap) {
|
if(end_perc_cap) {
|
||||||
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
||||||
if (cur_end > curEnd_cap)
|
if (cur_end > curEnd_cap || (spellbonuses.EndPercCap[1] && cur_end > spellbonuses.EndPercCap[1]))
|
||||||
cur_end = curEnd_cap;
|
cur_end = curEnd_cap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -310,9 +310,9 @@ struct StatBonuses {
|
|||||||
int16 IncreaseBlockChance; // overall block chance modifier
|
int16 IncreaseBlockChance; // overall block chance modifier
|
||||||
uint16 PersistantCasting; // chance to continue casting through a stun
|
uint16 PersistantCasting; // chance to continue casting through a stun
|
||||||
int XPRateMod; //i
|
int XPRateMod; //i
|
||||||
int HPPercCap; //Spell effect that limits you to being healed/regening beyond a % of your max
|
int HPPercCap[2]; //Spell effect that limits you to being healed/regening beyond a % of your max
|
||||||
int ManaPercCap; // ^^
|
int ManaPercCap[2]; // ^^ 0 = % Cap 1 = Flat Amount Cap
|
||||||
int EndPercCap; // ^^
|
int EndPercCap[2]; // ^^
|
||||||
bool BlockNextSpell; // Indicates whether the client can block a spell or not
|
bool BlockNextSpell; // Indicates whether the client can block a spell or not
|
||||||
//uint16 BlockSpellEffect[EFFECT_COUNT]; // Prevents spells with certain effects from landing on you *no longer used
|
//uint16 BlockSpellEffect[EFFECT_COUNT]; // Prevents spells with certain effects from landing on you *no longer used
|
||||||
bool ImmuneToFlee; // Bypass the fleeing flag
|
bool ImmuneToFlee; // Bypass the fleeing flag
|
||||||
|
|||||||
@ -917,10 +917,10 @@ int32 Merc::CalcMaxHP() {
|
|||||||
if (cur_hp > max_hp)
|
if (cur_hp > max_hp)
|
||||||
cur_hp = max_hp;
|
cur_hp = max_hp;
|
||||||
|
|
||||||
int hp_perc_cap = spellbonuses.HPPercCap;
|
int hp_perc_cap = spellbonuses.HPPercCap[0];
|
||||||
if(hp_perc_cap) {
|
if(hp_perc_cap) {
|
||||||
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
int curHP_cap = (max_hp * hp_perc_cap) / 100;
|
||||||
if (cur_hp > curHP_cap)
|
if (cur_hp > curHP_cap || (spellbonuses.HPPercCap[1] && cur_hp > spellbonuses.HPPercCap[1]))
|
||||||
cur_hp = curHP_cap;
|
cur_hp = curHP_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -959,10 +959,10 @@ int32 Merc::CalcMaxMana()
|
|||||||
cur_mana = max_mana;
|
cur_mana = max_mana;
|
||||||
}
|
}
|
||||||
|
|
||||||
int mana_perc_cap = spellbonuses.ManaPercCap;
|
int mana_perc_cap = spellbonuses.ManaPercCap[0];
|
||||||
if(mana_perc_cap) {
|
if(mana_perc_cap) {
|
||||||
int curMana_cap = (max_mana * mana_perc_cap) / 100;
|
int curMana_cap = (max_mana * mana_perc_cap) / 100;
|
||||||
if (cur_mana > curMana_cap)
|
if (cur_mana > curMana_cap || (spellbonuses.ManaPercCap[1] && cur_mana > spellbonuses.ManaPercCap[1]))
|
||||||
cur_mana = curMana_cap;
|
cur_mana = curMana_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1054,10 +1054,10 @@ void Merc::CalcMaxEndurance()
|
|||||||
cur_end = max_end;
|
cur_end = max_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
int end_perc_cap = spellbonuses.EndPercCap;
|
int end_perc_cap = spellbonuses.EndPercCap[0];
|
||||||
if(end_perc_cap) {
|
if(end_perc_cap) {
|
||||||
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
int curEnd_cap = (max_end * end_perc_cap) / 100;
|
||||||
if (cur_end > curEnd_cap)
|
if (cur_end > curEnd_cap || (spellbonuses.EndPercCap[1] && cur_end > spellbonuses.EndPercCap[1]))
|
||||||
cur_end = curEnd_cap;
|
cur_end = curEnd_cap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user