Functions nội bộ
Node Functions: cấp menu cho phép định nghĩa các hàm trả về chuỗi,
gọi được từ mọi nơi trong menu bằng cú pháp ${name_args} — biến menu thành template
thật sự, không lặp code.
3 loại function#2>
| Loại | Cú pháp khai báo | Gọi |
|---|---|---|
| Inline script | tên: '{script_prefix: ...}' | ${tên} |
| Node con (key lồng) | cây YAML dưới tên | ${tên.key} hoặc ${tên} (mảng → JSON) |
| Kether function | tên: {type: KETHER, script: ...} | ${tên arg1 arg2} |
Tham số _args#2>
Giá trị sau tên hàm (phân tách bởi _) trở thành args[0], args[1]…
trong script — giống {0} {1}:
Functions:
flash: '{js: "&e" + args[0] + " Flash!"}' # ${flash_➥} → "➥ Flash!" (màu vàng)
price: 'money *{js: args[0]}' # dùng trong condition: ${price_500}
Args được join lại bởi ký tự _ — nếu arg của bạn chứa _ (vd. tên item),
chỉ 1 arg là an toàn; nhiều arg sẽ bị tách tại mỗi dấu gạch dưới.
Ví dụ 1 — hằng số dùng chung#2>
Options:
Title-Update: 20
Functions:
prefix: '&8[&a&lShinnUI&8] '
max-deposit: 64
Icons:
'a':
display:
name: '${prefix}&fNạp đồ'
lore:
- '&7Tối đa: &e${max-deposit}'
Ví dụ 2 — script động#2>
Functions:
ping-color: '{js: varInt("%player_ping%") < 60 ? "&a" : (varInt("%player_ping%") < 120 ? "&e" : "&c")}'
balance: '{ke: money *player}'
Icons:
'i':
display:
name: '&fPing: ${ping-color}%player_ping% ms'
lore:
- '&7Số dư: &6${balance}'
Ví dụ 3 — formatMissing (từ Input-Demo.yml)#2>
Functions:
ping-color: '{js: varInt("%player_ping%") < 60 ? "&a" : (varInt("%player_ping%") < 120 ? "&e" : "&c")}'
balance: '{ke: money *player}'
Icons:
'i':
display:
name: '&fPing: ${ping-color}%player_ping% ms'
lore:
- '&7Số dư: &6${balance}'
Ví dụ 3 — formatMissing (từ Input-Demo.yml)#2>
Trong Input Menu, meta input_missing là chuỗi thô
"IRON_INGOT x4, GOLD_INGOT x1" — dùng function JS để màu hóa từng món:
Functions:
formatMissing: |-
{js: varStr("{meta:input_missing}")
.split(", ")
.map(function(s){
var p = s.split(" x");
return "&c" + p[0] + " &7x" + p[1];
})
.join("&8, ")}
# deny của nút Confirm:
deny:
- 'tell: &cCòn thiếu: ${formatMissing}'
- 'close'
Function được parse lúc load menu và eval mỗi lần gọi — đặt logic nặng (loop số liệu,
HTTP) vào Tasks thay vì gọi trong lore refresh 1 tick/lần.
So sánh với node Lang#2>
| Functions | Lang | |
|---|---|---|
| Trả về | Chuỗi đã eval script | Chuỗi tĩnh theo locale |
| Đa ngôn ngữ | Không (tự xử lý trong script nếu muốn) | Có — chọn theo locale người chơi |
| Gọi | ${name_args} | {lang: key} |
Cần logic đa ngôn ngữ có tham số? Kết hợp cả hai:
Functions: greet: '{lang: greet} &f{0}' rồi ${greet_%player_name%}.