Помогите пожалуйста реализовать таймер правильно, чтоб с 0 и по 1 секунде прибавлялся на 1, я пробовал так
public function onLogin(PlayerJoinEvent $event) : void{
$player = $event->getPlayer();
$username = strtolower($player->getName());
$money = Main::getInstance()->getEconomyAPI()->myMoney($player);
$group = Main::getInstance()->getPurePerms()->getUserDataMgr()->getGroup($player)->getName();
$db = Main::getInstance()->getSQLite()->query("SELECT * FROM `Tops` WHERE `username` = '$username'")->fetchArray(SQLITE3_ASSOC);
if(!$db){
$time = time() - 1;
Main::getInstance()->getSQLite()->query("INSERT INTO `Tops` (`username`, `time`, `kill`, `money`) VALUES ('$username', '$time', 0, $money);");
}else{
$time = time() - $db["time"];
Main::getInstance()->getSQLite()->query("UPDATE `Tops` SET `money` = '$money' WHERE `username` = '$username'");
Main::getInstance()->getSQLite()->query("UPDATE `Tops` SET `time` = '$time' WHERE `username` = '$username'");
}
Main::getInstance()->setText($player, self::$vector, $group, self::$limit, 'money');
$this->click[$username] = 'kill';
}
Но не получилось
хранишь время для каждого игрока где-то.
например time()
дальше получаешь его и делаешь такие манипуляции:
//$time - записанное время где-то
$seconds = time() - $time;
Типо так?
$time = time() - 1;
$time .= time() - $time;
Я тупой однако, или
$now = time();
$time = (time() - $now) + 1;
Ты тупой? time() это встроенная в интерпретатор пхп функция
Есть идеи по лучше сделать таймер?
Какой таск, есть таск который по возрастанию идет?
$time = 0;
scheduleRepeatingTask(new CallbackTask(fn() => $time++), 20);
1 лайк
Я не представляю как это будет в бд работать… Но опробую
лучше через time() сделать, я приду домой, напишу плагин.
private array $players = [];
public function handleJoin(PlayerJoinEvent $event){
$this->$players[spl_object_hash($event->getPlayer())] = time();
Server::getInstance()->getPluginManager()->registerEvent(PlayerQuitEvent::class, function(PlayerQuitEvent $event) {
$player = $event->getPlayer();
$time = time() - $this->players[spl_object_hash($player)]; // сколько секунд наиграл
//сохраняешь время
});
я потом ещё дополню по полной программе, ты только ничего за меня не делай, оки?)
кстати, про spl_object_id недавно узнал, не знаю, почему. думаю, что рациональнее будет хранить не имя игрока, а ид объекта
в массиве я имею ввиду, а сохранять общее время в конфиге или где-то ещё
А, если ты только про данный случай, то ок
1 лайк
Потому что ты в теле цикла возвращаешь значение