强制撤销他人操作 — 擦除恶意或误操作的安全网
Force Undo 是什么
Drawpile 的 Force Undo(以及 Force Redo)是 Operator 专属功能——可以撤销或重做任意用户的最近操作。
这是 Drawpile 多人协作安全性的核心设计之一:
- 别人不小心删了整个图层?Force Undo 他
- griefer 画满整个画布?Lock 住他、Force Undo 全部
- 某人不小心关闭了 Undo 历史?Operator 这边的 Force Undo 不受他影响
怎么用
方式一:用户列表菜单
聊天窗口旁边的用户列表,点用户名旁的三点菜单:
- Force Undo — 撤销该用户的最后一笔操作
- Force Redo — 重做该用户的最后一笔被撤销的操作
方式二:右键菜单
直接在用户列表里右键点用户名(桌面端),弹出相同菜单。
快捷键
Force Undo 默认快捷键是 Ctrl+Shift+Z(注意:普通 Undo 是 Ctrl+Z,普通 Redo 是 Ctrl+Y)。但快捷键是撤销你自己的操作,不是撤销别人的。要撤销别人的还是得用菜单方式。
撤销范围
Force Undo 按操作为单位——每一笔笔触、每一个图层操作(新建、删除、重命名、合并)都是一个独立操作。你可以一笔一笔撤销。
Force Undo 有数量限制——默认能撤销该用户最近约 50-100 次操作(取决于服务器内存)。超过这个范围就只能靠 Session Reset 了。
和普通 Undo 的区别
| 维度 | 普通 Undo(Ctrl+Z) | Force Undo |
|---|---|---|
| 谁能触发 | 所有人(只要没被 Lock) | 只有 Operator |
| 撤销谁的 | 自己的操作 | 任意用户的操作 |
| 不受对方影响 | — | 对方关了 Undo 历史也不影响 |
| 撤销方式 | 逐笔或批量 | 只能逐笔 |
典型场景
场景一:别人不小心合错了图层
- 用户 A 误操作把他的上色图层合并到了不该合并的线稿层里
- 聊天里惊呼"啊我犯蠢了"
- 你作为 Operator,Force Undo A 一次 → 合并操作被撤销,两个图层恢复独立
场景二:griefer 涂了满画布
- Canvas Lock 先锁住整个画布(按 F12)
- 找到这个用户,Lock 他 → Kick → Ban
- Force Undo 他 20 次(或更多),每按一次撤销一笔恶意笔触
- 或者直接 Session Reset 回退一个快照(更高效但影响所有人)
场景三:多人协作中撤回自己的笔误
自己的笔误用普通 Undo 就行。但如果普通 Undo 被服务器延迟卡住(见 Undo 延迟),Operator 可以用 Force Redo / Force Undo 帮其他人还原。
技术说明
Force Undo 不是魔法——它操作的是服务器端的完整操作历史。Drawpile 服务器保存了会话的所有操作记录(所有用户的所有笔触、图层操作等),Force Undo 只是告诉服务器"把这个用户的最后一条操作标记为已撤销"。
这就是为什么快照数量、会话历史长度影响 Force Undo 的可用范围——操作越久远,可能已经被服务器清理掉了。