Merge pull request #1239 from noudess/sneak-pull

[Game Play Mechanic] Very simple implementation of Sneak Pull
This commit is contained in:
Michael Cook (mackal) 2021-02-14 18:04:30 -05:00 committed by GitHub
commit 1bc9e8aff2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 16 additions and 1 deletions

View File

@ -501,6 +501,8 @@ RULE_INT(Combat, LevelToStopACTwinkControl, 50, "Level to stop armorclass twink
RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables NPC facestab - NPC get normal attack if not behind")
RULE_BOOL(Combat, UseNPCDamageClassLevelMods, true, "Uses GetClassLevelDamageMod calc in npc_scale_manager")
RULE_BOOL(Combat, UseExtendedPoisonProcs, false, "Allow old school poisons to last until characrer zones, at a lower proc rate")
RULE_BOOL(Combat, EnableSneakPull, false, "Enable implementation of Sneak Pull")
RULE_INT(Combat, SneakPullAssistRange, 400, "Modified range of assist for sneak pull")
RULE_CATEGORY_END()
RULE_CATEGORY(NPC)

View File

@ -3239,6 +3239,19 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker)
}
float assist_range = (mob->GetAssistRange() * mob->GetAssistRange());
// Implement optional sneak-pull
if (RuleB(Combat, EnableSneakPull) && attacker->sneaking) {
assist_range = RuleI(Combat, SneakPullAssistRange);
if (attacker->IsClient()) {
float clientx = attacker->GetX();
float clienty = attacker->GetY();
if (attacker->CastToClient()->BehindMob(mob, clientx, clienty)) {
assist_range = 0;
}
}
}
if (distance > assist_range) {
continue;
}
@ -3336,4 +3349,4 @@ void NPC::ScaleNPC(uint8 npc_level) {
}
npc_scale_manager->ResetNPCScaling(this);
npc_scale_manager->ScaleNPC(this);
}
}