Говорят, счастье не в деньгах. Но попробуйте сказать это человеку, у которого ноль на счёте. Зарабатывайте баксы, тратьте и наслаждайтесь процессом.
<!--HTML--> <!-- Основной контент банка --> <div class="fon"> <div class="bac"> <div class="namet"> <div class="bacname">банк</div> </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; // Функция для получения начального баланса из UserFld2 function getInitialBalance() { try { // Пытаемся получить значение UserFld2 if (typeof UserFld2 !== "undefined" && UserFld2) { // Убираем пробелы и преобразуем в число const cleanValue = UserFld2.toString().replace(/\s/g, ""); const balance = parseInt(cleanValue); return isNaN(balance) ? 0 : balance; } } catch (e) { console.log("UserFld2 не доступна:", 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>
[hideprofile]