Consolidated KilledInSkirmish -> Killed. Fixed bad condition in combined killed trigger code.

This commit is contained in:
Christian 'ketura' McCarty
2024-05-30 17:11:19 -05:00
parent a88e9a6c2d
commit c310817cf3
8 changed files with 23 additions and 56 deletions

View File

@@ -3706,9 +3706,10 @@
type: trigger
optional: true
trigger: {
type: killedInSkirmish
type: Killed
filter: or(companion,ally)
by: urukHai
killer: urukHai
inSkirmish: true
}
effect: {
type: takeControlOfSite

View File

@@ -156,9 +156,10 @@
effects: {
type: responseEvent
trigger: {
type: killedInSkirmish
type: Killed
filter: minion
by: dwarf
killer: dwarf
inSkirmish: true
memorize: killedMinion
}
text: Play for {killedMinion}

View File

@@ -1188,9 +1188,10 @@
type: trigger
optional: true
trigger: {
type: killedInSkirmish
type: Killed
filter: companion
by: culture(uruk-hai),minion
killer: culture(uruk-hai),minion
inSkirmish: true
}
cost: {
type: discardFromHand

View File

@@ -432,8 +432,9 @@
type: trigger
optional: true
trigger: {
type: killedInSkirmish
type: Killed
filter: culture(orc),minion
inSkirmish: true
}
effect: {
type: modifyStrength

View File

@@ -14,11 +14,12 @@ import org.json.simple.JSONObject;
public class Killed implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter", "killer", "memorize");
FieldUtils.validateAllowedFields(value, "filter", "killer", "inSkirmish", "memorize");
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
final String byFilter = FieldUtils.getString(value.get("killer"), "killer", "any");
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
final boolean inSkirmish = FieldUtils.getBoolean(value.get("inSkirmish"), "inSkirmish", false);
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final FilterableSource byFilterableSource = environment.getFilterFactory().generateFilter(byFilter, environment);
@@ -33,7 +34,15 @@ public class Killed implements TriggerCheckerProducer {
public boolean accepts(ActionContext actionContext) {
final Filterable filterable = filterableSource.getFilterable(actionContext);
Filterable byFilterable = byFilterableSource.getFilterable(actionContext);
final boolean result = TriggerConditions.forEachKilledBy(actionContext.getGame(), actionContext.getEffectResult(), byFilterable, filterable);
boolean result = false;
if(inSkirmish) {
result = TriggerConditions.forEachKilledInASkirmish(actionContext.getGame(), actionContext.getEffectResult(), byFilterable, filterable);
}
else {
result = TriggerConditions.forEachKilledBy(actionContext.getGame(), actionContext.getEffectResult(), byFilterable, filterable);
}
if (result && memorize != null) {
final PhysicalCard killedCard = ((ForEachKilledResult) actionContext.getEffectResult()).getKilledCard();
actionContext.setCardMemory(memorize, killedCard);

View File

@@ -1,45 +0,0 @@
package com.gempukku.lotro.cards.build.field.effect.trigger;
import com.gempukku.lotro.cards.build.ActionContext;
import com.gempukku.lotro.cards.build.CardGenerationEnvironment;
import com.gempukku.lotro.cards.build.FilterableSource;
import com.gempukku.lotro.cards.build.InvalidCardDefinitionException;
import com.gempukku.lotro.cards.build.field.FieldUtils;
import com.gempukku.lotro.common.Filterable;
import com.gempukku.lotro.game.PhysicalCard;
import com.gempukku.lotro.logic.timing.TriggerConditions;
import com.gempukku.lotro.logic.timing.results.ForEachKilledResult;
import org.json.simple.JSONObject;
public class KilledInSkirmish implements TriggerCheckerProducer {
@Override
public TriggerChecker getTriggerChecker(JSONObject value, CardGenerationEnvironment environment) throws InvalidCardDefinitionException {
FieldUtils.validateAllowedFields(value, "filter", "by", "memorize");
final String filter = FieldUtils.getString(value.get("filter"), "filter", "any");
final String by = FieldUtils.getString(value.get("by"), "by", "any");
final String memorize = FieldUtils.getString(value.get("memorize"), "memorize");
final FilterableSource filterableSource = environment.getFilterFactory().generateFilter(filter, environment);
final FilterableSource byFilterableSource = environment.getFilterFactory().generateFilter(by, environment);
return new TriggerChecker() {
@Override
public boolean isBefore() {
return false;
}
@Override
public boolean accepts(ActionContext actionContext) {
final Filterable byFilterable = byFilterableSource.getFilterable(actionContext);
final Filterable filterable = filterableSource.getFilterable(actionContext);
final boolean result = TriggerConditions.forEachKilledInASkirmish(actionContext.getGame(), actionContext.getEffectResult(), byFilterable, filterable);
if (result && memorize != null) {
final PhysicalCard killedCard = ((ForEachKilledResult) actionContext.getEffectResult()).getKilledCard();
actionContext.setCardMemory(memorize, killedCard);
}
return result;
}
};
}
}

View File

@@ -54,7 +54,6 @@ public class TriggerCheckerFactory {
triggerCheckers.put("fpstartedassigning", new FPStartedAssigning());
triggerCheckers.put("heals", new Heals());
triggerCheckers.put("killed", new Killed());
triggerCheckers.put("killedinskirmish", new KilledInSkirmish());
triggerCheckers.put("losesinitiative", new LosesInitiative());
triggerCheckers.put("losesskirmish", new LosesSkirmish());
triggerCheckers.put("played", new PlayedTriggerCheckerProducer());

View File

@@ -282,7 +282,7 @@ public class TriggerConditions {
ForEachKilledResult killResult = (ForEachKilledResult) effectResult;
var killers = killResult.getKillers();
if (killers == null || killers.isEmpty() || killers.stream().allMatch(Objects::isNull))
if (killedBy != Filters.any && (killers == null || killers.isEmpty() || killers.stream().allMatch(Objects::isNull)))
return false;
return Filters.filter(killResult.getKillers(), game, killedBy).size() > 0 &&