diff --git a/gemp-lotr/db/extract-tourney-replays.sql b/gemp-lotr/db/extract-tourney-replays.sql index a7b6a1229..2a7066783 100644 --- a/gemp-lotr/db/extract-tourney-replays.sql +++ b/gemp-lotr/db/extract-tourney-replays.sql @@ -33,7 +33,7 @@ -SET @player = 'sempolPL', @rank=0; +SET @player = 'basmelis', @rank=0; SELECT @player AS player @@ -42,6 +42,11 @@ SELECT WHEN winner = @player THEN CONCAT(REPLACE(winner, '_', '%5F'), '$', win_recording_id) ELSE CONCAT(REPLACE(loser, '_', '%5F'), '$', lose_recording_id) END, ']', @rank:=@rank+1,'[/url] • ') AS URL + ,CONCAT('https://play.lotrtcgpc.net/share/deck?id=', + CASE + WHEN winner = @player THEN TO_BASE64(CONCAT(winner, '|', winner_deck_name)) + ELSE TO_BASE64(CONCAT(loser, '|', loser_deck_name)) + END) AS DeckURL FROM game_history gh INNER JOIN player p ON p.name = @player diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cards/CardFilter.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cards/CardFilter.js index 90a234afe..704e654fa 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cards/CardFilter.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/cards/CardFilter.js @@ -267,6 +267,8 @@ var CardFilter = Class.extend({ this.itemClassLabel = $(""); this.itemClassSelect = $(""); diff --git a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/PossessionClass.java b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/PossessionClass.java index d94f7de2a..32088a6f6 100644 --- a/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/PossessionClass.java +++ b/gemp-lotr/gemp-lotr-common/src/main/java/com/gempukku/lotro/common/PossessionClass.java @@ -3,7 +3,7 @@ package com.gempukku.lotro.common; public enum PossessionClass implements Filterable { HAND_WEAPON("Hand Weapon"), ARMOR("Armor"), HELM("Helm"), MOUNT("Mount"), RANGED_WEAPON("Ranged Weapon"), CLOAK("Cloak"), PIPE("Pipe"), SHIELD("Shield"), BRACERS("Bracers"), STAFF("Staff"), RING("Ring"), - BROOCH("Brooch"), GAUNTLETS("Gauntlets"), BOX("Box"), PALANTIR("Palantir"), PHIAL("Phial"), HORN("Horn"), + BROOCH("Brooch"), GAUNTLETS("Gauntlets"), BOX("Box"), PALANTIR("Palantir"), PHIAL("Phial"), CLASSLESS("Classless"), //PC Classes diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/SortAndFilterCards.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/SortAndFilterCards.java index 6bd9e0933..657896530 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/SortAndFilterCards.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/game/SortAndFilterCards.java @@ -32,7 +32,7 @@ public class SortAndFilterCards { var textWords = getWords(params.get("gametext"), false); var keywords = getEnumFilter(Keyword.values(), Keyword.class, params.get("keyword"), true); - var phases = getEnumFilter(Keyword.values(),Keyword.class, params.get("phase"), true); + var phases = getEnumFilter(Timeword.values(),Timeword.class, params.get("phase"), true); var races = getEnumFilter(Race.values(), Race.class, params.get("race"), true); var itemClasses = getEnumFilter(PossessionClass.values(), PossessionClass.class, params.get("itemclass"), true); @@ -56,7 +56,7 @@ public class SortAndFilterCards { //In this giant loop, we will go through every item handed to us and see if it matches all of the above filter // conditions. Whenever we fail a filter, we hit "continue" and move on to the next item to check. - for (T item : items) { + cardValidation: for (T item : items) { String blueprintId = item.getBlueprintId(); String strippedId = BlueprintUtils.stripModifiers(blueprintId); @@ -174,8 +174,18 @@ public class SortAndFilterCards { continue; if(!phases.isEmpty()) { - if(card.getCardType() != CardType.EVENT || !containsAnyKeywords(card, phases)) - continue; + if(card.getCardType() == CardType.EVENT) { + if(!containsAnyTimewords(card, phases)) + continue; + } + else { + for(var timeword : phases) { + String timephrase = StringUtils.capitalize(timeword.toString().toLowerCase() + ":"); + if(!containsAllWords(GameUtils.getFullText(card), Collections.singletonList(timephrase))) + continue cardValidation; + } + } + } if(!itemClasses.isEmpty() && !containsAnyClasses(card, itemClasses)) @@ -345,6 +355,14 @@ public class SortAndFilterCards { return false; } + private boolean containsAnyTimewords(LotroCardBlueprint blueprint, Set timewords) { + for (Timeword timeword : timewords) { + if (blueprint.hasTimeword(timeword)) + return true; + } + return false; + } + private boolean containsAnyClasses(LotroCardBlueprint blueprint, Set itemClassFilters) { if (blueprint == null) return false;