diff --git a/resources/conversations.json b/resources/conversations.json index 500a8da..b5d0e3d 100644 --- a/resources/conversations.json +++ b/resources/conversations.json @@ -20,8 +20,7 @@ "class_name" : "ItemEvent", "properties" : ["1", "1"] } - ], - "target" : 1 + ] }, { "__comment__" : "This is the second option.", @@ -92,7 +91,6 @@ "options" : [ { - "__comment__" : "This is the first option.", "menu_text" : "I'd to set a flag", "events" : [ @@ -104,7 +102,9 @@ "target" : -1 }, { - "__comment__" : "This is the second option.", + "menu_text" : "Bye" + }, + { "menu_text" : "I'd like to learn a new Ability.", "events" : [ @@ -116,12 +116,11 @@ "target" : -1 }, { - "__comment__" : "This is the second option.", "menu_text" : "Go back to the start.", - "events" : - [ - ], "target" : 0 + }, + { + "menu_text" : "Exit Conversation." } ] } diff --git a/resources/items.json b/resources/items.json index edd427b..e760d69 100644 --- a/resources/items.json +++ b/resources/items.json @@ -234,6 +234,13 @@ ], "combat_effects" : [] + }, + { + "type" : "equipment", + "name" : "Wedding Ring", + "description": "Useless, but better not be caught without it", + "equipment_type" : "RING", + "id" : 18 } ] } \ No newline at end of file diff --git a/src/main/java/txengine/io/loaders/ConversationLoader.java b/src/main/java/txengine/io/loaders/ConversationLoader.java index 74cf0c9..8d199f4 100644 --- a/src/main/java/txengine/io/loaders/ConversationLoader.java +++ b/src/main/java/txengine/io/loaders/ConversationLoader.java @@ -1,5 +1,6 @@ package txengine.io.loaders; +import org.json.simple.JSONValue; import txengine.io.Load; import txengine.io.LoadUtils; import txengine.io.Loader; @@ -21,6 +22,8 @@ import java.util.Iterator; import java.util.List; +import static txengine.io.LoadUtils.optional; + public class ConversationLoader extends Loader { @@ -82,9 +85,9 @@ private ConversationModule parseModule(JSONObject rawModule) { for (int i = 0; i < width; i++) { JSONObject rawOption = (JSONObject) ((JSONArray) rawModule.get("options")).get(i); options[i] = LoadUtils.asString(rawOption, "menu_text"); - events[i] = new Event[((JSONArray) rawOption.get("events")).size()]; - events[i] = LoadUtils.parseEvents((JSONArray) rawOption.get("events")).toArray(new Event[0]); - targets[i] = LoadUtils.asInt(rawOption, "target"); + events[i] = new Event[((JSONArray) optional(rawOption,"events",JSONArray.class, new JSONArray())).size()]; + events[i] = LoadUtils.parseEvents( (JSONArray) optional(rawOption,"events",JSONArray.class, new JSONArray())).toArray(new Event[0]); + targets[i] = optional(rawOption, "target", Long.class, -1L ).intValue(); } return new ConversationModule(id, npcText, options, events, targets); diff --git a/src/main/java/txengine/io/loaders/ItemLoader.java b/src/main/java/txengine/io/loaders/ItemLoader.java index 3ef4652..39bf715 100644 --- a/src/main/java/txengine/io/loaders/ItemLoader.java +++ b/src/main/java/txengine/io/loaders/ItemLoader.java @@ -1,6 +1,5 @@ package txengine.io.loaders; -import txengine.io.LoadUtils; import txengine.io.Loader; import txengine.systems.integration.Requirement; import txengine.systems.combat.CombatEngine; @@ -22,6 +21,8 @@ import java.io.IOException; import java.util.*; +import static txengine.io.LoadUtils.*; + public class ItemLoader extends Loader { @Override @@ -56,7 +57,7 @@ public HashMap load(File file) { // Loop through the item JSON objects while (iterator.hasNext()) { JSONObject rawItem = iterator.next(); - String itemType = (String) rawItem.get("type"); + String itemType = asString(rawItem,"type"); switch (itemType) { case "item": @@ -99,11 +100,11 @@ public HashMap load(File file) { private Consumable loadConsumable(JSONObject rawItem) { // Get standard values - String name = (String) rawItem.get("name"); - String desc = (String) rawItem.get("description"); - int id = ((Long) rawItem.get("id")).intValue(); - int value = ((Long) rawItem.get("value")).intValue(); - int maxStacks = ((Long) rawItem.get("maxStacks")).intValue(); + String name = asString(rawItem,"name"); + String desc = asString(rawItem,"description"); + int id = asInt(rawItem, "id"); + int value = optional(rawItem, "value", Long.class, 0L ).intValue(); + int maxStacks = optional(rawItem, "maxStacks", Long.class, 10L ).intValue(); // Begin loading effects ArrayList effects = new ArrayList<>(); // The list that will hold the effects @@ -128,39 +129,41 @@ private Consumable loadConsumable(JSONObject rawItem) { } private Item loadItem(JSONObject rawItem) { - String name = (String) rawItem.get("name"); - String desc = (String) rawItem.get("description"); - int id = ((Long) rawItem.get("id")).intValue(); - int value = ((Long) rawItem.get("value")).intValue(); - int maxStacks = ((Long) rawItem.get("maxStacks")).intValue(); + String name = asString(rawItem,"name"); + String desc = asString(rawItem,"description"); + int id = asInt(rawItem, "id"); + int value = optional(rawItem, "value", Long.class, 0L ).intValue(); + int maxStacks = optional(rawItem, "maxStacks", Long.class, 1L ).intValue(); return new Item(name, desc, id, value, maxStacks); } private Equipment loadEquipment(JSONObject rawItem) { // Get standard values - String name = (String) rawItem.get("name"); - String desc = (String) rawItem.get("description"); - int id = ((Long) rawItem.get("id")).intValue(); - int value = ((Long) rawItem.get("value")).intValue(); - int maxStacks = ((Long) rawItem.get("maxStacks")).intValue(); + String name = asString(rawItem,"name"); + String desc = asString(rawItem,"description"); + int id = asInt(rawItem, "id"); + int value = optional(rawItem, "value", Long.class, 0L ).intValue(); + int maxStacks = optional(rawItem, "maxStacks", Long.class, 1L ).intValue(); // Load Equipment-specific fields - Equipment.EquipmentType type = Equipment.EquipmentType.valueOf((String) rawItem.get("equipment_type")); - int damage = ((Long) rawItem.get("damage")).intValue(); - int defense = ((Long) rawItem.get("defense")).intValue(); + Equipment.EquipmentType type = Equipment.EquipmentType.valueOf(asString(rawItem,"equipment_type")); + int damage = optional(rawItem, "damage", Long.class, 0L ).intValue(); + int defense = optional(rawItem, "defense", Long.class, 0L ).intValue(); // Begin loading effects - ArrayList> effects = LoadUtils.parseCombatEffects((JSONArray) rawItem.get("combat_effects")); + ArrayList> effects = parseCombatEffects( optional(rawItem,"combat_effects",JSONArray.class, new JSONArray())); // Load tags - List> tagResistances = LoadUtils.parseStringFloatPairs((JSONArray) rawItem.get("tag_resistances")); + List> tagResistances = parseStringFloatPairs( optional(rawItem,"tag_resistances",JSONArray.class, new JSONArray())); // Load Requirements - List requirements = LoadUtils.parseRequirements((JSONArray) rawItem.get("requirements")); + List requirements = parseRequirements( optional(rawItem,"requirements",JSONArray.class, new JSONArray())); - List abilityNames = List.of(LoadUtils.getStringArray((JSONArray) rawItem.get("abilities"))); + //Load Abilities + List abilityNames = List.of(getStringArray( optional(rawItem,"abilities",JSONArray.class, new JSONArray()))); + //System.out.println(name + " " + desc + " " + id + " " + value + " " + type); return new Equipment(name, desc, id, value, maxStacks, effects, tagResistances, requirements, abilityNames, type, damage, defense); } } diff --git a/src/main/java/txengine/main/Manager.java b/src/main/java/txengine/main/Manager.java index 4c9a770..e3adfcf 100644 --- a/src/main/java/txengine/main/Manager.java +++ b/src/main/java/txengine/main/Manager.java @@ -127,6 +127,9 @@ private static void initDebug() { player.getAbilityManager().learn("Smack"); player.getAbilityManager().learn("Kidnap"); player.getAbilityManager().learn("Spit"); + //player.getAbilityManager().learn("Meditate"); + //player.getAbilityManager().learn("Illusory Weapon"); + //player.getAbilityManager().learn("Accelerate"); player.getAbilityManager().learn("Bomb-Threat"); player.getAbilityManager().learn("Blast"); @@ -134,6 +137,7 @@ private static void initDebug() { player.getInventory().addItem(16); player.getInventory().addItem(17); + player.getInventory().addItem(18); } } diff --git a/src/main/java/txengine/systems/combat/combatEffect/combatEffects/EquipEffect.java b/src/main/java/txengine/systems/combat/combatEffect/combatEffects/EquipEffect.java new file mode 100644 index 0000000..8af9b2e --- /dev/null +++ b/src/main/java/txengine/systems/combat/combatEffect/combatEffects/EquipEffect.java @@ -0,0 +1,51 @@ +package txengine.systems.combat.combatEffect.combatEffects; + +import txengine.main.Manager; +import txengine.systems.combat.CombatEntity; +import txengine.systems.combat.combatEffect.CombatEffect; +import txengine.systems.item.Equipment; +import txengine.systems.item.Item; + +public class EquipEffect extends CombatEffect { + + public EquipEffect() { + super.properties = new String[]{"1"}; + setDuration(1); + } + + public EquipEffect(int id) { + super(new String[]{""+id}); + setDuration(1); + } + + public EquipEffect(String[] properties) { + super(properties); + setDuration(1); + } + + public EquipEffect(String[] properties, int duration) { + super(properties, duration); + } + + @Override + public void perform(CombatEntity entity) { + if(super.getDuration() == 1){ + String slotName = super.properties[1]; + + Equipment.EquipmentType slot = Equipment.EquipmentType.valueOf(slotName); + + entity.getEquipmentManager().unequip(slot); + entity.getEquipmentManager().equip(Integer.parseInt(super.properties[0])); + /* + int id = Integer.parseInt(super.properties[0]); + if( !entity.getEquipmentManager().equip(id) ){ //Equip item at id + Item i = Manager.itemHashMap.get(id); + if( i instanceof Equipment ){ //If equip fails, unequip item in slot + Equipment.EquipmentType type = ((Equipment) i).getType(); + entity.getEquipmentManager().unequip(type); + } + } + */ + } + } +}