From 08ba6b0c1be2dd2369e6df0afbf5ba7b4730d3d6 Mon Sep 17 00:00:00 2001 From: Treeku Date: Mon, 12 May 2014 17:40:51 +0100 Subject: [PATCH] Applied grantLevel reward fix to giveExperience --- .../objects/intangible/IntangibleObject.java | 12 +- src/services/PlayerService.java | 453 +++++++++--------- 2 files changed, 231 insertions(+), 234 deletions(-) diff --git a/src/resources/objects/intangible/IntangibleObject.java b/src/resources/objects/intangible/IntangibleObject.java index caa7c265..0e1d788f 100644 --- a/src/resources/objects/intangible/IntangibleObject.java +++ b/src/resources/objects/intangible/IntangibleObject.java @@ -80,19 +80,11 @@ public class IntangibleObject extends SWGObject implements Serializable { } public int getGenericInt() { - synchronized(objectMutex) { - return (int) getBaseline(3).get("genericInt"); - } + return (int) getBaseline(3).get("genericInt"); } public void setGenericInt(int genericInt) { - IoBuffer buffer; - - synchronized(objectMutex) { - buffer = getBaseline(3).set("genericInt", genericInt); - } - - notifyClients(buffer, true); + notifyClients(getBaseline(3).set("genericInt", genericInt), true); } public void incrementGenericInt(int increase) { diff --git a/src/services/PlayerService.java b/src/services/PlayerService.java index 74b690ec..37f6757e 100644 --- a/src/services/PlayerService.java +++ b/src/services/PlayerService.java @@ -576,26 +576,30 @@ public class PlayerService implements INetworkDispatch { String xpType = ((profession.contains("entertainer")) ? "entertainer" : ((profession.contains("trader")) ? "crafting" : "combat_general")); int experience = player.getXp(xpType); - // Remove old profession abilties - resetLevel wont due because resetLevel grants basic specials for level 1 - try - { + // Remove old profession abilties + + try { String[] skills; DatatableVisitor skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); - for (int s = 0; s < skillTemplate.getRowCount(); s++) - { + for (int s = 0; s < skillTemplate.getRowCount(); s++) { if (skillTemplate.getObject(s, 0) != null) { - if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) - { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { skills = ((String) skillTemplate.getObject(s, 4)).split(","); - for (String skill : skills) core.skillService.removeSkill(creature, skill); - + + for (String skill : skills) { + core.skillService.removeSkill(creature, skill); + } + break; } } } - } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + core.skillService.resetExpertise(creature); player.setProfession(profession); @@ -625,28 +629,27 @@ public class PlayerService implements INetworkDispatch { public void resetLevel(CreatureObject creature) { PlayerObject player = (PlayerObject) creature.getSlottedObject("ghost"); - try - { - for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { - - SWGObject equipment = core.objectService.getObject(equipmentId); - - if (equipment == null) { - continue; - } - - switch (equipment.getTemplate()) { - case "object/tangible/inventory/shared_character_inventory.iff": - case "object/tangible/inventory/shared_appearance_inventory.iff": - case "object/tangible/datapad/shared_character_datapad.iff": - case "object/tangible/bank/shared_character_bank.iff": - case "object/tangible/mission_bag/shared_mission_bag.iff": - case "object/weapon/creature/shared_creature_default_weapon.iff": - continue; - default: - core.equipmentService.unequip(creature, equipment); - } + try { + for (Long equipmentId : new ArrayList(creature.getEquipmentList())) { + + SWGObject equipment = core.objectService.getObject(equipmentId); + + if (equipment == null) { + continue; } + + switch (equipment.getTemplate()) { + case "object/tangible/inventory/shared_character_inventory.iff": + case "object/tangible/inventory/shared_appearance_inventory.iff": + case "object/tangible/datapad/shared_character_datapad.iff": + case "object/tangible/bank/shared_character_bank.iff": + case "object/tangible/mission_bag/shared_mission_bag.iff": + case "object/weapon/creature/shared_creature_default_weapon.iff": + continue; + default: + core.equipmentService.unequip(creature, equipment); + } + } } catch (Exception e) { e.printStackTrace(); } @@ -789,18 +792,20 @@ public class PlayerService implements INetworkDispatch { int arrayLength = items.length; - if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { arrayLength = wookieeItems.length; - else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { arrayLength = ithorianItems.length; - + } + for (int n = 0; n < arrayLength; n++) { String item = items[n]; - if (creature.getStfName().contains("wookiee")) + if (creature.getStfName().contains("wookiee")) { item = wookieeItems[n]; - else if (creature.getStfName().contains("ithorian")) + } else if (creature.getStfName().contains("ithorian")) { item = ithorianItems[n]; + } try { String customServerTemplate = null; @@ -820,8 +825,7 @@ public class PlayerService implements INetworkDispatch { } catch (Exception e) { e.printStackTrace(); } - } - + } } } } @@ -897,194 +901,195 @@ public class PlayerService implements INetworkDispatch { return; } - //synchronized(objectMutex) { - try { - experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); - - // Cannot gain more than half of the XP needed for the next level in one go - // Do check - - int experienceBonus = creature.getSkillModBase("flush_with_success"); - - experience += ((experience * experienceBonus) / 100); - - // 1. Add the experience. - if (experience > 0 && !creature.isStationary()) { - creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); - } - - String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); - - if (player.getXpList().containsKey(xpType)) { - experience += player.getXp(xpType); - } - - player.setXp(xpType, experience); - - // 2. See if they need to level up. - for (int i = 0; i < experienceTable.getRowCount(); i++) { - if (experienceTable.getObject(i, 0) != null) { - if (experience >= ((Integer) experienceTable.getObject(i, 1))) { - if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { - creature.playEffectObject("clienteffect/level_granted.cef", ""); - creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); - creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); - core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); - - // 3. Add the relevant health/action and expertise points. - float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); - float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); - float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); - float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); - float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); - float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); - float health = 100; - float action = 75; - - int healthGranted = ((Integer) experienceTable.getObject(i, 4)); - - if (luck >= 1) { - core.skillModService.addSkillMod(creature, "luck", (int) luck); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_0", (int) luck), DisplayType.Broadcast); - } - - if (precision >= 1) { - core.skillModService.addSkillMod(creature, "precision", (int) precision); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_1", (int) precision), DisplayType.Broadcast); - } - - if (strength >= 1) { - core.skillModService.addSkillMod(creature, "strength", (int) strength); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_2", (int) strength), DisplayType.Broadcast); - } - - if (constitution >= 1) { - core.skillModService.addSkillMod(creature, "constitution", (int) constitution); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_3", (int) constitution), DisplayType.Broadcast); - } - - if (stamina >= 1) { - core.skillModService.addSkillMod(creature, "stamina", (int) stamina); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_4", (int) stamina), DisplayType.Broadcast); - } - - if (agility >= 1) { - core.skillModService.addSkillMod(creature, "agility", (int) agility); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_5", (int) agility), DisplayType.Broadcast); - } - - if (health >= 1) { - creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); - creature.setHealth(creature.getMaxHealth()); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2))), DisplayType.Broadcast); - } - - if (action >= 1) { - creature.setMaxAction((creature.getMaxAction() + (int) action)); - creature.setAction(creature.getMaxAction()); - creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2))), DisplayType.Broadcast); - } - - creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); - // -> Expertise point added automatically by client - creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:level_up"), 2.5f, new RGB(100, 149, 237), 0, true); - - // 4. Adds roadmap rewards - int level = creature.getLevel(); - - if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { - int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); - String roadmapSkillName = ""; - DatatableVisitor skillTemplate, roadmap; - - try { - skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); - - for (int s = 0; s < skillTemplate.getRowCount(); s++) { - if (skillTemplate.getObject(s, 0) != null) { - if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { - String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); - roadmapSkillName = skillArray[skill]; - break; - } - } - } - - creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); - creature.playEffectObject("clienteffect/skill_granted.cef", ""); - creature.playMusic("sound/music_acq_bountyhunter.snd"); - core.skillService.addSkill(creature, roadmapSkillName); - player.setProfessionWheelPosition(roadmapSkillName); - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - - try { - roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); - - Vector rewards = new Vector(); - - for (int s = 0; s < roadmap.getRowCount(); s++) { - if (roadmap.getObject(s, 0) != null) { - if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { - String[] apts = ((String) roadmap.getObject(s, 2)).split(","); - String[] items = ((String) roadmap.getObject(s, 4)).split(","); - String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); - String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); - - for (int n = 0; n < items.length; n++) { - String item = items[n]; - - if (wookieeItems[0].length() > 0 && creature.getStfName().contains("wookiee")) { - item = wookieeItems[n]; - } else if (ithorianItems[0].length() > 0 && creature.getStfName().contains("ithorian")) { - item = ithorianItems[n]; - } - - try { - String customServerTemplate = null; - - if (item.contains("/")) { - item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); - } else { - customServerTemplate = item; - item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); - } - - if (item != null && item != "") { - SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); - rewards.add(itemObj); - } else { - //System.out.println("Can't find template: " + item); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - } - } - } - - if (rewards != null && !rewards.isEmpty()) { - giveItems(creature, rewards); - } - - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } - } - } - } catch (InstantiationException | IllegalAccessException e) { - e.printStackTrace(); + try { + experienceTable = ClientFileManager.loadFile("datatables/player/player_level.iff", DatatableVisitor.class); + + // Cannot gain more than half of the XP needed for the next level in one go + // TODO: Do check + + int experienceBonus = creature.getSkillModBase("flush_with_success"); + + experience += ((experience * experienceBonus) / 100); + + // 1. Add the experience. + if (experience > 0 && !creature.isStationary()) { + creature.showFlyText(OutOfBand.ProsePackage("@base_player:prose_flytext_xp", experience), 2.5f, new RGB(180, 60, 240), 1, true); } - if(player.getProfession().equals("entertainer_1a") && creature.getLevel() == (short) 90 && creature.getEntertainerExperience() != null) - creature.getEntertainerExperience().cancel(true); - //} + String xpType = ((player.getProfession().contains("entertainer")) ? "entertainer" : ((player.getProfession().contains("trader")) ? "crafting" : "combat_general")); + + if (player.getXpList().containsKey(xpType)) { + experience += player.getXp(xpType); + } + + player.setXp(xpType, experience); + + // 2. See if they need to level up. + for (int i = 0; i < experienceTable.getRowCount(); i++) { + if (experienceTable.getObject(i, 0) != null) { + if (experience >= ((Integer) experienceTable.getObject(i, 1))) { + if (creature.getLevel() < (Integer) experienceTable.getObject(i, 0)) { + creature.playEffectObject("clienteffect/level_granted.cef", ""); + creature.getClient().getSession().write((new ClientMfdStatusUpdateMessage((float) ((creature.getLevel() == 90) ? 90 : (creature.getLevel() + 1)), "/GroundHUD.MFDStatus.vsp.role.targetLevel")).serialize()); + creature.setLevel(((Integer) experienceTable.getObject(i, 0)).shortValue()); + core.scriptService.callScript("scripts/collections/", "master_" + player.getProfession(), "addMasterBadge", core, creature); + + // 3. Add the relevant health/action and expertise points. + float luck = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getLuck").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getLuck").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("luck"))); + float precision = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getPrecision").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getPrecision").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("precision"))); + float strength = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStrength").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStrength").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("strength"))); + float constitution = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getConstitution").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getConstitution").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("constitution"))); + float stamina = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getStamina").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getStamina").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("stamina"))); + float agility = (((((float) (core.scriptService.getMethod("scripts/roadmap/", player.getProfession(), "getAgility").__call__().asInt()) + (core.scriptService.getMethod("scripts/roadmap/", creature.getStfName(), "getAgility").__call__().asInt())) / ((float) 90)) * ((float) creature.getLevel())) - ((float) creature.getSkillModBase("agility"))); + float health = 100; + float action = 75; + + int healthGranted = ((Integer) experienceTable.getObject(i, 4)); + + if (luck >= 1) { + core.skillModService.addSkillMod(creature, "luck", (int) luck); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_0", (int) luck), DisplayType.Broadcast); + } + + if (precision >= 1) { + core.skillModService.addSkillMod(creature, "precision", (int) precision); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_1", (int) precision), DisplayType.Broadcast); + } + + if (strength >= 1) { + core.skillModService.addSkillMod(creature, "strength", (int) strength); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_2", (int) strength), DisplayType.Broadcast); + } + + if (constitution >= 1) { + core.skillModService.addSkillMod(creature, "constitution", (int) constitution); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_3", (int) constitution), DisplayType.Broadcast); + } + + if (stamina >= 1) { + core.skillModService.addSkillMod(creature, "stamina", (int) stamina); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_4", (int) stamina), DisplayType.Broadcast); + } + + if (agility >= 1) { + core.skillModService.addSkillMod(creature, "agility", (int) agility); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_5", (int) agility), DisplayType.Broadcast); + } + + if (health >= 1) { + creature.setMaxHealth((creature.getMaxHealth() + (int) health + (healthGranted - creature.getGrantedHealth()))); + creature.setHealth(creature.getMaxHealth()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_6", (((int) health) + (((int) constitution) * 8) + (((int) stamina) * 2))), DisplayType.Broadcast); + } + + if (action >= 1) { + creature.setMaxAction((creature.getMaxAction() + (int) action)); + creature.setAction(creature.getMaxAction()); + creature.sendSystemMessage(OutOfBand.ProsePackage("@spam:level_up_stat_gain_7", (((int) action) + (((int) stamina) * 8) + (((int) constitution) * 2))), DisplayType.Broadcast); + } + + creature.setGrantedHealth(((Integer) experienceTable.getObject(i, 4))); + // -> Expertise point added automatically by client + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:level_up"), 2.5f, new RGB(100, 149, 237), 0, true); + + // 4. Adds roadmap rewards + int level = creature.getLevel(); + + if ((level == 4 || level == 7 || level == 10) || ((level > 10) && (((creature.getLevel() - 10) % 4) == 0))) { + int skill = ((level <= 10) ? ((level - 1) / 3) : ((((level - 10) / 4)) + 3)); + String roadmapSkillName = ""; + DatatableVisitor skillTemplate, roadmap; + + try { + skillTemplate = ClientFileManager.loadFile("datatables/skill_template/skill_template.iff", DatatableVisitor.class); + + for (int s = 0; s < skillTemplate.getRowCount(); s++) { + if (skillTemplate.getObject(s, 0) != null) { + if (((String) skillTemplate.getObject(s, 0)).equals(player.getProfession())) { + String[] skillArray = ((String) skillTemplate.getObject(s, 4)).split(","); + roadmapSkillName = skillArray[skill]; + break; + } + } + } + + creature.showFlyText(OutOfBand.ProsePackage("@cbt_spam:skill_up"), 2.5f, new RGB(154, 205, 50), 0, true); + creature.playEffectObject("clienteffect/skill_granted.cef", ""); + creature.playMusic("sound/music_acq_bountyhunter.snd"); + core.skillService.addSkill(creature, roadmapSkillName); + player.setProfessionWheelPosition(roadmapSkillName); + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + + try { + roadmap = ClientFileManager.loadFile("datatables/roadmap/item_rewards.iff", DatatableVisitor.class); + + Vector rewards = new Vector(); + + for (int s = 0; s < roadmap.getRowCount(); s++) { + if (roadmap.getObject(s, 0) != null) { + if (((String) roadmap.getObject(s, 1)).equals(roadmapSkillName)) { + String[] apts = ((String) roadmap.getObject(s, 2)).split(","); + String[] items = ((String) roadmap.getObject(s, 4)).split(","); + String[] wookieeItems = ((String) roadmap.getObject(s, 5)).split(","); + String[] ithorianItems = ((String) roadmap.getObject(s, 6)).split(","); + + int arrayLength = items.length; + + if (wookieeItems.length > 0 && creature.getStfName().contains("wookiee")) { + arrayLength = wookieeItems.length; + } else if (ithorianItems.length > 0 && creature.getStfName().contains("ithorian")) { + arrayLength = ithorianItems.length; + } + + for (int n = 0; n < arrayLength; n++) { + String item = items[n]; + + if (creature.getStfName().contains("wookiee")) { + item = wookieeItems[n]; + } else if (creature.getStfName().contains("ithorian")) { + item = ithorianItems[n]; + } + + try { + String customServerTemplate = null; + + if (item.contains("/")) { + item = (item.substring(0, (item.lastIndexOf("/") + 1)) + "shared_" + item.substring((item.lastIndexOf("/") + 1))); + } else { + customServerTemplate = item; + item = core.scriptService.callScript("scripts/roadmap/", player.getProfession(), "getRewards", item).asString(); + } + + if (item != null && item != "") { + SWGObject itemObj = core.objectService.createObject(item, 0, creature.getPlanet(), new Point3D(0, 0, 0), new Quaternion(1, 0, 0, 0), customServerTemplate); + } else { + //System.out.println("Can't find template: " + item); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + } + } + } + + if (rewards != null && !rewards.isEmpty()) { + giveItems(creature, rewards); + } + + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } + } + } + } + } + } + } catch (InstantiationException | IllegalAccessException e) { + e.printStackTrace(); + } } public void addPlayerTitle(PlayerObject player, String title) {