safe_delete resoves problem. No to track down leak

This commit is contained in:
neckkola
2022-01-29 19:31:57 -04:00
parent 478fa24a70
commit c2d1857223
4 changed files with 78 additions and 61 deletions
+3
View File
@@ -57,6 +57,9 @@ typedef const char Const_char; //for perl XS
#define safe_delete(d) if(d) { delete d; d=nullptr; }
#define safe_delete_array(d) if(d) { delete[] d; d=nullptr; }
//#define safe_delete(d)(_RPTF0(_CRT_WARN,"Testing delete function\n"));
//#define safe_delete(d) if(d) { }
//#define safe_delete_array(d) if(d) { }
#define L32(i) ((uint32) i)
#define H32(i) ((uint32) (i >> 32))
#define L16(i) ((uint16) i)
+57 -47
View File
@@ -7745,11 +7745,13 @@ bool Bot::DoFinishedSpellGroupTarget(uint16 spell_id, Mob* spellTarget, EQ::spel
}
else if (raid)
{
for (RaidMember iter : raid->GetRaidGroupMembers(raid->GetGroup(this->GetName()))) {
if (iter.member) {
SpellOnTarget(spell_id, iter.member);
if (iter.member && iter.member->GetPetID())
SpellOnTarget(spell_id, iter.member ->GetPet());
//for (auto& iter : raid->GetRaidGroupMembers(raid->GetGroup(this->GetName()))) {
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(raid->GetGroup(this->GetName()));
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member) {
SpellOnTarget(spell_id, iter->member);
if (iter->member && iter->member->GetPetID())
SpellOnTarget(spell_id, iter->member ->GetPet());
}
}
}
@@ -9264,34 +9266,36 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
{
//added raid check
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 g = raid->GetGroup(caster->GetName());
if (g < 12) {
for (RaidMember& iter : raid->GetRaidGroupMembers(g)) {
if (iter.member && !iter.member->qglobal) {
if (iter.member->IsClient() && iter.member->GetHPRatio() < 90) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
uint32 gid = raid->GetGroup(caster->GetName());
if (gid < 12) {
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(gid);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
//for (auto& iter : raid->GetRaidGroupMembers(g)) {
if (iter->member && !iter->member->qglobal) {
if (iter->member->IsClient() && iter->member->GetHPRatio() < 90) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if ((iter.member->GetClass() == WARRIOR || iter.member->GetClass() == PALADIN || iter.member->GetClass() == SHADOWKNIGHT) && iter.member->GetHPRatio() < 95) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if ((iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN || iter->member->GetClass() == SHADOWKNIGHT) && iter->member->GetHPRatio() < 95) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if (iter.member->GetClass() == ENCHANTER && iter.member->GetHPRatio() < 80) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if (iter->member->GetClass() == ENCHANTER && iter->member->GetHPRatio() < 80) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if (iter.member->GetHPRatio() < 70) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if (iter->member->GetHPRatio() < 70) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
}
if (iter.member && !iter.member->qglobal && iter.member->HasPet() && iter.member->GetPet()->GetHPRatio() < 50) {
if (iter.member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter.member->IsCasting() && iter.member->GetClass() != ENCHANTER)
if (iter->member && !iter->member->qglobal && iter->member->HasPet() && iter->member->GetPet()->GetHPRatio() < 50) {
if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER)
continue;
if (caster->AICastSpell(iter.member->GetPet(), 100, SpellType_Heal))
if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal))
return true;
}
}
@@ -9353,31 +9357,33 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
}
else if (gid < 12)
{
for (RaidMember& iter : raid->GetRaidGroupMembers(gid)) {
if (iter.member && !iter.member->qglobal) {
if (iter.member->IsClient() && iter.member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(gid);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
//for (auto& iter : raid->GetRaidGroupMembers(gid)) {
if (iter->member && !iter->member->qglobal) {
if (iter->member->IsClient() && iter->member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if ((iter.member->GetClass() == WARRIOR || iter.member->GetClass() == PALADIN || iter.member->GetClass() == SHADOWKNIGHT) && iter.member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if ((iter->member->GetClass() == WARRIOR || iter->member->GetClass() == PALADIN || iter->member->GetClass() == SHADOWKNIGHT) && iter->member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if (iter.member->GetClass() == ENCHANTER && iter.member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if (iter->member->GetClass() == ENCHANTER && iter->member->GetHPRatio() < hpRatioToHeal) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
else if (iter.member->GetHPRatio() < hpRatioToHeal / 2) {
if (caster->AICastSpell(iter.member, 100, SpellType_Heal))
else if (iter->member->GetHPRatio() < hpRatioToHeal / 2) {
if (caster->AICastSpell(iter->member, 100, SpellType_Heal))
return true;
}
}
if (iter.member && !iter.member->qglobal && iter.member->HasPet() && iter.member->GetPet()->GetHPRatio() < 25) {
if (iter.member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter.member->IsCasting() && iter.member->GetClass() != ENCHANTER)
if (iter->member && !iter->member->qglobal && iter->member->HasPet() && iter->member->GetPet()->GetHPRatio() < 25) {
if (iter->member->GetPet()->GetOwner() != caster && caster->IsEngaged() && iter->member->IsCasting() && iter->member->GetClass() != ENCHANTER)
continue;
if (caster->AICastSpell(iter.member->GetPet(), 100, SpellType_Heal))
if (caster->AICastSpell(iter->member->GetPet(), 100, SpellType_Heal))
return true;
}
}
@@ -9400,9 +9406,10 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 g = raid->GetGroup(caster->GetName());
if (g < 12) {
for (RaidMember &iter : raid->GetRaidGroupMembers(g)) {
if (iter.member) {
if (caster->AICastSpell(iter.member, chanceToCast, SpellType_Buff) || caster->AICastSpell(iter.member->GetPet(), chanceToCast, SpellType_Buff))
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(g);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member) {
if (caster->AICastSpell(iter->member, chanceToCast, SpellType_Buff) || caster->AICastSpell(iter->member->GetPet(), chanceToCast, SpellType_Buff))
return true;
}
}
@@ -9446,16 +9453,17 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 gid = raid->GetGroup(caster->GetName());
if (gid < 12) {
for (RaidMember& iter : raid->GetRaidGroupMembers(gid)) {
if (iter.member && caster->GetNeedsCured(iter.member)) {
if (caster->AICastSpell(iter.member, caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure))
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(gid);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member && caster->GetNeedsCured(iter->member)) {
if (caster->AICastSpell(iter->member, caster->GetChanceToCastBySpellType(SpellType_Cure), SpellType_Cure))
return true;
else if (botCasterClass == BARD)
return false;
}
if (iter.member && iter.member->GetPet() && caster->GetNeedsCured(iter.member->GetPet())) {
if (caster->AICastSpell(iter.member->GetPet(), (int)caster->GetChanceToCastBySpellType(SpellType_Cure) / 4, SpellType_Cure))
if (iter->member && iter->member->GetPet() && caster->GetNeedsCured(iter->member->GetPet())) {
if (caster->AICastSpell(iter->member->GetPet(), (int)caster->GetChanceToCastBySpellType(SpellType_Cure) / 4, SpellType_Cure))
return true;
}
}
@@ -9483,9 +9491,10 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 gid = raid->GetGroup(caster->GetName());
if (gid < 12) {
for (RaidMember& iter : raid->GetRaidGroupMembers(gid)) {
if (iter.member && caster->GetNeedsHateRedux(iter.member)) {
if (caster->AICastSpell(iter.member, caster->GetChanceToCastBySpellType(SpellType_HateRedux), SpellType_HateRedux))
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(gid);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member && caster->GetNeedsHateRedux(iter->member)) {
if (caster->AICastSpell(iter->member, caster->GetChanceToCastBySpellType(SpellType_HateRedux), SpellType_HateRedux))
return true;
}
}
@@ -9503,9 +9512,10 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl
Raid* raid = entity_list.GetRaidByBotName(caster->GetName());
uint32 g = raid->GetGroup(caster->GetName());
if (g < 12) {
for (RaidMember& iter : raid->GetRaidGroupMembers(g)) {
if (iter.member) {
if (caster->AICastSpell(iter.member, iChance, SpellType_PreCombatBuff) || caster->AICastSpell(iter.member->GetPet(), iChance, SpellType_PreCombatBuff))
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(g);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member) {
if (caster->AICastSpell(iter->member, iChance, SpellType_PreCombatBuff) || caster->AICastSpell(iter->member->GetPet(), iChance, SpellType_PreCombatBuff))
return true;
}
}
+16 -13
View File
@@ -314,9 +314,9 @@ void Bot::AI_Process_Raid()
else {
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(r_group);
for (RaidMember iter : raid_group_members) {
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
Mob* bg_member = iter.member;// bot_group->members[counter];
Mob* bg_member = iter->member;// bot_group->members[counter];
if (!bg_member) {
continue;
}
@@ -1525,6 +1525,8 @@ void Bot::PetAIProcess_Raid() {
std::vector<RaidMember> Raid::GetRaidGroupMembers(uint32 gid)
{
std::vector<RaidMember> raid_group_members;
raid_group_members.clear();
for (int i = 0; i < MAX_RAID_MEMBERS; ++i)
{
if (members[i].member && members[i].GroupNumber == gid)
@@ -1775,12 +1777,12 @@ bool Bot::AICastSpell_Raid(Mob* tar, uint8 iChance, uint32 iSpellTypes) {
if (IsGroupSpell(botSpell.SpellId)) {
if (IsRaidGrouped()) {
uint32 r_group = raid->GetGroup(GetName());
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(r_group);
BotGroupSay(this, "Casting %s.", spells[botSpell.SpellId].name);
//raid->RaidBotGroupSay(this, 0, 100, "Casting %s.", spells[botSpell.SpellId].name);
for (RaidMember iter : raid_group_members) {
if (iter.member && !iter.member->qglobal) {
iter.member->SetDontHealMeBefore(Timer::GetCurrentTime() + 1000);
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(r_group);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member && !iter->member->qglobal) {
iter->member->SetDontHealMeBefore(Timer::GetCurrentTime() + 1000);
}
}
}
@@ -2441,10 +2443,11 @@ bool Bot::AICastSpell_Raid(Mob* tar, uint8 iChance, uint32 iSpellTypes) {
if (IsGroupSpell(botSpell.SpellId)) {
if (this->IsRaidGrouped()) {
if (r_group) {
for (RaidMember iter : raid->GetRaidGroupMembers(r_group)) {
if (iter.member && !iter.member->qglobal) {
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(r_group);
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member && !iter->member->qglobal) {
if (TempDontCureMeBeforeTime != tar->DontCureMeBefore())
iter.member->SetDontCureMeBefore(Timer::GetCurrentTime() + 4000);
iter->member->SetDontCureMeBefore(Timer::GetCurrentTime() + 4000);
}
}
}
@@ -2600,13 +2603,13 @@ uint8 Bot::GetNumberNeedingHealedInRaidGroup(uint8 hpr, bool includePets) {
raid = entity_list.GetRaidByBotName(this->GetName());
uint32 r_group = raid->GetGroup(this->GetName());
std::vector<RaidMember> raid_group_members = raid->GetRaidGroupMembers(r_group);
for (RaidMember iter : raid_group_members) {
if (iter.member && !iter.member->qglobal) {
if (iter.member->GetHPRatio() <= hpr)
for (std::vector<RaidMember>::iterator iter = raid_group_members.begin(); iter != raid_group_members.end(); ++iter) {
if (iter->member && !iter->member->qglobal) {
if (iter->member->GetHPRatio() <= hpr)
needHealed++;
if (includePets) {
if (iter.member->GetPet() && iter.member->GetPet()->GetHPRatio() <= hpr)
if (iter->member->GetPet() && iter->member->GetPet()->GetHPRatio() <= hpr)
needHealed++;
}
}
+2 -1
View File
@@ -135,7 +135,7 @@ public:
bool IsGroupLeader(const char *who);
bool IsRaidMember(const char *name);
void UpdateLevel(const char *name, int newLevel);
std::vector<RaidMember> GetRaidGroupMembers(uint32 gid);
uint32 GetFreeGroup();
uint8 GroupCount(uint32 gid);
@@ -257,6 +257,7 @@ public:
bool DoesAnyMemberHaveExpeditionLockout(const std::string& expedition_name, const std::string& event_name, int max_check_count = 0);
std::vector<RaidMember> GetMembers() const;
std::vector<RaidMember> GetRaidGroupMembers(uint32 gid);
RaidMember members[MAX_RAID_MEMBERS];
char leadername[64];