mirror of
https://github.com/EQEmu/Server.git
synced 2026-03-31 18:42:27 +00:00
[Spells] SPA 193 SE_SkillAttack will no longer trigger procs (#1919)
* fixed * [Spells] SPA 193 SE_SkillAttack will no longer trigger procs
This commit is contained in:
parent
7e065ad966
commit
10083387b6
@ -737,6 +737,7 @@ typedef struct
|
|||||||
int ammo_slot;
|
int ammo_slot;
|
||||||
uint8 skill;
|
uint8 skill;
|
||||||
float speed_mod;
|
float speed_mod;
|
||||||
|
bool disable_procs;
|
||||||
} tProjatk;
|
} tProjatk;
|
||||||
|
|
||||||
//eventually turn this into a typedef and
|
//eventually turn this into a typedef and
|
||||||
|
|||||||
@ -355,6 +355,7 @@ Mob::Mob(
|
|||||||
ProjectileAtk[i].ammo_slot = 0;
|
ProjectileAtk[i].ammo_slot = 0;
|
||||||
ProjectileAtk[i].skill = 0;
|
ProjectileAtk[i].skill = 0;
|
||||||
ProjectileAtk[i].speed_mod = 0.0f;
|
ProjectileAtk[i].speed_mod = 0.0f;
|
||||||
|
ProjectileAtk[i].disable_procs = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAX_FOCUS_PROC_LIMIT_TIMERS; i++) {
|
for (int i = 0; i < MAX_FOCUS_PROC_LIMIT_TIMERS; i++) {
|
||||||
|
|||||||
@ -1000,10 +1000,10 @@ public:
|
|||||||
int32 ReduceAllDamage(int32 damage);
|
int32 ReduceAllDamage(int32 damage);
|
||||||
|
|
||||||
void DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int base_damage, int min_damage = 0, int32 hate_override = -1, int ReuseTime = 10);
|
void DoSpecialAttackDamage(Mob *who, EQ::skills::SkillType skill, int base_damage, int min_damage = 0, int32 hate_override = -1, int ReuseTime = 10);
|
||||||
virtual void DoThrowingAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemData* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f);
|
virtual void DoThrowingAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemData* AmmoItem = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, int AmmoSlot = 0, float speed = 4.0f, bool DisableProcs = false);
|
||||||
void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQ::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0);
|
void DoMeleeSkillAttackDmg(Mob* other, uint16 weapon_damage, EQ::skills::SkillType skillinuse, int16 chance_mod = 0, int16 focus = 0, bool CanRiposte = false, int ReuseTime = 0);
|
||||||
virtual void DoArcheryAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemInstance* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQ::ItemData *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f);
|
virtual void DoArcheryAttackDmg(Mob* other, const EQ::ItemInstance* RangeWeapon = nullptr, const EQ::ItemInstance* Ammo = nullptr, uint16 weapon_damage = 0, int16 chance_mod = 0, int16 focus = 0, int ReuseTime = 0, uint32 range_id = 0, uint32 ammo_id = 0, const EQ::ItemData *AmmoItem = nullptr, int AmmoSlot = 0, float speed = 4.0f, bool DisableProcs = false);
|
||||||
bool TryProjectileAttack(Mob* other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, uint16 weapon_dmg, const EQ::ItemInstance* RangeWeapon, const EQ::ItemInstance* Ammo, int AmmoSlot, float speed);
|
bool TryProjectileAttack(Mob* other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse, uint16 weapon_dmg, const EQ::ItemInstance* RangeWeapon, const EQ::ItemInstance* Ammo, int AmmoSlot, float speed, bool DisableProcs = false);
|
||||||
void ProjectileAttack();
|
void ProjectileAttack();
|
||||||
inline bool HasProjectileAttack() const { return ActiveProjectileATK; }
|
inline bool HasProjectileAttack() const { return ActiveProjectileATK; }
|
||||||
inline void SetProjectileAttack(bool value) { ActiveProjectileATK = value; }
|
inline void SetProjectileAttack(bool value) { ActiveProjectileATK = value; }
|
||||||
|
|||||||
@ -783,7 +783,7 @@ void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
|||||||
|
|
||||||
void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemInstance *Ammo,
|
void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemInstance *Ammo,
|
||||||
uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id,
|
uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id,
|
||||||
uint32 ammo_id, const EQ::ItemData *AmmoItem, int AmmoSlot, float speed)
|
uint32 ammo_id, const EQ::ItemData *AmmoItem, int AmmoSlot, float speed, bool DisableProcs)
|
||||||
{
|
{
|
||||||
if ((other == nullptr ||
|
if ((other == nullptr ||
|
||||||
((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) ||
|
((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) ||
|
||||||
@ -848,7 +848,7 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, co
|
|||||||
|
|
||||||
if (LaunchProjectile) { // 1: Shoot the Projectile once we calculate weapon damage.
|
if (LaunchProjectile) { // 1: Shoot the Projectile once we calculate weapon damage.
|
||||||
TryProjectileAttack(other, AmmoItem, EQ::skills::SkillArchery, (WDmg + ADmg), RangeWeapon,
|
TryProjectileAttack(other, AmmoItem, EQ::skills::SkillArchery, (WDmg + ADmg), RangeWeapon,
|
||||||
Ammo, AmmoSlot, speed);
|
Ammo, AmmoSlot, speed, DisableProcs);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -896,46 +896,49 @@ void Mob::DoArcheryAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, co
|
|||||||
other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillArchery);
|
other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillArchery);
|
||||||
|
|
||||||
|
|
||||||
|
if (!DisableProcs) {
|
||||||
|
// Weapon Proc
|
||||||
|
if (RangeWeapon && other && !other->HasDied()) {
|
||||||
|
TryCombatProcs(RangeWeapon, other, EQ::invslot::slotRange);
|
||||||
|
}
|
||||||
|
|
||||||
// Weapon Proc
|
// Ammo Proc, do not try spell procs if from ammo.
|
||||||
if (RangeWeapon && other && !other->HasDied()) {
|
if (last_ammo_used) {
|
||||||
TryCombatProcs(RangeWeapon, other, EQ::invslot::slotRange);
|
TryWeaponProc(nullptr, last_ammo_used, other, EQ::invslot::slotRange);
|
||||||
}
|
}
|
||||||
|
else if (Ammo && other && !other->HasDied()) {
|
||||||
// Ammo Proc, do not try spell procs if from ammo.
|
TryWeaponProc(Ammo, Ammo->GetItem(), other, EQ::invslot::slotRange);
|
||||||
if (last_ammo_used) {
|
}
|
||||||
TryWeaponProc(nullptr, last_ammo_used, other, EQ::invslot::slotRange);
|
|
||||||
}
|
|
||||||
else if (Ammo && other && !other->HasDied()) {
|
|
||||||
TryWeaponProc(Ammo, Ammo->GetItem(), other, EQ::invslot::slotRange);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TryCastOnSkillUse(other, EQ::skills::SkillArchery);
|
TryCastOnSkillUse(other, EQ::skills::SkillArchery);
|
||||||
|
|
||||||
// Skill Proc Attempt
|
if (!DisableProcs) {
|
||||||
if (HasSkillProcs() && other && !other->HasDied()) {
|
// Skill Proc Attempt
|
||||||
if (ReuseTime) {
|
if (HasSkillProcs() && other && !other->HasDied()) {
|
||||||
TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime);
|
if (ReuseTime) {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillArchery, 0, false, EQ::invslot::slotRange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
TrySkillProc(other, EQ::skills::SkillArchery, 0, false, EQ::invslot::slotRange);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Skill Proc Success ... can proc off hits OR misses
|
// Skill Proc Success ... can proc off hits OR misses
|
||||||
if (HasSkillProcSuccess() && other && !other->HasDied()) {
|
if (HasSkillProcSuccess() && other && !other->HasDied()) {
|
||||||
if (ReuseTime) {
|
if (ReuseTime) {
|
||||||
TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime, true);
|
TrySkillProc(other, EQ::skills::SkillArchery, ReuseTime, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
TrySkillProc(other, EQ::skills::SkillArchery, 0, true, EQ::invslot::slotRange);
|
TrySkillProc(other, EQ::skills::SkillArchery, 0, true, EQ::invslot::slotRange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mob::TryProjectileAttack(Mob *other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse,
|
bool Mob::TryProjectileAttack(Mob *other, const EQ::ItemData *item, EQ::skills::SkillType skillInUse,
|
||||||
uint16 weapon_dmg, const EQ::ItemInstance *RangeWeapon,
|
uint16 weapon_dmg, const EQ::ItemInstance *RangeWeapon,
|
||||||
const EQ::ItemInstance *Ammo, int AmmoSlot, float speed)
|
const EQ::ItemInstance *Ammo, int AmmoSlot, float speed, bool DisableProcs)
|
||||||
{
|
{
|
||||||
if (!other)
|
if (!other)
|
||||||
return false;
|
return false;
|
||||||
@ -996,6 +999,7 @@ bool Mob::TryProjectileAttack(Mob *other, const EQ::ItemData *item, EQ::skills::
|
|||||||
ProjectileAtk[slot].ammo_slot = AmmoSlot;
|
ProjectileAtk[slot].ammo_slot = AmmoSlot;
|
||||||
ProjectileAtk[slot].skill = skillInUse;
|
ProjectileAtk[slot].skill = skillInUse;
|
||||||
ProjectileAtk[slot].speed_mod = speed;
|
ProjectileAtk[slot].speed_mod = speed;
|
||||||
|
ProjectileAtk[slot].disable_procs = DisableProcs;
|
||||||
|
|
||||||
SetProjectileAttack(true);
|
SetProjectileAttack(true);
|
||||||
|
|
||||||
@ -1072,11 +1076,11 @@ void Mob::ProjectileAttack()
|
|||||||
DoArcheryAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg,
|
DoArcheryAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg,
|
||||||
0, 0, 0, ProjectileAtk[i].ranged_id,
|
0, 0, 0, ProjectileAtk[i].ranged_id,
|
||||||
ProjectileAtk[i].ammo_id, nullptr,
|
ProjectileAtk[i].ammo_id, nullptr,
|
||||||
ProjectileAtk[i].ammo_slot);
|
ProjectileAtk[i].ammo_slot, 4.0f, ProjectileAtk[i].disable_procs);
|
||||||
else if (ProjectileAtk[i].skill == EQ::skills::SkillThrowing)
|
else if (ProjectileAtk[i].skill == EQ::skills::SkillThrowing)
|
||||||
DoThrowingAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg,
|
DoThrowingAttackDmg(target, nullptr, nullptr, ProjectileAtk[i].wpn_dmg,
|
||||||
0, 0, 0, ProjectileAtk[i].ranged_id,
|
0, 0, 0, ProjectileAtk[i].ranged_id,
|
||||||
ProjectileAtk[i].ammo_slot);
|
ProjectileAtk[i].ammo_slot, 4.0f, ProjectileAtk[i].disable_procs);
|
||||||
else if (ProjectileAtk[i].skill == EQ::skills::SkillConjuration &&
|
else if (ProjectileAtk[i].skill == EQ::skills::SkillConjuration &&
|
||||||
IsValidSpell(ProjectileAtk[i].wpn_dmg))
|
IsValidSpell(ProjectileAtk[i].wpn_dmg))
|
||||||
SpellOnTarget(ProjectileAtk[i].wpn_dmg, target, false, true,
|
SpellOnTarget(ProjectileAtk[i].wpn_dmg, target, false, true,
|
||||||
@ -1376,12 +1380,12 @@ void Client::ThrowingAttack(Mob* other, bool CanDoubleAttack) { //old was 51
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemData *AmmoItem,
|
void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, const EQ::ItemData *AmmoItem,
|
||||||
uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id,
|
uint16 weapon_damage, int16 chance_mod, int16 focus, int ReuseTime, uint32 range_id,
|
||||||
int AmmoSlot, float speed)
|
int AmmoSlot, float speed, bool DisableProcs)
|
||||||
{
|
{
|
||||||
if ((other == nullptr ||
|
if ((other == nullptr ||
|
||||||
((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) ||
|
((IsClient() && CastToClient()->dead) || (other->IsClient() && other->CastToClient()->dead)) ||
|
||||||
HasDied() || (!IsAttackAllowed(other)) || (other->GetInvul() || other->GetSpecialAbility(IMMUNE_MELEE)))) {
|
HasDied() || (!IsAttackAllowed(other)) || (other->GetInvul() || other->GetSpecialAbility(IMMUNE_MELEE)))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1398,11 +1402,12 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c
|
|||||||
if (RuleB(Combat, ProjectileDmgOnImpact)) {
|
if (RuleB(Combat, ProjectileDmgOnImpact)) {
|
||||||
if (AmmoItem) {
|
if (AmmoItem) {
|
||||||
LaunchProjectile = true;
|
LaunchProjectile = true;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
if (!RangeWeapon && range_id) {
|
if (!RangeWeapon && range_id) {
|
||||||
if (IsClient()) {
|
if (IsClient()) {
|
||||||
m_RangeWeapon = CastToClient()->m_inv[AmmoSlot];
|
m_RangeWeapon = CastToClient()->m_inv[AmmoSlot];
|
||||||
|
|
||||||
if (m_RangeWeapon && m_RangeWeapon->GetItem() && m_RangeWeapon->GetItem()->ID == range_id) {
|
if (m_RangeWeapon && m_RangeWeapon->GetItem() && m_RangeWeapon->GetItem()->ID == range_id) {
|
||||||
RangeWeapon = m_RangeWeapon;
|
RangeWeapon = m_RangeWeapon;
|
||||||
}
|
}
|
||||||
@ -1412,7 +1417,8 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (AmmoItem) {
|
}
|
||||||
|
else if (AmmoItem) {
|
||||||
SendItemAnimation(other, AmmoItem, EQ::skills::SkillThrowing);
|
SendItemAnimation(other, AmmoItem, EQ::skills::SkillThrowing);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1430,10 +1436,11 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c
|
|||||||
|
|
||||||
if (LaunchProjectile) {
|
if (LaunchProjectile) {
|
||||||
TryProjectileAttack(other, AmmoItem, EQ::skills::SkillThrowing, WDmg, RangeWeapon,
|
TryProjectileAttack(other, AmmoItem, EQ::skills::SkillThrowing, WDmg, RangeWeapon,
|
||||||
nullptr, AmmoSlot, speed);
|
nullptr, AmmoSlot, speed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
WDmg = weapon_damage;
|
WDmg = weapon_damage;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1458,7 +1465,8 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c
|
|||||||
TotalDmg = my_hit.damage_done;
|
TotalDmg = my_hit.damage_done;
|
||||||
|
|
||||||
LogCombat("Item DMG [{}]. Hit for damage [{}]", WDmg, TotalDmg);
|
LogCombat("Item DMG [{}]. Hit for damage [{}]", WDmg, TotalDmg);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
TotalDmg = DMG_INVULNERABLE;
|
TotalDmg = DMG_INVULNERABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,25 +1475,29 @@ void Mob::DoThrowingAttackDmg(Mob *other, const EQ::ItemInstance *RangeWeapon, c
|
|||||||
|
|
||||||
other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillThrowing);
|
other->Damage(this, TotalDmg, SPELL_UNKNOWN, EQ::skills::SkillThrowing);
|
||||||
|
|
||||||
if (other && !other->HasDied()) {
|
if (!DisableProcs && other && !other->HasDied()) {
|
||||||
TryCombatProcs(RangeWeapon, other, EQ::invslot::slotRange, last_ammo_used);
|
TryCombatProcs(RangeWeapon, other, EQ::invslot::slotRange, last_ammo_used);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasSkillProcs() && other && !other->HasDied()) {
|
TryCastOnSkillUse(other, EQ::skills::SkillThrowing);
|
||||||
if (ReuseTime) {
|
|
||||||
TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
TrySkillProc(other, EQ::skills::SkillThrowing, 0, false, EQ::invslot::slotRange);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (HasSkillProcSuccess() && other && !other->HasDied()) {
|
if (!DisableProcs) {
|
||||||
if (ReuseTime) {
|
if (HasSkillProcs() && other && !other->HasDied()) {
|
||||||
TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime, true);
|
if (ReuseTime) {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillThrowing, 0, false, EQ::invslot::slotRange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
TrySkillProc(other, EQ::skills::SkillThrowing, 0, true, EQ::invslot::slotRange);
|
if (HasSkillProcSuccess() && other && !other->HasDied()) {
|
||||||
|
if (ReuseTime) {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillThrowing, ReuseTime, true);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
TrySkillProc(other, EQ::skills::SkillThrowing, 0, true, EQ::invslot::slotRange);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2250,10 +2262,8 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQ::skills::Sk
|
|||||||
damage = DMG_INVULNERABLE;
|
damage = DMG_INVULNERABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CanSkillProc = true;
|
|
||||||
if (skillinuse == EQ::skills::SkillOffense) { // Hack to allow damage to display.
|
if (skillinuse == EQ::skills::SkillOffense) { // Hack to allow damage to display.
|
||||||
skillinuse = EQ::skills::SkillTigerClaw; //'strike' your opponent - Arbitrary choice for message.
|
skillinuse = EQ::skills::SkillTigerClaw; //'strike' your opponent - Arbitrary choice for message.
|
||||||
CanSkillProc = false; // Disable skill procs
|
|
||||||
}
|
}
|
||||||
|
|
||||||
other->AddToHateList(this, hate, 0);
|
other->AddToHateList(this, hate, 0);
|
||||||
@ -2263,14 +2273,6 @@ void Mob::DoMeleeSkillAttackDmg(Mob *other, uint16 weapon_damage, EQ::skills::Sk
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
TryCastOnSkillUse(other, skillinuse);
|
TryCastOnSkillUse(other, skillinuse);
|
||||||
|
|
||||||
if (CanSkillProc && HasSkillProcs()) {
|
|
||||||
TrySkillProc(other, skillinuse, ReuseTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CanSkillProc && (damage > 0) && HasSkillProcSuccess()) {
|
|
||||||
TrySkillProc(other, skillinuse, ReuseTime, true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mob::CanDoSpecialAttack(Mob *other) {
|
bool Mob::CanDoSpecialAttack(Mob *other) {
|
||||||
|
|||||||
@ -2275,10 +2275,10 @@ bool Mob::SpellEffect(Mob* caster, uint16 spell_id, float partial, int level_ove
|
|||||||
|
|
||||||
switch(spells[spell_id].skill) {
|
switch(spells[spell_id].skill) {
|
||||||
case EQ::skills::SkillThrowing:
|
case EQ::skills::SkillThrowing:
|
||||||
caster->DoThrowingAttackDmg(this, nullptr, nullptr, spells[spell_id].base_value[i],spells[spell_id].limit_value[i], 0, ReuseTime);
|
caster->DoThrowingAttackDmg(this, nullptr, nullptr, spells[spell_id].base_value[i],spells[spell_id].limit_value[i], 0, ReuseTime, 0, 0, 4.0f, true);
|
||||||
break;
|
break;
|
||||||
case EQ::skills::SkillArchery:
|
case EQ::skills::SkillArchery:
|
||||||
caster->DoArcheryAttackDmg(this, nullptr, nullptr, spells[spell_id].base_value[i],spells[spell_id].limit_value[i], 0, ReuseTime);
|
caster->DoArcheryAttackDmg(this, nullptr, nullptr, spells[spell_id].base_value[i],spells[spell_id].limit_value[i], 0, ReuseTime, 0, 0, nullptr, 0, 4.0f, true);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
caster->DoMeleeSkillAttackDmg(this, spells[spell_id].base_value[i], spells[spell_id].skill, spells[spell_id].limit_value[i], 0, false, ReuseTime);
|
caster->DoMeleeSkillAttackDmg(this, spells[spell_id].base_value[i], spells[spell_id].skill, spells[spell_id].limit_value[i], 0, false, ReuseTime);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user