mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-19 12:18:00 +00:00
- Added Goblin Game and Menacing Ogre
This commit is contained in:
@@ -1,12 +1,19 @@
|
||||
package forge.game.ability.effects;
|
||||
|
||||
import forge.game.ability.AbilityFactory;
|
||||
import forge.game.ability.AbilityUtils;
|
||||
import forge.game.ability.SpellAbilityEffect;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.spellability.AbilitySub;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
import forge.game.spellability.TargetRestrictions;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Random;
|
||||
|
||||
public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
@@ -33,6 +40,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
//final int max = sa.containsKey("Max") ? Integer.parseInt(sa.get("Max")) : 99;
|
||||
final boolean random = sa.hasParam("Random");
|
||||
final boolean anyNumber = sa.hasParam("ChooseAnyNumber");
|
||||
final boolean secretlyChoose = sa.hasParam("SecretlyChoose");
|
||||
|
||||
final String sMin = sa.getParamOrDefault("Min", "0");
|
||||
final int min = AbilityUtils.calculateAmount(card, sMin, sa);
|
||||
@@ -41,6 +49,7 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
|
||||
final List<Player> tgtPlayers = getTargetPlayers(sa);
|
||||
final TargetRestrictions tgt = sa.getTargetRestrictions();
|
||||
final Map<Player, Integer> chooseMap = new HashMap<Player, Integer>();
|
||||
|
||||
for (final Player p : tgtPlayers) {
|
||||
if ((tgt == null) || p.canBeTargetedBy(sa)) {
|
||||
@@ -58,12 +67,81 @@ public class ChooseNumberEffect extends SpellAbilityEffect {
|
||||
}
|
||||
// don't notify here, because most scripts I've seen don't store that number in a long term
|
||||
}
|
||||
card.setChosenNumber(chosen);
|
||||
if (secretlyChoose) {
|
||||
chooseMap.put(p, chosen);
|
||||
} else {
|
||||
card.setChosenNumber(chosen);
|
||||
}
|
||||
if (sa.hasParam("Notify")) {
|
||||
p.getGame().getAction().nofityOfValue(sa, card, p.getName() + " picked " + chosen, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (secretlyChoose) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
List<Player> highestNum = new ArrayList<Player>();
|
||||
List<Player> lowestNum = new ArrayList<Player>();
|
||||
int highest = 0;
|
||||
int lowest = Integer.MAX_VALUE;
|
||||
for (Entry<Player, Integer> ev : chooseMap.entrySet()) {
|
||||
int num = ev.getValue();
|
||||
Player player = ev.getKey();
|
||||
sb.append(player).append(" chose ").append(num);
|
||||
sb.append("\r\n");
|
||||
if (num > highest) {
|
||||
highestNum.clear();
|
||||
highest = num;
|
||||
}
|
||||
if (num == highest) {
|
||||
highestNum.add(player);
|
||||
}
|
||||
if (num < lowest) {
|
||||
lowestNum.clear();
|
||||
lowest = num;
|
||||
}
|
||||
if (num == lowest) {
|
||||
lowestNum.add(player);
|
||||
}
|
||||
}
|
||||
card.getGame().getAction().nofityOfValue(sa, card, sb.toString(), null);
|
||||
if (sa.hasParam("ChooseNumberSubAbility")) {
|
||||
SpellAbility sub = AbilityFactory.getAbility(card.getSVar(sa.getParam("ChooseNumberSubAbility")), card);
|
||||
sub.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
((AbilitySub) sub).setParent(sa);
|
||||
for (Player p : chooseMap.keySet()) {
|
||||
card.addRemembered(p);
|
||||
card.setChosenNumber(chooseMap.get(p));
|
||||
AbilityUtils.resolve(sub);
|
||||
card.clearRemembered();
|
||||
}
|
||||
}
|
||||
|
||||
if (sa.hasParam("Lowest")) {
|
||||
SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("Lowest")), card);
|
||||
action.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
((AbilitySub) action).setParent(sa);
|
||||
for (Player p : lowestNum) {
|
||||
card.addRemembered(p);
|
||||
card.setChosenNumber(lowest);
|
||||
AbilityUtils.resolve(action);
|
||||
card.clearRemembered();
|
||||
}
|
||||
}
|
||||
if (sa.hasParam("Highest")) {
|
||||
SpellAbility action = AbilityFactory.getAbility(card.getSVar(sa.getParam("Highest")), card);
|
||||
action.setActivatingPlayer(sa.getActivatingPlayer());
|
||||
((AbilitySub) action).setParent(sa);
|
||||
for (Player p : highestNum) {
|
||||
card.addRemembered(p);
|
||||
card.setChosenNumber(highest);
|
||||
AbilityUtils.resolve(action);
|
||||
card.clearRemembered();
|
||||
}
|
||||
if (sa.hasParam("RememberHighest")) {
|
||||
card.getRemembered().addAll(highestNum);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user