mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-14 03:11:28 +00:00
[Bug Fix] Fix for dual wield animation when same delay weapons. (#1671)
* DW animation fix * spelling * better animation looks better for low skill where dw doesn't fire as often. * Update attack.cpp
This commit is contained in:
parent
d9c8e80bca
commit
33c30d3cbb
@ -140,9 +140,25 @@ EQ::skills::SkillType Mob::AttackAnimation(int Hand, const EQ::ItemInstance* wea
|
|||||||
}
|
}
|
||||||
|
|
||||||
// If we're attacking with the secondary hand, play the dual wield anim
|
// If we're attacking with the secondary hand, play the dual wield anim
|
||||||
if (Hand == EQ::invslot::slotSecondary) // DW anim
|
if (Hand == EQ::invslot::slotSecondary) {// DW anim
|
||||||
type = animDualWield;
|
type = animDualWield;
|
||||||
|
|
||||||
|
//allow animation chance to fire to be similar to your dw chance
|
||||||
|
if (GetDualWieldingSameDelayWeapons() == 2) {
|
||||||
|
SetDualWieldingSameDelayWeapons(3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//If both weapons have same delay this allows a chance for DW animation
|
||||||
|
if (GetDualWieldingSameDelayWeapons() && Hand == EQ::invslot::slotPrimary) {
|
||||||
|
|
||||||
|
if (GetDualWieldingSameDelayWeapons() == 3 && zone->random.Roll(50)) {
|
||||||
|
type = animDualWield;
|
||||||
|
SetDualWieldingSameDelayWeapons(2);//Don't roll again till you do another dw attack.
|
||||||
|
}
|
||||||
|
SetDualWieldingSameDelayWeapons(2);//Ensures first attack is always primary.
|
||||||
|
}
|
||||||
|
|
||||||
DoAnim(type, 0, false);
|
DoAnim(type, 0, false);
|
||||||
|
|
||||||
return skillinuse;
|
return skillinuse;
|
||||||
@ -5541,6 +5557,8 @@ void Mob::SetAttackTimer()
|
|||||||
void Client::SetAttackTimer()
|
void Client::SetAttackTimer()
|
||||||
{
|
{
|
||||||
float haste_mod = GetHaste() * 0.01f;
|
float haste_mod = GetHaste() * 0.01f;
|
||||||
|
int primary_speed = 0;
|
||||||
|
int secondary_speed = 0;
|
||||||
|
|
||||||
//default value for attack timer in case they have
|
//default value for attack timer in case they have
|
||||||
//an invalid weapon equipped:
|
//an invalid weapon equipped:
|
||||||
@ -5618,6 +5636,21 @@ void Client::SetAttackTimer()
|
|||||||
speed = static_cast<int>(speed + ((hhe / 100.0f) * delay));
|
speed = static_cast<int>(speed + ((hhe / 100.0f) * delay));
|
||||||
}
|
}
|
||||||
TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true);
|
TimerToUse->SetAtTrigger(std::max(RuleI(Combat, MinHastedDelay), speed), true, true);
|
||||||
|
|
||||||
|
if (i == EQ::invslot::slotPrimary) {
|
||||||
|
primary_speed = speed;
|
||||||
|
}
|
||||||
|
else if (i == EQ::invslot::slotSecondary) {
|
||||||
|
secondary_speed = speed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//To allow for duel wield animation to display correctly if both weapons have same delay
|
||||||
|
if (primary_speed == secondary_speed) {
|
||||||
|
SetDualWieldingSameDelayWeapons(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
SetDualWieldingSameDelayWeapons(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -487,6 +487,7 @@ Mob::Mob(
|
|||||||
npc_assist_cap = 0;
|
npc_assist_cap = 0;
|
||||||
|
|
||||||
use_double_melee_round_dmg_bonus = false;
|
use_double_melee_round_dmg_bonus = false;
|
||||||
|
dw_same_delay = 0;
|
||||||
|
|
||||||
#ifdef BOTS
|
#ifdef BOTS
|
||||||
m_manual_follow = false;
|
m_manual_follow = false;
|
||||||
|
|||||||
@ -852,6 +852,8 @@ public:
|
|||||||
int GetHealRate() const { return itembonuses.HealRate + spellbonuses.HealRate + aabonuses.HealRate; }
|
int GetHealRate() const { return itembonuses.HealRate + spellbonuses.HealRate + aabonuses.HealRate; }
|
||||||
int GetMemoryBlurChance(int base_chance);
|
int GetMemoryBlurChance(int base_chance);
|
||||||
inline bool HasBaseEffectFocus() const { return (spellbonuses.FocusEffects[focusFcBaseEffects] || aabonuses.FocusEffects[focusFcBaseEffects] || itembonuses.FocusEffects[focusFcBaseEffects]); }
|
inline bool HasBaseEffectFocus() const { return (spellbonuses.FocusEffects[focusFcBaseEffects] || aabonuses.FocusEffects[focusFcBaseEffects] || itembonuses.FocusEffects[focusFcBaseEffects]); }
|
||||||
|
int32 GetDualWieldingSameDelayWeapons() const { return dw_same_delay; }
|
||||||
|
inline void SetDualWieldingSameDelayWeapons(int32 val) { dw_same_delay = val; }
|
||||||
|
|
||||||
bool TryDoubleMeleeRoundEffect();
|
bool TryDoubleMeleeRoundEffect();
|
||||||
bool GetUseDoubleMeleeRoundDmgBonus() const { return use_double_melee_round_dmg_bonus; }
|
bool GetUseDoubleMeleeRoundDmgBonus() const { return use_double_melee_round_dmg_bonus; }
|
||||||
@ -1467,6 +1469,7 @@ protected:
|
|||||||
int16 slow_mitigation; // Allows for a slow mitigation (100 = 100%, 50% = 50%)
|
int16 slow_mitigation; // Allows for a slow mitigation (100 = 100%, 50% = 50%)
|
||||||
Timer tic_timer;
|
Timer tic_timer;
|
||||||
Timer mana_timer;
|
Timer mana_timer;
|
||||||
|
int32 dw_same_delay;
|
||||||
|
|
||||||
Timer focusproclimit_timer[MAX_FOCUS_PROC_LIMIT_TIMERS]; //SPA 511
|
Timer focusproclimit_timer[MAX_FOCUS_PROC_LIMIT_TIMERS]; //SPA 511
|
||||||
int32 focusproclimit_spellid[MAX_FOCUS_PROC_LIMIT_TIMERS]; //SPA 511
|
int32 focusproclimit_spellid[MAX_FOCUS_PROC_LIMIT_TIMERS]; //SPA 511
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user