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

Перейти к содержимому

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

[ Урок ]
Работа с CEF
Оценка: -----

#1
Пользователь офлайн   SRIPTER MODOV 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Всем привет !
Я решил написать урок как работать с CEF и сделать пару примеров, чтобы наконец-то стало всем понятно и давайте начнем .


Установка

Ссылка на GTA: https://disk.yandex..../JQM0l8ZZ8YIWbA ( Вам нужно обновить только client файлы ( можно скачать ниже ) )
Чисто клиент и сервер : https://disk.yandex..../YbVqn7td4lxsng


Функции:


1. cef_create_browser(player_id, browser_id, const url[], hidden, focused) 
    Создает браузер в игре и показывает его человеку.
    
    player_id - в данном случае кому будет показан браузер
    browser_id - ID браузера ( может быть даже с буквами "0x56" )
    url[] - Ссылка на ваш интерфейс
    hidden - скрыт браузер или нет ( false - нет , true - Да )
    focused - будет ли приниматься ввод мышки и клавиатуры , нельзя открыть чат , вообщем делает браузер сфокусированным.

2. cef_destroy_browser(player_id, browser_id) 
    удаляет браузер у игрока.

    player_id - у кого будет удален браузер
    browser_id - ID браузера

3.cef_hide_browser(player_id, browser_id, hide)
   скрывает браузер у игрока 
   
   player_id - у кого будет скрыт браузер
   browser_id - ID браузера
   hide - скрыт ли браузер или нет ( true - да , false - нет, аналогично что и в функции cef_create_browser )
   
4.cef_emit_event(player_id, const event_name[], args…)
   отправляет/вызывает событие у клиента ( браузера ) 

   player_id - ID игрока, от кого будет отправлено событие
   event_name - название ивента ( Примеры будут ниже тут я не хочу что-то размещать ) 
   args - аргументы ( Поддерживаемые типы аргументов: string, integer, float ) 

5.cef_subscribe(const event_name[], const callback[])
   подписывается на событие от браузера

   event_name - событие на которое будет осуществлена подписка
   callback - будет передано событие сюда для обработки  ( Сигнатура функции колбека: Callback(player_id, const arguments[]) )

6.cef_player_has_plugin(player_id)
   Есть ли у игрока плагин

   player_id - у кого будет осуществлена проверка

7.cef_create_ext_browser(player_id, browser_id, const texture[], const url[], scale)
   Создает браузер как и в первом случае, но с пометкой, что он будет отображаться на объектах на определенной текстуре. Параметр scale указывает во сколько раз нужно увеличить стандартную текстуру. Например, если стандартная текстура имеет размер 
   250x30 будет иметь размер 1250x150 при переданном параметре в 5 единиц.

   player_id - ID игрока кому будет создан браузер 
   browser_id - ID браузера 
   texture - текстура на которую будет наложено изображение
   url[] - ссылка на видео
   scale - размер изображения

8.cef_append_to_object(player_id, browser_id, object_id)
  Заменяет текстуру переданного объекта на изображение браузера у клиента. Браузер должен быть создан с помощью cef_create_ext_browser, а так же должна присутствовать текстура, указанная при создании, для корректного отображения.
  
  player_id - ID игрока кому будет заменено изображение
  browser_id - ID браузера
  object_id - ид обьекта у которого будет заменена текстура

9.cef_remove_from_object(player_id, browser_id, object_id)
   Удалит текстуру изображения и вернет нормальную.
  
   player_id - ID игрока кому будет заменено изображение
   browser_id - ID браузера
   object_id - ид обьекта у которого будет заменена текстура

10.cef_toggle_dev_tools(player_id, browser_id, enabled)
    включает консоль разработчика
  
    player_id - ID игрока кому будет заменено изображение
    browser_id - ID браузера
    enabled - включено ли ( true - да, false - нет )

11.cef_set_audio_settings(player_id, browser_id, Float:max_distance, Float:reference_distance)
    Выставляет максимальную слышемую дистанцию для браузера на объекте. reference_distance - расстояние, до которого будет максимальная громкость, а после пойдет на понижение от max_distance до 0.

    player_id - ID игрока кому будет заменено изображение
    browser_id - ID браузера
    max_distance - максимальная дистация слышания музыки 
    reference_distance - расстояние, до которого будет максимальная громкость

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

    player_id - ID игрока кому будет заменено изображение
    browser_id - ID браузера
    focused - включен ли фокус ( true - да , false - нет, аналогично  ef_create_browser )

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

    player_id - ID игрока кому будет заменено изображение
    browser_id - ID браузера
    listen - включена ли функция ( true - да, false - нет )

14.cef_load_url(player_id, browser_id, const url[])
    Загружает указанный URL у заданного браузера. Быстрее, чем пересоздание браузера.
    
    player_id - ID игрока кому будет заменено изображение
    browser_id - ID браузера
    url[] - ID страницы для загрузки



События:

forward OnCefBrowserCreated(player_id, browser_id, status_code) Вызывается, когда клиент создал у себя браузер по запросу от сервера / плагина. Значение status_code либо 0 (при неудачном создании), либо HTTP код (200, 404 etc).
forward OnCefInitialize(player_id, success) Вызывается после подключения клиента к CEF серверу, либо по истечению тайм-аута. Грубо говоря, замена ручной проверки cef_player_has_plugin.


Browser API:
1. cef.set_focus(focused) 
   ставит/убирает фокус браузеру ( будет фокус браузера у кого он был вызван )
   
   focused - включен ли фокус ( true - да, false - нет )

2.cef.on(event_name, callback) 
   Подписывается на событие от браузера / других плагинов.

   event_name - название события которое мы передавали с игры ( cef_emit_event ) 
   callback - куда будет переданы значения

3.cef.hide(hide)
   Скрывает браузер ( будет скрыт у кого он был вызван)

   hide - скрыт ли ( true - да, false - нет )

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

  event_name - событие которое будет вызвано на сервере ( в cef_subcribe мы на него подписывались )
  args - значения которые будут переданы 



 


Автор: Я ( vk.com/weckek )
Примеры будут добавлены в уроке 2.
Если понравилось , то ставь +

Сообщение отредактировал SRIPTER MODOV: 31 октября 2021 - 12:53

9

#2
Пользователь офлайн   SRIPTER MODOV 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Урок 2
Тут я вам покажу как сделать легкий худ с ником.


1.Напишем с вами HTML страницу и подключим к нему JS, без стилей

<!DOCTYPE html>
<html>

<head>
    <style>
        .box {
            position: absolute;
            top: 500px;
        }
    </style>
</head>

<body>
    <div class="box">
        <span>hp:</span><span id="hp">0</span>
        <span>max_hp:</span><span id="max_hp">0</span>
        <span>arm:</span><span id="arm">0</span>
        <span>breath:</span><span id="breath">0</span>
        <span>wanted:</span><span id="wanted">0</span>
        <span>weapon:</span><span id="weapon">0</span>
        <span>ammo:</span><span id="ammo">0</span>
        <span>max_ammo:</span><span id="max_ammo">0</span>
        <span>money:</span><span id="money">0</span>
        <span>speed:</span><span id="speed">0</span>
    </div>
    <script>


        cef.emit("game:hud:setComponentVisible", "interface", false);
        cef.emit("game:hud:setComponentVisible", "radar", true);

        cef.emit("game:data:pollPlayerStats", true, 50);

        cef.on("game:data:playerStats", (hp, max_hp, arm, breath, wanted, weapon, ammo, max_ammo, money, speed) => {
            document.getElementById("hp").innerText = `${hp}`;
            document.getElementById("max_hp").innerText = `${max_hp}`;
            document.getElementById("arm").innerText = `${arm}`;
            document.getElementById("breath").innerText = `${breath}`;
            document.getElementById("wanted").innerText = `${wanted}`;
            document.getElementById("weapon").innerText = `${weapon}`;
            document.getElementById("ammo").innerText = `${ammo}`;
            document.getElementById("max_ammo").innerText = `${max_ammo}`;
            document.getElementById("money").innerText = `${money}`;
            document.getElementById("speed").innerText = `${speed}`;
        });
    </script>
</body>

</html>




Pawn

#include <cef>

#define INTERFACE_BROWSER_ID 0xABCDE
#define INTERFACE_BROWSER_URL "http://your-hosting.com"

public OnCefInitialize(player_id, success) {
    if (success == 1) {

        cef_create_browser(player_id, INTERFACE_BROWSER_ID, INTERFACE_BROWSER_URL, false, false);
        return;
    }

    SendClientMessage(player_id, -1, "загружен");
}




Тема будет дополняться! Завтра мы сделаем что-то по типу кинотеатра ( хотя он уже есть, но мы сделаем свой ! )

Сообщение отредактировал SRIPTER MODOV: 31 октября 2021 - 13:27

4

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

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
безусловно + твой
0

#4
Пользователь офлайн   SRIPTER MODOV 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Запишу скоро видос как установить, многие даже и не поняли)
0

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

  • Пользователь
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSRIPTER MODOV (01 ноября 2021 - 14:23) писал:

Запишу скоро видос как установить, многие даже и не поняли)



Научи меня CEF
0

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

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
У меня небольшой вопрос по cef, хостинг с файлами обязателен? Я тут рылся в файлах одного проекта, и там как будто на локалке сделано, чесно только начал разбиратся в cef так что извините есть что то не пойму. В файлах лежат css-ники и сами картинки из игры, при замене картинок они заменяются и в игре, вопрос как так сделано? Мне просто не очень хочется платить за хост с 2-3 интерфейсами поэтому интересуюсь запуском cef чисто на клиентской стороне.
0

#7
Пользователь офлайн   SRIPTER MODOV 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияdogikru (16 ноября 2021 - 12:12) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]



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

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

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Захотел добавить к себе уведомления и снегопад на CEF
В OnPlayerSpawn для создания уведомления использовал cef_create_browser
В снегопаде при создании тоже cef_create_browser, а при удалении cef_destroy_browser(playerid, 0x12346);.
Теперь я столкнулся с такой проблеммой, если включаю и удаляю снег(через личные настройки на сервере) то у меня пропадают уведомления.
Не подскажете как лучше заменить cef_creteatebrowser и cef_destroy_browser(playerid, 0x12346);
0

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

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияalexsjones404 (15 февраля 2022 - 16:39) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]

Ты скорее всего создаёшь браузеры с одинаковым ID.
0

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

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Как научится работать с цеф и на премер худ сделать
0

Поделиться темой:


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

2 человек читают эту тему
0 пользователей, 2 гостей, 0 скрытых пользователей


Яндекс.Метрика