Задержка скрипта JS

roufon

Trainee
Сообщения
8
Не могу разобраться с одним моментом.
Я пытаюсь настроить спаун, после смерти. Как только игрок погибает, должно пройти какое то время, после чего он появится на выбранной мной точке.

Вопрос: Каким образом подключить таймер(задержку) и какой должен быть скрипт, чтобы после смерти прошло пару секунд и человек появился на спауне? Заранее спасибо!

Вот пример:

Код:
mp.events.add('playerDeath', (player,) => {
    player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length,)]);
    player.health = 100;
});
 

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
793
Тебе нужен setTimeout
Что то вроде
JavaScript:
mp.events.add('playerDeath', (player) => {
    setTimeout(
        () => {
            if(!mp.players.exists(player)) return; //Пока ждали игрок мог выйти с сервера
            player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length,)]);
            player.health = 100;
        },
        4000 // Ждем 4 секунды
    );
});
 

roufon

Trainee
Сообщения
8
Тебе нужен setTimeout
Что то вроде
JavaScript:
mp.events.add('playerDeath', (player) => {
    setTimeout(
        () => {
            if(!mp.players.exists(player)) return; //Пока ждали игрок мог выйти с сервера
            player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length,)]);
            player.health = 100;
        },
        4000 // Ждем 4 секунды
    );
});
Спасибо большое, буду пробовать. Очень интересуюсь, но знаний не хватает пока что. Спасибо за ответ)
 

FiLECODE

Trainee
Сообщения
5
Тебе нужен setTimeout
Что то вроде
JavaScript:
mp.events.add('playerDeath', (player) => {
    setTimeout(
        () => {
            if(!mp.players.exists(player)) return; //Пока ждали игрок мог выйти с сервера
            player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length,)]);
            player.health = 100;
        },
        4000 // Ждем 4 секунды
    );
});
Лучше уже очищать таймаут после выполнения

Код:
mp.events.add('playerDeath', (player) => {
    let deathTimer = setTimeout(
        () => {
            if(!mp.players.exists(player)) return; //Пока ждали игрок мог выйти с сервера
            player.spawn(spawnPoints[Math.floor(Math.random() * spawnPoints.length,)]);
            player.health = 100;
            clearTimeout(deathTimer);
        },
        4000
    );
});
 

FiLECODE

Trainee
Сообщения
5
Объясни пожалуйста чем лучше?
Когда писал систему фермы, столкнулся с такой проблемой что таймаут ведет себя неадекватно, есть такое понятие очередь, и когда у тебя возникает несколько таймаутов они стакаются и теряется id самого таймера, для того чтобы исключить такой вот баг, после выполнения приходилось чистить таймаут по идентификатору
Довольно интересная статья
 

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
793
Когда писал систему фермы, столкнулся с такой проблемой что таймаут ведет себя неадекватно, есть такое понятие очередь, и когда у тебя возникает несколько таймаутов они стакаются и теряется id самого таймера, для того чтобы исключить такой вот баг, после выполнения приходилось чистить таймаут по идентификатору
Довольно интересная статья
А у тебя случайно не остался фрагмент кода где этот баг был? Ну, хотя бы в упрощенном виде. Было бы интересно с этим поиграться и подебажить.
Таймеры не должны стакаться в event loop:unsure:
 

FiLECODE

Trainee
Сообщения
5
Увы
Напиши простой скриптец
Создание чекпоинта
Удаление чекпоинта
При входе в чек удаляй чекпоинт и стартуй таймер при этом по окончанию таймера создавай чек на той же позиции

У меня были жестко завязыны id чекпоинтов у каждого чека свои кординаты
И после нескольких входов выходов
Начиналась вакханалия
Чек с 6 айди мог стакаться с 11 идом, при всём при этом я дебажил enterCheckpoint иды верные а координаты с заднице (=
Скрин нашел (=8wCo5Xn3U1M.jpg
 
Последнее редактирование:

Lev Angel

Developer
Команда форума
Скриптер
Сообщения
793
Прикольно. Буду иметь в виду, что могут быть такие приколы. Спасибо что поделился!
 
Верх