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

Всем привет.
Есть худ, там есть переменная со временем. При заходе на сервер время показывается, но не обновляется. Типо я зашел в 12:00 и через пол часа будет тоже 12:00. Я пробовал даже через таймер, но увы, это оказалось бредом. Прошу подсказать как правильно делать.
 

Lev Angel

Developer
Команда форума
Скриптер
Главное найти в худе, как это время выводится :) Потом обновляешь, как тебе нужно. Там же могут быть варианты. Например, это может быть реальное время (обычно серверное), либо игровое время.
 
Хорошо, предположим, с датой разобрались. Тогда обновление других параметров игроков прямо из БД. Знаю что код мега плохой, но все же прошу указать на ошибки и почему он не обновляется.
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);
    }, 
})
 

Verdiji

Trainee
Берёшь из бд то, что нужно выводить в худе, задаёшь вариаблу (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 я не сталкивался, на вики особо ничего нет, онли для сервера
 

Verdiji

Trainee
А на клиенте 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
 

Verdiji

Trainee
на клиенте нет понятия 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
 

Verdiji

Trainee
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});`);
})
Так, это работает. Следующий вопрос, как сделать так чтобы значение менялось только при его изменение?
 

Lev Angel

Developer
Команда форума
Скриптер
В рендере это лучше не ставить :) Значение денег будет явно меняться реже чем срабатывает рендер.
Для того чтобы отслеживать изменения 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}`)
})
 

Lev Angel

Developer
Команда форума
Скриптер
Новая проблема. Чек худ.


Код:
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;
 

Verdiji

Trainee
Код:
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);
 
Яндекс.Метрика
Верх