Additional races

This commit is contained in:
v.holodov 2023-08-05 16:08:50 +03:00
parent 31ce4b7beb
commit ecc69cd7d3
13 changed files with 635 additions and 668 deletions

View File

@ -48,7 +48,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L
private var secondPlayerSelectedRaces: Option[SelectedRaces] = None private var secondPlayerSelectedRaces: Option[SelectedRaces] = None
private val isSolo: Boolean = Try(config.getBoolean(s"deciders.$deciderName.isSolo")).getOrElse(false)
private val mapsLobby: Set[DeciderMap] = { private val mapsLobby: Set[DeciderMap] = {
val configMaps = config.getList(s"deciders.$deciderName.maps").asScala val configMaps = config.getList(s"deciders.$deciderName.maps").asScala
configMaps.map(e => { configMaps.map(e => {
@ -66,7 +65,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L
status.toString(), status.toString(),
playerTurn, playerTurn,
lobbyType.toString(), lobbyType.toString(),
isSolo,
mapsLobby)), mapsLobby)),
this.self) this.self)
@ -78,16 +76,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L
// notify watchers // notify watchers
logger.info(s"Ban map $mapName by ${sender.path.name}") logger.info(s"Ban map $mapName by ${sender.path.name}")
if (isSolo) {
mapsLobby.find(p => p.map == mapName).foreach(m => m.isBanned = true)
if (isFinish) {
status = Finish()
} else {
status = Draft()
}
refreshAndBanMap(mapName)
}
if (status == Draft()) { if (status == Draft()) {
if ((playerTurn == 1 && sender == host.actorRef) || if ((playerTurn == 1 && sender == host.actorRef) ||
(playerTurn == 2 && secondPlayer.exists(_.actorRef == sender))) { (playerTurn == 2 && secondPlayer.exists(_.actorRef == sender))) {
@ -227,7 +215,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L
status.toString(), status.toString(),
playerTurn, playerTurn,
lobbyType.toString(), lobbyType.toString(),
isSolo,
mapsLobby) mapsLobby)
} }
@ -274,7 +261,7 @@ case class ChangeIsNecronSelected(isSelected: Boolean)
case object InfoQuery case object InfoQuery
case class SelectedRaces(firstRace: Int, secondRace: Int, thirdRace: Int, fourthRace: Int) case class SelectedRaces(mainRaces: List[Int], additionalRaces: List[Int])
case class UserInfo(name: String, isReady: Boolean, selectedRaces: Option[SelectedRaces] = None) case class UserInfo(name: String, isReady: Boolean, selectedRaces: Option[SelectedRaces] = None)
@ -285,7 +272,6 @@ case class LobbyInfo(user1Info: UserInfo,
status: String, status: String,
playerTurn: BigDecimal, playerTurn: BigDecimal,
selectedType: String, selectedType: String,
isSolo: Boolean,
maps: Set[DeciderMap]) maps: Set[DeciderMap])
class LobbyStatus class LobbyStatus

View File

@ -173,11 +173,10 @@ class UserActor(out: ActorRef,
lobbieActor.foreach(lobby => lobby ! BanMap(map)) lobbieActor.foreach(lobby => lobby ! BanMap(map))
case Some("selectRace") => case Some("selectRace") =>
val firstRace = (json \ "raceFirst").as[Int] logger.info("RACES: " + json.toString())
val secondRace = (json \ "raceSecond").as[Int] val races = (json \ "mainRaces").as[List[Int]]
val thirdRace = (json \ "raceThird").as[Int] val additionalRaces = (json \ "additionalRaces").as[List[Int]]
val fourthRace = (json \ "raceFourth").as[Int] lobbieActor.foreach(lobby => lobby ! SelectedRaces(races, additionalRaces))
lobbieActor.foreach(lobby => lobby ! SelectedRaces(firstRace, secondRace, thirdRace, fourthRace))
case Some("getLobbies") => case Some("getLobbies") =>
logger.debug("Get all lobby request") logger.debug("Get all lobby request")

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 565 KiB

View File

@ -3,12 +3,11 @@ var ws;
var userName = "" var userName = ""
var raceCount = $("#raceCount").html() var raceCount = $("#raceCount").html()
var isSolo = $("#isSolo").html() === 'true' var existAdditionalRaces = $("#existAdditionalRaces").html() === "true"
var isMuted = false; var isMuted = false;
var isDraftStarted = false; var isDraftStarted = false;
window.onload = function () { window.onload = function () {
'use strict'; 'use strict';
@ -35,11 +34,6 @@ window.onload = function() {
"click .title": "check" // Обработчик клика на кнопке "Проверить" "click .title": "check" // Обработчик клика на кнопке "Проверить"
}, },
joinAsPlayer: function () {
this.elCount = "azaz" + getRandomInt(100000000);
this.render();
},
render: function () { render: function () {
var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) { var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) {
@ -154,7 +148,7 @@ window.onload = function() {
case "switchToLobby": case "switchToLobby":
console.log(message); console.log(message);
switchToLobby(message.lobby.maps, message.lobby.status); switchToLobby(message.lobby.maps, message.lobby.status);
if(!isSolo) renderPlayersAndStats(message.lobby); renderPlayersAndStats(message.lobby);
break; break;
case "sendMessage": case "sendMessage":
console.log(message); console.log(message);
@ -176,6 +170,7 @@ window.onload = function() {
default: default:
} }
}; };
ws.onopen = function () { ws.onopen = function () {
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: "userName", type: "userName",
@ -186,7 +181,7 @@ window.onload = function() {
})); }));
} }
var timerId = setInterval(() => setInterval(() =>
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: "getLobbies" type: "getLobbies"
})), 2000); })), 2000);
@ -207,7 +202,6 @@ function changeNick() {
} }
// -----ф-ии прихода с сервера // -----ф-ии прихода с сервера
function switchToLobby(maps, status) { function switchToLobby(maps, status) {
@ -233,87 +227,75 @@ function disconnectLobby(error) {
function getRaceImageByNumber(number) { function getRaceImageByNumber(number) {
switch (number) { switch (number) {
case 1: return "/assets/images/raceIcons/SM.gif"; case 1:
case 2: return "/assets/images/raceIcons/Chaos.gif"; return "/assets/images/raceIcons/SM.gif";
case 3: return "/assets/images/raceIcons/Eldar.gif"; case 2:
case 4: return "/assets/images/raceIcons/Orks.gif"; return "/assets/images/raceIcons/Chaos.gif";
case 5: return "/assets/images/raceIcons/IG.gif"; case 3:
case 6: return "/assets/images/raceIcons/Nec.gif"; return "/assets/images/raceIcons/Eldar.gif";
case 7: return "/assets/images/raceIcons/Tau.gif"; case 4:
case 8: return "/assets/images/raceIcons/Sob.gif"; return "/assets/images/raceIcons/Orks.gif";
case 9: return "/assets/images/raceIcons/De.gif"; case 5:
return "/assets/images/raceIcons/IG.gif";
case 6:
return "/assets/images/raceIcons/Nec.gif";
case 7:
return "/assets/images/raceIcons/Tau.gif";
case 8:
return "/assets/images/raceIcons/Sob.gif";
case 9:
return "/assets/images/raceIcons/De.gif";
} }
} }
function getRaceVideoByNumber(number) { function getRaceVideoByNumber(number) {
switch (number) { switch (number) {
case 1: return "/assets/video/races/SM.mp4"; case 1:
case 2: return "/assets/video/races/Chaos.mp4"; return "/assets/video/races/SM.mp4";
case 3: return "/assets/video/races/Eldar.mp4"; case 2:
case 4: return "/assets/video/races/Orks.mp4"; return "/assets/video/races/Chaos.mp4";
case 5: return "/assets/video/races/IG.mp4"; case 3:
case 6: return "/assets/video/races/Nec.mp4"; return "/assets/video/races/Eldar.mp4";
case 7: return "/assets/video/races/Tau.mp4"; case 4:
case 8: return "/assets/video/races/Sob.mp4"; return "/assets/video/races/Orks.mp4";
case 9: return "/assets/video/races/SM.mp4"; case 5:
return "/assets/video/races/IG.mp4";
case 6:
return "/assets/video/races/Nec.mp4";
case 7:
return "/assets/video/races/Tau.mp4";
case 8:
return "/assets/video/races/Sob.mp4";
case 9:
return "/assets/video/races/SM.mp4";
} }
} }
function renderRaces() { function renderRaces() {
function getRaceSelectHtml(raceType, raceArray) {
var resHtml = ""; var resHtml = "";
resHtml += "<div class='col-xs-3'><center><h2>First race</h2>"; for(var raceNum = 1; raceNum <= raceCount; raceNum++){
resHtml += "<div class='col-xs-4'><center><h3>" + raceType + " race " + raceNum + "</h3>";
for (var i = 1; i <= 9; i++) { for (var i = 1; i <= 9; i++) {
var selected = "raceNotSelected"; var selected = "raceNotSelected";
if($.cookie("race1") == i){ if ($.cookie("race-" + raceType + "-" + raceNum) == i) {
selected = "raceSelected"; selected = "raceSelected";
selectedMainRace = i; console.log("setted: " + i);
raceArray[raceNum] = i;
} }
resHtml += '<a href = "#" class="'+selected+' mainRaceIcon" onclick="selectMainRace(this, ' +i+')"><img class="raceIcon" src="'+getRaceImageByNumber(i)+'"></a> '; let raceIconClass = "raceIcon-" + raceNum + "-" + raceType;
resHtml += '<a href = "#" class="' + selected + ' ' + raceIconClass + '"' +
' onclick="selectRace(this, '+i+', '+raceNum+', \''+raceType+'\')"><img class="raceIcon" src="' + getRaceImageByNumber(i) + '"></a> ';
} }
resHtml += "</center></div>"; resHtml += "</center></div>";
if(raceCount >= 2){
resHtml += "<div class='col-xs-3'><center><h2>Second race</h2>";
for(var i = 1; i <= 9; i++){
var selected = "raceNotSelected";
if($.cookie("race2") == i){
selected = "raceSelected";
selectedSecondRace = i;
} }
resHtml += '<a href = "#" class="'+selected+' additionalRaceIcon" onclick="selectSecondRace(this, ' +i+')"><img class="raceIcon" src="'+getRaceImageByNumber(i)+'"></a> '; return resHtml;
}
resHtml += "</center></div>";
} }
if(raceCount >= 3){ var resHtml = "";
resHtml += "<div class='col-xs-3'><center><h2>Third race</h2>"; resHtml += getRaceSelectHtml("main", selectedRaces);
for(var i = 1; i <= 9; i++){ if(existAdditionalRaces) resHtml += getRaceSelectHtml("additional", selectedAdditionalRaces);
var selected = "raceNotSelected";
var banned = "";
if($.cookie("race3") == i){
selected = "raceSelected";
banned = "bannedRace";
selectedThirdRace = i;
}
resHtml += '<a href = "#" class="'+selected+' thirdRaceIcon" onclick="selectThirdRace(this, ' +i+')"><img class="raceIcon" src="'+getRaceImageByNumber(i)+'"></a> ';
}
resHtml += "</center></div>";
}
if(raceCount >= 4){
resHtml += "<div class='col-xs-3'><center><h2>Fourth race</h2>";
for(var i = 1; i <= 9; i++){
var selected = "raceNotSelected";
var banned = "";
if($.cookie("race4") == i){
selected = "raceSelected";
banned = "bannedRace";
selectedFourthRace = i;
}
resHtml += '<a href = "#" class="'+selected+' fourthRaceIcon" onclick="selectFourthRace(this, ' +i+')"><img class="raceIcon" src="'+getRaceImageByNumber(i)+'"></a> ';
}
resHtml += "</center></div>";
}
resHtml += "<div class='col-xs-4'></div>";
resHtml += "<div style='clear: both;'></div></br>"; resHtml += "<div style='clear: both;'></div></br>";
resHtml += "<center><button id = 'selectRace' class='btn btn-primary' disabled onclick='sendSelectedRacesToServer()'>OK</button></center>" resHtml += "<center><button id = 'selectRace' class='btn btn-primary' disabled onclick='sendSelectedRacesToServer()'>OK</button></center>"
@ -321,52 +303,19 @@ function renderRaces() {
checkRaceSelectFinish(); checkRaceSelectFinish();
} }
var selectedMainRace = 0;
var selectedSecondRace = 0;
var selectedThirdRace = 0;
var selectedFourthRace = 0;
function selectMainRace(button, race){ var selectedRaces = [];
selectedMainRace = race; var selectedAdditionalRaces = [];
$.cookie("race1", race, { expires: 1 });
_.each($(".mainRaceIcon"), function (el){
$(el).removeClass("raceSelected");
$(el).addClass("raceNotSelected");
});
$(button).removeClass("raceNotSelected");
$(button).addClass("raceSelected");
checkRaceSelectFinish();
function selectRace(button, race, raceNum, raceType) {
if(raceType === "main"){
selectedRaces[raceNum] = race;
}else{
selectedAdditionalRaces[raceNum] = race;
} }
function selectSecondRace(button, race){ $.cookie("race-" + raceType + "-" + raceNum, race, {expires: 1});
selectedSecondRace = race; _.each($(".raceIcon-" + raceNum + "-" + raceType), function (el) {
$.cookie("race2", race, { expires: 1 });
_.each($(".additionalRaceIcon"), function (el){
$(el).removeClass("raceSelected");
$(el).addClass("raceNotSelected");
});
$(button).removeClass("raceNotSelected");
$(button).addClass("raceSelected");
checkRaceSelectFinish();
}
function selectThirdRace(button, race){
selectedThirdRace = race;
$.cookie("race3", race, { expires: 1 });
_.each($(".thirdRaceIcon"), function (el){
$(el).removeClass("raceSelected");
$(el).addClass("raceNotSelected");
});
$(button).removeClass("raceNotSelected");
$(button).addClass("raceSelected");
checkRaceSelectFinish();
}
function selectFourthRace(button, race){
selectedFourthRace = race;
$.cookie("race4", race, { expires: 1 });
_.each($(".fourthRaceIcon"), function (el){
$(el).removeClass("raceSelected"); $(el).removeClass("raceSelected");
$(el).addClass("raceNotSelected"); $(el).addClass("raceNotSelected");
}); });
@ -376,19 +325,17 @@ function selectFourthRace(button, race){
} }
function checkRaceSelectFinish() { function checkRaceSelectFinish() {
if(selectedRaces.filter(x => x).length >= raceCount){
if(selectedMainRace !== 0 && (raceCount < 2 || selectedSecondRace !== 0) && (raceCount < 3 || selectedThirdRace !== 0) && (raceCount < 4 || selectedFourthRace !== 0)){ $("#selectRace").removeAttr("disabled");
$("#selectRace").removeAttr("disabled")
} }
} }
function sendSelectedRacesToServer() { function sendSelectedRacesToServer() {
console.log(selectedRaces);
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: "selectRace", type: "selectRace",
raceFirst: selectedMainRace, mainRaces: selectedRaces.filter(x => x),
raceSecond: selectedSecondRace, additionalRaces: selectedAdditionalRaces.filter(x => x)
raceThird: selectedThirdRace,
raceFourth: selectedFourthRace
})); }));
$("#mapList").html("<center>Waiting another player...</center>"); $("#mapList").html("<center>Waiting another player...</center>");
} }
@ -406,9 +353,6 @@ function renderMaps(maps, lobbyStatus) {
banHtml = "<div class = 'banX'>&#x2715;</div>"; banHtml = "<div class = 'banX'>&#x2715;</div>";
banClass = "bannedMap"; banClass = "bannedMap";
} }
if(lobbyStatus === "NotStarted()" && !isSolo){
banClass = "bannedMap";
}
var title = "" var title = ""
@ -440,34 +384,8 @@ function renderFinish(maps, firstPlayerInfo, secondPlayerInfo) {
}) })
resHtml += "<div style='clear: both;'>"; resHtml += "<div style='clear: both;'>";
resHtml += getRenderRaces(firstPlayerInfo.selectedRaces, secondPlayerInfo.selectedRaces);
if(!isSolo){ resHtml += "</center>";
resHtml += "<h2>" + firstPlayerInfo.name + "</h2>";
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(firstPlayerInfo.selectedRaces.firstRace)+"> ";
if(raceCount >= 2){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(firstPlayerInfo.selectedRaces.secondRace)+"> ";
}
if(raceCount >= 3){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(firstPlayerInfo.selectedRaces.thirdRace)+"> ";
}
if(raceCount >= 4){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(firstPlayerInfo.selectedRaces.fourthRace)+"> ";
}
resHtml += "<h2>" + secondPlayerInfo.name + "</h2>";
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(secondPlayerInfo.selectedRaces.firstRace)+"> ";
if(raceCount >= 2){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(secondPlayerInfo.selectedRaces.secondRace)+"> ";
}
if(raceCount >= 3){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(secondPlayerInfo.selectedRaces.thirdRace)+"> ";
}
if(raceCount >= 4){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(secondPlayerInfo.selectedRaces.fourthRace)+"> ";
}
}
resHtml += "</center>"
$("#mapList").html(resHtml); $("#mapList").html(resHtml);
} }
@ -576,9 +494,6 @@ function renderPlayersAndStats(lobby) {
} else { } else {
disabledText = ""; disabledText = "";
} }
/*for(var i = 1; i <= 9; i++){
resHtml += '<a href = "#" class="raceNotSelected mainRaceIcon" style="position: absolute; z-index: -1;"><img class="raceIcon" src="'+getRaceImageByNumber(i)+'"></a> ';
}*/
resHtml += "</div>"; resHtml += "</div>";
break; break;
case "SelectRace()": case "SelectRace()":
@ -590,32 +505,10 @@ function renderPlayersAndStats(lobby) {
isDraftStarted = true; isDraftStarted = true;
} }
if(!isSolo){
var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name
resHtml = "<center>"+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "<br/><b>" + playerTurn +"</b> turn</center>"; resHtml = "<center><br/>";
resHtml += "<center><img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user1Info.selectedRaces.firstRace)+"> "; resHtml += getRenderRaces(lobby.user1Info, lobby.user2Info);
if(raceCount > 1){ resHtml += "<br/> <b>" + playerTurn + "</b> turn" + "</center>";
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user1Info.selectedRaces.secondRace)+"> ";
}
if(raceCount > 2){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user1Info.selectedRaces.thirdRace)+"> ";
}
if(raceCount > 3){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user1Info.selectedRaces.fourthRace)+"> ";
}
resHtml += " <span style='font-size: 14px'>VS</span> ";
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user2Info.selectedRaces.firstRace)+">";
if(raceCount > 1){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user2Info.selectedRaces.secondRace)+"> ";
}
if(raceCount > 2){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user2Info.selectedRaces.thirdRace)+"> ";
}
if(raceCount > 3){
resHtml += "<img class=\"raceIcon\" src="+getRaceImageByNumber(lobby.user2Info.selectedRaces.fourthRace)+"> ";
}
}
break; break;
case "Finish()": case "Finish()":
renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info); renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info);
@ -627,6 +520,27 @@ function renderPlayersAndStats(lobby) {
$("#playersStatsList").html(resHtml); $("#playersStatsList").html(resHtml);
} }
function getRenderRaces(userInfo1, userInfo2) {
function getRacesBlock(playerRaces, name){
let resHtml = "<div style='display: inline-block; border: black 1px solid; background-color: #e3e3e3;'>" + "<h4>" + name + "</h4>";
resHtml += "main:";
playerRaces.mainRaces.forEach((raceId) =>
resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> ");
resHtml += "<br/> addt:";
playerRaces.additionalRaces.forEach((raceId) =>
resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> ");
resHtml += "</div>";
return resHtml;
}
let resHtml = "";
resHtml += getRacesBlock(userInfo1.selectedRaces, userInfo1.name);
resHtml += "<div style='width: 100px; font-size: 24px; display: inline-block;'><b>VS</b></div>";
resHtml += getRacesBlock(userInfo2.selectedRaces, userInfo2.name);
return resHtml;
}
function addMessageToChat(message) { function addMessageToChat(message) {
var messageHtml = "<div class='msgln'> <b>" + message.userName + "</b>: " + message.message + "<br></div>"; var messageHtml = "<div class='msgln'> <b>" + message.userName + "</b>: " + message.message + "<br></div>";
var chatBox = $("#chatbox"); var chatBox = $("#chatbox");

Binary file not shown.

View File

@ -37,7 +37,7 @@
} }
.raceIcon{ .raceIcon{
width: 90px; width: 60px;
border-radius: 5px; border-radius: 5px;
margin: 3px; margin: 3px;
border: 1px solid; border: 1px solid;

View File

@ -43,11 +43,11 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl
logger.info(s"Received request from: ${request.remoteAddress}") logger.info(s"Received request from: ${request.remoteAddress}")
val deciderHumanName = config.getString(s"deciders.$deciderName.name") val deciderHumanName = config.getString(s"deciders.$deciderName.name")
val deciderDescription = config.getString(s"deciders.$deciderName.rules") 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 raceCount = Try(config.getInt(s"deciders.$deciderName.raceCount")).getOrElse(1)
val lastmapsSettings = LastMapsSelectConfig(true, true, true, true) val lastmapsSettings = LastMapsSelectConfig(true, true, true, true)
val raceSelect = RaceSelect(true, false) 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))
} }
/** /**

View File

@ -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[_])
<!DOCTYPE html> <!DOCTYPE html>
<span id="deciderName" style="display: none">@deciderName</span> <span id="deciderName" style="display: none">@deciderName</span>
<span id="raceCount" style="display: none">@raceCount</span> <span id="raceCount" style="display: none">@raceCount</span>
<span id="existAdditionalRaces" style="display: none">@existAdditionalRaces</span>
<span id="last1Presence" style="display: none">@boSettings.last1</span> <span id="last1Presence" style="display: none">@boSettings.last1</span>
<span id="last3Presence" style="display: none">@boSettings.last3</span> <span id="last3Presence" style="display: none">@boSettings.last3</span>
<span id="last5Presence" style="display: none">@boSettings.last5</span> <span id="last5Presence" style="display: none">@boSettings.last5</span>
<span id="last7Presence" style="display: none">@boSettings.last7</span> <span id="last7Presence" style="display: none">@boSettings.last7</span>
<span id="isSolo" style="display: none">@isSolo</span>
<html> <html>
<head> <head>
@ -21,7 +20,7 @@
<script type='text/javascript' src='@routes.Assets.at("lib/underscore/underscore.js")'></script> <script type='text/javascript' src='@routes.Assets.at("lib/underscore/underscore.js")'></script>
<script type='text/javascript' src='@routes.Assets.at("lib/backbonejs/backbone.js")'></script> <script type='text/javascript' src='@routes.Assets.at("lib/backbonejs/backbone.js")'></script>
<script type="text/javascript" src="@routes.Assets.at("lib/jquery-cookie/jquery.cookie.js")"></script> <script type="text/javascript" src="@routes.Assets.at("lib/jquery-cookie/jquery.cookie.js")"></script>
<script type='text/javascript' src='@routes.Assets.at("javascripts/index.js?301222")'></script> <script type='text/javascript' src='@routes.Assets.at("javascripts/index.js?050823")'></script>
</head> </head>
<body data-ws-url="@routes.HomeController.ws.webSocketURL()"> <body data-ws-url="@routes.HomeController.ws.webSocketURL()">
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar navbar-inverse navbar-fixed-top">

View File

@ -25,6 +25,20 @@ deciders{
name = "Классический десайдер" name = "Классический десайдер"
rules = """""" 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{ flazzomappool{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
@ -58,7 +72,6 @@ deciders{
["летний"]] ["летний"]]
name = "Выбираем салат на новый год" name = "Выбираем салат на новый год"
isSolo = true
rules = """""" rules = """"""
} }
turtleshell{ turtleshell{
@ -279,6 +292,7 @@ deciders{
} }
shouldercup{ shouldercup{
description = true description = true
existAdditionalRaces = true
raceCount = 3 raceCount = 3
maps = [["6p_paynes_retribution", "Количество точек: 28/2/2\nСпорных точек: 10/0/2\nТермогенераторы: 2"], maps = [["6p_paynes_retribution", "Количество точек: 28/2/2\nСпорных точек: 10/0/2\nТермогенераторы: 2"],
["6p_fury_island", "Количество точек: 26/6/1\nСпорных точек: 6 + 1 крит\nТермогенераторы: Отсутствуют"], ["6p_fury_island", "Количество точек: 26/6/1\nСпорных точек: 6 + 1 крит\nТермогенераторы: Отсутствуют"],
@ -345,19 +359,27 @@ deciders{
Чтобы не было повторений карт, игроки могу выбрать всего 1 раз карту из списка. """ Чтобы не было повторений карт, игроки могу выбрать всего 1 раз карту из списка. """
} }
tpmodcup{ tpmodcup{
maps = ["2p_battle_marshes", description = true
"2p_fallen_city_[Rem]", raceCount = 1
"2p_fata_morgana_[Rem]", maps = [["2p_battle_marshes"],
"2p_quests_triumph", ["2p_fallen_city_[Rem]"],
"2p_shrine_of_excellion_[Rem]", ["2p_quests_triumph"],
"2p_titan_fall_[Rem]", ["2p_fear"],
"2p_tranquilitys_end_[Rem]", ["2p_shrine_of_excellion_[Rem]"],
"2p_blood_river_[Rem]", ["2p_titan_fall_[Rem]"],
"2p_sugaroasis", ["2p_tranquilitys_end_[Rem]"],
"2p_faceoff", ["2p_blood_river_[Rem]"],
"2p_deadly_fun_archeology", ["2p_sugaroasis"],
"2p_terror_psyclaw", ["2p_faceoff"],
"2p_meeting_of_minds"] ["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 = "Турнир по ТП моду" name = "Турнир по ТП моду"
rules = """Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик. """ rules = """Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик. """
} }
@ -388,7 +410,7 @@ deciders{
rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. """ rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. """
} }
freneticmappool{ freneticmappool{
raceCount = 2 raceCount = 3
description = true description = true
maps =[["2p_battle_marshes"], maps =[["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
@ -402,7 +424,9 @@ deciders{
["2p_deadly_fun_archeology"], ["2p_deadly_fun_archeology"],
["2p_sugaroasis"], ["2p_sugaroasis"],
["2p_outer_reaches"], ["2p_outer_reaches"],
["2p_meeting_of_minds"]] ["2p_meeting_of_minds"],
["2p_fraziersdemise"],
["2p_fata_morgana_[Rem]"]]
name = "Frenetic map pool" name = "Frenetic map pool"
rules = """ """ rules = """ """
} }
@ -437,7 +461,7 @@ deciders{
["4p_marconia"], ["4p_marconia"],
["4p_panrea_lowlands"], ["4p_panrea_lowlands"],
["4p_saints_square"], ["4p_saints_square"],
["6p_snowblind"], ["4p_snowblind"],
["4p_tartarus_center"], ["4p_tartarus_center"],
["4p_skerries"], ["4p_skerries"],
["4p_doom_spiral"]] ["4p_doom_spiral"]]
@ -477,5 +501,50 @@ deciders{
name = "Casino cup" name = "Casino cup"
rules = """Выбор карт без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. """ 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 = """ """
}
} }