";
+ resHtml += getRenderRaces(firstPlayerInfo.selectedRaces, secondPlayerInfo.selectedRaces);
+ resHtml += "";
- if(!isSolo){
- resHtml += "
";
- }
- }
-
- resHtml += ""
-
- $("#mapList").html(resHtml);
+ $("#mapList").html(resHtml);
}
function renderPlayersAndStats(lobby) {
- var resHtml = "
";
- var player1ReadyBtn = "";
- var player2ReadyBtn = "";
- var readyImg = "
";
- var notReadyImg = "
";
- var warningClass = (lobby.user2Info.name !== "") ? "warningButton" : "";
+ var resHtml = "";
+ var player1ReadyBtn = "";
+ var player2ReadyBtn = "";
+ var readyImg = "
";
+ var notReadyImg = "
";
+ var warningClass = (lobby.user2Info.name !== "") ? "warningButton" : "";
- if(lobby.user1Info.name === userName){
- if(lobby.user1Info.isReady){
- player1ReadyBtn = ""
- }else{
- player1ReadyBtn = ""
+ if (lobby.user1Info.name === userName) {
+ if (lobby.user1Info.isReady) {
+ player1ReadyBtn = ""
+ } else {
+ player1ReadyBtn = ""
+ }
+ } else {
+ if (lobby.user1Info.isReady) {
+ player1ReadyBtn = readyImg
+ } else {
+ player1ReadyBtn = notReadyImg
+ }
}
- }else{
- if(lobby.user1Info.isReady){
- player1ReadyBtn = readyImg
- }else{
- player1ReadyBtn = notReadyImg
+
+ if (lobby.user2Info.name === userName) {
+ if (lobby.user2Info.isReady) {
+ player2ReadyBtn = ""
+ } else {
+ player2ReadyBtn = ""
+ }
+ } else {
+ if (lobby.user2Info.isReady) {
+ player2ReadyBtn = readyImg
+ } else {
+ player2ReadyBtn = notReadyImg
+ }
}
- }
- if(lobby.user2Info.name === userName){
- if(lobby.user2Info.isReady){
- player2ReadyBtn = ""
- }else{
- player2ReadyBtn = ""
+ if (lobby.user1Info.name === userName || lobby.user2Info.name === userName) {
+ $("#inputMsg").show();
+ } else {
+ $("#inputMsg").hide();
}
- } else {
- if(lobby.user2Info.isReady){
- player2ReadyBtn = readyImg
- }else{
- player2ReadyBtn = notReadyImg
+
+ var lobbyTypeText = "";
+ var last1Selected = "";
+ var last3Selected = "";
+ var last5Selected = "";
+ var last7Selected = "";
+
+ var isNecronsSelected = "";
+ if (lobby.isNecrons) isNecronsSelected = "checked";
+
+ switch (lobby.selectedType) {
+ case "Last1()":
+ looserPickSelected = "selected";
+ lobbyTypeText = "Play on last map";
+ break;
+ case "Last3()":
+ last3Selected = "selected";
+ lobbyTypeText = "Play on last 3 maps";
+ break;
+ case "Last5()":
+ last5Selected = "selected";
+ lobbyTypeText = "Play on last 5 maps";
+ break;
+ case "Last7()":
+ last7Selected = "selected";
+ lobbyTypeText = "Play on last 7 maps";
+ break;
}
- }
- if (lobby.user1Info.name === userName || lobby.user2Info.name === userName) {
- $("#inputMsg").show();
- } else {
- $("#inputMsg").hide();
- }
+ console.log(lobby.status);
+ switch (lobby.status) {
+ case "NotStarted()":
+ resHtml = " " + lobby.user1Info.name + ": " + player1ReadyBtn + "
"
+ if (lobby.user2Info.name !== "") {
+ var kickBtn = ""
+ if (lobby.user1Info.name === userName) {
+ kickBtn = " -
";
+ }
+ resHtml += "
" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "
"
+ } else {
+ resHtml += "
waiting 2-nd player...
"
+ }
- var lobbyTypeText = "";
- var last1Selected = "";
- var last3Selected = "";
- var last5Selected = "";
- var last7Selected = "";
-
- var isNecronsSelected = "";
- if(lobby.isNecrons) isNecronsSelected = "checked";
-
- switch (lobby.selectedType) {
- case "Last1()":
- looserPickSelected = "selected";
- lobbyTypeText = "Play on last map";
- break;
- case "Last3()":
- last3Selected = "selected";
- lobbyTypeText = "Play on last 3 maps";
- break;
- case "Last5()":
- last5Selected = "selected";
- lobbyTypeText = "Play on last 5 maps";
- break;
- case "Last7()":
- last7Selected = "selected";
- lobbyTypeText = "Play on last 7 maps";
- break;
- }
-
- console.log(lobby.status);
- switch (lobby.status) {
- case "NotStarted()":
- resHtml = "
" + lobby.user1Info.name + ": " + player1ReadyBtn +"
"
- if(lobby.user2Info.name !== ""){
- var kickBtn = ""
- if(lobby.user1Info.name === userName){
- kickBtn = " -
";
- }
- resHtml += "
" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "
"
- }else{
- resHtml += "
waiting 2-nd player...
"
- }
-
- var disabledText = "";
+ var disabledText = "";
- if(lobby.user1Info.name !== userName){
- disabledText = "disabled";
- }
+ if (lobby.user1Info.name !== userName) {
+ disabledText = "disabled";
+ }
- //TODO: here from config
- resHtml += "
";
+ //TODO: here from config
+ resHtml += "
";
- if(lobby.user1Info.name !== userName && lobby.user2Info.name !== userName){
- disabledText = "disabled";
- }else{
- disabledText = "";
- }
- /*for(var i = 1; i <= 9; i++){
- resHtml += '
+')
';
- }*/
- resHtml += "
";
- break;
- case "SelectRace()":
+ if (lobby.user1Info.name !== userName && lobby.user2Info.name !== userName) {
+ disabledText = "disabled";
+ } else {
+ disabledText = "";
+ }
+ resHtml += "
";
+ break;
+ case "SelectRace()":
- resHtml = ""+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "
players select races";
- break;
- case "Draft()":
- if(!isDraftStarted){
- isDraftStarted = true;
- }
+ resHtml = "" + lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " + lobbyTypeText + "
players select races";
+ break;
+ case "Draft()":
+ if (!isDraftStarted) {
+ isDraftStarted = true;
+ }
- if(!isSolo){
- var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name
- resHtml = ""+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "
" + playerTurn +" turn";
- resHtml += "
";
- if(raceCount > 1){
- resHtml += "
";
- }
- if(raceCount > 2){
- resHtml += "
";
- }
- if(raceCount > 3){
- resHtml += "
";
- }
- resHtml += " VS ";
- resHtml += "
";
- if(raceCount > 1){
- resHtml += "
";
- }
- if(raceCount > 2){
- resHtml += "
";
- }
- if(raceCount > 3){
- resHtml += "
";
- }
+ var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name
+ resHtml = "
";
+ resHtml += getRenderRaces(lobby.user1Info, lobby.user2Info);
+ resHtml += "
" + playerTurn + " turn" + "";
+ break;
+ case "Finish()":
+ renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info);
+ break;
+ }
- }
- break;
- case "Finish()":
- renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info);
- break;
- }
+ resHtml = resHtml + ""
- resHtml = resHtml + ""
-
- $("#playersStatsList").html(resHtml);
+ $("#playersStatsList").html(resHtml);
}
-function addMessageToChat(message){
- var messageHtml = " " + message.userName + ": " + message.message + "
";
- var chatBox = $("#chatbox");
- chatBox.append(messageHtml);
- chatBox.scrollTop(40000);
+function getRenderRaces(userInfo1, userInfo2) {
+
+ function getRacesBlock(playerRaces, name){
+ let resHtml = "" + "
" + name + "
";
+ resHtml += "main:";
+ playerRaces.mainRaces.forEach((raceId) =>
+ resHtml += "
 + )
");
+ resHtml += "
addt:";
+ playerRaces.additionalRaces.forEach((raceId) =>
+ resHtml += "
 + )
");
+ resHtml += "
";
+ return resHtml;
+ }
+
+ let resHtml = "";
+ resHtml += getRacesBlock(userInfo1.selectedRaces, userInfo1.name);
+ resHtml += "VS
";
+ resHtml += getRacesBlock(userInfo2.selectedRaces, userInfo2.name);
+ return resHtml;
}
-function handleMapBanEvent(message){
- if(!isMuted){
- var audioPick = new Audio('/assets/sound/pick.mp3.mpeg');
- audioPick.volume = 0.1;
- audioPick.play();
- }
-
- var messageHtml = "" + convertMapName(message.mapTechName) + " banned by " + message.user + "
";
- var chatBox = $("#chatbox");
- chatBox.append(messageHtml);
- chatBox.scrollTop(40000);
+function addMessageToChat(message) {
+ var messageHtml = " " + message.userName + ": " + message.message + "
";
+ var chatBox = $("#chatbox");
+ chatBox.append(messageHtml);
+ chatBox.scrollTop(40000);
}
-function banMap(map){
- ws.send(JSON.stringify({
- type: "banMap",
- map: map
- }));
+function handleMapBanEvent(message) {
+ if (!isMuted) {
+ var audioPick = new Audio('/assets/sound/pick.mp3.mpeg');
+ audioPick.volume = 0.1;
+ audioPick.play();
+ }
+
+ var messageHtml = "" + convertMapName(message.mapTechName) + " banned by " + message.user + "
";
+ var chatBox = $("#chatbox");
+ chatBox.append(messageHtml);
+ chatBox.scrollTop(40000);
}
-function setReady(){
- ws.send(JSON.stringify({
- type: "setReady"
- }));
-}
-
-function setNotReady(){
- ws.send(JSON.stringify({
- type: "setNotReady"
- }));
-}
-
-function changeLobbyType(){
- var lobbyType = $("#deciderOption").val();
- ws.send(JSON.stringify({
- type: "changeLobbyType",
- lobbyType: lobbyType
- }));
-}
-
-function changeIsNecronSelected(){
- var isNecronSelected = $("#isNecron").is(':checked');
- ws.send(JSON.stringify({
- type: "changeIsNecronSelected",
- isNecronSelected: isNecronSelected
- }));
-}
-
-function joinDecider(actorName){
- isObserver = false;
- ws.send(JSON.stringify({
- type: "joinDecider",
- lobbyActorName: actorName
- }));
-}
-
-function observerDecider(actorName){
- isObserver = true;
- ws.send(JSON.stringify({
- type: "observerDecider",
- lobbyActorName: actorName
- }));
-}
-
-function sendMessage(){
- var userInput = $("#usermsg");
- var message = userInput.val();
- userInput.val("");
- if(message !== ""){
+function banMap(map) {
ws.send(JSON.stringify({
- type: "sendMessage",
- message: message
+ type: "banMap",
+ map: map
}));
- }
}
-function kickSecondPlayer(){
- ws.send(JSON.stringify({
- type: "kickSecondPlayer"
- }));
+function setReady() {
+ ws.send(JSON.stringify({
+ type: "setReady"
+ }));
}
-function convertMapName (techMapName) {
- var mapPlayerSize = techMapName.charAt(0);
- var mapName = techMapName.replace(mapPlayerSize + "p_", "").replaceAll("_", " ") +
- " ("+mapPlayerSize+")";
-
-
- return mapName.charAt(0).toUpperCase() + mapName.slice(1);
+function setNotReady() {
+ ws.send(JSON.stringify({
+ type: "setNotReady"
+ }));
+}
+
+function changeLobbyType() {
+ var lobbyType = $("#deciderOption").val();
+ ws.send(JSON.stringify({
+ type: "changeLobbyType",
+ lobbyType: lobbyType
+ }));
+}
+
+function changeIsNecronSelected() {
+ var isNecronSelected = $("#isNecron").is(':checked');
+ ws.send(JSON.stringify({
+ type: "changeIsNecronSelected",
+ isNecronSelected: isNecronSelected
+ }));
+}
+
+function joinDecider(actorName) {
+ isObserver = false;
+ ws.send(JSON.stringify({
+ type: "joinDecider",
+ lobbyActorName: actorName
+ }));
+}
+
+function observerDecider(actorName) {
+ isObserver = true;
+ ws.send(JSON.stringify({
+ type: "observerDecider",
+ lobbyActorName: actorName
+ }));
+}
+
+function sendMessage() {
+ var userInput = $("#usermsg");
+ var message = userInput.val();
+ userInput.val("");
+ if (message !== "") {
+ ws.send(JSON.stringify({
+ type: "sendMessage",
+ message: message
+ }));
+ }
+}
+
+function kickSecondPlayer() {
+ ws.send(JSON.stringify({
+ type: "kickSecondPlayer"
+ }));
+}
+
+function convertMapName(techMapName) {
+ var mapPlayerSize = techMapName.charAt(0);
+ var mapName = techMapName.replace(mapPlayerSize + "p_", "").replaceAll("_", " ") +
+ " (" + mapPlayerSize + ")";
+
+
+ return mapName.charAt(0).toUpperCase() + mapName.slice(1);
}
diff --git a/app/assets/sound/4playersDraft.mp3 b/app/assets/sound/4playersDraft.mp3
new file mode 100644
index 0000000..091c544
Binary files /dev/null and b/app/assets/sound/4playersDraft.mp3 differ
diff --git a/app/assets/stylesheets/main.css b/app/assets/stylesheets/main.css
index e8b66f7..bbb5054 100644
--- a/app/assets/stylesheets/main.css
+++ b/app/assets/stylesheets/main.css
@@ -37,7 +37,7 @@
}
.raceIcon{
- width: 90px;
+ width: 60px;
border-radius: 5px;
margin: 3px;
border: 1px solid;
diff --git a/app/controllers/HomeController.scala b/app/controllers/HomeController.scala
index 14ee5d0..c1896b1 100644
--- a/app/controllers/HomeController.scala
+++ b/app/controllers/HomeController.scala
@@ -43,11 +43,11 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl
logger.info(s"Received request from: ${request.remoteAddress}")
val deciderHumanName = config.getString(s"deciders.$deciderName.name")
val deciderDescription = config.getString(s"deciders.$deciderName.rules")
- val isSolo = Try(config.getBoolean(s"deciders.$deciderName.isSolo")).getOrElse(false)
+ val existAdditionalRaces = Try(config.getBoolean(s"deciders.$deciderName.existAdditionalRaces")).getOrElse(false)
val raceCount = Try(config.getInt(s"deciders.$deciderName.raceCount")).getOrElse(1)
val lastmapsSettings = LastMapsSelectConfig(true, true, true, true)
val raceSelect = RaceSelect(true, false)
- Ok(views.html.index(deciderName, deciderHumanName, raceCount, deciderDescription, raceSelect, lastmapsSettings, isSolo))
+ Ok(views.html.index(deciderName, deciderHumanName, raceCount, deciderDescription, raceSelect, lastmapsSettings, existAdditionalRaces))
}
/**
diff --git a/app/views/index.scala.html b/app/views/index.scala.html
index aa4575b..b30534e 100644
--- a/app/views/index.scala.html
+++ b/app/views/index.scala.html
@@ -1,14 +1,13 @@
-@(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, isSolo: Boolean)(implicit r: Request[_])
+@(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, existAdditionalRaces: Boolean)(implicit r: Request[_])
@deciderName
@raceCount
+@existAdditionalRaces
@boSettings.last1
@boSettings.last3
@boSettings.last5
@boSettings.last7
-@isSolo
-
@@ -21,7 +20,7 @@
-
+
diff --git a/conf/application.conf b/conf/application.conf
index 104630d..b2d5a1b 100644
--- a/conf/application.conf
+++ b/conf/application.conf
@@ -25,6 +25,20 @@ deciders{
name = "Классический десайдер"
rules = """"""
}
+ freakcup{
+ maps = [["2p_battle_marshes"],
+ ["2p_quests_triumph"],
+ ["2p_meeting_of_minds"],
+ ["2p_shrine_of_excellion_[Rem]"],
+ ["2p_titan_fall_[Rem]"],
+ ["2p_tranquilitys_end_[Rem]"],
+ ["2p_outer_reaches"],
+ ["2p_blood_river_[Rem]"],
+ ["2p_emerald_river"]]
+ raceCount = 1
+ name = "Десайдер freakcup"
+ rules = """"""
+ }
flazzomappool{
maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"],
@@ -58,7 +72,6 @@ deciders{
["летний"]]
name = "Выбираем салат на новый год"
- isSolo = true
rules = """"""
}
turtleshell{
@@ -279,6 +292,7 @@ deciders{
}
shouldercup{
description = true
+ existAdditionalRaces = true
raceCount = 3
maps = [["6p_paynes_retribution", "Количество точек: 28/2/2\nСпорных точек: 10/0/2\nТермогенераторы: 2"],
["6p_fury_island", "Количество точек: 26/6/1\nСпорных точек: 6 + 1 крит\nТермогенераторы: Отсутствуют"],
@@ -345,21 +359,29 @@ deciders{
Чтобы не было повторений карт, игроки могу выбрать всего 1 раз карту из списка. """
}
tpmodcup{
- maps = ["2p_battle_marshes",
- "2p_fallen_city_[Rem]",
- "2p_fata_morgana_[Rem]",
- "2p_quests_triumph",
- "2p_shrine_of_excellion_[Rem]",
- "2p_titan_fall_[Rem]",
- "2p_tranquilitys_end_[Rem]",
- "2p_blood_river_[Rem]",
- "2p_sugaroasis",
- "2p_faceoff",
- "2p_deadly_fun_archeology",
- "2p_terror_psyclaw",
- "2p_meeting_of_minds"]
+ description = true
+ raceCount = 1
+ maps = [["2p_battle_marshes"],
+ ["2p_fallen_city_[Rem]"],
+ ["2p_quests_triumph"],
+ ["2p_fear"],
+ ["2p_shrine_of_excellion_[Rem]"],
+ ["2p_titan_fall_[Rem]"],
+ ["2p_tranquilitys_end_[Rem]"],
+ ["2p_blood_river_[Rem]"],
+ ["2p_sugaroasis"],
+ ["2p_faceoff"],
+ ["2p_deadly_fun_archeology"],
+ ["2p_terror_psyclaw"],
+ ["2p_meeting_of_minds_pro", "Модифицированная версия Meeting of minds v 1.0: 6 точек на игрока, одна из которой находится за реликтом."],
+ ["2p_edemus_gamble"],
+ ["[tp_mod]jungle_morning"],
+ ["2p_fraziersdemise"],
+ ["[tp_mod]light_brigade"],
+ ["2p_outer_reaches"],
+ ["2p_vortex_plateau"]]
name = "Турнир по ТП моду"
- rules = """ Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик."""
+ rules = """Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик. """
}
bestfriendscup{
maps = ["4p_gorhael_crater",
@@ -388,7 +410,7 @@ deciders{
rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. """
}
freneticmappool{
- raceCount = 2
+ raceCount = 3
description = true
maps =[["2p_battle_marshes"],
["2p_fallen_city_[Rem]"],
@@ -402,7 +424,9 @@ deciders{
["2p_deadly_fun_archeology"],
["2p_sugaroasis"],
["2p_outer_reaches"],
- ["2p_meeting_of_minds"]]
+ ["2p_meeting_of_minds"],
+ ["2p_fraziersdemise"],
+ ["2p_fata_morgana_[Rem]"]]
name = "Frenetic map pool"
rules = """ """
}
@@ -437,7 +461,7 @@ deciders{
["4p_marconia"],
["4p_panrea_lowlands"],
["4p_saints_square"],
- ["6p_snowblind"],
+ ["4p_snowblind"],
["4p_tartarus_center"],
["4p_skerries"],
["4p_doom_spiral"]]
@@ -477,5 +501,50 @@ deciders{
name = "Casino cup"
rules = """Выбор карт без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. """
}
-}
-
+ badcup {
+ raceCount = 3
+ maps = [["2p_sugaroasis"],
+ ["2p_titan_fall_[Rem]"],
+ ["2p_deadly_fun_archeology"],
+ ["2p_tranquilitys_end_[Rem]"],
+ ["2p_shrine_of_excellion_[Rem]"],
+ ["2p_quests_triumph"],
+ ["2p_fallen_city_[Rem]"],
+ ["2p_outer_reaches"],
+ ["2p_battle_marshes"],
+ ["2p_bloody_hell_[Ed]"],
+ ["2p_blood_river_[Rem]"]]
+ name = "BAD cup"
+ rules = """ """
+ }
+ ppcz {
+ raceCount = 2
+ maps = [["2p_fata_morgana_[Rem]"],
+ ["2p_titan_fall_[Rem]"],
+ ["2p_tranquilitys_end_[Rem]"],
+ ["2p_shrine_of_excellion_[Rem]"],
+ ["2p_quests_triumph"],
+ ["2p_fallen_city_[Rem]"],
+ ["2p_outer_reaches"],
+ ["2p_battle_marshes"],
+ ["2p_emerald_river"],
+ ["2p_blood_river_[Rem]"],
+ ["2p_meeting_of_minds"]]
+ name = "PPCZ"
+ rules = """ """
+ }
+ badcup_together {
+ raceCount = 2
+ maps = [["4p_tartarus_center"],
+ ["4p_skerries"],
+ ["4p_saints_square"],
+ ["4p_cold_war"],
+ ["4p_biffys_peril"],
+ ["4p_imperial_area"],
+ ["4p_tainted_soul"],
+ ["4p_chaos_platenau"],
+ ["4p_colosseum_of_deadman"]]
+ name = "BAD CUP Together"
+ rules = """ """
+ }
+}
\ No newline at end of file