СТОРІНКА В РОЗРОБЦІ
| Версія | Дата | Час збірки | Зміни / виправлення |
| v1.1 | 02.09.2026 | 10:16 | Перший WordPress-плагін. Гра підключається через object_ks, HTML гри зберігається окремо. Вихідний код гри не змінюється. |
| v1.2.0 | 02.09.2026 | 17:49 | Оновлено версію плагіна на основі актуального index (5).html. Гра підключається без зміни її вихідного коду. |
| v1.3.0 | 02.09.2026 | 17:49 | Оновлено структуру плагіна; підключено актуальну версію гри. |
| v1.4.0 | 09.09.2026 | 14:21 | Перша multiplayer-версія. Серверні кімнати через WordPress REST API, сервер генерує Room Code, додано Seed для відтворюваного сценарію. |
| v1.4.1 | 09.09.2026 | 15:57 | Виправлено роботу REST API на WordPress, де /wp-json/ недоступний у корені сайту. URL API тепер передається грі через shortcode. |
| v1.5.0 | 09.09.2026 | 16:18 | Сервер став авторитетним джерелом стану. Повна синхронізація стану кімнати: хід, відкриті дані, «Сказано», винятки, карантин, дні, їжа, настрій, події, зовнішність тощо. |
| v1.5.1 | 09.09.2026 | 16:22 | Виправлення початкової ініціалізації та синхронізації після переходу на серверний стан. |
| v1.5.2 | 09.09.2026 | 16:27 | Виправлено GET стану: сервер тепер передає номер гравця, завдяки чому віддалені клієнти коректно проходять авторизацію під час polling. |
| v1.5.3 | 09.09.2026 | 16:35 | Виправлено формування REST URL для WordPress з index.php?rest_route=…. Усунуто появу другого «?» та помилки 404. |
| v1.5.4 | 09.09.2026 | 16:42 | Велике оновлення multiplayer: постійний стан «Сказано», передача лише «Наступний випробуваний», заборона повернення назад, серверна таблиця кімнат object_ks_rooms, зберігання state та players. |
| v1.5.5 | — | — | Окремого архіву цієї версії у наявному наборі немає. |
| v1.5.6 | 09.09.2026 | 17:26 | Система присутності гравців та очищення кімнат. Heartbeat кожні 10 с, online/last_seen, offline після 45 с, звільнення слота, відображення кількості гравців, видалення порожніх кімнат через 30 хв, максимальний час життя кімнати 24 години, WP-Cron кожні 5 хв. |
| v1.5.7 | 09.09.2026 | 17:47 | localStorage обмежено лише останнім кодом кімнати. F5 більше не відновлює автоматично гру, гравця або token. Код кімнати використовується тільки для автозаповнення форми входу. |
| v1.5.8 | 09.09.2026 | 18:00 | Змінено механіку публічного розкриття особи: додано передачу посвідчення особи, яка розкриває професію та поточну зовнішність гравця. |
| v1.5.9 | 09.09.2026 | 18:06 | Посилено синхронізацію повного стану: при конфлікті revision локальна зміна накладається на актуальний серверний snapshot і повторюється один раз. Невдалі дії залишаються в черзі. |
| v1.6.0 | 09.09.2026 | 21:18 | Нова Action Sync. Кожна ігрова дія проходить через послідовну чергу. Додано атомарну перевірку revision, захист від подвійних кліків, перевірку поточного гравця для turn_next, toggle_said, share_id. Polling більше не повинен перезаписувати непідтверджену дію. |
| v1.6.1 | 09.09.2026 | 22:24 | Велике оновлення ігрової механіки: більше професій, прихований вік 16–100, вікова механіка виживання, розширено хвороби та фобії, фобії зменшують настрій, хобі дають бонус класу, змінено механіку успішного проникнення до бункера та крадіжки багажу. |
| v1.6.2 | 09.09.2026 | 22:32 | Виправлено зайве перемальовування під час polling: якщо revision не змінився, UI не перемальовується. Покращено обробку 409 stale_state, дію повторено на актуальному стані. Усунуто нескінченний retry недопустимих дій. Виправлено вибірку created_at. |
| v1.6.3 | 09.09.2026 | 22:40 | Серверні зміни стану серіалізовано через активного гравця. Валідна дія поточного гравця більше не відхиляється лише через застарілий revision. Це усуває основний цикл повторюваних 409. |
| v1.6.4 | 09.09.2026 | 22:45 | Виправлено проблему першої дії: гравець №1 тепер може ініціалізувати порожній стан кімнати, тому перша операція не отримує помилку 409. |
| v1.6.5 | 09.09.2026 | 23:01 | [Ваша власна збірка] Додано timeout і retry для черги дій. Покращено стійкість Action Sync при затримках або помилках REST-запитів. |
| v1.6.4 | 09.09.2026 | 23:07 | [Claude, правка вашого архіву v1.6.4] Виправлено зависання черги дій при відповіді сервера not_your_turn (клієнт нескінченно повторював той самий запит, блокуючи всі наступні дії). Кнопки «Надати посвідчення особи» і «Позначити як сказане» тепер коректно отримують атрибут disabled поза вашим ходом. |
| v1.6.5 | 09.09.2026 | 23:32 | [Claude, окрема гілка — інший зміст, ніж ваш власний v1.6.5 вище] Прибрано кнопку «Наступний випробуваний»: toggleAnnounced/shareIdentity тепер самі викликають turnStep() після успішного розкриття. «Вигнати» замінено на голосування: підрахунок більшістю в tallyVotes(), нічия — ніхто не вигнаний, відсутність голосу не потребує явної дії (утримання за замовчуванням). |
| v1.7.x | — | — | Архівів цих версій у наявному наборі немає. |
| v1.7.0 | 10.09.2026 | 23:02 | targetSurvivors() = floor(playerCount / targetSurvivorsDivisor). Застій без втрат: замість гарантованого примусового вибуття — накопичення відсоткового ризику нещасного випадку (startAt/fullAt у BALANCE.stagnation), лінійна інтерполяція. Колапс дня замінено на confirmCollapse() з одностайним readyForCollapse серед живих людей (боти автоматично «готові»). Додано renderGameEndScreen(). |
| v1.7.1 | 11.09.2026 | 09:29 | Адмінка object_ks_render_admin_page(): SELECT * по таблиці кімнат, обчислення online_players із players JSON, ручне видалення через object_ks_delete_room із nonce-перевіркою, кнопка примусового виклику object_ks_cleanup_rooms(). |
| v1.8.0 | 11.09.2026 | 09:42 | REST /settings + object_ks_get_balance()/object_ks_default_balance(): вік (межі груп, шанс вижити), хвороби (penalty/difficulty окремо для легкої/середньої/тяжкої, heavy.disableRole), формула настрою (recoverDivisor, baseDrain), quarantineChance, incidentTwoChance, stagnation (тоді ще warnAt/gasAt), targetSurvivorsDivisor. Клієнт підвантажує BALANCE один раз при вході в кімнату (balanceLoadPromise). |
| v1.8.0 | — | — | Окремого архіву цієї версії у наявному наборі немає. |
| v1.8.1 | 11.09.2026 | 10:36 | object_ks_is_maintenance()/object_ks_maintenance_block(): поки увімкнено (тумблер в адмінці, миттєве збереження без кнопки), object_ks_create_room/object_ks_join_room/object_ks_action повертають 503 {code:’maintenance’}. У pumpActionQueue() такий код не входить у гілку 4xx-«скинути назавжди», тож дія просто ретраїться, поки тумблер не вимкнуть. |
| v1.8.1 | 11.09.2026 | 10:36 | [Ваш запис] Поточна велика версія із системою налаштувань балансу через WordPress: вік, виживання, хвороби, штрафи ролей, складність лікування, настрій, карантин, імовірність двох пригод, стагнація, примусовий «газ», цільова кількість тих, хто вижив, тощо. Додано REST /settings. (Примітка: внутрішній рядок Version: у шапці object-ks.php в цьому архіві лишився 1.6.3 — не оновлювався разом із номером збірки.) |
| v1.9.0 | 11.09.2026 | 19:07 | object_ks_render_repeater()/object_ks_sanitize_repeater(): єдиний параметризований механізм додавання/видалення рядків для catastrophes, bunkerTypes, illnesses (severity/deathChance/infectedDeathChance/spreadChance), phobias (dangerous), roles (class/level/name). Content REST /content, contentLoadPromise на клієнті. |
| v1.9.1 | 11.09.2026 | 19:17 | Прибрано object_ks_touch_player() з read-гілки object_ks_state() (раніше кожен /state запит писав у БД). CONFIG.syncInterval клієнта збільшено з 1000 до 3000 мс. Разом ~4-5x менше запитів до БД при однаковій кількості одночасних кімнат. |
| v1.10.0 | 14.09.2026 | 20:29 | dayPopupEntry/popupBaselineDay/seedPopupBaseline()/checkNewDayPopup() — локальний UI-стан (не в S, не синхронізується), спливне вікно з meterLines/incidentLines поточного дня. deathChance/infectedDeathChance/spreadChance замість булевих deadly/contagious (зі зворотною сумісністю через fallback на старі поля). eliminationCause записується в 4 точках вибуття, виводиться на renderGameEndScreen(). |
| v1.10.1 | 14.09.2026 | 20:42 | docPower у блоці «Хвороби» тепер обчислюється по кожному пацієнту окремо: fieldKnown(p,’illness’) ? classLevel(‘Медицина’) : 0 — раніше рахувався один раз глобально й застосовувався до всіх хворих незалежно від розкриття. |
| v1.11.0 | 14.09.2026 | 21:20 | p.illnessOrigin (‘native’/’infected’). effectiveLevel() штрафує лише infected. illnessRolePenaltyAmount() + індикатор 🤒 в картці (mine || fieldKnown(p,’illness’)). resolveIllness(p, justInfected) — спільна логіка для вже хворих і щойно заражених того ж дня. Підрахунок activeInfectedCount >= 3 → epidemicAnnounced, скидається нижче 3. |
| v1.12.0 | 15.09.2026 | 11:37 | doCreate()/doJoin() не скидали S.announced, S.votes, S.attackDamagePending, S.epidemicAnnounced і локальну dayPopupEntry при вході в нову кімнату — додано явний reset усіх цих полів. |
| v1.13.0 | 16.09.2026 | 01:11 | renderDaySummaryScreen() як окремий екран (дублює логіку renderGameEndScreen()) замість оверлею .day-popup-overlay всередині renderRoom(). Прибрано «Зараза від Піддослідного N» з тексту логу — лишилось лише «Зараза перейшла до Піддослідного N». |
| v1.14.0 | 16.09.2026 | 06:54 | Розділ адмінки на object-ks-roles/scenarios/illnesses/phobias/baggage (окремі add_submenu_page), кожен з полем enabled у object_ks_field_specs(). Новий тип контенту baggage (buffClass), раніше — жорстко зашитий BAGGAGE_POOL. object_ks_default_sounds()/object_ks_get_sounds(), REST /sounds, playEventSound() на клієнті з try/catch навколо Audio().play(). |
| v1.12.1 | 18.09.2026 | 18:13 | publicEffectiveLevel(p) додано як окрема функція: якщо хвороба заразившогося не розкрита (!fieldKnown(p,’illness’)), classLevel() використовує profLevel-hungerPenalty без урахування штрафу хвороби — effectiveLevel() лишається незмінним для власного відображення в Паспорті. Застосовано на повторно завантаженому вами архіві v1.12.0. |
| v1.14.1 | 18.09.2026 | 18:14 | Той самий фікс publicEffectiveLevel(), перенесений на v1.14.0. |