diff --git a/scripts/commands/createvendor.py b/scripts/commands/createvendor.py index b4f09cbb..ce359139 100644 --- a/scripts/commands/createvendor.py +++ b/scripts/commands/createvendor.py @@ -160,7 +160,7 @@ def handleVendorName(actor, window, eventType, returnList): vendor.setAttachment('isVendor', True) vendor.setAttachment('onMap', True) vendor.setAttachment('maintenanceAmount', 0) - vendor.setAttachment('vendorOwner', actor.getObjectID()) + vendor.setAttachment('vendorOwner', Long(actor.getObjectID())) vendor.setAttachment('initialized', False) vendor.setAttachment('vendorSearchEnabled', False) vendor.setCustomName('Vendor: ' + name) diff --git a/scripts/commands/transferitemmisc.py b/scripts/commands/transferitemmisc.py index 30dd0846..2df5ab93 100644 --- a/scripts/commands/transferitemmisc.py +++ b/scripts/commands/transferitemmisc.py @@ -13,7 +13,7 @@ def run(core, actor, target, commandString): if container == None: return - if(container.isFull()): + if not 'cell' in container.getTemplate() and container.isFull(): actor.sendSystemMessage('@container_error_message:container03', 0) return diff --git a/scripts/radial/terminal/vendor.py b/scripts/radial/terminal/vendor.py index 9a6c9bc0..3d32c3b5 100644 --- a/scripts/radial/terminal/vendor.py +++ b/scripts/radial/terminal/vendor.py @@ -1,52 +1,129 @@ -from resources.common import RadialOptions +from resources.common import RadialOptions, ProsePackage, OutOfBand +from java.util import HashMap +from java.lang import Long +from services.sui.SUIService import ListBoxType +from services.sui.SUIService import InputBoxType +from services.sui.SUIWindow import Trigger import sys def createRadial(core, owner, target, radials): radials.clear() - radials.add(RadialOptions(0, 11, 1, '')) - radials.add(RadialOptions(0, 55, 0, '')) - radials.add(RadialOptions(2, 56, 1, '')) - radials.add(RadialOptions(2, 57, 1, '')) - radials.add(RadialOptions(2, 58, 1, '')) - radials.add(RadialOptions(2, 59, 1, '')) - radials.add(RadialOptions(0, 52, 0, '')) - radials.add(RadialOptions(3, 53, 1, '')) - radials.add(RadialOptions(3, 54, 1, '')) - - if not owner.getPlayerObject().getOwnedVendors().contains(target.getObjectID()): + #radials.add(RadialOptions(0, 11, 1, '')) + #radials.add(RadialOptions(0, 55, 0, '')) + #radials.add(RadialOptions(2, 56, 1, '')) + #radials.add(RadialOptions(2, 57, 1, '')) + #radials.add(RadialOptions(2, 58, 1, '')) + #radials.add(RadialOptions(2, 59, 1, '')) + #radials.add(RadialOptions(0, 52, 0, '')) + #radials.add(RadialOptions(3, 53, 1, '')) + #radials.add(RadialOptions(3, 54, 1, '')) + + if not long(target.getAttachment('vendorOwner')) == owner.getObjectID(): return + radials.add(RadialOptions(0, 112, 3, '@player_structure:vendor_control')) if target.getAttachment('initialized') == False: radials.add(RadialOptions(1, 118, 3, '@player_structure:vendor_init')) else: # soe reuses option 118 - radials.add(RadialOptions(4, 118, 3, '@player_structure:vendor_status')) - radials.add(RadialOptions(4, 217, 3, '@player_structure:give_maintenance')) - radials.add(RadialOptions(4, 115, 3, '@player_structure:take_maintenance')) + radials.add(RadialOptions(1, 118, 3, '@player_structure:vendor_status')) + radials.add(RadialOptions(1, 217, 3, '@player_structure:give_maintenance')) + radials.add(RadialOptions(1, 115, 3, '@player_structure:take_maintenance')) if owner.getSkillModBase('private_register_vendor') >= 1: - radials.add(RadialOptions(4, 116, 3, '@player_structure:register_vendor')) - radials.add(RadialOptions(4, 205, 3, '@player_structure:enable_vendor_search')) - radials.add(RadialOptions(4, 206, 3, '@player_structure:disable_vendor_search')) - radials.add(RadialOptions(4, 121, 3, '@player_structure:customize_vendor')) + radials.add(RadialOptions(1, 116, 3, '@player_structure:register_vendor')) + radials.add(RadialOptions(1, 205, 3, '@player_structure:enable_vendor_search')) + radials.add(RadialOptions(1, 206, 3, '@player_structure:disable_vendor_search')) + radials.add(RadialOptions(1, 121, 3, '@player_structure:customize_vendor')) - radials.add(RadialOptions(4, 114, 3, '@player_structure:vendor_pack')) - radials.add(RadialOptions(4, 117, 3, '@player_structure:remove_vendor')) + radials.add(RadialOptions(1, 114, 3, '@player_structure:vendor_pack')) + radials.add(RadialOptions(1, 117, 3, '@player_structure:remove_vendor')) return def handleSelection(core, owner, target, option): - if not owner.getPlayerObject().getOwnedVendors().contains(target.getObjectID()): + if not target.getAttachment('vendorOwner') == owner.getObjectID(): return - + if target.getAttachment('initialized') == False: if option == 118: owner.sendSystemMessage('@player_structure:vendor_initialized', 0) - vendor.setAttachment('initialized', True) - core.bazaarService.startVendorUpdateTask(owner, target) + target.setAttachment('initialized', True) + core.bazaarService.startVendorUpdateTask(owner, target) else: + if option == 118: + suiOptions = HashMap() + suiOptions.put(Long(1), 'Owner: ' + owner.getCustomName()) + suiOptions.put(Long(2), 'Maintenance Pool: ' + str(target.getAttachment('maintenanceAmount')) + ' cr') + maintenanceRate = 15 + if target.getAttachment('onMap') is True: + maintenanceRate += 6 + suiOptions.put(Long(3), 'Maintenance Rate: ' + str(maintenanceRate) + ' cr/hr') + suiOptions.put(Long(4), 'Number of Items For Sale: ' + str(core.bazaarService.getNumberOfItemsForSale(target.getObjectID()))) + window = core.suiService.createListBox(ListBoxType.LIST_BOX_OK_CANCEL, '@player_structure:vendor_status', 'Vendor Status', suiOptions, owner, None, 5) + core.suiService.openSUIWindow(window) + if option == 205: + target.setAttachment('vendorSearchEnabled', True) + owner.sendSystemMessage('@player_structure:vendor_search_enabled', 0) + if option == 206: + target.setAttachment('vendorSearchEnabled', False) + owner.sendSystemMessage('@player_structure:vendor_search_disabled', 0) + if option == 217: + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:pay_vendor_t', '@player_structure:pay_vendor_d', owner, target, 5, handlePayMaintenance) + core.suiService.openSUIWindow(window) + if option == 115: + window = core.suiService.createInputBox(InputBoxType.INPUT_BOX_OK_CANCEL, '@player_structure:withdraw_vendor_t', '@player_structure:withdraw_vendor_d', owner, target, 5, handleWithdrawMaintenance) + core.suiService.openSUIWindow(window) + + + + return + +def handlePayMaintenance(actor, window, eventType, returnList): + + value = int(returnList.get(0)) + + if value > 100000: + actor.sendSystemMessage('@player_structure:vendor_maint_invalid', 0) + return + if value <= 0: + actor.sendSystemMessage('@player_structure:amt_greater_than_zero', 0) + return + if actor.getBankCredits() + actor.getCashCredits() <= value: + actor.sendSystemMessage('@player_structure:vendor_maint_denied', 0) + return + + if actor.getBankCredits() < value: + actor.setCashCredits(actor.getCashCredits() - (value - actor.getBankCredits())) + actor.setBankCredits(0) + else: + actor.setBankCredits(actor.getBankCredits() - value) + + maintAmount = window.getRangeObject().getAttachment('maintenanceAmount') + maintAmount += value + window.getRangeObject().setAttachment('maintenanceAmount', maintAmount) + + #actor.sendSystemMessage('@player_structure:vendor_maint_accepted', OutOfBand(ProsePackage(maintAmount)), 0) + + return + +def handleWithdrawMaintenance(actor, window, eventType, returnList): + + value = int(returnList.get(0)) + maintAmount = window.getRangeObject().getAttachment('maintenanceAmount') + + if value > maintAmount: + #actor.sendSystemMessage('@player_structure:vendor_withdraw_fail', OutOfBand(ProsePackage(value)), 0) + return + if value <= 0: + actor.sendSystemMessage('@player_structure:amt_greater_than_zero', 0) + + maintAmount -= value + window.getRangeObject().setAttachment('maintenanceAmount', maintAmount) + #actor.sendSystemMessage('@player_structure:vendor_withdraw', OutOfBand(ProsePackage(value)), 0) + return \ No newline at end of file diff --git a/src/services/bazaar/BazaarService.java b/src/services/bazaar/BazaarService.java index 8096c2d5..2c90047d 100644 --- a/src/services/bazaar/BazaarService.java +++ b/src/services/bazaar/BazaarService.java @@ -542,7 +542,7 @@ public class BazaarService implements INetworkDispatch { // Auctions case 2: - if(item.getStatus() == AuctionItem.FORSALE) { + if(item.getStatus() == AuctionItem.FORSALE && item.isOnBazaar()) { if((category & 255) != 0 && item.getItemType() == category) { if(displayedItems >= offset) response.addItem(item); @@ -584,8 +584,29 @@ public class BazaarService implements INetworkDispatch { if(item.getStatus() == AuctionItem.OFFERED && player.getObjectID() == item.getOfferToId()) response.addItem(item); break; - // Vendor search TODO later + // Vendor search case 7: + if(item.getStatus() == AuctionItem.FORSALE && !item.isOnBazaar()) { + if(vendor.getObjectID() != item.getVendorId() && (core.objectService.getObject(item.getVendorId()) == null || (Boolean) core.objectService.getObject(item.getVendorId()).getAttachment("vendorSearchEnabled"))) + break; + if((category & 255) != 0 && item.getItemType() == category) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if((item.getItemType() & category) != 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(item.getItemType() < 256 && category == 8192) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } else if(category == 0) { + if(displayedItems >= offset) + response.addItem(item); + displayedItems++; + } + } break; // Stock case 8: @@ -787,4 +808,8 @@ public class BazaarService implements INetworkDispatch { } + public int getNumberOfItemsForSale(long vendorId) { + return (int) auctionItems.parallelStream().filter(i -> i.getVendorId() == vendorId).count(); + } + } diff --git a/src/services/sui/SUIService.java b/src/services/sui/SUIService.java index 2ebbe982..662ec843 100644 --- a/src/services/sui/SUIService.java +++ b/src/services/sui/SUIService.java @@ -133,7 +133,7 @@ public class SUIService implements INetworkDispatch { //System.out.println("SUI target is NOT creatureobject " + target.getTemplate()); } - if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && ((CreatureObject) owner).getPlayerObject().getOwnedVendors().contains(target.getObjectID())) { + if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && (long) target.getAttachment("vendorOwner") == owner.getObjectID()) { core.scriptService.callScript("scripts/radial/", "terminal/vendor", "createRadial", core, owner, target, request.getRadialOptions()); sendRadial(owner, target, request.getRadialOptions(), request.getRadialCount()); return; @@ -180,6 +180,11 @@ public class SUIService implements INetworkDispatch { if(target == null || owner == null) return; + if(target.getAttachment("isVendor") != null && (Boolean) target.getAttachment("isVendor") && (long) target.getAttachment("vendorOwner") == owner.getObjectID()) { + core.scriptService.callScript("scripts/radial/", "terminal/vendor", "handleSelection", core, owner, target, objMenuSelect.getSelection()); + return; + } + core.scriptService.callScript("scripts/radial/", getRadialFilename(target), "handleSelection", core, owner, target, objMenuSelect.getSelection()); }