Skip to content

Commit

Permalink
some docs
Browse files Browse the repository at this point in the history
  • Loading branch information
Pycckue-Bnepeg committed Jun 30, 2021
1 parent bf93ff7 commit c75ca87
Show file tree
Hide file tree
Showing 2 changed files with 152 additions and 3 deletions.
147 changes: 146 additions & 1 deletion docs/main_en.md
Original file line number Diff line number Diff line change
@@ -1 +1,146 @@
todo ...

## File structure
- The `cef.asi` should be in the game root folder (builded as `loader.dll`).
- Also `cef` folder should be placed there.
- There is a `CEF` dir at `Documents/GTA San Andreas User Files/CEF/`, where is Chromium cookies, caches and so on.
- `gta_sa.exe`
- `cef.asi`
- `cef/`
- `client.dll`
- `libcef.dll`
- `sound.dll`
- etc …


## Tips and some limitations
- You should have one browser for all your interfaces to achieve best performance. They can communicate using built-in event system.
- If there is plugins that use relative paths, it could lead to some unexpected things (like `cleo_text` and `cleo_saves` may be placed at `cef` folder). So, please, use absolute paths!

## Pawn API

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

Creates a browser for a player. `browser_id` can be any ID (like in SAMP dialogs). `focused` means it hooks all input and passes it in the browser.

`cef_destroy_browser(player_id, browser_id)`

Deletes a browser.

`cef_hide_browser(player_id, browser_id, hide)`

Hides a browser.

`cef_emit_event(player_id, const event_name[], args…)`

Call a client event. Supported types of arguments: `string`, `integer`, `float`.

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

Subscribe for client events. Callback signature: `Callback(player_id, const arguments[])`, `arguments` is a string, delimiter of arguments is a space :DDDDD

`cef_player_has_plugin(player_id)`

Check if a player has the plugin.

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

Creates a browser that will be shown on a texture of an object in the future. `scale` arg multiplies texture by this value. `250x30` will be `1250x150` if scale is 5.

`cef_append_to_object(player_id, browser_id, object_id)`

Changes a texture on an object with browser one. The browser should be created with `cef_create_ext_browser`.

`cef_remove_from_object(player_id, browser_id, object_id)`

Return the default texture for an object.

`cef_toggle_dev_tools(player_id, browser_id, enabled)`

Toggles dev tools.

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

Changes audio settings of a browser. `reference_distance` - distance while volume will be 1.0. Then decreases till `max_distance` when it will be 0.

### Handlers:

`forward OnCefBrowserCreated(player_id, browser_id, status_code)`

Called when a player has created a browser (from a server or a plugin). `status_code` will be 0 if there is some error. otherwise it is a HTTP response code (200, 404, etc).

`forward OnCefInitialize(player_id, success)`

Called when a player connected to the server with a plugin (or timed-out if there is no installed plugin). Kind of automatic `cef_player_has_plugin`.

## Browser API

`cef.set_focus(focused)`

Set a focus on a browser. It will be rendered last (means have high Z coord). Also can receive mouse and keyboard events.

`cef.on(event_name, callback)`
Subscribes for events from a server / client plugins.

`cef.off(event_name, callback)`

Unsub from an event.

`cef.hide(hide)`

Hides a browser and mutes it.

`cef.emit(event_name, args…)`

Triggers an event with a given name. Arguments can be anything. BUT! On the server it will be a string splited by spaces. In client plugins there is full functionality.

## C API

THIS IS DEPRECATED AND NOT WORKING AT ALL!

Check an rust example using C API (`cef-interface` crate) and `client/external.rs` to check the API.

```C++
#include <cstdint>

// Do not call next event handlers for this event.
static const int EXTERNAL_BREAK = 1;
// Continue handling. If all handlers returns this, server will got the event.
static const int EXTERNAL_CONTINUE = 0;

using BrowserReadyCallback = void(*)(uint32_t);
using EventCallback = int(*)(const char*, cef_list_value_t*);

extern "C" {
// Check if a browser exists.
bool cef_browser_exists(uint32_t browser);
// Is a browser ready (created and the page is loaded)
bool cef_browser_ready(uint32_t browser);
// Make a request to create a browser.
void cef_create_browser(uint32_t id, const char *url, bool hidden, bool focused);
// Create `CefListValue`. THE CLIENT OWNS IT!!!
cef_list_value_t *cef_create_list();
// Destroy a browser.
void cef_destroy_browser(uint32_t id);
// Trigger an event with given args.
void cef_emit_event(const char *event, cef_list_value_t *list);
// Focus a browser.
void cef_focus_browser(uint32_t id, bool focus);
// Check if a GTA window is active.
bool cef_gta_window_active();
// Hide a browser.
void cef_hide_browser(uint32_t id, bool hide);
// Can a browser receive input events now.
bool cef_input_available(uint32_t browser);
// Subscribe on browser ready events (like pawn one).
void cef_on_browser_ready(uint32_t browser, BrowserReadyCallback callback);
// Kind of deprecated
bool cef_ready();
// Subscribe on an event.
void cef_subscribe(const char *event, EventCallback callback);
// `cef_input_available` + `cef_focus_browser`, but atomic. This function should be used in this cases.
bool cef_try_focus_browser(uint32_t browser);
}
```
Example?: https://gist.github.com/ZOTTCE/5c5bf3b63b1fec29c104e0085cd51f9f
Alseo example? https://gist.github.com/ZOTTCE/7dee2d196138457772aa79355069014a
8 changes: 6 additions & 2 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ This project embeds CEF into SA:MP expanding abilities to express yourself with

**It is a FRAMEWORK (or SDK), not something that you download and use**

**ALSO `clientapi.h` IS OUTDATED!**

## 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)
Expand Down Expand Up @@ -45,9 +47,11 @@ Chromium URL: https://chromium.googlesource.com/chromium/src.git
@2c3400a2b467aa3cf67b4942740db29e60feecb8
```

docs (ru only sorry ......) [docs/main_ru.md](/docs/main_ru.md)
docs:
- [docs/main_ru.md](/docs/main_ru.md)
- [docs/main_en.md](/docs/main_en.md) (it's better to google translate russian one ...)

видеоприколы на основе разработки:
videos:
- https://www.youtube.com/watch?v=Jh9IBlOKoVM (гоблин на весь дом)
- https://www.youtube.com/watch?v=jU-O8_t1AfI (простые интерфейсы)
- https://www.youtube.com/watch?v=qs7n8LoVYs4 (кастомный интерфейс гта)
Expand Down

0 comments on commit c75ca87

Please sign in to comment.