diff --git a/Fallback.exe b/Fallback.exe
index 374ee51b..715c8c10 100644
Binary files a/Fallback.exe and b/Fallback.exe differ
diff --git a/lib/Class_ColorPicker.ahk b/lib/Class_ColorPicker.ahk
index 9ab3416e..821dccf8 100644
--- a/lib/Class_ColorPicker.ahk
+++ b/lib/Class_ColorPicker.ahk
@@ -205,6 +205,10 @@ class ColorPicker
GuiControl, % ( showImage ) ? "hide" : "show", Pbg
showImage := showImage ? false : true
Return
+
+ GDIColorPickerPreviewGuiEscape:
+ Gui, GDIColorPickerPreview:Destroy
+ Return
}
rgbaToARGBHex(r, g, b, a) {
diff --git a/lib/Class_GdipTooltip.ahk b/lib/Class_GdipTooltip.ahk
index fdac0eaf..37f06050 100644
--- a/lib/Class_GdipTooltip.ahk
+++ b/lib/Class_GdipTooltip.ahk
@@ -83,7 +83,8 @@ class GdipTooltip
this.CalculateToolTipDimensions(String, fontSize, ttWidth, ttLineHeight, ttheight)
renderingOffset := this.renderingHack ? 0.3999 : 0
- textAreaWidth := ttWidth + (2 * this.padding.width) + renderingOffset
+ ;textAreaWidth := ttWidth + (Floor(this.padding.width / 2)) + renderingOffset
+ textAreaWidth := ttWidth + renderingOffset
textAreaHeight := ttHeight + (2 * this.padding.height) + renderingOffset
this.window.Clear()
@@ -192,12 +193,12 @@ class GdipTooltip
StringArray := StrSplit(String, "`n")
Loop % StringArray.MaxIndex()
{
- element := StringArray[a_index]
+ element := StringArray[A_Index]
dim := this.MeasureText(element, fontSize + 1, "Consolas")
len := dim["W"] * (fontSize / 10)
hi := dim["H"] * ((fontSize - 1) / 10)
- if (len > ttWidth)
+ If (len > ttWidth)
{
ttWidth := len
}
diff --git a/lib/DebugPrintArray.ahk b/lib/DebugPrintArray.ahk
index 17be044a..947336af 100644
--- a/lib/DebugPrintArray.ahk
+++ b/lib/DebugPrintArray.ahk
@@ -47,6 +47,10 @@ DebugPrintArray(Array, Display=1, Level=0, guiWidth=800, guiHeight=900)
DebugPrintArrayGuiClose:
Gui, DebugPrintArray:Destroy
Return
+
+ DebugPrintArrayGuiEscape:
+ Gui, DebugPrintArray:Destroy
+ Return
}
/*
diff --git a/lib/PoEScripts_Download.ahk b/lib/PoEScripts_Download.ahk
index 4466d362..40d33534 100644
--- a/lib/PoEScripts_Download.ahk
+++ b/lib/PoEScripts_Download.ahk
@@ -36,16 +36,31 @@
redirect := "L"
PreventErrorMsg := false
If (StrLen(options)) {
- If (RegExMatch(options, "i)SaveAs:[ \t]*\K[^\r\n]+", SavePath)) {
- commandData .= " " options " "
- commandHdr .= ""
- }
- If (RegExMatch(options, "i)Redirect:\sFalse")) {
- redirect := ""
- }
- If (RegExMatch(options, "i)PreventErrorMsg")) {
- PreventErrorMsg := true
- }
+ Loop, Parse, options, `n
+ {
+ If (RegExMatch(A_LoopField, "i)SaveAs:[ \t]*\K[^\r\n]+", SavePath)) {
+ commandData .= " " A_LoopField " "
+ commandHdr .= ""
+ }
+ If (RegExMatch(A_LoopField, "i)Redirect:\sFalse")) {
+ redirect := ""
+ }
+ If (RegExMatch(A_LoopField, "i)PreventErrorMsg")) {
+ PreventErrorMsg := true
+ }
+ If (RegExMatch(A_LoopField, "i)RequestType:(.*)", match)) {
+ requestType := Trim(match1)
+ }
+ If (RegExMatch(A_LoopField, "i)ReturnHeaders:(.*skip.*)")) {
+ skipRetHeaders := true
+ }
+ If (RegExMatch(A_LoopField, "i)TimeOut:(.*)", match)) {
+ timeout := Trim(match1)
+ }
+ }
+ }
+ If (not timeout) {
+ timeout := 30
}
e := {}
@@ -58,40 +73,49 @@
commandData .= "-o """ SavePath """ " ; set target destination and name
}
} Else {
- commandData .= " -" redirect "ks --compressed "
- commandHdr .= " -I" redirect "ks "
- }
+ commandData .= " -" redirect "ks --compressed "
+ If (requestType = "GET") {
+ commandHdr .= " -k" redirect "s "
+ } Else {
+ commandHdr .= " -I" redirect "ks "
+ }
+ }
+
If (StrLen(headers)) {
- commandData .= headers
- commandHdr .= headers
+ If (not requestType = "GET") {
+ commandData .= headers
+ commandHdr .= headers
+ }
If (StrLen(cookies)) {
commandData .= cookies
commandHdr .= cookies
}
}
- If (StrLen(ioData)) {
+ If (StrLen(ioData) and not requestType = "GET") {
+ If (requestType = "POST") {
+ commandData .= "-X POST "
+ }
commandData .= "--data """ ioData """ "
+ } Else If (StrLen(ioData)) {
+ url := url "?" ioData
}
If (binaryDL) {
- commandData .= "--connect-timeout 30 "
- commandData .= "--connect-timeout 30 "
+ commandData .= "--connect-timeout " timeout " "
+ commandData .= "--connect-timeout " timeout " "
} Else {
- commandData .= "--max-time 30 "
- commandHdr .= "--max-time 30 "
+ commandData .= "--max-time " timeout " "
+ commandHdr .= "--max-time " timeout " "
}
; get data
html := StdOutStream(curl """" url """" commandData)
- if (instr(url, "cdn")) {
- ;msgbox % curl """" url """" commandData
- }
;html := ReadConsoleOutputFromFile(commandData """" url """", "commandData") ; alternative function
; get return headers in seperate request
- If (not binaryDL) {
- If (StrLen(ioData)) {
- commandHdr := curl """" url "?" ioData """" commandHdr ; add payload to url since you can't use the -I argument with POST requests
+ If (not binaryDL and not skipRetHeaders) {
+ If (StrLen(ioData) and not requestType = "GET") {
+ commandHdr := curl """" url "?" ioData """" commandHdr ; add payload to url since you can't use the -I argument with POST requests
} Else {
commandHdr := curl """" url """" commandHdr
}
@@ -100,6 +124,7 @@
} Else {
ioHdr := html
}
+
reqHeadersCurl := commandHdr
} Catch e {
diff --git a/resources/Updates_Trade.txt b/resources/Updates_Trade.txt
index 177797a3..ec797fbb 100644
--- a/resources/Updates_Trade.txt
+++ b/resources/Updates_Trade.txt
@@ -1,5 +1,15 @@
The following is a list of what has been updated, starting with 1.1.0
+2.7.0
+================================================================================================
+Implemented a predicted item pricing/search using machine learning algorithms:
+ This feature uses the ML pricing from poeprices.info.
+ For the moment it will only work with rare items, magic items will likely be enabled in the near future.
+ This feature replaces the default search (ctrl + d) but is optional and can be disabled again in the settings.
+ Be aware that this feature could return correct prices, but also be completely off the mark, improving it needs the help of the community.
+Added poedb.tw as an alternative to the PoE Wiki (open item on wiki hoteky). This is a toggle option and has to be enabled in the settings ("general" section).
+Fixed the new maps not working with the stash highlight hotkey.
+
2.6.3
================================================================================================
Fixed an issue that caused the new maps not being searched correctly.
diff --git a/resources/VersionTrade.txt b/resources/VersionTrade.txt
index d64a1b50..39c00762 100644
--- a/resources/VersionTrade.txt
+++ b/resources/VersionTrade.txt
@@ -1,2 +1,2 @@
-TradeReleaseVersion := "v2.6.3"
+TradeReleaseVersion := "v2.7.0"
TradeAHKVersionRequired := "1.1.26.00"
diff --git a/resources/ahk/POE-ItemInfo.ahk b/resources/ahk/POE-ItemInfo.ahk
index b8850dcc..6ae28dcd 100644
--- a/resources/ahk/POE-ItemInfo.ahk
+++ b/resources/ahk/POE-ItemInfo.ahk
@@ -6441,8 +6441,7 @@ ParseClipBoardChanges(debug = false)
/*
;Item Data Translation, won't be used for now.
CBContents := PoEScripts_TranslateItemData(CBContents, translationData, currentLocale, retObj, retCode)
- */
-
+ */
Globals.Set("ItemText", CBContents)
ParsedData := ParseItemData(CBContents)
@@ -10030,16 +10029,8 @@ AdvancedItemInfoExt() {
Globals.Set("ItemText", CBContents)
ParsedData := ParseItemData(CBContents)
- If (Item.Name) {
- itemTextBase64 := ""
- FileDelete, %A_ScriptDir%\temp\itemText.txt
- FileAppend, %CBContents%, %A_ScriptDir%\temp\itemText.txt, utf-8
- command := "certutil -encode -f ""%cd%\temp\itemText.txt"" ""%cd%\temp\base64ItemText.txt"" & type ""%cd%\temp\base64ItemText.txt"""
- itemTextBase64 := ReadConsoleOutputFromFile(command, "encodeToBase64.txt")
- itemTextBase64 := Trim(RegExReplace(itemTextBase64, "i)-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|77u/", ""))
- itemTextBase64 := UriEncode(itemTextBase64)
- itemTextBase64 := RegExReplace(itemTextBase64, "i)^(%0D)?(%0A)?|((%0D)?(%0A)?)+$", "")
- url := "http://pathof.info/?item=" itemTextBase64
+ If (Item.Name) {
+ url := "http://pathof.info/?item=" StringToBase64UriEncoded(CBContents)
openWith := AssociatedProgram("html")
OpenWebPageWith(openWith, Url)
}
@@ -10047,6 +10038,24 @@ AdvancedItemInfoExt() {
}
}
+StringToBase64UriEncoded(stringIn, noUriEncode = false) {
+ stringBase64 := ""
+ FileDelete, %A_ScriptDir%\temp\itemText.txt
+ FileAppend, %stringIn%, %A_ScriptDir%\temp\itemText.txt, utf-8
+ command := "certutil -encode -f ""%cd%\temp\itemText.txt"" ""%cd%\temp\base64ItemText.txt"" & type ""%cd%\temp\base64ItemText.txt"""
+ stringBase64 := ReadConsoleOutputFromFile(command, "encodeToBase64.txt")
+ stringBase64 := Trim(RegExReplace(stringBase64, "i)-----BEGIN CERTIFICATE-----|-----END CERTIFICATE-----|77u/", ""))
+
+ If (not noUriEncode) {
+ stringBase64 := UriEncode(stringBase64)
+ stringBase64 := RegExReplace(stringBase64, "i)^(%0D)?(%0A)?|((%0D)?(%0A)?)+$", "")
+ } Else {
+ stringBase64 := RegExReplace(stringBase64, "i)\r|\n", "")
+ }
+
+ Return stringBase64
+}
+
OpenWebPageWith(application, url) {
If (InStr(application, "iexplore")) {
ie := ComObjCreate("InternetExplorer.Application")
@@ -10653,6 +10662,26 @@ ShowAssignedHotkeys:
Gui, 3:Cancel
return
+GuiEscape:
+ ; settings
+ Gui, Cancel
+Return
+
+AboutGuiEscape:
+ Gui, About:Cancel
+Return
+
+ShowHotkeysGuiEscape:
+ Gui, ShowHotkeys:Cancel
+Return
+
+TranslateGuiEscape:
+ Gui, Translate:Cancel
+Return
+
+UpdateNotesGuiEscape:
+ Gui, UpdateNotes:Cancel
+Return
CheckForUpdates:
If (not globalUpdateInfo.repo) {
diff --git a/resources/ahk/TradeMacro.ahk b/resources/ahk/TradeMacro.ahk
index 2c996683..ddd6c5ff 100644
--- a/resources/ahk/TradeMacro.ahk
+++ b/resources/ahk/TradeMacro.ahk
@@ -116,23 +116,57 @@ TradeFunc_OpenWikiHotkey(priceCheckTest = false, itemData = "") {
TradeFunc_DoParseClipboard()
If (!Item.Name and TradeOpts.OpenUrlsOnEmptyItem) {
- TradeFunc_OpenUrlInBrowser("http://pathofexile.gamepedia.com/")
+ If (TradeOpts.WIkiAlternative) {
+ ;http://poedb.tw/us/item.php?n=The+Doctor
+ TradeFunc_OpenUrlInBrowser("http://poedb.tw/us/")
+ } Else {
+ TradeFunc_OpenUrlInBrowser("http://pathofexile.gamepedia.com/")
+ }
}
Else {
- UrlAffix :=
- If (Item.IsUnique or Item.IsGem or Item.IsDivinationCard or Item.IsCurrency) {
- UrlAffix := Item.Name
- } Else If (Item.IsFlask or Item.IsMap) {
- UrlAffix := Item.SubType
- } Else If (RegExMatch(Item.Name, "i)Sacrifice At") or RegExMatch(Item.Name, "i)Fragment of") or RegExMatch(Item.Name, "i)Mortal ") or RegExMatch(Item.Name, "i)Offering to ") or RegExMatch(Item.Name, "i)'s Key") or RegExMatch(Item.Name, "i)Breachstone")) {
- UrlAffix := Item.Name
- } Else {
- UrlAffix := Item.BaseType
+ UrlAffix := ""
+ UrlPage := ""
+ If (TradeOpts.WikiAlternative) {
+ ; uses poedb.tw
+ UrlPage := "item.php?n="
+
+ If (Item.IsUnique or Item.IsGem or Item.IsDivinationCard or Item.IsCurrency) {
+ UrlAffix := Item.Name
+ } Else If (Item.IsFlask) {
+ UrlPage := "search.php?Search="
+ UrlAffix := Item.SubType
+ } Else If (Item.IsMap) {
+ UrlPage := "area.php?n="
+ UrlAffix := RegExMatch(Item.SubType, "i)Unknown Map") ? Item.BaseName : Item.SubType
+ } Else If (RegExMatch(Item.Name, "i)Sacrifice At") or RegExMatch(Item.Name, "i)Fragment of") or RegExMatch(Item.Name, "i)Mortal ") or RegExMatch(Item.Name, "i)Offering to ") or RegExMatch(Item.Name, "i)'s Key") or RegExMatch(Item.Name, "i)Breachstone")) {
+ UrlAffix := Item.Name
+ } Else {
+ UrlAffix := Item.BaseName
+ }
}
+ Else {
+ UrlPage := ""
+
+ If (Item.IsUnique or Item.IsGem or Item.IsDivinationCard or Item.IsCurrency) {
+ UrlAffix := Item.Name
+ } Else If (Item.IsFlask or Item.IsMap) {
+ UrlAffix := Item.SubType
+ } Else If (RegExMatch(Item.Name, "i)Sacrifice At") or RegExMatch(Item.Name, "i)Fragment of") or RegExMatch(Item.Name, "i)Mortal ") or RegExMatch(Item.Name, "i)Offering to ") or RegExMatch(Item.Name, "i)'s Key") or RegExMatch(Item.Name, "i)Breachstone")) {
+ UrlAffix := Item.Name
+ } Else {
+ UrlAffix := Item.BaseType
+ }
+ }
+
If (StrLen(UrlAffix) > 0) {
- UrlAffix := StrReplace(UrlAffix," ","_")
- WikiUrl := "http://pathofexile.gamepedia.com/" UrlAffix
+ If (TradeOpts.WikiAlternative) {
+ UrlAffix := StrReplace(UrlAffix," ","+")
+ WikiUrl := "http://poedb.tw/us/" UrlPage . UrlAffix
+ } Else {
+ UrlAffix := StrReplace(UrlAffix," ","_")
+ WikiUrl := "http://pathofexile.gamepedia.com/" UrlPage . UrlAffix
+ }
TradeFunc_OpenUrlInBrowser(WikiUrl)
}
}
@@ -172,7 +206,6 @@ TradeFunc_Main(openSearchInBrowser = false, isAdvancedPriceCheck = false, isAdva
if(!isAdvancedPriceCheckRedirect) {
TradeFunc_DoParseClipboard()
}
-
iLvl := Item.Level
; cancel search If Item is empty
@@ -721,6 +754,20 @@ TradeFunc_Main(openSearchInBrowser = false, isAdvancedPriceCheck = false, isAdva
}
}
+ ; predicted pricing (poeprices.info - machine learning)
+ If (Item.RarityLevel > 2 and Item.RarityLevel < 4 and not (Item.IsCurrency or Item.IsDivinationCard or Item.IsEssence or Item.IsProphecy or Item.IsMap or Item.IsMapFragment or Item.IsGem)) {
+ If ((Item.IsJewel or Item.IsFlask or Item.IsLeaguestone)) {
+ If (Item.RarityLevel = 2) {
+ itemEligibleForPredictedPricing := false
+ } Else {
+ itemEligibleForPredictedPricing := true
+ }
+ }
+ Else {
+ itemEligibleForPredictedPricing := true
+ }
+ }
+
; show item age
If (isItemAgeRequest) {
RequestParams.name := Item.Name
@@ -765,14 +812,14 @@ TradeFunc_Main(openSearchInBrowser = false, isAdvancedPriceCheck = false, isAdva
Payload := RequestParams.ToPayload()
If (openSearchInBrowser) {
- ShowToolTip("Opening search in your browser...")
- } Else {
- ShowToolTip("Requesting search results...")
+ ShowToolTip("Opening search in your browser... ")
+ } Else If (not (TradeOpts.UsePredictedItemPricing and itemEligibleForPredictedPricing)) {
+ ShowToolTip("Requesting search results... ")
}
ParsingError := ""
currencyUrl := ""
- If (Item.IsCurrency and !Item.IsEssence and TradeFunc_CurrencyFoundOnCurrencySearch(Item.Name)) {
+ If (Item.IsCurrency and not Item.IsEssence and TradeFunc_CurrencyFoundOnCurrencySearch(Item.Name)) {
If (!TradeOpts.AlternativeCurrencySearch) {
Html := TradeFunc_DoCurrencyRequest(Item.Name, openSearchInBrowser, 0, currencyUrl, error)
If (error) {
@@ -789,6 +836,9 @@ TradeFunc_Main(openSearchInBrowser = false, isAdvancedPriceCheck = false, isAdva
}
}
}
+ Else If (not openSearchInBrowser and TradeOpts.UsePredictedItemPricing and itemEligibleForPredictedPricing) {
+ Html := TradeFunc_DoPoePricesRequest(ItemData.FullText)
+ }
Else If (not openSearchInBrowser) {
Html := TradeFunc_DoPostRequest(Payload, openSearchInBrowser)
}
@@ -828,6 +878,19 @@ TradeFunc_Main(openSearchInBrowser = false, isAdvancedPriceCheck = false, isAdva
ShowToolTip("")
ShowToolTip(ParsedData)
}
+ Else If (TradeOpts.UsePredictedItemPricing and itemEligibleForPredictedPricing) {
+ SetClipboardContents("")
+
+ If (TradeFunc_ParsePoePricesInfoErrorCode(Html)) {
+ If (TradeOpts.UsePredictedItemPricingGui) {
+ TradeFunc_ShowPredictedPricingFeedbackUI(Html)
+ } Else {
+ ParsedData := TradeFunc_ParsePoePricesInfoData(Html)
+ ShowToolTip("")
+ ShowToolTip(ParsedData)
+ }
+ }
+ }
Else {
; Check item age
If (isItemAgeRequest) {
@@ -1330,6 +1393,46 @@ TradeFunc_DoPostRequest(payload, openSearchInBrowser = false) {
Return, html
}
+TradeFunc_DoPoePricesRequest(RawItemData) {
+ EncodedItemData := StringToBase64UriEncoded(RawItemData, true)
+
+ postData := "l=" TradeGlobals.Get("LeagueName") "&i=" EncodedItemData
+ payLength := StrLen(postData)
+ url := "https://www.poeprices.info/api"
+
+ options := "RequestType: GET"
+ options .= "`n" "ReturnHeaders: skip"
+ options .= "`n" "TimeOut: 15"
+ reqHeaders := []
+
+ reqHeaders.push("Host: www.poeprices.info")
+ reqHeaders.push("Connection: keep-alive")
+ reqHeaders.push("Cache-Control: max-age=0")
+ reqHeaders.push("Origin: https://poeprices.info")
+ reqHeaders.push("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
+
+ ShowToolTip("Getting price prediction... ")
+ response := PoEScripts_Download(url, postData, reqHeaders, options, false)
+
+ If (TradeOpts.Debug) {
+ FileDelete, %A_ScriptDir%\temp\DebugSearchOutput.html
+ FileAppend, %response%, %A_ScriptDir%\temp\DebugSearchOutput.html
+ }
+
+ Try {
+ response := JSON.Load(response)
+ response.added := {}
+ response.added.encodedData := postData
+ response.added.league := TradeGlobals.Get("LeagueName")
+ response.added.requestUrl := url "?" postData
+ response.added.browserUrl := url "?" postData "&w=1"
+ } Catch e {
+ response := "ERROR: Parsing response failed, invalid JSON! "
+ }
+
+ Return response
+}
+
TradeFunc_MapCurrencyNameToID(name) {
; map the actual ingame name of the currency to the one used on poe.trade and get the corresponding ID
name := RegExReplace(name, "i) ", "_")
@@ -2047,6 +2150,113 @@ TradeFunc_ParseHtml(html, payload, iLvl = "", ench = "", isItemAgeRequest = fals
Return, Title
}
+TradeFunc_ParsePoePricesInfoErrorCode(response) {
+ If (not response or not response.HasKey("error")) {
+ ShowToolTip("")
+ ShowTooltip("ERROR: Request to poeprices.info timed out or`nreturned an invalid response! ")
+ Return 0
+ }
+ Else If (response.error = "1") {
+ ShowToolTip("")
+ ShowTooltip("No price prediction available. `n`nItem not found, insufficient sample data. ")
+ Return 0
+ }
+ Else If (response.error = "2") {
+ ShowToolTip("")
+ ShowTooltip("ERROR: Predicted search has encountered an unknown error! ")
+ Return 0
+ }
+ Else If (response.error = "0") {
+ min := response.HasKey("min") or response.HasKey("min_price") ? true : false
+ max := response.HasKey("max") or response.HasKey("max_price") ? true : false
+
+ min_value := StrLen(response.min) ? response.min : response.min_price
+ max_value := StrLen(response.max) ? response.max : response.max_price
+
+ If (min and max) {
+ If (not StrLen(min_value) and not StrLen(max_value)) {
+ ShowToolTip("")
+ ShowTooltip("No price prediction available. `n`nItem not found, insufficient sample data.")
+ Return 0
+ }
+ } Else If (not StrLen(min_value) and not StrLen(max_value)) {
+ ShowToolTip("")
+ ShowTooltip("ERROR: Request to poeprices.info failed,`nno prices were returned! ")
+ Return 0
+ }
+
+ Return 1
+ }
+ Return 0
+}
+
+TradeFunc_ParsePoePricesInfoData(response) {
+ Global Item, ItemData, TradeOpts
+
+ LeagueName := TradeGlobals.Get("LeagueName")
+
+ Name := (Item.IsRare and not Item.IsMap) ? Item.Name " " Item.BaseName : Item.Name
+ headLine := Trim(StrReplace(Name, "Superior", ""))
+ ; add corrupted tag
+ If (Item.IsCorrupted) {
+ headLine .= " [Corrupted] "
+ }
+
+ ; add gem quality and level
+ If (Item.IsGem) {
+ headLine := Item.Name ", Q" Item.Quality "%"
+ If (Item.Level >= 16) {
+ headLine := Item.Name ", " Item.Level "`/" Item.Quality "%"
+ }
+ }
+ ; add item sockets and links
+ If (ItemData.Sockets >= 5) {
+ headLine := Name " " ItemData.Sockets "s" ItemData.Links "l"
+ }
+ If (showItemLevel) {
+ headLine .= ", iLvl: " iLvl
+ }
+ headLine .= ", (" LeagueName ")"
+
+ lines := []
+ lines.push(["~~ Predicted item pricing (via machine-learning) ~~", "center", true])
+ lines.push([headLine, "left", true])
+ lines.push(["", "left"])
+ lines.push([" Price range: " Trim(response.min) " ~ " Trim(response.max) " " Trim(response.currency), "left"])
+ lines.push(["", "left", true])
+ lines.push(["", "left"])
+ lines.push(["Please consider supporting POEPRICES.INFO.", "left"])
+ lines.push(["Financially or via feedback on this feature on their website.", "left"])
+
+ maxWidth := 0
+ For i, line in lines {
+ maxWidth := StrLen(line[1]) > maxWidth ? StrLen(line[1]) : maxWidth
+ }
+
+ Title := ""
+ For i, line in lines {
+ If (RegExMatch(line[2], "i)center")) {
+ diff := maxWidth - StrLen(line[1])
+ line[1] := StrPad(line[1], maxWidth - Floor(diff / 2), "left")
+ console.log(maxWidth - Floor(diff / 2))
+ }
+ If (RegExMatch(line[2], "i)right")) {
+ line[1] := StrPad(line[1], maxWidth, "left")
+ }
+
+ Title .= line[1] "`n"
+ If (line[3]) {
+ seperator := ""
+ Loop, % maxWidth {
+ seperator .= "-"
+ }
+ Title .= seperator "`n"
+ }
+ }
+
+ Return Title
+}
+
; Trim names/string and add dots at the end If they are longer than specified length
TradeFunc_TrimNames(name, length, addDots) {
s := SubStr(name, 1 , length)
@@ -2851,6 +3061,92 @@ TradeFunc_CreateItemPricingTestGUI() {
Gui, PricingTest:Show, w500 , Item Pricing Test
}
+TradeFunc_ShowPredictedPricingFeedbackUI(data) {
+ Global
+
+ _Name := (Item.IsRare and not Item.IsMap) ? Item.Name " " Item.BaseName : Item.Name
+ _headLine := Trim(StrReplace(_Name, "Superior", ""))
+ ; add corrupted tag
+ If (Item.IsCorrupted) {
+ _headLine .= " [Corrupted] "
+ }
+
+ ; add gem quality and level
+ If (Item.IsGem) {
+ _headLine := Item.Name ", Q" Item.Quality "%"
+ If (Item.Level >= 16) {
+ _headLine := Item.Name ", " Item.Level "`/" Item.Quality "%"
+ }
+ }
+ ; add item sockets and links
+ If (ItemData.Sockets >= 5) {
+ _headLine := _Name " " ItemData.Sockets "s" ItemData.Links "l"
+ }
+ If (showItemLevel) {
+ _headLine .= ", iLvl: " iLvl
+ }
+ _headLine .= ", (" TradeGlobals.Get("LeagueName") ")"
+
+
+ Gui, PredictedPricing:Destroy
+
+ Gui, PredictedPricing:Margin, 10, 10
+
+ Gui, PredictedPricing:Font, bold s8, Verdana
+ Gui, PredictedPricing:Add, Text, BackgroundTrans, Priced using machine learning algorithms.
+ Gui, PredictedPricing:Add, Text, BackgroundTrans x+5 yp+0 cRed, (Close with ESC)
+
+ Gui, PredictedPricing:Add, GroupBox, w400 h90 y+10 x10, Results
+ Gui, PredictedPricing:Font, norm s10, Consolas
+ Gui, PredictedPricing:Add, Text, yp+25 x20 w380 BackgroundTrans, % _headLine
+ Gui, PredictedPricing:Font, norm bold, Consolas
+ Gui, PredictedPricing:Add, Text, x20 w90 y+10 BackgroundTrans, % "Price range: "
+ Gui, PredictedPricing:Font, norm, Consolas
+ Gui, PredictedPricing:Add, Text, x+5 yp+0 BackgroundTrans, % Trim(data.min) " ~ " Trim(data.max) " " Trim(data.currency)
+ _url := data.added.browserUrl
+ Gui, PredictedPricing:Add, Link, x245 y99 cBlue BackgroundTrans, Open on poeprices.info
+
+ Gui, PredictedPricing:Font, norm s8 italic, Verdana
+ Gui, PredictedPricing:Add, Text, BackgroundTrans x15 y135 w400, % "You can disable this GUI in favour of a simple result tooltip. Settings menu -> under 'Search' group."
+
+ Gui, PredictedPricing:Font, bold s8, Verdana
+ Gui, PredictedPricing:Add, GroupBox, w400 h230 y175 x10, Feedback
+ Gui, PredictedPricing:Font, norm, Verdana
+
+ Gui, PredictedPricing:Add, Text, x20 yp+25 BackgroundTrans, You think the predicted price range is?
+ Gui, PredictedPricing:Add, Progress, x16 yp+18 w2 h56 BackgroundRed hwndPredictedPricingHiddenControl1
+ GuiControl, Hide, % PredictedPricingHiddenControl1
+ Gui, PredictedPricing:Add, Radio, x20 yp+2 vPredictionPricingRadio1 Group BackgroundTrans, Low
+ Gui, PredictedPricing:Add, Radio, x20 yp+20 vPredictionPricingRadio2 BackgroundRed, Fair
+ Gui, PredictedPricing:Add, Radio, x20 yp+20 vPredictionPricingRadio3 BackgroundTrans, High
+
+ Gui, PredictedPricing:Add, Text, x20 yp+30 BackgroundTrans, % "Add comment (max. 1000 characters):"
+ Gui, PredictedPricing:Add, Edit, x20 yp+20 w380 r4 limit1000 vPredictedPricingComment,
+
+ Gui, PredictedPricing:Add, Text, x100 y+10 cRed hwndPredictedPricingHiddenControl2, Please select a rating first!
+ GuiControl, Hide, % PredictedPricingHiddenControl2
+ Gui, PredictedPricing:Add, Button, x260 w90 yp-5 gPredictedPricingSendFeedback, Send && Close
+ Gui, PredictedPricing:Add, Button, x+11 w40 gPredictedPricingClose, Close
+
+ Gui, PredictedPricing:Font, bold s8, Verdana
+ Gui, PredictedPricing:Add, Text, x15 y+20 cGreen BackgroundTrans, % "This feature is powered by poeprices.info!"
+ Gui, PredictedPricing:Font, norm, Verdana
+ Gui, PredictedPricing:Add, Link, x15 y+5 cBlue BackgroundTrans, Support them via PayPal
+ Gui, PredictedPricing:Add, Text, x+5 yp+0 cDefault BackgroundTrans, % "or"
+ Gui, PredictedPricing:Add, Link, x+5 yp+0 cBlue BackgroundTrans, Patreon
+
+ ; invisible fields
+ Gui, PredictedPricing:Add, Edit, x+0 yp+0 w0 h0 ReadOnly vPredictedPricingEncodedData, % data.added.encodedData
+ Gui, PredictedPricing:Add, Edit, x+0 yp+0 w0 h0 ReadOnly vPredictedPricingLeague, % data.added.League
+ Gui, PredictedPricing:Add, Edit, x+0 yp+0 w0 h0 ReadOnly vPredictedPricingMin, % data.min
+ Gui, PredictedPricing:Add, Edit, x+0 yp+0 w0 h0 ReadOnly vPredictedPricingMax, % data.max
+ Gui, PredictedPricing:Add, Edit, x+0 yp+0 w0 h0 ReadOnly vPredictedPricingCurrency, % data.currency
+
+ Gui, PredictedPricing:Color, FFFFFF
+ Gui, PredictedPricing:Show, AutoSize, Predicted Item Pricing
+ ControlFocus, Send && Close, Predicted Item Pricing
+}
+
; Open Gui window to show the items variable mods, select the ones that should be used in the search and set their min/max values
TradeFunc_AdvancedPriceCheckGui(advItem, Stats, Sockets, Links, UniqueStats = "", ChangedImplicit = "") {
;https://autohotkey.com/board/topic/9715-positioning-of-controls-a-cheat-sheet/
@@ -3611,6 +3907,7 @@ TradeFunc_HandleGuiSubmit() {
TradeGlobals.Set("AdvancedPriceCheckItem", newItem)
Gui, SelectModsGui:Destroy
+ TradeFunc_ActivatePoeWindow()
}
class TradeUtils {
@@ -3833,7 +4130,7 @@ OverwriteUpdateOptionsTimer:
Return
BringPoEWindowToFrontAfterInit:
- WinActivate, Path of Exile ahk_class POEWindowClass
+ TradeFunc_ActivatePoeWindow()
SetTimer, BringPoEWindowToFrontAfterInit, OFF
Return
@@ -4000,6 +4297,7 @@ Return
CloseCustomSearch:
TradeFunc_ResetCustomSearchGui()
Gui, CustomSearch:Destroy
+ TradeFunc_ActivatePoeWindow()
Return
TradeFunc_ResetCustomSearchGui() {
@@ -4121,7 +4419,7 @@ TradeFunc_HandleCustomSearchSubmit(openInBrowser = false) {
TradeFunc_OpenUrlInBrowser("http://poe.trade/" ParsedUrl1)
}
Else {
- ShowToolTip("Requesting search results...")
+ ShowToolTip("Requesting search results... ")
Html := TradeFunc_DoPostRequest(Payload)
ParsedData := TradeFunc_ParseHtml(Html, Payload)
SetClipboardContents(ParsedData)
@@ -4204,3 +4502,104 @@ Kill_CookieDataExe:
}
SetTimer, Kill_CookieDataExe, Off
Return
+
+SelectModsGuiGuiEscape:
+ ; trademacro advanced search
+ Gui, SelectModsGui:Cancel
+ TradeFunc_ActivatePoeWindow()
+Return
+
+CustomSearchGuiEscape:
+ Gui, CustomSearch:Cancel
+ TradeFunc_ActivatePoeWindow()
+Return
+
+PricingTestGuiEscape:
+ Gui, PricingTest:Cancel
+ TradeFunc_ActivatePoeWindow()
+Return
+
+CookieWindowGuiEscape:
+ Gui, CookieWindow:Cancel
+Return
+
+ConnectionFailureGuiEscape:
+ Gui, ConnectionFailure:Cancel
+Return
+
+PredictedPricingGuiEscape:
+ Gui, PredictedPricing:Destroy
+ TradeFunc_ActivatePoeWindow()
+Return
+
+PredictedPricingClose:
+ Gui, PredictedPricing:Destroy
+ TradeFunc_ActivatePoeWindow()
+Return
+
+PredictedPricingSendFeedback:
+ Gui, PredictedPricing:Submit, NoHide
+ If (PredictionPricingRadio1 or PredictionPricingRadio2 or PredictionPricingRadio3) {
+ Gui, PredictedPricing:Destroy
+ } Else {
+ GuiControl, Show, % PredictedPricingHiddenControl1
+ GuiControl, Show, % PredictedPricingHiddenControl2
+ Return
+ }
+
+ TradeFunc_ActivatePoeWindow()
+ _rating := ""
+ If (PredictionPricingRadio1) {
+ _rating := "Low"
+ } Else If (PredictionPricingRadio2) {
+ _rating := "Fair"
+ } Else If (PredictionPricingRadio3) {
+ _rating := "High"
+ }
+
+ _prices := {}
+ _prices.min := PredictedPricingMin
+ _prices.max := PredictedPricingMax
+ _prices.currency := PredictedPricingCurrency
+ TradeFunc_PredictedPricingSendFeedback(_rating, PredictedPricingComment, PredictedPricingEncodedData, PredictedPricingLeague, _prices)
+Return
+
+TradeFunc_PredictedPricingSendFeedback(selector, comment, encodedData, league, price) {
+ postData := ""
+ postData := selector ? postData "selector=" UriEncode(Trim(selector)) "&" : postData
+ postData := comment ? postData "feedbacktxt=" UriEncode(comment) "&" : postData
+ postData := encodedData ? postData "qitem_txt=" encodedData "&" : postData
+ postData := price.min ? postData "min=" UriEncode(price.min "") "&" : postData
+ postData := price.max ? postData "max=" UriEncode(price.max "") "&" : postData
+ postData := price.currency ? postData "currency=" UriEncode(price.currency "") "&" : postData
+ postData := league ? postData "league=" UriEncode(league) "&" : postData
+ postData := postData "source=" UriEncode("poetrademacro") "&"
+
+ If (TradeOpts.Debug) {
+ postData := postData "debug=1" "&"
+ }
+ postData := RegExReplace(postData, "(\&)$")
+
+ payLength := StrLen(postData)
+ url := "https://www.poeprices.info/send_feedback"
+ options := "ReturnHeaders: skip"
+
+ reqHeaders := []
+ reqHeaders.push("Host: www.poeprices.info")
+ reqHeaders.push("Connection: keep-alive")
+ reqHeaders.push("Cache-Control: max-age=0")
+ reqHeaders.push("Origin: https://poeprices.info")
+ reqHeaders.push("Content-type: application/x-www-form-urlencoded; charset=UTF-8")
+ reqHeaders.push("Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
+
+ response := PoEScripts_Download(url, postData, reqHeaders, options, false)
+ If (not RegExMatch(response, "i)^""?(low|fair|high)""?$")) {
+ ShowTooltip("ERROR: Sending feedback failed. ", true)
+ }
+}
+
+TradeFunc_ActivatePoeWindow() {
+ If (not WinActive("ahk_group PoEWindowGrp")) {
+ WinActivate, ahk_group PoEWindowGrp
+ }
+}
\ No newline at end of file
diff --git a/resources/ahk/TradeMacroInit.ahk b/resources/ahk/TradeMacroInit.ahk
index 23c19232..3b36426a 100644
--- a/resources/ahk/TradeMacroInit.ahk
+++ b/resources/ahk/TradeMacroInit.ahk
@@ -497,7 +497,7 @@ CreateTradeSettingsUI()
; General
- GuiAddGroupBox("[TradeMacro] General", "x7 y+7 w310 h350")
+ GuiAddGroupBox("[TradeMacro] General", "x7 y+7 w310 h380")
; Note: window handles (hwnd) are only needed if a UI tooltip should be attached.
@@ -537,47 +537,8 @@ CreateTradeSettingsUI()
AddToolTip(DeleteCookiesH, "Delete Internet Explorer cookies.`nThe default option (all) is preferred.`n`nThis will be skipped if no cookies are needed to access poe.trade.")
GuiAddDropDownList("All|poe.trade", "x+10 yp+4 w70", TradeOpts.CookieSelect, "CookieSelect", "CookieSelectH")
- ; Hotkeys
-
- GuiAddGroupBox("[TradeMacro] Hotkeys", "x7 yp+40 w310 h265")
-
- GuiAddCheckbox("Price Check:", "x17 yp+26 w165 h20 0x0100", TradeOpts.PriceCheckEnabled, "PriceCheckEnabled", "PriceCheckEnabledH")
- AddToolTip(PriceCheckEnabledH, "Check item prices.")
- GuiAddHotkey(TradeOpts.PriceCheckHotKey, "x+1 yp-2 w124 h20", "PriceCheckHotKey", "PriceCheckHotKeyH")
- AddToolTip(PriceCheckHotKeyH, "Press key/key combination.`nDefault: ctrl + d")
-
- GuiAddCheckbox("Advanced Price Check:", "x17 yp+32 w165 h20 0x010", TradeOpts.AdvancedPriceCheckEnabled, "AdvancedPriceCheckEnabled", "AdvancedPriceCheckEnabledH")
- AddToolTip(AdvancedPriceCheckEnabledH, "Select mods to include in your search`nbefore checking prices.")
- GuiAddHotkey(TradeOpts.AdvancedPriceCheckHotKey, "x+1 yp-2 w124 h20", "AdvancedPriceCheckHotKey", "AdvancedPriceCheckHotKeyH")
- AddToolTip(AdvancedPriceCheckHotKeyH, "Press key/key combination.`nDefault: ctrl + alt + d")
-
- GuiAddCheckbox("Custom Search:", "x17 yp+32 w165 h20 0x0100", TradeOpts.CustomInputSearchEnabled, "CustomInputSearchEnabled", "CustomInputSearchEnabledH")
- AddToolTip(CustomInputSearchEnabledH, "Custom text input search.")
- GuiAddHotkey(TradeOpts.CustomInputSearchHotKey, "x+1 yp-2 w124 h20", "CustomInputSearchHotKey", "CustomInputSearchHotKeyH")
- AddToolTip(CustomInputSearchHotKeyH, "Press key/key combination.`nDefault: ctrl + i")
-
- GuiAddCheckbox("Search (Browser):", "x17 yp+32 w165 h20 0x0100", TradeOpts.OpenSearchOnPoeTradeEnabled, "OpenSearchOnPoeTradeEnabled", "OpenSearchOnPoeTradeEnabledH")
- AddToolTip(OpenSearchOnPoeTradeEnabledH, "Open your search on poe.trade instead of showing`na tooltip with results.")
- GuiAddHotkey(TradeOpts.OpenSearchOnPoeTradeHotKey, "x+1 yp-2 w124 h20", "OpenSearchOnPoeTradeHotKey", "OpenSearchOnPoeTradeHotKeyH")
- AddToolTip(OpenSearchOnPoeTradeHotKeyH, "Press key/key combination.`nDefault: ctrl + q")
-
- GuiAddCheckbox("Open Item (Wiki):", "x17 yp+32 w165 h20 0x0100", TradeOpts.OpenWikiEnabled, "OpenWikiEnabled", "OpenWikiEnabledH")
- AddToolTip(OpenWikiEnabledH, "Open your items page on the PoE-Wiki.")
- GuiAddHotkey(TradeOpts.OpenWikiHotKey, "x+1 yp-2 w124 h20", "OpenWikiHotKey", "OpenWikiHotKeyH")
- AddToolTip(OpenWikiHotKeyH, "Press key/key combination.`nDefault: ctrl + w")
-
- GuiAddCheckbox("Show Item Age:", "x17 yp+32 w165 h20 0x010", TradeOpts.ShowItemAgeEnabled, "ShowItemAgeEnabled", "ShowItemAgeEnabledH")
- AddToolTip(ShowItemAgeEnabledH, "Checks your item's age.")
- GuiAddHotkey(TradeOpts.ShowItemAgeHotkey, "x+1 yp-2 w124 h20", "ShowItemAgeHotkey", "ShowItemAgeHotkeyH")
- AddToolTip(ShowItemAgeHotkeyH, "Press key/key combination.`nDefault: ctrl + e")
-
- GuiAddCheckbox("Change League:", "x17 yp+32 w165 h20 0x0100", TradeOpts.ChangeLeagueEnabled, "ChangeLeagueEnabled", "ChangeLeagueEnabledH")
- AddToolTip(ChangeLeagueEnabledH, "Checks your item's age.")
- GuiAddHotkey(TradeOpts.ChangeLeagueHotkey, "x+1 yp-2 w124 h20", "ChangeLeagueHotkey", "ChangeLeagueHotkeyH")
- AddToolTip(ChangeLeagueHotkeyH, "Press key/key combination.`nDefault: ctrl + l")
-
-
- Gui, Add, Link, x17 yp+35 w210 h20 cBlue BackgroundTrans, Hotkey Options
+ GuiAddCheckbox("Use poedb.tw instead of the wiki.", "x17 yp+27 w260 h30 0x0100", TradeOpts.WikiAlternative, "WikiAlternative", "WikiAlternativeH")
+ AddToolTip(WikiAlternativeH, "Use poedb.tw to open a page with information`nabout your item/item base.")
; Search
@@ -638,20 +599,28 @@ CreateTradeSettingsUI()
AddToolTip(PrefillMaxValueH, "Automatically fill the max-values in the advanced search GUI.")
; option group start
- GuiAddCheckbox("Remove multiple Listings from same Account", "x337 yp+30 w280 h40", TradeOpts.RemoveMultipleListingsFromSameAccount, "RemoveMultipleListingsFromSameAccount", "RemoveMultipleListingsFromSameAccountH")
+ GuiAddCheckbox("Force max links (certain corrupted items).", "x337 yp+30 w280 h40", TradeOpts.ForceMaxLinks, "ForceMaxLinks", "ForceMaxLinksH")
+ AddToolTip(ForceMaxLinksH, "Searches for corrupted 3/4 max-socket unique items always use`nthe maximum amount of links if your item is fully linked.")
+
+ ; option group start
+ GuiAddCheckbox("Remove multiple Listings from same Account.", "x337 yp+30 w280 h40", TradeOpts.RemoveMultipleListingsFromSameAccount, "RemoveMultipleListingsFromSameAccount", "RemoveMultipleListingsFromSameAccountH")
AddToolTip(RemoveMultipleListingsFromSameAccountH, "Removes multiple listings from the same account from`nyour search results (to combat market manipulators).`n`nThe removed items are also removed from the average and`nmedian price calculations.")
; option group start
- GuiAddCheckbox("Force max links (certain corrupted items)", "x337 yp+30 w280 h40", TradeOpts.ForceMaxLinks, "ForceMaxLinks", "ForceMaxLinksH")
- AddToolTip(ForceMaxLinksH, "Searches for corrupted 3/4 max-socket unique items always use`nthe maximum amount of links if your item is fully linked.")
-
+ GuiAddCheckbox("Show prices as chaos equivalent.", "x337 yp+30 w280 h40", TradeOpts.ShowPricesAsChaosEquiv, "ShowPricesAsChaosEquiv", "ShowPricesAsChaosEquivH")
+ AddToolTip(ShowPricesAsChaosEquivH, "Shows all prices as their chaos equivalent.")
+
; option group start
- GuiAddCheckbox("Alternative currency search", "x337 yp+30 w280 h40", TradeOpts.AlternativeCurrencySearch, "AlternativeCurrencySearch", "AlternativeCurrencySearchH")
+ GuiAddCheckbox("Alternative currency search.", "x337 yp+30 w280 h40", TradeOpts.AlternativeCurrencySearch, "AlternativeCurrencySearch", "AlternativeCurrencySearchH")
AddToolTip(AlternativeCurrencySearchH, "Shows historical data of the searched currency.`nProvided by poe.ninja.")
+
+ ; option group start
+ GuiAddCheckbox("Use predicted item pricing (experimental).", "x337 yp+30 w280 h40", TradeOpts.UsePredictedItemPricing, "UsePredictedItemPricing", "UsePredictedItemPricingH")
+ AddToolTip(UsePredictedItemPricingH, "Use predicted item pricing via machine-learning algorithms.`nReplaces the default search, works with magic/rare/unique items.`n`nProvided by poeprices.info.")
; option group start
- GuiAddCheckbox("Show prices as chaos equivalent", "x337 yp+30 w280 h40", TradeOpts.ShowPricesAsChaosEquiv, "ShowPricesAsChaosEquiv", "ShowPricesAsChaosEquivH")
- AddToolTip(ShowPricesAsChaosEquivH, "Shows all prices as their chaos equivalent.")
+ GuiAddCheckbox("Predicted item pricing: Use feedback Gui.", "x337 yp+30 w280 h40", TradeOpts.UsePredictedItemPricingGui, "UsePredictedItemPricingGui", "UsePredictedItemPricingGuiH")
+ AddToolTip(UsePredictedItemPricingGuiH, "Use a Gui instead of the default tooltip to display results.`nYou can send some feedback to improve this feature.")
; header
GuiAddText("Pre-Select Options (Advanced Search)", "x337 yp+43 w280 h20 0x0100 cDA4F49", "", "")
@@ -691,9 +660,50 @@ CreateTradeSettingsUI()
Gui, Add, Link, x337 yp+43 w280 cBlue BackgroundTrans, Options Wiki-Page
+ ; Hotkeys
+
+ GuiAddGroupBox("[TradeMacro] Hotkeys", "x647 y35 w310 h265")
+
+ GuiAddCheckbox("Price Check:", "x657 yp+26 w165 h20 0x0100", TradeOpts.PriceCheckEnabled, "PriceCheckEnabled", "PriceCheckEnabledH")
+ AddToolTip(PriceCheckEnabledH, "Check item prices.")
+ GuiAddHotkey(TradeOpts.PriceCheckHotKey, "x+1 yp-2 w124 h20", "PriceCheckHotKey", "PriceCheckHotKeyH")
+ AddToolTip(PriceCheckHotKeyH, "Press key/key combination.`nDefault: ctrl + d")
+
+ GuiAddCheckbox("Advanced Price Check:", "x657 yp+32 w165 h20 0x010", TradeOpts.AdvancedPriceCheckEnabled, "AdvancedPriceCheckEnabled", "AdvancedPriceCheckEnabledH")
+ AddToolTip(AdvancedPriceCheckEnabledH, "Select mods to include in your search`nbefore checking prices.")
+ GuiAddHotkey(TradeOpts.AdvancedPriceCheckHotKey, "x+1 yp-2 w124 h20", "AdvancedPriceCheckHotKey", "AdvancedPriceCheckHotKeyH")
+ AddToolTip(AdvancedPriceCheckHotKeyH, "Press key/key combination.`nDefault: ctrl + alt + d")
+
+ GuiAddCheckbox("Custom Search:", "x657 yp+32 w165 h20 0x0100", TradeOpts.CustomInputSearchEnabled, "CustomInputSearchEnabled", "CustomInputSearchEnabledH")
+ AddToolTip(CustomInputSearchEnabledH, "Custom text input search.")
+ GuiAddHotkey(TradeOpts.CustomInputSearchHotKey, "x+1 yp-2 w124 h20", "CustomInputSearchHotKey", "CustomInputSearchHotKeyH")
+ AddToolTip(CustomInputSearchHotKeyH, "Press key/key combination.`nDefault: ctrl + i")
+
+ GuiAddCheckbox("Search (Browser):", "x657 yp+32 w165 h20 0x0100", TradeOpts.OpenSearchOnPoeTradeEnabled, "OpenSearchOnPoeTradeEnabled", "OpenSearchOnPoeTradeEnabledH")
+ AddToolTip(OpenSearchOnPoeTradeEnabledH, "Open your search on poe.trade instead of showing`na tooltip with results.")
+ GuiAddHotkey(TradeOpts.OpenSearchOnPoeTradeHotKey, "x+1 yp-2 w124 h20", "OpenSearchOnPoeTradeHotKey", "OpenSearchOnPoeTradeHotKeyH")
+ AddToolTip(OpenSearchOnPoeTradeHotKeyH, "Press key/key combination.`nDefault: ctrl + q")
+
+ GuiAddCheckbox("Open Item (Wiki):", "x657 yp+32 w165 h20 0x0100", TradeOpts.OpenWikiEnabled, "OpenWikiEnabled", "OpenWikiEnabledH")
+ AddToolTip(OpenWikiEnabledH, "Open your items page on the PoE-Wiki.")
+ GuiAddHotkey(TradeOpts.OpenWikiHotKey, "x+1 yp-2 w124 h20", "OpenWikiHotKey", "OpenWikiHotKeyH")
+ AddToolTip(OpenWikiHotKeyH, "Press key/key combination.`nDefault: ctrl + w")
+
+ GuiAddCheckbox("Show Item Age:", "x657 yp+32 w165 h20 0x010", TradeOpts.ShowItemAgeEnabled, "ShowItemAgeEnabled", "ShowItemAgeEnabledH")
+ AddToolTip(ShowItemAgeEnabledH, "Checks your item's age.")
+ GuiAddHotkey(TradeOpts.ShowItemAgeHotkey, "x+1 yp-2 w124 h20", "ShowItemAgeHotkey", "ShowItemAgeHotkeyH")
+ AddToolTip(ShowItemAgeHotkeyH, "Press key/key combination.`nDefault: ctrl + e")
+
+ GuiAddCheckbox("Change League:", "x657 yp+32 w165 h20 0x0100", TradeOpts.ChangeLeagueEnabled, "ChangeLeagueEnabled", "ChangeLeagueEnabledH")
+ AddToolTip(ChangeLeagueEnabledH, "Checks your item's age.")
+ GuiAddHotkey(TradeOpts.ChangeLeagueHotkey, "x+1 yp-2 w124 h20", "ChangeLeagueHotkey", "ChangeLeagueHotkeyH")
+ AddToolTip(ChangeLeagueHotkeyH, "Press key/key combination.`nDefault: ctrl + l")
+
+ Gui, Add, Link, x657 yp+35 w210 h20 cBlue BackgroundTrans, Hotkey Options
+
; Cookies
- GuiAddGroupBox("[TradeMacro] Manual cookie selection", "x647 y35 w310 h160")
+ GuiAddGroupBox("[TradeMacro] Manual cookie selection", "x647 yp+40 w310 h160")
GuiAddCheckbox("Overwrite automatic cookie retrieval.", "x657 yp+20 w250 h30", TradeOpts.UseManualCookies, "UseManualCookies", "UseManualCookiesH")
AddToolTip(UseManualCookiesH, "Use your own cookies instead of automatically retrieving`nthem from Internet Explorer.")
@@ -714,7 +724,7 @@ CreateTradeSettingsUI()
; Buttons
- GuiAddText("Mouse over settings to see a detailed description.", "x657 y214 w300 h30")
+ GuiAddText("Mouse over settings to see a detailed description.", "x657 yp+40 w300 h30")
GuiAddCheckbox("Debug Output", "x657 yp+13 w100 h25", TradeOpts.Debug, "Debug", "DebugH")
AddToolTip(DebugH, "Don't use this unless you're developing!")
diff --git a/resources/default_UserFiles/config_trade.ini b/resources/default_UserFiles/config_trade.ini
index b701c580..48a15083 100644
--- a/resources/default_UserFiles/config_trade.ini
+++ b/resources/default_UserFiles/config_trade.ini
@@ -18,6 +18,7 @@ UpdateSkipSelection=0
UpdateSkipBackup=0
KeyToSCState=0
; 1 = scan codes, 0 = virtual key codes
+WikiAlternative=0
[Debug]
Debug=0
@@ -91,6 +92,10 @@ AdvancedSearchCheckES=0
AdvancedSearchCheckILVL=0
AdvancedSearchCheckBase=0
RemoveMultipleListingsFromSameAccount=1
+UsePredictedItemPricing=1
+; Uses poeprices.info pricing (via machine-learning).
+UsePredictedItemPricingGui=1
+; Shows a feedback Gui instead of the default tooltip.
[Cache]
Expire=3