From b2e4e91fbd728ca6137ef0ba3762038934f4cfb1 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 9 Feb 2021 08:31:35 -0500 Subject: [PATCH 1/5] Very simple implementation of Sneak Pull --- common/ruletypes.h | 1 + zone/npc.cpp | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 48e78187d..391179f58 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -501,6 +501,7 @@ 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_CATEGORY_END() RULE_CATEGORY(NPC) diff --git a/zone/npc.cpp b/zone/npc.cpp index 7a0f4f411..4549f1f54 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3239,6 +3239,18 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) } float assist_range = (mob->GetAssistRange() * mob->GetAssistRange()); + + if (RuleB(Combat, EnableSneakPull) && attacker->sneaking) { + assist_range=(20*20); + 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 +3348,4 @@ void NPC::ScaleNPC(uint8 npc_level) { } npc_scale_manager->ResetNPCScaling(this); npc_scale_manager->ScaleNPC(this); -} \ No newline at end of file +} From 3bafc5b3f4a2b3d2503ab4fa5243679148c31a02 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 9 Feb 2021 09:50:22 -0500 Subject: [PATCH 2/5] Change modified sneak pull assist range to a rule. Fixed formatting on decls. --- common/ruletypes.h | 1 + zone/npc.cpp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/common/ruletypes.h b/common/ruletypes.h index 391179f58..67a63c02d 100644 --- a/common/ruletypes.h +++ b/common/ruletypes.h @@ -502,6 +502,7 @@ RULE_BOOL(Combat, ClassicNPCBackstab, false, "True disables NPC facestab - NPC g 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) diff --git a/zone/npc.cpp b/zone/npc.cpp index 4549f1f54..870ccb4a8 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3241,10 +3241,10 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) float assist_range = (mob->GetAssistRange() * mob->GetAssistRange()); if (RuleB(Combat, EnableSneakPull) && attacker->sneaking) { - assist_range=(20*20); + assist_range=RuleI(SneakPullAssistRange); if (attacker->IsClient()) { - float clientx=attacker->GetX(); - float clienty=attacker->GetY(); + float clientx = attacker->GetX(); + float clienty = attacker->GetY(); if (attacker->CastToClient()->BehindMob(mob, clientx, clienty)) { assist_range = 0; } From baa53e134ae5ab61755f12ee43b7dd227ef70c03 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 9 Feb 2021 10:00:17 -0500 Subject: [PATCH 3/5] Fixed missing argument - oops --- zone/npc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/npc.cpp b/zone/npc.cpp index 870ccb4a8..3aea9c757 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3241,7 +3241,7 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) float assist_range = (mob->GetAssistRange() * mob->GetAssistRange()); if (RuleB(Combat, EnableSneakPull) && attacker->sneaking) { - assist_range=RuleI(SneakPullAssistRange); + assist_range=RuleI(Combat, SneakPullAssistRange); if (attacker->IsClient()) { float clientx = attacker->GetX(); float clienty = attacker->GetY(); From d90d680e8ab38eb5e0f52b104d9d98f3184eea25 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 9 Feb 2021 11:24:25 -0500 Subject: [PATCH 4/5] More formatting --- zone/npc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zone/npc.cpp b/zone/npc.cpp index 3aea9c757..e218291ee 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3241,7 +3241,7 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker) float assist_range = (mob->GetAssistRange() * mob->GetAssistRange()); if (RuleB(Combat, EnableSneakPull) && attacker->sneaking) { - assist_range=RuleI(Combat, SneakPullAssistRange); + assist_range = RuleI(Combat, SneakPullAssistRange); if (attacker->IsClient()) { float clientx = attacker->GetX(); float clienty = attacker->GetY(); From d7d9c73e5e993fbc3e9035b0a17d17bcf01eefa6 Mon Sep 17 00:00:00 2001 From: Noudess Date: Tue, 9 Feb 2021 11:32:13 -0500 Subject: [PATCH 5/5] Add comment. --- zone/npc.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/zone/npc.cpp b/zone/npc.cpp index e218291ee..ff46c1331 100644 --- a/zone/npc.cpp +++ b/zone/npc.cpp @@ -3240,6 +3240,7 @@ 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()) {