ShinnUI wiki
Trang chủ/Biến & Script/Functions nội bộ

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ạiCú pháp khai báoGọi
Inline scripttê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 functiontê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>

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>
FunctionsLang
Trả vềChuỗi đã eval scriptChuỗ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%}.