- Added display of the current site number of a minion in play.
- "Forewarned" now discards itself if played decides to discard the top card.
This commit is contained in:
@@ -2,6 +2,7 @@ package com.gempukku.lotro.cards.set6.elven;
|
|||||||
|
|
||||||
import com.gempukku.lotro.cards.AbstractPermanent;
|
import com.gempukku.lotro.cards.AbstractPermanent;
|
||||||
import com.gempukku.lotro.cards.PlayConditions;
|
import com.gempukku.lotro.cards.PlayConditions;
|
||||||
|
import com.gempukku.lotro.cards.actions.SubCostToEffectAction;
|
||||||
import com.gempukku.lotro.cards.effects.DiscardCardFromDeckEffect;
|
import com.gempukku.lotro.cards.effects.DiscardCardFromDeckEffect;
|
||||||
import com.gempukku.lotro.common.*;
|
import com.gempukku.lotro.common.*;
|
||||||
import com.gempukku.lotro.game.PhysicalCard;
|
import com.gempukku.lotro.game.PhysicalCard;
|
||||||
@@ -10,6 +11,7 @@ import com.gempukku.lotro.logic.actions.ActivateCardAction;
|
|||||||
import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision;
|
import com.gempukku.lotro.logic.decisions.ArbitraryCardsSelectionDecision;
|
||||||
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
import com.gempukku.lotro.logic.decisions.DecisionResultInvalidException;
|
||||||
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
|
import com.gempukku.lotro.logic.effects.AddTwilightEffect;
|
||||||
|
import com.gempukku.lotro.logic.effects.DiscardCardsFromPlayEffect;
|
||||||
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
import com.gempukku.lotro.logic.effects.PlayoutDecisionEffect;
|
||||||
import com.gempukku.lotro.logic.timing.Action;
|
import com.gempukku.lotro.logic.timing.Action;
|
||||||
|
|
||||||
@@ -37,7 +39,7 @@ public class Card6_017 extends AbstractPermanent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<? extends Action> getExtraPhaseActions(String playerId, LotroGame game, PhysicalCard self) {
|
protected List<? extends Action> getExtraPhaseActions(String playerId, final LotroGame game, final PhysicalCard self) {
|
||||||
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self)) {
|
if (PlayConditions.canUseFPCardDuringPhase(game.getGameState(), Phase.FELLOWSHIP, self)) {
|
||||||
final ActivateCardAction action = new ActivateCardAction(self);
|
final ActivateCardAction action = new ActivateCardAction(self);
|
||||||
action.appendCost(
|
action.appendCost(
|
||||||
@@ -49,9 +51,14 @@ public class Card6_017 extends AbstractPermanent {
|
|||||||
@Override
|
@Override
|
||||||
public void decisionMade(String result) throws DecisionResultInvalidException {
|
public void decisionMade(String result) throws DecisionResultInvalidException {
|
||||||
final List<PhysicalCard> selectedCards = getSelectedCardsByResponse(result);
|
final List<PhysicalCard> selectedCards = getSelectedCardsByResponse(result);
|
||||||
for (PhysicalCard selectedCard : selectedCards) {
|
if (selectedCards.size() > 0) {
|
||||||
action.insertEffect(
|
PhysicalCard selectedCard = selectedCards.get(0);
|
||||||
|
SubCostToEffectAction subAction = new SubCostToEffectAction(action);
|
||||||
|
subAction.appendCost(
|
||||||
|
new DiscardCardsFromPlayEffect(self, self));
|
||||||
|
subAction.appendEffect(
|
||||||
new DiscardCardFromDeckEffect(selectedCard));
|
new DiscardCardFromDeckEffect(selectedCard));
|
||||||
|
game.getActionsEnvironment().addActionToStack(subAction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|||||||
@@ -82,10 +82,14 @@ public class EventSerializer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Map<Integer, Integer> charVitalities = gameStats.getCharVitalities();
|
Map<Integer, Integer> charVitalities = gameStats.getCharVitalities();
|
||||||
|
Map<Integer, Integer> charThirdStats = gameStats.getThirdStats();
|
||||||
|
|
||||||
StringBuilder charStr = new StringBuilder();
|
StringBuilder charStr = new StringBuilder();
|
||||||
for (Map.Entry<Integer, Integer> characters : gameStats.getCharStrengths().entrySet()) {
|
for (Map.Entry<Integer, Integer> characters : gameStats.getCharStrengths().entrySet()) {
|
||||||
charStr.append("," + characters.getKey() + "=" + characters.getValue() + "|" + charVitalities.get(characters.getKey()));
|
Integer charCardId = characters.getKey();
|
||||||
|
charStr.append("," + charCardId + "=" + characters.getValue() + "|" + charVitalities.get(charCardId));
|
||||||
|
if (charThirdStats.containsKey(charCardId))
|
||||||
|
charStr.append("|" + charThirdStats.get(charCardId));
|
||||||
}
|
}
|
||||||
if (charStr.length() > 0)
|
if (charStr.length() > 0)
|
||||||
charStr.delete(0, 1);
|
charStr.delete(0, 1);
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ public class GameStats {
|
|||||||
private Map<String, Map<Zone, Integer>> _zoneSizes = new HashMap<String, Map<Zone, Integer>>();
|
private Map<String, Map<Zone, Integer>> _zoneSizes = new HashMap<String, Map<Zone, Integer>>();
|
||||||
private Map<Integer, Integer> _charStrengths = new HashMap<Integer, Integer>();
|
private Map<Integer, Integer> _charStrengths = new HashMap<Integer, Integer>();
|
||||||
private Map<Integer, Integer> _charVitalities = new HashMap<Integer, Integer>();
|
private Map<Integer, Integer> _charVitalities = new HashMap<Integer, Integer>();
|
||||||
|
private Map<Integer, Integer> _thirdStats = new HashMap<Integer, Integer>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return If the stats have changed
|
* @return If the stats have changed
|
||||||
@@ -120,9 +121,12 @@ public class GameStats {
|
|||||||
|
|
||||||
Map<Integer, Integer> newCharStrengths = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> newCharStrengths = new HashMap<Integer, Integer>();
|
||||||
Map<Integer, Integer> newCharVitalities = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> newCharVitalities = new HashMap<Integer, Integer>();
|
||||||
|
Map<Integer, Integer> newThirdStats = new HashMap<Integer, Integer>();
|
||||||
for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) {
|
for (PhysicalCard character : Filters.filterActive(game.getGameState(), game.getModifiersQuerying(), Filters.or(CardType.COMPANION, CardType.ALLY, CardType.MINION))) {
|
||||||
newCharStrengths.put(character.getCardId(), game.getModifiersQuerying().getStrength(game.getGameState(), character));
|
newCharStrengths.put(character.getCardId(), game.getModifiersQuerying().getStrength(game.getGameState(), character));
|
||||||
newCharVitalities.put(character.getCardId(), game.getModifiersQuerying().getVitality(game.getGameState(), character));
|
newCharVitalities.put(character.getCardId(), game.getModifiersQuerying().getVitality(game.getGameState(), character));
|
||||||
|
if (character.getBlueprint().getCardType() == CardType.MINION)
|
||||||
|
newThirdStats.put(character.getCardId(), game.getModifiersQuerying().getMinionSiteNumber(game.getGameState(), character));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!newCharStrengths.equals(_charStrengths)) {
|
if (!newCharStrengths.equals(_charStrengths)) {
|
||||||
@@ -135,6 +139,11 @@ public class GameStats {
|
|||||||
_charVitalities = newCharVitalities;
|
_charVitalities = newCharVitalities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!newThirdStats.equals(_thirdStats)) {
|
||||||
|
changed = true;
|
||||||
|
_thirdStats = newThirdStats;
|
||||||
|
}
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +195,10 @@ public class GameStats {
|
|||||||
return _charVitalities;
|
return _charVitalities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<Integer, Integer> getThirdStats() {
|
||||||
|
return _thirdStats;
|
||||||
|
}
|
||||||
|
|
||||||
public GameStats makeACopy() {
|
public GameStats makeACopy() {
|
||||||
GameStats copy = new GameStats();
|
GameStats copy = new GameStats();
|
||||||
copy._fellowshipArchery = _fellowshipArchery;
|
copy._fellowshipArchery = _fellowshipArchery;
|
||||||
@@ -200,6 +213,7 @@ public class GameStats {
|
|||||||
copy._zoneSizes = _zoneSizes;
|
copy._zoneSizes = _zoneSizes;
|
||||||
copy._charStrengths = _charStrengths;
|
copy._charStrengths = _charStrengths;
|
||||||
copy._charVitalities = _charVitalities;
|
copy._charVitalities = _charVitalities;
|
||||||
|
copy._thirdStats = _thirdStats;
|
||||||
return copy;
|
return copy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,6 +47,15 @@ body {
|
|||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cardSiteNumber {
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
background-color: #877a4e;
|
||||||
|
opacity: 0.7;
|
||||||
|
font-weight: bolder;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
.selectableCard > .borderOverlay {
|
.selectableCard > .borderOverlay {
|
||||||
border-color: #00af00;
|
border-color: #00af00;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ against Nazgul.
|
|||||||
+1 strength to itself for each such card.
|
+1 strength to itself for each such card.
|
||||||
- User interface now displays damage bonuses in current skirmish (if any).
|
- User interface now displays damage bonuses in current skirmish (if any).
|
||||||
- "Forearmed" can now be used during Skirmish phase.
|
- "Forearmed" can now be used during Skirmish phase.
|
||||||
|
- Added display of the current site number of a minion in play.
|
||||||
|
- "Forewarned" now discards itself if played decides to discard the top card.
|
||||||
|
|
||||||
<b>1 Nov. 2011</b>
|
<b>1 Nov. 2011</b>
|
||||||
- Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it.
|
- Fixed "Theoden" (4P365) to not crash game due to testing if you can attach hides (also a possession, right?) to it.
|
||||||
|
|||||||
@@ -691,6 +691,7 @@ var GameAnimations = Class.extend({
|
|||||||
function(next) {
|
function(next) {
|
||||||
$(".cardStrength").css({display: "none"});
|
$(".cardStrength").css({display: "none"});
|
||||||
$(".cardVitality").css({display: "none"});
|
$(".cardVitality").css({display: "none"});
|
||||||
|
$(".cardSiteNumber").css({display: "none"});
|
||||||
|
|
||||||
var charStats = element.getAttribute("charStats");
|
var charStats = element.getAttribute("charStats");
|
||||||
if (charStats != null) {
|
if (charStats != null) {
|
||||||
@@ -701,6 +702,8 @@ var GameAnimations = Class.extend({
|
|||||||
var cardStatArr = cardStats[1].split("|");
|
var cardStatArr = cardStats[1].split("|");
|
||||||
$(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""});
|
$(".cardStrength", cardDiv).html(cardStatArr[0]).css({display: ""});
|
||||||
$(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""});
|
$(".cardVitality", cardDiv).html(cardStatArr[1]).css({display: ""});
|
||||||
|
if (cardStatArr.length > 2)
|
||||||
|
$(".cardSiteNumber", cardDiv).html(cardStatArr[2]).css({display: ""});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -875,20 +875,30 @@ var GempLotrGameUI = Class.extend({
|
|||||||
cardVitalityDiv.css({display: "none"});
|
cardVitalityDiv.css({display: "none"});
|
||||||
tokenOverlay.append(cardVitalityDiv);
|
tokenOverlay.append(cardVitalityDiv);
|
||||||
|
|
||||||
|
var cardSiteNumberDiv = $("<div class='cardSiteNumber'></div>");
|
||||||
|
cardSiteNumberDiv.css({display: "none"});
|
||||||
|
tokenOverlay.append(cardSiteNumberDiv);
|
||||||
|
|
||||||
cardDiv.data("card", card);
|
cardDiv.data("card", card);
|
||||||
|
|
||||||
var sizeListeners = new Array();
|
var sizeListeners = new Array();
|
||||||
sizeListeners[0] = {
|
sizeListeners[0] = {
|
||||||
sizeChanged: function(cardElem, width, height) {
|
sizeChanged: function(cardElem, width, height) {
|
||||||
var maxDimension = Math.max(width, height);
|
var maxDimension = Math.max(width, height);
|
||||||
var borderWidth = Math.floor(maxDimension / 30);
|
|
||||||
|
|
||||||
var size = Math.floor(maxDimension / 10);
|
var size = 0.0865 * maxDimension;
|
||||||
|
|
||||||
|
var x = 0.09255 * maxDimension - size / 2;
|
||||||
|
var strengthY = 0.67203 * maxDimension - size / 2;
|
||||||
|
var vitalityY = 0.79074 * maxDimension - size / 2;
|
||||||
|
var minionSiteNumberY = 0.89135 * maxDimension - size / 2;
|
||||||
|
|
||||||
var fontPerc = (size * 7) + "%";
|
var fontPerc = (size * 7) + "%";
|
||||||
var borderRadius = Math.ceil(size / 5) + "px";
|
var borderRadius = Math.ceil(size / 5) + "px";
|
||||||
|
|
||||||
$(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.64 + "px", width: size, height: size});
|
$(".cardStrength", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: strengthY + "px", width: size, height: size});
|
||||||
$(".cardVitality", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: borderWidth * 1.45 + "px", top: maxDimension * 0.645 + size + "px", width: size, height: size});
|
$(".cardVitality", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: vitalityY + "px", width: size, height: size});
|
||||||
|
$(".cardSiteNumber", cardElem).css({position: "absolute", "border-radius": borderRadius, "font-size": fontPerc, left: x + "px", top: minionSiteNumberY + "px", width: size, height: size});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -911,6 +921,7 @@ var GempLotrGameUI = Class.extend({
|
|||||||
};
|
};
|
||||||
cardDiv.swipe(swipeOptions);
|
cardDiv.swipe(swipeOptions);
|
||||||
|
|
||||||
|
|
||||||
return cardDiv;
|
return cardDiv;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user