diff --git a/common/patches/rof.cpp b/common/patches/rof.cpp index fed2802df..dfb0f23a5 100644 --- a/common/patches/rof.cpp +++ b/common/patches/rof.cpp @@ -5356,6 +5356,12 @@ namespace RoF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + itbs.unknown8 = 0; itbs.unknown9 = 0; itbs.unknown10 = 0; diff --git a/common/patches/rof2.cpp b/common/patches/rof2.cpp index 209324740..fc841a9b1 100644 --- a/common/patches/rof2.cpp +++ b/common/patches/rof2.cpp @@ -5611,6 +5611,12 @@ namespace RoF2 itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + itbs.unknown8 = 0; itbs.unknown9 = 0; itbs.unknown10 = 0; diff --git a/common/patches/sod.cpp b/common/patches/sod.cpp index 709b07363..753852a18 100644 --- a/common/patches/sod.cpp +++ b/common/patches/sod.cpp @@ -3631,6 +3631,12 @@ namespace SoD itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(SoD::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/common/patches/sof.cpp b/common/patches/sof.cpp index 9f5626100..6bfb19de5 100644 --- a/common/patches/sof.cpp +++ b/common/patches/sof.cpp @@ -3028,6 +3028,12 @@ namespace SoF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(SoF::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/common/patches/uf.cpp b/common/patches/uf.cpp index 4b97658d2..576996e76 100644 --- a/common/patches/uf.cpp +++ b/common/patches/uf.cpp @@ -3966,6 +3966,12 @@ namespace UF itbs.no_transfer = item->NoTransfer; itbs.expendablearrow = item->ExpendableArrow; + // Done to hack older clients to label expendable fishing poles as such + // July 28th, 2018 patch + if (item->ItemType == EQEmu::item::ItemTypeFishingPole && item->SubType == 0) { + itbs.expendablearrow = 1; + } + ob.write((const char*)&itbs, sizeof(UF::structs::ItemTertiaryBodyStruct)); // Effect Structures Broken down to allow variable length strings for effect names diff --git a/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql b/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql new file mode 100644 index 000000000..60d8c26b4 --- /dev/null +++ b/utils/sql/git/optional/2020_05_11_unbreakable_fishing.sql @@ -0,0 +1,3 @@ +/* In July 2018 - magical poles were no longer breakable */ + +UPDATE items SET subtype = magic WHERE itemtype = 36; diff --git a/zone/forage.cpp b/zone/forage.cpp index 24c4641e4..069f2be63 100644 --- a/zone/forage.cpp +++ b/zone/forage.cpp @@ -368,9 +368,14 @@ void Client::GoFish() //chance to break fishing pole... //this is potentially exploitable in that they can fish //and then swap out items in primary slot... too lazy to fix right now - if (zone->random.Int(0, 49) == 1) { - MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! - DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); + const EQEmu::ItemInstance* Pole = m_inv[EQEmu::invslot::slotPrimary]; + + if (Pole) { + const EQEmu::ItemData* fishing_item = Pole->GetItem(); + if (fishing_item && fishing_item->SubType == 0 && zone->random.Int(0, 49) == 1) { + MessageString(Chat::Skills, FISHING_POLE_BROKE); //Your fishing pole broke! + DeleteItemInInventory(EQEmu::invslot::slotPrimary, 0, true); + } } if (CheckIncreaseSkill(EQEmu::skills::SkillFishing, nullptr, 5))