修复handleListAvailableGroups迁移缺失列+修复领地禁止点燃双方向检查

This commit is contained in:
ypsdf1
2026-07-02 20:15:12 +08:00
parent 35eb054e4f
commit 60151dc1d0
+69
View File
@@ -2060,6 +2060,39 @@ function handleRemoveGroupMember($db, $data) {
function handleGetPlayerGroups($db, $player) {
if (empty($player)) { echo json_encode(['success' => false, 'error' => 'missing player']); return; }
// ★ 先确保 web_user_groups 存在(Java同步可能还没推送)
$db->exec("CREATE TABLE IF NOT EXISTS web_user_groups (
group_name TEXT PRIMARY KEY,
display_name TEXT DEFAULT '',
display_color TEXT DEFAULT '§f',
display_emoji TEXT DEFAULT '',
priority INTEGER DEFAULT 0,
land_price_per_sqm INTEGER DEFAULT -1,
max_lands INTEGER DEFAULT -1,
home_limit INTEGER DEFAULT 0,
join_price INTEGER DEFAULT 0,
auto_renew INTEGER DEFAULT 0,
renew_price INTEGER DEFAULT 0,
duration_minutes INTEGER DEFAULT 0,
default_perms TEXT DEFAULT '{}',
synced_at INTEGER DEFAULT 0
)");
// 迁移:添加新列(如果缺失)
$columns = [];
$rs_cols = $db->query("PRAGMA table_info(web_user_groups)");
while ($row = $rs_cols->fetchArray(SQLITE3_ASSOC)) { $columns[] = $row['name']; }
$migrations = [
'home_limit' => 'ALTER TABLE web_user_groups ADD COLUMN home_limit INTEGER DEFAULT 0',
'join_price' => 'ALTER TABLE web_user_groups ADD COLUMN join_price INTEGER DEFAULT 0',
'auto_renew' => 'ALTER TABLE web_user_groups ADD COLUMN auto_renew INTEGER DEFAULT 0',
'renew_price' => 'ALTER TABLE web_user_groups ADD COLUMN renew_price INTEGER DEFAULT 0',
'duration_minutes' => 'ALTER TABLE web_user_groups ADD COLUMN duration_minutes INTEGER DEFAULT 0',
];
foreach ($migrations as $col => $sql) {
if (!in_array($col, $columns)) {
try { $db->exec($sql); } catch (\Throwable $e) { /* 已存在 */ }
}
}
$db->exec("CREATE TABLE IF NOT EXISTS web_user_group_members (
player_name TEXT NOT NULL,
group_name TEXT NOT NULL,
@@ -2068,6 +2101,23 @@ function handleGetPlayerGroups($db, $player) {
expiry_time INTEGER DEFAULT 0,
PRIMARY KEY(player_name, group_name)
)");
// ★ 先确保 web_user_groups 存在(Java同步可能还没推送)
$db->exec("CREATE TABLE IF NOT EXISTS web_user_groups (
group_name TEXT PRIMARY KEY,
display_name TEXT DEFAULT '',
display_color TEXT DEFAULT '§f',
display_emoji TEXT DEFAULT '',
priority INTEGER DEFAULT 0,
land_price_per_sqm INTEGER DEFAULT -1,
max_lands INTEGER DEFAULT -1,
home_limit INTEGER DEFAULT 0,
join_price INTEGER DEFAULT 0,
auto_renew INTEGER DEFAULT 0,
renew_price INTEGER DEFAULT 0,
duration_minutes INTEGER DEFAULT 0,
default_perms TEXT DEFAULT '{}',
synced_at INTEGER DEFAULT 0
)");
$stmt = $db->prepare("SELECT m.*, g.display_name, g.display_color, g.priority,
g.join_price, g.renew_price, g.auto_renew, g.duration_minutes, g.home_limit
FROM web_user_group_members m
@@ -2086,6 +2136,7 @@ function handleGetPlayerGroups($db, $player) {
* 玩家端:查看可购买的用户组
*/
function handleListAvailableGroups($db) {
// ★ 确保 web_user_groups 存在 + 迁移缺失列
$db->exec("CREATE TABLE IF NOT EXISTS web_user_groups (
group_name TEXT PRIMARY KEY,
display_name TEXT DEFAULT '',
@@ -2102,6 +2153,20 @@ function handleListAvailableGroups($db) {
default_perms TEXT DEFAULT '{}',
synced_at INTEGER DEFAULT 0
)");
$columns = [];
$rs_cols = $db->query("PRAGMA table_info(web_user_groups)");
while ($row = $rs_cols->fetchArray(SQLITE3_ASSOC)) { $columns[] = $row['name']; }
$migrations = [
'join_price' => 'ALTER TABLE web_user_groups ADD COLUMN join_price INTEGER DEFAULT 0',
'auto_renew' => 'ALTER TABLE web_user_groups ADD COLUMN auto_renew INTEGER DEFAULT 0',
'renew_price' => 'ALTER TABLE web_user_groups ADD COLUMN renew_price INTEGER DEFAULT 0',
'duration_minutes' => 'ALTER TABLE web_user_groups ADD COLUMN duration_minutes INTEGER DEFAULT 0',
];
foreach ($migrations as $col => $sql) {
if (!in_array($col, $columns)) {
try { $db->exec($sql); } catch (\Throwable $e) { /* 已存在 */ }
}
}
// 返回开放付费加入的用户组(join_price > 0)
$rs = $db->query("SELECT group_name, display_name, display_color, display_emoji,
join_price, renew_price, duration_minutes
@@ -2140,6 +2205,10 @@ function handleBuyGroup($db, $player, $data) {
echo json_encode(['success' => false, 'error' => '该用户组配置异常(有效时长未设置)']);
return;
}
if (!isset($cfg['join_price'])) {
echo json_encode(['success' => false, 'error' => '数据库缺少 join_price 列,请重新同步']);
return;
}
// 检查该玩家是否已在组内
$db->exec("CREATE TABLE IF NOT EXISTS web_user_group_members (