diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerInfoRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerInfoRequestHandler.java new file mode 100644 index 000000000..f124f49b6 --- /dev/null +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/PlayerInfoRequestHandler.java @@ -0,0 +1,51 @@ +package com.gempukku.lotro.async.handler; + +import com.gempukku.lotro.async.HttpProcessingException; +import com.gempukku.lotro.async.ResponseWriter; +import com.gempukku.lotro.db.PlayerStatistic; +import com.gempukku.lotro.db.vo.GameHistoryEntry; +import com.gempukku.lotro.game.GameHistoryService; +import com.gempukku.lotro.game.Player; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.QueryStringDecoder; +import io.netty.handler.codec.http.multipart.HttpPostRequestDecoder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import java.lang.reflect.Type; +import java.text.DecimalFormat; +import java.util.List; +import java.util.Map; + +import com.google.gson.Gson; + +public class PlayerInfoRequestHandler extends LotroServerRequestHandler implements UriRequestHandler { + private Gson JsonConvert = new Gson(); + + public PlayerInfoRequestHandler(Map context) { + super(context); + + } + + @Override + public void handleRequest(String uri, HttpRequest request, Map context, ResponseWriter responseWriter, String remoteIp) throws Exception { + if (uri.equals("") && request.method() == HttpMethod.GET) { + QueryStringDecoder queryDecoder = new QueryStringDecoder(request.getUri()); + String participantId = getQueryParameterSafely(queryDecoder, "participantId"); + Player resourceOwner = getResourceOwnerSafely(request, participantId); + + String playerName = resourceOwner.getName(); + responseWriter.writeJsonResponse(JsonConvert.toJson(playerName)); + + } else { + throw new HttpProcessingException(404); + } + } + + + + +} diff --git a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java index 12f63933f..f6379246a 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java +++ b/gemp-lotr/gemp-lotr-async/src/main/java/com/gempukku/lotro/async/handler/RootUriRequestHandler.java @@ -34,6 +34,7 @@ public class RootUriRequestHandler implements UriRequestHandler { private TournamentRequestHandler _tournamentRequestHandler; private SoloDraftRequestHandler _soloDraftRequestHandler; private PlaytestRequestHandler _playtestRequestHandler; + private PlayerInfoRequestHandler _playerInfoRequestHandler; private Pattern originPattern; @@ -60,6 +61,7 @@ public class RootUriRequestHandler implements UriRequestHandler { _tournamentRequestHandler = new TournamentRequestHandler(context); _soloDraftRequestHandler = new SoloDraftRequestHandler(context); _playtestRequestHandler = new PlaytestRequestHandler(context); + _playerInfoRequestHandler = new PlayerInfoRequestHandler(context); } @Override @@ -116,6 +118,9 @@ public class RootUriRequestHandler implements UriRequestHandler { } else if (uri.startsWith(_serverContextPath + "playtesting")) { _playtestRequestHandler.handleRequest(uri.substring(_serverContextPath.length() + 11), request, context, responseWriter, remoteIp); + } else if (uri.startsWith(_serverContextPath + "player")) { + _playerInfoRequestHandler.handleRequest(uri.substring(_serverContextPath.length() + 6), request, context, responseWriter, remoteIp); + } else { throw new HttpProcessingException(404); } diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/css/gemp-001/hall.css b/gemp-lotr/gemp-lotr-async/src/main/web/css/gemp-001/hall.css index 34e92712f..ffbb701a3 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/css/gemp-001/hall.css +++ b/gemp-lotr/gemp-lotr-async/src/main/web/css/gemp-001/hall.css @@ -172,4 +172,75 @@ table.tables td, table.tables th { tr.played { background-color: #990000; -} \ No newline at end of file +} + +#chat { + display: grid; + grid-template-columns: auto 150px; + position:relative; + width:100%; + height:100%; + grid-gap: 3px; + overflow: hidden; +} + +#chatarea { + position:relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +#chatMessages { + height: 100%; + max-height: 100%; + overflow-y: scroll; + display: flex; + flex-direction: column; +} + +#userListColumn { + display: flex; + flex-direction: column; + overflow: auto; +} + +#userList { + flex-grow: 1; + overflow: scroll; +} + +#toggleChatButt { + flex: none; + height: 25px; +} + +#legacyChat { + + display: grid; + width: 100%; + height: 100%; + max-height: 100%; + grid-template-columns: auto; + grid-template-rows: auto 25px; +} + +#legacyChatInput { + display: flex; +} + +#chatTalk { + flex-grow: 1; +} + +#discordChat { + position: absolute; + top: 0; + width: 100%; + height: 100%; +} +#widgetbot { + position: relative; + width: 100%; + height: 100%; +} diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/hall.html b/gemp-lotr/gemp-lotr-async/src/main/web/hall.html index b91c8eb72..e3bb9618e 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/hall.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/hall.html @@ -63,7 +63,7 @@ $("#latestNews").append( "If you find any problems with specific card or rules in general, please report it on TLHH forum - Report a bug, please include game replay link."); - chat = new ChatBoxUI("Game Hall", $("#chat"), "/gemp-lotr-server", true, null, false, true, null); + chat = new ChatBoxUI("Game Hall", $("#chat"), "/gemp-lotr-server", true, null, false, true, null, true); chat.setBounds(2, 2, 780 - 4, 200 - 4); chat.showTimestamps = true; @@ -188,8 +188,30 @@
-
+
+
+
+
+
+ + + + +
+
+ + +
+ + +
+
+
+
+ +
+
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html index 7df692ed1..0d48794a5 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html +++ b/gemp-lotr/gemp-lotr-async/src/main/web/includes/changeLog.html @@ -1,5 +1,13 @@
 Most recent update
+09 Aug. 2021
+- Added Discord integration.  Click the "Switch to Discord" button in the lower right for integration with the Discord server of the Player's Council.
+- (If it says "Discord is currently unavailable", try switching channels in the left navigation bar or refreshing the page.)
+- (If you see any bugs or have any issues, please report it to @ketura on the PC Discord.)
+- If you don't like it or it's being too buggy, feel free to switch back to the old chat by clicking the "Switch to Legacy" button in the lower right.
+- Check out the #gemp-announcements channel for a list of things you can do, or check out the Markdown tutorial here for examples of how to use some of the new functionality.
+
+22 Aug. 2019
 - Added "The Clouds Burst" Expansion for The Hobbit Draft game
 - "Final Cry" should now work if The Balrog is discarded or killed in a skirmish
 - "Anything goes" format now allows for sites from Fellowship or King blocks in addition to Towers block
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
index 3c1c65a57..f658e7974 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/PC_Cards.js
@@ -151,6 +151,12 @@ var PCCards = {
 	// April 2021
 	'11_267': 'https://i.lotrtcgpc.net/promos/2021/04/PCPROMO_FA_11054.jpg',
 	'11_268': 'https://i.lotrtcgpc.net/promos/2021/04/PCPROMO_FA_11226.jpg',
+	//August 2021
+	'1_366': 'https://i.lotrtcgpc.net/promos/2021/08/PCPROMO_FA_01298.jpg',
+	'1_367': 'https://i.lotrtcgpc.net/promos/2021/08/PCPROMO_FA_01349.jpg',
+	//September 2021
+	'9_53': 'https://i.lotrtcgpc.net/promos/2021/09/PCPROMO_FA_09033.jpg',
+	'10_123':'https://i.lotrtcgpc.net/promos/2021/09/PCPROMO_FA_10123.jpg',
 	
 	// Player's Council FOTR+
 	'151_1': 'https://i.lotrtcgpc.net/sets/vset1/vpack1/V1_001.jpg',
@@ -168,6 +174,5 @@ var PCCards = {
 	'151_93': 'https://i.lotrtcgpc.net/sets/vset1/vpack1/V1_093.jpg',
 	'151_94': 'https://i.lotrtcgpc.net/sets/vset1/vpack1/V1_094.jpg',
 	
-	
 }
 
diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/chat.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/chat.js
index a1df00b1e..20790c645 100644
--- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/chat.js
+++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/chat.js
@@ -1,7 +1,8 @@
 var ChatBoxUI = Class.extend({
     name:null,
+    userName:null,
     div:null,
-    communication:null,
+    comm:null,
 
     chatMessagesDiv:null,
     chatTalkDiv:null,
@@ -23,48 +24,89 @@ var ChatBoxUI = Class.extend({
     stopUpdates: false,
     
     dialogListener: null,
+    
+    enableDiscord: false,
+    discordDiv:null,
+    discordWidget:null,
+    chatEmbed:null,
+    displayDiscord:true,
+    
+    toggleChatButton:null,
 
-    init:function (name, div, url, showList, playerListener, showHideSystemButton, showLockButton, displayChatListener) {
+    init:function (name, div, url, showList, playerListener, showHideSystemButton, showLockButton, displayChatListener, allowDiscord=false) {
         var that = this;
+             
         this.hiddenClasses = new Array();
         this.playerListener = playerListener;
-        this.dialogListener = displayChatListener,
+        this.dialogListener = displayChatListener;
         this.name = name;
         this.div = div;
-        this.communication = new GempLotrCommunication(url, function (xhr, ajaxOptions, thrownError) {
-            that.appendMessage("Unkown chat problem occured (error=" + xhr.status + ")", "warningMessage");
-        });
+        
+        //This needs to be done before the comm object is instantiated, as otherwise it's too slow for immediate errors
 
-        this.chatMessagesDiv = $("
"); - this.div.append(this.chatMessagesDiv); + if(this.name == "Game Hall") + { + this.chatMessagesDiv = $("#chatMessages"); + } + else + { + this.chatMessagesDiv = $("
"); + this.div.append(this.chatMessagesDiv); + } + + + this.comm = new GempLotrCommunication(url, function (xhr, ajaxOptions, thrownError) { + that.appendMessage("Unknown chat problem occured (error=" + xhr.status + ")", "warningMessage"); + }); + this.enableDiscord = allowDiscord; + + if (this.name != null) { - this.chatTalkDiv = $(""); + + if(this.name == "Game Hall") + { + + + this.discordDiv = $("#discordChat"); + this.comm.getPlayerInfo(function(json) + { + that.userName = json; + }, this.chatErrorMap()); - if (showHideSystemButton) { - this.hideSystemButton = $("").button( - {icons:{ - primary:"ui-icon-zoomin" - }, text:false}); - this.hideSystemButton.click( - function () { - if (that.isShowingMessageClass("systemMessage")) { - $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomin'}); - that.hideMessageClass("systemMessage"); - } else { - $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomout'}); - that.showMessageClass("systemMessage"); - } - }); - this.hideMessageClass("systemMessage"); - } + this.chatTalkDiv = $("#chatTalk"); - if (showLockButton) { - this.lockButton = $("").button( - {icons:{ - primary:"ui-icon-locked" - }, text:false}); - this.lockButton.click( + this.hideSystemButton = $("#showSystemButton"); + if (showHideSystemButton) { + hideSystemButton.button({icons:{ + primary:"ui-icon-zoomin" + }, text:false}); + + this.hideSystemButton.click( + function () { + if (that.isShowingMessageClass("systemMessage")) { + $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomin'}); + that.hideMessageClass("systemMessage"); + } else { + $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomout'}); + that.showMessageClass("systemMessage"); + } + }); + this.hideMessageClass("systemMessage"); + } + else + { + this.hideSystemButton.hide(); + this.hideSystemButton = null; + } + + this.lockButton = $("#lockChatButton"); + if (showLockButton) { + this.lockButton.button({icons:{ + primary:"ui-icon-locked" + }, text:false}); + + this.lockButton.click( function () { if (that.lockChat) { $('#lockChatButton').button("option", "icons", {primary:'ui-icon-locked'}); @@ -72,39 +114,116 @@ var ChatBoxUI = Class.extend({ } else { $('#lockChatButton').button("option", "icons", {primary:'ui-icon-unlocked'}); that.lockChat = true; - } - }); - } - - if (showList) { - this.chatListDiv = $("
"); - this.div.append(this.chatListDiv); - } - if (this.hideSystemButton != null) - this.div.append(this.hideSystemButton); - if (this.lockButton != null) - this.div.append(this.lockButton); - this.div.append(this.chatTalkDiv); - - this.communication.startChat(this.name, - function (xml) { - that.processMessages(xml, true); - }, this.chatErrorMap()); - - this.chatTalkDiv.bind("keypress", function (e) { - var code = (e.keyCode ? e.keyCode : e.which); - if (code == 13) { - var value = $(this).val(); - if (value != "") - that.sendMessage(value); - $(this).val(""); + } + }); } - }); + else + { + this.lockButton.hide(); + this.lockButton = null; + } + + this.comm.startChat(this.name, + function (xml) { + that.processMessages(xml, true); + }, this.chatErrorMap()); + + this.chatTalkDiv.bind("keypress", function (e) { + var code = (e.keyCode ? e.keyCode : e.which); + if (code == 13) { + var value = $(this).val(); + if (value != "") + that.sendMessage(value); + $(this).val(""); + } + }); + + + if (showList) { + this.chatListDiv = $("#userList"); + this.toggleChatButton = $("#toggleChatButt"); + + this.toggleChatButton.button(); + this.toggleChatButton.click( function() { + that.toggleChat(); + }); + } + + this.setDiscordVisible(false); + } + else + { + + + this.chatTalkDiv = $(""); + + if (showHideSystemButton) { + this.hideSystemButton = $("").button( + {icons:{ + primary:"ui-icon-zoomin" + }, text:false}); + this.hideSystemButton.click( + function () { + if (that.isShowingMessageClass("systemMessage")) { + $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomin'}); + that.hideMessageClass("systemMessage"); + } else { + $('#showSystemMessages').button("option", "icons", {primary:'ui-icon-zoomout'}); + that.showMessageClass("systemMessage"); + } + }); + this.hideMessageClass("systemMessage"); + } + + if (showLockButton) { + this.lockButton = $("").button( + {icons:{ + primary:"ui-icon-locked" + }, text:false}); + this.lockButton.click( + function () { + if (that.lockChat) { + $('#lockChatButton').button("option", "icons", {primary:'ui-icon-locked'}); + that.lockChat = false; + } else { + $('#lockChatButton').button("option", "icons", {primary:'ui-icon-unlocked'}); + that.lockChat = true; + } + }); + } + + if (showList) { + this.chatListDiv = $("
"); + this.div.append(this.chatListDiv); + } + if (this.hideSystemButton != null) + this.div.append(this.hideSystemButton); + if (this.lockButton != null) + this.div.append(this.lockButton); + this.div.append(this.chatTalkDiv); + + this.comm.startChat(this.name, + function (xml) { + that.processMessages(xml, true); + }, this.chatErrorMap()); + + this.chatTalkDiv.bind("keypress", function (e) { + var code = (e.keyCode ? e.keyCode : e.which); + if (code == 13) { + var value = $(this).val(); + if (value != "") + that.sendMessage(value); + $(this).val(""); + } + }); + } + } else { this.talkBoxHeight = 0; } }, + hideMessageClass:function (msgClass) { this.hiddenClasses.push(msgClass); $("div.message." + msgClass, this.chatMessagesDiv).hide(); @@ -128,29 +247,104 @@ var ChatBoxUI = Class.extend({ }, setBounds:function (x, y, width, height) { - var talkBoxPadding = 3; + + if(this.name != "Game Hall") + { + var talkBoxPadding = 3; - var userListWidth = 150; - if (this.chatListDiv == null) - userListWidth = 0; + var userListWidth = 150; + if (this.chatListDiv == null) + userListWidth = 0; - if (this.chatListDiv != null) - this.chatListDiv.css({ position:"absolute", left:x + width - userListWidth + "px", top:y + "px", width:userListWidth, height:height - this.talkBoxHeight - 3 * talkBoxPadding, overflow:"auto" }); - this.chatMessagesDiv.css({ position:"absolute", left:x + "px", top:y + "px", width:width - userListWidth, height:height - this.talkBoxHeight - 3 * talkBoxPadding, overflow:"auto" }); - if (this.chatTalkDiv != null) { - var leftTextBoxPadding = 0; + if (this.chatListDiv != null) + this.chatListDiv.css({ position:"absolute", left:x + width - userListWidth + "px", top:y + "px", width:userListWidth, height:height - this.talkBoxHeight - 3 * talkBoxPadding, overflow:"auto" }); + + if(this.chatMessagesDiv != null) + this.chatMessagesDiv.css({ position:"absolute", left:x + "px", top:y + "px", width:width - userListWidth, height:height - this.talkBoxHeight - 3 * talkBoxPadding, overflow:"auto" }); + + if (this.chatTalkDiv != null) { + var leftTextBoxPadding = 0; - if (this.hideSystemButton != null) { - this.hideSystemButton.css({position:"absolute", left:x + width - talkBoxPadding - this.talkBoxHeight + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:this.talkBoxHeight, height:this.talkBoxHeight}); - leftTextBoxPadding += this.talkBoxHeight + talkBoxPadding; + if (this.hideSystemButton != null) { + this.hideSystemButton.css({position:"absolute", left:x + width - talkBoxPadding - this.talkBoxHeight + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:this.talkBoxHeight, height:this.talkBoxHeight}); + leftTextBoxPadding += this.talkBoxHeight + talkBoxPadding; + } + if (this.lockButton != null) { + this.lockButton.css({position:"absolute", left:x + width - talkBoxPadding - this.talkBoxHeight - leftTextBoxPadding + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:this.talkBoxHeight, height:this.talkBoxHeight}); + leftTextBoxPadding += this.talkBoxHeight + talkBoxPadding; + } + + this.chatTalkDiv.css({ position:"absolute", left:x + talkBoxPadding + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:width - 3 * talkBoxPadding - leftTextBoxPadding, height:this.talkBoxHeight }); } - if (this.lockButton != null) { - this.lockButton.css({position:"absolute", left:x + width - talkBoxPadding - this.talkBoxHeight - leftTextBoxPadding + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:this.talkBoxHeight, height:this.talkBoxHeight}); - leftTextBoxPadding += this.talkBoxHeight + talkBoxPadding; - } - - this.chatTalkDiv.css({ position:"absolute", left:x + talkBoxPadding + "px", top:y - 2 * talkBoxPadding + (height - this.talkBoxHeight) + "px", width:width - 3 * talkBoxPadding - leftTextBoxPadding, height:this.talkBoxHeight }); } + + this.handleChatVisibility(); + }, + + handleChatVisibility:function() { + + if(this.enableDiscord) + { + if(this.displayDiscord) + { + this.toggleChatButton.text("Switch to Legacy"); + + if(this.chatEmbed == null) + { + this.discordDiv.show(); + this.chatEmbed = $(""); + var script = $(""); + this.discordDiv.append(script); + this.discordDiv.append(this.chatEmbed); + } + } + else + { + this.toggleChatButton.text("Switch to Discord"); + } + } + + if(this.enableDiscord && this.displayDiscord) + { + if(this.discordDiv != null) + this.discordDiv.show(); + + if(this.chatMessagesDiv != null) + this.chatMessagesDiv.hide(); + if(this.chatTalkDiv != null) + this.chatTalkDiv.hide(); + if(this.hideSystemButton != null) + this.hideSystemButton.hide(); + if(this.lockButton != null) + this.lockButton.hide(); + } + else + { + if(this.discordDiv != null) + this.discordDiv.hide(); + + if(this.chatMessagesDiv != null) + this.chatMessagesDiv.show(); + if(this.chatTalkDiv != null) + this.chatTalkDiv.show(); + if(this.hideSystemButton != null) + this.hideSystemButton.show(); + if(this.lockButton != null) + this.lockButton.show(); + } + + }, + + toggleChat:function() { + this.setDiscordVisible(!this.displayDiscord); + }, + + setDiscordVisible:function(visible) + { + this.displayDiscord = visible; + + this.handleChatVisibility(); + }, checkForEnd:function (message, msgClass) { @@ -249,20 +443,25 @@ var ChatBoxUI = Class.extend({ updateChatMessages:function () { var that = this; - this.communication.updateChat(this.name, function (xml) { + this.comm.updateChat(this.name, function (xml) { that.processMessages(xml, true); }, this.chatErrorMap()); }, sendMessage:function (message) { var that = this; - this.communication.sendChatMessage(this.name, message, this.chatErrorMap()); + this.comm.sendChatMessage(this.name, message, this.chatErrorMap()); + + //this.chatEmbed.emit("sendMessage", message); }, chatMalfunction: function() { this.stopUpdates = true; this.chatTalkDiv.prop('disabled', true); this.chatTalkDiv.css({"background-color": "#ff9999"}); + + this.discordDiv.prop('disabled', true); + this.discordDiv.css({"background-color": "#ff9999"}); }, chatErrorMap:function() { @@ -289,5 +488,7 @@ var ChatBoxUI = Class.extend({ that.appendMessage("You have been inactive for too long and were removed from the chat room. Refresh the page if you wish to re-enter.", "warningMessage"); } }; - } + }, + + }); diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/communication.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/communication.js index 955126eb9..808e2a721 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/communication.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/communication.js @@ -657,6 +657,20 @@ var GempLotrCommunication = Class.extend({ }); }, + getPlayerInfo:function (callback, errorMap) { + $.ajax({ + type:"GET", + url:this.url + "/player", + cache:false, + data:{ + participantId:getUrlParam("participantId") + }, + success:this.deliveryCheck(callback), + error:this.errorCheck(errorMap), + dataType:"json" + }); + }, + getStatus:function (callback, errorMap) { $.ajax({ type:"GET", diff --git a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/jCards.js b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/jCards.js index 27a50f57e..dea006842 100644 --- a/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/jCards.js +++ b/gemp-lotr/gemp-lotr-async/src/main/web/js/gemp-022/jCards.js @@ -252,7 +252,7 @@ var Card = Class.extend({ if (setNo == 0) return (cardNo == 1 || cardNo == 4 || cardNo == 6 || cardNo == 8); if (setNo == 1) - return (cardNo >= 319 && cardNo <= 363); + return ((cardNo >= 319 && cardNo <= 363) || cardNo == 367); if (setNo == 2) return (cardNo >= 115 && cardNo <= 120); if (setNo == 3) diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt index f845fd289..dd4ac2a2d 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/blueprintMapping.txt @@ -229,5 +229,15 @@ # Gemp-LotR promos gl_theOneRing,1_2 #Player's Council League Promos +#Aragorn, Strider 11_267,11_54 +#The Witch-king, Captain of the Nine Riders 11_268,11_226 +#Hobbit Stealth - 2021/08 +1_366,1_298 +#Bridge of Khazad-dum - 2021/08 +1_367,1_349 +#Isildur, Bearer of Heirlooms - 2021/09 +9_53,9_33 +#Shelob, Her Ladyship - 2021/09 +10_123,10_23 \ No newline at end of file diff --git a/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json b/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json index a3aa4cc23..9fda2bc5e 100644 --- a/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json +++ b/gemp-lotr/gemp-lotr-cards/src/main/resources/setConfig.json @@ -242,7 +242,7 @@ { - "setId": "60", + "setId": "80", "setName": "PC MD Errata", "rarityFile": "/errata/set80-rarity.txt", "originalSet": false, @@ -251,7 +251,7 @@ "playable": true }, { - "setId": "61", + "setId": "81", "setName": "PC Shadows Errata", "rarityFile": "/errata/set81-rarity.txt", "originalSet": false, @@ -260,7 +260,7 @@ "playable": true }, { - "setId": "62", + "setId": "82", "setName": "PC BR Errata", "rarityFile": "/errata/set82-rarity.txt", "originalSet": false, @@ -269,7 +269,7 @@ "playable": true }, { - "setId": "63", + "setId": "83", "setName": "PC Bloodlines Errata", "rarityFile": "/errata/set83-rarity.txt", "originalSet": false, @@ -278,7 +278,7 @@ "playable": true }, { - "setId": "64", + "setId": "84", "setName": "PC EMM Errata", "rarityFile": "/errata/set84-rarity.txt", "originalSet": false, @@ -287,7 +287,7 @@ "playable": true }, { - "setId": "65", + "setId": "85", "setName": "PC Hunters Errata", "rarityFile": "/errata/set85-rarity.txt", "originalSet": false, @@ -296,7 +296,7 @@ "playable": true }, { - "setId": "66", + "setId": "86", "setName": "PC TWC Errata", "rarityFile": "/errata/set86-rarity.txt", "originalSet": false, @@ -305,7 +305,7 @@ "playable": true }, { - "setId": "67", + "setId": "87", "setName": "PC RoS Errata", "rarityFile": "/errata/set87-rarity.txt", "originalSet": false, @@ -314,7 +314,7 @@ "playable": true }, { - "setId": "68", + "setId": "88", "setName": "PC T&D Errata", "rarityFile": "/errata/set88-rarity.txt", "originalSet": false, @@ -323,7 +323,7 @@ "playable": true }, { - "setId": "69", + "setId": "89", "setName": "PC AE Errata", "rarityFile": "/errata/set89-rarity.txt", "originalSet": false, diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java index 19ff3c18e..b98649352 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/collection/CollectionSerializer.java @@ -59,6 +59,14 @@ public class CollectionSerializer { //April 2021 PC Promos _singleByteCountItems.add("11_267"); _singleByteCountItems.add("11_268"); + + //August 2021 PC Promos + _singleByteCountItems.add("1_366"); + _singleByteCountItems.add("1_367"); + + //September 2021 PC Promos + _singleByteCountItems.add("9_53"); + _singleByteCountItems.add("10_123"); } private void fillDoubleByteItems() throws IOException { diff --git a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java index 056bc9fe9..7e6d12d53 100644 --- a/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java +++ b/gemp-lotr/gemp-lotr-server/src/main/java/com/gempukku/lotro/hall/HallServer.java @@ -91,7 +91,7 @@ public class HallServer extends AbstractServer { tableHolder = new TableHolder(leagueService, ignoreDAO); _hallChat = _chatServer.createChatRoom("Game Hall", true, 15, true, - "You're now in the Game Hall, use /help to get a list of available commands"); + "You're now in the Game Hall, use /help to get a list of available commands.
Don't forget to check out the new Discord chat integration! Click the 'Switch to Discord' button in the lower right ---->"); _hallChat.addChatCommandCallback("ban", new ChatCommandCallback() { @Override