mirror of
https://github.com/EQEmu/Server.git
synced 2026-01-03 18:53:52 +00:00
Revised Finishing blow so that damage now receives all melee bonus. Support also for this effect if placed on items or spells.
This commit is contained in:
parent
d3ce9792b5
commit
32d20f22ef
@ -17,6 +17,8 @@ system, or flat chance based on dex (formula updated).
|
||||
Kayen: Implemented SE_Assassinate, SE_AssassinateLevel - Defines assassinate damage and level requirements.
|
||||
Revised Assassinate mechanic so damage now receives all backstab bonuses, proc chance can be set to either (lives new Proc Per minute
|
||||
system, or flat chance based on dex (formula updated). Assassinate can now proc from THROW if behind target, various other adjustments.
|
||||
Kayen: Fix to AA Finishing Blow missing aa_effects data, update required SQL.
|
||||
Revised Finishing blow so that damage now receives all melee bonus. Support also for this effect if placed on items or spells.
|
||||
|
||||
Required SQL: utils/sql/git/required/2014_06_25_AA_Update.sql
|
||||
Optional SQL: utils/sql/git/optiional/2014_06_29_HeadShotRules.sql
|
||||
|
||||
@ -4443,27 +4443,25 @@ void Mob::TryCriticalHit(Mob *defender, uint16 skill, int32 &damage, ExtraAttack
|
||||
|
||||
bool Mob::TryFinishingBlow(Mob *defender, SkillUseTypes skillinuse)
|
||||
{
|
||||
if (defender && !defender->IsClient() && defender->GetHPRatio() < 10){
|
||||
|
||||
if (!defender)
|
||||
return false;
|
||||
uint32 FB_Dmg = aabonuses.FinishingBlow[1] + spellbonuses.FinishingBlow[1] + itembonuses.FinishingBlow[1];
|
||||
|
||||
uint16 FB_Level = 0; //Get Highest Headshot Level
|
||||
FB_Level = aabonuses.FinishingBlowLvl[0];
|
||||
if (FB_Level < spellbonuses.FinishingBlowLvl[0])
|
||||
FB_Level = spellbonuses.FinishingBlowLvl[0];
|
||||
else if (FB_Level < itembonuses.FinishingBlowLvl[0])
|
||||
FB_Level = itembonuses.FinishingBlowLvl[0];
|
||||
|
||||
if (aabonuses.FinishingBlow[1] && !defender->IsClient() && defender->GetHPRatio() < 10){
|
||||
//Proc Chance value of 500 = 5%
|
||||
uint32 ProcChance = (aabonuses.FinishingBlow[0] + spellbonuses.FinishingBlow[0] + spellbonuses.FinishingBlow[0])/10;
|
||||
|
||||
uint32 chance = aabonuses.FinishingBlow[0]/10; //500 = 5% chance.
|
||||
uint32 damage = aabonuses.FinishingBlow[1];
|
||||
uint16 levelreq = aabonuses.FinishingBlowLvl[0];
|
||||
|
||||
if(defender->GetLevel() <= levelreq && (chance >= MakeRandomInt(0, 1000))){
|
||||
mlog(COMBAT__ATTACKS, "Landed a finishing blow: levelreq at %d, other level %d", levelreq , defender->GetLevel());
|
||||
if(FB_Level && FB_Dmg && (defender->GetLevel() <= FB_Level) && (ProcChance >= MakeRandomInt(0, 1000))){
|
||||
entity_list.MessageClose_StringID(this, false, 200, MT_CritMelee, FINISHING_BLOW, GetName());
|
||||
defender->Damage(this, damage, SPELL_UNKNOWN, skillinuse);
|
||||
DoSpecialAttackDamage(defender, skillinuse, FB_Dmg, 1, -1, 10, false, false);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
mlog(COMBAT__ATTACKS, "FAILED a finishing blow: levelreq at %d, other level %d", levelreq , defender->GetLevel());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1204,7 +1204,6 @@ void Client::ApplyAABonuses(uint32 aaid, uint32 slots, StatBonuses* newbon)
|
||||
|
||||
case SE_FinishingBlow:
|
||||
{
|
||||
|
||||
//base1 = chance, base2 = damage
|
||||
if (newbon->FinishingBlow[1] < base2){
|
||||
newbon->FinishingBlow[0] = base1;
|
||||
@ -2825,6 +2824,26 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_FinishingBlow:
|
||||
{
|
||||
//base1 = chance, base2 = damage
|
||||
if (newbon->FinishingBlow[1] < base2){
|
||||
newbon->FinishingBlow[0] = effect_value;
|
||||
newbon->FinishingBlow[1] = base2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_FinishingBlowLvl:
|
||||
{
|
||||
//base1 = level, base2 = ??? (Set to 200 in AA data, possible proc rate mod?)
|
||||
if (newbon->FinishingBlowLvl[0] < effect_value){
|
||||
newbon->FinishingBlowLvl[0] = effect_value;
|
||||
newbon->FinishingBlowLvl[1] = base2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//Special custom cases for loading effects on to NPC from 'npc_spels_effects' table
|
||||
if (IsAISpellEffect) {
|
||||
|
||||
@ -4258,6 +4277,40 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
||||
spellbonuses.HSLevel = effect_value;
|
||||
aabonuses.HSLevel = effect_value;
|
||||
itembonuses.HSLevel = effect_value;
|
||||
break;
|
||||
|
||||
case SE_Assassinate:
|
||||
spellbonuses.Assassinate[0] = effect_value;
|
||||
aabonuses.Assassinate[0] = effect_value;
|
||||
itembonuses.Assassinate[0] = effect_value;
|
||||
spellbonuses.Assassinate[1] = effect_value;
|
||||
aabonuses.Assassinate[1] = effect_value;
|
||||
itembonuses.Assassinate[1] = effect_value;
|
||||
break;
|
||||
|
||||
case SE_AssassinateLevel:
|
||||
spellbonuses.AssassinateLevel = effect_value;
|
||||
aabonuses.AssassinateLevel = effect_value;
|
||||
itembonuses.AssassinateLevel = effect_value;
|
||||
break;
|
||||
|
||||
case SE_FinishingBlow:
|
||||
spellbonuses.FinishingBlow[0] = effect_value;
|
||||
aabonuses.FinishingBlow[0] = effect_value;
|
||||
itembonuses.FinishingBlow[0] = effect_value;
|
||||
spellbonuses.FinishingBlow[1] = effect_value;
|
||||
aabonuses.FinishingBlow[1] = effect_value;
|
||||
itembonuses.FinishingBlow[1] = effect_value;
|
||||
break;
|
||||
|
||||
case SE_FinishingBlowLvl:
|
||||
spellbonuses.FinishingBlowLvl[0] = effect_value;
|
||||
aabonuses.FinishingBlowLvl[0] = effect_value;
|
||||
itembonuses.FinishingBlowLvl[0] = effect_value;
|
||||
spellbonuses.FinishingBlowLvl[1] = effect_value;
|
||||
aabonuses.FinishingBlowLvl[1] = effect_value;
|
||||
itembonuses.FinishingBlowLvl[1] = effect_value;
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user