Compare commits

...

23 Commits

Author SHA1 Message Date
Akkadius 37e66b5c01 Swap quest debug for combat logging [skip ci] 2019-10-12 17:25:13 -05:00
Akkadius bf798c0561 Pet critical logging [skip ci] 2019-10-12 17:24:07 -05:00
Akkadius 6ec577f241 More logging [skip ci] 2019-10-08 02:25:02 -05:00
Akkadius 672e6766c7 More logging [skip ci] 2019-10-08 02:10:49 -05:00
Akkadius b3eb11d068 More logging changes [skip ci] 2019-10-08 01:56:08 -05:00
Akkadius 55c61ddc78 Update some of the logging [skip ci] 2019-10-06 04:56:19 -05:00
Akkadius c131eca57f More temp logging changes [skip ci] 2019-10-06 03:42:34 -05:00
Akkadius a6dbba5380 Revert message changes [skip ci] 2019-10-06 02:39:37 -05:00
Akkadius d2f1a3097b More log tweaks [skip ci] 2019-10-06 02:33:00 -05:00
Akkadius 6c522e0e76 Fix logging [skip ci] 2019-10-06 02:27:15 -05:00
Akkadius cba068bfe8 Lower logging status for GM 2019-10-06 02:22:43 -05:00
Akkadius 28c8af96e3 Logging Mob::TryCriticalHit [skip ci] 2019-10-06 02:12:15 -05:00
Akkadius c684709712 Logging to Mob::CommonOutgoingHitSuccess [skip ci[ 2019-10-06 02:05:39 -05:00
Akkadius 225b3fffbd Logging to Mob::ApplyMeleeDamageBonus [skip ci] 2019-10-06 01:57:48 -05:00
Akkadius 0b790342e7 Add logging to Mob::CheckHitChance [skip ci] 2019-10-06 01:53:03 -05:00
Akkadius 690621268b Change GetDamageTable to use e.self [skip ci] 2019-10-06 01:41:10 -05:00
Akkadius 725d080cac Damage Table logging [skip ci] 2019-10-06 01:31:28 -05:00
Akkadius a3ffa7e262 Logging to GetRawACNoShield [skip ci] 2019-10-06 00:54:46 -05:00
Akkadius 344682e6ff Add logging to Mob::GetMeleeMitDmg [skip ci] 2019-10-06 00:38:08 -05:00
Akkadius c927fec803 Logging to MeleeMitigation [skip ci] 2019-10-06 00:06:59 -05:00
Akkadius 3b23477139 Comment each method with source function calls [skip ci] 2019-10-05 22:36:00 -05:00
Akkadius ea49422ff7 Add legacy_combat.lua merely for logging reference 2019-10-05 22:09:48 -05:00
Akkadius 9ccd9b80bb Old combat code beginng in plus linux fixes 2019-10-05 19:50:11 -05:00
9 changed files with 1281 additions and 20 deletions
+5
View File
@@ -35,3 +35,8 @@ Build_64/
build_64/
log/
logs/
submodules/
.idea/
cmake-build-debug
EQEmu.cbp
+1 -1
View File
@@ -144,7 +144,7 @@ void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const st
return;
/* Check to see if the process that actually ran this is zone */
if (EQEmuLogSys::log_platform == EQEmuExePlatform::ExePlatformZone)
if (GetExecutablePlatformInt() == EQEmuExePlatform::ExePlatformZone)
on_log_gmsay_hook(log_category, message);
}
File diff suppressed because it is too large Load Diff
+224 -8
View File
@@ -305,6 +305,16 @@ bool Mob::CheckHitChance(Mob* other, EQEmu::skills::SkillType skillinuse, int Ha
float tohit_roll = zone->random.Real(0, 100);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::CheckHitChance] Chance [%.2f] ToHitRoll [%.2f] Hit? [%s]",
GetCleanName(),
chancetohit,
tohit_roll,
(tohit_roll <= chancetohit) ? "true" : "false"
);
Log.Out(Logs::Detail, Logs::Attack, "Final hit chance: %.2f%%. Hit roll %.2f", chancetohit, tohit_roll);
return(tohit_roll <= chancetohit);
@@ -522,6 +532,16 @@ void Mob::MeleeMitigation(Mob *attacker, int32 &damage, int32 minhit, ExtraAttac
float aa_mit = (aabonuses.CombatStability + itembonuses.CombatStability +
spellbonuses.CombatStability) / 100.0f;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::MeleeMitigation] Stability Bonuses | AA [%i] Item [%i] Spell [%i] ",
GetCleanName(),
aabonuses.CombatStability,
itembonuses.CombatStability,
spellbonuses.CombatStability
);
if (RuleB(Combat, UseIntervalAC)) {
float softcap = (GetSkill(EQEmu::skills::SkillDefense) + GetLevel()) *
RuleR(Combat, SoftcapFactor) * (1.0 + aa_mit);
@@ -534,6 +554,14 @@ void Mob::MeleeMitigation(Mob *attacker, int32 &damage, int32 minhit, ExtraAttac
float monkweight = RuleI(Combat, MonkACBonusWeight);
monkweight = mod_monk_weight(monkweight, attacker);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::MeleeMitigation] Soft Cap [%.2f]",
GetCleanName(),
softcap
);
if (IsClient()) {
armor = CastToClient()->GetRawACNoShield(shield_ac);
weight = (CastToClient()->CalcCurrentWeight() / 10.0);
@@ -637,6 +665,17 @@ void Mob::MeleeMitigation(Mob *attacker, int32 &damage, int32 minhit, ExtraAttac
attack_rating = attacker->mod_attack_rating(attack_rating, this);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::MeleeMitigation] Attack Rating [%.2f] Mitigation Rating [%.2f] Damage [%i] MinDmg [%i]",
GetCleanName(),
attack_rating,
mitigation_rating,
damage,
minhit
);
damage = GetMeleeMitDmg(attacker, damage, minhit, mitigation_rating, attack_rating);
} else {
////////////////////////////////////////////////////////
@@ -697,6 +736,14 @@ void Mob::MeleeMitigation(Mob *attacker, int32 &damage, int32 minhit, ExtraAttac
if (damage < 0)
damage = 0;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::MeleeMitigation] Final Damage [%i]",
GetCleanName(),
damage
);
}
// This is called when the Mob is the one being hit
@@ -707,6 +754,15 @@ int32 Mob::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit,
float mit_roll = zone->random.Real(0, mit_rating);
float atk_roll = zone->random.Real(0, atk_rating);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetMeleeMitDmg] MitigationRoll [%.2f] AtkRoll [%.2f]",
GetCleanName(),
mit_roll,
atk_roll
);
if (atk_roll > mit_roll) {
float a_diff = atk_roll - mit_roll;
float thac0 = atk_rating * RuleR(Combat, ACthac0Factor);
@@ -731,10 +787,50 @@ int32 Mob::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit,
d = 20.0;
float interval = (damage - minhit) / 20.0;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetMeleeMitDmg] Interval [%.2f] d [%.2f]",
GetCleanName(),
interval,
d
);
damage -= ((int)d * interval);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] Post Interval",
GetCleanName(),
damage
);
damage -= (minhit * itembonuses.MeleeMitigation / 100);
damage -= (damage * (spellbonuses.MeleeMitigationEffect + itembonuses.MeleeMitigationEffect + aabonuses.MeleeMitigationEffect) / 100);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] Mitigation [%i] Post Mitigation MinDmg",
GetCleanName(),
damage,
itembonuses.MeleeMitigation
);
damage -= (damage * (spellbonuses.MeleeMitigationEffect + itembonuses.MeleeMitigationEffect + aabonuses.MeleeMitigationEffect) / 100);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetMeleeMitDmg] Damage [%.2f] SpellMit [%i] ItemMit [%i] AAMit [%i] Post All Mit Bonuses",
GetCleanName(),
damage,
spellbonuses.MeleeMitigationEffect,
itembonuses.MeleeMitigationEffect,
aabonuses.MeleeMitigationEffect
);
return damage;
}
@@ -1090,8 +1186,28 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b
return (true);
int min_hit = 1;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Client::Attack] Damage Table [%u] WeaponDMG [%i]",
GetCleanName(),
GetDamageTable(skillinuse),
weapon_damage
);
int max_hit = (2*weapon_damage*GetDamageTable(skillinuse)) / 100;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [ClientAttack] DamageDone [%i] BaseDamage [%i] HitSkill [%i]",
GetCleanName(),
max_hit,
weapon_damage,
skillinuse
);
if(GetLevel() < 10 && max_hit > RuleI(Combat, HitCapPre10))
max_hit = (RuleI(Combat, HitCapPre10));
else if(GetLevel() < 20 && max_hit > RuleI(Combat, HitCapPre20))
@@ -3773,12 +3889,32 @@ void Mob::TryPetCriticalHit(Mob *defender, uint16 skill, int32 &damage)
int32 CritPetChance = owner->aabonuses.PetCriticalHit + owner->itembonuses.PetCriticalHit + owner->spellbonuses.PetCriticalHit;
int32 CritChanceBonus = GetCriticalChanceBonus(skill);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryPetCriticalHit] CritPetChance [%i] CritChanceBonus [%i] | Bonuses AA [%i] Item [%i] Spell [%i]",
GetCleanName(),
CritPetChance,
CritChanceBonus,
owner->aabonuses.PetCriticalHit,
owner->itembonuses.PetCriticalHit,
owner->spellbonuses.PetCriticalHit
);
if (CritPetChance || critChance) {
//For pets use PetCriticalHit for base chance, pets do not innately critical with without it
//even if buffed with a CritChanceBonus effects.
critChance += CritPetChance;
critChance += critChance*CritChanceBonus/100.0f;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryPetCriticalHit] critChance [%.2f] PostCalcs",
GetCleanName(),
critChance
);
}
if(critChance > 0){
@@ -3789,9 +3925,27 @@ void Mob::TryPetCriticalHit(Mob *defender, uint16 skill, int32 &damage)
{
critMod += GetCritDmgMob(skill) * 2; // To account for base crit mod being 200 not 100
damage = (damage * critMod) / 100;
entity_list.FilteredMessageClose_StringID(this, false, 200,
MT_CritMelee, FilterMeleeCrits, CRITICAL_HIT,
GetCleanName(), itoa(damage));
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryPetCriticalHit] critMod [%.2f] DmgMod [%i] DamageDone [%i]",
GetCleanName(),
critMod,
GetCritDmgMob(skill),
damage
);
entity_list.FilteredMessageClose_StringID(
this,
false,
200,
MT_CritMelee,
FilterMeleeCrits,
CRITICAL_HIT,
GetCleanName(),
itoa(damage)
);
}
}
}
@@ -3879,18 +4033,38 @@ void Mob::TryCriticalHit(Mob *defender, uint16 skill, int32 &damage, ExtraAttack
//Get Base CritChance from Dex. (200 = ~1.6%, 255 = ~2.0%, 355 = ~2.20%) Fall off rate > 255
//http://giline.versus.jp/shiden/su.htm , http://giline.versus.jp/shiden/damage_e.htm
if (GetDEX() <= 255)
if (GetDEX() <= 255) {
critChance += (float(GetDEX()) / 125.0f);
else if (GetDEX() > 255)
critChance += (float(GetDEX()-255)/ 500.0f) + 2.0f;
critChance += critChance*(float)CritChanceBonus /100.0f;
}
else if (GetDEX() > 255) {
critChance += (float(GetDEX() - 255) / 500.0f) + 2.0f;
}
critChance += critChance * (float) CritChanceBonus / 100.0f;
}
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryCriticalHit] CritChance [%.2f] CritChanceBonus [%i] Dex [%i] Post-Dex-Block",
GetCleanName(),
critChance,
CritChanceBonus,
GetDEX()
);
if(opts) {
critChance *= opts->crit_percent;
critChance += opts->crit_flat;
}
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryCriticalHit] CritChance [%.2f]",
GetCleanName(),
critChance
);
if(critChance > 0) {
critChance /= 100;
@@ -3915,6 +4089,18 @@ void Mob::TryCriticalHit(Mob *defender, uint16 skill, int32 &damage, ExtraAttack
}
critMod += GetCritDmgMob(skill) * 2; // To account for base crit mod being 200 not 100
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::TryCriticalHit] CritChance [%.2f] CritMod [%u] GetCritDmgMod [%i] CripSuccess [%s]",
GetCleanName(),
critChance,
critMod,
GetCritDmgMob(skill),
crip_success ? "true" : "false"
);
damage = damage * critMod / 100;
bool deadlySuccess = false;
@@ -4044,6 +4230,15 @@ void Mob::ApplyMeleeDamageBonus(uint16 skill, int32 &damage,ExtraAttackOptions *
if (opts)
dmgbonusmod += opts->melee_damage_bonus_flat;
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::ApplyMeleeDamageBonus] DmgBonusMod [%i] Dmg [%i]",
GetCleanName(),
dmgbonusmod,
damage
);
damage += damage * dmgbonusmod / 100;
}
@@ -4408,7 +4603,28 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, int32 &damage, EQEmu::skills::
return;
ApplyMeleeDamageBonus(skillInUse, damage, opts);
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::CommonOutgoingHitSuccess] Dmg [%i] Post ApplyMeleeDamageBonus",
GetCleanName(),
damage
);
damage += (damage * defender->GetSkillDmgTaken(skillInUse, opts) / 100) + (GetSkillDmgAmt(skillInUse) + defender->GetFcDamageAmtIncoming(this, 0, true, skillInUse));
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::CommonOutgoingHitSuccess] Dmg [%i] SkillDmgTaken [%i] SkillDmgtAmt [%i] FcDmgAmtIncoming [%i] Post DmgCalcs",
GetCleanName(),
damage,
defender->GetSkillDmgTaken(skillInUse, opts),
GetSkillDmgAmt(skillInUse),
defender->GetFcDamageAmtIncoming(this, 0, true, skillInUse)
);
TryCriticalHit(defender, skillInUse, damage,opts);
CheckNumHitsRemaining(NumHit::OutgoingHitSuccess);
}
+12
View File
@@ -2232,5 +2232,17 @@ int Client::GetRawACNoShield(int &shield_ac) const
}
}
}
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Client::GetRawACNoShield] AC [%i] ItemAC [%i] SpellAC [%i] AAAC [%i]",
GetName(),
ac,
itembonuses.AC,
spellbonuses.AC,
aabonuses.AC
);
return ac;
}
+2 -2
View File
@@ -247,8 +247,8 @@ void Embperl::init_eval_file(void)
" return;"
"} else {"
//we 'my' $filename,$mtime,$package,$sub to prevent them from changing our state up here.
" eval(\"package $package; my(\\$filename,\\$mtime,\\$package,\\$sub); \\$isloaded = 1; require '$filename'; \");"
/* "local *FH;open FH, $filename or die \"open '$filename' $!\";"
" eval(\"package $package; my(\\$filename,\\$mtime,\\$package,\\$sub); \\$isloaded = 1; require './$filename'; \");"
/* "local *FH;open FH, $filename or die \"open '$filename' $!\";"
"local($/) = undef;my $sub = <FH>;close FH;"
"my $eval = qq{package $package; sub handler { $sub; }};"
"{ my($filename,$mtime,$package,$sub); eval $eval; }"
+4
View File
@@ -99,6 +99,10 @@ XS(XS_EQEmuIO_PRINT)
/* Strip newlines from log message 'str' */
*std::remove(str, str + strlen(str), '\n') = '\0';
std::string log_string = str;
if (log_string.find("did not return a true") != std::string::npos)
return;
int i;
int pos = 0;
int len = 0;
+30 -6
View File
@@ -4603,11 +4603,16 @@ int16 Mob::GetCritDmgMob(uint16 skill)
int critDmg_mod = 0;
// All skill dmg mod + Skill specific
critDmg_mod += itembonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] +
itembonuses.CritDmgMob[skill] + spellbonuses.CritDmgMob[skill] + aabonuses.CritDmgMob[skill];
critDmg_mod += itembonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] +
spellbonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] +
aabonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] +
itembonuses.CritDmgMob[skill] +
spellbonuses.CritDmgMob[skill] +
aabonuses.CritDmgMob[skill];
if(critDmg_mod < -100)
if (critDmg_mod < -100) {
critDmg_mod = -100;
}
return critDmg_mod;
}
@@ -4648,11 +4653,30 @@ int16 Mob::GetCriticalChanceBonus(uint16 skill)
int critical_chance = 0;
// All skills + Skill specific
critical_chance += itembonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] + spellbonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] + aabonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] +
itembonuses.CriticalHitChance[skill] + spellbonuses.CriticalHitChance[skill] + aabonuses.CriticalHitChance[skill];
critical_chance += itembonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] +
spellbonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] +
aabonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] +
itembonuses.CriticalHitChance[skill] +
spellbonuses.CriticalHitChance[skill] +
aabonuses.CriticalHitChance[skill];
if(critical_chance < -100)
Log.Out(
Logs::General,
Logs::Combat,
"[%s] [Mob::GetCriticalChanceBonus] Bonuses | Item [%i] Spell [%i] AA [%i] | 2nd Item [%i] Spell [%i] AA [%i] Final Chance [%i]",
GetCleanName(),
itembonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1],
spellbonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1],
aabonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1],
itembonuses.CriticalHitChance[skill],
spellbonuses.CriticalHitChance[skill],
aabonuses.CriticalHitChance[skill],
critical_chance
);
if (critical_chance < -100) {
critical_chance = -100;
}
return critical_chance;
}
+3 -3
View File
@@ -280,13 +280,13 @@ public:
if (message.find("\n") != std::string::npos){
auto message_split = SplitString(message, '\n');
entity_list.MessageStatus(0, 80, Log.GetGMSayColorFromCategory(log_category), "%s", message_split[0].c_str());
entity_list.MessageStatus(0, 0, Log.GetGMSayColorFromCategory(log_category), "%s", message_split[0].c_str());
for (size_t iter = 1; iter < message_split.size(); ++iter) {
entity_list.MessageStatus(0, 80, Log.GetGMSayColorFromCategory(log_category), "--- %s", message_split[iter].c_str());
entity_list.MessageStatus(0, 0, Log.GetGMSayColorFromCategory(log_category), "--- %s", message_split[iter].c_str());
}
}
else{
entity_list.MessageStatus(0, 80, Log.GetGMSayColorFromCategory(log_category), "%s", message.c_str());
entity_list.MessageStatus(0, 0, Log.GetGMSayColorFromCategory(log_category), "%s", message.c_str());
}
}