Compare commits

...
6 Commits
Author SHA1 Message Date
robimobi 35a0d8f230 README: шапка — оригинальный мод в открытом доступе, полная сборка со всеми DLC 2026-08-19 05:45:50 +00:00
robimobi 544efaeff0 gameconfig: родной конфиг оригинальной сборки на каноничном пути common/data/ (вместо универсального ragemp.pro), + pausemenu.xml 2026-08-19 04:35:14 +00:00
robimobi 258b3ea719 Merge remote-tracking branch 'origin/main' 2026-08-19 04:35:05 +00:00
REDL Agent e946c8d9cc gameconfig: расширенные лимиты GTA V из оригинальной сборки (+ pausemenu) — без него клиент вылетал на 133 паках 2026-08-19 04:01:58 +00:00
robimobi e82c9b56de gameconfig.xml (RAGEMP.PRO, unlimited): снятие лимитов GTA V под 134 dlc-пака — client_packages/game_resources/common/data/ 2026-08-19 03:57:51 +00:00
robimobi 1a08dea36e UI: компактная типографика по всем экранам, меню 85%, фикс фоновой заставки
- Auth (вход/регистрация/восстановление/приветствие/создание перса): заголовки 6-7.5rem -> 4-4.5rem — текст больше не вылезает
- CharacterSelect: заголовок 7rem -> 4.5rem
- Bank: заголовки карточек уменьшены, отступ под иконку — «ОПЛАТА ЗА БИЗНЕС» и «МОБИЛЬНАЯ СВЯЗЬ» больше не обрезаются
- Главное меню: окно 85% экрана (было ~65% на 2K+)
- Вкладки меню (Информация/Настройки/Рефералка/Программа/Организация): гигантские заголовки 4-8rem -> 2.4-4rem, всё влезает в окно
- app-bg (заставка ELITE) показывается только на лобби-экранах — в игре за меню больше нет «квадратиков»
- client_packages/gui: свежая сборка
2026-08-19 03:42:12 +00:00
25 changed files with 5888 additions and 156 deletions
+4 -1
View File
@@ -1,6 +1,6 @@
<template> <template>
<div id="app" :class="{development: isDev}" :style="{'font-family': font}"> <div id="app" :class="{development: isDev}" :style="{'font-family': font}">
<div class="app-bg" v-if="background > 0" :style="{'background': `url(/img/backgrounds/${background}.jpg) no-repeat center`}"></div> <div class="app-bg" v-if="background > 0 && isLobbyPage" :style="{'background': `url(/img/backgrounds/${background}.jpg) no-repeat center`}"></div>
<div class="app-binoculars" v-if="isBinoculars"></div> <div class="app-binoculars" v-if="isBinoculars"></div>
<Hud v-show="!currentPage && hudShow && !inventoryEnable && !deathScreen"/> <Hud v-show="!currentPage && hudShow && !inventoryEnable && !deathScreen"/>
<DeathScreen v-if="deathScreen"/> <DeathScreen v-if="deathScreen"/>
@@ -171,6 +171,9 @@ export default {
isDev(){ isDev(){
return process.env.NODE_ENV == 'development'; return process.env.NODE_ENV == 'development';
}, },
isLobbyPage(){
return ['Auth', 'CharacterSelect', 'SelectLanguage', 'SpawnSelect', 'Customization'].includes(this.currentPage);
},
dialogMenuShow: function() { dialogMenuShow: function() {
return this.$store.state.dialogMenu.show return this.$store.state.dialogMenu.show
} }
@@ -102,20 +102,20 @@ export default {
margin: 0; margin: 0;
.title { .title {
font-family: 'Oswald', sans-serif; font-family: 'Oswald', sans-serif;
font-size: 7.5rem; font-size: 4.5rem;
line-height: 7rem; line-height: 4.6rem;
font-weight: bold; font-weight: bold;
text-transform: uppercase; text-transform: uppercase;
position: relative; position: relative;
display: block; display: block;
width: 28.5rem; width: 18rem;
&::after { &::after {
content: ""; content: "";
width: 0.2rem; width: 0.2rem;
height: 5.5rem; height: 3.6rem;
background: linear-gradient(268.14deg, #B0C724 0%, #D5EC45 23.77%, #B6D300 100%); background: linear-gradient(268.14deg, #B0C724 0%, #D5EC45 23.77%, #B6D300 100%);
top: 0.4rem; top: 0.3rem;
right: 1.85rem; right: 1.2rem;
position: absolute; position: absolute;
} }
} }
@@ -117,8 +117,8 @@ export default {
color: #FFFFFF; color: #FFFFFF;
.title { .title {
font-family: 'Oswald', sans-serif; font-family: 'Oswald', sans-serif;
font-size: 6rem; font-size: 4rem;
line-height: 5.4rem; line-height: 4.3rem;
font-weight: bold; font-weight: bold;
width: 25rem; width: 25rem;
margin: 0 0 0.5rem 0; margin: 0 0 0.5rem 0;
+7 -7
View File
@@ -65,26 +65,26 @@ export default {
margin: 0 0 1.9rem 0; margin: 0 0 1.9rem 0;
.title { .title {
font-family: 'Oswald', sans-serif; font-family: 'Oswald', sans-serif;
font-size: 7rem; font-size: 4.5rem;
line-height: 8.5rem; line-height: 5.2rem;
font-weight: 600; font-weight: 600;
text-transform: uppercase; text-transform: uppercase;
color: #FFFFFF; color: #FFFFFF;
width: 36.1rem; width: 24rem;
} }
.desc { .desc {
display: flex; display: flex;
position: absolute; position: absolute;
top: 0.5rem; top: 0.4rem;
left: 19rem; left: 14.5rem;
&::before { &::before {
content: ""; content: "";
width: 0.2rem; width: 0.2rem;
height: 5.95rem; height: 4rem;
margin: 0 1rem 0 0; margin: 0 1rem 0 0;
background: linear-gradient(268.14deg, #B0C724 0%, #D5EC45 23.77%, #B6D300 100%); background: linear-gradient(268.14deg, #B0C724 0%, #D5EC45 23.77%, #B6D300 100%);
} }
font-size: 1.5rem; font-size: 1.2rem;
text-transform: uppercase; text-transform: uppercase;
color: #FFFFFF; color: #FFFFFF;
width: 14.5rem; width: 14.5rem;
+2 -2
View File
@@ -118,8 +118,8 @@ export default {
color: #ffffff; color: #ffffff;
.title { .title {
font-family: 'Oswald', sans-serif; font-family: 'Oswald', sans-serif;
font-size: 6rem; font-size: 4rem;
line-height: 5.4rem; line-height: 4.3rem;
font-weight: bold; font-weight: bold;
width: 25rem; width: 25rem;
margin: 0 0 0.5rem 0; margin: 0 0 0.5rem 0;
+2 -2
View File
@@ -73,8 +73,8 @@ export default {
width: 25rem; width: 25rem;
&__title { &__title {
font-family: 'Oswald', sans-serif; font-family: 'Oswald', sans-serif;
font-size: 6rem; font-size: 4rem;
line-height: 5.4rem; line-height: 4.3rem;
font-weight: bold; font-weight: bold;
} }
&__text { &__text {
+5 -4
View File
@@ -257,8 +257,8 @@ export default {
} }
&-title{ &-title{
font-weight: bold; font-weight: bold;
font-size: 2.5rem; font-size: 1.8rem;
line-height: 2.5rem; line-height: 2rem;
letter-spacing: 0.03em; letter-spacing: 0.03em;
color: #000000; color: #000000;
} }
@@ -646,10 +646,11 @@ export default {
} }
&-title{ &-title{
font-weight: normal; font-weight: normal;
font-size: 1.7rem; font-size: 1.3rem;
line-height: 2.05rem; line-height: 1.6rem;
letter-spacing: 0.03em; letter-spacing: 0.03em;
margin-bottom: .55rem; margin-bottom: .55rem;
padding-right: 3.4rem;
} }
&-desc{ &-desc{
font-weight: normal; font-weight: normal;
+2 -2
View File
@@ -164,8 +164,8 @@ export default {
} }
&__title{ &__title{
font-weight: bold; font-weight: bold;
font-size: 7rem; font-size: 4.5rem;
line-height: 7rem; line-height: 4.8rem;
letter-spacing: 0.03em; letter-spacing: 0.03em;
margin-bottom: -.8rem; margin-bottom: -.8rem;
color: #FFFFFF; color: #FFFFFF;
@@ -52,13 +52,13 @@ export default {
&__side { &__side {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: 0 6.5rem 0 0; margin: 0 3rem 0 0;
.title { .title {
font-size: 5rem; font-size: 2.6rem;
line-height: 5rem; line-height: 2.8rem;
color: #fff; color: #fff;
margin: 0 0 0.5rem 0; margin: 0 0 0.5rem 0;
width: 25rem; width: 18rem;
} }
.subtitle { .subtitle {
font-size: 0.9rem; font-size: 0.9rem;
@@ -103,7 +103,7 @@ export default {
} }
&-tittle{ &-tittle{
color: #fff; color: #fff;
font-size: 5rem; font-size: 2.6rem;
line-height: 4rem; line-height: 4rem;
font-weight: 300; font-weight: 300;
} }
@@ -100,7 +100,7 @@ export default {
&__title{ &__title{
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
font-size: 4rem; font-size: 2.4rem;
margin-right: 2rem; margin-right: 2rem;
} }
&__progress{ &__progress{
@@ -119,7 +119,7 @@ export default {
&__title{ &__title{
font-style: normal; font-style: normal;
font-weight: normal; font-weight: normal;
font-size: 4rem; font-size: 2.4rem;
margin-right: 2rem; margin-right: 2rem;
} }
&__filter{ &__filter{
@@ -29,8 +29,8 @@ export default {
margin-top: 2rem; margin-top: 2rem;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
font-weight: normal; font-weight: normal;
font-size: 4rem; font-size: 2.4rem;
line-height: 4.8rem; line-height: 2.8rem;
color: rgba(255, 255, 255, 0.2); color: rgba(255, 255, 255, 0.2);
} }
&__list{ &__list{
@@ -113,8 +113,8 @@ export default {
letter-spacing: 0.03em; letter-spacing: 0.03em;
} }
&__title{ &__title{
font-size: 4rem; font-size: 2.4rem;
line-height: 4rem; line-height: 2.6rem;
color: #FFFFFF; color: #FFFFFF;
margin-bottom: .5rem; margin-bottom: .5rem;
} }
@@ -168,8 +168,8 @@ export default {
letter-spacing: 0.03em; letter-spacing: 0.03em;
} }
&__title{ &__title{
font-size: 4rem; font-size: 2.4rem;
line-height: 4rem; line-height: 2.6rem;
color: #FFFFFF; color: #FFFFFF;
margin-bottom: .5rem; margin-bottom: .5rem;
} }
@@ -120,8 +120,8 @@ export default {
width: 10rem; width: 10rem;
} }
&_text{ &_text{
font-size: 5rem; font-size: 2.6rem;
line-height: 5rem; line-height: 2.8rem;
letter-spacing: .06rem; letter-spacing: .06rem;
&:first-child{ &:first-child{
text-align: right;; text-align: right;;
@@ -204,8 +204,8 @@ export default {
margin-top: .2rem; margin-top: .2rem;
} }
&_number{ &_number{
font-size: 8rem; font-size: 4rem;
line-height: 6rem; line-height: 3.4rem;
} }
&_copy{ &_copy{
font-size: 1.2rem; font-size: 1.2rem;
@@ -73,8 +73,8 @@ export default {
width: 20rem; width: 20rem;
min-height: 30rem; min-height: 30rem;
&-tittle{ &-tittle{
font-size: 5rem; font-size: 2.6rem;
line-height: 6rem; line-height: 3rem;
font-weight: normal; font-weight: normal;
} }
&-subtittle{ &-subtittle{
+109 -109
View File
@@ -1,4 +1,4 @@
.options-menu-root { .options-menu-root {
--primary-color: #6d55a6; --primary-color: #6d55a6;
--primary-hover: #866ac7; --primary-hover: #866ac7;
--bg-main: rgba(15, 15, 18, 0.98); --bg-main: rgba(15, 15, 18, 0.98);
@@ -14,7 +14,7 @@
--bg-header: rgba(0, 0, 0, 0.06); --bg-header: rgba(0, 0, 0, 0.06);
} }
.options-menu-root, .options-menu-root * { .options-menu-root, .options-menu-root * {
margin: 0; margin: 0;
padding: 0; padding: 0;
box-sizing: border-box; box-sizing: border-box;
@@ -27,15 +27,15 @@
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;
} }
.options-menu-root i, .options-menu-root i,
.options-menu-root [class^="fa-"], .options-menu-root [class^="fa-"],
.options-menu-root [class*=" fa-"] { .options-menu-root [class*=" fa-"] {
font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands", sans-serif !important; font-family: "Font Awesome 6 Free", "Font Awesome 6 Brands", sans-serif !important;
} }
/* масштаб html font-size задаёт App.vue (rem-скейлинг всего интерфейса) */ /* масштаб html font-size задаёт App.vue (rem-скейлинг всего интерфейса) */
.options-menu-root { .options-menu-root {
background: transparent; background: transparent;
overflow: hidden; overflow: hidden;
height: 100vh; height: 100vh;
@@ -46,7 +46,7 @@
font-size: 0.8rem; font-size: 0.8rem;
} }
.options-menu-root { .options-menu-root {
width: 100%; width: 100%;
height: 100%; height: 100%;
display: flex; display: flex;
@@ -54,11 +54,11 @@
justify-content: center; justify-content: center;
} }
.options-menu-root .app-container { .options-menu-root .app-container {
width: 90%; width: 85%;
height: 85%; height: 85%;
max-width: 64rem; max-width: 92rem;
max-height: 40rem; max-height: 46.5rem;
min-width: 48rem; min-width: 48rem;
min-height: 30rem; min-height: 30rem;
background: var(--bg-main); background: var(--bg-main);
@@ -72,12 +72,12 @@
transition: opacity 0.4s ease, transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); transition: opacity 0.4s ease, transform 0.4s cubic-bezier(0.2, 0.8, 0.2, 1);
} }
.options-menu-root .app-container.show { .options-menu-root .app-container.show {
opacity: 1; opacity: 1;
transform: none; transform: none;
} }
.options-menu-root .sidebar { .options-menu-root .sidebar {
width: 5.5rem; width: 5.5rem;
height: 100%; height: 100%;
background: rgba(0, 0, 0, 0.2); background: rgba(0, 0, 0, 0.2);
@@ -87,7 +87,7 @@
padding: 1.2rem 0; padding: 1.2rem 0;
} }
.options-menu-root .logo-container { .options-menu-root .logo-container {
width: var(--element-size); width: var(--element-size);
height: var(--element-size); height: var(--element-size);
background: var(--bg-card); background: var(--bg-card);
@@ -98,19 +98,19 @@
margin-bottom: 1rem; margin-bottom: 1rem;
} }
.options-menu-root .logo-container i { .options-menu-root .logo-container i {
font-size: 1rem; font-size: 1rem;
color: var(--text-muted); color: var(--text-muted);
} }
.options-menu-root .nav-menu { .options-menu-root .nav-menu {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.5rem; gap: 0.5rem;
flex: 1; flex: 1;
} }
.options-menu-root .nav-item { .options-menu-root .nav-item {
width: var(--element-size); width: var(--element-size);
height: var(--element-size); height: var(--element-size);
background: transparent; background: transparent;
@@ -125,23 +125,23 @@
position: relative; position: relative;
} }
.options-menu-root .nav-item i { .options-menu-root .nav-item i {
font-size: 0.9rem; font-size: 0.9rem;
color: inherit; color: inherit;
transition: color 0.3s ease; transition: color 0.3s ease;
} }
.options-menu-root .nav-item:hover { .options-menu-root .nav-item:hover {
color: var(--text-main); color: var(--text-main);
background: var(--bg-card-hover); background: var(--bg-card-hover);
} }
.options-menu-root .nav-item.active { .options-menu-root .nav-item.active {
background: var(--primary-color); background: var(--primary-color);
color: #ffffff; color: #ffffff;
} }
.options-menu-root .nav-item::before { .options-menu-root .nav-item::before {
content: attr(data-label); content: attr(data-label);
position: absolute; position: absolute;
left: 3.5rem; left: 3.5rem;
@@ -164,16 +164,16 @@
z-index: 100; z-index: 100;
} }
.options-menu-root .nav-item:hover::before { .options-menu-root .nav-item:hover::before {
opacity: 1; opacity: 1;
transform: translateY(-50%) translateX(0); transform: translateY(-50%) translateX(0);
} }
.options-menu-root .nav-item.active::before { .options-menu-root .nav-item.active::before {
color: var(--primary-color); color: var(--primary-color);
} }
.options-menu-root .main-content { .options-menu-root .main-content {
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -182,7 +182,7 @@
position: relative; position: relative;
} }
.options-menu-root .top-header { .options-menu-root .top-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -191,7 +191,7 @@
background: var(--bg-header); background: var(--bg-header);
} }
.options-menu-root .content-area-wrapper { .options-menu-root .content-area-wrapper {
flex: 1; flex: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@@ -201,38 +201,38 @@
scroll-padding-top: 1.2rem; scroll-padding-top: 1.2rem;
} }
.options-menu-root .content-area-wrapper::-webkit-scrollbar { .options-menu-root .content-area-wrapper::-webkit-scrollbar {
width: 0.2rem; width: 0.2rem;
} }
.options-menu-root .content-area-wrapper::-webkit-scrollbar-track { .options-menu-root .content-area-wrapper::-webkit-scrollbar-track {
background: transparent; background: transparent;
} }
.options-menu-root .content-area-wrapper::-webkit-scrollbar-thumb { .options-menu-root .content-area-wrapper::-webkit-scrollbar-thumb {
background: var(--border-color); background: var(--border-color);
border-radius: 0.5rem; border-radius: 0.5rem;
} }
.options-menu-root .header-left { .options-menu-root .header-left {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.options-menu-root .title-group h1 { .options-menu-root .title-group h1 {
font-size: 1.1rem; font-size: 1.1rem;
font-weight: 800; font-weight: 800;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.06rem; letter-spacing: 0.06rem;
} }
.options-menu-root .header-right { .options-menu-root .header-right {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 1rem; gap: 1rem;
} }
.options-menu-root .header-balance { .options-menu-root .header-balance {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.5rem; gap: 0.5rem;
@@ -240,11 +240,11 @@
font-weight: 700; font-weight: 700;
} }
.options-menu-root .header-balance i { .options-menu-root .header-balance i {
color: var(--primary-color); color: var(--primary-color);
} }
.options-menu-root .donate-btn { .options-menu-root .donate-btn {
background: rgba(255, 255, 255, 0.08); background: rgba(255, 255, 255, 0.08);
border: none; border: none;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
@@ -262,18 +262,18 @@
transform: translateZ(0); transform: translateZ(0);
} }
.options-menu-root .donate-btn i { .options-menu-root .donate-btn i {
font-size: 0.9rem; font-size: 0.9rem;
color: inherit; color: inherit;
} }
.options-menu-root .donate-btn:hover { .options-menu-root .donate-btn:hover {
background: rgba(255, 255, 255, 0.15); background: rgba(255, 255, 255, 0.15);
color: #ffffff; color: #ffffff;
opacity: 1; opacity: 1;
} }
.options-menu-root .card-action-btn { .options-menu-root .card-action-btn {
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
border: 0.05rem solid rgba(255, 255, 255, 0.05); border: 0.05rem solid rgba(255, 255, 255, 0.05);
color: rgba(255, 255, 255, 0.7); color: rgba(255, 255, 255, 0.7);
@@ -293,17 +293,17 @@
width: fit-content; width: fit-content;
} }
.options-menu-root .card-action-btn:hover { .options-menu-root .card-action-btn:hover {
background: rgba(255, 255, 255, 0.1); background: rgba(255, 255, 255, 0.1);
color: #ffffff; color: #ffffff;
border-color: rgba(255, 255, 255, 0.1); border-color: rgba(255, 255, 255, 0.1);
} }
.options-menu-root .card-action-btn i { .options-menu-root .card-action-btn i {
font-size: 0.7rem; font-size: 0.7rem;
} }
.options-menu-root .stat-toggle-group { .options-menu-root .stat-toggle-group {
display: flex; display: flex;
background: rgba(0, 0, 0, 0.3); background: rgba(0, 0, 0, 0.3);
padding: 0.2rem; padding: 0.2rem;
@@ -312,7 +312,7 @@
width: fit-content; width: fit-content;
} }
.options-menu-root .stat-toggle-item { .options-menu-root .stat-toggle-item {
padding: 0.3rem 0.7rem; padding: 0.3rem 0.7rem;
border-radius: 0.35rem; border-radius: 0.35rem;
font-size: 0.55rem; font-size: 0.55rem;
@@ -326,35 +326,35 @@
letter-spacing: 0.025rem; letter-spacing: 0.025rem;
} }
.options-menu-root .stat-toggle-item:hover { .options-menu-root .stat-toggle-item:hover {
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
} }
.options-menu-root .stat-toggle-item.active { .options-menu-root .stat-toggle-item.active {
background: var(--primary-color); background: var(--primary-color);
color: #ffffff; color: #ffffff;
box-shadow: 0 0.1rem 0.4rem rgba(109, 85, 166, 0.3); box-shadow: 0 0.1rem 0.4rem rgba(109, 85, 166, 0.3);
} }
.options-menu-root .skill-card .card-main-row { .options-menu-root .skill-card .card-main-row {
display: none; display: none;
} }
.options-menu-root .skill-card .card-label { .options-menu-root .skill-card .card-label {
font-size: 0.8rem; font-size: 0.8rem;
margin-bottom: 0.6rem; margin-bottom: 0.6rem;
color: #ffffff; color: #ffffff;
} }
.options-menu-root .skill-card-content { .options-menu-root .skill-card-content {
width: 100%; width: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.4rem; gap: 0.4rem;
} }
.options-menu-root .skill-desc { .options-menu-root .skill-desc {
font-size: 0.65rem; font-size: 0.65rem;
color: rgba(255, 255, 255, 0.4); color: rgba(255, 255, 255, 0.4);
line-height: 1.4; line-height: 1.4;
@@ -362,33 +362,33 @@
min-height: 2rem; min-height: 2rem;
} }
.options-menu-root .skill-stats-row { .options-menu-root .skill-stats-row {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: flex-end; align-items: flex-end;
margin-bottom: 0.3rem; margin-bottom: 0.3rem;
} }
.options-menu-root .skill-progress-label { .options-menu-root .skill-progress-label {
font-size: 0.65rem; font-size: 0.65rem;
color: rgba(255, 255, 255, 0.4); color: rgba(255, 255, 255, 0.4);
} }
.options-menu-root .skill-progress-label b { .options-menu-root .skill-progress-label b {
color: #ffffff; color: #ffffff;
} }
.options-menu-root .skill-val-label { .options-menu-root .skill-val-label {
font-size: 0.65rem; font-size: 0.65rem;
font-weight: 700; font-weight: 700;
color: #FFFFFF66; color: #FFFFFF66;
} }
.options-menu-root .skill-val-label b { .options-menu-root .skill-val-label b {
color: #ffffff; color: #ffffff;
} }
.options-menu-root .skill-bar-bg { .options-menu-root .skill-bar-bg {
width: 100%; width: 100%;
height: 0.25rem; height: 0.25rem;
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
@@ -396,14 +396,14 @@
overflow: hidden; overflow: hidden;
} }
.options-menu-root .skill-bar-fill { .options-menu-root .skill-bar-fill {
height: 100%; height: 100%;
background: var(--primary-color); background: var(--primary-color);
box-shadow: 0 0 0.5rem rgba(109, 85, 166, 0.5); box-shadow: 0 0 0.5rem rgba(109, 85, 166, 0.5);
} }
.options-menu-root .modal-overlay { .options-menu-root .modal-overlay {
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
@@ -420,12 +420,12 @@
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
} }
.options-menu-root .modal-overlay.show { .options-menu-root .modal-overlay.show {
opacity: 1; opacity: 1;
pointer-events: all; pointer-events: all;
} }
.options-menu-root .modal-window { .options-menu-root .modal-window {
width: 25rem; width: 25rem;
background: var(--bg-main); background: var(--bg-main);
border: 0.05rem solid var(--border-color); border: 0.05rem solid var(--border-color);
@@ -438,11 +438,11 @@
overflow-y: auto; overflow-y: auto;
} }
.options-menu-root .modal-window.wide { .options-menu-root .modal-window.wide {
width: 60rem; width: 60rem;
} }
.options-menu-root .modal-subtitle-row { .options-menu-root .modal-subtitle-row {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -450,23 +450,23 @@
padding: 0 0.2rem; padding: 0 0.2rem;
} }
.options-menu-root .modal-subtitle { .options-menu-root .modal-subtitle {
font-size: 0.65rem; font-size: 0.65rem;
color: var(--text-muted); color: var(--text-muted);
} }
.options-menu-root .modal-warnings { .options-menu-root .modal-warnings {
font-size: 0.65rem; font-size: 0.65rem;
color: var(--text-muted); color: var(--text-muted);
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.025rem; letter-spacing: 0.025rem;
} }
.options-menu-root .modal-warnings b { .options-menu-root .modal-warnings b {
color: #ffffff; color: #ffffff;
} }
.options-menu-root .punishment-table { .options-menu-root .punishment-table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
background: rgba(255, 255, 255, 0.01); background: rgba(255, 255, 255, 0.01);
@@ -474,7 +474,7 @@
overflow: hidden; overflow: hidden;
} }
.options-menu-root .punishment-table th { .options-menu-root .punishment-table th {
text-align: left; text-align: left;
font-size: 0.65rem; font-size: 0.65rem;
font-weight: 600; font-weight: 600;
@@ -485,24 +485,24 @@
letter-spacing: 0.025rem; letter-spacing: 0.025rem;
} }
.options-menu-root .punishment-table td { .options-menu-root .punishment-table td {
padding: 0.8rem; padding: 0.8rem;
font-size: 0.65rem; font-size: 0.65rem;
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
border-top: 0.05rem solid rgba(255, 255, 255, 0.03); border-top: 0.05rem solid rgba(255, 255, 255, 0.03);
} }
.options-menu-root .punishment-table .admin-cell { .options-menu-root .punishment-table .admin-cell {
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
font-weight: 600; font-weight: 600;
} }
.options-menu-root .punishment-table .reason-cell { .options-menu-root .punishment-table .reason-cell {
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
max-width: 15rem; max-width: 15rem;
} }
.options-menu-root .punishment-table .type-tag { .options-menu-root .punishment-table .type-tag {
background: transparent; background: transparent;
padding: 0; padding: 0;
font-weight: 700; font-weight: 700;
@@ -523,11 +523,11 @@
.type-tag.unban, .type-tag.unban,
.type-tag.unhardban { color: #4caf50; } .type-tag.unhardban { color: #4caf50; }
.options-menu-root .modal-overlay.show .modal-window { .options-menu-root .modal-overlay.show .modal-window {
transform: none; transform: none;
} }
.options-menu-root .modal-header { .options-menu-root .modal-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -536,13 +536,13 @@
border-bottom: 0.05rem solid var(--border-color); border-bottom: 0.05rem solid var(--border-color);
} }
.options-menu-root .modal-header h3 { .options-menu-root .modal-header h3 {
font-size: 0.9rem; font-size: 0.9rem;
text-transform: uppercase; text-transform: uppercase;
letter-spacing: 0.05rem; letter-spacing: 0.05rem;
} }
.options-menu-root .modal-close { .options-menu-root .modal-close {
background: rgba(255, 255, 255, 0.05); background: rgba(255, 255, 255, 0.05);
border: none; border: none;
width: 1.6rem; width: 1.6rem;
@@ -555,12 +555,12 @@
transition: var(--transition); transition: var(--transition);
} }
.options-menu-root .modal-close:hover { .options-menu-root .modal-close:hover {
background: rgba(255, 71, 71, 0.2); background: rgba(255, 71, 71, 0.2);
color: #ff4747; color: #ff4747;
} }
.options-menu-root .modal-content { .options-menu-root .modal-content {
max-height: 20rem; max-height: 20rem;
overflow-y: auto; overflow-y: auto;
padding-right: 0.4rem; padding-right: 0.4rem;
@@ -569,7 +569,7 @@
.modal-content::-webkit-scrollbar { width: 0.2rem; } .modal-content::-webkit-scrollbar { width: 0.2rem; }
.modal-content::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 0.2rem; } .modal-content::-webkit-scrollbar-thumb { background: var(--border-color); border-radius: 0.2rem; }
.options-menu-root .close-btn { .options-menu-root .close-btn {
background: transparent; background: transparent;
border: none; border: none;
padding: 0; padding: 0;
@@ -580,7 +580,7 @@
transition: var(--transition); transition: var(--transition);
} }
.options-menu-root .close-btn .exit-text { .options-menu-root .close-btn .exit-text {
font-size: 0.7rem; font-size: 0.7rem;
font-weight: 700; font-weight: 700;
color: rgba(255, 255, 255, 0.9); color: rgba(255, 255, 255, 0.9);
@@ -588,7 +588,7 @@
opacity: 0.8; opacity: 0.8;
} }
.options-menu-root .close-btn .key-hint { .options-menu-root .close-btn .key-hint {
background: #ffffff; background: #ffffff;
color: #000000; color: #000000;
border: 0.05rem solid #ffffff; border: 0.05rem solid #ffffff;
@@ -602,27 +602,27 @@
transform: translateZ(0); transform: translateZ(0);
} }
.options-menu-root .close-btn .key-hint:hover { .options-menu-root .close-btn .key-hint:hover {
background: #e0e0e0; background: #e0e0e0;
border-color: #e0e0e0; border-color: #e0e0e0;
} }
.options-menu-root .close-btn .key-hint:active { .options-menu-root .close-btn .key-hint:active {
transform: scale(0.95); transform: scale(0.95);
} }
.options-menu-root .content-chapter { .options-menu-root .content-chapter {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 0.8rem; gap: 0.8rem;
margin-bottom: 2.4rem; margin-bottom: 2.4rem;
} }
.options-menu-root .content-chapter:not(:first-child) { .options-menu-root .content-chapter:not(:first-child) {
margin-top: 1.2rem; margin-top: 1.2rem;
} }
.options-menu-root .chapter-title { .options-menu-root .chapter-title {
font-size: 0.7rem; font-size: 0.7rem;
font-weight: 700; font-weight: 700;
text-transform: uppercase; text-transform: uppercase;
@@ -634,36 +634,36 @@
gap: 0.8rem; gap: 0.8rem;
} }
.options-menu-root .chapter-title::after { .options-menu-root .chapter-title::after {
content: ''; content: '';
flex: 1; flex: 1;
height: 0.05rem; height: 0.05rem;
background: linear-gradient(to right, rgba(255, 255, 255, 0.2), transparent); background: linear-gradient(to right, rgba(255, 255, 255, 0.2), transparent);
} }
.options-menu-root .character-grid { .options-menu-root .character-grid {
display: grid; display: grid;
grid-template-columns: repeat(6, 1fr); grid-template-columns: repeat(6, 1fr);
gap: 0.8rem; gap: 0.8rem;
} }
.options-menu-root .info-card.span-3 { .options-menu-root .info-card.span-3 {
grid-column: span 3; grid-column: span 3;
} }
.options-menu-root .info-card.span-2 { .options-menu-root .info-card.span-2 {
grid-column: span 2; grid-column: span 2;
} }
.options-menu-root .info-card.span-4 { .options-menu-root .info-card.span-4 {
grid-column: span 4; grid-column: span 4;
} }
.options-menu-root .info-card.span-6 { .options-menu-root .info-card.span-6 {
grid-column: span 6; grid-column: span 6;
} }
.options-menu-root .info-card { .options-menu-root .info-card {
position: relative; position: relative;
background: var(--bg-header); background: var(--bg-header);
border: 0.05rem solid rgba(255, 255, 255, 0.05); border: 0.05rem solid rgba(255, 255, 255, 0.05);
@@ -677,7 +677,7 @@
cursor: default; cursor: default;
} }
.options-menu-root .card-label { .options-menu-root .card-label {
font-size: 0.6rem; font-size: 0.6rem;
color: var(--text-muted); color: var(--text-muted);
font-weight: 700; font-weight: 700;
@@ -686,7 +686,7 @@
z-index: 1; z-index: 1;
} }
.options-menu-root .card-main-row { .options-menu-root .card-main-row {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
@@ -695,7 +695,7 @@
margin: 0.4rem 0; margin: 0.4rem 0;
} }
.options-menu-root .card-main-val { .options-menu-root .card-main-val {
font-size: 1.2rem; font-size: 1.2rem;
font-weight: 800; font-weight: 800;
color: #ffffff; color: #ffffff;
@@ -703,7 +703,7 @@
letter-spacing: -0.025rem; letter-spacing: -0.025rem;
} }
.options-menu-root .card-sub-info { .options-menu-root .card-sub-info {
font-size: 0.6rem; font-size: 0.6rem;
color: rgba(255, 255, 255, 0.5); color: rgba(255, 255, 255, 0.5);
display: flex; display: flex;
@@ -713,15 +713,15 @@
font-weight: 500; font-weight: 500;
} }
.options-menu-root .card-sub-info i { .options-menu-root .card-sub-info i {
color: var(--text-muted); color: var(--text-muted);
} }
.options-menu-root .value-white { .options-menu-root .value-white {
color: #ffffff; color: #ffffff;
} }
.options-menu-root .card-sub-info>span { .options-menu-root .card-sub-info>span {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 0.4rem; gap: 0.4rem;
@@ -734,7 +734,7 @@
letter-spacing: 0.01rem; letter-spacing: 0.01rem;
} }
.options-menu-root .card-icon { .options-menu-root .card-icon {
position: absolute; position: absolute;
right: -0.5rem; right: -0.5rem;
bottom: -1rem; bottom: -1rem;
@@ -746,7 +746,7 @@
pointer-events: none; pointer-events: none;
} }
.options-menu-root .chapter-nav { .options-menu-root .chapter-nav {
position: absolute; position: absolute;
right: 1.2rem; right: 1.2rem;
top: 50%; top: 50%;
@@ -766,7 +766,7 @@
box-shadow: 0 0.75rem 2.5rem rgba(0, 0, 0, 0.5), inset 0 0 0.5rem rgba(255, 255, 255, 0.02); box-shadow: 0 0.75rem 2.5rem rgba(0, 0, 0, 0.5), inset 0 0 0.5rem rgba(255, 255, 255, 0.02);
} }
.options-menu-root .chapter-nav::before { .options-menu-root .chapter-nav::before {
content: ''; content: '';
position: absolute; position: absolute;
top: 1.35rem; top: 1.35rem;
@@ -777,13 +777,13 @@
z-index: -1; z-index: -1;
} }
.options-menu-root .chapter-nav.active { .options-menu-root .chapter-nav.active {
opacity: 1; opacity: 1;
pointer-events: all; pointer-events: all;
transform: translateY(-50%) translateX(0); transform: translateY(-50%) translateX(0);
} }
.options-menu-root .chapter-indicator { .options-menu-root .chapter-indicator {
position: absolute; position: absolute;
top: 0.9rem; top: 0.9rem;
left: 0.55rem; left: 0.55rem;
@@ -798,7 +798,7 @@
box-shadow: 0 0 0.75rem rgba(109, 85, 166, 0.5); box-shadow: 0 0 0.75rem rgba(109, 85, 166, 0.5);
} }
.options-menu-root .chapter-nav-item { .options-menu-root .chapter-nav-item {
width: 1.4rem; width: 1.4rem;
height: 1.4rem; height: 1.4rem;
margin: 0.05rem 0; margin: 0.05rem 0;
@@ -816,7 +816,7 @@
z-index: 1; z-index: 1;
} }
.options-menu-root .chapter-nav-item::after { .options-menu-root .chapter-nav-item::after {
content: ''; content: '';
width: 0.4rem; width: 0.4rem;
height: 0.4rem; height: 0.4rem;
@@ -825,17 +825,17 @@
transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1); transition: all 0.4s cubic-bezier(0.34, 1.56, 0.64, 1);
} }
.options-menu-root .chapter-nav-item:hover::after { .options-menu-root .chapter-nav-item:hover::after {
background: rgba(255, 255, 255, 0.5); background: rgba(255, 255, 255, 0.5);
transform: scale(1.5); transform: scale(1.5);
} }
.options-menu-root .chapter-nav-item.active::after { .options-menu-root .chapter-nav-item.active::after {
background: #ffffff; background: #ffffff;
transform: scale(0); transform: scale(0);
} }
.options-menu-root .chapter-nav-item::before { .options-menu-root .chapter-nav-item::before {
content: attr(data-label); content: attr(data-label);
position: absolute; position: absolute;
right: 2rem; right: 2rem;
@@ -857,12 +857,12 @@
box-shadow: 0 0.4rem 1.25rem rgba(0, 0, 0, 0.4); box-shadow: 0 0.4rem 1.25rem rgba(0, 0, 0, 0.4);
} }
.options-menu-root .chapter-nav-item:hover::before { .options-menu-root .chapter-nav-item:hover::before {
opacity: 1; opacity: 1;
transform: translateY(-50%) translateX(0); transform: translateY(-50%) translateX(0);
} }
.options-menu-root .chapter-nav-item.active::before { .options-menu-root .chapter-nav-item.active::before {
color: var(--primary-color); color: var(--primary-color);
font-weight: 900; font-weight: 900;
} }
+5
View File
@@ -20,6 +20,11 @@
(иначе падение «Couldn't find a valid ICU package» сразу после старта пакетов). (иначе падение «Couldn't find a valid ICU package» сразу после старта пакетов).
3. **В `settings.json` ДВЕ секции про базу — заполняйте обе:** `ConnectionStrings` (EF Core) и отдельная секция `MySQL` (legacy-SDK мода: Server/User/Password/DataBase/Port). Если заполнить только первую — мод упадёт на `Whistler.SDK.MySQL` с таймаутом коннекта. 3. **В `settings.json` ДВЕ секции про базу — заполняйте обе:** `ConnectionStrings` (EF Core) и отдельная секция `MySQL` (legacy-SDK мода: Server/User/Password/DataBase/Port). Если заполнить только первую — мод упадёт на `Whistler.SDK.MySQL` с таймаутом коннекта.
4. **gameconfig.xml обязателен.** В `client_packages/game_resources/common/data/gameconfig.xml`
лежит расширенный конфиг лимитов GTA V (архетипы 64000, интерьеры 300, анимированные здания 1200).
Без него клиент вылетает при загрузке 133 паков — ванильных пулов не хватает. Он уже в комплекте;
если менять — берите версию, поднимающую лимиты (напр. gameconfig от ragemp.pro), не ванильную.
Также: в `conf.json` поле `bind` должно быть `0.0.0.0` для публичного сервера (в dev-конфиге может стоять 127.0.0.1 — тогда снаружи никто не подключится). Также: в `conf.json` поле `bind` должно быть `0.0.0.0` для публичного сервера (в dev-конфиге может стоять 127.0.0.1 — тогда снаружи никто не подключится).
Пошагово: что поставить, какие команды выполнить, как поднять веб-сервис локализации и как зайти в игру. Разделы: [Linux](#linux-ubuntudebian) · [Windows](#windows-10--server) · [Сервис локализации](#сервис-локализации-api) · [Первый вход](#первый-вход-в-игру) · [Типовые проблемы](#типовые-проблемы). Пошагово: что поставить, какие команды выполнить, как поднять веб-сервис локализации и как зайти в игру. Разделы: [Linux](#linux-ubuntudebian) · [Windows](#windows-10--server) · [Сервис локализации](#сервис-локализации-api) · [Первый вход](#первый-вход-в-игру) · [Типовые проблемы](#типовые-проблемы).
+3
View File
@@ -1,5 +1,8 @@
# Whistler — гейммод JUST RP (первая итерация) # Whistler — гейммод JUST RP (первая итерация)
> 📦 **Оригинальный мод в открытом доступе — полная рабочая сборка со всеми DLC.**
> Здесь лежит всё целиком: исходники сервера и интерфейса, все **134 DLC-пака (3.4 ГБ)** — мэрия, LSPD, больницы и ещё 20+ интерьеров, весь автопарк (~86 машин), одежда и карты, родной `gameconfig.xml` под эти паки, готовые базы и пошаговая инструкция. Клонируйте и запускайте свой сервер — [INSTALL.md](INSTALL.md).
> 🚀 Проект живёт при поддержке **[REDL.IO](https://redl.io) — AI Game Hosting**: хостинг игровых серверов со встроенным ИИ-агентом, который сам устанавливает и настраивает моды. Хочешь поднять этот мод без единой команды — закажи сервер на [redl.io](https://redl.io) и просто напиши ИИ в чате: «разверни мод Whistler». Живая витрина: **https://game-whistler-1.redl.app** · Подробнее: [INSTALL.md](INSTALL.md). > 🚀 Проект живёт при поддержке **[REDL.IO](https://redl.io) — AI Game Hosting**: хостинг игровых серверов со встроенным ИИ-агентом, который сам устанавливает и настраивает моды. Хочешь поднять этот мод без единой команды — закажи сервер на [redl.io](https://redl.io) и просто напиши ИИ в чате: «разверни мод Whistler». Живая витрина: **https://game-whistler-1.redl.app** · Подробнее: [INSTALL.md](INSTALL.md).
**Whistler** — полноценный RP-гейммод для GTA V на платформе **RAGE:MP**: серверная логика на C#, интерфейс на Vue 2, база на MySQL. Это первая версия мода проекта JUST RP — разрабатывалась локально до перехода проекта на нынешнюю базу. Разработка остановлена в мае 2026; код сохранён здесь целиком (без секретов). **Whistler** — полноценный RP-гейммод для GTA V на платформе **RAGE:MP**: серверная логика на C#, интерфейс на Vue 2, база на MySQL. Это первая версия мода проекта JUST RP — разрабатывалась локально до перехода проекта на нынешнюю базу. Разработка остановлена в мае 2026; код сохранён здесь целиком (без секретов).
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -26,3 +26,10 @@ Cullinan, Mitsubishi Evo IX, Ford Focus ST, полицейские Buffalo (`buf
Паки лежат в `client_packages/game_resources/dlcpacks/` — сервер отдаёт их клиенту автоматически Паки лежат в `client_packages/game_resources/dlcpacks/` — сервер отдаёт их клиенту автоматически
при подключении, отдельной настройки не нужно. при подключении, отдельной настройки не нужно.
## gameconfig.xml — обязателен
Рядом лежит `../common/data/gameconfig.xml` — расширенный конфиг лимитов GTA V из оригинальной
сборки мода (архетипы 64000 вместо ванильных 41000, интерьеры 300, анимированные здания 1200,
физика 1450). **Без него игра вылетает** при загрузке такого количества паков — стандартных пулов
GTA не хватает. Файл раздаётся клиенту вместе с ресурсами, ставить вручную ничего не нужно.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long