Возможно ли узнать айпи оффлайн игрока?

Как узнать последний айпи адрес игрока
через который он заходил, если игрок оффлайн?

1 лайк

сохранять адрес игрока в бд при каждом его заходе

1 лайк

или уходе с сервера

1 лайк

без разницы

1 лайк

Либо я туплю сильно т.к 2 дня не спал, но не подскажете как из данного кода в авторизации, посмотреть айпи игрока из датабазы?

Спойлер
			$player = $event->getPlayer();

			$sql = $this->db->prepare("SELECT * FROM `users` WHERE `nickname` = :nickname");
			$sql->bindValue(":nickname", strtolower($player->getName()), SQLITE3_TEXT);
			$sql = $sql->execute();
			$user = $sql->fetchArray(SQLITE3_ASSOC);
			if(isset($user["nickname"])) {
				$ip = $player->getAddress();
				if($ip == $user["ipLast"]) {
					$this->users[strtolower($player->getName())] = [
						"pass" => $user["password"],
						"ip" => $ip```
1 лайк

я не по пхп

1 лайк

Бубликов не шуми

1 лайк

В этом коде уже есть ответ по получению последнего айпи

А зачем?

Чтобы потом сделать так? Глупо же, можно сразу SELECT ipLast FROM

1 лайк

быть точнее занести игрока в бд если его нет, и при каждом входе обновлять его адрес… Или у тебя будет в бд куча никнеймов

1 лайк

я что-то не так написал? insert & update в помощь

1 лайк

Гений, он это и имел ввиду, только глупый не догадается

1 лайк

onEnable():

private static $db;

// создаём бд
self::$db = new \SQLite3($this->getDataFolder() .'players.db');
self::$db->exec("create table if not exists players(username TEXT NOT NULL, address TEXT NOT NULL);");

В любую функцию:

// далее
$username = $player->getLowerCaseName(); // никнейм игрока
$address = $player->getAddress(); // IPv4

$request = self::$db->query("select * from players where username = '$username'")->fetchArray(SQLITE3_ASSOC);
if($request === false){
    $stmt = self::$db->prepare("insert into players(username, address) VALUES (:username, :address)");
    $stmt->bindValue(':username', $username, SQLITE3_TEXT);
    $stmt->bindValue(':address', $address, SQLITE3_TEXT);
    $stmt->execute();
    if(!$stmt) $this->getLogger()->error(self::$db->getLastError());
}else{
    $stmt = self::$db->prepare("select * from players where username = :username");
    $stmt->bindValue(':username', $username, SQLITE3_TEXT);
    $request = $stmt->execute()->fetchArray(SQLITE3_ASSOC);
}

в onDisable():

self::$db->close();
1 лайк

код не тестировал, если возникнут ошибки можете написать, НО проверял через chat gpt на ошибки, вроде он их не показал

1 лайк

Ничего не получается, как получить айпи оффлайн игрока через эту базу? Я незнаю как датабазы работают.

1 лайк

чаще к жпт обращайся

:clown_face:

2 лайка

Ну ок. Давай покажу пример функции из строк кода который ты скинул

public function getLastIp(string $user) {
    $user = strtolower($user);
    $sql = $this->db->prepare("SELECT * FROM `users` WHERE `nickname` = :nickname");
    $sql->bindValue(":nickname", $user, SQLITE3_TEXT);
    $sql = $sql->execute();
    $user = $sql->fetchArray(SQLITE3_ASSOC);
    if(isset($user["nickname"]))
        return $user["ipLast"] ?? false;
    return false;
}
1 лайк

ой соре исправил

1 лайк

Можешь сделать такой код только что бв узнать айпи игрока оффлайн? Что бы юзать эту функцию пожалуйста, дам галочку)

Я тебе дал. Вставь его в главный класс авторизации (или в нужный класс, зависит от самого плагина) и обращайся к ней через другие плагины (или напиши отдельный)