This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Добавление cef

xakdog

Новый участник
10 Сен 2024
14
2
15
ребят, помогите пожалуйста. я только начинаю разрабатывать, писать системы для гта 5 рп. хочу реализовать систему с координатами, чтобы оно выводилось в виде небольшого интерфейса снизу экрана и как бы "в прямом эфире" транслировались в этом окошке мои координаты. знаю , что можно проще сделать через команду. но в любом случае, мне нужно будет понять как работать с визуалом, как его добавлять. ниже скрины с кодом
1. сервер

2. клиент (index.html, index.js, style.css)




Писал при помощи chatGPT. На сервере оно всё равно не отображается. Прошу помочь. В conf.json я все правильно указал

 
Реакции: Harland David Sanders

Jerry (ChatGPT)

AI-powered language model
VIP
helper
17 Окт 2023
2,256
233
5
Привет! Для добавления визуальных элементов в игру GTA 5 RP с использованием CEF (Chromium Embedded Framework), тебе понадобится создать HTML/CSS/JS файлы для дизайна интерфейса и использовать их в своем скрипте на сервере. После этого, можно добавить CEF в игру через скрипты FiveM.

Если у тебя есть конкретные вопросы или проблемы с кодом, буду рад помочь!
 

Harland David Sanders

🍔 ChefBurger
Команда форума
High developer
10 Сен 2020
3,595
2,752
219
Привет, для этого тебе даже не нужен CEF.
Координаты простым текстом можно вывести на экран с помощью клиентского - render.
 
Реакции: XDeveluxe

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,780
1,580
211
28
ChatGPT выдал что-то совсем не то, даже приблизительно.
Старайтесь не писать вслепую с помощью него, а только получать определённую информацию по отдельности.

Во-первых:
Сервер RAGEMP разбит на 3 отдельные части:
  • Серверная часть (BackEnd server) - логика, которая рассчитывается сервером, на нём хранятся все важные данные (данные игрока, систем домов, бизнесов и т.д). Файлы сервера находятся в server-files/packages/ (если это NodeJS) или в server-files/dotnet/resources/ (если это C#).
  • Клиентская часть (BackEnd client) - логика, которая рассчитывается у игрока на компьютере, там вычисляется не очень важная логика и то, что у игрока отличается от других (например вывод данных на экране или кнопки биндера, которые у разных игроков могут быть разными и т.д). Файлы клиента находятся в server-files/client_packages/ всегда.
  • CEF часть (FrontEnd) - визуальная часть, на которой отрисован дизайн и связанная с этим логика - кнопки, ползунки и т.д. Файлы CEF находятся в server-files/client-packages/ всегда.
Все они работают независимо друг от друга, но могут общаться друг с другом, однако только последовательно, то есть сервер не может напрямую общаться с браузером и наоборот, они должны идти по очереди. Если с сервера нужно вызвать что-то на CEF, то сервер вызывает клиент и уже с клиента ты делаешь вызов на CEF. Это в двух словах.
Ты с помощью клиентского файла coords_client/index.js пытаешься обратиться к getElementById, который существует только на CEF'е - этого у тебя не получится сделать по очевидным причинам, которые я объяснил выше.

Во-вторых:
Для отрисовки координат на экране тебе не нужен CEF, как уже выше сказал Харланд - тебе достаточно использовать ивент render (этот ивент срабатывает на клиентской стороне каждый кадр, то есть если у игрока 60FPS, то 60 раз в секунду сработает этот ивент) и drawText - метод для отображения текста на экране игрока (требуется использовать каждый кадр).
Пример такого кода, который будет работать всегда (то есть без команды и без любых условий, потому что их тут нет, как можно увидеть):
JavaScript:
const localplayer = mp.players.local;

// Инициализация ивента "render"
mp.events.add("render", () =>
{
    const entity = (localplayer.isInAnyVehicle(false) && localplayer.vehicle) ? localplayer.vehicle : localplayer; // Получаем сущность, с которой будем брать позицию, если в машине - с машины, иначе с персонажа
    const position = entity.position; // Для небольшой оптимизации, чтобы сократить цепочку вызовов - забьём позицию в отдельную ячейку памяти
    mp.game.graphics.drawText(`X: ${position.x.toFixed(3)}, Y: ${position.y.toFixed(3)}, Z: ${position.z.toFixed(3)}, R: ${entity.getRotation(2).z.toFixed(3)}`, [0.5, 0.95], // Обозначаем текст, который хотим вывести и позицию вывода на экране - 0.5 (слева направо 50% по X) и 0.95 (сверху вниз 95% по Y)
    {
        font: 0, // Номер выводимого шрифта
        color: [255, 255, 255, 185], // Цвет вывода: Красный, Зелёный, Синий, Прозрачность
        scale: [0.4, 0.4], // Множитель текста по осям X Y
        outline: true // Обводка текста чёрным
    });
});
Тебе никто не мешает дальше пытаться модернизировать этот код под свои нужды: добавлять условия, менять позицию вывода (она обозначена как 0.5 по X и 0.95 Y в коде).
Чтобы понять что за что отвечает - открываешь ragemp wiki и ищешь клиентские функции JS, там находишь нужную и смотришь её аргументы, далее изучаешь и пробуешь.

В-третьих, у RAGEMP нет ни ивента "playerMove" ни "resources" в conf.json.
Всё, что есть в conf.json описано здесь.
Все ивенты, которые есть на серверном JS описаны здесь.
 
Последнее редактирование:

Inoi

/dev/null
Команда форума
Moderator
VIP
15 Окт 2020
3,819
1,874
208
35
Перед тем как писать с помощью чат жпт, всегда лучше самому открыть википедию рейджа и хотя бы пройтись по базовым функциям, чтобы примерно понимать, что ты используешь, и как это должно работать.
После того как понимание сложится - ты рассказываешь об этом нейронке.

В противном случае толку от того что ты просто копипастишь код из жпт - ноль. Ты не начинаешь от этого "пишу системы для гта".
Точно с таким же успехом их может "писать" моя бабуля - даже она способна нажимать копировать-вставить.

Можешь например спросить чатжпт - за каким хуем она решила для этой задачи использовать сервер?
Ведь координаты ты всегда знаешь на клиенте, и можешь просто обновлять их в рендере.
Ну и потом чисто добить, спросив зачем нужен в её коде вот этот евент



Который абсолютно нигде не вызывается
И это только по первому скриншоту

Выключи нейросеть, открой https://wiki.rage.mp/ и напиши хотя бы что нибудь супер простое сам