Добавлены новые разделы документации: "Города и регистрация", "Крафты", "Приват и защита", "SkinRestore". Каждый раздел содержит информацию о статусе, что будет добавлено, и полезные советы для пользователей.

This commit is contained in:
2026-04-22 06:26:33 +03:00
parent c38d538f93
commit ecb0d8ebc2
28 changed files with 835 additions and 118 deletions

View File

@@ -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

25
.gitignore vendored
View File

@@ -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

View File

@@ -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/' }
]
}
]
: [])
]
})
]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

BIN
public/brand-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -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 && (
<a href={editUrl} class="wiki-edit-link sl-flex print:hidden" target="_blank" rel="noopener noreferrer">
<Icon name="pencil" size="1.05em" />
Редактировать страницу

View File

@@ -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 = [
<div class="wiki-header-shell">
<div class="header wiki-header">
<div class="title-wrapper sl-flex">
<SiteTitle />
<a class="wiki-brand" href="/" aria-label="PARABOX PROJECT">
<span class="wiki-brand__icon" aria-hidden="true">
<img src="/brand-logo.png" alt="" loading="eager" decoding="async" />
</span>
<span class="wiki-brand__copy">
<span class="wiki-brand__title">PARABOX</span>
<span class="wiki-brand__subtitle">PROJECT</span>
</span>
</a>
<nav class="wiki-top-nav" aria-label="Быстрая навигация">
{
topLinks.map((link) => (
@@ -89,10 +96,148 @@ const topLinks = [
</div>
<button class="wiki-back-to-top" type="button" aria-label="Прокрутить в начало" data-back-to-top>
<span aria-hidden="true">↑</span>
<svg aria-hidden="true" class="wiki-back-to-top__icon" viewBox="0 0 24 24" fill="none">
<path d="M12 18V6" />
<path d="m6.8 11.2 5.2-5.2 5.2 5.2" />
</svg>
</button>
<script>
const emojiPattern = (() => {
try {
return new RegExp('[\\p{Extended_Pictographic}\\u2600-\\u27BF]', 'gu');
} catch {
return /[\u2600-\u27BF]/g;
}
})();
const stripDecorativeSymbols = (value) =>
value
.replace(emojiPattern, '')
.replace(/\s{2,}/g, ' ')
.trim();
const normalizeLabelKey = (value) => stripDecorativeSymbols(value).toLowerCase();
const minimalIconByHeading = new Map([
['настройки', '/icons/minimal-solid/gear.png'],
['личные сообщения', '/icons/minimal-solid/message.png'],
['игнор', '/icons/minimal-solid/safe.png'],
['развлечения', '/icons/minimal-solid/game-controller.png'],
['rp и взаимодействие', '/icons/minimal-solid/community.png'],
['статус игрока', '/icons/minimal-solid/user-profile.png'],
['информация', '/icons/minimal-solid/exclamation.png'],
['символы', '/icons/minimal-solid/keyboard.png']
]);
const sanitizeNavLabels = () => {
const navLinks = document.querySelectorAll('.sidebar-content a, starlight-toc a, mobile-starlight-toc a');
navLinks.forEach((linkNode) => {
if (!(linkNode instanceof HTMLElement)) return;
const sourceText = linkNode.textContent;
if (!sourceText) return;
const normalizedText = stripDecorativeSymbols(sourceText);
if (!normalizedText || normalizedText === sourceText.trim()) return;
linkNode.textContent = normalizedText;
});
};
const sanitizeDocHeadings = () => {
const headings = document.querySelectorAll('.sl-markdown-content :is(h1, h2, h3, h4, h5, h6)');
headings.forEach((headingNode) => {
if (!(headingNode instanceof HTMLElement)) return;
const sourceText = headingNode.textContent;
if (!sourceText) return;
const normalizedText = stripDecorativeSymbols(sourceText);
if (!normalizedText || normalizedText === sourceText.trim()) return;
headingNode.textContent = normalizedText;
});
};
const decorateSectionIcons = () => {
const headings = document.querySelectorAll('.sl-markdown-content h3');
headings.forEach((headingNode) => {
if (!(headingNode instanceof HTMLElement)) return;
const sourceText = headingNode.textContent;
if (!sourceText) return;
const normalizedText = normalizeLabelKey(sourceText);
const iconPath = minimalIconByHeading.get(normalizedText);
if (!iconPath) return;
if (headingNode.querySelector('.minimal-heading-icon')) return;
const iconNode = document.createElement('span');
iconNode.className = 'minimal-heading-icon';
iconNode.setAttribute('aria-hidden', 'true');
iconNode.style.setProperty('--icon-url', `url('${iconPath}')`);
headingNode.prepend(iconNode);
});
};
const copyTextToClipboard = async (value) => {
if (navigator.clipboard?.writeText) {
await navigator.clipboard.writeText(value);
return;
}
const helperInput = document.createElement('textarea');
helperInput.value = value;
helperInput.setAttribute('readonly', '');
helperInput.style.position = 'fixed';
helperInput.style.opacity = '0';
document.body.appendChild(helperInput);
helperInput.select();
document.execCommand('copy');
helperInput.remove();
};
const bindCopyIpChips = () => {
const copyButtons = document.querySelectorAll('[data-copy-ip]');
copyButtons.forEach((buttonNode) => {
if (!(buttonNode instanceof HTMLButtonElement)) return;
if (buttonNode.dataset.copyBound === 'true') return;
buttonNode.dataset.copyBound = 'true';
buttonNode.classList.add('is-copy-ready');
if (!buttonNode.title) {
buttonNode.title = 'Нажмите, чтобы скопировать';
}
buttonNode.addEventListener('click', async () => {
const value = buttonNode.dataset.copyIp?.trim();
if (!value) return;
try {
await copyTextToClipboard(value);
buttonNode.classList.add('is-copied');
buttonNode.setAttribute('aria-label', `Скопировано: ${value}`);
window.setTimeout(() => {
buttonNode.classList.remove('is-copied');
buttonNode.setAttribute('aria-label', `Скопировать: ${value}`);
}, 1200);
} catch {
buttonNode.classList.add('is-copy-error');
buttonNode.setAttribute('aria-label', `Не удалось скопировать: ${value}`);
window.setTimeout(() => {
buttonNode.classList.remove('is-copy-error');
buttonNode.setAttribute('aria-label', `Скопировать: ${value}`);
}, 1400);
}
});
});
};
const enhanceSidebarGroupLinks = () => {
const targets = [{ label: 'Алкоголь', href: '/alcohol/' }];
const labelNodes = document.querySelectorAll('.sidebar-content details > summary .group-label .large');
@@ -164,6 +309,10 @@ const topLinks = [
});
enhanceSidebarGroupLinks();
sanitizeNavLabels();
sanitizeDocHeadings();
decorateSectionIcons();
bindCopyIpChips();
setReadProgress();
window.addEventListener('scroll', setReadProgress, { passive: true });
window.addEventListener('resize', setReadProgress);
@@ -177,6 +326,10 @@ const topLinks = [
document.addEventListener('astro:page-load', () => {
enhanceSidebarGroupLinks();
sanitizeNavLabels();
sanitizeDocHeadings();
decorateSectionIcons();
bindCopyIpChips();
setReadProgress();
});
</script>
@@ -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;
}
}
}

View File

@@ -50,11 +50,11 @@ description: "Полное руководство по ферментации,
Всего существует 10 уровней качества:
- `` — уровень 1
- `` — уровень 2
- `★☆` — уровень 3
- `I` — уровень 1
- `II` — уровень 2
- `III` — уровень 3
- `...`
- `★★★★★ (10)` — максимальное качество
- `X` — максимальное качество (уровень 10)
:::note
Чем точнее соблюдён рецепт, тем выше качество.

View File

@@ -3,15 +3,52 @@ title: "Все IP"
description: "Адреса и порты сервера PARABOX для Java и Bedrock."
---
## 🎮 Основное
## Основные адреса
### Java `1.21.11`
<div class="ip-main-grid">
<article class="ip-main-card">
<h3>Java 1.21.11</h3>
<ul>
<li>
Основной:
<button class="copy-ip-chip" type="button" data-copy-ip="mc.rpcm.su" aria-label="Скопировать: mc.rpcm.su">
<code>mc.rpcm.su</code>
</button>
</li>
<li>
AnyCast-прокси:
<button class="copy-ip-chip" type="button" data-copy-ip="mine.rpcm.su" aria-label="Скопировать: mine.rpcm.su">
<code>mine.rpcm.su</code>
</button>
</li>
</ul>
</article>
- Основной: `mc.rpcm.su`
- AnyCast-прокси: `mine.rpcm.su`
<article class="ip-main-card">
<h3>Bedrock 26.2</h3>
<ul>
<li>
Основной:
<button class="copy-ip-chip" type="button" data-copy-ip="mc.rpcm.su" aria-label="Скопировать: mc.rpcm.su">
<code>mc.rpcm.su</code>
</button>
</li>
<li>
Запасной IP:
<button class="copy-ip-chip" type="button" data-copy-ip="213.152.43.52" aria-label="Скопировать: 213.152.43.52">
<code>213.152.43.52</code>
</button>
</li>
<li>
Порт:
<button class="copy-ip-chip" type="button" data-copy-ip="25875" aria-label="Скопировать: 25875">
<code>25875</code>
</button>
</li>
</ul>
</article>
</div>
### Bedrock `26.2`
- Основной: `mc.rpcm.su`
- Запаска: `213.152.43.52`
- Порт: `25875`
<div class="ip-main-note">
Используйте запасной адрес, если основной IP временно недоступен.
</div>

View File

@@ -0,0 +1,47 @@
---
title: "Города и регистрация"
description: "Как пройти регистрацию, вступить в город или запустить собственный проектный город."
---
## Как попасть на сервер
1. Перейдите в бота заявок: <a href="https://t.me/RPCM_MINE_BOT" target="_blank" rel="noopener noreferrer"><strong>@RPCM_MINE_BOT</strong></a>.
2. Заполните анкету и дождитесь подтверждения.
3. Подключитесь по адресу `mc.rpcm.su`.
4. Пройдите регистрацию в игре.
## Как выбрать город
После входа у вас есть два рабочих сценария:
- вступить в уже существующий город;
- создать собственный город проекта.
Если вступаете в существующий город, проверьте его правила и требования к жителям. Если создаете новый, подготовьте описание, цели и формат набора.
## Как запустить свой город
### Минимальный шаблон объявления
```text
Название города:
Координаты:
Мэр / управляющий орган:
Описание:
Набор жителей: да / нет
Правила города:
```
### Что важно указать сразу
- чем город занимается и какой стиль игры поддерживает;
- кого вы ищете в первую очередь;
- есть ли внутренние ограничения и роли;
- как с вами связаться.
## Где смотреть полезную информацию
- IP и резервные адреса: <a href="/all-ip/">Все IP</a>
- Базовые правила: <a href="/rules/">Правила</a>
- Частые вопросы: <a href="/faq/">FAQ</a>
- Раздел по городам: <a href="/cities/">Города</a>

View File

@@ -3,26 +3,26 @@ title: "Города"
description: "Раздел для представления городов и проектов игроков."
---
## 🏠 Города и проекты игроков
## Города и проекты игроков
На **PARABOX** вы можете создать свой город у нас на проекте, собрать жителей и развивать свою территорию.
На PARABOX можно создать свой город, собрать жителей и развивать территорию вместе с другими игроками.
<div class="lore-grid">
<article class="lore-card city-feature-card">
<p><strong class="city-highlight">Представить свой город.</strong> Расскажите о своём проекте и покажите, чем он уникален.</p>
<p><strong class="city-highlight">Представить свой город.</strong> Расскажите о проекте и его отличительных чертах.</p>
</article>
<article class="lore-card city-feature-card">
<p><strong class="city-highlight">Искать жителей.</strong> Находите игроков, которые хотят вступить в ваш город.</p>
<p><strong class="city-highlight">Найти жителей.</strong> Публикуйте набор и указывайте роли, которые сейчас нужны городу.</p>
</article>
<article class="lore-card city-feature-card">
<p><strong class="city-highlight">Показывать постройки.</strong> Делитесь скриншотами и прогрессом развития территории.</p>
<p><strong class="city-highlight">Показывать развитие.</strong> Делитесь скриншотами, координатами и текущими задачами.</p>
</article>
<article class="lore-card city-feature-card">
<p><strong class="city-highlight">Организовывать совместные проекты.</strong> Договаривайтесь о союзах, ивентах и общих инициативах.</p>
<p><strong class="city-highlight">Организовывать союзы.</strong> Договаривайтесь о торговле, ивентах и совместных проектах.</p>
</article>
</div>
## 📌 Если создаёте пост о городе
## Шаблон публикации города
```text
Название города:
@@ -33,8 +33,8 @@ description: "Раздел для представления городов и
Правила города:
```
Это поможет другим игрокам быстрее к вам присоединиться.
Подробный процесс входа на сервер и запуска города описан в статье <a href="/cities-registration/">«Города и регистрация»</a>.
:::tip
Чем понятнее и полнее пост, тем быстрее игроки смогут найти и выбрать ваш город.
Чем понятнее и полнее описание города, тем быстрее к вам присоединятся игроки.
:::

View File

@@ -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` - открыть меню символов.

View File

@@ -0,0 +1,18 @@
---
title: "Крафты"
description: "Раздел по кастомным крафтам сервера PARABOX."
---
## Статус раздела
Раздел в подготовке. Здесь будет полная база кастомных крафтов.
## Что появится
- рецепты основных предметов сервера;
- ограничения по доступу к крафтам;
- примеры прогрессии по этапам игры.
:::note
Если нужен конкретный рецепт раньше, уточните его у администрации или в профильном канале.
:::

View File

@@ -3,16 +3,19 @@ title: "Общее"
description: "Общая информация и веб-карта сервера PARABOX."
---
## Общее
## Веб-карта сервера
На сервере доступна интерактивная веб-карта, где можно смотреть мир в реальном времени:
Интерактивная веб-карта показывает мир в реальном времени и помогает быстро ориентироваться:
- города и постройки игроков;
- дороги и основные локации;
- общий масштаб мира и ориентиры для навигации.
- расположение городов и построек игроков;
- дороги, биомы и основные локации;
- общий масштаб карты и направления движения.
<div class="map-cta-wrap">
<div class="map-actions">
<a class="map-cta-button" href="https://map.rpcm.su/#world:0:0:0:1500:0:0:0:0:perspective" target="_blank" rel="noopener noreferrer">
Открыть веб-карту сервера
Открыть веб-карту
</a>
<a class="map-ghost-button" href="/cities/">
Как использовать карту для городов
</a>
</div>

View File

@@ -3,10 +3,10 @@ title: "Начало игры"
description: "Как подать заявку на сервер PARABOX и что указать в анкете."
---
## ✏️ Захотелось к нам?
## Как вступить
Чтобы попасть на сервер, необходимо отправить запрос через нашего бота.
После одобрения вы получите доступ и окунётесь в удивительные миры **PARABOX**.
Чтобы попасть на сервер, отправьте заявку через бота.
После одобрения вы получите доступ к миру PARABOX.
<div class="see-also">
<p>Подача заявки через бота</p>
@@ -15,8 +15,15 @@ description: "Как подать заявку на сервер PARABOX и чт
## Форма анкеты
Чтобы вступить к нам, просим заполнить небольшую анкету в боте:
Чтобы вступить, заполните короткую анкету в боте:
1. Как к вам обращаться? Укажите ваш псевдоним или имя.
2. Ваш никнейм, который будет привязан к серверу.
3. От какого проекта вы? Если не от проекта, укажите, от кого вы узнали о сервере.
1. Как к вам обращаться (имя или псевдоним).
2. Ваш никнейм для привязки к серверу.
3. От какого проекта вы пришли, или откуда узнали о сервере.
## После одобрения
1. Подключитесь по адресу `mc.rpcm.su`.
2. Пройдите регистрацию в игре.
3. Выберите город для вступления или создайте свой.
4. Ознакомьтесь с правилами и базовыми механиками.

View File

@@ -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. Ознакомьтесь с правилами и базовыми механиками.
Подробный разбор процесса вступления и запуска города находится в статье <a href="/cities-registration/">«Города и регистрация»</a>.
## Основные особенности
- Система городов с возможностью набора жителей.
- Экономика и торговля между игроками.
- Общий мир для всех проектов ЛРПКМ.
- Общий мир для проектов ЛРПКМ и соло-игроков.
- Ивенты и активности.
- Классическое выживание с социальным взаимодействием.
- И просто весёлое времяпровождение.
:::tip
Project PARABOX объединяет проекты и игроков в одном живом мире, где каждый может выбрать свой формат игры: развитие города, торговлю, выживание или участие в событиях.
Чем быстрее вы подключитесь по IP и выберете точку старта, тем проще будет влиться в текущие города и события.
:::
## ❓ Основные особенности
- Система городов.
- Экономика / торговля.
- Ивенты и активности.
## 🚀 Как начать играть
## Как начать играть
1. Подайте заявку.
2. Зайдите на сервер по IP.
2. Подключитесь к серверу (адреса указаны в разделе «Все IP»).
3. Прочитайте правила в соответствующем разделе.
4. Зарегистрируйтесь или войдите в систему.
4. Пройдите регистрацию на сервере.
5. Найдите город или создайте свой.
## Добро пожаловать и приятной игры!
## Добро пожаловать и приятной игры

View File

@@ -0,0 +1,18 @@
---
title: "Приват и защита"
description: "Базовые принципы защиты территорий и имущества игроков."
---
## Статус раздела
Раздел в подготовке. Здесь будет структурированная инструкция по привату.
## Что появится
- команды для создания и управления приватами;
- добавление участников и права доступа;
- ограничения и практики безопасного хранения ресурсов.
:::caution
Пока раздел не заполнен, согласовывайте спорные ситуации по территории через администрацию.
:::

View File

@@ -0,0 +1,18 @@
---
title: "SkinRestore"
description: "Настройка и восстановление скина на сервере PARABOX."
---
## Статус раздела
Раздел в подготовке. Здесь будет инструкция по установке и обновлению скинов.
## Что появится
- базовые команды SkinRestore;
- рекомендации для лицензии и оффлайн-режима;
- список частых проблем и решений.
:::tip
До выхода полной инструкции используйте стандартную команду смены скина и проверяйте корректность ника.
:::

View File

@@ -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;
}
}