<!--HTML-->
<!-- Основной контент банка -->
<div class="fon">
<div class="bac">
<div class="namet">
</div>
</div>
</div>
<!-- Основной контент банка -->
<div class="bk-main-all">
<div class="bk-main-all-left">
<div class="bk-main-all-left-tit">заработать</div>
<div class="bk-main-all-line">
<p>каждые 100 сообщений <span>100</span><button class="earn-button" data-type="messages-100">+</button></p>
<p>каждые 500 сообщений <span>300</span><button class="earn-button" data-type="messages-500">+</button></p>
<p>каждые 100 репутации <span>100</span><button class="earn-button" data-type="repa-100">+</button></p>
<p>каждые 100 позитива <span>50</span><button class="earn-button" data-type="positive-100">+</button></p>
<p>за попадание в таблицу (любая номинация) <span>100</span><button class="earn-button" data-type="tablica-win">+</button></p>
<p>заявка на нужного <span>150</span><button class="earn-button" data-type="nyzn">+</button></p>
<p>заявка в хочу видеть <span>50</span><button class="earn-button" data-type="hochy-videt">+</button></p>
<p>привести друга на форум (после принятия, вам и другу) <span>1000</span><button class="earn-button" data-type="drug">+</button></p>
<p>отдать свою внешность под дубль (получаете вы и тот, кто забрал внешность, только после принятия) <span>2000</span><button class="earn-button" data-type="dubl-vneha">+</button></p>
<p>прийти по заявке из нужных (получает заказчик и пришедший только после принятия) <span>500</span><button class="earn-button" data-type="zaivka-nyz">+</button></p>
<p>помощь с графикой/графический подарок (1 единица: аватар, эпиграф, гиф и тп) <span>100</span><button class="earn-button" data-type="grafika">+</button></p>
<p>участие в конкурсе <span>100</span><button class="earn-button" data-type="konkurs">+</button></p>
<p>пост в ленте соцсетей <span>50</span><button class="earn-button" data-type="post-seti">+</button></p>
<p>1 реклама <span>10</span><button class="earn-button" data-type="reklama-1">+</button></p>
<p>100 реклам <span>2000</span><button class="earn-button" data-type="reklama-100">+</button></p>
<p>одно нажатие рпг-топа <span>50</span><button class="earn-button" data-type="rgp-top">+</button></p>
<p>оставить 1000 реклам за все время <span>3000</span><button class="earn-button" data-type="reklama-1000">+</button></p>
<p>наш баннер в подписи на рено/маяке/лиле <span>1000</span><button class="earn-button" data-type="banner-reno">+</button></p>
<p>открытие эпизода (каждому из участников эпизода) <span>100</span><button class="earn-button" data-type="epizod-otkr">+</button></p>
<p>каждая 1к символов в посте <span>100</span><button class="earn-button" data-type="post-simvol">+</button></p>
<p>каждый смс пост <span>50</span><button class="earn-button" data-type="sms-post">+</button></p>
<p>ответ на пост в течение суток (считается от последнего поста партнера) <span>150</span><button class="earn-button" data-type="otvet-sutki">+</button></p>
<p>закрытие эпизода (каждому из участников эпизода) <span>500</span><button class="earn-button" data-type="zakr-ep">+</button></p>
<p>пополнение фонда форума <span>10</span><button class="earn-button" data-type="fond">+</button></p>
<p>последний добил счет командного зачета до 100% <span>1000</span><button class="earn-button" data-type="komanda-posledn">+</button></p>
<p>открытие нового флуда <span>250</span><button class="earn-button" data-type="flud-nov">+</button></p>
<p>последнее сообщение во флуде <span>350</span><button class="earn-button" data-type="flud-soo">+</button></p>
<p>бронирование дома или квартиры <span>100</span><button class="earn-button" data-type="bron-dom">+</button></p>
<p>нашли баг в дизайне <span>200</span><button class="earn-button" data-type="bag-diz">+</button></p>
<p>принесли в тему амс ссылки на заявки ушедших игроков, эпизоды и тп <span>20</span><button class="earn-button" data-type="cistka">+</button></p>
</div>
</div>
<div class="bk-main-all-right">
<div class="bk-main-all-left-tit">потратить</div>
<div class="bk-main-all-line">
<p>
выкупить имя <span>550</span
><button class="earn-button" data-type="vikup-imya">+</button>
</p>
<p>
выкупить фамилию <span>550</span
><button class="earn-button" data-type="vikup-familia">+</button>
</p>
<p>
выкупить сокращение имени/прозвища <span>400</span
><button class="earn-button" data-type="vikup-sokr">+</button>
</p>
<p>
выкупить внешность для нужного/твинка на 2 недели <span>1000</span
><button class="earn-button" data-type="vikup-vheh-2week">+</button>
</p>
<p>
выкупить внешность для нужного/твинка на 4 недели <span>2000</span
><button class="earn-button" data-type="vikup-vheh-4week">+</button>
</p>
<p>
реклама с нужным персонажем на 2 недели (наша графика) <span>1000</span
><button class="earn-button" data-type="reklama-hashgraf">+</button>
</p>
<p>
реклама с нужным персонажем на 2 недели (ваша графика) <span>700</span
><button class="earn-button" data-type="reklama-vashgraf">+</button>
</p>
<p>
передать послание или привет в новостях, подкинуть сплетню или мем <span>400</span
><button class="earn-button" data-type="poslanie-novosti">+</button>
</p>
<p>
постовой бан на час (закрытие всех тем, кроме игровых и организации) <span>100</span
><button class="earn-button" data-type="post-ban">+</button>
</p>
<p>
постовой бан на сутки (закрытие всех тем, кроме игровых и организации) <span>2000</span
><button class="earn-button" data-type="postban-1">+</button>
</p>
<p>
сменить персонажа <span>500</span
><button class="earn-button" data-type="smen-pers">+</button>
</p>
<p>
сменить имя/фамилию <span>500</span
><button class="earn-button" data-type="smen-imya">+</button>
</p>
<p>
сменить внешность <span>500</span
><button class="earn-button" data-type="smen-vneh">+</button>
</p>
<p>
купон на удвоение банка за рекламу на 2 недели <span>1000</span
><button class="earn-button" data-type="kupon-bank2">+</button>
</p>
<p>
купон на утроение банка за посты на месяц <span>2000</span
><button class="earn-button" data-type="kupon-bankx3">+</button>
</p>
<p>
купон на удвоение всех позиций в банке на неделю <span>1500</span
><button class="earn-button" data-type="kupon-bank1week">+</button>
</p>
<p>
купон на удвоение всех позиций в банке на месяц <span>3000</span
><button class="earn-button" data-type="kupon-bank4week">+</button>
</p>
<p>
купон на общий банк с партнером <span>5000</span
><button class="earn-button" data-type="kupon-bankpartner">+</button>
</p>
<p>
купон на спасение от чистки <span>2000</span
><button class="earn-button" data-type="kupon-chistka">+</button>
</p>
<p>
купон на любимый стикер пак в смайлы форума <span>1000</span
><button class="earn-button" data-type="kupon-stiker">+</button>
</p>
<p>
купон на гейм — мастера (нпс) в сюжет <span>1500</span
><button class="earn-button" data-type="kupon-gm">+</button>
</p>
<p>
купон на попадание в таблицу (активист или пост недели) <span>1500</span
><button class="earn-button" data-type="kupon-tabl">+</button>
</p>
<p>
купон на пропуск хода в квесте <span>1000</span
><button class="earn-button" data-type="kupon-kvest">+</button>
</p>
<p>
купон на повторный бросок дайса <span>500</span
><button class="earn-button" data-type="kupon-daise">+</button>
</p>
<p>
купон на добавление своего жилья в риэлторскую тему <span>1000</span
><button class="earn-button" data-type="kupon-dom ">+</button>
</p>
<p>
реклама с нужным персонажем бессрочно до прихода игрока <span>5000</span
><button class="earn-button" data-type="kupon-nyzbesr">+</button>
</p>
<p>
пропуск задания в конкурсе или день в дейликах/календаре <span>500</span
><button class="earn-button" data-type="kupon-konkurs">+</button>
</p>
</div>
</div>
</div>
<!-- Модальное окно -->
<div id="earnModal" class="modal">
<div class="modal-content">
<span class="close">×</span>
<div id="modalContent"></div>
</div>
</div>
<!-- Предварительный просмотр выбранных пунктов -->
<div id="selected-items-preview">
<div class="preview-empty">Выберите пункты для заработка</div>
</div>
<!-- Кнопка "Закончить" -->
<div style="text-align: center; margin: 30px 0">
<button id="finishBtn" class="finish-btn" style="display: none">Закончить</button>
</div>
<script>
document.addEventListener("DOMContentLoaded", function () {
console.log("DOMContentLoaded");
console.log(0);
// Данные для модальных окон
const modalData = {
"messages-100": {
"title": "каждые 100 сообщений",
"description": "Укажите количество раз, когда вы достигли 100 сообщений (например: 2 для 200 сообщений)",
"amount": 100,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"messages-500": {
"title": "каждые 500 сообщений",
"description": "Укажите количество раз, когда вы достигли 500 сообщений (например: 2)\n",
"amount": 300,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"repa-100": {
"title": "каждые 100 репутации",
"description": "Укажите количество раз, когда вы достигли 100 репутации (например: 2 для 200 репутации):",
"amount": 100,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"positive-100": {
"title": "каждые 100 позитива",
"description": "Укажите количество раз, когда вы достигли 100 позитива (например: 2 для 200 позитива)\n",
"amount": 50,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"tablica-win": {
"title": "за попадание в таблицу (любая номинация)",
"description": "Укажите ссылку на новости ",
"amount": 100,
"fields": [
{
"name": "url",
"label": "Ссылка на новости ",
"type": "url",
"required": true
}
]
},
"nyzn": {
"title": "заявка на нужного",
"description": "Укажите ссылку на заявку (можно добавить несколько)\n",
"amount": 150,
"fields": [
{
"name": "url",
"label": "Ссылка на заявку",
"type": "url",
"required": true
}
]
},
"hochy-videt": {
"title": "заявка в хочу видеть",
"description": "Укажите ссылку на заявку (можно добавить несколько)\n",
"amount": 50,
"fields": [
{
"name": "url",
"label": "Ссылка на заявку",
"type": "url",
"required": true
}
]
},
"drug": {
"title": "привести друга на форум (после принятия, вам и другу)",
"description": "Укажите ссылку на друга и подтверждение (можно добавить несколько )\n",
"amount": 1000,
"fields": [
{
"name": "url",
"label": "Ссылка на профиль друга",
"type": "url",
"required": true
}
]
},
"dubl-vneha": {
"title": "отдать свою внешность под дубль (получаете вы и тот, кто забрал внешность, только после принятия)",
"description": "Укажите ссылку на профиль того человека, кому отдали дубль внешности ",
"amount": 2000,
"fields": [
{
"name": "url",
"label": "Ссылка на профиль ",
"type": "url",
"required": true
}
]
},
"zaivka-nyz": {
"title": "прийти по заявке из нужных (получает заказчик и пришедший только после принятия)",
"description": "укажите ссылку на сообщение, по заявке которой вы пришли, и ссылку на принятую анкету",
"amount": 500,
"fields": [
{
"name": "url",
"label": "Укажите ссылку (можно несколько)",
"type": "text",
"required": true
}
]
},
"grafika": {
"title": "помощь с графикой/графический подарок (1 единица: аватар, эпиграф, гиф и тп)",
"description": "Укажите ссылку на ваш подарок + какое количество графики сделали",
"amount": 100,
"fields": [
{
"name": "url",
"label": "Ссылка на доказательство ",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество графики",
"type": "number",
"required": true
}
]
},
"konkurs": {
"title": "участие в конкурсе",
"description": "Укажите ссылку на участие в конкурсе (можно добавить несколько)\n",
"amount": 100,
"fields": [
{
"name": "url",
"label": "Ссылка на участие ",
"type": "url",
"required": true
}
]
},
"post-seti": {
"title": "пост в ленте соцсетей",
"description": "Укажите ссылки на посты (можно указывать несколько ссылок в одно после) + количество постов (например: для взятия награды за три поста, ставьте цифру 3)",
"amount": 50,
"fields": [
{
"name": "url",
"label": "Ссылки на посты (можно добавить несколько)",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество постов",
"type": "number",
"required": true
}
]
},
"reklama-1": {
"title": "1 реклама",
"description": "Укажите количество оставленных реклам\n",
"amount": 10,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"reklama-100": {
"title": "100 реклам",
"description": "Укажите ссылки от начала первого поста и до конца ( можно указывать несколько ссылок в одно поле) ",
"amount": 2000,
"fields": [
{
"name": "url",
"label": "Ссылки на от и до",
"type": "url",
"required": true
}
]
},
"rgp-top": {
"title": "одно нажатие рпг-топа",
"description": "Можно забирать только раз в сутки ",
"amount": 50,
"fields": []
},
"reklama-1000": {
"title": "оставить 1000 реклам за все время",
"description": "Забирается разово ",
"amount": 3000,
"fields": []
},
"banner-reno": {
"title": "наш баннер в подписи на рено/маяке/лиле",
"description": "Выдается разово ",
"amount": 1000,
"fields": [
{
"name": "url",
"label": "Ссылка на скрин доказательства",
"type": "url",
"required": true
}
]
},
"epizod-otkr": {
"title": "открытие эпизода (каждому из участников эпизода)",
"description": "Укажите ссылки на эпизод или эпизоды + количество. Смс эпизоды тоже считаются. ",
"amount": 100,
"fields": [
{
"name": "count",
"label": "Количество",
"type": "number",
"required": true
}
]
},
"post-simvol": {
"title": "каждая 1к символов в посте",
"description": "Укажите ссылку на пост (можно добавить несколько) + количество символов (например: у вас 8000 символов в посте, указывайте просто цифру 8 и тп.)",
"amount": 100,
"fields": [
{
"name": "url",
"label": "Ссылка на пост ",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество символов ",
"type": "number",
"required": true
}
]
},
"sms-post": {
"title": "каждый смс пост",
"description": "Укажите ссылку на полный эпизод + количество смс постов в нем, написанное вами. Если забираете по одному посту, то указывайте актуальные ссылки на посты. ",
"amount": 50,
"fields": [
{
"name": "url",
"label": "Укажите ссылки ",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество постов ",
"type": "number",
"required": true
}
]
},
"otvet-sutki": {
"title": "ответ на пост в течение суток (считается от последнего поста партнера)",
"description": "Укажите ссылку на пост ",
"amount": 150,
"fields": [
{
"name": "url",
"label": "Ссылка на пост ",
"type": "url",
"required": true
}
]
},
"zakr-ep": {
"title": "закрытие эпизода (каждому из участников эпизода)",
"description": "Укажите ссылки на эпизод или эпизоды + количество\n",
"amount": 500,
"fields": [
{
"name": "url",
"label": "Ссылка на эпизод (можно добавить несколько):",
"type": "text",
"required": true
},
{
"name": "count",
"label": "Количество закрытых эпизодов",
"type": "text",
"required": true
}
]
},
"fond": {
"title": "пополнение фонда форума",
"description": "сумма увеличивается в 10 раз от количества кредитов",
"amount": 10,
"fields": [
{
"name": "url",
"label": "Ссылка на скрин с доказательством ",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество кредитов, которое поплнили ",
"type": "number",
"required": true
}
]
},
"komanda-posledn": {
"title": "последний добил счет командного зачета до 100%",
"description": "Укажи ссылку на пост с доказательством ",
"amount": 1000,
"fields": [
{
"name": "url",
"label": "Ссылка на пост ",
"type": "url",
"required": true
}
]
},
"flud-nov": {
"title": "открытие нового флуда",
"description": "Укажите ссылку на тему (можно добавить несколько)\n",
"amount": 250,
"fields": [
{
"name": "url",
"label": "Ссылка на тему",
"type": "url",
"required": true
}
]
},
"flud-soo": {
"title": "последнее сообщение во флуде",
"description": "Укажите ссылку на пост ",
"amount": 350,
"fields": [
{
"name": "url",
"label": "Ссылка на пост ",
"type": "url",
"required": true
}
]
},
"bron-dom": {
"title": "бронирование дома или квартиры",
"description": "Укажите ссылку на пост с бронированием ",
"amount": 100,
"fields": [
{
"name": "url",
"label": "Ссылка на пост",
"type": "url",
"required": true
}
]
},
"bag-diz": {
"title": "нашли баг в дизайне",
"description": "Обязательно указывайте ссылку на скрин или пост, где увидели ошибку ",
"amount": 200,
"fields": [
{
"name": "url",
"label": "Укажите ссылку на скрин или пост (можно несколько)",
"type": "text",
"required": true
}
]
},
"cistka": {
"title": "принесли в тему амс ссылки на заявки ушедших игроков, эпизоды и тп",
"description": "Сумма считается за каждую принесенную ссылку. Не забывайте указать ссылку на сообщение, где вы указали ссылки + количество ссылок. ",
"amount": 20,
"fields": [
{
"name": "url",
"label": "Ссылка на пост в теме амс",
"type": "url",
"required": true
},
{
"name": "count",
"label": "Количество ссылок",
"type": "number",
"required": true
}
]
},
"vikup-imya": {
"title": "выкупить имя",
"description": "Укажите имя, которое хотите выкупить ",
"amount": -550,
"fields": [
{
"name": "imya",
"label": "Имя ",
"type": "text",
"required": true
}
]
},
"vikup-familia": {
"title": "выкупить фамилию",
"description": "Укажите фамилию, которое хотите выкупить\n",
"amount": -550,
"fields": [
{
"name": "familia",
"label": "Фамилия",
"type": "text",
"required": true
}
]
},
"vikup-sokr": {
"title": "выкупить сокращение имени/прозвища",
"description": "Укажите ваше сокращение или прозвище ",
"amount": -400,
"fields": [
{
"name": "sokr",
"label": "Имя/прозвище ",
"type": "text",
"required": true
}
]
},
"vikup-vheh-2week": {
"title": "выкупить внешность для нужного/твинка на 2 недели",
"description": "Укажите конкретную внешность \n",
"amount": -1000,
"fields": [
{
"name": "appearance_name ",
"label": "Имя внешности",
"type": "text",
"required": true
}
]
},
"vikup-vheh-4week": {
"title": "выкупить внешность для нужного/твинка на 4 недели",
"description": "Укажите конкретную внешность\n",
"amount": -2000,
"fields": [
{
"name": "appearance_name",
"label": "Имя внешности",
"type": "text",
"required": true
}
]
},
"reklama-hashgraf": {
"title": "реклама с нужным персонажем на 2 недели (наша графика)",
"description": "Укажите ссылку на вашу заявку ",
"amount": -1000,
"fields": [
{
"name": "url",
"label": "Ссылка на заявку нужного",
"type": "url",
"required": true
}
]
},
"reklama-vashgraf": {
"title": "реклама с нужным персонажем на 2 недели (ваша графика)",
"description": "Укажите ссылку на вашу рекламу. Старайтесь придерживаться размеров наших реклам (450x551 пикселей), с указанием названия форума + укажите ссылку на заявку нужного, через запятую в одно поле ",
"amount": -700,
"fields": [
{
"name": "url",
"label": "Ссылка на вашу рекламу и нужного",
"type": "url",
"required": true
}
]
},
"poslanie-novosti": {
"title": "передать послание или привет в новостях, подкинуть сплетню или мем",
"description": "Укажите свое послание, привет, сплетню или ссылку на мем ",
"fields": [
{
"name": "opisanie",
"label": "Ваше описание или ссылка",
"type": "textarea",
"required": true
}
],
"amount": -400
},
"post-ban": {
"title": "постовой бан на час (закрытие всех тем, кроме игровых и организации)",
"description": "Цена идет 100$ за один час, указывайте количества часов, на сколько вам нужно ",
"fields": [
{
"name": "count",
"label": "Количество часов ",
"type": "number",
"required": true
}
],
"amount": -100
},
"postban-1": {
"title": "постовой бан на сутки (закрытие всех тем, кроме игровых и организации)",
"description": "Укажите количество суток ",
"fields": [
{
"name": "count",
"label": "Количество суток",
"type": "text",
"required": true
}
],
"amount": -2000
},
"smen-pers": {
"title": "сменить персонажа ",
"description": "Первый раз бесплатно, если не начата игра",
"fields": [],
"amount": -500
},
"smen-imya": {
"title": "сменить имя/фамилию",
"description": " Первый раз бесплатно, если не начата игра",
"fields": [],
"amount": -500
},
"smen-vneh": {
"title": "сменить внешность",
"description": "Первый раз бесплатно, если не начата игра",
"fields": [],
"amount": -500
},
"kupon-bank2": {
"title": "купон на удвоение банка за рекламу на 2 недели ",
"description": "Можно приобретать раз в месяц. Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.",
"fields": [],
"amount": -1000
},
"kupon-bankx3": {
"title": "купон на утроение банка за посты на месяц",
"description": "Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.",
"fields": [],
"amount": -2000
},
"kupon-bank1week": {
"title": "купон на удвоение всех позиций в банке на неделю",
"description": "Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.",
"fields": [],
"amount": -1500
},
"kupon-bank4week": {
"title": "купон на удвоение всех позиций в банке на месяц",
"description": "Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.",
"fields": [],
"amount": -3000
},
"kupon-bankpartner": {
"title": "купон на общий банк с партнером",
"description": "Используется только для двоих, оба партнера должны быть в лз друг у друга, при удалении партнера/смене партнера купон аннулируется.",
"fields": [
{
"name": "url",
"label": "Ссылка на партнера ",
"type": "url",
"required": true
}
],
"amount": -5000
},
"kupon-chistka": {
"title": "купон на спасение от чистки",
"description": "Можно купить 1 раз за 2 чистки. Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.\n",
"fields": [],
"amount": -2000
},
"kupon-stiker": {
"title": "купон на любимый стикер пак в смайлы форума",
"description": "Видеостикеры, стикеры тг, эмоджи премиум статичные или гиф. Если вы хотите купить купон другу/партнеру и т.п, то приходите в тему «Связь с АМС» со ссылкой на данную трату.\n",
"fields": [],
"amount": -1000
},
"kupon-gm": {
"title": "купон на гейм — мастера (нпс) в сюжет",
"description": "Действует на один эпизод. За подробностями приходите в тему «Связь с АМС» .",
"fields": [],
"amount": -1500
},
"kupon-tabl": {
"title": "купон на попадание в таблицу (активист или пост недели)",
"description": "Можете выбрать себя, друга и т.п. ",
"fields": [
{
"name": "desc",
"label": "Ссылка на профиль и укажите категорию куда хотите попасть ",
"type": "textarea",
"required": true
}
],
"amount": -1500
},
"kupon-kvest": {
"title": "купон на пропуск хода в квесте ",
"description": "Можно использовать только 1 раз за весь квест. ",
"fields": [
{
"name": "url",
"label": "Укажите ссылку на квест",
"type": "url",
"required": true
}
],
"amount": -1000
},
"kupon-daise": {
"title": "купон на повторный бросок дайса",
"description": "Можно использовать 2 раза за весь квест. ",
"fields": [],
"amount": -500
},
"kupon-dom ": {
"title": "купон на добавление своего жилья в риэлторскую тему",
"description": "Описание дома по шаблону из темы кидайте в тему «Связь с АМС» .\n",
"fields": [],
"amount": -1000
},
"kupon-nyzbesr": {
"title": "реклама с нужным персонажем бессрочно до прихода игрока ",
"description": "Наша графика. Не забывайте указать ссылку на пост с нужным. ",
"fields": [
{
"name": "url",
"label": "Ссылка на нужного",
"type": "url",
"required": true
}
],
"amount": -5000
},
"kupon-konkurs": {
"title": "пропуск задания в конкурсе или день в дейликах/календаре",
"description": "Укажите ссылку на конкурс. Можно использовать до трех раз за один конкурс. И укажите за какой день пропускаете или какое задание. ",
"fields": [
{
"name": "desc",
"label": "Ссылка на конкурс и описание ",
"type": "textarea",
"required": true
}
],
"amount": -500
}
};
console.log("modalData", modalData);
// Переменные для отслеживания выбранных пунктов
let selectedItems = [];
let currentBalance = 0;
let initialBalance = 0;
// Функция для получения начального баланса из UserFld3
function getInitialBalance() {
try {
// Пытаемся получить значение UserFld3
if (typeof UserFld3 !== "undefined" && UserFld3) {
// Убираем пробелы и преобразуем в число
const cleanValue = UserFld3.toString().replace(/\s/g, "");
const balance = parseInt(cleanValue);
return isNaN(balance) ? 0 : balance;
}
} catch (e) {
console.log("UserFld3 не доступна:", e);
}
return 0;
}
// Функция для получения суммы по типу
function getAmountForType(type) {
// Сначала проверяем в modalData
if (modalData[type] && modalData[type].amount !== undefined) {
return modalData[type].amount;
}
// Fallback на базовые значения для совместимости
const amounts = {
"messages-100": 50,
"positivity-100": 20,
"reputation-100": 20,
"application-needed": 50,
"application-want": 25,
"take-player": 15,
"bring-friend": 45,
"come-by-application": 20,
advertisement: 5,
"advertisement-50": 350,
"filled-profile": 75,
"game-post": 50,
"online-5hours": 70,
"flood-topic": 10,
"contest-participation": 20,
// Суммы для раздела "потратить"
"buyout-needed-appearance": -300,
"buyout-self-appearance": -400,
"needed-advertisement": -350,
"forum-gif": -100,
"custom-avatar": -1000
};
return amounts[type] || 0;
}
console.log(1);
// Функция для добавления пункта в список
function addItem(type, details = "") {
console.log("type", type);
console.log("details", details);
const data = modalData[type];
console.log("data", data);
if (!data) return;
// Находим базовую сумму для этого пункта
const baseAmount = getAmountForType(type);
console.log("baseAmount", baseAmount);
// Проверяем, есть ли количество в details
let amount = baseAmount;
let displayName = data.title;
// Ищем количество в details для определенных типов (динамически определяем по полям)
const hasQuantityField = data.fields && data.fields.some(field => field.name === "count");
if (hasQuantityField && details) {
const countMatch = details.match(/:\s*(\d+)$/i);
console.log("countMatch", countMatch);
if (countMatch) {
const count = parseInt(countMatch[1]);
console.log("count", count);
if (count > 0) {
amount = baseAmount * count;
displayName = data.title + " (x" + count + ")";
console.log("amount", amount);
console.log("displayName", displayName);
}
}
}
// Обработка множественных значений для типов с полями (кроме количественных)
const hasMultipleFields = data.fields && data.fields.length > 0 &&
!data.fields.some(field => field.name === "count") &&
!data.fields.some(field => field.type === "textarea");
if (hasMultipleFields && details) {
// Ищем количество значений в details
const fieldMatch = details.match(/:\s*([^,]+(?:,\s*[^,]+)*)/);
if (fieldMatch) {
const values = fieldMatch[1]
.split(",")
.map((item) => item.trim())
.filter((item) => item.length > 0);
if (values.length > 0) {
amount = baseAmount * values.length;
displayName = data.title + " (x" + values.length + ")";
}
}
}
selectedItems.push({
name: displayName,
amount: amount,
details: details
});
currentBalance += amount;
updatePreview();
}
function addField(fieldName) {
var container = document.getElementById(fieldName + "_container");
var fieldCount = container.children.length;
var newFieldRow = document.createElement("div");
newFieldRow.className = "field-row";
var input = document.createElement("input");
input.type = "text";
input.id = fieldName + "_" + fieldCount;
input.name = fieldName;
var removeBtn = document.createElement("button");
removeBtn.type = "button";
removeBtn.className = "remove-field-btn";
removeBtn.innerHTML = "-";
removeBtn.onclick = function () {
container.removeChild(newFieldRow);
};
newFieldRow.appendChild(input);
newFieldRow.appendChild(removeBtn);
container.appendChild(newFieldRow);
}
function removeItem(index) {
if (index >= 0 && index < selectedItems.length) {
currentBalance -= selectedItems[index].amount;
selectedItems.splice(index, 1);
updatePreview();
}
}
function updatePreview() {
const previewContainer = document.getElementById("selected-items-preview");
const finishBtn = document.getElementById("finishBtn");
if (!previewContainer) return;
if (selectedItems.length === 0) {
previewContainer.innerHTML = '<div class="preview-empty">Выберите пункты для заработка</div>';
previewContainer.style.display = "none";
if (finishBtn) finishBtn.style.display = "none";
return;
}
previewContainer.style.display = "block";
if (finishBtn) finishBtn.style.display = "inline-block";
const earnings = selectedItems.filter((item) => item.amount > 0);
const expenses = selectedItems.filter((item) => item.amount < 0);
let previewHTML = '<div class="preview-header">выбранные пункты</div>';
let totalAmount = 0;
if (earnings.length > 0) {
previewHTML += '<div class="preview-section-title" style="color: var(--cl4);">Заработки:</div>';
earnings.forEach(function (item, index) {
totalAmount += item.amount;
previewHTML += '<div class="preview-item">';
previewHTML += '<div class="preview-item-header">';
previewHTML += '<span class="preview-item-number">' + (index + 1) + ".</span>";
previewHTML += '<span class="preview-item-name">' + item.name + "</span>";
previewHTML += '<span class="preview-item-amount" style="color: var(--cl4);">+' + item.amount + "</span>";
previewHTML += '<div class="preview-item-actions">';
previewHTML += '<button type="button" class="remove-item-btn" data-index="' + selectedItems.indexOf(item) + '">❌</button>';
previewHTML += "</div>";
previewHTML += "</div>";
previewHTML += "</div>";
});
}
if (expenses.length > 0) {
if (earnings.length > 0) {
previewHTML += '<div style="margin: 10px 0;"></div>';
}
previewHTML += '<div class="preview-section-title spend-section" style="color: var(--cl44);">Траты:</div>';
expenses.forEach(function (item, index) {
totalAmount += item.amount;
previewHTML += '<div class="preview-item spend-item">';
previewHTML += '<div class="preview-item-header">';
previewHTML += '<span class="preview-item-number">' + (earnings.length + index + 1) + ".</span>";
previewHTML += '<span class="preview-item-name">' + item.name + "</span>";
previewHTML += '<span class="preview-item-amount" style="color: var(--cl44);">' + item.amount + "</span>";
previewHTML += '<div class="preview-item-actions">';
previewHTML += '<button type="button" class="remove-item-btn" data-index="' + selectedItems.indexOf(item) + '">❌</button>';
previewHTML += "</div>";
previewHTML += "</div>";
previewHTML += "</div>";
});
}
const totalBalance = initialBalance + totalAmount;
const totalClass = totalAmount < 0 ? ' class="preview-total negative"' : ' class="preview-total"';
const balanceClass = totalBalance < 0 ? ' class="preview-total-balance negative"' : ' class="preview-total-balance"';
previewHTML += "<div" + totalClass + ">Итого: <strong>" + totalAmount + "</strong></div>";
previewHTML += "<div" + balanceClass + ">Общий баланс: <strong>" + totalBalance + "</strong></div>";
previewContainer.innerHTML = previewHTML;
}
function updateTemplate() {
const textarea = document.getElementById("main-reply");
if (!textarea) return;
if (selectedItems.length === 0) {
textarea.value = "";
return;
}
const earnings = selectedItems.filter((item) => item.amount > 0);
const expenses = selectedItems.filter((item) => item.amount < 0);
let template = "";
if (earnings.length > 0) {
template += "[b]1. за что + доказательства[/b]\n";
earnings.forEach(function (item, index) {
template += index + 1 + ". " + item.name + " - " + item.amount + "\n";
if (item.details) {
template += " " + item.details + "\n";
}
template += "\n";
});
}
if (expenses.length > 0) {
if (earnings.length > 0) {
template += "\n";
}
template += "[b]2. на что потратить[/b]\n";
expenses.forEach(function (item, index) {
template += index + 1 + ". " + item.name + " - " + Math.abs(item.amount) + "\n";
if (item.details) {
template += " " + item.details + "\n";
}
template += "\n";
});
}
template += "[b]3. расчет[/b]\n";
const totalBalance = initialBalance + currentBalance;
template += initialBalance + " + " + currentBalance + " = [b]" + totalBalance + "[/b]";
textarea.value = template;
}
function finishTemplate() {
const textarea = document.getElementById("main-reply");
if (!textarea) return;
updateTemplate();
textarea.scrollIntoView({ behavior: "smooth", block: "center" });
textarea.focus();
selectedItems = [];
currentBalance = 0;
updatePreview();
}
function closeModal() {
const modal = document.getElementById("earnModal");
const modalContentElement = modal.querySelector(".modal-content");
modalContentElement.classList.remove("spend-modal");
modal.style.display = "none";
}
function openModal(type) {
const modal = document.getElementById("earnModal");
const modalContent = document.getElementById("modalContent");
const data = modalData[type];
if (!data) return;
const isSpendItem = getAmountForType(type) < 0;
const modalContentElement = modal.querySelector(".modal-content");
if (isSpendItem) {
modalContentElement.classList.add("spend-modal");
} else {
modalContentElement.classList.remove("spend-modal");
}
var fieldsHTML = "";
if (data.fields.length !== 0) {
fieldsHTML = data.fields.map(function (field) {
var fieldHTML = '<div class="form-group">';
fieldHTML += '<label for="' + field.name + '">' + field.label + ":</label>";
if (field.type === "textarea") {
fieldHTML += '<textarea id="' + field.name + '" name="' + field.name + '"';
if (field.required) fieldHTML += " required";
fieldHTML += "></textarea>";
} else {
const isQuantityField = field.name === "count";
if (isQuantityField) {
fieldHTML += '<input type="' + field.type + '" id="' + field.name + '" name="' + field.name + '"';
if (field.required) fieldHTML += " required";
fieldHTML += ">";
} else {
fieldHTML += '<div id="' + field.name + '_container">';
fieldHTML += '<div class="field-row">';
fieldHTML += '<input type="' + field.type + '" id="' + field.name + '_0" name="' + field.name + '"';
if (field.required) fieldHTML += " required";
fieldHTML += ">";
fieldHTML += '<button type="button" class="add-field-btn" data-field="' + field.name + '">+</button>';
fieldHTML += "</div>";
fieldHTML += "</div>";
}
}
fieldHTML += "</div>";
return fieldHTML;
}).join("");
}
modalContent.innerHTML = "<h3 id='modal-title' class='modal-title'>" + data.title + "</h3>" +
'<div class="info-text">' + data.description + "</div>" +
'<form id="earnForm">' + fieldsHTML + '<button type="submit" class="submit-btn">Добавить</button>' + "</form>";
modal.style.display = "block";
document.getElementById("earnForm").addEventListener("submit", function (e) {
e.preventDefault();
let details = "";
if (data.fields.length !== 0) {
const fieldValues = [];
data.fields.forEach(function (field) {
if (field.type === "textarea") {
const value = document.getElementById(field.name).value;
if (value) {
fieldValues.push(field.label + ": " + value);
}
} else {
const isQuantityField = field.name === "count";
if (isQuantityField) {
const value = document.getElementById(field.name).value;
if (value) {
fieldValues.push(field.label + ": " + value);
}
} else {
const container = document.getElementById(field.name + "_container");
const inputs = container.querySelectorAll('input[name="' + field.name + '"]');
const values = [];
inputs.forEach(function (input) {
if (input.value.trim()) {
values.push(input.value.trim());
}
});
if (values.length > 0) {
fieldValues.push(field.label + ": " + values.join(", "));
}
}
}
});
details = fieldValues.join(", ");
}
addItem(type, details);
const finishBtn = document.getElementById("finishBtn");
if (finishBtn) {
finishBtn.style.display = "inline-block";
}
closeModal();
});
}
// Инициализация обработчиков
const earnButtons = document.querySelectorAll(".earn-button");
earnButtons.forEach(function (button) {
button.addEventListener("click", function () {
const type = this.getAttribute("data-type");
if (type) {
openModal(type);
}
});
});
const closeButton = document.querySelector(".close");
if (closeButton) {
closeButton.addEventListener("click", closeModal);
}
window.addEventListener("click", function (event) {
const modal = document.getElementById("earnModal");
if (event.target === modal) {
closeModal();
}
});
const finishBtn = document.getElementById("finishBtn");
if (finishBtn) {
finishBtn.addEventListener("click", finishTemplate);
}
document.addEventListener("click", function (event) {
if (event.target.classList.contains("add-field-btn")) {
const fieldName = event.target.getAttribute("data-field");
if (fieldName) {
addField(fieldName);
}
}
if (event.target.classList.contains("remove-item-btn")) {
const index = parseInt(event.target.getAttribute("data-index"));
removeItem(index);
}
});
// Инициализируем начальный баланс
initialBalance = getInitialBalance();
// Инициализируем предварительный просмотр (скроет элементы если ничего не выбрано)
updatePreview();
});
</script>