Сайт: https://imgur.com/iSueIHN
Сижу уже 6 час))))) Кто сможет поможет буду очень благодарен. (+ поставлю)
forward CheckServerCommands();
public CheckServerCommands() {
new query[512];
format(query, sizeof(query), "SELECT id, command, param FROM server_commands WHERE executed = 0 LIMIT 10");
if (!mysql_tquery(dbHandle, query, "OnServerCommandResult")) {
printf("Ошибка выполнения mysql_tquery");
} else {
printf("Запрос команд выполняется...");
}
return 1;
}
forward OnServerCommandResult(handle, affectedrows, const result[][], error[]);
public OnServerCommandResult(handle, affectedrows, const result[][], error[]) {
if (error[0] != '\0') {
printf("[MYSQL ERROR] %s", error);
return 0;
}
if (!result[0][0]) {
printf("Нет новых команд.");
return 1;
}
for (new i = 0; i < 10; i++) {
if (!result[i][0]) break;
new id = strval(result[i][0]);
new command[64];
new param[64];
new cmd[64];
CopyString(command, result[i][1], sizeof(command));
CopyString(param, result[i][2], sizeof(param));
// Убираем слеш, если есть
if (command[0] == '/') {
// копируем строку начиная со второго символа (индекс 1)
CopyString(cmd, command[1], sizeof(cmd));
} else {
CopyString(cmd, command, sizeof(cmd));
}
printf("Найдена команда ID=%d: %s %s", id, cmd, param);
if (strcmp(cmd, "rkick", true) == 0) {
if (KickPlayerByName(param)) {
printf("Кикнул игрока %s", param);
} else {
printf("Игрок %s не найден для кика", param);
}
}
new update_query[128];
format(update_query, sizeof(update_query), "UPDATE server_commands SET executed=1 WHERE id=%d", id);
mysql_tquery(dbHandle, update_query, "OnUpdateCommandResult");
}
return 1;
}
forward OnUpdateCommandResult(handle, affectedrows, const result[][], error[]);
public OnUpdateCommandResult(handle, affectedrows, const result[][], error[]) {
if (error[0] != '\0') {
printf("[MYSQL ERROR] %s", error);
} else {
printf("Команда помечена как выполненная.");
}
return 1;
}
forward OnServerCommandUpdate(handle, affectedrows, const result[][], error[]);
public OnServerCommandUpdate(handle, affectedrows, const result[][], error[]) {
if (error[0] != '\0') {
printf("[MYSQL ERROR при обновлении] %s", error);
} else {
printf("Команда помечена как выполненная.");
}
return 1;
}
forward KickPlayerByName(const name[]);
public KickPlayerByName(const name[]) {
new found = 0;
for (new i = 0; i < MAX_PLAYERS; i++) {
if (IsPlayerConnected(i)) {
new playerName[MAX_PLAYER_NAME];
GetPlayerName(i, playerName, sizeof(playerName));
printf("Сравнение: '%s' vs '%s'", playerName, name);
if (strcmp(playerName, name, true) == 0) {
Kick(i);
printf("Кикнул игрока %s с ID %d", playerName, i);
found = 1;
break;
}
}
}
if (!found) {
printf("Игрок с именем %s не найден для кика", name);
}
return found;
}
// В GameModeInit проверяет каждую секунду
SetTimer("CheckServerCommands", 1000, true);
CheckServerCommands();
CREATE TABLE `server_commands` ( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `command` VARCHAR(64) NOT NULL, `param` VARCHAR(64) NOT NULL, `executed` TINYINT(1) NOT NULL DEFAULT 0, `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Сайт (кто шарит в php, html)
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Отправка команды на сервер</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f3f3f3;
padding: 30px;
}
.container {
background-color: white;
padding: 25px;
border-radius: 8px;
width: 400px;
margin: auto;
box-shadow: 0 0 10px rgba(0,0,0,0.1);
}
label {
font-weight: bold;
}
input[type="text"] {
width: 100%;
padding: 8px;
margin-top: 4px;
margin-bottom: 15px;
border: 1px solid #ccc;
border-radius: 4px;
}
input[type="submit"] {
background-color: #4CAF50;
color: white;
padding: 10px 15px;
border: none;
border-radius: 4px;
cursor: pointer;
}
.success {
color: green;
margin-top: 15px;
}
.error {
color: red;
margin-top: 15px;
}
</style>
</head>
<body>
<div class="container">
<h2>Отправка команды на сервер SA-MP</h2>
<form method="post">
<label for="command">Команда (например, /rkick):</label>
<input type="text" id="command" name="command" required>
<label for="param">Параметр (например, Liquidosich):</label>
<input type="text" id="param" name="param" required>
<input type="submit" value="Отправить">
</form>
<?php
// Только если форма отправлена
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Подключение к MySQL
$host = '(в коде вписано)';
$user = '(в коде вписано)';
$password = '(в коде вписано)';
$database = '(в коде вписано)';
$mysqli = new mysqli($host, $user, $password, $database);
if ($mysqli->connect_error) {
echo "<div class='error'>Ошибка подключения: " . $mysqli->connect_error . "</div>";
exit;
}
// Получаем данные из формы
$command = trim($_POST['command'] ?? '');
$param = trim($_POST['param'] ?? '');
// Убираем слеш в начале команды
if (strlen($command) > 0 && $command[0] === '/') {
$command = substr($command, 1);
}
// Проверяем, что не пусто
if ($command === '' || $param === '') {
echo "<div class='error'>Ошибка: укажите команду и параметр.</div>";
exit;
}
// Вставка в БД
$stmt = $mysqli->prepare("INSERT INTO server_commands (command, param, executed) VALUES (?, ?, 0)");
if (!$stmt) {
echo "<div class='error'>Ошибка подготовки запроса: " . $mysqli->error . "</div>";
exit;
}
$stmt->bind_param("ss", $command, $param);
if ($stmt->execute()) {
echo "<div class='success'>Команда успешно добавлена.</div>";
} else {
echo "<div class='error'>Ошибка при добавлении команды: " . $stmt->error . "</div>";
}
$stmt->close();
$mysqli->close();
}
?>
</div>
</body>
</html>
Сообщение отредактировал liquidosich: 30 июля 2025 - 00:29
Вход
Регистрация
Помощь










