Достижение за время

Версия Minecraft
1.7.10
Как можно сделать чтобы ачивка выдавалась через игровое время.
Например: наиграл 1 час и тебе выдало ачивку.
Как реализовать?
 
Попытаться логически мыслить?
Наверное, самое простое - завести переменную для игрока, которая каждый тик будет увеличиваться. Потом сравнить ее с нужным значением и выдать ачивку.
 
Создать две переменные.
Одна будет считать время: "время выхода" минус "время входа".
Вторая будет хранить время: "время входа", если игрок вошёл в игру или "время выхода", если игрок вышел из игры.
  • либо в эвенте тика проверять первую переменную и складывать с текущем времени, и если равно или больше нужного значения, что-то выполнять.
  • либо создать список когда игрок вошёл в игру, в котором будет храниться в какое время будет что-то выполнено и проверить в эвенте тика.
* эвенте тика: либо в тиках игрока, либо в тиках сервера, всё зависит от реализации.
Так-же когда игрок вошел в игру отправлять информацию, через какое время он получит что-то. А так-же отправить пакет, когда что-то получил, о следующем что-то.
 
Зачем что-то создавать, когда в статистике уже есть пункт сколько человек наиграл на сервере, которая сама считается и ее просто нужно проверять?
Максимум что нужно создать, это то, что награда уже получена
 
@ロロロ, может быть ему надо время от получения до получения. Что-то некоторого азарта. Вдруг он просто будет стоять и/или отошёл от компьютера, чтобы просто набить время, а при получении чего-то время продолжиться.
 
Разобрался я немного в достижениях, вот только я не знаю как правильно сделать выдачу ачивки когда наигрываешь определенное время на сервере. Через что лучше делать, чтобы не возникало проблем?
Зачем что-то создавать, когда в статистике уже есть пункт сколько человек наиграл на сервере, которая сама считается и ее просто нужно проверять?
Максимум что нужно создать, это то, что награда уже получена

Как проверить/или через что проверять эту статистику чтобы получить ачивку?
 
Java:
    @SubscribeEvent
    public void onPlayerTick(PlayerTickEvent e) {
        if (!e.player.worldObj.isRemote && p.ticksExisted % 1200 == 0){ // раз в минуту
            EntityPlayerMP p = e.player;
            long timeexisted = (p.func_147099_x().writeStat(StatList.minutesPlayedStat);
            if(timeexisted/1200 >= 4320){p.triggerAchievement(твоя_ачивка);}   // 4320 минут = трое суток (проведено в игре)
        }
}

Update: Исправил - время считается в профиле игрока в тиках, поэтому число нужно делить на 1200, а из профиля брать его в long... хотя кто наиграет в майнкрафт на одном сервере без вайпов 1242 дня?:rolleyes:
 
Последнее редактирование:
Назад
Сверху