mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-13 06:42:26 +00:00
[Logging] More AI Logging Cleanup (#2616)
* [Logging] Additional AI Cleanup * More cleanup/formatting fixes * Typo
This commit is contained in:
parent
3dfeda9cea
commit
c8218574cc
@ -83,6 +83,11 @@
|
|||||||
OutF(LogSys, Logs::General, Logs::Combat, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
OutF(LogSys, Logs::General, Logs::Combat, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define LogCombatModerate(message, ...) do {\
|
||||||
|
if (LogSys.IsLogEnabled(Logs::Moderate, Logs::Combat))\
|
||||||
|
OutF(LogSys, Logs::Moderate, Logs::Combat, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define LogCombatDetail(message, ...) do {\
|
#define LogCombatDetail(message, ...) do {\
|
||||||
if (LogSys.IsLogEnabled(Logs::Detail, Logs::Combat))\
|
if (LogSys.IsLogEnabled(Logs::Detail, Logs::Combat))\
|
||||||
OutF(LogSys, Logs::Detail, Logs::Combat, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
OutF(LogSys, Logs::Detail, Logs::Combat, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
@ -263,6 +268,11 @@
|
|||||||
OutF(LogSys, Logs::General, Logs::Spells, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
OutF(LogSys, Logs::General, Logs::Spells, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define LogSpellsModerate(message, ...) do {\
|
||||||
|
if (LogSys.IsLogEnabled(Logs::Moderate, Logs::Spells))\
|
||||||
|
OutF(LogSys, Logs::Moderate, Logs::Spells, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define LogSpellsDetail(message, ...) do {\
|
#define LogSpellsDetail(message, ...) do {\
|
||||||
if (LogSys.IsLogEnabled(Logs::Detail, Logs::Spells))\
|
if (LogSys.IsLogEnabled(Logs::Detail, Logs::Spells))\
|
||||||
OutF(LogSys, Logs::Detail, Logs::Spells, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
OutF(LogSys, Logs::Detail, Logs::Spells, __FILE__, __func__, __LINE__, message, ##__VA_ARGS__);\
|
||||||
@ -926,6 +936,9 @@
|
|||||||
#define LogCombat(message, ...) do {\
|
#define LogCombat(message, ...) do {\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define LogCombatModerate(message, ...) do {\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define LogCombatDetail(message, ...) do {\
|
#define LogCombatDetail(message, ...) do {\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
@ -1028,6 +1041,9 @@
|
|||||||
#define LogSpells(message, ...) do {\
|
#define LogSpells(message, ...) do {\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define LogSpellsModerate(message, ...) do {\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define LogSpellsDetail(message, ...) do {\
|
#define LogSpellsDetail(message, ...) do {\
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|||||||
@ -1890,7 +1890,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(results.ColumnCount() <= SPELL_LOAD_FIELD_COUNT) {
|
if(results.ColumnCount() <= SPELL_LOAD_FIELD_COUNT) {
|
||||||
LogSpells("Fatal error loading spells: Spell field count < SPELL_LOAD_FIELD_COUNT([{}])", SPELL_LOAD_FIELD_COUNT);
|
LogSpells("[SharedDatabase::LoadSpells] Fatal error loading spells: Spell field count < SPELL_LOAD_FIELD_COUNT([{}])", SPELL_LOAD_FIELD_COUNT);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1899,7 +1899,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) {
|
|||||||
for (auto& row = results.begin(); row != results.end(); ++row) {
|
for (auto& row = results.begin(); row != results.end(); ++row) {
|
||||||
const int tempid = atoi(row[0]);
|
const int tempid = atoi(row[0]);
|
||||||
if(tempid >= max_spells) {
|
if(tempid >= max_spells) {
|
||||||
LogSpells("Non fatal error: spell.id >= max_spells, ignoring");
|
LogSpells("[SharedDatabase::LoadSpells] Non fatal error: spell.id >= max_spells, ignoring");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3322,14 +3322,14 @@ int64 Mob::ReduceDamage(int64 damage)
|
|||||||
int64 damage_to_reduce = damage * spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] / 100;
|
int64 damage_to_reduce = damage * spellbonuses.MeleeThresholdGuard[SBIndex::THRESHOLDGUARD_MITIGATION_PERCENT] / 100;
|
||||||
if (damage_to_reduce >= buffs[slot].melee_rune)
|
if (damage_to_reduce >= buffs[slot].melee_rune)
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MeleeThresholdGuard [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].melee_rune);
|
LogSpellsDetail("[Mob::ReduceDamage] SE_MeleeThresholdGuard [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
damage -= buffs[slot].melee_rune;
|
damage -= buffs[slot].melee_rune;
|
||||||
if (!TryFadeEffect(slot))
|
if (!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MeleeThresholdGuard [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].melee_rune);
|
LogSpellsDetail("[Mob::ReduceDamage] SE_MeleeThresholdGuard [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
||||||
damage -= damage_to_reduce;
|
damage -= damage_to_reduce;
|
||||||
}
|
}
|
||||||
@ -3347,14 +3347,14 @@ int64 Mob::ReduceDamage(int64 damage)
|
|||||||
|
|
||||||
if (spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT] && (damage_to_reduce >= buffs[slot].melee_rune))
|
if (spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT] && (damage_to_reduce >= buffs[slot].melee_rune))
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].melee_rune);
|
LogSpellsDetail("[Mob::ReduceDamage] SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
damage -= buffs[slot].melee_rune;
|
damage -= buffs[slot].melee_rune;
|
||||||
if (!TryFadeEffect(slot))
|
if (!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].melee_rune);
|
LogSpellsDetail("[Mob::ReduceDamage] SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].melee_rune);
|
||||||
|
|
||||||
if (spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT])
|
if (spellbonuses.MitigateMeleeRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT])
|
||||||
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
buffs[slot].melee_rune = (buffs[slot].melee_rune - damage_to_reduce);
|
||||||
@ -3473,14 +3473,14 @@ int64 Mob::AffectMagicalDamage(int64 damage, uint16 spell_id, const bool iBuffTi
|
|||||||
|
|
||||||
if (spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT] && (damage_to_reduce >= buffs[slot].magic_rune))
|
if (spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT] && (damage_to_reduce >= buffs[slot].magic_rune))
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MitigateSpellDamage [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].magic_rune);
|
LogSpellsDetail("[Mob::AffectMagicalDamage] SE_MitigateSpellDamage [{}] damage negated, [{}] damage remaining, fading buff", damage_to_reduce, buffs[slot].magic_rune);
|
||||||
damage -= buffs[slot].magic_rune;
|
damage -= buffs[slot].magic_rune;
|
||||||
if (!TryFadeEffect(slot))
|
if (!TryFadeEffect(slot))
|
||||||
BuffFadeBySlot(slot);
|
BuffFadeBySlot(slot);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogSpells("Mob::ReduceDamage SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].magic_rune);
|
LogSpellsDetail("[Mob::AffectMagicalDamage] SE_MitigateMeleeDamage [{}] damage negated, [{}] damage remaining", damage_to_reduce, buffs[slot].magic_rune);
|
||||||
|
|
||||||
if (spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT])
|
if (spellbonuses.MitigateSpellRune[SBIndex::MITIGATION_RUNE_MAX_HP_AMT])
|
||||||
buffs[slot].magic_rune = (buffs[slot].magic_rune - damage_to_reduce);
|
buffs[slot].magic_rune = (buffs[slot].magic_rune - damage_to_reduce);
|
||||||
|
|||||||
99
zone/bot.cpp
99
zone/bot.cpp
@ -1610,9 +1610,8 @@ int32 Bot::acmod() {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
return (65 + ((agility - 300) / 21));
|
return (65 + ((agility - 300) / 21));
|
||||||
#if EQDEBUG >= 11
|
|
||||||
LogError("Error in Bot::acmod(): Agility: [{}], Level: [{}]",agility,level);
|
LogError("[Bot::acmod] Agility [{}] Level [{}]",agility,level);
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2136,7 +2135,7 @@ bool Bot::Process()
|
|||||||
|
|
||||||
if (mob_close_scan_timer.Check()) {
|
if (mob_close_scan_timer.Check()) {
|
||||||
LogAIScanCloseDetail(
|
LogAIScanCloseDetail(
|
||||||
"is_moving [{}] bot [{}] timer [{}]",
|
"[Bot::Process] is_moving [{}] bot [{}] timer [{}]",
|
||||||
moving ? "true" : "false",
|
moving ? "true" : "false",
|
||||||
GetCleanName(),
|
GetCleanName(),
|
||||||
mob_close_scan_timer.GetDuration()
|
mob_close_scan_timer.GetDuration()
|
||||||
@ -2294,7 +2293,7 @@ void Bot::BotRangedAttack(Mob* other) {
|
|||||||
//make sure the attack and ranged timers are up
|
//make sure the attack and ranged timers are up
|
||||||
//if the ranged timer is disabled, then they have no ranged weapon and shouldent be attacking anyhow
|
//if the ranged timer is disabled, then they have no ranged weapon and shouldent be attacking anyhow
|
||||||
if((attack_timer.Enabled() && !attack_timer.Check(false)) || (ranged_timer.Enabled() && !ranged_timer.Check())) {
|
if((attack_timer.Enabled() && !attack_timer.Check(false)) || (ranged_timer.Enabled() && !ranged_timer.Check())) {
|
||||||
LogCombat("Bot Archery attack canceled. Timer not up. Attack [{}], ranged [{}]", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
LogCombatDetail("[Bot::BotRangedAttack] Bot Archery attack canceled. Timer not up. Attack [{}] ranged [{}]", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
||||||
Message(0, "Error: Timer not up. Attack %d, ranged %d", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
Message(0, "Error: Timer not up. Attack %d, ranged %d", attack_timer.GetRemainingTime(), ranged_timer.GetRemainingTime());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2312,7 +2311,7 @@ void Bot::BotRangedAttack(Mob* other) {
|
|||||||
if(!RangeWeapon || !Ammo)
|
if(!RangeWeapon || !Ammo)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LogCombat("Shooting [{}] with bow [{}] ([{}]) and arrow [{}] ([{}])", other->GetCleanName(), RangeWeapon->Name, RangeWeapon->ID, Ammo->Name, Ammo->ID);
|
LogCombatDetail("[Bot::BotRangedAttack] Shooting [{}] with bow [{}] ([{}]) and arrow [{}] ([{}])", other->GetCleanName(), RangeWeapon->Name, RangeWeapon->ID, Ammo->Name, Ammo->ID);
|
||||||
if(!IsAttackAllowed(other) || IsCasting() || DivineAura() || IsStunned() || IsMezzed() || (GetAppearance() == eaDead))
|
if(!IsAttackAllowed(other) || IsCasting() || DivineAura() || IsStunned() || IsMezzed() || (GetAppearance() == eaDead))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -2322,21 +2321,21 @@ void Bot::BotRangedAttack(Mob* other) {
|
|||||||
|
|
||||||
//break invis when you attack
|
//break invis when you attack
|
||||||
if(invisible) {
|
if(invisible) {
|
||||||
LogCombat("Removing invisibility due to melee attack");
|
LogCombatModerate("[Bot::BotRangedAttack] Removing invisibility due to melee attack");
|
||||||
BuffFadeByEffect(SE_Invisibility);
|
BuffFadeByEffect(SE_Invisibility);
|
||||||
BuffFadeByEffect(SE_Invisibility2);
|
BuffFadeByEffect(SE_Invisibility2);
|
||||||
invisible = false;
|
invisible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(invisible_undead) {
|
if(invisible_undead) {
|
||||||
LogCombat("Removing invisibility vs. undead due to melee attack");
|
LogCombatModerate("[Bot::BotRangedAttack] Removing invisibility vs. undead due to melee attack");
|
||||||
BuffFadeByEffect(SE_InvisVsUndead);
|
BuffFadeByEffect(SE_InvisVsUndead);
|
||||||
BuffFadeByEffect(SE_InvisVsUndead2);
|
BuffFadeByEffect(SE_InvisVsUndead2);
|
||||||
invisible_undead = false;
|
invisible_undead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(invisible_animals) {
|
if(invisible_animals) {
|
||||||
LogCombat("Removing invisibility vs. animals due to melee attack");
|
LogCombatModerate("[Bot::BotRangedAttack] Removing invisibility vs. animals due to melee attack");
|
||||||
BuffFadeByEffect(SE_InvisVsAnimals);
|
BuffFadeByEffect(SE_InvisVsAnimals);
|
||||||
invisible_animals = false;
|
invisible_animals = false;
|
||||||
}
|
}
|
||||||
@ -3496,7 +3495,7 @@ void Bot::AI_Process()
|
|||||||
|
|
||||||
if (GetTarget() && !IsRooted()) {
|
if (GetTarget() && !IsRooted()) {
|
||||||
|
|
||||||
LogAI("Pursuing [{}] while engaged", GetTarget()->GetCleanName());
|
LogAIDetail("[Bot::AI_Process] Pursuing [{}] while engaged", GetTarget()->GetCleanName());
|
||||||
Goal = GetTarget()->GetPosition();
|
Goal = GetTarget()->GetPosition();
|
||||||
if (DistanceSquared(m_Position, Goal) <= leash_distance) {
|
if (DistanceSquared(m_Position, Goal) <= leash_distance) {
|
||||||
RunTo(Goal.x, Goal.y, Goal.z);
|
RunTo(Goal.x, Goal.y, Goal.z);
|
||||||
@ -3882,7 +3881,7 @@ void Bot::PetAIProcess() {
|
|||||||
else if (botPet->GetTarget() && botPet->GetAIMovementTimer()->Check()) {
|
else if (botPet->GetTarget() && botPet->GetAIMovementTimer()->Check()) {
|
||||||
botPet->SetRunAnimSpeed(0);
|
botPet->SetRunAnimSpeed(0);
|
||||||
if(!botPet->IsRooted()) {
|
if(!botPet->IsRooted()) {
|
||||||
LogAI("Pursuing [{}] while engaged", botPet->GetTarget()->GetCleanName());
|
LogAIDetail("[Bot::AI_Process] Pursuing [{}] while engaged", botPet->GetTarget()->GetCleanName());
|
||||||
botPet->RunTo(botPet->GetTarget()->GetX(), botPet->GetTarget()->GetY(), botPet->GetTarget()->GetZ());
|
botPet->RunTo(botPet->GetTarget()->GetX(), botPet->GetTarget()->GetY(), botPet->GetTarget()->GetZ());
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
@ -4417,7 +4416,7 @@ void Bot::AddBotItem(
|
|||||||
|
|
||||||
if (!inst) {
|
if (!inst) {
|
||||||
LogError(
|
LogError(
|
||||||
"Bot:AddItem Invalid Item data: ID [{}] Charges [{}] Aug1 [{}] Aug2 [{}] Aug3 [{}] Aug4 [{}] Aug5 [{}] Aug6 [{}] Attuned [{}]",
|
"[Bot::AI_Process] Bot:AddItem Invalid Item data: ID [{}] Charges [{}] Aug1 [{}] Aug2 [{}] Aug3 [{}] Aug4 [{}] Aug5 [{}] Aug6 [{}] Attuned [{}]",
|
||||||
item_id,
|
item_id,
|
||||||
charges,
|
charges,
|
||||||
augment_one,
|
augment_one,
|
||||||
@ -4432,7 +4431,7 @@ void Bot::AddBotItem(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) {
|
if (!database.botdb.SaveItemBySlot(this, slot_id, inst)) {
|
||||||
LogError("Failed to save item by slot to slot [{}] for [{}].", slot_id, GetCleanName());
|
LogError("[Bot::AI_Process] Failed to save item by slot to slot [{}] for [{}].", slot_id, GetCleanName());
|
||||||
safe_delete(inst);
|
safe_delete(inst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -4683,7 +4682,7 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!trade_instance->GetItem()) {
|
if (!trade_instance->GetItem()) {
|
||||||
LogError("Bot::PerformTradeWithClient could not find item from instance in trade for {} with {} in slot {}.", client->GetCleanName(), GetCleanName(), trade_index);
|
LogError("[Bot::PerformTradeWithClient] could not find item from instance in trade for [{}] with [{}] in slot [{}].", client->GetCleanName(), GetCleanName(), trade_index);
|
||||||
client->Message(
|
client->Message(
|
||||||
Chat::White,
|
Chat::White,
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -4702,7 +4701,7 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
|
|||||||
auto item_link = linker.GenerateLink();
|
auto item_link = linker.GenerateLink();
|
||||||
|
|
||||||
if (trade_index != invslot::slotCursor && !trade_instance->IsDroppable()) {
|
if (trade_index != invslot::slotCursor && !trade_instance->IsDroppable()) {
|
||||||
LogError("Bot::PerformTradeWithClient trade hack detected by {} with {}.", client->GetCleanName(), GetCleanName());
|
LogError("[Bot::PerformTradeWithClient] trade hack detected by [{}] with [{}].", client->GetCleanName(), GetCleanName());
|
||||||
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
||||||
client->ResetTrade();
|
client->ResetTrade();
|
||||||
return;
|
return;
|
||||||
@ -4791,14 +4790,14 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (trade_instance->GetItem()->LoreGroup == -1 && check_iterator.trade_item_instance->GetItem()->ID == trade_instance->GetItem()->ID) {
|
if (trade_instance->GetItem()->LoreGroup == -1 && check_iterator.trade_item_instance->GetItem()->ID == trade_instance->GetItem()->ID) {
|
||||||
LogError("Bot::PerformTradeWithClient trade hack detected by {} with {}.", client->GetCleanName(), GetCleanName());
|
LogError("[Bot::PerformTradeWithClient] trade hack detected by [{}] with [{}].", client->GetCleanName(), GetCleanName());
|
||||||
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
||||||
client->ResetTrade();
|
client->ResetTrade();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((trade_instance->GetItem()->LoreGroup > 0) && (check_iterator.trade_item_instance->GetItem()->LoreGroup == trade_instance->GetItem()->LoreGroup)) {
|
if ((trade_instance->GetItem()->LoreGroup > 0) && (check_iterator.trade_item_instance->GetItem()->LoreGroup == trade_instance->GetItem()->LoreGroup)) {
|
||||||
LogError("Bot::PerformTradeWithClient trade hack detected by {} with {}.", client->GetCleanName(), GetCleanName());
|
LogError("[Bot::PerformTradeWithClient] trade hack detected by [{}] with [{}].", client->GetCleanName(), GetCleanName());
|
||||||
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
client->Message(Chat::White, "Trade hack detected, the trade has been cancelled.");
|
||||||
client->ResetTrade();
|
client->ResetTrade();
|
||||||
return;
|
return;
|
||||||
@ -4922,7 +4921,7 @@ void Bot::PerformTradeWithClient(int16 begin_slot_id, int16 end_slot_id, Client*
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!return_instance->GetItem()) {
|
if (!return_instance->GetItem()) {
|
||||||
LogError("Bot::PerformTradeWithClient error processing bot slot {} for {} in trade with {}.", return_iterator.from_bot_slot, GetCleanName(), client->GetCleanName());
|
LogError("[Bot::PerformTradeWithClient] error processing bot slot [{}] for [{}] in trade with [{}].", return_iterator.from_bot_slot, GetCleanName(), client->GetCleanName());
|
||||||
client->Message(
|
client->Message(
|
||||||
Chat::White,
|
Chat::White,
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -5230,7 +5229,7 @@ void Bot::Damage(Mob *from, int64 damage, uint16 spell_id, EQ::skills::SkillType
|
|||||||
|
|
||||||
//handle EVENT_ATTACK. Resets after we have not been attacked for 12 seconds
|
//handle EVENT_ATTACK. Resets after we have not been attacked for 12 seconds
|
||||||
if(attacked_timer.Check()) {
|
if(attacked_timer.Check()) {
|
||||||
LogCombat("Triggering EVENT_ATTACK due to attack by [{}]", from->GetName());
|
LogCombat("[Bot::Damage] Triggering EVENT_ATTACK due to attack by [{}]", from->GetName());
|
||||||
parse->EventBot(EVENT_ATTACK, this, from, "", 0);
|
parse->EventBot(EVENT_ATTACK, this, from, "", 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5238,7 +5237,7 @@ void Bot::Damage(Mob *from, int64 damage, uint16 spell_id, EQ::skills::SkillType
|
|||||||
// if spell is lifetap add hp to the caster
|
// if spell is lifetap add hp to the caster
|
||||||
if (spell_id != SPELL_UNKNOWN && IsLifetapSpell(spell_id)) {
|
if (spell_id != SPELL_UNKNOWN && IsLifetapSpell(spell_id)) {
|
||||||
int64 healed = GetActSpellHealing(spell_id, damage);
|
int64 healed = GetActSpellHealing(spell_id, damage);
|
||||||
LogCombat("Applying lifetap heal of [{}] to [{}]", healed, GetCleanName());
|
LogCombatDetail("[Bot::Damage] Applying lifetap heal of [{}] to [{}]", healed, GetCleanName());
|
||||||
HealDamage(healed);
|
HealDamage(healed);
|
||||||
entity_list.FilteredMessageClose(this, true, RuleI(Range, SpellMessages), Chat::Emote, FilterSocials, "%s beams a smile at %s", GetCleanName(), from->GetCleanName() );
|
entity_list.FilteredMessageClose(this, true, RuleI(Range, SpellMessages), Chat::Emote, FilterSocials, "%s beams a smile at %s", GetCleanName(), from->GetCleanName() );
|
||||||
}
|
}
|
||||||
@ -5274,13 +5273,13 @@ void Bot::AddToHateList(Mob* other, int64 hate, int64 damage, bool iYellForHelp,
|
|||||||
bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, bool IsFromSpell, ExtraAttackOptions *opts) {
|
bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, bool IsFromSpell, ExtraAttackOptions *opts) {
|
||||||
if (!other) {
|
if (!other) {
|
||||||
SetTarget(nullptr);
|
SetTarget(nullptr);
|
||||||
LogError("A null Mob object was passed to Bot::Attack for evaluation!");
|
LogErrorDetail("[Bot::Attack] A null Mob object was passed to Bot::Attack for evaluation!");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((GetHP() <= 0) || (GetAppearance() == eaDead)) {
|
if ((GetHP() <= 0) || (GetAppearance() == eaDead)) {
|
||||||
SetTarget(nullptr);
|
SetTarget(nullptr);
|
||||||
LogCombat("Attempted to attack [{}] while unconscious or, otherwise, appearing dead", other->GetCleanName());
|
LogCombatModerate("[Bot::Attack] Attempted to attack [{}] while unconscious or, otherwise, appearing dead", other->GetCleanName());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5292,20 +5291,20 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
// takes more to compare a call result, load for a call, load a compare to address and compare, and finally
|
// takes more to compare a call result, load for a call, load a compare to address and compare, and finally
|
||||||
// push a value to an address than to just load for a call and push a value to an address.
|
// push a value to an address than to just load for a call and push a value to an address.
|
||||||
|
|
||||||
LogCombat("Attacking [{}] with hand [{}] [{}]", other->GetCleanName(), Hand, (FromRiposte ? "(this is a riposte)" : ""));
|
LogCombat("[Bot::Attack] Attacking [{}] with hand [{}] [{}]", other->GetCleanName(), Hand, (FromRiposte ? "(this is a riposte)" : ""));
|
||||||
if ((IsCasting() && (GetClass() != BARD) && !IsFromSpell) || (!IsAttackAllowed(other))) {
|
if ((IsCasting() && (GetClass() != BARD) && !IsFromSpell) || (!IsAttackAllowed(other))) {
|
||||||
if(GetOwnerID())
|
if(GetOwnerID())
|
||||||
entity_list.MessageClose(this, 1, 200, 10, "%s says, '%s is not a legal target master.'", GetCleanName(), GetTarget()->GetCleanName());
|
entity_list.MessageClose(this, 1, 200, 10, "%s says, '%s is not a legal target master.'", GetCleanName(), GetTarget()->GetCleanName());
|
||||||
|
|
||||||
if(other) {
|
if(other) {
|
||||||
RemoveFromHateList(other);
|
RemoveFromHateList(other);
|
||||||
LogCombat("I am not allowed to attack [{}]", other->GetCleanName());
|
LogCombat("[Bot::Attack] I am not allowed to attack [{}]", other->GetCleanName());
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(DivineAura()) {//cant attack while invulnerable
|
if(DivineAura()) {//cant attack while invulnerable
|
||||||
LogCombat("Attack canceled, Divine Aura is in effect");
|
LogCombat("[Bot::Attack] Attack canceled, Divine Aura is in effect");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5323,19 +5322,19 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
|
|
||||||
if(weapon != nullptr) {
|
if(weapon != nullptr) {
|
||||||
if (!weapon->IsWeapon()) {
|
if (!weapon->IsWeapon()) {
|
||||||
LogCombat("Attack canceled, Item [{}] ([{}]) is not a weapon", weapon->GetItem()->Name, weapon->GetID());
|
LogCombat("[Bot::Attack] Attack canceled, Item [{}] ([{}]) is not a weapon", weapon->GetItem()->Name, weapon->GetID());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
LogCombat("Attacking with weapon: [{}] ([{}])", weapon->GetItem()->Name, weapon->GetID());
|
LogCombat("[Bot::Attack] Attacking with weapon: [{}] ([{}])", weapon->GetItem()->Name, weapon->GetID());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogCombat("Attacking without a weapon");
|
LogCombat("[Bot::Attack] Attacking without a weapon");
|
||||||
|
|
||||||
// calculate attack_skill and skillinuse depending on hand and weapon
|
// calculate attack_skill and skillinuse depending on hand and weapon
|
||||||
// also send Packet to near clients
|
// also send Packet to near clients
|
||||||
DamageHitInfo my_hit;
|
DamageHitInfo my_hit;
|
||||||
my_hit.skill = AttackAnimation(Hand, weapon);
|
my_hit.skill = AttackAnimation(Hand, weapon);
|
||||||
LogCombat("Attacking with [{}] in slot [{}] using skill [{}]", weapon?weapon->GetItem()->Name:"Fist", Hand, my_hit.skill);
|
LogCombat("[Bot::Attack] Attacking with [{}] in slot [{}] using skill [{}]", weapon?weapon->GetItem()->Name:"Fist", Hand, my_hit.skill);
|
||||||
|
|
||||||
// Now figure out damage
|
// Now figure out damage
|
||||||
my_hit.damage_done = 1;
|
my_hit.damage_done = 1;
|
||||||
@ -5383,7 +5382,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogCombat("Damage calculated: base [{}] min damage [{}] skill [{}]", my_hit.base_damage, my_hit.min_damage, my_hit.skill);
|
LogCombat("[Bot::Attack] Damage calculated: base [{}] min damage [{}] skill [{}]", my_hit.base_damage, my_hit.min_damage, my_hit.skill);
|
||||||
|
|
||||||
int hit_chance_bonus = 0;
|
int hit_chance_bonus = 0;
|
||||||
my_hit.offense = offense(my_hit.skill);
|
my_hit.offense = offense(my_hit.skill);
|
||||||
@ -5401,7 +5400,7 @@ bool Bot::Attack(Mob* other, int Hand, bool FromRiposte, bool IsStrikethrough, b
|
|||||||
|
|
||||||
DoAttack(other, my_hit, opts, FromRiposte);
|
DoAttack(other, my_hit, opts, FromRiposte);
|
||||||
|
|
||||||
LogCombat("Final damage after all reductions: [{}]", my_hit.damage_done);
|
LogCombat("[Bot::Attack] Final damage after all reductions: [{}]", my_hit.damage_done);
|
||||||
} else {
|
} else {
|
||||||
my_hit.damage_done = DMG_INVULNERABLE;
|
my_hit.damage_done = DMG_INVULNERABLE;
|
||||||
}
|
}
|
||||||
@ -6022,7 +6021,7 @@ int32 Bot::CalcBotFocusEffect(focusType bottype, uint16 focus_id, uint16 spell_i
|
|||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
LogInfo("CalcFocusEffect: unknown limit spelltype [{}]", focus_spell.base_value[i]);
|
LogInfo("[Bot::CalcBotFocusEffect] CalcFocusEffect: unknown limit spelltype [{}]", focus_spell.base_value[i]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -6255,7 +6254,7 @@ int32 Bot::CalcBotFocusEffect(focusType bottype, uint16 focus_id, uint16 spell_i
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
LogSpells("CalcFocusEffect: unknown effectid [{}]", focus_spell.effect_id[i]);
|
LogSpellsModerate("[Bot::CalcBotFocusEffect] unknown effectid [{}]", focus_spell.effect_id[i]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6295,7 +6294,7 @@ float Bot::GetProcChances(float ProcBonus, uint16 hand) {
|
|||||||
ProcChance += (ProcChance * ProcBonus / 100.0f);
|
ProcChance += (ProcChance * ProcBonus / 100.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogCombat("Proc chance [{}] ([{}] from bonuses)", ProcChance, ProcBonus);
|
LogCombat("[Bot::GetProcChances] Proc chance [{}] ([{}] from bonuses)", ProcChance, ProcBonus);
|
||||||
return ProcChance;
|
return ProcChance;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -6349,13 +6348,13 @@ bool Bot::TryFinishingBlow(Mob *defender, int64 &damage)
|
|||||||
int fb_damage = aabonuses.FinishingBlow[1];
|
int fb_damage = aabonuses.FinishingBlow[1];
|
||||||
int levelreq = aabonuses.FinishingBlowLvl[0];
|
int levelreq = aabonuses.FinishingBlowLvl[0];
|
||||||
if (defender->GetLevel() <= levelreq && (chance >= zone->random.Int(1, 1000))) {
|
if (defender->GetLevel() <= levelreq && (chance >= zone->random.Int(1, 1000))) {
|
||||||
LogCombat("Landed a finishing blow: levelreq at [{}], other level [{}]",
|
LogCombat("[Bot::TryFinishingBlow] Landed a finishing blow: levelreq at [{}] other level [{}]",
|
||||||
levelreq, defender->GetLevel());
|
levelreq, defender->GetLevel());
|
||||||
entity_list.MessageCloseString(this, false, 200, Chat::MeleeCrit, FINISHING_BLOW, GetName());
|
entity_list.MessageCloseString(this, false, 200, Chat::MeleeCrit, FINISHING_BLOW, GetName());
|
||||||
damage = fb_damage;
|
damage = fb_damage;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
LogCombat("failed a finishing blow: levelreq at [{}], other level [{}]",
|
LogCombat("[Bot::TryFinishingBlow] failed a finishing blow: levelreq at [{}] other level [{}]",
|
||||||
levelreq, defender->GetLevel());
|
levelreq, defender->GetLevel());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -6364,14 +6363,14 @@ bool Bot::TryFinishingBlow(Mob *defender, int64 &damage)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Bot::DoRiposte(Mob* defender) {
|
void Bot::DoRiposte(Mob* defender) {
|
||||||
LogCombat("Preforming a riposte");
|
LogCombatDetail("[Bot::DoRiposte] Preforming a riposte");
|
||||||
if (!defender)
|
if (!defender)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
defender->Attack(this, EQ::invslot::slotPrimary, true);
|
defender->Attack(this, EQ::invslot::slotPrimary, true);
|
||||||
int32 DoubleRipChance = (defender->GetAABonuses().GiveDoubleRiposte[0] + defender->GetSpellBonuses().GiveDoubleRiposte[0] + defender->GetItemBonuses().GiveDoubleRiposte[0]);
|
int32 DoubleRipChance = (defender->GetAABonuses().GiveDoubleRiposte[0] + defender->GetSpellBonuses().GiveDoubleRiposte[0] + defender->GetItemBonuses().GiveDoubleRiposte[0]);
|
||||||
if(DoubleRipChance && (DoubleRipChance >= zone->random.Int(0, 100))) {
|
if(DoubleRipChance && (DoubleRipChance >= zone->random.Int(0, 100))) {
|
||||||
LogCombat("Preforming a double riposte ([{}] percent chance)", DoubleRipChance);
|
LogCombatDetail("[Bot::DoRiposte] Preforming a double riposte ([{}] percent chance)", DoubleRipChance);
|
||||||
defender->Attack(this, EQ::invslot::slotPrimary, true);
|
defender->Attack(this, EQ::invslot::slotPrimary, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7118,7 +7117,7 @@ int64 Bot::CalcMaxMana() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
LogDebug("Invalid Class [{}] in CalcMaxMana", GetCasterClass());
|
LogDebug("[Bot::CalcMaxMana] Invalid Class [{}] in CalcMaxMana", GetCasterClass());
|
||||||
max_mana = 0;
|
max_mana = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -7668,7 +7667,9 @@ bool Bot::CastSpell(
|
|||||||
(IsSilenced() && !IsDiscipline(spell_id)) ||
|
(IsSilenced() && !IsDiscipline(spell_id)) ||
|
||||||
(IsAmnesiad() && IsDiscipline(spell_id))
|
(IsAmnesiad() && IsDiscipline(spell_id))
|
||||||
) {
|
) {
|
||||||
LogSpells("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() );
|
LogSpellsModerate("[Bot::CastSpell] 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)) {
|
if (IsSilenced() && !IsDiscipline(spell_id)) {
|
||||||
MessageString(Chat::White, SILENCED_STRING);
|
MessageString(Chat::White, SILENCED_STRING);
|
||||||
}
|
}
|
||||||
@ -7695,7 +7696,7 @@ bool Bot::CastSpell(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (DivineAura()) {
|
if (DivineAura()) {
|
||||||
LogSpells("Spell casting canceled: cannot cast while Divine Aura is in effect");
|
LogSpellsDetail("[Bot::CastSpell] Spell casting canceled: cannot cast while Divine Aura is in effect");
|
||||||
InterruptSpell(173, 0x121, false);
|
InterruptSpell(173, 0x121, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -7705,13 +7706,13 @@ bool Bot::CastSpell(
|
|||||||
InterruptSpell(fizzle_msg, 0x121, spell_id);
|
InterruptSpell(fizzle_msg, 0x121, spell_id);
|
||||||
|
|
||||||
uint32 use_mana = ((spells[spell_id].mana) / 4);
|
uint32 use_mana = ((spells[spell_id].mana) / 4);
|
||||||
LogSpells("Spell casting canceled: fizzled. [{}] mana has been consumed", use_mana);
|
LogSpellsModerate("[Bot::CastSpell] Spell casting canceled: fizzled. [{}] mana has been consumed", use_mana);
|
||||||
SetMana(GetMana() - use_mana);
|
SetMana(GetMana() - use_mana);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasActiveSong()) {
|
if (HasActiveSong()) {
|
||||||
LogSpells("Casting a new spell/song while singing a song. Killing old song [{}]", bardsong);
|
LogSpellsDetail("[Bot::CastSpell] Casting a new spell/song while singing a song. Killing old song [{}]", bardsong);
|
||||||
bardsong = 0;
|
bardsong = 0;
|
||||||
bardsong_target_id = 0;
|
bardsong_target_id = 0;
|
||||||
bardsong_slot = EQ::spells::CastingSlot::Gem1;
|
bardsong_slot = EQ::spells::CastingSlot::Gem1;
|
||||||
@ -7763,19 +7764,19 @@ bool Bot::IsImmuneToSpell(uint16 spell_id, Mob *caster) {
|
|||||||
if(caster->IsBot()) {
|
if(caster->IsBot()) {
|
||||||
if(spells[spell_id].target_type == ST_Undead) {
|
if(spells[spell_id].target_type == ST_Undead) {
|
||||||
if((GetBodyType() != BT_SummonedUndead) && (GetBodyType() != BT_Undead) && (GetBodyType() != BT_Vampire)) {
|
if((GetBodyType() != BT_SummonedUndead) && (GetBodyType() != BT_Undead) && (GetBodyType() != BT_Vampire)) {
|
||||||
LogSpells("Bot's target is not an undead");
|
LogSpellsModerate("[Bot::IsImmuneToSpell] Bot's target is not an undead");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(spells[spell_id].target_type == ST_Summoned) {
|
if(spells[spell_id].target_type == ST_Summoned) {
|
||||||
if((GetBodyType() != BT_SummonedUndead) && (GetBodyType() != BT_Summoned) && (GetBodyType() != BT_Summoned2) && (GetBodyType() != BT_Summoned3)) {
|
if((GetBodyType() != BT_SummonedUndead) && (GetBodyType() != BT_Summoned) && (GetBodyType() != BT_Summoned2) && (GetBodyType() != BT_Summoned3)) {
|
||||||
LogSpells("Bot's target is not a summoned creature");
|
LogSpellsModerate("[Bot::IsImmuneToSpell] Bot's target is not a summoned creature");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSpells("No bot immunities to spell [{}] found", spell_id);
|
LogSpellsModerate("[Bot::IsImmuneToSpell] No bot immunities to spell [{}] found", spell_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -7926,7 +7927,7 @@ bool Bot::DoFinishedSpellSingleTarget(uint16 spell_id, Mob* spellTarget, EQ::spe
|
|||||||
if((spelltypeequal || spelltypetargetequal) || spelltypeclassequal || slotequal) {
|
if((spelltypeequal || spelltypetargetequal) || spelltypeclassequal || slotequal) {
|
||||||
if(((spells[thespell].effect_id[0] == 0) && (spells[thespell].base_value[0] < 0)) &&
|
if(((spells[thespell].effect_id[0] == 0) && (spells[thespell].base_value[0] < 0)) &&
|
||||||
(spellTarget->GetHP() < ((spells[thespell].base_value[0] * (-1)) + 100))) {
|
(spellTarget->GetHP() < ((spells[thespell].base_value[0] * (-1)) + 100))) {
|
||||||
LogSpells("Bot::DoFinishedSpellSingleTarget - GroupBuffing failure");
|
LogSpells("[Bot::DoFinishedSpellSingleTarget] GroupBuffing failure");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9411,7 +9412,7 @@ bool Bot::CheckLoreConflict(const EQ::ItemData* item) {
|
|||||||
|
|
||||||
bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, float iRange, uint32 iSpellTypes) {
|
bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, float iRange, uint32 iSpellTypes) {
|
||||||
if((iSpellTypes & SPELL_TYPES_DETRIMENTAL) != 0) {
|
if((iSpellTypes & SPELL_TYPES_DETRIMENTAL) != 0) {
|
||||||
LogError("Error: detrimental spells requested from AICheckCloseBeneficialSpells!!");
|
LogError("[EntityList::Bot_AICheckCloseBeneficialSpells] detrimental spells requested");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -9845,7 +9846,7 @@ void EntityList::ScanCloseClientMobs(std::unordered_map<uint16, Mob*>& close_mob
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogAIScanCloseModerate("Close Client Mob List Size [{}] for mob [{}]", close_mobs.size(), scanning_mob->GetCleanName());
|
LogAIScanCloseModerate("[EntityList::ScanCloseClientMobs] Close Client Mob List Size [{}] for mob [{}]", close_mobs.size(), scanning_mob->GetCleanName());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 Bot::GetNumberNeedingHealedInGroup(uint8 hpr, bool includePets) {
|
uint8 Bot::GetNumberNeedingHealedInGroup(uint8 hpr, bool includePets) {
|
||||||
|
|||||||
@ -1165,7 +1165,7 @@ bool Bot::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain
|
|||||||
|| dist2 <= GetActSpellRange(AIBot_spells[i].spellid, spells[AIBot_spells[i].spellid].range)*GetActSpellRange(AIBot_spells[i].spellid, spells[AIBot_spells[i].spellid].range)) && (mana_cost <= GetMana() || GetMana() == GetMaxMana()))
|
|| dist2 <= GetActSpellRange(AIBot_spells[i].spellid, spells[AIBot_spells[i].spellid].range)*GetActSpellRange(AIBot_spells[i].spellid, spells[AIBot_spells[i].spellid].range)) && (mana_cost <= GetMana() || GetMana() == GetMaxMana()))
|
||||||
{
|
{
|
||||||
casting_spell_AIindex = i;
|
casting_spell_AIindex = i;
|
||||||
LogAIModerate("Bot::AIDoSpellCast: spellid = [{}], tar = [{}], mana = [{}], Name: [{}]", AIBot_spells[i].spellid, tar->GetName(), mana_cost, spells[AIBot_spells[i].spellid].name);
|
LogAI("[Bot::AIDoSpellCast] spellid [{}] tar [{}] mana [{}] Name [{}]", AIBot_spells[i].spellid, tar->GetName(), mana_cost, spells[AIBot_spells[i].spellid].name);
|
||||||
result = Mob::CastSpell(AIBot_spells[i].spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, spells[AIBot_spells[i].spellid].cast_time, AIBot_spells[i].manacost == -2 ? 0 : mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIBot_spells[i].resist_adjust));
|
result = Mob::CastSpell(AIBot_spells[i].spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, spells[AIBot_spells[i].spellid].cast_time, AIBot_spells[i].manacost == -2 ? 0 : mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIBot_spells[i].resist_adjust));
|
||||||
|
|
||||||
if (IsCasting() && IsSitting())
|
if (IsCasting() && IsSitting())
|
||||||
@ -1232,9 +1232,7 @@ bool Bot::AI_IdleCastCheck() {
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (AIautocastspell_timer->Check(false)) {
|
if (AIautocastspell_timer->Check(false)) {
|
||||||
#if BotAI_DEBUG_Spells >= 25
|
|
||||||
LogAIDetail("Bot Non-Engaged autocast check triggered: [{}]", GetCleanName());
|
LogAIDetail("Bot Non-Engaged autocast check triggered: [{}]", GetCleanName());
|
||||||
#endif
|
|
||||||
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
||||||
|
|
||||||
bool pre_combat = false;
|
bool pre_combat = false;
|
||||||
@ -1714,10 +1712,10 @@ bool Bot::AIHealRotation(Mob* tar, bool useFastHeals) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogAIModerate("Bot::AIHealRotation: heal spellid = [{}], fastheals = [{}], casterlevel = [{}]",
|
LogAIModerate("[Bot::AIHealRotation] heal spellid [{}] fastheals [{}] casterlevel [{}]",
|
||||||
botSpell.SpellId, ((useFastHeals) ? ('T') : ('F')), GetLevel());
|
botSpell.SpellId, ((useFastHeals) ? ('T') : ('F')), GetLevel());
|
||||||
|
|
||||||
LogAIDetail("Bot::AIHealRotation: target = [{}], current_time = [{}], donthealmebefore = [{}]", tar->GetCleanName(), Timer::GetCurrentTime(), tar->DontHealMeBefore());
|
LogAIDetail("[Bot::AIHealRotation] target [{}] current_time [{}] donthealmebefore [{}]", tar->GetCleanName(), Timer::GetCurrentTime(), tar->DontHealMeBefore());
|
||||||
|
|
||||||
// If there is still no spell id, then there isn't going to be one so we are done
|
// If there is still no spell id, then there isn't going to be one so we are done
|
||||||
if (botSpell.SpellId == 0)
|
if (botSpell.SpellId == 0)
|
||||||
@ -2910,7 +2908,7 @@ bool Bot::AI_AddBotSpells(uint32 bot_spell_id) {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
LogAIModerate("[{}]", debug_msg);
|
LogAI("[{}]", debug_msg);
|
||||||
for (const auto &iter : spell_list->entries) {
|
for (const auto &iter : spell_list->entries) {
|
||||||
LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
||||||
}
|
}
|
||||||
@ -2918,10 +2916,10 @@ bool Bot::AI_AddBotSpells(uint32 bot_spell_id) {
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
debug_msg.append(" (not found)");
|
debug_msg.append(" (not found)");
|
||||||
LogAIModerate("[{}]", debug_msg);
|
LogAI("[{}]", debug_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
LogAIModerate("fin (spell list)");
|
LogAI("fin (spell list)");
|
||||||
|
|
||||||
uint16 attack_proc_spell = -1;
|
uint16 attack_proc_spell = -1;
|
||||||
int8 proc_chance = 3;
|
int8 proc_chance = 3;
|
||||||
|
|||||||
@ -581,7 +581,7 @@ int64 Client::CalcMaxMana()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
LogSpells("Invalid Class [{}] in CalcMaxMana", GetCasterClass());
|
LogSpells("[Client::CalcMaxMana] Invalid Class [{}] in CalcMaxMana", GetCasterClass());
|
||||||
max_mana = 0;
|
max_mana = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -599,7 +599,7 @@ int64 Client::CalcMaxMana()
|
|||||||
current_mana = curMana_cap;
|
current_mana = curMana_cap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogSpells("Client::CalcMaxMana() called for [{}] - returning [{}]", GetName(), max_mana);
|
LogSpells("[Client::CalcMaxMana] for [{}] returning [{}]", GetName(), max_mana);
|
||||||
return max_mana;
|
return max_mana;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1663,7 +1663,7 @@ uint32 Mob::GetInstrumentMod(uint16 spell_id)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSpells("[{}]::GetInstrumentMod() spell=[{}] mod=[{}] modcap=[{}]\n", GetName(), spell_id, effectmod, effectmodcap);
|
LogSpells("[Mob::GetInstrumentMod] Name [{}] spell [{}] mod [{}] modcap [{}]\n", GetName(), spell_id, effectmod, effectmodcap);
|
||||||
|
|
||||||
return effectmod;
|
return effectmod;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3896,14 +3896,14 @@ void Client::Handle_OP_Buff(const EQApplicationPacket *app)
|
|||||||
*/
|
*/
|
||||||
if (app->size != sizeof(SpellBuffPacket_Struct))
|
if (app->size != sizeof(SpellBuffPacket_Struct))
|
||||||
{
|
{
|
||||||
LogError("Size mismatch in OP_Buff. expected [{}] got [{}]", sizeof(SpellBuffPacket_Struct), app->size);
|
LogError("[Client::Handle_OP_Buff] Size mismatch in OP_Buff. expected [{}] got [{}]", sizeof(SpellBuffPacket_Struct), app->size);
|
||||||
DumpPacket(app);
|
DumpPacket(app);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
SpellBuffPacket_Struct* sbf = (SpellBuffPacket_Struct*)app->pBuffer;
|
SpellBuffPacket_Struct* sbf = (SpellBuffPacket_Struct*)app->pBuffer;
|
||||||
uint32 spid = sbf->buff.spellid;
|
uint32 spid = sbf->buff.spellid;
|
||||||
LogSpells("Client requested that buff with spell id [{}] be canceled", spid);
|
LogSpells("[Client::Handle_OP_Buff] Client requested that buff with spell id [{}] be canceled", spid);
|
||||||
|
|
||||||
//something about IsDetrimentalSpell() crashes this portion of code..
|
//something about IsDetrimentalSpell() crashes this portion of code..
|
||||||
//tbh we shouldn't use it anyway since this is a simple red vs blue buff check and
|
//tbh we shouldn't use it anyway since this is a simple red vs blue buff check and
|
||||||
@ -4067,7 +4067,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos);
|
m_TargetRing = glm::vec3(castspell->x_pos, castspell->y_pos, castspell->z_pos);
|
||||||
|
|
||||||
LogSpells("OP CastSpell: slot [{}] spell [{}] target [{}] inv [{}]", castspell->slot, castspell->spell_id, castspell->target_id, (unsigned long)castspell->inventoryslot);
|
LogSpells("[Client::Handle_OP_CastSpell] OP CastSpell: slot [{}] spell [{}] target [{}] inv [{}]", castspell->slot, castspell->spell_id, castspell->target_id, (unsigned long)castspell->inventoryslot);
|
||||||
CastingSlot slot = static_cast<CastingSlot>(castspell->slot);
|
CastingSlot slot = static_cast<CastingSlot>(castspell->slot);
|
||||||
|
|
||||||
/* Memorized Spell */
|
/* Memorized Spell */
|
||||||
@ -4167,7 +4167,7 @@ void Client::Handle_OP_CastSpell(const EQApplicationPacket *app)
|
|||||||
/* Discipline -- older clients use the same slot as items, but we translate to it's own */
|
/* Discipline -- older clients use the same slot as items, but we translate to it's own */
|
||||||
else if (slot == CastingSlot::Discipline) {
|
else if (slot == CastingSlot::Discipline) {
|
||||||
if (!UseDiscipline(castspell->spell_id, castspell->target_id)) {
|
if (!UseDiscipline(castspell->spell_id, castspell->target_id)) {
|
||||||
LogSpells("Unknown ability being used by [{}], spell being cast is: [{}]\n", GetName(), castspell->spell_id);
|
LogSpells("[Client::Handle_OP_CastSpell] Unknown ability being used by [{}] spell being cast is: [{}]\n", GetName(), castspell->spell_id);
|
||||||
InterruptSpell(castspell->spell_id);
|
InterruptSpell(castspell->spell_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -8801,7 +8801,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
using EQ::spells::CastingSlot;
|
using EQ::spells::CastingSlot;
|
||||||
if (app->size != sizeof(ItemVerifyRequest_Struct))
|
if (app->size != sizeof(ItemVerifyRequest_Struct))
|
||||||
{
|
{
|
||||||
LogError("OP size error: OP_ItemVerifyRequest expected:[{}] got:[{}]", sizeof(ItemVerifyRequest_Struct), app->size);
|
LogError("[Client::Handle_OP_ItemVerifyRequest] OP size error: OP_ItemVerifyRequest expected:[{}] got:[{}]", sizeof(ItemVerifyRequest_Struct), app->size);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8830,7 +8830,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (slot_id < 0) {
|
if (slot_id < 0) {
|
||||||
LogDebug("Unknown slot being used by [{}], slot being used is: [{}]", GetName(), request->slot);
|
LogDebug("[Client::Handle_OP_ItemVerifyRequest] Unknown slot being used by [{}] slot being used is [{}]", GetName(), request->slot);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -8891,7 +8891,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
if (spell_id > 0 && (spells[spell_id].target_type == ST_Pet || spells[spell_id].target_type == ST_SummonedPet))
|
if (spell_id > 0 && (spells[spell_id].target_type == ST_Pet || spells[spell_id].target_type == ST_SummonedPet))
|
||||||
target_id = GetPetID();
|
target_id = GetPetID();
|
||||||
|
|
||||||
LogDebug("OP ItemVerifyRequest: spell=[{}], target=[{}], inv=[{}]", spell_id, target_id, slot_id);
|
LogDebug("[Client::Handle_OP_ItemVerifyRequest] OP ItemVerifyRequest: spell=[{}] target=[{}] inv=[{}]", spell_id, target_id, slot_id);
|
||||||
|
|
||||||
if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQ::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check
|
if (m_inv.SupportsClickCasting(slot_id) || ((item->ItemType == EQ::item::ItemTypePotion || item->PotionBelt) && m_inv.SupportsPotionBeltCasting(slot_id))) // sanity check
|
||||||
{
|
{
|
||||||
@ -8929,7 +8929,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
if ((spell_id <= 0) && (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol && item->ItemType != EQ::item::ItemTypeSpell))
|
if ((spell_id <= 0) && (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol && item->ItemType != EQ::item::ItemTypeSpell))
|
||||||
{
|
{
|
||||||
LogDebug("Item with no effect right clicked by [{}]", GetName());
|
LogDebug("[Client::Handle_OP_ItemVerifyRequest] Item with no effect right clicked by [{}]", GetName());
|
||||||
}
|
}
|
||||||
else if (inst->IsClassCommon())
|
else if (inst->IsClassCommon())
|
||||||
{
|
{
|
||||||
@ -8983,7 +8983,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
SendItemRecastTimer(item->RecastType); //Problem: When you loot corpse, recast display is not present. This causes it to display again. Could not get to display when sending from looting.
|
SendItemRecastTimer(item->RecastType); //Problem: When you loot corpse, recast display is not present. This causes it to display again. Could not get to display when sending from looting.
|
||||||
MessageString(Chat::Red, SPELL_RECAST);
|
MessageString(Chat::Red, SPELL_RECAST);
|
||||||
SendSpellBarEnable(item->Click.Effect);
|
SendSpellBarEnable(item->Click.Effect);
|
||||||
LogSpells("Casting of [{}] canceled: item spell reuse timer not expired", spell_id);
|
LogSpells("[Client::Handle_OP_ItemVerifyRequest] Casting of [{}] canceled: item spell reuse timer not expired", spell_id);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9025,7 +9025,7 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
if (augitem->RecastDelay > 0)
|
if (augitem->RecastDelay > 0)
|
||||||
{
|
{
|
||||||
if (!GetPTimers().Expired(&database, (pTimerItemStart + augitem->RecastType), false)) {
|
if (!GetPTimers().Expired(&database, (pTimerItemStart + augitem->RecastType), false)) {
|
||||||
LogSpells("Casting of [{}] canceled: item spell reuse timer from augment not expired", spell_id);
|
LogSpells("[Client::Handle_OP_ItemVerifyRequest] Casting of [{}] canceled: item spell reuse timer from augment not expired", spell_id);
|
||||||
MessageString(Chat::Red, SPELL_RECAST);
|
MessageString(Chat::Red, SPELL_RECAST);
|
||||||
SendSpellBarEnable(augitem->Click.Effect);
|
SendSpellBarEnable(augitem->Click.Effect);
|
||||||
return;
|
return;
|
||||||
@ -9063,12 +9063,12 @@ void Client::Handle_OP_ItemVerifyRequest(const EQApplicationPacket *app)
|
|||||||
{
|
{
|
||||||
if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol)
|
if (item->ItemType != EQ::item::ItemTypeFood && item->ItemType != EQ::item::ItemTypeDrink && item->ItemType != EQ::item::ItemTypeAlcohol)
|
||||||
{
|
{
|
||||||
LogDebug("Error: unknown item->Click.Type ([{}])", item->Click.Type);
|
LogDebug("[Client::Handle_OP_ItemVerifyRequest] Error: unknown item->Click.Type ([{}])", item->Click.Type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogDebug("Error: unknown item->Click.Type ([{}])", item->Click.Type);
|
LogDebug("[Client::Handle_OP_ItemVerifyRequest] Error: unknown item->Click.Type ([{}])", item->Click.Type);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -12636,7 +12636,7 @@ void Client::Handle_OP_RezzAnswer(const EQApplicationPacket *app)
|
|||||||
|
|
||||||
const Resurrect_Struct* ra = (const Resurrect_Struct*)app->pBuffer;
|
const Resurrect_Struct* ra = (const Resurrect_Struct*)app->pBuffer;
|
||||||
|
|
||||||
LogSpells("Received OP_RezzAnswer from client. Pendingrezzexp is [{}], action is [{}]",
|
LogSpells("[Client::Handle_OP_RezzAnswer] Received OP_RezzAnswer from client. Pendingrezzexp is [{}] action is [{}]",
|
||||||
PendingRezzXP, ra->action ? "ACCEPT" : "DECLINE");
|
PendingRezzXP, ra->action ? "ACCEPT" : "DECLINE");
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1006,7 +1006,7 @@ void Client::OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 I
|
|||||||
{
|
{
|
||||||
if(PendingRezzXP < 0) {
|
if(PendingRezzXP < 0) {
|
||||||
// pendingrezexp is set to -1 if we are not expecting an OP_RezzAnswer
|
// pendingrezexp is set to -1 if we are not expecting an OP_RezzAnswer
|
||||||
LogSpells("Unexpected OP_RezzAnswer. Ignoring it");
|
LogSpells("[Client::OPRezzAnswer] Unexpected OP_RezzAnswer. Ignoring it");
|
||||||
Message(Chat::Red, "You have already been resurrected.\n");
|
Message(Chat::Red, "You have already been resurrected.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1016,7 +1016,7 @@ void Client::OPRezzAnswer(uint32 Action, uint32 SpellID, uint16 ZoneID, uint16 I
|
|||||||
// Mark the corpse as rezzed in the database, just in case the corpse has buried, or the zone the
|
// Mark the corpse as rezzed in the database, just in case the corpse has buried, or the zone the
|
||||||
// corpse is in has shutdown since the rez spell was cast.
|
// corpse is in has shutdown since the rez spell was cast.
|
||||||
database.MarkCorpseAsRezzed(PendingRezzDBID);
|
database.MarkCorpseAsRezzed(PendingRezzDBID);
|
||||||
LogSpells("Player [{}] got a [{}] Rezz, spellid [{}] in zone[{}], instance id [{}]",
|
LogSpells("[Client::OPRezzAnswer] Player [{}] got a [{}] Rezz spellid [{}] in zone[{}] instance id [{}]",
|
||||||
name, (uint16)spells[SpellID].base_value[0],
|
name, (uint16)spells[SpellID].base_value[0],
|
||||||
SpellID, ZoneID, InstanceID);
|
SpellID, ZoneID, InstanceID);
|
||||||
|
|
||||||
@ -1085,7 +1085,7 @@ void Client::OPMemorizeSpell(const EQApplicationPacket* app)
|
|||||||
{
|
{
|
||||||
if(app->size != sizeof(MemorizeSpell_Struct))
|
if(app->size != sizeof(MemorizeSpell_Struct))
|
||||||
{
|
{
|
||||||
LogError("Wrong size on OP_MemorizeSpell. Got: [{}], Expected: [{}]", app->size, sizeof(MemorizeSpell_Struct));
|
LogError("[Client::OPMemorizeSpell] Wrong size on OP_MemorizeSpell. Got: [{}] Expected: [{}]", app->size, sizeof(MemorizeSpell_Struct));
|
||||||
DumpPacket(app);
|
DumpPacket(app);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2052,7 +2052,7 @@ void Client::HandleRespawnFromHover(uint32 Option)
|
|||||||
{
|
{
|
||||||
if (PendingRezzXP < 0 || PendingRezzSpellID == 0)
|
if (PendingRezzXP < 0 || PendingRezzSpellID == 0)
|
||||||
{
|
{
|
||||||
LogSpells("Unexpected Rezz from hover request");
|
LogSpells("[Client::HandleRespawnFromHover] Unexpected Rezz from hover request");
|
||||||
safe_delete(default_to_bind);
|
safe_delete(default_to_bind);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -2087,10 +2087,10 @@ void Client::HandleRespawnFromHover(uint32 Option)
|
|||||||
|
|
||||||
if (corpse && corpse->IsCorpse())
|
if (corpse && corpse->IsCorpse())
|
||||||
{
|
{
|
||||||
LogSpells("Hover Rez in zone [{}] for corpse [{}]",
|
LogSpells("[Client::HandleRespawnFromHover] Hover Rez in zone [{}] for corpse [{}]",
|
||||||
zone->GetShortName(), PendingRezzCorpseName.c_str());
|
zone->GetShortName(), PendingRezzCorpseName.c_str());
|
||||||
|
|
||||||
LogSpells("Found corpse. Marking corpse as rezzed");
|
LogSpells("[Client::HandleRespawnFromHover] Found corpse. Marking corpse as rezzed");
|
||||||
|
|
||||||
corpse->IsRezzed(true);
|
corpse->IsRezzed(true);
|
||||||
corpse->CompleteResurrection();
|
corpse->CompleteResurrection();
|
||||||
|
|||||||
@ -825,7 +825,7 @@ void Group::CastGroupSpell(Mob* caster, uint16 spell_id) {
|
|||||||
caster->SpellOnTarget(spell_id, members[z]->GetPet());
|
caster->SpellOnTarget(spell_id, members[z]->GetPet());
|
||||||
#endif
|
#endif
|
||||||
} else
|
} else
|
||||||
LogSpells("Group spell: [{}] is out of range [{}] at distance [{}] from [{}]", members[z]->GetName(), range, distance, caster->GetName());
|
LogSpells("[Group::CastGroupSpell] Group spell: [{}] is out of range [{}] at distance [{}] from [{}]", members[z]->GetName(), range, distance, caster->GetName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1686,7 +1686,7 @@ void Merc::AI_Process() {
|
|||||||
if (AI_movement_timer->Check())
|
if (AI_movement_timer->Check())
|
||||||
{
|
{
|
||||||
if(!IsRooted()) {
|
if(!IsRooted()) {
|
||||||
LogAI("Pursuing [{}] while engaged", GetTarget()->GetCleanName());
|
LogAIDetail("Pursuing [{}] while engaged", GetTarget()->GetCleanName());
|
||||||
RunTo(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ());
|
RunTo(GetTarget()->GetX(), GetTarget()->GetY(), GetTarget()->GetZ());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1805,7 +1805,7 @@ bool Merc::AI_EngagedCastCheck() {
|
|||||||
{
|
{
|
||||||
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
||||||
|
|
||||||
LogAI("Merc Engaged autocast check triggered");
|
LogAIDetail("Merc Engaged autocast check triggered");
|
||||||
|
|
||||||
int8 mercClass = GetClass();
|
int8 mercClass = GetClass();
|
||||||
|
|
||||||
@ -1860,7 +1860,7 @@ bool Merc::AI_IdleCastCheck() {
|
|||||||
|
|
||||||
if (AIautocastspell_timer->Check(false)) {
|
if (AIautocastspell_timer->Check(false)) {
|
||||||
#if MercAI_DEBUG_Spells >= 25
|
#if MercAI_DEBUG_Spells >= 25
|
||||||
LogAI("Merc Non-Engaged autocast check triggered: [{}]", GetCleanName());
|
LogAIDetail("Merc Non-Engaged autocast check triggered: [{}]", GetCleanName());
|
||||||
#endif
|
#endif
|
||||||
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
||||||
|
|
||||||
|
|||||||
@ -2551,7 +2551,7 @@ void Mob::SendIllusionPacket(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LogSpells(
|
LogSpells(
|
||||||
"Illusion: Race [{}] Gender [{}] Texture [{}] HelmTexture [{}] HairColor [{}] BeardColor [{}] EyeColor1 [{}] EyeColor2 [{}] HairStyle [{}] Face [{}] DrakkinHeritage [{}] DrakkinTattoo [{}] DrakkinDetails [{}] Size [{}]",
|
"[Mob::SendIllusionPacket] Illusion: Race [{}] Gender [{}] Texture [{}] HelmTexture [{}] HairColor [{}] BeardColor [{}] EyeColor1 [{}] EyeColor2 [{}] HairStyle [{}] Face [{}] DrakkinHeritage [{}] DrakkinTattoo [{}] DrakkinDetails [{}] Size [{}]",
|
||||||
race,
|
race,
|
||||||
gender,
|
gender,
|
||||||
new_texture,
|
new_texture,
|
||||||
@ -4163,7 +4163,7 @@ void Mob::ExecWeaponProc(const EQ::ItemInstance *inst, uint16 spell_id, Mob *on,
|
|||||||
if(!IsValidSpell(spell_id)) { // Check for a valid spell otherwise it will crash through the function
|
if(!IsValidSpell(spell_id)) { // Check for a valid spell otherwise it will crash through the function
|
||||||
if(IsClient()){
|
if(IsClient()){
|
||||||
Message(0, "Invalid spell proc %u", spell_id);
|
Message(0, "Invalid spell proc %u", spell_id);
|
||||||
LogSpells("Player [{}], Weapon Procced invalid spell [{}]", GetName(), spell_id);
|
LogSpells("[Mob::ExecWeaponProc] Player [{}] Weapon Procced invalid spell [{}]", GetName(), spell_id);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -131,10 +131,8 @@ bool NPC::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes, bool bInnates
|
|||||||
&& (AIspells[i].time_cancast + (zone->random.Int(0, 4) * 500)) <= Timer::GetCurrentTime() //break up the spelling casting over a period of time.
|
&& (AIspells[i].time_cancast + (zone->random.Int(0, 4) * 500)) <= Timer::GetCurrentTime() //break up the spelling casting over a period of time.
|
||||||
) {
|
) {
|
||||||
|
|
||||||
#if MobAI_DEBUG_Spells >= 21
|
LogAI("[Mob::AICastSpell] Casting: spellid [{}] tar [{}] dist2[[{}]]<=[{}] mana_cost[[{}]]<=[{}] cancast[[{}]]<=[{}] type [{}]",
|
||||||
LogAI("Mob::AICastSpell: Casting: spellid=[{}], tar=[{}], dist2[[{}]]<=[{}], mana_cost[[{}]]<=[{}], cancast[[{}]]<=[{}], type=[{}]",
|
|
||||||
AIspells[i].spellid, tar->GetName(), dist2, (spells[AIspells[i].spellid].range * spells[AIspells[i].spellid].range), mana_cost, GetMana(), AIspells[i].time_cancast, Timer::GetCurrentTime(), AIspells[i].type);
|
AIspells[i].spellid, tar->GetName(), dist2, (spells[AIspells[i].spellid].range * spells[AIspells[i].spellid].range), mana_cost, GetMana(), AIspells[i].time_cancast, Timer::GetCurrentTime(), AIspells[i].type);
|
||||||
#endif
|
|
||||||
|
|
||||||
switch (AIspells[i].type) {
|
switch (AIspells[i].type) {
|
||||||
case SpellType_Heal: {
|
case SpellType_Heal: {
|
||||||
@ -364,21 +362,17 @@ bool NPC::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes, bool bInnates
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if MobAI_DEBUG_Spells >= 21
|
|
||||||
else {
|
else {
|
||||||
LogAI("Mob::AICastSpell: NotCasting: spellid=[{}], tar=[{}], dist2[[{}]]<=[{}], mana_cost[[{}]]<=[{}], cancast[[{}]]<=[{}], type=[{}]",
|
LogAI("[Mob::AICastSpell] NotCasting: spellid [{}] tar [{}] dist2[[{}]]<=[{}] mana_cost[[{}]]<=[{}] cancast[[{}]]<=[{}] type [{}]",
|
||||||
AIspells[i].spellid, tar->GetName(), dist2, (spells[AIspells[i].spellid].range * spells[AIspells[i].spellid].range), mana_cost, GetMana(), AIspells[i].time_cancast, Timer::GetCurrentTime(), AIspells[i].type);
|
AIspells[i].spellid, tar->GetName(), dist2, (spells[AIspells[i].spellid].range * spells[AIspells[i].spellid].range), mana_cost, GetMana(), AIspells[i].time_cancast, Timer::GetCurrentTime(), AIspells[i].type);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NPC::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgainBefore) {
|
bool NPC::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgainBefore) {
|
||||||
#if MobAI_DEBUG_Spells >= 1
|
LogAI("[Mob::AIDoSpellCast] spellid [{}] tar [{}] mana [{}] Name [{}]", AIspells[i].spellid, tar->GetName(), mana_cost, spells[AIspells[i].spellid].name);
|
||||||
LogAI("Mob::AIDoSpellCast: spellid = [{}], tar = [{}], mana = [{}], Name: [{}]", AIspells[i].spellid, tar->GetName(), mana_cost, spells[AIspells[i].spellid].name);
|
|
||||||
#endif
|
|
||||||
casting_spell_AIindex = i;
|
casting_spell_AIindex = i;
|
||||||
|
|
||||||
return CastSpell(AIspells[i].spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust));
|
return CastSpell(AIspells[i].spellid, tar->GetID(), EQ::spells::CastingSlot::Gem2, AIspells[i].manacost == -2 ? 0 : -1, mana_cost, oDontDoAgainBefore, -1, -1, 0, &(AIspells[i].resist_adjust));
|
||||||
@ -1359,7 +1353,7 @@ void Mob::AI_Process() {
|
|||||||
(GetOwnerID() || IsBot() || IsTempPet() ||
|
(GetOwnerID() || IsBot() || IsTempPet() ||
|
||||||
CastToNPC()->GetCombatEvent())) {
|
CastToNPC()->GetCombatEvent())) {
|
||||||
if (!IsRooted()) {
|
if (!IsRooted()) {
|
||||||
LogAI("Pursuing [{}] while engaged", target->GetName());
|
LogAIDetail("Pursuing [{}] while engaged", target->GetName());
|
||||||
RunTo(target->GetX(), target->GetY(), target->GetZ());
|
RunTo(target->GetX(), target->GetY(), target->GetZ());
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1722,7 +1716,7 @@ void NPC::AI_DoMovement() {
|
|||||||
else if (!(AI_walking_timer->Enabled())) { // currently moving
|
else if (!(AI_walking_timer->Enabled())) { // currently moving
|
||||||
bool doMove = true;
|
bool doMove = true;
|
||||||
if(IsPositionEqual(glm::vec2(m_CurrentWayPoint.x, m_CurrentWayPoint.y), glm::vec2(GetX(), GetY()))) {
|
if(IsPositionEqual(glm::vec2(m_CurrentWayPoint.x, m_CurrentWayPoint.y), glm::vec2(GetX(), GetY()))) {
|
||||||
LogAI("We have reached waypoint [{}] ({},{},{}) on grid [{}]",
|
LogAIDetail("We have reached waypoint [{}] ({},{},{}) on grid [{}]",
|
||||||
cur_wp,
|
cur_wp,
|
||||||
GetX(),
|
GetX(),
|
||||||
GetY(),
|
GetY(),
|
||||||
@ -1810,7 +1804,7 @@ void NPC::AI_DoMovement() {
|
|||||||
if (at_gp) {
|
if (at_gp) {
|
||||||
|
|
||||||
if (moved) {
|
if (moved) {
|
||||||
LogAI("Reached guard point ({},{},{})", m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z);
|
LogAIDetail("Reached guard point ({},{},{})", m_GuardPoint.x, m_GuardPoint.y, m_GuardPoint.z);
|
||||||
|
|
||||||
ClearFeignMemory();
|
ClearFeignMemory();
|
||||||
moved = false;
|
moved = false;
|
||||||
@ -2017,7 +2011,7 @@ bool NPC::AI_EngagedCastCheck() {
|
|||||||
if (AIautocastspell_timer->Check(false)) {
|
if (AIautocastspell_timer->Check(false)) {
|
||||||
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
||||||
|
|
||||||
LogAI("Engaged autocast check triggered. Trying to cast healing spells then maybe offensive spells");
|
LogAIDetail("Engaged autocast check triggered. Trying to cast healing spells then maybe offensive spells");
|
||||||
|
|
||||||
// first try innate (spam) spells
|
// first try innate (spam) spells
|
||||||
if(!AICastSpell(GetTarget(), 0, SpellType_Nuke | SpellType_Lifetap | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff | SpellType_Charm | SpellType_Root, true)) {
|
if(!AICastSpell(GetTarget(), 0, SpellType_Nuke | SpellType_Lifetap | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff | SpellType_Charm | SpellType_Root, true)) {
|
||||||
@ -2046,7 +2040,7 @@ bool NPC::AI_PursueCastCheck() {
|
|||||||
if (AIautocastspell_timer->Check(false)) {
|
if (AIautocastspell_timer->Check(false)) {
|
||||||
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
AIautocastspell_timer->Disable(); //prevent the timer from going off AGAIN while we are casting.
|
||||||
|
|
||||||
LogAI("Engaged (pursuing) autocast check triggered. Trying to cast offensive spells");
|
LogAIDetail("Engaged (pursuing) autocast check triggered. Trying to cast offensive spells");
|
||||||
// checking innate (spam) spells first
|
// checking innate (spam) spells first
|
||||||
if(!AICastSpell(GetTarget(), AISpellVar.pursue_detrimental_chance, SpellType_Root | SpellType_Nuke | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff, true)) {
|
if(!AICastSpell(GetTarget(), AISpellVar.pursue_detrimental_chance, SpellType_Root | SpellType_Nuke | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff, true)) {
|
||||||
if(!AICastSpell(GetTarget(), AISpellVar.pursue_detrimental_chance, SpellType_Root | SpellType_Nuke | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff)) {
|
if(!AICastSpell(GetTarget(), AISpellVar.pursue_detrimental_chance, SpellType_Root | SpellType_Nuke | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Slow | SpellType_Debuff)) {
|
||||||
@ -2068,7 +2062,7 @@ bool NPC::AI_IdleCastCheck() {
|
|||||||
//last duration it was set to... try to put up a more reasonable timer...
|
//last duration it was set to... try to put up a more reasonable timer...
|
||||||
AIautocastspell_timer->Start(RandomTimer(AISpellVar.idle_no_sp_recast_min, AISpellVar.idle_no_sp_recast_max), false);
|
AIautocastspell_timer->Start(RandomTimer(AISpellVar.idle_no_sp_recast_min, AISpellVar.idle_no_sp_recast_max), false);
|
||||||
|
|
||||||
LogSpells("Triggering AI_IdleCastCheck :: Mob [{}] - Min : [{}] Max : [{}]", GetCleanName(), AISpellVar.idle_no_sp_recast_min, AISpellVar.idle_no_sp_recast_max);
|
LogSpells("[NPC::AI_IdleCastCheck] Mob [{}] Min [{}] Max [{}]", GetCleanName(), AISpellVar.idle_no_sp_recast_min, AISpellVar.idle_no_sp_recast_max);
|
||||||
|
|
||||||
} //else, spell casting finishing will reset the timer.
|
} //else, spell casting finishing will reset the timer.
|
||||||
} //else, spell casting finishing will reset the timer.
|
} //else, spell casting finishing will reset the timer.
|
||||||
@ -2499,7 +2493,6 @@ bool NPC::AI_AddNPCSpells(uint32 iDBSpellsID) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
DBnpcspells_Struct* parentlist = content_db.GetNPCSpells(spell_list->parent_list);
|
DBnpcspells_Struct* parentlist = content_db.GetNPCSpells(spell_list->parent_list);
|
||||||
#if MobAI_DEBUG_Spells >= 10
|
|
||||||
std::string debug_msg = StringFormat("Loading NPCSpells onto %s: dbspellsid=%u, level=%u", GetName(), iDBSpellsID, GetLevel());
|
std::string debug_msg = StringFormat("Loading NPCSpells onto %s: dbspellsid=%u, level=%u", GetName(), iDBSpellsID, GetLevel());
|
||||||
if (spell_list) {
|
if (spell_list) {
|
||||||
debug_msg.append(StringFormat(" (found, %u), parentlist=%u", spell_list->entries.size(), spell_list->parent_list));
|
debug_msg.append(StringFormat(" (found, %u), parentlist=%u", spell_list->entries.size(), spell_list->parent_list));
|
||||||
@ -2515,22 +2508,19 @@ bool NPC::AI_AddNPCSpells(uint32 iDBSpellsID) {
|
|||||||
}
|
}
|
||||||
LogAI("[{}]", debug_msg.c_str());
|
LogAI("[{}]", debug_msg.c_str());
|
||||||
|
|
||||||
#ifdef MobAI_DEBUG_Spells >= 25
|
|
||||||
if (parentlist) {
|
if (parentlist) {
|
||||||
for (const auto &iter : parentlist->entries) {
|
for (const auto &iter : parentlist->entries) {
|
||||||
LogAI("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogAI("fin (parent list)");
|
LogAI("fin (parent list)");
|
||||||
if (spell_list) {
|
if (spell_list) {
|
||||||
for (const auto &iter : spell_list->entries) {
|
for (const auto &iter : spell_list->entries) {
|
||||||
LogAI("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
LogAIDetail("([{}]) [{}]", iter.spellid, spells[iter.spellid].name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LogAI("fin (spell list)");
|
LogAI("fin (spell list)");
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
uint16 attack_proc_spell = -1;
|
uint16 attack_proc_spell = -1;
|
||||||
int8 proc_chance = 3;
|
int8 proc_chance = 3;
|
||||||
uint16 range_proc_spell = -1;
|
uint16 range_proc_spell = -1;
|
||||||
@ -2674,7 +2664,6 @@ bool NPC::AI_AddNPCSpellsEffects(uint32 iDBSpellsEffectsID) {
|
|||||||
DBnpcspellseffects_Struct* parentlist = content_db.GetNPCSpellsEffects(spell_effects_list->parent_list);
|
DBnpcspellseffects_Struct* parentlist = content_db.GetNPCSpellsEffects(spell_effects_list->parent_list);
|
||||||
|
|
||||||
uint32 i;
|
uint32 i;
|
||||||
#if MobAI_DEBUG_Spells >= 10
|
|
||||||
std::string debug_msg = StringFormat("Loading NPCSpellsEffects onto %s: dbspellseffectid=%u", GetName(), iDBSpellsEffectsID);
|
std::string debug_msg = StringFormat("Loading NPCSpellsEffects onto %s: dbspellseffectid=%u", GetName(), iDBSpellsEffectsID);
|
||||||
if (spell_effects_list) {
|
if (spell_effects_list) {
|
||||||
debug_msg.append(StringFormat(" (found, %u), parentlist=%u", spell_effects_list->numentries, spell_effects_list->parent_list));
|
debug_msg.append(StringFormat(" (found, %u), parentlist=%u", spell_effects_list->numentries, spell_effects_list->parent_list));
|
||||||
@ -2689,7 +2678,6 @@ bool NPC::AI_AddNPCSpellsEffects(uint32 iDBSpellsEffectsID) {
|
|||||||
debug_msg.append(" (not found)");
|
debug_msg.append(" (not found)");
|
||||||
}
|
}
|
||||||
LogAI("[{}]", debug_msg.c_str());
|
LogAI("[{}]", debug_msg.c_str());
|
||||||
#endif
|
|
||||||
|
|
||||||
if (parentlist) {
|
if (parentlist) {
|
||||||
for (i=0; i<parentlist->numentries; i++) {
|
for (i=0; i<parentlist->numentries; i++) {
|
||||||
|
|||||||
@ -566,7 +566,7 @@ void Raid::CastGroupSpell(Mob* caster, uint16 spellid, uint32 gid)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
LogSpells("Raid spell: [{}] is out of range [{}] at distance [{}] from [{}]", members[x].member->GetName(), range, distance, caster->GetName());
|
LogSpells("[Raid::CastGroupSpell] Raid spell: [{}] is out of range [{}] at distance [{}] from [{}]", members[x].member->GetName(), range, distance, caster->GetName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1631,7 +1631,7 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
if (IsCorpse() && CastToCorpse()->IsPlayerCorpse()) {
|
if (IsCorpse() && CastToCorpse()->IsPlayerCorpse()) {
|
||||||
|
|
||||||
if(caster)
|
if(caster)
|
||||||
LogSpells(" corpse being rezzed using spell [{}] by [{}]",
|
LogSpells("[Mob::SpellEffect] corpse being rezzed using spell [{}] by [{}]",
|
||||||
spell_id, caster->GetName());
|
spell_id, caster->GetName());
|
||||||
|
|
||||||
CastToCorpse()->CastRezz(spell_id, caster);
|
CastToCorpse()->CastRezz(spell_id, caster);
|
||||||
@ -3361,7 +3361,7 @@ int64 Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level
|
|||||||
&& IsInstrumentModAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) {
|
&& IsInstrumentModAppliedToSpellEffect(spell_id, spells[spell_id].effect_id[effect_id])) {
|
||||||
oval = effect_value;
|
oval = effect_value;
|
||||||
effect_value = effect_value * static_cast<int>(instrument_mod) / 10;
|
effect_value = effect_value * static_cast<int>(instrument_mod) / 10;
|
||||||
LogSpells("Effect value [{}] altered with bard modifier of [{}] to yeild [{}]",
|
LogSpells("[Mob::CalcSpellEffectValue] Effect value [{}] altered with bard modifier of [{}] to yeild [{}]",
|
||||||
oval, instrument_mod, effect_value);
|
oval, instrument_mod, effect_value);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
@ -3388,7 +3388,7 @@ int64 Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level
|
|||||||
int mod = caster->GetFocusEffect(focusFcBaseEffects, spell_id);
|
int mod = caster->GetFocusEffect(focusFcBaseEffects, spell_id);
|
||||||
effect_value += effect_value * mod / 100;
|
effect_value += effect_value * mod / 100;
|
||||||
|
|
||||||
LogSpells("Instant Effect value [{}] altered with base effects modifier of [{}] to yeild [{}]",
|
LogSpells("[Mob::CalcSpellEffectValue] Instant Effect value [{}] altered with base effects modifier of [{}] to yeild [{}]",
|
||||||
oval, mod, effect_value);
|
oval, mod, effect_value);
|
||||||
}
|
}
|
||||||
//This is checked from Mob::ApplySpellBonuses, applied to buffs that receive bonuses. See above, must be in 10% intervals to work.
|
//This is checked from Mob::ApplySpellBonuses, applied to buffs that receive bonuses. See above, must be in 10% intervals to work.
|
||||||
@ -3399,7 +3399,7 @@ int64 Mob::CalcSpellEffectValue(uint16 spell_id, int effect_id, int caster_level
|
|||||||
oval = effect_value;
|
oval = effect_value;
|
||||||
effect_value = effect_value * static_cast<int>(instrument_mod) / 10;
|
effect_value = effect_value * static_cast<int>(instrument_mod) / 10;
|
||||||
|
|
||||||
LogSpells("Bonus Effect value [{}] altered with base effects modifier of [{}] to yeild [{}]",
|
LogSpells("[Mob::CalcSpellEffectValue] Bonus Effect value [{}] altered with base effects modifier of [{}] to yeild [{}]",
|
||||||
oval, instrument_mod, effect_value);
|
oval, instrument_mod, effect_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3463,7 +3463,7 @@ snare has both of them negative, yet their range should work the same:
|
|||||||
updownsign = 1;
|
updownsign = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
LogSpells("CSEV: spell [{}], formula [{}], base [{}], max [{}], lvl [{}]. Up/Down [{}]",
|
LogSpells("[Mob::CalcSpellEffectValue_formula] spell [{}] formula [{}] base [{}] max [{}] lvl [{}] Up/Down [{}]",
|
||||||
spell_id, formula, base_value, max_value, caster_level, updownsign);
|
spell_id, formula, base_value, max_value, caster_level, updownsign);
|
||||||
|
|
||||||
switch(formula)
|
switch(formula)
|
||||||
@ -3686,7 +3686,7 @@ snare has both of them negative, yet their range should work the same:
|
|||||||
result = ubase * (caster_level * (formula - 2000) + 1);
|
result = ubase * (caster_level * (formula - 2000) + 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LogDebug("Unknown spell effect value forumula [{}]", formula);
|
LogDebug("[Mob::CalcSpellEffectValue_formula] Unknown spell effect value forumula [{}]", formula);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3711,7 +3711,7 @@ snare has both of them negative, yet their range should work the same:
|
|||||||
if (base_value < 0 && result > 0)
|
if (base_value < 0 && result > 0)
|
||||||
result *= -1;
|
result *= -1;
|
||||||
|
|
||||||
LogSpells("Result: [{}] (orig [{}]), cap [{}] [{}]", result, oresult, max_value, (base_value < 0 && result > 0)?"Inverted due to negative base":"");
|
LogSpells("[Mob::CalcSpellEffectValue_formula] Result: [{}] (orig [{}]) cap [{}] [{}]", result, oresult, max_value, (base_value < 0 && result > 0)?"Inverted due to negative base":"");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -3739,12 +3739,12 @@ void Mob::BuffProcess()
|
|||||||
--buffs[buffs_i].ticsremaining;
|
--buffs[buffs_i].ticsremaining;
|
||||||
|
|
||||||
if (buffs[buffs_i].ticsremaining < 0) {
|
if (buffs[buffs_i].ticsremaining < 0) {
|
||||||
LogSpells("Buff [{}] in slot [{}] has expired. Fading", buffs[buffs_i].spellid, buffs_i);
|
LogSpells("[Mob::BuffProcess] Buff [{}] in slot [{}] has expired. Fading", buffs[buffs_i].spellid, buffs_i);
|
||||||
BuffFadeBySlot(buffs_i);
|
BuffFadeBySlot(buffs_i);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LogSpells("Buff [{}] in slot [{}] has [{}] tics remaining", buffs[buffs_i].spellid, buffs_i, buffs[buffs_i].ticsremaining);
|
LogSpells("[Mob::BuffProcess] Buff [{}] in slot [{}] has [{}] tics remaining", buffs[buffs_i].spellid, buffs_i, buffs[buffs_i].ticsremaining);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (IsClient() && !(CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater))
|
else if (IsClient() && !(CastToClient()->ClientVersionBit() & EQ::versions::maskSoFAndLater))
|
||||||
@ -4128,7 +4128,7 @@ void Mob::BuffFadeBySlot(int slot, bool iRecalcBonuses)
|
|||||||
if (IsClient() && !CastToClient()->IsDead())
|
if (IsClient() && !CastToClient()->IsDead())
|
||||||
CastToClient()->MakeBuffFadePacket(buffs[slot].spellid, slot);
|
CastToClient()->MakeBuffFadePacket(buffs[slot].spellid, slot);
|
||||||
|
|
||||||
LogSpells("Fading buff [{}] from slot [{}]", buffs[slot].spellid, slot);
|
LogSpells("[Mob::BuffFadeBySlot] Fading buff [{}] from slot [{}]", buffs[slot].spellid, slot);
|
||||||
|
|
||||||
std::string export_string = fmt::format(
|
std::string export_string = fmt::format(
|
||||||
"{} {} {} {}",
|
"{} {} {} {}",
|
||||||
@ -9674,21 +9674,21 @@ bool Mob::PassCharmTargetRestriction(Mob *target) {
|
|||||||
|
|
||||||
if (target->IsClient() && IsClient()) {
|
if (target->IsClient() && IsClient()) {
|
||||||
MessageString(Chat::Red, CANNOT_AFFECT_PC);
|
MessageString(Chat::Red, CANNOT_AFFECT_PC);
|
||||||
LogSpells("Spell casting canceled: Can not cast charm on a client.");
|
LogSpells("[Mob::PassCharmTargetRestriction] Spell casting canceled: Can not cast charm on a client.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (target->IsCorpse()) {
|
else if (target->IsCorpse()) {
|
||||||
LogSpells("Spell casting canceled: Can not cast charm on a corpse.");
|
LogSpells("[Mob::PassCharmTargetRestriction] Spell casting canceled: Can not cast charm on a corpse.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (GetPet() && IsClient()) {
|
else if (GetPet() && IsClient()) {
|
||||||
MessageString(Chat::Red, ONLY_ONE_PET);
|
MessageString(Chat::Red, ONLY_ONE_PET);
|
||||||
LogSpells("Spell casting canceled: Can not cast charm if you have a pet.");
|
LogSpells("[Mob::PassCharmTargetRestriction] Spell casting canceled: Can not cast charm if you have a pet.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else if (target->GetOwner()) {
|
else if (target->GetOwner()) {
|
||||||
MessageString(Chat::Red, CANNOT_CHARM);
|
MessageString(Chat::Red, CANNOT_CHARM);
|
||||||
LogSpells("Spell casting canceled: Can not cast charm on a pet.");
|
LogSpells("[Mob::PassCharmTargetRestriction] Spell casting canceled: Can not cast charm on a pet.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@ -252,7 +252,7 @@ void NPC::MoveTo(const glm::vec4 &position, bool saveguardspot)
|
|||||||
void NPC::UpdateWaypoint(int wp_index)
|
void NPC::UpdateWaypoint(int wp_index)
|
||||||
{
|
{
|
||||||
if (wp_index >= static_cast<int>(Waypoints.size())) {
|
if (wp_index >= static_cast<int>(Waypoints.size())) {
|
||||||
LogAI("Update to waypoint [{}] failed. Not found", wp_index);
|
LogAIDetail("Update to waypoint [{}] failed. Not found", wp_index);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
std::vector<wplist>::iterator cur;
|
std::vector<wplist>::iterator cur;
|
||||||
@ -567,7 +567,7 @@ void NPC::SaveGuardSpot(bool ClearGuardSpot) {
|
|||||||
if (m_GuardPoint.w == 0) {
|
if (m_GuardPoint.w == 0) {
|
||||||
m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler
|
m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler
|
||||||
}
|
}
|
||||||
LogAI("Setting guard position to {0}", to_string(static_cast<glm::vec3>(m_GuardPoint)));
|
LogAIDetail("Setting guard position to [{}]", to_string(static_cast<glm::vec3>(m_GuardPoint)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ void NPC::SaveGuardSpot(const glm::vec4 &pos)
|
|||||||
|
|
||||||
if (m_GuardPoint.w == 0)
|
if (m_GuardPoint.w == 0)
|
||||||
m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler
|
m_GuardPoint.w = 0.0001; //hack to make IsGuarding simpler
|
||||||
LogAI("Setting guard position to {0}", to_string(static_cast<glm::vec3>(m_GuardPoint)));
|
LogAIDetail("Setting guard position to [{}]", to_string(static_cast<glm::vec3>(m_GuardPoint)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void NPC::NextGuardPosition() {
|
void NPC::NextGuardPosition() {
|
||||||
|
|||||||
@ -864,7 +864,7 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
//pendingrezexp is the amount of XP on the corpse. Setting it to a value >= 0
|
//pendingrezexp is the amount of XP on the corpse. Setting it to a value >= 0
|
||||||
//also serves to inform Client::OPRezzAnswer to expect a packet.
|
//also serves to inform Client::OPRezzAnswer to expect a packet.
|
||||||
client->SetPendingRezzData(srs->exp, srs->dbid, srs->rez.spellid, srs->rez.corpse_name);
|
client->SetPendingRezzData(srs->exp, srs->dbid, srs->rez.spellid, srs->rez.corpse_name);
|
||||||
LogSpells("OP_RezzRequest in zone [{}] for [{}], spellid:[{}]",
|
LogSpells("[WorldServer::HandleMessage] OP_RezzRequest in zone [{}] for [{}] spellid [{}]",
|
||||||
zone->GetShortName(), client->GetName(), srs->rez.spellid);
|
zone->GetShortName(), client->GetName(), srs->rez.spellid);
|
||||||
auto outapp = new EQApplicationPacket(OP_RezzRequest,
|
auto outapp = new EQApplicationPacket(OP_RezzRequest,
|
||||||
sizeof(Resurrect_Struct));
|
sizeof(Resurrect_Struct));
|
||||||
@ -879,10 +879,10 @@ void WorldServer::HandleMessage(uint16 opcode, const EQ::Net::Packet &p)
|
|||||||
// to the zone that the corpse is in.
|
// to the zone that the corpse is in.
|
||||||
Corpse* corpse = entity_list.GetCorpseByName(srs->rez.corpse_name);
|
Corpse* corpse = entity_list.GetCorpseByName(srs->rez.corpse_name);
|
||||||
if (corpse && corpse->IsCorpse()) {
|
if (corpse && corpse->IsCorpse()) {
|
||||||
LogSpells("OP_RezzComplete received in zone [{}] for corpse [{}]",
|
LogSpells("[WorldServer::HandleMessage] OP_RezzComplete received in zone [{}] for corpse [{}]",
|
||||||
zone->GetShortName(), srs->rez.corpse_name);
|
zone->GetShortName(), srs->rez.corpse_name);
|
||||||
|
|
||||||
LogSpells("Found corpse. Marking corpse as rezzed if needed");
|
LogSpells("[WorldServer::HandleMessage] Found corpse. Marking corpse as rezzed if needed");
|
||||||
// I don't know why Rezzed is not set to true in CompleteRezz().
|
// I don't know why Rezzed is not set to true in CompleteRezz().
|
||||||
if (!IsEffectInSpell(srs->rez.spellid, SE_SummonToCorpse)) {
|
if (!IsEffectInSpell(srs->rez.spellid, SE_SummonToCorpse)) {
|
||||||
corpse->IsRezzed(true);
|
corpse->IsRezzed(true);
|
||||||
@ -3442,7 +3442,7 @@ bool WorldServer::SendVoiceMacro(Client* From, uint32 Type, char* Target, uint32
|
|||||||
|
|
||||||
bool WorldServer::RezzPlayer(EQApplicationPacket* rpack, uint32 rezzexp, uint32 dbid, uint16 opcode)
|
bool WorldServer::RezzPlayer(EQApplicationPacket* rpack, uint32 rezzexp, uint32 dbid, uint16 opcode)
|
||||||
{
|
{
|
||||||
LogSpells("WorldServer::RezzPlayer rezzexp is [{}] (0 is normal for RezzComplete", rezzexp);
|
LogSpells("[WorldServer::RezzPlayer] rezzexp is [{}] (0 is normal for RezzComplete", rezzexp);
|
||||||
auto pack = new ServerPacket(ServerOP_RezzPlayer, sizeof(RezzPlayer_Struct));
|
auto pack = new ServerPacket(ServerOP_RezzPlayer, sizeof(RezzPlayer_Struct));
|
||||||
RezzPlayer_Struct* sem = (RezzPlayer_Struct*)pack->pBuffer;
|
RezzPlayer_Struct* sem = (RezzPlayer_Struct*)pack->pBuffer;
|
||||||
sem->rezzopcode = opcode;
|
sem->rezzopcode = opcode;
|
||||||
@ -3451,9 +3451,9 @@ bool WorldServer::RezzPlayer(EQApplicationPacket* rpack, uint32 rezzexp, uint32
|
|||||||
sem->dbid = dbid;
|
sem->dbid = dbid;
|
||||||
bool ret = SendPacket(pack);
|
bool ret = SendPacket(pack);
|
||||||
if (ret)
|
if (ret)
|
||||||
LogSpells("Sending player rezz packet to world spellid:[{}]", sem->rez.spellid);
|
LogSpells("[WorldServer::RezzPlayer] Sending player rezz packet to world spellid:[{}]", sem->rez.spellid);
|
||||||
else
|
else
|
||||||
LogSpells("NOT Sending player rezz packet to world");
|
LogSpells("[WorldServer::RezzPlayer] NOT Sending player rezz packet to world");
|
||||||
|
|
||||||
safe_delete(pack);
|
safe_delete(pack);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user