mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-19 12:48:20 +00:00
DoT critcal fix
Range check on DivA type effects
This commit is contained in:
+1
-1
@@ -167,7 +167,7 @@ int32 Client::GetActDoTDamage(uint16 spell_id, int32 value, Mob* target) {
|
||||
|
||||
if (chance > 0 && (MakeRandomInt(1, 100) <= chance)) {
|
||||
|
||||
int32 ratio = 100;
|
||||
int32 ratio = 200;
|
||||
ratio += itembonuses.DotCritDmgIncrease + spellbonuses.DotCritDmgIncrease + aabonuses.DotCritDmgIncrease;
|
||||
|
||||
value = value_BaseEffect*ratio/100;
|
||||
|
||||
+71
-28
@@ -1057,17 +1057,27 @@ void Client::LeaveGroup() {
|
||||
isgrouped = false;
|
||||
}
|
||||
|
||||
void Group::HealGroup(uint32 heal_amt, Mob* caster)
|
||||
void Group::HealGroup(uint32 heal_amt, Mob* caster, int32 range)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
|
||||
int numMem = 0;
|
||||
unsigned int gi = 0;
|
||||
for(; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
numMem += 1;
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1075,23 +1085,38 @@ void Group::HealGroup(uint32 heal_amt, Mob* caster)
|
||||
for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
//members[gi]->SetHP(members[gi]->GetHP() + heal_amt);
|
||||
members[gi]->HealDamage(heal_amt, caster);
|
||||
members[gi]->SendHPUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
members[gi]->HealDamage(heal_amt, caster);
|
||||
members[gi]->SendHPUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Group::BalanceHP(int32 penalty)
|
||||
void Group::BalanceHP(int32 penalty, int32 range, Mob* caster)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
int dmgtaken = 0, numMem = 0;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
unsigned int gi = 0;
|
||||
for(; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
dmgtaken += (members[gi]->GetMaxHP() - members[gi]->GetHP());
|
||||
numMem += 1;
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
dmgtaken += (members[gi]->GetMaxHP() - members[gi]->GetHP());
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1100,27 +1125,42 @@ void Group::BalanceHP(int32 penalty)
|
||||
for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
if((members[gi]->GetMaxHP() - dmgtaken) < 1){ //this way the ability will never kill someone
|
||||
members[gi]->SetHP(1); //but it will come darn close
|
||||
members[gi]->SendHPUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi]->SetHP(members[gi]->GetMaxHP() - dmgtaken);
|
||||
members[gi]->SendHPUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
if((members[gi]->GetMaxHP() - dmgtaken) < 1){ //this way the ability will never kill someone
|
||||
members[gi]->SetHP(1); //but it will come darn close
|
||||
members[gi]->SendHPUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi]->SetHP(members[gi]->GetMaxHP() - dmgtaken);
|
||||
members[gi]->SendHPUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Group::BalanceMana(int32 penalty)
|
||||
void Group::BalanceMana(int32 penalty, int32 range, Mob* caster)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
int manataken = 0, numMem = 0;
|
||||
unsigned int gi = 0;
|
||||
for(; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
manataken += (members[gi]->GetMaxMana() - members[gi]->GetMana());
|
||||
numMem += 1;
|
||||
if(members[gi]){
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
manataken += (members[gi]->GetMaxMana() - members[gi]->GetMana());
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1129,15 +1169,18 @@ void Group::BalanceMana(int32 penalty)
|
||||
for(gi = 0; gi < MAX_GROUP_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi]){
|
||||
if((members[gi]->GetMaxMana() - manataken) < 1){
|
||||
members[gi]->SetMana(1);
|
||||
if (members[gi]->IsClient())
|
||||
members[gi]->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi]->SetMana(members[gi]->GetMaxMana() - manataken);
|
||||
if (members[gi]->IsClient())
|
||||
members[gi]->CastToClient()->SendManaUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi]);
|
||||
if(distance <= range2){
|
||||
if((members[gi]->GetMaxMana() - manataken) < 1){
|
||||
members[gi]->SetMana(1);
|
||||
if (members[gi]->IsClient())
|
||||
members[gi]->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi]->SetMana(members[gi]->GetMaxMana() - manataken);
|
||||
if (members[gi]->IsClient())
|
||||
members[gi]->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -86,9 +86,9 @@ public:
|
||||
uint16 GetAvgLevel();
|
||||
bool LearnMembers();
|
||||
void VerifyGroup();
|
||||
void BalanceHP(int32 penalty);
|
||||
void BalanceMana(int32 penalty);
|
||||
void HealGroup(uint32 heal_amt, Mob* caster);
|
||||
void BalanceHP(int32 penalty, int32 range = 0, Mob* caster = nullptr);
|
||||
void BalanceMana(int32 penalty, int32 range = 0, Mob* caster = nullptr);
|
||||
void HealGroup(uint32 heal_amt, Mob* caster, int32 range = 0);
|
||||
inline void SetGroupAAs(GroupLeadershipAA_Struct *From) { memcpy(&LeaderAbilities, From, sizeof(GroupLeadershipAA_Struct)); }
|
||||
inline void GetGroupAAs(GroupLeadershipAA_Struct *Into) { memcpy(Into, &LeaderAbilities, sizeof(GroupLeadershipAA_Struct)); }
|
||||
void UpdateGroupAAs();
|
||||
|
||||
+69
-26
@@ -461,11 +461,17 @@ uint32 Raid::GetTotalRaidDamage(Mob* other)
|
||||
return total;
|
||||
}
|
||||
|
||||
void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid)
|
||||
void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid, int32 range)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
int numMem = 0;
|
||||
unsigned int gi = 0;
|
||||
for(; gi < MAX_RAID_MEMBERS; gi++)
|
||||
@@ -473,7 +479,10 @@ void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid)
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
numMem += 1;
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -484,25 +493,41 @@ void Raid::HealGroup(uint32 heal_amt, Mob* caster, uint32 gid)
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
members[gi].member->SetHP(members[gi].member->GetHP() + heal_amt);
|
||||
members[gi].member->SendHPUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
members[gi].member->SetHP(members[gi].member->GetHP() + heal_amt);
|
||||
members[gi].member->SendHPUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Raid::BalanceHP(int32 penalty, uint32 gid)
|
||||
void Raid::BalanceHP(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
int dmgtaken = 0, numMem = 0;
|
||||
int gi = 0;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
for(; gi < MAX_RAID_MEMBERS; gi++)
|
||||
{
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
dmgtaken += (members[gi].member->GetMaxHP() - members[gi].member->GetHP());
|
||||
numMem += 1;
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
dmgtaken += (members[gi].member->GetMaxHP() - members[gi].member->GetHP());
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -514,21 +539,33 @@ void Raid::BalanceHP(int32 penalty, uint32 gid)
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
if((members[gi].member->GetMaxHP() - dmgtaken) < 1){//this way the ability will never kill someone
|
||||
members[gi].member->SetHP(1); //but it will come darn close
|
||||
members[gi].member->SendHPUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi].member->SetHP(members[gi].member->GetMaxHP() - dmgtaken);
|
||||
members[gi].member->SendHPUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
if((members[gi].member->GetMaxHP() - dmgtaken) < 1){//this way the ability will never kill someone
|
||||
members[gi].member->SetHP(1); //but it will come darn close
|
||||
members[gi].member->SendHPUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi].member->SetHP(members[gi].member->GetMaxHP() - dmgtaken);
|
||||
members[gi].member->SendHPUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Raid::BalanceMana(int32 penalty, uint32 gid)
|
||||
void Raid::BalanceMana(int32 penalty, uint32 gid, int32 range, Mob* caster)
|
||||
{
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
if (!range)
|
||||
range = 200;
|
||||
|
||||
float distance;
|
||||
float range2 = range*range;
|
||||
|
||||
int manataken = 0, numMem = 0;
|
||||
int gi = 0;
|
||||
for(; gi < MAX_RAID_MEMBERS; gi++)
|
||||
@@ -536,8 +573,11 @@ void Raid::BalanceMana(int32 penalty, uint32 gid)
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
manataken += (members[gi].member->GetMaxMana() - members[gi].member->GetMana());
|
||||
numMem += 1;
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
manataken += (members[gi].member->GetMaxMana() - members[gi].member->GetMana());
|
||||
numMem += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -549,15 +589,18 @@ void Raid::BalanceMana(int32 penalty, uint32 gid)
|
||||
if(members[gi].member){
|
||||
if(members[gi].GroupNumber == gid)
|
||||
{
|
||||
if((members[gi].member->GetMaxMana() - manataken) < 1){
|
||||
members[gi].member->SetMana(1);
|
||||
if (members[gi].member->IsClient())
|
||||
members[gi].member->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi].member->SetMana(members[gi].member->GetMaxMana() - manataken);
|
||||
if (members[gi].member->IsClient())
|
||||
members[gi].member->CastToClient()->SendManaUpdate();
|
||||
distance = caster->DistNoRoot(*members[gi].member);
|
||||
if(distance <= range2){
|
||||
if((members[gi].member->GetMaxMana() - manataken) < 1){
|
||||
members[gi].member->SetMana(1);
|
||||
if (members[gi].member->IsClient())
|
||||
members[gi].member->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
else{
|
||||
members[gi].member->SetMana(members[gi].member->GetMaxMana() - manataken);
|
||||
if (members[gi].member->IsClient())
|
||||
members[gi].member->CastToClient()->SendManaUpdate();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -147,9 +147,9 @@ public:
|
||||
void CastGroupSpell(Mob* caster,uint16 spellid, uint32 gid);
|
||||
void SplitExp(uint32 exp, Mob* other);
|
||||
uint32 GetTotalRaidDamage(Mob* other);
|
||||
void BalanceHP(int32 penalty, uint32 gid);
|
||||
void BalanceMana(int32 penalty, uint32 gid);
|
||||
void HealGroup(uint32 heal_amt, Mob* caster, uint32 gid);
|
||||
void BalanceHP(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr);
|
||||
void BalanceMana(int32 penalty, uint32 gid, int32 range = 0, Mob* caster = nullptr);
|
||||
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 GroupBardPulse(Mob* caster, uint16 spellid, uint32 gid);
|
||||
|
||||
|
||||
+6
-10
@@ -2445,7 +2445,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
gid = r->GetGroup(caster->GetName());
|
||||
if(gid < 11)
|
||||
{
|
||||
r->BalanceHP(spell.base[i], gid);
|
||||
r->BalanceHP(spell.base[i], gid, spell.range, caster);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2455,7 +2455,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
if(!g)
|
||||
break;
|
||||
|
||||
g->BalanceHP(spell.base[i]);
|
||||
g->BalanceHP(spell.base[i], spell.range, caster);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2473,7 +2473,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
gid = r->GetGroup(caster->GetName());
|
||||
if(gid < 11)
|
||||
{
|
||||
r->BalanceMana(spell.base[i], gid);
|
||||
r->BalanceMana(spell.base[i], gid, spell.range, caster);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2483,7 +2483,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
if(!g)
|
||||
break;
|
||||
|
||||
g->BalanceMana(spell.base[i]);
|
||||
g->BalanceMana(spell.base[i], spell.range, caster);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2579,7 +2579,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
gid = r->GetGroup(caster->GetName());
|
||||
if(gid < 11)
|
||||
{
|
||||
r->HealGroup(heal_amt,caster, gid);
|
||||
r->HealGroup(heal_amt,caster, gid, spell.range);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2591,7 +2591,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial)
|
||||
break;
|
||||
}
|
||||
|
||||
g->HealGroup(heal_amt, caster);
|
||||
g->HealGroup(heal_amt, caster, spell.range);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3978,10 +3978,6 @@ int16 Client::CalcAAFocus(focusType type, uint32 aa_ID, uint16 spell_id)
|
||||
int lvlModifier = 100;
|
||||
int spell_level = 0;
|
||||
int lvldiff = 0;
|
||||
bool LimitSpellSkill = false;
|
||||
bool SpellSkill_Found = false;
|
||||
bool LimitSpellEffect = false;
|
||||
bool SpellEffect_Found = false;
|
||||
uint32 effect = 0;
|
||||
int32 base1 = 0;
|
||||
int32 base2 = 0;
|
||||
|
||||
Reference in New Issue
Block a user