CatWarScript / CatWar Script

// ==UserScript==
// @name         CatWar Script
// @version      0.1.99
// @description  Мод-скрипт для браузерной игры CatWar. Скоро у нас будет больше новых полезных функций!
// @author       Krivodushie & Psiii
// @copyright    2024 Дурное Сновидение (https://catwar.su/cat1293224) & Заря (https://catwar.su/cat590698)
// @license      MIT; https://opensource.org/licenses/MIT
// @updateURL    https://openuserjs.org/meta/CatWarScript/CatWar_Script.meta.js
// @downloadURL  https://openuserjs.org/install/CatWarScript/CatWar_Script.user.js
// @match        *://catwar.su/*
// @grant        GM_xmlhttpRequest
// @grant        GM.xmlHttpRequest
// @grant        GM_addStyle
// @require      https://code.jquery.com/jquery-3.4.1.min.js
// @require      https://cdnjs.cloudflare.com/ajax/libs/jquery-scrollTo/2.1.3/jquery.scrollTo.min.js
// @require      https://code.jquery.com/ui/1.12.1/jquery-ui.js
// ==/UserScript==

const csDefaults = {
 // Шаблоны
     'textTemplates': true //               Шаблоны в ЛС
    ,'toggleTextTemplates': false //        Сворачивать ли шаблоны ЛС по умолчанию
    ,'replaceTemplateTheme': true //        Заменять ли тему сообщения названием шаблона?
 // ,'chatTextTemplates': true //           Шаблоны в ЧАТЕ
 // ,'toggleChatTextTemplates': true //     Сворачивать ли шаблоны ЧАТА по умолчанию
 // ,'bloglentTextTemplates': true //       Шаблоны в БЛОГОЛЕНТЕ
 // ,'toggleBloglentTextTemplates': true // Сворачивать ли шаблоны БЛОГОЛЕНТЫ по умолчанию
 // Часики
    ,'inGameClock': false //                Часы в игровой
    ,'isClockMoscow': true //               Московсике ли часы?
    ,'isDateShow': true //                  Показывать ли дату?
    ,'movableClocks': false //              Перетаскиваемые часы

 // Приколы с ЛС
    ,'dontReadenLS': false //               Непрочитанные ЛС для себя
    ,'timerForLS': false //                 Таймер до удаления ЛС

 // Дефекты
    ,'brightGameField': false //            Яркое поле игровой
    ,'customDefectDelay': false //          Подробная настройка отображения дефектов в Игровой
    ,'cstmDfctShowColors': false //         Показывать ли цветные клетки при дефектах?
    ,'cstmDfctShowRamki': false //          Выделять клетки рамкой при дефектах?
    ,'cstmDfctShowNum': true //             Показывать ли цифры и иконки при дефектах?
    ,'cstmDfctWounds': '#4646ff' //         Цвет ран по дефолту
    ,'cstmDfctBruise': '#46ffef' //         Цвет ушибов от падения
    ,'cstmDfctFractures': '#68ff46' //      Цвет переломов от утопленя
    ,'cstmDfctPoison': '#ff4646' //         Цвет отравления
    ,'cstmDfctCough': '#eeff46' //          Цвет кашля
    ,'cstmDfctDirt': '#9446ff' //           Цвет грязи
    ,'cstmDfctPodstilki': '#79553D' //      Цвет подстилок
    ,'cstmDfctOpacity': '0.25' //           Прозрачность отображения дефектов
    ,'cstmDfctShowHighDirt': false //       Показывать ли 3-4 стадии грязи?
    ,'cstmDfctShowLowDirt': false //        Показывать ли 1-2 стадии грязи?
    ,'cstmDfctShowDivers': false //         Показывать ныряющих
    ,'cstmDfctShowPodstilki': false //      Показывать podstilki
    ,'cstmDfctShow34WoundBetter': true //   Показывать ли 3-4 стадии ран сильнее?
    ,'cstmDfctShowAllBetter': false //      Показывать ли 3-4 стадии ВСЕГО сильнее?

 // Предметы
    ,'customItemsDelay': false //           Подробная настройка отображения предметов в Игровой
    ,'cstmItmHerbDelay': false //           Травы
    ,'cstmItmHerbClr': '#2bff75' //         Травы
    ,'cstmItmMossDelay': false //           Мох
    ,'cstmItmMossClr': '#2bff75' //         Мох
    ,'cstmItmWebDelay': false //            Паутина
    ,'cstmItmWebClr': '#2bff75' //          Паутина
    ,'cstmItmStickDelay': false //          STICKS
    ,'cstmItmStickClr': '#2bff75' //        STICKS
    ,'cstmItmDustDelay': false //           Звёздная пыль
    ,'cstmItmDustClr': '#c096e2' //         Звёздная пыль
    ,'cstmItmMusorDelay': false //          MUSOR
    ,'cstmItmMusorClr': '#ff2b2b' //        MUSOR
    ,'cstmItmOpacity': '0.25' //            Прозрачность отображения ресурсов

 // Иная суть
    ,'nightLagsWarning': true //            Предупреждение о ночных лагах чтобы не лезли в воды и вообще аккуратнее были
    ,'darkCatTooltip': false //             Тёмное окошко инфы о котах
    ,'boneCorrectTimer': false //           Таймер ношения костоправов
    ,'toggleBoneTimer': false //            Свёрнутый таймер
    ,'hideWoundWarning': true //            Скрыть варн о ранах везде кроме Игровой
    ,'cwscriptDarkTheme': false

 // Боережимовые прикольчики для самых маленьких
    ,'phoneFightPanel': false //            Переместить кнопочки боережима для телефонщиков
    ,'friendlyCatWar': false //             Удалить кнопки захода в опасные БР
    ,'deleteFPTitles': false //             Убрать тайтлы у кнопок боережима
    ,'showButterflyBots': false //          Показывать бота-бабочку для прокачки бу

 // Недоделанное
 // ,'hideInGameBlocks': false //           Скрывать в игровой при загрузке блоки:                     НЕТУ
 // ,'isHideHistory': false //              Скрывать ли историю?                                       НЕТУ
 // ,'isHideRelatives': false //            Скрывать ли РС?                                            НЕТУ
 // ,'isHideParameters': false //           Скрывать ли параметры/навыки?                              НЕТУ
 // ,'fieldHideButton': true //             Кнопочка "Скрыть поле" в ПК-версии игры                    НЕТУ
 // ,'scrollDownTime': false //             Время при прокрутке страницы вниз для ПК-версии игры       НЕТУ
 // ,'rllyImportantButton': true //         РЕАЛЬНО важная кнопка                                      НЕТУ

 // Палитра наших функций в игровой. Когда доделаем кастомизацию игровой нормально будет вообще имба
 // ,'sscrlClr1': '#776c5f' //              scrlClr1
 // ,'sscrlClr2': '#463E33' //              scrlClr2
 // ,'shrClr': '#463E3330' //               hrClr
 // ,'stxtClr1': '#C8C0BE' //               txtClr1
 // ,'stxtClr2': '#181510' //               txtClr2
 // ,'stxtClr3': '#fff' //                  txtClr3
 // ,'sbrdrClr1': '#BD7E5C' //              brdrClr1
 // ,'sbrdrClr2': '#ff0' //                 brdrClr2
 // ,'sbrdrClr3': '#000' //                 brdrClr3
 // ,'sbckgClr1': '#463E33' //              bckgClr1
 // ,'sbckgClr2': '#918474' //              bckgClr2
 // ,'sbckgClr3': '#333' //                 bckgClr3
 // ,'sbckgClr4': '#463E3350' //            bckgClr4
 // ,'selectedTheme1': 'CWScript светлая'

 // Палитра наших функций ВНЕ игровой
 // ,'s1scrlClr1': '#776c5f' //             scrlClr1
 // ,'s1scrlClr2': '#463E33' //             scrlClr2
 // ,'s1hrClr': '#463E3330' //              hrClr
 // ,'s1txtClr1': '#C8C0BE' //              txtClr1
 // ,'s1txtClr2': '#181510' //              txtClr2
 // ,'s1txtClr3': '#fff' //                 txtClr3
 // ,'s1brdrClr1': '#BD7E5C' //             brdrClr1
 // ,'s1brdrClr2': '#ff0' //                brdrClr2
 // ,'s1brdrClr3': '#000' //                brdrClr3
 // ,'s1bckgClr1': '#463E33' //             bckgClr1
 // ,'s1bckgClr2': '#918474' //             bckgClr2
 // ,'s1bckgClr3': '#333' //                bckgClr3
 // ,'s1bckgClr4': '#463E3350' //           bckgClr4
 // ,'selectedTheme2': 'CWScript светлая'
};

const globals = {}; //Настройки
for (var key in csDefaults) {
  let settings = getSettings(key);
  if (settings === null) {
    globals[key] = csDefaults[key];
  }
  else {
    if (Array.isArray(csDefaults[key])) {
      globals[key] = JSON.parse(settings);
    }
    else if (typeof csDefaults[key] === 'number') {
      globals[key] = parseFloat(settings);
    }
    else {
      globals[key] = settings;
    }
  }
}

function getSettings(key) { //Получить настройку
  let setting = 'cs_n_' + key;
  let val = window.localStorage.getItem(setting);
  switch (val) {
    case null:
      return null;
    case 'true':
      return true;
    case 'false':
      return false;
    default:
      return val;
  }
}

function setSettings(key, val) { // Задать настройку
  let setting = 'cs_n_' + key;
  window.localStorage.setItem(setting, String(val));
  globals[key] = val; // Записываем новое значение в globals
}

function removeSettings(key) { // Удалить настройку
  let setting = 'cs_n_' + key;
  window.localStorage.removeItem(setting);
}

function nightLagsWarning() {
  function showWarning() {
    let now = new Date();
    now.setHours(now.getUTCHours() + 3);
    let hours = now.getHours();
    let minutes = now.getMinutes();
    if ((hours === 2 && minutes >= 50) || (hours === 3) || (hours === 4 && minutes <= 10)) {
      if ($('#warning').length === 0) {
        let warningHtml = `<div id="warning" style="background: white; font-weight: bold; text-align: justify; padding: 2px 10px; position: fixed; z-index: 1;">
                          Настоятельно рекомендуем Вам покинуть локации для лазания и ныряния в промежутке с 03:00 до 04:00 по МСК. В случае продолжения нахождения на них не используйте горячие клавиши при перемещении между локациями, а также не нажимайте на переходы по несколько раз. Некоторый контент может находиться под данным уведомлением. <a id="hideWarning" href="#">Скрыть</a>
                          </div>`;
        $('body').prepend(warningHtml);
        $('#hideWarning').click(function() {
          $('#warning').remove();
        });
      }
    }
    else {
      $('#warning').remove();
    }
  }
  showWarning();
}

function appendToElementOrPrependFallback(primaryElement, secondaryElement, elementToAdd) {
  if ($(primaryElement).length) {
    $(primaryElement).append(elementToAdd);
  }
  else {
    $(secondaryElement).before(elementToAdd);
  }
}

function appendToElementOrFallback(primaryElement, secondaryElement, elementToAdd) {
  if ($(primaryElement).length) {
    $(primaryElement).append(elementToAdd);
  }
  else {
    $(secondaryElement).after(elementToAdd);
  }
}

const pageurl = window.location.href;
const isCW3 = (/^https:\/\/\w?\.?catwar.su\/cw3(?!(\/kns|\/jagd))/.test(pageurl));
const isSite = !(/^https:\/\/\w?\.?catwar.su\/cw3(\/kns|\/jagd)?.*/.test(pageurl));
const isDM = (/^https:\/\/\w?\.?catwar.su\/ls/.test(pageurl));
const isSett = (/^https:\/\/\w?\.?catwar.su\/settings/.test(pageurl));
const isMyCat = (/^https:\/\/\w?\.?catwar.su\/$/.test(pageurl));
const isAll = (/^https:\/\/\w?\.?catwar.su\/.*/.test(pageurl));

try {
  if (isCW3) cw3();
  if (isDM) dm();
  if (isSite) site();
  if (isSett) sett();
  if (isMyCat) myCat();
  if (isAll) all();
}
catch (error) {
  console.error("An error occurred: ", error);
}

// ...
// ...
// ...

function sett() {
  const html = `
        <br><br><div id="cwsSet"><i>(c) CWScript</i><b>Настройки</b><div id="cwsSetList"><div><input class="cs-set" id="textTemplates" type="checkbox"${globals.textTemplates?' checked':''}><label for="textTemplates">Блок с шаблонами в личных сообщениях</label></div>
        <div><input class="cs-set" id="toggleTextTemplates" type="checkbox"${globals.toggleTextTemplates?' checked':''}><label for="toggleTextTemplates">Изначально сворачивать блок с шаблонами</label></div>
        <div><input class="cs-set" id="replaceTemplateTheme" type="checkbox"${globals.replaceTemplateTheme?' checked':''}><label for="replaceTemplateTheme">Вставлять название шаблона в тему сообщения</label></div>
        <!-- <div><input class="cs-set" id="chatTextTemplates" type="checkbox"${globals.chatTextTemplates?' checked':''}><label for="chatTextTemplates">Отображать шаблоны для ЧАТОВ</label></div>
        <div><input class="cs-set" id="toggleChatTextTemplates" type="checkbox"${globals.toggleChatTextTemplates?' checked':''}><label for="toggleChatTextTemplates">Сворачивать шаблоны ЧАТОВ изначально</label></div>
        <div><input class="cs-set" id="bloglentTextTemplates" type="checkbox"${globals.bloglentTextTemplates?' checked':''}><label for="bloglentTextTemplates">Отображать шаблоны для БЛОГОЛЕНТЫ</label></div>
        <div><input class="cs-set" id="toggleBloglentTextTemplates" type="checkbox"${globals.toggleBloglentTextTemplates?' checked':''}><label for="toggleBloglentTextTemplates">Сворачивать шаблоны БЛОГОЛЕНТЫ изначально</label></div>--><hr>
        <div><input class="cs-set" id="inGameClock" type="checkbox"${globals.inGameClock?' checked':''}><label for="inGameClock">Часы в игровой</label></div>
        <div><input class="cs-set" id="showDate" type="checkbox"${globals.isDateShow?' checked':''}><label for="showDate">Показывать дату</label></div>
        <div><input class="cs-set" id="movableClocks" type="checkbox"${globals.movableClocks?' checked':''}><label for="movableClocks">Перетаскиваемый блок часов (на телефонах перетаскивание пока не работает)</label></div>
        <table><tr><td><div><input class="cs-set" id="deviceTime" type="radio" name="timeSource"${!globals.isClockMoscow?' checked':''}><label for="deviceTime">Время с устройства</label></div></td>
        <td><div><input class="cs-set" id="moscowTime" type="radio" name="timeSource"${globals.isClockMoscow?' checked':''}><label for="moscowTime">Московское время</label></div></td></tr></table><hr>
        <div><input class="cs-set" id="phoneFightPanel" type="checkbox"${globals.phoneFightPanel?' checked':''}><label for="phoneFightPanel">Переместить кнопочки окошка БР для телефонщиков</label></div><hr>
        <div><input class="cs-set" id="friendlyCatWar" type="checkbox"${globals.friendlyCatWar?' checked':''}><label for="friendlyCatWar">Убрать кнопки входа в опасные боережимы</label></div><hr>
        <div><input class="cs-set" id="nightLagsWarning" type="checkbox"${globals.nightLagsWarning?' checked':''}><label for="nightLagsWarning">Предупреждение об осторожности на водах/лазательных локациях в период с 03:00 по 04:00 по МСК</label></div><hr>
        <div id="dontRdnLS"><input class="cs-set" id="dontReadenLS" type="checkbox"${globals.dontReadenLS?' checked':''}><label for="dontReadenLS">“Непрочитанное ЛС” только для себя</label></div>
        <button type="button" id="clearDontReadButton">Нажми меня!</button><label for="clearDontReadButton">Кнопка, чтобы починить (обнулить) счётчик непрочитанных ЛС</label><br><hr>
        <div><input class="cs-set" id="timerForLS" type="checkbox"${globals.timerForLS?' checked':''}><label for="timerForLS">Выделение сообщений в ЛС, которые скоро удалятся (выделяет непрочитанные ЛС, которые были получены/отправлены от 6 до 14 дней назад)</label></div><hr>
        <div><input class="cs-set" id="hideWoundWarning" type="checkbox"${globals.hideWoundWarning?' checked':''}><label for="hideWoundWarning">Убрать предупреждение "Вы ранены" со всех страниц сайта</label></div><hr>
        <div><input class="cs-set" id="brightGameField" type="checkbox"${globals.brightGameField?' checked':''}><label for="brightGameField">Не затемнять окошко игровой</label></div><hr>
        <div><input class="cs-set" id="customDefectDelay" type="checkbox"${globals.customDefectDelay?' checked':''}><label for="customDefectDelay">Выделение клеток с больными котиками в игровой</label></div>
        <div><input class="cs-set" id="cstmDfctShowColors" type="checkbox"${globals.cstmDfctShowColors?' checked':''}><label for="cstmDfctShowColors">Подсветка клетки игрока с дефектом полностью</label></div>
        <div><input class="cs-set" id="cstmDfctShowRamki" type="checkbox"${globals.cstmDfctShowRamki?' checked':''}><label for="cstmDfctShowRamki">Подсветка клетки игрока с дефектом рамкой</label></div>
        <div><input class="cs-set" id="cstmDfctShowNum" type="checkbox"${globals.cstmDfctShowNum?' checked':''}><label for="cstmDfctShowNum">Показывать иконки болезней с цифрами</label></div>
        <div><input class="cs-set" id="cstmDfctShowLowDirt" type="checkbox"${globals.cstmDfctShowLowDirt?' checked':''}><label for="cstmDfctShowLowDirt">Показывать 1-2 стадии грязи у игроков</label></div>
        <div><input class="cs-set" id="cstmDfctShowHighDirt" type="checkbox"${globals.cstmDfctShowHighDirt?' checked':''}><label for="cstmDfctShowHighDirt">Показывать 3-4 стадии грязи у игроков</label></div>
        <div><input class="cs-set" id="cstmDfctShow34WoundBetter" type="checkbox"${globals.cstmDfctShow34WoundBetter?' checked':''}><label for="cstmDfctShow34WoundBetter">Более выразительное выделение 3-4 стадий ран</label></div>
        <div><input class="cs-set" id="cstmDfctShowAllBetter" type="checkbox"${globals.cstmDfctShowAllBetter?' checked':''}><label for="cstmDfctShowAllBetter">Более выразительное выделение 3-4 стадий всех дефектов</label></div><hr>
        <div><input class="cs-set" id="cstmDfctShowDivers" type="checkbox"${globals.cstmDfctShowDivers?' checked':''}><label for="cstmDfctShowDivers">Выделять ныряющих в Игровой</label></div><hr>
        <div><input class="cs-set" id="cstmDfctShowPodstilki" type="checkbox"${globals.cstmDfctShowPodstilki?' checked':''}><label for="cstmDfctShowPodstilki">Выделять заподстиленных в Игровой</label></div><hr>
        <div><input class="cs-set" id="showButterflyBots" type="checkbox"${globals.showButterflyBots?' checked':''}><label for="showButterflyBots">Выделять бота-бабочку для прокачки БУ в Игровой</label></div><hr>
        <div><input class="cs-set" id="darkCatTooltip" type="checkbox"${globals.darkCatTooltip?' checked':''}><label for="darkCatTooltip">Тёмное окошко информации о персонажах в Игровой</label></div><hr>
        <div><input class="cs-set" id="customItemsDelay" type="checkbox"${globals.customItemsDelay?' checked':''}><label for="customItemsDelay">Подсвечивание клеток с полезными ресурсами в Игровой</label></div>
        <div><input class="cs-set" id="cstmItmHerbDelay" type="checkbox"${globals.cstmItmHerbDelay?' checked':''}><label for="cstmItmHerbDelay">Подсвечивать травы, мёд и целебные водоросли</label></div>
        <div><input class="cs-set" id="cstmItmMossDelay" type="checkbox"${globals.cstmItmMossDelay?' checked':''}><label for="cstmItmMossDelay">Подсвечивать мох (обычный, водяной, с желчью)</label></div>
        <div><input class="cs-set" id="cstmItmWebDelay" type="checkbox"${globals.cstmItmWebDelay?' checked':''}><label for="cstmItmWebDelay">Подсвечивать паутину</label></div>
        <div><input class="cs-set" id="cstmItmStickDelay" type="checkbox"${globals.cstmItmStickDelay?' checked':''}><label for="cstmItmStickDelay">Подсвечивать крепкие ветки, вьюнки, костоправы и плотные водоросли</label></div>
        <div><input class="cs-set" id="cstmItmDustDelay" type="checkbox"${globals.cstmItmDustDelay?' checked':''}><label for="cstmItmDustDelay">Подсвечивать звёздную пыль</label></div>
        <div><input class="cs-set" id="cstmItmMusorDelay" type="checkbox"${globals.cstmItmMusorDelay?' checked':''}><label for="cstmItmMusorDelay">Подсвечивать травящие предметы</label></div><hr>
        <div><input class="cs-set" id="boneCorrectTimer" type="checkbox"${globals.boneCorrectTimer?' checked':''}><label for="boneCorrectTimer">Таймер снятия костоправов</label></div>
        <div><input class="cs-set" id="toggleBoneTimer" type="checkbox"${globals.toggleBoneTimer?' checked':''}><label for="toggleBoneTimer">Изначально сворачивать блок таймера костоправов</label></div><hr>
        <div><input class="cs-set" id="deleteFPTitles" type="checkbox"${globals.deleteFPTitles?' checked':''}><label for="deleteFPTitles">Убрать подписи к кнопкам боережима</label></div><hr>
        <div><input class="cs-set" id="cwscriptDarkTheme" type="checkbox"${globals.cwscriptDarkTheme?' checked':''}><label for="cwscriptDarkTheme">Тёмная тема для функций из CWScript <small>(В слудующем обновлении добавим больше тем!)</small></label></div>
        <!--<div><select id="selectInGame"><option>CWScript светлая</option><option>CWScript тёмная</option><option>CatWar светлая</option><option>Стандартная тёмная</option><option>Стандартная светлая</option></select></div><br>
        <div><select id="selectOutGame"><option>CWScript светлая</option><option>CWScript тёмная</option><option>CatWar светлая</option><option>Стандартная тёмная</option><option>Стандартная светлая</option><option>Стандартная тёмная</option></select></div>-->
        </div><br></div><br></div><br>`
  appendToElementOrFallback('#branch', 'a[href="del"]', html);

  $('#nightLagsWarning').on('change', function() {
    if (!this.checked) {
      let userConfirmation = confirm("Вы уверены, что хотите отключить предупреждение о ночных лагах?");
      if (!userConfirmation) {
        this.checked = true;
      }
      else {}
    }
    else {}
  });

  let cssForSett = `
        <style>
        div#cwsSet>b {
        display: block;
        text-align: center;
        font-size: 23px;
        padding: 10px;
        margin-top: -23px;
        letter-spacing: 15px;
        text-transform: uppercase;
        border: 3px solid var(--brdrClr1);
        margin-bottom: 10px;
        background-color: var(--bckgClr1);
        color: var(--txtClr1); }

        div#cwsSet>i {
        display: block;
        text-align: right;
        padding-top: 5px;
        padding-right: 10px;
        font-size: 11px;
        color: var(--txtClr1); }

        div#cwsSet {
        background-color: var(--bckgClr2);
        border: 3px solid var(--brdrClr1);
        color: var(--txtClr2);
        font-family: Montserrat; }

        div#cwsSetList {
        max-height: 500px;
        overflow: auto;
        background-color: var(--bckgClr2);
        color: var(--txtClr2); }

        div#cwsSetList::-webkit-scrollbar {
        width: 13px;  }

        div#cwsSetList::-webkit-scrollbar-track {
        background: var(--scrlClr1) !important; }

        div#cwsSetList::-webkit-scrollbar-thumb {
        background: var(--scrlClr2) !important; }

        div#cwsSetList>hr {
        border: 0.5px solid var(--hrClr1);
        margin: 10px auto; }

        div#cwsSetList>table>tbody>tr>td>div {
        margin-top: 3px;
        margin-right: 30px; }

        table#dfctSet {
        margin-left: 4px; }

        table#dfctSet, table#dfctSet>tbody>tr, table#dfctSet>tbody>tr>td {
        border: 3px solid var(--hrClr1);
        font-weight: bold;
        font-size: 13px;
        text-align: center; }

        table#dfctSet>tbody>tr>td {
        padding: 10px; }

        table#dfctSet>tbody>tr.dfctName {
        background: var(--hrClr1) }

        div#dfctOpacity, div#itmOpacity {
        margin-left: 4px; }

        div#dfctOpacity>input, div#itmOpacity>input {
        margin-top: 8px;
        margin-bottom: 8px; }

        input#cstmDfctOpacity {
        border: 3px solid var(--hrClr1);
        width: 208px;
        margin-left: 0.3px; }

        input#cstmItmOpacity {
        border: 3px solid var(--hrClr1);
        width: 220px;
        margin-left: 0.3px; }

        button#resetDefectSettings, button#resetItemSettings {
        margin-left: 4px; }

        button#resetDefectSettings:hover, button#resetItemSettings:hover {
        border: 1px solid var(--brdrClr2); }

        button#clearDontReadButton {
        background-color: var(--bckgClr3);
        color: var(--txtClr3);
        border: 1px solid var(--brdrClr3);
        font-family: Verdana;
        font-size: .9em;
        margin: 0 1em;
        display: inline-block;
        margin-top: 6px;}

        button#clearDontReadButton:hover {
        border: 1px solid var(--brdrClr2);}
        </style>
        `
  $('head').append(cssForSett);

  $('.cs-set').on('change', function() {
    let key = this.id;
    let val = this.type === 'checkbox' ? this.checked : this.value;
    setSettings(key, val);
  });

  let settingsToResetDfct = [
    'customDefectDelay', 'cstmDfctWounds', 'cstmDfctBruise', 'cstmDfctFractures',
    'cstmDfctPoison', 'cstmDfctCough', 'cstmDfctDirt', 'cstmDfctOpacity',
    'cstmDfctShowColors', 'cstmDfctShowNum', 'cstmDfctShowHighDirt',
    'cstmDfctShowLowDirt', 'cstmDfctShow34WoundBetter', 'cstmDfctShowAllBetter'
  ];

  let settingsToResetItm = [
    'customItemsDelay', 'cstmItmHerbDelay', 'cstmItmHerbClr', 'cstmItmMossDelay',
    'cstmItmMossClr', 'cstmItmWebDelay', 'cstmItmWebClr', 'cstmItmStickDelay',
    'cstmItmStickClr', 'cstmItmDustDelay', 'cstmItmDustClr', 'cstmItmOpacity', 'cstmItmMusorDelay', 'cstmItmMusorClr'
  ];

  function resetSettings(settingsToReset) {
    for (var i = 0; i < settingsToReset.length; i++) {
      let key = settingsToReset[i];
      removeSettings(key);
    }
    for (i = 0; i < settingsToReset.length; i++) {
      let key = settingsToReset[i];
      globals[key] = csDefaults[key];
    }
    $('.cs-set').each(function() {
      let key = this.id;
      if (settingsToReset.includes(key)) {
        let val = csDefaults[key];
        if (this.type === 'checkbox') {
          this.checked = val;
        }
        else {
          this.value = val;
        }
      }
    });
  }

  $('#resetDefectSettings').on('click', function() {
    resetSettings(settingsToResetDfct);
  });
  $('#resetItemSettings').on('click', function() {
    resetSettings(settingsToResetItm);
  });

  $(document).ready(function() {
    function toggleCustomDefectDelay() {
      $('#cstmDfctWounds, #cstmDfctBruise, #cstmDfctShowRamki, #cstmDfctFractures, #cstmDfctPoison, #cstmDfctCough, #cstmDfctDirt, #cstmDfctOpacity, #cstmDfctShowColors, #cstmDfctShowNum, #cstmDfctShowHighDirt, #cstmDfctShowLowDirt, #cstmDfctShow34WoundBetter, #cstmDfctShowAllBetter').prop('disabled', !$('#customDefectDelay').is(':checked'));
    }
    $('#customDefectDelay').change(toggleCustomDefectDelay);
    toggleCustomDefectDelay();

    function toggleCustomItemsDelay() {
      $('#cstmItmHerbDelay, #cstmItmHerbClr, #cstmItmMossDelay, #cstmItmMossClr, #cstmItmWebDelay, #cstmItmWebClr, #cstmItmStickDelay, #cstmItmStickClr, #cstmItmDustDelay, #cstmItmDustClr, #cstmItmOpacity, #cstmItmMusorDelay, #cstmItmMusorClr').prop('disabled', !$('#customItemsDelay').is(':checked'));
    }
    $('#customItemsDelay').change(toggleCustomItemsDelay);
    toggleCustomItemsDelay();

    function toggleTimeBlock() {
      $('#deviceTime, #moscowTime, #showDate, #movableClocks').prop('disabled', !$('#inGameClock').is(':checked'));
    }
    $('#inGameClock').change(toggleTimeBlock);
    toggleTimeBlock();
  });

}

// ...
// ...
// ...

function dm() {
  if (globals['dontReadenLS']) {
    function updateDontReadCounter() {
      let count = 0;
      for (let i = 0; i < localStorage.length; i++) {
        let key = localStorage.key(i);
        if (key.startsWith('message')) {
          count++;
        }
      }
      localStorage.setItem('dontReadenCount', count);
      $('#dontReadCounter').text(count > 0 ? '(' + count + ')' : '');
    }

    function updateDontReadenMessages() {
      $('#messList tr').each(function() {
        if (!$(this).hasClass('msg_notRead') && !$(this).find('.dontReadButton').length) {
          $(this).append('<td><button class="dontReadButton">Н</button></td>');
          let messageId = $(this).find('a.msg_open').data('id');
          if (localStorage.getItem('message' + messageId)) {
            $(this).addClass('dontReaden');
          }
        }
      });
    }
    $(document).on('click', '.dontReadButton', function() {
      let row = $(this).closest('tr');
      let messageId = row.find('a.msg_open').data('id');
      if (row.hasClass('dontReaden')) {
        row.removeClass('dontReaden');
        localStorage.removeItem('message' + messageId);
      }
      else {
        row.addClass('dontReaden');
        localStorage.setItem('message' + messageId, true);
      }
      updateDontReadCounter();
    });
    $(document).on('click', '.msg_open', function() {
      let row = $(this).closest('tr');
      if (row.hasClass('dontReaden')) {
        let messageId = row.find('a.msg_open').data('id');
        row.removeClass('dontReaden');
        localStorage.removeItem('message' + messageId);
        updateDontReadCounter();
      }
    });
    setInterval(function() {
      updateDontReadenMessages();
      updateDontReadCounter();
    }, 1000);
    let dontreadencss = `<style>.dontReaden {
background-color: var(--bckgClr6); }</style>`
    $('head').append(dontreadencss);
  }

  // Чипсеки

  if (globals['textTemplates']) {
    function checkForForm() {
      let form = document.querySelector('#write_form');
      if (form && !form.classList.contains('templates-added')) {
        add_templates();
        form.classList.add('templates-added');
      }
    }
    checkForForm();
    let observer = new MutationObserver((mutationsList, observer) => {
      for (let mutation of mutationsList) {
        if (mutation.type === 'childList') {
          checkForForm();
        }
      }
    });
    observer.observe(document.body, {
      childList: true,
      subtree: true
    });

    function add_templates() {
      if (window.location.href.includes("https://catwar.su/ls?new")) {
        $(document).ready(function() {
          setTimeout(function() {
            initScript();
          }, 70);
        });

        function initScript() {
          'use strict';
          let templates = localStorage.getItem('templates') ? JSON.parse(localStorage.getItem('templates')) : [];

          function renderTemplates() {
            let list = $('.patternlist');
            list.empty();
            templates.forEach(function(template, index) {
              let templateText = '<div class="patternline"><a href="#" class="name" data-index="' + index + '">' + template.name + '</a> <a href="#" class="delete" data-index="' + index + '">[X]</a> <a href="#" class="edit" data-index="' + index + '">[✍]</a><hr><div>';
              list.append(templateText);
            });
          }
          let writeForm = $('form#write_form');
          if (writeForm.length === 0) {
            return;
          }
          writeForm.find('.patternblock').remove();
          writeForm.prepend('<div class="patternblock"><i>(c) CWScript</i><b>Шаблоны</b><div class="patternlist"></div></div>');
          let patternBlock = writeForm.find('.patternblock');
          let createButton = $('<a href="#" id="createButton">Создать новый шаблон</a>').click(function(e) {
            e.preventDefault();
            $(this).hide();
            let inputField = $('<input type="text" id="templateName" placeholder="Введите название шаблона"></input>');
            let okButton = $('<button type="button" id="templateBtnOK" class="templateBtns">OK</button>').click(function() {
              let templateName = inputField.val();
              if (templateName) {
                let currentContent = $('#text').val();
                let newTemplate = {
                  name: templateName,
                  content: currentContent
                };
                templates.push(newTemplate);
                localStorage.setItem('templates', JSON.stringify(templates));
                renderTemplates();
                inputField.remove();
                okButton.remove();
                cancelButton.remove();
                createButton.show();
              }
            });
            let cancelButton = $('<button id="templateBtnUndo" class="templateBtns">Отмена</button>').click(function() {
              inputField.remove();
              okButton.remove();
              cancelButton.remove();
              createButton.show();
            });
            $(this).after(inputField, okButton, '  ', cancelButton);
          });
          patternBlock.append(createButton);
          writeForm.off('click', '.delete').on('click', '.delete', function(e) {
            e.preventDefault();
            let templateIndex = $(this).data('index');
            let templateName = templates[templateIndex].name;
            if (confirm('Точно ли вы хотите удалить шаблон "' + templateName + '"?')) {
              templates.splice(templateIndex, 1);
              localStorage.setItem('templates', JSON.stringify(templates));
              renderTemplates();
            }
          });
          writeForm.off('click', '.edit').on('click', '.edit', function(e) {
            e.preventDefault();
            let templateIndex = $(this).data('index');
            let template = templates[templateIndex];
            if (template) {
              let templateContent = template.content;
              $('#text').val(templateContent);
              let saveButton = $('#templateBtnSaveChanges');
              if (saveButton.length === 0) {
                saveButton = $('<button id="templateBtnSaveChanges">Сохранить шаблон</button><br><br>');
                writeForm.append(saveButton);
              }
              saveButton.off('click').click(function(e) {
                e.preventDefault();
                let editedContent = $('#text').val();
                templates[templateIndex].content = editedContent;
                localStorage.setItem('templates', JSON.stringify(templates));
                renderTemplates();
                $('#text').val('');
              });
            }
          });
          writeForm.on('click', '.name', function(e) {
            e.preventDefault();
            let templateIndex = $(this).data('index');
            let template = templates[templateIndex];
            if (template) {
              $('#text').val(template.content);
              if (globals['replaceTemplateTheme']) {
                $('#subject').val(template.name);
              }
            }
          });
          renderTemplates();

          function togglePatternBlock() {
            $('.patternblock').slideToggle();
          }
          let toggleButton = $('<button id="togglePatternBlockButton" type="button">Ш</button>').click(togglePatternBlock);
          $('button[data-code="b"]').before(toggleButton);
          if (globals['toggleTextTemplates']) {
            $('.patternblock').hide();
          }
        }
      }
    }
    let css = `
        <style>
        button#templateBtnOK, button#templateBtnUndo, button#templateBtnSaveChanges {
        background-color: var(--bckgClr3);
        color: var(--txtClr3);
        border: 1px solid var(--brdrClr3);
        font-family: Verdana;
        font-size: .9em; }

        button#templateBtnOK:hover, button#templateBtnUndo:hover, button#templateBtnSaveChanges:hover {
        border: 1px solid var(--brdrClr2); }

        div.patternblock {
        border: 3px solid var(--brdrClr1);
        margin-bottom: 10px;
        background-color: var(--bckgClr1);
        color: var(--txtClr1);
        font-family: Montserrat; }

        div.patternlist {
        max-height: 140px;
        overflow: auto;
        background-color: var(--bckgClr2);
        color: var(--txtClr2); }

        div.patternlist::-webkit-scrollbar {
        width: 13px;  }

        div.patternlist::-webkit-scrollbar-track {
        background: var(--scrlClr1) !important; }

        div.patternlist::-webkit-scrollbar-thumb {
        background: var(--scrlClr2) !important; }

        div.patternline>hr {
        border: 0.5px solid var(--hrClr1);
        margin: 0;
        margin-top: 6px; }

        div.patternline:hover {
        background: var(--bckgClr4) !important;
        transition: 0.8s; }

        div.patternline {
        transition: 0.8s;
        padding-top: 6px;
        color: var(--txtClr2); }

        div.patternline>a {
        color: var(--txtClr2); }

        div.patternblock>b {
        border: 3px solid var(--brdrClr1);
        display: block;
        text-align: center;
        font-size: 23px;
        padding: 10px;
        margin-top: -23px;
        letter-spacing: 15px;
        text-transform: uppercase; }

        div.patternblock>i {
        display: block;
        text-align: right;
        padding-top: 5px;
        padding-right: 10px;
        font-size: 11px; }

        .patternline>a.name {
        display: block;
        margin-left: 5px; }

        .patternline>a.delete {
        display: block;
        max-width: 80px;
        margin-top: -17px;
        margin-left: auto;
        margin-right: 0; }

        .patternline>a.edit {
        display: block;
        max-width: 50px;
        margin-top: -19px;
        margin-left: auto;
        margin-right: 0; }

        a#createButton {
        display: block;
        padding: 5px;
        color: var(--txtClr1); }

        button#templateBtnSaveChanges {
        margin-top: 1px; }

        input#templateName {
        width: 20% !important;
        margin: 4px auto; }

        button.templateBtns {
        overflow: auto; }

        button.templateBtns {
        margin-top: 4px; }

        button#templateBtnOK {
        margin-left: 10px;
        margin-right: 3px; }

        button#togglePatternBlockButton {
        background-color: #333;
        color: #fff;
        border: none;
        margin-right: 5px;
        }

        button#togglePatternBlockButton:hover {
        outline: 1px solid #ff0;
        }
        </style>`
    $('head').append(css);
  }
}

// ...
// ...
// ...

function cw3() {
  if (globals['inGameClock']) {
    if (globals['movableClocks']) {
      (function() {
        function injectDateTime() {
          let htmlClock = `
        <div id="clockContainer">
        <div id="clock"></div>
        <div id="date"></div>
        </div>
        <style>
        div#clockContainer {
        position: absolute;
        z-index: 9999;
        cursor: move;
        font-family: Montserrat;
        background-color: var(--bckgClr1);
        border: 3px solid var(--brdrClr1);
        color: var(--txtClr1);
        padding: 5px 5px 5px 10px;
        font-weight: bold;
        font-size: 15px;
        }
        </style>`
          $("body").append(htmlClock);

          var dateTimeContainer = document.getElementById('clockContainer');
          var savedPosition = JSON.parse(localStorage.getItem('dateTimePosition'));
          if (savedPosition) {
            dateTimeContainer.style.left = savedPosition.left;
            dateTimeContainer.style.top = savedPosition.top;
          }
          else {
            dateTimeContainer.style.left = '0px';
            dateTimeContainer.style.top = '0px';
          }
          let isDragging = false;
          let initialX = 0;
          let initialY = 0;
          dateTimeContainer.addEventListener('mousedown', function(e) {
            isDragging = true;
            initialX = e.pageX - parseInt(dateTimeContainer.style.left);
            initialY = e.pageY - parseInt(dateTimeContainer.style.top);
          });
          document.addEventListener('mousemove', function(e) {
            if (isDragging) {
              e.preventDefault();
              dateTimeContainer.style.right = 'unset';
              dateTimeContainer.style.left = (e.pageX - initialX) + 'px';
              dateTimeContainer.style.top = (e.pageY - initialY) + 'px';
            }
          });
          document.addEventListener('mouseup', function() {
            isDragging = false;
            if (dateTimeContainer) {
              var currentPosition = {
                left: dateTimeContainer.style.left,
                top: dateTimeContainer.style.top
              };
              localStorage.setItem('dateTimePosition', JSON.stringify(currentPosition));
            }
          });
        }
        window.addEventListener('load', injectDateTime);
      })();
    }
    if (!globals['movableClocks']) {
      let clockHtml = `
         <div id="clockContainer">
         <div id="clock"></div>
         <div id="date"></div>
         </div>
         <style>
         div#clockContainer {
         font-family: Montserrat;
         background-color: var(--bckgClr1);
         border: 3px solid var(--brdrClr1);
         color: var(--txtClr1);
         padding: 5px 5px 5px 10px;
         font-weight: bold;
         font-size: 15px; }
         </style>`
      $('#tr_actions').after(clockHtml);
    }
  }

  // Сухареки

  if (globals['customDefectDelay']) { // Включить отображение дефектов в игровой
    let cstmDfctStyle = `<style id='cstmDfctStyle'></style>`
    $('head').append(cstmDfctStyle);
    if (globals['cstmDfctShowColors']) { // Включить подсветку клетки с больными
      if (globals['cstmDfctShowRamki']) {
        let cstmDfctRamki = `
        /* ОБЩЕЕ */
      ol.mouth>li>div.e>div[style*='disease'], ol.mouth>li>div.e>div[style*='trauma'], ol.mouth>li>div.e>div[style*='drown'], ol.mouth>li>div.e>div[style*='wound'], ol.mouth>li>div.e>div[style*='poisoning'],         ol.mouth>li>div.e>div[style*='dirt'] {
      padding-top: 0px !important; }

        /* КАШЕЛЬ */
      #tr_field [style*='disease'] {
      outline: 5px solid rgba(232, 255, 0, .5);
      outline-offset: -5px;
      padding-top: 16px; }

        /* СКАЛЫ */
      #tr_field [style*='trauma'] {
      outline: 5px solid rgba(0, 255, 232, .3);
      outline-offset: -5px;
      padding-top: 16px; }

        /* ВОДЫ */
      #tr_field [style*='drown'] {
      outline: 5px solid rgba(72, 255, 0, .3);
      outline-offset: -5px;
      padding-top: 16px; }

        /* РАНЫ */
      #tr_field [style*='wound'] {
      outline: 5px solid rgba(0, 0, 255, .3);
      outline-offset: -5px;
      padding-top: 16px; }

        /* ОТРАВЛЕНИЕ */
      #tr_field [style*='poisoning'] {
      outline: 5px solid rgba(255, 0, 0, .3);
      outline-offset: -5px;
      padding-top: 16px; }`
        $('#cstmDfctStyle').append(cstmDfctRamki);
      }
      if (!globals['cstmDfctShowRamki']) {
        let cstmDfctColors = `
        /* КАШЕЛЬ */
      #tr_field [style*='disease'] {
      background-color: rgba(238, 255, 70, .25) !important;
      padding-top: 16px; }

      ol.mouth>li>div.e>div[style*='disease'] {
      padding-top: 0px !important; }

        /* СКАЛЫ */
      #tr_field [style*='trauma'] {
      background-color: rgba(70, 255, 239, .25) !important;
      padding-top: 16px; }

      ol.mouth>li>div.e>div[style*='trauma'] {
      padding-top: 0px !important; }

        /* ВОДЫ */
      #tr_field [style*='drown'] {
      background-color: rgba(104, 255, 70, .25) !important;
      padding-top: 16px; }

      ol.mouth>li>div.e>div[style*='drown'] {
      padding-top: 0px !important; }

        /* РАНЫ */
      #tr_field [style*='wound'] {
      background-color: rgba(70, 70, 255, .25) !important;
      padding-top: 16px; }

      ol.mouth>li>div.e>div[style*='wound'] {
      padding-top: 0px !important; }

        /* ОТРАВЛЕНИЕ */
      #tr_field [style*='poisoning'] {
      background-color: rgba(255, 70, 70, .25) !important;
      padding-top: 16px; }

      ol.mouth>li>div.e>div[style*='poisoning'] {
      padding-top: 0px !important; }`
        $('#cstmDfctStyle').append(cstmDfctColors);
      }
    }
    if (globals['cstmDfctShowNum']) { // Включить добавление иконок и цифр на клетках с больными
      if (globals['cstmDfctShowRamki']) {
        let cstmDfctNum1 = `
        /* КАШЕЛЬ */
      #tr_field [style*='disease/1']{
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Кашель%201Р.png) !important; }

        /* СКАЛЫ */
      #tr_field [style*='trauma/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%201Р.png) !important; }

      #tr_field [style*='trauma/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%202Р.png) !important; }

      #tr_field [style*='trauma/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%203Р.png) !important; }

      #tr_field [style*='trauma/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%204Р.png) !important; }

        /* ВОДЫ */
      #tr_field [style*='drown/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%201Р.png) !important; }

      #tr_field [style*='drown/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%202Р.png) !important; }

      #tr_field [style*='drown/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%203Р.png) !important; }

      #tr_field [style*='drown/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%204Р.png) !important; }

        /* РАНЫ */
      #tr_field [style*='wound/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%201Р.png) !important; }

      #tr_field [style*='wound/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%202Р.png) !important; }

      #tr_field [style*='wound/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%203Р.png) !important; }

      #tr_field [style*='wound/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%204Р.png) !important; }

        /* ОТРАВЛЕНИЕ */
      #tr_field [style*='poisoning/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%201Р.png) !important; }

      #tr_field [style*='poisoning/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%202Р.png) !important; }

      #tr_field [style*='poisoning/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%203Р.png) !important; }

      #tr_field [style*='poisoning/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%204Р.png) !important; }`
        $('#cstmDfctStyle').append(cstmDfctNum1);
      }
      if (!globals['cstmDfctShowRamki']) {
        let cstmDfctNum = `
        /* КАШЕЛЬ */
      #tr_field [style*='disease/1']{
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Кашель%201.png) !important; }

        /* СКАЛЫ */
      #tr_field [style*='trauma/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ушибы%201.png) !important; }

      #tr_field [style*='trauma/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ушибы%202.png) !important; }

      #tr_field [style*='trauma/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ушибы%203.png) !important; }

      #tr_field [style*='trauma/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ушибы%204.png) !important; }

        /* ВОДЫ */
      #tr_field [style*='drown/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Переломы%201.png) !important; }

      #tr_field [style*='drown/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Переломы%202.png) !important; }

      #tr_field [style*='drown/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Переломы%203.png) !important; }

      #tr_field [style*='drown/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Переломы%204.png) !important; }

        /* РАНЫ */
      #tr_field [style*='wound/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Раны%201.png) !important; }

      #tr_field [style*='wound/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Раны%202.png) !important; }

      #tr_field [style*='wound/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Раны%203.png) !important; }

      #tr_field [style*='wound/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Раны%204.png) !important; }

        /* ОТРАВЛЕНИЕ */
      #tr_field [style*='poisoning/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Отравление%201.png) !important; }

      #tr_field [style*='poisoning/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Отравление%202.png) !important; }

      #tr_field [style*='poisoning/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Отравление%203.png) !important; }

      #tr_field [style*='poisoning/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Отравление%204.png) !important; }`
        $('#cstmDfctStyle').append(cstmDfctNum);
      }
    }
    if (globals['cstmDfctShowHighDirt']) {
      if (globals['cstmDfctShowColors']) { // Показывать 3-4 стадии грязи подсветкой клеток
        if (globals['cstmDfctShowRamki']) {
          let highDirtRamki = `
      div[style*='dirt/base/1/3'], div[style*='dirt/base/2/3'], div[style*='/dirt/base/1/4.png'], div[style*='dirt/base/2/4'] {
      outline: 5px solid rgba(108, 0, 255, .3);
      outline-offset: -5px;
      padding-top: 16px !important; }`
        }
        if (!globals['cstmDfctShowRamki']) {
          let highDirtColors = `
      div[style*='dirt/base/1/3'], div[style*='dirt/base/2/3'], div[style*='/dirt/base/1/4.png'], div[style*='dirt/base/2/4'] {
      background-color: rgba(146, 70, 255, 0.25) !important;
      padding-top: 16px !important;}

      ol.mouth>li>div.e>div[style*='dirt/base/1/3'], ol.mouth>li>div.e>div[style*='dirt/base/2/3'], ol.mouth>li>div.e>div[style*='dirt/base/1/4'], ol.mouth>li>div.e>div[style*='dirt/base/2/4'] {
      background-color: rgba(146, 70, 255, 0.25) !important;
      padding-top: 0px !important;}`
          $('#cstmDfctStyle').append(highDirtColors);
        }
      }
      if (globals['cstmDfctShowNum']) { // Подсветка 3-4 стадий грязи иконкой и цифрой
        if (globals['cstmDfctShowRamki']) {
          let highDirtRamki = `
      #tr_field [style*='/dirt/base/1/3.png'], #tr_field [style*='dirt/base/2/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Грязь%203Р.png) !important; }

      #tr_field [style*='/dirt/base/1/4.png'], #tr_field [style*='dirt/base/2/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Грязь%204Р.png) !important; }`
        }
        if (!globals['cstmDfctShowRamki']) {
          let highDirtNum = `
      #tr_field [style*='/dirt/base/1/3.png'], #tr_field [style*='dirt/base/2/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Грязь%203.png) !important; }

      #tr_field [style*='/dirt/base/1/4.png'], #tr_field [style*='dirt/base/2/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Грязь%204.png) !important; }`
          $('#cstmDfctStyle').append(highDirtNum);
        }
      }
    }
    if (globals['cstmDfctShowLowDirt']) {
      if (globals['cstmDfctShowRamki']) {
        let lowDirtRamki = `
      /* ГРЯЗЬ */
      div[style*='dirt/base/1/1'], div[style*='dirt/base/2/1'], div[style*='/dirt/base/1/2.png'], div[style*='dirt/base/2/2'] {
      outline: 5px solid rgba(108, 0, 255, .3);
      outline-offset: -5px;
      padding-top: 16px !important; }`
        $('#cstmDfctStyle').append(lowDirtRamki);
      }
      if (!globals['cstmDfctShowRamki']) {
        if (globals['cstmDfctShowColors']) { // Подсветка 1-2 стадий грязи подсветкой клеток
          let lowDirtColors = `
      div[style*='dirt/base/1/1'], div[style*='dirt/base/2/1'], div[style*='/dirt/base/1/2.png'], div[style*='dirt/base/2/2'] {
      background-color: rgba(146, 70, 255, 0.25) !important;
      padding-top: 16px !important;}

      ol.mouth>li>div.e>div[style*='dirt/base/1/1'], ol.mouth>li>div.e>div[style*='dirt/base/2/1'], ol.mouth>li>div.e>div[style*='dirt/base/1/2'], ol.mouth>li>div.e>div[style*='dirt/base/2/2'] {
      background-color: rgba(146, 70, 255, 0.25) !important;
      padding-top: 0px !important;}`
          $('#cstmDfctStyle').append(lowDirtColors);
        }
      }
      if (globals['cstmDfctShowNum']) { // Подсветка 1-2 стадий грязи иконкой и цифрой
        if (globals['cstmDfctShowRamki']) {
          let lowDirtNum1 = `
      #tr_field [style*='dirt/base/1/1'], #tr_field [style*='dirt/base/2/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Грязь%201Р.png) !important; }

      #tr_field [style*='/dirt/base/1/2.png'], #tr_field [style*='dirt/base/2/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Грязь%202Р.png) !important; }`
          $('#cstmDfctStyle').append(lowDirtNum1);
        }
        if (!globals['cstmDfctShowRamki']) {
          let lowDirtNum = `
      #tr_field [style*='dirt/base/1/1'], #tr_field [style*='dirt/base/2/1'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Грязь%201.png) !important; }

      #tr_field [style*='/dirt/base/1/2.png'], #tr_field [style*='dirt/base/2/2'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Грязь%202.png) !important; }`
          $('#cstmDfctStyle').append(lowDirtNum);
        }
      }
    }
    if (globals['cstmDfctShow34WoundBetter']) { // Лучшее отображение для раненых 3-4 стадии
      if (globals['cstmDfctShowRamki']) {
        let wounds341 = `
      #tr_field [style*='wound/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%203!Р.png) !important; }

      #tr_field [style*='wound/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Раны%204!!!Р.png) !important; }`
        $('#cstmDfctStyle').append(wounds341);
      }
      if (!globals['cstmDfctShowRamki']) {
        let wounds34 = `
      #tr_field [style*='wound/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Rany_3_33.png) !important; }

      #tr_field [style*='wound/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Rany_4_33__33__33.png) !important; }`
        $('#cstmDfctStyle').append(wounds34);
      }
    }
    if (globals['cstmDfctShowAllBetter']) { // Лучшее отображение для всех болезней
      if (globals['cstmDfctShowRamki']) {
        let cstmDfctAllBetter1 = `
        /* КАШЕЛЬ */
      #tr_field [style*='disease/1']{
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Кашель%201Р.png) !important; }

      #tr_field [style*='trauma/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%203!Р.png) !important; }

      #tr_field [style*='trauma/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Ушибы%204!!!Р.png) !important; }

        /* ВОДЫ */
      #tr_field [style*='drown/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%203!Р.png) !important; }

      #tr_field [style*='drown/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Переломы%204!!!Р.png) !important; }

      #tr_field [style*='poisoning/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%203!Р.png) !important; }

      #tr_field [style*='poisoning/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/БолезниР/Отравление%204!!!Р.png) !important; }`
        $('#cstmDfctStyle').append(cstmDfctAllBetter1);
      }
      if (!globals['cstmDfctShowRamki']) {
        let cstmDfctAllBetter = `
        /* КАШЕЛЬ */
      #tr_field [style*='disease/1']{
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Кашель%201.png) !important; }

      #tr_field [style*='trauma/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ushiby_3_33.png) !important; }

      #tr_field [style*='trauma/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Ushiby_4_33__33__33.png) !important; }

        /* ВОДЫ */
      #tr_field [style*='drown/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Perelomy_3_33.png) !important; }

      #tr_field [style*='drown/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Perelomy_4_33__33__33.png) !important; }

      #tr_field [style*='poisoning/3'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Otravlenie_3_33.png) !important; }

      #tr_field [style*='poisoning/4'] {
      content: url(https://raw.githubusercontent.com/CatWarScript/CatWarScript/main/Болезни/Otravlenie_4_33__33) !important; }`
        $('#cstmDfctStyle').append(cstmDfctAllBetter);
      }
    }
  }

  if (globals['cstmDfctShowDivers']) {
    let cstmDfctDivers = `
        <style id="dfctDivers">
        #tr_field [style*='/cw3/cats/0/costume/7.png'], [style*='/cw3/cats/-1/costume/7.png'] {
        content: url(https://i.ibb.co/dG6mhTj/image.png) !important;
        padding-top: 16px !important;
        padding-left: 1.5px !important;}
        </style>`
    $('head').append(cstmDfctDivers);
  }
  if (globals['cstmDfctShowPodstilki']) {
    let cstmDfctPodstilkiDelay = `
        <style id="dfctPodstilki">
        #tr_field [style*='/cw3/cats/0/costume/295.png'], [style*='/cw3/cats/-1/costume/295.png'], [style*='/cw3/cats/1/costume/295.png'] {
        background-color: rgba(121, 85, 61, .25) !important;
        padding-top: 16px !important;}

        ol.mouth>li>div.e>div[style*='/cw3/cats/0/costume/295.png'], ol.mouth>li>div.e>div[style*='/cw3/cats/-1/costume/295.png'], ol.mouth>li>div.e>div[style*='/cw3/cats/1/costume/295.png'] {
        padding-top: 0px !important; }
        </style>`
    $('head').append(cstmDfctPodstilkiDelay);
  }

  // Кыр сосичка

  if (globals['customItemsDelay']) { // Подсветка трав и других полезных ресурсов в Игровой
    let cstmItmStyle = `<style id='cstmItmStyle'></style>`
    $('head').append(cstmItmStyle);
    if (globals['cstmItmHerbDelay']) { // Отображение трав
      let cstmItmHerbs = `
        .cage_items[style*='things/13.png'],
        .cage_items[style*='things/15.png'],
        .cage_items[style*='things/17.png'],
        .cage_items[style*='things/19.png'],
        .cage_items[style*='things/21.png'],
        .cage_items[style*='things/23.png'],
        .cage_items[style*='things/25.png'],
        .cage_items[style*='things/26.png'],
        .cage_items[style*='things/106.png'],
        .cage_items[style*='things/108.png'],
        .cage_items[style*='things/109.png'],
        .cage_items[style*='things/110.png'],
        .cage_items[style*='things/111.png'],
        .cage_items[style*='things/112.png'],
        .cage_items[style*='things/115.png'],
        .cage_items[style*='things/116.png'],
        .cage_items[style*='things/119.png'],
        .cage_items[style*='things/655.png'] {
        background-color: rgba(43, 255, 117, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmHerbs);
    }
    if (globals['cstmItmMossDelay']) { // Отображение мха
      let cstmItmMoss = `
          /* МОХ (обычный, водяной и желчный) */
        .cage_items[style*='things/75.png'], .cage_items[style*='things/78.png'], .cage_items[style*='things/95.png'] {
        background-color: rgba(43, 255, 117, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmMoss);
    }
    if (globals['cstmItmWebDelay']) { // Отображение паутины
      let cstmItmWeb = `
          /* ПАУТИНА */
        .cage_items[style*='things/20.png'] {
        background-color: rgba(43, 255, 117, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmWeb);
    }
    if (globals['cstmItmStickDelay']) { // Отображение STICKS.
      let cstmItmSticks = `
          /* ВЕТКИ, ВЬЮНКИ, КОСТОПРАВЫ, ПЛОТНЫЕ ВОДОРОСЛИ */
        .cage_items[style*='things/565.png'], .cage_items[style*='things/566.png'], .cage_items[style*='things/562.png'], .cage_items[style*='things/563.png'], .cage_items[style*='things/3993.png'] {
        background-color: rgba(43, 255, 117, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmSticks);
    }
    if (globals['cstmItmDustDelay']) { // Отображение Звёздной Пыли
      let cstmItmDust = `
          /* ПЫЛЬ */
        .cage_items[style*='things/94.png'], .cage_items[style*='things/385.png'], .cage_items[style*='things/386.png'], .cage_items[style*='things/387.png'], .cage_items[style*='things/388.png'], .cage_items[style*='things/389.png'], .cage_items[style*='things/390.png'], .cage_items[style*='things/391.png'], .cage_items[style*='things/392.png'] {
        background-color: rgba(192, 150, 226, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmDust);
    }
    if (globals['cstmItmMusorDelay']) { // Отображение muror
      let cstmItmMusor = `
          /* КОСТИ */
        .cage_items[style*='things/985.png'], .cage_items[style*='things/986.png'], .cage_items[style*='things/987.png'], .cage_items[style*='things/988.png'], .cage_items[style*='things/989.png'] {
        background-color: rgba(255, 43, 43, 0.25) !important;}
          /* ПАДАЛЬ, ГНИЛЬ */
        .cage_items[style*='things/44.png'], .cage_items[style*='things/180.png'] {
        background-color: rgba(255, 43, 43, 0.25) !important;}
          /* МОХ (испорченный) */
        .cage_items[style*='things/77.png'] {
        background-color: rgba(255, 43, 43, 0.25) !important;}
          /* МУСОР */
        .cage_items[style*='things/7801.png'], .cage_items[style*='things/7802.png'], .cage_items[style*='things/7803.png'], .cage_items[style*='things/7804.png'], .cage_items[style*='things/7805.png'], .cage_items[style*='things/7806.png'] {
        background-color: rgba(255, 43, 43, 0.25) !important;}`
      $('#cstmItmStyle').append(cstmItmMusor);
    }
  }

  // Луковые колечьки

  if (globals['phoneFightPanel']) { // Панелька боережима для телефонщиков
    let dangerModes = $('input[value="T+1"], input[value="T+2"], input[value="T+3"]').clone();
    $('input[value="T+1"], input[value="T+2"], input[value="T+3"]').remove();
    $('#fightLog').after(dangerModes);
    if ($('#fteams-wrap').length === 0) { // Проверка на наличие модифицированного БР
      // Если элемента нет, меняем стиль окна бр
      $('#fightPanel').css('height', 'auto');
    }
    let fightPanelStyle = `
        <style id="fightPanelStyle">
        [value="T+1"] {
        position: relative;
        bottom: 0px;
        left: 0px;
        width: 65px !important;}
        [value="T+2"] {
        position: relative;
        bottom: 0px;
        left: 31px;
        width: 65px !important;}
        [value="T+3"] {
        position: relative;
        bottom: 0px;
        left: 62px;
        width: 65px !important;}
       .hotkey {
        margin-left: 15px;
        width: 40px;
        border-radius: 2px;}
        img#block {
        transform: scale(105%);
        position: relative;
        left: 5px;
        top: 1.8px;}
        </style>`
    $('head').append(fightPanelStyle);
  }

  // Френдли кетвар лучшая функция

  if (globals['friendlyCatWar']) {
    $('#fightPanel input[value="T+1"]').remove();
    $('#fightPanel input[value="T+2"]').remove();
    $('#fightPanel input[value="T+3"]').remove();
  }

  // Чупачупсеки

  if (globals['darkCatTooltip']) {
    let darkCss = `
        <style>
        span.cat_tooltip, span.cat_tooltip>a, span.cat_tooltip>u>a {
        color: #a2abb5c7 !important; }

        span.cat_tooltip {
        background: #1a1d22ed !important;
        border: #4f4f59 0.5px solid !important;
        filter: brightness(105%); }

        span.cat_tooltip>[src*="odoroj"] {
        filter: brightness(70%) contrast(90%); }

        span.cat_tooltip>span.online {
        filter: brightness(190%) contrast(50%) opacity(95%); }
        </style>`
    $('head').append(darkCss);
  }

  // Газеровочька

  if (globals['showButterflyBots']) {
    let butterflyCss = `<style>
          /* ОБЫЧНАЯ */
        img[src*='things/990.png'] {
        border: 15px solid rgba(255, 170, 0, .6); }

        ol.mouth>li>img[src*='things/990.png'] {
        border: none; }

        ol#itemList>li>img[src*='things/990.png'] {
        border: none; }

          /* КРАСИВАЯ */
        img[src*='things/991.png'] {
        border: 15px solid rgba(255, 170, 0, .6); }

        ol.mouth>li>img[src*='things/991.png'] {
        border: none; }

        ol#itemList>li>img[src*='things/991.png'] {
        border: none; }

          /* РЕДКАЯ */
        img[src*='things/992.png'] {
        border: 15px solid rgba(255, 170, 0, .6); }

        ol.mouth>li>img[src*='things/992.png'] {
        border: none; }

        ol#itemList>li>img[src*='things/992.png'] {
        border: none; }
        </style>`
    $('head').append(butterflyCss);
  }

  // Лимонадек

  if (globals['brightGameField']) {
    let brightCss = `
        <style>
        div#cages_div {
        opacity: 1 !important; }
        </style>`
    $('head').append(brightCss);
  }

  // Чокопайчеки

  if (globals['deleteFPTitles']) {
    let fptitlesCss = `
        <style>
        div#fightPanel input.hotkey:hover {
        pointer-events: none;
        }
        </style>`
    $('head').append(fptitlesCss);

  }
}

// ...
// ...
// ...

function myCat() {
  if (globals['boneCorrectTimer']) {
    let boneCorrectDiv = `
        <div id="timer">
        <i>(c) CWScript</i><b>Костоправы</b><div id="timerMain">
        <input type="number" id="days" min="0" value='0' placeholder="Days" class="templateInputs">
        <label for="days">Введите дни</label><br>
        <input type="number" id="hours" min="0" value='0' max="23" placeholder="Hours" class="templateInputs">
        <label for="hours">Введите часы</label><br>
        <input type="number" id="minutes" min="0" value='0' max="59" placeholder="Minutes" class="templateInputs">
        <label for="minutes">Введите минуты</label><br></div>
        <div id="buttons"> <!-- новый div для кнопок -->
        <button id="start" class="boneCorrectBtns">Запустить таймер</button> <button id="reset" class="boneCorrectBtns">Отменить таймер</button>
        </div>
        <span id="message"></span>
        </div>`

    function toggleBoneTimer() {
      $('#timer').slideToggle();
    }
    let toggleButton = $('<button id="toggleBoneCorrectButton" type="button">Калькулятор костоправов</button>').click(toggleBoneTimer);
    appendToElementOrPrependFallback('#pr', '#education-show', toggleButton);
    appendToElementOrPrependFallback('#pr', '#education-show', boneCorrectDiv);
    let cssBoneCorrect = `
        <style>
        div#timer>b {
        border: 3px solid var(--brdrClr1);
        display: block;
        text-align: center;
        font-size: 23px;
        padding: 10px;
        padding-top: 21px;
        padding-bottom: 16px;
        margin-top: -22px;
        letter-spacing: 15px;
        text-transform: uppercase; }

        div#timer {
        border: 3px solid var(--brdrClr1);
        margin: 5px 0;
        background-color: var(--bckgClr1);
        color: var(--txtClr1);
        font-family: Montserrat; }

        div#timer>i {
        display: block;
        text-align: right;
        padding-top: 5px;
        padding-right: 10px;
        font-size: 11px; }

        input.templateInputs {
        background-color: var(--bckgClr3);
        color: var(--txtClr3);
        border: 1px solid var(--brdrClr3);
        font-family: Verdana;
        font-size: .9em;
        width: 50px;
        margin-left: 10px;
        margin-bottom: 5px; }

        button.boneCorrectBtns, #toggleBoneCorrectButton {
        background-color: var(--bckgClr3);
        color: var(--txtClr3);
        border: 1px solid var(--brdrClr3);
        font-family: Verdana;
        font-size: .9em;
        margin: 0 1em;
        display: inline-block; }

        button.boneCorrectBtns:hover, #toggleBoneCorrectButton:hover {
        border: 1px solid var(--brdrClr2); }

        div#timerMain {
        max-height: 140px;
        overflow: auto;
        background-color: var(--bckgClr2);
        color: var(--txtClr2);
        padding: 7px;
        padding-bottom: 1px; }

        div#buttons {
        border-top: 3px solid var(--brdrClr1);
        padding-top: 5px;
        padding-bottom: 5px;
        text-align: center; }

        span#message {
        display: block;
        text-align: center !important; }
        </style>`
    $('head').append(cssBoneCorrect);
    if (globals['toggleBoneTimer']) {
      $('#timer').hide();
    }
  }
}

// ...
// ...
// ...

function all() {
  function addFont() {
    let link = document.createElement('link');
    link.href = 'https://fonts.googleapis.com/css?family=Montserrat';
    link.rel = 'stylesheet';
    document.head.appendChild(link);
    if (!globals['cwscriptDarkTheme']) {
      let cssDlyaCWScripta = `
        <style id="cssPalette">
        html {
        --scrlClr1: #776c5f;
        --scrlClr2: #463E33;
        --hrClr1: #463E3330;
        --txtClr1: #C8C0BE;
        --txtClr2: #181510;
        --txtClr3: #fff;
        --brdrClr1: #BD7E5C;
        --brdrClr2: #ff0;
        --brdrClr3: #000;
        --bckgClr1: #463E33;
        --bckgClr2: #918474;
        --bckgClr3: #333;
        --bckgClr4: #463E3350;
        --bckgClr5: #DBAEFF;
        --bckgClr6: #BB8DEB; }
        </style>`
      $('head').append(cssDlyaCWScripta);
    }
    if (globals['cwscriptDarkTheme']) {
      let cssDlyaCWScripta = `
        <style id="cssPalette">
        html {
        --scrlClr1: #1f1f1f;
        --scrlClr2: #383838;
        --hrClr1: #29292930;
        --txtClr1: #b9b9b9;
        --txtClr2: #070707;
        --txtClr3: #fff;
        --brdrClr1: #888;
        --brdrClr2: #ff0;
        --brdrClr3: #000;
        --bckgClr1: #282828;
        --bckgClr2: #5e5e5e;
        --bckgClr3: #333;
        --bckgClr4: #15151550;
        --bckgClr5: #DBAEFF;
        --bckgClr6: #BB8DEB;}
        </style>`
      $('head').append(cssDlyaCWScripta);
    }
  };
  addFont();

  // Wenomechainasama
  // Tumajarbisaun

  if (globals['dontReadenLS']) {
    function updateDontReadCounter() {
      let count = localStorage.getItem('dontReadenCount');
      if (count > 0) {
        if ($('#newls').length) {
          if ($('#dontReadCounter').length) {
            $('#dontReadCounter').text('(' + count + ')');
          }
          else {
            let counter = $('<span id="dontReadCounter">(' + count + ')</span>');
            $('#newls').after(counter);
          }
        }
        else if ($('div.kn6').length) {
          if ($('#dontReadCounter').length) {
            $('#dontReadCounter').text('(' + count + ')');
          }
          else {
            let counter = $('<span id="dontReadCounter">(' + count + ')</span>');
            $('div.kn6').after(counter);
          }
        }
      }
      else {
        $('#dontReadCounter').remove();
      }
      $(document).ready(function() {
        $('#dontReadCounter').click(function(e) {
          e.preventDefault();
        });
        $('#dontReadCounter').click();
      });
    }

    setInterval(updateDontReadCounter, 1000);

    let cssDontReadLS = `
        <style>
        .dontReadButton:hover {
        border: 1px solid var(--brdrClr2);
        }
        .dontReadButton {
        background-color: var(--bckgClr3);
        color: var(--txtClr3);
        border: 1px solid var(--brdrClr3);
        font-family: Verdana;
        font-size: .9em;
        }
        #dontReadCounter {
        background-color: var(--bckgClr5);
        font-weight: 700;
        color: var(--brdrClr3);
        text-decoration: none !important;
        pointer-events: none !important;
        }
        </style>`
    $('head').append(cssDontReadLS);
  }

  // Wifenlooof

  function updateClock() {
    setInterval(() => {
      const now = new Date();

      let time;
      if (globals['isClockMoscow']) {
        time = now.toLocaleTimeString('ru-RU', {
          timeZone: 'Europe/Moscow',
          hour12: false
        });
      }
      else {
        time = now.toLocaleTimeString('ru-RU', {
          hour12: false
        });
      }

      $('#clock').text(time);

      if (globals['isDateShow']) {
        updateDate(now);
      }
      else {
        $('#date').text('');
      }
    }, 1000);
  }

  function updateDate(now) {
    const daysOfWeek = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
    const monthsOfYear = ['Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря'];

    const date = daysOfWeek[now.getDay()] + ', ' + now.getDate() + ' ' + monthsOfYear[now.getMonth()];

    $('#date').text(date);
  }

  $(document).ready(function() {
    $('#inGameClock').prop('checked', globals['inGameClock']);
    $('#deviceTime').prop('checked', !globals['isClockMoscow']);
    $('#moscowTime').prop('checked', globals['isClockMoscow']);
    $('#showDate').prop('checked', globals['isDateShow']);

    $('#inGameClock').on('change', function() {
      setSettings('inGameClock', this.checked);
      updateClock();
    });

    $('input[name="timeSource"]').on('change', function() {
      setSettings('isClockMoscow', this.id === 'moscowTime');
    });

    $('#showDate').on('change', function() {
      setSettings('isDateShow', this.checked);
    });

    $('.cs-chapter').on('click', function() {
      updateClock();
    });

    updateClock();
  });

  // Eselifterbraun

  if (globals['boneCorrectTimer']) {
    let timerId;

    function updateTimerMessage() {
      let timerStart = localStorage.getItem('timerStart');
      let timerDuration = localStorage.getItem('timerDuration');
      if (timerStart && timerDuration) {
        let timeLeft = timerDuration - (Date.now() - timerStart);
        if (timeLeft > 0) {
          let secondsLeft = Math.floor(timeLeft / 1000);
          let minutesLeft = Math.floor(secondsLeft / 60);
          let hoursLeft = Math.floor(minutesLeft / 60);
          let daysLeft = Math.floor(hoursLeft / 24);
          secondsLeft %= 60;
          minutesLeft %= 60;
          hoursLeft %= 24;
          $('#message').text(`До окончания таймера осталось: ${daysLeft} дней, ${hoursLeft} часов, ${minutesLeft} минут, ${secondsLeft} секунд`);
        }
        else {
          $('#message').text('Таймер истёк, Вы можете снять костоправ!');
          localStorage.removeItem('timerStart');
          localStorage.removeItem('timerDuration');
        }
      }
      else {
        $('#message').text('');
      }
    }
    $('#start').click(function() {
      if (timerId) {
        clearTimeout(timerId);
      }
      let days = parseInt($('#days').val()) || 0;
      let hours = parseInt($('#hours').val()) || 0;
      let minutes = parseInt($('#minutes').val()) || 0;
      let time = ((days * 24 + hours) * 60 + minutes) * 60 * 1000;
      timerId = setTimeout(function() {
        alert('Таймер истёк, Вы можете снять костоправ!');
        localStorage.removeItem('timerStart');
        localStorage.removeItem('timerDuration');
        $('#message').text('Таймер истёк, Вы можете снять костоправ!');
      }, time);
      localStorage.setItem('timerStart', Date.now());
      localStorage.setItem('timerDuration', time);
      updateTimerMessage();
    });
    $('#reset').click(function() {
      clearTimeout(timerId);
      timerId = null;
      $('#days').val('');
      $('#hours').val('');
      $('#minutes').val('');
      localStorage.removeItem('timerStart');
      localStorage.removeItem('timerDuration');
      $('#message').text('');
    });
    setInterval(updateTimerMessage, 1000);
    let timerStart = localStorage.getItem('timerStart');
    let timerDuration = localStorage.getItem('timerDuration');
    if (timerStart && timerDuration) {
      let timeLeft = timerDuration - (Date.now() - timerStart);
      if (timeLeft > 0) {
        timerId = setTimeout(function() {
          alert('Таймер истёк, Вы можете снять костоправ!');
          localStorage.removeItem('timerStart');
          localStorage.removeItem('timerDuration');
          $('#message').text('Таймер истёк, Вы можете снять костоправ!');
        }, timeLeft);
      }
      else {
        alert('Таймер истёк, Вы можете снять костоправ!');
        localStorage.removeItem('timerStart');
        localStorage.removeItem('timerDuration');
      }
    }
    updateTimerMessage();
  }

  // Anweculbetugtbaby

  if (globals['hideWoundWarning']) {
    setTimeout(function() {
      $('#warningAboutWound').remove
    }, 1000);
  };

  // Aslonskysrblu

  if (globals['nightLagsWarning']) {
    nightLagsWarning();
  }

  // Yuaksoinocenow

  $('#clearDontReadButton').on('click', function() {
    for (let i = 0; i < localStorage.length; i++) {
      let key = localStorage.key(i);
      if (key.startsWith('message')) {
        localStorage.removeItem(key);
      }
    }
    updateDontReadCounter();
    $('#messList tr').removeClass('dontReaden');
  });
}

// ...
// ...
// ...

function site() {
  if (globals['hideWoundWarning']) {
    $('#warningAboutWound').remove();
  };
}