Compare commits
5 Commits
c38d538f93
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 7deb2a7d95 | |||
| 8cee39ad1c | |||
| f622c09fd4 | |||
| 9227f2de30 | |||
| ecb0d8ebc2 |
@@ -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
@@ -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
|
||||
|
||||
93
Makefile
Normal file
@@ -0,0 +1,93 @@
|
||||
# ================================
|
||||
# Настройки
|
||||
# ================================
|
||||
COMPOSE=docker compose
|
||||
SERVICE=primoguard
|
||||
|
||||
# Список команд
|
||||
.PHONY: help install dev build preview up down restart logs pull update ps shell clean prune tunnel
|
||||
|
||||
# ================================
|
||||
# Помощь
|
||||
# ================================
|
||||
help:
|
||||
@echo "Доступные команды:"
|
||||
@echo " make install - установить npm зависимости"
|
||||
@echo " make dev - локальный запуск Astro для разработки"
|
||||
@echo " make build - продакшн сборка Astro"
|
||||
@echo " make preview - предпросмотр продакшн сборки"
|
||||
@echo " make up - поднять Docker контейнер"
|
||||
@echo " make down - остановить Docker контейнер"
|
||||
@echo " make restart - перезапустить Docker контейнер"
|
||||
@echo " make logs - смотреть логи Docker"
|
||||
@echo " make pull - обновить проект через git pull"
|
||||
@echo " make update - обновить проект и перезапустить Docker"
|
||||
@echo " make ps - список контейнеров"
|
||||
@echo " make shell - зайти внутрь контейнера"
|
||||
@echo " make clean - остановить контейнер"
|
||||
@echo " make prune - очистить Docker мусор"
|
||||
@echo " make tunnel - запустить Cloudflare Tunnel"
|
||||
|
||||
# ================================
|
||||
# Локальная разработка
|
||||
# ================================
|
||||
install:
|
||||
npm install
|
||||
|
||||
dev:
|
||||
npm run dev
|
||||
|
||||
build:
|
||||
npm run build
|
||||
|
||||
preview:
|
||||
npm run preview
|
||||
|
||||
# ================================
|
||||
# Docker
|
||||
# ================================
|
||||
up:
|
||||
$(COMPOSE) up -d --build
|
||||
|
||||
down:
|
||||
$(COMPOSE) down
|
||||
|
||||
restart:
|
||||
$(COMPOSE) down
|
||||
$(COMPOSE) up -d --build
|
||||
|
||||
logs:
|
||||
$(COMPOSE) logs -f
|
||||
|
||||
ps:
|
||||
$(COMPOSE) ps
|
||||
|
||||
shell:
|
||||
docker exec -it $(SERVICE) sh
|
||||
|
||||
# ================================
|
||||
# Git + Docker
|
||||
# ================================
|
||||
pull:
|
||||
git pull
|
||||
|
||||
update:
|
||||
$(COMPOSE) down
|
||||
git pull
|
||||
$(COMPOSE) up -d --build
|
||||
$(COMPOSE) logs -f
|
||||
|
||||
# ================================
|
||||
# Очистка
|
||||
# ================================
|
||||
clean:
|
||||
$(COMPOSE) down
|
||||
|
||||
prune:
|
||||
docker system prune -f
|
||||
|
||||
# ================================
|
||||
# Публичный доступ
|
||||
# ================================
|
||||
tunnel:
|
||||
cloudflared tunnel --url http://127.0.0.1:4321 --protocol http2 --edge-ip-version 4
|
||||
@@ -1,6 +1,7 @@
|
||||
import { defineConfig } from 'astro/config';
|
||||
import starlight from '@astrojs/starlight';
|
||||
|
||||
|
||||
export default defineConfig({
|
||||
site: 'https://wiki.example.com',
|
||||
vite: {
|
||||
@@ -25,6 +26,7 @@ export default defineConfig({
|
||||
}
|
||||
},
|
||||
tagline: 'Нереалистичный архив игрового мира',
|
||||
favicon: '/photo_2026-03-14_11-18-15.jpg',
|
||||
customCss: ['/src/styles/wiki-egames.css'],
|
||||
lastUpdated: true,
|
||||
disable404Route: true,
|
||||
@@ -45,22 +47,24 @@ export default defineConfig({
|
||||
label: 'О сервере',
|
||||
items: [
|
||||
{ label: 'Главная', link: '/' },
|
||||
{ label: 'Сюжет', link: '/story/' },
|
||||
{ label: 'Начало игры', link: '/getting-started/' }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Введение',
|
||||
items: [
|
||||
{ label: 'Часто задаваемые вопросы', link: '/faq/' },
|
||||
{ label: 'Правила', link: '/rules/' }
|
||||
{ label: 'О проекте', link: '/about-server/' },
|
||||
{ label: 'Правила', link: '/rules/' },
|
||||
{ label: 'Часто задаваемые вопросы', link: '/faq/' }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Игровые системы',
|
||||
items: [
|
||||
{ label: 'Общее', link: '/general/' },
|
||||
{ label: 'Команды', link: '/commands/' },
|
||||
{ label: 'Города', link: '/cities/' },
|
||||
{ label: 'Крафты', link: '/crafting/' },
|
||||
{
|
||||
label: 'Алкоголь',
|
||||
items: [
|
||||
@@ -72,18 +76,11 @@ export default defineConfig({
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Техническое',
|
||||
label: 'Тех. Информация',
|
||||
items: [
|
||||
{ label: 'Все IP', link: '/all-ip/' },
|
||||
{ label: 'Контакты и ссылки', link: '/contacts/' }
|
||||
]
|
||||
},
|
||||
{
|
||||
label: 'Для редакторов',
|
||||
items: [
|
||||
{ label: 'Как редактировать wiki', link: '/editing/' },
|
||||
{ label: 'Шаблон новой страницы', link: '/templates/new-page-template/' }
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
@@ -1,11 +1,15 @@
|
||||
name: parabox-wiki
|
||||
|
||||
services:
|
||||
wiki:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
container_name: parabox-wiki
|
||||
ports:
|
||||
- "4321:80"
|
||||
#ports:
|
||||
#- "4321:80"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
|
||||
BIN
public/ChatGPT Image 22 апр. 2026 г., 05_34_46.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/brand-logo.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
public/crafts/anvil-variant-base.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/crafts/anvil-variant-l.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
public/crafts/bell.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/crafts/bundle.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
public/crafts/cartography-table.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/crafts/clock-to-gold-ingot-smelting.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/crafts/compass-to-iron-ingot-smelting.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/crafts/diamond-ore-variant-k.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/crafts/diamond-ore-variant-s.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/crafts/dispenser.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/crafts/dragons-breath.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/crafts/enchanted-book.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
public/crafts/fletching-table.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/crafts/glow-ink-sac.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
public/crafts/invisible-glow-item-frame.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/crafts/invisible-item-frame.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/crafts/invisible-light.png
Normal file
|
After Width: | Height: | Size: 8.8 KiB |
BIN
public/crafts/jukebox.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/crafts/knowledge-book.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/crafts/loom.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
BIN
public/crafts/name-tag.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/crafts/note-block.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
public/crafts/phantom-membrane.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
public/crafts/recovery-compass-to-compass-smelting.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
public/crafts/red-glass-smelting.png
Normal file
|
After Width: | Height: | Size: 9.6 KiB |
BIN
public/crafts/stripped-log-stonecutter.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
public/crafts/sturdy-slab.png
Normal file
|
After Width: | Height: | Size: 8.7 KiB |
BIN
public/icons/minimal-solid/community.png
Normal file
|
After Width: | Height: | Size: 3.1 KiB |
BIN
public/icons/minimal-solid/exclamation.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/icons/minimal-solid/game-controller.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
public/icons/minimal-solid/gear.png
Normal file
|
After Width: | Height: | Size: 2.9 KiB |
BIN
public/icons/minimal-solid/keyboard.png
Normal file
|
After Width: | Height: | Size: 2.3 KiB |
BIN
public/icons/minimal-solid/message.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
public/icons/minimal-solid/safe.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
public/icons/minimal-solid/user-profile.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
@@ -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" />
|
||||
Редактировать страницу
|
||||
|
||||
@@ -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 =
|
||||
@@ -11,8 +10,8 @@ const shouldRenderSearch =
|
||||
|
||||
const topLinks = [
|
||||
{ label: 'Старт', href: '/getting-started/' },
|
||||
{ label: 'Гайды', href: '/guides/' },
|
||||
{ label: 'Механики', href: '/mechanics/' },
|
||||
{ label: 'Команды', href: '/commands/' },
|
||||
{ label: 'Города', href: '/cities/' },
|
||||
{ label: 'FAQ', href: '/faq/' },
|
||||
{ label: 'Правила', href: '/rules/' }
|
||||
];
|
||||
@@ -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,12 +96,339 @@ 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 trimDestination = (value, maxLength = 42) => {
|
||||
if (value.length <= maxLength) return value;
|
||||
return `${value.slice(0, Math.max(0, maxLength - 1))}…`;
|
||||
};
|
||||
|
||||
const decodePath = (value) => {
|
||||
try {
|
||||
return decodeURIComponent(value);
|
||||
} catch {
|
||||
return value;
|
||||
}
|
||||
};
|
||||
|
||||
const annotateLinkDestinations = () => {
|
||||
const links = document.querySelectorAll('a[href]');
|
||||
|
||||
links.forEach((linkNode) => {
|
||||
if (!(linkNode instanceof HTMLAnchorElement)) return;
|
||||
if (linkNode.dataset.linkAnnotated === 'true') return;
|
||||
|
||||
const rawHref = linkNode.getAttribute('href')?.trim();
|
||||
if (!rawHref || rawHref.toLowerCase().startsWith('javascript:')) return;
|
||||
|
||||
let parsedUrl;
|
||||
try {
|
||||
parsedUrl = new URL(rawHref, window.location.href);
|
||||
} catch {
|
||||
return;
|
||||
}
|
||||
|
||||
const isHashOnly = rawHref.startsWith('#');
|
||||
const isHttp = parsedUrl.protocol === 'http:' || parsedUrl.protocol === 'https:';
|
||||
const isMail = parsedUrl.protocol === 'mailto:';
|
||||
const isTel = parsedUrl.protocol === 'tel:';
|
||||
const isExternal = isHttp && parsedUrl.origin !== window.location.origin;
|
||||
const isSamePageAnchor =
|
||||
!isExternal && !!parsedUrl.hash && parsedUrl.pathname === window.location.pathname;
|
||||
|
||||
const isContentLink = linkNode.closest('.sl-markdown-content') instanceof HTMLElement;
|
||||
const shouldDecorate =
|
||||
isContentLink &&
|
||||
!isHashOnly &&
|
||||
!linkNode.classList.contains('sl-anchor-link') &&
|
||||
!linkNode.classList.contains('map-cta-button') &&
|
||||
!linkNode.classList.contains('map-ghost-button') &&
|
||||
!linkNode.classList.contains('sl-link-button');
|
||||
|
||||
if (shouldDecorate) {
|
||||
let kind = 'internal';
|
||||
if (isExternal) kind = 'external';
|
||||
else if (isMail) kind = 'mail';
|
||||
else if (isTel) kind = 'tel';
|
||||
else if (isSamePageAnchor) kind = 'anchor';
|
||||
linkNode.dataset.linkKind = kind;
|
||||
|
||||
let destination = '';
|
||||
if (isExternal) destination = parsedUrl.hostname.replace(/^www\./, '');
|
||||
else if (isMail) destination = rawHref.replace(/^mailto:/i, '');
|
||||
else if (isTel) destination = rawHref.replace(/^tel:/i, '');
|
||||
else destination = `${decodePath(parsedUrl.pathname)}${parsedUrl.hash || ''}`;
|
||||
if (destination) {
|
||||
linkNode.dataset.linkDestination = trimDestination(destination);
|
||||
}
|
||||
}
|
||||
|
||||
if (isExternal) {
|
||||
const relValues = new Set((linkNode.rel || '').split(/\s+/).filter(Boolean));
|
||||
relValues.add('noopener');
|
||||
relValues.add('noreferrer');
|
||||
linkNode.rel = Array.from(relValues).join(' ');
|
||||
if (!linkNode.target) {
|
||||
linkNode.target = '_blank';
|
||||
}
|
||||
}
|
||||
|
||||
if (!linkNode.title) {
|
||||
if (isHashOnly || isSamePageAnchor) {
|
||||
linkNode.title = `Переход к разделу: ${parsedUrl.hash || rawHref}`;
|
||||
} else if (isExternal) {
|
||||
linkNode.title = `Внешняя ссылка: ${parsedUrl.hostname.replace(/^www\./, '')}`;
|
||||
} else if (isMail) {
|
||||
linkNode.title = `Написать: ${rawHref.replace(/^mailto:/i, '')}`;
|
||||
} else if (isTel) {
|
||||
linkNode.title = `Позвонить: ${rawHref.replace(/^tel:/i, '')}`;
|
||||
} else {
|
||||
linkNode.title = `Перейти: ${decodePath(parsedUrl.pathname)}${parsedUrl.hash || ''}`;
|
||||
}
|
||||
}
|
||||
|
||||
linkNode.dataset.linkAnnotated = 'true';
|
||||
});
|
||||
};
|
||||
|
||||
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 normalizeCraftSearch = (value) =>
|
||||
stripDecorativeSymbols(value)
|
||||
.toLowerCase()
|
||||
.replace(/ё/g, 'е')
|
||||
.replace(/\s+/g, ' ')
|
||||
.trim();
|
||||
|
||||
const bindCraftCatalogFilters = () => {
|
||||
const catalogNodes = document.querySelectorAll('[data-craft-catalog]');
|
||||
|
||||
catalogNodes.forEach((catalogNode) => {
|
||||
if (!(catalogNode instanceof HTMLElement)) return;
|
||||
if (catalogNode.dataset.craftBound === 'true') return;
|
||||
catalogNode.dataset.craftBound = 'true';
|
||||
|
||||
const searchInput = catalogNode.querySelector('[data-craft-search]');
|
||||
const filterButtons = Array.from(catalogNode.querySelectorAll('[data-craft-filter]')).filter(
|
||||
(node) => node instanceof HTMLButtonElement
|
||||
);
|
||||
const groupNodes = Array.from(catalogNode.querySelectorAll('[data-craft-group]')).filter(
|
||||
(node) => node instanceof HTMLElement
|
||||
);
|
||||
const emptyState = catalogNode.querySelector('[data-craft-empty]');
|
||||
|
||||
let activeFilter = 'all';
|
||||
const activeButton = filterButtons.find(
|
||||
(buttonNode) =>
|
||||
buttonNode.classList.contains('is-active') ||
|
||||
buttonNode.getAttribute('aria-pressed') === 'true'
|
||||
);
|
||||
|
||||
if (activeButton?.dataset.craftFilter) {
|
||||
activeFilter = activeButton.dataset.craftFilter;
|
||||
}
|
||||
|
||||
const applyFilters = () => {
|
||||
const searchQuery =
|
||||
searchInput instanceof HTMLInputElement ? normalizeCraftSearch(searchInput.value) : '';
|
||||
|
||||
filterButtons.forEach((buttonNode) => {
|
||||
const isActive = (buttonNode.dataset.craftFilter || 'all') === activeFilter;
|
||||
buttonNode.classList.toggle('is-active', isActive);
|
||||
buttonNode.setAttribute('aria-pressed', String(isActive));
|
||||
});
|
||||
|
||||
let visibleCount = 0;
|
||||
|
||||
groupNodes.forEach((groupNode) => {
|
||||
const defaultCategory = groupNode.dataset.craftCategory || '';
|
||||
const itemNodes = Array.from(groupNode.querySelectorAll('[data-craft-item]')).filter(
|
||||
(node) => node instanceof HTMLElement
|
||||
);
|
||||
|
||||
let groupVisibleCount = 0;
|
||||
|
||||
itemNodes.forEach((itemNode) => {
|
||||
const itemCategory = itemNode.dataset.craftCategory || defaultCategory;
|
||||
const itemName =
|
||||
itemNode.dataset.craftName || itemNode.querySelector('h3')?.textContent || '';
|
||||
const normalizedName = normalizeCraftSearch(itemName);
|
||||
const matchesCategory = activeFilter === 'all' || itemCategory === activeFilter;
|
||||
const matchesSearch = !searchQuery || normalizedName.includes(searchQuery);
|
||||
const isVisible = matchesCategory && matchesSearch;
|
||||
|
||||
itemNode.hidden = !isVisible;
|
||||
if (isVisible) groupVisibleCount += 1;
|
||||
});
|
||||
|
||||
groupNode.hidden = groupVisibleCount === 0;
|
||||
visibleCount += groupVisibleCount;
|
||||
});
|
||||
|
||||
if (emptyState instanceof HTMLElement) {
|
||||
emptyState.hidden = visibleCount > 0;
|
||||
}
|
||||
};
|
||||
|
||||
filterButtons.forEach((buttonNode) => {
|
||||
buttonNode.addEventListener('click', () => {
|
||||
const nextFilter = buttonNode.dataset.craftFilter || 'all';
|
||||
if (nextFilter === activeFilter) return;
|
||||
activeFilter = nextFilter;
|
||||
applyFilters();
|
||||
});
|
||||
});
|
||||
|
||||
if (searchInput instanceof HTMLInputElement) {
|
||||
searchInput.addEventListener('input', applyFilters);
|
||||
searchInput.addEventListener('search', applyFilters);
|
||||
}
|
||||
|
||||
applyFilters();
|
||||
});
|
||||
};
|
||||
|
||||
const enhanceSidebarGroupLinks = () => {
|
||||
const targets = [{ label: 'Алкоголь', href: '/alcohol/' }];
|
||||
const targets = [];
|
||||
if (targets.length === 0) return;
|
||||
const labelNodes = document.querySelectorAll('.sidebar-content details > summary .group-label .large');
|
||||
|
||||
labelNodes.forEach((labelNode) => {
|
||||
@@ -164,6 +498,12 @@ const topLinks = [
|
||||
});
|
||||
|
||||
enhanceSidebarGroupLinks();
|
||||
sanitizeNavLabels();
|
||||
sanitizeDocHeadings();
|
||||
decorateSectionIcons();
|
||||
annotateLinkDestinations();
|
||||
bindCopyIpChips();
|
||||
bindCraftCatalogFilters();
|
||||
setReadProgress();
|
||||
window.addEventListener('scroll', setReadProgress, { passive: true });
|
||||
window.addEventListener('resize', setReadProgress);
|
||||
@@ -177,6 +517,12 @@ const topLinks = [
|
||||
|
||||
document.addEventListener('astro:page-load', () => {
|
||||
enhanceSidebarGroupLinks();
|
||||
sanitizeNavLabels();
|
||||
sanitizeDocHeadings();
|
||||
decorateSectionIcons();
|
||||
annotateLinkDestinations();
|
||||
bindCopyIpChips();
|
||||
bindCraftCatalogFilters();
|
||||
setReadProgress();
|
||||
});
|
||||
</script>
|
||||
@@ -203,10 +549,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 +733,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 +826,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ description: "Концепция мира, формат сервера и осн
|
||||
|
||||
## Концепция
|
||||
|
||||
Сервер построен вокруг идеи «архива реальностей»: каждая локация выглядит как отдельный фрагмент мира со своей физикой и историей.
|
||||
Сервер построен как единый живой мир: у разных локаций свой стиль, история и атмосфера.
|
||||
|
||||
### Формат
|
||||
|
||||
@@ -13,14 +13,6 @@ description: "Концепция мира, формат сервера и осн
|
||||
- Выживание с RPG-элементами
|
||||
- Упор на исследование и кооператив
|
||||
|
||||
## Лор в двух словах
|
||||
|
||||
После Раскола Неба мир разделился на слои. Игроки находят обломки карт, восстанавливают порталы и открывают утраченные ремёсла.
|
||||
|
||||
:::caution
|
||||
Некоторые сюжетные зоны открываются только после выполнения цепочки квестов.
|
||||
:::
|
||||
|
||||
## Техническая база
|
||||
|
||||
| Параметр | Значение |
|
||||
@@ -31,7 +23,7 @@ description: "Концепция мира, формат сервера и осн
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/mechanics/">Механики</a> · <a href="/team/">Команда проекта</a>
|
||||
<a href="/general/">Общее</a> · <a href="/faq/">FAQ</a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -50,11 +50,11 @@ description: "Полное руководство по ферментации,
|
||||
|
||||
Всего существует 10 уровней качества:
|
||||
|
||||
- `☆` — уровень 1
|
||||
- `★` — уровень 2
|
||||
- `★☆` — уровень 3
|
||||
- `I` — уровень 1
|
||||
- `II` — уровень 2
|
||||
- `III` — уровень 3
|
||||
- `...`
|
||||
- `★★★★★ (10)` — максимальное качество
|
||||
- `X` — максимальное качество (уровень 10)
|
||||
|
||||
:::note
|
||||
Чем точнее соблюдён рецепт, тем выше качество.
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
---
|
||||
title: "Алкоголь"
|
||||
description: "Переход к подразделам алкогольной системы."
|
||||
---
|
||||
|
||||
## Подразделы
|
||||
|
||||
Выберите нужный раздел:
|
||||
|
||||
<div class="lore-grid alcohol-nav-grid">
|
||||
<a class="lore-card alcohol-nav-card" href="/alcohol-brewing/">
|
||||
<h3>Как варить</h3>
|
||||
<p>Ферментация, бочки, качество напитков, алкогольность и эффекты.</p>
|
||||
</a>
|
||||
<a class="lore-card alcohol-nav-card" href="/alcohol-recipes/">
|
||||
<h3>Рецепты напитков</h3>
|
||||
<p>Полный список рецептов, ингредиентов и параметров приготовления.</p>
|
||||
</a>
|
||||
</div>
|
||||
@@ -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.parabox.su" aria-label="Скопировать: mc.parabox.su">
|
||||
<code>mc.parabox.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.parabox.su" aria-label="Скопировать: mc.parabox.su">
|
||||
<code>mc.parabox.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>
|
||||
|
||||
@@ -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="/getting-started/">«Начало игры»</a>.
|
||||
|
||||
:::tip
|
||||
Чем понятнее и полнее пост, тем быстрее игроки смогут найти и выбрать ваш город.
|
||||
Чем понятнее и полнее описание города, тем быстрее к вам присоединятся игроки.
|
||||
:::
|
||||
|
||||
@@ -1,14 +1,82 @@
|
||||
---
|
||||
---
|
||||
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` - бросить кубик.
|
||||
|
||||
### Кастомные пластинки
|
||||
|
||||
- `/disc burn <url> [name]` - создать кастомную пластинку из аудио по URL.
|
||||
- `/disc erase` - вернуть кастомную пластинку к обычному виду.
|
||||
- `/disc search <query>` - найти треки на YouTube.
|
||||
|
||||
:::note
|
||||
Для `/disc burn` нужно держать музыкальную пластинку в руке.
|
||||
:::
|
||||
|
||||
### RP и взаимодействие
|
||||
|
||||
- `/do <действие>` - RP-описание действия от третьего лица.
|
||||
- `/anon <сообщение>` - отправить анонимное сообщение.
|
||||
- `/helper` - попросить помощь.
|
||||
|
||||
### Статус игрока
|
||||
|
||||
- `/afk` - включить или выключить режим AFK.
|
||||
- `/crawl` - позволяет игроку ползти.
|
||||
- `/sit` - позволяет игроку сидеть.
|
||||
- `/lay` - позволяет игроку лечь.
|
||||
|
||||
### ImageFrame (изображения на картах)
|
||||
|
||||
- `/imageframe select` - выбрать рамки, в которые будет поставлено изображение.
|
||||
- `/imageframe create <name> <url> <width> <height>` - создать новое изображение на картах.
|
||||
- `/imageframe create <name> <url> selection` - создать изображение и сразу разместить его в выбранных рамках.
|
||||
- `/imageframe get <name>` - получить ранее созданное вами изображение.
|
||||
- `/imageframe get <name> selection` - поставить ранее созданное изображение сразу в выбранные рамки.
|
||||
- `/imageframe list` - показать список ваших созданных изображений.
|
||||
- `/imageframe info` - показать информацию об изображении, которое вы держите в руке.
|
||||
- `/imageframe refresh [image_name] [new_url]` - обновить изображение из источника (при необходимости с новой ссылкой).
|
||||
- `/imageframe rename <name> <new_name>` - переименовать ваше изображение.
|
||||
- `/imageframe delete <name>` - удалить ваше изображение.
|
||||
|
||||
:::note
|
||||
Для `/imageframe create` используйте прямую ссылку на изображение.
|
||||
`<width>` и `<height>` - это размер в картах (например `2 2` для сетки 2x2).
|
||||
:::
|
||||
|
||||
### Информация
|
||||
|
||||
- `/ping` - узнать задержку (пинг).
|
||||
- `/toponline` - посмотреть топ игроков по наигранному времени.
|
||||
- `/breweryx info` - показать уровень опьянения.
|
||||
|
||||
### Символы
|
||||
|
||||
- `/symbol` - открыть меню символов.
|
||||
|
||||
155
src/content/docs/crafting.md
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
title: "Крафты"
|
||||
description: "Раздел по кастомным крафтам сервера PARABOX."
|
||||
---
|
||||
|
||||
## Каталог крафтов
|
||||
|
||||
<div class="craft-catalog" data-craft-catalog>
|
||||
<div class="craft-controls">
|
||||
<label class="craft-search-field" for="craft-search-input">
|
||||
<span>Поиск по названию</span>
|
||||
<input
|
||||
id="craft-search-input"
|
||||
class="craft-search-input"
|
||||
type="search"
|
||||
placeholder="Например, наковальня или книга"
|
||||
data-craft-search
|
||||
/>
|
||||
</label>
|
||||
<div class="craft-filter-group" role="group" aria-label="Фильтр крафтов по категориям">
|
||||
<button type="button" class="craft-filter-chip is-active" data-craft-filter="all" aria-pressed="true">Все</button>
|
||||
<button type="button" class="craft-filter-chip" data-craft-filter="special" aria-pressed="false">Спец-предметы</button>
|
||||
<button type="button" class="craft-filter-chip" data-craft-filter="blocks" aria-pressed="false">Блоки и станции</button>
|
||||
<button type="button" class="craft-filter-chip" data-craft-filter="smelting" aria-pressed="false">Переработка</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p class="craft-empty" data-craft-empty hidden>По вашему запросу крафты не найдены.</p>
|
||||
|
||||
<section class="craft-group" data-craft-group data-craft-category="special">
|
||||
<h3>Спец-предметы</h3>
|
||||
<div class="craft-grid">
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="невидимая рамка">
|
||||
<h3>Невидимая рамка</h3>
|
||||
<img class="craft-card-image" src="/crafts/invisible-item-frame.png" alt="Рецепт невидимой рамки" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="невидимая светящаяся рамка">
|
||||
<h3>Невидимая светящаяся рамка</h3>
|
||||
<img class="craft-card-image" src="/crafts/invisible-glow-item-frame.png" alt="Рецепт невидимой светящейся рамки" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="невидимый свет">
|
||||
<h3>Невидимый свет</h3>
|
||||
<img class="craft-card-image" src="/crafts/invisible-light.png" alt="Рецепт невидимого света" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="чародейская книга">
|
||||
<h3>Чародейская книга</h3>
|
||||
<img class="craft-card-image" src="/crafts/enchanted-book.png" alt="Рецепт чародейской книги" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="книга знаний">
|
||||
<h3>Книга знаний</h3>
|
||||
<img class="craft-card-image" src="/crafts/knowledge-book.png" alt="Рецепт книги знаний" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="дыхание дракона">
|
||||
<h3>Дыхание дракона</h3>
|
||||
<img class="craft-card-image" src="/crafts/dragons-breath.png" alt="Рецепт дыхания дракона" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="светящиеся чернила">
|
||||
<h3>Светящиеся чернила</h3>
|
||||
<img class="craft-card-image" src="/crafts/glow-ink-sac.png" alt="Рецепт светящихся чернил" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="мембрана фантома">
|
||||
<h3>Мембрана фантома</h3>
|
||||
<img class="craft-card-image" src="/crafts/phantom-membrane.png" alt="Рецепт мембраны фантома" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="бирка">
|
||||
<h3>Бирка</h3>
|
||||
<img class="craft-card-image" src="/crafts/name-tag.png" alt="Рецепт бирки" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="special" data-craft-name="мешок">
|
||||
<h3>Мешок</h3>
|
||||
<img class="craft-card-image" src="/crafts/bundle.png" alt="Рецепт мешка" loading="lazy" />
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="craft-group" data-craft-group data-craft-category="blocks">
|
||||
<h3>Блоки и рабочие станции</h3>
|
||||
<div class="craft-grid">
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="стол лучника">
|
||||
<h3>Стол лучника</h3>
|
||||
<img class="craft-card-image" src="/crafts/fletching-table.png" alt="Рецепт стола лучника" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="стол картографа">
|
||||
<h3>Стол картографа</h3>
|
||||
<img class="craft-card-image" src="/crafts/cartography-table.png" alt="Рецепт стола картографа" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="ткацкий станок">
|
||||
<h3>Ткацкий станок</h3>
|
||||
<img class="craft-card-image" src="/crafts/loom.png" alt="Рецепт ткацкого станка" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="нотный блок">
|
||||
<h3>Нотный блок</h3>
|
||||
<img class="craft-card-image" src="/crafts/note-block.png" alt="Рецепт нотного блока" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="проигрыватель">
|
||||
<h3>Проигрыватель</h3>
|
||||
<img class="craft-card-image" src="/crafts/jukebox.png" alt="Рецепт проигрывателя" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="раздатчик">
|
||||
<h3>Раздатчик</h3>
|
||||
<img class="craft-card-image" src="/crafts/dispenser.png" alt="Рецепт раздатчика" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="колокол">
|
||||
<h3>Колокол</h3>
|
||||
<img class="craft-card-image" src="/crafts/bell.png" alt="Рецепт колокола" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="обтесанное бревно">
|
||||
<h3>Обтесанное бревно</h3>
|
||||
<img class="craft-card-image" src="/crafts/stripped-log-stonecutter.png" alt="Рецепт обтесанного бревна в камнерезе" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="прочный полублок">
|
||||
<h3>Прочный полублок</h3>
|
||||
<img class="craft-card-image" src="/crafts/sturdy-slab.png" alt="Рецепт прочного полублока" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="наковальня вариант 1">
|
||||
<h3>Наковальня (вариант 1)</h3>
|
||||
<img class="craft-card-image" src="/crafts/anvil-variant-base.png" alt="Первый вариант рецепта наковальни" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="blocks" data-craft-name="наковальня вариант 2">
|
||||
<h3>Наковальня (вариант 2)</h3>
|
||||
<img class="craft-card-image" src="/crafts/anvil-variant-l.png" alt="Второй вариант рецепта наковальни" loading="lazy" />
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="craft-group" data-craft-group data-craft-category="smelting">
|
||||
<h3>Переработка и конверсия</h3>
|
||||
<div class="craft-grid">
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="компас из компаса восстановления">
|
||||
<h3>Компас из компаса восстановления</h3>
|
||||
<img class="craft-card-image" src="/crafts/recovery-compass-to-compass-smelting.png" alt="Переплавка компаса восстановления в обычный компас" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="железный слиток из компаса">
|
||||
<h3>Железный слиток из компаса</h3>
|
||||
<img class="craft-card-image" src="/crafts/compass-to-iron-ingot-smelting.png" alt="Переплавка компаса в железный слиток" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="золотой слиток из часов">
|
||||
<h3>Золотой слиток из часов</h3>
|
||||
<img class="craft-card-image" src="/crafts/clock-to-gold-ingot-smelting.png" alt="Переплавка часов в золотой слиток" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="красное стекло">
|
||||
<h3>Красное стекло</h3>
|
||||
<img class="craft-card-image" src="/crafts/red-glass-smelting.png" alt="Переплавка в красное стекло" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="алмазная руда вариант 1">
|
||||
<h3>Алмазная руда (вариант 1)</h3>
|
||||
<img class="craft-card-image" src="/crafts/diamond-ore-variant-k.png" alt="Первый вариант рецепта алмазной руды" loading="lazy" />
|
||||
</article>
|
||||
<article class="lore-card craft-card" data-craft-item data-craft-category="smelting" data-craft-name="алмазная руда вариант 2">
|
||||
<h3>Алмазная руда (вариант 2)</h3>
|
||||
<img class="craft-card-image" src="/crafts/diamond-ore-variant-s.png" alt="Второй вариант рецепта алмазной руды" loading="lazy" />
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -1,33 +0,0 @@
|
||||
---
|
||||
title: "Донат / привилегии"
|
||||
description: "Добровольная поддержка сервера, наборы и прозрачные правила привилегий."
|
||||
---
|
||||
|
||||
## Принципы
|
||||
|
||||
- Донат не должен ломать баланс мира.
|
||||
- Боевые преимущества ограничены и прозрачны.
|
||||
- Все пакеты имеют чёткое описание.
|
||||
|
||||
## Уровни поддержки
|
||||
|
||||
| Уровень | Что входит |
|
||||
| --- | --- |
|
||||
| Traveler | Косметика + расширенный /home |
|
||||
| Patron | Больше слотов хранилища + титул |
|
||||
| Curator | Эксклюзивные визуальные эффекты |
|
||||
|
||||
## Политика возвратов
|
||||
|
||||
Возвраты рассматриваются через тикет-систему в течение 7 дней после покупки.
|
||||
|
||||
:::note
|
||||
Покупка привилегий - способ поддержать развитие сервера, а не обязательное условие комфортной игры.
|
||||
:::
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/rules/">Правила</a> · <a href="/contacts/">Контакты / ссылки</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
---
|
||||
title: "Экономика"
|
||||
description: "Валюты, рынки, аукцион, контракты и рекомендации по торговле."
|
||||
---
|
||||
|
||||
## Валюты
|
||||
|
||||
- `Aurum` - базовая торговая валюта.
|
||||
- `Echo` - редкая валютная единица для реликвий.
|
||||
|
||||
## Как работает рынок
|
||||
|
||||
### Аукцион
|
||||
|
||||
Игроки выставляют предметы на открытый рынок.
|
||||
|
||||
### Контракты
|
||||
|
||||
Сделки между игроками с фиксированными условиями.
|
||||
|
||||
## Мини-стратегия для старта
|
||||
|
||||
| Шаг | Действие | Ожидаемый эффект |
|
||||
| --- | --- | --- |
|
||||
| 1 | Продавать излишки еды | Быстрый стартовый капитал |
|
||||
| 2 | Копить железо и редстоун | Стабильный спрос |
|
||||
| 3 | Вкладываться в алхимию | Высокая маржа |
|
||||
|
||||
:::caution
|
||||
Не держи все активы в одном виде ресурса: цены цикличны.
|
||||
:::
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/items-resources/">Предметы и ресурсы</a> · <a href="/donate/">Донат / привилегии</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
---
|
||||
title: "Как редактировать wiki"
|
||||
description: "Простая инструкция по добавлению и изменению страниц в Markdown."
|
||||
---
|
||||
|
||||
## Быстрый принцип
|
||||
|
||||
Каждая статья - отдельный `.md`-файл в `src/content/docs/`.
|
||||
|
||||
## Минимальный frontmatter
|
||||
|
||||
```yaml
|
||||
---
|
||||
title: "Название страницы"
|
||||
description: "Короткое описание страницы"
|
||||
---
|
||||
```
|
||||
|
||||
## Как добавить новую страницу
|
||||
|
||||
1. Создай файл в `src/content/docs/`, например `new-biome.md`.
|
||||
2. Добавь frontmatter (`title`, `description`).
|
||||
3. Напиши контент в Markdown (заголовки, списки, таблицы, код).
|
||||
4. Добавь ссылку в `sidebar` в `astro.config.mjs`.
|
||||
|
||||
## Полезные блоки Starlight
|
||||
|
||||
```md
|
||||
:::note
|
||||
Заметка
|
||||
:::
|
||||
|
||||
:::tip
|
||||
Подсказка
|
||||
:::
|
||||
|
||||
:::caution
|
||||
Предупреждение
|
||||
:::
|
||||
|
||||
:::danger
|
||||
Опасность
|
||||
:::
|
||||
```
|
||||
|
||||
## Пример spoiler/details
|
||||
|
||||
```md
|
||||
<details>
|
||||
<summary>Показать секрет</summary>
|
||||
Здесь скрытый текст.
|
||||
</details>
|
||||
```
|
||||
|
||||
## Где редактируется меню
|
||||
|
||||
Меню и порядок разделов настраиваются в `astro.config.mjs` -> `starlight({ sidebar: [...] })`.
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/templates/new-page-template/">Шаблон новой страницы</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -3,16 +3,59 @@ 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>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
## Как сменить скин
|
||||
|
||||
На сервере доступна система скинов, которая позволяет установить любой внешний вид. Скин будет отображаться в чате, на карте и в других местах.
|
||||
|
||||
### Способ 1. Через команду
|
||||
|
||||
- для установки: `/skin set <ссылка на скин / ник лицензионного аккаунта>`
|
||||
- для сброса: `/skin clear`
|
||||
|
||||
### Способ 2. Через сайт SkinRestorer
|
||||
|
||||
1. Загрузите скин файлом на сайт: [SkinRestorer](https://skinsrestorer.net/upload)
|
||||
2. Нажмите кнопку `GENERATE` и скопируйте полученную команду.
|
||||
3. Введите команду в чате Minecraft.
|
||||
|
||||
---
|
||||
|
||||
## ImageForm (бета): гайд
|
||||
|
||||
`ImageForm` позволяет делать map-art автоматически по ссылке на изображение, без ручной постройки пиксель-арт схем.
|
||||
|
||||
### Как использовать
|
||||
|
||||
1. Подготовьте прямую ссылку на картинку (форматы `png`/`jpg`/`webp`).
|
||||
2. Зайдите на сервер и вызовите инструмент ImageForm (команда/интерфейс, доступный на вашей роли).
|
||||
3. Вставьте ссылку на изображение и подтвердите создание.
|
||||
4. Выберите размер и формат карты (если сервер предложит параметры).
|
||||
5. Дождитесь генерации и заберите готовый результат.
|
||||
|
||||
### Советы по качеству
|
||||
|
||||
- используйте изображения с хорошим контрастом и без мелкого текста;
|
||||
- лучше всего подходят квадратные или близкие к квадрату картинки;
|
||||
- при необходимости уменьшите изображение заранее, чтобы карта читалась лучше.
|
||||
|
||||
:::note
|
||||
ImageForm работает в бета-режиме: отдельные параметры или ограничения могут меняться в следующих патчах.
|
||||
:::
|
||||
|
||||
@@ -3,10 +3,10 @@ title: "Начало игры"
|
||||
description: "Как подать заявку на сервер PARABOX и что указать в анкете."
|
||||
---
|
||||
|
||||
## ✏️ Захотелось к нам?
|
||||
## Как вступить
|
||||
|
||||
Чтобы попасть на сервер, необходимо отправить запрос через нашего бота.
|
||||
После одобрения вы получите доступ и окунётесь в удивительные миры **PARABOX**.
|
||||
Чтобы попасть на сервер, отправьте заявку через бота.
|
||||
После одобрения вы получите доступ к миру PARABOX.
|
||||
|
||||
<div class="see-also">
|
||||
<p>Подача заявки через бота</p>
|
||||
@@ -15,8 +15,8 @@ description: "Как подать заявку на сервер PARABOX и чт
|
||||
|
||||
## Форма анкеты
|
||||
|
||||
Чтобы вступить к нам, просим заполнить небольшую анкету в боте:
|
||||
Чтобы вступить, заполните короткую анкету в боте:
|
||||
|
||||
1. Как к вам обращаться? Укажите ваш псевдоним или имя.
|
||||
2. Ваш никнейм, который будет привязан к серверу.
|
||||
3. От какого проекта вы? Если не от проекта, укажите, от кого вы узнали о сервере.
|
||||
1. Как к вам обращаться (имя или псевдоним).
|
||||
2. Ваш никнейм для привязки к серверу.
|
||||
3. От какого проекта вы пришли, или откуда узнали о сервере.
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
---
|
||||
title: "Гайды"
|
||||
description: "Практические сценарии: выживание, прогресс, босс-раны и командная игра."
|
||||
---
|
||||
|
||||
## Навигатор по гайдам
|
||||
|
||||
<div class="lore-grid">
|
||||
<article class="lore-card">
|
||||
<h3>Соло-старт</h3>
|
||||
<p>Как стабильно развиться одному игроку за первые два вечера.</p>
|
||||
</article>
|
||||
<article class="lore-card">
|
||||
<h3>Гильдейский старт</h3>
|
||||
<p>Роли в группе, распределение ресурсов и ротация задач.</p>
|
||||
</article>
|
||||
<article class="lore-card">
|
||||
<h3>Босс-раны</h3>
|
||||
<p>Минимальный набор, тактики и контроль рисков на арене.</p>
|
||||
</article>
|
||||
</div>
|
||||
|
||||
## Пример структурированного гайда
|
||||
|
||||
### Подготовка
|
||||
|
||||
- 32+ еды
|
||||
- Броня не ниже железной
|
||||
- 2 тотема или 3 зелья лечения
|
||||
|
||||
### Выполнение
|
||||
|
||||
1. Активируй обелиск.
|
||||
2. Удерживай центральную платформу 3 волны.
|
||||
3. Сфокусируй урон по призывателю на 4-й фазе.
|
||||
|
||||
### Завершение
|
||||
|
||||
Разбери добычу по ролям: танк, саппорт, дамагер.
|
||||
|
||||
:::danger
|
||||
Не заходи в событие с поломанной бронёй: штраф на урон и критический риск потери лута.
|
||||
:::
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/mechanics/">Механики</a> · <a href="/professions/">Профессии / классы / расы</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -2,46 +2,40 @@
|
||||
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="/getting-started/">«Начало игры»</a>, а информация по городам — в разделе <a href="/cities/">«Города»</a>.
|
||||
|
||||
## Основные особенности
|
||||
|
||||
- Система городов с возможностью набора жителей.
|
||||
- Экономика и торговля между игроками.
|
||||
- Общий мир для всех проектов ЛРПКМ.
|
||||
- Ивенты и активности.
|
||||
- Классическое выживание с социальным взаимодействием.
|
||||
- И просто весёлое времяпровождение.
|
||||
|
||||
:::tip
|
||||
Project PARABOX объединяет проекты и игроков в одном живом мире, где каждый может выбрать свой формат игры: развитие города, торговлю, выживание или участие в событиях.
|
||||
Чем быстрее вы подключитесь по IP и выберете точку старта, тем проще будет влиться в текущие города и события.
|
||||
:::
|
||||
|
||||
## ❓ Основные особенности
|
||||
|
||||
- Система городов.
|
||||
- Экономика / торговля.
|
||||
- Ивенты и активности.
|
||||
|
||||
## 🚀 Как начать играть
|
||||
|
||||
1. Подайте заявку.
|
||||
2. Зайдите на сервер по IP.
|
||||
3. Прочитайте правила в соответствующем разделе.
|
||||
4. Зарегистрируйтесь или войдите в систему.
|
||||
5. Найдите город или создайте свой.
|
||||
|
||||
## ✨ Добро пожаловать и приятной игры!
|
||||
## Добро пожаловать и приятной игры
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
title: "Предметы и ресурсы"
|
||||
description: "Каталог ключевых материалов, редких артефактов и их применение."
|
||||
---
|
||||
|
||||
## Базовые ресурсы
|
||||
|
||||
- Древесина
|
||||
- Камень
|
||||
- Железо
|
||||
- Кварц
|
||||
|
||||
## Редкие материалы
|
||||
|
||||
### Пыль кометы
|
||||
|
||||
Используется для усиления портальных якорей.
|
||||
|
||||
### Лунный обсидиан
|
||||
|
||||
Нужен для защитных печатей и высокоуровневых рецептов.
|
||||
|
||||
## Пример блока внимания
|
||||
|
||||
:::danger
|
||||
Артефакты с меткой «Связанный» нельзя передавать или продавать.
|
||||
:::
|
||||
|
||||
## Таблица предметов
|
||||
|
||||
| Предмет | Где найти | Для чего нужен |
|
||||
| --- | --- | --- |
|
||||
| Пыль кометы | Небесный дождь | Ритуалы усиления |
|
||||
| Лунный обсидиан | Глубинные разломы | Структуры защиты |
|
||||
| Эхо-кристалл | Рейдовые боссы | Улучшение реликвий |
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/mechanics/">Механики</a> · <a href="/guides/">Гайды</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
---
|
||||
title: "Механики"
|
||||
description: "Основные игровые системы: энергия, климат, аномалии и мировые события."
|
||||
---
|
||||
|
||||
## Энергия эфира
|
||||
|
||||
Эфир усиливает способности и влияет на доступ к скрытым зонам.
|
||||
|
||||
| Уровень эфира | Эффект |
|
||||
| --- | --- |
|
||||
| 0-20 | Базовые действия |
|
||||
| 21-60 | Бонус к добыче и скорости |
|
||||
| 61+ | Открываются артефактные узлы |
|
||||
|
||||
### Как повышать эфир
|
||||
|
||||
- Выполнять ежедневные контракты.
|
||||
- Закрывать аномалии в группе.
|
||||
- Исследовать архивные башни.
|
||||
|
||||
## Мировые события
|
||||
|
||||
### Разломы
|
||||
|
||||
Появляются раз в несколько часов и требуют командной обороны.
|
||||
|
||||
### Небесный дождь
|
||||
|
||||
Даёт редкие ингредиенты, но привлекает элитных мобов.
|
||||
|
||||
:::note
|
||||
`h2` и `h3` автоматически попадают в оглавление страницы справа.
|
||||
:::
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/items-resources/">Предметы и ресурсы</a> · <a href="/rules/">Правила</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,42 +0,0 @@
|
||||
---
|
||||
title: "Профессии / классы / расы"
|
||||
description: "Гибкая RPG-система: роли, бонусы, ограничения и синергия в группе."
|
||||
---
|
||||
|
||||
## Расы
|
||||
|
||||
- Астралы: бонус к мане и исследованию.
|
||||
- Форджеры: ускоренный крафт и переработка руд.
|
||||
- Вейлборны: скрытность и мобильность.
|
||||
|
||||
## Классы
|
||||
|
||||
### Страж
|
||||
|
||||
Высокая выживаемость и контроль зоны.
|
||||
|
||||
### Проводник
|
||||
|
||||
Баффы команды и лечение в бою.
|
||||
|
||||
### Пилигрим
|
||||
|
||||
Урон по одиночным целям и ускорение перемещения.
|
||||
|
||||
## Профессии
|
||||
|
||||
1. Алхимик
|
||||
2. Инженер
|
||||
3. Хранитель ферм
|
||||
4. Архивариус-торговец
|
||||
|
||||
:::tip
|
||||
Лучше выбрать профессию, которая дополняет класс, а не дублирует его сильные стороны.
|
||||
:::
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/economy/">Экономика</a> · <a href="/guides/">Гайды</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
title: "Правила"
|
||||
description: "Полный свод правил сервера PARABOX: пункты, подпункты, санкции и порядок разбирательств."
|
||||
---
|
||||
# Правила сервера **PARABOX**
|
||||
|
||||
---
|
||||
|
||||
### Как работает этот документ
|
||||
|
||||
Этот документ нужен для того, чтобы на сервере **PARABOX** были:
|
||||
@@ -116,10 +120,9 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
Базовый порядок урегулирования споров на сервере следующий:
|
||||
|
||||
1. добровольное мирное урегулирование;
|
||||
2. консул;
|
||||
3. президент;
|
||||
4. верховный суд;
|
||||
5. главная администрация как высшая инстанция.
|
||||
2. суд;
|
||||
3. президент и консул в пределах своих полномочий;
|
||||
4. главная администрация как высшая инстанция.
|
||||
|
||||
#### Взаимная подотчётность ветвей власти
|
||||
Президент, суд и исполнительная власть находятся в системе взаимного контроля, влияния и подотчётности.
|
||||
@@ -173,8 +176,8 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
### 1.6 Границы мира
|
||||
Мир сервера ограничен следующими рамками:
|
||||
|
||||
- верхний мир — **20 000 × 20 000** блоков;
|
||||
- нижний мир — **3 000 × 3 000** блоков.
|
||||
- верхний мир — **20 000 × 20 000** блоков (10000 блоков во все стороны сервера);
|
||||
- нижний мир — **3 000 × 3 000** блоков (1500 блоков во все стороны сервера).
|
||||
|
||||
Выход за установленные границы, обход ограничений мира и попытки использовать их в ущерб серверу запрещены.
|
||||
|
||||
@@ -259,7 +262,7 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
- по инициативе президента;
|
||||
- через установленный порядок обсуждения и согласования.
|
||||
|
||||
Для вступления изменений в силу требуется согласование с администрацией и предусмотренное сервером подтверждение со стороны игроков, если такая процедура объявлена как обязательная. Также о всех изменениях в своде правил администрация должна оповещать игроков.
|
||||
Для вступления изменений в силу требуется согласование с администрацией и предусмотренное сервером подтверждение со стороны игроков, если такая процедура объявлена как обязательная.
|
||||
|
||||
---
|
||||
|
||||
@@ -322,7 +325,6 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
- блокировать проходы;
|
||||
- перекрывать общественные объекты;
|
||||
- срывать ивенты;
|
||||
- мешать лору и сюжету;
|
||||
- преследовать игроков;
|
||||
- постоянно провоцировать их на конфликт;
|
||||
- использовать механики для вреда чужому прогрессу.
|
||||
@@ -353,7 +355,7 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
На общественных объектах действуют правила, установленные их владельцами, городом, государством, президентом или судом, если они не противоречат основным правилам сервера.
|
||||
|
||||
### 2.14 Ключевые общественные точки
|
||||
Ближайший общественный портал в Энд, незерская магистраль и иные стратегически важные точки мира, признанные общественными, не могут использоваться в личных интересах, если это ограничивает других игроков.
|
||||
Ближайший общественный портал в Энд и иные стратегически важные точки мира, признанные общественными, не могут использоваться в личных интересах, если это ограничивает других игроков.
|
||||
|
||||
Запрещено:
|
||||
|
||||
@@ -476,8 +478,8 @@ description: "Полный свод правил сервера PARABOX: пун
|
||||
|
||||
Администрация вправе отдельно разрешать или запрещать иные моды по своему решению.
|
||||
|
||||
### 4.4 Freecam + ReplayMode
|
||||
Использование Freecam + ReplayMode с прохождением через блоки, просмотром скрытых помещений, баз, тайников, шахт и иных недоступных зон запрещено.
|
||||
### 4.4 Freecam и ReplayMode
|
||||
Использование Freecam, ReplayMode, миникарт с отображением пещер и сущностей, или модов с хожим функционалом, таким как прохождением через блоки, просмотром скрытых помещений, баз, тайников, шахт и иных недоступных зон и сущностей запрещено.
|
||||
|
||||
### 4.5 Прямо запрещённые инструменты
|
||||
Запрещены, в том числе:
|
||||
@@ -557,7 +559,7 @@ AFK допускается только в разумных пределах и
|
||||
- фермы;
|
||||
- мастерские;
|
||||
- шахтные комплексы;
|
||||
- определенные части города;
|
||||
- города;
|
||||
- служебные объекты;
|
||||
- любые явно обозначенные или логически принадлежащие кому-либо места.
|
||||
|
||||
@@ -571,7 +573,7 @@ AFK допускается только в разумных пределах и
|
||||
- признана городом, судом, президентом либо администрацией.
|
||||
|
||||
### 5.3 Спавн
|
||||
Территория спавна составляет **500×500 блоков**.
|
||||
Территория спавна составляет **500×500 блоков** (250 блоков во все стороны от нулевых координат).
|
||||
|
||||
На спавне запрещены:
|
||||
|
||||
@@ -583,7 +585,7 @@ AFK допускается только в разумных пределах и
|
||||
- действия, мешающие использованию спавна как общественной зоны.
|
||||
|
||||
### 5.4 Регистрация города
|
||||
Город считается официальным только после подачи заявки по форме и её подтверждения.
|
||||
Город считается официальным только после подачи заявки и её подтверждения.
|
||||
|
||||
Заявка на регистрацию города подтверждается:
|
||||
|
||||
@@ -600,7 +602,7 @@ AFK допускается только в разумных пределах и
|
||||
- местные проекты;
|
||||
- участие в суде и политических процессах.
|
||||
|
||||
Все внутренние правила города действуют только в части, не противоречащей правилам сервера. Внутренние правила и распорядки города, также могут быть пересмотрены решением вышестоящей власти.
|
||||
Все внутренние правила города действуют только в части, не противоречащей правилам сервера.
|
||||
|
||||
### 5.6 Открытые общественные зоны города
|
||||
Каждый официальный город обязан иметь открытые территории для приёма игроков и нормального публичного взаимодействия.
|
||||
@@ -766,15 +768,13 @@ RP является важной частью сервера **PARABOX**, но
|
||||
### 6.4 Лор сервера
|
||||
Официальный лор сервера продвигается, направляется и при необходимости корректируется администрацией.
|
||||
|
||||
Игроки и города могут участвовать в лоре и развивать собственные сюжеты, если они:
|
||||
Игроки могут участвовать в лоре и развивать собственные сюжеты, если они:
|
||||
|
||||
- не противоречат основным правилам;
|
||||
- не ломают атмосферу сервера;
|
||||
- не присваивают игроку необоснованную власть;
|
||||
- не мешают общему развитию проекта.
|
||||
|
||||
Также игроки могут связывать свой лор и идеи, с помощью администрации, после тщательного изучения и одобрения с их стороны.
|
||||
|
||||
### 6.5 Политические и государственные процессы
|
||||
RP-политика, законы, указы, решения органов власти, выборы и государственные процессы допустимы, если они не противоречат правилам сервера и не превращаются в средство злоупотребления.
|
||||
|
||||
@@ -804,7 +804,7 @@ RP-политика, законы, указы, решения органов в
|
||||
### 7.2 Срок полномочий
|
||||
Президент, судья и консул избираются на срок **1 месяц**.
|
||||
|
||||
После завершения срока полномочий проводятся новые выборы или иная предусмотренная сервером процедура подтверждения новой власти. При этом президентом нельзя становиться более 2 сроков за общее время.
|
||||
После завершения срока полномочий проводятся новые выборы или иная предусмотренная сервером процедура подтверждения новой власти.
|
||||
|
||||
### 7.3 Выборность должностей
|
||||
На сервере могут выбираться:
|
||||
@@ -818,7 +818,7 @@ RP-политика, законы, указы, решения органов в
|
||||
|
||||
Запрещено:
|
||||
|
||||
- одновременно занимать две или более высшие выборные должности;
|
||||
- одновременно занимать две или три высшие выборные должности;
|
||||
- одновременно участвовать как кандидат сразу в нескольких выборах в рамках одного избирательного цикла;
|
||||
- использовать снятие кандидатуры с одной должности для скрытого обхода ограничений другой должности, если это нарушает порядок выборов.
|
||||
|
||||
@@ -1290,7 +1290,7 @@ RP-политика, законы, указы, решения органов в
|
||||
Консул не получает автоматически:
|
||||
|
||||
- административные команды;
|
||||
- право отменять суд;
|
||||
- право отменять суд без причины;
|
||||
- право подменять администрацию;
|
||||
- право действовать вне закона и процедуры.
|
||||
|
||||
@@ -1312,6 +1312,9 @@ RP-политика, законы, указы, решения органов в
|
||||
- использовать служебные инструменты проверки, включая **CoreProtect**, если доступ к ним предоставлен сервером;
|
||||
- устанавливать, кто посещал территорию, кто взаимодействовал с блоками, кто мог совершить кражу или иное действие;
|
||||
- проводить обследования местности;
|
||||
- проводить оперативные мероприятия и оперативные расследования в пределах закона и своей компетенции;
|
||||
- собирать, фиксировать и передавать в суд улики, полученные законным способом;
|
||||
- использовать данные CoreProtect и иных разрешённых сервером инструментов для получения улик против предполагаемого нарушителя;
|
||||
- организовывать законные осмотры и проверки;
|
||||
- проверять инвентарь игрока, если это необходимо для задержания, расследования, исполнения решения суда или иной установленной процедуры;
|
||||
- назначать исполнителей и распределять обязанности в рамках исполнительной ветви, если это предусмотрено устройством сервера;
|
||||
@@ -1342,7 +1345,7 @@ RP-политика, законы, указы, решения органов в
|
||||
- вмешиваться в дела администрации вне своей компетенции.
|
||||
|
||||
### 11.7 Основания для действий исполнительной власти
|
||||
Задержания, обследования, проверки инвентаря, охрана, конфискации и иные исполнительные действия допускаются только при наличии одного из оснований:
|
||||
Задержания, обследования, проверки инвентаря, охрана, конфискации, оперативные мероприятия, оперативные расследования и иные исполнительные действия допускаются только при наличии одного из оснований:
|
||||
|
||||
- решения суда;
|
||||
- официального расследования;
|
||||
@@ -1351,6 +1354,8 @@ RP-политика, законы, указы, решения органов в
|
||||
- прямого поручения уполномоченного органа сервера;
|
||||
- чрезвычайной ситуации, где требуется немедленное вмешательство.
|
||||
|
||||
При оперативных расследованиях исполнительная власть вправе использовать CoreProtect и иные разрешённые сервером инструменты для поиска следов нарушений, установления действий игроков и получения улик, пригодных для передачи в суд или администрации.
|
||||
|
||||
### 11.8 Обязанность фиксации
|
||||
Исполнительная власть обязана по возможности фиксировать свои действия.
|
||||
|
||||
@@ -1398,6 +1403,14 @@ RP-политика, законы, указы, решения органов в
|
||||
- политические и должностные дела;
|
||||
- иные вопросы, переданные на рассмотрение.
|
||||
|
||||
Суд также отвечает за:
|
||||
|
||||
- хранение судебных документов;
|
||||
- ведение делопроизводства;
|
||||
- оформление решений;
|
||||
- работу с судебными материалами;
|
||||
- передачу официальных документов участникам процесса.
|
||||
|
||||
### 12.3 Как подаётся дело
|
||||
Дело может быть подано через:
|
||||
|
||||
@@ -1417,7 +1430,40 @@ RP-политика, законы, указы, решения органов в
|
||||
6. требования заявителя;
|
||||
7. свидетелей, если они есть.
|
||||
|
||||
### 12.4 Ведение доказательств
|
||||
### 12.4 Досудебный порядок урегулирования
|
||||
До обращения в суд стороны обязаны попытаться урегулировать конфликт в досудебном порядке, если это возможно по характеру спора.
|
||||
|
||||
#### 12.4.1 Что включает досудебный порядок
|
||||
Досудебный порядок предполагает:
|
||||
|
||||
- попытку мирного урегулирования;
|
||||
- обращение к другой стороне с претензией;
|
||||
- предложение решить вопрос без судебного разбирательства;
|
||||
- фиксацию того, что спор действительно пытались урегулировать.
|
||||
|
||||
В суде участники не выясняют отношения заново, а излагают свою позицию, предъявляют доказательства и добиваются правового решения.
|
||||
|
||||
#### 12.4.2 Если досудебный порядок не соблюдён
|
||||
Если досудебный порядок отсутствовал без уважительной причины, суд вправе отказать в принятии заявления или оставить дело без рассмотрения до соблюдения предварительного порядка урегулирования.
|
||||
|
||||
### 12.5 Государственная пошлина
|
||||
Подача судебного заявления облагается фиксированной государственной пошлиной в размере **10 ар.**
|
||||
|
||||
Иной размер, льготы, освобождение или особый порядок могут быть установлены отдельным решением сервера, суда или администрации.
|
||||
|
||||
### 12.6 Предоставление доказательств до заседания
|
||||
Все основные доказательства необходимо предоставить судье **до начала судебного заседания**.
|
||||
|
||||
#### 12.6.1 Кому можно передать доказательства
|
||||
В крайнем случае доказательства могут быть переданы:
|
||||
|
||||
- судье;
|
||||
- либо любому члену администрации, если судья временно недоступен.
|
||||
|
||||
#### 12.6.2 Последствия поздней подачи
|
||||
Несвоевременная подача доказательств может повлиять на их оценку, допустимость или возможность учёта в конкретном заседании.
|
||||
|
||||
### 12.7 Ведение доказательств
|
||||
Для защиты своих интересов в суде игрокам настоятельно рекомендуется вести фиксацию важных событий.
|
||||
|
||||
Желательно использовать:
|
||||
@@ -1433,7 +1479,7 @@ RP-политика, законы, указы, решения органов в
|
||||
|
||||
Чем лучше сторона фиксирует события, тем проще суду установить факты.
|
||||
|
||||
### 12.5 Доказательства
|
||||
### 12.8 Доказательства
|
||||
Суд вправе учитывать:
|
||||
|
||||
- скриншоты;
|
||||
@@ -1444,25 +1490,69 @@ RP-политика, законы, указы, решения органов в
|
||||
- показания свидетелей;
|
||||
- координаты;
|
||||
- состояние территории;
|
||||
- логи и технические данные, если они предоставлены уполномоченным лицом.
|
||||
- логи и технические данные, если они предоставлены уполномоченным лицом;
|
||||
- улики, полученные исполнительной властью законным способом.
|
||||
|
||||
### 12.6 Поведение в суде
|
||||
Стороны и участники процесса обязаны вести себя в суде уважительно.
|
||||
### 12.9 Правила поведения в судебном заседании
|
||||
В судебном заседании участники обязаны вести себя корректно и уважительно.
|
||||
|
||||
За непристойное, оскорбительное, срывающее процесс или демонстративно неуважительное поведение суд может вынести:
|
||||
#### 12.9.1 Запрещается
|
||||
Запрещается:
|
||||
|
||||
- предупреждение;
|
||||
- удаление с заседания;
|
||||
- дополнительный штраф;
|
||||
- иные процессуальные меры в пределах своих полномочий.
|
||||
- выяснять личные отношения вместо изложения позиции по делу;
|
||||
- бегать, прыгать и иным образом нарушать порядок;
|
||||
- отвлекать суд, присяжных, если они предусмотрены процессом, или иных участников;
|
||||
- оскорблять присяжных, потерпевших, ответчиков, истцов, прокурора, заинтересованных лиц, понятых, свидетелей, судью и иных участников процесса;
|
||||
- вмешиваться в действия суда и других участников процесса;
|
||||
- мешать ведению разбирательства репликами, вопросами и комментариями без разрешения суда;
|
||||
- допускать шум, спам, хаос и иные формы неуважения к процессу.
|
||||
|
||||
### 12.7 Участие президента в судебном процессе
|
||||
#### 12.9.2 Участники обязаны
|
||||
Участники обязаны:
|
||||
|
||||
- выполнять законные требования и распоряжения судьи;
|
||||
- соблюдать порядок;
|
||||
- не проявлять неуважение к суду и другим участникам процесса;
|
||||
- бережно относиться к имуществу суда;
|
||||
- соблюдать чистоту, тишину и порядок в здании суда и на его территории.
|
||||
|
||||
### 12.10 Формы обращения к суду
|
||||
#### 12.10.1 Допустимые формы обращения
|
||||
Во время судебного заседания к суду обращаются следующим образом:
|
||||
|
||||
- **если гражданский процесс** — **«Уважаемый Суд»**;
|
||||
- **если уголовный процесс** — **«Ваша честь»**.
|
||||
|
||||
### 12.11 Порядок выступления в судебном заседании
|
||||
Свои объяснения, показания, вопросы другим участникам и ответы на вопросы участники дают **стоя**, если суд не разрешит иное.
|
||||
|
||||
#### 12.11.1 Для уголовного процесса
|
||||
Участники дают объяснение своей позиции и доказывают её, **без споров между собой**.
|
||||
Они не ведут взаимную полемику и не отвечают по кругу на тезисы друг друга, если суд прямо этого не разрешил.
|
||||
|
||||
#### 12.11.2 Для гражданского процесса
|
||||
Участники дают объяснение своей позиции и доказывают её.
|
||||
Допускается **один раз** ответить на **один основной тезис** противоположной стороны, без превращения заседания в спор между участниками.
|
||||
|
||||
### 12.12 Фото-, видео- и иная фиксация заседания
|
||||
Лица, присутствующие в зале суда и осуществляющие разрешённую судом фото- и видеосъёмку, трансляцию, запись или иную фиксацию заседания, не должны мешать порядку в судебном заседании.
|
||||
|
||||
### 12.13 Отсутствие участника и доверенное лицо
|
||||
#### 12.13.1 Участие доверенного лица
|
||||
Если потерпевший, ответчик, истец или иной участник не может присутствовать на судебном заседании, вместо него может присутствовать доверенное лицо, если такой формат допустим по делу и признан судом.
|
||||
|
||||
#### 12.13.2 Если доверенное лицо отсутствует
|
||||
Если доверенное лицо не предусмотрено либо не представлено, суд вправе провести заседание без отсутствующей стороны на основании доказательств, заранее переданных суду, в том числе через Telegram или иной официальный канал связи.
|
||||
|
||||
### 12.14 Поведение в суде и участие президента в процессе
|
||||
#### 12.14.1 В каких ролях может выступать президент
|
||||
Президент в рамках суда может выступать:
|
||||
|
||||
- как адвокат;
|
||||
- как подсудимый;
|
||||
- как лицо, исполняющее роль прокурора.
|
||||
|
||||
#### 12.14.2 Какие ограничения действуют для президента
|
||||
Однако при этом президент:
|
||||
|
||||
- не получает процессуальных преимуществ;
|
||||
@@ -1470,27 +1560,45 @@ RP-политика, законы, указы, решения органов в
|
||||
- не может требовать особого порядка только по причине должности;
|
||||
- обязан подчиняться регламенту суда наравне с другими участниками.
|
||||
|
||||
### 12.8 Ложные обращения
|
||||
### 12.15 Выдача решений и материалов дела
|
||||
Все официальные решения суда, ходы дела, постановления и иные документы выдаются участникам процесса после официального постановления суда для последующего:
|
||||
|
||||
- обжалования;
|
||||
- апелляции;
|
||||
- передачи в вышестоящие органы;
|
||||
- исполнения решения.
|
||||
|
||||
### 12.16 Ложные обращения
|
||||
Запрещено подавать ложные иски, фальшивые доказательства, поддельные обвинения и использовать суд как инструмент травли.
|
||||
|
||||
### 12.9 Решения суда
|
||||
Суд может выносить, например, следующие наказания и меры:
|
||||
### 12.17 Меры за нарушение порядка в суде и решения суда
|
||||
#### 12.17.1 Возможные меры
|
||||
За нарушение порядка в суде либо по итогам рассмотрения дела суд может применить одну или несколько мер:
|
||||
|
||||
- предупреждение;
|
||||
- удаление с судебного заседания;
|
||||
- удаление с заседания после **3 предупреждений**;
|
||||
- дополнительный штраф;
|
||||
- обязательство вернуть имущество;
|
||||
- компенсацию;
|
||||
- штраф;
|
||||
- общественные работы;
|
||||
- тюремное заключение;
|
||||
- ограничение прав;
|
||||
- временное отстранение от должности;
|
||||
- запрет на отдельные действия;
|
||||
- мут в Minecraft при неоднократных нарушениях в игровом чате;
|
||||
- мут в Discord при неоднократных нарушениях в чате или голосовых каналах;
|
||||
- наложение ареста на имущество;
|
||||
- ограничение свободы;
|
||||
- исправительные работы;
|
||||
- изъятие имущества с последующим возвращением игроку, законному владельцу либо передаче администрации по законному решению;
|
||||
- лишение права занимать определённую должность или заниматься определённой деятельностью;
|
||||
- иные законные меры, предусмотренные сервером.
|
||||
|
||||
### 12.10 Исполнение судебных решений
|
||||
### 12.18 Исполнение судебных решений
|
||||
Исполнение решений суда обеспечивает консул и исполнительная власть в пределах своих полномочий.
|
||||
|
||||
### 12.11 Пределы суда
|
||||
### 12.19 Пределы суда
|
||||
Суд не вправе легализовывать:
|
||||
|
||||
- читы;
|
||||
@@ -1500,10 +1608,11 @@ RP-политика, законы, указы, решения органов в
|
||||
- слив данных;
|
||||
- любые иные прямые нарушения основных правил сервера.
|
||||
|
||||
### 12.12 Апелляция
|
||||
### 12.20 Апелляция
|
||||
Сторона вправе обжаловать решение суда в установленном порядке. Высшей инстанцией по исключительным делам и конфликтам между органами власти выступает администрация.
|
||||
|
||||
### 12.13 Роль администрации в судебной системе
|
||||
### 12.21 Роль администрации в судебной системе
|
||||
#### 12.21.1 Функции администрации
|
||||
Администрация не обязана заменять суд в обычных спорах, но выступает:
|
||||
|
||||
- высшей инстанцией;
|
||||
@@ -1511,7 +1620,7 @@ RP-политика, законы, указы, решения органов в
|
||||
- органом вмешательства в исключительных случаях;
|
||||
- финальной стороной при конфликте между формальным порядком и безопасностью сервера.
|
||||
|
||||
### 12.14 Неисполнение судебного решения
|
||||
### 12.22 Неисполнение судебного решения
|
||||
Отказ исполнять законное решение суда может повлечь дополнительную ответственность, вплоть до вмешательства исполнительной власти или администрации.
|
||||
|
||||
---
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
---
|
||||
title: "Сюжет"
|
||||
description: "Раздел сюжета сервера."
|
||||
---
|
||||
|
||||
## Сюжет
|
||||
|
||||
СЕРЕЖА РЕСПЕШИ МНЕ СЮЖЕТИК И ВЧЕ ЧТО С НИМ СВЯЗАНО
|
||||
@@ -1,34 +0,0 @@
|
||||
---
|
||||
title: "Команда проекта"
|
||||
description: "Кто развивает сервер: роли, ответственность и зоны поддержки."
|
||||
---
|
||||
|
||||
## Состав команды
|
||||
|
||||
| Роль | Зона ответственности |
|
||||
| --- | --- |
|
||||
| Lead Admin | Архитектура мира и баланс |
|
||||
| Content Designer | Квесты, лор, события |
|
||||
| Tech Admin | Стабильность, плагины, бэкапы |
|
||||
| Community Manager | Коммуникация с игроками |
|
||||
|
||||
## Как мы работаем
|
||||
|
||||
### Принцип 1
|
||||
|
||||
Решения по балансу принимаются на основе статистики, а не эмоций.
|
||||
|
||||
### Принцип 2
|
||||
|
||||
Критические правки публикуются с changelog.
|
||||
|
||||
## Как присоединиться
|
||||
|
||||
Следи за открытыми ролями в Discord и оставляй заявку с примерами работ.
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/contacts/">Контакты / ссылки</a> · <a href="/about-server/">О сервере</a>
|
||||
</div>
|
||||
|
||||
|
||||
48
src/content/docs/templates/new-page-template.md
vendored
@@ -1,48 +0,0 @@
|
||||
---
|
||||
title: "Шаблон новой страницы"
|
||||
description: "Готовый шаблон Markdown-страницы для быстрого добавления новых материалов."
|
||||
---
|
||||
|
||||
## Копируй и используй
|
||||
|
||||
```md
|
||||
---
|
||||
title: "Название раздела"
|
||||
description: "Краткое описание страницы"
|
||||
---
|
||||
|
||||
## Введение
|
||||
|
||||
Коротко опиши, что на странице.
|
||||
|
||||
## Основной раздел
|
||||
|
||||
### Подраздел
|
||||
|
||||
- Пункт 1
|
||||
- Пункт 2
|
||||
|
||||
:::tip
|
||||
Добавляй подсказки через стандартные блоки Starlight.
|
||||
:::
|
||||
|
||||
## Таблица
|
||||
|
||||
| Колонка | Значение |
|
||||
| --- | --- |
|
||||
| Пример | Текст |
|
||||
|
||||
<div class="see-also">
|
||||
<p>Смотри также</p>
|
||||
<a href="/getting-started/">Начало игры</a>
|
||||
</div>
|
||||
```
|
||||
|
||||
## Рекомендации по структуре
|
||||
|
||||
- Один файл = одна тема.
|
||||
- Пиши короткие абзацы.
|
||||
- Используй `h2` и `h3`, чтобы оглавление было полезным.
|
||||
- Добавляй блок «Смотри также» в конце страницы.
|
||||
|
||||
|
||||
@@ -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,9 +320,26 @@ 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 {
|
||||
.sl-markdown-content h3,
|
||||
.sl-markdown-content h4 {
|
||||
font-family: 'Sora', sans-serif;
|
||||
letter-spacing: 0.005em;
|
||||
line-height: 1.24;
|
||||
@@ -346,6 +363,40 @@ starlight-menu-button button:hover {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
.sl-markdown-content h4 {
|
||||
margin-top: 1rem;
|
||||
margin-bottom: 0.36rem;
|
||||
font-size: clamp(0.96rem, 0.93rem + 0.18vw, 1.07rem);
|
||||
color: color-mix(in srgb, var(--sl-color-white) 86%, var(--wiki-blue-2));
|
||||
}
|
||||
|
||||
.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);
|
||||
@@ -370,6 +421,61 @@ starlight-menu-button button:hover {
|
||||
text-decoration-thickness: 0.07em;
|
||||
}
|
||||
|
||||
.sl-markdown-content :is(p, li, td, blockquote) a[href]:not(.sl-anchor-link):not(.map-cta-button):not(
|
||||
.map-ghost-button
|
||||
):not(.sl-link-button):not([href^='#']) {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 2.44rem;
|
||||
max-width: min(100%, 100ch);
|
||||
margin: 0.1rem 0.2rem 0.1rem 0;
|
||||
padding: 0.55rem 1rem;
|
||||
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;
|
||||
text-decoration: none;
|
||||
font-family: 'Sora', sans-serif;
|
||||
font-weight: 600;
|
||||
font-size: 0.95rem;
|
||||
letter-spacing: 0.008em;
|
||||
line-height: 1;
|
||||
overflow-wrap: anywhere;
|
||||
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;
|
||||
}
|
||||
|
||||
.sl-markdown-content :is(p, li, td, blockquote) a[href]:not(.sl-anchor-link):not(.map-cta-button):not(
|
||||
.map-ghost-button
|
||||
):not(.sl-link-button):not([href^='#']):hover {
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
transform: translateY(-1px);
|
||||
border-color: color-mix(in srgb, var(--sl-color-accent) 64%, transparent);
|
||||
box-shadow: 0 10px 18px color-mix(in srgb, var(--sl-color-accent) 24%, transparent);
|
||||
}
|
||||
|
||||
.sl-markdown-content :is(p, li, td, blockquote) a[href]:not(.sl-anchor-link):not(.map-cta-button):not(
|
||||
.map-ghost-button
|
||||
):not(.sl-link-button):not([href^='#']):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);
|
||||
}
|
||||
|
||||
.sl-markdown-content :is(p, li, td, blockquote) a[href]:not(.sl-anchor-link):not(.map-cta-button):not(
|
||||
.map-ghost-button
|
||||
):not(.sl-link-button):not([href^='#']):active {
|
||||
transform: translateY(0) scale(0.98);
|
||||
}
|
||||
|
||||
.sl-markdown-content code {
|
||||
border-radius: 0.16rem;
|
||||
border: 1px solid color-mix(in srgb, var(--sl-color-hairline) 78%, transparent);
|
||||
@@ -622,6 +728,159 @@ starlight-theme-select .caret {
|
||||
margin-bottom: 0.45rem;
|
||||
}
|
||||
|
||||
.craft-grid {
|
||||
display: grid;
|
||||
gap: 1rem;
|
||||
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||
grid-auto-rows: 1fr;
|
||||
margin: 1rem 0 1.3rem;
|
||||
}
|
||||
|
||||
.craft-grid > .craft-card {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.craft-catalog {
|
||||
margin-top: 0.95rem;
|
||||
}
|
||||
|
||||
.craft-controls {
|
||||
display: grid;
|
||||
gap: 0.72rem;
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
|
||||
.craft-search-field {
|
||||
display: grid;
|
||||
gap: 0.36rem;
|
||||
font-weight: 700;
|
||||
font-size: 0.95rem;
|
||||
color: color-mix(in srgb, var(--wiki-text) 92%, var(--sl-color-white));
|
||||
}
|
||||
|
||||
.craft-search-input {
|
||||
width: 100%;
|
||||
min-height: 2.42rem;
|
||||
border-radius: 0.18rem;
|
||||
border: 1px solid color-mix(in srgb, var(--sl-color-hairline) 82%, transparent);
|
||||
background: color-mix(in srgb, var(--wiki-card) 92%, transparent);
|
||||
color: var(--wiki-text);
|
||||
padding: 0.5rem 0.68rem;
|
||||
font: inherit;
|
||||
transition: border-color 150ms ease, box-shadow 150ms ease;
|
||||
}
|
||||
|
||||
.craft-search-input::placeholder {
|
||||
color: color-mix(in srgb, var(--wiki-muted) 78%, var(--sl-color-white));
|
||||
}
|
||||
|
||||
.craft-search-input:focus-visible {
|
||||
outline: none;
|
||||
border-color: color-mix(in srgb, var(--sl-color-accent) 68%, 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) 18%, transparent);
|
||||
}
|
||||
|
||||
.craft-filter-group {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 0.48rem;
|
||||
}
|
||||
|
||||
.craft-filter-chip {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 2.1rem;
|
||||
border-radius: 999px;
|
||||
border: 1px solid color-mix(in srgb, var(--sl-color-hairline) 85%, transparent);
|
||||
background: color-mix(in srgb, var(--wiki-card) 92%, transparent);
|
||||
color: color-mix(in srgb, var(--wiki-text) 92%, var(--sl-color-white));
|
||||
padding: 0.4rem 0.82rem;
|
||||
font-family: 'Sora', sans-serif;
|
||||
font-weight: 600;
|
||||
font-size: 0.84rem;
|
||||
letter-spacing: 0.008em;
|
||||
cursor: pointer;
|
||||
transition:
|
||||
transform 150ms ease,
|
||||
border-color 150ms ease,
|
||||
background 150ms ease,
|
||||
color 150ms ease;
|
||||
}
|
||||
|
||||
.craft-filter-chip:hover {
|
||||
transform: translateY(-1px);
|
||||
border-color: color-mix(in srgb, var(--sl-color-accent) 42%, transparent);
|
||||
}
|
||||
|
||||
.craft-filter-chip.is-active {
|
||||
border-color: color-mix(in srgb, var(--sl-color-accent) 56%, transparent);
|
||||
background: linear-gradient(
|
||||
120deg,
|
||||
color-mix(in srgb, var(--wiki-blue-2) 74%, #233145),
|
||||
color-mix(in srgb, var(--wiki-purple-2) 64%, #273850)
|
||||
);
|
||||
color: #f7fbff;
|
||||
}
|
||||
|
||||
.craft-empty {
|
||||
margin: 0.18rem 0 1.02rem;
|
||||
border: 1px dashed color-mix(in srgb, var(--sl-color-accent) 34%, transparent);
|
||||
border-radius: 0.16rem;
|
||||
background: color-mix(in srgb, var(--sl-color-accent-low) 66%, transparent);
|
||||
padding: 0.62rem 0.74rem;
|
||||
font-size: 0.93rem;
|
||||
}
|
||||
|
||||
.craft-group {
|
||||
margin-bottom: 1.15rem;
|
||||
}
|
||||
|
||||
.craft-group > h3 {
|
||||
margin-bottom: 0.58rem;
|
||||
}
|
||||
|
||||
.craft-card {
|
||||
padding: 0.82rem 0.86rem;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.craft-card:hover {
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.craft-card h3 {
|
||||
margin: 0 0 0.6rem;
|
||||
font-size: 1rem;
|
||||
line-height: 1.35;
|
||||
min-height: calc(1.35em * 2);
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.craft-card-image {
|
||||
display: block;
|
||||
width: 100%;
|
||||
aspect-ratio: 346 / 167;
|
||||
object-fit: cover;
|
||||
border-radius: 0.18rem;
|
||||
border: 1px solid color-mix(in srgb, var(--sl-color-hairline) 88%, transparent);
|
||||
background: color-mix(in srgb, #ffffff 18%, transparent);
|
||||
box-shadow: var(--sl-shadow-sm);
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
.craft-card[hidden],
|
||||
.craft-group[hidden] {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.alcohol-nav-card {
|
||||
display: block;
|
||||
color: inherit;
|
||||
@@ -690,44 +949,219 @@ 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-accent) 48%, transparent);
|
||||
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;
|
||||
text-decoration: none;
|
||||
font-family: 'Sora', sans-serif;
|
||||
font-weight: 600;
|
||||
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-ghost-button:hover {
|
||||
color: #ffffff;
|
||||
text-decoration: none;
|
||||
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);
|
||||
}
|
||||
|
||||
@media (min-width: 50rem) {
|
||||
@@ -746,6 +1180,10 @@ starlight-theme-select .caret {
|
||||
}
|
||||
|
||||
@media (max-width: 50rem) {
|
||||
.ip-main-grid {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.wiki-header {
|
||||
gap: 0.5rem;
|
||||
}
|
||||
@@ -825,4 +1263,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;
|
||||
}
|
||||
}
|
||||
|
||||