diff --git a/.dockerignore b/.dockerignore index b89bdc9..1dac8e7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -10,16 +10,31 @@ dist # Local Codex/dev artifacts .codex* .codex/ +.codex-dev.* +.codex-cache/ .tmp* *.tmp -# Logs +# Logs and runtime junk *.log +*.log.* +*.out +*.err +*.pid +*.pid.lock +logs +preview*.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* +# Env and local-only config +.env +.env.* +!.env.example +*.local + # OS/editor files .DS_Store Thumbs.db @@ -31,3 +46,9 @@ Thumbs.db # Local caches tmp .cache +temp +coverage +.nyc_output +.pnpm-store +.npm +*.tsbuildinfo diff --git a/.gitignore b/.gitignore index 22e732b..7c07252 100644 --- a/.gitignore +++ b/.gitignore @@ -5,16 +5,31 @@ dist/ # Local Codex/dev artifacts .codex* .codex/ +.codex-dev.* +.codex-cache/ .tmp* *.tmp # Logs *.log +*.log.* +*.out +*.err +*.pid +*.pid.lock +logs/ +preview*.log npm-debug.log* yarn-debug.log* yarn-error.log* pnpm-debug.log* +# Env and local-only config +.env +.env.* +!.env.example +*.local + # OS files .DS_Store Thumbs.db @@ -24,3 +39,13 @@ Thumbs.db .idea/ *.swp *.swo + +# Caches / tooling +.cache/ +tmp/ +temp/ +coverage/ +.nyc_output/ +.pnpm-store/ +.npm/ +*.tsbuildinfo diff --git a/astro.config.mjs b/astro.config.mjs index 04d5f94..73ae1df 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -1,6 +1,8 @@ import { defineConfig } from 'astro/config'; import starlight from '@astrojs/starlight'; +const showEditorDocs = process.env.PUBLIC_SHOW_EDITOR_DOCS === 'true'; + export default defineConfig({ site: 'https://wiki.example.com', vite: { @@ -25,6 +27,7 @@ export default defineConfig({ } }, tagline: 'Нереалистичный архив игрового мира', + favicon: '/photo_2026-03-14_11-18-15.jpg', customCss: ['/src/styles/wiki-egames.css'], lastUpdated: true, disable404Route: true, @@ -52,6 +55,7 @@ export default defineConfig({ { label: 'Введение', items: [ + { label: 'О проекте', link: '/about-server/' }, { label: 'Часто задаваемые вопросы', link: '/faq/' }, { label: 'Правила', link: '/rules/' } ] @@ -60,7 +64,10 @@ export default defineConfig({ label: 'Игровые системы', items: [ { label: 'Общее', link: '/general/' }, + { label: 'Команды', link: '/commands/' }, { label: 'Города', link: '/cities/' }, + { label: 'Крафты', link: '/crafting/' }, + { label: 'SkinRestore', link: '/skinrestore/' }, { label: 'Алкоголь', items: [ @@ -78,13 +85,17 @@ export default defineConfig({ { label: 'Контакты и ссылки', link: '/contacts/' } ] }, - { - label: 'Для редакторов', - items: [ - { label: 'Как редактировать wiki', link: '/editing/' }, - { label: 'Шаблон новой страницы', link: '/templates/new-page-template/' } - ] - } + ...(showEditorDocs + ? [ + { + label: 'Для редакторов', + items: [ + { label: 'Как редактировать wiki', link: '/editing/' }, + { label: 'Шаблон новой страницы', link: '/templates/new-page-template/' } + ] + } + ] + : []) ] }) ] diff --git a/public/ChatGPT Image 22 апр. 2026 г., 05_34_46.png b/public/ChatGPT Image 22 апр. 2026 г., 05_34_46.png new file mode 100644 index 0000000..0e3391e Binary files /dev/null and b/public/ChatGPT Image 22 апр. 2026 г., 05_34_46.png differ diff --git a/public/brand-logo.png b/public/brand-logo.png new file mode 100644 index 0000000..0e3391e Binary files /dev/null and b/public/brand-logo.png differ diff --git a/public/icons/minimal-solid/community.png b/public/icons/minimal-solid/community.png new file mode 100644 index 0000000..23109cb Binary files /dev/null and b/public/icons/minimal-solid/community.png differ diff --git a/public/icons/minimal-solid/exclamation.png b/public/icons/minimal-solid/exclamation.png new file mode 100644 index 0000000..29563fe Binary files /dev/null and b/public/icons/minimal-solid/exclamation.png differ diff --git a/public/icons/minimal-solid/game-controller.png b/public/icons/minimal-solid/game-controller.png new file mode 100644 index 0000000..f1710a2 Binary files /dev/null and b/public/icons/minimal-solid/game-controller.png differ diff --git a/public/icons/minimal-solid/gear.png b/public/icons/minimal-solid/gear.png new file mode 100644 index 0000000..9d77a8c Binary files /dev/null and b/public/icons/minimal-solid/gear.png differ diff --git a/public/icons/minimal-solid/keyboard.png b/public/icons/minimal-solid/keyboard.png new file mode 100644 index 0000000..e7f8440 Binary files /dev/null and b/public/icons/minimal-solid/keyboard.png differ diff --git a/public/icons/minimal-solid/message.png b/public/icons/minimal-solid/message.png new file mode 100644 index 0000000..0cb3228 Binary files /dev/null and b/public/icons/minimal-solid/message.png differ diff --git a/public/icons/minimal-solid/safe.png b/public/icons/minimal-solid/safe.png new file mode 100644 index 0000000..bf47d25 Binary files /dev/null and b/public/icons/minimal-solid/safe.png differ diff --git a/public/icons/minimal-solid/user-profile.png b/public/icons/minimal-solid/user-profile.png new file mode 100644 index 0000000..6414960 Binary files /dev/null and b/public/icons/minimal-solid/user-profile.png differ diff --git a/public/photo_2026-03-14_11-18-15.jpg b/public/photo_2026-03-14_11-18-15.jpg new file mode 100644 index 0000000..5e445b4 Binary files /dev/null and b/public/photo_2026-03-14_11-18-15.jpg differ diff --git a/src/components/WikiEditLink.astro b/src/components/WikiEditLink.astro index da29693..03108ff 100644 --- a/src/components/WikiEditLink.astro +++ b/src/components/WikiEditLink.astro @@ -2,10 +2,11 @@ import { Icon } from '@astrojs/starlight/components'; const { editUrl } = Astro.locals.starlightRoute; +const showEditorDocs = import.meta.env.PUBLIC_SHOW_EDITOR_DOCS === 'true'; --- { - editUrl && ( + showEditorDocs && editUrl && ( Редактировать страницу diff --git a/src/components/WikiHeader.astro b/src/components/WikiHeader.astro index 1509041..a6ad8e9 100644 --- a/src/components/WikiHeader.astro +++ b/src/components/WikiHeader.astro @@ -3,7 +3,6 @@ import config from 'virtual:starlight/user-config'; import LanguageSelect from 'virtual:starlight/components/LanguageSelect'; import Search from 'virtual:starlight/components/Search'; -import SiteTitle from 'virtual:starlight/components/SiteTitle'; import SocialIcons from 'virtual:starlight/components/SocialIcons'; const shouldRenderSearch = @@ -21,7 +20,15 @@ const topLinks = [
- + + + + PARABOX + PROJECT + +
@@ -203,10 +356,70 @@ const topLinks = [ padding: 0.25rem; margin: -0.25rem; min-width: 0; - gap: 1rem; + gap: 1.1rem; align-items: center; } + .wiki-brand { + display: inline-flex; + align-items: center; + gap: 0.55rem; + text-decoration: none; + flex-shrink: 0; + border: 1px solid transparent; + border-radius: 0.3rem; + padding: 0.2rem 0.28rem 0.2rem 0.22rem; + transition: border-color 150ms ease, background 150ms ease; + } + + .wiki-brand:hover { + border-color: color-mix(in srgb, var(--sl-color-accent) 32%, transparent); + background: color-mix(in srgb, var(--sl-color-accent-low) 64%, transparent); + } + + .wiki-brand__icon { + width: 1.85rem; + height: 1.85rem; + display: inline-flex; + align-items: center; + justify-content: center; + border: 0; + background: transparent; + box-shadow: none; + } + + .wiki-brand__icon img { + width: 100%; + height: 100%; + display: block; + border-radius: 0; + object-fit: contain; + } + + .wiki-brand__copy { + display: inline-flex; + flex-direction: column; + align-items: flex-start; + line-height: 1; + } + + .wiki-brand__title { + font-family: 'Sora', sans-serif; + font-size: 1.43rem; + font-weight: 700; + letter-spacing: 0.02em; + color: var(--sl-color-white); + } + + .wiki-brand__subtitle { + margin-top: 0.14rem; + font-family: 'Sora', sans-serif; + font-size: 0.56rem; + font-weight: 700; + letter-spacing: 0.28em; + color: var(--sl-color-gray-3); + } + .wiki-top-nav { display: none; gap: 0.45rem; @@ -327,51 +540,56 @@ const topLinks = [ .wiki-back-to-top { position: fixed; top: auto; - right: max(0.75rem, env(safe-area-inset-right)); - bottom: max(1.1rem, env(safe-area-inset-bottom)); + right: max(1.35rem, calc(env(safe-area-inset-right) + 0.8rem)); + bottom: max(1.45rem, calc(env(safe-area-inset-bottom) + 0.7rem)); z-index: 30; - border: 1px solid color-mix(in srgb, var(--sl-color-accent) 70%, transparent); + border: 1px solid color-mix(in srgb, var(--sl-color-accent) 74%, transparent); border-radius: 999px; background: linear-gradient( 140deg, - color-mix(in srgb, var(--wiki-purple-2) 78%, #101522), - color-mix(in srgb, var(--wiki-blue-2) 82%, #101522) + color-mix(in srgb, var(--wiki-purple-2) 74%, #101522), + color-mix(in srgb, var(--wiki-blue-2) 84%, #101522) ); color: #f6f9ff; - font-family: 'Sora', sans-serif; - font-size: 1.1rem; - font-weight: 600; - letter-spacing: 0.01em; - width: 2.6rem; - height: 2.6rem; + width: 3.1rem; + height: 3.1rem; display: inline-flex; align-items: center; justify-content: center; padding: 0; - line-height: 1; box-shadow: - 0 10px 24px hsl(220 95% 62% / 0.24), - 0 0 0 1px hsl(214 88% 70% / 0.22); + 0 0 0 1px hsl(214 88% 70% / 0.24), + 0 0 24px hsl(217 100% 68% / 0.38), + 0 0 42px hsl(221 100% 65% / 0.22); opacity: 0; visibility: hidden; - transform: translateY(6px); + transform: translateY(8px) scale(0.96); pointer-events: none; - transition: opacity 160ms ease, transform 160ms ease, border-color 160ms ease; + transition: opacity 180ms ease, transform 180ms ease, border-color 180ms ease, box-shadow 180ms ease; + } + + .wiki-back-to-top__icon { + width: 1.5rem; + height: 1.5rem; + stroke: currentColor; + stroke-width: 2.15; + stroke-linecap: round; + stroke-linejoin: round; } .wiki-back-to-top.is-visible { opacity: 1; visibility: visible; - transform: translateY(0); + transform: translateY(0) scale(1); pointer-events: auto; } .wiki-back-to-top:hover { border-color: color-mix(in srgb, #9ec4ff 80%, transparent); box-shadow: - 0 14px 28px hsl(220 95% 62% / 0.32), 0 0 0 1px hsl(214 88% 70% / 0.35), - 0 0 18px hsl(220 96% 68% / 0.34); + 0 0 28px hsl(219 97% 70% / 0.44), + 0 0 50px hsl(221 98% 68% / 0.27); } .social-icons::after { @@ -415,12 +633,36 @@ const topLinks = [ } @media (max-width: 50rem) { + .wiki-brand { + padding: 0.14rem 0.2rem; + gap: 0.42rem; + } + + .wiki-brand__icon { + width: 1.55rem; + height: 1.55rem; + } + + .wiki-brand__title { + font-size: 1.08rem; + } + + .wiki-brand__subtitle { + font-size: 0.46rem; + letter-spacing: 0.24em; + } + .wiki-back-to-top { top: auto; - right: max(0.62rem, env(safe-area-inset-right)); - bottom: max(1rem, env(safe-area-inset-bottom)); - width: 2.5rem; - height: 2.5rem; + right: max(1rem, calc(env(safe-area-inset-right) + 0.52rem)); + bottom: max(1.18rem, calc(env(safe-area-inset-bottom) + 0.58rem)); + width: 2.85rem; + height: 2.85rem; + } + + .wiki-back-to-top__icon { + width: 1.34rem; + height: 1.34rem; } } } diff --git a/src/content/docs/alcohol-brewing.md b/src/content/docs/alcohol-brewing.md index c8a7fd2..0ce242e 100644 --- a/src/content/docs/alcohol-brewing.md +++ b/src/content/docs/alcohol-brewing.md @@ -50,11 +50,11 @@ description: "Полное руководство по ферментации, Всего существует 10 уровней качества: -- `☆` — уровень 1 -- `★` — уровень 2 -- `★☆` — уровень 3 +- `I` — уровень 1 +- `II` — уровень 2 +- `III` — уровень 3 - `...` -- `★★★★★ (10)` — максимальное качество +- `X` — максимальное качество (уровень 10) :::note Чем точнее соблюдён рецепт, тем выше качество. diff --git a/src/content/docs/all-ip.md b/src/content/docs/all-ip.md index 46f14ac..2b4b361 100644 --- a/src/content/docs/all-ip.md +++ b/src/content/docs/all-ip.md @@ -3,15 +3,52 @@ title: "Все IP" description: "Адреса и порты сервера PARABOX для Java и Bedrock." --- -## 🎮 Основное +## Основные адреса -### Java `1.21.11` +
+
+

Java 1.21.11

+
    +
  • + Основной: + +
  • +
  • + AnyCast-прокси: + +
  • +
+
-- Основной: `mc.rpcm.su` -- AnyCast-прокси: `mine.rpcm.su` +
+

Bedrock 26.2

+
    +
  • + Основной: + +
  • +
  • + Запасной IP: + +
  • +
  • + Порт: + +
  • +
+
+
-### Bedrock `26.2` - -- Основной: `mc.rpcm.su` -- Запаска: `213.152.43.52` -- Порт: `25875` +
+ Используйте запасной адрес, если основной IP временно недоступен. +
diff --git a/src/content/docs/cities-registration.md b/src/content/docs/cities-registration.md new file mode 100644 index 0000000..da5fa92 --- /dev/null +++ b/src/content/docs/cities-registration.md @@ -0,0 +1,47 @@ +--- +title: "Города и регистрация" +description: "Как пройти регистрацию, вступить в город или запустить собственный проектный город." +--- + +## Как попасть на сервер + +1. Перейдите в бота заявок: @RPCM_MINE_BOT. +2. Заполните анкету и дождитесь подтверждения. +3. Подключитесь по адресу `mc.rpcm.su`. +4. Пройдите регистрацию в игре. + +## Как выбрать город + +После входа у вас есть два рабочих сценария: + +- вступить в уже существующий город; +- создать собственный город проекта. + +Если вступаете в существующий город, проверьте его правила и требования к жителям. Если создаете новый, подготовьте описание, цели и формат набора. + +## Как запустить свой город + +### Минимальный шаблон объявления + +```text +Название города: +Координаты: +Мэр / управляющий орган: +Описание: +Набор жителей: да / нет +Правила города: +``` + +### Что важно указать сразу + +- чем город занимается и какой стиль игры поддерживает; +- кого вы ищете в первую очередь; +- есть ли внутренние ограничения и роли; +- как с вами связаться. + +## Где смотреть полезную информацию + +- IP и резервные адреса: Все IP +- Базовые правила: Правила +- Частые вопросы: FAQ +- Раздел по городам: Города diff --git a/src/content/docs/cities.md b/src/content/docs/cities.md index c9d3e85..4efa8f1 100644 --- a/src/content/docs/cities.md +++ b/src/content/docs/cities.md @@ -3,26 +3,26 @@ title: "Города" description: "Раздел для представления городов и проектов игроков." --- -## 🏠 Города и проекты игроков +## Города и проекты игроков -На **PARABOX** вы можете создать свой город у нас на проекте, собрать жителей и развивать свою территорию. +На PARABOX можно создать свой город, собрать жителей и развивать территорию вместе с другими игроками.
-

Представить свой город. Расскажите о своём проекте и покажите, чем он уникален.

+

Представить свой город. Расскажите о проекте и его отличительных чертах.

-

Искать жителей. Находите игроков, которые хотят вступить в ваш город.

+

Найти жителей. Публикуйте набор и указывайте роли, которые сейчас нужны городу.

-

Показывать постройки. Делитесь скриншотами и прогрессом развития территории.

+

Показывать развитие. Делитесь скриншотами, координатами и текущими задачами.

-

Организовывать совместные проекты. Договаривайтесь о союзах, ивентах и общих инициативах.

+

Организовывать союзы. Договаривайтесь о торговле, ивентах и совместных проектах.

-## 📌 Если создаёте пост о городе +## Шаблон публикации города ```text Название города: @@ -33,8 +33,8 @@ description: "Раздел для представления городов и Правила города: ``` -Это поможет другим игрокам быстрее к вам присоединиться. +Подробный процесс входа на сервер и запуска города описан в статье «Города и регистрация». :::tip -Чем понятнее и полнее пост, тем быстрее игроки смогут найти и выбрать ваш город. +Чем понятнее и полнее описание города, тем быстрее к вам присоединятся игроки. ::: diff --git a/src/content/docs/commands.md b/src/content/docs/commands.md index e65f2dd..d8cefdf 100644 --- a/src/content/docs/commands.md +++ b/src/content/docs/commands.md @@ -1,14 +1,50 @@ ---- +--- title: "Команды" -description: "Черновик страницы с командами сервера." +description: "Справочник игровых команд: чат, личные сообщения, RP и полезные функции." --- ## Команды -Это временная страница-заглушка. +Ниже собраны основные команды сервера, сгруппированные по категориям. -- `/spawn` — пример команды 1 -- `/home` — пример команды 2 -- `/rtp` — пример команды 3 +### Настройки -Позже замените этот список на реальные команды вашего сервера. +- `/chatsetting` - открыть меню настроек чата (уведомления, отображение, звук и т.д.). + +### Личные сообщения + +- `/tell <ник> <сообщение>` - отправить личное сообщение игроку. +- `/msg`, `/w`, `/m`, `/message`, `/send` - альтернативы команды `/tell`. +- `/r` - ответить последнему игроку. + +### Игнор + +- `/ignore <ник>` - игнорировать сообщения игрока. + +### Развлечения + +- `/ball <вопрос>` - задать вопрос и получить случайный ответ. +- `/tictactoe <ник>` - сыграть в крестики-нолики. +- `/rockpaperscissors <ник>` - камень-ножницы-бумага. +- `/try` - проверить удачу (случайный шанс). +- `/coin` - подбросить монетку. +- `/dice` - бросить кубик. + +### RP и взаимодействие + +- `/do <действие>` - RP-описание действия от третьего лица. +- `/anon <сообщение>` - отправить анонимное сообщение. +- `/helper` - попросить помощь. + +### Статус игрока + +- `/afk` - включить или выключить режим AFK. + +### Информация + +- `/ping` - узнать задержку (пинг). +- `/toponline` - посмотреть топ игроков по наигранному времени. + +### Символы + +- `/symbol` - открыть меню символов. diff --git a/src/content/docs/crafting.md b/src/content/docs/crafting.md new file mode 100644 index 0000000..40148e3 --- /dev/null +++ b/src/content/docs/crafting.md @@ -0,0 +1,18 @@ +--- +title: "Крафты" +description: "Раздел по кастомным крафтам сервера PARABOX." +--- + +## Статус раздела + +Раздел в подготовке. Здесь будет полная база кастомных крафтов. + +## Что появится + +- рецепты основных предметов сервера; +- ограничения по доступу к крафтам; +- примеры прогрессии по этапам игры. + +:::note +Если нужен конкретный рецепт раньше, уточните его у администрации или в профильном канале. +::: diff --git a/src/content/docs/general.md b/src/content/docs/general.md index c92ef42..1d595a3 100644 --- a/src/content/docs/general.md +++ b/src/content/docs/general.md @@ -3,16 +3,19 @@ title: "Общее" description: "Общая информация и веб-карта сервера PARABOX." --- -## Общее +## Веб-карта сервера -На сервере доступна интерактивная веб-карта, где можно смотреть мир в реальном времени: +Интерактивная веб-карта показывает мир в реальном времени и помогает быстро ориентироваться: -- города и постройки игроков; -- дороги и основные локации; -- общий масштаб мира и ориентиры для навигации. +- расположение городов и построек игроков; +- дороги, биомы и основные локации; +- общий масштаб карты и направления движения. -
+ diff --git a/src/content/docs/getting-started.md b/src/content/docs/getting-started.md index ade731d..2f4d556 100644 --- a/src/content/docs/getting-started.md +++ b/src/content/docs/getting-started.md @@ -3,10 +3,10 @@ title: "Начало игры" description: "Как подать заявку на сервер PARABOX и что указать в анкете." --- -## ✏️ Захотелось к нам? +## Как вступить -Чтобы попасть на сервер, необходимо отправить запрос через нашего бота. -После одобрения вы получите доступ и окунётесь в удивительные миры **PARABOX**. +Чтобы попасть на сервер, отправьте заявку через бота. +После одобрения вы получите доступ к миру PARABOX.

Подача заявки через бота

@@ -15,8 +15,15 @@ description: "Как подать заявку на сервер PARABOX и чт ## Форма анкеты -Чтобы вступить к нам, просим заполнить небольшую анкету в боте: +Чтобы вступить, заполните короткую анкету в боте: -1. Как к вам обращаться? Укажите ваш псевдоним или имя. -2. Ваш никнейм, который будет привязан к серверу. -3. От какого проекта вы? Если не от проекта, укажите, от кого вы узнали о сервере. +1. Как к вам обращаться (имя или псевдоним). +2. Ваш никнейм для привязки к серверу. +3. От какого проекта вы пришли, или откуда узнали о сервере. + +## После одобрения + +1. Подключитесь по адресу `mc.rpcm.su`. +2. Пройдите регистрацию в игре. +3. Выберите город для вступления или создайте свой. +4. Ознакомьтесь с правилами и базовыми механиками. diff --git a/src/content/docs/index.md b/src/content/docs/index.md index f81917c..0cc078a 100644 --- a/src/content/docs/index.md +++ b/src/content/docs/index.md @@ -2,46 +2,49 @@ title: "Project PARABOX" description: "Единый сервер РПКМ: города проектов, экономика, выживание и взаимодействие между игроками." hero: - tagline: Единый мир для проектов РПКМ и игроков + tagline: Единый мир для проектов и игроков actions: - text: Начать игру link: /getting-started/ icon: right-arrow variant: primary - - text: Читать сюжет - link: /story/ + - text: Смотреть все IP + link: /all-ip/ variant: minimal --- ## Project PARABOX -Мы запускаем единый сервер, где каждый проект РПКМ может создать свой собственный город, а игроки могут наслаждаться выживанием, экономикой и взаимодействием между городами. +Project PARABOX объединяет проекты РПКМ и игроков в едином живом мире: выживание, развитие городов, торговля и совместные события происходят на одной карте. -## Что вас ждёт +## Города, регистрация и первые шаги -- Система городов. Если у вас есть проект в РПКМ, вы можете создать свой город, собрать жителей и развивать собственную территорию. +1. Подайте заявку через бота и дождитесь подтверждения. +2. Зайдите на сервер по одному из IP выше. +3. Зарегистрируйтесь или войдите в игровую систему. +4. Выберите город для вступления или создайте свой проектный город. +5. Ознакомьтесь с правилами и базовыми механиками. + +Подробный разбор процесса вступления и запуска города находится в статье «Города и регистрация». + +## Основные особенности + +- Система городов с возможностью набора жителей. - Экономика и торговля между игроками. -- Общий мир для всех проектов ЛРПКМ. +- Общий мир для проектов ЛРПКМ и соло-игроков. - Ивенты и активности. - Классическое выживание с социальным взаимодействием. -- И просто весёлое времяпровождение. :::tip -Project PARABOX объединяет проекты и игроков в одном живом мире, где каждый может выбрать свой формат игры: развитие города, торговлю, выживание или участие в событиях. +Чем быстрее вы подключитесь по IP и выберете точку старта, тем проще будет влиться в текущие города и события. ::: -## ❓ Основные особенности - -- Система городов. -- Экономика / торговля. -- Ивенты и активности. - -## 🚀 Как начать играть +## Как начать играть 1. Подайте заявку. -2. Зайдите на сервер по IP. +2. Подключитесь к серверу (адреса указаны в разделе «Все IP»). 3. Прочитайте правила в соответствующем разделе. -4. Зарегистрируйтесь или войдите в систему. +4. Пройдите регистрацию на сервере. 5. Найдите город или создайте свой. -## ✨ Добро пожаловать и приятной игры! +## Добро пожаловать и приятной игры diff --git a/src/content/docs/protection.md b/src/content/docs/protection.md new file mode 100644 index 0000000..fa19a28 --- /dev/null +++ b/src/content/docs/protection.md @@ -0,0 +1,18 @@ +--- +title: "Приват и защита" +description: "Базовые принципы защиты территорий и имущества игроков." +--- + +## Статус раздела + +Раздел в подготовке. Здесь будет структурированная инструкция по привату. + +## Что появится + +- команды для создания и управления приватами; +- добавление участников и права доступа; +- ограничения и практики безопасного хранения ресурсов. + +:::caution +Пока раздел не заполнен, согласовывайте спорные ситуации по территории через администрацию. +::: diff --git a/src/content/docs/skinrestore.md b/src/content/docs/skinrestore.md new file mode 100644 index 0000000..ffa6e16 --- /dev/null +++ b/src/content/docs/skinrestore.md @@ -0,0 +1,18 @@ +--- +title: "SkinRestore" +description: "Настройка и восстановление скина на сервере PARABOX." +--- + +## Статус раздела + +Раздел в подготовке. Здесь будет инструкция по установке и обновлению скинов. + +## Что появится + +- базовые команды SkinRestore; +- рекомендации для лицензии и оффлайн-режима; +- список частых проблем и решений. + +:::tip +До выхода полной инструкции используйте стандартную команду смены скина и проверяйте корректность ника. +::: diff --git a/src/styles/wiki-egames.css b/src/styles/wiki-egames.css index d13fa3a..84a8663 100644 --- a/src/styles/wiki-egames.css +++ b/src/styles/wiki-egames.css @@ -169,7 +169,7 @@ starlight-menu-button button::before { } starlight-menu-button[aria-expanded='true'] button::before { - content: '✕'; + content: '×'; font-size: 1.02rem; letter-spacing: 0; transform: none; @@ -320,6 +320,22 @@ starlight-menu-button button:hover { transform: translateY(-1px); } +/* Единый эффект свечения в момент нажатия для всех кнопок/кнопкоподобных элементов. */ +:is( + button:not(:disabled), + .sl-link-button, + .map-cta-button, + .map-ghost-button, + .copy-ip-chip + ):active { + transform: translateY(0) scale(0.98) !important; + box-shadow: + 0 0 0 1px color-mix(in srgb, var(--sl-color-accent) 34%, transparent), + 0 0 18px color-mix(in srgb, var(--sl-color-accent) 34%, transparent), + 0 0 34px color-mix(in srgb, var(--wiki-blue-2) 26%, transparent) !important; + filter: saturate(1.08); +} + .sl-markdown-content h1, .sl-markdown-content h2, .sl-markdown-content h3 { @@ -346,6 +362,33 @@ starlight-menu-button button:hover { margin-bottom: 0.5rem; } +.sl-markdown-content .sl-heading-wrapper.level-h3 > h3 { + display: inline-flex; + align-items: center; + gap: 0.52rem; +} + +.sl-markdown-content .minimal-heading-icon { + width: 1em; + height: 1em; + display: inline-block; + flex-shrink: 0; + opacity: 0.98; + background: linear-gradient( + 150deg, + color-mix(in srgb, var(--wiki-purple-2) 76%, #ffffff), + color-mix(in srgb, var(--wiki-blue-2) 82%, #ffffff) + ); + -webkit-mask-image: var(--icon-url); + mask-image: var(--icon-url); + -webkit-mask-size: contain; + mask-size: contain; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + -webkit-mask-position: center; + mask-position: center; +} + .sl-markdown-content p, .sl-markdown-content li { color: var(--wiki-text); @@ -690,44 +733,212 @@ starlight-theme-select .caret { font-weight: 700; } -.map-cta-wrap { +.ip-main-grid { + display: grid; + gap: 0.96rem; + grid-template-columns: repeat(2, minmax(0, 1fr)); + grid-auto-rows: minmax(0, 1fr); + align-items: stretch; + margin: 0.95rem 0 0.8rem; +} + +.ip-main-card { + border: 1px solid color-mix(in srgb, var(--sl-color-accent) 28%, var(--sl-color-hairline)); + border-radius: 0.2rem; + padding: 1rem 1.02rem; + height: 100%; + min-height: 11.2rem; + display: flex; + flex-direction: column; + background: + linear-gradient( + 160deg, + color-mix(in srgb, var(--wiki-purple-2) 12%, transparent), + color-mix(in srgb, var(--wiki-blue-2) 8%, transparent) + ), + color-mix(in srgb, var(--wiki-card) 96%, transparent); +} + +.ip-main-grid > .ip-main-card { + margin: 0 !important; + align-self: stretch; +} + +.ip-main-grid > .ip-main-card + .ip-main-card { + margin-top: 0 !important; +} + +.ip-main-card h3 { + margin: 0 0 0.52rem; + font-family: 'Sora', sans-serif; + font-size: 1.02rem; + line-height: 1.25; +} + +.ip-main-card ul { + margin: 0; + padding-inline-start: 1.06rem; + display: grid; + gap: 0.52rem; + align-content: start; +} + +.ip-main-card li { + margin: 0; + line-height: 1.4; +} + +.copy-ip-chip { + appearance: none; + border: 1px solid color-mix(in srgb, var(--sl-color-accent) 48%, transparent); + border-radius: 0.2rem; + background: linear-gradient( + 110deg, + color-mix(in srgb, var(--wiki-blue-2) 76%, #233145), + color-mix(in srgb, var(--wiki-purple-2) 66%, #273850) + ); + color: #f8fbff; + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2rem; + padding: 0.36rem 0.72rem; + margin: 0 0 0 0.24rem; + cursor: pointer; + text-decoration: none; + font-family: 'Sora', sans-serif; + font-weight: 600; + font-size: 0.86rem; + letter-spacing: 0.008em; + line-height: 1; + box-shadow: 0 6px 14px color-mix(in srgb, var(--sl-color-accent) 18%, transparent); + transition: transform 170ms ease, border-color 170ms ease, box-shadow 170ms ease; +} + +.copy-ip-chip code { + margin: 0; + border: 0; + background: transparent; + display: inline-block; + padding: 0; + font-size: inherit; + font-family: inherit; + font-weight: inherit; + line-height: 1.2; + color: inherit; +} + +.copy-ip-chip:hover { + color: #ffffff; + transform: translateY(-1px); + border-color: color-mix(in srgb, var(--sl-color-accent) 66%, transparent); + box-shadow: 0 10px 18px color-mix(in srgb, var(--sl-color-accent) 24%, transparent); +} + +.copy-ip-chip:focus-visible { + outline: none; + border-color: color-mix(in srgb, var(--sl-color-accent) 72%, transparent); + box-shadow: + 0 0 0 1px color-mix(in srgb, var(--sl-color-accent) 30%, transparent), + 0 0 0 4px color-mix(in srgb, var(--sl-color-accent) 20%, transparent); +} + +.copy-ip-chip.is-copied { + border-color: color-mix(in srgb, #7ed49b 66%, transparent); + background: linear-gradient( + 110deg, + color-mix(in srgb, #63b888 76%, #223b2f), + color-mix(in srgb, #5ccd9f 66%, #26463b) + ); +} + +.copy-ip-chip.is-copied::after { + content: ''; +} + +.copy-ip-chip.is-copy-error { + border-color: color-mix(in srgb, #ef6f85 74%, transparent); + background: linear-gradient( + 110deg, + color-mix(in srgb, #d56b7f 78%, #3b242a), + color-mix(in srgb, #cf6f90 68%, #3f2532) + ); +} + +.copy-ip-chip.is-copy-error::after { + content: ''; +} + +.ip-main-note { + margin-top: 0.52rem; + border: 1px solid color-mix(in srgb, var(--sl-color-accent) 30%, transparent); + border-radius: 0.18rem; + padding: 0.58rem 0.72rem; + background: color-mix(in srgb, var(--sl-color-accent-low) 66%, transparent); + color: var(--wiki-text); + font-size: 0.94rem; +} + +.map-actions { margin-top: 1rem; + display: flex; + flex-wrap: wrap; + gap: 0.62rem; } .map-cta-button { display: inline-flex; align-items: center; justify-content: center; - min-height: 2.6rem; - padding: 0.64rem 1.15rem; + min-height: 2.44rem; + padding: 0.55rem 1rem; border-radius: 0.2rem; - border: 1px solid color-mix(in srgb, var(--sl-color-accent) 55%, transparent); + border: 1px solid color-mix(in srgb, var(--sl-color-accent) 48%, transparent); background: linear-gradient( - 140deg, - color-mix(in srgb, var(--wiki-purple-2) 72%, #1b2434), - color-mix(in srgb, var(--wiki-blue-2) 78%, #1b2434) + 110deg, + color-mix(in srgb, var(--wiki-blue-2) 76%, #233145), + color-mix(in srgb, var(--wiki-purple-2) 66%, #273850) ); - color: #f5f9ff; + color: #f8fbff; text-decoration: none; font-family: 'Sora', sans-serif; font-weight: 600; - letter-spacing: 0.01em; - box-shadow: - 0 8px 18px color-mix(in srgb, var(--sl-color-accent) 25%, transparent), - 0 0 0 1px color-mix(in srgb, var(--sl-color-accent) 18%, transparent); - transition: transform 170ms ease, border-color 170ms ease, box-shadow 170ms ease, filter 170ms ease; + font-size: 0.95rem; + letter-spacing: 0.008em; + box-shadow: 0 6px 14px color-mix(in srgb, var(--sl-color-accent) 18%, transparent); + transition: transform 170ms ease, border-color 170ms ease, box-shadow 170ms ease; } .map-cta-button:hover { color: #ffffff; text-decoration: none; transform: translateY(-1px); - border-color: color-mix(in srgb, var(--sl-color-accent) 70%, transparent); - box-shadow: - 0 12px 22px color-mix(in srgb, var(--sl-color-accent) 32%, transparent), - 0 0 0 1px color-mix(in srgb, var(--sl-color-accent) 24%, transparent), - 0 0 16px color-mix(in srgb, var(--sl-color-accent) 24%, transparent); - filter: saturate(1.06); + border-color: color-mix(in srgb, var(--sl-color-accent) 66%, transparent); + box-shadow: 0 10px 18px color-mix(in srgb, var(--sl-color-accent) 24%, transparent); +} + +.map-ghost-button { + display: inline-flex; + align-items: center; + justify-content: center; + min-height: 2.44rem; + padding: 0.55rem 1rem; + border-radius: 0.2rem; + border: 1px solid color-mix(in srgb, var(--sl-color-hairline) 92%, transparent); + background: color-mix(in srgb, var(--wiki-card) 94%, transparent); + color: var(--sl-color-gray-1); + text-decoration: none; + font-weight: 600; + font-size: 0.92rem; + transition: border-color 170ms ease, background 170ms ease, color 170ms ease, transform 170ms ease; +} + +.map-ghost-button:hover { + color: var(--sl-color-white); + text-decoration: none; + transform: translateY(-1px); + border-color: color-mix(in srgb, var(--sl-color-accent) 44%, transparent); + background: color-mix(in srgb, var(--sl-color-accent-low) 60%, transparent); } @media (min-width: 50rem) { @@ -746,6 +957,10 @@ starlight-theme-select .caret { } @media (max-width: 50rem) { + .ip-main-grid { + grid-template-columns: 1fr; + } + .wiki-header { gap: 0.5rem; } @@ -825,4 +1040,19 @@ starlight-theme-select .caret { border-radius: 0.16rem; padding: 0.92rem 0.84rem; } + + .map-actions { + flex-direction: column; + align-items: stretch; + } + + .map-cta-button, + .map-ghost-button { + width: 100%; + justify-content: center; + } + + .copy-ip-chip { + margin-inline-start: 0.2rem; + } }