Kaynağa Gözat

minor fixes for item db querying

tags/v0.0.4
anonymous 9 ay önce
ebeveyn
işleme
968b284b3a
3 değiştirilmiş dosya ile 62 ekleme ve 35 silme
  1. +3
    -3
      Items.lua
  2. +28
    -16
      main.fnl
  3. +31
    -16
      main.lua

+ 3
- 3
Items.lua Dosyayı Görüntüle

@@ -1,4 +1,4 @@
items = {
itemdb = {
{"entry",25,"class",2,"subclass",7,"name","Worn Shortsword","InventoryType",21,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",1.0,"dmg_max1",3.0,"mobs","Talonsworn Forest-Rager,Crazed Murkblood Miner,Wyrmcult Zealot,Bloodmaul Warlock",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1900}, {"entry",25,"class",2,"subclass",7,"name","Worn Shortsword","InventoryType",21,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",1.0,"dmg_max1",3.0,"mobs","Talonsworn Forest-Rager,Crazed Murkblood Miner,Wyrmcult Zealot,Bloodmaul Warlock",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1900},
{"entry",35,"class",2,"subclass",10,"name","Bent Staff","InventoryType",17,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",3.0,"dmg_max1",5.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2900}, {"entry",35,"class",2,"subclass",10,"name","Bent Staff","InventoryType",17,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",3.0,"dmg_max1",5.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2900},
{"entry",36,"class",2,"subclass",4,"name","Worn Mace","InventoryType",21,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",1.0,"dmg_max1",3.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1900}, {"entry",36,"class",2,"subclass",4,"name","Worn Mace","InventoryType",21,"ItemLevel",2,"RequiredLevel",1,"dmg_min1",1.0,"dmg_max1",3.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1900},
@@ -24219,5 +24219,5 @@ items = {
{"entry",11042,"class",2,"subclass",7,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000}, {"entry",11042,"class",2,"subclass",7,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000},
{"entry",11087,"class",2,"subclass",8,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000}, {"entry",11087,"class",2,"subclass",8,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000},
{"entry",30452,"class",2,"subclass",2,"name","","InventoryType",15,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000}, {"entry",30452,"class",2,"subclass",2,"name","","InventoryType",15,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000},
{"entry",2704,"class",2,"subclass",4,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000},
}
{"entry",2704,"class",2,"subclass",4,"name","","InventoryType",13,"ItemLevel",0,"RequiredLevel",0,"dmg_min1",0.0,"dmg_max1",0.0,"mobs","",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1000}
}

+ 28
- 16
main.fnl Dosyayı Görüntüle

@@ -1,4 +1,10 @@
;; coll utils
;; init note

(if (> 1 (# itemdb))
(print "Failed to load item database")
(print "Item database loaded"))

;; 1a: coll utils


(fn length-of [coll] (fn length-of [coll]
(if coll (if coll
@@ -13,7 +19,7 @@
(let [key (next coll)] (let [key (next coll)]
(. coll key))) (. coll key)))


;; str utils
;; 1b: str utils


(fn starts-with [s patt] (fn starts-with [s patt]
(= (string.sub s 1 (string.len patt)) patt)) (= (string.sub s 1 (string.len patt)) patt))
@@ -21,12 +27,12 @@
(fn un-quote [s] (fn un-quote [s]
(string.gsub s "\'" "")) (string.gsub s "\'" ""))


;; number utils
;; 1c: number utils


(fn max [a b] (fn max [a b]
(if (> a b) a b)) (if (> a b) a b))


;; fennel utils
;; 1d: fennel utils


(fn matches [a b] (fn matches [a b]
(if (starts-with a "lte:") (if (starts-with a "lte:")
@@ -43,10 +49,10 @@


(= a b))) (= a b)))


;; querying
;; 2a: querying


(lambda find-items [params ?sort] (lambda find-items [params ?sort]
(let [results (icollect [_ row (ipairs items)]
(let [results (icollect [_ row (ipairs itemdb)]
(do (do
(var hit true) (var hit true)
(each [key param (pairs params)] (each [key param (pairs params)]
@@ -63,9 +69,9 @@
(lambda find-item [params ?sort] (lambda find-item [params ?sort]
(let [results (find-items params ?sort)] (let [results (find-items params ?sort)]
(if results (if results
(first results))))
(. results 1))))


;; specialized querying
;; 2b: specialized querying


(fn find-item-by-name [name] (fn find-item-by-name [name]
(find-item {8 name})) (find-item {8 name}))
@@ -87,16 +93,22 @@
stat-position (string.format "gte:%d" stat-baseline)} stat-position (string.format "gte:%d" stat-baseline)}
?sort)) ?sort))


;; arg parsing
;; 3b: specialized parsing

(fn parse-item-id [link]
(tonumber (string.sub (string.match link "item:[%d+]+") 6)))

;; 3c: arg parsing


(fn parse-opts [msg] (fn parse-opts [msg]
(icollect [k v (string.gmatch msg "%w+")] v)) (icollect [k v (string.gmatch msg "%w+")] v))


;; ui
;; 4a: ui


(fn ui-print [msg] (fn ui-print [msg]
(UIErrorsFrame:AddMessage msg)) (UIErrorsFrame:AddMessage msg))


;; 4b
(fn stat-name [n] (fn stat-name [n]
(let [stat-names ["Mana" "Health" "No Visible Effect" (let [stat-names ["Mana" "Health" "No Visible Effect"
"Agility" "Strength" "Intellect" "Agility" "Strength" "Intellect"
@@ -132,7 +144,7 @@
(set val (.. val " " (stat-name (- n 21)) ": " (. item n))))) (set val (.. val " " (stat-name (- n 21)) ": " (. item n)))))
val) val)


;; main
;; 5: main


(global (global
main main
@@ -147,10 +159,9 @@
inv-slot (GetInventorySlotInfo slot) inv-slot (GetInventorySlotInfo slot)
i-link (GetInventoryItemLink "player" inv-slot) i-link (GetInventoryItemLink "player" inv-slot)


i-id (if i-link (parse-item-id i-link))
p-level (UnitLevel "player")] p-level (UnitLevel "player")]
;; (print (string.format "slot %s stat %s gear-index %s" slot stat gear-index))
(if (not i-link) (if (not i-link)
;; empty ;; empty
(let [best (. (let [best (.
@@ -183,7 +194,6 @@
i-level (. stats 12) i-level (. stats 12)
i-stat (. stats stat) i-stat (. stats stat)
best (. (find-next-better-item i-class i-subclass i-invtype p-level i-level stat (max i-stat 1) (fn [a b] (< (. a stat) (. b stat)))) gear-index)] best (. (find-next-better-item i-class i-subclass i-invtype p-level i-level stat (max i-stat 1) (fn [a b] (< (. a stat) (. b stat)))) gear-index)]
(if best (if best
(do (do
(DEFAULT_CHAT_FRAME:AddMessage (string.format "\124Hitem:%d:0:0:0:0:0:0:0:0\124h[%s]\124h\124r" (. best 2) (. best 8))) (DEFAULT_CHAT_FRAME:AddMessage (string.format "\124Hitem:%d:0:0:0:0:0:0:0:0\124h[%s]\124h\124r" (. best 2) (. best 8)))
@@ -194,9 +204,11 @@
" at " " at "
(or (. best 20)) "N/A")) (or (. best 20)) "N/A"))
(ui-print (.. "currently equipped " i-name " " (or (. stats stat) "N/A")))))))
(ui-print (.. "currently equipped " i-name " " (or (. stats stat) "N/A"))))))
(print (.. "Item " (un-quote i-name) " not found")))
"ok"))))) "ok")))))

;; unused
(fn maxxed [] (fn maxxed []
(let [slots ["AmmoSlot" (let [slots ["AmmoSlot"
"BackSlot" "BackSlot"


+ 31
- 16
main.lua Dosyayı Görüntüle

@@ -1,3 +1,8 @@
if (1 > #itemdb) then
print("Failed to load item database")
else
print("Item database loaded")
end
local function length_of(coll) local function length_of(coll)
if coll then if coll then
local c = 0 local c = 0
@@ -40,12 +45,12 @@ local function matches(a, b)
end end
end end
local function find_items(params, _3fsort) local function find_items(params, _3fsort)
_G.assert((nil ~= params), "Missing argument params on main.fnl:48")
_G.assert((nil ~= params), "Missing argument params on main.fnl:54")
local results local results
do do
local tbl_17_auto = {} local tbl_17_auto = {}
local i_18_auto = #tbl_17_auto local i_18_auto = #tbl_17_auto
for _, row in ipairs(items) do
for _, row in ipairs(itemdb) do
local val_19_auto local val_19_auto
do do
local hit = true local hit = true
@@ -74,10 +79,10 @@ local function find_items(params, _3fsort)
end end
end end
local function find_item(params, _3fsort) local function find_item(params, _3fsort)
_G.assert((nil ~= params), "Missing argument params on main.fnl:63")
_G.assert((nil ~= params), "Missing argument params on main.fnl:69")
local results = find_items(params, _3fsort) local results = find_items(params, _3fsort)
if results then if results then
return first(results)
return results[1]
else else
return nil return nil
end end
@@ -89,12 +94,15 @@ local function find_next_better_item(class, subclass, invtype, lv, ilv, stat_pos
return find_items({[4] = class, [6] = subclass, [10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format("gt>:%d", item_stat)}, _3fsort) return find_items({[4] = class, [6] = subclass, [10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format("gt>:%d", item_stat)}, _3fsort)
end end
local function find_good_item(invtype, lv, stat_position, stat_baseline, _3fsort) local function find_good_item(invtype, lv, stat_position, stat_baseline, _3fsort)
_G.assert((nil ~= stat_baseline), "Missing argument stat-baseline on main.fnl:83")
_G.assert((nil ~= stat_position), "Missing argument stat-position on main.fnl:83")
_G.assert((nil ~= lv), "Missing argument lv on main.fnl:83")
_G.assert((nil ~= invtype), "Missing argument invtype on main.fnl:83")
_G.assert((nil ~= stat_baseline), "Missing argument stat-baseline on main.fnl:89")
_G.assert((nil ~= stat_position), "Missing argument stat-position on main.fnl:89")
_G.assert((nil ~= lv), "Missing argument lv on main.fnl:89")
_G.assert((nil ~= invtype), "Missing argument invtype on main.fnl:89")
return find_items({[10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format("gte:%d", stat_baseline)}, _3fsort) return find_items({[10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format("gte:%d", stat_baseline)}, _3fsort)
end end
local function parse_item_id(link)
return tonumber(string.sub(string.match(link, "item:[%d+]+"), 6))
end
local function parse_opts(msg) local function parse_opts(msg)
local tbl_17_auto = {} local tbl_17_auto = {}
local i_18_auto = #tbl_17_auto local i_18_auto = #tbl_17_auto
@@ -140,22 +148,28 @@ local function main0(msg)
end end
opts = tbl_17_auto opts = tbl_17_auto
end end
local _let_11_ = opts
local slot = _let_11_[1]
local stat = _let_11_[2]
local gear_index = _let_11_[3]
local _let_12_ = opts
local slot = _let_12_[1]
local stat = _let_12_[2]
local gear_index = _let_12_[3]
local slot0 = (slot .. "Slot") local slot0 = (slot .. "Slot")
local stat0 = (21 + tonumber(stat)) local stat0 = (21 + tonumber(stat))
local gear_index0 = tonumber((gear_index or "1")) local gear_index0 = tonumber((gear_index or "1"))
local inv_slot = GetInventorySlotInfo(slot0) local inv_slot = GetInventorySlotInfo(slot0)
local i_link = GetInventoryItemLink("player", inv_slot) local i_link = GetInventoryItemLink("player", inv_slot)
local i_id
if i_link then
i_id = parse_item_id(i_link)
else
i_id = nil
end
local p_level = UnitLevel("player") local p_level = UnitLevel("player")
if not i_link then if not i_link then
local best local best
local function _12_(a, b)
local function _14_(a, b)
return ((a[stat0] < b[stat0]) and (a[12] < b[12])) return ((a[stat0] < b[stat0]) and (a[12] < b[12]))
end end
best = (find_good_item(inv_slot, UnitLevel("player"), stat0, 1, _12_))[gear_index0]
best = (find_good_item(inv_slot, UnitLevel("player"), stat0, 1, _14_))[gear_index0]
if best then if best then
DEFAULT_CHAT_FRAME:AddMessage(string.format("|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r", best[2], best[8])) DEFAULT_CHAT_FRAME:AddMessage(string.format("|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r", best[2], best[8]))
return ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A")) return ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A"))
@@ -172,10 +186,10 @@ local function main0(msg)
local i_level = stats[12] local i_level = stats[12]
local i_stat = stats[stat0] local i_stat = stats[stat0]
local best local best
local function _14_(a, b)
local function _16_(a, b)
return (a[stat0] < b[stat0]) return (a[stat0] < b[stat0])
end end
best = (find_next_better_item(i_class, i_subclass, i_invtype, p_level, i_level, stat0, max(i_stat, 1), _14_))[gear_index0]
best = (find_next_better_item(i_class, i_subclass, i_invtype, p_level, i_level, stat0, max(i_stat, 1), _16_))[gear_index0]
if best then if best then
DEFAULT_CHAT_FRAME:AddMessage(string.format("|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r", best[2], best[8])) DEFAULT_CHAT_FRAME:AddMessage(string.format("|Hitem:%d:0:0:0:0:0:0:0:0|h[%s]|h|r", best[2], best[8]))
ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A")) ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A"))
@@ -183,6 +197,7 @@ local function main0(msg)
else else
end end
else else
print(("Item " .. un_quote(i_name) .. " not found"))
end end
return "ok" return "ok"
end end


Yükleniyor…
İptal
Kaydet