mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-31 04:56:20 +00:00
Compare commits
23 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 37e66b5c01 | |||
| bf798c0561 | |||
| 6ec577f241 | |||
| 672e6766c7 | |||
| b3eb11d068 | |||
| 55c61ddc78 | |||
| c131eca57f | |||
| a6dbba5380 | |||
| d2f1a3097b | |||
| 6c522e0e76 | |||
| cba068bfe8 | |||
| 28c8af96e3 | |||
| c684709712 | |||
| 225b3fffbd | |||
| 0b790342e7 | |||
| 690621268b | |||
| 725d080cac | |||
| a3ffa7e262 | |||
| 344682e6ff | |||
| c927fec803 | |||
| 3b23477139 | |||
| ea49422ff7 | |||
| 9ccd9b80bb |
@@ -35,3 +35,8 @@ Build_64/
|
|||||||
build_64/
|
build_64/
|
||||||
log/
|
log/
|
||||||
logs/
|
logs/
|
||||||
|
|
||||||
|
submodules/
|
||||||
|
.idea/
|
||||||
|
cmake-build-debug
|
||||||
|
EQEmu.cbp
|
||||||
@@ -144,7 +144,7 @@ void EQEmuLogSys::ProcessGMSay(uint16 debug_level, uint16 log_category, const st
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
/* Check to see if the process that actually ran this is zone */
|
/* 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);
|
on_log_gmsay_hook(log_category, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
+221
-5
@@ -305,6 +305,16 @@ bool Mob::CheckHitChance(Mob* other, EQEmu::skills::SkillType skillinuse, int Ha
|
|||||||
|
|
||||||
float tohit_roll = zone->random.Real(0, 100);
|
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);
|
Log.Out(Logs::Detail, Logs::Attack, "Final hit chance: %.2f%%. Hit roll %.2f", chancetohit, tohit_roll);
|
||||||
|
|
||||||
return(tohit_roll <= chancetohit);
|
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 +
|
float aa_mit = (aabonuses.CombatStability + itembonuses.CombatStability +
|
||||||
spellbonuses.CombatStability) / 100.0f;
|
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)) {
|
if (RuleB(Combat, UseIntervalAC)) {
|
||||||
float softcap = (GetSkill(EQEmu::skills::SkillDefense) + GetLevel()) *
|
float softcap = (GetSkill(EQEmu::skills::SkillDefense) + GetLevel()) *
|
||||||
RuleR(Combat, SoftcapFactor) * (1.0 + aa_mit);
|
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);
|
float monkweight = RuleI(Combat, MonkACBonusWeight);
|
||||||
monkweight = mod_monk_weight(monkweight, attacker);
|
monkweight = mod_monk_weight(monkweight, attacker);
|
||||||
|
|
||||||
|
Log.Out(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Combat,
|
||||||
|
"[%s] [Mob::MeleeMitigation] Soft Cap [%.2f]",
|
||||||
|
GetCleanName(),
|
||||||
|
softcap
|
||||||
|
);
|
||||||
|
|
||||||
if (IsClient()) {
|
if (IsClient()) {
|
||||||
armor = CastToClient()->GetRawACNoShield(shield_ac);
|
armor = CastToClient()->GetRawACNoShield(shield_ac);
|
||||||
weight = (CastToClient()->CalcCurrentWeight() / 10.0);
|
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);
|
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);
|
damage = GetMeleeMitDmg(attacker, damage, minhit, mitigation_rating, attack_rating);
|
||||||
} else {
|
} else {
|
||||||
////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////
|
||||||
@@ -697,6 +736,14 @@ void Mob::MeleeMitigation(Mob *attacker, int32 &damage, int32 minhit, ExtraAttac
|
|||||||
|
|
||||||
if (damage < 0)
|
if (damage < 0)
|
||||||
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
|
// 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 mit_roll = zone->random.Real(0, mit_rating);
|
||||||
float atk_roll = zone->random.Real(0, atk_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) {
|
if (atk_roll > mit_roll) {
|
||||||
float a_diff = atk_roll - mit_roll;
|
float a_diff = atk_roll - mit_roll;
|
||||||
float thac0 = atk_rating * RuleR(Combat, ACthac0Factor);
|
float thac0 = atk_rating * RuleR(Combat, ACthac0Factor);
|
||||||
@@ -731,10 +787,50 @@ int32 Mob::GetMeleeMitDmg(Mob *attacker, int32 damage, int32 minhit,
|
|||||||
d = 20.0;
|
d = 20.0;
|
||||||
|
|
||||||
float interval = (damage - minhit) / 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);
|
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 -= (minhit * itembonuses.MeleeMitigation / 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);
|
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;
|
return damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1090,8 +1186,28 @@ bool Client::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, b
|
|||||||
return (true);
|
return (true);
|
||||||
|
|
||||||
int min_hit = 1;
|
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;
|
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))
|
if(GetLevel() < 10 && max_hit > RuleI(Combat, HitCapPre10))
|
||||||
max_hit = (RuleI(Combat, HitCapPre10));
|
max_hit = (RuleI(Combat, HitCapPre10));
|
||||||
else if(GetLevel() < 20 && max_hit > RuleI(Combat, HitCapPre20))
|
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 CritPetChance = owner->aabonuses.PetCriticalHit + owner->itembonuses.PetCriticalHit + owner->spellbonuses.PetCriticalHit;
|
||||||
int32 CritChanceBonus = GetCriticalChanceBonus(skill);
|
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) {
|
if (CritPetChance || critChance) {
|
||||||
|
|
||||||
//For pets use PetCriticalHit for base chance, pets do not innately critical with without it
|
//For pets use PetCriticalHit for base chance, pets do not innately critical with without it
|
||||||
//even if buffed with a CritChanceBonus effects.
|
//even if buffed with a CritChanceBonus effects.
|
||||||
critChance += CritPetChance;
|
critChance += CritPetChance;
|
||||||
critChance += critChance*CritChanceBonus/100.0f;
|
critChance += critChance*CritChanceBonus/100.0f;
|
||||||
|
|
||||||
|
Log.Out(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Combat,
|
||||||
|
"[%s] [Mob::TryPetCriticalHit] critChance [%.2f] PostCalcs",
|
||||||
|
GetCleanName(),
|
||||||
|
critChance
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(critChance > 0){
|
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
|
critMod += GetCritDmgMob(skill) * 2; // To account for base crit mod being 200 not 100
|
||||||
damage = (damage * critMod) / 100;
|
damage = (damage * critMod) / 100;
|
||||||
entity_list.FilteredMessageClose_StringID(this, false, 200,
|
|
||||||
MT_CritMelee, FilterMeleeCrits, CRITICAL_HIT,
|
Log.Out(
|
||||||
GetCleanName(), itoa(damage));
|
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
|
//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
|
//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);
|
critChance += (float(GetDEX()) / 125.0f);
|
||||||
else if (GetDEX() > 255)
|
}
|
||||||
|
else if (GetDEX() > 255) {
|
||||||
critChance += (float(GetDEX() - 255) / 500.0f) + 2.0f;
|
critChance += (float(GetDEX() - 255) / 500.0f) + 2.0f;
|
||||||
|
}
|
||||||
critChance += critChance * (float) CritChanceBonus / 100.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) {
|
if(opts) {
|
||||||
critChance *= opts->crit_percent;
|
critChance *= opts->crit_percent;
|
||||||
critChance += opts->crit_flat;
|
critChance += opts->crit_flat;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.Out(
|
||||||
|
Logs::General,
|
||||||
|
Logs::Combat,
|
||||||
|
"[%s] [Mob::TryCriticalHit] CritChance [%.2f]",
|
||||||
|
GetCleanName(),
|
||||||
|
critChance
|
||||||
|
);
|
||||||
|
|
||||||
if(critChance > 0) {
|
if(critChance > 0) {
|
||||||
|
|
||||||
critChance /= 100;
|
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
|
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;
|
damage = damage * critMod / 100;
|
||||||
|
|
||||||
bool deadlySuccess = false;
|
bool deadlySuccess = false;
|
||||||
@@ -4044,6 +4230,15 @@ void Mob::ApplyMeleeDamageBonus(uint16 skill, int32 &damage,ExtraAttackOptions *
|
|||||||
if (opts)
|
if (opts)
|
||||||
dmgbonusmod += opts->melee_damage_bonus_flat;
|
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;
|
damage += damage * dmgbonusmod / 100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4408,7 +4603,28 @@ void Mob::CommonOutgoingHitSuccess(Mob* defender, int32 &damage, EQEmu::skills::
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
ApplyMeleeDamageBonus(skillInUse, damage, opts);
|
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));
|
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);
|
TryCriticalHit(defender, skillInUse, damage,opts);
|
||||||
CheckNumHitsRemaining(NumHit::OutgoingHitSuccess);
|
CheckNumHitsRemaining(NumHit::OutgoingHitSuccess);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
return ac;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -247,7 +247,7 @@ void Embperl::init_eval_file(void)
|
|||||||
" return;"
|
" return;"
|
||||||
"} else {"
|
"} else {"
|
||||||
//we 'my' $filename,$mtime,$package,$sub to prevent them from changing our state up here.
|
//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'; \");"
|
" eval(\"package $package; my(\\$filename,\\$mtime,\\$package,\\$sub); \\$isloaded = 1; require './$filename'; \");"
|
||||||
/* "local *FH;open FH, $filename or die \"open '$filename' $!\";"
|
/* "local *FH;open FH, $filename or die \"open '$filename' $!\";"
|
||||||
"local($/) = undef;my $sub = <FH>;close FH;"
|
"local($/) = undef;my $sub = <FH>;close FH;"
|
||||||
"my $eval = qq{package $package; sub handler { $sub; }};"
|
"my $eval = qq{package $package; sub handler { $sub; }};"
|
||||||
|
|||||||
@@ -99,6 +99,10 @@ XS(XS_EQEmuIO_PRINT)
|
|||||||
/* Strip newlines from log message 'str' */
|
/* Strip newlines from log message 'str' */
|
||||||
*std::remove(str, str + strlen(str), '\n') = '\0';
|
*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 i;
|
||||||
int pos = 0;
|
int pos = 0;
|
||||||
int len = 0;
|
int len = 0;
|
||||||
|
|||||||
+30
-6
@@ -4603,11 +4603,16 @@ int16 Mob::GetCritDmgMob(uint16 skill)
|
|||||||
int critDmg_mod = 0;
|
int critDmg_mod = 0;
|
||||||
|
|
||||||
// All skill dmg mod + Skill specific
|
// 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] +
|
critDmg_mod += itembonuses.CritDmgMob[EQEmu::skills::HIGHEST_SKILL + 1] +
|
||||||
itembonuses.CritDmgMob[skill] + spellbonuses.CritDmgMob[skill] + aabonuses.CritDmgMob[skill];
|
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;
|
critDmg_mod = -100;
|
||||||
|
}
|
||||||
|
|
||||||
return critDmg_mod;
|
return critDmg_mod;
|
||||||
}
|
}
|
||||||
@@ -4648,11 +4653,30 @@ int16 Mob::GetCriticalChanceBonus(uint16 skill)
|
|||||||
int critical_chance = 0;
|
int critical_chance = 0;
|
||||||
|
|
||||||
// All skills + Skill specific
|
// 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] +
|
critical_chance += itembonuses.CriticalHitChance[EQEmu::skills::HIGHEST_SKILL + 1] +
|
||||||
itembonuses.CriticalHitChance[skill] + spellbonuses.CriticalHitChance[skill] + aabonuses.CriticalHitChance[skill];
|
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;
|
critical_chance = -100;
|
||||||
|
}
|
||||||
|
|
||||||
return critical_chance;
|
return critical_chance;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -280,13 +280,13 @@ public:
|
|||||||
|
|
||||||
if (message.find("\n") != std::string::npos){
|
if (message.find("\n") != std::string::npos){
|
||||||
auto message_split = SplitString(message, '\n');
|
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) {
|
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{
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user