mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-16 22:58:34 +00:00
safe_delete resoves problem. No to track down leak
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user