Проблема с таймером

Помогите пожалуйста реализовать таймер правильно, чтоб с 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() это встроенная в интерпретатор пхп функция

https://www.php.net/manual/ru/function.time.php

Есть идеи по лучше сделать таймер?

Таск

Какой таск, есть таск который по возрастанию идет?

Мдам

$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 лайк

Потому что ты в теле цикла возвращаешь значение