• Просьба не публиковать сообщения с предложениями продажи модов или сборок!

    Мы против использования и перепродажи слитых модов и переделок на их основе. Остальное также сложно верифицировать, поэтому в целом пока что запрещаем эту тему на сайте.

Rage Builder 0.5 - Первый публичный релиз

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
924
Вы можете поддержать разработку Rage Builder. Благодаря этому я смогу больше времени уделять этому проекту и новые версии будут выходить чаще.

ВНИМАНИЕ! Это устаревшая версия редактора. Актуальную версию Вы всегда можете скачать отсюда.

builder1.jpg


Это первая публичная версия редактора карт для Rage MP. В ней полноценно реализован следующий функционал:
  • Браузер объектов в предпросмотром
  • Возможность размещать объекты на карте / двигать / вращать их
  • Модификаторы скорости перемещения камеры / объектов
  • Выделение текущего выбранного объекта
  • Список объектов размещенных на карте
  • Сохранение карты в формате json
  • Отдельный скрипт загрузчика карт (можно использовать на production без редактора)
  • Возможность открыть в редакторе существующую карту и отредактировать ее
  • Графический интерфейс и всего 1 команда для запуска редактора
builder2.jpg
Для запуска редактора введите команду /builder

F2 - Показать / скрыть курсор

W,A,S,D - Полет камеры или перемещение объекта

PageUp, PageDown - Перемещение вверх или вниз

Shift - Увеличить скорость движения. Удерживайте эту кнопку при движении чтобы увеличить скорость.

Alt - Уменьшить скорость

Ctrl - Вращение объекта. Удерживайте эту кнопку + нажимайте кнопки перемещения (W,S - вращать по оси X, A,S - по оси Y и PageUp, PageDown - по оси Z ).

builder3.jpg

Сохранение карт
Все карты сохраняются в формате json в папке rage-builder-maps. Это папка загрузчика карт. При старте сервера он просканирует свою папку и автоматически загрузит на сервере все найденные карты. Также когда в редакторе мы сохраняем карту (новую или уже существующую), то загрузчик автоматически перечитает содержимое карт и перезагрузит их. Таким образом любые изменения будут доступны на сервере сразу же без перезагрузки.

Использование в production
На публичном сервере рекомендуется не использовать редактор, а только загрузчик карт (папка packages/rage-builder-maps). Если все же необходимо использовать и редактор, то советую каким-то образом защитить или переименовать команду /builder на что-нибудь неизвестное (например, /builder6392386), чтобы игроки не смогли зайти в редактор.

Github проекта: https://github.com/rage-script/rage-builder/
 

Вложения

  • rage-builder-0.5.1.zip
    51,6 КБ · Просмотры: 96
Последнее редактирование:
Завтра попробуем, ))) Если всё как я думаю, то это внесет неслыханное разнообразие в 250+ серверов рейджа.
 
Спасибо! Буду рад обратной связи и найденным багам ;)
 
1617951263812.png
закинул Ваши файлы, вылазит данная ошибка после ввода команды. Ничего не менял, закинул туда куда указано
 
Посмотреть вложение 268
закинул Ваши файлы, вылазит данная ошибка после ввода команды. Ничего не менял, закинул туда куда указано
Похоже что редактор не будет работать на старых версиях rage mp. На 1.1 и выше будет норм. При этом сам загрузчик карт скорее всего будет работать и на 0.3.7. Но это не точно:)
 
Похоже что редактор не будет работать на старых версиях rage mp. На 1.1 и выше будет норм. При этом сам загрузчик карт скорее всего будет работать и на 0.3.7. Но это не точно:)
было бы не плохо чтобы и на 0.3.7 работал, так как большинство проектов еще на 037
 
Ок, подумаю что можно сделать.
Пока что можно использовать редактор локально на отдельном сервере 1.1, а на 0.3.7 использовать только загрузчик. Все равно юзать редактор на production сервере не рекомендуется ;)
 
Ок, подумаю что можно сделать.
Пока что можно использовать редактор локально на отдельном сервере 1.1, а на 0.3.7 использовать только загрузчик. Все равно юзать редактор на production сервере не рекомендуется ;)
Да спасибо, так и планировал, так как есть чистый тестовый на 1.1. А основа на 0.3.7
Просто хотелось чтобы начально работал на 0.3.7 для того чтобы в реал тайме, ставить предметы, это очень полезно для МП итд
 
Просто хотелось чтобы начально работал на 0.3.7 для того чтобы в реал тайме, ставить предметы, это очень полезно для МП итд
Прикольный кейс использования редактора:) Тут никак пока не обойти проблему совместимости.
 
Исправил ошибку из-за которой не работала кнопка Save. Перезалил архив в первом сообщении.
 
Lev, переделай пожалуйста noclip. С этим не очень удобно летать вокруг объекта. Типа что-бы камера вместе с игроком перемещалась (в ин-ете есть такие)
 
Lev, переделай пожалуйста noclip. С этим не очень удобно летать вокруг объекта. Типа что-бы камера вместе с игроком перемещалась (в ин-ете есть такие)
Если правильно понял тебе, то проблема возникает из-за коллизии камеры с объектом. Камера и так перемещается вместе с игроком, просто нужно как-то убрать эту коллизию.

И добавь дублирование объекта
Да, будет. Там еще и удаление объекта нужно сделать, т. к. пока что объект можно поставить, но нельзя удалить :)
 
Первый пост обновлен. Добавил видео демонстрацию и ссылку на Boosty.
 
P.S: если, что есть список моделей тут:
- http://gtahash.site/
- https://gta-objects.xyz

Их много, надеюсь все + они разбиты на категории.
О, спасиб. Там есть есть разбивка по категориям! Будет вообще круто если это можно будет спарсить, а не переписывать вручную :) Позже гляну.
 
Если правильно понял тебе, то проблема возникает из-за коллизии камеры с объектом. Камера и так перемещается вместе с игроком, просто нужно как-то убрать эту коллизию.


Да, будет. Там еще и удаление объекта нужно сделать, т. к. пока что объект можно поставить, но нельзя удалить :)
Я заметил что игрок перемещается а за ним летит камера, нужно сделать так что-бы игрок был прикреплён к камере и без коллизии

JavaScript:
function startNoClip() {
    mp.game.graphics.notify('~y~Fly ~g~on');
    let camPos = new mp.Vector3(local.position.x, local.position.y, local.position.z+1);
    let camRot = mp.game.cam.getGameplayCamRot(2);
    noClipCamera = mp.cameras.new('default', camPos, camRot, 55);
    noClipCamera.setActive(true);
    mp.game.cam.renderScriptCams(true, false, 300, true, false);
    local.freezePosition(true);
    local.setInvincible(true);
    local.setVisible(false, false);
    local.setCollision(false, false);
    mp.game.audio.playSoundFrontend(-1, 'CONFIRM_BEEP', 'HUD_MINI_GAME_SOUNDSET', true);
}


function stopNoClip() {
    mp.game.graphics.notify('~y~Fly ~r~off');
    if (noClipCamera) {
        posCam = noClipCamera.getCoord();
        local.position = new mp.Vector3(posCam.x, posCam.y, posCam.z-1);
        local.setHeading(noClipCamera.getRot(2).z);
        noClipCamera.destroy(true);
        noClipCamera = null;
    }
    mp.game.cam.renderScriptCams(false, false, 300, true, false);
    local.freezePosition(false);
    local.setVisible(true, false);
    local.setCollision(true, false);
    mp.game.audio.playSoundFrontend(-1, 'CONFIRM_BEEP', 'HUD_MINI_GAME_SOUNDSET', true);
}


mp.events.add('render', function() {
    if (!noClipCamera || mp.gui.cursor.visible) {
        return;
    }
    controlModifier = mp.keys.isDown(bindASCIIKeys.LCtrl);
    shiftModifier = mp.keys.isDown(bindASCIIKeys.Shift);
    let rot = noClipCamera.getRot(2);
    let fastMult = 1;
    let slowMult = 1;
    if (shiftModifier) {
        fastMult = 4;
    } else if (controlModifier) {
        slowMult = 0.3;
    }
    let rightAxisX = mp.game.controls.getDisabledControlNormal(0, 220);
    let rightAxisY = mp.game.controls.getDisabledControlNormal(0, 221);
    let leftAxisX = mp.game.controls.getDisabledControlNormal(0, 218);
    let leftAxisY = mp.game.controls.getDisabledControlNormal(0, 219);
    let pos = noClipCamera.getCoord();
    let rr = noClipCamera.getDirection();
    let vector = new mp.Vector3(0, 0, 0);
    vector.x = rr.x * leftAxisY * fastMult * slowMult;
    vector.y = rr.y * leftAxisY * fastMult * slowMult;
    vector.z = rr.z * leftAxisY * fastMult * slowMult;
    let upVector = new mp.Vector3(0, 0, 1);
    let rightVector = getCrossProduct(getNormalizedVector(rr), getNormalizedVector(upVector));
    rightVector.x *= leftAxisX * 1 * fastMult * slowMult;
    rightVector.y *= leftAxisX * 1 * fastMult * slowMult;
    rightVector.z *= leftAxisX * 1 * fastMult * slowMult;
    let upMovement = 0.0;
    if (mp.keys.isDown(bindASCIIKeys.Q)) {
        upMovement = 0.5 * fastMult * slowMult;
    }
    let downMovement = 0.0;
    if (mp.keys.isDown(bindASCIIKeys.E)) {
        downMovement = 0.5 * fastMult * slowMult;
    }
    mp.players.local.position = new mp.Vector3(pos.x + vector.x + 1, pos.y + vector.y + 1, pos.z + vector.z + 1);
    mp.players.local.heading = rr.z;
    noClipCamera.setCoord(pos.x - vector.x + rightVector.x, pos.y - vector.y + rightVector.y,
        pos.z - vector.z + rightVector.z + upMovement - downMovement);
    noClipCamera.setRot(rot.x + rightAxisY * -8.0, 0.0, rot.z + rightAxisX * -8.0, 2);
});
 
Назад
Верх