mirror of
https://github.com/OMGeeky/ATCS.git
synced 2025-12-26 23:57:25 +01:00
Added support for the "revenge strike" feature in NPCs and Items.
Untested yet, and error-prone, because it was made with a LOT of copy-paste-replacing.
This commit is contained in:
@@ -34,6 +34,7 @@ public class Item extends JSONElement {
|
|||||||
public String category_id = null;
|
public String category_id = null;
|
||||||
public String description = null;
|
public String description = null;
|
||||||
public HitEffect hit_effect = null;
|
public HitEffect hit_effect = null;
|
||||||
|
public HitReceivedEffect hit_received_effect = null;
|
||||||
public KillEffect kill_effect = null;
|
public KillEffect kill_effect = null;
|
||||||
public EquipEffect equip_effect = null;
|
public EquipEffect equip_effect = null;
|
||||||
|
|
||||||
@@ -58,6 +59,14 @@ public class Item extends JSONElement {
|
|||||||
public List<TimedConditionEffect> conditions_target = null;
|
public List<TimedConditionEffect> conditions_target = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class HitReceivedEffect extends HitEffect {
|
||||||
|
//Available from parsed state
|
||||||
|
public Integer hp_boost_min_target = null;
|
||||||
|
public Integer hp_boost_max_target = null;
|
||||||
|
public Integer ap_boost_min_target = null;
|
||||||
|
public Integer ap_boost_max_target = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static class EquipEffect {
|
public static class EquipEffect {
|
||||||
//Available from parsed state
|
//Available from parsed state
|
||||||
public Integer damage_boost_min = null;
|
public Integer damage_boost_min = null;
|
||||||
@@ -246,6 +255,53 @@ public class Item extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map hitReceivedEffect = (Map) itemJson.get("hitReceivedEffect");
|
||||||
|
if (hitReceivedEffect != null) {
|
||||||
|
this.hit_received_effect = new HitReceivedEffect();
|
||||||
|
if (hitReceivedEffect.get("increaseCurrentHP") != null) {
|
||||||
|
this.hit_received_effect.hp_boost_min = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentHP")).get("min")));
|
||||||
|
this.hit_received_effect.hp_boost_max = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentHP")).get("max")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseCurrentAP") != null) {
|
||||||
|
this.hit_received_effect.ap_boost_min = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentAP")).get("min")));
|
||||||
|
this.hit_received_effect.ap_boost_max = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentAP")).get("max")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseAttackerCurrentHP") != null) {
|
||||||
|
this.hit_received_effect.hp_boost_min_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentHP")).get("min")));
|
||||||
|
this.hit_received_effect.hp_boost_max_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentHP")).get("max")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseAttackerCurrentAP") != null) {
|
||||||
|
this.hit_received_effect.ap_boost_min_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentAP")).get("min")));
|
||||||
|
this.hit_received_effect.ap_boost_max_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentAP")).get("max")));
|
||||||
|
}
|
||||||
|
List conditionsSourceJson = (List) hitReceivedEffect.get("conditionsSource");
|
||||||
|
if (conditionsSourceJson != null && !conditionsSourceJson.isEmpty()) {
|
||||||
|
this.hit_received_effect.conditions_source = new ArrayList<Item.TimedConditionEffect>();
|
||||||
|
for (Object conditionJsonObj : conditionsSourceJson) {
|
||||||
|
Map conditionJson = (Map)conditionJsonObj;
|
||||||
|
TimedConditionEffect condition = new TimedConditionEffect();
|
||||||
|
condition.condition_id = (String) conditionJson.get("condition");
|
||||||
|
condition.magnitude = JSONElement.getInteger((Number) conditionJson.get("magnitude"));
|
||||||
|
condition.duration = JSONElement.getInteger((Number) conditionJson.get("duration"));
|
||||||
|
if (conditionJson.get("chance") != null) condition.chance = JSONElement.parseChance(conditionJson.get("chance").toString());
|
||||||
|
this.hit_received_effect.conditions_source.add(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List conditionsTargetJson = (List) hitReceivedEffect.get("conditionsTarget");
|
||||||
|
if (conditionsTargetJson != null && !conditionsTargetJson.isEmpty()) {
|
||||||
|
this.hit_received_effect.conditions_target = new ArrayList<Item.TimedConditionEffect>();
|
||||||
|
for (Object conditionJsonObj : conditionsTargetJson) {
|
||||||
|
Map conditionJson = (Map)conditionJsonObj;
|
||||||
|
TimedConditionEffect condition = new TimedConditionEffect();
|
||||||
|
condition.condition_id = (String) conditionJson.get("condition");
|
||||||
|
condition.magnitude = JSONElement.getInteger((Number) conditionJson.get("magnitude"));
|
||||||
|
condition.duration = JSONElement.getInteger((Number) conditionJson.get("duration"));
|
||||||
|
if (conditionJson.get("chance") != null) condition.chance = JSONElement.parseChance(conditionJson.get("chance").toString());
|
||||||
|
this.hit_received_effect.conditions_target.add(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Map killEffect = (Map) itemJson.get("killEffect");
|
Map killEffect = (Map) itemJson.get("killEffect");
|
||||||
if (killEffect == null) {
|
if (killEffect == null) {
|
||||||
killEffect = (Map) itemJson.get("useEffect");
|
killEffect = (Map) itemJson.get("useEffect");
|
||||||
@@ -321,6 +377,18 @@ public class Item extends JSONElement {
|
|||||||
if (ce.condition != null) ce.condition.addBacklink(this);
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null && this.hit_received_effect.conditions_source != null) {
|
||||||
|
for (TimedConditionEffect ce : this.hit_received_effect.conditions_source) {
|
||||||
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect != null && this.hit_received_effect.conditions_target != null) {
|
||||||
|
for (TimedConditionEffect ce : this.hit_received_effect.conditions_target) {
|
||||||
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
if (this.kill_effect != null && this.kill_effect.conditions_source != null) {
|
if (this.kill_effect != null && this.kill_effect.conditions_source != null) {
|
||||||
for (TimedConditionEffect ce : this.kill_effect.conditions_source) {
|
for (TimedConditionEffect ce : this.kill_effect.conditions_source) {
|
||||||
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
@@ -422,6 +490,47 @@ public class Item extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null) {
|
||||||
|
clone.hit_received_effect = new HitReceivedEffect();
|
||||||
|
clone.hit_received_effect.ap_boost_max = this.hit_received_effect.ap_boost_max;
|
||||||
|
clone.hit_received_effect.ap_boost_min = this.hit_received_effect.ap_boost_min;
|
||||||
|
clone.hit_received_effect.hp_boost_max = this.hit_received_effect.hp_boost_max;
|
||||||
|
clone.hit_received_effect.hp_boost_min = this.hit_received_effect.hp_boost_min;
|
||||||
|
clone.hit_received_effect.ap_boost_max_target = this.hit_received_effect.ap_boost_max_target;
|
||||||
|
clone.hit_received_effect.ap_boost_min_target = this.hit_received_effect.ap_boost_min_target;
|
||||||
|
clone.hit_received_effect.hp_boost_max_target = this.hit_received_effect.hp_boost_max_target;
|
||||||
|
clone.hit_received_effect.hp_boost_min_target = this.hit_received_effect.hp_boost_min_target;
|
||||||
|
if (this.hit_received_effect.conditions_source != null) {
|
||||||
|
clone.hit_received_effect.conditions_source = new ArrayList<Item.TimedConditionEffect>();
|
||||||
|
for (TimedConditionEffect c : this.hit_received_effect.conditions_source) {
|
||||||
|
TimedConditionEffect cclone = new TimedConditionEffect();
|
||||||
|
cclone.magnitude = c.magnitude;
|
||||||
|
cclone.condition_id = c.condition_id;
|
||||||
|
cclone.condition = c.condition;
|
||||||
|
cclone.chance = c.chance;
|
||||||
|
cclone.duration = c.duration;
|
||||||
|
if (cclone.condition != null) {
|
||||||
|
cclone.condition.addBacklink(clone);
|
||||||
|
}
|
||||||
|
clone.hit_received_effect.conditions_source.add(cclone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_target != null) {
|
||||||
|
clone.hit_received_effect.conditions_target = new ArrayList<Item.TimedConditionEffect>();
|
||||||
|
for (TimedConditionEffect c : this.hit_received_effect.conditions_target) {
|
||||||
|
TimedConditionEffect cclone = new TimedConditionEffect();
|
||||||
|
cclone.magnitude = c.magnitude;
|
||||||
|
cclone.condition_id = c.condition_id;
|
||||||
|
cclone.condition = c.condition;
|
||||||
|
cclone.chance = c.chance;
|
||||||
|
cclone.duration = c.duration;
|
||||||
|
if (cclone.condition != null) {
|
||||||
|
cclone.condition.addBacklink(clone);
|
||||||
|
}
|
||||||
|
clone.hit_received_effect.conditions_target.add(cclone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (this.kill_effect != null) {
|
if (this.kill_effect != null) {
|
||||||
clone.kill_effect = new KillEffect();
|
clone.kill_effect = new KillEffect();
|
||||||
clone.kill_effect.ap_boost_max = this.kill_effect.ap_boost_max;
|
clone.kill_effect.ap_boost_max = this.kill_effect.ap_boost_max;
|
||||||
@@ -600,6 +709,74 @@ public class Item extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null) {
|
||||||
|
Map hitReceivedEffectJson = new LinkedHashMap();
|
||||||
|
itemJson.put("hitReceivedEffect", hitReceivedEffectJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min != null || this.hit_received_effect.hp_boost_max != null) {
|
||||||
|
Map hpJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseCurrentHP", hpJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min != null) hpJson.put("min", this.hit_received_effect.hp_boost_min);
|
||||||
|
else hpJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.hp_boost_max != null) hpJson.put("max", this.hit_received_effect.hp_boost_max);
|
||||||
|
else hpJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.ap_boost_min != null || this.hit_received_effect.ap_boost_max != null) {
|
||||||
|
Map apJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseCurrentAP", apJson);
|
||||||
|
if (this.hit_received_effect.ap_boost_min != null) apJson.put("min", this.hit_received_effect.ap_boost_min);
|
||||||
|
else apJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.ap_boost_max != null) apJson.put("max", this.hit_received_effect.ap_boost_max);
|
||||||
|
else apJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.hp_boost_min_target != null || this.hit_received_effect.hp_boost_max_target != null) {
|
||||||
|
Map hpJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseAttackerCurrentHP", hpJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min_target != null) hpJson.put("min", this.hit_received_effect.hp_boost_min_target);
|
||||||
|
else hpJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.hp_boost_max_target != null) hpJson.put("max", this.hit_received_effect.hp_boost_max_target);
|
||||||
|
else hpJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.ap_boost_min_target != null || this.hit_received_effect.ap_boost_max_target != null) {
|
||||||
|
Map apJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseAttackerCurrentAP", apJson);
|
||||||
|
if (this.hit_received_effect.ap_boost_min_target != null) apJson.put("min", this.hit_received_effect.ap_boost_min_target);
|
||||||
|
else apJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.ap_boost_max_target != null) apJson.put("max", this.hit_received_effect.ap_boost_max_target);
|
||||||
|
else apJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_source != null) {
|
||||||
|
List conditionsSourceJson = new ArrayList();
|
||||||
|
hitReceivedEffectJson.put("conditionsSource", conditionsSourceJson);
|
||||||
|
for (TimedConditionEffect condition : this.hit_received_effect.conditions_source) {
|
||||||
|
Map conditionJson = new LinkedHashMap();
|
||||||
|
conditionsSourceJson.add(conditionJson);
|
||||||
|
if (condition.condition != null) {
|
||||||
|
conditionJson.put("condition", condition.condition.id);
|
||||||
|
} else if (condition.condition_id != null) {
|
||||||
|
conditionJson.put("condition", condition.condition_id);
|
||||||
|
}
|
||||||
|
if (condition.magnitude != null) conditionJson.put("magnitude", condition.magnitude);
|
||||||
|
if (condition.duration != null) conditionJson.put("duration", condition.duration);
|
||||||
|
if (condition.chance != null) conditionJson.put("chance", JSONElement.printJsonChance(condition.chance));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_target != null) {
|
||||||
|
List conditionsTargetJson = new ArrayList();
|
||||||
|
hitReceivedEffectJson.put("conditionsTarget", conditionsTargetJson);
|
||||||
|
for (TimedConditionEffect condition : this.hit_received_effect.conditions_target) {
|
||||||
|
Map conditionJson = new LinkedHashMap();
|
||||||
|
conditionsTargetJson.add(conditionJson);
|
||||||
|
if (condition.condition != null) {
|
||||||
|
conditionJson.put("condition", condition.condition.id);
|
||||||
|
} else if (condition.condition_id != null) {
|
||||||
|
conditionJson.put("condition", condition.condition_id);
|
||||||
|
}
|
||||||
|
if (condition.magnitude != null) conditionJson.put("magnitude", condition.magnitude);
|
||||||
|
if (condition.duration != null) conditionJson.put("duration", condition.duration);
|
||||||
|
if (condition.chance != null) conditionJson.put("chance", JSONElement.printJsonChance(condition.chance));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (this.kill_effect != null) {
|
if (this.kill_effect != null) {
|
||||||
Map killEffectJson = new LinkedHashMap();
|
Map killEffectJson = new LinkedHashMap();
|
||||||
if (this.category != null && this.category.action_type != null && this.category.action_type == ItemCategory.ActionType.equip) {
|
if (this.category != null && this.category.action_type != null && this.category.action_type == ItemCategory.ActionType.equip) {
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ public class NPC extends JSONElement {
|
|||||||
public Integer block_chance = null;
|
public Integer block_chance = null;
|
||||||
public Integer damage_resistance = null;
|
public Integer damage_resistance = null;
|
||||||
public HitEffect hit_effect = null;
|
public HitEffect hit_effect = null;
|
||||||
|
public HitReceivedEffect hit_received_effect = null;
|
||||||
|
public DeathEffect death_effect = null;
|
||||||
|
|
||||||
//Available from linked state
|
//Available from linked state
|
||||||
public Dialogue dialogue = null;
|
public Dialogue dialogue = null;
|
||||||
@@ -70,17 +72,29 @@ public class NPC extends JSONElement {
|
|||||||
protectSpawn,
|
protectSpawn,
|
||||||
wholeMap
|
wholeMap
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class HitEffect {
|
public static class DeathEffect {
|
||||||
//Available from parsed state
|
//Available from parsed state
|
||||||
public Integer hp_boost_min = null;
|
public Integer hp_boost_min = null;
|
||||||
public Integer hp_boost_max = null;
|
public Integer hp_boost_max = null;
|
||||||
public Integer ap_boost_min = null;
|
public Integer ap_boost_min = null;
|
||||||
public Integer ap_boost_max = null;
|
public Integer ap_boost_max = null;
|
||||||
public List<TimedConditionEffect> conditions_source = null;
|
public List<TimedConditionEffect> conditions_source = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class HitEffect extends DeathEffect {
|
||||||
|
//Available from parsed state
|
||||||
public List<TimedConditionEffect> conditions_target = null;
|
public List<TimedConditionEffect> conditions_target = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class HitReceivedEffect extends HitEffect {
|
||||||
|
//Available from parsed state
|
||||||
|
public Integer hp_boost_min_target = null;
|
||||||
|
public Integer hp_boost_max_target = null;
|
||||||
|
public Integer ap_boost_min_target = null;
|
||||||
|
public Integer ap_boost_max_target = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static class TimedConditionEffect {
|
public static class TimedConditionEffect {
|
||||||
//Available from parsed state
|
//Available from parsed state
|
||||||
public Integer magnitude = null;
|
public Integer magnitude = null;
|
||||||
@@ -224,6 +238,79 @@ public class NPC extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map hitReceivedEffect = (Map) npcJson.get("hitReceivedEffect");
|
||||||
|
if (hitReceivedEffect != null) {
|
||||||
|
this.hit_received_effect = new HitReceivedEffect();
|
||||||
|
if (hitReceivedEffect.get("increaseCurrentHP") != null) {
|
||||||
|
this.hit_received_effect.hp_boost_max = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentHP")).get("max")));
|
||||||
|
this.hit_received_effect.hp_boost_min = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentHP")).get("min")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseCurrentAP") != null) {
|
||||||
|
this.hit_received_effect.ap_boost_max = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentAP")).get("max")));
|
||||||
|
this.hit_received_effect.ap_boost_min = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseCurrentAP")).get("min")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseAttackerCurrentHP") != null) {
|
||||||
|
this.hit_received_effect.hp_boost_max_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentHP")).get("max")));
|
||||||
|
this.hit_received_effect.hp_boost_min_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentHP")).get("min")));
|
||||||
|
}
|
||||||
|
if (hitReceivedEffect.get("increaseAttackerCurrentAP") != null) {
|
||||||
|
this.hit_received_effect.ap_boost_max_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentAP")).get("max")));
|
||||||
|
this.hit_received_effect.ap_boost_min_target = JSONElement.getInteger((Number) (((Map)hitReceivedEffect.get("increaseAttackerCurrentAP")).get("min")));
|
||||||
|
}
|
||||||
|
List conditionsSourceJson = (List) hitReceivedEffect.get("conditionsSource");
|
||||||
|
if (conditionsSourceJson != null && !conditionsSourceJson.isEmpty()) {
|
||||||
|
this.hit_received_effect.conditions_source = new ArrayList<NPC.TimedConditionEffect>();
|
||||||
|
for (Object conditionJsonObj : conditionsSourceJson) {
|
||||||
|
Map conditionJson = (Map)conditionJsonObj;
|
||||||
|
TimedConditionEffect condition = new TimedConditionEffect();
|
||||||
|
condition.condition_id = (String) conditionJson.get("condition");
|
||||||
|
condition.magnitude = JSONElement.getInteger((Number) conditionJson.get("magnitude"));
|
||||||
|
condition.duration = JSONElement.getInteger((Number) conditionJson.get("duration"));
|
||||||
|
if (conditionJson.get("chance") != null) condition.chance = JSONElement.parseChance(conditionJson.get("chance").toString());
|
||||||
|
this.hit_received_effect.conditions_source.add(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
List conditionsTargetJson = (List) hitReceivedEffect.get("conditionsTarget");
|
||||||
|
if (conditionsTargetJson != null && !conditionsTargetJson.isEmpty()) {
|
||||||
|
this.hit_received_effect.conditions_target = new ArrayList<NPC.TimedConditionEffect>();
|
||||||
|
for (Object conditionJsonObj : conditionsTargetJson) {
|
||||||
|
Map conditionJson = (Map)conditionJsonObj;
|
||||||
|
TimedConditionEffect condition = new TimedConditionEffect();
|
||||||
|
condition.condition_id = (String) conditionJson.get("condition");
|
||||||
|
condition.magnitude = JSONElement.getInteger((Number) conditionJson.get("magnitude"));
|
||||||
|
condition.duration = JSONElement.getInteger((Number) conditionJson.get("duration"));
|
||||||
|
if (conditionJson.get("chance") != null) condition.chance = JSONElement.parseChance(conditionJson.get("chance").toString());
|
||||||
|
this.hit_received_effect.conditions_target.add(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map deathEffect = (Map) npcJson.get("deathEffect");
|
||||||
|
if (deathEffect != null) {
|
||||||
|
this.death_effect = new HitEffect();
|
||||||
|
if (deathEffect.get("increaseCurrentHP") != null) {
|
||||||
|
this.death_effect.hp_boost_max = JSONElement.getInteger((Number) (((Map)deathEffect.get("increaseCurrentHP")).get("max")));
|
||||||
|
this.death_effect.hp_boost_min = JSONElement.getInteger((Number) (((Map)deathEffect.get("increaseCurrentHP")).get("min")));
|
||||||
|
}
|
||||||
|
if (deathEffect.get("increaseCurrentAP") != null) {
|
||||||
|
this.death_effect.ap_boost_max = JSONElement.getInteger((Number) (((Map)deathEffect.get("increaseCurrentAP")).get("max")));
|
||||||
|
this.death_effect.ap_boost_min = JSONElement.getInteger((Number) (((Map)deathEffect.get("increaseCurrentAP")).get("min")));
|
||||||
|
}
|
||||||
|
List conditionsSourceJson = (List) deathEffect.get("conditionsSource");
|
||||||
|
if (conditionsSourceJson != null && !conditionsSourceJson.isEmpty()) {
|
||||||
|
this.death_effect.conditions_source = new ArrayList<NPC.TimedConditionEffect>();
|
||||||
|
for (Object conditionJsonObj : conditionsSourceJson) {
|
||||||
|
Map conditionJson = (Map)conditionJsonObj;
|
||||||
|
TimedConditionEffect condition = new TimedConditionEffect();
|
||||||
|
condition.condition_id = (String) conditionJson.get("condition");
|
||||||
|
condition.magnitude = JSONElement.getInteger((Number) conditionJson.get("magnitude"));
|
||||||
|
condition.duration = JSONElement.getInteger((Number) conditionJson.get("duration"));
|
||||||
|
if (conditionJson.get("chance") != null) condition.chance = JSONElement.parseChance(conditionJson.get("chance").toString());
|
||||||
|
this.death_effect.conditions_source.add(condition);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -267,6 +354,24 @@ public class NPC extends JSONElement {
|
|||||||
if (ce.condition != null) ce.condition.addBacklink(this);
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null && this.hit_received_effect.conditions_source != null) {
|
||||||
|
for (TimedConditionEffect ce : this.hit_received_effect.conditions_source) {
|
||||||
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect != null && this.hit_received_effect.conditions_target != null) {
|
||||||
|
for (TimedConditionEffect ce : this.hit_received_effect.conditions_target) {
|
||||||
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.death_effect != null && this.death_effect.conditions_source != null) {
|
||||||
|
for (TimedConditionEffect ce : this.death_effect.conditions_source) {
|
||||||
|
if (ce.condition_id != null) ce.condition = proj.getActorCondition(ce.condition_id);
|
||||||
|
if (ce.condition != null) ce.condition.addBacklink(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
this.state = State.linked;
|
this.state = State.linked;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -343,6 +448,69 @@ public class NPC extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null) {
|
||||||
|
clone.hit_received_effect = new HitReceivedEffect();
|
||||||
|
clone.hit_received_effect.ap_boost_max = this.hit_received_effect.ap_boost_max;
|
||||||
|
clone.hit_received_effect.ap_boost_min = this.hit_received_effect.ap_boost_min;
|
||||||
|
clone.hit_received_effect.hp_boost_max = this.hit_received_effect.hp_boost_max;
|
||||||
|
clone.hit_received_effect.hp_boost_min = this.hit_received_effect.hp_boost_min;
|
||||||
|
clone.hit_received_effect.ap_boost_max_target = this.hit_received_effect.ap_boost_max_target;
|
||||||
|
clone.hit_received_effect.ap_boost_min_target = this.hit_received_effect.ap_boost_min_target;
|
||||||
|
clone.hit_received_effect.hp_boost_max_target = this.hit_received_effect.hp_boost_max_target;
|
||||||
|
clone.hit_received_effect.hp_boost_min_target = this.hit_received_effect.hp_boost_min_target;
|
||||||
|
if (this.hit_received_effect.conditions_source != null) {
|
||||||
|
clone.hit_received_effect.conditions_source = new ArrayList<TimedConditionEffect>();
|
||||||
|
for (TimedConditionEffect c : this.hit_received_effect.conditions_source) {
|
||||||
|
TimedConditionEffect cclone = new TimedConditionEffect();
|
||||||
|
cclone.magnitude = c.magnitude;
|
||||||
|
cclone.condition_id = c.condition_id;
|
||||||
|
cclone.condition = c.condition;
|
||||||
|
cclone.chance = c.chance;
|
||||||
|
cclone.duration = c.duration;
|
||||||
|
if (cclone.condition != null) {
|
||||||
|
cclone.condition.addBacklink(clone);
|
||||||
|
}
|
||||||
|
clone.hit_received_effect.conditions_source.add(cclone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_target != null) {
|
||||||
|
clone.hit_received_effect.conditions_target = new ArrayList<TimedConditionEffect>();
|
||||||
|
for (TimedConditionEffect c : this.hit_received_effect.conditions_target) {
|
||||||
|
TimedConditionEffect cclone = new TimedConditionEffect();
|
||||||
|
cclone.magnitude = c.magnitude;
|
||||||
|
cclone.condition_id = c.condition_id;
|
||||||
|
cclone.condition = c.condition;
|
||||||
|
cclone.chance = c.chance;
|
||||||
|
cclone.duration = c.duration;
|
||||||
|
if (cclone.condition != null) {
|
||||||
|
cclone.condition.addBacklink(clone);
|
||||||
|
}
|
||||||
|
clone.hit_received_effect.conditions_target.add(cclone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.death_effect != null) {
|
||||||
|
clone.death_effect = new DeathEffect();
|
||||||
|
clone.death_effect.ap_boost_max = this.death_effect.ap_boost_max;
|
||||||
|
clone.death_effect.ap_boost_min = this.death_effect.ap_boost_min;
|
||||||
|
clone.death_effect.hp_boost_max = this.death_effect.hp_boost_max;
|
||||||
|
clone.death_effect.hp_boost_min = this.death_effect.hp_boost_min;
|
||||||
|
if (this.death_effect.conditions_source != null) {
|
||||||
|
clone.death_effect.conditions_source = new ArrayList<TimedConditionEffect>();
|
||||||
|
for (TimedConditionEffect c : this.death_effect.conditions_source) {
|
||||||
|
TimedConditionEffect cclone = new TimedConditionEffect();
|
||||||
|
cclone.magnitude = c.magnitude;
|
||||||
|
cclone.condition_id = c.condition_id;
|
||||||
|
cclone.condition = c.condition;
|
||||||
|
cclone.chance = c.chance;
|
||||||
|
cclone.duration = c.duration;
|
||||||
|
if (cclone.condition != null) {
|
||||||
|
cclone.condition.addBacklink(clone);
|
||||||
|
}
|
||||||
|
clone.death_effect.conditions_source.add(cclone);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
clone.max_ap = this.max_ap;
|
clone.max_ap = this.max_ap;
|
||||||
clone.max_hp = this.max_hp;
|
clone.max_hp = this.max_hp;
|
||||||
clone.monster_class = this.monster_class;
|
clone.monster_class = this.monster_class;
|
||||||
@@ -478,6 +646,110 @@ public class NPC extends JSONElement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (this.hit_received_effect != null) {
|
||||||
|
Map hitReceivedEffectJson = new LinkedHashMap();
|
||||||
|
npcJson.put("hitReceivedEffect", hitReceivedEffectJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min != null || this.hit_received_effect.hp_boost_max != null) {
|
||||||
|
Map hpJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseCurrentHP", hpJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min != null) hpJson.put("min", this.hit_received_effect.hp_boost_min);
|
||||||
|
else hpJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.hp_boost_max != null) hpJson.put("max", this.hit_received_effect.hp_boost_max);
|
||||||
|
else hpJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.ap_boost_min != null || this.hit_received_effect.ap_boost_max != null) {
|
||||||
|
Map apJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseCurrentAP", apJson);
|
||||||
|
if (this.hit_received_effect.ap_boost_min != null) apJson.put("min", this.hit_received_effect.ap_boost_min);
|
||||||
|
else apJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.ap_boost_max != null) apJson.put("max", this.hit_received_effect.ap_boost_max);
|
||||||
|
else apJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.hp_boost_min_target != null || this.hit_received_effect.hp_boost_max_target != null) {
|
||||||
|
Map hpJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseAttackerCurrentHP", hpJson);
|
||||||
|
if (this.hit_received_effect.hp_boost_min_target != null) hpJson.put("min", this.hit_received_effect.hp_boost_min_target);
|
||||||
|
else hpJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.hp_boost_max_target != null) hpJson.put("max", this.hit_received_effect.hp_boost_max_target);
|
||||||
|
else hpJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.ap_boost_min_target != null || this.hit_received_effect.ap_boost_max_target != null) {
|
||||||
|
Map apJson = new LinkedHashMap();
|
||||||
|
hitReceivedEffectJson.put("increaseAttackerCurrentAP", apJson);
|
||||||
|
if (this.hit_received_effect.ap_boost_min_target != null) apJson.put("min", this.hit_received_effect.ap_boost_min_target);
|
||||||
|
else apJson.put("min", 0);
|
||||||
|
if (this.hit_received_effect.ap_boost_max_target != null) apJson.put("max", this.hit_received_effect.ap_boost_max_target);
|
||||||
|
else apJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_source != null) {
|
||||||
|
List conditionsSourceJson = new ArrayList();
|
||||||
|
hitReceivedEffectJson.put("conditionsSource", conditionsSourceJson);
|
||||||
|
for (TimedConditionEffect condition : this.hit_received_effect.conditions_source) {
|
||||||
|
Map conditionJson = new LinkedHashMap();
|
||||||
|
conditionsSourceJson.add(conditionJson);
|
||||||
|
if (condition.condition != null) {
|
||||||
|
conditionJson.put("condition", condition.condition.id);
|
||||||
|
} else if (condition.condition_id != null) {
|
||||||
|
conditionJson.put("condition", condition.condition_id);
|
||||||
|
}
|
||||||
|
if (condition.magnitude != null) conditionJson.put("magnitude", condition.magnitude);
|
||||||
|
if (condition.duration != null) conditionJson.put("duration", condition.duration);
|
||||||
|
if (condition.chance != null) conditionJson.put("chance", JSONElement.printJsonChance(condition.chance));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.hit_received_effect.conditions_target != null) {
|
||||||
|
List conditionsTargetJson = new ArrayList();
|
||||||
|
hitReceivedEffectJson.put("conditionsTarget", conditionsTargetJson);
|
||||||
|
for (TimedConditionEffect condition : this.hit_received_effect.conditions_target) {
|
||||||
|
Map conditionJson = new LinkedHashMap();
|
||||||
|
conditionsTargetJson.add(conditionJson);
|
||||||
|
if (condition.condition != null) {
|
||||||
|
conditionJson.put("condition", condition.condition.id);
|
||||||
|
} else if (condition.condition_id != null) {
|
||||||
|
conditionJson.put("condition", condition.condition_id);
|
||||||
|
}
|
||||||
|
if (condition.magnitude != null) conditionJson.put("magnitude", condition.magnitude);
|
||||||
|
if (condition.duration != null) conditionJson.put("duration", condition.duration);
|
||||||
|
if (condition.chance != null) conditionJson.put("chance", JSONElement.printJsonChance(condition.chance));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.death_effect != null) {
|
||||||
|
Map deathEffectJson = new LinkedHashMap();
|
||||||
|
npcJson.put("deathEffect", deathEffectJson);
|
||||||
|
if (this.death_effect.hp_boost_min != null || this.death_effect.hp_boost_max != null) {
|
||||||
|
Map hpJson = new LinkedHashMap();
|
||||||
|
deathEffectJson.put("increaseCurrentHP", hpJson);
|
||||||
|
if (this.death_effect.hp_boost_min != null) hpJson.put("min", this.death_effect.hp_boost_min);
|
||||||
|
else hpJson.put("min", 0);
|
||||||
|
if (this.death_effect.hp_boost_max != null) hpJson.put("max", this.death_effect.hp_boost_max);
|
||||||
|
else hpJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.death_effect.ap_boost_min != null || this.death_effect.ap_boost_max != null) {
|
||||||
|
Map apJson = new LinkedHashMap();
|
||||||
|
deathEffectJson.put("increaseCurrentAP", apJson);
|
||||||
|
if (this.death_effect.ap_boost_min != null) apJson.put("min", this.death_effect.ap_boost_min);
|
||||||
|
else apJson.put("min", 0);
|
||||||
|
if (this.death_effect.ap_boost_max != null) apJson.put("max", this.death_effect.ap_boost_max);
|
||||||
|
else apJson.put("max", 0);
|
||||||
|
}
|
||||||
|
if (this.death_effect.conditions_source != null) {
|
||||||
|
List conditionsSourceJson = new ArrayList();
|
||||||
|
deathEffectJson.put("conditionsSource", conditionsSourceJson);
|
||||||
|
for (TimedConditionEffect condition : this.death_effect.conditions_source) {
|
||||||
|
Map conditionJson = new LinkedHashMap();
|
||||||
|
conditionsSourceJson.add(conditionJson);
|
||||||
|
if (condition.condition != null) {
|
||||||
|
conditionJson.put("condition", condition.condition.id);
|
||||||
|
} else if (condition.condition_id != null) {
|
||||||
|
conditionJson.put("condition", condition.condition_id);
|
||||||
|
}
|
||||||
|
if (condition.magnitude != null) conditionJson.put("magnitude", condition.magnitude);
|
||||||
|
if (condition.duration != null) conditionJson.put("duration", condition.duration);
|
||||||
|
if (condition.chance != null) conditionJson.put("chance", JSONElement.printJsonChance(condition.chance));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return npcJson;
|
return npcJson;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,9 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
private Item.TimedConditionEffect selectedHitEffectSourceCondition;
|
private Item.TimedConditionEffect selectedHitEffectSourceCondition;
|
||||||
private Item.TimedConditionEffect selectedHitEffectTargetCondition;
|
private Item.TimedConditionEffect selectedHitEffectTargetCondition;
|
||||||
private Item.TimedConditionEffect selectedKillEffectCondition;
|
private Item.TimedConditionEffect selectedKillEffectCondition;
|
||||||
|
private Item.TimedConditionEffect selectedHitReceivedEffectSourceCondition;
|
||||||
|
private Item.TimedConditionEffect selectedHitReceivedEffectTargetCondition;
|
||||||
|
|
||||||
|
|
||||||
private JButton itemIcon;
|
private JButton itemIcon;
|
||||||
private JTextField idField;
|
private JTextField idField;
|
||||||
@@ -143,6 +145,40 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
private JRadioButton killSourceConditionForever;
|
private JRadioButton killSourceConditionForever;
|
||||||
private JSpinner killSourceConditionDuration;
|
private JSpinner killSourceConditionDuration;
|
||||||
|
|
||||||
|
private CollapsiblePanel hitReceivedEffectPane;
|
||||||
|
private Item.HitReceivedEffect hitReceivedEffect;
|
||||||
|
private JSpinner hitReceivedHPMin;
|
||||||
|
private JSpinner hitReceivedHPMax;
|
||||||
|
private JSpinner hitReceivedAPMin;
|
||||||
|
private JSpinner hitReceivedAPMax;
|
||||||
|
private JSpinner hitReceivedHPMinTarget;
|
||||||
|
private JSpinner hitReceivedHPMaxTarget;
|
||||||
|
private JSpinner hitReceivedAPMinTarget;
|
||||||
|
private JSpinner hitReceivedAPMaxTarget;
|
||||||
|
private SourceTimedConditionsListModel hitReceivedSourceConditionsModel;
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
private JList hitReceivedSourceConditionsList;
|
||||||
|
private MyComboBox hitReceivedSourceConditionBox;
|
||||||
|
private JSpinner hitReceivedSourceConditionChance;
|
||||||
|
private JRadioButton hitReceivedSourceConditionClear;
|
||||||
|
private JRadioButton hitReceivedSourceConditionApply;
|
||||||
|
private JRadioButton hitReceivedSourceConditionImmunity;
|
||||||
|
private JSpinner hitReceivedSourceConditionMagnitude;
|
||||||
|
private JRadioButton hitReceivedSourceConditionTimed;
|
||||||
|
private JRadioButton hitReceivedSourceConditionForever;
|
||||||
|
private JSpinner hitReceivedSourceConditionDuration;
|
||||||
|
private TargetTimedConditionsListModel hitReceivedTargetConditionsModel;
|
||||||
|
@SuppressWarnings("rawtypes")
|
||||||
|
private JList hitReceivedTargetConditionsList;
|
||||||
|
private MyComboBox hitReceivedTargetConditionBox;
|
||||||
|
private JSpinner hitReceivedTargetConditionChance;
|
||||||
|
private JRadioButton hitReceivedTargetConditionClear;
|
||||||
|
private JRadioButton hitReceivedTargetConditionApply;
|
||||||
|
private JRadioButton hitReceivedTargetConditionImmunity;
|
||||||
|
private JSpinner hitReceivedTargetConditionMagnitude;
|
||||||
|
private JRadioButton hitReceivedTargetConditionTimed;
|
||||||
|
private JRadioButton hitReceivedTargetConditionForever;
|
||||||
|
private JSpinner hitReceivedTargetConditionDuration;
|
||||||
|
|
||||||
public ItemEditor(Item item) {
|
public ItemEditor(Item item) {
|
||||||
super(item, item.getDesc(), item.getIcon());
|
super(item, item.getDesc(), item.getIcon());
|
||||||
@@ -459,6 +495,142 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
}
|
}
|
||||||
pane.add(killEffectPane, JideBoxLayout.FIX);
|
pane.add(killEffectPane, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
|
||||||
|
hitReceivedEffectPane = new CollapsiblePanel("Effect on every received hit: ");
|
||||||
|
hitReceivedEffectPane.setLayout(new JideBoxLayout(hitReceivedEffectPane, JideBoxLayout.PAGE_AXIS));
|
||||||
|
if (item.hit_received_effect == null) {
|
||||||
|
hitReceivedEffect = new Item.HitReceivedEffect();
|
||||||
|
} else {
|
||||||
|
hitReceivedEffect = item.hit_received_effect;
|
||||||
|
}
|
||||||
|
hitReceivedHPMin = addIntegerField(hitReceivedEffectPane, "Player HP bonus min: ", hitReceivedEffect.hp_boost_min, true, item.writable, listener);
|
||||||
|
hitReceivedHPMax = addIntegerField(hitReceivedEffectPane, "Player HP bonus max: ", hitReceivedEffect.hp_boost_max, true, item.writable, listener);
|
||||||
|
hitReceivedAPMin = addIntegerField(hitReceivedEffectPane, "Player AP bonus min: ", hitReceivedEffect.ap_boost_min, true, item.writable, listener);
|
||||||
|
hitReceivedAPMax = addIntegerField(hitReceivedEffectPane, "Player AP bonus max: ", hitReceivedEffect.ap_boost_max, true, item.writable, listener);
|
||||||
|
hitReceivedHPMinTarget = addIntegerField(hitReceivedEffectPane, "Attacker HP bonus min: ", hitReceivedEffect.hp_boost_min_target, true, item.writable, listener);
|
||||||
|
hitReceivedHPMaxTarget = addIntegerField(hitReceivedEffectPane, "Attacker HP bonus max: ", hitReceivedEffect.hp_boost_max_target, true, item.writable, listener);
|
||||||
|
hitReceivedAPMinTarget = addIntegerField(hitReceivedEffectPane, "Attacker AP bonus min: ", hitReceivedEffect.ap_boost_min_target, true, item.writable, listener);
|
||||||
|
hitReceivedAPMaxTarget = addIntegerField(hitReceivedEffectPane, "Attacker AP bonus max: ", hitReceivedEffect.ap_boost_max_target, true, item.writable, listener);
|
||||||
|
final CollapsiblePanel hitReceivedSourceConditionsPane = new CollapsiblePanel("Actor Conditions applied to the player: ");
|
||||||
|
hitReceivedSourceConditionsPane.setLayout(new JideBoxLayout(hitReceivedSourceConditionsPane, JideBoxLayout.PAGE_AXIS));
|
||||||
|
hitReceivedSourceConditionsModel = new SourceTimedConditionsListModel(hitReceivedEffect);
|
||||||
|
hitReceivedSourceConditionsList = new JList(hitReceivedSourceConditionsModel);
|
||||||
|
hitReceivedSourceConditionsList.setCellRenderer(new TimedConditionsCellRenderer());
|
||||||
|
hitReceivedSourceConditionsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
hitReceivedSourceConditionsPane.add(new JScrollPane(hitReceivedSourceConditionsList), JideBoxLayout.FIX);
|
||||||
|
final JPanel hitReceivedSourceTimedConditionsEditorPane = new JPanel();
|
||||||
|
final JButton createHitReceivedSourceCondition = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||||
|
final JButton deleteHitReceivedSourceCondition = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||||
|
hitReceivedSourceConditionsList.addListSelectionListener(new ListSelectionListener() {
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
selectedHitReceivedEffectSourceCondition = (Item.TimedConditionEffect) hitReceivedSourceConditionsList.getSelectedValue();
|
||||||
|
updateHitReceivedSourceTimedConditionEditorPane(hitReceivedSourceTimedConditionsEditorPane, selectedHitReceivedEffectSourceCondition, listener);
|
||||||
|
if (selectedHitReceivedEffectSourceCondition == null) {
|
||||||
|
deleteHitReceivedSourceCondition.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
deleteHitReceivedSourceCondition.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (item.writable) {
|
||||||
|
JPanel listButtonsPane = new JPanel();
|
||||||
|
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||||
|
createHitReceivedSourceCondition.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Item.TimedConditionEffect condition = new Item.TimedConditionEffect();
|
||||||
|
hitReceivedSourceConditionsModel.addItem(condition);
|
||||||
|
hitReceivedSourceConditionsList.setSelectedValue(condition, true);
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionsList, null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deleteHitReceivedSourceCondition.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (selectedHitReceivedEffectSourceCondition != null) {
|
||||||
|
hitReceivedSourceConditionsModel.removeItem(selectedHitReceivedEffectSourceCondition);
|
||||||
|
selectedHitReceivedEffectSourceCondition = null;
|
||||||
|
hitReceivedSourceConditionsList.clearSelection();
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionsList, null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
listButtonsPane.add(createHitReceivedSourceCondition, JideBoxLayout.FIX);
|
||||||
|
listButtonsPane.add(deleteHitReceivedSourceCondition, JideBoxLayout.FIX);
|
||||||
|
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||||
|
hitReceivedSourceConditionsPane.add(listButtonsPane, JideBoxLayout.FIX);
|
||||||
|
}
|
||||||
|
hitReceivedSourceTimedConditionsEditorPane.setLayout(new JideBoxLayout(hitReceivedSourceTimedConditionsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||||
|
hitReceivedSourceConditionsPane.add(hitReceivedSourceTimedConditionsEditorPane, JideBoxLayout.FIX);
|
||||||
|
if (item.hit_received_effect == null || item.hit_received_effect.conditions_source == null || item.hit_received_effect.conditions_source.isEmpty()) {
|
||||||
|
hitReceivedSourceConditionsPane.collapse();
|
||||||
|
}
|
||||||
|
hitReceivedEffectPane.add(hitReceivedSourceConditionsPane, JideBoxLayout.FIX);
|
||||||
|
final CollapsiblePanel hitReceivedTargetConditionsPane = new CollapsiblePanel("Actor Conditions applied to the attacker: ");
|
||||||
|
hitReceivedTargetConditionsPane.setLayout(new JideBoxLayout(hitReceivedTargetConditionsPane, JideBoxLayout.PAGE_AXIS));
|
||||||
|
hitReceivedTargetConditionsModel = new TargetTimedConditionsListModel(hitReceivedEffect);
|
||||||
|
hitReceivedTargetConditionsList = new JList(hitReceivedTargetConditionsModel);
|
||||||
|
hitReceivedTargetConditionsList.setCellRenderer(new TimedConditionsCellRenderer());
|
||||||
|
hitReceivedTargetConditionsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
hitReceivedTargetConditionsPane.add(new JScrollPane(hitReceivedTargetConditionsList), JideBoxLayout.FIX);
|
||||||
|
final JPanel hitReceivedTargetTimedConditionsEditorPane = new JPanel();
|
||||||
|
final JButton createHitReceivedTargetCondition = new JButton(new ImageIcon(DefaultIcons.getCreateIcon()));
|
||||||
|
final JButton deleteHitReceivedTargetCondition = new JButton(new ImageIcon(DefaultIcons.getNullifyIcon()));
|
||||||
|
hitReceivedTargetConditionsList.addListSelectionListener(new ListSelectionListener() {
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
selectedHitReceivedEffectTargetCondition = (Item.TimedConditionEffect) hitReceivedTargetConditionsList.getSelectedValue();
|
||||||
|
updateHitReceivedTargetTimedConditionEditorPane(hitReceivedTargetTimedConditionsEditorPane, selectedHitReceivedEffectTargetCondition, listener);
|
||||||
|
if (selectedHitReceivedEffectTargetCondition == null) {
|
||||||
|
deleteHitReceivedTargetCondition.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
deleteHitReceivedTargetCondition.setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (item.writable) {
|
||||||
|
JPanel listButtonsPane = new JPanel();
|
||||||
|
listButtonsPane.setLayout(new JideBoxLayout(listButtonsPane, JideBoxLayout.LINE_AXIS, 6));
|
||||||
|
createHitReceivedTargetCondition.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
Item.TimedConditionEffect condition = new Item.TimedConditionEffect();
|
||||||
|
hitReceivedTargetConditionsModel.addItem(condition);
|
||||||
|
hitReceivedTargetConditionsList.setSelectedValue(condition, true);
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionsList, null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||||
|
}
|
||||||
|
});
|
||||||
|
deleteHitReceivedTargetCondition.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (selectedHitReceivedEffectTargetCondition != null) {
|
||||||
|
hitReceivedTargetConditionsModel.removeItem(selectedHitReceivedEffectTargetCondition);
|
||||||
|
selectedHitReceivedEffectTargetCondition = null;
|
||||||
|
hitReceivedTargetConditionsList.clearSelection();
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionsList, null); //Item changed, but we took care of it, just do the usual notification and JSON update stuff.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
listButtonsPane.add(createHitReceivedTargetCondition, JideBoxLayout.FIX);
|
||||||
|
listButtonsPane.add(deleteHitReceivedTargetCondition, JideBoxLayout.FIX);
|
||||||
|
listButtonsPane.add(new JPanel(), JideBoxLayout.VARY);
|
||||||
|
hitReceivedTargetConditionsPane.add(listButtonsPane, JideBoxLayout.FIX);
|
||||||
|
}
|
||||||
|
hitReceivedTargetTimedConditionsEditorPane.setLayout(new JideBoxLayout(hitReceivedTargetTimedConditionsEditorPane, JideBoxLayout.PAGE_AXIS));
|
||||||
|
hitReceivedTargetConditionsPane.add(hitReceivedTargetTimedConditionsEditorPane, JideBoxLayout.FIX);
|
||||||
|
if (item.hit_received_effect == null || item.hit_received_effect.conditions_target == null || item.hit_received_effect.conditions_target.isEmpty()) {
|
||||||
|
hitReceivedTargetConditionsPane.collapse();
|
||||||
|
}
|
||||||
|
hitReceivedEffectPane.add(hitReceivedTargetConditionsPane, JideBoxLayout.FIX);
|
||||||
|
if (item.hit_received_effect == null) {
|
||||||
|
hitReceivedEffectPane.collapse();
|
||||||
|
}
|
||||||
|
pane.add(hitReceivedEffectPane, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
|
||||||
if (item.category == null || item.category.action_type == null || item.category.action_type == ItemCategory.ActionType.none) {
|
if (item.category == null || item.category.action_type == null || item.category.action_type == ItemCategory.ActionType.none) {
|
||||||
equipEffectPane.setVisible(false);
|
equipEffectPane.setVisible(false);
|
||||||
hitEffectPane.setVisible(false);
|
hitEffectPane.setVisible(false);
|
||||||
@@ -817,6 +989,199 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
pane.repaint();
|
pane.repaint();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void updateHitReceivedSourceTimedConditionEditorPane(JPanel pane, Item.TimedConditionEffect condition, final FieldUpdateListener listener) {
|
||||||
|
pane.removeAll();
|
||||||
|
if (hitReceivedSourceConditionBox != null) {
|
||||||
|
removeElementListener(hitReceivedSourceConditionBox);
|
||||||
|
}
|
||||||
|
if (condition == null) {
|
||||||
|
pane.revalidate();
|
||||||
|
pane.repaint();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean writable = ((Item)target).writable;
|
||||||
|
Project proj = ((Item)target).getProject();
|
||||||
|
|
||||||
|
hitReceivedSourceConditionBox = addActorConditionBox(pane, proj, "Actor Condition: ", condition.condition, writable, listener);
|
||||||
|
hitReceivedSourceConditionChance = addDoubleField(pane, "Chance: ", condition.chance, writable, listener);
|
||||||
|
|
||||||
|
hitReceivedSourceConditionClear = new JRadioButton("Clear active condition");
|
||||||
|
pane.add(hitReceivedSourceConditionClear, JideBoxLayout.FIX);
|
||||||
|
hitReceivedSourceConditionApply = new JRadioButton("Apply condition with magnitude");
|
||||||
|
pane.add(hitReceivedSourceConditionApply, JideBoxLayout.FIX);
|
||||||
|
hitReceivedSourceConditionMagnitude = addIntegerField(pane, "Magnitude: ", condition.magnitude == null ? null : condition.magnitude >= 0 ? condition.magnitude : 0, 1, false, writable, listener);
|
||||||
|
hitReceivedSourceConditionImmunity = new JRadioButton("Give immunity to condition");
|
||||||
|
pane.add(hitReceivedSourceConditionImmunity, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
ButtonGroup radioEffectGroup = new ButtonGroup();
|
||||||
|
radioEffectGroup.add(hitReceivedSourceConditionApply);
|
||||||
|
radioEffectGroup.add(hitReceivedSourceConditionClear);
|
||||||
|
radioEffectGroup.add(hitReceivedSourceConditionImmunity);
|
||||||
|
|
||||||
|
hitReceivedSourceConditionTimed = new JRadioButton("For a number of rounds");
|
||||||
|
pane.add(hitReceivedSourceConditionTimed, JideBoxLayout.FIX);
|
||||||
|
hitReceivedSourceConditionDuration = addIntegerField(pane, "Duration: ", condition.duration, 1, false, writable, listener);
|
||||||
|
hitReceivedSourceConditionForever = new JRadioButton("Forever");
|
||||||
|
pane.add(hitReceivedSourceConditionForever, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
ButtonGroup radioDurationGroup = new ButtonGroup();
|
||||||
|
radioDurationGroup.add(hitReceivedSourceConditionTimed);
|
||||||
|
radioDurationGroup.add(hitReceivedSourceConditionForever);
|
||||||
|
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(condition);
|
||||||
|
|
||||||
|
hitReceivedSourceConditionClear.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionClear, new Boolean(hitReceivedSourceConditionClear.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedSourceConditionApply.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionApply, new Boolean(hitReceivedSourceConditionApply.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedSourceConditionImmunity.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionImmunity, new Boolean(hitReceivedSourceConditionImmunity.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
hitReceivedSourceConditionTimed.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionTimed, new Boolean(hitReceivedSourceConditionTimed.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedSourceConditionForever.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedSourceConditionForever, new Boolean(hitReceivedSourceConditionForever.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pane.revalidate();
|
||||||
|
pane.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateHitReceivedSourceTimedConditionWidgets(Item.TimedConditionEffect condition) {
|
||||||
|
|
||||||
|
boolean immunity = (condition.magnitude == null || condition.magnitude == ActorCondition.MAGNITUDE_CLEAR) && (condition.duration != null && condition.duration > ActorCondition.DURATION_NONE);
|
||||||
|
boolean clear = (condition.magnitude == null || condition.magnitude == ActorCondition.MAGNITUDE_CLEAR) && (condition.duration == null || condition.duration == ActorCondition.DURATION_NONE);
|
||||||
|
boolean forever = condition.duration != null && condition.duration == ActorCondition.DURATION_FOREVER;
|
||||||
|
|
||||||
|
hitReceivedSourceConditionClear.setSelected(clear);
|
||||||
|
hitReceivedSourceConditionApply.setSelected(!clear && !immunity);
|
||||||
|
hitReceivedSourceConditionMagnitude.setEnabled(!clear && !immunity);
|
||||||
|
hitReceivedSourceConditionImmunity.setSelected(immunity);
|
||||||
|
|
||||||
|
hitReceivedSourceConditionTimed.setSelected(!forever);
|
||||||
|
hitReceivedSourceConditionTimed.setEnabled(!clear);
|
||||||
|
hitReceivedSourceConditionDuration.setEnabled(!clear && !forever);
|
||||||
|
hitReceivedSourceConditionForever.setSelected(forever);
|
||||||
|
hitReceivedSourceConditionForever.setEnabled(!clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateHitReceivedTargetTimedConditionEditorPane(JPanel pane, Item.TimedConditionEffect condition, final FieldUpdateListener listener) {
|
||||||
|
pane.removeAll();
|
||||||
|
if (hitReceivedTargetConditionBox != null) {
|
||||||
|
removeElementListener(hitReceivedTargetConditionBox);
|
||||||
|
}
|
||||||
|
if (condition == null) {
|
||||||
|
pane.revalidate();
|
||||||
|
pane.repaint();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean writable = ((Item)target).writable;
|
||||||
|
Project proj = ((Item)target).getProject();
|
||||||
|
|
||||||
|
hitReceivedTargetConditionBox = addActorConditionBox(pane, proj, "Actor Condition: ", condition.condition, writable, listener);
|
||||||
|
hitReceivedTargetConditionChance = addDoubleField(pane, "Chance: ", condition.chance, writable, listener);
|
||||||
|
|
||||||
|
hitReceivedTargetConditionClear = new JRadioButton("Clear active condition");
|
||||||
|
pane.add(hitReceivedTargetConditionClear, JideBoxLayout.FIX);
|
||||||
|
hitReceivedTargetConditionApply = new JRadioButton("Apply condition with magnitude");
|
||||||
|
pane.add(hitReceivedTargetConditionApply, JideBoxLayout.FIX);
|
||||||
|
hitReceivedTargetConditionMagnitude = addIntegerField(pane, "Magnitude: ", condition.magnitude == null ? null : condition.magnitude >= 0 ? condition.magnitude : 0, 1, false, writable, listener);
|
||||||
|
hitReceivedTargetConditionImmunity = new JRadioButton("Give immunity to condition");
|
||||||
|
pane.add(hitReceivedTargetConditionImmunity, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
ButtonGroup radioEffectGroup = new ButtonGroup();
|
||||||
|
radioEffectGroup.add(hitReceivedTargetConditionApply);
|
||||||
|
radioEffectGroup.add(hitReceivedTargetConditionClear);
|
||||||
|
radioEffectGroup.add(hitReceivedTargetConditionImmunity);
|
||||||
|
|
||||||
|
hitReceivedTargetConditionTimed = new JRadioButton("For a number of rounds");
|
||||||
|
pane.add(hitReceivedTargetConditionTimed, JideBoxLayout.FIX);
|
||||||
|
hitReceivedTargetConditionDuration = addIntegerField(pane, "Duration: ", condition.duration, 1, false, writable, listener);
|
||||||
|
hitReceivedTargetConditionForever = new JRadioButton("Forever");
|
||||||
|
pane.add(hitReceivedTargetConditionForever, JideBoxLayout.FIX);
|
||||||
|
|
||||||
|
ButtonGroup radioDurationGroup = new ButtonGroup();
|
||||||
|
radioDurationGroup.add(hitReceivedTargetConditionTimed);
|
||||||
|
radioDurationGroup.add(hitReceivedTargetConditionForever);
|
||||||
|
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(condition);
|
||||||
|
|
||||||
|
hitReceivedTargetConditionClear.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionClear, new Boolean(hitReceivedTargetConditionClear.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedTargetConditionApply.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionApply, new Boolean(hitReceivedTargetConditionApply.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedTargetConditionImmunity.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionImmunity, new Boolean(hitReceivedTargetConditionImmunity.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
hitReceivedTargetConditionTimed.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionTimed, new Boolean(hitReceivedTargetConditionTimed.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hitReceivedTargetConditionForever.addActionListener(new ActionListener() {
|
||||||
|
@Override
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
listener.valueChanged(hitReceivedTargetConditionForever, new Boolean(hitReceivedTargetConditionForever.isSelected()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pane.revalidate();
|
||||||
|
pane.repaint();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateHitReceivedTargetTimedConditionWidgets(Item.TimedConditionEffect condition) {
|
||||||
|
|
||||||
|
boolean immunity = (condition.magnitude == null || condition.magnitude == ActorCondition.MAGNITUDE_CLEAR) && (condition.duration != null && condition.duration > ActorCondition.DURATION_NONE);
|
||||||
|
boolean clear = (condition.magnitude == null || condition.magnitude == ActorCondition.MAGNITUDE_CLEAR) && (condition.duration == null || condition.duration == ActorCondition.DURATION_NONE);
|
||||||
|
boolean forever = condition.duration != null && condition.duration == ActorCondition.DURATION_FOREVER;
|
||||||
|
|
||||||
|
hitReceivedTargetConditionClear.setSelected(clear);
|
||||||
|
hitReceivedTargetConditionApply.setSelected(!clear && !immunity);
|
||||||
|
hitReceivedTargetConditionMagnitude.setEnabled(!clear && !immunity);
|
||||||
|
hitReceivedTargetConditionImmunity.setSelected(immunity);
|
||||||
|
|
||||||
|
hitReceivedTargetConditionTimed.setSelected(!forever);
|
||||||
|
hitReceivedTargetConditionTimed.setEnabled(!clear);
|
||||||
|
hitReceivedTargetConditionDuration.setEnabled(!clear && !forever);
|
||||||
|
hitReceivedTargetConditionForever.setSelected(forever);
|
||||||
|
hitReceivedTargetConditionForever.setEnabled(!clear);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public static class SourceTimedConditionsListModel implements ListModel<Item.TimedConditionEffect> {
|
public static class SourceTimedConditionsListModel implements ListModel<Item.TimedConditionEffect> {
|
||||||
|
|
||||||
Item.KillEffect source;
|
Item.KillEffect source;
|
||||||
@@ -1102,13 +1467,28 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isNull(Item.HitReceivedEffect effect) {
|
||||||
|
if (effect.ap_boost_min != null) return false;
|
||||||
|
if (effect.ap_boost_max != null) return false;
|
||||||
|
if (effect.hp_boost_min != null) return false;
|
||||||
|
if (effect.hp_boost_max != null) return false;
|
||||||
|
if (effect.ap_boost_min_target != null) return false;
|
||||||
|
if (effect.ap_boost_max_target != null) return false;
|
||||||
|
if (effect.hp_boost_min_target != null) return false;
|
||||||
|
if (effect.hp_boost_max_target != null) return false;
|
||||||
|
if (effect.conditions_source != null) return false;
|
||||||
|
if (effect.conditions_target != null) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
public class ItemFieldUpdater implements FieldUpdateListener {
|
public class ItemFieldUpdater implements FieldUpdateListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void valueChanged(JComponent source, Object value) {
|
public void valueChanged(JComponent source, Object value) {
|
||||||
Item item = (Item)target;
|
Item item = (Item)target;
|
||||||
boolean updatePrice, updateEquip, updateHit, updateKill;
|
boolean updatePrice, updateEquip, updateHit, updateKill, updateHitReceived;
|
||||||
updatePrice = updateEquip = updateHit = updateKill = false;
|
updatePrice = updateEquip = updateHit = updateKill = updateHitReceived = false;
|
||||||
if (source == idField) {
|
if (source == idField) {
|
||||||
//Events caused by cancel an ID edition. Dismiss.
|
//Events caused by cancel an ID edition. Dismiss.
|
||||||
if (skipNext) {
|
if (skipNext) {
|
||||||
@@ -1177,6 +1557,8 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
item.hit_effect = null;
|
item.hit_effect = null;
|
||||||
killEffectPane.setVisible(false);
|
killEffectPane.setVisible(false);
|
||||||
item.kill_effect = null;
|
item.kill_effect = null;
|
||||||
|
hitReceivedEffectPane.setVisible(false);
|
||||||
|
item.hit_received_effect = null;
|
||||||
ItemEditor.this.revalidate();
|
ItemEditor.this.revalidate();
|
||||||
ItemEditor.this.repaint();
|
ItemEditor.this.repaint();
|
||||||
} else if (item.category.action_type == ItemCategory.ActionType.use) {
|
} else if (item.category.action_type == ItemCategory.ActionType.use) {
|
||||||
@@ -1186,6 +1568,8 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
item.hit_effect = null;
|
item.hit_effect = null;
|
||||||
killEffectPane.setVisible(true);
|
killEffectPane.setVisible(true);
|
||||||
updateKill = true;
|
updateKill = true;
|
||||||
|
hitReceivedEffectPane.setVisible(false);
|
||||||
|
item.hit_received_effect = null;
|
||||||
killEffectPane.setTitle(useLabel);
|
killEffectPane.setTitle(useLabel);
|
||||||
ItemEditor.this.revalidate();
|
ItemEditor.this.revalidate();
|
||||||
ItemEditor.this.repaint();
|
ItemEditor.this.repaint();
|
||||||
@@ -1196,6 +1580,8 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
updateEquip = true;
|
updateEquip = true;
|
||||||
killEffectPane.setVisible(true);
|
killEffectPane.setVisible(true);
|
||||||
updateKill = true;
|
updateKill = true;
|
||||||
|
hitReceivedEffectPane.setVisible(true);
|
||||||
|
updateEquip = true;
|
||||||
killEffectPane.setTitle(killLabel);
|
killEffectPane.setTitle(killLabel);
|
||||||
ItemEditor.this.revalidate();
|
ItemEditor.this.revalidate();
|
||||||
ItemEditor.this.repaint();
|
ItemEditor.this.repaint();
|
||||||
@@ -1502,6 +1888,166 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
selectedKillEffectCondition.chance = (Double) value;
|
selectedKillEffectCondition.chance = (Double) value;
|
||||||
killSourceConditionsModel.itemChanged(selectedKillEffectCondition);
|
killSourceConditionsModel.itemChanged(selectedKillEffectCondition);
|
||||||
updateKill = true;
|
updateKill = true;
|
||||||
|
} else if (source == hitReceivedHPMin) {
|
||||||
|
hitReceivedEffect.hp_boost_min = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedHPMax) {
|
||||||
|
hitReceivedEffect.hp_boost_max = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedAPMin) {
|
||||||
|
hitReceivedEffect.ap_boost_min = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedAPMax) {
|
||||||
|
hitReceivedEffect.ap_boost_max = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedHPMinTarget) {
|
||||||
|
hitReceivedEffect.hp_boost_min_target = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedHPMaxTarget) {
|
||||||
|
hitReceivedEffect.hp_boost_max_target = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedAPMinTarget) {
|
||||||
|
hitReceivedEffect.ap_boost_min_target = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedAPMaxTarget) {
|
||||||
|
hitReceivedEffect.ap_boost_max_target = (Integer) value;
|
||||||
|
updatePrice = true;
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionsList) {
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionBox) {
|
||||||
|
if (selectedHitReceivedEffectSourceCondition.condition != null) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.condition.removeBacklink(item);
|
||||||
|
}
|
||||||
|
selectedHitReceivedEffectSourceCondition.condition = (ActorCondition) value;
|
||||||
|
if (selectedHitReceivedEffectSourceCondition.condition != null) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.condition_id = selectedHitReceivedEffectSourceCondition.condition.id;
|
||||||
|
selectedHitReceivedEffectSourceCondition.condition.addBacklink(item);
|
||||||
|
} else {
|
||||||
|
selectedHitReceivedEffectSourceCondition.condition_id = null;
|
||||||
|
}
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionClear && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.magnitude = ActorCondition.MAGNITUDE_CLEAR;
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = null;
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(selectedHitReceivedEffectSourceCondition);
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionApply && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.magnitude = (Integer) hitReceivedSourceConditionMagnitude.getValue();
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = hitReceivedSourceConditionForever.isSelected() ? ActorCondition.DURATION_FOREVER : (Integer) hitReceivedSourceConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectSourceCondition.duration == null) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(selectedHitReceivedEffectSourceCondition);
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionImmunity && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.magnitude = ActorCondition.MAGNITUDE_CLEAR;
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = hitReceivedSourceConditionForever.isSelected() ? ActorCondition.DURATION_FOREVER : (Integer) hitReceivedSourceConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectSourceCondition.duration == null || selectedHitReceivedEffectSourceCondition.duration == ActorCondition.DURATION_NONE) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(selectedHitReceivedEffectSourceCondition);
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionMagnitude) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.magnitude = (Integer) value;
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionTimed && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = (Integer) hitReceivedSourceConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectSourceCondition.duration == null || selectedHitReceivedEffectSourceCondition.duration == ActorCondition.DURATION_NONE) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(selectedHitReceivedEffectSourceCondition);
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionForever && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = ActorCondition.DURATION_FOREVER;
|
||||||
|
updateHitReceivedSourceTimedConditionWidgets(selectedHitReceivedEffectSourceCondition);
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionDuration) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.duration = (Integer) value;
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedSourceConditionChance) {
|
||||||
|
selectedHitReceivedEffectSourceCondition.chance = (Double) value;
|
||||||
|
hitReceivedSourceConditionsModel.itemChanged(selectedHitReceivedEffectSourceCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionsList) {
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionBox) {
|
||||||
|
if (selectedHitReceivedEffectTargetCondition.condition != null) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.condition.removeBacklink(item);
|
||||||
|
}
|
||||||
|
selectedHitReceivedEffectTargetCondition.condition = (ActorCondition) value;
|
||||||
|
if (selectedHitReceivedEffectTargetCondition.condition != null) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.condition_id = selectedHitReceivedEffectTargetCondition.condition.id;
|
||||||
|
selectedHitReceivedEffectTargetCondition.condition.addBacklink(item);
|
||||||
|
} else {
|
||||||
|
selectedHitReceivedEffectTargetCondition.condition_id = null;
|
||||||
|
}
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionClear && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.magnitude = ActorCondition.MAGNITUDE_CLEAR;
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = null;
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(selectedHitReceivedEffectTargetCondition);
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionApply && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.magnitude = (Integer) hitReceivedTargetConditionMagnitude.getValue();
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = hitReceivedTargetConditionForever.isSelected() ? ActorCondition.DURATION_FOREVER : (Integer) hitReceivedTargetConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectTargetCondition.duration == null || selectedHitReceivedEffectTargetCondition.duration == ActorCondition.DURATION_NONE) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(selectedHitReceivedEffectTargetCondition);
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionImmunity && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.magnitude = ActorCondition.MAGNITUDE_CLEAR;
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = hitReceivedTargetConditionForever.isSelected() ? ActorCondition.DURATION_FOREVER : (Integer) hitReceivedTargetConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectTargetCondition.duration == null || selectedHitReceivedEffectTargetCondition.duration == ActorCondition.DURATION_NONE) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(selectedHitReceivedEffectTargetCondition);
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionMagnitude) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.magnitude = (Integer) value;
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionTimed && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = (Integer) hitReceivedTargetConditionDuration.getValue();
|
||||||
|
if (selectedHitReceivedEffectTargetCondition.duration == null || selectedHitReceivedEffectTargetCondition.duration == ActorCondition.DURATION_NONE) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = 1;
|
||||||
|
}
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(selectedHitReceivedEffectTargetCondition);
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionForever && (Boolean) value) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = ActorCondition.DURATION_FOREVER;
|
||||||
|
updateHitReceivedTargetTimedConditionWidgets(selectedHitReceivedEffectTargetCondition);
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionDuration) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.duration = (Integer) value;
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
|
} else if (source == hitReceivedTargetConditionChance) {
|
||||||
|
selectedHitReceivedEffectTargetCondition.chance = (Double) value;
|
||||||
|
hitReceivedTargetConditionsModel.itemChanged(selectedHitReceivedEffectTargetCondition);
|
||||||
|
updateHitReceived = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateEquip) {
|
if (updateEquip) {
|
||||||
@@ -1525,6 +2071,13 @@ public class ItemEditor extends JSONElementEditor {
|
|||||||
item.kill_effect = killEffect;
|
item.kill_effect = killEffect;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (updateHitReceived) {
|
||||||
|
if (isNull(hitReceivedEffect)) {
|
||||||
|
item.hit_received_effect = null;
|
||||||
|
} else {
|
||||||
|
item.hit_received_effect = hitReceivedEffect;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (updatePrice && !manualPriceBox.isSelected()) {
|
if (updatePrice && !manualPriceBox.isSelected()) {
|
||||||
baseCostField.setValue(item.computePrice());
|
baseCostField.setValue(item.computePrice());
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user