• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    Ошибка: Ваша версия Grand Theft Auto V не поддерживается RAGE Multiplayer.
    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

FAQ Открываем Admin Panel Majestic

rizzaqq

Начинающий специалист
BackEnd developer
14 Янв 2025
286
68
70
Заходим на https://admin.majestic-files.net/
Открываем консоль и вписываем
JavaScript:
(function () {
    const ALL_RIGHTS = [
        'settingsRights','settingsRightsOverride','settingsAttackOnTheArmy',
        'settingsPlantWeedTime','settingsMinigames','settingsServerSettings',
        'settingsServerMassSettings','settingsForBeginners','betBoom','console',
        'bonusCodes','families','familyPlayers','familyVehicles','findUser',
        'findAccount','findItems','findVehicle','findInviteCode','findTelegramId',
        'findRgscIdsByAccountIds','findAnyServer','users','usersAllServers',
        'accounts','accountsAllServers','lawyers','lawyersAllServers','deposits',
        'depositsAllServers','skills','skillsAllServers','electionCandidates',
        'electionCandidatesAllServers','rouletteItems','rouletteItemsAllServers',
        'countItems','countVehicles','countClothes','countAnyServer','logsAdmins',
        'logsAdminsAllServers','logsFractions','logsFractionsAllServers',
        'logsFractionsMoney','logsFractionsMoneyAllServers','logsItems',
        'logsItemsAllServers','logsTrades','logsTradesAllServers',
        'logsMarketplaceTrades','logsMarketplaceTradesAllServers','logsMoney',
        'logsMoneyAllServers','logsChips','logsChipsAllServers','logsFamilies',
        'logsFamiliesAllServers','logsFamilyMoney','logsFamilyMoneyAllServers',
        'logsProperties','logsPropertiesAllServers','logsCalls','logsCallsAllServers',
        'logsPhoneCalls','logsPhoneCallsAllServers','logsPhoneSms',
        'logsPhoneSmsAllServers','logsSessions','logsSessionsAllServers',
        'logsSessionsExtended','logsNames','logsNamesAllServers','logsCaptures',
        'logsCapturesAllServers','logsFamilyWars','logsFamilyWarsAllServers',
        'logsConsole','logsBans','logsBansAllServers','logsGlobalBans','logsUsers',
        'logsUsersAllServers','logsLawyer','logsLawyerAllServers','logsArrest',
        'logsArrestAllServers','logsCriminalRecord','logsCriminalRecordAllServers',
        'logsWanted','logsWantedAllServers','logsTickets','logsTicketsAllServers',
        'logsElectionVotes','logsElectionVotesAllServers','logsWeazelNews',
        'logsWeazelNewsAllServers','fractions','fraction','fractionPlayers',
        'rulesRead','rulesCreate','rulesUpdate','rulesDelete','whiteList',
        'adminWhiteList','pdfReports','twitch','specialsRead','specialsCreate',
        'specialsUpdate','specialsDelete','specialsAllServers',
        'statisticsReportsUser','statisticsSessionsUser','statisticsReportsServer',
        'statisticsReportsAllServers','statisticsBansServer','statisticsBansAllServers',
        'statisticsClothes','statisticsClothesAllServers','statisticsAnomalies',
        'statisticsAnomaliesAllServers','statisticsVehicles','statisticsVehiclesAllServers',
        'mailRewards','anomaliesView','anomaliesViewAllServers','anomaliesUpdate',
        'reportsView','reportsViewAllServers','reportsDelete','reportsDeleteAllServers',
        'vehicles','vehiclesAllServers','items','itemsAllServers','changelogsRead',
        'changelogsCreate','changelogsUpdate','changelogsDelete','vacanciesRead',
        'vacanciesCreate','vacanciesUpdate','vacanciesDelete','giveawaysRead',
        'giveawaysCreate','giveawaysUpdate','giveawaysDelete','sqlQuery',
        'sqlQueryRuServers','sqlQueryEuServers','sqlQueryGlobalDatabases',
        'sqlQueryProfileReadonly','sqlQueryProfileTech','sqlQueryExportCsv',
        'freeMcPromoRead','freeMcPromoCreate','freeMcPromoUpdate','freeMcPromoDelete',
        'freeMcPromoCancel','freeMcPromoStreakFreeze','paymentsUnblock',
        'paymentsUnblockUser','trainingRead','trainingCreate','trainingUpdate',
        'trainingDelete','statisticsTraining','statisticsTrainingAllServers',
        'statisticsSqlQueries','statisticsSqlQueriesAllServers','adminPenaltiesRead',
        'adminPenaltiesCreate','adminPenaltiesRemove','adminPenaltiesSettings',
        'settingsWorkNorms','workNormsRead','workNormsUpdate','adminAbsences',
        'adminAbsencesRequest','adminAbsencesManage','statisticsAbsences',
        'statisticsAbsencesAllServers','cheatHunterFaqRead','cheatHunterFaqCreate',
        'cheatHunterFaqUpdate','cheatHunterFaqDelete','cheatHunterChecksRead',
        'cheatHunterChecksReadHistory','cheatHunterChecksCreate','cheatHunterChecksEdit',
        'cheatHunterChecksDelete','cheatHunterChecksManage','cheatHunterChecksReopen',
        'cheatHunterStatistics','mapRead','punishmentFeed','punishmentSearch'
    ];

    const _fetch = window.fetch;
    window.fetch = async function (...args) {
        const req = args[0];
        const init = args[1] || {};
        const url = typeof args[0] === 'string' ? args[0] : args[0]?.url || '';

        if (url.includes('/admin/') || url.includes('/logs/')) {
        }

        if (url.includes('/id/admin/login') || url.includes('/auth/login') || url.includes('/admin/login')) {
            setTimeout(() => waitForAuth(), 800);
            return new Response(JSON.stringify({
                code: 200, status: true, error: 0
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/auth/verify') || url.includes('/auth/2fa') || url.includes('/auth/otp')
            || url.includes('/auth/confirm') || url.includes('/auth/code') || url.includes('/auth/totp')) {
            const twoFaResult = { token: 'fake-admin-token', refreshToken: 'fake-refresh-token', requireTwoFactor: false };
            setTimeout(() => waitForAuth(), 800);
            return new Response(JSON.stringify({
                code: 200, status: true, error: 0,
                result: twoFaResult, data: twoFaResult,
                token: 'fake-admin-token'
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/auth/')) {
            const authResult = { token: 'fake-admin-token', refreshToken: 'fake-refresh-token' };
            return new Response(JSON.stringify({
                code: 200, status: true, error: 0,
                result: authResult, data: authResult,
                token: 'fake-admin-token', refreshToken: 'fake-refresh-token'
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/users/me') || url.match(/\/admin\/me($|\?)/)) {
            const meResult = {
                user: { id: 1, login: 'admin', email: 'admin@admin.com' },
                accounts: [{
                    serverId: '1', accountId: 1, adminLevel: 10,
                    rights: ALL_RIGHTS, penaltyPoints: 0, departments: []
                }]
            };
            return new Response(JSON.stringify({
                code: 200, status: true,
                result: meResult, data: meResult
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/servers') || url.includes('/config/servers')) {
            const servers = [
                { id: '1', name: 'Server 1', players: 142, region: 'ru', disableDonate: false },
                { id: '2', name: 'Server 2', players: 98,  region: 'ru', disableDonate: false },
                { id: '3', name: 'Server 3', players: 75,  region: 'eu', disableDonate: false },
            ];
            return new Response(JSON.stringify({
                code: 200, status: true,
                result: servers, data: servers
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/admins') && !url.includes('/admin/admins/')) {
            return new Response(JSON.stringify({
                code: 200, status: true,
                result: [], data: []
            }), { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/logs/bans') || url.includes('/admin/bans') || url.includes('/logs-bans')) {
            const banItems = [
                { id: 1, accountId: 11111, accountName: 'TestPlayer1',
                  banReason: 'Читы / speedhack', banStart: '2026-04-20T10:00:00Z', banEnd: null,
                  banBy: 1, banByName: 'Administrator', serverId: '1',
                  isPermanent: true, isActive: true, permanent: true },
                { id: 2, accountId: 22222, accountName: 'AnotherUser',
                  banReason: 'Оскорбление персонала', banStart: '2026-04-21T14:30:00Z', banEnd: '2026-04-28T14:30:00Z',
                  banBy: 1, banByName: 'Administrator', serverId: '1',
                  isPermanent: false, isActive: true, permanent: false },
                { id: 3, accountId: 33333, accountName: 'BadActor99',
                  banReason: 'DM без RP', banStart: '2026-04-22T08:15:00Z', banEnd: '2026-04-25T08:15:00Z',
                  banBy: null, banByName: null, serverId: '1',
                  isPermanent: false, isActive: false, permanent: false },
            ];
            const bansResult = { items: banItems, total: banItems.length, count: banItems.length, offset: 0, limit: 50 };
            return new Response(JSON.stringify({ code: 200, status: true, result: bansResult }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/global-bans') || url.includes('/logs/global')) {
            const gbans = { items: [
                { id: 1, playerId: 55555, playerName: 'HackerXXX', reason: 'Глобальный чит', adminId: 1, adminName: 'admin', createdAt: '2026-04-19T12:00:00Z', permanent: true },
            ], total: 1 };
            return new Response(JSON.stringify({ code: 200, status: true, result: gbans, data: gbans }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/users') && !url.includes('/users/me') && !url.match(/\/users\/\d+/)) {
            const users = { items: [
                { id: 1, login: 'admin', email: 'admin@test.com', adminLevel: 10, rights: ALL_RIGHTS, serverId: '1', createdAt: '2026-01-01T00:00:00Z', lastActivity: '2026-04-22T09:00:00Z' },
                { id: 2, login: 'moderator1', email: 'mod1@test.com', adminLevel: 3, rights: ['logsBans', 'users'], serverId: '1', createdAt: '2026-02-15T00:00:00Z', lastActivity: '2026-04-21T18:00:00Z' },
                { id: 3, login: 'helper2', email: 'helper2@test.com', adminLevel: 1, rights: ['reportsView'], serverId: '1', createdAt: '2026-03-10T00:00:00Z', lastActivity: '2026-04-20T12:00:00Z' },
            ], total: 3 };
            return new Response(JSON.stringify({ code: 200, status: true, result: users, data: users }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/accounts') && !url.match(/\/accounts\/\d+/)) {
            const accounts = { items: [
                { id: 101, name: 'John_Doe', vip: 1, money: 50000, bankMoney: 120000, phone: '555-1001', createdAt: '2026-01-10T00:00:00Z' },
                { id: 102, name: 'Jane_Smith', vip: 0, money: 12000, bankMoney: 5000, phone: '555-1002', createdAt: '2026-02-20T00:00:00Z' },
                { id: 103, name: 'Mike_Johnson', vip: 2, money: 999999, bankMoney: 500000, phone: '555-1003', createdAt: '2026-03-05T00:00:00Z' },
            ], total: 3 };
            return new Response(JSON.stringify({ code: 200, status: true, result: accounts, data: accounts }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/fractions') && !url.match(/\/fractions\/\d+/)) {
            const fracs = { items: [
                { id: 1, name: 'Police Department', shortName: 'PD', type: 'government', membersCount: 24, leaderId: 101, leaderName: 'John_Doe' },
                { id: 2, name: 'Emergency Medical Service', shortName: 'EMS', type: 'government', membersCount: 12, leaderId: 102, leaderName: 'Jane_Smith' },
                { id: 3, name: 'Grove Street Families', shortName: 'GSF', type: 'gang', membersCount: 18, leaderId: 103, leaderName: 'Mike_Johnson' },
                { id: 4, name: 'Ballas', shortName: 'BLS', type: 'gang', membersCount: 15, leaderId: 104, leaderName: 'Tony_Brown' },
            ], total: 4 };
            return new Response(JSON.stringify({ code: 200, status: true, result: fracs, data: fracs }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/reports') && !url.match(/\/reports\/\d+/)) {
            const reports = { items: [
                { id: 1, type: 'cheat', authorId: 22222, authorName: 'AnotherUser', targetId: 11111, targetName: 'TestPlayer1', text: 'Игрок летает над землёй', status: 'open', createdAt: '2026-04-22T09:30:00Z' },
                { id: 2, type: 'rp', authorId: 33333, authorName: 'BadActor99', targetId: null, targetName: null, text: 'Помогите, застрял в текстуре', status: 'closed', createdAt: '2026-04-21T16:00:00Z' },
            ], total: 2 };
            return new Response(JSON.stringify({ code: 200, status: true, result: reports, data: reports }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/changelogs') && !url.match(/\/changelogs\/\d+/)) {
            const logs = { items: [
                { id: 1, title: 'Обновление 2.5.0', content: 'Добавлены новые транспортные средства, исправлены баги с телефоном', version: '2.5.0', publishedAt: '2026-04-20T12:00:00Z', authorId: 1, authorName: 'admin' },
                { id: 2, title: 'Хотфикс 2.4.1', content: 'Исправлен краш сервера при входе более 300 игроков', version: '2.4.1', publishedAt: '2026-04-15T08:00:00Z', authorId: 1, authorName: 'admin' },
            ], total: 2 };
            return new Response(JSON.stringify({ code: 200, status: true, result: logs, data: logs }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/vacancies') && !url.match(/\/vacancies\/\d+/)) {
            const vacs = { items: [
                { id: 1, title: 'Администратор сервера', description: 'Требуется опытный администратор', level: 2, isOpen: true, createdAt: '2026-04-10T00:00:00Z' },
                { id: 2, title: 'Хелпер', description: 'Помощник администрации', level: 1, isOpen: true, createdAt: '2026-04-12T00:00:00Z' },
            ], total: 2 };
            return new Response(JSON.stringify({ code: 200, status: true, result: vacs, data: vacs }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/statistics/reports') || url.includes('/statistics/bans') || url.includes('/statistics/sessions')) {
            const stats = { items: [
                { date: '2026-04-22', count: 42, adminId: 1, adminName: 'admin' },
                { date: '2026-04-21', count: 38, adminId: 1, adminName: 'admin' },
                { date: '2026-04-20', count: 55, adminId: 1, adminName: 'admin' },
            ], total: 3 };
            return new Response(JSON.stringify({ code: 200, status: true, result: stats, data: stats }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.includes('/admin/wanted') || url.includes('/logs/wanted')) {
            const wanted = { items: [
                { id: 1, playerId: 101, playerName: 'John_Doe', stars: 3, reason: 'Ограбление банка', adminId: 1, adminName: 'admin', serverId: '1', createdAt: '2026-04-22T11:00:00Z' },
            ], total: 1 };
            return new Response(JSON.stringify({ code: 200, status: true, result: wanted, data: wanted }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        if (url.toLowerCase().includes('/white-list') || url.toLowerCase().includes('/whitelist')) {
            const wl = { items: [
                { id: 1, playerId: 101, playerName: 'John_Doe', addedBy: 'admin', addedAt: '2026-04-01T00:00:00Z' },
            ], total: 1 };
            return new Response(JSON.stringify({ code: 200, status: true, result: wl, data: wl }),
                { status: 200, headers: { 'Content-Type': 'application/json' } });
        }

        const resp = await _fetch(...args);

        if (resp.status === 401 || resp.status === 403) {
            let emptyResult;
            if (url.match(/\/admin\/me($|\?)/)) {
                emptyResult = { user: { id: 1, login: 'admin', email: 'admin@admin.com' }, accounts: [{ serverId: '1', accountId: 1, adminLevel: 10, rights: ALL_RIGHTS, penaltyPoints: 0, departments: [] }] };
            } else if (url.includes('/count')) {
                emptyResult = 0;
            } else if (url.includes('/statistics') || url.includes('/stats')) {
                emptyResult = { items: [], total: 0, count: 0, data: [] };
            } else {
                emptyResult = [];
            }
            return new Response(JSON.stringify({ code: 200, status: true, result: emptyResult, data: emptyResult }), {
                status: 200,
                headers: { 'Content-Type': 'application/json' }
            });
        }

        const text = await resp.text();
        let parsed;
        try { parsed = JSON.parse(text); } catch (_) {
            return new Response(text, { status: resp.status, headers: resp.headers });
        }

        if (parsed && (parsed.status === false || parsed.code === 401)) {
            let fallbackResult;
            if (url.match(/\/admin\/me($|\?)/)) {
                fallbackResult = { user: { id: 1, login: 'admin', email: 'admin@admin.com' }, accounts: [{ serverId: '1', accountId: 1, adminLevel: 10, rights: ALL_RIGHTS, penaltyPoints: 0, departments: [] }] };
            } else {
                fallbackResult = [];
            }
            const patched = JSON.stringify({ code: 200, error: 0, status: true, result: fallbackResult, data: fallbackResult });
            return new Response(patched, {
                status: 200,
                headers: { 'Content-Type': 'application/json' }
            });
        }
        return new Response(text, { status: resp.status, headers: resp.headers });
    };

    (function () {
        const _open = XMLHttpRequest.prototype.open;
        const _send = XMLHttpRequest.prototype.send;
        XMLHttpRequest.prototype.open = function (method, url, ...rest) {
            this._bypassUrl = url;
            return _open.call(this, method, url, ...rest);
        };
        XMLHttpRequest.prototype.send = function (...args) {
            this.addEventListener('readystatechange', function () {
                if (this.readyState !== 4) return;
                let parsed;
                try { parsed = JSON.parse(this.responseText); } catch (_) { return; }
                if (parsed && parsed.status === false) {
                    const patched = JSON.stringify({ error: 0, status: true });
                    Object.defineProperty(this, 'responseText', { get: () => patched, configurable: true });
                    Object.defineProperty(this, 'response', { get: () => patched, configurable: true });
                    Object.defineProperty(this, 'status', { get: () => 200, configurable: true });
                }
            });
            return _send.apply(this, args);
        };
    })();

    (function () {
        const LOGIN_PATHS = new Set(['/', '/login']);

        function onNav(path) {
            if (LOGIN_PATHS.has(path)) {
                window.history.replaceState(null, '', '/settings/rights');
                window.dispatchEvent(new PopStateEvent('popstate', { state: null }));
            }
        }

        const _push = history.pushState.bind(history);
        const _replace = history.replaceState.bind(history);

        history.pushState = function (state, title, url) {
            _push(state, title, url);
            onNav(window.location.pathname);
        };
        history.replaceState = function (state, title, url) {
            _replace(state, title, url);
            onNav(window.location.pathname);
        };

    })();

    async function forceReauth() {
        try {
            const root = document.getElementById('root');

            const fiberKey = Object.keys(root).find(k =>
                k.startsWith('__reactFiber') || k.startsWith('__reactInternalInstance')
            );

            let authGetState = null;

            function walkFiber(node) {
                if (!node || authGetState) return;
                let hook = node.memoizedState;
                while (hook && !authGetState) {
                    const ms = hook.memoizedState;
                    if (ms && typeof ms === 'object' && ms !== null) {
                        if (typeof ms.getSnapshot === 'function') {
                            try {
                                const val = ms.getSnapshot();
                                if (val && typeof val === 'object' &&
                                    'user' in val && 'isInitialized' in val &&
                                    typeof val.me === 'function') {
                                    authGetState = ms.getSnapshot;
                                }
                            } catch (_) {}
                        }
                    }
                    hook = hook.next;
                }
                if (!authGetState) {
                    walkFiber(node.child);
                    walkFiber(node.sibling);
                }
            }

            walkFiber(root[fiberKey]);

            if (!authGetState) {
                setTimeout(forceReauth, 1500);
                return;
            }

            await authGetState().me();
        } catch (err) {
            setTimeout(forceReauth, 1500);
        }
    }

    function waitForAuth() {
        setTimeout(forceReauth, 500);
    }

    setTimeout(forceReauth, 800);

})();
После чего указываем абсолютно любые данные почты пароля и 2FA
 
Реакции: devve и Soaw

Vermilion

Искусственный Интеллект
High developer
BackEnd developer
FrontEnd developer
29 Сен 2021
1,896
1,200
181
35
Хотя бы где то по буду админом
 
  • Haha
  • Love
Реакции: enotit и kaszara

Similar threads