diff --git a/app/actors/LobbieActor.scala b/app/actors/LobbieActor.scala index f32e9ff..2838783 100644 --- a/app/actors/LobbieActor.scala +++ b/app/actors/LobbieActor.scala @@ -43,6 +43,8 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging { private var lobbyType: LobbyType = Last3() + private var isNecrons: Boolean = false + private val mapsLobby: Set[DeciderMap] = { val configMaps = config.getStringList("maps").asScala configMaps.map(e => { @@ -58,6 +60,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging { status.toString(), playerTurn, lobbyType.toString(), + isNecrons, mapsLobby)), this.self) @@ -139,6 +142,15 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging { } users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse)) + case ChangeIsNecronSelected(isSelected) => + isNecrons = isSelected + if(isSelected) { + mapsLobby.foreach(map => if(map.map == "2p_meeting_of_minds" || map.map == "2p_shrine_of_excellion_[Rem]") map.isBanned = true) + }else{ + mapsLobby.foreach(map => map.isBanned = false) + } + users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse)) + case KickSecondPlayer => if (sender() == host.actorRef) { secondPlayer.foreach(player => player.actorRef ! LobbyFatal("You were kicked from lobby!")) @@ -202,6 +214,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging { status.toString(), playerTurn, lobbyType.toString(), + isNecrons, mapsLobby) } } @@ -228,6 +241,8 @@ case class MessageForLobby(message: String) case class ChangeLobbyType(lobbyType: String) +case class ChangeIsNecronSelected(isSelected: Boolean) + case object InfoQuery case class UserInfo(name: String, isReady: Boolean) @@ -238,6 +253,7 @@ case class LobbyInfo(user1Info: UserInfo, status: String, playerTurn: BigDecimal, selectedType: String, + isNecrons: Boolean, maps: Set[DeciderMap]) class LobbyStatus diff --git a/app/actors/UserActor.scala b/app/actors/UserActor.scala index 011fc40..24eca46 100644 --- a/app/actors/UserActor.scala +++ b/app/actors/UserActor.scala @@ -38,6 +38,7 @@ class UserActor(out: ActorRef, "status" -> lobby.status, "playerTurn" -> lobby.playerTurn, "selectedType" -> lobby.selectedType, + "isNecrons" -> lobby.isNecrons, "maps" -> Json.toJson(lobby.maps) ) } @@ -56,6 +57,7 @@ class UserActor(out: ActorRef, "status" -> lobby.status, "playerTurn" -> lobby.playerTurn, "selectedType" -> lobby.selectedType, + "isNecrons" -> lobby.isNecrons, "maps" -> Json.toJson(lobby.maps) ))) } @@ -146,6 +148,10 @@ class UserActor(out: ActorRef, val lobbyType = (json \ "lobbyType").as[String] lobbieActor.foreach(lobby => lobby ! ChangeLobbyType(lobbyType)) + case Some("changeIsNecronSelected") => + val isNecronSelected = (json \ "isNecronSelected").as[Boolean] + lobbieActor.foreach(lobby => lobby ! ChangeIsNecronSelected(isNecronSelected)) + case Some("kickSecondPlayer") => lobbieActor.foreach(lobby => lobby ! KickSecondPlayer) diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 6f59c9b..ddffee6 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -270,6 +270,10 @@ function renderPlayersAndStats(lobby) { var last5Selected = ""; var superfinalSelected = ""; var looserPickSelected = ""; + + var isNecronsSelected = ""; + if(lobby.isNecrons) isNecronsSelected = "checked"; + switch (lobby.selectedType) { case "Last3()": last3Selected = "selected"; @@ -309,10 +313,19 @@ function renderPlayersAndStats(lobby) { disabledText = "disabled"; } resHtml += "
" + //"" + + ""; + + if(lobby.user1Info.name !== userName && lobby.user2Info.name !== userName){ + disabledText = "disabled"; + }else{ + disabledText = ""; + } + resHtml += "
"; resHtml += ""; break; case "Draft()": @@ -377,6 +390,14 @@ function changeLobbyType(){ })); } +function changeIsNecronSelected(){ + var isNecronSelected = $("#isNecron").is(':checked'); + ws.send(JSON.stringify({ + type: "changeIsNecronSelected", + isNecronSelected: isNecronSelected + })); +} + function joinDecider(actorName){ ws.send(JSON.stringify({ type: "joinDecider", diff --git a/app/views/index.scala.html b/app/views/index.scala.html index 0975c1b..0257df4 100644 --- a/app/views/index.scala.html +++ b/app/views/index.scala.html @@ -13,7 +13,7 @@ - +
-
Правила турнира Big Boss of Summer 2021
+
Правила турнира "Осенняя мясорубка#1"

Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. - Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). - На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. - Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. - Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров.

-

В суперфинале турнира оба игрока вычеркивают по две карты. После этого из оставшихся 9 карт можно брать любые, выбирает их проигравший в предыдущем матче. - Первый лузер-пик - за игроком из нижней сетки, который начинает с -1 очком.

+ Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. + В случае, если один из игроков играет за расу некронов, из маппула исключаются карты MoM и SoE, после чего оба игрока приступают к вычеркиванию карт стандартным образом из 11-картового маппула.


-

Maps for BO3 and BO5 should be picked with 3 and 5 deciders respectively, w/o looser picks. - Players disclude maps from the map pool one-by-one, until they got 3 (for BO3) or 5 (for BO5). - At these maps you play all the matches vs your opponent. After defining the maps for BO3/BO5, the players disclude maps one-by-one from this small pool of 3(5), untill they get one. - This gonna be the first map for your round. The next one will be picked by looser from the previously defined map pool of 3 (5) maps.

-

At grandfinal both players disclude only two maps. After that, looser can pick ANY map from the 9 left in map pool. - First looser pick belongs to the player from looser bracket, because he/she starts with -1 score.

diff --git a/conf/application.conf b/conf/application.conf index be713d1..90c9e43 100644 --- a/conf/application.conf +++ b/conf/application.conf @@ -16,8 +16,8 @@ maps = ["2p_battle_marshes", "2p_shrine_of_excellion_[Rem]", "2p_titan_fall_[Rem]", "2p_tranquilitys_end_[Rem]", - "2p_fraziersdemise", - "2p_emerald_river", "2p_deadly_fun_archeology", + "2p_vortex_plateau", + "2p_sugaroasis", "2p_blood_river_[Rem]"]