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

Lev Angel

Developer
Команда форума
Скриптер
Вы можете поддержать разработку 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 КБ · Просмотры: 44
Последнее редактирование:

pro100prohojiy

New member
Завтра попробуем, ))) Если всё как я думаю, то это внесет неслыханное разнообразие в 250+ серверов рейджа.
 

Lev Angel

Developer
Команда форума
Скриптер
Спасибо! Буду рад обратной связи и найденным багам ;)
 

sitebuilding11

New member
1617951263812.png
закинул Ваши файлы, вылазит данная ошибка после ввода команды. Ничего не менял, закинул туда куда указано
 

Lev Angel

Developer
Команда форума
Скриптер
Посмотреть вложение 268
закинул Ваши файлы, вылазит данная ошибка после ввода команды. Ничего не менял, закинул туда куда указано
Похоже что редактор не будет работать на старых версиях rage mp. На 1.1 и выше будет норм. При этом сам загрузчик карт скорее всего будет работать и на 0.3.7. Но это не точно:)
 

sitebuilding11

New member
Похоже что редактор не будет работать на старых версиях rage mp. На 1.1 и выше будет норм. При этом сам загрузчик карт скорее всего будет работать и на 0.3.7. Но это не точно:)
было бы не плохо чтобы и на 0.3.7 работал, так как большинство проектов еще на 037
 

Lev Angel

Developer
Команда форума
Скриптер
Ок, подумаю что можно сделать.
Пока что можно использовать редактор локально на отдельном сервере 1.1, а на 0.3.7 использовать только загрузчик. Все равно юзать редактор на production сервере не рекомендуется ;)
 

sitebuilding11

New member
Ок, подумаю что можно сделать.
Пока что можно использовать редактор локально на отдельном сервере 1.1, а на 0.3.7 использовать только загрузчик. Все равно юзать редактор на production сервере не рекомендуется ;)
Да спасибо, так и планировал, так как есть чистый тестовый на 1.1. А основа на 0.3.7
Просто хотелось чтобы начально работал на 0.3.7 для того чтобы в реал тайме, ставить предметы, это очень полезно для МП итд
 

Lev Angel

Developer
Команда форума
Скриптер
Просто хотелось чтобы начально работал на 0.3.7 для того чтобы в реал тайме, ставить предметы, это очень полезно для МП итд
Прикольный кейс использования редактора:) Тут никак пока не обойти проблему совместимости.
 

Lev Angel

Developer
Команда форума
Скриптер
Исправил ошибку из-за которой не работала кнопка Save. Перезалил архив в первом сообщении.
 

Leinader

Trainee
Lev, переделай пожалуйста noclip. С этим не очень удобно летать вокруг объекта. Типа что-бы камера вместе с игроком перемещалась (в ин-ете есть такие)
 

Lev Angel

Developer
Команда форума
Скриптер
Lev, переделай пожалуйста noclip. С этим не очень удобно летать вокруг объекта. Типа что-бы камера вместе с игроком перемещалась (в ин-ете есть такие)
Если правильно понял тебе, то проблема возникает из-за коллизии камеры с объектом. Камера и так перемещается вместе с игроком, просто нужно как-то убрать эту коллизию.

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

Lev Angel

Developer
Команда форума
Скриптер
Первый пост обновлен. Добавил видео демонстрацию и ссылку на Boosty.
 

Lev Angel

Developer
Команда форума
Скриптер
P.S: если, что есть список моделей тут:
- http://gtahash.site/
- https://gta-objects.xyz

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

Leinader

Trainee
Если правильно понял тебе, то проблема возникает из-за коллизии камеры с объектом. Камера и так перемещается вместе с игроком, просто нужно как-то убрать эту коллизию.


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

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);
});
 
Яндекс.Метрика
Верх