Что такое cef в крмп
Перейти к содержимому

Что такое cef в крмп

  • автор:

Форум Pawn.Wiki — Воплоти мечту в реальность!: SAMP CEF — Форум Pawn.Wiki — Воплоти мечту в реальность!

+

  • (3 Страниц)
  • 1
  • 2
  • 3
  • >
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

SAMP CEF Оценка: ***** 1 Голосов

#1

Пользователь офлайн

Макс

Отправлено 17 сентября 2021 — 18:19

  • Местный
    • Группа: Vip
    • Сообщений: 295
    • Регистрация: 15 августа 11

    Описание
    SAMP CEF — это проект встраивает CEF в SA:MP, расширяя возможности самовыражения с помощью красивых внутриигровых интерфейсов с использованием HTML / CSS / JavaScript.

    • Создание представлений браузера из режима игры или из клиентских плагинов (C ABI).​
    • Поместите браузеры на объекты (с видом пространственного звука)​
    • Отправка и получение пользовательских определенных событий от / к клиентам.​
    • cef — Обертки вокруг CEF C API.
    • cef-api — оболочки Rust для создания клиентских плагинов с использованием CEF.
    • cef-interface — пример плагина Rust.
    • cef-sys — привязки для CEF C API.
    • client — клиентский плагин CEF.
    • d3dx9 — привязки к SDK DirectX.
    • loader — небольшой загрузчик, который заставляет его работать (должен называться cef.asi ).
    • messages — сообщения protobuf для связи с сервером в сети.
    • proto — необработанные файлы прото.
    • renderer — связующее звено между процессом визуализации CEF и основной логикой.
    • server — плагин на стороне сервера.
    • Документация на русском (Зеркало: RU, EN)
    • Official WIKI на GitHub(на английском)
    • гоблин на весь дом
    • простые интерфейсы
    • кастомный интерфейс гта
    • голосовой чят
    • кухня по телеку

    Список тем [Показать]

    Сообщение отредактировал Romzes: 06 марта 2023 — 06:33

    #2

    Пользователь офлайн

    NiceXPlayer

    Отправлено 17 сентября 2021 — 21:05

  • Пользователь
    • Группа: Активные пользователи
    • Сообщений: 138
    • Регистрация: 26 мая 21

    Все руки не доходили сделать отдельную тему. Спасибо что кто-то додумался 🙂 + поставил

    #3

    Пользователь офлайн

    SRIPTER MODOV

    Отправлено 22 сентября 2021 — 15:37

  • Пользователь
    • Группа: Активные пользователи
    • Сообщений: 122
    • Регистрация: 26 марта 19

    Обновление CEF v1.4

    • Переписана сетевая часть плагина.
    • Добавлена новая функция cef_load_url(player_id, browser_id, url[]) позволяет открывать ссылки быстрее чем пересоздание браузера.
    • Исправлена ошибка с таймерами.

    #4

    Пользователь офлайн

    mama123123

    Отправлено 22 сентября 2021 — 15:56

  • Новичок
    • Группа: Активные пользователи
    • Сообщений: 59
    • Регистрация: 09 декабря 17

    Просмотр сообщения

    SRIPTER MODOV (22 сентября 2021 — 15:37) писал:

    Для чего нужен cef_interface.dll на гитхабе?

    И еще такой вопрос, при запуске видосов на экране, при вхождении и выходе из зоны, видос сбрасывается и начинается сначала, нет никакого способа включать видео с того момента, на котором он остановился?

    #5

    Пользователь офлайн

    SRIPTER MODOV

    Отправлено 22 сентября 2021 — 15:57

  • Пользователь
    • Группа: Активные пользователи
    • Сообщений: 122
    • Регистрация: 26 марта 19

    Просмотр сообщения

    mama123123 (22 сентября 2021 — 15:56) писал:

    И еще такой вопрос, при запуске видосов на экране, при вхождении и выходе из зоны, видос сбрасывается и начинается сначала, нет никакого способа включать видео с того момента, на котором он остановился?

    Нет, только если стримом.

    а cef-interface нужен для скрытия стандартных интерфейсов.

    Чтобы его использовать нужно в папке cef создать plugins и закинуть его туда

    Сообщение отредактировал SRIPTER MODOV: 22 сентября 2021 — 15:58

    #6

    Пользователь офлайн

    mama123123

    Отправлено 22 сентября 2021 — 15:58

  • Новичок
    • Группа: Активные пользователи
    • Сообщений: 59
    • Регистрация: 09 декабря 17

    Просмотр сообщения

    SRIPTER MODOV (22 сентября 2021 — 15:57) писал:

    Нет, только если стримом.

    Хорошо, спасибо

    #7

    Пользователь офлайн

    mama123123

    Отправлено 24 сентября 2021 — 15:40

  • Новичок
    • Группа: Активные пользователи
    • Сообщений: 59
    • Регистрация: 09 декабря 17

    Просмотр сообщения

    SRIPTER MODOV (22 сентября 2021 — 15:57) писал:

    Нет, только если стримом.

    а cef-interface нужен для скрытия стандартных интерфейсов.

    Чтобы его использовать нужно в папке cef создать plugins и закинуть его туда

    А как допустим тот же дизайн чата изменить?

    #8

    Пользователь офлайн

    SRIPTER MODOV

    Отправлено 25 сентября 2021 — 11:13

  • Пользователь
    • Группа: Активные пользователи
    • Сообщений: 122
    • Регистрация: 26 марта 19

    Просмотр сообщения

    mama123123 (24 сентября 2021 — 15:40) писал:

    А как допустим тот же дизайн чата изменить?

    Новый чат писать. Другого пути нету. ( ну или есть , но я писал чат с 0 и на другую букву, а стандарт просто запретил )

    #9

    Пользователь офлайн

    mama123123

    Отправлено 25 сентября 2021 — 12:13

  • Новичок
    • Группа: Активные пользователи
    • Сообщений: 59
    • Регистрация: 09 декабря 17

    Просмотр сообщения

    SRIPTER MODOV (25 сентября 2021 — 11:13) писал:

    Новый чат писать. Другого пути нету. ( ну или есть , но я писал чат с 0 и на другую букву, а стандарт просто запретил )

    Получается есть какая-то функция в сампе, отвечающая за отправку текста в чат, так?

    #10

    Пользователь офлайн

    Romzes

    Отправлено 25 сентября 2021 — 15:18

  • ( ^_^ )
    • Группа: Администраторы
    • Сообщений: 7 530
    • Регистрация: 14 августа 11

    Просмотр сообщения

    mama123123 (25 сентября 2021 — 12:13) писал:

    Получается есть какая-то функция в сампе, отвечающая за отправку текста в чат, так?

    SendClientMessage и подобные функции отправляют сообщения в чат

    Форум Pawn.Wiki — Воплоти мечту в реальность!: Примеры CEF, описание функций и многое другое — Форум Pawn.Wiki — Воплоти мечту в реальность!

    Примеры CEF, описание функций и многое другое Оценка: -----

    #1

    Пользователь офлайн

    Макс

    Отправлено 16 октября 2021 — 10:09

  • Местный
    • Группа: Vip
    • Сообщений: 295
    • Регистрация: 15 августа 11
    • Файл cef.asi должен находится в корневой папке с игрой (собирается как loader.dll).
    • Папка cef со всем содержимым так же там же.
    • Так же создается папка CEF по пути Мои документы/GTA San Andreas User Files/CEF/, где хранится кэш, куки файлы и прочие вещи, необходимые для корректной работы Chromium.
    • gta_sa.exe
    • cef.asi
    • cef/
      • client.dll
      • libcef.dll
      • renderer.exe
      • etc .
      • В идеале иметь один браузер со всеми интерфейсами. Не создавать новые для разных действий, а использовать встроенную систему событий.
      • Если имеются клиентские плагины, которые используют относительные пути, то, скорее всего, они поломаются и будут неверно работать. К сожалению, на данный момент во время инициализации меняется текущая директория в другом потоке. Как пример: CLEO библиотека может создать свой лог cleo.log, а так же папки cleo_text и cleo_saves в папке cef. Для корректной работы следует лучше узнавать путь до текущего исполняемого файла (gta_sa.exe).

      Pawn API

      Создает браузер для указанного игрока.

      cef_create_browser(player_id, browser_id, const url[], hidden, focused)

      cef_destroy_browser(player_id, browser_id)

      cef_hide_browser(player_id, browser_id, hide)

      Вызвать событие у клиента. Поддерживаемые типы аргументов: string, integer, float.

      cef_emit_event(player_id, const event_name[], args. )

      Подписаться на событие от клиента. Сигнатура функции колбека: Callback(player_id, const arguments[])

      cef_subscribe(const event_name[], const callback[])

      Проверка на наличие плагина у клиента.

      cef_player_has_plugin(player_id)

      Создает браузер как и в первом случае, но с пометкой, что он будет отображаться на объектах на определенной текстуре. Параметр scale указывает во сколько раз нужно увеличить стандартную текстуру. Например, если стандартная текстура имеет размер 250×30 будет иметь размер 1250×150 при переданном параметре в 5 единиц.

      cef_create_ext_browser(player_id, browser_id, const texture[], const url[], scale)

      Заменяет текстуру переданного объекта на изображение браузера у клиента. Браузер должен быть создан с помощью cef_create_ext_browser, а так же должна присутствовать текстура, указанная при создании, для корректного отображения.

      cef_append_to_object(player_id, browser_id, object_id)

      Возвращает оригинальную текстуру объекта.

      cef_remove_from_object(player_id, browser_id, object_id)

      Включает / выключает инструменты разработчика.

      cef_toggle_dev_tools(player_id, browser_id, enabled)

      Выставляет максимальную слышимую дистанцию для браузера на объекте. reference_distance — расстояние, до которого будет максимальная громкость, а после пойдет на понижение от max_distance до 0.

      native cef_set_audio_settings(player_id, browser_id, Float:max_distance, Float:reference_distance)

      Функция делает браузер сфокусированным. Выводится на первый план, получает все события с клавиатуры и мыши. То же самое, что и передача аргумента focused = true при создании браузера.

      cef_focus_browser(player_id, browser_id, focused)

      Позволяет браузеру получать ввод с клавиатуры в фоне, даже если браузер не имеет фокуса или скрыт. Это позволяет использовать в JS коде функции для подписки на события от клавиатуры все время. Например, можно сделать открытие / закрытие интерфейса по нажатию клавиши (window.addEventListener(«keyup»)).

      cef_always_listen_keys(player_id, browser_id, listen)

      Загружает указанный URL у заданного браузера. Быстрее, чем пересоздание браузера.

      cef_load_url(player_id, browser_id, const url[])

      Так же есть два события встроенных в плагин:

      Вызывается, когда клиент создал у себя браузер по запросу от сервера / плагина. Значение status_code либо 0 (при неудачном создании), либо HTTP код (200, 404 etc).

      forward OnCefBrowserCreated(player_id, browser_id, status_code)

      Вызывается после подключения клиента к CEF серверу, либо по истечению тайм-аута. Грубо говоря, замена ручной проверки cef_player_has_plugin.

      forward OnCefInitialize(player_id, success)

      Browser API
      Так же у браузеров есть свое API для управления ими.

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

      cef.set_focus(focused)

      Подписывается на событие от браузера / других плагинов.

      cef.on(event_name, callback)

      Отписывается от события. Чтобы использовать данную функцию, необходимо передавать переменную, которая содержит функцию на колбек события, указанный при подписке на событие.
      Не работает на данный момент, сломано!

      cef.off(event_name, callback)

      Скрывает браузер и отключает звук от него.

      cef.hide(hide)

      Вызвать событие на сервере / в сторонних плагинах с указанными аргументами. Поддерживает все типы, кроме объектов с полями и функций. Замечание: в плагинах возможно использовать все типы по человечески, но на сервере все аргументы преобразуются в единую строку, разделенную пробелами.

      cef.emit(event_name, args. )

      C API

      Устаревший пример, больше не работает [Показать]

      #include // Отменить продолжение выполнения колбеков события. А так же не отправлять его серверу. static const int EXTERNAL_BREAK = 1; // Продолжить выполнение. Если никто не отменил его, будет передано серверу. static const int EXTERNAL_CONTINUE = 0; using BrowserReadyCallback = void(*)(uint32_t); using EventCallback = int(*)(const char*, cef_list_value_t*); extern "C" < // Проверка на существование браузера в игре. bool cef_browser_exists(uint32_t browser); // Создан ли браузер и загружен веб-сайт. bool cef_browser_ready(uint32_t browser); // Создать браузер с указанными параметрами. Эта функция асинхронная, браузер создается не сразу. void cef_create_browser(uint32_t id, const char *url, bool hidden, bool focused); // Создать CefListValue внутри клиента. cef_list_value_t *cef_create_list(); // Удалить браузер у клиента. void cef_destroy_browser(uint32_t id); // Вызвать событие у браузера. void cef_emit_event(const char *event, cef_list_value_t *list); // Сфокусировать ввод на браузере, а так же вывести его поверх всех остальных. void cef_focus_browser(uint32_t id, bool focus); // Активно ли окно игры. bool cef_gta_window_active(); // Скрыть браузер. void cef_hide_browser(uint32_t id, bool hide); // Проверить доступен ли ввод для конкретного браузера. bool cef_input_available(uint32_t browser); // Подписаться на событие полного создания браузера. void cef_on_browser_ready(uint32_t browser, BrowserReadyCallback callback); bool cef_ready(); // Подписаться на события от браузера. void cef_subscribe(const char *event, EventCallback callback); // Попытаться сфокусироваться на браузере. Аналогично паре cef_input_available + cef_focus_browser, // но с одним значительным условием, между выполнением этих двух функции кто-то другой может захватить фокус. // А данная функция атомарна, что позволяет проверить и сразу же захватить, гарантируя, // что никто другой не сможет в это время получить фокус. bool cef_try_focus_browser(uint32_t browser); >

      Инструкция к применению

      Описание
      Браузер можно создать из двух мест: из игрового мода и плагинов.

      Браузер имеет два дополнительных состояния: hidden и focused. Первое состояние отвечает за отображение браузера на экране игрока. Второе состояние сложнее: если браузер сфокусирован (focused = true), то у игрока замораживается камера, появляется курсор и весь его ввод (от клавиатуры и мыши) идет прямиком в браузер, минуя GTA и SA:MP (за исключением некоторых функций по типу скриншота на F8). Игрок самостоятельно никогда не сможет выйти из этого состояния, вы должны поспособствовать этому в коде интерфейса браузера. Например, можно слушать нажатие клавиши ESC и при ее нажатии вызывать cef.set_focus(false).

      Условно говоря, что открыв какой-нибудь youtube.com из него уже никогда не выйти, не закрыв игру или не поставив таймер на удаление браузера в моде.

      Эти два состояния полностью независимы друг от друга, то есть браузер может быть hidden = false, но в тот же момент focused = false, в таком случае браузер будет показан, но доступа к вводу у него не будет, а игрок может спокойно совершать действия в игре.

      Взаимодействие из игрового мода
      В двух словах: игровой мод должен использовать только несколько нативных функций (создание / удаление браузеров, вызов событий в браузере, а так же подписка на них).

      Скрытый текст [Показать]

      cef.on("lp_open", () => Interface.draw(LOGIN_PAGE)); // чтобы не усложнять код, будем подразумевать, что Interface.draw отображает куски интерфейса cef.on("lp_success", () => < Interface.draw(LOGIN_PAGE_SUCCESS); // по истечению 5 секунд показа интерфейса с успешным логином setTimeout(() =>< cef.set_focus(false); // убираем фокус с браузера, позволив игроку пользоваться игрой cef.hide(true); // скрываем интерфейс Interface.draw(NONE); >, 5000); >); LoginPage.on_password_enter((login, pwd) => < cef.emit("lp_response", 1, login, pwd); // если игрок что-то ввел в поле ввода и нажал клавишу войти, то отправим событие на сервер >); window.addEventListener("keydown", (event) => < // если нажали ESC if (is_esc_pressed(event)) < // нажат ESC во время авторизации if (LoginPage.is_active()) < cef.emit("lp_response", 0); // пользователь отказался от ввода >// могут быть еще какие проверки на интерфейс, когда будет в нем больше логики // в конце концов скрываем интерфейс // но при условии, что ничего не нужно ПРОСТО рисовать if (!Interface.should_draw_something_passive()) < cef.hide(true); >cef.set_focused(false); > >);

      #define CEF_INTERFACE_BROWSER_ID 1 new CEF = . ; public OnBrowserCreated(playerid, browserid, status) < if (status != 200) < // интернет провайдер может блокировать некоторые страницы SendClientMessage(playerid, -1, "Невозможно открыть страницу. Возможно, есть проблемы с интернет соединением."); return; >// браузер с интерфейсом успешно создан, откроем страницу с логином, если нужна if (browserid == CEF_INTERFACE_BROWSER_ID) < if (CEF[playerid][await_lp]) < open_login_page(playerid); >> > public OnLoginPageResponse(playerid, const arguments[]) < if (CEF[playerid][await_lp_response] == false) < Kick(playerid); // ну это так . просто никто не гарантирует, что страница не была подменена, а может и проблемы с соединением return; >new resp, login[128], pwd[128]; if (!sscanf(. resp, login, pwd) < if (resp == 0) < Kick(playerid); // отказался от ввода return; >CEF[playerid][tries] += 1; if (CEF[playerid][tries] > MAX_PWD_TRIES) < Kick(playerid); return; >new success = check_login_pwd(login, pwd); if (success) < cef_emit_event(playerid, "lp_success"); >else < cef_emit_event(playerid, "lp_try_again", CEF[playerid][tries]); >> > main() < cef_subscribe("lp_response", "OnLoginPageResponse"); >public OnPlayerConnect(playerid) < >stock initialize_interface(playerid) < cef_create_browser(playerid, CEF_INTERFACE_BROWSER_ID, "https://cef.project.com", true, false); // создается единожды браузер со страницей всего интерфейса CEF[playerid][init] = true; CEF[playerid][await_lp] = true; >stock open_login_page(playerid)

      Так же есть небольшой пример псевдокода, показывающий взаимодействие игрового мода, плагина и браузера:

      Скрытый текст [Показать]

      use std::os::raw::c_char; use std::sync::mpsc::; use std::time::; use cef_api::CefApi; use cef_api::; const DLL_PROCESS_ATTACH: u32 = 1; const DLL_PROCESS_DETACH: u32 = 0; /// суть приложения заключается в следующем: /// есть небольшая веб страница с простым интерфейсом. при нажатии на кнопку 0x72 игрок встает на месте, /// появляется курсор и он должен кликнуть на какого-либо персонажа /// далее этот плагин ищет игрока, на которого кликнули и отправляет событие обратно в браузер /// браузер в свою очередь создает кольцо со списком действий над игроком (как пример, показать документы, пожать руку или еще что) /// при клике на нужное действие отправляется событие уже на сервер, где происходит его обработка /// браузер сам внутри себя скрывается и обратно разблокирует ввод игроком /// к сожалению, исходный код той тестовой страницы не сохранился. подразумевалось, что сервер сам создавал браузер как часть своего интерфейса /// грубо говоря, там был следующий код, который будет в файле ниже struct App < circle: bool, cef: CefApi, pressed: Instant, event_tx: Sender<(i32, i32)>, event_rx: Receiver<(i32, i32)>, > static mut APP: Option = None; const CEF_INTERFACE_BROWSER: u32 = 102; #[no_mangle] pub extern "C" fn cef_initialize() < let cef = CefApi::wait_loading().expect("No client.dll"); let (event_tx, event_rx) = std::sync::mpsc::channel(); // подписка на события от браузера (так же можно и от сервера слушать) cef.subscribe("circle_click", circle_click); cef.subscribe("circle_closed", circle_closed); let app = App < circle: false, pressed: Instant::now(), cef, event_tx, event_rx, >; unsafe < APP = Some(app); >> #[no_mangle] pub extern "C" fn cef_samp_mainloop() < if let Some(app) = unsafe < APP.as_mut() >< if client_api::utils::is_key_pressed(0x72) < if app.pressed.elapsed() >= Duration::from_millis(500) < if !app.circle < // если нажата кнопочка и можно в данный момент показать браузер, то показываем его и отсылаем событие if app.cef.try_focus_browser(CEF_INTERFACE_BROWSER) < let args = app.cef.create_list(); app.cef.hide_browser(CEF_INTERFACE_BROWSER, false); app.cef.emit_event("show_actions", &args); app.circle = true; >> else < app.cef.focus_browser(CEF_INTERFACE_BROWSER, false); app.cef.hide_browser(CEF_INTERFACE_BROWSER, true); app.circle = false; >app.pressed = Instant::now(); > > // если есть новые события от цефа, то обрабатываем их while let Ok((x, y)) = app.event_rx.try_recv() < let x = x as f32; let y = y as f32; let mut min = 10000.0f32; let mut min_id = u16::max_value(); // поиск по всем игрокам в зоне стрима нужных, а именно тех, на которых игрок кликнул в браузере if let Some(mut players) = client_api::samp::players::players() < for player in players.filter(|p| p.is_in_stream()) < if let Some(remote) = player.remote_player() < let pos = remote.position(); let (p_x, p_y) = client_api::gta::display::calc_screen_coords(&pos) .unwrap_or((-1.0, -1.0)); let delta = ((p_x - x).powf(2.0) + (p_y - y).powf(2.0)).sqrt(); if delta < min < min = delta; min_id = remote.id(); >> > > if min > > > > // событие приходит, когда игрок в браузере нажал ЛКМ в какую-либо точку // событие содержит в себе координаты экрана X и Y. в браузере выглядит как cef.emit("circle_click", mouse.x, mouse.y); pub extern "C" fn circle_click(event: *const c_char, args: *mut cef_list_value_t) -> i32 < if let Some(args) = List::try_from_raw(args) < if args.len() == 3 < let x = args.integer(1); let y = args.integer(2); unsafe < APP.as_mut().map(|app| app.event_tx.send((x, y))); >> > 1 > pub extern "C" fn circle_closed(_: *const c_char, _: *mut cef_list_value_t) -> i32 < if let Some(app) = unsafe < APP.as_mut() > < app.circle = false; >1 >

      forward on_circle_action(player_id, const arguments[]); public on_circle_action(player_id, const arguments[]) < // к сожалению, из-за специфики павн, приходится отправлять аргументы как строку new target_id, action_id; if (sscanf("%d %d", arguments, player_id, action_id)) < switch (action_id) < case 0: < show_docs(player_id, target_id); break; >case 1: < do_handshake(player_id, target_id); break; >> > > main()

      cef.on("circle_found_player", (name, id) => < Circle.show_for_player(name, id); // тут рисовался круг с действиями Circle.on_select_action((player_id, action_id) =>< cef.emit("circle_do_action", player_id, action_id); // отправляет выбранное действие уже на сервер, а не в плагин cef.hide(true); // скрыть браузер cef.set_focus(false); // разблокировать ввод игроку cef.emit("circle_closed"); // уведомить плагин, что действие выбрано >); >); cef.on("show_actions", () => < Circle.wait_for_input((x, y) =>< cef.emit("circle_click", x, y); // если игрок кликнул куда-либо на экране, то отправляется событие в плагин >); >);

      Этот пост почти полная копия оригинала в котором есть неточности и битые ссылки. Также существует вероятность что его могут удалить, по этому решил продублировать на форум.

      Сообщение отредактировал Макс: 06 марта 2023 — 06:34

      #2

      Пользователь офлайн

      Макс

      Отправлено 06 марта 2023 — 06:35

    • Местный
    • Группа: Vip
    • Сообщений: 295
    • Регистрация: 15 августа 11

    Обновлены примеры кода (были не рабочие ссылки).

    #3

    Пользователь офлайн

    AngryKitten

    Отправлено 24 мая 2023 — 23:11

  • Прохожий
    • Группа: Пользователи
    • Сообщений: 20
    • Регистрация: 10 декабря 17

    как возможно сделать запуск .html файла из папки с игрой ?

    #4

    Пользователь офлайн

    Perdolinka

    Отправлено 24 мая 2023 — 23:18

  • Профессионал
    • Группа: Активные пользователи
    • Сообщений: 2 194
    • Регистрация: 07 июня 21

    Просмотр сообщения

    AngryKitten (24 мая 2023 — 23:11) писал:

    как возможно сделать запуск .html файла из папки с игрой ?

    Передать в качестве url следующую строку:

    file://директория_к_файлу/файл.html

    #5

    Пользователь офлайн

    AngryKitten

    Отправлено 25 мая 2023 — 10:15

  • Прохожий
    • Группа: Пользователи
    • Сообщений: 20
    • Регистрация: 10 декабря 17

    Просмотр сообщения

    Perdolinka (24 мая 2023 — 23:18) писал:

    Передать в качестве url следующую строку:

    file://директория_к_файлу/файл.html

    А вот возможно ли еще сделать авто определение Диска, Пути к примеру file://s%/cef/assets/index.html где s% автоопределение. Или же нужны плагины какие то уже для этой реализации ?

    #6

    Пользователь офлайн

    Perdolinka

    Отправлено 25 мая 2023 — 11:16

  • Профессионал
    • Группа: Активные пользователи
    • Сообщений: 2 194
    • Регистрация: 07 июня 21

    Просмотр сообщения

    AngryKitten (25 мая 2023 — 10:15) писал:

    А вот возможно ли еще сделать авто определение Диска, Пути к примеру file://s%/cef/assets/index.html где s% автоопределение. Или же нужны плагины какие то уже для этой реализации ?

    Нужна, как минимум функция, получающая текущую рабочую область, исходя из таких данных. Честно, я не знаю существует ли такое вообще, но в Pawn такого точно нет(или, быть может, я не знаю о существовании такого). Только если явным образом указывать.

    Сообщение отредактировал Perdolinka: 25 мая 2023 — 11:28

    Saved searches

    Use saved searches to filter your results more quickly

    Cancel Create saved search

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

    Client and server plugins for SA:MP to embed CEF.

    License

    Pycckue-Bnepeg/samp-cef

    This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

    Go to file

    Folders and files

    Last commit message
    Last commit date

    Latest commit

    History

    View all files

    Repository files navigation

    SAMP CEF

    This project embeds CEF into SA:MP expanding abilities to express yourself with beauty in-game interfaces using HTML / CSS / JavaScript.

    It is a FRAMEWORK (or SDK), not something that you download and use. To be able to create you should have some webdev basics (JS / HTML / CSS).

    What you can do

    • Create browser views from a gamemode or from client-side plugins (C ABI).
    • Place browsers on objects (with kind-of spatial sound)
    • Send and receive custom defined events from / to clients.

    Crates

    • cef — Rust wrappers around CEF C API.
    • cef-api — Rust wrappers to build client plugins using CEF.
    • cef-interface — example of a Rust plugin.
    • cef-sys — bindings for CEF C API.
    • client — client CEF plugin.
    • d3dx9 — bindings to DirectX SDK.
    • loader — small loader that makes it work (should be named cef.asi ).
    • messages — protobuf messages to communicate with server on net.
    • network — quinn glue (laminar like).
    • proto — raw proto files.
    • renderer — glue between CEF renderer process and main logic.
    • server — server side plugin.

    Download

    Latest builds from the master branch are placed in the Actions.

    Currently there is those OS:

    • CentOS 7 ( cef-centos-7.so )
    • Debian 9, 10, 11 ( cef-debian-*.so )
    • Ubuntu 18.04, 20.04 ( cef-ubuntu-*.so )
    • Windows ( cef-windows.dll )

    And also all client-side parts ( cef.asi , client.dll , renderer.exe ).

    Building

    Dependencies

    • Rust compiler (nightly) with i686-windows-pc-msvc toolchain
    • Prebuilt CEF with proprietary codes (if you wanna use streams). I had one for you in releases. (Client only)
    • Environment variable CEF_PATH that points to libcef.lib (client only).
      • In powershell it’s like $env:CEF_PATH=»C:/some/path»
      • Then build

      Notes .

      If you get a linker error, you should change hard-coded links in the source code

      • client/build.rs — path to DirectX SDK (default one)

      Running Rust

      cargo +nightly build —target i686-windows-pc-msvc —release

      rustup toolchain install nightly-i686 cargo +nightly-i686 build --release

      also the client plugin can be built using OpenAL for sound (rodio by default). to do that compile the client without default features. for example:

      cargo +nightly-i686 build --release --package client --no-default-features 

      to make it work you should place openal.dll as sound.dll in the cef folder. I do not remember what version is used exactly . but I have it on the release page.

      to build specific part you can add —package

      for example if you will try to build ALL crates on linux, you will get an error. so, pass —package server to build only server on linux.

      CEF version

      Current versions of CEF and Chromium: 89.0.5+gc1f90d8+chromium-89.0.4389.40 release branch 4389

      Date: February 26, 2021 CEF Version: 89.0.5+gc1f90d8+chromium-89.0.4389.40 CEF URL: https://bitbucket.org/chromiumembedded/cef.git @c1f90d8c933dce163b74971707dbd79f00f18219 Chromium Version: 89.0.4389.40 Chromium URL: https://chromium.googlesource.com/chromium/src.git @2c3400a2b467aa3cf67b4942740db29e60feecb8 

      Docs

      • docs/main_ru.md
      • docs/main_en.md (it’s better to google translate russian one . )
      • Also, check out wiki on github.

      Video examples

      • https://www.youtube.com/watch?v=Jh9IBlOKoVM (гоблин на весь дом)
      • https://www.youtube.com/watch?v=jU-O8_t1AfI (простые интерфейсы)
      • https://www.youtube.com/watch?v=qs7n8LoVYs4 (кастомный интерфейс гта)
      • https://www.youtube.com/watch?v=vcyTjn3RJhs (голосовой чят)
      • https://www.youtube.com/watch?v=6OnCSHKcOGU (кухня по телеку)

      BIG TODO: EXAMPLES

      But it’s similar to fivem or ragemp implementations.

      About

      Client and server plugins for SA:MP to embed CEF.

      Что такое cef в крмп

      Вы должны быть пользователем, чтобы оставить комментарий

      Создать учетную запись

      Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

      Войти

      Уже есть аккаунт? Войти в систему.

      Последние посетители 0 пользователей онлайн

      Ни одного зарегистрированного пользователя не просматривает данную страницу

      Похожий контент

      Vadik0

      От Vadik0

      Добрейшего дня суток!
      Я в поисках команды, для создания CRMP проекта на ПК.

      Расскажу немного о себе, что и как.
      Я, адекватный, ответственный, коммуникабельный парень. Пока не работаю, т.к таковой возможности не представляется, но в ближайшее время собираюсь. Решил создать проект на ПК.

      Что, касаемо критериев?
      1. В первую очередь, важна ваша ответственность, вежливость, коммуникабельность.
      2. Желание сделать свой вклад в будущее проекта.
      3. Ваш возраст строго 16+ (исключения возможны)
      4. Платёжеспособность (после отклика на моё предложение, я вам расскажу что и как)
      5. Наличие свободного времени (с каждым этапом развития проекта, каждый человек из команды будет само собой уделять большее количество времени)
      6. Наличие PC (не ниже среднего)
      7. Наличие Discord
      8. Наличие ВКонтакте, Telegram
      9. Наличие микрофона.

      Кого сейчас ищем?
      1. Разработчиков игры (мапперы, скриптеры, и т.д)
      2. WEB Разработчик (сделать сайт. С форумом я конечно справлюсь, но могут быть проблемы )
      3. Тестеры (нужны будут, когда будет готова игра. Пока такой потребности нет).

      Сообщество ВКонтакте уже имеется, Telegram канал тоже имеется, Discord соответственно тоже.

      Для связи со мной:
      1. ВКонтакте — ссылка на страницу (кликабельно)
      2. Telegram — ссылка на Telegram аккаунт (кликабельно)

      Попытка не пытка, попробовать всегда можно! Так или иначе, живём 1 раз. Жду всех!

      От Денис0403
      От sergeenko

      Как добавить на сервер новое авто (не заменяя старый)?
      В самом корне игры я всё настроил,
      мне нужно в самом моде настроить.

      Помогите пожалуйста :0

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *