diff --git a/src/app/me/aniamtedLink.module.tsx b/src/app/me/animatedLink.module.tsx similarity index 100% rename from src/app/me/aniamtedLink.module.tsx rename to src/app/me/animatedLink.module.tsx diff --git a/src/app/modules/components/me.module.tsx b/src/app/modules/components/me.module.tsx index 53c8e1c..49ec157 100644 --- a/src/app/modules/components/me.module.tsx +++ b/src/app/modules/components/me.module.tsx @@ -7,13 +7,12 @@ import Image from 'next/image'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { timeStamp } from "../utils/time.module"; -import Footer from "./footer.module"; import Menu from "./theme_select.module"; import { Users } from "@/app/users/[name]/page"; import { formatDate } from "./card.module"; import { IconSettings, IconBell, IconStar, IconList, IconStarFilled } from '@tabler/icons-react'; -import { TransitionLink } from "@/app/me/aniamtedLink.module"; +import { TransitionLink } from "@/app/me/animatedLink.module"; const Default = ({ data, islogged, color }: { data: Query, islogged: boolean, color?: string }) => { return ( diff --git a/src/app/modules/components/openableImage.module.tsx b/src/app/modules/components/openableImage.module.tsx index 35a9974..1a85671 100644 --- a/src/app/modules/components/openableImage.module.tsx +++ b/src/app/modules/components/openableImage.module.tsx @@ -1,6 +1,6 @@ "use client"; -import { CSSProperties, useEffect, useState } from "react"; +import { CSSProperties, useState } from "react"; import NextImage from "next/image"; import Style from "@/app/styles/openableImage.module.css"; diff --git a/src/app/modules/components/search.module.tsx b/src/app/modules/components/search.module.tsx index d1c3e31..cc5a5dd 100644 --- a/src/app/modules/components/search.module.tsx +++ b/src/app/modules/components/search.module.tsx @@ -4,7 +4,6 @@ import React, { useEffect, useState } from 'react'; import Select from 'react-select'; import { CSSTransition } from 'react-transition-group'; import Styles from "@/app/styles/search.module.css" -import Image from 'next/image'; import { Category } from '@/app/interfaces'; import { CategoryEl } from './card.module'; import styleLink from '@/app/styles/tutorials/common.module.css'; diff --git a/src/app/modules/components/theme_select.module.tsx b/src/app/modules/components/theme_select.module.tsx index 8c92d0d..d0643b7 100644 --- a/src/app/modules/components/theme_select.module.tsx +++ b/src/app/modules/components/theme_select.module.tsx @@ -3,7 +3,6 @@ import { useEffect, useState } from 'react'; import { CSSTransition } from 'react-transition-group'; import Styles from '@/app/styles/theme_selector.module.css'; -import Image from 'next/image'; import { IconBucketDroplet, IconPalette, IconPhoto } from '@tabler/icons-react' import { authApi } from '../utils/api.module'; diff --git a/src/app/modules/providers.module.tsx b/src/app/modules/providers.module.tsx index 333174a..9224e4a 100644 --- a/src/app/modules/providers.module.tsx +++ b/src/app/modules/providers.module.tsx @@ -10,20 +10,6 @@ const inter = Inter({ subsets: ["latin"] }); export const getTheme = (theme: string) => { switch (theme) { - case 'default': - return { - '--main-bg-color': '#17181c', - '--main-card-color': '#262930', - '--main-element-color': '#434957', - '--main-action-color': '#00ADB5', - '--main-menu-color': '#252a30', - '--dark-hover': '#1d2025', - '--hr-color': '#596172', - '--focus-color': '#717b91', - '--category-color': '#717b91', - '--main-text-color': '#ffffff', - '--main-shadow-color': '#1d2025' - } case 'amoled': return { '--main-bg-color': '#000000', diff --git a/src/app/modules/utils/time.module.tsx b/src/app/modules/utils/time.module.tsx index 2812e1d..cb8eeb0 100644 --- a/src/app/modules/utils/time.module.tsx +++ b/src/app/modules/utils/time.module.tsx @@ -5,19 +5,19 @@ export const numbersTxt = (num: number, variations: [string, string, string]): s let text: string; if (past === 1 && num !== 11) { - text = variations[0]; // голос + text = variations[0]; // голос } else if (past >= 2 && past <= 4 && first !== 1) { - text = variations[1]; // голоса + text = variations[1]; // голоса } else { - text = variations[2]; // голосов + text = variations[2]; // голосов } return `${num} ${text}`; } export const timeStamp = (timestamp: number): string => { - const onlineTime = 300; // 5 минут в секундах - const currentTime = Math.floor(Date.now() / 1000); // текущее время в секундах + const onlineTime = 300; // 5 минут в секундах + const currentTime = Math.floor(Date.now() / 1000); // текущее время в секундах const delta = Math.round(currentTime - timestamp); if (delta < onlineTime) { diff --git a/src/app/tos/page.md b/src/app/tos/page.md deleted file mode 100644 index 0dd1711..0000000 --- a/src/app/tos/page.md +++ /dev/null @@ -1,31 +0,0 @@ -# Правила сайта - -## 1. Правила создания повязки -1.1. Все повязки должны являться повязками. Все сторонние изображения, подошедшие под их размер будут отклонены. -1.2. Запрещено использование на повязке слов/символик, запрещённых на территории РФ а так же запрещённый правилами пользования сервисами Twitch, Discord, YouTube. -1.3. Все повязки являются собственностью их автора и отражают только его точку зрения. Администрация сайта не несёт ответственности за публикуемый на сайте контент. -1.4. Запрещена публикация чужих работ без разрешения, указания автора. В подобных случаях, по заявлению автора повязки, она будет полностью удалена с сайта. Примечание: это не относится к повязкам, автор которых был утерян или прошло достаточно времени, чтобы повязка считалась работой без автора. -1.5. Запрещена повторная публикация повязок, которые уже существуют, были отклонены или удалены модерацией. - -## 2. Правила публикации текстового контента -2.1. Текстовым контентом является всё, что публикует Пользователь в формате текста (Заголовок, описание). -2.2. Запрещено использование слов и выражений, запрещённых на территории РФ, а так же правилами пользования сервисами Twitch, Discord, YouTube. -2.3. Весь текстовый контент, публикуемый Пользователем на сайте отражает только точку зрения Пользователя. Администрация сайта не несёт ответственности за публикуемый текстовый контент. - -## 3. Правила использования категорий -3.1. Все категории, указанные должны точно отражать работу. -3.2. Запрещён намеренное повышенное использование категорий. Работа с подобным нарушениям будет принудительно отклонена. -Дополнительно: Пользователь может запросить у Администрации сайта добавление новой категории. После рассмотрения запроса, категория будет доступна в редакторе всем желающим. - -## 4. Действие администрации и модерация -4.1. Окончательное решение всегда остаётся за Администрацией сайта. -4.2. Администрация сайта может в любой момент отправить повязку на повторную модерацию, отклонить после одобрения или полностью удалить. -4.3. При несоблюдении Пользователем настоящих Правил, Администрация в праве заблокировать учётную запись Пользователя без возможности разблокировки. -4.4. Если Пользователь было заблокирован в сети серверов ПепеЛенд, он автоматически блокируется на сайте. -4.5. Все работы Пользователя остаются на сайте, но не будут видны и доступны другим Пользователям. После разблокировки все работы вернуться в Мастерскую. -4.6. Модерация сети серверов ПепеЛенд в праве запросить удаление повязки и блокировку Пользователя. -4.7. Модерация сети серверов ПепеЛенд в праве запросить данные повязки и пользователя, включая: Discord username и user id. - -## 5. Общие правила -5.1. Запрещено использовать несколько аккаунтов для обхода ограничений, наложенных Администрацией или лимита в 5 одновременных повязок на проверке. -5.2. Запрещено производить на сайте действия, вызывающие проблемы с использованием сайта у других Пользователей, а так же выводящие сервера сайта из строя. \ No newline at end of file diff --git a/src/app/tutorials/aniamtedLink.module.tsx b/src/app/tutorials/animatedLink.module.tsx similarity index 91% rename from src/app/tutorials/aniamtedLink.module.tsx rename to src/app/tutorials/animatedLink.module.tsx index 10ca62a..e8a52cd 100644 --- a/src/app/tutorials/aniamtedLink.module.tsx +++ b/src/app/tutorials/animatedLink.module.tsx @@ -8,7 +8,7 @@ interface AnimatedLinkProps LinkProps { children: ReactNode; href: string; - delay?: number; // задержка перед переходом (в миллисекундах) + delay?: number; } function sleep(ms: number): Promise { diff --git a/src/app/tutorials/header.module.tsx b/src/app/tutorials/header.module.tsx index 53e9135..dde0ea3 100644 --- a/src/app/tutorials/header.module.tsx +++ b/src/app/tutorials/header.module.tsx @@ -1,7 +1,7 @@ import style_sidebar from "@/app/styles/me/sidebar.module.css"; import style_add from '@/app/styles/tutorials/common.module.css'; import { usePathname } from "next/navigation"; -import { TransitionLink } from "./aniamtedLink.module"; +import { TransitionLink } from "./animatedLink.module"; const ASide = () => { const pathname = usePathname(); diff --git a/src/app/tutorials/page.tsx b/src/app/tutorials/page.tsx index b8f5771..a83e853 100644 --- a/src/app/tutorials/page.tsx +++ b/src/app/tutorials/page.tsx @@ -30,7 +30,7 @@ export default function Home() { }) }, []) - const dat = roles.map((role) => { + const roles_data = roles.map((role) => { return (
@@ -58,7 +58,7 @@ export default function Home() { а так же имеющие определенные - {dat.length > 0 ? dat : } + {roles_data.length > 0 ? roles_data : }
} opacity="1" diff --git a/src/app/tutorials/texts.md b/src/app/tutorials/texts.md deleted file mode 100644 index 6cab5a7..0000000 --- a/src/app/tutorials/texts.md +++ /dev/null @@ -1,109 +0,0 @@ -# Повязки Pepeland - -В этом разделе вы найдете все что нужно знать о регистрации и работе на сайте, а так же о создании повязок. - -## Мастерская -Мастерская – это главное место, где вы можете найти то, что ищите. В мастерской отображаются все повязки, которые были одобрены администрацией и имеющие публичный доступ. Доступ к мастерской имеют все без исключения пользователи, как зарегистрированные, так и нет. - -## Регистрация на сайте -Регистрация разрешена только пользователям, являющимися членами Discord сервера PWGood, а так же имеющие определенные роли. При регистрации сайт сохраняет ваш никнейм с учётной записи Discord. Дальнейшее его изменение возможно только через администрацию сайта. -> [!NOTE] -> Если ваш никнейм будет содержать слова и выражения, запрещенные правилами сайта, администрация может принудительно заменить его на другой. Последующая смена будет доступна так же через администрацию. - -## Интеграции -Сайт позволяет искать скины через встроенную базу Minecraft ников, которые постоянно пополняются автоматически при поиске нового никнейма. Вы можете привязать свой Minecraft аккаунт к учётной записи PPLBandage через сервис [mc-oauth](https://github.com/Andcool-Systems/MC-OAuth_server). -Для привязки вам нужно зайти на Minecraft сервер oauth.pplbandage.ru для версии, начиная с 1.8 и получить там 6-значный код, который нужно будет ввести на странице /me/settings. - -> [!TIP] -> Сервис `mc-oauth` был разработан специально для этого сайта. Он полностью повторяет систему авторизации оригинальных серверов Minecraft и получает доступ только к никнейму и UUID. - -После привязки Minecraft аккаунта к аккаунту PPLBandage, вы сможете обновлять кэш скинов когда угодно, включать/выключать отображение вашего ника в поиске скинов в редакторе, а так же включить автоматическую загрузку скина в редакторе. - -## Публикация повязок -> [!TIP] -> Подробнее о создании повязок читайте на странице /tutorials/bandage - -Публикация повязок доступна только зарегистрированным пользователям. -Все повязки имеют информацию, содержащую название, описание и категории. -#### Ограничения информации о повязке: -- Название: не более 50 символов -- Описание: не более 300 символов -- Категории: без ограничений - -> [!NOTE] -> После создания повязки, изменить её внешний вид будет невозможно. - -При создании или изменении повязки описание можно не указывать. -После создания повязки она будет автоматически отправлена на модерацию. Модерация проходит от 24 до 48 часов. - -## Модерация повязок -Все повязки после создания должны пройти обязательную модерацию. До тех пор повязка не будет доступна из мастерской и видна по ссылке только вам. Во время модерации вы можете так же редактировать информацию о повязке, но после подтверждения повязки модерацией, изменить название и описание будет возможно только через администрацию сайта. - -В ходе модерации ваша повязка так же может быть отклонена. Это означает, что информация о ней или изображение повязки не соответствует правилам сайта. При отклонении вашей работы, вы можете узнать причины у администрации сайта. -**Отклонение повязки не означает её удаление.** При отклонении повязки вы сможете повторно запросить ее модерацию, устранив причину отказа. - -> [!NOTE] -> Вы не можете иметь одновременно более 5 повязок на проверке. Общих ограничений по количеству повязок нет. - - -## Категории -Любая повязка может иметь категории, это помогает пользователям легче искать требуемые повязки. Любая повязка может иметь неограниченное количество категорий. Категории, установленные на вашей работе должны точно описывать вашу работу. Не стоит ими злоупотреблять. -> [!WARNING] -> Злоупотребление категориями может привести к блокировке повязки. - -Некоторые категории несут больше чем информативный характер. К примеру, категория `colorable` показывает, что эта повязка имеет возможность окрашивания, и на странице повязки будет отображён соответствующий элемент для выбора цвета. - - -# Создание повязки - -На этой странице описан весь процесс создания повязки со всеми особенностями и нюансами. - -## Строение -Перед тем как начать создание повязки, нужно рассказать о её строении: -- Повязка состоит из двух слоёв, которые соединены вместе друг под другом. -- Ширина **любой** повязки должна быть 16 пикселей. -- Высота может быть любой в диапазоне от 1 до 12 пикселей включительно. -- Так как файл с повязкой состоит из одного изображения (1-й пункт), диапазон высоты итогового изображения составляет от 2 до 24 пикселей включительно, а так же быть чётным. - -## Алгоритм наложения -Также чтобы правильно создать повязку, следует понимать, что с ней будет делать сайт при наложении. -1. Разбиение одного файла на первый и второй слой: - Входной файл делится пополам по высоте (именно поэтому он должен быть чётной высоты). Верхняя половина идёт на второй слой, а нижняя на первый. -2. Адаптация под выбранную часть тела, тип рук: - Если выбран узкий тип скина, то движок повязок обрезает повязку слева и справа по одному пикселю. Учитывайте это при создании повязки! - Подробно рассказывать о адаптации повязки под правую руку и ногу знать не обязательно, нужно лишь знать то, что повязка будет выглядеть одинаково на левой и правой руке, единственное изменение, которая она претерпит – это "поворот" на 180° вокруг оси руки без отражения. -3. Окрашивание повязки в заданный цвет. Об этом подробнее в /tutorials/colorable/ -4. Финальное наложение на скин. Диапазон позиций вычисляется как 12-\*высота повязки\*. - -## Сборка повязки -После того как вы нарисовали повязку вам следует собрать её в понятный для сайта формат. - -> [!TIP] -> Если вы рисуете повязку в программах по типу Blockbench или подобных, удобнее всего будет это делать на левой руке и со стандартной моделькой скина. В таком случае будет легче всего собрать повязку. - -Для упрощения понимания я разделил сборку повязки на этапы: -1. Определение размеров повязки. - Так как ширина повязки всегда должна быть 16 пикселей, определять нужно высоту. Если у вас слои имеют различную высоту, то нужно брать **максимальную** высоту слоя. Учтите, что определенные границы первого и второго слоя должны начинаться и заканчиваться на одной координате Y. Пример: - ![ex](/public/static/tutorials/tutorial_1.png) -2. Разбиение на слои. - После определения размеров повязки, нужно разделить повязку на слои. - Создайте новый `.png` файл шириной в 16 пикселей и высотой, вдвое большей высоте повязки. Расположите второй слой повязки в верхней половине нового файла, а первый – в нижней. - -# Окрашиваемые повязки -Тут вы найдёте всё что нужно знать о процессе окрашивания повязок и как сделать это правильно. - -## Создание окрашиваемой повязки -Окрашиваемые повязки почти ничем не отличаются от обычных, единственное отличие это то, что они проходят дополнительный этап обработки на сайте. - -Для начала разберёмся с процессом окрашивания. Движок повязок проходит по каждому пикселю в исходном изображении повязки и проверяет его цвет. Если все цветовые каналы равны, то есть `r = g = b`, то движок заливает этот пиксель заданным цветом. - -> [!NOTE] -> Итоговый цвет после заливки определяется формулой `r / 255 * new_r`, где `r` – это исходное значение канала цвета, а `new_r` – это значение канала заливающего цвета. Эта формула применяется и к остальным каналам. - -Как вы уже поняли, движок повязок заливает только пиксели оттенков серого и не умеет накладывать цвет на уже существующий. - -> [!TIP] -> Если вам нужно сделать какой-либо пиксель незаливаемым, вы можете изменить значение одного из каналов цвета в этом пикселе на 1 и движок повязок пропустит его на этапе заливки. - -## Публикация окрашиваемой повязки -Публикация окрашиваемой повязки ничем не отличается от публикации обычной повязки. Но на моменте выбора категорий вам нужно выбрать категорию 'окрашиваемые'. Таким образом вы отметите свою работу как окрашиваемую и на странице повязки в мастерской будет отображён соответствующий элемент выбора цвета. \ No newline at end of file diff --git a/src/app/workshop/[id]/client_code.tsx b/src/app/workshop/[id]/client_code.tsx index 570f386..173f1ec 100644 --- a/src/app/workshop/[id]/client_code.tsx +++ b/src/app/workshop/[id]/client_code.tsx @@ -168,7 +168,8 @@ export default function Home({ data }: { data: Interfaces.Bandage }) {

Отклонено

Ваша работа была отклонена модерацией. Для получения информации обратитесь в поддержку

-
: null + + : null }
@@ -187,7 +188,7 @@ export default function Home({ data }: { data: Interfaces.Bandage }) { className={`react-select-container`} classNamePrefix="react-select" isSearchable={false} - onChange={(n, a) => setPose(n.value)} + onChange={(n, _) => setPose(n.value)} formatOptionLabel={(nick_value) => nick_value.label} /> client.current?.changeSlim(val)} value={slim} label="Тонкие руки" /> @@ -205,12 +206,18 @@ export default function Home({ data }: { data: Interfaces.Bandage }) {
- {!edit ? setEdit(true)} /> : - { - setEdit(false); - window.location.reload(); - } - } /> + {!edit ? + setEdit(true)} + /> : + { + setEdit(false); + window.location.reload(); + }} + /> }
@@ -227,20 +234,27 @@ export default function Home({ data }: { data: Interfaces.Bandage }) {
}
- { - client.current?.setParams({ position: Number((evt.target as HTMLInputElement).value) }); - } - } /> + client.current?.setParams({ position: Number((evt.target as HTMLInputElement).value) }) + } + />
- client.current?.setParams({ first_layer: val })} + client.current?.setParams({ first_layer: val })} defaultValue={true} label='Первый слой' /> - client.current?.setParams({ second_layer: val })} + client.current?.setParams({ second_layer: val })} defaultValue={true} label='Второй слой' /> - client.current?.setParams({ clear_pix: val })} + client.current?.setParams({ clear_pix: val })} defaultValue={true} label='Очищать пиксели на втором слое' /> @@ -250,7 +264,7 @@ export default function Home({ data }: { data: Interfaces.Bandage }) { className={`react-select-container`} classNamePrefix="react-select" isSearchable={false} - onChange={(n, a) => client.current?.setParams({ body_part: n.value })} + onChange={(n, _) => client.current?.setParams({ body_part: n.value })} /> true, withCredentials: true, headers: { - 'Unique-Access': process.env.TOKEN, - 'Cache-Control': 'no-cache', - 'Pragma': 'no-cache', - 'Expires': '0' + 'Unique-Access': process.env.TOKEN } }); diff --git a/src/app/workshop/create/page.tsx b/src/app/workshop/create/page.tsx index cf42014..4523679 100644 --- a/src/app/workshop/create/page.tsx +++ b/src/app/workshop/create/page.tsx @@ -90,20 +90,22 @@ export default function Home() { backgroundColor: 'var(--dark-hover)', borderRadius: '3px', fontSize: '.8rem' - }}>{Math.floor(height / 2)}px

} + }}>{Math.floor(height / 2)}px

+ }