mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-12 01:11:29 +00:00
Update to SE_BalanaceMana, SE_BalanceHP to support limit value which caps max mana/hp that can be taken per player.
This commit is contained in:
parent
41b190930f
commit
58175a5442
@ -15,6 +15,7 @@ Kayen: Fix to issue that prevented NPC's from receiving HP Regeneration derived
|
|||||||
Kayen: Fixes and Updates for melee and spell mitigation runes.
|
Kayen: Fixes and Updates for melee and spell mitigation runes.
|
||||||
Kayen: Update to SE_NegateAttack, 'max' value can now set upper limit of damage absorbed. DOT ticks will no longer be absorbed.
|
Kayen: Update to SE_NegateAttack, 'max' value can now set upper limit of damage absorbed. DOT ticks will no longer be absorbed.
|
||||||
Kayen: Implemented SE_Metabolism - Modifies food/drink consumption rates. [Data for AA is already in database]
|
Kayen: Implemented SE_Metabolism - Modifies food/drink consumption rates. [Data for AA is already in database]
|
||||||
|
Kayen: Update to SE_BalanaceMana, SE_BalanceHP to support limit value which caps max mana/hp that can be taken per player.
|
||||||
|
|
||||||
== 06/13/2014 ==
|
== 06/13/2014 ==
|
||||||
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
|
Kayen: For table 'npc_spell_effects_entries' setting se_max for damage shield effects (59) will now determine the DS Type (ie burning)
|
||||||
|
|||||||
@ -8137,7 +8137,7 @@ void Client::Consume(const Item_Struct *item, uint8 type, int16 slot, bool auto_
|
|||||||
int16 metabolism_bonus = spellbonuses.Metabolism + itembonuses.Metabolism + aabonuses.Metabolism;
|
int16 metabolism_bonus = spellbonuses.Metabolism + itembonuses.Metabolism + aabonuses.Metabolism;
|
||||||
|
|
||||||
if (metabolism_bonus)
|
if (metabolism_bonus)
|
||||||
cons_mod = cons_mod * metabolism_bonus* RuleI(Character, ConsumptionMultiplier) / 10000;
|
cons_mod = cons_mod * metabolism_bonus * RuleI(Character, ConsumptionMultiplier) / 10000;
|
||||||
else
|
else
|
||||||
cons_mod = cons_mod * RuleI(Character, ConsumptionMultiplier) / 100;
|
cons_mod = cons_mod * RuleI(Character, ConsumptionMultiplier) / 100;
|
||||||
|
|
||||||
|
|||||||
@ -1095,7 +1095,7 @@ void Group::HealGroup(uint32 heal_amt, Mob* caster, int32 range)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Group::BalanceHP(int32 penalty, int32 range, Mob* caster)
|
void Group::BalanceHP(int32 penalty, int32 range, Mob* caster, int32 limit)
|
||||||
{
|
{
|
||||||
if (!caster)
|
if (!caster)
|
||||||
return;
|
return;
|
||||||
@ -1103,7 +1103,7 @@ void Group::BalanceHP(int32 penalty, int32 range, Mob* caster)
|
|||||||
if (!range)
|
if (!range)
|
||||||
range = 200;
|
range = 200;
|
||||||
|
|
||||||
int dmgtaken = 0, numMem = 0;
|
int dmgtaken = 0, numMem = 0, dmgtaken_tmp = 0;
|
||||||
|
|
||||||
float distance;
|
float distance;
|
||||||
float range2 = range*range;
|
float range2 = range*range;
|
||||||
@ -1114,7 +1114,12 @@ void Group::BalanceHP(int32 penalty, int32 range, Mob* caster)
|
|||||||
if(members[gi]){
|
if(members[gi]){
|
||||||
distance = caster->DistNoRoot(*members[gi]);
|
distance = caster->DistNoRoot(*members[gi]);
|
||||||
if(distance <= range2){
|
if(distance <= range2){
|
||||||
dmgtaken += (members[gi]->GetMaxHP() - members[gi]->GetHP());
|
|
||||||
|
dmgtaken_tmp = members[gi]->GetMaxHP() - members[gi]->GetHP();
|
||||||
|
if (limit && (dmgtaken_tmp > limit))
|
||||||
|
dmgtaken_tmp = limit;
|
||||||
|
|
||||||
|
dmgtaken += (dmgtaken_tmp);
|
||||||
numMem += 1;
|
numMem += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1140,7 +1145,7 @@ void Group::BalanceHP(int32 penalty, int32 range, Mob* caster)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Group::BalanceMana(int32 penalty, int32 range, Mob* caster)
|
void Group::BalanceMana(int32 penalty, int32 range, Mob* caster, int32 limit)
|
||||||
{
|
{
|
||||||
if (!caster)
|
if (!caster)
|
||||||
return;
|
return;
|
||||||
@ -1151,14 +1156,19 @@ void Group::BalanceMana(int32 penalty, int32 range, Mob* caster)
|
|||||||
float distance;
|
float distance;
|
||||||
float range2 = range*range;
|
float range2 = range*range;
|
||||||
|
|
||||||
int manataken = 0, numMem = 0;
|
int manataken = 0, numMem = 0, manataken_tmp = 0;
|
||||||
unsigned int gi = 0;
|
unsigned int gi = 0;
|
||||||
for(; gi < MAX_GROUP_MEMBERS; gi++)
|
for(; gi < MAX_GROUP_MEMBERS; gi++)
|
||||||
{
|
{
|
||||||
if(members[gi]){
|
if(members[gi]){
|
||||||
distance = caster->DistNoRoot(*members[gi]);
|
distance = caster->DistNoRoot(*members[gi]);
|
||||||
if(distance <= range2){
|
if(distance <= range2){
|
||||||
manataken += (members[gi]->GetMaxMana() - members[gi]->GetMana());
|
|
||||||
|
manataken_tmp = members[gi]->GetMaxMana() - members[gi]->GetMana();
|
||||||
|
if (limit && (manataken_tmp > limit))
|
||||||
|
manataken_tmp = limit;
|
||||||
|
|
||||||
|
manataken += (manataken_tmp);
|
||||||
numMem += 1;
|
numMem += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1166,6 +1176,10 @@ void Group::BalanceMana(int32 penalty, int32 range, Mob* caster)
|
|||||||
|
|
||||||
manataken += manataken * penalty / 100;
|
manataken += manataken * penalty / 100;
|
||||||
manataken /= numMem;
|
manataken /= numMem;
|
||||||
|
|
||||||
|
if (limit && (manataken > limit))
|
||||||
|
manataken = limit;
|
||||||
|
|
||||||
for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++)
|
for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++)
|
||||||
{
|
{
|
||||||
if(members[gi]){
|
if(members[gi]){
|
||||||
|
|||||||
@ -86,8 +86,8 @@ public:
|
|||||||
uint16 GetAvgLevel();
|
uint16 GetAvgLevel();
|
||||||
bool LearnMembers();
|
bool LearnMembers();
|
||||||
void VerifyGroup();
|
void VerifyGroup();
|
||||||
void BalanceHP(int32 penalty, int32 range = 0, Mob* caster = nullptr);
|
void BalanceHP(int32 penalty, int32 range = 0, Mob* caster = nullptr, int32 limit = 0);
|
||||||
void BalanceMana(int32 penalty, int32 range = 0, Mob* caster = nullptr);
|
void BalanceMana(int32 penalty, int32 range = 0, Mob* caster = nullptr, int32 limit = 0);
|
||||||
void HealGroup(uint32 heal_amt, Mob* caster, int32 range = 0);
|
void HealGroup(uint32 heal_amt, Mob* caster, int32 range = 0);
|
||||||
inline void SetGroupAAs(GroupLeadershipAA_Struct *From) { memcpy(&LeaderAbilities, From, sizeof(GroupLeadershipAA_Struct)); }
|
inline void SetGroupAAs(GroupLeadershipAA_Struct *From) { memcpy(&LeaderAbilities, From, sizeof(GroupLeadershipAA_Struct)); }
|
||||||
inline void GetGroupAAs(GroupLeadershipAA_Struct *Into) { memcpy(Into, &LeaderAbilities, sizeof(GroupLeadershipAA_Struct)); }
|
inline void GetGroupAAs(GroupLeadershipAA_Struct *Into) { memcpy(Into, &LeaderAbilities, sizeof(GroupLeadershipAA_Struct)); }
|
||||||
|
|||||||
@ -504,7 +504,7 @@ void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, int32 range)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster, int32 limit)
|
||||||
{
|
{
|
||||||
if (!caster)
|
if (!caster)
|
||||||
return;
|
return;
|
||||||
@ -512,7 +512,7 @@ void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
if (!range)
|
if (!range)
|
||||||
range = 200;
|
range = 200;
|
||||||
|
|
||||||
int dmgtaken = 0, numMem = 0;
|
int dmgtaken = 0, numMem = 0, dmgtaken_tmp = 0;
|
||||||
int gi = 0;
|
int gi = 0;
|
||||||
|
|
||||||
float distance;
|
float distance;
|
||||||
@ -525,7 +525,12 @@ void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
{
|
{
|
||||||
distance = caster->DistNoRoot(*members[gi].member);
|
distance = caster->DistNoRoot(*members[gi].member);
|
||||||
if(distance <= range2){
|
if(distance <= range2){
|
||||||
dmgtaken += (members[gi].member->GetMaxHP() - members[gi].member->GetHP());
|
|
||||||
|
dmgtaken_tmp = members[gi].member->GetMaxHP() - members[gi].member->GetHP();
|
||||||
|
if (limit && (dmgtaken_tmp > limit))
|
||||||
|
dmgtaken_tmp = limit;
|
||||||
|
|
||||||
|
dmgtaken += (dmgtaken_tmp);
|
||||||
numMem += 1;
|
numMem += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -555,7 +560,7 @@ void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster, int32 limit)
|
||||||
{
|
{
|
||||||
if (!caster)
|
if (!caster)
|
||||||
return;
|
return;
|
||||||
@ -566,7 +571,7 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
float distance;
|
float distance;
|
||||||
float range2 = range*range;
|
float range2 = range*range;
|
||||||
|
|
||||||
int manataken = 0, numMem = 0;
|
int manataken = 0, numMem = 0, manataken_tmp = 0;
|
||||||
int gi = 0;
|
int gi = 0;
|
||||||
for(; gi < MAX_RAID_MEMBERS; gi++)
|
for(; gi < MAX_RAID_MEMBERS; gi++)
|
||||||
{
|
{
|
||||||
@ -575,7 +580,12 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
{
|
{
|
||||||
distance = caster->DistNoRoot(*members[gi].member);
|
distance = caster->DistNoRoot(*members[gi].member);
|
||||||
if(distance <= range2){
|
if(distance <= range2){
|
||||||
manataken += (members[gi].member->GetMaxMana() - members[gi].member->GetMana());
|
|
||||||
|
manataken_tmp = members[gi].member->GetMaxMana() - members[gi].member->GetMana();
|
||||||
|
if (limit && (manataken_tmp > limit))
|
||||||
|
manataken_tmp = limit;
|
||||||
|
|
||||||
|
manataken += (manataken_tmp);
|
||||||
numMem += 1;
|
numMem += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -584,6 +594,7 @@ void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
|||||||
|
|
||||||
manataken += manataken * penalty / 100;
|
manataken += manataken * penalty / 100;
|
||||||
manataken /= numMem;
|
manataken /= numMem;
|
||||||
|
|
||||||
for(gi = 0; gi < MAX_RAID_MEMBERS; gi++)
|
for(gi = 0; gi < MAX_RAID_MEMBERS; gi++)
|
||||||
{
|
{
|
||||||
if(members[gi].member){
|
if(members[gi].member){
|
||||||
|
|||||||
@ -147,8 +147,8 @@ public:
|
|||||||
void CastGroupSpell(Mob* caster,uint16 spellid, uint32 gid);
|
void CastGroupSpell(Mob* caster,uint16 spellid, uint32 gid);
|
||||||
void SplitExp(uint32 exp, Mob* other);
|
void SplitExp(uint32 exp, Mob* other);
|
||||||
uint32 GetTotalRaidDamage(Mob* other);
|
uint32 GetTotalRaidDamage(Mob* other);
|
||||||
void BalanceHP(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr);
|
void BalanceHP(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr, int32 limit = 0);
|
||||||
void BalanceMana(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr);
|
void BalanceMana(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr, int32 limit = 0);
|
||||||
void HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, int32 range = 0);
|
void HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, int32 range = 0);
|
||||||
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Client *splitter = nullptr);
|
void SplitMoney(uint32 copper, uint32 silver, uint32 gold, uint32 platinum, Client *splitter = nullptr);
|
||||||
void GroupBardPulse(Mob* caster, uint16 spellid, uint32 gid);
|
void GroupBardPulse(Mob* caster, uint16 spellid, uint32 gid);
|
||||||
|
|||||||
@ -2393,7 +2393,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
|||||||
gid = r->GetGroup(caster->GetName());
|
gid = r->GetGroup(caster->GetName());
|
||||||
if(gid < 11)
|
if(gid < 11)
|
||||||
{
|
{
|
||||||
r->BalanceHP(spell.base[i], gid, spell.range, caster);
|
r->BalanceHP(spell.base[i], gid, spell.range, caster, spell.base2[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2403,7 +2403,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
|||||||
if(!g)
|
if(!g)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
g->BalanceHP(spell.base[i], spell.range, caster);
|
g->BalanceHP(spell.base[i], spell.range, caster, spell.base2[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2421,7 +2421,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
|||||||
gid = r->GetGroup(caster->GetName());
|
gid = r->GetGroup(caster->GetName());
|
||||||
if(gid < 11)
|
if(gid < 11)
|
||||||
{
|
{
|
||||||
r->BalanceMana(spell.base[i], gid, spell.range, caster);
|
r->BalanceMana(spell.base[i], gid, spell.range, caster, spell.base2[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2431,7 +2431,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
|||||||
if(!g)
|
if(!g)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
g->BalanceMana(spell.base[i], spell.range, caster);
|
g->BalanceMana(spell.base[i], spell.range, caster, spell.base2[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user