VERSION BLOG

СТОРІНКА В РОЗРОБЦІ

ВерсіяДатаЧас збіркиЗміни / виправлення
v1.102.09.202610:16Перший WordPress-плагін. Гра підключається через object_ks, HTML гри зберігається окремо. Вихідний код гри не змінюється.
v1.2.002.09.202617:49Оновлено версію плагіна на основі актуального index (5).html. Гра підключається без зміни її вихідного коду.
v1.3.002.09.202617:49Оновлено структуру плагіна; підключено актуальну версію гри.
v1.4.009.09.202614:21Перша multiplayer-версія. Серверні кімнати через WordPress REST API, сервер генерує Room Code, додано Seed для відтворюваного сценарію.
v1.4.109.09.202615:57Виправлено роботу REST API на WordPress, де /wp-json/ недоступний у корені сайту. URL API тепер передається грі через shortcode.
v1.5.009.09.202616:18Сервер став авторитетним джерелом стану. Повна синхронізація стану кімнати: хід, відкриті дані, «Сказано», винятки, карантин, дні, їжа, настрій, події, зовнішність тощо.
v1.5.109.09.202616:22Виправлення початкової ініціалізації та синхронізації після переходу на серверний стан.
v1.5.209.09.202616:27Виправлено GET стану: сервер тепер передає номер гравця, завдяки чому віддалені клієнти коректно проходять авторизацію під час polling.
v1.5.309.09.202616:35Виправлено формування REST URL для WordPress з index.php?rest_route=…. Усунуто появу другого «?» та помилки 404.
v1.5.409.09.202616:42Велике оновлення multiplayer: постійний стан «Сказано», передача лише «Наступний випробуваний», заборона повернення назад, серверна таблиця кімнат object_ks_rooms, зберігання state та players.
v1.5.5Окремого архіву цієї версії у наявному наборі немає.
v1.5.609.09.202617:26Система присутності гравців та очищення кімнат. Heartbeat кожні 10 с, online/last_seen, offline після 45 с, звільнення слота, відображення кількості гравців, видалення порожніх кімнат через 30 хв, максимальний час життя кімнати 24 години, WP-Cron кожні 5 хв.
v1.5.709.09.202617:47localStorage обмежено лише останнім кодом кімнати. F5 більше не відновлює автоматично гру, гравця або token. Код кімнати використовується тільки для автозаповнення форми входу.
v1.5.809.09.202618:00Змінено механіку публічного розкриття особи: додано передачу посвідчення особи, яка розкриває професію та поточну зовнішність гравця.
v1.5.909.09.202618:06Посилено синхронізацію повного стану: при конфлікті revision локальна зміна накладається на актуальний серверний snapshot і повторюється один раз. Невдалі дії залишаються в черзі.
v1.6.009.09.202621:18Нова Action Sync. Кожна ігрова дія проходить через послідовну чергу. Додано атомарну перевірку revision, захист від подвійних кліків, перевірку поточного гравця для turn_next, toggle_said, share_id. Polling більше не повинен перезаписувати непідтверджену дію.
v1.6.109.09.202622:24Велике оновлення ігрової механіки: більше професій, прихований вік 16–100, вікова механіка виживання, розширено хвороби та фобії, фобії зменшують настрій, хобі дають бонус класу, змінено механіку успішного проникнення до бункера та крадіжки багажу.
v1.6.209.09.202622:32Виправлено зайве перемальовування під час polling: якщо revision не змінився, UI не перемальовується. Покращено обробку 409 stale_state, дію повторено на актуальному стані. Усунуто нескінченний retry недопустимих дій. Виправлено вибірку created_at.
v1.6.309.09.202622:40Серверні зміни стану серіалізовано через активного гравця. Валідна дія поточного гравця більше не відхиляється лише через застарілий revision. Це усуває основний цикл повторюваних 409.
v1.6.409.09.202622:45Виправлено проблему першої дії: гравець №1 тепер може ініціалізувати порожній стан кімнати, тому перша операція не отримує помилку 409.
v1.6.509.09.202623:01[Ваша власна збірка] Додано timeout і retry для черги дій. Покращено стійкість Action Sync при затримках або помилках REST-запитів.
v1.6.409.09.202623:07[Claude, правка вашого архіву v1.6.4] Виправлено зависання черги дій при відповіді сервера not_your_turn (клієнт нескінченно повторював той самий запит, блокуючи всі наступні дії). Кнопки «Надати посвідчення особи» і «Позначити як сказане» тепер коректно отримують атрибут disabled поза вашим ходом.
v1.6.509.09.202623:32[Claude, окрема гілка — інший зміст, ніж ваш власний v1.6.5 вище] Прибрано кнопку «Наступний випробуваний»: toggleAnnounced/shareIdentity тепер самі викликають turnStep() після успішного розкриття. «Вигнати» замінено на голосування: підрахунок більшістю в tallyVotes(), нічия — ніхто не вигнаний, відсутність голосу не потребує явної дії (утримання за замовчуванням).
v1.7.xАрхівів цих версій у наявному наборі немає.
v1.7.010.09.202623:02targetSurvivors() = floor(playerCount / targetSurvivorsDivisor). Застій без втрат: замість гарантованого примусового вибуття — накопичення відсоткового ризику нещасного випадку (startAt/fullAt у BALANCE.stagnation), лінійна інтерполяція. Колапс дня замінено на confirmCollapse() з одностайним readyForCollapse серед живих людей (боти автоматично «готові»). Додано renderGameEndScreen().
v1.7.111.09.202609:29Адмінка object_ks_render_admin_page(): SELECT * по таблиці кімнат, обчислення online_players із players JSON, ручне видалення через object_ks_delete_room із nonce-перевіркою, кнопка примусового виклику object_ks_cleanup_rooms().
v1.8.011.09.202609:42REST /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.111.09.202610:36object_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.111.09.202610:36[Ваш запис] Поточна велика версія із системою налаштувань балансу через WordPress: вік, виживання, хвороби, штрафи ролей, складність лікування, настрій, карантин, імовірність двох пригод, стагнація, примусовий «газ», цільова кількість тих, хто вижив, тощо. Додано REST /settings. (Примітка: внутрішній рядок Version: у шапці object-ks.php в цьому архіві лишився 1.6.3 — не оновлювався разом із номером збірки.)
v1.9.011.09.202619:07object_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.111.09.202619:17Прибрано object_ks_touch_player() з read-гілки object_ks_state() (раніше кожен /state запит писав у БД). CONFIG.syncInterval клієнта збільшено з 1000 до 3000 мс. Разом ~4-5x менше запитів до БД при однаковій кількості одночасних кімнат.
v1.10.014.09.202620:29dayPopupEntry/popupBaselineDay/seedPopupBaseline()/checkNewDayPopup() — локальний UI-стан (не в S, не синхронізується), спливне вікно з meterLines/incidentLines поточного дня. deathChance/infectedDeathChance/spreadChance замість булевих deadly/contagious (зі зворотною сумісністю через fallback на старі поля). eliminationCause записується в 4 точках вибуття, виводиться на renderGameEndScreen().
v1.10.114.09.202620:42docPower у блоці «Хвороби» тепер обчислюється по кожному пацієнту окремо: fieldKnown(p,’illness’) ? classLevel(‘Медицина’) : 0 — раніше рахувався один раз глобально й застосовувався до всіх хворих незалежно від розкриття.
v1.11.014.09.202621:20p.illnessOrigin (‘native’/’infected’). effectiveLevel() штрафує лише infected. illnessRolePenaltyAmount() + індикатор 🤒 в картці (mine || fieldKnown(p,’illness’)). resolveIllness(p, justInfected) — спільна логіка для вже хворих і щойно заражених того ж дня. Підрахунок activeInfectedCount >= 3 → epidemicAnnounced, скидається нижче 3.
v1.12.015.09.202611:37doCreate()/doJoin() не скидали S.announced, S.votes, S.attackDamagePending, S.epidemicAnnounced і локальну dayPopupEntry при вході в нову кімнату — додано явний reset усіх цих полів.
v1.13.016.09.202601:11renderDaySummaryScreen() як окремий екран (дублює логіку renderGameEndScreen()) замість оверлею .day-popup-overlay всередині renderRoom(). Прибрано «Зараза від Піддослідного N» з тексту логу — лишилось лише «Зараза перейшла до Піддослідного N».
v1.14.016.09.202606: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.118.09.202618:13publicEffectiveLevel(p) додано як окрема функція: якщо хвороба заразившогося не розкрита (!fieldKnown(p,’illness’)), classLevel() використовує profLevel-hungerPenalty без урахування штрафу хвороби — effectiveLevel() лишається незмінним для власного відображення в Паспорті. Застосовано на повторно завантаженому вами архіві v1.12.0.
v1.14.118.09.202618:14Той самий фікс publicEffectiveLevel(), перенесений на v1.14.0.