mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-03 10:02:33 +00:00
Updates to focus effect related code
This commit is contained in:
parent
ae730b7055
commit
791ba8e38b
@ -1,6 +1,9 @@
|
||||
EQEMu Changelog (Started on Sept 24, 2003 15:50)
|
||||
-------------------------------------------------------
|
||||
|
||||
== 02/8/2014 ==
|
||||
Kayen: Various updates/fixes/clean-ups to focus effect related code. Focus effect limits should now all work properly.
|
||||
|
||||
== 02/7/2014 ==
|
||||
Kayen: Revised how heal amount is calculated to properly incorporate all current focus effects/bonuses.
|
||||
|
||||
|
||||
@ -36,6 +36,7 @@
|
||||
#define EFFECT_COUNT 12
|
||||
#define MAX_SPELL_TRIGGER 12 // One for each slot(only 6 for AA since AA use 2)
|
||||
#define MAX_RESISTABLE_EFFECTS 12 // Number of effects that are typcially checked agianst resists.
|
||||
#define MaxLimitInclude 12 //Number(x 0.5) of focus Limiters that have inclusive checksm used when calcing focus effects
|
||||
|
||||
const int Z_AGGRO=10;
|
||||
|
||||
@ -289,8 +290,8 @@ typedef enum {
|
||||
#define SE_LimitMinDur 140 // implemented
|
||||
#define SE_LimitInstant 141 // implemented
|
||||
#define SE_LimitMinLevel 142 // implemented
|
||||
#define SE_LimitCastTime 143 // implemented
|
||||
#define SE_FfCastTimeMax 144 // not used
|
||||
#define SE_LimitCastTimeMin 143 // implemented
|
||||
#define SE_LimitCastTimeMax 144 // implemented (*not used in any known live spell)
|
||||
#define SE_Teleport2 145 // implemented - Banishment of the Pantheon
|
||||
#define SE_ElectricityResist 146 // *not implemented (Lightning Rod: 23233)
|
||||
#define SE_PercentalHeal 147 // implemented
|
||||
@ -442,7 +443,7 @@ typedef enum {
|
||||
#define SE_FrontalStunResist 293 // implemented[AA] - Reduce chance to be stunned from front.
|
||||
#define SE_CriticalSpellChance 294 // implemented - increase chance to critical hit and critical damage modifier.
|
||||
//#define SE_ReduceTimerSpecial 295 // not used
|
||||
#define SE_SpellVulnerability 296 // implemented - increase in incoming spell damage
|
||||
#define SE_FcSpellVulnerability 296 // implemented - increase in incoming spell damage
|
||||
#define SE_FcDamageAmtIncoming 297 // implemented - debuff that adds points damage to spells cast on target (focus effect).
|
||||
#define SE_ChangeHeight 298 // implemented
|
||||
#define SE_WakeTheDead 299 // implemented
|
||||
@ -457,7 +458,7 @@ typedef enum {
|
||||
#define SE_SuspendMinion 308 // not implemented as bonus
|
||||
#define SE_YetAnotherGate 309 // implemented
|
||||
#define SE_ReduceReuseTimer 310 // implemented
|
||||
#define SE_CombatSkills 311 // implemented
|
||||
#define SE_LimitCombatSkills 311 // implemented - Excludes focus from procs (except if proc is a memorizable spell)
|
||||
#define SE_Sanctuary 312 // *not implemented
|
||||
#define SE_ForageAdditionalItems 313 // implemented[AA] - chance to forage additional items
|
||||
#define SE_Invisibility2 314 // implemented - fixed duration invisible
|
||||
@ -494,7 +495,7 @@ typedef enum {
|
||||
#define SE_AssassinationLevel 345 // not implemented as bonus - AA Assisination max level to kill
|
||||
#define SE_HeadShotLevel 346 // not implemented as bonus - AA HeadShot max level to kill
|
||||
#define SE_DoubleRangedAttack 347 // implemented - chance at an additional archery attack (consumes arrow)
|
||||
#define SE_LimitManaCost 348 // implemented
|
||||
#define SE_LimitManaMin 348 // implemented
|
||||
#define SE_ShieldEquipHateMod 349 // implemented[AA] Increase melee hate when wearing a shield.
|
||||
#define SE_ManaBurn 350 // implemented - Drains mana for damage/heal at a defined ratio up to a defined maximum amount of mana.
|
||||
#define SE_PersistentEffect 351 // *not implemented. creates a trap/totem that casts a spell (spell id + base1?) when anything comes near it. can probably make a beacon for this
|
||||
@ -535,9 +536,9 @@ typedef enum {
|
||||
#define SE_CastOnCurer 386 // implemented - Casts a spell on the person curing
|
||||
#define SE_CastOnCure 387 // implemented - Casts a spell on the cured person
|
||||
#define SE_SummonCorpseZone 388 // *not implemented - summons a corpse from any zone(nec AA)
|
||||
#define SE_Forceful_Rejuv 389 // Refresh spell icons
|
||||
#define SE_SetRecastTimer 390 // *not implemented - Sets recast timers to specific value, focus limited.
|
||||
#define SE_IncreaseHitDmgTaken 391 // implemented - Most likely a simple negative mitigation modifier (Warlords fury: 23528)
|
||||
#define SE_FcTimerRefresh 389 // implemented - Refresh spell icons
|
||||
#define SE_FcTimerLockout 390 // *not implemented - Sets recast timers to specific value, focus limited.
|
||||
#define SE_LimitManaMax 391 // implemented
|
||||
#define SE_FcHealAmt 392 // implemented - Adds or removes healing from spells
|
||||
#define SE_FcHealPctIncoming 393 // implemented - HealRate with focus restrictions.
|
||||
#define SE_FcHealAmtIncoming 394 // implemented - Adds/Removes amount of healing on target by X value with foucs restrictions.
|
||||
@ -545,12 +546,12 @@ typedef enum {
|
||||
#define SE_FcHealAmtCrit 396 // implemented - Adds a direct healing amount to spells
|
||||
#define SE_PetMeleeMitigation 397 // *not implemented[AA] - additional mitigation to your pets.
|
||||
#define SE_SwarmPetDuration 398 // implemented - Affects the duration of swarm pets
|
||||
#define SE_Twincast 399 // implemented - cast 2 spells for every 1
|
||||
#define SE_FcTwincast 399 // implemented - cast 2 spells for every 1
|
||||
#define SE_HealGroupFromMana 400 // implemented - Drains mana and heals for each point of mana drained
|
||||
#define SE_ManaDrainWithDmg 401 // implemented - Deals damage based on the amount of mana drained
|
||||
#define SE_EndDrainWithDmg 402 // implemented - Deals damage for the amount of endurance drained
|
||||
#define SE_Ff_SpellClass 403 // *not implemented -
|
||||
#define SE_LimitExcludeSkill 404 // implemented - Limit a focus to exclude spells cast using a specific skill.
|
||||
#define SE_LimitSpellClass 403 // *not implemented - unclear what this refers too (not 'right click' spell bar)
|
||||
#define SE_LimitSpellSubclass 404 // *not implemented - unclear what this refers too (not 'right click' spell bar)
|
||||
#define SE_TwoHandBluntBlock 405 // implemented - chance to block attacks when using two hand blunt weapons (similiar to shield block)
|
||||
#define SE_CastonNumHitFade 406 // implemented - casts a spell when a buff fades due to its numhits being depleted
|
||||
#define SE_CastonFocusEffect 407 // implemented - casts a spell if focus limits are met (ie triggers when a focus effects is applied)
|
||||
@ -560,16 +561,16 @@ typedef enum {
|
||||
#define SE_LimitClass 411 // implemented - Limits to spells of a certain class (Note: The class value in dbase is +1 in relation to item class value)
|
||||
#define SE_LimitRace 412 // implemented - Limits to spells cast by a certain race (Note: not used in any known live spells)
|
||||
#define SE_FcBaseEffects 413 // implemented - Increases the power of bard songs, skill attacks, runes, bard allowed foci, damage/heal
|
||||
#define SE_LimitSpellSkill 414 // implemented - Limit a focus to include spells cast using a specific skill.
|
||||
#define SE_LimitCastingSkill 414 // implemented - Limit a focus to include spells cast using a specific skill.
|
||||
//#define SE_FFItemClass 415 // not used
|
||||
#define SE_ACv2 416 // implemented - New AC spell effect
|
||||
#define SE_ManaRegen_v2 417 // implemented - New mana regen effect
|
||||
#define SE_SkillDamageAmount2 418 // implemented - adds skill damage directly to certain attacks
|
||||
#define SE_AddMeleeProc 419 // implemented - Adds a proc
|
||||
#define SE_FcLimitUse 420 // implemented - increases numhits count by percent (Note: not used in any known live spells)
|
||||
#define SE_IncreaseNumHits 421 // implemented[AA] - increases number of hits a buff has till fade. (focus)
|
||||
#define SE_FfLimitUseMin 422 // implemented - limit a focus to require a min amount of numhits value (used with above)
|
||||
#define SE_FfLimitUseType 423 // implemented - limit a focus to require a certain numhits type
|
||||
#define SE_FcIncreaseNumHits 421 // implemented[AA] - increases number of hits a buff has till fade. (focus)
|
||||
#define SE_LimitUseMin 422 // implemented - limit a focus to require a min amount of numhits value (used with above)
|
||||
#define SE_LimitUseType 423 // implemented - limit a focus to require a certain numhits type
|
||||
#define SE_GravityEffect 424 // implemented - Pulls/pushes you toward/away the mob at a set pace
|
||||
#define SE_Display 425 // *not implemented - Illusion: Flying Dragon(21626)
|
||||
#define SE_IncreaseExtTargetWindow 426 // *not implmented[AA] - increases the capacity of your extended target window
|
||||
|
||||
@ -1607,10 +1607,6 @@ void Mob::ApplySpellsBonuses(uint16 spell_id, uint8 casterlevel, StatBonuses* ne
|
||||
newbon->MeleeMitigation -= effect_value;
|
||||
break;
|
||||
|
||||
case SE_IncreaseHitDmgTaken:
|
||||
newbon->MeleeMitigation += effect_value;
|
||||
break;
|
||||
|
||||
case SE_CriticalHitChance:
|
||||
{
|
||||
|
||||
@ -2777,12 +2773,12 @@ uint8 Mob::IsFocusEffect(uint16 spell_id,int effect_index, bool AA,uint32 aa_eff
|
||||
case SE_TriggerOnCast:
|
||||
//return focusTriggerOnCast;
|
||||
return 0; //This is calculated as an actual bonus
|
||||
case SE_SpellVulnerability:
|
||||
case SE_FcSpellVulnerability:
|
||||
return focusSpellVulnerability;
|
||||
case SE_BlockNextSpellFocus:
|
||||
//return focusBlockNextSpell;
|
||||
return 0; //This is calculated as an actual bonus
|
||||
case SE_Twincast:
|
||||
case SE_FcTwincast:
|
||||
return focusTwincast;
|
||||
case SE_SympatheticProc:
|
||||
return focusSympatheticProc;
|
||||
@ -2800,12 +2796,14 @@ uint8 Mob::IsFocusEffect(uint16 spell_id,int effect_index, bool AA,uint32 aa_eff
|
||||
return focusFcHealPctIncoming;
|
||||
case SE_FcBaseEffects:
|
||||
return focusFcBaseEffects;
|
||||
case SE_IncreaseNumHits:
|
||||
case SE_FcIncreaseNumHits:
|
||||
return focusIncreaseNumHits;
|
||||
case SE_FcLimitUse:
|
||||
return focusFcLimitUse;
|
||||
case SE_FcMute:
|
||||
return focusFcMute;
|
||||
case SE_FcTimerRefresh:
|
||||
return focusFcTimerRefresh;
|
||||
case SE_FcStunTimeMod:
|
||||
return focusFcStunTimeMod;
|
||||
case SE_FcHealPctCritIncoming:
|
||||
@ -3119,12 +3117,6 @@ void Mob::NegateSpellsBonuses(uint16 spell_id)
|
||||
aabonuses.MeleeMitigation = effect_value;
|
||||
break;
|
||||
|
||||
case SE_IncreaseHitDmgTaken:
|
||||
spellbonuses.MeleeMitigation = effect_value;
|
||||
itembonuses.MeleeMitigation = effect_value;
|
||||
aabonuses.MeleeMitigation = effect_value;
|
||||
break;
|
||||
|
||||
case SE_CriticalHitChance:
|
||||
{
|
||||
for(int e = 0; e < HIGHEST_SKILL+1; e++)
|
||||
|
||||
32
zone/bot.cpp
32
zone/bot.cpp
@ -6736,7 +6736,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
if((spell.classes[(GetClass()%16) - 1]) < base1)
|
||||
LimitFound = true;
|
||||
break;
|
||||
case SE_LimitCastTime:
|
||||
case SE_LimitCastTimeMin:
|
||||
if (spell.cast_time < base1)
|
||||
LimitFound = true;
|
||||
break;
|
||||
@ -6782,7 +6782,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
}
|
||||
break;
|
||||
|
||||
case SE_LimitManaCost:
|
||||
case SE_LimitManaMin:
|
||||
if(spell.mana < base1)
|
||||
LimitFound = true;
|
||||
break;
|
||||
@ -6800,7 +6800,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
}
|
||||
break;
|
||||
|
||||
case SE_CombatSkills:
|
||||
case SE_LimitCombatSkills:
|
||||
// 1 is for disciplines only
|
||||
if(base1 == 1 && !IsDiscipline(spell_id))
|
||||
LimitFound = true;
|
||||
@ -6817,13 +6817,13 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
break;
|
||||
|
||||
|
||||
case SE_LimitSpellSkill:
|
||||
case SE_LimitCastingSkill:
|
||||
LimitSpellSkill = true;
|
||||
if(base1 == spell.skill)
|
||||
SpellSkill_Found = true;
|
||||
break;
|
||||
|
||||
case SE_LimitExcludeSkill:{
|
||||
case SE_LimitSpellSubclass:{
|
||||
int16 spell_skill = spell.skill * -1;
|
||||
if(base1 == spell_skill)
|
||||
LimitFound = true;
|
||||
@ -6941,7 +6941,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SE_SpellVulnerability:
|
||||
case SE_FcSpellVulnerability:
|
||||
{
|
||||
if(type == focusSpellVulnerability)
|
||||
{
|
||||
@ -6958,7 +6958,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SE_Twincast:
|
||||
case SE_FcTwincast:
|
||||
{
|
||||
if(type == focusTwincast)
|
||||
{
|
||||
@ -7057,7 +7057,7 @@ int16 Bot::CalcBotAAFocus(BotfocusType type, uint32 aa_ID, uint16 spell_id)
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_IncreaseNumHits:
|
||||
case SE_FcIncreaseNumHits:
|
||||
{
|
||||
if(type == focusIncreaseNumHits)
|
||||
value = base1;
|
||||
@ -7338,7 +7338,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
return(0);
|
||||
break;
|
||||
|
||||
case SE_LimitCastTime:
|
||||
case SE_LimitCastTimeMin:
|
||||
if (spells[spell_id].cast_time < (uint16)focus_spell.base[i])
|
||||
return(0);
|
||||
break;
|
||||
@ -7398,7 +7398,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
}
|
||||
break;
|
||||
|
||||
case SE_LimitManaCost:
|
||||
case SE_LimitManaMin:
|
||||
if(spell.mana < focus_spell.base[i])
|
||||
return 0;
|
||||
break;
|
||||
@ -7413,7 +7413,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
|
||||
break;
|
||||
|
||||
case SE_CombatSkills:
|
||||
case SE_LimitCombatSkills:
|
||||
// 1 is for disciplines only
|
||||
if(focus_spell.base[i] == 1 && !IsDiscipline(spell_id))
|
||||
return 0;
|
||||
@ -7429,13 +7429,13 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case SE_LimitSpellSkill:
|
||||
case SE_LimitCastingSkill:
|
||||
LimitSpellSkill = true;
|
||||
if(focus_spell.base[i] == spell.skill)
|
||||
SpellSkill_Found = true;
|
||||
break;
|
||||
|
||||
case SE_LimitExcludeSkill:{
|
||||
case SE_LimitSpellSubclass:{
|
||||
int16 spell_skill = spell.skill * -1;
|
||||
if(focus_spell.base[i] == spell_skill)
|
||||
return 0;
|
||||
@ -7602,7 +7602,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
|
||||
break;
|
||||
}
|
||||
case SE_SpellVulnerability:
|
||||
case SE_FcSpellVulnerability:
|
||||
{
|
||||
if(bottype == BotfocusSpellVulnerability)
|
||||
{
|
||||
@ -7619,7 +7619,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SE_Twincast:
|
||||
case SE_FcTwincast:
|
||||
{
|
||||
if(bottype == BotfocusTwincast)
|
||||
{
|
||||
@ -7715,7 +7715,7 @@ int16 Bot::CalcBotFocusEffect(BotfocusType bottype, uint16 focus_id, uint16 spel
|
||||
break;
|
||||
}
|
||||
|
||||
case SE_IncreaseNumHits:
|
||||
case SE_FcIncreaseNumHits:
|
||||
{
|
||||
if(bottype == BotfocusIncreaseNumHits)
|
||||
value = focus_spell.base[i];
|
||||
|
||||
@ -78,6 +78,7 @@ typedef enum { //focus types
|
||||
focusIncreaseNumHits,
|
||||
focusFcLimitUse,
|
||||
focusFcMute,
|
||||
focusFcTimerRefresh,
|
||||
focusFcStunTimeMod,
|
||||
focusFcHealPctCritIncoming,
|
||||
focusFcHealAmt,
|
||||
|
||||
@ -3336,7 +3336,7 @@ void Mob::TryTwincast(Mob *caster, Mob *target, uint32 spell_id)
|
||||
int buff_count = GetMaxTotalSlots();
|
||||
for(int i = 0; i < buff_count; i++)
|
||||
{
|
||||
if(IsEffectInSpell(buffs[i].spellid, SE_Twincast))
|
||||
if(IsEffectInSpell(buffs[i].spellid, SE_FcTwincast))
|
||||
{
|
||||
int32 focus = CalcFocusEffect(focusTwincast, buffs[i].spellid, spell_id);
|
||||
if(focus > 0)
|
||||
@ -3378,7 +3378,7 @@ int32 Mob::GetVulnerability(Mob* caster, uint32 spell_id, uint32 ticsremaining)
|
||||
int buff_count = GetMaxTotalSlots();
|
||||
for(int i = 0; i < buff_count; i++) {
|
||||
|
||||
if((IsValidSpell(buffs[i].spellid) && IsEffectInSpell(buffs[i].spellid, SE_SpellVulnerability))){
|
||||
if((IsValidSpell(buffs[i].spellid) && IsEffectInSpell(buffs[i].spellid, SE_FcSpellVulnerability))){
|
||||
|
||||
int32 focus = caster->CalcFocusEffect(focusSpellVulnerability, buffs[i].spellid, spell_id);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2689,7 +2689,7 @@ int Mob::CheckStackConflict(uint16 spellid1, int caster_level1, uint16 spellid2,
|
||||
effect1 == SE_LimitMinDur ||
|
||||
effect1 == SE_LimitInstant ||
|
||||
effect1 == SE_LimitMinLevel ||
|
||||
effect1 == SE_LimitCastTime)
|
||||
effect1 == SE_LimitCastTimeMin)
|
||||
continue;
|
||||
|
||||
/*
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user