Performance: Changed RampageArray to be a vector of IDs

This commit is contained in:
Michael Cook (mackal) 2014-02-17 17:34:02 -05:00
parent 85f2b46fe9
commit 169b9161b9
2 changed files with 19 additions and 24 deletions

View File

@ -1997,59 +1997,54 @@ bool Mob::Flurry(ExtraAttackOptions *opts)
bool Mob::AddRampage(Mob *mob) bool Mob::AddRampage(Mob *mob)
{ {
if(!mob) if (!mob)
return false; return false;
if (!GetSpecialAbility(SPECATK_RAMPAGE)) if (!GetSpecialAbility(SPECATK_RAMPAGE))
return false; return false;
for (int i = 0; i < RampageArray.size(); i++) for (int i = 0; i < RampageArray.size(); i++) {
{ // if Entity ID is already on the list don't add it again
// if name is already on the list dont add it again if (mob->GetID() == RampageArray[i])
if (strcasecmp(mob->GetName(), RampageArray[i].c_str()) == 0)
return false; return false;
} }
std::string r_name = mob->GetName(); RampageArray.push_back(mob->GetID());
RampageArray.push_back(r_name);
return true; return true;
} }
void Mob::ClearRampage(){ void Mob::ClearRampage()
{
RampageArray.clear(); RampageArray.clear();
} }
bool Mob::Rampage(ExtraAttackOptions *opts) bool Mob::Rampage(ExtraAttackOptions *opts)
{ {
int index_hit = 0; int index_hit = 0;
if (!IsPet()) { if (!IsPet())
entity_list.MessageClose_StringID(this, true, 200, MT_NPCRampage, NPC_RAMPAGE, GetCleanName()); entity_list.MessageClose_StringID(this, true, 200, MT_NPCRampage, NPC_RAMPAGE, GetCleanName());
} else { else
entity_list.MessageClose_StringID(this, true, 200, MT_PetFlurry, NPC_RAMPAGE, GetCleanName()); entity_list.MessageClose_StringID(this, true, 200, MT_PetFlurry, NPC_RAMPAGE, GetCleanName());
}
int rampage_targets = GetSpecialAbilityParam(SPECATK_RAMPAGE, 1); int rampage_targets = GetSpecialAbilityParam(SPECATK_RAMPAGE, 1);
rampage_targets = rampage_targets > 0 ? rampage_targets : RuleI(Combat, MaxRampageTargets); rampage_targets = rampage_targets > 0 ? rampage_targets : RuleI(Combat, MaxRampageTargets);
for (int i = 0; i < RampageArray.size(); i++) for (int i = 0; i < RampageArray.size(); i++) {
{ if (index_hit >= rampage_targets)
if(index_hit >= rampage_targets)
break; break;
// range is important // range is important
Mob *m_target = entity_list.GetMob(RampageArray[i].c_str()); Mob *m_target = entity_list.GetMob(RampageArray[i]);
if(m_target) if (m_target) {
{ if (m_target == GetTarget())
if(m_target == GetTarget())
continue; continue;
if (CombatRange(m_target)) if (CombatRange(m_target)) {
{
Attack(m_target, 13, false, false, false, opts); Attack(m_target, 13, false, false, false, opts);
index_hit++; index_hit++;
} }
} }
} }
if(index_hit < rampage_targets) { if (index_hit < rampage_targets)
Attack(GetTarget(), 13, false, false, false, opts); Attack(GetTarget(), 13, false, false, false, opts);
}
return true; return true;
} }

View File

@ -880,7 +880,7 @@ protected:
bool IsFullHP; bool IsFullHP;
bool moved; bool moved;
std::vector<std::string> RampageArray; std::vector<uint16> RampageArray;
std::map<std::string, std::string> m_EntityVariables; std::map<std::string, std::string> m_EntityVariables;
int16 SkillDmgTaken_Mod[HIGHEST_SKILL+2]; int16 SkillDmgTaken_Mod[HIGHEST_SKILL+2];