Bài 12 · Capstone: Quy trình hằng ngày
Mười sáu node. Mọi ý tưởng từ Bài 01–11. Đây là hình dạng mà automation thực thụ mang.
Bài toán
Dựng quy trình bạn sẽ thực sự đưa lên lịch: về màn hình đã biết, kiểm đủ năng lượng để đáng công, thu tối đa N mục tiêu — thoát sạch sẽ khi hết mục tiêu — đếm thành quả, báo cáo, và kết thúc trung thực dù chuyện gì xảy ra.
Bài này chủ ý mang cùng hình dạng với các automation kiểu farm quy mô lớn mà người dùng giàu kinh nghiệm vận hành: một chuyến đi có tham số, với khôi phục, cổng tài nguyên, vòng lặp có giới hạn kèm lối thoát sớm, và độ bền theo từng mục.
Bạn sẽ học được
Không gì mới — đó chính là điểm mấu chốt. Bạn sẽ kết hợp: khôi phục Sub Flow (09/11), cổng OCR (05/06), vòng lặp chạy bằng Flow Input (07), Break khi "hết hàng", cú chạm có retry (08), đếm (07), và kết thúc gọi tên nguyên nhân (mọi bài).
Flow
Mười sáu node không vừa một ảnh chụp đọc được, nên capstone chia ba phần ở mức zoom đầy đủ — chuẩn bị, vòng lặp, và khép lại:

Chuẩn bị: ① Start ② Reach a known screen — Sub Flow từ Bài 11, tái dùng chứ không dựng lại ③ đọc năng lượng ④ kết thúc khi không đọc được ⑤ có đủ chưa? ⑥ kết thúc khi không đủ. Mỗi phép gác có một Stop trung thực riêng trước khi việc thật bắt đầu.

Vòng lặp: ① Loop ② kết thúc thiếu năng lượng từ phần 1 ③ tìm icon Collect ④ chạm vào nó ⑤ Break khi không còn gì để thu — lối ra sớm của vòng lặp ⑥ đếm thứ đã thu.

Khép lại: ① Wait giữ nhịp ② Loop End ③ ghi log tổng ④ Stop: routine complete — một kết thúc thành công cho cả quy trình.
Hãy đọc hình dạng chứ đừng đọc từng node: trục chính chạy giữa, các kết thúc lỗi treo bên trái, đường vòng Break bên phải. Một người lạ lần được đường vui trong vài giây — độ dễ đọc ấy là tính năng bạn tự xây, bằng tên đánh số và Auto Layout.
Dựng flow
Khai báo: rounds (number?, mặc định 3, Input ✓ Required ✓), done (number, mặc định 0), energy (number?).
| # | Node | Bài học gốc |
|---|---|---|
| 1 | Sub Flow → Bài 09, Failure → recovery failed | 09, 11 |
| 2 | Read Text, ô Energy, Percentage → energy | 05, 06 |
| 3 | If {{energy}} >= 20; False → low energy (success) | 05 |
| 4 | Loop, chế độ count, max {{rounds}} | 07 |
| 5 | Find Image biểu tượng Collect, 3000 ms, Failure → Break nothing left | 03, 04 |
| 6 | Click, nguồn = node 5, retry ×2 / 400 ms / ×1.5; Failure → nghỉ (bỏ qua bước đếm) | 03, 08 |
| 7 | Variable done + 1 — chỉ trên nhánh thành công | 07 |
| 8 | Wait ngẫu nhiên 800–1400 ms; → Loop End (aggregation: iteration count) | 07 |
| 9 | Variable log done → Stop: routine complete | 07 |
Nối đúng như sơ đ ồ; hai cạnh tinh tế là Failure của node 6 → node 8 (cú chạm hỏng bỏ qua bước đếm, không bỏ vòng lặp) và Break → Loop End. Save, Auto Layout.
Các quyết định thiết kế đáng "ăn cắp"
- Thiếu năng lượng là một success. Việc của quy trình bao gồm biết khi nào chẳng có gì để làm. Chỉ
recovery failedvàunreadablelà failure — trạng thái flow hoàn toàn không làm nổi việc của nó. - Cổng chạy trước vòng lặp, nên một chuyến "mệt" tốn hai node, không phải N vòng săn tìm vô ích.
- Break ≠ failure. "Hết mục tiêu" kết thúc vòng lặp sớm mà vẫn báo cáo và vẫn thành công. So nghĩa của nó với Failure của node 6 — một cái là trạng thái thế giới, cái kia là trục trặc vận hành, và chúng đi hai đường khác nhau.
doneđếm thành quả; Loop End đếm số lượt. Sau một chuyến có một cú chạm hỏng: lượt 3,done2. Cả hai con số đều nói lên điều gì đó; không cái nào thay được cái nào.- Mỗi kết thúc là một câu văn. Sáu kết thúc, sáu nguyên nhân, không phải khảo cổ lúc 2 giờ sáng.