• Просьба не публиковать сообщения с предложениями продажи модов или сборок!

    Мы против использования и перепродажи слитых модов и переделок на их основе. Остальное также сложно верифицировать, поэтому в целом пока что запрещаем эту тему на сайте.

Обновление худа

DreamHarakiri

Trainee
Сообщения
13
Всем привет.
Есть худ, там есть переменная со временем. При заходе на сервер время показывается, но не обновляется. Типо я зашел в 12:00 и через пол часа будет тоже 12:00. Я пробовал даже через таймер, но увы, это оказалось бредом. Прошу подсказать как правильно делать.
 
Главное найти в худе, как это время выводится :) Потом обновляешь, как тебе нужно. Там же могут быть варианты. Например, это может быть реальное время (обычно серверное), либо игровое время.
 
Хорошо, предположим, с датой разобрались. Тогда обновление других параметров игроков прямо из БД. Знаю что код мега плохой, но все же прошу указать на ошибки и почему он не обновляется.
JavaScript:
let test_client = null;
mp.events.add({
    "playerEnterVehicle" : (player, vehicle, seat, pubg) => {
        mp.events.call('PlayerData')
        var speed = mp.browsers.new('package://hud/speed.html')
    },
    'playerExitVehicle' : (player) => {
        speed.active = false;
    },
    'updateHud' : (age, money, bank, hour, minute) => {
        var hud = mp.browsers.new('package://hud/index.html');
        setInterval(() => {
            hud.execute(`document.getElementById("level").innerHTML = '${age}';`);
            hud.execute(`document.getElementById("money").innerHTML = '${money}';`)
            hud.execute(`document.getElementById("bank").innerHTML = '${bank}';`)
            hud.execute(`document.getElementById("hours").innerHTML = '${hours}';`)
        }, 1000);
    }, 
})
 
Берёшь из бд то, что нужно выводить в худе, задаёшь вариаблу (player.setVariable'x', y), на клиенте getVariable('x'), и с этой вариаблой уже работаешь и выводишь куда нужно. Для изменения данных в вариабле, прописываешь на сервере setVariable('x', новое значение);
Пример выдачи денег:

Код:
mp.events.addCommand('givemoney',(player,_,id, money) =>{
    if (player.admin < 1) return;
    if (id == undefined || money == undefined) return player.notify("/givemoney [id] [кол-во]");
    let target = mp.players.at(id);
    if (target == null) return player.notify("~r~Игрок с таким id не найден!");
    DB.Handle.query(`UPDATE chars SET money = money + ${money} WHERE CharName = '${target.name}' LIMIT 1`);
    let cash0 = money;
    let CurrentMoney = target.getVariable('cash');
   let newMoney = CurrentMoney + +cash0;
    target.money = newMoney;
    target.setVariable('cash', newMoney);
    player.outputChatBox(`!{#00FF00}${player.name}!{#FFFFFF} дал ${money}$ !{#FFFF00} ${target.name}`);
    target.outputChatBox(`!{#00FF00}[A]${player.name}!{#FFFFFF} дал вам !{#FFFF00} ${money}$`);
    });
 
Последнее редактирование:
Берёшь из бд то, что нужно выводить в худе, задаёшь вариаблу (player.setVariable'x', y), на клиенте getVariable('x'), и с этой вариаблой уже работаешь и выводишь куда нужно. Для изменения данных в вариабле, прописываешь на сервере setVariable('x', новое значение);
Пример выдачи денег:

Код:
mp.events.addCommand('givemoney',(player,_,id, money) =>{
    if (player.admin < 1) return;
    if (id == undefined || money == undefined) return player.notify("/givemoney [id] [кол-во]");
    let target = mp.players.at(id);
    if (target == null) return player.notify("~r~Игрок с таким id не найден!");
    DB.Handle.query(`UPDATE chars SET money = money + ${money} WHERE CharName = '${target.name}' LIMIT 1`);
    let cash0 = money;
    let CurrentMoney = target.getVariable('cash');
   let newMoney = CurrentMoney + +cash0;
    target.money = newMoney;
    target.setVariable('cash', newMoney);
    player.outputChatBox(`!{#00FF00}${player.name}!{#FFFFFF} дал ${money}$ !{#FFFF00} ${target.name}`);
    target.outputChatBox(`!{#00FF00}[A]${player.name}!{#FFFFFF} дал вам !{#FFFF00} ${money}$`);
    });
То есть на сервере я делаю так:
JavaScript:
mp.events.add ('playerJoin', player => {
  var Test = "Значение переменной"
  player.setVariable('testVar', Test)
});
А на клиенте? Ибо с getVariable я не сталкивался, на вики особо ничего нет, онли для сервера
 
А на клиенте getVariable будет равен значению переменной, которую ты объявил на сервере, и обновляться каждый раз, когда ты меняешь значение через setVariable
 
player.getVariable('testVar')
1633343287117.png
Код сервер:
JavaScript:
mp.events.add('render', (player) => {
  var Test = "Данные обновленны"
  player.setVariable('Test', Test)
  console.log(`${Test}`)
});

Код клиент:
JavaScript:
    'updateHud' : (player, Test) => {
        mp.events.callRemote("render", Test);
        player.getVariable('Test')
        mp.gui.chat.push(`Значение ${Test}`)
        var hud = mp.browsers.new('package://hud/index.html');
        hud.execute(`document.getElementById("level").innerHTML = '${Test}';`);
    },

Если без getVariable, то значение становиться 0
 
на клиенте нет понятия player, там mp.players.local
можешь для удобства объявить let player = mp.players.local
 
на клиенте нет понятия player, там mp.players.local
можешь для удобства объявить let player = mp.players.local
JavaScript:
'updateHud' : (player, Test, age, money, bank, hour, minute) => {
        mp.events.callRemote("render", Test);
        mp.players.local.getVariable('Test')
        mp.gui.chat.push(`Значение ${Test}`)
        var hud = mp.browsers.new('package://hud/index.html');
        hud.execute(`document.getElementById("hours").innerHTML = '${Test}';`)
    },
Выдает значение 0
 
test = mp.players.local.getVariable('Test');
hud.execute(`document.getElementById("hours").innerHTML = '${test}';`)
Чтобы обновлялось в реальном времени, суёшь в render
Пример:
Код:
mp.events.add("render",()=>{
money = mp.players.local.getVariable('money');
hud.execute(`money(${money});`);
})
 
test = mp.players.local.getVariable('Test');
hud.execute(`document.getElementById("hours").innerHTML = '${test}';`)
Чтобы обновлялось в реальном времени, суёшь в render
Пример:
Код:
mp.events.add("render",()=>{
money = mp.players.local.getVariable('money');
hud.execute(`money(${money});`);
})
Так, это работает. Следующий вопрос, как сделать так чтобы значение менялось только при его изменение?
 
В рендере это лучше не ставить :) Значение денег будет явно меняться реже чем срабатывает рендер.
Для того чтобы отслеживать изменения Variables, есть addDataHandler. В этом туториале есть пример использования:
 
В рендере это лучше не ставить :) Значение денег будет явно меняться реже чем срабатывает рендер.
Для того чтобы отслеживать изменения Variables, есть addDataHandler. В этом туториале есть пример использования:
Ребят, чтобы я без вас делал, огромное спасибо. Даже денежку готов скинуть за помощь 💓
 
Новая проблема. Чек худ.

unknown.jpg

Код:
JavaScript:
mp.events.addDataHandler('Test', function (Test) {
    var hud = mp.browsers.new('package://hud/index.html');
    money = mp.players.local.getVariable('Test');
    hud.execute(`document.getElementById("money").innerHTML = '${money}';`)
    mp.gui.chat.push(`Значение ${money}`)
})
 
Новая проблема. Чек худ.


Код:
JavaScript:
mp.events.addDataHandler('Test', function (Test) {
    var hud = mp.browsers.new('package://hud/index.html');
    money = mp.players.local.getVariable('Test');
    hud.execute(`document.getElementById("money").innerHTML = '${money}';`)
    mp.gui.chat.push(`Значение ${money}`)
})
Ты при каждом обновлении Test в ивенте создаешь новый браузер. И они походу накладываются друг на друга. Надо вынести mp.browsers.new за пределы ивента.
 
Главное найти в худе, как это время выводится :) Потом обновляешь, как тебе нужно. Там же могут быть варианты. Например, это может быть реальное время (обычно серверное), либо игровое время.

Так, такой код, и как бы, естественно что сам он не обновляет, при какой событии лучше всего обновлять? Рендер же его сильно нагружать будет? Может под таймер пустить?
JavaScript:
let hour = new Date();
document.getElementById("hours").innerHTML = hour;
 
Код:
function drawTime() {
  let date = new Date();
  let h = date.getHours();
  let m = date.getMinutes();
  if (h < 10) h = "0" + h;
  if (m < 10) m = "0" + m;
  clock.textContent = `${h}:${m}`;
}
drawTime();
setInterval(drawTime, 60000);
 
Назад
Верх