Всем привет, мутил привязку, решил поделится с вами
Будем использовать lua + php + MySQL.
Начнем с создания DB.
1. Переходим в ваш сайт.ру/phpmyadmin, создаем базу данных с любым именем, я создам new_db. Будем использовать lua + php + MySQL.
Начнем с создания DB.
2. Создаем таблицу, я назову users, в ней 2 колонки у меня это: code, date. code - будет ключ клиента, date - дата окончания действия ключа.
Создаем php скрипт, который будет проверять есть ли ключ в бд и активен ли он, если активен то выведет сколько дней до конца активации.
Вот сразу код:
PHP:
<!DOCTYPE html>
<head>
<title>Auth</title>
<meta charset="utf-8">
</head>
<body>
<?php
$mysqli = new mysqli("localhost", "123", "321", "new_db"); # 123 - user; 321- pass;
$mysqli->set_charset("utf8");
if ($mysqli->connect_errno){
$json_array = array("error" => 1, "message" => "Ошибка подключения к БД");
$json = json_encode($json_array, JSON_UNESCAPED_UNICODE);
exit($json);
}
else {
if (isset($_GET['code'])) {
$query = "SELECT * FROM `users` WHERE CODE=".$_GET['code'];
$sql = mysqli_query($mysqli,$query) or die(mysqli_error());
if (mysqli_num_rows($sql) > 0) {
$myrow = mysqli_fetch_array($sql);
$date = date_create($myrow['date']);
$curdate = date("d.m.Y");
if (strtotime($curdate) < strtotime(date_format($date, 'd.m.y')))
{
$interval = date_diff($date, date_create($curdate));
echo $interval->format("%d");
}
else
{
echo "The duration of the key has expired.";
}
}else{
echo '-1';
}
}
}
?>
</body>
"The duration of the key has expired."
Если ключа вообще нет, то пишем:
-1
Чтоб в ручную не добавлять ключи через PMA, напишем php, который будет принимать:
Ключ, количество дней на которое активируем его, пароль, который будете знать только вы.
Ключ, количество дней на которое активируем его, пароль, который будете знать только вы.
PHP:
<!DOCTYPE html>
<head>
<title>ADD KEY</title>
</head>
<body>
<?php
$mysqli = new mysqli("localhost", "123", "321", "new_db"); # 123 - user; 321- pass; new_db - base
$mysqli->set_charset("utf8");
if ($mysqli->connect_errno) {
$json_array = array("error" => 1, "message" => "Ошибка подключения к БД");
$json = json_encode($json_array, JSON_UNESCAPED_UNICODE);
exit($json);
} else {
echo('Успешное подключение!');
if (isset($_POST["code"])) {
if (!strcmp($_POST["pass"],"123456")){
$date = new DateTime('NOW');
$date->add(new DateInterval('P'.$_POST["days"].'D'));
$sql = "INSERT INTO `users` (`code`, `date`) VALUES ('".$_POST['code']."', '".$date->format('d.m.y')."' )";
$mysqli->query($sql);
if ($sql) {
echo "<p>Данные успешно добавлены в таблицу.</p>";
} else {
echo "<p>Произошла ошибка.</p>";
}
} else {
echo "<p>Неверный пароль.</p>";
}
}
}
?>
<table>
<form action="" method="post">
<tr>
<td>KEY:</td>
<td><input type="text" name="code"></td>
</tr>
<tr>
<td>DAYS:</td>
<td><input type="text" name="days"></td>
</tr>
<tr>
<td>PASSWORD:</td>
<td><input type="text" name="pass"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="OK"></td>
</tr>
</form>
</table>
</body>
Теперь переходим к луа.
Для работы потребуется библиотека lua requests
Lua:
requests = require('requests')
function getserial()
local ffi = require("ffi")
ffi.cdef[[
int __stdcall GetVolumeInformationA(
const char* lpRootPathName,
char* lpVolumeNameBuffer,
uint32_t nVolumeNameSize,
uint32_t* lpVolumeSerialNumber,
uint32_t* lpMaximumComponentLength,
uint32_t* lpFileSystemFlags,
char* lpFileSystemNameBuffer,
uint32_t nFileSystemNameSize
);
]]
local serial = ffi.new("unsigned long[1]", 0)
ffi.C.GetVolumeInformationA(nil, nil, 0, serial, nil, nil, nil, 0)
return serial[0]
end
function main()
if not isSampfuncsLoaded() or not isSampLoaded() then return end
while not isSampAvailable() do wait(100) end
checkKey()
wait(-1)
end
function checkKey()
response = requests.get('сайт.ру/auth.php?code='..getserial())
if not response.text:match("<body>(.*)</body>"):find("-1") then -- Если ключ есть в бд
if not response.text:match("<body>(.*)</body>"):find("The duration of the key has expired.") then -- Если сервер не ответил что ключ истек.
sampAddChatMessage("До окончания лицензии осталось:"..response.text:match("<body>(.*)</body>"), -1) -- Выводим кол-во дней до конца лицензии
else
sampAddChatMessage(response.text:match("Срок действия лицензии истек."), -1)
end
else
sampAddChatMessage("Ключ не активирован.", -1)
end
end
Да и вообщем все.
В lua использовалась функция от @hnnssy,
Полезные сниппеты и функции(https://blast.hk/threads/13380/#post-135697)
Последнее редактирование: