Browse Source

better stat selection/ordering logic

tags/v0.0.5
anonymous 8 months ago
parent
commit
92c398823d
3 changed files with 25 additions and 23 deletions
  1. +1
    -1
      Better.toc
  2. +14
    -13
      main.fnl
  3. +10
    -9
      main.lua

+ 1
- 1
Better.toc View File

@@ -2,7 +2,7 @@
## Title: Better
## Notes: Shows better item for given slot
## Author: L
## Version: 0.0.1
## Version: 0.0.5

Items.lua



+ 14
- 13
main.fnl View File

@@ -77,18 +77,16 @@
(find-item {8 name}))

(fn find-next-better-item [class subclass invtype lv ilv stat-position item-stat ?sort]
(find-items {4 class
6 subclass
10 invtype
14 (string.format "gte:%d" (- lv 4))
14 (string.format "lte:%d" lv)
;; 12 (string.format "gte:%d" ilv)
stat-position (string.format "gt>:%d" item-stat)}
?sort))
(let [stat-comparison "gt>:%d"]
(find-items {4 class
6 subclass
10 invtype
14 (string.format "lte:%d" lv)
stat-position (string.format stat-comparison item-stat)}
?sort)))
(lambda find-good-item [invtype lv stat-position stat-baseline ?sort]
(find-items {10 invtype
14 (string.format "gte:%d" (- lv 6))
14 (string.format "lte:%d" lv)
stat-position (string.format "gte:%d" stat-baseline)}
?sort))
@@ -169,9 +167,10 @@
inv-slot
(UnitLevel "player")
stat
1
(fn [a b] (and (< (. a stat) (. b stat))
(< (. a 12) (. b 12)))))
0
(fn [a b]
(< (+ (. a 12) (. a stat))
(+ (. b 12) (. b stat))) ))
gear-index)]
(if best
(do
@@ -193,7 +192,9 @@
i-invtype (. stats 10)
i-level (. stats 12)
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 0) (fn [a b]
(< (+ (. a 12) (. a stat))
(+ (. b 12) (. b stat)) ))) gear-index)]
(if best
(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)))


+ 10
- 9
main.lua View File

@@ -91,13 +91,14 @@ local function find_item_by_name(name)
return find_item({[8] = name})
end
local function find_next_better_item(class, subclass, invtype, lv, ilv, stat_position, 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)
local stat_comparison = "gt>:%d"
return find_items({[4] = class, [6] = subclass, [10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format(stat_comparison, item_stat)}, _3fsort)
end
local function find_good_item(invtype, lv, stat_position, stat_baseline, _3fsort)
_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")
_G.assert((nil ~= stat_baseline), "Missing argument stat-baseline on main.fnl:88")
_G.assert((nil ~= stat_position), "Missing argument stat-position on main.fnl:88")
_G.assert((nil ~= lv), "Missing argument lv on main.fnl:88")
_G.assert((nil ~= invtype), "Missing argument invtype on main.fnl:88")
return find_items({[10] = invtype, [14] = string.format("lte:%d", lv), [stat_position] = string.format("gte:%d", stat_baseline)}, _3fsort)
end
local function parse_item_id(link)
@@ -167,9 +168,9 @@ local function main0(msg)
if not i_link then
local best
local function _14_(a, b)
return ((a[stat0] < b[stat0]) and (a[12] < b[12]))
return ((a[12] + a[stat0]) < (b[12] + b[stat0]))
end
best = (find_good_item(inv_slot, UnitLevel("player"), stat0, 1, _14_))[gear_index0]
best = (find_good_item(inv_slot, UnitLevel("player"), stat0, 0, _14_))[gear_index0]
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]))
return ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A"))
@@ -187,9 +188,9 @@ local function main0(msg)
local i_stat = stats[stat0]
local best
local function _16_(a, b)
return (a[stat0] < b[stat0])
return ((a[12] + a[stat0]) < (b[12] + b[stat0]))
end
best = (find_next_better_item(i_class, i_subclass, i_invtype, p_level, i_level, stat0, max(i_stat, 1), _16_))[gear_index0]
best = (find_next_better_item(i_class, i_subclass, i_invtype, p_level, i_level, stat0, max(i_stat, 0), _16_))[gear_index0]
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]))
ui_print(("next best available: " .. best[8] .. " " .. stat_print(best) .. " at " .. best[20] .. "N/A"))


Loading…
Cancel
Save