From 4998d7bdfae511017e5941121430ffc3a9d93c78 Mon Sep 17 00:00:00 2001 From: ypsdf1 Date: Sat, 11 Jul 2026 13:36:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DPHP=E6=B7=BB=E5=8A=A0/?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E6=88=90=E5=91=98=E4=B8=8D=E9=80=9A=E7=9F=A5?= =?UTF-8?q?Java=E5=90=8C=E6=AD=A5=EF=BC=9A=E5=86=99=E5=85=A5web=5Fadmin=5F?= =?UTF-8?q?changes=E5=8F=98=E6=9B=B4=E9=98=9F=E5=88=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. handleAddVisitor: 添加访客后写入add_visitor变更记录,Java轮询后同步到area_land_permissions+白名单 2. handleRemoveVisitor: 移除访客后写入remove_visitor变更记录,Java轮询后同步删除 3. playerExists已检查login.db兜底,确保添加不存在的玩家会被拒绝 --- api/land_api.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/api/land_api.php b/api/land_api.php index 8e192fe..a9b21e6 100644 --- a/api/land_api.php +++ b/api/land_api.php @@ -1152,6 +1152,18 @@ function handleAddVisitor($db, $playerName, $req) { $stmt2->bindValue(':now', time(), SQLITE3_INTEGER); $stmt2->execute(); + // ★ 写入变更队列通知Java同步(add_visitor) + try { + $changeStmt = $db->prepare("INSERT INTO web_admin_changes (change_type, target_id, target_name, change_data, created_at) VALUES ('add_visitor', :lid, :name, :data, :now)"); + $changeStmt->bindValue(':lid', (int)$land['id'], SQLITE3_INTEGER); + $changeStmt->bindValue(':name', $landName, SQLITE3_TEXT); + $changeStmt->bindValue(':data', json_encode(['player' => $visitor, 'land_name' => $landName, 'role' => 'visitor'], JSON_UNESCAPED_UNICODE), SQLITE3_TEXT); + $changeStmt->bindValue(':now', time(), SQLITE3_INTEGER); + $changeStmt->execute(); + } catch (\Throwable $e) { + // 非致命 + } + echo json_encode(['success' => true, 'message' => "已添加访客: $visitor"]); } @@ -1524,6 +1536,18 @@ function handleRemoveVisitor($db, $playerName, $req) { $stmt2->bindValue(':player', $visitor, SQLITE3_TEXT); $stmt2->execute(); + // ★ 写入变更队列通知Java同步(remove_visitor) + try { + $changeStmt = $db->prepare("INSERT INTO web_admin_changes (change_type, target_id, target_name, change_data, created_at) VALUES ('remove_visitor', :lid, :name, :data, :now)"); + $changeStmt->bindValue(':lid', (int)$land['id'], SQLITE3_INTEGER); + $changeStmt->bindValue(':name', $landName, SQLITE3_TEXT); + $changeStmt->bindValue(':data', json_encode(['player' => $visitor, 'land_name' => $landName], JSON_UNESCAPED_UNICODE), SQLITE3_TEXT); + $changeStmt->bindValue(':now', time(), SQLITE3_INTEGER); + $changeStmt->execute(); + } catch (\Throwable $e) { + // 非致命 + } + echo json_encode(['success' => true, 'message' => "已移除访客: $visitor"]); }