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 @@
-
+
Выбор карт в БО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.