From 6825f94f1e1a6395cef58fd77cafed95179ceb18 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Mon, 19 Oct 2026 11:47:09 -0400 Subject: [PATCH] Check charters through DeedTemplate GuildCreationFinalizeHandler and UseCharterMsg now match charters by DeedTemplate._deeds instead of the shared item_type getter, like the other deed paths. Value change: template 545 "Charter" (ITEM folder, CHARTER) no longer counts as a charter. It is a base template that players can't get: its only DB reference is static_vendor_items with vendorType 0, it has no loot rows, and it is not in GuildCharterType.templateLookup, so guild creation already rejected it. JSON-Refactor-Plan Task 1.3. Co-Authored-By: Claude Opus 5.5 --- .../net/client/handlers/GuildCreationFinalizeHandler.java | 6 +++++- src/engine/net/client/msg/UseCharterMsg.java | 7 ++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java b/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java index 05d445e8..b03a31d0 100644 --- a/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java +++ b/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java @@ -24,6 +24,7 @@ import engine.net.client.msg.guild.GuildInfoMsg; import engine.objects.Guild; import engine.objects.Item; import engine.objects.PlayerCharacter; +import engine.parsers.objects.DeedTemplate; import engine.util.StringUtils; public class GuildCreationFinalizeHandler extends AbstractClientMsgHandler { @@ -42,6 +43,7 @@ public class GuildCreationFinalizeHandler extends AbstractClientMsgHandler { Guild playerGuild; Item charter; + DeedTemplate charterDeed; Dispatch dispatch; msg = (GuildCreationFinalizeMsg) baseMsg; @@ -65,7 +67,9 @@ public class GuildCreationFinalizeHandler extends AbstractClientMsgHandler { // Item must be a valid charterType (type 10 in db) - if (charter == null || (charter.template.cacheTemplate.getItemType().equals(ItemType.CHARTER) == false)) { + charterDeed = DeedTemplate._deeds.get(charter.templateID); + + if (charterDeed == null || (charterDeed.item_type.equals(ItemType.CHARTER) == false)) { ErrorPopupMsg.sendErrorPopup(player, GuildManager.NO_CHARTER_FOUND); return true; } diff --git a/src/engine/net/client/msg/UseCharterMsg.java b/src/engine/net/client/msg/UseCharterMsg.java index ca3cc552..6b39d418 100644 --- a/src/engine/net/client/msg/UseCharterMsg.java +++ b/src/engine/net/client/msg/UseCharterMsg.java @@ -16,6 +16,7 @@ import engine.net.ByteBufferWriter; import engine.net.Protocol; import engine.objects.Item; import engine.objects.PlayerCharacter; +import engine.parsers.objects.DeedTemplate; public class UseCharterMsg extends ClientNetMsg { @@ -61,9 +62,13 @@ public class UseCharterMsg extends ClientNetMsg { public void configure() { + DeedTemplate charterDeed; + if (close) { for (Item i : player.getInventory()) { - if (i.template.cacheTemplate.getItemType().equals(ItemType.CHARTER)) { + charterDeed = DeedTemplate._deeds.get(i.templateID); + + if (charterDeed != null && charterDeed.item_type.equals(ItemType.CHARTER)) { charterUUID = i.getObjectUUID(); break; }