From c9afd33e7c94b2420fd26bf43b14f4b717fdb290 Mon Sep 17 00:00:00 2001 From: dennise1975 Date: Thu, 3 Mar 2016 20:59:59 -0600 Subject: [PATCH] Profession Starter Clothing: Added UniformBoxService and ItemDatabase, updated radials and CharacterCreationService --- scripts/radial/object/usable.js | 7 + serverdata/radial/radials.sdb | 3 +- src/resources/server_info/ItemDatabase.java | 52 ++++++++ src/services/galaxy/GalacticManager.java | 4 + src/services/objects/UniformBoxService.java | 124 ++++++++++++++++++ .../player/CharacterCreationService.java | 5 +- 6 files changed, 193 insertions(+), 2 deletions(-) create mode 100644 scripts/radial/object/usable.js create mode 100644 src/resources/server_info/ItemDatabase.java create mode 100644 src/services/objects/UniformBoxService.java diff --git a/scripts/radial/object/usable.js b/scripts/radial/object/usable.js new file mode 100644 index 00000000..ba8dda4e --- /dev/null +++ b/scripts/radial/object/usable.js @@ -0,0 +1,7 @@ +function getOptions(options) { + options.add(new RadialOption(RadialItem.ITEM_USE)); + options.add(new RadialOption(RadialItem.EXAMINE)); +} + +function handleSelection(player, target, selection) { +} \ No newline at end of file diff --git a/serverdata/radial/radials.sdb b/serverdata/radial/radials.sdb index 2bb2841f..4fd08179 100644 --- a/serverdata/radial/radials.sdb +++ b/serverdata/radial/radials.sdb @@ -4,4 +4,5 @@ object/tangible/terminal/shared_terminal_bank.iff terminal/bank object/tangible/terminal/shared_terminal_bazaar.iff terminal/bazaar object/tangible/terminal/shared_terminal_travel.iff terminal/travel object/tangible/travel/ticket_collector/shared_ticket_collector.iff terminal/ticket_collector -object/tangible/travel/travel_ticket/base/shared_base_travel_ticket.iff terminal/ticket \ No newline at end of file +object/tangible/travel/travel_ticket/base/shared_base_travel_ticket.iff terminal/ticket +object/tangible/npe/shared_npe_uniform_box.iff object/usable diff --git a/src/resources/server_info/ItemDatabase.java b/src/resources/server_info/ItemDatabase.java new file mode 100644 index 00000000..419b7189 --- /dev/null +++ b/src/resources/server_info/ItemDatabase.java @@ -0,0 +1,52 @@ +package resources.server_info; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import resources.client_info.ClientFactory; + +public class ItemDatabase implements AutoCloseable{ + private static final String GET_IFF_TEMPLATE_SQL = "SELECT iff_template FROM master_item where item_name = ?"; + + private RelationalServerData database; + private PreparedStatement getIffTemplateStatement; + + public ItemDatabase() { + database = RelationalServerFactory.getServerData("items/master_item.db", "master_item"); + if (database == null) + throw new main.ProjectSWG.CoreException("Database master_item failed to load"); + + getIffTemplateStatement = database.prepareStatement(GET_IFF_TEMPLATE_SQL); + } + + + @Override + public void close() throws Exception { + try { + getIffTemplateStatement.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + database.close(); + } + + public String getIffTemplate(String item_name){ + + synchronized (getIffTemplateStatement) { + try{ + getIffTemplateStatement.setString(1, item_name); + + try (ResultSet set = getIffTemplateStatement.executeQuery()) { + if (set.next()){ + return ClientFactory.formatToSharedFile(set.getString(set.findColumn("iff_template"))); + } + } + }catch (SQLException e) { + e.printStackTrace(); + } + } + return ""; + } + +} diff --git a/src/services/galaxy/GalacticManager.java b/src/services/galaxy/GalacticManager.java index a05b5065..5e7a3a96 100644 --- a/src/services/galaxy/GalacticManager.java +++ b/src/services/galaxy/GalacticManager.java @@ -40,6 +40,7 @@ import services.CoreManager; import services.chat.ChatManager; import services.galaxy.travel.TravelService; import services.objects.ObjectManager; +import services.objects.UniformBoxService; import services.player.PlayerManager; public class GalacticManager extends Manager { @@ -49,6 +50,7 @@ public class GalacticManager extends Manager { private final GameManager gameManager; private final ChatManager chatManager; private final TravelService travelService; + private final UniformBoxService uniformBox; private final Map prevIntentMap; public GalacticManager() { @@ -57,6 +59,7 @@ public class GalacticManager extends Manager { gameManager = new GameManager(); chatManager = new ChatManager(); travelService = new TravelService(objectManager); + uniformBox = new UniformBoxService(objectManager); prevIntentMap = new Hashtable<>(); addChildService(objectManager); @@ -64,6 +67,7 @@ public class GalacticManager extends Manager { addChildService(gameManager); addChildService(chatManager); addChildService(travelService); + addChildService(uniformBox); registerForIntent(InboundPacketIntent.TYPE); registerForIntent(ConnectionOpenedIntent.TYPE); diff --git a/src/services/objects/UniformBoxService.java b/src/services/objects/UniformBoxService.java new file mode 100644 index 00000000..d3637816 --- /dev/null +++ b/src/services/objects/UniformBoxService.java @@ -0,0 +1,124 @@ +package services.objects; + + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; + +import intents.radial.RadialSelectionIntent; +import resources.control.Intent; +import resources.control.Service; +import resources.objects.SWGObject; +import resources.objects.creature.CreatureObject; +import resources.objects.player.PlayerObject; +import resources.player.Player; +import resources.server_info.ItemDatabase; +import resources.server_info.RelationalServerData; +import resources.server_info.RelationalServerFactory; + +public class UniformBoxService extends Service { + //TODO: Display loot box + + private final String uniformBoxTemplate = "object/tangible/npe/shared_npe_uniform_box.iff"; + private static final String GET_UNIFORMBOX_SQL = "SELECT * FROM npe_uniformbox where profession = ? AND race = ? AND (gender = ? OR gender = 3)"; + private final ObjectManager objectManager; + private RelationalServerData uniformBoxDatabase; + private PreparedStatement getUniformBoxStatement; + + + public UniformBoxService(ObjectManager objectManager){ + this.objectManager = objectManager; + + uniformBoxDatabase = RelationalServerFactory.getServerData("player/npe_uniformbox.db", "npe_uniformbox"); + if (uniformBoxDatabase == null) + throw new main.ProjectSWG.CoreException("Unable to load npe_uniformbox.sdb file for UniformBoxService"); + + getUniformBoxStatement = uniformBoxDatabase.prepareStatement(GET_UNIFORMBOX_SQL); + + registerForIntent(RadialSelectionIntent.TYPE); + } + + @Override + public void onIntentReceived(Intent i) { + if ((((RadialSelectionIntent) i).getTarget().getTemplate()).equals(uniformBoxTemplate)){ + processUseUniformBox(((RadialSelectionIntent) i).getPlayer()); + } + + } + + private void processUseUniformBox(Player player){ + CreatureObject creature = player.getCreatureObject(); + PlayerObject playerObj = creature.getPlayerObject(); + SWGObject ghost = player.getCreatureObject(); + SWGObject inventory = ghost.getSlottedObject("inventory"); + String profession = playerObj.getProfession().substring(0, playerObj.getProfession().lastIndexOf("_")); + String race = creature.getRace().toString().substring(0, creature.getRace().toString().indexOf("_")).toLowerCase(); + String gender = creature.getRace().toString().substring(creature.getRace().toString().lastIndexOf("_") + 1).toLowerCase(); + + destroyUniformBox(creature); + handleCreateItems(inventory, gender, profession, race); + + } + + private void handleCreateItems(SWGObject inventory, String playerGender, String profession, String race) { + String gender = getGenderValue(playerGender); + + try { + getUniformBoxStatement.setString(1, profession); + getUniformBoxStatement.setString(2, race); + getUniformBoxStatement.setString(3, gender); + + try (ResultSet set = getUniformBoxStatement.executeQuery()) { + if (set.next()){ + for (int i = 4; i <= 13; i++){ + if (!set.getObject(i).toString().isEmpty()){ + SWGObject item = objectManager.createObject(getItemIffTemplate(set.getObject(i).toString())); + item.moveToContainer(inventory); + } + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + private String getGenderValue(String gender){ + + switch (gender) { + + case "male": + return "1"; + case "female": + return "2"; + } + + return null; + } + + + private String getItemIffTemplate(String item_name){ + String template = ""; + + try (ItemDatabase db = new ItemDatabase()){ + template = db.getIffTemplate(item_name); + } catch (Exception e) { + e.printStackTrace(); + } + return template; + } + + private void destroyUniformBox(CreatureObject creature){ + Collection items = creature.getItemsByTemplate("inventory", uniformBoxTemplate); + + for (SWGObject item : items){ + if (item.getTemplate().equals(uniformBoxTemplate)){ + objectManager.destroyObject(item); + } + } + + } +} + + diff --git a/src/services/player/CharacterCreationService.java b/src/services/player/CharacterCreationService.java index f9260be6..ce1bd1dc 100644 --- a/src/services/player/CharacterCreationService.java +++ b/src/services/player/CharacterCreationService.java @@ -420,7 +420,10 @@ public class CharacterCreationService extends Service { item.moveToContainer(player, player); player.addEquipment(item); } - + + SWGObject inventory = player.getSlottedObject("inventory"); + SWGObject item = objManager.createObject("object/tangible/npe/shared_npe_uniform_box.iff"); + inventory.addObject(item); } private void loadProfTemplates() {