diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 25 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 1 | ||||
-rw-r--r-- | src/server/scripts/World/npcs_special.cpp | 1 |
3 files changed, 8 insertions, 19 deletions
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(); |