# ItemList (P2) —— 读 `locale/locale/common/item_list.txt`:vnum → icon / model 路径。 # # 格式(TSV,客户端 GameLib/ItemManager.cpp __LoadItemList): # vnum TYPE iconpath [modelpath] # 例: 19 WEAPON icon/item/00010.tga d:/ymir work/item/weapon/00010.gr2 # # var il := preload("res://ui/item_list.gd").new() # il.load_file("/locale/locale/common/item_list.txt") # il.icon(19) # "icon/item/00010.tga" # il.model(19) # "d:/ymir work/item/weapon/00010.gr2" ("" if none) extends RefCounted var _by_vnum := {} # vnum:int -> { type, icon, model } var count := 0 func load_file(path: String) -> bool: _by_vnum.clear() count = 0 if not FileAccess.file_exists(path): return false var f := FileAccess.open(path, FileAccess.READ) if f == null: return false while not f.eof_reached(): var line := f.get_line() if line.strip_edges() == "": continue var t := line.split("\t", false) if t.size() < 3: continue var vnum := int(t[0]) if vnum == 0: continue _by_vnum[vnum] = { "type": t[1].strip_edges(), "icon": t[2].strip_edges(), "model": t[3].strip_edges() if t.size() >= 4 else "", } count = _by_vnum.size() return count > 0 func has(vnum: int) -> bool: return _by_vnum.has(vnum) func icon(vnum: int) -> String: var d: Dictionary = _by_vnum.get(vnum, {}) return String(d.get("icon", "")) func model(vnum: int) -> String: var d: Dictionary = _by_vnum.get(vnum, {}) return String(d.get("model", "")) func type_of(vnum: int) -> String: var d: Dictionary = _by_vnum.get(vnum, {}) return String(d.get("type", ""))