Идеи для материалов / туториалов / скриптов

Leinader

Trainee
Я кароче сегодня покодил, похимичил и вот что получилось:
JavaScript:
const readline = require('readline');
const open = require('open');
let rl = null;

mp.events.add('packagesLoaded', () => {
    setTimeout(() => {
        rl = readline.createInterface({
            input: process.stdin,
            output: process.stdout
        });

        rl.on('line', (input) => {
            if (input.charAt(0) == '/') {
                const data = input.substr(1).split(' '); // убираем слеш и преобразовываем строку в массив разделяя по пробелам
                const commandName = data[0];
                const args = data.slice(1); // из data убираем первый элемент - название команды и получаем массив только аргументов args
                mp.events.call(`console:${commandName}`, args); // передаем args в обработчик команды
            }
        });
    }, 2000);
});


mp.events.add('console:restart', (time) => {
    try {
        if (time == undefined || time < 1) return console.log(`Enter the time (minutes)`);
        rl.question("Are you sure you want to restart the server? (yes/no): ", (answer) => {
            if (answer == 'yes') {
                console.log(`Please wait ${time} mitnutes`);
                time = parseInt(time);
                let vrem = null;
                if (time >= 5) vrem = `минут`;
                if (time <= 4 && time != 1) vrem = `минуты`;
                if (time == 1) vrem = 'минуту';
                mp.players.forEach((pall) => {
                    pall.chatPush(`{#ff3b3b}!!! ВНИМАНИЕ !!!  {#fff}Сервер будет перезагружен через ${time} ${vrem}`)
                    pall.chatPush(`{#ff3b3b}!!! ВНИМАНИЕ !!!  {#fff}Завершите все свои ситуации`)
                });
                setTimeout(() => {
                    try {
                        mp.players.forEach((pall) => {
                            try {
                                pall.kickSilent();
                            } catch (e) {
                                console.log(e);
                            }
                        });
                        setTimeout(() => {
                            try {
                                console.log("Restarting the server...");
                                open('rest.bat'); // Здесь вызывается: https://rage-script.ru/threads/windows-skript-dlja-bystroj-perezagruzki-servera.29/
                            } catch (e) {
                                console.log(e);
                            }
                        }, 500);
                    } catch (e) {
                        console.log(e);
                    }
                }, time*60*1000); // n*60(s)*1000(ms)
            }
        });
    } catch (e) {
        console.log(e);
    }
});
 

Lev Angel

Developer
Команда форума
Скриптер
@Leinader Красава что сам разобрался и поделился кодом (y)

Немного прокомментирую код. Не воспринимай как критику, просто "мысли вслух" как можно сделать еще лучше.

Перед перезагрузкой ты выкидываешь всех игроков. Я так понимаю это для того, чтобы у них сохранились данные аккаунта. Но получается что после рестарта они не переподключатся автоматически и нужно будет перезаходить через браузер серверов. Лучше будет делать не кик, а вызывать сохранение аккаунтов, а потом просто делать рестарт. Тогда клиент теряет коннект, а когда сервер перезагрузился, то он автоматом переподключается. Мне кажется так будет лучше;)

Также нужно учитывать что например асинхронные запросы в базу данных могут выполняться дольше чем 500мс. И может получиться что запросы еще выполняются, а у тебя уже прилетает open('rest.bat');. Тут наверное может помочь оператор await.

И еще момент - слишком много try catch😁 ИМХО это не решает проблему с тем что где-то по ходу вылезет ошибка, т. к. эти ошибки все равно никак не обрабатываются. Зато код стало заметно сложнее читать.
 
Сегодня только обнаружил этот ресурс, все остальные это как-то не серьезно (кроме rageMP), если данный ресурс будет и дальше развиваться и жить, то Я только "ЗА" такое движенье!
 

Lev Angel

Developer
Команда форума
Скриптер
Сегодня только обнаружил этот ресурс, все остальные это как-то не серьезно (кроме rageMP), если данный ресурс будет и дальше развиваться и жить, то Я только "ЗА" такое движенье!
Спасибо, я тоже ЗА ;)
 
Может быть попробуем синхру для прицепов написать? Вот на Альт-В там по умолчанию синхронизация прицепов работает на ура без всяких дописок кастом скриптов.
Я нашел на ragemp скрипт, который синхронизирует педов, игроков и транспорт, незнаю как это в целом работает для прицепов.
Человек пытался написать синхру и тестили мы на моей локалке вдоем. Результат был следующим: Прицеп мой у него нормально синхронизируется как и у него на моем экране, но на моем мониторе мой прицеп дергается и едит отдельно так же как и у него, делали в обратку, синхра ломалась, зато на своих мониторах свои прицепы адекватно работают, то есть, либо ломается на стороне клиента, либо ломается синхра ))))
 
Добавил в план. Уже не первый раз просят.
Это чеонь интересная тема, так как ДнД на Дже куери у меня работал, делал на ванильке тоже работает, а вот теперь хочу сделать все на VUE и не понимаю как это реализовать ))
 

Lev Angel

Developer
Команда форума
Скриптер
Может быть попробуем синхру для прицепов написать? Вот на Альт-В там по умолчанию синхронизация прицепов работает на ура без всяких дописок кастом скриптов.
Я нашел на ragemp скрипт, который синхронизирует педов, игроков и транспорт, незнаю как это в целом работает для прицепов.
Человек пытался написать синхру и тестили мы на моей локалке вдоем. Результат был следующим: Прицеп мой у него нормально синхронизируется как и у него на моем экране, но на моем мониторе мой прицеп дергается и едит отдельно так же как и у него, делали в обратку, синхра ломалась, зато на своих мониторах свои прицепы адекватно работают, то есть, либо ломается на стороне клиента, либо ломается синхра ))))
Хз тема довольно специфическая. Я пока даже не представляю как это сделать.
 

Dihan48

Middle Developer
Скриптер
Может быть попробуем синхру для прицепов написать? Вот на Альт-В там по умолчанию синхронизация прицепов работает на ура без всяких дописок кастом скриптов.
Я нашел на ragemp скрипт, который синхронизирует педов, игроков и транспорт, незнаю как это в целом работает для прицепов.
Человек пытался написать синхру и тестили мы на моей локалке вдоем. Результат был следующим: Прицеп мой у него нормально синхронизируется как и у него на моем экране, но на моем мониторе мой прицеп дергается и едит отдельно так же как и у него, делали в обратку, синхра ломалась, зато на своих мониторах свои прицепы адекватно работают, то есть, либо ломается на стороне клиента, либо ломается синхра ))))
JavaScript:
let dynamicPed = mp.peds.new(mp.joaat('mp_m_freemode_01'), mp.players.at(0).position, {dynamic:true});
dynamicPed.controller = mp.players.at(0);
в 1.1 появилась возможность менять контроллер объекта созданного на сервере.
контроллер это клиент, на котором изменение состояния объекта отправляются на сервер для синхронизации с остальными клиентами
смена контроллера работает не только для педов, я точно проверял что это работает для транспорта и вполне возможно что это работает для прицепов.

стандартно ragemp меняет контроллера на последнего игрока в чью зону стрима попал объект

у транспорта исключение: если в транспорте есть игроки то контролером будет тот кто по порядку места ближе к водительскому сиденью либо на нем.

думаю изучая вопрос с контроллерами возможно получите нужную синхронизацию и по идеи надо просто менять контроллер прицепа на водителя изначально и при каждом его изменении снова сбрасывать на водителя
 

Lev Angel

Developer
Команда форума
Скриптер
Давно что-то не было новых туториалов. Берусь за аренду скутеров. Возможно сделаем на стриме, а потом закину на форум текстовую версию.
Заодно напомню про эту тему. Если есть интересные идеи - пишите ;)
 

MayHem

Junior Developer
Скриптер
Доброго времени суток!
Есть предложение сделать группировку (вагосы, балосы, или ПД, медиков ит.д.). Что подразумивается:
1. Спавн по группировке;
2. Выдача одежды при спавне и/или при подходе к НПС;
3. Ранги (самый простые ранги, MySQL). Этот пункт может являться как предмет для следующего туториала - Функционал группировок:devilish:
4. Борьба за территорию, если речь идет о бандитских группировках
5. Если регистрация будет через НПЦ, к примеру, то простое взаимодействие с CEF
Для начала, думаю, нормально. Потом на этот скелет можно уже делать еще больше функционала - туториалов
 

Lev Angel

Developer
Команда форума
Скриптер
Доброго времени суток!
Есть предложение сделать группировку (вагосы, балосы, или ПД, медиков ит.д.). Что подразумивается:
1. Спавн по группировке;
2. Выдача одежды при спавне и/или при подходе к НПС;
3. Ранги (самый простые ранги, MySQL). Этот пункт может являться как предмет для следующего туториала - Функционал группировок:devilish:
4. Борьба за территорию, если речь идет о бандитских группировках
5. Если регистрация будет через НПЦ, к примеру, то простое взаимодействие с CEF
Для начала, думаю, нормально. Потом на этот скелет можно уже делать еще больше функционала - туториалов
Хорошая идея! Это должно быть логичным продолжением туториалов по регистрации.
Добавил в план.
 

Lev Angel

Developer
Команда форума
Скриптер
С арендой скутеров закончили. Получилось даже два туториала :)
 

31YA

New member

На этом сайте мы создаем различные обучающие уроки, небольшие скрипты, статьи и т. п. Основная цель - помочь новичкам в обучении скриптингу, создать базу знаний по программированию для Rage MP.

Своих идей для материалов у меня целая куча. Но это не всегда будет интересно и актуально людям. Поэтому я решил сделать такую тему где любой желающий может оставить запрос и если это будет в моих силах и покажется интересным - я добавлю это в план и в будущем сделаю. Пишите в свободной форме чтобы вам было интересно узнать, что нужно разобрать. Пожалуйста не просите писать уроки / скрипты по каким то сборкам серверов или модов!

Если тема зайдет, то ниже я буду вести учет что запланировано и что в работе.

✅СДЕЛАНО:
РАЗБОР: мод Freeroam
УРОК: Работа дальнобойщика
УРОК: Работа с маркерами
УРОК: Работа с MySQL (JS)
УРОК: Регистрация и авторизация на CEF + MySQL
Замена моделей транспорта
Аренда скутеров (Туториал 2 от @Voldemor)

🕓В ПЛАНАХ:
Создание кастомных неймтегов
Инвентарь
Настройка внешности, смена одежды игрока
Группировки/банды

👷‍♂️В РАБОТЕ:
Сделайте туториал по подключению худа , и по возможности системы инвентаря
 
Яндекс.Метрика
Верх