mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-20 05:01:29 +00:00
Fix for Berserker 'Piercing' skill issues
This commit is contained in:
parent
15c92f019a
commit
1b7841f683
@ -1,5 +1,8 @@
|
|||||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
== 01/26/2016 ==
|
||||||
|
Uleat: Fix for Berserker 'Piercing' skill issues. Server Admins: If you run custom skill sets, this patch touches the code segments that you will need to modify if you have changed the default berserker 1H-/2H-piercing skill values.
|
||||||
|
|
||||||
== 01/13/2016 ==
|
== 01/13/2016 ==
|
||||||
Kinglykrab: Modified #flag so you can refresh your target's account status (GM status level) without them having to relog.
|
Kinglykrab: Modified #flag so you can refresh your target's account status (GM status level) without them having to relog.
|
||||||
- Just target the person whose flag you want to refresh and type #flag.
|
- Just target the person whose flag you want to refresh and type #flag.
|
||||||
|
|||||||
@ -799,10 +799,10 @@ static const uint8 SkillDamageTypes[HIGHEST_SKILL + 1] = // change to _SkillServ
|
|||||||
/*Intimidation*/ DamageTypeUnknown,
|
/*Intimidation*/ DamageTypeUnknown,
|
||||||
/*Berserking*/ DamageTypeUnknown,
|
/*Berserking*/ DamageTypeUnknown,
|
||||||
/*Taunt*/ DamageTypeUnknown,
|
/*Taunt*/ DamageTypeUnknown,
|
||||||
/*Frenzy*/ 74 //,
|
/*Frenzy*/ 74,
|
||||||
// /*RemoveTrap*/ DamageTypeUnknown, // Needs research (set for SenseTrap value)
|
/*RemoveTrap*/ DamageTypeUnknown, // Needs research (set for SenseTrap value)
|
||||||
// /*TripleAttack*/ DamageTypeUnknown, // Needs research (set for DoubleAttack value)
|
/*TripleAttack*/ DamageTypeUnknown, // Needs research (set for DoubleAttack value)
|
||||||
// /*2HPiercing*/ 36 // Needs research (set for 1HPiercing value - similar to slash/blunt)
|
/*2HPiercing*/ 36 // Needs research (set for 1HPiercing value - similar to slash/blunt)
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -186,6 +186,8 @@ namespace RoF2 {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 56;
|
static const size_t TEXT_LINK_BODY_LENGTH = 56;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = Skill2HPiercing;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -185,6 +185,8 @@ namespace RoF {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 55;
|
static const size_t TEXT_LINK_BODY_LENGTH = 55;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = SkillTripleAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -182,6 +182,8 @@ namespace SoD {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = SkillTripleAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -182,6 +182,8 @@ namespace SoF {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = SkillTripleAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -181,6 +181,8 @@ namespace Titanium {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 4;
|
static const size_t POTION_BELT_ITEM_COUNT = 4;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 45;
|
static const size_t TEXT_LINK_BODY_LENGTH = 45;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = SkillFrenzy;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -182,6 +182,8 @@ namespace UF {
|
|||||||
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
static const size_t POTION_BELT_ITEM_COUNT = 5;
|
||||||
|
|
||||||
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
static const size_t TEXT_LINK_BODY_LENGTH = 50;
|
||||||
|
|
||||||
|
static const size_t PLAYER_PROFILE_SKILL_MAX = SkillTripleAttack;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace limits {
|
namespace limits {
|
||||||
|
|||||||
@ -71,7 +71,7 @@ float EQEmu::GetSkillMeleePushForce(SkillUseTypes skill)
|
|||||||
case SkillEagleStrike:
|
case SkillEagleStrike:
|
||||||
case SkillKick:
|
case SkillKick:
|
||||||
case SkillTigerClaw:
|
case SkillTigerClaw:
|
||||||
//case Skill2HPiercing:
|
case Skill2HPiercing:
|
||||||
return 0.2f;
|
return 0.2f;
|
||||||
case SkillArchery:
|
case SkillArchery:
|
||||||
return 0.15f;
|
return 0.15f;
|
||||||
|
|||||||
@ -114,7 +114,7 @@ enum SkillUseTypes
|
|||||||
/*13049*/ SkillTripleAttack,
|
/*13049*/ SkillTripleAttack,
|
||||||
|
|
||||||
// RoF2+ specific skills
|
// RoF2+ specific skills
|
||||||
// /*00789*/ Skill2HPiercing,
|
/*00789*/ Skill2HPiercing,
|
||||||
// /*01216*/ SkillNone, // This needs to move down as new skills are added
|
// /*01216*/ SkillNone, // This needs to move down as new skills are added
|
||||||
|
|
||||||
/*00000*/ _EmuSkillCount // move to last position of active enumeration labels
|
/*00000*/ _EmuSkillCount // move to last position of active enumeration labels
|
||||||
@ -171,7 +171,7 @@ enum SkillUseTypes
|
|||||||
};
|
};
|
||||||
|
|
||||||
// temporary until it can be sorted out...
|
// temporary until it can be sorted out...
|
||||||
#define HIGHEST_SKILL SkillTripleAttack
|
#define HIGHEST_SKILL Skill2HPiercing
|
||||||
// Spell Effects use this value to determine if an effect applies to all skills.
|
// Spell Effects use this value to determine if an effect applies to all skills.
|
||||||
#define ALL_SKILLS -1
|
#define ALL_SKILLS -1
|
||||||
|
|
||||||
|
|||||||
@ -1814,6 +1814,11 @@ void Client::SetClassStartingSkills(PlayerProfile_Struct *pp)
|
|||||||
pp->skills[i] = database.GetSkillCap(pp->class_, (SkillUseTypes)i, 1);
|
pp->skills[i] = database.GetSkillCap(pp->class_, (SkillUseTypes)i, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cle->GetClientVersion() < static_cast<uint8>(ClientVersion::RoF2) && pp->class_ == BERSERKER) {
|
||||||
|
pp->skills[Skill1HPiercing] = pp->skills[Skill2HPiercing];
|
||||||
|
pp->skills[Skill2HPiercing] = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::SetRaceStartingSkills( PlayerProfile_Struct *pp )
|
void Client::SetRaceStartingSkills( PlayerProfile_Struct *pp )
|
||||||
|
|||||||
@ -76,7 +76,7 @@ bool Mob::AttackAnimation(SkillUseTypes &skillinuse, int Hand, const ItemInst* w
|
|||||||
case ItemType1HPiercing: // Piercing
|
case ItemType1HPiercing: // Piercing
|
||||||
{
|
{
|
||||||
skillinuse = Skill1HPiercing;
|
skillinuse = Skill1HPiercing;
|
||||||
type = animPiercing;
|
type = anim1HPiercing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ItemType1HBlunt: // 1H Blunt
|
case ItemType1HBlunt: // 1H Blunt
|
||||||
@ -93,7 +93,10 @@ bool Mob::AttackAnimation(SkillUseTypes &skillinuse, int Hand, const ItemInst* w
|
|||||||
}
|
}
|
||||||
case ItemType2HPiercing: // 2H Piercing
|
case ItemType2HPiercing: // 2H Piercing
|
||||||
{
|
{
|
||||||
skillinuse = Skill1HPiercing; // change to Skill2HPiercing once activated
|
if (IsClient() && CastToClient()->GetClientVersion() < ClientVersion::RoF2)
|
||||||
|
skillinuse = Skill1HPiercing;
|
||||||
|
else
|
||||||
|
skillinuse = Skill2HPiercing;
|
||||||
type = anim2HWeapon;
|
type = anim2HWeapon;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -127,7 +130,7 @@ bool Mob::AttackAnimation(SkillUseTypes &skillinuse, int Hand, const ItemInst* w
|
|||||||
}
|
}
|
||||||
case Skill1HPiercing: // Piercing
|
case Skill1HPiercing: // Piercing
|
||||||
{
|
{
|
||||||
type = animPiercing;
|
type = anim1HPiercing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Skill1HBlunt: // 1H Blunt
|
case Skill1HBlunt: // 1H Blunt
|
||||||
@ -140,7 +143,7 @@ bool Mob::AttackAnimation(SkillUseTypes &skillinuse, int Hand, const ItemInst* w
|
|||||||
type = anim2HSlashing; //anim2HWeapon
|
type = anim2HSlashing; //anim2HWeapon
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 99: // 2H Piercing // change to Skill2HPiercing once activated
|
case Skill2HPiercing: // 2H Piercing
|
||||||
{
|
{
|
||||||
type = anim2HWeapon;
|
type = anim2HWeapon;
|
||||||
break;
|
break;
|
||||||
@ -1652,10 +1655,10 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool
|
|||||||
skillinuse = Skill2HSlashing;
|
skillinuse = Skill2HSlashing;
|
||||||
break;
|
break;
|
||||||
case ItemType1HPiercing:
|
case ItemType1HPiercing:
|
||||||
//skillinuse = Skill1HPiercing;
|
skillinuse = Skill1HPiercing;
|
||||||
//break;
|
break;
|
||||||
case ItemType2HPiercing:
|
case ItemType2HPiercing:
|
||||||
skillinuse = Skill1HPiercing; // change to Skill2HPiercing once activated
|
skillinuse = Skill2HPiercing;
|
||||||
break;
|
break;
|
||||||
case ItemType1HBlunt:
|
case ItemType1HBlunt:
|
||||||
skillinuse = Skill1HBlunt;
|
skillinuse = Skill1HBlunt;
|
||||||
@ -1683,11 +1686,6 @@ bool NPC::Attack(Mob* other, int Hand, bool bRiposte, bool IsStrikethrough, bool
|
|||||||
ItemInst weapon_inst(weapon, charges);
|
ItemInst weapon_inst(weapon, charges);
|
||||||
AttackAnimation(skillinuse, Hand, &weapon_inst);
|
AttackAnimation(skillinuse, Hand, &weapon_inst);
|
||||||
|
|
||||||
// Remove this once Skill2HPiercing is activated
|
|
||||||
//Work-around for there being no 2HP skill - We use 99 for the 2HB animation and 36 for pierce messages
|
|
||||||
if(skillinuse == 99)
|
|
||||||
skillinuse = static_cast<SkillUseTypes>(36);
|
|
||||||
|
|
||||||
//basically "if not immune" then do the attack
|
//basically "if not immune" then do the attack
|
||||||
if((weapon_damage) > 0) {
|
if((weapon_damage) > 0) {
|
||||||
|
|
||||||
|
|||||||
@ -1179,7 +1179,7 @@ uint16 Bot::GetPrimarySkillValue() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ItemType2HPiercing: {
|
case ItemType2HPiercing: {
|
||||||
skill = Skill1HPiercing; // change to Skill2HPiercing once activated
|
skill = Skill2HPiercing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ItemTypeMartial: {
|
case ItemTypeMartial: {
|
||||||
@ -6493,7 +6493,7 @@ void Bot::RogueBackstab(Mob* other, bool min_damage, int ReuseTime) {
|
|||||||
ndamage = -5;
|
ndamage = -5;
|
||||||
|
|
||||||
DoSpecialAttackDamage(other, SkillBackstab, ndamage, min_hit, hate, ReuseTime);
|
DoSpecialAttackDamage(other, SkillBackstab, ndamage, min_hit, hate, ReuseTime);
|
||||||
DoAnim(animPiercing);
|
DoAnim(anim1HPiercing);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bot::RogueAssassinate(Mob* other) {
|
void Bot::RogueAssassinate(Mob* other) {
|
||||||
@ -6505,7 +6505,7 @@ void Bot::RogueAssassinate(Mob* other) {
|
|||||||
other->Damage(this, -5, SPELL_UNKNOWN, SkillBackstab);
|
other->Damage(this, -5, SPELL_UNKNOWN, SkillBackstab);
|
||||||
}
|
}
|
||||||
|
|
||||||
DoAnim(animPiercing);
|
DoAnim(anim1HPiercing);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
|
void Bot::DoClassAttacks(Mob *target, bool IsRiposte) {
|
||||||
|
|||||||
@ -2343,11 +2343,17 @@ bool Client::HasSkill(SkillUseTypes skill_id) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Client::CanHaveSkill(SkillUseTypes skill_id) const {
|
bool Client::CanHaveSkill(SkillUseTypes skill_id) const {
|
||||||
|
if (GetClientVersion() < ClientVersion::RoF2 && class_ == BERSERKER && skill_id == Skill1HPiercing)
|
||||||
|
skill_id = Skill2HPiercing;
|
||||||
|
|
||||||
return(database.GetSkillCap(GetClass(), skill_id, RuleI(Character, MaxLevel)) > 0);
|
return(database.GetSkillCap(GetClass(), skill_id, RuleI(Character, MaxLevel)) > 0);
|
||||||
//if you don't have it by max level, then odds are you never will?
|
//if you don't have it by max level, then odds are you never will?
|
||||||
}
|
}
|
||||||
|
|
||||||
uint16 Client::MaxSkill(SkillUseTypes skillid, uint16 class_, uint16 level) const {
|
uint16 Client::MaxSkill(SkillUseTypes skillid, uint16 class_, uint16 level) const {
|
||||||
|
if (GetClientVersion() < ClientVersion::RoF2 && class_ == BERSERKER && skillid == Skill1HPiercing)
|
||||||
|
skillid = Skill2HPiercing;
|
||||||
|
|
||||||
return(database.GetSkillCap(class_, skillid, level));
|
return(database.GetSkillCap(class_, skillid, level));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4211,7 +4217,10 @@ uint16 Client::GetPrimarySkillValue()
|
|||||||
}
|
}
|
||||||
case ItemType2HPiercing: // 2H Piercing
|
case ItemType2HPiercing: // 2H Piercing
|
||||||
{
|
{
|
||||||
skill = Skill1HPiercing; // change to Skill2HPiercing once activated
|
if (IsClient() && CastToClient()->GetClientVersion() < ClientVersion::RoF2)
|
||||||
|
skill = Skill1HPiercing;
|
||||||
|
else
|
||||||
|
skill = Skill2HPiercing;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ItemTypeMartial: // Hand to Hand
|
case ItemTypeMartial: // Hand to Hand
|
||||||
@ -4950,11 +4959,11 @@ void Client::ShowSkillsWindow()
|
|||||||
const char* SkillName[] = {"1H Blunt","1H Slashing","2H Blunt","2H Slashing","Abjuration","Alteration","Apply Poison","Archery",
|
const char* SkillName[] = {"1H Blunt","1H Slashing","2H Blunt","2H Slashing","Abjuration","Alteration","Apply Poison","Archery",
|
||||||
"Backstab","Bind Wound","Bash","Block","Brass Instruments","Channeling","Conjuration","Defense","Disarm","Disarm Traps","Divination",
|
"Backstab","Bind Wound","Bash","Block","Brass Instruments","Channeling","Conjuration","Defense","Disarm","Disarm Traps","Divination",
|
||||||
"Dodge","Double Attack","Dragon Punch","Dual Wield","Eagle Strike","Evocation","Feign Death","Flying Kick","Forage","Hand to Hand",
|
"Dodge","Double Attack","Dragon Punch","Dual Wield","Eagle Strike","Evocation","Feign Death","Flying Kick","Forage","Hand to Hand",
|
||||||
"Hide","Kick","Meditate","Mend","Offense","Parry","Pick Lock","Piercing","Ripost","Round Kick","Safe Fall","Sense Heading",
|
"Hide","Kick","Meditate","Mend","Offense","Parry","Pick Lock","1H Piercing","Ripost","Round Kick","Safe Fall","Sense Heading",
|
||||||
"Singing","Sneak","Specialize Abjuration","Specialize Alteration","Specialize Conjuration","Specialize Divination","Specialize Evocation","Pick Pockets",
|
"Singing","Sneak","Specialize Abjuration","Specialize Alteration","Specialize Conjuration","Specialize Divination","Specialize Evocation","Pick Pockets",
|
||||||
"Stringed Instruments","Swimming","Throwing","Tiger Claw","Tracking","Wind Instruments","Fishing","Make Poison","Tinkering","Research",
|
"Stringed Instruments","Swimming","Throwing","Tiger Claw","Tracking","Wind Instruments","Fishing","Make Poison","Tinkering","Research",
|
||||||
"Alchemy","Baking","Tailoring","Sense Traps","Blacksmithing","Fletching","Brewing","Alcohol Tolerance","Begging","Jewelry Making",
|
"Alchemy","Baking","Tailoring","Sense Traps","Blacksmithing","Fletching","Brewing","Alcohol Tolerance","Begging","Jewelry Making",
|
||||||
"Pottery","Percussion Instruments","Intimidation","Berserking","Taunt","Frenzy","Remove Traps","Triple Attack"};
|
"Pottery","Percussion Instruments","Intimidation","Berserking","Taunt","Frenzy","Remove Traps","Triple Attack","2H Piercing"};
|
||||||
for(int i = 0; i <= (int)HIGHEST_SKILL; i++)
|
for(int i = 0; i <= (int)HIGHEST_SKILL; i++)
|
||||||
Skills[SkillName[i]] = (SkillUseTypes)i;
|
Skills[SkillName[i]] = (SkillUseTypes)i;
|
||||||
|
|
||||||
|
|||||||
@ -1553,6 +1553,11 @@ void Client::OPGMTraining(const EQApplicationPacket *app)
|
|||||||
//Set it to 1 with CanHaveSkill or you wont be able to train past 1.
|
//Set it to 1 with CanHaveSkill or you wont be able to train past 1.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (GetClientVersion() < ClientVersion::RoF2 && GetClass() == BERSERKER) {
|
||||||
|
gmtrain->skills[Skill1HPiercing] = gmtrain->skills[Skill2HPiercing];
|
||||||
|
gmtrain->skills[Skill2HPiercing] = 0;
|
||||||
|
}
|
||||||
//#pragma GCC pop_options
|
//#pragma GCC pop_options
|
||||||
|
|
||||||
uchar ending[]={0x34,0x87,0x8a,0x3F,0x01
|
uchar ending[]={0x34,0x87,0x8a,0x3F,0x01
|
||||||
|
|||||||
@ -511,7 +511,7 @@ typedef struct
|
|||||||
//make DoAnim take it instead of int, to enforce its use.
|
//make DoAnim take it instead of int, to enforce its use.
|
||||||
enum { //type arguments to DoAnim
|
enum { //type arguments to DoAnim
|
||||||
animKick = 1,
|
animKick = 1,
|
||||||
animPiercing = 2, //might be piercing?
|
anim1HPiercing = 2, //might be piercing?
|
||||||
anim2HSlashing = 3,
|
anim2HSlashing = 3,
|
||||||
anim2HWeapon = 4,
|
anim2HWeapon = 4,
|
||||||
anim1HWeapon = 5,
|
anim1HWeapon = 5,
|
||||||
|
|||||||
@ -5029,7 +5029,10 @@ uint16 Mob::GetSkillByItemType(int ItemType)
|
|||||||
case ItemType2HBlunt:
|
case ItemType2HBlunt:
|
||||||
return Skill2HBlunt;
|
return Skill2HBlunt;
|
||||||
case ItemType2HPiercing:
|
case ItemType2HPiercing:
|
||||||
return Skill1HPiercing; // change to 2HPiercing once activated
|
if (IsClient() && CastToClient()->GetClientVersion() < ClientVersion::RoF2)
|
||||||
|
return Skill1HPiercing;
|
||||||
|
else
|
||||||
|
return Skill2HPiercing;
|
||||||
case ItemTypeBow:
|
case ItemTypeBow:
|
||||||
return SkillArchery;
|
return SkillArchery;
|
||||||
case ItemTypeLargeThrowing:
|
case ItemTypeLargeThrowing:
|
||||||
@ -5057,6 +5060,8 @@ uint8 Mob::GetItemTypeBySkill(SkillUseTypes skill)
|
|||||||
return ItemType2HSlash;
|
return ItemType2HSlash;
|
||||||
case Skill1HPiercing:
|
case Skill1HPiercing:
|
||||||
return ItemType1HPiercing;
|
return ItemType1HPiercing;
|
||||||
|
case Skill2HPiercing: // watch for undesired client behavior
|
||||||
|
return ItemType2HPiercing;
|
||||||
case Skill1HBlunt:
|
case Skill1HBlunt:
|
||||||
return ItemType1HBlunt;
|
return ItemType1HBlunt;
|
||||||
case Skill2HBlunt:
|
case Skill2HBlunt:
|
||||||
|
|||||||
@ -660,7 +660,7 @@ void Mob::RogueBackstab(Mob* other, bool min_damage, int ReuseTime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
DoSpecialAttackDamage(other, SkillBackstab, ndamage, min_hit, hate, ReuseTime, false, false);
|
DoSpecialAttackDamage(other, SkillBackstab, ndamage, min_hit, hate, ReuseTime, false, false);
|
||||||
DoAnim(animPiercing);
|
DoAnim(anim1HPiercing);
|
||||||
}
|
}
|
||||||
|
|
||||||
// assassinate [No longer used for regular assassinate 6-29-14]
|
// assassinate [No longer used for regular assassinate 6-29-14]
|
||||||
@ -673,7 +673,7 @@ void Mob::RogueAssassinate(Mob* other)
|
|||||||
}else{
|
}else{
|
||||||
other->Damage(this, -5, SPELL_UNKNOWN, SkillBackstab);
|
other->Damage(this, -5, SPELL_UNKNOWN, SkillBackstab);
|
||||||
}
|
}
|
||||||
DoAnim(animPiercing); //piercing animation
|
DoAnim(anim1HPiercing); //piercing animation
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
void Client::RangedAttack(Mob* other, bool CanDoubleAttack) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user