From a1b622e9ccf78738fc8d16dac36fc97218bc6ff2 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 10 Nov 2015 17:33:36 +0100 Subject: Core/Unit: reduce differences between branches Very partial cherry pick of: Core/Units: Updated melee/spell hit chance calculation (cherry picked from commit 61c7161a1069f93948b8b4d80b501d9358b4844c) --- src/server/game/Entities/Unit/Unit.cpp | 25 +++++++------------------ src/server/game/Entities/Unit/Unit.h | 1 - src/server/scripts/World/npcs_special.cpp | 1 + 3 files changed, 8 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4449ed39a17..ea7ae059a9a 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -2177,29 +2177,18 @@ void Unit::HandleProcExtraAttackFor(Unit* victim) MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const { - // This is only wrapper + if (victim->GetTypeId() == TYPEID_UNIT && victim->ToCreature()->IsInEvadeMode()) + return MELEE_HIT_EVADE; // Miss chance based on melee - //float miss_chance = MeleeMissChanceCalc(victim, attType); - float miss_chance = MeleeSpellMissChance(victim, attType, int32(GetWeaponSkillValue(attType, victim)) - int32(GetMaxSkillValueForLevel(this)), 0); + int32 miss_chance = int32(MeleeSpellMissChance(victim, attType, int32(GetWeaponSkillValue(attType, victim)) - int32(GetMaxSkillValueForLevel(this)), 0) * 100.0f); // Critical hit chance - float crit_chance = GetUnitCriticalChance(attType, victim); - - float dodge_chance = GetUnitDodgeChance(attType, victim); - float block_chance = GetUnitBlockChance(attType, victim); - float parry_chance = GetUnitParryChance(attType, victim); - - // Useful if want to specify crit & miss chances for melee, else it could be removed - TC_LOG_DEBUG("entities.unit", "MELEE OUTCOME: miss %f crit %f dodge %f parry %f block %f", miss_chance, crit_chance, dodge_chance, parry_chance, block_chance); - - return RollMeleeOutcomeAgainst(victim, attType, int32(crit_chance*100), int32(miss_chance*100), int32(dodge_chance*100), int32(parry_chance*100), int32(block_chance*100)); -} + int32 crit_chance = int32(GetUnitCriticalChance(attType, victim) * 100.0f); -MeleeHitOutcome Unit::RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const -{ - if (victim->GetTypeId() == TYPEID_UNIT && victim->ToCreature()->IsEvadingAttacks()) - return MELEE_HIT_EVADE; + int32 dodge_chance = int32(GetUnitDodgeChance(attType, victim) * 100.0f); + int32 block_chance = int32(GetUnitBlockChance(attType, victim) * 100.0f); + int32 parry_chance = int32(GetUnitParryChance(attType, victim) * 100.0f); // melee attack table implementation // outcome priority: diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 93dcc590318..1703a0c9874 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1527,7 +1527,6 @@ class TC_GAME_API Unit : public WorldObject float GetPPMProcChance(uint32 WeaponSpeed, float PPM, const SpellInfo* spellProto) const; MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType) const; - MeleeHitOutcome RollMeleeOutcomeAgainst(Unit const* victim, WeaponAttackType attType, int32 crit_chance, int32 miss_chance, int32 dodge_chance, int32 parry_chance, int32 block_chance) const; bool IsVendor() const { return HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_VENDOR); } bool IsTrainer() const { return HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_TRAINER); } diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index fa9575f72e3..d5901632ff1 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1541,6 +1541,7 @@ public: void Reset() override { + // TODO: solve this in a different way! setting them as stunned prevents dummies from parrying me->SetControlled(true, UNIT_STATE_STUNNED);//disable rotate _events.Reset(); -- cgit v1.2.3