mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-18 15:31:33 +00:00
[Combat] AE Ramp now allows Max Melee Range
RuleR AERampageSafeZone - Reduce AE Ramp range by this amount to allow for a small safe zone on AE Ramp.
This commit is contained in:
parent
bda13383ef
commit
3245fa6123
@ -391,6 +391,7 @@ RULE_BOOL(Spells, NPCSpellPush, false, "Enable spell push on NPCs")
|
|||||||
RULE_CATEGORY_END()
|
RULE_CATEGORY_END()
|
||||||
|
|
||||||
RULE_CATEGORY(Combat)
|
RULE_CATEGORY(Combat)
|
||||||
|
RULE_REAL(Combat, AERampageSafeZone, 0.018, "max hit ae ramp reduction range")
|
||||||
RULE_INT(Combat, PetBaseCritChance, 0, "Pet base crit chance")
|
RULE_INT(Combat, PetBaseCritChance, 0, "Pet base crit chance")
|
||||||
RULE_INT(Combat, NPCBashKickLevel, 6, "The level that NPCcan KICK/BASH")
|
RULE_INT(Combat, NPCBashKickLevel, 6, "The level that NPCcan KICK/BASH")
|
||||||
RULE_INT(Combat, NPCBashKickStunChance, 15, "Percent chance that a bash/kick will stun")
|
RULE_INT(Combat, NPCBashKickStunChance, 15, "Percent chance that a bash/kick will stun")
|
||||||
@ -492,6 +493,7 @@ RULE_INT(Combat, NPCAssistCap, 5, "Maxiumium number of NPCthat will assist anoth
|
|||||||
RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time a NPC will take to clear assist aggro cap space (milliseconds)")
|
RULE_INT(Combat, NPCAssistCapTimer, 6000, "Time a NPC will take to clear assist aggro cap space (milliseconds)")
|
||||||
RULE_BOOL(Combat, UseRevampHandToHand, false, "Use h2h revamped dmg/delays I believe this was implemented during SoF")
|
RULE_BOOL(Combat, UseRevampHandToHand, false, "Use h2h revamped dmg/delays I believe this was implemented during SoF")
|
||||||
RULE_BOOL(Combat, ClassicMasterWu, false, "Classic master wu uses a random special, modern doesn't")
|
RULE_BOOL(Combat, ClassicMasterWu, false, "Classic master wu uses a random special, modern doesn't")
|
||||||
|
RULE_REAL(Combat, HitBoxMod, 1.00, "Added to test hit boxes.")
|
||||||
RULE_INT(Combat, LevelToStopDamageCaps, 0, "Level to stop damage caps. 1 will effectively disable them, 20 should give basically same results as old incorrect system")
|
RULE_INT(Combat, LevelToStopDamageCaps, 0, "Level to stop damage caps. 1 will effectively disable them, 20 should give basically same results as old incorrect system")
|
||||||
RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink control. 1 will effectively disable it, 50 should give basically same results as current system")
|
RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink control. 1 will effectively disable it, 50 should give basically same results as current system")
|
||||||
RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind")
|
RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables npc facestab - NPCget normal attack if not behind")
|
||||||
|
|||||||
@ -800,7 +800,7 @@ bool Mob::IsBeneficialAllowed(Mob *target)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Mob::CombatRange(Mob* other)
|
bool Mob::CombatRange(Mob* other, float fixed_size_mod, bool aeRampage)
|
||||||
{
|
{
|
||||||
if(!other)
|
if(!other)
|
||||||
return(false);
|
return(false);
|
||||||
@ -825,13 +825,25 @@ bool Mob::CombatRange(Mob* other)
|
|||||||
|
|
||||||
// this could still use some work, but for now it's an improvement....
|
// this could still use some work, but for now it's an improvement....
|
||||||
|
|
||||||
if (size_mod > 29)
|
if (size_mod > 29) {
|
||||||
size_mod *= size_mod;
|
size_mod *= size_mod;
|
||||||
else if (size_mod > 19)
|
} else if (size_mod > 19) {
|
||||||
size_mod *= size_mod * 2;
|
size_mod *= size_mod * 2;
|
||||||
else
|
} else {
|
||||||
size_mod *= size_mod * 4;
|
size_mod *= size_mod * 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (other->GetRace() == 184) // Lord Vyemm and other velious dragons
|
||||||
|
{
|
||||||
|
size_mod *= 1.75;
|
||||||
|
}
|
||||||
|
if (other->GetRace() == 122) // Dracoliche in Fear. Skeletal Dragon
|
||||||
|
{
|
||||||
|
size_mod *= 2.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
size_mod *= RuleR(Combat,HitBoxMod); // used for testing sizemods on different races.
|
||||||
|
size_mod *= fixed_size_mod; // used to extend the size_mod
|
||||||
|
|
||||||
// prevention of ridiculously sized hit boxes
|
// prevention of ridiculously sized hit boxes
|
||||||
if (size_mod > 10000)
|
if (size_mod > 10000)
|
||||||
@ -865,6 +877,15 @@ bool Mob::CombatRange(Mob* other)
|
|||||||
else
|
else
|
||||||
SetPseudoRoot(false);
|
SetPseudoRoot(false);
|
||||||
}
|
}
|
||||||
|
if(aeRampage) {
|
||||||
|
float multiplyer = GetSize() * RuleR(Combat, AERampageSafeZone);
|
||||||
|
float ramp_range = (size_mod * multiplyer);
|
||||||
|
if (_DistNoRoot <= ramp_range) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (_DistNoRoot <= size_mod)
|
if (_DistNoRoot <= size_mod)
|
||||||
{
|
{
|
||||||
@ -872,13 +893,11 @@ bool Mob::CombatRange(Mob* other)
|
|||||||
if (flymode != GravityBehavior::Flying && _zDist > 500 && !CheckLastLosState()) {
|
if (flymode != GravityBehavior::Flying && _zDist > 500 && !CheckLastLosState()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Father Nitwit's LOS code
|
|
||||||
bool Mob::CheckLosFN(Mob *other)
|
bool Mob::CheckLosFN(Mob *other)
|
||||||
{
|
{
|
||||||
bool Result = false;
|
bool Result = false;
|
||||||
|
|||||||
@ -675,11 +675,13 @@ int HateList::AreaRampage(Mob *caster, Mob *target, int count, ExtraAttackOption
|
|||||||
std::vector<uint16> id_list;
|
std::vector<uint16> id_list;
|
||||||
for (auto &h : list) {
|
for (auto &h : list) {
|
||||||
if (h->entity_on_hatelist && h->entity_on_hatelist != caster && h->entity_on_hatelist != target &&
|
if (h->entity_on_hatelist && h->entity_on_hatelist != caster && h->entity_on_hatelist != target &&
|
||||||
caster->CombatRange(h->entity_on_hatelist))
|
caster->CombatRange(h->entity_on_hatelist, 1.0, true)) {
|
||||||
id_list.push_back(h->entity_on_hatelist->GetID());
|
id_list.push_back(h->entity_on_hatelist->GetID());
|
||||||
if (count != -1 && id_list.size() > count)
|
}
|
||||||
|
if (count != -1 && id_list.size() > count) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (auto &id : id_list) {
|
for (auto &id : id_list) {
|
||||||
auto mob = entity_list.GetMobID(id);
|
auto mob = entity_list.GetMobID(id);
|
||||||
@ -688,7 +690,6 @@ int HateList::AreaRampage(Mob *caster, Mob *target, int count, ExtraAttackOption
|
|||||||
caster->ProcessAttackRounds(mob, opts);
|
caster->ProcessAttackRounds(mob, opts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return hit_count;
|
return hit_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -222,7 +222,7 @@ public:
|
|||||||
inline int GetMitigationAC() { return mitigation_ac; }
|
inline int GetMitigationAC() { return mitigation_ac; }
|
||||||
void MeleeMitigation(Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr);
|
void MeleeMitigation(Mob *attacker, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr);
|
||||||
double RollD20(int offense, int mitigation); // CALL THIS FROM THE DEFENDER
|
double RollD20(int offense, int mitigation); // CALL THIS FROM THE DEFENDER
|
||||||
bool CombatRange(Mob* other);
|
bool CombatRange(Mob* other, float fixed_size_mod = 1.0, bool aeRampage = false);
|
||||||
virtual inline bool IsBerserk() { return false; } // only clients
|
virtual inline bool IsBerserk() { return false; } // only clients
|
||||||
void RogueEvade(Mob *other);
|
void RogueEvade(Mob *other);
|
||||||
void CommonOutgoingHitSuccess(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr);
|
void CommonOutgoingHitSuccess(Mob *defender, DamageHitInfo &hit, ExtraAttackOptions *opts = nullptr);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user