Форум Pawn.Wiki - Воплоти мечту в реальность!: Интерфейс - Форум Pawn.Wiki - Воплоти мечту в реальность!

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

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

Интерфейс Взаимодействие js скрипта и cef в игре. Оценка: -----

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

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
Связь интерфейса ( html ) и Pawn кода

Сегодня я расскажу вам как можно связать форму в html с pawn с помощью CEF.

Для начала вам нужно будет скачать собранный CEF для сервера и клиента.

Затем вам нужно будет арендовать хостинг с доменом. ( Советую beget.com )

Далее вам нужно создать html страницу с кодом

<style>
        /* Bordered form */
    form {
        border: 3px solid #f1f1f1;
    }

    /* Full-width inputs */
    input[type=text], input[type=password] {
        width: 100%;
        padding: 12px 20px;
        margin: 8px 0;
        display: inline-block;
        border: 1px solid #ccc;
        box-sizing: border-box;
    }

    /* Set a style for all buttons */
    button {
        background-color: #4CAF50;
        color: white;
        padding: 14px 20px;
        margin: 8px 0;
        border: none;
        cursor: pointer;
        width: 100%;
    }

    /* Add a hover effect for buttons */
    button:hover {
        opacity: 0.8;
    }

    /* Extra style for the cancel button (red) */
    .cancelbtn {
        width: auto;
        padding: 10px 18px;
        background-color: #f44336;
    }

    /* Center the avatar image inside this container */
    .imgcontainer {
        text-align: center;
        margin: 24px 0 12px 0;
    }

    /* Avatar image */
    img.avatar {
        width: 40%;
        border-radius: 50%;
    }

    /* Add padding to containers */
    .container {
        padding: 16px;
    }

    /* The "Forgot password" text */
    span.psw {
        float: right;
        padding-top: 16px;
    }

    /* Change styles for span and cancel button on extra small screens */
    @media screen and (max-width: 300px) {
        span.psw {
            display: block;
            float: none;
        }
        .cancelbtn {
            width: 100%;
        }
    }
        /* The Modal (background) */
        .modal {
            display: none; /* Hidden by default */
            position: fixed; /* Stay in place */
            z-index: 1; /* Sit on top */
            left: 0;
            top: 0;
            width: 100%; /* Full width */
            height: 100%; /* Full height */
            overflow: auto; /* Enable scroll if needed */
            background-color: rgb(0,0,0); /* Fallback color */
            background-color: rgba(0,0,0,0.4); /* Black w/ opacity */
            padding-top: 60px;
        }

        /* Modal Content/Box */
        .modal-content {
            background-color: #fefefe;
            margin: 5px auto; /* 15% from the top and centered */
            border: 1px solid #888;
            width: 80%; /* Could be more or less, depending on screen size */
        }

        /* The Close Button */
        .close {
            /* Position it in the top right corner outside of the modal */
            position: absolute;
            right: 25px;
            top: 0;
            color: #000;
            font-size: 35px;
            font-weight: bold;
        }

        /* Close button on hover */
        .close:hover,
        .close:focus {
            color: red;
            cursor: pointer;
        }

        /* Add Zoom Animation */
        .animate {
            -webkit-animation: animatezoom 0.6s;
            animation: animatezoom 0.6s
        }

        @-webkit-keyframes animatezoom {
            from {-webkit-transform: scale(0)}
            to {-webkit-transform: scale(1)}
        }

        @keyframes animatezoom {
            from {transform: scale(0)}
            to {transform: scale(1)}
        }
    </style>
   <!-- Button to open the modal login form -->
<button onclick="document.getElementById('id01').style.display='block'">Login</button>

<!-- The Modal -->
<div id="id01" class="modal">
  <span onclick="document.getElementById('id01').style.display='none'"
class="close" title="Close Modal">×</span>

  <!-- Modal Content -->
  <form class="modal-content animate" class="rf" novalidate>
    <div class="imgcontainer">
      <img src="img_avatar2.png" alt="Avatar" class="avatar">
    </div>
    <p id="response">None</p>

    <div class="container">
      <label for="uname"><b>Username</b></label>
      <input  class="login" type="text"  name="uname">

      <label  for="psw"><b>Password</b></label>
      <input class="pass" type="password"  name="psw">

      <button onclick="LoginClick(this)" type="button">Login</button>
      <label>
        <input type="checkbox" checked="checked" name="remember"> Remember me
      </label>
    </div>

    <div class="container" style="background-color:#f1f1f1">
      <button type="button" onclick="onExitClick(this)" class="cancelbtn">Cancel</button>
      <span class="psw">Forgot <a href="#">password?</a></span>
    </div>
  </form>
</div>

  <script>
    // Get the modal
    var modal = document.getElementById('id1');
    
    // When the user clicks anywhere outside of the modal, close it
    window.onclick = function(event) {
        if (event.target == modal) {
            modal.style.display = "none";
        }
    }
    </script>
    <script src="cef.js"></script>


После создания данной страницы вам нужно создать js файл , затем назвать его cef.js.

Далее нужно будет закинуть все файлы на ваш купленный хостинг.

Код cef.js:

const PWD_OK = 0;
const PWD_WRONG = 1;

const serverResponse = document.getElementById('response');

function LoginClick(event)
{
//получения значения input, затем сравнивание
	let a = document.querySelector('.pass').value;
	let b = document.querySelector('.login').value;
	if(a == "" && b == "")
	{
//если пароль и логин не введены.
		serverResponse.innerText = "Вы не ввели пароль или логин!";
		cef.emit('pwd:exit_forms'); //отправляем событие в игру 
	} 
	else
	{
		cef.emit("pwd:try"); // отправляем событие в игру если поля введены.
	}
}
//человек нажал кнопку закрыть
function onExitClick(event) {


	serverResponse.innerText = "Close";
	cef.emit('pwd:exit_forms');
}

//принимаем событие с игры и обрабатываем его
cef.on('pwd:login_succes', (response) => {

	if (response == PWD_OK) {
		cef.set_focus(false);
		cef.hide(true);
		cef.emit('pwd:exit_forms');
	} else {
		serverResponse.innerText = "Вы успешно авторизовались!";
		cef.hide(true); //скрываем браузер
		cef.set_focus(false); //убираем фокусирование с браузера
	}
});




Теперь перейдем к Pawn коду:
#include <cef>

#define LOGIN_BROWSER_ID 0x12346

forward ExitCef(player_id, const arguments[]);
forward Login(player_id, const arguments);

public OnGameModeInit()
{
	cef_subscribe("pwd:try", "Login"); //подписываемся на событие которое вызывали в cef.js , затем передаем ее в паблик Login
	cef_subscribe("pwd:exit_forms", "ExitCef"); //подписываемся на событие которое вызывали в cef.js , затем передаем ее в паблик ExitCef
}
forward OnCefInitialize(player_id, success);
forward OnCefBrowserCreated(player_id, browser_id, status_code);

//при подключении игроку будет автоматически создавать браузер
public OnCefInitialize(player_id, success) {
	if (success == 1) {
		cef_create_browser(player_id, LOGIN_BROWSER_ID, "url на ваш сайт", false, true);
		return;
	}

}

public OnCefBrowserCreated(player_id, browser_id, status_code) {
	if (browser_id == LOGIN_BROWSER_ID) {
		if (status_code != 200) {
			return;
		}
	}
}
//паблик который будет отвечать за то что игрок закрыл форму .
public ExitCef(player_id, const arguments[]) {
	SendClientMessage(player_id, -1, "Вы не ввели логин или пароль!");
	cef_focus_browser(player_id, LOGIN_BROWSER_ID, false);
	cef_hide_browser(player_id, LOGIN_BROWSER_ID, true);
	return 1;
}

//если все нормально , то передаем в js скрипт значение 1 .
public Login(player_id, const arguments) {
	new result = 1;
	cef_emit_event(player_id, "pwd:login_succes", CEFINT(result));
	SendClientMessage(player_id, -1, "Вы успешно авторизовались!");
}



Автор темы: Я
Помогал: Андрей Дрыгин

Если вам нужна помощь , то могу помочь в личных сообщениях в VK.

Ссылка на загрузку:


Видео:
Скрытый текст [Показать]


Можно сделать полноценную авторизацию/регистрацию.
Т.к тут описаны все пункты для работы с CEF.

Сообщение отредактировал Romzes: 05 марта 2023 - 07:44

2

#2
Пользователь офлайн   21th year 

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

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

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

Просмотр сообщения21th year (08 сентября 2021 - 21:07) писал:

Видео?

запишу.
2

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

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSRIPTER MODOV (08 сентября 2021 - 21:24) писал:

запишу.

Привет, а как допустим делать интерфейс худа, то есть как будет обновлятся информация в нем с игры? Допустим я сделал сам худ, и выдал себе деньги, как сделать так, чтобы в худе деньги тоже обновились, мб есть какие-нибудь функции отвечающие за обновление информации в браузере?
0

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

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

Просмотр сообщенияmama123123 (09 сентября 2021 - 13:57) писал:

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


Привет да есть.

В игре можно отправлять с помощью cef_emit_event(player_id, const event_name[], args…)

args - CEFINT(args), CEFFLOAT(args), CEFSTRING(args).

а в js скрипте принимать .

const id_ = document.getElementById('тут нужно вставить id элемента с html формы.'); 

cef.on('event_name', (money, hp, armour) => {

//тут ты обрабатываешь и выводишь на худ в html
//можно с помощью innerText
//id_.innerText = "Вы успешно авторизовались!";


});



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

в Pawn можно создать допустим фунцию.
Пример:

GiveInterfaceMoney(player_id, money)
{
cef_emit_event(player_id, "pwd:interface", CEFINT(money), CEFFLOAT(0), CEFFLOAT(0));
}

//а чтобы принять , то это в js скрипт
cef.on('pwd:interface', (money, hp, armour) => {

id_.innerText = money;


});

Сообщение отредактировал SRIPTER MODOV: 09 сентября 2021 - 15:48

1

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

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSRIPTER MODOV (09 сентября 2021 - 15:32) писал:

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

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

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

  • Новичок
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияSRIPTER MODOV (09 сентября 2021 - 15:32) писал:

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

Слушай, а как адаптировать худ под разные разрешения экрана?
0

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

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

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

Слушай, а как адаптировать худ под разные разрешения экрана?


В css можно адаптировать элементы под экран.
0

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


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

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


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