This is a mobile optimized page that loads fast, if you want to load the real page, click this text.

Вопрос Определить ближайшего игрока на стороне клиента?

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Появился вопрос, как определить ближайшего игрока (допустим тоже взаимодействие между игроками) и поменять ему ник на стороне нашего клиента (Допустим был незнакомец, стал Его_Ник)
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Со стороны клиента, насколько я знаю, ты не можешь поменять его ник, ты можешь поменять отображение (3dtext над головой), а что туда писать - дело твоё.
По поводу ближайшего игрока - берёшь пул персонаже внутри зоны стрима и проверяешь какой из них ближе всего, сверяешь самый подходящий вариант с нужной тебе цифрой дистанции и понимаешь достаточно ли он близко к тебе.
 

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Т.е. у меня вот такой ивент
JavaScript:
mp.events.add('entityStreamIn', (entity) => {
    const isInvincible = entity.getVariable('isInvincible');
    entity.setInvincible(!!isInvincible);
});
Но как с помощью него узнать какой именно игрок вошел в зону, если пул можно юзать только на стороне сервера.
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Пул есть с любой стороны, не только на сервере.
Конкретно этот ивент просто дает тебе информацию, что такая-то сущность (entity) появилось в зоне стрима локального игрока (клиента).
 

dreamharakiri

Новый участник
25 Дек 2021
75
1
49
Нашел вот это:

JavaScript:
let getNicknamesText = () => {
    let text = ``;
    mp.players.forEachInStreamRange(
        (player, id) => {
            text = text == `` ? player.name : `${text} , ${player.name}`;
        }
    );
    return text;
};

let blahBlah = getNicknamesText();
console.log(blahBlah != `` ? blahBlah : `There are no players in your streaming range.`);

Я так понимаю, это то что мне нужно? Но сразу еще вопрос, тут лучше использовать рендер или все же таймер на 5 милисекунд??
 

XDeveluxe

⚡️BackEnd Developer
Команда форума
Moderator
High developer
BackEnd developer
30 Авг 2021
2,766
1,581
211
28
Ну, здесь то, что тебе нужно - только mp.players.forEachInStreamRange, который и будет делать переборку всех в пуле только зоны стрима. Внутри него тебе нужно придумать свою логику. Та, что здесь - не рисует текст над головой.
И использовать для рендера текста лучше рендер, так как он работает каждый кадр, а 5 мс это 5 мс.