More cleanup 2

This commit is contained in:
nytmyr
2025-01-23 13:58:27 -06:00
parent 529d26a132
commit 6364b00efd
4 changed files with 214 additions and 223 deletions
-7
View File
@@ -385,12 +385,6 @@ bool IsCommandedBotSpellType(uint16 spell_type) {
case BotSpellTypes::MovementSpeed:
case BotSpellTypes::SendHome:
case BotSpellTypes::SummonCorpse:
//case BotSpellTypes::Cure:
//case BotSpellTypes::GroupCures:
//case BotSpellTypes::DamageShields:
//case BotSpellTypes::PetDamageShields:
//case BotSpellTypes::ResistBuffs:
//case BotSpellTypes::PetResistBuffs:
return true;
default:
return false;
@@ -685,7 +679,6 @@ uint16 GetCorrectBotSpellType(uint16 spell_type, uint16 spell_id) {
}
}
return correct_type;
}
+166 -168
View File
@@ -2148,14 +2148,6 @@ void Bot::AI_Process()
}
r_group = raid->GetGroup(GetName());
//if (mana_timer.Check(false)) {
// raid->SendHPManaEndPacketsFrom(this);
//}
//
//if (send_hp_update_timer.Check(false)) {
// raid->SendHPManaEndPacketsFrom(this);
//}
}
auto bot_group = GetGroup();
@@ -2842,35 +2834,51 @@ void Bot::DoAttackRounds(Mob* target, int hand) {
Attack(target, hand, false, false);
if (hand == EQ::invslot::slotPrimary) {
bool is_two_hander = HasTwoHanderEquipped();
if (HasTwoHanderEquipped()) {
auto extraattackchance = aabonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE] + spellbonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE] +
itembonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE];
if (extraattackchance && zone->random.Roll(extraattackchance)) {
auto extraattackamt = std::max({ aabonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS], spellbonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS], itembonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS] });
for (int i = 0; i < extraattackamt; i++) {
Attack(target, hand, false, false);
}
}
}
else {
auto extraattackchance_primary = aabonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE] + spellbonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE] +
itembonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE];
if (extraattackchance_primary && zone->random.Roll(extraattackchance_primary)) {
auto extraattackamt_primary = std::max({ aabonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS], spellbonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS], itembonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS] });
for (int i = 0; i < extraattackamt_primary; i++) {
Attack(target, hand, false, false);
}
auto extra_attack_chance = is_two_hander
? aabonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE] +
spellbonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE] +
itembonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_CHANCE]
: aabonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE] +
spellbonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE] +
itembonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_CHANCE];
int extra_attack_amt_aas = is_two_hander
? aabonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS]
: aabonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS];
int extra_attack_amt_spells = is_two_hander
? spellbonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS]
: spellbonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS];
int extra_attack_amt_items = is_two_hander
? itembonuses.ExtraAttackChance[SBIndex::EXTRA_ATTACK_NUM_ATKS]
: itembonuses.ExtraAttackChancePrimary[SBIndex::EXTRA_ATTACK_NUM_ATKS];
int extra_attack_amt = std::max({ extra_attack_amt_aas, extra_attack_amt_spells, extra_attack_amt_items });
if (extra_attack_chance && zone->random.Roll(extra_attack_chance)) {
for (int i = 0; i < extra_attack_amt; i++) {
Attack(target, hand, false, false);
}
}
}
if (hand == EQ::invslot::slotSecondary) {
auto extraattackchance_secondary = aabonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_CHANCE] + spellbonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_CHANCE] +
auto extra_attack_chance_secondary =
aabonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_CHANCE] +
spellbonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_CHANCE] +
itembonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_CHANCE];
if (extraattackchance_secondary && zone->random.Roll(extraattackchance_secondary)) {
auto extraattackamt_secondary = std::max({ aabonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS], spellbonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS], itembonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS] });
for (int i = 0; i < extraattackamt_secondary; i++) {
if (extra_attack_chance_secondary && zone->random.Roll(extra_attack_chance_secondary)) {
auto extra_attack_amt_secondary = std::max({
aabonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS],
spellbonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS],
itembonuses.ExtraAttackChanceSecondary[SBIndex::EXTRA_ATTACK_NUM_ATKS]
});
for (int i = 0; i < extra_attack_amt_secondary; i++) {
Attack(target, hand, false, false);
}
}
@@ -3650,20 +3658,21 @@ bool Bot::Spawn(Client* botCharacterOwner) {
m_ping_timer.Start(8000);
m_auto_save_timer.Start(RuleI(Bots, AutosaveIntervalSeconds) * 1000);
pDontHealMeBefore = 0;
pDontGroupHealMeBefore = 0;
pDontGroupHoTHealMeBefore = 0;
pDontBuffMeBefore = Timer::GetCurrentTime() + 400;
pDontDotMeBefore = 0;
pDontRootMeBefore = 0;
pDontSnareMeBefore = 0;
pDontCureMeBefore = 0;
pDontRegularHealMeBefore = 0;
pDontVeryFastHealMeBefore = 0;
pDontFastHealMeBefore = 0;
pDontCompleteHealMeBefore = 0;
pDontGroupCompleteHealMeBefore = 0;
pDontHotHealMeBefore = 0;
m_dont_heal_me_before = 0;
m_dont_regular_heal_me_before = 0;
m_dont_very_fast_heal_me_before = 0;
m_dont_fast_heal_me_before = 0;
m_dont_complete_heal_me_before = 0;
m_dont_hot_heal_me_before = 0;
m_dont_group_heal_me_before = 0;
m_dont_group_hot_heal_me_before = 0;
m_dont_group_complete_heal_me_before = 0;
m_dont_buff_me_before = Timer::GetCurrentTime() + 400;
m_dont_dot_me_before = 0;
m_dont_root_me_before = 0;
m_dont_snare_me_before = 0;
m_dont_cure_me_before = 0;
// there is something askew with spawn struct appearance fields...
// I re-enabled this until I can sort it out
@@ -4404,18 +4413,19 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
event_trade.push_back(ClientTrade(trade_instance, trade_index));
continue;
}
else {
client->Message(
Chat::Yellow,
fmt::format(
"{} is too small of a stack, you need atleast {}, the trade has been cancelled!",
item_link,
RuleI(Bots, StackSizeMin)
).c_str()
);
client->ResetTrade();
return;
}
client->Message(
Chat::Yellow,
fmt::format(
"{} is too small of a stack, you need atleast {}, the trade has been cancelled!",
item_link,
RuleI(Bots, StackSizeMin)
).c_str()
);
client->ResetTrade();
return;
}
}
else if (
@@ -5407,34 +5417,35 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
case Class::Cleric:
case Class::ShadowKnight:
case Class::Paladin:
if (
(GetBaseRace() == OGRE || GetBaseRace() == TROLL || GetBaseRace() == BARBARIAN) ||
{
bool is_large_race = (
GetBaseRace() == OGRE ||
GetBaseRace() == TROLL ||
GetBaseRace() == BARBARIAN
);
bool has_bash_skill = GetSkill(EQ::skills::SkillBash) > 0;
bool has_shield_in_secondary =
m_inv.GetItem(EQ::invslot::slotSecondary) &&
m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield;
bool has_two_hander_with_aa =
m_inv.GetItem(EQ::invslot::slotPrimary) &&
m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() &&
GetAA(aa2HandBash) >= 1;
bool can_bash =
is_large_race ||
(
GetSkill(EQ::skills::SkillBash) &&
has_bash_skill &&
(
(
m_inv.GetItem(EQ::invslot::slotSecondary) &&
m_inv.GetItem(EQ::invslot::slotSecondary)->GetItem()->ItemType == EQ::item::ItemTypeShield
)
||
(
m_inv.GetItem(EQ::invslot::slotPrimary) &&
m_inv.GetItem(EQ::invslot::slotPrimary)->GetItem()->IsType2HWeapon() &&
GetAA(aa2HandBash) >= 1
has_shield_in_secondary || has_two_hander_with_aa
)
)
)
) {
);
if (can_bash) {
skill_to_use = EQ::skills::SkillBash;
break;
}
if (GetSkill(EQ::skills::SkillKick)) {
skill_to_use = EQ::skills::SkillKick;
}
break;
}
case Class::Ranger:
case Class::Beastlord:
if (GetSkill(EQ::skills::SkillKick)) {
@@ -5496,16 +5507,21 @@ void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
// bards can do riposte frenzy for some reason
if (!IsRiposte && GetClass() == Class::Berserker) {
int chance = GetLevel() * 2 + GetSkill(EQ::skills::SkillFrenzy);
if (zone->random.Roll0(450) < chance)
if (zone->random.Roll0(450) < chance) {
AtkRounds++;
if (zone->random.Roll0(450) < chance)
}
if (zone->random.Roll0(450) < chance) {
AtkRounds++;
}
}
while (AtkRounds > 0) {
if (GetTarget() != this && TargetValidation(GetTarget())) {
DoSpecialAttackDamage(GetTarget(), EQ::skills::SkillFrenzy, dmg, 0, dmg, HasteMod);
}
AtkRounds--;
}
@@ -5899,13 +5915,6 @@ bool Bot::CastSpell(
LogSpellsDetail("Spell casting canceled: not able to cast now. Valid? [{}] casting [{}] waiting? [{}] spellend? [{}] stunned? [{}] feared? [{}] mezed? [{}] silenced? [{}]",
IsValidSpell(spell_id), casting_spell_id, delaytimer, spellend_timer.Enabled(), IsStunned(), IsFeared(), IsMezzed(), IsSilenced()
);
//if (IsSilenced() && !IsDiscipline(spell_id)) {
// MessageString(Chat::White, SILENCED_STRING);
//}
//
//if (IsAmnesiad() && IsDiscipline(spell_id)) {
// MessageString(Chat::White, MELEE_SILENCE);
//}
if (casting_spell_id) {
AI_Bot_Event_SpellCastFinished(false, static_cast<uint16>(casting_spell_slot));
@@ -6755,56 +6764,45 @@ int64 Bot::CalcHPRegen() {
}
int64 Bot::CalcManaRegen() {
uint8 level = GetLevel();
uint8 botclass = GetClass();
int32 regen = 0;
uint8 level = GetLevel();
uint8 bot_class = GetClass();
if (GetClass() == Class::Bard) {
if (IsSitting()) {
BuffFadeBySitModifier();
regen = 2;
regen += (itembonuses.ManaRegen + aabonuses.ManaRegen);
}
else {
regen = 1;
regen += (itembonuses.ManaRegen + aabonuses.ManaRegen);
}
}
else {
if (IsSitting()) {
BuffFadeBySitModifier();
if (GetArchetype() != Archetype::Melee) {
regen = ((((GetSkill(EQ::skills::SkillMeditate) / 10) + (level - (level / 4))) / 4) + 4);
regen += (spellbonuses.ManaRegen + itembonuses.ManaRegen);
}
else
regen = (2 + spellbonuses.ManaRegen + itembonuses.ManaRegen);
}
else
regen = (2 + spellbonuses.ManaRegen + itembonuses.ManaRegen);
// Default values
int32 regen = 2; // Default regen for non-sitting state
float mana_regen_rate = std::max(0.0f, RuleR(Bots, ManaRegen));
if (IsHeroicINTCasterClass(GetClass())) {
regen += itembonuses.HeroicINT * RuleR(Character, HeroicIntelligenceMultiplier) / 25;
}
else if (IsHeroicWISCasterClass(GetClass())) {
regen += itembonuses.HeroicWIS * RuleR(Character, HeroicWisdomMultiplier) / 25;
}
else {
regen = 0;
}
if (bot_class == Class::Bard) {
regen = IsSitting() ? 2 : 1;
regen += aabonuses.ManaRegen;
regen = ((regen * RuleI(Character, ManaRegenMultiplier)) / 100);
float mana_regen_rate = RuleR(Bots, ManaRegen);
if (IsSitting()) {
BuffFadeBySitModifier();
}
if (mana_regen_rate < 0.0f) {
mana_regen_rate = 0.0f;
}
regen += itembonuses.ManaRegen + aabonuses.ManaRegen;
regen = (regen * mana_regen_rate);
}
return regen;
}
return regen;
if (IsSitting()) {
BuffFadeBySitModifier();
if (GetArchetype() != Archetype::Melee) {
regen = (((GetSkill(EQ::skills::SkillMeditate) / 10) + (level - (level / 4))) / 4) + 4;
}
}
regen += spellbonuses.ManaRegen + itembonuses.ManaRegen;
if (IsHeroicINTCasterClass(bot_class)) {
regen += itembonuses.HeroicINT * RuleR(Character, HeroicIntelligenceMultiplier) / 25;
} else if (IsHeroicWISCasterClass(bot_class)) {
regen += itembonuses.HeroicWIS * RuleR(Character, HeroicWisdomMultiplier) / 25;
}
regen += aabonuses.ManaRegen;
regen = (regen * RuleI(Character, ManaRegenMultiplier)) / 100;
return static_cast<int32>(regen * mana_regen_rate);
}
uint64 Bot::GetClassHPFactor() {
@@ -10222,43 +10220,49 @@ bool Bot::IsValidTargetType(uint16 spell_id, int target_type, uint8 body_type) {
}
bool Bot::IsMobEngagedByAnyone(Mob* tar) {
if (!tar) {
return false;
}
if (!tar) {
return false;
}
for (Mob* m : GetSpellTargetList()) {
if (m->GetTarget() == tar) {
if (
m->IsBot() &&
m->IsEngaged() &&
for (Mob* m : GetSpellTargetList()) {
if (m->GetTarget() != tar) {
continue;
}
bool bot_is_engaged = m->IsBot() && m->IsEngaged();
bool bot_melee_or_casting =
bot_is_engaged &&
(
!m->CastToBot()->IsBotNonSpellFighter() ||
(
!m->CastToBot()->IsBotNonSpellFighter() ||
(
m->GetLevel() >= m->CastToBot()->GetStopMeleeLevel() &&
!m->IsCasting()
)
m->GetLevel() >= m->CastToBot()->GetStopMeleeLevel() &&
!m->IsCasting()
)
) {
return true;
}
);
if (m->IsCasting() && SpellBreaksMez(m->CastingSpellID())) {
return true;
}
if (bot_melee_or_casting) {
return true;
}
if (
m->IsClient() &&
(
m->CastToClient()->AutoAttackEnabled() ||
m->CastToClient()->AutoFireEnabled()
)
) {
return true;
}
}
}
if (
m->IsCasting() &&
SpellBreaksMez(m->CastingSpellID())
) {
return true;
}
return false;
if (
m->IsClient() &&
(
m->CastToClient()->AutoAttackEnabled() ||
m->CastToClient()->AutoFireEnabled()
)
) {
return true;
}
}
return false;
}
bool Bot::IsValidMezTarget(Mob* owner, Mob* npc, uint16 spell_id) {
@@ -10904,13 +10908,7 @@ uint16 Bot::GetDefaultSpellTypePursuePriority(uint16 spell_type, uint8 bot_class
}
uint16 Bot::GetDefaultSpellTypeResistLimit(uint16 spell_type, uint8 stance) {
if (!IsBotSpellTypeBeneficial(spell_type)) {
return RuleI(Bots, SpellResistLimit);
}
else {
return 0;
}
return IsBotSpellTypeBeneficial(spell_type) ? 0 : RuleI(Bots, SpellResistLimit);
}
bool Bot::GetDefaultSpellTypeAggroCheck(uint16 spell_type, uint8 stance) {
+42 -42
View File
@@ -1338,35 +1338,35 @@ public:
virtual int GetStuckBehavior() const { return 0; }
void NPCSpecialAttacks(const char* parse, int permtag, bool reset = true, bool remove = false);
inline uint32 DontHealMeBefore() const { return pDontHealMeBefore; }
inline uint32 DontGroupHealMeBefore() const { return pDontGroupHealMeBefore; }
inline uint32 DontGroupHoTHealMeBefore() const { return pDontGroupHoTHealMeBefore; }
inline uint32 DontRegularHealMeBefore() const { return pDontRegularHealMeBefore; }
inline uint32 DontVeryFastHealMeBefore() const { return pDontVeryFastHealMeBefore; }
inline uint32 DontFastHealMeBefore() const { return pDontFastHealMeBefore; }
inline uint32 DontCompleteHealMeBefore() const { return pDontCompleteHealMeBefore; }
inline uint32 DontGroupCompleteHealMeBefore() const { return pDontGroupCompleteHealMeBefore; }
inline uint32 DontHotHealMeBefore() const { return pDontHotHealMeBefore; }
inline uint32 DontBuffMeBefore() const { return pDontBuffMeBefore; }
inline uint32 DontDotMeBefore() const { return pDontDotMeBefore; }
inline uint32 DontRootMeBefore() const { return pDontRootMeBefore; }
inline uint32 DontSnareMeBefore() const { return pDontSnareMeBefore; }
inline uint32 DontCureMeBefore() const { return pDontCureMeBefore; }
inline uint32 DontHealMeBefore() const { return m_dont_heal_me_before; }
inline uint32 DontGroupHealMeBefore() const { return m_dont_group_heal_me_before; }
inline uint32 DontGroupHoTHealMeBefore() const { return m_dont_group_hot_heal_me_before; }
inline uint32 DontRegularHealMeBefore() const { return m_dont_regular_heal_me_before; }
inline uint32 DontVeryFastHealMeBefore() const { return m_dont_very_fast_heal_me_before; }
inline uint32 DontFastHealMeBefore() const { return m_dont_fast_heal_me_before; }
inline uint32 DontCompleteHealMeBefore() const { return m_dont_complete_heal_me_before; }
inline uint32 DontGroupCompleteHealMeBefore() const { return m_dont_group_complete_heal_me_before; }
inline uint32 DontHotHealMeBefore() const { return m_dont_hot_heal_me_before; }
inline uint32 DontBuffMeBefore() const { return m_dont_buff_me_before; }
inline uint32 DontDotMeBefore() const { return m_dont_dot_me_before; }
inline uint32 DontRootMeBefore() const { return m_dont_root_me_before; }
inline uint32 DontSnareMeBefore() const { return m_dont_snare_me_before; }
inline uint32 DontCureMeBefore() const { return m_dont_cure_me_before; }
void SetDontRootMeBefore(uint32 time) { pDontRootMeBefore = time; }
void SetDontHealMeBefore(uint32 time) { pDontHealMeBefore = time; }
void SetDontGroupHealMeBefore(uint32 time) { pDontGroupHealMeBefore = time; }
void SetDontGroupHoTHealMeBefore(uint32 time) { pDontGroupHoTHealMeBefore = time; }
void SetDontRegularHealMeBefore(uint32 time) { pDontRegularHealMeBefore = time; }
void SetDontVeryFastHealMeBefore(uint32 time) { pDontVeryFastHealMeBefore = time; }
void SetDontFastHealMeBefore(uint32 time) { pDontFastHealMeBefore = time; }
void SetDontCompleteHealMeBefore(uint32 time) { pDontCompleteHealMeBefore = time; }
void SetDontGroupCompleteHealMeBefore(uint32 time) { pDontGroupCompleteHealMeBefore = time; }
void SetDontHotHealMeBefore(uint32 time) { pDontHotHealMeBefore = time; }
void SetDontBuffMeBefore(uint32 time) { pDontBuffMeBefore = time; }
void SetDontDotMeBefore(uint32 time) { pDontDotMeBefore = time; }
void SetDontSnareMeBefore(uint32 time) { pDontSnareMeBefore = time; }
void SetDontCureMeBefore(uint32 time) { pDontCureMeBefore = time; }
void SetDontRootMeBefore(uint32 time) { m_dont_root_me_before = time; }
void SetDontHealMeBefore(uint32 time) { m_dont_heal_me_before = time; }
void SetDontGroupHealMeBefore(uint32 time) { m_dont_group_heal_me_before = time; }
void SetDontGroupHoTHealMeBefore(uint32 time) { m_dont_group_hot_heal_me_before = time; }
void SetDontRegularHealMeBefore(uint32 time) { m_dont_regular_heal_me_before = time; }
void SetDontVeryFastHealMeBefore(uint32 time) { m_dont_very_fast_heal_me_before = time; }
void SetDontFastHealMeBefore(uint32 time) { m_dont_fast_heal_me_before = time; }
void SetDontCompleteHealMeBefore(uint32 time) { m_dont_complete_heal_me_before = time; }
void SetDontGroupCompleteHealMeBefore(uint32 time) { m_dont_group_complete_heal_me_before = time; }
void SetDontHotHealMeBefore(uint32 time) { m_dont_hot_heal_me_before = time; }
void SetDontBuffMeBefore(uint32 time) { m_dont_buff_me_before = time; }
void SetDontDotMeBefore(uint32 time) { m_dont_dot_me_before = time; }
void SetDontSnareMeBefore(uint32 time) { m_dont_snare_me_before = time; }
void SetDontCureMeBefore(uint32 time) { m_dont_cure_me_before = time; }
// calculate interruption of spell via movement of mob
void SaveSpellLoc() { m_SpellLocation = glm::vec3(m_Position); }
@@ -1961,20 +1961,20 @@ protected:
bool pause_timer_complete;
bool DistractedFromGrid;
uint32 pDontHealMeBefore;
uint32 pDontGroupHealMeBefore;
uint32 pDontGroupHoTHealMeBefore;
uint32 pDontRegularHealMeBefore;
uint32 pDontVeryFastHealMeBefore;
uint32 pDontFastHealMeBefore;
uint32 pDontCompleteHealMeBefore;
uint32 pDontGroupCompleteHealMeBefore;
uint32 pDontHotHealMeBefore;
uint32 pDontBuffMeBefore;
uint32 pDontDotMeBefore;
uint32 pDontRootMeBefore;
uint32 pDontSnareMeBefore;
uint32 pDontCureMeBefore;
uint32 m_dont_heal_me_before;
uint32 m_dont_group_heal_me_before;
uint32 m_dont_group_hot_heal_me_before;
uint32 m_dont_regular_heal_me_before;
uint32 m_dont_very_fast_heal_me_before;
uint32 m_dont_fast_heal_me_before;
uint32 m_dont_complete_heal_me_before;
uint32 m_dont_group_complete_heal_me_before;
uint32 m_dont_hot_heal_me_before;
uint32 m_dont_buff_me_before;
uint32 m_dont_dot_me_before;
uint32 m_dont_root_me_before;
uint32 m_dont_snare_me_before;
uint32 m_dont_cure_me_before;
// hp event
int nexthpevent;
+6 -6
View File
@@ -393,12 +393,12 @@ void Mob::AI_Init()
minLastFightingDelayMoving = RuleI(NPC, LastFightingDelayMovingMin);
maxLastFightingDelayMoving = RuleI(NPC, LastFightingDelayMovingMax);
pDontHealMeBefore = 0;
pDontBuffMeBefore = Timer::GetCurrentTime() + 400;
pDontDotMeBefore = 0;
pDontRootMeBefore = 0;
pDontSnareMeBefore = 0;
pDontCureMeBefore = 0;
m_dont_heal_me_before = 0;
m_dont_buff_me_before = Timer::GetCurrentTime() + 400;
m_dont_dot_me_before = 0;
m_dont_root_me_before = 0;
m_dont_snare_me_before = 0;
m_dont_cure_me_before = 0;
}
void NPC::AI_Init()