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 description = null;
|
||||
public HitEffect hit_effect = null;
|
||||
public HitReceivedEffect hit_received_effect = null;
|
||||
public KillEffect kill_effect = null;
|
||||
public EquipEffect equip_effect = null;
|
||||
|
||||
@@ -58,6 +59,14 @@ public class Item extends JSONElement {
|
||||
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 {
|
||||
//Available from parsed state
|
||||
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");
|
||||
if (killEffect == null) {
|
||||
killEffect = (Map) itemJson.get("useEffect");
|
||||
@@ -321,6 +377,18 @@ public class Item extends JSONElement {
|
||||
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) {
|
||||
for (TimedConditionEffect ce : this.kill_effect.conditions_source) {
|
||||
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) {
|
||||
clone.kill_effect = new KillEffect();
|
||||
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) {
|
||||
Map killEffectJson = new LinkedHashMap();
|
||||
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 damage_resistance = null;
|
||||
public HitEffect hit_effect = null;
|
||||
public HitReceivedEffect hit_received_effect = null;
|
||||
public DeathEffect death_effect = null;
|
||||
|
||||
//Available from linked state
|
||||
public Dialogue dialogue = null;
|
||||
@@ -70,17 +72,29 @@ public class NPC extends JSONElement {
|
||||
protectSpawn,
|
||||
wholeMap
|
||||
}
|
||||
|
||||
public static class HitEffect {
|
||||
|
||||
public static class DeathEffect {
|
||||
//Available from parsed state
|
||||
public Integer hp_boost_min = null;
|
||||
public Integer hp_boost_max = null;
|
||||
public Integer ap_boost_min = null;
|
||||
public Integer ap_boost_max = null;
|
||||
public List<TimedConditionEffect> conditions_source = null;
|
||||
}
|
||||
|
||||
public static class HitEffect extends DeathEffect {
|
||||
//Available from parsed state
|
||||
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 {
|
||||
//Available from parsed state
|
||||
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
|
||||
@@ -267,6 +354,24 @@ public class NPC extends JSONElement {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -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_hp = this.max_hp;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@@ -57,7 +57,9 @@ public class ItemEditor extends JSONElementEditor {
|
||||
private Item.TimedConditionEffect selectedHitEffectSourceCondition;
|
||||
private Item.TimedConditionEffect selectedHitEffectTargetCondition;
|
||||
private Item.TimedConditionEffect selectedKillEffectCondition;
|
||||
|
||||
private Item.TimedConditionEffect selectedHitReceivedEffectSourceCondition;
|
||||
private Item.TimedConditionEffect selectedHitReceivedEffectTargetCondition;
|
||||
|
||||
|
||||
private JButton itemIcon;
|
||||
private JTextField idField;
|
||||
@@ -143,6 +145,40 @@ public class ItemEditor extends JSONElementEditor {
|
||||
private JRadioButton killSourceConditionForever;
|
||||
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) {
|
||||
super(item, item.getDesc(), item.getIcon());
|
||||
@@ -459,6 +495,142 @@ public class ItemEditor extends JSONElementEditor {
|
||||
}
|
||||
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) {
|
||||
equipEffectPane.setVisible(false);
|
||||
hitEffectPane.setVisible(false);
|
||||
@@ -817,6 +989,199 @@ public class ItemEditor extends JSONElementEditor {
|
||||
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> {
|
||||
|
||||
Item.KillEffect source;
|
||||
@@ -1102,13 +1467,28 @@ public class ItemEditor extends JSONElementEditor {
|
||||
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 {
|
||||
|
||||
@Override
|
||||
public void valueChanged(JComponent source, Object value) {
|
||||
Item item = (Item)target;
|
||||
boolean updatePrice, updateEquip, updateHit, updateKill;
|
||||
updatePrice = updateEquip = updateHit = updateKill = false;
|
||||
boolean updatePrice, updateEquip, updateHit, updateKill, updateHitReceived;
|
||||
updatePrice = updateEquip = updateHit = updateKill = updateHitReceived = false;
|
||||
if (source == idField) {
|
||||
//Events caused by cancel an ID edition. Dismiss.
|
||||
if (skipNext) {
|
||||
@@ -1177,6 +1557,8 @@ public class ItemEditor extends JSONElementEditor {
|
||||
item.hit_effect = null;
|
||||
killEffectPane.setVisible(false);
|
||||
item.kill_effect = null;
|
||||
hitReceivedEffectPane.setVisible(false);
|
||||
item.hit_received_effect = null;
|
||||
ItemEditor.this.revalidate();
|
||||
ItemEditor.this.repaint();
|
||||
} else if (item.category.action_type == ItemCategory.ActionType.use) {
|
||||
@@ -1186,6 +1568,8 @@ public class ItemEditor extends JSONElementEditor {
|
||||
item.hit_effect = null;
|
||||
killEffectPane.setVisible(true);
|
||||
updateKill = true;
|
||||
hitReceivedEffectPane.setVisible(false);
|
||||
item.hit_received_effect = null;
|
||||
killEffectPane.setTitle(useLabel);
|
||||
ItemEditor.this.revalidate();
|
||||
ItemEditor.this.repaint();
|
||||
@@ -1196,6 +1580,8 @@ public class ItemEditor extends JSONElementEditor {
|
||||
updateEquip = true;
|
||||
killEffectPane.setVisible(true);
|
||||
updateKill = true;
|
||||
hitReceivedEffectPane.setVisible(true);
|
||||
updateEquip = true;
|
||||
killEffectPane.setTitle(killLabel);
|
||||
ItemEditor.this.revalidate();
|
||||
ItemEditor.this.repaint();
|
||||
@@ -1502,6 +1888,166 @@ public class ItemEditor extends JSONElementEditor {
|
||||
selectedKillEffectCondition.chance = (Double) value;
|
||||
killSourceConditionsModel.itemChanged(selectedKillEffectCondition);
|
||||
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) {
|
||||
@@ -1525,6 +2071,13 @@ public class ItemEditor extends JSONElementEditor {
|
||||
item.kill_effect = killEffect;
|
||||
}
|
||||
}
|
||||
if (updateHitReceived) {
|
||||
if (isNull(hitReceivedEffect)) {
|
||||
item.hit_received_effect = null;
|
||||
} else {
|
||||
item.hit_received_effect = hitReceivedEffect;
|
||||
}
|
||||
}
|
||||
if (updatePrice && !manualPriceBox.isSelected()) {
|
||||
baseCostField.setValue(item.computePrice());
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user