From 8c78a19c952c6150163aad7b19908bdf88f426e0 Mon Sep 17 00:00:00 2001 From: Paul Coene Date: Thu, 23 Dec 2021 14:56:06 -0500 Subject: [PATCH] [Bug Fix] Pick Lock was allowing skillups on doors above player skill (#1815) * [Bux Fix] Pick Lock was allowing skillups on doors above player skill * Fixed indentation * Fix indentation #2 - I am not so bright :( * Further refine messages for pick lock to match live * sql to make pot pick locks book pickable by skill 1 and skillup --- .../2021_11_28_pot_pick_locks_book.sql | 1 + zone/client.cpp | 1 + zone/client.h | 2 ++ zone/doors.cpp | 20 ++++++++++++++++--- 4 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 utils/sql/git/optional/2021_11_28_pot_pick_locks_book.sql diff --git a/utils/sql/git/optional/2021_11_28_pot_pick_locks_book.sql b/utils/sql/git/optional/2021_11_28_pot_pick_locks_book.sql new file mode 100644 index 000000000..f7c2c55e3 --- /dev/null +++ b/utils/sql/git/optional/2021_11_28_pot_pick_locks_book.sql @@ -0,0 +1 @@ +UPDATE doors SET lockpick=1 WHERE doorid=46 AND zone="potranquility"; diff --git a/zone/client.cpp b/zone/client.cpp index 3e56614f0..5e293dd0e 100644 --- a/zone/client.cpp +++ b/zone/client.cpp @@ -154,6 +154,7 @@ Client::Client(EQStreamInterface* ieqs) TaskPeriodic_Timer(RuleI(TaskSystem, PeriodicCheckTimer) * 1000), charm_update_timer(6000), rest_timer(1), + pick_lock_timer(1000), charm_class_attacks_timer(3000), charm_cast_timer(3500), qglobal_purge_timer(30000), diff --git a/zone/client.h b/zone/client.h index cd58da895..a39ae4341 100644 --- a/zone/client.h +++ b/zone/client.h @@ -1528,6 +1528,7 @@ public: void UpdateMercLevel(); void CheckMercSuspendTimer(); Timer* GetMercTimer() { return &merc_timer; }; + Timer* GetPickLockTimer() { return &pick_lock_timer; }; const char* GetRacePlural(Client* client); const char* GetClassPlural(Client* client); @@ -1869,6 +1870,7 @@ private: Timer consent_throttle_timer; Timer dynamiczone_removal_timer; Timer task_request_timer; + Timer pick_lock_timer; Timer heroforge_wearchange_timer; diff --git a/zone/doors.cpp b/zone/doors.cpp index 35eb92d5c..ef785b8d7 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -288,8 +288,11 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { /** * Key required + * If using a lock_pick_item leave messaging to that code below */ - sender->Message(Chat::LightBlue, "This is locked..."); + if (lock_pick_item == nullptr && !IsDoorOpen()) { + sender->Message(Chat::LightBlue, "This is locked..."); + } /** * GM can always open locks @@ -335,19 +338,30 @@ void Doors::HandleClick(Client* sender, uint8 trigger) { */ else if (lock_pick_item != nullptr) { if (sender->GetSkill(EQ::skills::SkillPickLock)) { + Timer* pick_lock_timer = sender->GetPickLockTimer(); if (lock_pick_item->GetItem()->ItemType == EQ::item::ItemTypeLockPick) { + if (!pick_lock_timer->Check()) { + // Stop full scale mad spamming + safe_delete(outapp); + return; + } + float player_pick_lock_skill = sender->GetSkill(EQ::skills::SkillPickLock); - sender->CheckIncreaseSkill(EQ::skills::SkillPickLock, nullptr, 1); LogSkills("Client has lockpicks: skill=[{}]", player_pick_lock_skill); if (GetLockpick() <= player_pick_lock_skill) { + + // Stop full scale spamming + pick_lock_timer->Start(1000, true); + if (!IsDoorOpen()) { + sender->CheckIncreaseSkill(EQ::skills::SkillPickLock, nullptr, 1); move_door_packet->action = static_cast(invert_state == 0 ? OPEN_DOOR : OPEN_INVDOOR); + sender->MessageString(Chat::LightBlue, DOORS_SUCCESSFUL_PICK); } else { move_door_packet->action = static_cast(invert_state == 0 ? CLOSE_DOOR : CLOSE_INVDOOR); } - sender->MessageString(Chat::LightBlue, DOORS_SUCCESSFUL_PICK); } else { sender->MessageString(Chat::LightBlue, DOORS_INSUFFICIENT_SKILL); safe_delete(outapp);