From c774746736478ef21e5096e2d25a2488942dda59 Mon Sep 17 00:00:00 2001 From: MagicBot Date: Mon, 19 Oct 2026 11:42:54 -0400 Subject: [PATCH] Read deed consumers from DeedTemplate Deed placement (ObjectActionMsgHandler, PlaceAssetMsgHandler) reads deed_structure_id from DeedTemplate._deeds. The deed, employment contract and charter type checks (PlaceAssetMsgHandler, ActivateNPCMsgHandler, GuildCreationFinalizeHandler, UseCharterMsg, Item.serialize) read item_type through the cache template bridge. Charters go through the shared getter rather than _deeds because template 545 "Charter" is a CHARTER in the ITEM folder. Parity (offline, static_item_templates vs COBJECTS, scripts/p13.py, 881 templates: all 880 DEED plus ITEM 545): 0 differences in item_type and deed_structure_id. Every DB DEED, EMPLOYMENTCONTRACT, PETTOTEM and FURNITUREDEED id is in the DEED folder. No value changes expected. No pet totem or furniture deed consumer reads template fields, so neither changes. JSON-Refactor-Plan Task 1.3. Co-Authored-By: Claude Opus 5.5 --- src/engine/net/client/handlers/ActivateNPCMsgHandler.java | 2 +- .../net/client/handlers/GuildCreationFinalizeHandler.java | 2 +- src/engine/net/client/handlers/ObjectActionMsgHandler.java | 3 ++- src/engine/net/client/handlers/PlaceAssetMsgHandler.java | 4 ++-- src/engine/net/client/msg/UseCharterMsg.java | 2 +- src/engine/objects/Item.java | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/engine/net/client/handlers/ActivateNPCMsgHandler.java b/src/engine/net/client/handlers/ActivateNPCMsgHandler.java index 98c43677..5e75d193 100644 --- a/src/engine/net/client/handlers/ActivateNPCMsgHandler.java +++ b/src/engine/net/client/handlers/ActivateNPCMsgHandler.java @@ -46,7 +46,7 @@ public class ActivateNPCMsgHandler extends AbstractClientMsgHandler { // Filter hirelings by slot type for (Item hirelings : player.getInventory()) { - if (hirelings.template.item_type.equals(ItemType.EMPLOYMENTCONTRACT)) { + if (hirelings.template.cacheTemplate.getItemType().equals(ItemType.EMPLOYMENTCONTRACT)) { contract = DbManager.ContractQueries.GET_CONTRACT(hirelings.templateID); diff --git a/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java b/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java index 92ca4dd6..05d445e8 100644 --- a/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java +++ b/src/engine/net/client/handlers/GuildCreationFinalizeHandler.java @@ -65,7 +65,7 @@ public class GuildCreationFinalizeHandler extends AbstractClientMsgHandler { // Item must be a valid charterType (type 10 in db) - if (charter == null || (charter.template.item_type.equals(ItemType.CHARTER) == false)) { + if (charter == null || (charter.template.cacheTemplate.getItemType().equals(ItemType.CHARTER) == false)) { ErrorPopupMsg.sendErrorPopup(player, GuildManager.NO_CHARTER_FOUND); return true; } diff --git a/src/engine/net/client/handlers/ObjectActionMsgHandler.java b/src/engine/net/client/handlers/ObjectActionMsgHandler.java index b897ec9a..0ef50060 100644 --- a/src/engine/net/client/handlers/ObjectActionMsgHandler.java +++ b/src/engine/net/client/handlers/ObjectActionMsgHandler.java @@ -8,6 +8,7 @@ import engine.net.Dispatch; import engine.net.client.ClientConnection; import engine.net.client.msg.*; import engine.objects.*; +import engine.parsers.objects.DeedTemplate; import engine.powers.PowersBase; import java.util.ArrayList; @@ -99,7 +100,7 @@ public class ObjectActionMsgHandler extends AbstractClientMsgHandler { pam.setX(loc.getX() + 64); //offset grid from tol pam.setY(loc.getY()); pam.setZ(loc.getZ() + 64); //offset grid from tol - pam.addPlacementInfo(item.template.deed_structure_id); + pam.addPlacementInfo(DeedTemplate._deeds.get(item.templateID).deed_structure_id); dispatch = Dispatch.borrow(player, pam); DispatchManager.dispatchMsgDispatch(dispatch, mbEnums.DispatchChannel.SECONDARY); diff --git a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java index fbd1c344..85866170 100644 --- a/src/engine/net/client/handlers/PlaceAssetMsgHandler.java +++ b/src/engine/net/client/handlers/PlaceAssetMsgHandler.java @@ -356,8 +356,8 @@ public class PlaceAssetMsgHandler extends AbstractClientMsgHandler { Item contract = null; for (Item inventoryItem : playerCharacter.getInventory()) { - if (inventoryItem.template.item_type.equals(ItemType.DEED) && - inventoryItem.template.deed_structure_id == buildingList.getBlueprintUUID()) { + if (inventoryItem.template.cacheTemplate.getItemType().equals(ItemType.DEED) && + DeedTemplate._deeds.get(inventoryItem.templateID).deed_structure_id == buildingList.getBlueprintUUID()) { contract = inventoryItem; break; } diff --git a/src/engine/net/client/msg/UseCharterMsg.java b/src/engine/net/client/msg/UseCharterMsg.java index ae8cf29d..ca3cc552 100644 --- a/src/engine/net/client/msg/UseCharterMsg.java +++ b/src/engine/net/client/msg/UseCharterMsg.java @@ -63,7 +63,7 @@ public class UseCharterMsg extends ClientNetMsg { if (close) { for (Item i : player.getInventory()) { - if (i.template.item_type.equals(ItemType.CHARTER)) { + if (i.template.cacheTemplate.getItemType().equals(ItemType.CHARTER)) { charterUUID = i.getObjectUUID(); break; } diff --git a/src/engine/objects/Item.java b/src/engine/objects/Item.java index 2edd18f3..876227d7 100644 --- a/src/engine/objects/Item.java +++ b/src/engine/objects/Item.java @@ -298,7 +298,7 @@ public class Item extends AbstractWorldObject { writer.put((byte) 0); - if (item.template.item_type.equals(ItemType.EMPLOYMENTCONTRACT) == false) { + if (item.template.cacheTemplate.getItemType().equals(ItemType.EMPLOYMENTCONTRACT) == false) { writer.putShort((short) 0); return; }