Commit Graph
108 Commits
Author SHA1 Message Date
ypsdf1 4e11845636 R23: sync.php新增sync_admins+sync_bans处理(修复Java推送返回未知操作) 2026-07-12 23:00:05 +08:00
ypsdf1 b34753d1fd 新增封禁名单联控 + 用户管理封禁显示
- land_api.php: web_player_bans表 + handleSyncBans + sync_bans action
- admin.php: list_bans API接口
- admin.php前端: 用户行显示封禁状态(红色+禁图标+hover详情)
2026-07-12 22:08:46 +08:00
ypsdf1 498245d967 插件管理员权限扩展 + admin名单同步
- 新增web_plugin_admins表 + isPluginAdmin/canManageLand辅助函数
- handleAddVisitor/handleRemoveVisitor/handleChangeVisitorRole/handleUpdateLandField/handleUpdateVisitorPerm/handleGetMemberPerms/handleUpdateMemberPerm/handleClearMemberPerm/handleLandDetail 9处权限检查从owner-only扩展为owner+admin
- 新增sync_admins action:Java推送tag管理员名单,PHP全量写入web_plugin_admins
2026-07-12 19:46:44 +08:00
ypsdf1 be04c8b451 修复三个问题:1)sync.php缺少:peace_mode绑定导致同步后和平模式值丢失;2)player.php效果命名修正(火焰抗性→抗火,英雄→村庄英雄);3)peace_mode前端渲染反转(isInverted从false改true) 2026-07-12 13:03:48 +08:00
ypsdf1 f5879f4087 修复PHP操作效果后JSON解析崩溃:convertEffectsForFrontend增加容错处理+handleUpdateLandField统一管道格式到变更队列+player.php所有effects JSON.parse加try-catch 2026-07-12 11:41:26 +08:00
ypsdf1 0760cc1d2e 修复Java删除成员后PHP不同步删除的问题:移除syncPermissions中导致删除永远不生效的120秒宽限期,改为检查web_admin_changes待处理变更保护 2026-07-12 11:20:11 +08:00
ypsdf1 8645c57839 修复Java撤职后被PHP stale pending变更覆盖的问题:syncPermissions接收Java同步时Ack掉冲突的待处理perm_change/add_visitor 2026-07-12 10:56:55 +08:00
ypsdf1 0b283483a7 修复: 成员权限显示未合并领地默认权限
handleGetMemberPerms 新增返回领地默认权限映射(default_perms),
严格对齐 Java getLandDefaultDeny 语义(含 denyDrop/denyPickup 反向列)。
前端 renderMemberPermDetail 对无自定义覆盖的权限键回退到领地默认,
与游戏内 getEffectiveDeny 的领地默认回退逻辑一致,
修复网页端显示"允许"而游戏内实际"禁止/限制"的权限不同步问题。
2026-07-12 10:32:10 +08:00
ypshidifu 9b39c9e56f 修复: 权限管理多项问题
1. 权限字段补齐: PHP $PERM_TYPES对齐Java全部32个权限键
   - 新增denyEntityInteract(实体交互)、denyMobAttack(攻击生物)
   - 修正denyPeaceMode→peaceMode(键名与Java对齐)
   - 数据迁移: 自动重命名DB中已有的denyPeaceMode为peaceMode

2. 权限编辑二态化: 成员权限只有允许/禁止,不存在"领地默认"
   - 移除前端"默认"状态,改为允许(green)/禁止(red)二态切换
   - 后端: 禁用时存false而非删除键,确保Java端正确识别

3. 角色切换修复: 移除visitor选项(访客=未授权玩家)
   - 下拉菜单只保留admin/member
   - 确认对话框文案对应调整

4. 同步删除逻辑: handleSyncPermissions新增清理机制
   - 删除incoming列表中不存在的旧记录(120秒宽限期)
   - synced_at=NULL的记录不参与删除(防误删PHP本地创建)
   - role CASE简化为role=excluded.role(信任Java为角色权威源)

5. 部署: json_encode加JSON_UNESCAPED_UNICODE防双重编码
2026-07-12 01:07:27 +08:00
ypsdf1 a4972dde7e R16: 修复add_visitor超时边界(>65→>=60) 2026-07-11 18:10:43 +08:00
ypsdf1 d7da6ec1a6 R15: PHP添加成员改为Java验证后入库(参考改领地主流程)
- handleAddVisitor改为先写pending队列,等Java验证后入库
- 新增handleAddVisitorCallback回调PHP添加成员结果
- 新增handleGetAddVisitorStatus供前端轮询状态
- player.php添加成员后轮询状态,支持异步验证显示
2026-07-11 15:53:12 +08:00
ypsdf1 0115cbda41 R14: 修复PHP添加成员静默失败+syncPermissions删除清理
- handleAddVisitor: 移除异步验证阻塞,先添加成员再异步校验
- syncPermissions: 新增删除清理逻辑,同步Java端已移除的成员
- 120秒宽限期防止PHP刚添加的成员被误删
2026-07-11 15:11:00 +08:00
ypsdf1 ed57c8f82c R13: PHP端handleChangeVisitorRole 新成员走add_visitor流程
- 新增成员时change_type从perm_change改为add_visitor,确保Java白名单同步
2026-07-11 14:19:08 +08:00
ypsdf1 4998d7bdfa 修复PHP添加/移除成员不通知Java同步:写入web_admin_changes变更队列
1. handleAddVisitor: 添加访客后写入add_visitor变更记录,Java轮询后同步到area_land_permissions+白名单
2. handleRemoveVisitor: 移除访客后写入remove_visitor变更记录,Java轮询后同步删除
3. playerExists已检查login.db兜底,确保添加不存在的玩家会被拒绝
2026-07-11 13:36:03 +08:00
ypsdf1 646ecfa162 修复撤职管理员报无效角色member+效果中英文名兼容
1. land_api.php: handleChangeVisitorRole白名单增加member角色
2. player.php: addGiveEffect改用中文效果名(EN_TO_CN映射)发送给Java
3. player.php: addClearEffect兼容中文效果名匹配
2026-07-11 12:21:32 +08:00
ypsdf1 eaeab955e3 修复PHP三个bug:1.changeVisitorRole支持三角色切换(admin/member/visitor)并允许领地主自由切换;2.token验证兼容POST;3.成员权限toggleMemberPerm DOM检测修正 2026-07-10 23:16:32 +08:00
ypsdf1 a28083f4ca 修复PHP两个bug:1.land_api.php玩家端token验证兼容POST(changeVisitorRole等POST请求不再误报需要登录);2.player.php成员权限toggle检测逻辑修正(isCustom原本查span但自定义文字在div里,导致永远走无自定义分支只能给不能撤) 2026-07-10 22:51:04 +08:00
ypsdf1 b67480d073 PHP权限管理全面对齐Java:1.handleUpdateLandField白名单从4项扩展到33项(覆盖所有deny/allow权限开关);2.sync.php补齐14个缺失字段的INSERT和bind(deny_mount/deny_ender_pearl/deny_bow/deny_potion/deny_fire/deny_raid/deny_container/deny_mob_attack/is_public_building/allow_visitor_teleport/confiscate_items/deny_use_items/punish_commands/clear_all_bad);3.player.php新增领地权限开关面板(34项开关,与Java GUI getPermEntries一致,支持deny/allow反转显示);4.sync.php补充新列ALTER TABLE迁移 2026-07-10 22:34:39 +08:00
ypsdf1 555b9382b5 修复PHP三个关键bug:1.player.php效果字段名clear_all_bad_effects→clear_all_bad匹配DB列名;2.validation_callback的add_visitor写入web_area_permissions表(与handleAddVisitor一致,修复成员不入库);3.validatePlayerViaJava优先本地playerExists验证,减少异步等待;4.auth兜底保底防止update_land_field误入invalid secret 2026-07-10 22:00:31 +08:00
ypsdf1 b63ecc02b8 修复PHP接口:增益效果接口补齐必要参数,玩家存在性校验兼容登录库,同步新增实体交互权限字段 2026-07-10 19:08:18 +08:00
ypsdf1 e49fcaccd8 修复: syncPermissions ON CONFLICT替代INSERT OR REPLACE防角色降级
sync.php + land_api.php: 同步权限时用ON CONFLICT, 保留已有admin/member角色
2026-07-10 10:59:12 +08:00
ypsdf1 eed83a552f 领地权限切换加全链路日志+已授权用户降级为访客的拦截
- handleChangeVisitorRole: 修复$permRow未定义(旧$oldPerms恒空);新增 admin/member 降级为 visitor 的拦截并返回错误;三处 error_log 追踪切换角色流程
- handleUpdateVisitorPerm: 入口/拦截/放行三处 error_log
- handleUpdateMemberPerm: 写入 web_admin_changes 前 error_log 记录新权限JSON
- 配合 Java 端 AreaProtection.updateVisitorPermFromWeb 的 getLogger().info 端到端追踪
2026-07-10 01:34:24 +08:00
ypsdf1 c960c3ac0c 修复调整访客权限误重置管理员身份(role默认visitor+INSERT OR REPLACE覆盖);保留付费访客expires_at;change_visitor_role同步land_name 2026-07-10 00:16:04 +08:00
ypsdf1 ae1ff5ffd8 异地登录检测/账号冻结解冻 + 公共邮件辅助函数
- core.php: 新增smtpSendEmail/queryLoginIpLocation/getBaseUrl/sendLocationAlertEmail
- security_alert.php: 接收Java通知比对IP归属并发送提醒邮件(含冻结/改密链接)
- freeze.php: 验证freeze_token冻结账号并写freeze指令
- sync.php: 冻结账号禁止Web登录; smtpSendEmail上移至core.php统一复用
- reset_password.php: 改密成功后解冻(清frozen+写unfreeze)
2026-07-09 17:09:35 +08:00
ypsdf1 1e97285459 PHP端:购物车发货前material验证 + 退款接收接口
- shop.php buy_cart: 扣款前验证每件商品material为Java可识别值(合法Material或附魔书id+ENCHANTED_BOOK组合)
- sync.php: 新增write_shop_refund action接收Java退款请求(恢复bond_cache+写refund交易)
2026-07-09 10:54:59 +08:00
ypsdf1 c1234c6700 修复重启重复发货:processing超时回退60s→3600s + pull_pending_transactions不再选中processing状态交易 2026-07-08 19:47:35 +08:00
ypsdf1 e076596b4d 修复收银台小票推送:settlement 误传中文标签导致重复发小票潜影盒
api/shop.php 推送 give_receipt_book 时误用 $modeName(中文:塞背包(环保单)/潜影盒打包)
而非原始代码,导致 Java 端 equals('backpack'/'shulker') 守卫不匹配、仍单独发小票潜影盒。
现改为推送原始 $settlement 代码;Java 端守卫已同步兼容中文标签做双保险。
2026-07-08 17:35:04 +08:00
ypsdf1 e9ecb0ae53 修复收银台:背包(环保单)模式尊重游戏内 green_discount
此前背包模式固定按 cart_backpack_rate(0.98=98折)结算,
忽略游戏内 /sdf1_login shop setgreen 设置的折扣。
现改为:green_discount<10 时以游戏折扣为准(如 setgreen 9 -> ×0.9),
覆盖默认98折;未设置(=10)时仍走 cart_backpack_rate 保持环保优惠。
前端预览 RATES.backpack 同步读取 green_discount,避免界面/实付不一致。
2026-07-08 16:35:04 +08:00
ypsdf1 77ee56cca4 修复收银台98折错误地叠加环保单折扣导致实付约95折
- api/shop.php: 塞背包模式不再额外叠加 green_discount,仅按 cart_backpack_rate(0.98=98折) 计费,ecoPct 置0
- cashier.php: 结算标签改为动态显示真实折扣率;前端 recalc 中 ecoPct 恒为0,与后端一致,消除显示与扣款不符
2026-07-08 13:53:01 +08:00
ypsdf1 28c7aa119e 修复: green_discount折扣率(折数)语义——前端/后端计算ecoAmt改为×折数/10,管理面板max=10默认值10,校验与文案全改 2026-07-08 00:18:47 +08:00
ypsdf1 ac79628076 修复: PHP端packmoney从(int)强转改为(float)支持小数(cashier/shop/sync三处) 2026-07-07 23:54:20 +08:00
ypsdf1 d0be292a78 修复: 收银台api()加25s超时兜底(解决结账卡死) + buy_cart小票推送容错 + 订单错误堆栈日志 + orders会话判定保护 2026-07-07 22:43:51 +08:00
ypsdf1 822f47dd05 修复: 收银台API顶层异常捕获升级为Throwable + 订单查询异常落盘debug.log便于定位 2026-07-07 21:39:40 +08:00
ypsdf1 78e3b2ff1e 修复:订单记录页order_list接口加固(查询异常返回合法JSON,杜绝PHP报错污染响应导致前端报错);orders.php渲染对getCurrentCashier空值做保护 2026-07-07 21:26:14 +08:00
ypsdf1 8286a4c09c 新增: 商品目录定时镜像同步接口 set_shop_catalog(支持删分类/加商品) + 修复 getShopConfigSync 未定义函数500错误 2026-07-07 19:40:47 +08:00
ypsdf1 9c269cc184 重构: 收银台订单库彻底独立于web.db,根除订单加载卡死
根因:订单记录原写在 web.db,与 Java 经 sync.php 高频写入共享同一 SQLite 文件,
产生文件级锁竞争(database is locked)。原 62f5323 用 busy_timeout=15s + 重试 hack
缓解,但 Java 持续写入仍会顶住 PHP 订单读查询,导致订单页长期转圈。

改动:
- 新增独立 orders.db 常量(ORDERS_DB_PATH),Java 永不读写此库
- core.php 新增 getOrdersDB() 连接独立库(WAL + busy_timeout=5s),建表并幂等迁移 web.db 历史订单
- recordCashierOrder() 改写写入 orders.db,订单写失败仅记日志返回空单号,绝不阻断购买主流程
- shop.php 将订单记录移出 web.db 事务,放到 COMMIT 之后写独立库
- cashier.php cashierOrderList() 直接读 orders.db,去掉 busy_timeout 与 5 次重试兜底 hack
- web.db 内旧 cashier_orders 表保留为历史死表(仅作迁移源),不再被读写

效果:订单查询与 Java 写入完全解耦,订单页不再受 CF/Java 锁影响而卡死。
2026-07-07 15:25:25 +08:00
ypsdf1 62f53234e7 修复: 订单记录页opcache失效确保新版生效 + 订单查询放宽busy_timeout至15s并增加重试(规避database is locked) 2026-07-07 14:26:45 +08:00
ypsdf1 a72bbfd970 修复: 订单记录页加载卡死(增加请求超时与重试) + 订单接口释放会话锁并对database is locked重试 2026-07-07 13:38:00 +08:00
ypsdf1 7a4aad46c6 功能: 订单记录独立页+小票书+packmoney/green修复(??替代||)
1. 新增 orders.php 独立订单记录页面(搜索/筛选/详情弹窗)
2. 收银台底部订单区改为跳转链接(→orders.php)
3. buy_cart 成功后推送 give_receipt_book 到 Java 队列(发放 Written Book)
4. 修复 packmoney/green_discount 前端 JS || falsy 回退 bug(改用 ??)
5. 费率从后端 shop_config 动态读取(不再硬编码 RATES)
6. cashierGetConfig 扩展读取 cart_backpack_rate/cart_shulker_rate
2026-07-07 12:28:26 +08:00
ypsdf1 fdd8ccb340 优化: 收银台新增打包小票(小票弹窗+打印) + buy_cart返回order_no 2026-07-07 11:37:48 +08:00
ypsdf1 9456f787f8 优化: 收银台购物延迟压至15秒内(busy_timeout 60s→8s、移除热路径冗余DDL、合并配置批量读取) 2026-07-07 10:39:17 +08:00
ypsdf1 6634fdefa0 修复收银台SQLite3Stmt::fetch崩溃并应用环保单减免配置 2026-07-07 00:33:24 +08:00
ypsdf1 f32c7cfe86 收银台双模式收款与打包配置全链路实现
- 收银员新增 can_cash 现金收款权限字段(登录/列表/新增/编辑全链路)
- 购物车结算支持 pay_mode=cash/bond 双模式,现金模式跳过余额校验与扣债券
- 收银台前端读取可配置 packmoney 实时报价,修复此前硬编码+2元与实际收费不符
- 管理后台新增打包费(packmoney)与环保减免(green_discount)配置端口
- 同步接口新增 get/set_shop_config,Java端定时器拉取配置
- 购物小票书塞入首个潜影盒,免费潜影盒订正为原色(SHULKER_BOX)
2026-07-06 23:48:44 +08:00
ypsdf1 59701d1627 新增独立收银台页面与收银员账号体系:支持收银员/管理员登录、手动折扣(服务端强制上限)、订单记录;同步修复代购≥1000仍误报需玩家密码问题(#733 #734) 2026-07-06 19:27:14 +08:00
ypsdf1 8de2cffe82 新增管理后台独立收银台模式:管理员可为指定玩家代购商品(商品浏览+购物车+背包/潜影盒结算+颜色可选收费+≥1000债券密码确认) 2026-07-06 17:54:55 +08:00
ypsdf1 dd425f4946 修复商城database is locked;购物车结算增强:≥1000元强制密码校验、潜影盒颜色可选收费(默认紫色免费);玩家端新增购物车模式与颜色选择器 2026-07-06 17:33:15 +08:00
ypsdf1 7a283ae4e0 商城购物车模式+收银台结算+后台折扣配置:前端购物车FAB/抽屉/结算弹窗,后端buy_cart接口事务批量购买,admin购物车配置卡片,cart_config/save_shop_config接口 2026-07-06 16:39:47 +08:00
ypsdf1 e46ee109d3 修复PHP管理面板相关问题 2026-07-06 11:22:31 +08:00
ypsdf1 5fa59b71b2 fix: PHP删除用户组同步 + handleDeleteUserGroup先删成员表再删组表 2026-07-03 14:27:27 +08:00
ypsdf1 591d71ede0 fix: PHP数据库锁修复 + 用户组添加/移除错误处理
1. initTables()统一创建所有核心表(web_user_groups, web_user_group_members等)
2. handleAddGroupMember改用playerExists()本地验证替代异步validatePlayerViaJava()
3. handleRemoveGroupMember增加错误处理和affected行数检查
4. 移除validation_callback/visitor中的CREATE TABLE IF NOT EXISTS
2026-07-03 13:41:22 +08:00