If (Nếu)
Ra quyết định và đưa flow xuống một đường khác.
If cho năm cách viết cùng một loại điều kiện, nên gần như mọi nhánh "nếu thế này, làm thế kia" là một node. Tất cả phân giải qua một engine biểu thức chung, nên chế độ không-code và nâng cao không bao giờ vênh nhau.
Mục đích
Rẽ flow theo điều kiện — so giá trị, biểu thức thô, switch nhiều đường, khớp chữ OCR, hay kết cục thật của node phía trên.
Khi nào dùng
- Chọn giữa hai đường theo một biến.
- Điều phối sang một trong nhiều routine (switch/case).
- Phản ứng với thứ OCR đọc được.
- Phản ứng với việc một phát hiện sớm hơn có thấy gì không.
Khi nào không dùng
- Rẽ ngay trên phát hiện sắp chạy. Find Image đã có port Success và Failure — If sau nó là thừa.
- Chọn đường ngẫu nhiên — dùng Branch.
- Lặp lại thứ gì — dùng Loop.
Năm chế độ điều kiện
| Chế độ | Bạn viết | Port |
|---|---|---|
| Compare Values | Builder không-code: giá trị, toán tử, giá trị | True / False |
| Expression | Công thức {{}} thô | True / False |
| Multiple Branches | Một biểu thức mỗi nhánh (switch/case) | case1…caseN, Default |
| Match Text (OCR) | Danh sách chuỗi ứng viên và chế độ khớp | Match / No match |
| Node outcome | Node phía trên và kết cục ngôn ngữ đời thường | True / False |
Compare Values
Mỗi dòng là Value A, toán tử, Value B. Mỗi vế là biến hay giá trị cố định, và áp được một bước số học trước khi so — nên CASTLE_X > CURRENT_X - 5 diễn tả được không cần công thức.
Toán tử: =, !=, >, >=, <, <=, Contains, Not Contains, Starts With, Ends With, Is Empty, Is Not Empty.
Các dòng gộp bằng một AND (tất cả đạt) hoặc OR (bất kỳ đạt).
Expression
Biểu thức thô phải ra boolean:
{{gem_farmed_trip}} >= {{max_gem_per_trip}}
{{slot_1_current}} == {{slot_1_max}} || {{slot_2_current}} == {{slot_2_max}}
{{gold}} là con số, không phải điều kiện. {{gold}} > 100 là điều kiện. Biểu thức không-boolean rẽ Fatal.
Multiple Branches (switch/case)
Danh sách có thứ tự tối đa 20 nhánh, mỗi nhánh một biểu thức cùng nhãn tùy chọn. Nhánh đầu tiên có biểu thức đúng lấy port Case của nó; không nhánh nào khớp thì Default.
Nhánh thử từ trên xuống, nên đặt điều kiện đặc hiệu nhất trước.
Match Text (OCR)
Đọc chữ từ node Read Text phía trên (hoặc biểu thức) rồi thử với danh sách tối đa 500 giá trị ứng viên dưới một chế độ khớp: Contains, Exact, Starts With, Ends With, Regex, hay Fuzzy. Bất kỳ giá trị nào khớp rẽ Match.
Trần 500 nghĩa là một node sàng được tập lớn thông điệp đã biết cùng lúc.
Node outcome
Kiểm kết quả thực thi thật của node phía trên qua kết cục ngôn ngữ đời thường, thay vì biểu thức thô trên tên trường nội bộ.
| Loại node nguồn | Kết cục |
|---|---|
| Find Image | Found / Not found |
| Check Region | Passed / Not passed |
| Read Text | Has text / No text |
| If | Condition true / false |
| Captcha | Captcha solved / unsolved |
| Còn lại | Succeeded / Failed |
Đây là cách rẽ trên một phát hiện xảy ra nhiều bước trước, không cần giữ biến đồng bộ.
Thiết lập
| Thiết lập | Kiểu | Khoảng | Ghi chú |
|---|---|---|---|
| Condition type | lựa chọn | năm chế độ trên | Quyết các trường khác hiện ra |
| Conditions | danh sách | 1–50 dòng | Chế độ Compare Values |
| Logic | lựa chọn | and / or | Cách các dòng gộp |
| Expression | string | ≤ 1000 ký tự | Chế độ Expression |
| Branches | danh sách | 1–20 | Chế độ Multiple Branches |
| Text source | tham chiếu node hoặc biểu thức | — | Chế độ Match Text |
| Match mode | lựa chọn | contains, exact, startsWith, endsWith, regex, fuzzy | Chế độ Match Text |
| Values | danh sách | 1–500 | Ứng viên Match Text |
| Case sensitive | boolean | — | Chế độ Match Text |
| Fuzzy threshold | number | 0–1 | Độ ngặt khớp mờ |
| Source node + Outcome | tham chiếu node + lựa chọn | — | Chế độ Node outcome |
Port
Port tùy chế độ:
| Port | Chế độ | Bắt buộc |
|---|---|---|
| True / False | Compare Values, Expression, Node outcome | Cả hai bắt buộc |
| Match / No match | Match Text | Tùy chọn — đường không nối kết thúc nhẹ nhàng |
| case1…caseN / Default | Multiple Branches | Tùy chọn |
| Fatal | Tất cả | Không bao giờ được đi |
Compare/Expression/Node-outcome là quyết định nhị phân thật — bỏ trống một vế gần như luôn là lỗi, nên kiểm tra bắt buộc cả hai.
Một case của switch hay nhánh match-text thì khác: chỉ nối các case bạn quan tâm là lựa chọn soạn thảo hợp lệ, nên case không nối đơn giản kết thúc đường đó.
Ví dụ cơ bản
Dừng khi đạt số đích:
- Condition type: Expression
- Expression:
{{items_done}} >= {{max_per_trip}} - True →
Stop: success - False → đi tiếp
Ví dụ thực tế — điều phối bằng switch
Một biến giữ hướng đã chọn; một node rẽ bốn chuyển động:
Luôn cho switch một Default. Nó là nhánh hứng ca bạn chưa nghĩ tới.
Ví dụ nâng cao — rẽ trên phát hiện sớm hơn
Mười node trước, một Find Image kiểm popup có hiện không. Giờ bạn cần câu trả lời đó:
- Condition type: Node outcome
- Source node: Find Image đó
- Outcome: Not found
- True → bỏ qua routine đóng
- False → đóng popup
Không biến nào phải nuôi, không rủi ro nó lệch khỏi kết quả thật.
Best practices
- Dùng Compare Values tr ừ khi cần công thức. Không cần cú pháp và picker hiện kiểu biến.
- Chọn biến từ dropdown thay vì gõ tên — nó hiện kiểu, chặn bug "so chữ với số".
- Luôn thêm Default cho switch.
- Xếp nhánh switch đặc hiệu nhất trước.
- Ưu tiên Node outcome hơn nhân đôi kết quả vào biến.
- Nối cả True lẫn False. Chúng bắt buộc có lý do.
Ghi chú hiệu năng
- If là tính toán thuần — không chụp hình, không input. Gần như miễn phí.
- Đừng bao giờ tái cấu trúc đồ thị để "bớt If"; độ dễ đọc đáng giá hơn nhiều nanogiây liên quan.
- Match Text sàng 500 ứng viên vẫn rẻ so với một lần OCR, nên dồn ứng viên vào một node là đúng.
- Node outcome đọc kết quả đã ghi; nó không chạy lại node nguồn.
Ghi chú bộ nhớ
- Việc định giá không cấp phát gì đáng kể.
- Chế độ node-outcome đọc từ
nodeResultscủa lần chạy, vốn đã giữ kết quả mọi node thực thi — nên nó không thêm lưu trữ nào.
Lỗi thường gặp
| Lỗi | Hậu quả | Cách sửa |
|---|---|---|
| Bỏ trống False | Lỗi kiểm tra (Compare/Expression/Outcome) | Nối cả hai |
| Biểu thức không-boolean | Fatal | So sánh nó: {{gold}} > 100 |
| Node outcome trước khi nguồn chạy | Fatal | Xếp đúng thứ tự cùng nhánh |
| So chữ OCR như số | Phép so âm thầm hỏng | Kiểu Number ở Read Text, hoặc convert bằng Variable |
| Switch không Default | Input không khớp kết thúc đường | Thêm Default |
| Nhánh switch sai thứ tự | Ca chung che ca riêng | Đặc hiệu nhất trước |
Khắc phục sự cố
Node rẽ Fatal. Điều kiện rỗng, không-boolean, tham chiếu kết cục lạ, hoặc node nguồn chưa thực thi trên nhánh này.
Phép so số không bao giờ nổ. Giá trị là chuỗi. Đặt kiểu Read Text là Number.
Case switch sai được lấy. Nhánh định giá trên xuống, cái đúng đầu tiên thắng. Xếp ca riêng trước ca chung.
Nhánh Match Text không bao giờ chạy. Kiểm case sensitivity và chế độ khớp. Chế độ fuzzy còn tùy threshold.
FAQ
Tối đa mấy nhánh switch? 20.
Tối đa mấy ứng viên Match Text? 500.
Trộn AND và OR trong Compare Values được không? Một node thì không — các dòng chung một AND/OR. Dùng Expression, hoặc nối hai If.
Gỡ một nhánh switch có vỡ dây không? Port cuối bị gỡ và editor cắt edge mồ côi của nó.
Node liên quan
- Branch — chọn ngẫu nhiên thay vì điều kiện
- Variable — tính giá trị bạn so
- Read Text — cấp chữ cho chế độ Match Text
- Find Image — cấp kết cục cho chế độ Node outcome
- Loop — lặp thay vì quyết một lần