Проект "СуперНова" ~~~~~~~~~~~~~~~~~~~ "СуперНова" (далее - СН) - многопользовательская браузерная космическая стратегия, клон oGame. СН базируется на XNova RageRepack v.226 (далее RR). Данный файл содержит исключительно отличия СН от RR Актуальность ============ Файл изменен 2013-10-13 22:27 Информация актуальна для Project "SuperNova.WS" Release 37 37c0 Disclaimer aka Отмазка ====================== ВНИМАНИЕ! Проект находится в стадии альфа-версии! В настоящее время он не предназначен для production-использования! Код предоставляется "as-is". Вы используете его на свой страх и риск! Автор не несет ответственности за материальный, моральный, кармический, душевный и любой другой ущерб, причиненный вам от использования, неиспользования, самим фактом существования этого кода или любым другим способом. ВНИМАНИЕ! Хотя СН является клоном оГейм, она НЕ ЯВЛЯЕТСЯ ОФФЛАЙК! Т.е. многие аспекты игры отличаются как от официального оГейма, так и от RR. Движок изменен, что бы соответствовать моему пониманию об интересной игре. Принимайте это во внимание, когда решаете - устанавливать этот движок себе или нет. ВНИМАНИЕ! Статус проекта "СуперНова" - альфа-версия. Практически это означает, что очередной апдейт может полностью изменить отдельный аспект игры. Примерный план развития движка содержится в файле /docs/changelog.xls Код распространяется под лицензией GNU GENERAL PUBLIC LICENSE Version 2, June 1991. Сама лицензия находится в файле /docs/license.txt дистрибутива. Доолнение к лицензии: движок является полностью бесплатным до тех пор, пока сохраняются мои копирайты. Так же вы не имеете права продавать сам движок и любые продукты на его основе (однако имеете право взимать плату за доступ к игре и/или продавать внутриигровые ресурсы). Предуведомления о необходимости наличия квалификации ==================================================== Данные инструкции предполагают умение самостоятельно настроить или использовать сторонний веб-хостинг, знакомство с MySQL и PHP, доступ к инструментам управленя MySQL и хостингом. Если вы не обладаете опытом самостоятельной настройки сайтов - этот дистрибутив вам не подойдет ВНИМАНИЕ! Я не могу протестировать все возможные комбинации и версии MySQL & PHP & XCache & веб-серверов! Это означает, что при некоторых комбинациях и настройках среды движок может не работать. Именно для этого нужны навыки настройки и конфигурации веб-серверов. Помощь проекту ~~~~~~~~~~~~~~ Вы можете помочь проекту, отправив WebMoney на кошельки: WMZ (WM-USD) Z409323360409 WMR (WM-RUB) R961266352219 WMU (WM-UAH) U726314912308 Если вы пользуетесь ВебМанями для покупки различных электронных товаров, то вы можете одновременно а) купить привычный электронный товар по хорошей цене б) помочь проекту. http://gorlum.plati.ru - пополнения сотовых, Skype, WoW - игра и ТК и прочие электрические товары за WM. Каждая покупка, сделанная с этого линка, принесет мне небольшие комиссионные. Помните! Ничто так не укрепляет веру в нужность работы, как пожертвование! Установка ~~~~~~~~~ ВНИМАНИЕ!!! PHP 5.3.1 содержит баг, который делает невозможной полноценную работу СН начиная с v33a12! Обновите PHP, или сделайте откат до более ранней версии PHP, или используйте предыдущую версию СН. Описание бага: https://bugs.php.net/bug.php?id=50394 Подробные инструкции по установке содержатся в файлах: /docs/install.md /docs/install-en.md Благодарности ============= Активные Помощники (в алфавитном порядке) ----------------------------------------- Ivash Mahomed PIR Спонсоры -------- Мухит Гусманов andre777_86 Tourist jilior websasha igorrnc nt Проект "СуперНова" в интернете =============================== Основной сайт проекта http://supernova.ws GitHub ------ GitHub используется как основное хранилище кода в интернете. На нем вы найдете самую последнюю версию СуперНовы "СуперНова" на GitHub: http://github.com/supernova-ws/SuperNova GIT-репозиторий: git://github.com/supernova-ws/SuperNova.git Он же по HTTP: https://github.com/supernova-ws/SuperNova# Архивы инсталляции всех релизов через HTTPS: https://github.com/supernova-ws/SuperNova/zipball/master (кнопка "download .zip" скачает самый свежий релиз) В репозитории есть две ветки Ветка "master" содержит последний стабильный релиз движка плюс самые актуальные багфиксы. Перед выкладыванием в эту ветку движок неделями и месяцами тестируется на нескольких серверах А вот ветка "trunk" - для самых смелых, храбрых и попросту говоря - безрассудных. Это - копия моей рабочей ветки. Она содержит то, над чем я работаю в данный момент. В общем - я даже не гарантирую, что чекаут из этой ветки вообще запустится. Используйте её на свой страх и риск. Я предупредил. Загрузка исходников из ветки trunk одним архивом через HTTPS: https://github.com/supernova-ws/SuperNova/zipball/trunk SourceForge ----------- Так же есть репозиторий на SourceForge: git://supernova-ws.git.sourceforge.net/gitroot/supernova-ws/supernova-ws Архив инсталляции для загрузки - для тех, кто не осилил GIT http://sourceforge.net/projects/supernova-ws/files/ Поддержка --------- Форум поддержки проекта: http://forum.supernova.ws/viewforum.php?f=73 "Живые" Вселенные ----------------- СуперНова (х1): http://supernova.supernova.ws оГейм (x2): http://ogame.supernova.ws Бета (x50): http://beta.supernova.ws Документация ============ Вся документация и сопроводительные файлы находятся в каталоге "docs" в корне движка Лицензия (на английском): /docs/license.txt Документация на проект (этот файл, на русском): /docs/readme.txt История изменения для пользователей (на русском, начиная с 25-го релиза): /docs/changelog.txt /docs/changelog.html Полная история изменений для администраторов и разработчиков (на русском): /docs/changelog_dev.txt Инструкции по установке (на русском): /docs/install.md Инструкции по установке (английский, google-translated): /docs/install-en.md Документация для администраторов и разработчиков (на русском): /docs/html/developer.html Планы развития (на русском): /docs/changelog.xls Coding Gudelines для разработчиков (на английском): /docs/html/coding-guidelines.html Беллитризированная внутриигровая предыстория (на русском): /docs/SuperNova - All you didn't want to know but forced to.docx Терминология ~~~~~~~~~~~~ "Сервер" - веб-сервер с установленным PHP, MySQL и xCache "СН" или "движок" - исполнимый код Проекта "СуперНова" "Вселенная" - экземпляр движка, установленный на сервер и имеющий свою собственную отдельну БД. Один сервер может поддерживать несколько Вселенных "Топ" - игрок, входящий в первые 5% игроков по статистике Тёмная Материя ~~~~~~~~~~~~~~ Тёмная Материя (ТМ) - особый внутриигровой ресурс, почти не связанный с остальной экономикой. ТМ позволяет получить доступ к уникальным и/или ограниченным юнитам, возможностям или технологиям, которые сложно или невозможно получить другим образом ТМ служит нескольким целям: ускорителем в развитии начинающим игрокам (на ранних этапах игры ТМ достается легче, а её использование дает больший эффект, чем на поздних), поощрением постоянным игрокам (чем дольше игрок играет, тем больше ТМ у него будет), дополнительным фактором случайности (на поздних этапах развития ТМ можно получить только рискуя), способом рекламы (встроенная партнерская программа поощраяет игроков как можно шире распространять информацию о сервере и вознаграждет их за эффектиную рекламу) и методом монетизации игры (владельцам серверов рекомендуется продавать именно ТМ, а не другие ресурсы - за счет этого достигается относительное равенство между донаторами и обычными игроками, минимизируется вмешательство владельца в игру и упрощается менджмент платежей) ТМ смасштабирована в отношении 1 к 1.000. Т.е. весь приход ТМ и все цены в ТМ увеличены в 1.000 раз по отношению к RR В настоящий момент существует пять внутриигровых источников получения ТМ: постройка зданий, исследования, рейды на врагов, экспедиции и квесты. По логике игры ТМ считается редким и ценным ресурсом, каждая единица которого должна добываться огромным трудом и вкладываться с умом и перспективой. Кроме того, множество вопросов вызывает ограничение в 150 уровней по экономике. Изменения в ролевой системе призваны устранить оба этих недостатка Лог движения ТМ =============== Все изменения в количестве ТМ заносятся в специальную таблицу "log_dark_matter" для предотвращения возможных злоупотрблений как со стороны игроков (использование багов или дырок в движке), так и со стороны членов команды сервера. По этой причине таблица не доступна из админской части игры Покупка ТМ за внеигровые ресурсы ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Движок СН содержит подсистему для покупки ТМ игроками за реальные деньги. Однако для её функционирования нужен хотя бы один модуль платежной системы, которые не входят в дистрибутив. За получением этих модулей обращайтесь к автору движка В настоящее время поддержка платежных модулей: таблицу платежей; базовые настройки подсистемы; строки локализации и константы; интерфейс покупки ТМ (требуется хотя бы один модуль платежной системы); поддержку методов 'LINK', 'GET' и 'POST' в системах платежа; система бонусов при одноразовой покупки большого количества ТМ Страница платежа "Тёмная Материя" ================================= Понижена в 2,5 раза цена ТМ. Теперь за 1 гривну можно купить 2500 ТМ Размер лота (шага покупки) установлен в 2500 ТМ Изменена система бонусов за оптовые покупки ТМ: от 50.000 ТМ - бонус 2% к количеству ТМ от 100.000 ТМ - бонус 4% к количеству ТМ от 200.000 ТМ - бонус 7% к количеству ТМ от 250.000 ТМ - бонус 11% к количеству ТМ от 375.000 ТМ - бонус 15% к количеству ТМ от 500.000 ТМ - бонус 22% к количеству ТМ от 750.000 ТМ - бонус 33% к количеству ТМ от 1.000.000 ТМ - бонус 44% к количеству ТМ от 1.250.000 ТМ - бонус 55% к количеству ТМ Список доступных цен и список скидок строится теперь по данным модуля sn_payment Добавлена поддержка модулей с более чем одним количеством шагов при покупке Добавлена поддержка мультивалютности Добавлена поддержка SUCCESS_URL в платежных системах Добавлена индикация внутренних курсов системы Теперь большую часть информационных элементов на странице можно свернуть Модуль платежной системы XSolla: payment_xsolla_currency ======================================================== Реализован протокол XSolla "Виртуальная валюта" (без отката платежей) Поддержка плагина XSolla PayStation Модуль платежной системы WebMoney: payment_webmoney =================================================== Реализован приема платежей на кошельки WebMoney Поддержка мультивалютности Поддержка SUCCESS_URL Модуль платежной системы RoboKass: payment_robokassa ==================================================== Реализован прием платежей через агрегатора RoboKassa Партнерская программа ~~~~~~~~~~~~~~~~~~~~~ Написан с нуля модуль Партнерской программы. Каждому игроку выдается персонализированная ссылка, персонализированный баннер и персонализированный юзербар, а так же коды для размещения всего этого добра на форумах и/или домашних страничках. Если на сервер по ссылке приходит новый пользователь и регестрируется на сайте, приведший его игрок получает 10% от всех ТМ, заработанных новым пользователем (включая дополнительные начисления). Количество бонуса партнеру определяется переменной "rpg_bonus_divisor", которая по умолчанию равна 10 (т.е. 10% - это 1/10 от ТМ реферрала) Партнерка имеет ограничение по минимальному количеству ТМ, после которого начинается начисление бонусов реферралу - переменная "rpg_bonus_minimum" Настройки партнерской программы осуществляются в таблице "config" Развитие: опыт, уровни и ТМ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ За совершение определенных действий в игре начисляется опыт. Накопление определенного количество опыта отмечается увеличением уровня и вознаграждением в виде ТМ. Опыт, необходимый для получения нового уровня растет в геометрической прогрессии - т.е. чем выше уровень, тем больше нужно набрать опыта для перехода на следующий уровень Опыт можно получить за постройку и разрушение зданий (строительный опыт), исследование новых технологий (исследовательский опыт) и сражение с другими игроками (рейдерский опыт). Все три вида опыта независимы друг от друга, дают разные типы уровней и имеют разные шкалы развития Строительство и исследование ============================ Строительный и исследовательский опыт начисляется из расчета один балл на каждую вложенную полную тысячу ресурсов в пересчете на металл по внутриигровому курсу в соответственно постройку или разрушение зданий и исседование технологий. В отличии от xNova СН не имеет ограничений по уровням строительства и исследования Шкала развития при строительстве и исследованиях имеет следующий вид: 1 50 50 50 2 100 52 102 3 150 53 155 4 200 55 209 5 250 56 265 6 300 58 323 7 350 60 383 8 400 61 445 9 450 63 508 10 500 65 573 20 1.000 88 1.344 30 1.500 118 2.379 40 2.000 158 3.770 50 2.500 213 5.640 60 3.000 286 8.153 70 3.500 384 11.530 80 4.000 517 16.068 90 4.500 694 22.167 100 5.000 933 30.364 110 5.500 1.254 41.380 120 6.000 1.685 56.185 130 6.500 2.264 76.081 140 7.000 3.043 102.820 150 7.500 4.090 138.754 160 НЕТ 5.497 187.048 170 НЕТ 7.387 251.950 180 НЕТ 9.927 339.172 190 НЕТ 13.342 456.392 200 НЕТ 17.930 613.926 ИТД Первая колонка - уровень Вторая колонка - старое общее количество опыта, необходимое для достижения уровня Третья колонка - новое количество опыта, необходимое для перехода на следующий уровень (геометрическая прогрессия с первым членом 50 и коэффициентом 1,03) Четвертая колонка - новое общее количество опыта, необходимое для достижения уровня Рейдерство ========== За каждую выигранное сражение начисляется один балл рейдерского опыта Шкала развития рейдера имеет следующий вид: 1 10 10 10 2 20 10 20 3 30 11 31 4 40 11 42 5 50 11 53 6 60 12 65 7 70 12 77 8 80 12 89 9 90 13 102 10 100 13 115 20 200 18 269 30 300 24 476 40 400 32 754 50 500 43 1.128 60 600 57 1.631 70 700 77 2.306 80 800 103 3.214 90 900 139 4.433 100 1.000 187 6.073 110 1.100 251 8.276 120 1.200 337 11.237 130 1.300 453 15.216 140 1.400 609 20.564 150 1.500 818 27.751 160 1.600 1.099 37.410 170 1.700 1.477 50.390 180 1.800 1.985 67.834 190 1.900 2.668 91.278 200 2.000 3.586 122.785 ИТД Первая колонка - уровень Вторая колонка - старое общее количество опыта, необходимое для достижения уровня Третья колонка - новое количество опыта, необходимое для перехода на следующий уровень (геометрическая прогрессия с первым членом 10 и коэффициентом 1,03) Четвертая колонка - новое общее количество опыта, необходимое для достижения уровня Модуль "Премиумный аккаунт": player_premium ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Премиумный аккаунт - особый вид аккаунта, дающий бонус игрокам, которые его приобрели Премиумный аккаунт покупается игроком за ТМ, поэтому приобрести его может любой игрок, вне зависимости от того, вкладывал ли он в игру реальные деньги или нет Добавлена индикация уровня премиума в меню Добавлена индикация остатка времени Премиума в пункт меню в виде прогресс-бара с цветовым кодированием: Зеленый - осталось не менее 50% времени пермиума Желтый - осталось меньше 50%, но не менее 25% Оранжевый - осталось меньше 25%, но не менее 10% Красный - осталось меньше 10% Цвет фона - нет Премиума Период действия премиума ======================== Премиумный аккаунт покупается на определенный срок. По умолчанию срок приобретения премиума - 30 дней. Именно в расчете на этот срок дается расчет цены ниже. Однако премиум может быть куплен на больший или меньший срок. В частности, полный список сроков покупки составляет: 1 неделя, 2 недели, 30 дней, 60 дней и 90 дней. При приобретении премиума на срок, больший 30 дней предусмотрены скидки, меньше 30 дней - пенальти на цену покупки относительно цены премиума в пересчете на 30 дней. Список коэфициентов изменения цены выглядит следующим образом: 1,5 для 1й недели, 1,2 - для 2х недель, 0,9 для 60 дней и 0,8 для 90 дней. Уровень премиума ================ Премиумные аккаунты бывают различных уровней. По умолчанию доступно 5 уровней премиума. БС составляет 25.000 ТМ, а фактор - 3. Это дает нам следующую линейку цен: 1й уровень - 25.000 ТМ, 2й уровень - 100.000 ТМ (25.000 с 0го на 1й + 75.000 с 1го на 2й), 3й - 325.000 ТМ, 4й - 1.000.000 ТМ, 5й - 3.025.000 ТМ Пример: премиум 3-го уровня на 1 неделю будет стоить 325.000 * (7 / 30) * 1,5 = 113.750 ТМ где 325.000 - базовая цена ТМ премиума 3 уровня на 30 дней (7 / 30) - коэфициент пересчета базовый цены на период покупки (7 дней) Преимущества премиума ===================== Ник обладателя премиумного аккаунта выделяется в чате отдельным стилем (по умолчанию - желтым цветом. Настраивается в CSS - стиль ".nick_premium") Премиумный аккаунт дает бонус, эквивалентный своему уровню, к уровням технологий и Наемников (не Губернаторов!) Империи, а так же к уровням следущих зданий на планетах: ко всем шахтам и складам ресурсов, ко всем электростанциям, к Фабрике роботов, к Верфи, к Нанофабрике, к Лаборатории и к Нанолаборатории Премиум чрезвычайно эффективен - и чем выше уровень премиума, тем более он эффективен. Именно поэтому на высокие уровни выставлены такие большие цены (фактически, их можно назвать "заградительными" для премиума выше третьего). Например, максимальный (5й уровень) премиума дает: 1. +5 уровней к шахтам и складам - это почти удвоение добычи и увеличение складов почти в 8 раз 2. +5 уровней к технологиям и Наемникам - это по факту +100% ко всем боевым характеристикам 3. +5 уровней к технологиям и Наемникам - это от 50 до 150%% прирост к скорости полета - в зависимости от типа двигателя, да еще +25% к скорости от Навигатора 4. +5 к производственным зданиям - это ускорение всех строительств и исследований более чем в 32 раза (на планетах с нанофабриками и нанолабораториями соответственно) 5. И еще множество мелких плюшек в виде увеличения количества слотов под флоты и экспедиции, увеличение количества колоний (но не больше, чем максимум сервера), открытие новых юнитов и т.д. Покупка секторов на планете ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Теперь можно за ТМ докупать дополнительные сектора на планете - один сектор за раз, максимальное количество секторов не ограничено Cектор можно купить в нескольких местах: в "Обзоре планеты", в "Управлении планетой" и на экране строительства зданий Стоимость сектора для планеты - геометрическая прогрессия с количеством секторов в качестве номера члена, БС = 1000 и Ф = 1.01 Стоимость покупи 1 сектора на планете составляет: для планеты размером 100 секторов - 2.678 ТМ, 150 секторов - 4.404 ТМ, 163 сектора - 5.013 ТМ, 200 секторов - 7.244 ТМ, 250 секторов - 11.913 ТМ, 300 секторов - 19.493 ТМ, 330 секторов - 26.508 ТМ Телепортация планеты ~~~~~~~~~~~~~~~~~~~~ Теперь можно телепортировать планеты в пределах Вселенной. Телепортация доступна на странице управления планетой Телепортация может производится только на свободное место - там, где нет ни планет, ни лун, ни обломков (включая уничтоженные объекты) Телепортация перемещает в новые координаты планету вместе с флотом, находящимся на орбите планеты Если у планеты есть луна - она так же перемещается в новые координаты вместе с флотом Телепортация невозможна, если в окрестностях планеты есть какая-то активность флотов (т.е. есть флоты, имеющие в качестве точки отправления или назначения саму планету, луну или поле обломков) После телепортации необходимо выждать некоторое время перед следующей телепортацией - нарушенная метрика пространства вокруг планеты должна нормализироваться Стоимость телепортации и таймаут перед следующим прыжком задаются в таблице `config` соответственно переменными 'planet_teleport_cost' (по умолчанию - 50.000 ТМ) и 'planet_teleport_timeout' (по умолчанию - 1 сутки) Перенос столицы ~~~~~~~~~~~~~~~ Теперь можно перенести столицу (основной мир) на любую планету. Перенос столицы осуществляется со страницы управления планетой Стоимость переноса столицы по умолчанию составляет 25.000 ТМ. Она задается в таблице `config` переменной 'planet_capital_cost' Плотность планеты ~~~~~~~~~~~~~~~~~ Добавлен новый параметр планеты - плотность. Он определяет химический состав геосферы планеты и влияет на добычу ресурсов на ней Плотность планеты лежит в диапазоне от 850 до 9250 кг/м3. Плотность новых планет распределена случайным образом по нормальному распределению Существует 7 классов плотности - с уникальным набором коэфициентов добычи для каждого класса: Ледяные планеты (<2000 кг/м3) - встречаются очень редко: очень низкая добыча металла, очень низкая добыча кристаллов, очень высокая добыча дейтерия Силикатные планеты (2000=3250 кг/м3) - встречаются редко: очень низкая добыча металла, очень высокая добыча кристаллов и еще хорошая добыча дейтерия Каменные планеты (3250-4500 кг/м3) - встречаются часто: хорошая добыча металлов, высокая добыча кристаллов и низкая добыча дейтерия Стандарнтые планеты (4500-5750 кг/м3) - встречаются очень часто: хорошая добыча металлов, хорошая добыча кристаллов и хорошая добыча дейтерия Железнорудные планеты (5750-7000 кг/м3) - встречаются часто: очень хорошая добыча металлов, низкая добыча кристаллов и низкая добыча дейтерия Металлические планеты (5750-7000 кг/м3) - встречаются редко: отличная добыча металлов, низкая добыча кристаллов и низкая добыча дейтерия Тяжелометаллические планеты (>7000 кг/м3) - встречаются очень редко: великолепная добыча металлов, очень низкая добыча кристаллов и очень низкая добыча дейтерия Стартовая планета имеет плотность 5500 кг/м3 и принадлежит к 4-му классу плотности. Все луны имеют плотность 2500 кг/м3 и принадлежат ко 2-му классу плотности Тип ядра планеты можно изменить за ТМ. Возможность доступна на экране управления планетой (Обзор планеты -> Управление). Стоимость смены высчитывается динамически и зависит от того, насколько сильно отличается текущий тип ядра от желаемого Добавлено отображение типа ядра планеты на страницу "Обзор планеты" На страницу "Обзор Империи" добавлено отображение типа ядра планеты с цветовым кодированием: Зеленый - тип ядра встречается очень часто Желтый - тип ядра встречается часто Оранжевый - тип ядра встречается редко Красный - тип ядра встречается очень редко В Новапедию добавлена статья про плотность и типы ядер планет Офицеры (наемники и губернаторы) и Чертежи ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Полностью переработана система офицеров. Произведено разделение офицеров на "наемников" и "губернаторов". Стоимость нового уровня офицера рассчитывается по формуле: БС * (Фактор ^ Уровень), где БС - базовая стоимость Наемника в ТМ. Наемники за ресурсы не поддеживаются Фактор - заранее заданная величина ^ - операция возведения в степень Уровень - новый уровень Наемника БС и Фактор прописываются индивидуально для каждого Наемника в файле "/includes/vars.php". По умолчанию БС = 3.000, Фактор = 1 Бонус к скорости постройки/исследования ======================================= Изменена логика работы Академика, Фортификатора и Инженера. Все они влияют на скорость постройки юнитов, однако раньше зависимость была практически экспоненциальная. Вдобавок слишком большой бонус от Академика в Альянсе в сочетании с полностью прокачанным Наемником у игрока мог приводить к артефактам в работе исследований Теперь бонус указанных офицеров - это процент увеличения скорости постройки соответствующих юнитов, а не процент, на который уменьшается время постройки. Т.е. это - слагаемое в знаменатели дроби Если говорить совсем просто: 100% бонуса от офицера уменьшают время постройки юнита в 2 раза, 200% - в три раза, 300% - в четыре раза и так далее Наемники ======== Наемники покупаются через общее меню слева и их бонусы распространяются на всю Империю СН поддерживает два режима работы с Наемниками - Постоянных Наемников (ПН) и Временных Наемников (ВН). Режим Наемников переключается в настройках сервера и может быть изменен на лету (см. ниже пункт "Переключение режима Наемников") Постоянные Наемники ------------------- В режиме ПН Наемники разбиты на две независимые ветки - "шахтерскую" и "рейдерскую". "Ветка" означает, что для рекрутирования Наемника, находящегося правее по списку, небоходимо сначала нанять один или несколько уровней Наемника, находящегося левее "Шахтерская" ветка имеет вид: "Карго-мастер" => "Шпион" => "Академик" "Рейдерская" ветка имеет вид: "Адмирал" => "Координатор" => "Навигатор" Временные Наемники ------------------ ВН (как следует из названия) не являются постоянными, а нанимаются на определенный срок. По истечению срока Наемник исчезает В режиме ВН отсутствует понятие "веток развития" и для найма доступны сразу все Наемники. Соответственно не отображаются требования к Наемникам на странице "Технологии" Базовая цена покупки ПН в режиме ВН становится ценой найма на базовый период найма (БПН). По умолчанию он равен одному среднекаелндарному месяцу(30 дней, 2.592.000 секунд). Изменить БПН можно на странице настроек сервера Предусмотрена система скидок/наценок в зависимости от срока покупки Наемника. Настройки содержатся в массиве $mrc_hire_discount в файле /officer.php. Индекс элемента - количество секунд найма, значение - коэффициент скидки. "1" означает, что на данный интервал найма нет ни наценки, ни скидки и при пересчете на количество секунд в БПН его стоимость будет в точности равна стоимости БПН. Если число меньше единицы - это означает скидку; больше единицы - наценку Временного наемника можно увольнять до истечения срока найма. ВНИМАНИЕ! При увольнении наемников вся портаченная на найм ТМ будет утеряна! Режим Наемников отображается на странице "Мировые константы" Переключение режима Наемников ----------------------------- При включении ВН все постоянные Наемники будут преобразованы во временные со сроком действия равному БПН. В случае необходимости изменить БПН нужно СНАЧАЛА его изменить, а затем переключать режим работы Наемников После включения ВН изменение базового интервала найма не влияет на уже рекрутированных Наемников, а влияет только на цену нового найма При отключении ВН все активные на этот момент Наемники будут преобразованы в постоянные - вне зависимости от того, на какой срок они были наняты и сколько времени осталось до срока истечения найма. Информация о сроках найма при этом теряется При отключении ВН активизируются ограничения по рекрутированию Наемников, однако уже нанятые Наемники останутся активными и будут влиять на игру вне зависимости от того, может игрок их купить или нет. Такой способ переключение выбран для исключения потери ТМ, вложенных игроками в Наемников Страница рекрутирования ----------------------- Переработана страница рекрутирования Наемников: 1. Добавлена поддержка временных Наемников 2. Стоимость найма отображается динамически в зависимости от текущего режима Наемников, выбранного уровня и срока найма 3. В режиме ПН видны все наемники - даже недоступные (с соответствующими пояснениями) 4. В режиме ПН можно нанимать сразу несколько уровней Наемников 5. При найме постоянных наемников показывается ровно столько уровней, на сколько хватает ТМ Губернаторы =========== Губернаторы покупаются отдельно на каждую планету на странице "Управление планетой" и их бонусы распространяются только на ту планету/луну, на которой они куплены. Текущий губернатор и его уровен отображается на странице "Обзор планеты", а так же в виде индикатора на изображениях планет в "Обзоре планеты" и "Обзоре Империи" Губернаторов можно сменять. При покупке нового губернатора его развитие начинается с первого уровня, а вся ТМ, вложенные в предыдущего офицера, теряется. Страница покупки губернаторов требует подтверждение операции при покупке губернатора, отличного от текущего. Страница покупки имеет защту от случайной покупки губернатора при обновлении страницы Балансировка губернаторов проведена из расчета на "среднего игрока", имеющего 6 планет при скорости х2. Такие игроки не получат пенальти при оснащении всех планет губернаторами. Понятно, что общая производительность Империи уменшится, однако это те жертвы, на которые я готов пойти. В целом же изменение направлено на уменьшение среднего количества ТМ у игроков. В особенности - у топов и саб-топов "Технолог" объединяет функции Геолога и Энергетика: каждый уровень дает +5% к добыче металла, кристалла, дейтерия, а так же к выработке электроэнергии на солнечной и термоядерной электростанциях. Технолог 5го уровня позволяет строить термоядерные электростанции. Вследствие полной бессмысленности найма Технолога на лунах во избежание напрасных трат ТМ игроками он убран со страницы управления луной БС 800, Фактор 1,06, нет ограничения по уровням Каждый уровень "Инженера": 1. Увеличивает скорость постройки зданий и кораблей на 10% 2. Добавляет по одному слоту к очередям постройки кораблей и зданий БС 500, Фактор 1,65, не имеет ограничения по уровню Каждый уровень "Фортификатора": 1. Увеличивает скорость постройки защитных сооружений и ракет на 10% 2. На 10% увеличивает все боевые характеристики кораблей на орбите и оборонных сооружений на поверхности планеты 3. Добавляет 1 слот к очереди постройки обронительных сооружений БС 2.000, Фактор 1,25, не имеет ограничения по уровню Чертежи ======= "Чертеж" - это программный пакет, дающий доступ к производсту юнитов определенного типа. В терминах xNova Чертеж можно считать одноуровневым перманентным Наемником. Имеющиеся раннее Наемники "Разрушитель" и "Ассасин" сконвертированы соответственно в "Чертеж ЗС" и "Чертеж СН". Остальные четрежи надо покупать самостоятельно Доступны следующие чертежи: 1. Здания: термоядерная электростанция 2. Корабли: супертранспорт, гипертранспорт, Звезда Смерти, "СуперНова" 3. Защитные постройки: планетарная защита Чертеж является перманентым Чертежи заменяют Наемников в требованиях к постройке Чертеж покупается на Империю, после чего указанный юнит доступен к производству на всех планетах Если в движке установлен модуль "Альянсы-Игроки", то Чертежи доступны для покупки Альянсами. Стоимость такого Чертежа равна базовой стоимости умноженной на минимальное количество членов Альянса - но такой Чертеж дает доступ к постройке указанных юнитов сразу всем членам Артефакты ========= "Артефакты" - редкие объекты с уникальными свойствами, приобретаемые за ТМ. Артефакты являются одноразовыми - после использования Артефакт исчезает. Некоторые Артефакты настолько мощные, что их количество в одной Империи ограничено Использование некоторых Артефактов привязано к планетам - т.е. их эффект будет распространятся только на эту планету. Эффекты других Артефактов распространяются на всю Империю. Особо мощные Артефакты могут оказывать влияние на солнечную систему, галактику или даже Вселенную Большой Адронный Колайдер (БАК) ------------------------------- БАК генерирует поток гравитонного излучения, направленный в место наибольшего скопления обломков на орбите, притягивая к ним другие обломки. Иногда в результате может образоваться луна. Шанс создания луны - 1% за каждый полный миллион обломков, но не более 30%' ВНИМАНИЕ! Использование БАК не гарантирует появления луны! Автономный Колонизационный Комплекс (АКК) ----------------------------------------- АКК является набором готовых конструкций и программ, позволяющий мгновенно развернуть на новооткрытой планете колонию. Если на планете уже есть здания, входящие в АКК, они будут либо усовершенствованы (если их уровень ниже возможностей АКК), либо останутся нетронутыми АКК может быть полностью развернут на планете даже при нехватке свободных секторов, поэтому особо ценен при колонизации малых планет АКК не может быть развернут на луне Существуют три вида АКК, различающихся по стоимости и возможностям: Малый АКК - колония включает в себя Рудник, Синтезатор кристаллов и Синтезатор дейтерия 10го уровня, Солнечную электростанцию 14го уровня и Фабрику роботов 4го уровня Средний АКК - колония включает в себя Рудник, Синтезатор кристаллов и Синтезатор дейтерия 15го уровня, Солнечную электростанцию 20го уровня и Фабрику роботов 8го уровня Большой АКК - колония включает в себя Рудник, Синтезатор кристаллов и Синтезатор дейтерия 20го уровня, Солнечную электростанцию 25го уровня, Фабрику роботов 10го уровня и Нанофабрику 1го уровня "Эвристический чип" и "Наностроитель" ------------------------------------- Артефакты уменьшают на 1 час соответственно время текущего исследования и время постройки/уничтожения текущего здания на текущей планете Если оставшееся время исследования/постройки/уничтожения меньше одного часа, то Артефакт обнуляет время. Разница не переходит на следующий слот в очереди Стоимость эвристического чипа составляет 20.000 ТМ Стоимость наностроителя составляет 5.000 ТМ В очередь построек добавлена возможность использовать Наностроитель - при наличии Артефакта на складе В очередь построек добавлена возможность использовать Эвристического чипа - при наличии Артефакта на складе Модуль "Капитаны": unit_captain =============================== Капитан - это опытный командующий, который летает с флотами и за счет более тонкого управления флотами улучшает эффективные характеристики всех кораблей во флоте С флотом можно отправить только одного Капитана Каждый Капитан привязан к определенной планете или луне. Нельзя иметь двух Капитанов на одном небесном теле. Капитан, летящий с флотом, все равно считается привязанным к планете Капитана можно перевозить с одной планеты на другую миссией "Передислокация". При этом на время перелёта Капитан считается привязанным сразу к обоим планетам - стартовой и финишной Найм и гибель Капитана ---------------------- Капитан нанимается за ТМ Найм и управление Капитанами осуществляется через пункт меню "Капитаны" (сразу под "Наемниками") При гибели флота Капитан так же погибает. Под "гибелью флота" подразумевается уничтожение всех кораблей флота. Это верно как для атакующих флотов, так и для флотов, стоящих в удержании Капитан на планете не участвует в защите планеты при атаке - этим занимается Фортификатор. Зато при полном уничтожении всего планетарного флота такой Капитан не погибнет Опыт, уровни и навыки Капитана ---------------------- За каждый выигранный простой бой (САБы и миссия "Уничтожить" не считаются) Капитан атакующего флота получает 1 пункт опыта. За "победы" над неактивными игроками опыт не начисляется. Так же не начисляется опыт, если бой закончился выигрышем атакующего за 1 раунд Капитаны всегда улучшают характеристики кораблей своего флота - даже если участвуют в бою, за который они не получат опыта: атака на неактивных игроков, удержание, САБ, уничтожение луны и т.д. При наборе определенного количества опыта Капитан получает новый уровень Чем выше уровень - тем больше опыта нужно для получения следующего уровня Повышение в уровне дает возможность улучшать умения Капитанов. Умения Капитана включают бонусы к щитам, броне и атаке Каждый уровень умений дает 1% к базовому значению соответствующей характеристики кораблей во флоте, которым управляет Капитан Уровни Капитана вкладываются в умения один раз и навсегда - поэтому заранее тщательно планируйте развитие своего Капитана Капитаны в Обзоре Империи ------------------------- Уровни Капитанов указываются в списке юнитов на Обзоре Империи. На заднем фоне ячейки с уровнем выводится прогресс-бар развития Капитана с цветовым кодированием: Пустая ячейка - Капитан не нанят, либо только что получил уровень Красный прогресс-бар - до следующего уровня осталось больше 50% опыта Оранжевый - не меньше 50% опыта, но меньше 80% Желтый - не меньше 80% опыта Зеленый - в следующем бою Капитан получит новый уровень Капитаны в летящих флотах ------------------------- В списке флотов на странице "Флоты в полёте" и для своих флотов на странице "Обзор планеты" если во флоте есть Капитан перед количеством кораблей во флоте высвечивается "*", а в попапе состава показывается его уровень Смена имени пользователя ======================== Добавлена возможность изменения имени пользователя за ТМ. Стоимость изменения - 100.000 ТМ Игра сохраняет историю изменения имени пользователя. Только бывший владелец может при желании вернуть себе старое имя - опять же за ТМ Поиск по имени так же производится по старым именам. В случае, если старое имя пользователя соответствует критериям поиска, в результаты будет добавлена еще одна строка, в которой будет указано текущее имя пользователя, а после него в скобках и выделенное цветом - старое имя пользователя. Никто не спрячется от своей истории! Максимальная длина имени пользователя уменьшена до 32 символов Переменная настроек сервера 'game_user_changename' отвечает за возможность смены имени пользователя самим пользователем: 0 - смена имени запрещена 1 - смена имени разрешена и свободна 2 - смена имени разрешена, но стоит ТМ. Стоимость смены имени указана в переменной 'game_user_changename_cost' (100.000 ТМ по умолчанию) По умолчанию включена смена пользователем своего имени за ТМ Чёрный Рынок ~~~~~~~~~~~~ Полностью переписан Чёрный Рынок. Теперь можно менять ТМ на ресурсы (Торговец Ресурсами), продавать несколько типов кораблей за одну транзакцию (Скупщик флота). Так же добавлен "Продавец кораблей", где можно выкупить ранее кем-то проданные корабли Торговец ресурсами ------------------ Теперь можно поменять ТМ сразу на все ресурсы (опция "Все ресурсы" в дропдауне выбора ресурсов). При этом вводимая сумма будет разделена на три части и на каждую из этих третей будет куплено соответствующее количество ресурсов по курсу. Стоимость такой операции - в три раза больше базовой стоимость обмена. Продавец информации =================== На Чёрном Рынке доступна новая услуга: продажа информации. Письма от Продавца Информации всегда приходят в почтовый ящик - даже если у игрока отключено получение шпионских отчетов. Мистика какая-то! Информация об игроке -------------------- Текущие уровни активных Наемников и (если есть) уровень премиума [#] Модуль player_race: Расы ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ДАННЫЙ МОДУЛЬ НЕ ВХОДИТ В СОСТАВ ПУБЛИЧНОЙ ВЕРСИИ! Модуль обеспечивает функциональность "рас" - дополнительные бонусы игроку при выборе одной из предустановленных "Родных миров" - так в терминологии СН называются расы Раса выбирается после регистрации на странице Императора. Первый выбор расы производится бесплатно, каждая смена расы стоит 100.000 ТМ В модуле имеется шесть предустановленных рас с возможностью изменения любой расы либо напрямую в модуле, либо отдельным модулем Список предустановленных рас: земляне, луниты, меркурианцы, венериане, марсиане, республиканцы (Астероидные Республики) Иконка расы отображается в чате, в статистике, в попапе информации об игроке во Вселенной и на странице Императора. Удержание курсора над иконкой расы вызывает тултип с её названием. Клик - открывает страницу с описанием всех рас Каждая раса имеет собственные бонусы. Бонусы рас действуют сразу же после выбора родного мира - не нужно, например, исследовать техи, что бы получить к ним бонус Описание текущей расы доступно на странице Императора. Там же есть ссылка на описание всех рас в игре с указанием их символов [#] Модуль player_race_units: Расовые юниты =========================================== ДАННЫЙ МОДУЛЬ НЕ ВХОДИТ В СОСТАВ ПУБЛИЧНОЙ ВЕРСИИ! ДЛЯ ФУНКЦИОНИРОВАНИЯ ДАННЫЙ МОДУЛЬ ТРЕБУЕТ НАЛИЧИЕ МОДУЛЯ PLAYER_RACE! Модуль добавляет по одному уникальному юниту каждой расе Пакет так же содержит модуль-пример добавления новой расы и расового юнита Шесть уникальных юнитов - по одной каждой из рас: Земная "Лень" - боевой солнечный спутник Лунная "Зависть" - легкий бомбардировщик Меркурианское "Обжорство" - емкий переработчик Венерианский "Гнев" - истребитель-перехватчик Марсианская "Гордыня" - усовершенствованный линейный крейсер Республиканская "Жадность" - боевой транспорт Флот: корабли, миссии и боевая система ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Боевая система ============== СН использует собственную боевую систему UBE. Все расчеты, касающиеся обработки боя, унифицированы. Т.е. обычный бой, симулятор, удержание и уничтожение луны - все они используют один и тот же алгоритм расчета. В RR использовались три разных движка для разных расчетов Особенности UBE --------------- 1. Своя система расчета повреждений 2. Свой собственный вариант "скорострела" (НЕ ТАКОЙ, КАК НА ОФФЕ!) 3. Свой алгоритм расчета добычи с планет 4. Полностью рабочие САБы 5. Работает удержание на лунах при задании "Уничтожить" В UBE НЕТ понятия "скорострела". Вместо него используется понятие "залповый огонь". По функционалу "залповый огонь" и "скорострел" - понятия одного ряда. Но алгоритмы расчета у них РАЗНЫЕ. Боевая система работает следуюшим образом. Предполагается, что оба флота (в случае боя один на один) летят в формации "диск". Что, в целом, логично - надо максимизировать возможность каждого корабля дать залп. Залп флота распределяется между классами кораблей противника в зависимости от брони (ака - тоннажа, ака размера). Тоже логично - в большую цель легче попасть. Щиты принципиально отличаются от брони тем, что щиты считаются целиком по типу кораблея, а броня - индивидуально для каждого корабля. Т.е. что бы повредить один корабль, сначала надо пробить щиты по типу кораблей. При выстреле атакующего в противника, против которого у аттакера есть залповый огонь, урон модифицируется согласно внутренним таблицам. Залповый огонь может как увеличивать наносимые повреждения, так и уменьшать - значения в таблицах залпового огня подобраны таким образом, что бы с одной стороны сделать каждый корабль уникальным и применимым в определенных условиях, а с другой стороны - сбалансировать все корабли между собой и не допустить появление суперкораблей. Обращаю внимание - залповый огонь применяется сразу по щитам. Дальше часть урона поглощается щитами, а если что-то прошло сквозь щиты - наносится повреждение по броне. А там сравниваем прошедший урон с броней и списываем нужное количество корабликов. Случайная составляющая ---------------------- Бои в СН имеют случайную составляющую. Т.е. результаты двух проведенных боев в одних и тех же начальных условиях могут различаться кардинально. С точки зрения игрового мира, случайная составляющая отражает маневры кораблей, работу пилотов, наводчиков и всего остального экипажа корабля, а так же случайности, присущие реальному миру. Симулятор боя ------------- В симуляторе убрана случайная составляющая. Это позволит не пересчитывать результаты по десять раз, что бы получить примерное представление о бое, а с первого раза увидеть результат "в нормальных условиях" без влияния случайностей. Симулятор поддерживает продвинутую систему ссылок. Теперь можно давать ссылку как на результат симуляции, так и на форму с заполненными входные данные для дальнейших экспериментов FAQ по боевой системе --------------------- Q: Что означает в описании корабля Х строка "Одним залпом поражает КорабльY ZШтук"? A: Она означает, что если корабль Х (при отсутсвии бонусов к щитам/броне/урону и отсутсвии офицеров) встретится с ZШтук кораблей разновидности КорабльY, то за один раунд корабль Х уничтожит все корабли противника. Для кораблей, которых нет в списке залпового огня, количество убиваемых кораблей за раунд равно: (БроняЗащитника + ЩитыЗащитника) / АтакаНападающего. Q: Корабль Х уничтожил корабли противника, но ответным залпом его самого сбили! A: А так вполне может быть. Выживаемость корабля Х никто не гарантировал Q: Как-то странно выбираются цели при залпе... A: Увы, что бы корректно выбирать цели, необходимо обсчитывать каждый корабль. Т.е. во-первых - иметь индивидуальную запись каждого корабля. Во-вторых - вычислять эффективность удара в зависимости от параметров каждого корабля, т.е. совершать просмотр огромного количества информации каждый ход. Если даже применять всякие алгоритмы оптимизации и сортировки, то на величинах порядка десятков тысяч кораблей (обычная бойня между топ-флотами) количество вычислений будет чрезвычайно велико. И это не считая сложности разработки более-менее оптимального алгоритма. Поэтому ради ускорения расчетов приходится идти на сознательное огрубление модели. Q: Просуммировал нанесенные повреждения, а затем посчитал, сколько должно было быть нанесено повреждений. Цифры не совпадают!!! A: Поскольку применяется достаточно грубая и упрощенная модель (см. предыдущий ответ), часть урона может пропасть. Например, если несколько атакующих стреляют по одним и тем же кораблям и первым залпом корабли защитника уничтожены, то остальной урон прийдется на пустое место, т.е. "пропадет". Учет "пропавшего" урона потребовал бы перерасчета всех оставшихся категорий кораблей на каждой итерации, т.е. существенно увеличил бы нагрузку (эксперимент такого рода проводился). Кроме того, если урон приходится на последние корабли противника, часть его все равно пропадет. Q: Посчитал в симуляторе - СН не смогла убить туеву хучу кораблей! Корабль - гавон!!! A: Еще раз - применяется достаточно грубая и упрощенная модель обсчета боя, см. пред-предыдущий ответ. В частности, каждый раунд количество уничтоженных кораблей округляется вниз до ближайшего целого. Т.е. если в одном раунде корабль атакующего нанес повреждений после щита на 0.99 кораблей защитник, это значение округляется до 0 и в следующем раунде количество кораблей у защтника будет таким же. Грубо говоря, это означает, что в начале раунда все уцелевшие корабли имеют полную броню. В случае симулятора, где отсутствует случайная составляющая, при определенных условиях СН не сможет убить ни одного корабля. Впрочем, на граничных случаях движок офф-сервера тоже ведет себя крайне странно. У каждого движка - свои особенности. Ракетный удар ------------- Полностью переписан скрипт ракетной атаки. Основные моменты: [*] Полностью устранена ошибка с отрицательными защитными строениями после атаки [*] Полностью устранена ошибка с размножением защитных строений после атаки [*] Теперь ракетами в принципе можно уничтожить планетарную защиту (раньше это было невозможно) [*] Учитывается уровень вооружений нападающего и уровень брони обороняющегося [*] Учитываются щиты оборонных сооружений. Это должно слегка уменьшить эффективность ракет и повысить живучесть защитных сооружений с большим количеством щитов [*] При ракетном ударе рандомизируются параметры атаки, брони и щитов у соответствующих юнитов. Границы такие же, как и для сражений флотов - от 80% до 120% [*] Максимально выбирается весь ракетный урон - ранее существенная часть урона могла быть потеряна [*] Полностью переписана логика случайной атаки - когда ракетам не задана цель. Теперь она ДЕЙСТВИТЕЛЬНО случайная (в рамках предыдущего пункта) [*] При выборе конкретного сооружения для атаки ракета бьет ИСКЛЮЧИТЕЛЬНО по выбранному сооружению [*] Правильно и всегда срабатывают перехватчики [*] Теперь после атаки можно собирать обломки защитных сооружений - защитнику автоматически добавляется половина стоимости сооружений в металле и четверть - в кристаллах [*] Устранен глюк с многократным подсчетом одной атаки [*] Расширено и дополнено сообщение о результатах нападаения, приходящее защитнику [*] В результате изменений в алгоритме существенно повысилась живучесть ПЗ при ракетном ударе [*] Добавлена поддержка усиления залпа для МПР Луна ---- Теперь при создании луны с орбиты списывается количество обломков, из которых сформировалась луна UBEv4 ===== В 36м релизе была произведена замена UBEv3 на UBEv4: с нуля был написан боевой движок и боевые отчеты. В этом разделе будут перечислены особенности новой боевой системы и её отличия от UBEv3 Особенности подготовки к бою ---------------------------- Бой теперь считается не по $time_now, а по времени прилета флота - на случай, если бой сильно отложенный. Например, при сбоях движка или низкой активности сервера. Так будут отработаны корректно все удержания в правильное время Особенности хода боя -------------------- Броня не регенерируется между раундами Если броня упала ниже 75% - корабль имеет шанс взорваться равный проценту от общего здоровья Sneak defense ------------- Новый механизм боя: подлов атакующего или sneak defense. Если в САБе и в удержании участвуют флоты одного и того же игрока, то прилетающие флоты этого игрока будут сражаться на стороне защитника. Аккуратно смотрите, кого приглашает в САБ. Хе-хе Особенности подведения итогов боя --------------------------------- Если в бою участвует хотя бы один флот Админов с любой стороны - лом не выпадает ни с кого! Возвращение обломков с оборонных сооружений не производится В миссии "Уничтожить" шанс уничтожения флота от взрыва одного из кораблей при попытке уничтожить луну теперь так же зависит от количества гравидвигателей во флоте - чем их больше, тем шанс выше В миссии "Уничтожить" корабли могут взорваться даже в случае успешного уничтожения луны. Как и раньше, подрыв кораблей с гравидвигателем уничтожает весь флот Теперь в рейдовый опыт засчитываются исключительно одиночные атаки. Ни "Удержание", ни "САБ" не засчитывается. Т.е. вообще не засчитываются - вне зависимости от результата боя Теперь атаки на неактивных игроков ("i-шки") не приносят рейдовый опыт Количество свободных полей на луне зависит от её размера и определяется по формуле Размер/1000 с округлением вверх до целого Изменен расчет поля обломков. Теперь на орбите оказывается от 30% до 70% выброшенных за борт ресурсов и от 20% до 40% обломков кораблей. В детерминированном симуляторе процент обломков на орбите всегда равен 30%, а обломки, выброшенные из трюма всегда составляют 50% от потерь 9. Шанс уничтожения луны теперь всегда лежит в пределах 1%-99% Боевой отчёт ------------ Боевой отчет теперь состоит из трёх частей: "Основная информация о бое", "Боевые потери" и лог раундов "Основная информация о бое" показывает: 1. Время проведения боя (если доступно) 2. Место боя (если доступно) - координаты планеты, её тип и имя 3. Результат боя (выигрыш атакующего, ничья, проигрыш атакующего) 4. Обломки на орбите 5. Шанс образования луны и результат такой попытки 6. (Для миссии "Уничтожить") Состояние кораблей с гравидвигателями по итогам боя. Шанс уничтожения луны оставшимися кораблями и результат такой попытки. Шанс взрыва кораблей и итог миссии Раздел "Боевые потери" показывает: 1. (На планетах) Количество восстановленных боевых сооружений 2. Общие потери боевых единиц каждого из участвующих в бою игроков. Если у одного игрока участвовало в бою несколько флотов - будут показаны суммарные потери по всем флотам. Это верно для всех параметров в этом разделе. Для планетарной обороны в потери не включаются восстановленные единицы 3. (В случае победы атакующих) Количество ресурсов, вывезенных с планеты. Для планеты это будет положительное число, для атакующих флотов - отрицательное 4. (Для флотов) Количество ресурсов потерянных из-за уменьшения емкости трюмов вследствии уничтожения части флота. Эти ресурсы рассматриваются как "боевые потери" - они плюсуются к обломкам на орбите и к потерям в пересчете на ресурсы 5. Общие потери в пересчете на ресурсы. Включает стоимость боевых единиц на момент боя, вывоз с планеты и ресурсы, потерянные из-за уменьшения трюмов 6. Общие потери в ресурсах в пересчете на металл по курсу Черного Рынка на момент проведения боя. Писькомерка для сравнения "Лог раундов" показывает результаты расчета каждого раунда для всех флотов 1. Показывает координаты и тип планеты, с которой прилетели флоты атакующих/защитников 2. Расширено количество информации о боевых подраздеениях Добавлена информация о "Пробое" и "Уроне". "Пробой" - атака, которая пришлась на щиты и была ими поглощена (или пропущена - см. ниже). "Урон" - атака, которая пришлась на броню 3. Цветовое кодирование информации о подразделениях: Зеленый означает, что вся атака в раунде поглощена щитами Желтый - часть атаки пробила щиты ("пробой") и нанесла урон по броне, но при этом ни одна боевая единица не уничтожена Оранжевый - один или более боевых единиц уничтожено Красный - все оставшиеся боевые единицы уничтожены в этом раунде Число в скобках в столбце потерь - количество боевых единиц, взорвавшихся в раунде из-за фатальных повреждений В боевом отчете координаты планет являются ссылками на Вселенную Симулятор боя ------------- Доработан симулятор для поддержки изменений в UBEv4 Стандартный режим работы симулятора - полная определенность результатов в зависимости от начальной конфигурации (галочка "Симуляция" включена) Добавлен второй режим работы - недетрминированный симулятор (галочка "Симуляция" отключена). В этом режиме работы проводится полная симуляция боя (включая образование луны) с применением генератора случайных чисел - т.е. так, как происходил бы обычный бой. В этом режиме результаты могут сильно отличаться от симуляции к симуляции. Так же в этом режиме происходит запись боевого отчета с результатом симуляции в БД В стандартном режиме если шанс образования луны больше 1 всегда образуется луна со средним размером для данного шанса Шпионаж ======= Переписана подсистема шпионажа. Корректно выставляется время шпионского рапорта. Переписана процедура генерации шпионского рапорта Алгоритм работы шпионажа - почти оффовский, потому что он меня вполне устраивает: 1. Эффективный уровень шпионажа (ЭУШ) на миссию определяется по формулам: Для атакующего: TechLevel + MercLevel + sqrt(ProbeNum) - 1 Для защитника: TechLevel + MercLevel где TechLevel - уровень технологии шпионажа MercLevel - уровень Наемника "Шпион" ProbeNum - количество шпионских зондов, летящих в миссию sqrt() - функция извлечения квадратного корня 2. Вычисляется разница между ЭУШ атакующего и ЭУШ защитника. Если разница уровней... меньше 2 - атакующий видит только ресурсы 2 и выше - атакующий видит флот на орбите (только флот хозяина планеты! Удержание не видно!) 3 и выше - атакующий видит защитные сооружения 5 и выше - атакующий видит постройки 7 и выше - атакующий видит технологии 3. Шанс (в процентах) обнаружения шпионского флота защитником определяется по формуле: К-во зондов*pow(2, ЭУШ защитника - ЭУШ аттакера)*К-во кораблей на орбите/4 где pow(2, X) - функция степени двойки, т.е. "2 в степени X". Обращаю внимание, что в некоторых случаях шанс обнаружения может быть больше 100% - например при большом флоте на орбите, при большом количестве кораблей в шпионском флоте, при большой разнице между ЭУШ защитника и аттакующего 4. После вычисления шанс обнаружения сравнивается со случайным числом от 0 до 99. Если шпионский флот обнаружен - он в полном составе уничтожается (да, в шпионаж все корабли летят со снятым оружием и броней!). Из вышеописанного алгоритма следует несколько интересных следствий: 1. Количество зондов решает 2. Флот на орбите решает зонды 3. Защититься от шпионажа невозможно, но можно сделать его дорогим удовольствием. Настолько дорогим, что летать в шпионские миссии на равного по уровню шпионажа игрока будут только в endgame. Собственно, для этого и изменены цифры разницы уровней 4. Посылать количество зондов, некратное квадрату - не имеет смысла. Все равно в расчетах округлится вниз до ближайшего квадрата, а риск обнаружения шпионажа существенно вырастет 5. И уж тем более нет смысла посылать в шпионаж любые корабли кроме зондов 6. Развивай шпионаж с молоду! 7. Офицер "Шпион" - он не зря в условно-шахтерской ветке! Удержание ========= В СН ограничения защиты слабых игроков (см.) распространяется и на удержание. Т.е. в нормальном режиме невозможно стать в удержание к слабому игроку. Данный подход выбран для того, что бы уменьшить шанс появления доминирующего Альянса (впрочем, как показывает практика ВСЕХ онлайн-игр - это все равно случается рано или поздно. Монополизация - путь к глобальному доминированию!). Для неразделяющих такую точку зрения администраторов в настройки сервера введен дополнительный пункт, разрешающий становится в Удержание к более слабому соаловцу Прочее ====== На странице выбора миссии таблица загрузки ресурсов по умолчанию отключена Добавлено дополнительное сообщение при совпадении планеты отправки и пункта назначения Добавлено дополнительное сообщение при попытке отправить незагруженный флот с миссией "Транспорт" Добавлено дополнительное сообщение при попытке отправить флот с ресурсами в миссию, отличную от миссий "Транспорт", "Передислокация" и "Колонизация" Изменены ограничения на отправку Шпионов. Их можно посылать в одиночку в миссии "Шпионаж", "Передислокация" и "Транспорт". Во все остальные миссии Шпионов тоже можно отсылать - но только в сопровождении других кораблей Корабли ======= Супертранспорт -------------- Более медленная и емкая версия транспортного корабля Гипертранспорт -------------- Новый корабль - Гипертранспорт. Предназначен для ТОП игроков и/или скоростных Вселенных Экономика ========= Новая настройка сервера "Масштабировать склады от скорости добычи". Настройка доступна в общих настройках сервера в разделе "Прочие параметры". По умолчанию возможность включена При расчете времени постройки юнитов учитывается не только количество ресурсов, но и их качество. Время постройки нормированы по дейтерию, т.е. постройки с большей долей низкоуровневых ресурсов строятся быстрее Изменен алгоритм расчетов бонусов добычи ресурсов. Список изменений приводится ниже: 1. Бонусы на добычу ресурсов улучшают так же базовую добычу на планете 2. Бонусы на добычу ресурсов так же увеличивают потребление сопутствующих ресурсов - дейтерия (для Термоядерной Электростанции) и энергии (для всех остальных шахт) 3. Бонусы на добычу ресурсов улучшают так же выработку энергии на спутниках 4. Недостаток энергии влияет на базовую добычу - т.е. она теперь масштабируется в зависимости эффективности производства 5. Естественное производство дает 100% ресурсов даже при недостатке энергии Изменен алгоритм работы Термоядерной электростанции. Теперь ТЭС не использует ресурсы со склада, а оперирует только балансом производства дейтерия. Т.е. ТЭС работает только при положительном балансе производства дейтерия И генерации энергии одновременно. Это сделано для того, что бы оставленная "без присмотра" ТЭС с отрицательным балансом по дейтерию не выжрала весь ресурс со склада Как следствие - ТЭС не отключается при положительном балансе производства дейтерия и энергии, даже если количество дейтерия на планете равно 0. Это упростит своз ресурсов с планет, на которых энергия генерируется только на ТЭС Теперь при эффективности добычи ресурсов менее 100% вместе с актуальными значениями добычи в ячейку добавляется рассчетное значение добычи в круглых скобках. Это упростит балансировку производсва при недостатке ресурсов Убрана задержка в обновлении информации о производстве ресурсов Энергия ------- Изменена выработка энергии по сравнению с оффом и RR. Во-первых - модификатор скорости игры теперь не действует на выработку энергии. Во-вторых - на выработку энергии солнечными электростанциями влияет температура планеты. В-третьих - Производство энергии на термоядерной электростанции теперь считается по формуле оффа: 30 * [Э] * (1,05 + [Т] * 0,01) ^ [Э] где Э - уровень электростанции, Т - уровень энергетической технологии В-четвертых - энергетическая технология больше не дает дополнительный бонус к производительности электроэнергии. Однако офицер Энергетик по-прежнему дает бонус Выработка энергии изменена исходя из следующих правил: 1. Электростанция может поддерживать одну шахту и один синтезатор рудника того же уровня (взято с оффа) 2. Формула выработки термоядерной электростанции взята с оффа 3. Средняя температура на планете - 20 градусов (это планеты с минимальной температурой 0 градусов и максимальной 40 градусов). На такой планете эффективность солнечной электростанции будет 100% Исследования ============ Пересмотрены технологии. Устранены противоречия в ветках развития (например, ионный двигатель можно было исследовать без технологии). Технологии переупорядочены в более логичном порядке Добавлены подробные сообщения об ошибке в случае, когда технология не может быть исследована (нехватка ресурсов, неудовлетворенные требования итд) Лаборатория ----------- Полностью переписан интерфейс Лаборатории Очередь исследований приведена к стандартному виду Обработка очереди исследований теперь производится при каждом обновлении страницы, а не только при входе в интерфейс Лаборатории Межгалактическая Исследовательская Сеть --------------------------------------- Изменена схема работы МИС. Теперь МИС работает следующим образом: 1. По каждой планете вычисляется эффективный уровень исследования (ЭУИ) ЭУИ = уровень лаборатории / (0,5 ^ уровень нанитки) 2. Планеты сортируются по эффективному уровню 3. Отсекаются планеты с уровенм лаборатории, недостаточным для проведения данного исследования 4. Выбирается верхние (уровень МИС + 1) планет в списке и суммируется ЭУИ этих планет 5. Получившееся число подставляется в формулу вычисления времени исследования Следствия: 1. Нанолаборатория теперь увеличивают эффективность лаборатории только на той планете, на которой они расположены 2. Время исследования теперь одинаково на всех планетах. На некоторых планетах чуть больше, на некоторых - чуть меньше, но в среднем - лучше, чем было раньше 3. Имеет смысл держать только (уровень МИС + 1) планет с лабораториями. Остальные просто не будут подключаться. 3.1. Примечание к следствию 3 - собственно, так было и раньше - все равно исследование могло проводиться только на одной планете Очередь исследований -------------------- Очередь исследований перенесена с планет на пользователя При отмене исследования ресурсы возвращаются на ту планету, с которой были взяты Награда за квесты на исследование теперь всегда начисляется на основную планету игрока Изменен алгоритм рассчета эффективного уровня лаборатории и необходимого времени исследования при настройке сервера "Строить лабораторию во время исследования: Нет" Теперь при идущем исследовании блокируется постройка/уничтожение нано- и/или лабораторий на все планетах Теперь блокируется попытка начать исследование на планете, где идет постройка/уничтожение нано- и/или лабораторий Однако возможно начать исследование на другой планете. В таком исследовании не будут участвовать все планеты где происходить модификация нано- и/или лабораторий. При этом по окончании постройки/уничтожения время исследования не пересчитывается Технологии двигателей --------------------- Бонус к скорости полета кораблей теперь вычисляется относительно требуемого уровня технологии двигателя. При равной технологии пользователя бонус равен нулю, при отличной - разнице уровней между требованиями постройки и пользовательской умноженной на бонус двигателя. Если уровень технологии пользователя меньше, чем требуемый уровень (например, для кораблей, купленных на Черном Рынке), то корабль получает пенальти к скорости, вычисляемое аналогично, но не более 95% Пример. Бомбардировщик требует Ионный двигатель 6-го уровня. Базовая скорость полета корабля - 4.000. Каждый уровень технологии Ионных двигателей дает 20% к скорости полета. Таким образом: * При технологии Ионных двигателей 8-го уровня скорость полета составит: 4.000 * (1 + (8 - 6) * (20 / 100)) = 4.000 * (1 + 2 * 0,2) = 5.600 * При технологии 6-го уровня - 4.000 * При технологии 3-го уровня 4.000 * (1 + (3 - 6) * (20 / 100)) = 4.000 * (1 - 3 * 0,2) = 1.600 * Без технологии пенальти к уровню будет равно 120%, поэтому вступит в силу ограничение: 4.000 * (1 + (0 - 6) * (20 / 100)) = 4.000 * (1 - 0,95) = 200 Технологии двигателей теперь так же влияют на расход топлива. Каждый уровень, выше требуемого, уменьшает расход топлива на 10% от бонуса к скорости за уровень, но не больше чем 50% от расхода. Каждый уровень, ниже требуемого - увеличивает расход на 20% от бонуса. Например, для Бомбардировщика каждый уровень Ионного двигателя, ниже 6-го будет увеличивать расход топлива на 4% до 12% при полном отсутствии технологии. Каждый уровень, выше 6-го будет уменьшать расход топлива на 2%, вплоть до 25-го уровня, когда вступит в силу ограничение. Система рейтингования и статистика ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Статистика ========== Изменен расчет статистики. Теперь в тратах каждый ресурс считается согласно курсу обмена. Таким образом игроки с более ценными ресурсами получат больше очков Добавлена статистика по ресурсам Для игроков добавлены отображение следующих видов статистики: "Проведено боев", "Выиграно боев", "Проиграно боев", "Уровень за постройки", "Уровень за исследования", "Уровень за рейдерство". В качестве исходных данных используется информация из записей игроков (т.е. актуальная информация на момент просмотра статистики), поэтому изменение для данных типов статистики всегда будет равно нулю Полностью переписана страница вывода статистики игроков и Альянсов с использованием PTE Теперь можно управлять появлением игроков в статистике и рекордах. Для этого на странице настроек сервера появились дополнительные настройки. Они размещаются в разделе "Статистика и рекорды" Отключение настройки "Прятать админов" добавит в статистику и рекорды всех пользователей с authlevel > 0. По умолчанию она включена Настройка "Прятать игроков" позволяет указать через запятую перечень ID игроков, которые не будут участвовать в статистике и рекордах. Это может быть полезно для создания NPC - ботов или игроков, которые исполняют их роли Так же в этот раздел вынесена настройка расписания автоматического обновления статистики. ВНИМАНИЕ!!! КРАЙНЕ НЕ РЕКОМЕНДУЕТСЯ МЕНЯТЬ ЗНАЧЕНИЕ ПО УМОЛЧАНИЮ!!! Добавлена опция "Скрывать ссылки на ЛС". При её включении в таблице статистики не показывается URL на создание личного сообщения игрокам Теперь переход по определенной позиции (например со страницы Вселенной) скроллирует страницу сразу на эту позицию Немного уменьшен размер страницы статистики Защита "начинающих" и "слабых" игроков ====================================== Полностью переписан алгоритм защиты игроков от нападения более сильного игрока. Возьмем двух игроков - Игрок1 и Игрок2. Если у Игрока1 количество очков общей статистики в game_noob_factor (по умолчанию - 5) раз больше, чем у Игрока2, то Игрок1 по отношению к Игроку2 считается "сильным" игроком, а Игрок2 по отношению к Игроку1 считается "слабым" игроком. "Слабые" игроки полностью защищены от агрессивных действий со стороны "сильных" - на них нельзя нападать, нельзя шпионить, нельзя уничтожать луну итд. "Слабый" игрок может нападать на "сильных" Установка game_noob_factor в 0 отключает защиту "слабых" игроков Игроки, у которых количество очков в общей статистике не превышает game_noob_points (по умолчанию 5.000) считаются "начинающими" игроками. На "начинающего" игрока может напасть только другой "начинающий" (естественно, с учетом соотношения "слабый-сильный", см. выше). "Начинающий" может нападать на кого угодно. Установка game_noob_points в 0 отключает защиту "начинающих" игроков Прокачка ======== Под "прокачкой" понимается пересылка ресурсов от слабого игрока к сильному. В СН встроена система защиты от прямой прокачки (прямая пересылка ресурсов миссией "Транспорт"). Однако вместе с позитивными моментами защита несет и негативные моменты - фактически исключен обмен ресурсами между игроками, потому что в обмене в подавляющем большинстве случаев один игрок является более сильным, а второй - более слабым. С моей точки зрения практическая невозможность обмена ресурсами вполне компенсируется невозможностью прямой прокачки (существуют, правда, способы непрямой прокачки, которые я не буду здесь офишировать в силу общедоступности движка вообще и данного файла в частности любым игрокам). Однако для администраторов, не разделяющих такую точку зрения, добавлена возможность разрешения прокачки в настройках сервера. Соответствующие установки настройки видны игрокам на странице сервера "Мировые константы" Квесты ====== В СН реализована подсистема квестов. Администратор сервера может самостоятельно добавлять новые квесты и выбирать награду за его исполнение: фиксированное количество одного или любой комбинации ресурсов: металл, кристалл, дейтерий или ТМ. Доступ к конструктору квестов осуществляется из меню "Квесты" страницы администрирования. Создание квестов доступно только Администратору сервера (auth_level = 3). Администратор может посмотреть выполненные квесты игрока по ссылке в профиле игрока (поиск через админпанель) Доступны квесты на постройку зданий и обороны, на исследование и на постройку кораблей. Игроки, превысившие условия квеста, автоматически получат вознаграждение при следующей проверке на критерии выполнения. Например, если целью квеста является постройка шахты 10го уровня, то при постройке шахты выше 9го уровня на любой планете игрок получит квестовое вознаграждение. То же самое верно и по отношению к уничтожению шахты. Однако, если при уничтожении шахты её уровень окажется ниже 10го, то игрок вознаграждения не получит, хотя он уже и имел шахту 10го уровня. Триггер на условие квеста "постройка кораблей" является локальным и срабатывает при постройке указанного корабля. Т.е. если есть квест на постройку 10 ЛИ, а на планете есть 20 ЛИ, то вознаграждение квеста игрок получит только после постройки 1 ЛИ. "Локальность" означает, что если в указанном примере игрок имеет 10 ЛИ на всех колониях, но на одной колонии их количество меньше условия квеста, то вознаграждение за квест он получит только если в момент постройки ЛИ их количество на одной планете будет равно 10. Игрок может просматривать список доступных квестов и их статус (выполнен или не выполнен). По выполнению квеста игроку высылается письмо с уведомлением. Общее количество и количество выполненных квестов видно игроку в навбаре Модуль новостей =============== Добавлен полноценный модуль новостей, доступный по ссылке "Новости" в левом меню. Доступ к управлению новостями админы получают по той же ссылке - права определяются по authlevel К пункту меню "Новости" добавлен индикатор непрочитанных сообщений Добавлена дополнительная строка в админском интерфейсе, в которую можно вбить URL с подробностями новости. URL добавится в конце новости в виде гиперссылки со слова "Подробнее..." из текста новости Добавлена возможность массовой рассылки новости всем игрокам Добавлена лента новостей на страницу обзора планеты. Выводятся только последние непрочитанные новости. Количество выводимых новостей настраивается на сервере (по умолчанию - 3) Количество новостей ограничено 20-ю самыми свежими На странице Обзора планеты добавлена подсказка как закрыть окно со свежими новостями Редактирование новости ---------------------- При редактировании новости галочка рассылки новости по умолчанию отключена При редактировании новости не изменяется глобальное время написания последней новости - т.е. отредактированная новость не включает список последних новостей на обзоре планеты Игроки ====== Добавлено отображение пола игрока на странице "Император", на странице статистики и в попапе игрока на странице "Вселенная" Аватар ------ Добавлена поддержка серверных аватаров игроков Аватары могут быть загружены с локального диска на странице настроек пользователя. Поддерживаются файлы форматов JPG, GIF и PNG размером до 200КБ. Загруженные картинки будут отмасштабированы до размеров 128х128. Аватар отображается на странице "Император" и в попапе игрока на странице "Вселенная". Альянсы ======= Полностью переписан модуль управления Альянсами. Кардинально сокращено количество прав, упрощен интерфейс, переписана система заявок и так далее. Логотип Альянса --------------- Добавлена поддержка серверных логотипов Альянсов Логотипы могут быть загружены с локального диска на странице управления Альянсом Поддерживаются файлы форматов JPG, GIF и PNG размером до 200КБ. Загруженные картинки будут отмасштабированы до размеров 128х128 Логотип отображается на странице информации об Альянсе и в попапе Альянса на странице "Вселенная" Дипломатия ---------- СН содержит подсистему дипломатии Альянсов. Дипломатия позволяет устанавливать различные типы отношений между Альянсами. Некоторые отношения влияют на внутриигровую механику, некоторые - нет Информация о текущих дипломатических отношениях Альянса отображается на странице информации об Альянсе и доступна для просмотра любому игроку Глава Альянса может начинать переговоры и принимать предложения от других Альянсов, выбрав пункт "Переговоры" в заголовке таблицы дипломатии. Там же можно сделать предложение об изменении отношений другому Альянсу. Нельзя сделать предложение текущих отношений (т.е. если Альянсы находятся в отношениях "Война" нельзя опять предложить отношение "Война"). В общем случае что бы изменилось отношения между Альянсами, другая сторона должна потвердить предложение об изменении по ссылке "Переговоры", доступной главе Альянса (исключения из данного правила изложены ниже). Отношения между Альянсами бывают следующие: 1. Нейтралитет. Отношение по умолчанию. Нет никаких ограничений или бонусов 2. Война. Отключается система защиты башинга между членами Альянса, находящимися в состоянии войны. Автоматически принимается второй стороной. Подробнее см.ниже в описании защиты от башинга 3. Мир. Рекомендуется выставлять этот статус после заключения пакта о ненападении. С точки зрения движка оно ничем не отличается от "Нейтралитета" и нужно для информирования остального игрового сообщества о неких устных договоренностях - буде в таком информировании возникнет нужда. Альянсы вольны следовать или не следовать данной рекомендации, а так же решать - хотят они оповестить Вселенную об изменении своих отношений или нет [#] Технологии и Наемники Альянсов ================================== ДАННЫЙ МОДУЛЬ НЕ ВХОДИТ В СОСТАВ ПУБЛИЧНОЙ ВЕРСИИ! Альянсы теперь могут рекрутировать Наемников и исследовать технологии! Счет Альянса ------------ Каждый Альянс имеет счет с ресурсами металл/кристалл/дейтерий/ТМ Ресурсы со счета Альянса могут расходоваться только на нужды Альянса. Вывод ресурсов со счета Альянса невозможен Член Альянса может перевести ресурсы на счет Альянса. Сделать это можно на главной странице Альянса в разделе "Ресурсы Альянса". Там же можно увидеть состояние счета Альянса и бонусы, предоставляемые Альянсом (см. ниже). На ряде страниц (в частности - на странице Исследований) в верхнем ресурсбаре показывается не количество ресурсов на планете игрока, а количество ресурсов Альянса Глава Альянса с его счета может исследовать технологии и рекрутировать Наемников - соответственно пункты "Исследования Альянса" и "Наемники Альянса" на странице управления Исследования Альянса -------------------- При исследовании технологии уровень лаборатории равен количеству игроков в Альянсе на момент начала исследования. Активные исследования видны членам Альянса на странице информации Бонус Альянса ------------- После достижения минимально необходимого размера Альянса (10 человек по умолчанию, задается в таблице `config` записью 'ali_bonus_members') каждый член Альянса получает бонус к своим Наемникам и технологиям Бонусы от Наемников и Технологий так же действуют при проверки требований к постройкам/исследованиям. Например: игрок состоит в Альянсе, дающем бонус +2 к Лазерной технологии, а его собственный уровень технологии равен 4. Эффективный уровень технологии этого игрока равен 6. Это означает, что находясь в Альянсе он имеет доступ к исследованию Ионной технологии (требуется ЛТ 5-го уровня) и может строить Тяжелый Лазер (требуется ЛТ 6-го уровня). Очевидно, если бы он не находился в Альянсе, эти постройки были бы заблокированы Стандартный алгоритм расчета ---------------------------- Данный алгоритм включен по умолчанию (переменная ali_bonus_algorithm в таблице config установлена в 0). Значение бонуса зависит от количества игроков в Альянсе и вычисляется по формуле: Бонус = round(уровень технологии или Наемника / количество игроков), где round() - операция математического округления. Примеры: 1. Альянс из 10 человек купил Технологию 4 уровня: Бонус = round(4/10) = round(0,4) = 0 2. Альянс из 10 человек купил Технологию 7 уровня: Бонус = round(7/10) = round(0,7) = 1 Почему все работает именно так? ------------------------------- Выбранная механика бонусов Альянса призван обеспечить достижение сразу нескольких целей: 1. Исключить злоупотребление фишкой, когда 2-3 игрока формируют Альянс исключительно для получения бонусов 2. Активизировать межальянсную активность: бонусы от ресусов Альянса можно получить только начиная с определенного количества участников. Ну и чем больше игроков в Альянсе, тем больше у него ресурсов 3. Усилить лояльность игроков к Альянсу - при выходе (или выгоне) из Альянса игрок теряет все бонусы и (самое неприятное) все ресурсы, пожертвованные в Альянс 4. Исключить появление мегаальянсов: чем больше игроков - тем больше ресурсов они могут пожертвовать, но тем меньше бонусов получит каждый отдельный игрок 5. Слабые игроки в сильных Альянсах получают доступ к end-game юнитам (если, конечно, глава Альянса решит потратить ТМ на соответствующих Наемников) и бонус в развитии 6. Сильные игроки смогут поднять эффективные уровни Технологий даже в больших Альянсах. Например, если в Альянсе 15 человек, то исследовать 15 уровень технологии всем Альянсом будет проще и дешевле, чем каждому игроку отдельно 7. То же самое распространяется и на Наемников. При этом только Альянс дает возможность получить эффективный уровень Наемников больше максимального Выбранный метод расчета бонусов позволяет создавать оптимальную среду для Альянсов. Регулируя минимальное количество участников для получения бонуса можно косвенно регулировать размер Альянса. Оптимальный размер Альянса будет равен: floor(<минимальный размер> * 1,5) где floor() - операция отбрасывания дробной части Однако, возможны варианты. В движке реализованы три метода расчета бонуса Альянса: по количеству членов Альянса (описанный выше, используется по умолчанию); по минимальному размеру Альянса; по очкам Альянса; по месту Альянса в статистике. Расчет по минимальному размеру Альянса -------------------------------------- Данный алгоритм включается установкой переменной ali_bonus_algorithm в таблице config в 1. Значение бонуса вычисляется по формуле: Бонус = round(<уровень> * <участники> / sqr(<минимальный размер>)), где round() - операция математического округления, sqr() - операция возведения в квадрат <уровень> - уровень технологии или Наемника, <участники> - количиство игроков в Альянсе, <минимальный размер> - минимальный размер Альянса для получения бонуса. Примеры для параметров по умолчанию: 1. Альянс из 10 человек купил Технологию 4 уровня: Бонус = round(4 * 10 / 100) = round(0,4) = 0 2. Альянс из 10 человек купил Технологию 17 уровня: Бонус = round(10 * 10 / 100) = round(1,7) = 2 3. Альянс из 20 человек купил Технологию 17 уровня: Бонус = floor(17 * 20 / 100) = round(3,4) = 3 При использовании этого метода нужно уделять особое внимание минимальному размеру Альянса. Небольшой размер (6 и меньше) будет давать ускоренный рост бонуса в зависимости от количества членов Альянса - и спровоцирует появление мегаальянсов. С другой стороны, большой размер (13 и выше) сделает практически бесполезным исследования и рекрутинг Наемников, поскольку прирост бонуса требует либа создание ГИГАальянса, либо недостижимо высоких уровней технологий/Наемников. Этот метод рекомендуется: 1. При стандартных настойках (скорость игры - 1х-3х, мин.размер - 10) - для небольших и средних серверов. 2. Мин.размер порядка 8 - для быстрых (10х и выше) PvP серверов. 3. Мин.размер порядка 12 - для больших серверов с околостандартной скоростью игры (1x-3x). Расчет по очкам Альянса ----------------------- Данный алгоритм включается установкой переменной ali_bonus_algorithm в таблице config в 2. Значение бонуса вычисляется по формуле: Бонус = round(<уровень> * <очки> / <количество игроков> / <делитель>), где round() - операция математического округления, <уровень> - уровень технологии или Наемника, <очки> - количество очков Альянса, <количество игроков> - количество игроков в Альянсе, <делитель> - задается переменной ali_bonus_divisor в таблице config, по умолчанию равен 10.000.000 Данный метод следует использовать с осторожностью и перед его использованием тщательно исследовать статистику сервер для выбора оптимального значения ali_bonus_divisor. Кроме того, данный метод поощрает "кучкование" топов в одном Альянсе. Расчет по месту Альянса в статистике ------------------------------------ Данный алгоритм включается установкой переменной ali_bonus_algorithm в таблице config в 3. Значение бонуса вычисляется по достаточно сложной формуле, которую можно посмотреть в исходном коде. Здесь же я приведу словесное описание. 1. Рейтинг Альянсов разбивается на определенное количество "категорий". Оно задается переменной ali_bonus_brackets в таблице config и по умолчанию равно 10. Т.е. динамически строится таблица уровней. 2. Определяется, в какую из категорий попал текущий Альянс и в соответствии с этим ему присваивается "уровень". 3. В зависимости от уровня назначается коэфициент бонуса. Если Альянс находится в первой категории - ему устанавливается коэфициент 10 (т.е. ali_bonus_brackets), во второй - 9 и так далее до последней категории, в которой присваивается коэфициент 1. 4. Полученный коэфициент делится на ali_bonus_brackets_divisor из таблицы config (50 по умолчанию). Фактически, ali_bonus_brackets_divisor контролирует как сильно уровень Альянса влияет на бонус от технологии/Наемника. 5. Бонус Альянса получается умножением результата предыдущих операций на уровень технологии или Наемника. Пример 1 Настройки по умолчанию. Альянс занмает 5 место из 80. 1. Размер категории = 80/10 = 8. Т.е. первый уровень - Альянсы с рейтингом от 1 до 9, второй уровень - от 10 до 18 итд. 2. Наш Альянс попал в первую категорию - его уровень равен 1. 3. Его коэфициент бонуса равен 10. 4. Множитель бонуса = 10/50 = 0,2. 5. Таким образом бонус будет равен 20% от уровня технологии/Наемника. До 2го уровня - бонус будет равен нулю. С 3го по 7й - бонус равен 1. С 8го по 12й - бонус равен 2. И так далее Пример 2 5 категорий, делитель 50. Альянс занмает 50 место из 80. 1. Размер категории = 80/5 = 16. Таблица уровней: 1-16, 17-32, 33-48, 49-64, 65-80. 2. Альянс попал в 4ю категорию, уровень равен 4. 3. Коэфициент бонуса равен 2. 4. Множитель бонуса = 2/50 = 0,04 5. Таким образом бонус будет равен 4% от уровня технологии/Наемника. До 12го уровня - бонус будет равен нулю. С 13го по 37й - бонус равен 1. С 38го по 62й - бонус равен 2. И так далее На последнем примере демонстрируется важность правильного подбора делителя под количество категорий. Башинг ====== Определения ----------- Атака - отправка флота с агрессивной миссией ("Атака", "Совместная атака", "Уничтожение") на объект Вселенной (планету или луну) другого игрока Башинг - многократная повторная атака одним игроком одного и того же объекта Вселенной за некоторый промежуток времени. Этот промежуток называется "окном башинга". Обычно окно башинга принимается равным 24 часам Волна - несколько флотов, посланные один за другим за небольшой промежуток времени. Этот промежуток называется "окно волны" и обычно его принимают равным 30 минутам. Как правило, количество флотов в одной волне так же ограничивают, а все следующие флоты относят к новой волне. Максимальное числов флотов в одной волне называется "длина волны". Традиционно длину волны принимают равной 3 флотам. Антибашинг ---------- СН содержит систему защиты от башинга "Антибашинг". Защита не дает игроку отправить на одну планету больше боевых флотов, чем предусмотрено правилами. Изменить параметры Антибашинга можно на странице настроек сервера. Установка количества атак в одной волне в 0 означает полное отключение системы защиты Настройки системы по умолчанию: 3 волны по 3 атаки c промежутком не более 30 минут между атаками в одной волне за 24 часа Антибашинг учитывает флоты в полете. Т.е. если игрок уже запустил две волны и еще одна находится в полете - он больше не сможет запускать флоты Атаки засчитываются по факту - т.е. если полностью отменить волну, находящуюся в полете, игрок сразу же сможет послать на планету новые флоты, не дожидаясь возвращения ранее отправленных флотов. Частичная отмена волны может изменить распределение следующих флотов по волнам. Атаки учитываются вне зависимости от результата (выигрыш, ничья, проигрыш) При САБе атака засчитывается ВСЕМ нападающим - дабы избежать "карусели", т.е. когда несколько игроков по очереди запускают САБы, а остальные к ним присоединяются. При этом все флоты одного игрока в одном САБе считаются как одна атака Добавлена возможность настройки системы антибашинга на страницу настроек сервера Если Альянсы находятся в отношении "Война", защита от башинга не работает. Однако объявление войны отключает Антибашинг не сразу, а лишь спустя 12 часов (данный параметр настраивается по усмотрению администратора сервера) Объявление войны не требует согласия. Это означает, что когда Альянс А предложил Альянсу Б отношение "Война", это предложение принимается автоматически и отношения устанавливаются сразу для обоих Альянсов. А вот выход из состояния войны (т.е. смена отношения "Война" на любое другое) требует согласия обоих сторон. Выход из состояния войны обратной силы не имеет! Т.е. если было объявлено перемирие когда планеты одного из Альянсов находятся под атакой, то флоты все равно долетят и совершат нападение - какое бы ни было новое отношение между Альянсами (если, конечно, атакующий их не отзовет) Тривиа ------ А вы знаете почему такой относительно простой вещи (40+ человекочасов) нет на Оффе? А что бы денежки снимать за разбан! АнтиРМФ ======= Если флот атакующего уничтожен за один раунд, то: 1. Атакующий не получает отчета о бое 2. Флоты, находящиеся в удержании так и остаются на орбите Изменена процедура генерации писем с уведомлением о боевом отчете следующим образом: 1. Если бой закончился за один раунд проигрышем атакующего, то он получает сообщение о том, что связь с флотом прервалась и не получает никакой дополнительной информации (включая ссылку на боевой отчет) 2. Теперь все участники боя (включая членов САБа и хозяинов флотов в удержании) получают одинаковые письма (кроме случая, описанного в п.1) 3. Уведомление о бое всегда содержит потери атакующих и оброняющихся и сведения о поле обломков 4. Сведения о вывозе ресурсов с планеты добавляются в отчет только при выигрыше атакующих 5. Уведомления теперь корректно окрашиваются для всех участников боя: красным, если участник проиграл, зеленым - если выиграл, оранжевым - в случае ничьи 6. Все числа в уведомлении теперь форматируются НоваПедия ========== "Ракетный двигатель" переименован в "Химический", а "Импульсный" - в "Ионный". Для них полностью изменено описание. Так же изменено соответствующе описание кораблей Полностью написана с нуля страница информации о юнитах Теперь в Новапедии показываются требования для постройки/исследования юнита Теперь для корабля показываются данные для всех типов двигателей, которые возможно на него установить Улучшено отображение информации о кораблях и обороне Дерево технологий ----------------- Полностью переписано дерево технологий (бывш. techtree.php) Рядом с названиями юнитов там, где это имеет смысл, отображаются их уровни в Империи/на текущей планете Теперь вместо полного уровня с учетом бонусов отображаются отдельно базовые уровни и отдельно бонус к ним Добавлена поддержка дополнительных требований к строительству юнитов (например - требование определенной расы для модуля расовых юнитов) Заметки ======= С нуля написаны заметки Друзья ====== Страница друзей написана с нуля Теперь подробно сообщается обо всех ошибках и результатах операций с заявками В личную почту отправляются сообщения по приходу, принятию и отверганию заявки, а так же при разрыве дружеских отношений Цветовое кодирование статуса друга: зеленый - онлайн, желтый - бездействие от 5 до 15 минут, оранжевый - оффлайн, красный - оффлайн более суток Закладки ======== Полностью переписана система закладок. Теперь закладки хранятся в отдельной таблице и не захламляют данные пользователя. Кроме того, такое расположение закладок повышает устойчивость движка к SQL-injection. Полностью переделано редактирование закладок. Добавлена возможность копирования закладок Сообщения ========== Полностью переписана система сообщений Можно писать письма любому игроку! Форма создания нового письма теперь корректно обрабатывает имена игроков, введенных в строку "Кому". Эта возможность доступна из списка категорий сообщений по ссылке "Написать сообщение" в самом низу таблицы категорий. При первом открытии страницы создания нового сообщения больше не выскакивают угрожающие красные надписи В списке писем теперь работает чекбокс в заголовке. Клик на нем приведет к выбору всех сообщений. Повторный клик - к снятию всех отметок Добавлен дополнительный диапазон для удаления сообщений - "Все сообщения данной категории". Внимание! В категории "Все сообщения" его выбор приведет к полной очистке почтового ящика! Счетчик сообщений в навбаре работает без задержек. Т.е. если игрок перешел в категорию с непрочитанными сообщениями, счетчик изменится соответствующим образом сразу же после перехода, а не при следующей загрузке страницы Клик на индикаторе сообщений Администрации, Альянса или от другого игрока сразу открывает просмотр соответствующих сообщений Оптимизированы алгоритмы работы подсистемы сообщений, а так же почти в два раза уменьшен объем передаваемой информации от клиента к серверу. Особенно это заметно при удалении большого количества сообщений Добавлена возможность просмотра отправленных сообщений (только тех, которые не удалил адресат) Теперь можно сразу из отчета шпиона запускать симуляцию боя по полученным разведданным Перекрашены сообщения. Цвета заголовков теперь соответствуют цветам сообщений и, в свою очередь, синхронизированны с раскраской флотов - там, где это имеет смысл Категории сообщений переупорядочены Добавлена возможность очистить сообщения определенной категории, не открывая их - на случай переполнения почтового ящика Добавлена подсказка В настройках пользователя можно отключить получения определенных категории сообщений. В этот список входят: Шпионские отчёты, Военные отчёты, Отчеты переработки, Прибытие флота, Отчёты экспедиций, Сообщения очереди построек. Настройки автоматических уведомлений включены по умолчанию для новых игроков Добавлена новый класс сообщений "Сообщения Администрации". Уведомления этого класса НЕ МОГУТ быть отключены в настройках пользователя. К сообщениям Администрации относятся: сообщения системы квестов, новости сервера и собственно сообщения Администрации (личные сообщения, отправленные от игроков с auth_level > 0) Восстановлена функциональноксть класса сообщений "Сообщения очереди построек". Уведомления этого класса могут быть отключены в настройках пользователя. К ним относятся: 1. Уведомления о завершении исследований. Уведомление высылается после входа на страницу исследований 2. Уведомления об окончании работы верфи на планете. Уведомление высылается по окончании очереди строительства Верфи 3. Уведомление об окончалии строительных работ на планете (постройка или разрушение здания). Уведомление высылается пакетно в полуавтоматическом режиме. Это означает, что сообщение генерируется каждый раз при обращении к планете (сканирование шпионажом или игроком, переключение активной планеты игроком итд). При этом в сообщение указываются все изменения, произошедшие на момент обращения Добавлена возможность пересылки личных сообщений на емейл игрока. Возможность включается администратором сервера в настройках - опция "Разрешить пересылку ЛС на email". После этого в настройках игрока появляются дополнительные опции для всех категорий входящих сообщений Чат === Полностью переписан внутренний чат. JS-часть переведена на jQuery. Добавлена заплатка для корректной работы чата в FireFox Имена членов Команды сервера (Администраторов, Операторов и Модераторов) выделяются в чате, что бы отметить их среди сообщений обычных пользователей. По умолчанию имя Администратора выделяется пурпурным цветом, оператора - красным, модератора - зеленым. В таблице config можно настроить стили выделения по своему вкусу Добавлена возможность настраивать таймаут чата через интерфейс настроек Вселенной (раздел "Настройки чата"/"Таймаут по неактивности"). Значение "0" означает, что таймаут отключен (не рекомендуется, потому что при неправильных настройках сервера большое одновременное количество запросов может привести к DoS) История чата теперь грузиться в виде нормальной страницы СН, а не в виде "обмылка". Корректно показывает заголовок в истории чата - "общий чат" и "чат альянса" соответственно Боевые отчеты теперь преобразуются в ссылки. Из соображений безопасности работают только ссылки на текущем сервере. По клику на ссылку боевой отчет открывается в новом окне Добавлена защита на стороне клиента от слишком частых обновлений Содержимое языкового файла chat.mo отфильтровано и влито в system.mo Тэг Альянса после имени игрока теперь указывается в квадратных скобках, а адресат сообщения - в круглых. Сделано для унификации написания тэга Альянса в движке Чат теперь инкрементальный - с сервера передается не всё содержимое чата, а только новые сообщения. Чат корректно работает когда у игрока открыто несколько окон с чатом Исправлена проблема со скроллированием чата в Chrome v20+ Теперь при отключении чата по таймауту содержимое окна не стирается, а в него добавляется соответствующее сообщение. Так же прячутся элементы ввода: выбор цветов, строка сообщения, кнопка "Отправить" и панель смайлов Новый код чата (как JS, так и PHP) заметно компактнее, аккуратнее и быстрее старого Увеличена длина поля для ника в чате Добавился новый BBCode "s" - зачёркнутый текст В чате Альянса в нике участника теперь не указывается Альянс Переформатирован вывод списка смайлов. Список смайликов теперь генерируется автоматически из всего доступного списка При открытии окна чата курсор позиционируется в строку набора сообщения Реформатирование HTML-кода страницы чата Три файла чата интегрированы в один Множество других добавлений и усовершенствований Модуль "Продвинутый чат": chat_advanced ======================================= Имеется возможность установки модуля чата с расширенной функциональностью Расширенный чат имеет встроенную систему команд с поддержкой алиасов. Команды вводятся в строке ввода сообщения и начинаются символом "/" Чат оборудован встроенной системов помощи по командам чата - команда /help. В ней можно узнать более подробно о досутпных командах и формате их использования. Здесь же описание будет дано лишь список доступных команд и описание их функций Добавлен список игроков в чате с дополнительными иконками статуса и командами управления для админов Команда /invisible дает возможность игрокам управлять своим состоянием видимости в чате. Администрация сервера (authlevel > 0) всегда видит невидимок Команда /whisper позволяет отправлять приватные сообщения другим игрокам. Приватные сообщения выделяются специальным образом, видны во всех каналах и сохраняются в истории чата. В приватных сообщенях нельзя использовать форматирование цветом Администраторы имеют возможность запретить игроку писать в чат на определенный срок или вернуть такую возможность - соответственно, команды /mute и /unmute. Запрет распространяется на все каналы и на возможность писать личные сообщения. Соответствующая иконка в списке игроков лишает его права голоса на 1 час Администраторы имеют возможность блокировать и разблокировать игроков прямо из чата - соответственно, команды /mute и /unmute. Иконка в списке игроков банит его на 1 неделю Максимальное время нахождения игрока в списке онлайн совпадает с таймаутом чата на странице сервера - т.е. в списке онлайн игрок будет виден еще некоторое время после выхода из чата Добавлена поддержка локального времени в чат и историю чата Теперь можно использовать команды при выбранном цвете сообщения. Ранее такие команды не воспринимались системой чата Произведена замена цветов для лучшей читаемости сообщений: red -> maroon, blue -> cyan Цвет green оставлен для пользвателей, а подтверждающие системные сообщения используют цвет lime - как и в остальном интерфейсе сервера Системные и приватные сообщения теперь выделяются жирным шрифтом Клик на имени игрока в списке онлайна теперь всегда добавляет команду "/w" в начало сообщения - а не в конец, как ранее Скорость обновления в AJAX части чата теперь регулируется переменной 'chat_refresh_rate' Теперь игроки из онлайн-списка исчезают сразу после выхода из чата - таймаут попадания в список установлен как удвоенный 'chat_refresh_rate', а не как 'chat_timeout' ранее и вычисляется по дополнительному полю, а не по `chat_player_activity` как ранее День Рождения ============= Игрок может ввести свой ДР на своей странице настроек. ДР вводится один раз и после этого не может быть изменен. Дата проходит валидизацию в соответствии с серверными настройками формата даты Игрок с ДР на текущую дату будет отмечен специальной иконкой в статистике и на странице Вселенной. При наведении на иконку всплывает подсказка с датой рождения Амдинистратор сервера может назначить количество ТМ в подарок на ДР в настройках (опция "Подарок игроку на день рождения"). Если это значение установлено в 0 - подарки отключены. Выдача подарков происходит один раз в сутки всем игрокам, день рождения которых находится не далее чем в "Ретро-рождение" дней от текущей даты. При этом подарки выдаются только игрокам, которые на момент выдачи уже имели введенную дату рождения. Движок гарантированно начислит подарки даже если ДР пришелся на день неактивности сервера (неисправность или обслуживание). Такая система выбрана с одной стороны - что бы не обидеть игроков в случае проблем с сервером, а с другой стороны - что бы избежать злоупотреблений (например - ввести послезавтрашнюю дату ДР, на следующий день получить ТМ за "прошлый ДР", а через день - еще и за "нынешний". Такой вариант в текущей системе начисления подарков не прокатит) Интерфейс ~~~~~~~~~ Логин и регистрация =================== Полностью переделаны экраны логина и регистрации Полностью переделана подсистема восстановления забытого пароля Незалогиненные пользователи имеют возможность предварительно ознакомиться с сервером: почитать новости, просмотреть настройки сервер, статистику игроков и список банов, связаться с администраторами, ознакомится с правилами и ЧаВо, сходить на форум Навбар и планетбар ================== Полностью переработан навбар Сведения о количестве ресурсов на планете вынесены в планетбар (по умолчанию он автоматически появляется на странице "Обзор планеты" и на некоторых страницах постройки юнитов). В настройках пользователя можно включить планетбар постоянно - т.е. будет полностью восстановлен функционал старого навбара Переработана ячейка сообщений. Теперь в ней кроме общего количества непрочитанных сообщений отдельно отображается количество новых сообщений от администрации, от игроков и от членов Альянса Добавлено отображения количества флотов и экспедиций - находящихся в полете и максимально доступных. Количество флотов и экспедиций в полете интерактивно: оно автоматически изменяется в соответствие с происходящими событиями - прибытие, возвращение и окончание миссии флота (как они должны были произойти на момент загрузки страницы). При наведении курсора на соответствующую ячейку всплывает подсказка с описанием ближайшего события Добавлена информация о текущих исследованиях пользователя Вся информация теперь выводится поверх кликабельных иконок с всплывающими подсказками Вселенная ========= Серьезно переработан код "Вселенной" (бывш. "Галактика"). Шаблоны вытащены из кода и перенесены в TPL-файл. Попапы (инфо о планетах, лунах итд) вынесены в отдельные JS-процедуры, что в отдельных случаях позволило уменьшить финальный размер страницы в два-три раза, а количество запросов к БД снизить от двух до десяти (!) раз - особенно в системе, густо заселенной одним игроком. Библиотека попапов изменена с overlib на jQuery - это дало отличную кросс-браузерную совместимость и устранение проблем с попапами в ИЕ. В целом новая "Вселенная" существенно меньше грузит сервер и работает на клиенте гораздо быстрее Ракеты теперь отправляются через AJAX без обновления страницы На изображении вражеских планет, на которые летят флоты игрока теперь отображается соответствующая иконка и при наведении всплывает попап со списком всех входящих кораблей В попап Альянсов добавлен его ранг На попапе игрока отображается его текущее звание в Альянсе Шаблоны попапов легенды, планет, лун, обломков, игроков и альянсов вынесены из JS-скрипта в шаблон страницы Убрано количество летящих флотов - эта информация есть в навбаре Полностью переписана работа AJAX-части, отвечающей за отправку шпионов, переработчиков и ракет Количество переработчиков теперь включает все виды кораблей, которые могут перерабатывать обломки Интерфейс запуска ракет использует группу защитных сооружений, а не хард-кодед перечень, как было раньше В попап легенды добавлены расшифровки для иконок действия В попапе планеты показывается её диаметр В попапе луны миссия "Уничтожить" показывается только если на текущей планете игрока есть ЗС Из попапа игрока убраны ссылки - все, что можно было сделать по ссылкам, можно теперь Добавлено новая иконка действия - "Статистика". Её тултип показывает статистику игрока Расширена подсказка Переработка ----------- Полностью переделана работа с полем обломков Полностью переписан алгоритм запуска переработчиков В попапе вместе с абсолютными теперь показываются и относительные значения в процентах В попапе добавилось три строки: 1. Строка "В полете" показывает емкость трюмов переработчиков пользователя, которые уже летят на данное поле 2. Строка "На орбите" показывает емкость переработчиков на орбите текущей планеты или луны 3. Строка "К переработке" показывает сумму двух предыдущих строк На основном экране Вселенной к иконке обломков добавлена индикация процентного значения из строки "В полете". Она имеет цветовое кодирование: 1. Зеленый цвет означает, что прибывающие флоты игрока полностью переработают поле обломков на ресурсы 2. Желтый цвет означает, что к полю летит некоторое количество переработчиков, которых не хватит что бы целиком переработать обломки, но на текущей планете есть достаточно переработчиков, что бы полностью обработать поле 3. Оранжевый означает, что к полю летит флот иргока с переработчиками, но их не хватит на полную обработку обломков, даже включая те корабли, что находятся на орбите 4. Красный цвет значит, что к полю обломков не летит ни одного переработчика игрока Именование систем и галактик ---------------------------- Галактики и системы могут иметь собственные названия. Увидеть и изменить текущее имя галактики или системы можно на странице "Вселенная" По умолчанию галактики и системы не имеют собственных названий. Назвать галактику или систему можно по ссылке "Переименовать" соответственно возле координат галактики или системы. Выбранное имя галактики/системы видны всем игрокам Именование галактики или системы имеет соотвествующую стоимость - по умолчанию 10.000 ТМ для галактики и 1.000 ТМ для системы - т.н. "базовую стоимость именования". Изменить базовую стоимость именования можно в настройках сервера. Игроки могут видеть текущую базовую стоимость именования на странице "Мировые константы" При именовании галактики или системы игрок может назначить цену именования. Стартовая цена именования равна базовой стоимости именования При переименовании уже именованной галактики или системы, игрок должен уплатить ранее назначенную стоимость именования плюс базовая стоимость именования. Пример Пусть базовая цена именования системы составляет 1.000 ТМ. Первый игрок решил переименовать систему без названия. Он мог бы уплатить базовую стоимость в 1.000 ТМ, однако решил уплатить 2.500 ТМ Теперь цена переименования системы для следующего игрока составит <Текущая цена имени> + <Базовая цена> = 2.500 + 1.000 = 3.500 ТМ Таким образом более высокая цена именования галактики или системы в определенной степени защищает объект от переименования Все действия по переименованию галактик и систем записываются в лог - код события 104 - для отслеживания нарушителей Правил сервера о допустимых идентификаторах Переработка поля обломков ========================= Полностью переписан интерфейс переработки обломков. Он учитывает количество переработчиков, уже отправленных на поле обломков и позволяет эффективно собирать обломки с нескольких планет На обломках показывается общее количество ресурсов На иконке обломков отображается количество переработчиков пользователя, летящих на эти обломки Обзор планеты ============= Полностью переработана страница "Обзор планеты". 1. Список планет с картинками перенесен из таблицы направо. На картинки добавлены иконки: активного строительства, активного исследования, активной верфи, индикатор прибывающего собственного флота, индикатор прибывающего враждебного флота, статус застройки планеты. Так же указывается текущее строительство на каждой планете и таймер обратного отсчета Справа от иконки планеты добавлены три колонки, показывающие процент производительности шахт и синтезаторов: серый - шахта металла, голубой - синтезатор кристаллов, фиолетовый - синтезатор дейтерия. Высота колонки пропорциональна проценту производства, а фон кодирует диапазоны: желтый - 80-90%, оранжевый - 50-70%%, красный - меньее 50%. На высоту и фон колонки влияет ИСКЛЮЧИТЕЛЬНО процент производства, выставленный на странице "Ресурсы" 2. Полностью переработан график движения флотов. Теперь отдельно выделяются такие события, как "Прибытие", "Возвращение" и "Окончание задания". Отделяются события для текущей выбранной планеты и для остальных 3. Добавлены три таймера обратного отсчета для строительства, исследований и верфи. Таймер верфи и таймер зданий поддерживают очередь построек. 4. Статистика игрока и баннеры перенесены на страницу "Император" Полностью переписано управление планетой Добавлен новый тип сортировки планет - по общему количество полей. Учитываются терраформеры (на планетах) и лунные базы (на лунах) Изменена цветовая кодировка полосы застройки: зеленый - менее 50% застройки, желтый - не меньше 50% и меньше 80%, оранжевый - не меньше 80% и меньше 100%, красный - 100% застройки На полосы застройки добавилось застроенное и максимальное количество полей на планете Если планет больше 5, то список планет форматируется в две колонки Вид очереди построек верфи и очереди исследований теперь аналогичен очереди построек зданий Таймер очереди строительства зданий под иконкой планеты теперь переключается на следующее здание в очереди при окончании строительства текущего. Ранее таймер показывал только прогресс постройки первого здания в очереди Вертикальная очередь построек. Включается в настройках пользователя в секции "Настройки интерфейса" Добавлено текущее количество ресурсов на планете, текущий размер хранилищ, а так же - количество ресурсов на прилетающих флотах Настраиваемое количество колонок в списке планет ------------------------------------------------ На странице настройке пользователя можно указать, сколько колонок должно быть в списке планет - пункт "Количество колонок в списке планет" в разделе "Настройки интерфейса" Можно выставить количество колонок в 0 и указать максимальное количество рядов в списке - см. соответствующий пункт там же. В этом случае движок рассчитает количество колонок исходя из этого числа. Обращаю внимание - указывается именно максимальное количество рядов! Т.е. если у игрока 6 планет, а количество рядов указано 5, то количество необходимых колонок для того, что бы число рядов не привысило 5 будет равно двум. Соответственно, список планет будет сформирован в виде двух колонок по три ряда. Если же колоний будет 12 - список планет будет выглядеть как таблица три колонки по четыре ряда. Данная особенность связана с построением списка планет - слева направо и сверху вниз. Естественно, не составило бы никакого труда сделать вывод списка сверху вниз, а затем справо налево - это было бы даже легче. Однако при выбранном способе сохраняется пользовательская сортировка планет - более "важные" колонии всегда будут "выше" в списке Фаланга ======= Переписан вывод фаланги с использованием функций СН. Теперь он выглядит аналогично списку событий флота на странице "Обзор планеты". Алгоритм работы - почти оффовский: 1. Показываются все флоты, летящие от сканируемой планеты или же к ней 2. Полет A --> B a) скан B => можно увидеть время прибытия флота b) скан A => можно увидеть время возвращения флота (но не его прибытия на B) 3. Возвращение B --> A a) скан B => не видно ничего b) скан A => виден возвращающийся флот Полнота информации о флотах зависит от уровня шпионажа (см. ниже) Особые случаи: 1. Задание "Передислокация" A --> B a) флот виден только на B, но не на A b) после отзыва флот нигде не виден 2. Флот, летящий с луны, фалангой не виден 3. Флот, летящий на задание "Удержание" фалангой не виден 4. Фаланга показывает так же ракетные атаки Шпионаж в Обзоре планеты и Фаланге ================================== На количество отображаемой информации о летящих чужих флотах влияет эффективный уровень шпионажа (технология+наемник): Меньше 4 - нет информации о летящем флоте 4 и выше - видно общее количество кораблей во флоте и везет ли флот ресурсы 6 и выше - виден качественный состав флота - т.е. сколько групп кораблей во флоте и сколько кораблей в каждой группе 8 и выше - видно точное количество ресурсов в трюмах кораблей 10 и выше - виден количественный состав флота Межгалактические Врата ====================== Интерфейс Врат вынесен на отдельную страницу и доступен с Обзора планеты (куда вынесен таймер готовности врат) Интерфейс переделан по примеру страницы "Флоты на орбите" Строительство зданий ==================== Новый интерфейс строительства зданий - более компактный и удобный Немного изменен порядок зданий на странице постройки. Теперь все здания сгруппированы по типам: первая линейка - добывающие, вторая линейка - производящие, третья линейка - склады. На луне и/или при не всех доступных для постройки зданиях порядок пока может меняться Дополнительно показываются остатки ресурсов с учетом прибывающих на планету флотов с грузом Написанная с нуля очередь построек Верфь ===== Переверстан интерфейс Верфи и Обороны. Вид очереди построек обновлен. Теперь они выглядят так же, как и очередь постройки зданий Добавлена возможность удалить последний добавленный элемент из очереди Кнопка "Построить" дублируется возле каждого юнита. Функционал сохранен - по её нажатию будут построены все выбранные юниты Флоты ===== Полностью переработана страница флотов. Добавлено цветовое кодирование в списке флотов Добавлены слайдбары для выбора количества кораблей. На первой странице указываются предварительные параметры флота (грузоподъемность, скорость, если указана точка назначения - время полета и расход дейтерия) Команда на возвращение флота теперь не ведет на промежуточную страницу, а сразу обрабатывается подсистемой флотов В списках летящих флотов к количеству кораблей во флоте добавляется в конце знак "+" если флот везет ресурсы Своз ресурсов ------------- Добавлена новая возможность - свезти ресурсы с остальных планет на текущую. Игрок выбирает колонии и луны, с которых нужно свезти ресурсы на текущую, а движок автоматически рассчитает нужное количество транспортов, загрузит их ресурсами и отправит флоты. В перевозке ресурсов участвуют только транспортные корабли: Малый транспорт, Большой транспорт и Супертранспорт. Корабли загружаются в порядке убывания емкости трюма Есть возможность выбирать все ресурсы одного типа на всех планетах; все ресурсы на одной планете; все ресурсы на всех планетах Имеется JS-счетчик, показывающий общее количество свозимых ресурсов как по типу ресурсов, так и по отдельной планете Открыть страницу своза ресурсов можно из списка кораблей на орбите, списка летящих флотов, кликнув на желтой иконке тележки на изображении планеты на страницах "Обзор планеты" и "Империя", а так же на изображении юнита на странице строительства. В последнем случае так же будет отображатся количество ресурсов, недостающих для создания данного юнита Меню ==== Редизайн меню Изменен порядок расположения пунктов Высота пункта меню увеличена до 16 пикселов Добавлены иконки. Размер иконки ограничен 14 пикселами в высоту Поиск ===== Полностью переписан поиск Добавлена сортировка по Альянсу, имени игрока, имени планеты Настройка сервера "Скрывать ссылки на ЛС" распространяется и на результаты поиска Империя ======= На изображения планет добавлены иконки, как на странице "Обзор планеты" (см. выше). Убрано многократно дублирующееся перечисление технологий, идентичных для всех планет. Добавлена дополнительная колонка, в которой суммируются данные по всей Империи. В списке построек отображаются строящиеся/уничтожаемые здания В списке кораблей отображаются строящиеся и прилетающие корабли В списке защитных сооружени отображаются строящаяся защита Цифра производства ресурсов теперь кодируется цветом аналогично фону колонок прозиводства ресурсов (см. выше) Добавлено цветовое кодирование для производящих структур. Уровень производства, выставленный на странице "Ресурсы", кодируется цветом фона соответствующей ячейки: зеленый - 100%, желтый - 80-90%%, оранжевый - 70-50%%, красный - 40-10%%, цвет фона - 0% или структура не является производящей. Пропорционально уровню производительности меняется и длина кодированной полоски Значительно оптимизирован HTML-код Размер HTML-кода уменьшен на величину от 30% и в отдельных случаях до 80%. Среднему игроку оптимизация даст уменьшение размера загружаемого файла на 40-50%% (включает так же выигрышь от оптимизации Списка планет - см.) В колонку "ИТОГО" добавлена сумма по строящимся и прибывающим на планеты юнитам Теперь юниты всегда групируются согласно их принадлежности. Например, при подключении модуля расовых юнитов они добавляются в категорию "Флот" Император ========= Новая страница. Содержит небольшой блок новостей, блок статистики игрока и блок баннеров/юзербаров Мировые константы ================= Новая страница. Показывает текущие настройки Вселенной пользователям Добавлен вывод информации о разешении прокачки и разрешении удержания на слабом соаловце Добавлена информация о текущих настройках антибашинга Список забаненных ================= Полностью переписан список забаненных. Список теперь сортируется по возрастанию даты бана - последние забаненные появляются в начале списка. Добавлено отображение разбанов. Прочее ~~~~~~ Страницы статистики, списка банов, списка контаков Вселенной, списка настроек доступны для просмотра незалогиненным, находящимся в отпуске и забаненных Администрирование ~~~~~~~~~~~~~~~~~ [#] Модуль: Редактирование характеристик планеты ================================================ Модуль admin_planet_edit_extra не входит в основной состав дистрибутива. Для получения модуля обращайтесь к автору движка В админке добавляется возможность менять основные характеристики планеты: название, изображение, размер, температуру, губернатора и его уровень, количество обломков на орбите Права доступа к администраторской части ======================================= Права доступа к отдельным страницам админки устанавливаются в зависимости от уровня игрока (столбец authlevel в таблице users). Выделяют три уровня доступа: 1. Модератор (authlevel=1) имеет доступ к следующим страницам: overview, adm_planet_list, banned, changelog, statbuilder, tools, md5enc Он может: видеть список игроков онлайн и их активность, видет список и активность лун и планет, вручную обновлять статистику игроков, банить и разбанивать пользователей 2. Оператор (authlevel=2) дополнительно имеет доступ к следующим страницам: planet_edit, add_research, del_research, showfliyingfleets Дополнительно к функциям модератора он может: редактировать юниты и ресурсы на лунах и планетах; добавлять и убирать технологии игрока; добавлять луны к планетам; видеть и редактировать флоты в полете 3. Администратор (authlevel=3) имеет доступ ко всем страницам, включая delete_user, admin_darkmatter, errors, maintenance, maintenance_ajax, messagelist, messall, admin_chat, paneladmina, planet_compensate, settings, userlist Дополнительно к функциям оператора он может: добавлять и убирать ТМ у игроков; видеть полный список игроков с IP-адресами; удалять игроков; запускать процедуру обслуживания БД; просматривать и удалять личные сообщения; просматривать и удалять сообщения чата; просматривать и удалять сообщения системы логов; изменять права пользователей; изменять настройки игры; возмещать игроку стоимость затрат на планету Воплощение ========== Теперь можно Воплотиться в любого игрока, посмотреть игру его глазами и поуправлять игрой его ру... эээ... интерфейсом! Эта возможность чрезвычайна полезна для диагностики редких неисправностей и для отслеживания действий игроков, подзреваемых в читерстве или нарушении Правил серве Воплощение доступно только Администраторам сервера Воплотиться можно только в игрока меньшего уровня - т.е. нельзя Воплотиться в такого же Администратора Вложенные Воплощения недопустимы: нельзя Воплотиться, будучи уже Воплощенным в кого-то. Сначала Развоплотитесь Для Воплощения используйте соответствующую иконку в "Списке игроков" При Воплощении изменяется только onlinetime а. Вся остальная информация (IP, User-agent итд) сохраняется Для Развоплощения используйте соответствующий пункт меню или "Выход" Если на аккаунте игрока есть ошибки, или игрок заблокировае, или игрок находится в отпуске, то попытке Воплощения будет выведено сообщение об ошибке/блокировке/отпуске, которое увидел бы игрок на вашем месте. Обновление страницы вернет вас в ваш аккаунт После штатного Развоплощения (т.е. из меню, а не при ошибке и не из игрока в отпуске) Администратора возвращает на страницу списка игроков ВНИМАНИЕ! Перед использованием Воплощения почистите куки в браузере! Из-за изменений в работе кукесов кэш браузера может содержать дубликаты куков Список игроков ============== Полностью переписан "Список игроков" с использованием PTE Сокращено количество строк локализации Пишется полный срок бана Для мультиаккаунтов подсвечиваются все адреса с одинаковым IP и в скобках добавляется количество игроков с таким же адресом Теперь невозможно удалить игрока того же уровня - для предотвращения разборок между членами команды одного уровня Google AdSense ============== Внизу левого меню добавлен блок для вставки рекламы от Гугля. В принципе, ничего не мешает вставить туда рекламу от любого другого рекламного сайта - соответствующий HTML-код задается в настройках Вселенной Локализация =========== СуперНова использует кодировку UTF-8 при работе с БД и рендере HTML-страниц. Таким образом поддерживаются любые наборы символов. Некоторые непрвильно настроенные сервера могут выставлять некорректную кодировку в HTTP-заголовке - для них в движке добавлен патч, устраняющий проблему СН рахрабатывается на русском языке. В 27 релизе добавлена англоязычная локализация и включена возможность смены языков пользователем Добавлена полноценная информация о локализации (файл language.mo в каталоге локализации). Существенно переработаны файлы локализаций: убраны неиспользуемые файлы, а мелкие файлы, содержащие меньше десятка строк слиты с соответствующими файлами. Все файлы локализации пропущены через редактор и приведены к одному виду. Добавлены заголовки в файлы локализации Система отката языка -------------------- Добавлена система отката языков в случае, если требуемый файл локализации не найден. Для встроенных файлов предусмотрена двухуровневая система проверок. Первый уровень - проверка по языку. Она происходит в следующем порядке: 1. Язык из адреса страницы - параметр lang 2. Язык пользователя 3. Язык сервера по умолчанию 4. Русский 5. Английский Для каждого языка происходит проверка на наличие локализации в двух местах: 1. Ищется файл "language/<код_языка>/<имя_домена>.mo.php" 2. Ищется файл "language/<имя_домена>_<код_языка>.mo.php" Для модулей добавляется еще один уровень проверки - поиск файлов из предыдущего пункта происходит сначала относительно каталога "/modules/<имя_модуля>/", и только если там файл не найден - происходит поиск относительно корня движка Если не найден ни один из указанных файлов, то происходит откат на более низкий уровень - ищется файлы языка, стоящие ниже по списку Редактор локализаций -------------------- В админке добавлен редактор локализаций - пункт меню "Локализация" в разделе "Утилиты" Выбор пункта меню "Локализация" открывает выбор т.н. "домена" для редактирования. Домен - это совокупность строк локализации, относящихся к отдельному аспекту игры. Домен эквивалентен языковому файлу с соответствующим именем После выбора домена и подтверждения выбора открывается страница редактирования строк локализации. Открытие больших файлов может занимать существенное время - поэтому запаситесь терпением В редакторе есть возможность добавлять и удалять строки локализации. Редактор локализаций корректно работает с константами внутри доменов После редактирования строк локализации и подтверждения редактор создаст файлы "<имя домена>.mo.new" в каждой папке языка Файлы ".mo.new" имеют для редактора приоритет перед обычными ".mo" файлами локализации. Т.е. если в одном языковом каталоге присутствуют оба типа файлов, редактор загрузит для редактирования ".mo.new" Для того, что бы движок подгрузил новый файл локализации, требуется изменить его расширение с .mo.new на .mo. Обычно это перезапишет файл текущий файл локализации - поэтому следует заранее сделать его резервную копию ВНИМАНИЕ! Следует соблюдать осторожность при замене старых файлов на новые! Редактор не сохраняет комментарии и игнорирует дополнительный код в файлах локализации! В результате простая перезапись файлов может нарушить нормальную работу подсистемы локализации движка! Если ваши файлы локализации содержат дополнительный PHP-код, то они требуют ручного вмешательства после обработке в редакторе! Ни один из встроенных файлов локализации SN не содержит лишнего кода и может быть безопасно обработано встроенным редактором Уничтожение планет с компенсацией ================================= Добавлена возможность уничтожения планет игроков с компенсацией стоимости зданий, строений и ресурсов Редактирование планет и лун =========================== С нуля создан интерфейс редактирования юнитов/ресурсов на планете - пункт меню "Редактировать" в разделе "Планета". Он доступен членам команды начиная с Оператора (authlevel=2) и выше Прочее ====== В админку на страницу утилит добавлен вывод информации о настройках и параметрах MySQL сервера Полностью переписана утилита шифрования пароля в MD5 Персонализация ~~~~~~~~~~~~~~ Движок СР имеет множество опций, используя которые можно настроить внешний вид сервера и его функционал, не прибегая к изменению исходного кода. КРАЙНЕ рекомендуется использовать встроенные возможности СН по настройке - для облегчения дальнейших обновлений движка! Модули ====== Модуль - это некий часть функционала движка, вынесенного в отдельный каталог. СН обладает развитой поддержкой системы модулей: модули могут иметь собственные файлы локализации, собственные темплейты, изменять главное меню игры и, само собой, содержать собственный исполнимый PHP-код К сожалению, в настоящее время система модулей все еще развивается и интерфейс модулей меняется от версии к версии. Актуальные примеры модулей можно найти на форуме движка. Так же некоторые детали реализации модулей можно найти ниже в разделе "Модульная система" Серверные значения по умолчанию =============================== Теперь администраторы сторонних серверов могут задавать скин, темплейт и язык по умолчанию. Это сделано для поддержки авторских разработок при обновлении из репозитория Администраторы так же могут конфигурировать основные ссылки - ссылки на ЧаВо, на правила, на форум и на страницу покупки ТМ. В случае отсутствии ссылок соответствующие пункты и ссылки скрываются Скины ===== Добавлена возможность перекрыть дефолтные стили элементов jQueryUI (файл /design/css/jquery.css) стилями, специфическими для скина. Для этого в корневой каталог скина нужно положить файл jquerу.css с настройками стилей элемента. Сгенерировать файл под свою тему можно на сайте jQuery по ссылке: http://jqueryui.com/themeroller/ В скины добавлена иконка пола в подкаталог "images" скина. Файлы для мужского и женского пола называются соответственно "sex_male.png" и "sex_female.png". Встроенные скины обновлены автоматически Внутренние изменения ~~~~~~~~~~~~~~~~~~~~ Большие числа ============= Исправлена работа с большими числами. Все числовые значение в HTTP-запросах трактуются как числа с плавающей запятой. Все идентификаторы передаются как строки. Все идентификаторы в БД являются BIGINT(20). Соответствующим образом переконфигурированы (добавлены или изменены) FOREIGHN KEYS. Переработаны все таблицы, что бы исключить переполнение при любом разумном сценарии использования движка (скажем, вплоть до скоростей x1000000) Статистика ========== Полностью переписан модуль обновления статистики. Максимум вычислений теперь проводятся на стороне MySQL сервера без необходимости перекачивать данные в PHP и обратно. Обновление статистики завернуто в транзакции. Все эти меры привели к тому, что скорость обновления статистики на сервере с 500 аккаунтами (P4 3,0 GHz, 2 Gb RAM) составляет меньше секунды! Добавлена возможность автоматического обновления статистики (настройка пока только через БД). Автоматическое обновление статистики производится по расписанию через AJAX Баннерилка ========== Полностью переписан код баннерилки. Добавлена возможность включить РО при бане. При разбане режим РО остается, но разрешается из него выйти. По умолчанию включена галочка РО и выставлен срок бана в 3 дня. Бан и разбан объединены в один пункт меню и на одну страницу интерфейса Минификатор темплейтов ====================== Минификатор уменьшает размер генерируемого движком HTML-кода путем замены нескольких идущих подряд пустых символов (перевод строки, табуляция, пробел) одним символом пробела. Минификатор умеет сжимать HTML и встроенный JS-код. Для JS-кода он так же удаляет однострочные комментарии. Минификатор работает на уровне темплейтов и если включено кэширование, то минификатор вызывается только один раз при компиляции кода и дальше кэшируется уменьшенный скомпилированный темплейт, что исключает необходимость в повторном вызове минификатора. Этим он выгодно отличается от минификаторов, работающих на уровне сессии через ob_hanler() В среднем по сайту минификатор дает выигрыш порядка 7-8%% при незначительном падении производительности. По умолчанию минификатор отключен. Включить его можно в админке в настройках сервера - пункт "Минификатор темплейтов" Очереди ------- Полностью переписана очередь построек Исправлена ошибка, позволяющая при наличии выше в очереди на верфи медленно строящегося юнита использовать его время постройки для создания более быстрого юнита путем добавления последнего в очередь. Например, эта ошибка использовалась для быстрой постройки множества ракет Унифицированы алгоритмы и файлы постройки флота и защиты. Это должно полностью снять проблемы с отрицательными ресурсами после верфи и с постройкой лишних единиц флота/защиты на верфях Менеджер флотов в полете ------------------------ Полностью переписан менеджер летящих флотов - теперь рядно-блокирующий, тразакционный и кэширующий! Обновленный код на порядок уменьшает нагрузку на сервер за счет встроенной системе кэширования запросов b перехода c табличной блокировки на рядную. Система "событий" гарантирует корректный порядок обработки флотов (с точностью до секунды - предела текущей организации таблиц). Целостность и валидность результатов обеспечена добавлением транзакций. Всё это позволило уменьшить дискретизацию обработки флотов до 4х секунд на серверах с 300+ онлайна (предыдущий менеджер при онлайне порядка 200 человек и дискретизацией 12 секунд примерно через два часа работы "выбивал" MySQL сервер). При этом среднее время ожидания блокировки не превышает 250 мс. Локальное (клиентское) и серверное время ======================================== Изменена процедура замера разницы между локальным и серверным временем. Теперь она производится не каждый раз при обращении к серверу, а один раз и сохраняется в БД При заметном изменении разницы можно заново произвести эту операцию, установив галочку "Замерить разницу между локальным (клиентским) и серверным временем" на странице настроек пользователя и сохранив настройки. Замер будет произведен при следующем открытии любой страницы игры Теперь вместо локального или серверного времени одновременно показывается и локальное, и серверное время в следующих местах: 1. В навбаре - часы реального времени 2. При отправке флота на экране выбора точки назначения - в графе времени прибытия и возвращения флота 3. При отправке флота на экране подтверждения отправки - в графе времени прибытия и возвращения флота Теперь вместо серверного времени показывается локальное в следующих местах: 1. В событиях навбара (флоты и экспедиции) 2. В новостях 3. На экране флотов в полете 4. На экране обзора планеты в списке летящих флотов 5. В чате и истории чата 6. В боевых отчетах 7. В сообщениях Переформатирован навбар для добавления локального и серверного времени Повышена устойчивость механизма к ошибкам на стороне клиента: неправильный часовой пояс, неправильные настройки DST в операционной системе, сильно отстающие/спешащие часы итд Система темплейтов ================== Добавлен движок рендеринга темплейтов от phpBB3. Движок доработан до обратной совместимости с темплейтами XNova. В темплейтах можно указывать префикс "L_" что бы взять переменную из массива $lang и не нужно целиком передавать в массив $lang в процедуру разбора темплейтов. Так же можно использовать локализованные значения в одномерных массивах. Например, $lang['tech'][401] в темплейте превратится в {L_tech[401]}. Поддерживаются так же строковые индексы массивов. В темплейтах можно указывать префикс "C_", что бы использовать значение из конфигурации Вселенной. Не работает в условных операторах. В темплейтах можно указывать префикс "D_", что бы использовать значения PHP-констант Система отпусков ================ Переписана с нуля система отпусков. Теперь работает опция "Отключить режим отпуска". На пользовательскую страницу настроек добавлен таймер, показывающий минимальный срок отпуска, если игрок уйдет в отпуск сейчас JS библиотека таймеров ---------------------- Написана с нуля универсальная система внутриигровых таймеров на стороне клиента. Корректно обрабатываются нажатие кнопки Back в браузере (через AJAX). Корреткно обрабатывается рассинхронизация часов между клиентом и сервером (включая часовые пояса) [@] sn_timer: Таймер корректно работает с очередью, в которой количество юнитов больше 1 /.local ------- Добавлен каталог '/.local' для облегчения разработки. Файлы в этом каталоге игнорируются GIT-ом, но при этом корректно подключают внешние файлы для обработки и выполнения Баннер и юзербар ---------------- Полностью переписана система генерации баннеров/юзербаров. Унифицированы процедуры их генерации, слиты в один файл процедур и один файл-враппер, вынесены PHP-файлы из каталога scripts в соответствующие места. Автоматическое обновление ------------------------- Написан с нуля модуль автоматического обновления структуры БД Апдейтер использует собственные процедуры запросов к БД Добавлена возможность форсировать обновление в случае проблем с автоматическим обновлением. Можно форсировать как все обновления, так и только последнее. Возможность доступна в интерфейсе Администратора, пункт меню "Утилиты" Автоапдейтер на время работы отключает отладку вне зависимости от глобальных настроек Обслуживание ------------ Добавлена автоматическая процедура ежедневного обслуживания: чистка таблицы башинга, чистка таблицы САБ Логи ошибок и событий --------------------- Полностью переработана система внутренних логов сообытий. События сохраняются с двумя компонентами - пригодной для чтения человеком напрямую из БД и machine-readable, предназначенной для разбора встроенным парсером. Во второй компоненте сохраняется backtrace, переменные окружения ($_GET, $_POST, $_SERVER, $_COOKIE), логи запросов, а так же любые другие по желанию разработчика. Встроенный парсер позволяет просматривать подробности о каждой ошибке на отдельной странице. Предусмотрено два уровня событий - "Информационное сообщение" и "Ошибка". Так же система событий имеет развитую систему кодов ошибок Игрокам показывается ID ошибки в БД, а не её порядковый номер. Это заметно ускоряет поиск нужной записи об ошибке Изменения Тёмной Материи вынесены из глобального лога в отдельную таблицу. Это существенно облегчило поиск неисправностей на сервере и подозрительных действий пользователей. Старые записи перенесены в отдельную таблицу xCache ------ Движок теперь поддерживает xCache. Использование xCache настоятельно рекомендуется - это заметно разгрузит сервер и уменьшит количество обращений к БД. Хотя движок может работать и без кэшера, в дальнейшем СН все больше будет оптимизироваться для использование opcode-cacher Sypex Dumper ------------ В дистрибутив добавлена копия Sypex Dumper v2.0.8 (freeware) для создания резервных копий (и, естественно, их восстановления) Прочее ------ Закрыты все обнаруженные дыры в безопасности (SQL-injection через параметры страницы) на страницах, доступных пользователям. Так же полностью исключена возможность начисления ТМ посредством взлома извне и изменение прав отдельных игроков Офицеры отвязаны от конкретных цифр и привязаны к константам-идентификаторам Удалено множество лишних файлов Таблицы 'lunas' и 'galaxy' больше не используются. Вся их функциональность перенесена в таблицу 'planets' Шаблоны даты и времени везде заменены константами. Все PHP-deprecated функции заменены более современными аналогами Устаревшая функция SYS_mysqlSmartEscape заменена на соответствующие Устаревшие массивы $pricelist, $resources, $reslist, $sn_groups, $CombatCaps заменены в коде на $sn_data Введена дополнительная защита от взлома. Теперь член команды игры не может назначить кому-либо уровень доступа, равный или больший своего. Таким образом через админку невозможно назначить второго Администратора. Однако это можно проделать напрямую в БД Прочее ====== [@] ВНИМАНИЕ!!! Удален скин 'xnova' Из дистрибутива игры удален скин 'xnova' из-за занимаемого им размера Скачать скин можно с основного сайта проекта по ссылке http://supernova.ws/files/skins/supernova-skin-xnova.zip либо с SourceForge по ссылке http://sourceforge.net/projects/supernova-ws/files/skins/ [@] Среда разработки изменена на WAMP Server 2.2. Конфигурация: MySQL 5.1.41 Apache 2.2 PHP 5.2.9-2 + xCache 1.3.2 [@] JS: Обновлен jQuery до версии 1.7.1. Обновлен jQuery-UI до версии 1.8.17 [@] $sn_data['groups']['prod'] => $sn_data['groups']['factories'] [@] SYS: Устаревшие функции заменены актуальными аналогами: int_buildCounter => tpl_parse_planet GetTargetDistance, GetMissionDuration, GetFleetConsumption => flt_travel_data GetShipConsumption, get_ship_speed => get_ship_data GetFleetMaxSpeed => flt_fleet_speed [@] SYS: В описании структуры кораблей (vars.php) данные о двигателях вынесены в отдельный массив 'engine'. Теперь можно указывать неограниченное количество двигателей для апгрейда корабля [@] Новости: На странице новостей, странице Императора и обзоре планеты рендерятся одной процедурой и используют один темплейт. Индикатор свежих новостей теперь ориентируется на дату просмотра, а не на количество новостей [@] ТМ: Изменение ТМ в переменной $user производится в теле rpg_points_change [@] Админка/Настройки: Состояние все чекбоксов (включен/выключен) теперь определются в темлейте [@] Все таймеры врат заменены на sn_timer [@] Вселенная: При обнаружении планеты с отсутствующим пользователем в БД планета удаляется с отсрочкой 24 часа [@] Темплейты Расширение файлов темплейтов изменено с ".tpl" на ".tpl.html" для большего удобства разработки Теперь при использовании директивы НЕ НУЖНО указывать расширение подключаемого файла Рендерер страницы теперь подхватывает заголовок страницы, если он есть - переменная PTL {PAGE_HEADER} Содержимое переменной $template_result автоматически загружаетя в темплейт в файле index.php Файл темплейта _result_message автоматически подгружается при рендеринге темплейта, если в структуре переменных темплейта есть массив 'result' [@] Файлы: Удалены неиспользуемые файлы faq.php, faq1.php, faq2.php [@] Файлы: Сильно переработана организация файлов PHP Многие процедуры поменяли свое местоположение Множество файлов теперь не грузятся автоматически при старте движка, а грузятся лишь по потребности. В частности - все файлы миссий подгружаются только в менеджере летящих флотов, а сам менеджер грузится только при потребности в обработке флотов. Кроме того, боевой движок подгружается только в симуляторе и при обсчете боев (Миссии "Атака" и "Уничтожить") Все это позволило заметно сократить размеры кода в памяти сервера [@] Модули: Загрузчики модулей теперь располагаются в каталоге /modules, а не в /modules/_functions [@] Документация: README преобразован в UTF8 [@] Добавлена компенсация работы механизма Magic Quotes. Подробнее - см. "/docs/install.txt", подраздел "Magic Quotes" [@] Юниты Добавлена дополнительный аттрибут "max" ко всем юнитам и его общая проверка в eco_get_build_data() [@] Меню Меню теперь является динамическим Добавлена возможность добавления иконки к пункту меню. Иконки берутся из подкаталога 'icons' текущего скина Добавлена прямая поддержка CSS-стилей для элементов меню Под логотип сервера в ALT вместо 'supernova.ws' подкладывается имя сервера [@] Модули Автоматическая загрузка и регистрация модулей Автоматическое перекрытие функций методами модуля из $manifest Автоматическое подгрузка специфических пунктов меню Автоматическая загрузка конфигурации модуля из файла Теперь можно перекрывать функции методами из класса Добавлена поддержка "цепи перекрытий". Можно протаскивать сквозь цепь результат вычислений, модифицируя его на каждом шагу (см. пример реализации перекрытия mrc_get_level) Теперь в манифесте модуля можно задавать список констант, которые будут автоматически назначены при его инициализации Теперь в манифесте модуля можно задавать список переменных, которые автоматически заменят (в случае обычных переменных) или дополнят (в случае одноуровневых массивов) соответствующие глобальные переменные. Специальный механизм гарантирует корректную работу с константами в таких переменных и массивах - даже тех, которые были только назначены при инициализации модуля Теперь при инициализации модуля в цепочку вызовов функций корректно инсталлируется оригинальная основная функция из движкам Система модулей переписана с учетом базовой поддержки MVC Автоматическая загрузка языков Изменена процедура инициализации - модули теперь грузятся до проверки наличия страниц. Это сделано на случай, если модуль добавляет свои собственные страницы как, например, модуль Премиума и модуль Рас Теперь можно указывать в качестве страницы загрузки файла локализации пустое множество '' - файлы в этом массиве будут загружаться всегда Поддержка дерева зависимости модулей - теперь можно делать модули, зависящие от других модулей Автоматическая загрузка зависимых модулей в правильном порядке Устранена ошибка на случай, если модуль не возвращает темплейта. Такого не должно происходить в нормальной ситуации [@] Подсказки: Можно задавать ширину подсказки для согласования с основной страницей [@] Константы типов юнитов приведены к единому формату "UNIT_xxx" [@] Всем юнитам прописаны типы [@] События флотов Переработана система событий флотов [@] Файлы Расширение файлов локализации изменено с ".mo" на ".mo.php" для лучшей поддержки в различных IDE [@] Локализация В дополнение к стандартным путям "language//.mo.php" теперь так же поддерживаются пути вида "language/_.mo.php". Это сделано для упрощения структуры подкаталогов в модуле [@] Очереди Упразднена константа MAX_BUILDING_QUEUE_SIZE. Теперь размер очереди построек зданий и верфи/обороны задается переменными из таблицы `config` - соотвественно 'server_que_length_structures' и 'server_que_length_hangar'. По умолчанию их значения равны 5 [@] Классы Новый метод 'assign_recursive' класса "template" - позволяет в одном операторе заполнить как переменные темплейта, так и блоки - включая вложенные [@] Скины Изменена организация CSS-файлов в скинах. Файл "formate.css" переименован в "skin.css". К нему присоединен в конце файл "default.css". Таким образом сохранена последовательность загрузки стилей и при этом все стили скина находятся теперь в одном файле Теперь движок подгружает файл "/design/css/global_server.css" . Этот файл может использоваться для добавления специфичных глобальных стилей сервера - он не входит в дистрибутив и не будет перезаписан при обновлении движка. Файл грузится после "global.css" и, следовательно, может перекрывать глобальные стили "по умолчанию". Однако он грузится до скинового CSS и, следовательно, будет перекрыт стилями скина Изменена система раскраски меню. Теперь каждому пункту меню присваиваются присваиваются собственные аттрибуты HTML ID и CLASS. КРАЙНЕ рекомендуется производить раскраску меню через аттрибут ID (см. пример в formate.css скина EpicBlue). Список ID элементов меню можно узнать либо в браузере (используя функцию "Inspect Element" или аналогичную), либо в файле "/includes/template.php", функция tpl_render_menu(), переменная $sn_menu В базовый CSS перенесено цветовое кодирование чисел и сообщений (ошибка, предупреждение итд). При желании они могут быть перекрыти в CSS-файлах стилей Выделение Администрации и премиумных аккаунтов проводится через стили. Соответственно, в основной скин добавлены стили классов ".nick_admin", ".nick_operator", ".nick_moderator" и ".nick_premium" Добавлены классы ".same_alliance" и ".same_player" для выделения в статистике соответственно Альянса игрока и самого игрока supernova-ivash: Скин приведен в соответствие с текущим положением дел [@] MVC Базовая поддержка MVC - встроенная система моделей и видов Все страницы, переделанные под MVC, перемещены в /includes/pages Частичная поддержка структуры MVCv2 в init.php Добавлена поддержка анонимных MVC-страниц в common.php Добавлена поддержка MVC-страниц на страницы логина/регистрации [@] Реклама Добавлена возможность управлять мета-тегами 'description' и 'keywords' без редактирования темплейта! Их содержимое хранится в таблице `config` в полях `adv_seo_meta_description` и `adv_seo_meta_keywords` соответственно [@] HTTPS Теперь СН нормально работает и по HTTPS протоколу [@] Рендерер имен Добавлен механизм рендеринга имени пользователя Чат, статистика, Вселенная и страница Императора теперь используют общий механизм рендеринга имени пользователя [@] Код Из файла vars.php выделены три отдельных файла со структурами, боевыми юнитами и всеми остальными Так же добавлена дополнительная служебная информация для того, что бы в симуляторе не пропадали защитные сооружения при добавлении новых юнитов через модули Убраны неиспользуемые данные "скорострела" Из информации о боевых юнитов убраны ненужные данные о единичных усилениях Численные значения для защитных сооружений и ракет заменены везде на константы Везде из текста убраны ссылки на переменную $GLOBALS для поддержки рефакторинга в IDE Библиотека "tw-sack.js" больше не используется - она заменена на jQuery Исправлена очепятка в названии константы технологии ионного двигателя Убран неиспользуемый код "скорострела" js_safe_string() теперь корректно работает со строками, где есть перевод строки, включая Линуксовские и Маковские форматы файлов sn_function_call теперь корректно отрабатывает несуществующие функции Добавлена функция sn_get_groups() eco_bld_tech.php теперь не использует $sn_data Оптимизирован код Альянсов Все страницы интерфейса игроков переписаны без использования $parse Теперь в doquery() префикс {{table}} не используется и не обрабатывается Страницы login.php, phalanx.php переписаны без использования $parse JS: В объявлениях скриптов все конструкции language="javascript" заменены на type="text/javascript" Теперь движок может работать с неограниченным количеством типов кораблей-переработчиков Переформатирован HTML-код обзора планеты Поддержка опций движка в глобальном объекте $supernova Поддержка опций на страницах в подмассиве 'pages' [@] Меню Заменены типы элементов меню на "lang" там, где это было возможно Стандартное меню вынесено из файла template.php в includes/vars_menu.php Парсер меню теперь понимает вложенные конструкции и константы для типа меню 'lang' - т.е. конструкции вида 'info[STRUC_MINE_METAL][description]' [@] БД В таблицу флотов добавлены идентификаторы планет старта/назначения [@] Код Расчеты уровня премиума вынесены в модуль Изменены некоторые SQL-запросы Добавлен простенький бенчмарк infos.php теперь использует прямое обращение к production юнита и подмассиву modifiers eco_bld_structures.php теперь использует обращение к подмассиву modifiers mercenaries и plans перенесены из таблицы powerup в таблицу unit Константа MAX_OVERFLOW исключена из кода Обработан eco_get_planet_caps и связанные процедуры Добавлена функция вычисления случайного числа, распределенного нормально [@] Код/БД Артефакты перенесены из таблицы игроков в таблицу юнитов Удалены лишние поля Технологий из таблицы игрока Добавлены констраинты в некоторые таблицы Удалена колонка `que` из таблицы `users` premium перенесен из таблицы powerup в таблицу unit Исследования и очередь исследований перенесены в соответствующие таблицы [@] Код/JS Переписаны некоторые процедуры fleet.js на использование jQuery [@] MVC $sn_i18n['pages'] -> $sn_mvc['i18n'] [@] Обслуживание Процедура обслуживания теперь так же удаляет боевые отчеты UBE старше 60 дней [@] Модули Изменен алгоритм слияния массивов переменных в модулях База данных =========== Добавлен патч для mysql-серверов со включенным STRICT_TRANS_TABLES Модульная система ~~~~~~~~~~~~~~~~~ Динамическое перекрытие функций =============================== Любая стандартная функция СН может быть перекрыта пользователем с минимальными изменениями в основном коде движка. Данный функционал обеспечивает базовые возможности по созданию модулей. Ниже изложен алгоритм работы перекрытия При старте движка он грузит все PHP файлы из каталога /modules. В этих файлах должны содержатся альтернативные функции и указания движку на включения перекрытия. См. файл /modules_example.php для примера перекрытия функции display() с последующим вызовом стандартной функции ВНИМАНИЕ! Движок всегда грузит все файлы из каталога перекрытия функций, поэтому что бы не увеличивать размер процесса PHP в памяти следует держать в каталоге только используемые модули Функции-оболочки ---------------- Не все функции в настоящий момент поддерживают перекрытие (см. список таких функций в следующем разделе), однако простой модификацией кода можно перекрыть любую функцию без потери обратной совместимости. Рассмотрим пример модификации кода для перекрытия функции расчета максимальное количество полей на планете/луне eco_planet_fields_max(). Она находится в файле /includes/general.php Для начала нужно переименовать стандартную функцию. Открываем указанный файл /includes/general.php ищем строку function eco_planet_fields_max($planet) и заменяем её на строку function sn_eco_planet_fields_max($planet) Префикс "sn_" нужен для нормальной работы системы перекрытия в случае, если не будет найдена новая функция Теперь добавляем в тот же файл функцию-оболочку: function eco_planet_fields_max($planet) { $func_args = func_get_args(); // Для совместимости с PHP <= 5.2.x return sn_function_call('eco_planet_fields_max', $func_args); } В кавычках указывается имя перекрываемой функции. Параметры функции-оболочки должны быть идентичны параметрам оригинальной функции. Теперь движок может корректно работать с этой функцией, даже если отсутствует пользовательская функция Допустим, мы хотим, что бы каждая планета или луна имела на 500 полей больше, чем позволяет её размер. Создаем файл модуля в каталоге /modules Имя файла может быть любым, но для облегчения дальнейших модификаций желательно называть модуль именем подменяемой функции. Поэтому создаем в указанном каталоге файл eco_planet_fields_max_my.php и копируем в него следующее содержимое Пояснения по коду. Первая и последняя строка указывают интерпретатору, что файл содержит код PHP. Вторая строка содержит указание движку по перекрытию функции eco_planet_fields_max() функцией eco_planet_fields_max_my(). Строки с третьей по шестую содержат саму пользовательскую функцию PROFIT! ВНИМАНИЕ!!! PHP 5.3.1 содержит баг, который делает невозможной полноценную работу СН начиная с v33a12! Обновите PHP, или сделайте откат до более ранней версии PHP, или используйте предыдущую версию СН. Описание бага: https://bugs.php.net/bug.php?id=50394 Функции, поддерживающие перекрытие ---------------------------------- display() mrc_get_value() mrc_modify_value() Сервер обновлений ~~~~~~~~~~~~~~~~~ Запущен сервер обновлений. В настоящее время сервер обновлений поддерживает следующие функции: проверка версии движка и регистрация сайта. Доступ к ним осуществляется из админки со страницы настроек сервера Технические детали ================== Движок сервера общается с сервером обновлений по протоколу HTTP. Если установлен CURL и подключен к PHP, то для проверки версии будет использован именно он. Убедитесь, что CURL правильно настроен и ему разрешен доступ к внешним ресурсам Если CURL не установлен, будет осуществлена попытка получить версию через file_get_contents(). Убедитесь, что в PHP разрешается обращаться к внешним сайтам через соответствующую функцию Проверка версии =============== При проверке версии передаются только анонимные данные - текущая версия БД, номер релиза и версия игры. Результат проверки - рекомендация сервера обновлений о необходимости обновления текущей версии игры. Результат и время последней проверки выводится в левом меню и на странице настроек. Предусмотрено цветовое кодирование результатов проверки: зеленый - обновление необязательно, желтый - желательно обновить движок, оранжевый - крайне рекомендуется обновление, красный - ошибка проверки версии Есть два варианта проверки версии: ручная и автоматическая Ручная проверка версии выполняется в ручном режиме по нажатию кнопки "Проверить версию" на странице настроек. Автоматическая проверка версии (по умолчанию - отключена) производится самостоятельно движком по расписанию. Период автоматической проверки версии задается в секундах в таблице config переменной server_updater_check_period. По умолчанию период проверки равен 24 часам (раз в сутки). Регистрация сервера =================== Регистрация сервера нужна для ряда запросов к серверу обновлений. При регистрации передается минимум информации, необходимой для идентификации сервера: 1. Полный URL сервера - т.е. HTTP-адрес и подкаталог сервера. Это необходимо для первичной идентификации сервера. Полный путь необходим для того, что бы различать несколько копий СуперНовы, установленных на одном IP или домене. Пример полного URL: http://myserver.com/myfolder/ 2. Внутреннее название сервера. Используется для подстановки в сообщения. Идентификационная информация сервера хранится в таблице "config" - ключ в записи "server_updater_key", а идентификатор - в записи "server_updater_id". Регистрация - зачем она? ------------------------ Зачем вообще регистрировать свой сервер? В будущем планируется ряд возможностей, которые буду доступны только зарегистрированным серверам. В их число входит (отсортированы по запланированным срокам реализации): 1. Автоматическое получение чейнджлога 2. Автоматизированное обновление движка 3. Участие в рейтинге серверов 4. Багрепорты от администраторов серверов 5. Чат для администраторов серверов 6. По запросу - удаленная диагностика сервера 7. ...и многое, многое другое Регистрация - почему сейчас? ---------------------------- Зачем регистрировать свой сервер прямо сейчас? 1. Запросы от администраторов зарегестрированных серверов имеют больший приоритет при диагностике проблем и обработке багрепортов. 2. При регистрации кроме индивидуального ключа серверу выдается уникальный идентификационный номер, который будет использоваться при первичной сортировке серверов. Чем раньше будет зарегистрирован сервер - тем, например, выше он будет в общем каталоге серверов... Copyright ~~~~~~~~~ СуперНова copyright (c) 2009 Gorlum для http://supernova.ws Project "SuperNova.WS" copyright (c) 2009 by Gorlum for http://supernova.ws Lightly based on xNova 0.8b RageRepack v226 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Updated: 2013-10-13 22:27 Project "SuperNova.WS" Release 37 37c0