NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name ConsulWar advanced script
// @namespace consulwar.ru
// @description add more filter/interface functionality
// @include consulwar.ru*
// @require https://code.jquery.com/jquery-1.12.4.js
// @require https://code.jquery.com/ui/1.12.1/jquery-ui.js
// @version 1.1.40
// @author ID69 (http://consulwar.ru/game/statistics/general/#ID69)
// @collaborator fusioneer
// @collaborator Eilandor
// @match https://consulwar.ru/
// @match https://consulwar.ru/game/*
// @license MIT
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_deleteValue
// @grant GM_xmlhttpRequest
// ==/UserScript==
/* RELEASE NOTES
1.1.40
+ цены с уровня на который улучшаемся
1.1.39
+ фикс цен для исследований
1.1.38
- убрана раскраска планет по секторам
- убрано отображение времени респавна
- убран фильтр планет в космосе
1.1.37
+ расчет цен возвращен
1.1.36
+ Скрипт загружается при заходе через главную consulwar.ru
1.1.35
+ цвета в фильтре планет поправлены
1.1.34
- убран расчет цен для зданий, теперь есть в игре
1.1.33
+ поправлен расчет цен для зданий
1.1.32
- убран устаревший функционал и ненужные вкладки
1.1.31
+ CWAS не пытается запуститься на неподходящих страницах
1.1.30
+ Поправлены рассчеты цен для зданий
1.1.29
+ Возвращена возможность искать только по своей галактике
1.1.28
+ Исправлено дублирование имён и утечка памяти в фильтрах
1.1.27
+ Поиск флотов с фильтром по общекосмосу
+ Выбор галактики в фильтрах из списка
1.1.26
+ Исключающий фильтр артефактов/планет
1.1.25
+ Фильтр общекосмос. fusioneer
1.1.24
+ Другая ширина обводки. автор Xorboo
1.1.23
+ Раскраска планет по секторах. Реализация: Eilandor
1.1.22
+ Строка для ленивого копировання в гугл таблицу
1.1.21
+ More planet statistics
1.1.20
+ fleet filter max value set to 7
1.1.19
+ container opener updated
1.1.18
+ возможность отображать весь сектор если есть хотя-бы одна планета
1.1.17
+ css error fixed
1.1.16
+ http заменен на https
1.1.15
+ рефакторинг и чистка
+ выпадающий список планет
1.1.14
+ улучшения интерфейса
+ фильтр планет по типу
1.1.13
+ скрипт открытия контейнеров
1.1.12
+ не показывать спрятаные планеты в списке
+ возможность начинать с текущего уровня
1.1.11
+ поиск флотов
1.1.10
+ работает с новыми исследованиями (немного ломает улучшения кораблей)
+ правильно работает с интервалами меньше 20, правильно считает все с 0 по 100 (спасибо @fusioneer)
1.1.9
+ убрано дублирование сектора+рукава и времени спавна
+ поправлено(теоретически) появление рассчета цены в турнире Колизея
+ добавлен расчёт цен для исследований
1.1.8
+ расчёт цен вместо описания
1.1.7
+ вывод сектора планеты в ее попапе
+ вывод времени респавна планеты в ее попапе
1.1.6
- расположение награды за бой
- возможность убрать фон
+ исправлены мелкие недоработки
1.1.4
+ фильтр планет в диалоге (проценты отображаються для первого из выбраных по списку)
1.1.3
+ возможность немного подправить отображение награды за бой
1.1.2
+ кнопка для ревертирования выбраных чекбоксов фильтра планет
1.1.0
+ добавлена возможность спрятать планету с 3 артефактами из списка выбраных
1.0.0
+ button to create links in chat
+ removing of background
*/
(function(){
'use strict';
console.log(' ================ start CWAS - ');
var page = new PageData();
var userOptions = initOptions();
userOptions.loadUserData(page.currentUser);
addNewCSSClasses();
makePropElements();
applyUserScriptChanges();
addButtonForCWAS();
initialSetupCWAS();
console.log(' ================ end CWAS - ');
function addButtonForCWAS(){
Template.main_menu.onRendered(function() {
var topRight = $(".main_menu");
topRight.append('<li><label id="cwas_prop-button" style="align-self: center;" for="cwas-modal-1">CWAS</label></li>');
$('label#cwas_prop-button').click(openProp);
});
}
function initialSetupCWAS(){
Template.main_menu.onRendered(function() {
});
}
function openProp(){
var $propDialog = $('#cwas-prop-gui-dialog');
$propDialog.find('#cwas-gui-addLinkMakerVal').prop('checked', userOptions.val('linkMaker'));
$propDialog.find('#cwas-gui-addPriceCalculatorVal').prop('checked', userOptions.val('priceCalculator'));
$propDialog.find('#cwas-gui-startInPriceCalculatorVal').prop('checked', userOptions.val('startInPriceCalculator'));
$propDialog.find('#cwas-gui-addHandAndSegmentVal').prop('checked', userOptions.val('handAmdSegment'));
$propDialog.find('#cwas-prop-gui-tabs').tabs({active: 0});
$propDialog.find('#cwas-prop-gui-tabs').tabs({selected: 0});
$propDialog.find('#cwas-prop-gui-tabs').tabs({focused: 0});
}
function makePropElements(){
$('body').append(`
<div id="cwas-prop-gui-dialog">
<input class="cwas-modal-state" id="cwas-modal-1" type="checkbox" />
<div class="cwas-modal">
<label class="cwas-modal__bg" for="cwas-modal-1"></label>
<div class="cwas-modal__inner">
<div class="cwas-prop-gui-contentTop">
<span style="color: #8B857B;font-weight: bold; line-height: 27px; padding-left: 8px;">
CWAS - Consul War Advanced Script
</span>
<label class="cwas-modal__close" for="cwas-modal-1"></label>
</div>
<div class="cwas-prop-gui-contentMain">
<div id="cwas-prop-gui-tabs" style="border: 0 none; position: initial;">
<ul class="cwas-tabs-nav">
<li id="cwas-tabs-nav-0"><a href="#cwas-prop-gui-tab-1"></a></li>
<li id="cwas-tabs-nav-1"><a href="#cwas-prop-gui-tab-2"></a></li>
</ul>
<div id="cwas-prop-gui-tab-1" class="cwas-tabs-panel">
<div class="cwas-tabs-panel-content">
<section class="cwas-prop-gui-section">
<input id="cwas-gui-addLinkMakerVal" type="checkbox" style="vertical-align: middle;"/>
<label id="cwas-gui-addLinkMakerCaption" for="cwas-gui-addLinkMakerVal" style="cursor: pointer;vertical-align: middle;"></label>
</section>
<section class="cwas-prop-gui-section">
<input id="cwas-gui-addPriceCalculatorVal" type="checkbox" style="vertical-align: middle;"/>
<label id="cwas-gui-addPriceCalculatorCaption" for="cwas-gui-addPriceCalculatorVal" style="cursor: pointer;vertical-align: middle;"></label>
<input id="cwas-gui-startInPriceCalculatorVal" type="checkbox" style="vertical-align: middle;"/>
<label id="cwas-gui-startInPriceCalculatorCaption" for="cwas-gui-startInPriceCalculatorVal" style="cursor: pointer;vertical-align: middle;"></label>
</section>
</div>
</div>
<div id="cwas-prop-gui-tab-2" class="cwas-tabs-panel">
<div class="cwas-tabs-panel-content">
<section class="cwas-prop-gui-section">
<input id="cwas-gui-createPlanetFilterDialog" style="padding-left: 20px;
padding-right: 20px; height: 30px;" class="ui-button ui-corner-all" value="Planet Filter" type="button">
</section>
<hr>
<section class="cwas-prop-gui-section">
<input id="cwas-gui-addHandAndSegmentVal" type="checkbox" style="vertical-align: middle;"/>
<label id="cwas-gui-addHandAndSegmentCaption" for="cwas-gui-addHandAndSegmentVal" style="cursor: pointer;vertical-align: middle;"></label>
</section>
<hr>
<section class="cwas-prop-gui-section">
<input id="cwas-gui-createFleetFilterDialog" style="padding-left: 20px;
padding-right: 20px; height: 30px;" class="ui-button ui-corner-all" value="Fleet Filter" type="button">
</section>
<hr>
<section class="cwas-prop-gui-section">
<input id="cwas-gui-createPlanetTypeFilterDialog" style="padding-left: 20px;
padding-right: 20px; height: 30px;" class="ui-button ui-corner-all" value="Planet Type Filter" type="button">
</section>
</div>
</div>
</div>
</div>
<div id="cwas-prop-gui-bottomCcontent" class="cwas-prop-gui-contentBottom">
<input id="cwas-gui-SaveSettings" style="padding-left: 20px;
padding-right: 20px; height: 30px;" class="ui-button ui-corner-all cwas-prop-gui-button-right" value="Save" type="button">
</div>
</div>
</div>
</div>
`);
$('body').append(`
<div id="cwas-dialog-linkMaker" title="Добавить ссылку в сообщение" style="display:none;">
<div style="margin-bottom: 20px;">
<label for="cwas-dialog-linkURI">Адрес ссылки</label>
<input id="cwas-dialog-linkURI" class="text ui-widget-content ui-corner-all cwas-input-toRight" type="textarea">
</div>
<div style="margin-bottom: 20px;">
<label for="cwas-dialog-linkText">Отображаемый текст</label>
<input id="cwas-dialog-linkText" class="text ui-widget-content ui-corner-all cwas-input-toRight" type="textarea">
</div>
<div>
<input id="cwas-dialog-addLinkToMessage" class="ui-button ui-corner-all cwas-input-toRight" value="Add" type="button">
</div>
</div>
`);
var $propDialog = $('#cwas-prop-gui-dialog');
$propDialog.find('[id*=cwas-tabs-nav-]').click(function(){
$propDialog.find('#cwas-prop-gui-tabs').tabs({active: $(this).attr('id').replace('cwas-tabs-nav-', '')});
});
makeServiceGUIButton();
updateGuiLocalize();
}
function updateGuiLocalize(){
var $propDialog = $('#cwas-prop-gui-dialog');
$propDialog.find('#cwas-gui-addLinkMakerCaption').text(userOptions.getGuiDesc('linkMaker'));
$propDialog.find('#cwas-gui-addPriceCalculatorCaption').text(userOptions.getGuiDesc('priceCalculator'));
$propDialog.find('#cwas-gui-startInPriceCalculatorCaption').text(userOptions.getGuiDesc('startInPriceCalculator'));
$propDialog.find('#cwas-gui-addHandAndSegmentCaption').text(userOptions.getGuiDesc('handAmdSegment'));
$propDialog.find('#cwas-tabs-nav-0>a').text(userOptions.getGuiDesc('cwasTabsNav0'));
$propDialog.find('#cwas-tabs-nav-1>a').text(userOptions.getGuiDesc('cwasTabsNav1'));
}
function makeServiceGUIButton(){
var $propDialog = $('#cwas-prop-gui-dialog');
$propDialog.find('#cwas-gui-SaveSettings').click(function(){
var $propDialog = $('#cwas-prop-gui-dialog');
userOptions.val('linkMaker', $propDialog.find('#cwas-gui-addLinkMakerVal').prop('checked'));
userOptions.val('priceCalculator', $propDialog.find('#cwas-gui-addPriceCalculatorVal').prop('checked'));
userOptions.val('startInPriceCalculator', $propDialog.find('#cwas-gui-startInPriceCalculatorVal').prop('checked'));
userOptions.val('handAmdSegment', $propDialog.find('#cwas-gui-addHandAndSegmentVal').prop('checked'));
updateGuiLocalize();
userOptions.saveUserData(page.currentUser);
closeSettingDialog();
applyUserScriptChanges();
});
$propDialog.find('#cwas-gui-createPlanetFilterDialog').click(function(){
createPlanetFilterDialog();
});
$propDialog.find('#cwas-gui-createFleetFilterDialog').click(function(){
createFleetFilterDialog();
});
$propDialog.find('#cwas-gui-createPlanetTypeFilterDialog').click(function(){
createPlanetTypeFilterDialog();
});
}
function newCssClass(cssClass){
var head = document.head || document.getElementsByTagName('head')[0];
var style = document.createElement('style');
style.type = 'text/css';
if(style.styleSheet){
style.styleSheet.cssText = cssClass;
}else{
style.appendChild(document.createTextNode(cssClass));
}
head.appendChild(style);
}
function closeSettingDialog(){
$('#cwas-prop-gui-dialog').find('label.cwas-modal__close').click();
}
function applyUserScriptChanges(){
if (userOptions.val('linkMaker')) {
addLinkMaker();
}
if (userOptions.val('priceCalculator')) {
addPriceCalculator();
}
if (userOptions.val('handAmdSegment')) {
addHandAndSegment();
}
}
function addLinkMaker(){
Template.chat.onRendered(function() {
var messageBlock = $("#message");
messageBlock.append(`
<div style='display: inline-block'>
<i id="cwas-gui-openLinkMakerTooltip" type="button" class="cwas-button-link fa fa-link fa-3x" aria-hidden="true"></i>
</div>`);
$("#cwas-gui-openLinkMakerTooltip").click(function(){
$("#cwas-dialog-linkMaker").dialog({
width: 400,
height:170,
dialogClass:'cwas-dialog-overlayed'
});
});
$("#cwas-dialog-addLinkToMessage").click(function(){
var linkVal = $("#cwas-dialog-linkURI").val();
var textVal = $("#cwas-dialog-linkText").val();
var currentText = $("#message textarea").val();
$("#message textarea").val(currentText + '<a href="' + linkVal + '">' + textVal + "</a>");
$("#cwas-dialog-linkURI").val("");
$("#cwas-dialog-linkText").val("");
$("#cwas-dialog-linkMaker").dialog("close");
});
});
}
function addPriceCalculator(){
Template.BuildBuilding.onRendered(function() {
var building = this.component.building;
var description =$(".cw--BuildBuilding__info");
createCalculationInterface(building,description);
});
Template.BuildResearch.onRendered(function() {
var research = this.component.research;
var description = $(".cw--BuildResearch__info");
createCalculationInterface(research,description);
});
}
function createCalculationInterface(item, container) {
var width = container.width();
container.children().remove();
container.width(width);
createPriceCalculationUi(container);
createCalculationForItem(item);
}
function createCalculationForItem(item) {
if(userOptions.val('startInPriceCalculator')){
var startLevel = $('#cwas-price-calculator-startLvl');
startLevel.val(item.getLevel());
if(item.getQueue() != undefined){
startLevel.val(item.getQueue().level);
}
}
$("#cwas-price-calculator-calculate").click(function(){
var startLvl = parseInt($("#cwas-price-calculator-startLvl").val());
var endLvl = parseInt($("#cwas-price-calculator-endLvl").val());
var results = $("#cwas-price-calculator-results");
results.children().remove();
var basePrice = item.getBasePrice({fromLevel: startLvl, level: endLvl});
var resourceDict = item.applyPriceEffects({
price: basePrice,
});
for (var r in resourceDict) {
if (r !== 'time') {
results.append(createResourceSection(r, resourceDict[r]));
}
}
results.append(createResourceSection('time', formatTimeFromSeconds(resourceDict.time)));
});
}
function createPriceCalculationUi(parent) {
parent.append(`
<div id="cwas-price-calculator-container">
<div id="cwas-price-calculator-controls">
<label for="cwas-price-calculator-startLvl" style="cursor: pointer;vertical-align: middle;">От</label>
<input id="cwas-price-calculator-startLvl" type="number" value="0">
<label for="cwas-price-calculator-endLvl" style="cursor: pointer;vertical-align: middle;">До</label>
<input id="cwas-price-calculator-endLvl" type="number" value="100">
<input id="cwas-price-calculator-calculate" style="padding-left: 20px;
padding-right: 20px; height: 30px;" class="ui-button ui-corner-all" type="button" value="Расчитать">
</div>
<ul id="cwas-price-calculator-results" class="cwas-prop-gui-artefactNamesSection">
</ul>
</div>
`);
}
function createResourceSection(name, value) {
return '<li style="display: block; padding-left: 5px; padding-right: 5px;margin-bottom: 10px;">' + name + " = " + value + " \n" + '</li>';
}
function formatTimeFromSeconds(sec_num) {
var hours = Math.floor(sec_num / 3600);
var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
var seconds = sec_num - (hours * 3600) - (minutes * 60);
if (hours < 10) {
hours = "0" + hours;
}
if (minutes < 10) {
minutes = "0" + minutes;
}
if (seconds < 10) {
seconds = "0" + seconds;
}
return hours + ':' + minutes + ':' + seconds;
}
function addHandAndSegment() {
Template.cosmosPlanetPopup.onRendered(function() {
if (!$("#cwas-additional-hand-segment").length) {
$(".map-planet-popup h2")
.first()
.append("<span id='cwas-additional-hand-segment'>[" + this.data.planet.hand + ":" + this.data.planet.segment + "]</span>");
}
});
}
function createPlanetFilterDialog() {
if (!($("#cwas-dialog-filter-planetFilter").length)) {
var usernames = {[Meteor.user().username]: true};
var refreshUsers = function () {
var usernamesArray = [];
for (var username in usernames)
usernamesArray.push(username);
var planets = Game.Planets.Collection.find({username: {$nin: usernamesArray}}).fetch();
var usernamesNew = {};
var userSelectElement = $("#cwas-prop-gui-filter-planetFilter-username")[0];
if (userSelectElement.options.length <= 1)
usernamesNew[Meteor.user().username] = true;
for (var k in planets) {
var username = planets[k].username;
usernames[username] = true;
usernamesNew[username] = true;
}
for (var username in usernamesNew) {
var optionNode = document.createElement('option');
optionNode.setAttribute('value', username);
optionNode.innerText = username;
userSelectElement.appendChild(optionNode);
}
};
$('body').append(`
<div id="cwas-dialog-filter-planetFilter" title="По артефактам">
<ul id="cwas-prop-gui-filter-filterPlanetByArtefactSection" class="cwas-prop-gui-artefactNamesSection"></ul>
<div>Галактика <select id="cwas-prop-gui-filter-planetFilter-username"><option value="">Все открытые</option></select></div>
<div>
<input id="cwas-dialog-filter-hideCheckboxes" class="ui-button ui-corner-all" value="Hide" type="button">
<input id="cwas-dialog-filter-findPlanetsWithArtefacts" class="ui-button ui-corner-all cwas-input-toRight" value="Print Planets" type="button">
</div>
<ul id="cwas-prop-gui-filter-resultPlanets" class="cwas-prop-gui-artefactNamesSection"></ul>
<div id="cwas-dialog-filter-planetFilterAdditional"></div>
</div>
`);
var artefactNamesList = $("#cwas-prop-gui-filter-filterPlanetByArtefactSection");
var artefactItems = Game.Artefacts.items;
for (var k in artefactItems) {
artefactNamesList.append(createArtefactLiItem(artefactItems[k], "filter_", true));
};
$('[id^="cwas-artefact_filter_"]').click(function(event) {
if (this.checked) {
$('#cwas-artefact_unneeded_filter_' + this.value)[0].checked = false;
}
});
$('[id^="cwas-artefact_unneeded_filter_"]').click(function(event) {
if (this.checked) {
$('#cwas-artefact_filter_' + this.value)[0].checked = false;
}
});
refreshUsers();
$("#cwas-prop-gui-filter-planetFilter-username").click(function() {
refreshUsers();
});
$("#cwas-dialog-filter-hideCheckboxes").click(function() {
var ulOfArtefacts = $("#cwas-prop-gui-filter-filterPlanetByArtefactSection");
if (ulOfArtefacts.is(":visible")) {
ulOfArtefacts.hide();
} else {
ulOfArtefacts.show();
};
});
$("#cwas-dialog-filter-findPlanetsWithArtefacts").click(function() {
$("#cwas-prop-gui-filter-resultPlanets").children().remove();
$("#cwas-dialog-filter-planetFilterAdditional").empty();
var selectedArtefacts = [];
var unneededArtefacts = [];
var planets = [];
$('#cwas-prop-gui-filter-filterPlanetByArtefactSection>li input[id^="cwas-artefact_filter_"]:checked').each(function(index) {
selectedArtefacts.push($(this).val());
});
$('#cwas-prop-gui-filter-filterPlanetByArtefactSection>li input[id^="cwas-artefact_unneeded_filter_"]:checked').each(function(index) {
unneededArtefacts.push($(this).val());
});
var query = {};
var userName = $("#cwas-prop-gui-filter-planetFilter-username").val();
if (userName.length) {
query.username = userName;
}
for (var k in selectedArtefacts) {
query["artefacts." + selectedArtefacts[k]] = { $gt: 0 };
}
for (var k in unneededArtefacts) {
query["artefacts." + unneededArtefacts[k]] = { $eq: null };
}
if (selectedArtefacts.length) {
planets = Game.Planets.Collection.find(query).fetch();
};
planets.sort(compare(selectedArtefacts[0]));
var totalPercentChance = 0;
for (var i = planets.length - 1; i >= 0; i--) {
var chanceInPercent = planets[i].artefacts[selectedArtefacts[0]];
$("#cwas-prop-gui-filter-resultPlanets")
.append(getLinkToPlanet(planets[i], chanceInPercent + '%'));
totalPercentChance+=chanceInPercent;
}
var additionalInfoBlock = $("#cwas-dialog-filter-planetFilterAdditional");
additionalInfoBlock.append("Общий шанс: " + Number(Math.round(totalPercentChance+'e2')+'e-2') + "</br>");
additionalInfoBlock.append("Количество планет: " + planets.length+ "</br>");
additionalInfoBlock.append("Среднее: " + Number(Math.round((totalPercentChance / planets.length)+'e2')+'e-2')+ "</br>");
var preparedText = Number(Math.round(totalPercentChance+'e2')+'e-2') +"\t"
+ planets.length +"\t"
+ Number(Math.round((totalPercentChance / planets.length)+'e2')+'e-2');
additionalInfoBlock.append("Formatted: " + preparedText.replace(/\./g,","));
});
};
$("#cwas-prop-gui-filter-filterPlanetByArtefactSection").show();
$("#cwas-dialog-filter-planetFilter").dialog({
width: 775,
height: 300,
dialogClass: 'cwas-dialog-overlayed'
});
closeSettingDialog();
}
function createFleetFilterDialog() {
if (!($("#cwas-dialog-filter-fleetFilter").length)) {
var usernames = {[Meteor.user().username]: true};
var refreshUsers = function () {
var usernamesArray = [];
for (var username in usernames)
usernamesArray.push(username);
var planets = Game.Planets.Collection.find({username: {$nin: usernamesArray}}).fetch();
var usernamesNew = {};
var userSelectElement = $("#cwas-prop-gui-filter-fleetFilter-username")[0];
if (userSelectElement.options.length <= 1)
usernamesNew[Meteor.user().username] = true;
for (var k in planets) {
var username = planets[k].username;
usernames[username] = true;
usernamesNew[username] = true;
}
for (var username in usernamesNew) {
var optionNode = document.createElement('option');
optionNode.setAttribute('value', username);
optionNode.innerText = username;
userSelectElement.appendChild(optionNode);
}
};
$('body').append(`
<div id="cwas-dialog-filter-fleetFilter" title="Фильтр флотов">
<div>Галактика
<select id="cwas-prop-gui-filter-fleetFilter-username">
<option value="">Все открытые</option>
</select>
</div>
<div>
<select id="cwas-prop-gui-filter-filterFleets">
<option value="patrolfleet">Патруль</option>
<option value="defencefleet">Ряды обороны</option>
<option value="battlefleet">Боевой флот</option>
</select>
<input id="cwas-filter-fleetLvl" class="ui-corner-all" type="number" min="1" max="7" value="1">
</div>
<div>
<input id="cwas-dialog-filter-findPlanetsWithFleets" class="ui-button ui-corner-all" value="Print Fleets" type="button">
</div>
<ul id="cwas-prop-gui-filter-resultFleets" class="cwas-prop-gui-fleetsNamesSection"></ul>
</div>
`);
refreshUsers();
$("#cwas-prop-gui-filter-fleetFilter-username").click(function() {
refreshUsers();
});
$("#cwas-dialog-filter-findPlanetsWithFleets").click(function() {
$("#cwas-prop-gui-filter-resultFleets").children().remove();
var missionType = $("#cwas-prop-gui-filter-filterFleets").val();
var missionLvl = parseInt($("#cwas-filter-fleetLvl").val(), 10);
var query = {};
var userName = $("#cwas-prop-gui-filter-fleetFilter-username").val();
if (userName.length) {
query.username = userName;
}
var allPlanets = Game.Planets.Collection.find(query).fetch();
var planets = allPlanets;
planets = filterFleets(planets, missionType, missionLvl);
planets.sort(function compare(a, b) {
if (a.hand > b.hand) return -1;
if (a.hand < b.hand) return 1;
return 0;
});
for (var i = planets.length - 1; i >= 0; i--) {
$("#cwas-prop-gui-filter-resultFleets")
.append(getLinkToPlanet(planets[i]));
}
});
};
$("#cwas-dialog-filter-fleetFilter").dialog({
width: 180,
height: 400,
position: { my: "right bottom", at: "right-10 bottom-10" },
dialogClass: 'cwas-dialog-overlayed'
});
closeSettingDialog();
}
function createPlanetTypeFilterDialog() {
if (!($("#cwas-dialog-filter-planetTypeFilter").length)) {
$('body').append(`
<div id="cwas-dialog-filter-planetTypeFilter" title="По типу">
<div>
<select id="cwas-prop-gui-filter-planetType">
</select>
</div>
<div>
<input id="cwas-dialog-filter-findPlanetsWithType" class="ui-button ui-corner-all" value="Print Planets" type="button">
</div>
<ul id="cwas-prop-gui-filter-resultPlanetsWithType" class="cwas-prop-gui-fleetsNamesSection"></ul>
<div id="cwas-dialog-filter-resultPlanetsWithTypeAdditional"></div>
</div>
`);
var planetTypes = Game.Planets.types;
var planetTypesKeys = Object.keys(Game.Planets.types);
var planetTypeSelect = $('#cwas-prop-gui-filter-planetType');
for (var i = planetTypesKeys.length - 1; i >= 0; i--) {
var planetTypeEngName = planetTypesKeys[i];
planetTypeSelect.append('<option value="' + planetTypeEngName +'">' + planetTypes[planetTypeEngName].name + '</option>');
}
planetTypeSelect.val('terran');
};
$("#cwas-dialog-filter-findPlanetsWithType").click(function() {
$("#cwas-prop-gui-filter-resultPlanetsWithType").children().remove();
$("#cwas-dialog-filter-resultPlanetsWithTypeAdditional").empty();
var planetType = $("#cwas-prop-gui-filter-planetType").val();
var planets = Game.Planets.getAll().fetch();
planets = filterPlanetsWithType(planets, planetType);
planets.sort(function compare(a, b) {
if (a.hand > b.hand) return -1;
if (a.hand < b.hand) return 1;
return 0;
});
for (var i = planets.length - 1; i >= 0; i--) {
$("#cwas-prop-gui-filter-resultPlanetsWithType")
.append(getLinkToPlanet(planets[i]));
}
var additionalInfoBlock = $("#cwas-dialog-filter-resultPlanetsWithTypeAdditional");
additionalInfoBlock.append("Количество планет: " + planets.length);
});
$("#cwas-dialog-filter-planetTypeFilter").dialog({
width: 180,
height: 400,
position: { my: "right bottom", at: "right-10 bottom-10" },
dialogClass: 'cwas-dialog-overlayed'
});
closeSettingDialog();
}
function filterFleets(arr, type, lvl) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i]["mission"] != null) {
var mission = arr[i]["mission"];
if (mission["type"] === type && mission["level"] === lvl) {
result.push(arr[i]);
}
};
}
return result;
};
function filterPlanetsWithType(arr, type) {
var result = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i]["type"] != null) {
var planetType = arr[i]["type"];
if (planetType === type) {
result.push(arr[i]);
}
};
}
return result;
};
function getLinkToPlanet(planet, additionalInfo) {
var color = getPlanetColor(planet);
if (additionalInfo === undefined) {
additionalInfo = "";
}
return '<li style="display: inline-block;">' + '<a style="-webkit-filter: grayscale(0%);' + color + '" href="/game/cosmos#'
+ planet._id + '">' + planet.name + " "
+ additionalInfo
+ ' [' + planet.hand + '|' + planet.segment + ']</a></li>';
};
function getPlanetColor(planet) {
var color = "";
if (planet.status === Game.Planets.STATUS.HUMANS) {
color = "color: #56BAF2;";
var minerUsername = planet.minerUsername;
if (Game.Alliance.Collection.findOne().participants.includes(minerUsername)){
color = "color: #D36FFF;";
}
if(minerUsername === Meteor.user().username){
color = "color: #c6e84c;";
}
}
if (planet.status === Game.Planets.STATUS.REPTILES) {
color = "color: #dc6257;";
}
return color;
};
function compare(aN) {
return function(a, b) {
if (a.artefacts[aN] < b.artefacts[aN]) return -1;
if (a.artefacts[aN] > b.artefacts[aN]) return 1;
return 0;
};
}
function intersectSafe(a, b) {
var result = [];
for (var i = 0; i < a.length; i++) {
for (var j = 0; j < b.length; j++) {
if (a[i]["_id"] === b[j]["_id"]) {
result.push(a[i]);
}
}
}
return result;
}
function createArtefactLiItem(artefactItem, artefactIdPrefix, unneeded){
var liItem =
'<li>'+
'<input type="checkbox" value="'+artefactItem.engName+'" id="cwas-artefact_'+artefactIdPrefix+artefactItem.engName+'"' + (unneeded ? ' title="обязателен"' : '') + '>'+
(unneeded ? '<input type="checkbox" value="'+artefactItem.engName+'" id="cwas-artefact_unneeded_'+artefactIdPrefix+artefactItem.engName+'" title="должен отсутствовать">' : '')+
'<label for="cwas-artefact_'+artefactIdPrefix+artefactItem.engName+'" class="' + artefactItem.color + '">'+
artefactItem.name+
'</label>'+
'</li>';
return liItem;
}
function PageData(){
this.currentUser = 'Anonymous';
}
function initOptions(){
var retVal = {
data: {
linkMaker: {
dt: null,
guiDesc: function(){
return 'Добавить кнопку создания линков в чат';
}
},
priceCalculator: {
dt: null,
guiDesc: function(){
return 'Добавить возможность расчёта цен вместо описания';
}
},
startInPriceCalculator: {
dt: null,
guiDesc: function(){
return 'Начинать с текущего';
}
},
handAmdSegment: {
dt: null,
guiDesc: function(){
return 'Добавить рукав и сектор в попап планет';
}
},
cwasTabsNav0: {
guiDesc: function(){
return 'Основные настройки';
}
},
cwasTabsNav1: {
guiDesc: function(){
return 'Космос';
}
},
collapseCommentWhenSize: {
dt: null,
validator: function(val){
return $.isNumeric(val) && val >= 20 && val <= 10000;
},
guiDesc: function(){
return lng.getVal('JRAS_GUI_COLLAPSECOMMENTWHENSIZE');
}
},
},
val: function(option, value){
if(this.data[option]){
if(value === undefined){
return this.data[option].dt;
}else{
if (this.data[option]['validator']){
if (this.data[option].validator(value)){
this.data[option].dt = value;
}
}else{
this.data[option].dt = value;
}
}
}
},
getGuiDesc: function(option){
return this.data[option].guiDesc();
},
setDef: function(){
this.data.linkMaker.dt = false;
this.data.priceCalculator.dt = false;
this.data.startInPriceCalculator.dt = false;
this.data.handAmdSegment.dt = false;
this.data.collapseCommentWhenSize.dt = 110;
},
removeAllSavedData: function(){
this.removeSavedUserData();
},
removeSavedUserData: function(user){
var pref = (user === undefined) ? '' : user + '_';
var keys = GM_listValues();
for(var i = 0; i < keys.length; i++){
var key = keys[i];
if(!key.match(new RegExp(pref + '.*'))){
continue;
}
GM_deleteValue(key);
}
},
saveUserData: function(forUser){
var i;
this.removeSavedUserData(forUser);
var pref = forUser + '_';
for(i in this.data){
if(i == 'BlockTags'){
continue;
}
GM_setValue(pref + i, this.data[i].dt);
}
for(i = 0; i < this.data.BlockTags.length; i++){
GM_setValue(pref + 'BlockTags_name_' + i, this.data.BlockTags[i]);
}
},
loadUserDataFrom: function(prefix){
var retVal = false;
var posf = '.*';
var keys = GM_listValues();
this.data.BlockUsers = [];
this.data.BlockTags = [];
for(var i = 0; i < keys.length; i++){
var key = keys[i];
if(!key.match(new RegExp(prefix + posf))){
continue;
}
if(key.match(new RegExp(prefix + 'BlockTags_name_' + posf))){
this.data.BlockTags.push(GM_getValue(key, ''));
}else{
var rkey = key.replace(prefix, '');
if(this.data[rkey] === undefined){
continue;
}
this.data[rkey].dt = GM_getValue(key, this.data[rkey]);
retVal = true;
}
}
this.data.BlockUsers.sort();
this.data.BlockTags.sort();
return retVal;
},
loadUserData: function(forUser){
if(this.loadUserDataFrom(forUser + '_')){
return;
}
if(this.loadUserDataFrom(forUser)){
this.saveUserData(forUser);
}
}
};
retVal.setDef();
return retVal;
}
function addNewCSSClasses(){
$("head").append (`
<link href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/vader/jquery-ui.min.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css">
`);
newCssClass(`
.cwas-user-awards img {
width: 16px;
height: 16px;
}
.cwas-user-awards-slice img {
height: 16px;
padding-left: 3px;
}
.cwas-tooltip-button:hover span, .cwas-tooltip-button:hover i {
color: #CC9622;
opacity: 1;
}
.cwas-tooltip-button-img {
vertical-align: middle;
width: 16px;
height: 16px;
display: inline-block;
opacity: 0.7;
}
.cwas-tooltip-button-text {
padding-left: 4px;
font-size: 10px;
vertical-align: middle;
display: inline-block;
line-height: 10px;
}
.cwas-tooltip-section-topborder {
margin-top: 4px;
border-top: 1px solid rgb(85, 85, 85);
padding-top: 3px;
}
.cwas-gui-btn-newdesign {
border-radius: 3px;
padding-left: 3px;
padding-right: 3px;
width: 24px;
height: 22px;
}
.cwas-tooltip-user-awards-hide-btn-close{
position: relative;
box-shadow: 0 -4px 8px 0 rgb(0, 0, 0);
margin-bottom: -6px;
}
.cwas-tooltip-user-awards-hide-btn{
background-color: rgb(80, 80, 80);
height: 5px;
width: 105%;
margin-left: -5px;
top: -4px;
border-radius: 0 0 10px 10px;
}
.cwas-tooltip-user-awards-hide-btn:hover{
background-color: rgb(0, 135, 21);
}
.cwas-prop-gui-content, .cwas-prop-gui-contentTop, .cwas-prop-gui-contentBottom{
background-color: #2F2E2E;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 30px;
overflow: hidden;
}
.cwas-prop-gui-contentTop{
margin-bottom: 5px;
}
.cwas-prop-gui-contentBottom{
top: auto;
bottom: 0;
height: 35px;
overflow: hidden;
margin-top: 5px;
}
.cwas-prop-gui-contentMain{
position: absolute;
top: 30px;
left: 0;
right: 0;
bottom: 30px;
overflow: auto;
background-color: #262626;
}
.cwas-prop-gui-section{
margin-top: 5px;
margin-bottom: 14px;
}
.cwas-prop-gui-button-right{
padding-left: 20px;
right: 0px;
padding-right: 20px;
margin-right: 5px;
position: absolute;
margin-top: 4px;
height: 22px;
}
.cwas-prop-gui-button-left{
left: 0px;
margin-left: 5px;
margin-top: 4px;
cursor: pointer;
}
.cwas-tabs-panel-content {
padding: 6px 10px;
background: gray;
}
#cwas-prop-gui-dialog{
border: 0;
width: 100%;
}
.cwas-prop-gui-artefactNamesSection{
column-count: 3;
}
.cwas-prop-gui-artefactNamesSection>li{
list-style-type:none;
}
.cwas-prop-gui-fleetsNamesSection{
column-count: 1;
}
.cwas-prop-gui-fleetsNamesSection>li{
list-style-type:none;
}
#cwas-prop-gui-dialog .cwas-tabs-nav{
margin-left: 6px;
margin-top: 6px;
float: left;
width: 25%;
border: 0;
background: none;
}
#cwas-prop-gui-dialog .cwas-tabs-nav li{
height: 45px;
clear: left;
width: 90%;
margin: 0 0 5px 0;
background: #2d2d2d none repeat scroll 0 0;
border: 0 none;
padding: 0 0 3px 5px;
font-weight: normal;
border-radius: 3px;
}
#cwas-prop-gui-dialog .cwas-tabs-nav li.ui-tabs-active{
background-color: #3e7a35;
}
#cwas-prop-gui-dialog .cwas-tabs-nav li.ui-state-focus{
background-color: #2b5326;
}
#cwas-prop-gui-dialog .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited{
line-height: 30px;
color: #818181;
text-decoration: none;
}
#cwas-prop-gui-dialog .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited{
color: #d4d4d4;
font-weight: bold;
text-decoration: none;
line-height: 30px;
}
#cwas-prop-gui-dialog .cwas-tabs-panel{
box-shadow: -1px 0 20px 0 #000000;
border: 0;
left: 25%;
height: 100%;
overflow: auto;
position: absolute;
float: right;
right: 0;
}
.cwas-button-link{
padding: 5px;
margin-top: 3px;
background-color: gray;
}
/* Окно настроек */
.cwas-modal {
z-index: 1000;
opacity: 0;
visibility: hidden;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
text-align: left;
background: rgba(0,0,0, .9);
transition: opacity .25s ease;
}
.cwas-modal__bg {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
cursor: pointer;
}
.cwas-modal-state {
display: none;
}
.cwas-modal-state:checked + .cwas-modal {
opacity: 1;
visibility: visible;
}
.cwas-modal-state:checked + .cwas-modal .cwas-modal__inner {
top: 0;
}
.cwas-modal__inner {
transition: top .25s ease;
position: absolute;
top: -20%;
width: 55%;
margin-left: 42%;
margin-top: 20px;
overflow: auto;
background: #fff;
border-radius: 5px;
height: 55%;
}
.cwas-modal__close {
position: absolute;
right: 8px;
top: 8px;
width: 1.1em;
height: 1.1em;
cursor: pointer;
}
.cwas-modal__close:after,
.cwas-modal__close:before {
content: "";
position: absolute;
width: 2px;
height: 1.5em;
background: #ccc;
display: block;
transform: rotate(45deg);
left: 50%;
margin: -3px 0 0 -1px;
top: 0;
}
.cwas-modal__close:hover:after,
.cwas-modal__close:hover:before {
background: #aaa;
}
.cwas-modal__close:before {
transform: rotate(-45deg);
}
.cwas-dialog-overlayed{
z-index: 1000;
}
.cwas-input-toRight{
right: 0;
position: absolute;
}
@media screen and (max-width: 768px) {
.cwas-modal__inner {
width: 93%;
height: 93%;
margin-left: 3%;
box-sizing: border-box;
}
}
@media screen and (max-height: 600px) {
.cwas-modal__inner {
height: 75%;
box-sizing: border-box;
}
}
@media screen and (max-height: 400px) {
.cwas-modal__inner {
height: 91%;
box-sizing: border-box;
}
}
`);
}
}());