Not signed in (Sign In)
    • CommentAuthorChardonnay
    • CommentTimeAug 1st 2007 edited
     
    Put this together this evening. Seems to spit out sensible numbers and find some nice deals. :)

    Edit: Aha, I see that I can snarf recipe info using the Tradeskill API. I'll see if I can add that in without slowing the thing to a crawl...

    Edit 2: Updated version posted downthread
    •  
      CommentAuthorNorganna
    • CommentTimeAug 2nd 2007 edited
     
    If I may make a (slight) performance suggestion, put the functions into a permanent structure just the first time it runs.

    Now you won't have to create the function enclosures for every single item scanned. Also you should be able to build the recipe info using the tradeskill api, since it will only build it once, the first time it is run, and not every time.

    The one disadvantage of this method is that you have to remember to change the version at the top every time you make a code change, or it won't be rebuilt! :)

    (ps: The below was dry coded. I think it will work, but please don't kill me if it deletes your OS.)

    -- "Disencrafting" baserule
    --
    -- This baserule looks for cheap mats for crafting disenchantable items,
    -- taking into account the expected cost of the other mats
    --
    -- Includes a table with a selection of "good value" tailoring recipes - could
    -- maybe hook into Fizzwidget's ReagentCost to avoid all that?

    local version = 1.0
    local dc = BtmScan.Disencraft

    if (not dc or dc.version ~= version) then
    dc = { version = version }
    BtmScan.Disencraft = dc

    function dc.getDirectCost(itemID)
    local itemInfo = Informant.GetItem(itemID)
    if itemInfo and itemInfo.vendors and itemInfo.buy then
    return itemInfo.buy
    else
    local _, itemLink = GetItemInfo(itemID)
    if not itemLink then return nil end
    return Auctioneer.Statistic.GetUsableMedian(Auctioneer.ItemDB.CreateItemKeyFromLink(itemLink))
    end
    end

    function dc.getDisenchantValue(itemID)
    local _, itemLink = GetItemInfo(itemID)
    if not itemLink then return 0 end
    if not Enchantrix then return 0 end
    return Enchantrix.Storage.GetItemDisenchantTotals(itemLink) or 0
    end

    function dc.getMinCost(itemID)
    local minCost = dc.getDirectCost(itemID) or 10000000

    if recipeTable[itemID] then
    local matsCost = 0
    for _, mat in pairs(dc.recipeTable[itemID]) do
    local matID, matCount = mat[1], mat[2]
    matsCost = matsCost + dc.getMinCost(matID) * matCount
    end
    minCost = math.min(minCost, matsCost)
    end

    return minCost
    end

    function dc.getMaxYield(itemID)
    local maxYield = 0
    for recipeID, recipeMats in pairs(dc.recipeTable) do
    local usedCount = 0
    local otherMatsCost = 0

    for _, mat in pairs(recipeMats) do
    local matID, matCount = mat[1], mat[2]
    if matID == itemID then
    usedCount = usedCount + matCount
    else
    otherMatsCost = otherMatsCost + getMinCost(matID) * matCount
    end
    end

    if usedCount > 0 then
    local disenchantValue = getDisenchantValue(recipeID)

    local recipeValue
    if disenchantValue > 0 then
    recipeValue = disenchantValue
    else
    recipeValue = dc.getMaxYield(recipeID)
    end

    local remainingValue = recipeValue - otherMatsCost
    maxYield = math.max(maxYield, remainingValue / usedCount)
    end
    end

    return maxYield
    end

    ----------------------------------------
    dc.recipeTable = {
    -- Raw materials
    [4305] = { { 4306, 4 } },
    [4339] = { { 4338, 5 } },
    [14048] = { { 14047, 5 } },
    [21840] = { { 21877, 6 } },

    -- Azure Silk Cloak (30)
    [7053] = { { 4305, 3 }, { 6260, 2 }, { 2321, 2 }, },
    -- Green Silken Shoulders (31)
    [7057] = { { 4305, 5 }, { 4291, 2 }, },
    -- Black Mageweave Leggings (36)
    [9999] = { { 4339, 2 }, { 4291, 3 }, },

    -- White Bandit Mask (38) - recipe is a drop
    --[10008] = { { 4339, 1 }, { 2324, 1 }, { 8343, 1 }, },

    -- Black Mageweave Headband (41)
    [10024] = { { 4339, 3 }, { 8343, 2 }, },
    -- Runecloth Belt (46)
    [13856] = { { 14048, 3 }, { 14341, 1 }, },

    -- Cindercloth Pants (51) - recipe is a drop
    --[14045] = { { 14048, 6 }, { 14341, 1 }, { 7078, 1 }, },
    -- Frostweave Pants (51) - recipe is a drop
    --[13871] = { { 14048, 6 }, { 14341, 1 }, { 7080, 1 }, },

    -- Runecloth Boots (51)
    [13864] = { { 14048, 4 }, { 14341, 1 }, { 14227, 2 }, { 8170, 4 }, },
    -- Runecloth Shoulders (56)
    [13867] = { { 14048, 7 }, { 14341, 1 }, { 14227, 2 }, { 8170, 4 }, },
    -- Netherweave Belt (61)
    [21850] = { { 21840, 3 }, { 14341, 1 }, },
    -- Netherweave Pants (64)
    [21852] = { { 21840, 6 }, { 14341, 1 }, },
    }
    ----------------------------------------
    end

    basePrice = dc.getMaxYield(itemID) * itemCount
    •  
      CommentAuthorNorganna
    • CommentTimeAug 2nd 2007
     
    PS: I'll be nicking this one as well .

    Thanks Chardonnay, yoing!!!
  1.  
    Posted By: NorgannaIf I may make a (slight) performance suggestion, put the functions into a permanent structure just the first time it runs.


    Yep, thanks, it does help! Here's Mark II, with the tradeskill scanning added. It found some recipes I hadn't considered. :P

    -- "Disencrafting" baserule
    --
    -- Looks for cheap enchanting mats, cheap items to disenchant, and (deep breath)
    -- cheap mats for disenchantable crafted items taking into account the expected
    -- cost of the other mats.
    --
    -- Collects available crafting recipes when tradeskill window is open. Recipe
    -- data is stored in BtmScanData (persists across sessions)

    --------------------------------------------------------------------------------

    local ruleVersion = 2
    local dataVersion = 2

    local minProfit = 0.25
    local minProfitAbs = 2500

    --------------------------------------------------------------------------------

    -- init recipe/ingredient data
    local data = BtmScanData.Disencraft
    if not data or data.version ~= dataVersion then
    local data = {
    version = dataVersion,
    recipeTable = {},
    ingredientTable = {}
    }
    BtmScanData.Disencraft = data
    end

    -- init rule logic
    local rule = BtmScan.Disencraft
    if not rule or rule.version ~= ruleVersion then
    rule = { version = ruleVersion }
    local data = BtmScanData.Disencraft

    -- get value of enchanting mat
    rule.getMatValue = function(itemID)
    if not rule.priceCapTable[itemID] then return 0 end
    return math.min(Enchantrix.Util.GetReagentPrice(itemID) or 0, rule.priceCapTable[itemID])
    end

    -- get disenchant value for item
    rule.getDisenchantValue = function(itemID)
    local _, itemLink = GetItemInfo(itemID)
    if not itemLink then return 0 end
    if not Enchantrix then return 0 end

    local data = Enchantrix.Storage.GetItemDisenchants(itemLink)
    if not data then return 0 end

    local total, totalValue = data.total, 0
    if total and total[1] > 0 then
    local totalNumber, totalQuantity = unpack(total)
    for result, resData in pairs(data) do
    if result ~= "total" then
    local resNumber, resQuantity = unpack(resData)
    local resProb, resCount = resNumber / totalNumber, resQuantity / resNumber
    local resYield = resProb * resCount
    local resValuePer = rule.getMatValue(result)
    local resValue = resValuePer * resYield
    totalValue = totalValue + resValue
    end
    end
    end

    return totalValue
    end

    -- get cost of buying item directly, from vendor or ah
    rule.getDirectCost = function(itemID)
    local itemInfo = Informant.GetItem(itemID)
    if itemInfo and itemInfo.vendors and itemInfo.buy then
    return itemInfo.buy
    else
    local _, itemLink = GetItemInfo(itemID)
    if not itemLink then return nil end
    local itemKey = Auctioneer.ItemDB.CreateItemKeyFromLink(itemLink)
    return Auctioneer.Statistic.GetUsableMedian(itemKey)
    end
    end

    -- get minimum cost of obtaining item, from vendor, ah or crafting
    rule.getMinCost = function(itemID)
    local minCost = rule.getDirectCost(itemID) or 10000000

    if data.recipeTable[itemID] then
    local matsCost = 0
    for _, mat in pairs(data.recipeTable[itemID]) do
    local matID, matCount = mat[1], mat[2]
    matsCost = matsCost + rule.getMinCost(matID) * matCount
    end
    minCost = math.min(minCost, matsCost)
    end

    return minCost
    end

    -- get best crafting value for recipe ingredient
    rule.getCraftingValue = function(itemID)
    if not data.ingredientTable[itemID] then
    return 0, "None"
    end

    local maxYield, maxName = 0, "None"
    for recipeID in pairs(data.ingredientTable[itemID]) do
    local recipeMats = data.recipeTable[recipeID]
    local usedCount = 0
    local otherMatsCost = 0

    for _, mat in pairs(recipeMats) do
    local matID, matCount = mat[1], mat[2]
    if matID == itemID then
    usedCount = usedCount + matCount
    else
    otherMatsCost = otherMatsCost + rule.getMinCost(matID) * matCount
    end
    end

    local disenchantValue = rule.getDisenchantValue(recipeID)

    local recipeValue, recipeName
    if disenchantValue > 0 then
    recipeValue, recipeName = disenchantValue, GetItemInfo(recipeID) or "GetItemInfo error"
    else
    recipeValue, recipeName = rule.getCraftingValue(recipeID)
    end

    local recipeYield = (recipeValue - otherMatsCost) / usedCount
    if recipeYield > maxYield then
    maxYield = recipeYield
    maxName = recipeName
    end
    end

    return maxYield, maxName
    end

    -- decide whether to buy based on value and price
    rule.shouldBuy = function(value, price)
    local profit = value - price
    if price > 0 and profit / price >= rule.minProfit and profit >= rule.minProfitAbs then
    return true
    end
    end

    ------------------------------------------------------------------------------

    -- main rule logic
    rule.RuleMain = function(itemID, itemCount, bidPrice, buyPrice)
    local value, action, reason = 0, "none", "none"

    local matValue = rule.getMatValue(itemID) * itemCount
    if matValue > value then
    value = matValue
    reason = "Mat"
    end

    local deValue = rule.getDisenchantValue(itemID)
    if deValue > value then
    value = deValue
    reason = "Disenchant"
    end

    local craftValue, recipeName = rule.getCraftingValue(itemID)
    craftValue = craftValue * itemCount
    if craftValue > value then
    value = craftValue
    reason = recipeName
    end

    if rule.shouldBuy(value, buyPrice) then
    action = "buy"
    elseif rule.shouldBuy(value, bidPrice) then
    action = "bid"
    end

    return value, action, reason
    end

    ------------------------------------------------------------------------------

    -- utility function to get itemID from itemLink
    rule.getItemID = function(itemLink)
    local itemID = BtmScan.BreakLink(itemLink)
    return itemID
    end

    -- debug spam
    rule.spam = function(message)
    getglobal("ChatFrame1"):AddMessage("Disencraft: "..message, 0.25, 0.25, 1.0)
    end

    -- hook to scan tradeskill window when it opens
    rule.tradeUiHook = function()
    local recipeTable = data.recipeTable
    local ingredientTable = data.ingredientTable

    local addedCount = 0
    for recipeIdx = 1, GetNumTradeSkills() do
    local name, type = GetTradeSkillInfo(recipeIdx)
    if name and type ~= "header" then
    local recipeID = rule.getItemID(GetTradeSkillItemLink(recipeIdx))
    if not recipeTable[recipeID] then
    recipeTable[recipeID] = {}
    local reagentCount = GetTradeSkillNumReagents(recipeIdx)
    for reagentIdx = 1, reagentCount do
    local reagentID = rule.getItemID(GetTradeSkillReagentItemLink(recipeIdx, reagentIdx))
    local _, _, reagentUsedCount = GetTradeSkillReagentInfo(recipeIdx, reagentIdx)
    if not ingredientTable[reagentID] then ingredientTable[reagentID] = {} end
    ingredientTable[reagentID][recipeID] = true
    recipeTable[recipeID][reagentIdx] = { reagentID, reagentUsedCount }
    end
    addedCount = addedCount + 1
    end
    end
    end

    if addedCount > 0 then rule.spam("Added " .. addedCount .. " recipes") end

    data.ingredientTable = ingredientTable
    data.recipeTable = recipeTable
    end

    Stubby.UnregisterEventHook("TRADE_SKILL_SHOW", "BtmScan.Disencraft")
    Stubby.RegisterEventHook("TRADE_SKILL_SHOW", "BtmScan.Disencraft", rule.tradeUiHook)

    -- maximum prices for enchanting reagents (server-specific!)
    rule.priceCapTable = {
    [22450] = 500000, -- Void Crystal
    [20725] = 50000, -- Nexus Crystal

    [22449] = 200000, -- Large Prismatic Shard
    [14344] = 120000, -- Large Brilliant Shard
    [11178] = 75000, -- Large Radiant Shard
    [11139] = 25000, -- Large Glowing Shard
    [11084] = 7500, -- Large Glimmering Shard

    [22448] = 60000, -- Small Prismatic Shard
    [14343] = 30000, -- Small Brilliant Shard
    [11177] = 60000, -- Small Radiant Shard
    [11138] = 5000, -- Small Glowing Shard
    [10978] = 2500, -- Small Glimmering Shard

    [22446] = 75000, -- Greater Planar Essence
    [16203] = 120000, -- Greater Eternal Essence
    [11175] = 60000, -- Greater Nether Essence
    [11135] = 7500, -- Greater Mystic Essence
    [11082] = 6000, -- Greater Astral Essence
    [10939] = 4500, -- Greater Magic Essence

    [22447] = 25000, -- Lesser Planar Essence
    [16202] = 40000, -- Lesser Eternal Essence
    [11174] = 20000, -- Lesser Nether Essence
    [11134] = 2500, -- Lesser Mystic Essence
    [10998] = 2000, -- Lesser Astral Essence
    [10938] = 1500, -- Lesser Magic Essence

    [22445] = 20000, -- Arcane Dust
    [16204] = 20000, -- Illusion Dust
    [11176] = 5000, -- Dream Dust
    [11137] = 4500, -- Vision Dust
    [11083] = 2000, -- Soul Dust
    [10940] = 1000, -- Strange Dust
    }

    BtmScan.Disencraft = rule
    end

    --------------------------------------------------------------------------------

    BtmScan.Disencraft.minProfit = minProfit
    BtmScan.Disencraft.minProfitAbs = minProfitAbs

    basePrice, action, reason = BtmScan.Disencraft.RuleMain(itemID, itemCount, bidPrice, buyPrice)
    •  
      CommentAuthorNorganna
    • CommentTimeAug 3rd 2007 edited
     
    For anyone who's interested in a version for the trunk (current development) version of BtmScan, I have nicked Chardonnay's code and made it into an evaluator module.

    http://norganna.org/EvalDisencraft.lua

    Just download into your BtmScan AddOn dir and add it to the bottom of you BtmScan.toc, and away you go!
    • CommentAuthorMita
    • CommentTimeAug 4th 2007
     
    Can you explain what the recipe part does?

    I use a level 5 Ah character with no tradeskills
    • CommentAuthorChardonnay
    • CommentTimeAug 4th 2007 edited
     
    So do I. Well, a level 1. But the recipe list is saved across sessions so:

    * Log into your main
    * Invoke the baserule at least once so that it can hook into the tradeskill UI. While testing I simply moused over a random item to bring up the tooltip. This step isn't necessary with Norganna's version (I think)
    * Open your tradeskill window(s) - if any new recipes are found, you'll see a log message saying how many were collected
    * Log out - recipes saved and available to all your characters

    If it's worked you should start seeing matches like this:

    • CommentAuthorsabot7726
    • CommentTimeAug 9th 2007
     
    Chardonnay do you use just 1 baserule that has all this stuff in it or do you swap them in and out depending on what you're looking for?

    If it's just one baserule, can you repost it somewhere? :whorship:
    • CommentAuthorsabot7726
    • CommentTimeAug 9th 2007 edited
     
    I'm really excited about the potential of this, but so far I keep getting the following error when using Norganna's version. It might be related to an error I got when I loaded auctioneer 4.0.3 and then had to revert back to 2 though. So far Chardonnay's version is working great, I just pasted it into the front of my normal baserule and it seems to be playing nicely with everything else :

    Date: 2007-08-09 07:47:09
    ID: 51
    Error occured in: Global
    Count: 1
    Message: ..\AddOns\BtmScan\EvalDisencraft.lua line 48:
    bad argument #1 to 'insert' (table expected, got nil)
    Debug:
    [C]: ?
    [C]: insert()
    BtmScan\EvalDisencraft.lua:48: in main chunk
    [C]: LoadAddOn()
    [string " function BtmScan_CheckLoad()..."]:4:
    [string " function BtmScan_CheckLoad()..."]:1
    (tail call): ?
    [C]: xpcall()
    Stubby\Stubby.lua:327:
    Stubby\Stubby.lua:292
    (tail call): ?
    ..\FrameXML\UIParent.lua:692: UIParent_OnEvent()
    [string "*:OnEvent"]:1:
    [string "*:OnEvent"]:1:cool:
    • CommentAuthorChardonnay
    • CommentTimeAug 9th 2007 edited
     
    Norganna's version won't work at all with 4.0.2/4.0.3 - you'd need to be running the development version of BtmScan, which has removed baserules and replaced them with a much friendlier system of pluggable modules. (Much easier to develop for as well BTW - you actually get useful error messages instead of the dreaded "Error compiling baserule script." :P)

    You're mostly on your own if you run development versions of course - no telling what might be broken in there on any given day.

    Posted By: sabot7726Chardonnay do you use just 1 baserule that has all this stuff in it or do you swap them in and out depending on what you're looking for?


    I don't have one big rule that does everything - it's more to do with experimentation.

    I was trying to level tailoring cheaply on my mage for Frozen Shadoweave, so I wrote the above to look for cheap materials and "best bet" recipes. There doesn't seem to be any avoiding huge costs once you get to 350+ in a tradeskill, but at least I made a decent chunk of it back.
    • CommentAuthorsabot7726
    • CommentTimeAug 9th 2007
     
    Nice :)

    Ok thanks for the information and keep up the good work!
    • CommentAuthorSavaa
    • CommentTimeSep 7th 2007
     
    is it possible to make this remember wich realm that a character knew this or that recipe on?
    -I play on two realms, it spams me silly with suggested stuff that I cant make on That realm..
  2.  
    The version I'm running for BtmScan 5.x stores recipes per realm+faction - it was annoying me too when I woke up an old character on another realm. Still needs some tidying up before I can post it, though.
    • CommentAuthorjtone
    • CommentTimeSep 9th 2007
     
    This looks very valuable. I will be awaiting a server specific version with bated breath. Thanks for all your work.
    • CommentAuthorToraa
    • CommentTimeSep 12th 2007
     
    Should the "gui." portions not be "gui:"? Or do I have something set up incorrectly on my end? The Disencraft evaluator won't show up via /btm (but will function) unless this patch is in place. Thanks.

    diff -p prepatch.EvalDisencraft.lua /cygdrive/c/World\ of\ Warcraft/Interface/AddOns/btmscan/EvalDisencraft.lua
    *** EvalDisencraft.lua Wed Sep 12 08:11:15 2007
    --- /cygdrive/c/World of Warcraft/Interface/AddOns/btmscan/EvalDisencraft.lua Wed Sep 12 08:10:13 2007
    *************** define(lcName..'.enable', true)
    *** 348,356 ****
    define(lcName..'.profit.min', 4500)
    define(lcName..'.profit.pct', 45)
    function lib:setup(gui)
    ! id = gui.AddTab(libName)
    ! gui.AddControl(id, "Subhead", 0, libName.." Settings")
    ! gui.AddControl(id, "Checkbox", 0, 1, lcName..".enable", "Enable purchasing for "..lcName)
    ! gui.AddControl(id, "MoneyFramePinned", 0, 1, lcName..".profit.min", 1, 99999999, "Minimum Profit")
    ! gui.AddControl(id, "WideSlider", 0, 1, lcName..".profit.pct", 1, 100, 0.5, "Percent Profit: %0.01f%%")
    end
    --- 348,356 ----
    define(lcName..'.profit.min', 4500)
    define(lcName..'.profit.pct', 45)
    function lib:setup(gui)
    ! id = gui:AddTab(libName)
    ! gui:AddControl(id, "Subhead", 0, libName.." Settings")
    ! gui:AddControl(id, "Checkbox", 0, 1, lcName..".enable", "Enable purchasing for "..lcName)
    ! gui:AddControl(id, "MoneyFramePinned", 0, 1, lcName..".profit.min", 1, 99999999, "Minimum Profit")
    ! gui:AddControl(id, "WideSlider", 0, 1, lcName..".profit.pct", 1, 100, 0.5, "Percent Profit: %0.01f%%")
    end
    •  
      CommentAuthorNorganna
    • CommentTimeSep 12th 2007
     
    Yes, you are correct. The library has been modified since the old version of this evaluator was published, and now requires ":" instead of ".".
    •  
      CommentAuthorNorganna
    • CommentTimeSep 12th 2007
     
    Ok, I have updated the rule at http://norganna.org/EvalDisencraft.lua to now have the new method calls.
    • CommentAuthorgilafro
    • CommentTimeOct 2nd 2007
     
    I got this error after i copy/pasted into the lua file because it wouldnt load

    i tried as wow loaded /btm baserule disencraft and disencraft.lua i got an error in my chatscreen .. so i figured i'd just copy/paste it in.

    Date: 2007-10-02 17:09:53
    ID: 52
    Error occured in: Global
    Count: 1
    Message: [string "local consKey = BtmScan.prices.consKey..."] line 68:
    bad argument #1 to 'insert' (table expected, got nil)
    Debug:
    [C]: ?
    [C]: insert()
    [string "local consKey = BtmScan.prices.consKey..."]:68: BaseRule()
    BtmScan\btmMain.lua:455: PageScan()
    BtmScan\btmMain.lua:182:
    BtmScan\btmMain.lua:160
    AddOns:
    AucAdvanced, v5.0.2249
    AucFilterBasic, v5.0.2249 (BillyGoat)
    AucScanData, v1.0
    AucStatPurchased, v5.0.2249 (BillyGoat)
    AucStatSimple, v5.0.2249 (BillyGoat)
    AucStatStdDev, v5.0.2249 (BillyGoat)
    Auctioneer, v4.0.5
    BeanCounter, v4.0.5
    BtmScan, v4.0.5
    Cartographer, vr50400
    CTMailMod, v2.01 (CTMod 2.0)
    EnchantingSell, v20100.4
    Enchantrix, v5.0.2249
    EnhTooltip, v4.0.5
    FubarAutoLootFu, v1.0
    FuBarBagFu, v2.0
    FuBarCheckStoneFu, v2.0
    FuBarClockFu, v2.0
    FuBarcombatTextFu, v20003-1
    FuBarDPS, v2.0.$Rev: 46010 $
    FuBarDurabilityFu, v2.0
    FuBarExperienceFu, v1.1 $Revision: 36333 $
    FuBarFriendsFu, v2.4
    FuBarGuildFu, v2.4
    FuBarLocationFu, v2.0
    FuBarMicroMenuFu, v2.0
    FuBarMoneyFu, v20000-1
    FuBar, v33424
    Stubby, v1923
    Swatter, v4.0.5
    WIM, v2.2.19
    • CommentAuthorgilafro
    • CommentTimeOct 2nd 2007
     
    this aswell

    Date: 2007-10-02 17:16:46
    ID: 51
    Error occured in: Hooked Function
    Count: 1
    Message: Error while calling hook:
    Hook name:
    EnhTooltip.AddTooltip
    [string "local consKey = BtmScan.prices.consKey..."] line 68:
    bad argument #1 to 'insert' (table expected, got nil)
    Instantiated from:
    ..\AddOns\BtmScan\btmMain.lua line 86:
    in function `OnLoad'
    Debug:
    [C]: insert()
    [string "local consKey = BtmScan.prices.consKey..."]:68: BaseRule()
    BtmScan\btmMain.lua:1659:
    BtmScan\btmMain.lua:1586
    (tail call): ?
    [C]: xpcall()
    Stubby\Stubby.lua:327:
    Stubby\Stubby.lua:292
    (tail call): ?
    EnhTooltip\Tooltip.lua:1177: TooltipCall()
    BtmScan\btmMain.lua:1778:
    BtmScan\btmMain.lua:1764
    AddOns:
    AucAdvanced, v5.0.2249
    AucFilterBasic, v5.0.2249 (BillyGoat)
    AucScanData, v1.0
    AucStatPurchased, v5.0.2249 (BillyGoat)
    AucStatSimple, v5.0.2249 (BillyGoat)
    AucStatStdDev, v5.0.2249 (BillyGoat)
    Auctioneer, v4.0.5
    BeanCounter, v4.0.5
    BtmScan, v4.0.5
    Cartographer, vr50400
    CTMailMod, v2.01 (CTMod 2.0)
    EnchantingSell, v20100.4
    Enchantrix, v5.0.2249
    EnhTooltip, v4.0.5
    FubarAutoLootFu, v1.0
    FuBarBagFu, v2.0
    FuBarCheckStoneFu, v2.0
    FuBarClockFu, v2.0
    FuBarcombatTextFu, v20003-1
    FuBarDPS, v2.0.$Rev: 46010 $
    FuBarDurabilityFu, v2.0
    FuBarExperienceFu, v1.1 $Revision: 36333 $
    FuBarFriendsFu, v2.4
    FuBarGuildFu, v2.4
    FuBarLocationFu, v2.0
    FuBarMicroMenuFu, v2.0
    FuBarMoneyFu, v20000-1
    FuBar, v33424
    Stubby, v1923
    Swatter, v4.0.5
    WIM, v2.2.19
    •  
      CommentAuthordinesh
    • CommentTimeOct 2nd 2007
     
    auc5 doesn't use barerules any more. disencraft is now an evaluator. use the forum search to find the thread which explains how it is installed now.
    • CommentAuthorNine
    • CommentTimeDec 10th 2007
     
    Any updates on this? I have been adding stuff to it myself but don't want to duplicate effort if Chardonnay is still working on it. :)

    In particular I added resale support, and then, because that popped up dozens of crafted items that I KNOW won't sell at the stated price, hooked it up to BtmScan's item configuration so it can be told to skip specific recipes.
    •  
      CommentAuthordinesh
    • CommentTimeDec 10th 2007
     
    i haven't seen Chard for a few weeks now, to be honest.
    • CommentAuthorbunnyfufu
    • CommentTimeDec 10th 2007
     
    Nine,
    Any chance you could upload your changes or post them http://pastey.net ?
    Thank you. =)
    • CommentAuthorNine
    • CommentTimeDec 10th 2007
     
    Yea I can upload it when I get home.
    • CommentAuthorNine
    • CommentTimeDec 10th 2007
     
    Here ya go: http://norganna.org/up/show.php/UkAIjp/EvalDisencraft.lua

    In the process I found a bug in BtmScan's IgnoreMod, so for that part to work properly you'll need to make this fix to btmMain.lua, and remove existing IgnoreMod entries in your BtmScan SV files

    1509c1509
    < item.itemconfig.ignoreModuleList=item.itemconfig.ignoreModuleList..";"..item.reason
    ---
    > item.itemconfig.ignoreModuleList=item.itemconfig.ignoreModuleList..","..item.reason
    • CommentAuthorNine
    • CommentTimeDec 11th 2007
     
    Posted By: dineshi haven't seen Chard for a few weeks now, to be honest.


    I guess I'll keep plugging at it then. :)

    It's still missing per-realm recipe lists and could use configurable pricing models: one for buying other ingredients and another for the selling the crafted items.
    • CommentAuthorMorkai
    • CommentTimeApr 20th 2008 edited
     
    Is there an updated version of this Eval module? I'd love to start using it, but I usually get errors when I open my trade skill windows. A few times it has managed to tell me some recipes have been added, but it's far less than the number of disenchantable recipes I know in that skill.

    Edit: I'm going to try digging in on my own, but my programing skills are rusty and I know nothing of Lua. But I will try...


    Date: 2008-04-20 10:36:39
    ID: 1
    Error occured in: Global
    Count: 1
    Message: ..\AddOns\BtmScan\EvalDisencraft.lua line 299:
    table index is nil
    Debug:
    [C]: ?
    BtmScan\EvalDisencraft.lua:299: f()
    Stubby\Stubby.lua:734: EventWatcher()
    Stubby\Stubby.lua:957: Events()
    [string "*:OnEvent"]:1:
    [string "*:OnEvent"]:1
    [C]: UseAction()
    ..\FrameXML\SecureTemplates.lua:266: SecureActionButton_OnClick()
    [string "*:OnClick"]:1:
    [string "*:OnClick"]:1
World of Warcraft™ and Blizzard Entertainment™ are trademarks or registered trademarks of Blizzard Entertainment, Inc. in the U.S. and/or other countries.