From 9654da02c2c3a682b8f49a3985c246158e04aca0 Mon Sep 17 00:00:00 2001 From: "Nut.andor" Date: Sat, 25 Oct 2025 23:00:00 +0200 Subject: [PATCH] New requirement "skillIncrease" to check if a skill increase for n levels is possible --- .../model/gamedata/Requirement.java | 4 +++- .../ui/gamedataeditors/DialogueEditor.java | 15 +++++++++++++-- .../rpg/atcontentstudio/ui/map/TMXMapEditor.java | 14 ++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java index 7bd1de9..26bfdbc 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java +++ b/src/com/gpl/rpg/atcontentstudio/model/gamedata/Requirement.java @@ -64,7 +64,8 @@ public class Requirement extends JSONElement { date, dateEquals, time, - timeEquals + timeEquals, + skillIncrease } public enum SkillID { @@ -166,6 +167,7 @@ public class Requirement extends JSONElement { case dateEquals: case time: case timeEquals: + case skillIncrease: break; } if (this.required_obj != null) this.required_obj.addBacklink((GameDataElement) this.parent); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java index 71044f0..21e06bd 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/gamedataeditors/DialogueEditor.java @@ -610,6 +610,17 @@ public class DialogueEditor extends JSONElementEditor { requirementObjId = addTextField(pane, "Time type HHMMSS:", requirement.required_obj_id, writable, listener); requirementValue = addIntegerField(pane, "Exact time value: ", requirement.required_value, true, writable, listener); break; + case skillIncrease: + skillId = null; + try { + skillId = requirement.required_obj_id == null ? null : Requirement.SkillID.valueOf(requirement.required_obj_id); + } catch (IllegalArgumentException e) { + } + requirementObj = null; + requirementSkill = addEnumValueBox(pane, "Skill ID:", Requirement.SkillID.values(), skillId, writable, listener); + requirementObjId = null;//addTextField(pane, "Skill ID:", requirement.required_obj_id, writable, listener); + requirementValue = addIntegerField(pane, "Level up: ", requirement.required_value, false, writable, listener); + break; } requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener); } @@ -843,7 +854,7 @@ public class DialogueEditor extends JSONElementEditor { if (req.required_obj.getIcon() != null) { label.setIcon(new ImageIcon(req.required_obj.getIcon())); } - } else if (req.type == Requirement.RequirementType.skillLevel) { + } else if (req.type == Requirement.RequirementType.skillLevel || req.type == Requirement.RequirementType.skillIncrease) { label.setIcon(new ImageIcon(DefaultIcons.getSkillIcon())); } else if (req.type == Requirement.RequirementType.spentGold) { label.setIcon(new ImageIcon(DefaultIcons.getGoldIcon())); @@ -1008,7 +1019,7 @@ public class DialogueEditor extends JSONElementEditor { selectedRequirement.required_obj.removeBacklink(dialogue); selectedRequirement.required_obj = null; } - if (selectedRequirement.type == Requirement.RequirementType.skillLevel) { + if (selectedRequirement.type == Requirement.RequirementType.skillLevel || selectedRequirement.type == Requirement.RequirementType.skillIncrease) { selectedRequirement.required_obj_id = value == null ? null : value.toString(); } requirementsListModel.itemChanged(selectedRequirement); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java index f83dd17..0f302e9 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java @@ -674,6 +674,16 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe requirementObjId = addTextField(pane, "Time type HHMMSS:", requirement.required_obj_id, writable, listener); requirementValue = addIntegerField(pane, "Exact time value: ", requirement.required_value, true, writable, listener); break; + case skillIncrease: + skillId = null; + try { + skillId = requirement.required_obj_id == null ? null : Requirement.SkillID.valueOf(requirement.required_obj_id); + } catch (IllegalArgumentException e) { + } + requirementObj = addEnumValueBox(pane, "Skill ID:", Requirement.SkillID.values(), skillId, writable, listener); + requirementObjId = null;//addTextField(pane, "Skill ID:", requirement.required_obj_id, writable, listener); + requirementValue = addIntegerField(pane, "Level: ", requirement.required_value, false, writable, listener); + break; } } requirementNegated = addBooleanBasedCheckBox(pane, "Negate this requirement.", requirement.negated, writable, listener); @@ -1921,7 +1931,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } else if (source == requirementObj) { if (selectedMapObject instanceof KeyArea) { KeyArea area = (KeyArea) selectedMapObject; - if (area.requirement.type == Requirement.RequirementType.skillLevel) { + if (area.requirement.type == Requirement.RequirementType.skillLevel || area.requirement.type == Requirement.RequirementType.skillIncrease) { area.requirement.required_obj_id = value == null ? null : value.toString(); } else { area.requirement.required_obj = (GameDataElement) value; @@ -1938,7 +1948,7 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe } } else if (selectedMapObject instanceof ReplaceArea) { ReplaceArea area = (ReplaceArea) selectedMapObject; - if (area.requirement.type == Requirement.RequirementType.skillLevel) { + if (area.requirement.type == Requirement.RequirementType.skillLevel || area.requirement.type == Requirement.RequirementType.skillIncrease) { area.requirement.required_obj_id = value == null ? null : value.toString(); } else { area.requirement.required_obj = (GameDataElement) value;