diff --git a/scripts/houses/player_cityhall_tatooine_style_01.py b/scripts/houses/player_cityhall_tatooine_style_01.py index 21517f8d..635869f8 100644 --- a/scripts/houses/player_cityhall_tatooine_style_01.py +++ b/scripts/houses/player_cityhall_tatooine_style_01.py @@ -2,6 +2,7 @@ import sys from services.housing import HouseTemplate from engine.resources.scene import Point3D + def setup(core): houseTemplate = HouseTemplate("object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff", "object/building/player/city/shared_cityhall_tatooine.iff", 5) diff --git a/scripts/object/building/player/city/cityhall_tatooine.py b/scripts/object/building/player/city/cityhall_tatooine.py index abcc4690..9e42840b 100644 --- a/scripts/object/building/player/city/cityhall_tatooine.py +++ b/scripts/object/building/player/city/cityhall_tatooine.py @@ -10,5 +10,9 @@ def setup(core, object): cityterminal = core.objectService.createChildObject(object, 'object/tangible/terminal/shared_terminal_city.iff', Point3D(float(0), float(2.6), float(0)), Quaternion(float(1), float(1), float(1), float(0)),3) #cityterminal.setAttachment('housing_parentstruct', object) + cityterminal.setAttachment('radial_filename', 'terminal/city_maintenance_terminal') + + sign = core.objectService.createChildObject(object, 'object/tangible/sign/player/shared_house_address.iff', -7.39, 2.36, 2, -1, 0, -1) + object.setAttachment("structureSign", sign) return \ No newline at end of file diff --git a/scripts/object/tangible/terminal/terminal_city.py b/scripts/object/tangible/terminal/terminal_city.py index ccad8904..f7302163 100644 --- a/scripts/object/tangible/terminal/terminal_city.py +++ b/scripts/object/tangible/terminal/terminal_city.py @@ -1,4 +1,5 @@ import sys def setup(core, object): + object.setAttachment('radial_filename', 'terminal/city_maintenance_terminal') return \ No newline at end of file diff --git a/scripts/radial/terminal/city_maintenance_terminal.py b/scripts/radial/terminal/city_maintenance_terminal.py index 83804428..e5dce527 100644 --- a/scripts/radial/terminal/city_maintenance_terminal.py +++ b/scripts/radial/terminal/city_maintenance_terminal.py @@ -3,32 +3,37 @@ from protocol.swg import ResourceListForSurveyMessage from services.sui.SUIService import MessageBoxType from services.sui.SUIWindow import Trigger from java.util import Vector +import main.NGECore import sys def createRadial(core, owner, target, radials): #(byte parentId, short optionId, byte optionType, String description) radials.clear() radials.add(RadialOptions(0, 7, 0, 'Examine')) - radials.add(RadialOptions(0, 78, 0, '@city/city:city_management @player_structure:management')) - radials.add(RadialOptions(0, 117, 0, '@city/city:city_info @player_structure:permissions')) - radials.add(RadialOptions(2, 50, 0, '@city/city:city_name_new_t')) - radials.add(RadialOptions(2, 127, 0, '@city/city:city_register')) - radials.add(RadialOptions(2, 125, 0, '@city/city:unzone')) - radials.add(RadialOptions(2, 171, 0, '@city/city:city_militia')) - radials.add(RadialOptions(2, 173, 0, '@city/city:treasury_taxes')) - radials.add(RadialOptions(2, 174, 0, '@city/city:treasury_withdraw')) - radials.add(RadialOptions(2, 175, 0, '@city/city:city_specializations')) + radials.add(RadialOptions(0, 216, 0, '@city/city:city_management')) + radials.add(RadialOptions(0, 226, 0, '@city/city:city_info')) + radials.add(RadialOptions(0, 227, 0, '@city/city:remove_trainers')) + radials.add(RadialOptions(2, 217, 0, '@city/city:city_name_new_t')) + radials.add(RadialOptions(2, 222, 0, '@city/city:city_register')) + radials.add(RadialOptions(2, 224, 0, '@city/city:unzone')) + radials.add(RadialOptions(2, 218, 0, '@city/city:city_militia')) + radials.add(RadialOptions(2, 219, 0, '@city/city:treasury_taxes')) + radials.add(RadialOptions(2, 221, 0, '@city/city:treasury_withdraw')) + radials.add(RadialOptions(2, 225, 0, '@city/city:city_specializations')) - radials.add(RadialOptions(3, 121, 0, '@player_structure:permission_enter')) - radials.add(RadialOptions(3, 123, 0, '@player_structure:permission_banned')) + radials.add(RadialOptions(3, 121, 0, '@city/city:citizens')) + radials.add(RadialOptions(3, 123, 0, '@city/city:citizens')) return def handleSelection(core, owner, target, option): - - if option == 128: + playerCity = core.playerCityService.getPlayerCity(owner) + if playerCity==None: + return + + if option == 217: if owner is not None: - core.housingService.createDestroySUIPage(owner,target) + handleSetCityName(core, owner, target, option) return if option == 124: if owner is not None: @@ -42,9 +47,9 @@ def handleSelection(core, owner, target, option): if owner is not None: core.housingService.createRenameSUIPage(owner,target) return - if option == 127: + if option == 222: if owner is not None: - core.housingService.declareResidency(owner,target) + handleRegisterMap(core, owner, target, option) return if option == 171: if owner is not None: @@ -54,21 +59,428 @@ def handleSelection(core, owner, target, option): if owner is not None: core.housingService.handleDeleteAllItems(owner,target) return - if option == 173: + if option == 225: if owner is not None: - core.housingService.handleFindLostItems(owner,target) + handleSpecialization(core, owner, target, option) return - if option == 174: + if option == 221: if owner is not None: - core.housingService.handleSearchForItems(owner,target) + handleWithdrawal(core, owner, target, option) return if option == 121: if owner is not None: - core.housingService.handlePermissionEntry(owner,target) + handleCitizenList(core, owner, target, option) return if option == 123: if owner is not None: - core.housingService.handlePermissionBan(owner,target) + handleCitizenList(core, owner, target, option) return +def handleSetCityName(core, owner, target, option): + window = core.suiService.createInputBox(2,'@player_structure:structure_status','@player_structure:structure_name_prompt', owner, target, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setnameCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setnameCallBack) + core.suiService.openSUIWindow(window); + return +def setnameCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleTaxes(core, owner, target, option): + window = core.suiService.createInputBox(2,'@player_structure:structure_status','@player_structure:structure_name_prompt', owner, target, 0) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setnameCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setnameCallBack) + core.suiService.openSUIWindow(window); + return + +def setTaxesCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleWithdrawal(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + window = core.suiService.createSUIWindow("Script.transfer", owner, target, 10) + + window.setProperty("bg.caption.lblTitle:Text", "@city/city:treasury_withdraw_subject") + window.setProperty("Prompt.lblPrompt:Text", "@city/city:treasury_withdraw_prompt" + "\n \n @city/city:treasury_status : %s" % playerCity.getCityTreasury()) + + window.setProperty("msgPayMaintenance", "transaction.txtInputFrom"); + + window.setProperty("transaction.lblFrom:Text", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo:Text", "@city/city:treasury_withdraw"); + window.setProperty("transaction.lblFrom", "@city/city:treasury_balance_t"); + window.setProperty("transaction.lblTo", "@city/city:treasury_withdraw"); + + window.setProperty("transaction.lblStartingFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.lblStartingTo:Text", '0'); + + window.setProperty("transaction:InputFrom", "555555"); + window.setProperty("transaction:InputTo", "666666"); + + window.setProperty("transaction:txtInputFrom", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction:txtInputTo", "1"); + window.setProperty("transaction.txtInputFrom:Text", '%s' % playerCity.getCityTreasury()); + window.setProperty("transaction.txtInputTo:Text", "" + "0"); + + window.setProperty("transaction.ConversionRatioFrom", "1"); + window.setProperty("transaction.ConversionRatioTo", "0"); + + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + + returnList = Vector() + returnList.add('transaction.txtInputFrom:Text') + returnList.add('ransaction.txtInputTo:Text') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setWithdrawalCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setWithdrawalCallBack) + core.suiService.openSUIWindow(window); + return + +def setWithdrawalCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleCitizenList(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:citizen_list_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:citizen_list_prompt') + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + index = 1; + for citizen in playerCity.getCitizens(): + citizenObject = core.objectService.getObject(citizen) + window.addListBoxMenuItem(citizenObject.getCustomName(),index) + index += 1 + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setCitizenListCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setCitizenListCallBack) + core.suiService.openSUIWindow(window); + return + +def setCitizenListCallBack(owner, window, eventType, returnList): + #handle waypoint creation to citizen's house + return + +def handleRegisterMap(core, owner, target, option): + + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + if playerCity.getCityRank()<3: + owner.sendSystemMessage('@city/city:cant_register_rank', 0) + return + + if owner.getObjectId()!=playerCity.getMayorID(): + owner.sendSystemMessage('@city/city:cant_register', 0) + return + + # now register it somehow + + return + +def setRegisterMapCallBack(owner, window, eventType, returnList): + if returnList.size()==0: + return + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + playerCity.setCityName(returnList.get(0)) + owner.sendSystemMessage('@city/city:name_changed', 0) + return + +def handleSpecialization(core, owner, target, option): + window = core.suiService.createSUIWindow('Script.listBox', owner, target, 0); + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_specs_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_specs_d') + + window.addListBoxMenuItem('Cloning Lab',0) + window.addListBoxMenuItem('DNA Laboratory',1) + window.addListBoxMenuItem('Encore Performance',2) + window.addListBoxMenuItem('Entertainment District',3) + window.addListBoxMenuItem('Improved Job Market',4) + window.addListBoxMenuItem('Manufacturing Center',5) + window.addListBoxMenuItem('Medical Center',6) + window.addListBoxMenuItem('Research Center',7) + window.addListBoxMenuItem('Sample Rich',8) + + window.setProperty('btnOk:visible', 'True') + window.setProperty('btnCancel:visible', 'True') + window.setProperty('btnOk:Text', '@ok') + window.setProperty('btnCancel:Text', '@cancel') + + returnList = Vector() + returnList.add('List.lstList:SelectedRow') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, setSpecializationCallBack) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, setSpecializationCallBack) + core.suiService.openSUIWindow(window); + return + +def setSpecializationCallBack(owner, window, eventType, returnList): + + if returnList.size()==0: + owner.sendSystemMessage('NULL', 0) + return + + if returnList.get(0)=='0': + showCloning(owner) + return + if returnList.get(0)=='1': + showDNA(owner) + return + if returnList.get(0)=='2': + showEncore(owner) + return + if returnList.get(0)=='3': + showEntertainment(owner) + return + if returnList.get(0)=='4': + showImproved(owner) + return + if returnList.get(0)=='5': + showManufacturing(owner) + return + if returnList.get(0)=='6': + showMedical(owner) + return + if returnList.get(0)=='7': + showResearch(owner) + return + if returnList.get(0)=='8': + showSample(owner) + return + + return + +def showCloning(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_cloning') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_cloning_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleCloningCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleCloningCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleCloningCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',1) + showSpecConfirmWindow(owner) + return + +def showDNA(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_bm_incubator') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_bm_incubator_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleDNACallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleDNACallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleDNACallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',2) + showSpecConfirmWindow(owner) + return + +def showEncore(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_storyteller') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_storyteller_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEncoreCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleEncoreCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEncoreCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',3) + showSpecConfirmWindow(owner) + return + + +def showEntertainment(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_entertainer') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_entertainer_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleEntertainmentCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleEntertainmentCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleEntertainmentCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',4) + showSpecConfirmWindow(owner) + return + +def showImproved(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_missions') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_missions_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleImprovedCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleImprovedCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleImprovedCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',5) + showSpecConfirmWindow(owner) + return + +def showManufacturing(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_industry') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_industry_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleManufacturingCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleManufacturingCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleManufacturingCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',6) + showSpecConfirmWindow(owner) + return + +def showMedical(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_doctor') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_doctor_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleMedicalCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleMedicalCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleMedicalCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',7) + showSpecConfirmWindow(owner) + return + +def showResearch(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_research') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_research_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleResearchCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleResearchCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleResearchCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',8) + showSpecConfirmWindow(owner) + return + +def showSample(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:city_spec_sample_rich') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:city_spec_sample_rich_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Select") + window.setProperty("btnCancel:Text", "@cancel") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSampleCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSampleCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSampleCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + owner.setAttachment('ChosenCitySpec',9) + showSpecConfirmWindow(owner) + return + +def showSpecConfirmWindow(owner): + window = main.NGECore.getInstance().suiService.createSUIWindow('Script.messageBox', owner, owner, 0) + window.setProperty('bg.caption.lblTitle:Text', '@city/city:confirm_spec_t') + window.setProperty('Prompt.lblPrompt:Text', '@city/city:confirm_spec_d') + window.setProperty("btnOk:visible", "True") + window.setProperty("btnCancel:visible", "True") + window.setProperty("btnOk:Text", "Yes") + window.setProperty("btnCancel:Text", "No") + returnList = Vector() + returnList.add('txtInput:LocalText') + window.addHandler(0, '', Trigger.TRIGGER_OK, returnList, handleSpecConfirmCallback) + window.addHandler(1, '', Trigger.TRIGGER_CANCEL, returnList, handleSpecConfirmCallback) + main.NGECore.getInstance().suiService.openSUIWindow(window); + return + +def handleSpecConfirmCallback(owner, window, eventType, returnList): + playerCity = main.NGECore.getInstance().playerCityService.getPlayerCity(owner) + chosenSpec = owner.getAttachment('ChosenCitySpec') + playerCity.setSpecialisation(chosenSpec) + return \ No newline at end of file diff --git a/src/services/DevService.java b/src/services/DevService.java index 1a7f453d..4051b8c2 100644 --- a/src/services/DevService.java +++ b/src/services/DevService.java @@ -1226,6 +1226,12 @@ public class DevService implements INetworkDispatch { deed.setAttributes(); inventory.add(deed); + templateString="object/tangible/deed/city_deed/shared_cityhall_tatooine_deed.iff"; + deed = (Player_House_Deed)core.objectService.createObject(templateString, planet); + deed.setBMR(15); + deed.setAttributes(); + inventory.add(deed); + break; case 125: TangibleObject genericCraftingTool = (TangibleObject) core.objectService.createObject("object/tangible/crafting/station/shared_generic_tool.iff", planet); diff --git a/src/services/housing/HousingService.java b/src/services/housing/HousingService.java index 1c6611d8..0c448729 100644 --- a/src/services/housing/HousingService.java +++ b/src/services/housing/HousingService.java @@ -42,6 +42,7 @@ import resources.objects.creature.CreatureObject; import resources.objects.deed.Player_House_Deed; import resources.objects.player.PlayerObject; import resources.objects.tangible.TangibleObject; +import services.playercities.PlayerCity; import services.sui.SUIWindow; import services.sui.SUIWindow.SUICallback; import services.sui.SUIWindow.Trigger; @@ -133,6 +134,13 @@ public class HousingService implements INetworkDispatch { building.setBMR(playerHourseDeed.getBMR()); building.setConditionDamage(100); + if (structureTemplate.contains("cityhall")){ + PlayerCity newCity = core.playerCityService.addNewPlayerCity(actor); + building.setAttachment("structureCity", newCity.getCityID()); + actor.setAttachment("residentCity", newCity.getCityID()); + } + + // Save structure to DB //building.createTransaction(core.getBuildingODB().getEnvironment()); //core.getBuildingODB().put(building, Long.class, BuildingObject.class, building.getTransaction()); diff --git a/src/services/playercities/PlayerCity.java b/src/services/playercities/PlayerCity.java index 3dec16ca..4a5f7941 100644 --- a/src/services/playercities/PlayerCity.java +++ b/src/services/playercities/PlayerCity.java @@ -59,6 +59,8 @@ public class PlayerCity { public static int SHUTTLEPORT = 6; + private String cityName = ""; + private int cityID = -1; private Point3D cityCenterPosition = new Point3D(0,0,0); private int cityRadius = 0; private int cityRank = 0; @@ -86,7 +88,7 @@ public class PlayerCity { public PlayerCity(){} - public PlayerCity(CreatureObject founder){ + public PlayerCity(CreatureObject founder, int cityID){ setCityCenterPosition(founder.getPosition()); setCityRadius(150); @@ -94,7 +96,8 @@ public class PlayerCity { setMaintenanceFee(1); setNextCityUpdate(foundationTime+cityUpdateSpan); setNextElectionDate(foundationTime+legislationPeriod); - citizens.add(founder.getObjectID()); + citizens.add(founder.getObjectID()); + this.cityID = cityID; } public void handleGrantZoning() { @@ -121,6 +124,7 @@ public class PlayerCity { public void processCityUpdate() { // has something changed? + System.out.println("processCityUpdate"); int censusResult = citizens.size(); if (censusResult<5){ setRank(DESERTED); // City is technically not a city anymore @@ -246,6 +250,7 @@ public class PlayerCity { public void setSpecialisation(int specialisation) { this.specialisation = specialisation; + sendSpecUpdateMail(specialisation); } public long getMayorID() { @@ -409,4 +414,27 @@ public class PlayerCity { this.founded = founded; } + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName; + } + + public int getCityID() { + return cityID; + } + + public void setCityID(int cityID) { + this.cityID = cityID; + } + + public void sendSpecUpdateMail(int cityID) { + this.cityID = cityID; + // city_version_update_subject_4 + // city_version_update_body_4 + } + + } diff --git a/src/services/playercities/PlayerCityService.java b/src/services/playercities/PlayerCityService.java index 69c3c5cb..fd91ff14 100644 --- a/src/services/playercities/PlayerCityService.java +++ b/src/services/playercities/PlayerCityService.java @@ -28,6 +28,14 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import resources.common.OutOfBand; +import resources.common.RGB; +import resources.objects.building.BuildingObject; +import resources.objects.creature.CreatureObject; +import services.sui.SUIWindow; +import services.sui.SUIWindow.SUICallback; +import services.sui.SUIWindow.Trigger; +import engine.resources.objects.SWGObject; import engine.resources.service.INetworkDispatch; import engine.resources.service.INetworkRemoteEvent; import main.NGECore; @@ -38,6 +46,7 @@ public class PlayerCityService implements INetworkDispatch { private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); private Vector playerCities = new Vector(); + private int cityID = 0; // This must be persisted or handled via objectservice somehow public PlayerCityService(NGECore core) { this.core = core; @@ -70,6 +79,47 @@ public class PlayerCityService implements INetworkDispatch { playerCities.removeAll(Collections.singleton(null)); } } + + public PlayerCity addNewPlayerCity(CreatureObject founder) { + PlayerCity newCity = null; + synchronized(playerCities){ + newCity = new PlayerCity(founder,cityID++); + playerCities.add(newCity); + } + newCitySUI1(founder,newCity); + return newCity; + } + + public PlayerCity getPlayerCity(CreatureObject citizen) { + PlayerCity foundCity = null; + synchronized(playerCities){ + for (PlayerCity city : playerCities){ + int id = (int)citizen.getAttachment("residentCity"); + if (city.getCityID()==id){ + foundCity = city; + } + } + } + return foundCity; + } + + public void newCitySUI1(CreatureObject citizen, final PlayerCity newCity) { + final SUIWindow window = core.suiService.createSUIWindow("Script.messageBox", citizen, citizen, 0); + window.setProperty("bg.caption.lblTitle:Text", "@city/city:rank0"); + window.setProperty("Prompt.lblPrompt:Text", "@city/city:new_city_body"); + window.setProperty("btnOk:visible", "True"); + window.setProperty("btnCancel:visible", "True"); + window.setProperty("btnOk:Text", "@ok"); + window.setProperty("btnCancel:Text", "@cancel"); + Vector returnList = new Vector(); + window.addHandler(0, "", Trigger.TRIGGER_OK, returnList, new SUICallback() { + @Override + public void process(SWGObject owner, int eventType, Vector returnList) { + core.suiService.closeSUIWindow(owner, 0); + } + }); + core.suiService.openSUIWindow(window); + } @Override public void insertOpcodes(Map arg0,