diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java index edf1b54..98ccbc8 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java @@ -54,7 +54,8 @@ public class Requirement extends JSONElement { spentGold, consumedBonemeals, hasActorCondition, - factionScore + factionScore, + random } public enum SkillID { @@ -104,9 +105,21 @@ public class Requirement extends JSONElement { @Override public String getDesc() { + String obj_id = ""; + if (required_obj_id != null) + { + obj_id = required_obj_id; + if (type != null && type == RequirementType.random){ + obj_id = " Chance " + obj_id + (required_obj_id.contains("/") ? "" : "%"); + } + else { + obj_id += ":"; + } + } + return ((negated != null && negated) ? "NOT " : "") +(type == null ? "" : type.toString()+":") - +(required_obj_id == null ? "" : required_obj_id+":") + +obj_id +(required_value == null ? "" : required_value.toString()); } @@ -173,6 +186,7 @@ public class Requirement extends JSONElement { case spentGold: case timerElapsed: case factionScore: + case random: break; } if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent); @@ -225,6 +239,12 @@ public class Requirement extends JSONElement { required_obj_id = null; required_value = null; } + + if(destType==RequirementType.random) + { + required_obj_id = "50/100"; + } + type = destType; } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java index fd09e6d..07560c7 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java @@ -123,7 +123,7 @@ public class DialogueEditor extends JSONElementEditor { private MyComboBox requirementObj; @SuppressWarnings("rawtypes") private JComboBox requirementSkill; - private JTextField requirementObjId; + private JComponent requirementObjId; private JComponent requirementValue; private BooleanBasedCheckBox requirementNegated; @@ -722,6 +722,11 @@ public class DialogueEditor extends JSONElementEditor { requirementObjId = null; requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); break; + case random: + requirementObj = null; + requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener); + requirementValue = null; + break; case hasActorCondition: requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObjId = null; diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java index 71b87fb..e644c17 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DroplistEditor.java @@ -221,9 +221,9 @@ public class DroplistEditor extends JSONElementEditor { Droplist.DroppedItem di = (Droplist.DroppedItem)value; if (di.item != null) { label.setIcon(new ImageIcon(di.item.getIcon())); - label.setText(di.chance+(di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc()); + label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item.getDesc()); } else if (!isNull(di)) { - label.setText(di.chance+(di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id); + label.setText(di.chance+(di.chance != null && di.chance.contains("/") ? "" : "%")+" to get "+di.quantity_min+"-"+di.quantity_max+" "+di.item_id); } else { label.setText("New, undefined, dropped item."); } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java index edf68a8..afabd11 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java @@ -173,7 +173,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe private JPanel requirementParamsPane; @SuppressWarnings("rawtypes") private JComboBox requirementObj; - private JTextField requirementObjId; + private JComponent requirementObjId; private JComponent requirementValue; private BooleanBasedCheckBox requirementNegated; @@ -675,6 +675,11 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe requirementObjId = null; requirementValue = addIntegerField(pane, "Quantity: ", requirement.required_value, false, writable, listener); break; + case random: + requirementObj = null; + requirementObjId = addChanceField(pane, "Chance: ", requirement.required_obj_id, "50/100", writable, listener); + requirementValue = null; + break; case hasActorCondition: requirementObj = addActorConditionBox(pane, project, "Actor Condition: ", (ActorCondition) requirement.required_obj, writable, listener); requirementObjId = null; @@ -2318,11 +2323,14 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe if (!activeReplacements.containsKey(area)) { activeReplacements.put(area, true); } - for (ReplaceArea.Replacement repl : area.replacements) { - if (replacementsForLayer.get(repl.sourceLayer) == null) { - replacementsForLayer.put(repl.sourceLayer, new ArrayList()); - } - replacementsForLayer.get(repl.sourceLayer).add(area); + + if(area.replacements != null) { + for (ReplaceArea.Replacement repl : area.replacements) { + if (replacementsForLayer.get(repl.sourceLayer) == null) { + replacementsForLayer.put(repl.sourceLayer, new ArrayList()); + } + replacementsForLayer.get(repl.sourceLayer).add(area); + } } } }