This commit is contained in:
anibus 2026-08-15 13:32:08 +03:00
parent d1dd478c43
commit 3cad3aec4b
10 changed files with 431 additions and 119 deletions

View File

@ -261,9 +261,9 @@ case class ChangeIsNecronSelected(isSelected: Boolean)
case object InfoQuery case object InfoQuery
case class SelectedRaces(mainRaces: List[Int], additionalRaces: List[Int]) case class SelectedRaces(mainRaces: List[Int], additionalRaces: List[Int], raceTextInput: String)
case class UserInfo(name: String, isReady: Boolean, selectedRaces: Option[SelectedRaces] = None) case class UserInfo(name: String, isReady: Boolean, selectedRaces: Option[SelectedRaces] = None, selectedRacesText: Option[String] = None)
case class LobbyInfo(user1Info: UserInfo, case class LobbyInfo(user1Info: UserInfo,
user2Info: UserInfo, user2Info: UserInfo,

View File

@ -176,7 +176,8 @@ class UserActor(out: ActorRef,
logger.info("RACES: " + json.toString()) logger.info("RACES: " + json.toString())
val races = (json \ "mainRaces").as[List[Int]] val races = (json \ "mainRaces").as[List[Int]]
val additionalRaces = (json \ "additionalRaces").as[List[Int]] val additionalRaces = (json \ "additionalRaces").as[List[Int]]
lobbieActor.foreach(lobby => lobby ! SelectedRaces(races, additionalRaces)) val raceTextInput = (json \ "raceTextInput").as[String]
lobbieActor.foreach(lobby => lobby ! SelectedRaces(races, additionalRaces, raceTextInput))
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: 831 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -4,6 +4,7 @@ var userName = ""
var raceCount = $("#raceCount").html() var raceCount = $("#raceCount").html()
var existAdditionalRaces = $("#existAdditionalRaces").html() === "true" var existAdditionalRaces = $("#existAdditionalRaces").html() === "true"
var existTextFieldRaces = $("#existTextFieldRaces").html() === "true"
var isMuted = false; var isMuted = false;
var isDraftStarted = false; var isDraftStarted = false;
@ -227,6 +228,8 @@ function disconnectLobby(error) {
function getRaceImageByNumber(number) { function getRaceImageByNumber(number) {
switch (number) { switch (number) {
case 10:
return "/assets/images/raceIcons/cancel.png";
case 1: case 1:
return "/assets/images/raceIcons/SM.gif"; return "/assets/images/raceIcons/SM.gif";
case 2: case 2:
@ -248,28 +251,6 @@ function getRaceImageByNumber(number) {
} }
} }
function getRaceVideoByNumber(number) {
switch (number) {
case 1:
return "/assets/video/races/SM.mp4";
case 2:
return "/assets/video/races/Chaos.mp4";
case 3:
return "/assets/video/races/Eldar.mp4";
case 4:
return "/assets/video/races/Orks.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() {
@ -277,7 +258,7 @@ function renderRaces() {
var resHtml = ""; var resHtml = "";
for(var raceNum = 1; raceNum <= raceCount; raceNum++){ for(var raceNum = 1; raceNum <= raceCount; raceNum++){
resHtml += "<div class='col-xs-4'><center><h3>" + raceType + " race " + raceNum + "</h3>"; resHtml += "<div class='col-xs-4'><center><h3>" + raceType + " race " + raceNum + "</h3>";
for (var i = 1; i <= 9; i++) { for (var i = 1; i <= 10; i++) {
var selected = "raceNotSelected"; var selected = "raceNotSelected";
if ($.cookie("race-" + raceType + "-" + raceNum) == i) { if ($.cookie("race-" + raceType + "-" + raceNum) == i) {
selected = "raceSelected"; selected = "raceSelected";
@ -293,9 +274,21 @@ function renderRaces() {
return resHtml; return resHtml;
} }
function renderInputField() {
var raceTextInput = ''
if($.cookie("raceTextInput") !== undefined){
raceTextInput = $.cookie("raceTextInput")
}
return '<center><input type="text" class="form-control" id="raceInput" placeholder="Black fists, Imperial angels, Blood templars" oninput="checkRaceSelectFinish()" value="'+ raceTextInput +'"/></center>';
}
var resHtml = ""; var resHtml = "";
resHtml += getRaceSelectHtml("main", selectedRaces); if(!existTextFieldRaces){
if(existAdditionalRaces) resHtml += getRaceSelectHtml("additional", selectedAdditionalRaces); resHtml += getRaceSelectHtml("main", selectedRaces);
if(existAdditionalRaces) resHtml += getRaceSelectHtml("additional", selectedAdditionalRaces);
}else {
resHtml += renderInputField();
}
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>"
@ -327,15 +320,23 @@ function selectRace(button, race, raceNum, raceType) {
function checkRaceSelectFinish() { function checkRaceSelectFinish() {
if(selectedRaces.filter(x => x).length >= raceCount){ if(selectedRaces.filter(x => x).length >= raceCount){
$("#selectRace").removeAttr("disabled"); $("#selectRace").removeAttr("disabled");
} else if($("#raceInput").val().trim() !== ''){
$("#selectRace").removeAttr("disabled");
} }
} }
function sendSelectedRacesToServer() { function sendSelectedRacesToServer() {
$.cookie('raceTextInput', $("#raceInput").val(), {expires: 1});
var selectedInput = $("#raceInput").val();
if(selectedInput === undefined){
selectedInput = ""
}
console.log(selectedRaces); console.log(selectedRaces);
ws.send(JSON.stringify({ ws.send(JSON.stringify({
type: "selectRace", type: "selectRace",
mainRaces: selectedRaces.filter(x => x), mainRaces: selectedRaces.filter(x => x),
additionalRaces: selectedAdditionalRaces.filter(x => x) additionalRaces: selectedAdditionalRaces.filter(x => x),
raceTextInput: selectedInput
})); }));
$("#mapList").html("<center>Waiting another player...</center>"); $("#mapList").html("<center>Waiting another player...</center>");
} }
@ -524,12 +525,13 @@ function getRenderRaces(userInfo1, userInfo2) {
function getRacesBlock(playerRaces, name){ function getRacesBlock(playerRaces, name){
let resHtml = "<div style='display: inline-block; border: black 1px solid; background-color: #e3e3e3;'>" + "<h4>" + name + "</h4>"; let resHtml = "<div style='display: inline-block; border: black 1px solid; background-color: #e3e3e3;'>" + "<h4>" + name + "</h4>";
resHtml += "main:";
playerRaces.mainRaces.forEach((raceId) => playerRaces.mainRaces.forEach((raceId) =>
resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> "); resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> ");
resHtml += "<br/> addt:";
playerRaces.additionalRaces.forEach((raceId) => playerRaces.additionalRaces.forEach((raceId) =>
resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> "); resHtml += "<img class=\"raceIcon\" src=" + getRaceImageByNumber(raceId) + "> ");
if(existTextFieldRaces){
resHtml += "<span style='margin: 10px;'>" + playerRaces.raceTextInput + "</span>";
}
resHtml += "</div>"; resHtml += "</div>";
return resHtml; return resHtml;
} }

View File

@ -44,10 +44,11 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl
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 existAdditionalRaces = Try(config.getBoolean(s"deciders.$deciderName.existAdditionalRaces")).getOrElse(false) val existAdditionalRaces = Try(config.getBoolean(s"deciders.$deciderName.existAdditionalRaces")).getOrElse(false)
val existTextFieldRaces = Try(config.getBoolean(s"deciders.$deciderName.existTextFieldRaces")).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, existAdditionalRaces)) Ok(views.html.index(deciderName, deciderHumanName, raceCount, deciderDescription, raceSelect, lastmapsSettings, existAdditionalRaces, existTextFieldRaces))
} }
/** /**

View File

@ -1,9 +1,10 @@
@(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, existAdditionalRaces: Boolean)(implicit r: Request[_]) @(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, existAdditionalRaces: Boolean, existTextFieldRaces: 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="existAdditionalRaces" style="display: none">@existAdditionalRaces</span>
<span id="existTextFieldRaces" style="display: none">@existTextFieldRaces</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>
@ -20,7 +21,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?170823")'></script> <script type='text/javascript' src='@routes.Assets.at("javascripts/index.js?14122025")'></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

@ -9,6 +9,69 @@ play.server.http.port = 1337
deciders{ deciders{
classic{ classic{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_outer_reaches"],
["2p_blood_river"],
["2p_sugaroasis"]]
name = "Классический десайдер"
rules = """"""
}
mironcup{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_emerald_river"],
["2p_outer_reaches"],
["2p_blood_river"]]
name = "Десайдер для турнира мироныча"
raceCount = 3
rules = """"""
}
montanaz0r{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_emerald_river"],
["2p_outer_reaches"],
["2p_blood_river"]]
name = "VOX of War tournament"
raceCount = 1
rules = """There are 11 maps in total, and each player will ban 3 maps. This means that at the end of the draft, 5 maps will remain."""
}
mistrzostwa{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_outer_reaches"],
["2p_blood_river"]]
name = "Mistrzostwa Polski DoW 2026"
raceCount = 1
rules = """Each player would ban a total of four maps, leaving the final two maps to be played."""
}
new-players-tournament{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
["2p_fata_morgana_[Rem]"], ["2p_fata_morgana_[Rem]"],
@ -17,13 +80,58 @@ deciders{
["2p_shrine_of_excellion_[Rem]"], ["2p_shrine_of_excellion_[Rem]"],
["2p_titan_fall_[Rem]"], ["2p_titan_fall_[Rem]"],
["2p_tranquilitys_end_[Rem]"], ["2p_tranquilitys_end_[Rem]"],
["2p_fraziersdemise"],
["2p_outer_reaches"], ["2p_outer_reaches"],
["2p_blood_river_[Rem]"],
["2p_deadly_fun_archeology"], ["2p_deadly_fun_archeology"],
["2p_bloody_hell_[Ed]"]] ["2p_blood_river_[Rem]"]]
name = "Классический десайдер" name = "New player tournament"
rules = """""" raceCount = 1
rules = """New player tournament."""
}
taktik-garik-winter-cup{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_bloody_hell_[Ed]"],
["2p_outer_reaches"],
["2p_blood_river"]]
name = "TaktikGarik Winter Cup"
raceCount = 2
rules = """Crossed out up to 3(5) maps, and all games of the meeting will be played on them. The first map is determined by further crossing out. Repeating maps is prohibited. It is allowed to play on remasters of these maps."""
}
definitive-cup{
maps = [["2p_battle_marshes"],
["2p_blood_river"],
["2p_fallen_city"],
["2p_meeting_of_minds"],
["2p_outer_reaches"],
["2p_quests_triumph"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"]]
raceCount = 3
name = "Definitive Cup"
rules = """Первая карта выбирается вычеркиванием до 1 карты. Далее лузерпик из всех карт маппула. При выборе рас указываете основную(1), дополнительную(2) и нежелательную(3). The first map is selected by crossing out up to 1 map. Next, a loser is selected from all the maps in the mappool. At race selection - select main (1) additional(2) and unwanted(3) race."""
}
world-championship-de-cup{
maps = [["2p_battle_marshes"],
["2p_blood_river"],
["2p_fallen_city"],
["2p_gavrix_imperial_ale"],
["2p_meeting_of_minds"],
["2p_outer_reaches"],
["2p_quests_triumph"],
["2p_shrine_of_excellion"],
["2p_deadly_fun_archeology"],
["2p_titan_fall"],
["2p_tranquilitys_end"]]
raceCount = 3
name = "Dawn of War World Championship - Definitive Edition"
rules = """Group Stage: Best of 3 (BO3) matches — or Best of 1 (BO1), depending on total player count. Playoffs: Double-Elimination Bracket with: • Winners Bracket (BO3) • Losers Bracket (BO1) • Losers Final (BO3) • Grand Final (BO5); Grand Final Advantage: Winner of the Winners Bracket bans the first map, then picks the first map to play."""
} }
freakcup{ freakcup{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
@ -56,6 +164,38 @@ deciders{
name = "Dvij cup season" name = "Dvij cup season"
rules = """Классическая Double elimination с сеткой лузеров. В сетке виннеров - БО3, в сетке лузеров - БО1, в суперфинале - БО5. Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """ rules = """Классическая Double elimination с сеткой лузеров. В сетке виннеров - БО3, в сетке лузеров - БО1, в суперфинале - БО5. Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """
} }
stscup3x3{
description = true
existTextFieldRaces = 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Термогенераторы: Отсутствуют"],
["6p_irridene", "Количество точек: 21/6/3\nСпорных точек: 6/0/3\nТермогенераторы: 6"],
["6p_shakun_coast", "Количество точек: 24/4/1\nСпорных точек: 6/2/1\nТермогенераторы: 2"],
["6p_platform", "Количество точек: 26/2/3\nТермогенераторы: 2"],
["6p_testing_grounds", "Количество точек: 32/6/5\nСпорных точек: 10/2/5\nТермогенераторы: 6"],
["6p_gear", "Количество точек: 24/2/3\nСпорных точек: 2 крита, но ввиду контактности карты сражение может идти на большинстве внешних точек\nТермогенераторы: 2"],
["6p_constellation", ""],
["6p_trivian_groves_v2", ""],
["6p_principian_badlands_BM", ""],
["6p_team_streets_of_vogen", ""]]
name = "Shoulder to Shoulder Cup"
rules = """Классическая Double elimination с сеткой лузеров. В сетке виннеров - БО3, в сетке лузеров - БО1, в финале лузеров - БО 3, в суперфинале - БО5. Дошедшие с сетки виннеров получают +1 очко, а вышедшие с сетки лузеров имеют право лузерпика."""
}
balance-rage-2x2{
maps = [["4p_tartarus_center"],
["4p_skerries"],
["4p_chaos_platenau"],
["4p_cold_war"],
["4p_broken_infinity"],
["4p_imperial_area"],
["4p_saints_square"],
["4p_gorhael_crater"],
["4p_biffys_peril"]]
raceCount = 2
name = "BALANCE RAGE 2V2 CUP"
rules = """Для БО3 вычеркивание до 3х карт, на которых будут проходить все игры. Первая карта выбирается дальнейшим вычеркиванием. Для БО5 вычеркивание до 5 карт. Повтор карт запрещен. """
}
dredicmappool{ dredicmappool{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
@ -74,6 +214,66 @@ deciders{
name = "Десайдер DreDick" name = "Десайдер DreDick"
rules = """""" rules = """"""
} }
dredicmappool2x2{
maps = [["4p_tartarus_center"],
["4p_skerries"],
["4p_chaos_platenau"],
["4p_cold_war"],
["4p_broken_infinity"],
["4p_colosseum_of_deadman"],
["4p_imperial_area"],
["4p_torrents"],
["4p_saints_square"],
["4p_marconia"],
["4p_biffys_peril"]]
raceCount = 2
name = "Десайдер DreDick 2x2"
rules = """"""
}
dredicmappool3x3{
maps = [["6p_paynes_retribution"],
["6p_fury_island"],
["6p_testing_grounds"],
["6p_alvarus"],
["6p_shakun_coast"],
["6p_team_streets_of_vogen"],
["6p_irridene"],
["6p_gear"],
["6p_platform"]]
raceCount = 3
name = "Десайдер 3x3"
rules = """"""
}
dredicmappool4x4{
maps = [["8p_burial_grounds", "Количество стратегических/реликтовых/критических точек: 32/2/4\nСпорных точек: 4/2/2\nТермогенераторы: 3"],
["8p_daturias_pits", "Количество стратегических/реликтовых/критических точек: 32/4/5\nСпорных точек: 2/2/1\nТермогенераторы: 0"],
["8p_forbidden_jungle", "Количество стратегических/реликтовых/критических точек: 36/5/0\nСпорных точек: 12/5/0\nТермогенераторы: 4"],
["8p_demes_northlands", "Количество стратегических/реликтовых/критических точек: 32/4/3\nСпорных точек: 3/2/2\nТермогенераторы: 2"],
["8p_glacier", "Количество стратегических/реликтовых/критических точек: 24/4/5\nСпорных точек: 0/0/4\nТермогенераторы: 4"],
["8p_jalaganda_lowlands", "Количество стратегических/реликтовых/критических точек: 26/5/3\nСпорных точек: 2/1/3\nТермогенераторы: 0"],
["8p_monse", "Количество стратегических/реликтовых/критических точек: 26/4/4\nСпорных точек: 2/2/4\nТермогенераторы: 1"],
["8p_oasis_of_sharr.jpg"],
["8p_verdant_isles_ed", "Количество стратегических/реликтовых/критических точек: 32/4/3\nСпорных точек: 0/4/3\nТермогенераторы: 0"]]
raceCount = 4
name = "Десайдер DreDick 4x4"
rules = """"""
}
wellplayed{
maps = [["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_outer_reaches"],
["2p_emerald_river"],
["2p_blood_river"]]
raceCount = 1
name = "Десайдер Wellplayed"
rules = """1st map after veto (A-B-A-B etc) A is Top in Grid. After looserpick"""
}
flazzomappool{ flazzomappool{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
@ -94,6 +294,34 @@ deciders{
name = "Десайдер flazzo" name = "Десайдер flazzo"
rules = """""" rules = """"""
} }
westerners-invitational{
maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"],
["2p_blood_river_[Rem]"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_shrine_of_excellion_[Rem]"],
["2p_gavrix_imperial_ale"],
["2p_tranquilitys_end_[Rem]"],
["2p_outer_reaches"]]
raceCount = 2
name = "Westerners Invitational"
rules = """In case of a BO3, 3 maps must be left after the banning. Further the players must strike out a map each to decide the first map they play versus each other, the losers pick the next map (losers pick). In case of a BO5, 5 maps are needed."""
}
madcup{
maps = [["2p_outer_reaches"],
["2p_blood_river"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_meeting_of_minds"],
["2p_fallen_city"],
["2p_tranquilitys_end"],
["2p_shrine_of_excellion"],
["2p_titan_fall"]]
raceCount = 3
name = "Decider MAD"
rules = """"""
}
salats{ salats{
maps = [["винегрет"], maps = [["винегрет"],
["грибная поляна"], ["грибная поляна"],
@ -196,7 +424,7 @@ deciders{
["2p_titan_fall_[Rem]"], ["2p_titan_fall_[Rem]"],
["2p_tranquilitys_end_[Rem]"], ["2p_tranquilitys_end_[Rem]"],
["2p_meeting_of_minds"], ["2p_meeting_of_minds"],
["2p_bloody_hell"], ["2p_bloody_hell"],2
["2p_blood_river_[Rem]"], ["2p_blood_river_[Rem]"],
["2p_outer_reaches"]] ["2p_outer_reaches"]]
name = "World championsip 2024" name = "World championsip 2024"
@ -260,6 +488,26 @@ deciders{
raceCount = 2 raceCount = 2
rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров.""" rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров."""
} }
burgercup-de{
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_fraziersdemise"],
["2p_bloody_hell_[Ed]"],
["2p_blood_river_[Rem]"],
["2p_deadly_fun_archeology"],
["2p_outer_reaches"],
["2p_meeting_of_minds"],
["2p_consecrated_gardens_5p_BM"],
["2p_ancient_jungle_BM"]]
name = "Burger cup"
raceCount = 3
rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров."""
}
trainercup{ trainercup{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
["2p_fallen_city_[Rem]"], ["2p_fallen_city_[Rem]"],
@ -274,7 +522,7 @@ deciders{
["2p_deadly_fun_archeology"]] ["2p_deadly_fun_archeology"]]
name = "Trainer cup" name = "Trainer cup"
raceCount = 2 raceCount = 2
rules = """Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров.""" rules = """Выбор карт в рамках бо3 и бо5, с тремя и пятью картами соответственно. Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Во втором и последующем матчах проигравший выбирает карту из числа выбранных карт. В сетке лузеров бо1, финал лузеров бо3, в супер-финале игрок из нижней сетки имеет право автоматического лузерпика, а игрок из верхней - плюс очко.."""
} }
customcup{ customcup{
maps = [["2p_battle_marshes"], maps = [["2p_battle_marshes"],
@ -364,6 +612,22 @@ deciders{
existAdditionalRaces = true existAdditionalRaces = true
rules = """1 раса, но можно взять вторую при мирроре""" rules = """1 раса, но можно взять вторую при мирроре"""
} }
summer-cup{
maps = [["2p_outer_reaches"],
["2p_battle_marshes"],
["2p_fallen_city"],
["2p_fata_morgana_[Rem]"],
["2p_quests_triumph"],
["2p_shrine_of_excellion"],
["2p_titan_fall"],
["2p_tranquilitys_end"],
["2p_bloody_hell_[Ed]"],
["2p_blood_river"],
["2p_meeting_of_minds"]]
name = "Summer cup"
raceCount = 2
rules = """Вычеркивание до 3(5) карт, на них пройдут все игры встречи. Первая карта определяется дальнейшим вычеркиванием. Повтор карт запрещен. Можно играть на ремастерах указанных карт """
}
mallusc-cup{ mallusc-cup{
maps = [["2p_outer_reaches"], maps = [["2p_outer_reaches"],
["2p_battle_marshes"], ["2p_battle_marshes"],
@ -452,29 +716,6 @@ deciders{
Финал сетки лузеров (БО3). Финал сетки лузеров (БО3).
Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """ Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """
} }
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Термогенераторы: Отсутствуют"],
["6p_irridene", "Количество точек: 21/6/3\nСпорных точек: 6/0/3\nТермогенераторы: 6"],
["6p_shakun_coast", "Количество точек: 24/4/1\nСпорных точек: 6/2/1\nТермогенераторы: 2"],
"2p_tranquilitys_end_[Rem]",
"2p_outer_reaches",
"2p_blood_river_[Rem]",
"2p_sugaroasis",
"2p_meeting_of_minds"]
name = "Horus heresy cup 2"
rules = """ Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик. По обоюдному согласию игроков разрешен повтор карт. Сетка турнира Double Elimination.
Сетка виннеров:
Каждая игра до 2х победы (БО3),
В суперфинале игра до 3-х побед (БО5).
Сетка лузеров:
Каждая игра до 1й победы (БО1),
Финал сетки лузеров (БО3).
Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """
}
testcup{ testcup{
description = true description = true
existAdditionalRaces = true existAdditionalRaces = true
@ -485,45 +726,6 @@ deciders{
name = "Тестовый турнир" name = "Тестовый турнир"
rules = """ Тест """ rules = """ Тест """
} }
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Термогенераторы: Отсутствуют"],
["6p_irridene", "Количество точек: 21/6/3\nСпорных точек: 6/0/3\nТермогенераторы: 6"],
["6p_shakun_coast", "Количество точек: 24/4/1\nСпорных точек: 6/2/1\nТермогенераторы: 2"],
"2p_tranquilitys_end_[Rem]",
"2p_outer_reaches",
"2p_blood_river_[Rem]",
"2p_sugaroasis",
"2p_meeting_of_minds"]
name = "Horus heresy cup 2"
rules = """ Первая карта десайдер выбирается методом вычеркивания, остальные лузер пик. По обоюдному согласию игроков разрешен повтор карт. Сетка турнира Double Elimination.
Сетка виннеров:
Каждая игра до 2х победы (БО3),
В суперфинале игра до 3-х побед (БО5).
Сетка лузеров:
Каждая игра до 1й победы (БО1),
Финал сетки лузеров (БО3).
Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """
}
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Термогенераторы: Отсутствуют"],
["6p_irridene", "Количество точек: 21/6/3\nСпорных точек: 6/0/3\nТермогенераторы: 6"],
["6p_shakun_coast", "Количество точек: 24/4/1\nСпорных точек: 6/2/1\nТермогенераторы: 2"],
["6p_platform", "Количество точек: 26/2/3\nТермогенераторы: 2"],
["6p_temple_cyrene", "Количество точек: 25/4/5\nСпорных точек: 8/0/3\nТермогенераторы: 2"],
["6p_testing_grounds", "Количество точек: 32/6/5\nСпорных точек: 10/2/5\nТермогенераторы: 6"],
["6p_ruined_greatway", "Количество точек: 22/2/1\nСпорных точек: 2/2/1\nТермогенераторы: 2"],
["6p_gear", "Количество точек: 24/2/3\nСпорных точек: 2 крита, но ввиду контактности карты сражение может идти на большинстве внешних точек\nТермогенераторы: 2"]]
name = "Shoulder to shoulder cup"
rules = """Классическая Double elimination с сеткой лузеров. В сетке виннеров - БО3, в сетке лузеров - БО1, в суперфинале - БО5. Игрок, прошедший в суперфинал из верхней сетки, имеет +1 очко. Игрок из нижней сетки начинает с лузерпиком. """
}
shouldercup4x4{ shouldercup4x4{
description = true description = true
raceCount = 4 raceCount = 4
@ -554,21 +756,23 @@ deciders{
name = "The emperor protects 2x2" name = "The emperor protects 2x2"
rules = """Первая карта выбирается вычеркиванием в десайдере. Далее - лузерпик из всех карт маппула. Повтор карт запрещен.""" rules = """Первая карта выбирается вычеркиванием в десайдере. Далее - лузерпик из всех карт маппула. Повтор карт запрещен."""
} }
springcup{ mironcup1x1{
description = true description = true
maps = [["4p_biffys_peril"], maps = [["4p_abandoned_jungle"],
["4p_antiga_bay"],
["4p_chaos_platenau"],
["4p_cold_war"], ["4p_cold_war"],
["4p_broken_infinity"],
["4p_colosseum_of_deadman"], ["4p_colosseum_of_deadman"],
["4p_gorhael_crater"],
["4p_imperial_area"], ["4p_imperial_area"],
["4p_saints_square"], ["4p_ruined_greatway"],
["4p_tartarus_center"], ["4p_sad_spires"],
["4p_testcake"], ["4p_snowblind"],
["4p_skerries"], ["4p_summit"],
["4p_tiboraxx"], ["4p_mariza"],
["4p_torrents"]] ["4p_testcake"]]
name = "Spring cup 2x2" name = "Турнир мироныча"
rules = """Десайдеры выбирается методом вычеркивания до 3 карт, далее из оставшихся карт методом вычеркивания определяется первая карта. Игрок, начавший вычеркивание из основного пула уступает право начать вычеркивание из оставшихся карт. Исключение суперфинал: Команда прошедшая в суперфинал с верхней сетки имеет преимущество в выборе очередности карт из оставшихся 3 после вычеркивания.""" rules = """Десайдеры выбирается методом вычеркивания до 3 карт, далее из оставшихся карт методом вычеркивания определяется первая карта. Игрок, начавший вычеркивание из основного пула уступает право начать вычеркивание из оставшихся карт."""
} }
backtoskullcup{ backtoskullcup{
description = true description = true
@ -728,6 +932,80 @@ deciders{
name = "Frenetic map pool" name = "Frenetic map pool"
rules = """ """ rules = """ """
} }
freneticmappool3{
raceCount = 2
description = true
maps =[["2p_battle_marshes"],
["2p_fallen_city_[Rem]"],
["2p_fata_morgana_[Rem]"],
["2p_emerald_river"],
["2p_quests_triumph"],
["2p_shrine_of_excellion_[Rem]"],
["2p_titan_fall_[Rem]"],
["2p_tranquilitys_end_[Rem]"],
["2p_outer_reaches"],
["2p_sugaroasis"],
["2p_blood_river_[Rem]"],
["2p_deadly_fun_archeology"],
["2p_meeting_of_minds"]]
name = "Frenetic map pool"
rules = """ """
}
dredicmappool3{
raceCount = 2
description = true
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_outer_reaches"],
["2p_blood_river_[Rem]"],
["2p_deadly_fun_archeology"],
["2p_meeting_of_minds"]]
name = "Dredic map pool 3"
rules = """ """
}
badcup-5{
raceCount = 2
description = true
maps =[["2p_battle_marshes"],
["2p_fallen_city_[Rem]"],
["2p_consecrated_gardens_5p_BM"],
["2p_quests_triumph"],
["2p_shrine_of_excellion_[Rem]"],
["2p_titan_fall_[Rem]"],
["2p_tranquilitys_end_[Rem]"],
["2p_outer_reaches"],
["2p_blood_river_[Rem]"],
["2p_deadly_fun_archeology"],
["2p_meeting_of_minds"]]
name = "Bad cup 5"
rules = """ """
}
freneticmappool15{
raceCount = 2
description = true
maps =[["2p_titan_fall_[Rem]"],
["2p_fallen_city_[Rem]", "Обратите внимание, ремастер"],
["2p_quests_triumph"],
["2p_shrine_of_excellion_[Rem]"],
["2p_tranquilitys_end_[Rem]"],
["2p_cryptek_arkana_BM"],
["2p_deadly_fun_archeology"],
["2p_consecrated_gardens_6p_BM"],
["2p_ancient_jungle_BM"],
["2p_outer_reaches"],
["2p_sugaroasis"],
["2p_meeting_of_minds"],
["2p_emerald_river"],
["2p_battle_marshes"],
["2p_gavrix_imperial_ale"]],
name = "Frenetic map pool (15 maps)"
rules = """ """
}
freneticmappool17{ freneticmappool17{
raceCount = 2 raceCount = 2
description = true description = true
@ -749,6 +1027,25 @@ deciders{
name = "Frenetic map pool (17 maps)" name = "Frenetic map pool (17 maps)"
rules = """ """ rules = """ """
} }
zikipchik{
raceCount = 2
description = true
maps =[["2p_titan_fall"],
["2p_consecrated_gardens_5p_BM"],
["2p_fallen_city"],
["2p_fata_morgana"],
["2p_quests_triumph"],
["2p_shrine_of_excellion"],
["2p_tranquilitys_end"],
["2p_deadly_fun_archeology"],
["2p_outer_reaches"],
["2p_sugaroasis"],
["2p_meeting_of_minds"],
["2p_battle_marshes"],
["2p_blood_river"]],
name = "Zikipchik decider"
rules = """ """
}
beercup{ beercup{
raceCount = 3 raceCount = 3
description = true description = true
@ -757,7 +1054,6 @@ deciders{
["2p_quests_triumph"], ["2p_quests_triumph"],
["2p_shrine_of_excellion_[Rem]"], ["2p_shrine_of_excellion_[Rem]"],
["2p_tranquilitys_end_[Rem]"], ["2p_tranquilitys_end_[Rem]"],
["2p_cryptek_arkana_BM"],
["2p_deadly_fun_archeology"], ["2p_deadly_fun_archeology"],
["2p_fraziersdemise"], ["2p_fraziersdemise"],
["2p_ancient_jungle_BM"], ["2p_ancient_jungle_BM"],
@ -766,7 +1062,6 @@ deciders{
["2p_blood_river_[Rem]"], ["2p_blood_river_[Rem]"],
["2p_fata_morgana_[Rem]"], ["2p_fata_morgana_[Rem]"],
["2p_meeting_of_minds"], ["2p_meeting_of_minds"],
["2p_velvet_duress"],
["2p_outer_reaches"], ["2p_outer_reaches"],
["2p_bloody_hell_[Ed]"]] ["2p_bloody_hell_[Ed]"]]
name = "Beer Cup" name = "Beer Cup"
@ -791,6 +1086,20 @@ deciders{
name = "Frenetic map pool" name = "Frenetic map pool"
rules = """ """ rules = """ """
} }
freneticmappool3x3{
maps = [["6p_paynes_retribution"],
["6p_fury_island"],
["6p_principian_badlands_BM", "Карта с баланс мода"],
["6p_trivian_groves_BM", "Карта с баланс мода"],
["6p_confrontation"],
["6p_constellation"],
["6p_snowblind"],
["6p_agamar_desert"],
["6p_platform"]]
raceCount = 3
name = "Frenetic mappool 3x3"
rules = """Frenetic mappool 3x3"""
}
deadgamecup{ deadgamecup{
raceCount = 2 raceCount = 2
description = true description = true
@ -868,7 +1177,7 @@ deciders{
["2p_consecrated_gardens_5p_BM"], ["2p_consecrated_gardens_5p_BM"],
["2p_titan_fall_[Rem]"], ["2p_titan_fall_[Rem]"],
["2p_sugaroasis"], ["2p_sugaroasis"],
["2p_shrine_of_excellion_[Rem]"], ["2p_gavrix_imperial_ale"],
["2p_deadly_fun_archeology"], ["2p_deadly_fun_archeology"],
["2p_fallen_city"], ["2p_fallen_city"],
["2p_meeting_of_minds"], ["2p_meeting_of_minds"],
@ -1033,8 +1342,6 @@ deciders{
maps =[ maps =[
["4p_biffys_peril"], ["4p_biffys_peril"],
["4p_cold_war"], ["4p_cold_war"],
["4p_colosseum_of_deadman"],
["4p_gorhael_crater"],
["4p_imperial_area"], ["4p_imperial_area"],
["4p_tainted_soul"], ["4p_tainted_soul"],
["4p_saints_square"], ["4p_saints_square"],