Здравствуйте такой вопрос как прописать в худ чтобы отображалось в каком я нахожусь измерении, через рендер я смог это реализовать а как сделать это в худе ?
mp.events.addCommand("syncdimension", (player) => {
player.setVariable("dimension", player.dimension);
});
mp.events.addDataHandler({
"dimension":(entity, value, oldValue)=> {
if(entity.type==='player'){
// Здесь отправляем данные игроку в CEF
}
}
})
Ну или всё в рендер закинуть)))На стороне клиента создаем обработчик событий который будет срабатывать при изменении данных
JavaScript:mp.events.addDataHandler({ "dimension":(entity, value, oldValue)=> { if(entity.type==='player'){ // Здесь отправляем данные игроку в CEF } } })
Ну что-то, как будто бы, не лучшая идея синхронизировать измерение со всеми игроками с помощью setVariable, если задача стоит только в том, чтобы отстучать об изменении параметра dimension одному игроку. Для этого больше подошло бы setOwnVariable (который отстучит только игроку, которому установлено), но в этом также по сути нет смысла, потому что ты никакие новые данные не передаешь (его же можно взять с уже существующего на клиенте свойства у игрока dimension), поэтому, самым логичным вариантом является вызов эвента через player.call.Написать обработчик событий, который при изменении виртуального мира будет отправлять данные в CEF клиента
Пример как это можно сделать. На стороне сервера создаем команду которая будет сохранять виртуальный мир в данные игрока
JavaScript:mp.events.addCommand("syncdimension", (player) => { player.setVariable("dimension", player.dimension); });
На стороне клиента создаем обработчик событий который будет срабатывать при изменении данных
JavaScript:mp.events.addDataHandler({ "dimension":(entity, value, oldValue)=> { if(entity.type==='player'){ // Здесь отправляем данные игроку в CEF } } })
Теперь при команде /syncdimension в CEF игрока будет отображаться его виртуальный мир
А как это в cef прописатьНаписать обработчик событий, который при изменении виртуального мира будет отправлять данные в CEF клиента
Пример как это можно сделать. На стороне сервера создаем команду которая будет сохранять виртуальный мир в данные игрока
JavaScript:mp.events.addCommand("syncdimension", (player) => { player.setVariable("dimension", player.dimension); });
На стороне клиента создаем обработчик событий который будет срабатывать при изменении данных
JavaScript:mp.events.addDataHandler({ "dimension":(entity, value, oldValue)=> { if(entity.type==='player'){ // Здесь отправляем данные игроку в CEF } } })
Теперь при команде /syncdimension в CEF игрока будет отображаться его виртуальный мир
mp.triggerУсловно я сделал худ у меня там написано dimension: 0 нужно чтобы он показывал в каком я мире когда я ввожу команду которая меняет мне измерения
Ты забыл сделать проверку на локального игрокаНа стороне клиента создаем обработчик событий который будет срабатывать при изменении данных
JavaScript:mp.events.addDataHandler({ "dimension":(entity, value, oldValue)=> { if(entity.type==='player'){ // Здесь отправляем данные игроку в CEF } } })
Значит в команду которая меняет тебе измерение после установки измерения добавляешьУсловно я сделал худ у меня там написано dimension: 0 нужно чтобы он показывал в каком я мире когда я ввожу команду которая меняет мне измерения
player.setVariable("dimension", player.dimension);
mp.events.addDataHandler({
"dimension":(entity, value, oldValue)=> {
if(entity.type==='player'){
browser.call("updatePlayerDimension", value);
}
}
})
mp.events.add("updatePlayerDimension", (value) => {
// тут уже устанавливаешь значение value в браузере
});
На счет прототипа согласен, сам пользуюсьНу что-то, как будто бы, не лучшая идея синхронизировать измерение со всеми игроками с помощью setVariable, если задача стоит только в том, чтобы отстучать об изменении параметра dimension одному игроку. Для этого больше подошло бы setOwnVariable (который отстучит только игроку, которому установлено), но в этом также по сути нет смысла, потому что ты никакие новые данные не передаешь (его же можно взять с уже существующего на клиенте свойства у игрока dimension), поэтому, самым логичным вариантом является вызов эвента через player.call.
Прям для самых продвинутых, можно переназначить сэттэр свойства dimension у прототипа игрока, добавив вызов эвента об изменении этого свойства. Тем самым избавившись от необходимости при каждом изменении дименшина дописывать строку с вызовом эвента, что отстучит об этом самом изменении
Не советую использовать рендер без надобности, уже отвечал на этот вопросНу или всё в рендер закинуть)))
Непомогло ничего не происходитЗначит в команду которая меняет тебе измерение после установки измерения добавляешь
JavaScript:player.setVariable("dimension", player.dimension);
И как уже написали выше, триггеришь CEF с значением измерения
В твоем случае это должно выглядеть как то так:
Client-side:
JavaScript:mp.events.addDataHandler({ "dimension":(entity, value, oldValue)=> { if(entity.type==='player'){ browser.call("updatePlayerDimension", value); } } })
CEF
JavaScript:mp.events.add("updatePlayerDimension", (value) => { // тут уже устанавливаешь значение value в браузере });
На счет прототипа согласен, сам пользуюсь
Не советую использовать рендер без надобности, уже отвечал на этот вопрос
Непомогло ничего не происходит
Проверь что приходит в цеф и как ты обрабатываешь триггер на стороне цефа
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>test</title>
<link rel="stylesheet" href="styles.css">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@800&italic=true&display=swap" rel="stylesheet">
<script src="hud.js"></script>
</head>
<body>
<div id="admin-mod">
<h1>test</h1>
<p id="dimension">Dimension: 0</p>
</div>
</body>
<body>
<img src="" alt="Логотип" class="responsive-image">
</body>
</html>
browser = mp.browsers.new("package://hud/hud.html");
mp.events.add("updatePlayerDimension", (value) => {
const dimensionElement = document.getElementById("dimension");
if (dimensionElement) {
dimensionElement.textContent = `Dimension: ${value}`;
}
});
mp.events.addCommand("dim", (player, _, dimension) => {
if (!dimension || isNaN(dimension)) {
player.outputChatBox("Введите корректный номер измерения.");
return;
}
player.dimension = parseInt(dimension);
player.setVariable("dimension", player.dimension);
});
Проверь что приходит в цеф и как ты обрабатываешь триггер на стороне цефа
Это шутка была ес шо)Не советую использовать рендер без надобности, уже отвечал на этот вопрос
Прости, что?JavaScript:browser = mp.browsers.new("package://hud/hud.html"); mp.events.add("updatePlayerDimension", (value) => { const dimensionElement = document.getElementById("dimension"); if (dimensionElement) { dimensionElement.textContent = `Dimension: ${value}`; } });