#tooldev-general
1 messages · Page 102 of 1
It also doesn't work with master of metals Phys per impale if you don't override the stacks
there is no place in pob to see the total aura effect as well as the breakdown, is there?
you can see how much each aura is giving you, and calculate the aura effect from that
@frigid sierra It's something that has been requested before. Would be a good first contribution if you're interested I think
yeah I was thinking of giving a stab at it
is there a way to better navigate the console other than endless scrolling?
that was easier than I thought
look good to me, I really hope there's a quicker way to scroll it cause it takes ages atm to get to the top of the console
the lack of a proper debugger plus no typing makes navigating the code a pain
it's total guesswork what arguments to a function are
what properties they have etc
that's a really strange thing to not have displayed anywhere lol
curse effect isn't displayed anywhere either but I bet it's just as easy to display
yeah I was gonna add curse effect breakdown as well
I think the label on them in the calcs tab should be "Aura Effect Mod" and "Curse Effect Mod", that's consistent with other mods in that box
and also move it in the list so it doesn't split up the area of effect things. I'd put it below duration things, above the aoe things
that makes sense
It's possible to annotate the code, similar to Python 3.6+, using EmmyLua: https://emmylua.github.io/annotation.html
Would be great if we could get some typing into PoB
I am using IntelliJ with EmmyLua actually
is the tukohama pantheon's regen when stationary working? I don't see my regen change when selecting that pantheon
ticking the "Are you always stationary" box doesn't seem to do anything either
It isn't working at the moment as there is no parsing for the increased regen based on how long you're stationary for
you would have to have another box for how long you have been stationary for that pantheon
as a simple implementation, if "Are you always stationary" is checked then you should get the full 2%
Anyone know offhand how.many single spaces are in a quad tab? Is it 576?
@frigid sierra if you're working on anything else for a PoB update, let me know as I'm going to push a new update soonish
I'm working on a bunch of things, mainly on the breakdown of ES recovery but that can be for later
@lapis stratus yes, 4*144
@lapis stratus normal tab is 12x12 = 144, quad is 24x24 = 576, character inventory is 5x12 = 60
Bleh, database is crapping itself after like 200G compressed river.
Any recommendations on graph or document databases that are not meh?
I guess I should go and filter out strings up-front after all.
Yes, especially flavour text
Anyone know a library/implementation of generating wiki and trade site links from generic items?
I'm feeling extra lazy 
your NOT IN () is not effective way to select
either use left join and then filter by where xxx is null or use where not exists statement
@grave wren is the pob bot public, is it something i can invite and use on my server?
It's public but you'd have to selfhost for now
ah thanks
@lavish gust pobapi is now officially MIT licensed btw
I am using a nano instance at Google cloud service to host it and it's very stable
Only for small servers
You'd have to ask multiplicity for info about the node for this massive server
thanks for the suggestion ill look into it? is the hosting free or cost on my end?
The micro instances cost me nothing if you're fine with America based nodes
I've also selfhosted mine on a raspberry pi at home which also worked out
im american so it works for me
https://github.com/poediscord/poediscordbot/wiki/Installation here's quick install notes
@zinc root I went with the first SQL statement that compiled based on historical SQLite use and DB course memories 15 years old ^^
Getting great reactions from actual professionals at work.
Man the amount of SQL I need to just make my odata sources work is pretty much dumb
But it's good exercise
thread 'tokio-runtime-worker' panicked at 'called `Option::unwrap()` on a `None` value', src/libcore/option.rs:378:21
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
Who peed in the river?
NOT EXISTS was quite a bit nicer, using those new-fangled indices and whatnot.
50% of a CPU with 20-some megabyte/sec compressed throughput, kind of exhausted this dead-end now 🙂
@compact isle Any word on the websockets going down sporadically on the official trade website live searches? Seems to be happening around 7:00 am - 12:00 pm PST
we're continuing to investigate
websockets are being consumed by the hungry loop
Hungry loop is a trigger phrase for me after trying to understand the extended info for it
so we can summon Novynn at will here?
judiciously
would be nice if he can look into how trying to do "exclusive or" with the group option on trade site is not working
I made a bug report a while ago there
yeah specifying a number like that makes stuff like quality always show up
@frigid sierra ah sorry for missing that one. You should use the forum tags for website things so that I can find them easier
should be an easy fix
yayyyyy thanks!
what do you mean by "use the forum tags for website things"? Is there a tag system that I should use when reporting a bug on the forum?
yeah if you edit your thread you'll see a "Tags" section under "Notify Me"
oh I see, never noticed that, thanks!
I would suggest making that a required form element so that people don't miss it
the list isn't extensive which is why it isn't required
perhaps add an "Other" option to the list then?
Hello, does anyone here by chance know what is the appropriate BaseType tag to use for a filter block that will recognize the Imprints from beastcrafting?
I know its class is stackable currency from the wiki but not sure what to tag it with for base type
Ah I mean the imprints of items, not beast orbs themselves
Although haven't considered that so thank you
ayo anyone know a tmpmky script or chrome extension to add wiki button to the offical trade site?
don't want to make one
here we go again finding selectors smh ;9
$('.itemName').find('.lc').first().text() will give you the item name
something like that
my jquery is rusty
was just using the spaced children
thanks tho I forgot about iteration selectors
any idea on what todo in terms of execution @frigid sierra I think I have the selector but the query from when you load the page till the search is generated is a pain
I think I might just rip some other tampermonkey script actually
you can use MutationObserver, so you can react when the DOM changes
and insert your link wherever you like
Hey guys! I'm using this ↓ guide to POST a request and have a response with result as a guide says...
https://www.reddit.com/r/pathofexiledev/comments/7aiil7/how_to_make_your_own_queries_against_the_official/
But I have only html text as a response... Is this still working, or I'm doing something wrong?.. I'm not a programmer, and using python for this googling for someone else code...
I'm using this code to send request: x = requests.post(url, querry)
(the request should be right as I get HTML as a respond...)
I tried to search for other thing how to do that, was using GET instead of post, and looked mb there is some getResultInsteadOfHTMLmod=True ... but nothing I've tried so far working...
Im very new to JS should I target this with a mutation observer and then fire the jquery selector for item name when the mutation calls back?
I can do the jquery selectors Im just struggling with the mutation observer
I have all the config options set to true, and am logging on any attribute change in the mutation list
@pearl reef it's hard to tell what you did wrong without seeing the code. What HTML response did you get back?
@frigid sierra just a webpage...
This is a code:
import requests
url = 'https://www.pathofexile.com/api/trade/search/Metamorph'
qr = '{"query":{"status":{"option":"online"},"stats":[{"type":"and","filters":[{"id":"explicit.stat_2312747856","disabled":false}]}]}'
x = requests.post(url, qr)
print(x.text)
did you specify the content type as json?
How?..
well it's a HTTP header, set it however you can with your python code
'content-type' : 'application/json'
r = requests.post(url, json=qr)
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
r = requests.post(url, data=qr, headers=headers)
This should do it then
@halcyon whale I'm not too familiar with the trade site DOM, but if that element changes when the site loads trade data then you can use MutationObserver with that
@golden bane nope... still have HTML((
if I set subtree and children to true in mutation observer it should tigger when the spans nested are created
they are under tree and don't exist before the trade query
I have tried that syntax
you attach it after page/trade div gets populated
im trying to attach it see when the trade get populated using subtreee
I'm sure there's some event, or you poll until there's some rows and then attach the observer
it doesn't always work if the root gets detached again from the dom
I saw that earlier
seem like that div gets updated when there's new item
and new rows get added
so you can observe that node
// select the target node for mutation observation
var target = resultSetDiv;
// create an observer instance
var observer = new MutationObserver(function(mutations) { // mutations: an array of MutationRecord objects
mutations.forEach(function(mutation) {
var addedList = mutation.addedNodes;
for (var i = 0; i < addedList.length; ++i) {
var item = addedList[i]; // Calling myNodeList.item(i) isn't necessary in JavaScript
walk(item);
}
});
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true, subtree: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
something like that
has been a while
@pearl reef Your query is the problem. I'm getting back a 400
I don't...
can I just for each mutation rather then bothering with navigation?
const targetNode = document.getElementsByClassName('resultset');
const config = { attributes: true, childList: true, subtree: true };
function callback(mutations) {
mutations.forEach((mutation) => {
console.log(mutation);
});
}
const observer = new MutationObserver(callback);
observer.observe(targetNode, config);
getElementsByClassName returns a list of elements, so you'll need to get one from that first
@golden bane
import requests
url = 'https://www.pathofexile.com/api/trade/search/Metamorph'
qr = '{"query":{"status":{"option":"online"},"stats":[{"type":"and","filters":[{"id":"explicit.stat_2312747856","disabled":false}]}]}'
headers = {'Content-type': 'application/json', 'Accept': 'text/plain'}
x = requests.post(url, json = qr, headers=headers)
print(x.text)
Here is current code, and it's getting HTML document...
@pearl reef print(x.status_code) and you'll see for yourself
yeah that works, although I don't know why that is a class and not an id, so you may want to check if there are any other elements on that page with the same class
#trade > div.results.compact > div.resultset I was trying tree earier I wonder why subtree didn't work
YES EYS EYS
x = requests.post(url2+qr)
https://www.pathofexile.com/api/trade/search/Metamorph?source={"query":{"status":{"option":"online"},"stats":[{"type":"and","filters":[{"id":"explicit.stat_1016185292","disabled":false}]}]},"sort":{"price":"asc"}}
this is working!!
So it combine json to URL and don't send anything...
For some reason it's not working like that:
x = requests.post(url2, qr)
x = requests.post(url2, json=qr)
Weird
BTW, you should always do
try:
x.raise_for_status()
# ... handle arising exceptions
so you detect unsuccessful requests early
HMU if you have dev'd a poe offical trade script/extension, or if you know anything about offical trade site DOM
Ugh
Response started: 2911ms
ID gotten: 2912ms
All bytes: 12915ms
@polar island I'm curious, what part of the world do you have your collector, if you're comfortable sharing?
I've considered spinning up some AWS/GCP trials to see if it behaves better elsewhere in the world, for some reason.
Wouldn't you want one close to Texas or is the API somewhere else?
Interesting question, if not only the login server is there
Managed to build my thing in AWS us-east-2c (Ohio), still getting 1900-2500ms
In Sydney - around 2-3s too.
At least I have that off my mind now, I can build the thing wherever I want - it's all meh 😄
12915 for full fetch? daym
try get a server in the same data center as their api server
12915 was an outlier, it's usually around a second from first byte.
@simple ravine I did try running on two additional contients, no real difference.
ah ok
Next up is to filter down the river to the things I care about when retrieving it, and come up with a reasonable data model for the events.
The frontend I envision should be notified of when the tool discovers a new stash and when items are added/removed/repriced.
I guess I should keep track of the current state of the thing and keep a log of events to replay to the client when needed.
Just like out in the real world, you figure out the requirements after implementing.
time to get some disk space
A few days in...
Schema | Name | Type | Owner | Size | Description
--------+-------+-------+-------+--------+-------------
public | cache | table | river | 184 GB |
That's compressed, btw.
caught up to the end?
Maybe.
My code has crashed twice and I suspect that it's on whatever mythical kind of payload there is at the end of the rainbow.
Takes a few hours to proc when I start from the latest ID listed on poe.ninja
proc?
Happen, sorry.
no, I got the meaning of 'proc' - i'm a nerd too :D
I just didn't understand what u meant
I've got a few places where I hard assume that an optional value is set, and it seems like one of those assumptions are not valid on some response.
i made a console app that "dinged" when it was an item with note specified in the config
like "zenseiwashere"
Yeah, considered dropping probes into the stash in-game 🙂
another way to know is if next_change_id == requested_change_id and stashes = empty
Yeah, I test whether the next ID is the same and chill.
I just can't figure out what it is that's crashing, the wonders of async code is that none of the stack is mine 😄
async/.await is super-nice in Rust, I just need to figure out how to trace it properly
what I've been thinking about doing is separating the requests on the shards
like
...public-stash-tabs?id=0-999999999-999999999-999999999-999999999
...public-stash-tabs?id=999999999-0-999999999-999999999-999999999
...public-stash-tabs?id=999999999-999999999-0-999999999-999999999
etc
I've assumed that if I leave the shard IDs the same that I'll get repeats.
Not sure what it'd do if you asked for 0 or huge numbers.
"next_change_id": "2947-999999999-999999999-999999999-999999999"
etc
so you can process each shard separately
and then u follow it as u'd normally do
"next_change_id": "5998-999999999-999999999-999999999-999999999"
etc
fewer stashes per response
all u need is 5 public IPs 🙂 sorry novynn
There might be a bit of a sanity check there, all the other shard IDs advance by the same amount when feeding in all zeroes as one zero and rest huge.
Not that I would use the API unethically anyway.
Still need to hack up a working rate limiter. Haven't needed one as it's self-throttling in that requests are just creeping in.
we should have a temporary fix to increase performance (specifically for the public stash API) coming in the next patch
the real fix requires changing a bit of game code but we can pretend on the website's side for now
That's really nice to hear.
Yes, it's built on electron and it's great for this project
Developer time >> program size
Also who cares about 50 mb
I don't believe exilence was targeted towards mobile devices?
What's your point anyways
Don't optimize for things you don't need to
Rule number one of every top notch engineer I've ever met.
Exilence shipped while you would be still chipping off bits and bytes off the executable with your approach
I'm all for demonstration
Yet again, who cares? If you shrunk the thing down to 2 mb it would make no difference.
Let's reiterate: Developer time >> application size/memory usage/speed
yeah it's insanely wasteful, and I love bashing electron as much as the next guy, but everyone has 16-32GB RAM machines nowaways, so who cares. Unused RAM is wasted RAM
on a side note I tried installing exilence next and it failed to start, then I tried to uninstall it and that failed too
i mean dev time isnt always more important than app size/memory usage/speed but in the case of 3rd party tools for a video game it is
though theres probably some things which could have been done to cut back, that dont take a large amount of time
but i have no idea about the specifics in this case
don't know if you're trolling or not but...seriously? If you can't even see how much time electron saves when writing and maintaining a cross-platform app then I don't know what to tell you.
what is even your preferred cross-platform solution? Qt?
wasn't expecting that, but ok 😆
In other news - looks like the websockets didnt go down today!
\o/
@split fjord why don't you show us how to make a similar app in C++ with Qt and all that jazz then? Should we say... by sunday?
So you come to rant but not provide any tools yourself
I don't see the relevance to a freely supplied third party thing a Dev does in his free time
Random question - Does anyone know if I can create a link or interactive element in a discord embed/message which copies text to clipboard?
@split fjord I'm contributing to a new C++ GUI library because I wasn't satisfied with other libraries bloatness, features (or lack thereof) or their custom build/code-gen requirements. The unstripped shared lib is <20 MB (majority being ~9 MB for cairo and ~9 MB pixman) and the executable examples take <10 MB RAM. Could probably be made smaller, but I value the support for 2D canvas, themes, custom fonts, custom widgets and being able to arbitrarily nest any widgets. No idea about dev time/cost (never really worked in any front end) but It's definitely easy to integrate and use (has a declarative functional interface). Planning to use it in my further projects.
@split fjord One of the close candidates was wxWidgets, but unfortunately due to its design it has some limitations: everything uses native controls (so no way for non-white background) and the API is that you can nest widgets within others ... except in many places in which you can not. I know Qt is battle-tested and mature but ... for a hobby project I definitely do not want code-gen/custom-build-tool and do not want to write code in a library which breaks modern C++ idioms. Checked some other projects (nana, some wxWidgets wrappers, Copper Spice) but they were mostly wrappers around other libraries ... so I browsed the reddit and eventually found that someone from boost started making a new one based on 2D vector graphics and template/functional interface.
Got any thoughts/experience about specifying the GUI in any way (immediate-mode, XML/HTML, code-gen + designer, imperative, declarative)?
The bothersome thing about UI is that it’s treacherously complex and it’s easy to get something shiny out but something actually usable is many person-years of work.
As for modern C++ or what we call it nowadays, I thought that Qt got better there?
I'm not really into graphics and I draw rather poorly so I focus on the functional part instead.
Qt v4 => v5 had some refactor, I heard that in v5 you can now skip code-gen but:
- you can remove custom build tools but you are then doing the "manual code-gen" yourself
- the library still is anti-convention when it comes to naming, resource management, standard library usage etc
I don’t mind moc/.ui that much, and QML is supposedly somewhat decent by now I hear.
Before I stopped using C++ Qt was one of the least horrible ways to get a working GUIs, despite things you might get hung up on.
As for naming - everything sucks in the wild C++ west 😄
well, in the library I contribute now it uses a functional+template interface, you write the GUI in code and it looks like this:
margin({ 10, 10, 20, 10 },
vtile(
top_margin(35,
htile(
align_center(toggle_icon_button(icons::power, 1.2, indicator_color)),
align_center(icon_button(icons::magnifying_glass, 1.2)),
align_center(icon_button(icons::left_circled, 1.2)),
align_center(toggle_icon_button(icons::left, icons::right, 1.2))
)
)
)
)
the are practically no constrains on nesting, you can put anything into anything
What are those units, pixels or something DPI aware? How do you get a consistent look-and-feel? Does it do IMEs? 😛
there are lower-level widgets (margins, align, size limiters/fixers) and some pre-made ones from these (buttons, some dialogs, sliders, bars ...)
yes, its DPI aware
Suggestions on good libraries welcome. My current hope for complex UI is FFI into C# with XAML ^^
Look and feel: every widget draw function uses the theme object. The theme contains some colors and floats like corner_radius so by modifyign the theme you can change background, color style and also "design" (want PoB-style? you can set corners/angles to 0 and background to black => everything fully square and having colors like in PoB)
so the theme object instance is basically like a CSS - it contains colors and some drawing variables
there is no GUI designer but I really like the fact that no extra tools are required to use the library
@worthy cape if you got any ideas for complex widgets I would like to hear them, the library I contribute offers a lot of very granular elements but most of average user needs are on a higher level so we compose some "premade widgets" from others (button => frame + label, basic progress bar => 2x solid color widget, slider => mouse tracker + thumb + scale background)
I find it a bit quaint by the way that In the year of our Lord 2020 there’s still people who discover the wonders of Electron bloat for the first time. 
@lavish gust the litmus test of UI libraries tend to be whether the text fields and textboxes behave as a platform user would expect.
Selection, cursor movement, scrolling, copying, all the keys and motions that can be hard to match.
so far we have "reasonable defaults", that is ctrl+C/V/X/Z (command + C/V/X/Z on mac), enter = left click etc
I almost flipped a table filling out a form in Adobe Reader DC last night, they had Ctrl-Backspace erase a word, but did it forward instead of backward. They also hecked up double click to select by word, only selecting the focused word but not allowing drags to extend.
isn't double click = select word an expected behavior?
It is, but you should be able to hold the second click to select additional words when dragging.
hmm, I have never actually used this feature
Tiny detail maybe, but when text fields are so ingrained in the user, tiny diversions like that of features the dev may never even know about are bad.
I repeatedly erased a lot of my text thinking that ctrl-backspace didn’t work at all as i didn’t observe the text in front of the cursor, as the intent was to erase something behind it 😄
If you ever target Linux, I look forward to you discovering all the cursor movement keys there (C-a/e, Alt-f/b, and more) and of course that selection often copies and middle-mouse pastes ^^
VSCode loves stealing most of those in the integrated terminal.
I’ve got to go, fun discussion.
@worthy cape I have just checked, the double click+hold selects words but dragging further is selecting per letter instead of per word. ctrl+backspace is not present - not sure why would you want this since both delete and backspace keys offer 2 ways of erasing characters ... or I misunderstood you and by ctrl+backspace/delete you mean erasing words?
@worthy cape regarding Linux, it is also supported so if you have a good resource explaining expected behavior of key combos on Linux I would definitely check it and implement such shortcuts
Ctrl-backspace erases words, indeed. In Linux-land you have Ctrl-w for that and Ctrl-y to erase to the start.
As for double-drag - see, not even I know how it behaves, just innately that I use it.
Ctrl-w is a super fun one as it’s more recently a shortcut to close tabs. I maintained a patch set for HexChat forever as whenever I innately tried to erase a word I closed a whole channel 😄
well I use ctrl+W to close browser tabs, and files in various editors
never thought of expecting this shortcut to erase text
It’s as ancient as time in Unix terminals and editors.
Got any recommendation for scrollbars? Dragging the bar and using the scroll is obvious, but in case of clicking outside the bar area - almost every program has a different behavior
Speaking of fun things - localization. Text layout of say Arabic or Hebrew is an old fun one, but some UIs (Windows IIRC) also mirror the window layout to make reading sense.
The order of ok/cancel is a fun difference between Windows and Mac too, and I can never remember the right one
Outside the thumb you mean?
yes, clicking on the scrollbar area but outside the thumb
Yeah, holding and clicking between the arrows and thumb is a great place for differing behavior.
what should it do? Nothing? Immediately scroll to this position?
You also have different behaviors for thumb capture when dragging and straying outside of the scroll bar entirely.
There’s often a gutter of a small distance where it keeps going correct, and going farther out cancels the drag.
I did a graphical waveform seekbar for a media player as one of my bigger projects, had to emulate a lot of behavior and capture.
yeah, noticed it too; not sure if this is good to have such behavior
The gutter is super useful as dragging straight is really hard or impossible. The cancelling is nice to have but can be confusing sometimes.
Regarding right-to-left text: this is a library so we leave this for the user. Text/input boxes can be rendered right-to-left if the library user wishes so.
You missed one option in clicking in the scroll track - “jump a bit in that direction” 😄
Kind of like a PageUp of sorts.
most of these aren't implemented (yet) AFAIK
It's good that you leave text input to the user, bi-directional text is an unfathomably deep rabbit hole: https://lord.io/blog/2019/text-editing-hates-you-too/
regarding cancel/ok dialogs: I think the OK should be on the right and cancel on the left, as usually people move from left to right so its natural that "proceed" button is on the right side
They’re the other way around on macOS to spite you, I believe.
Left-to-right is also a culture thing ^^
Nothing wrong with scoping your project to only do some things indeed, but it helps to know what you don’t do and be upfront about it for your users.
the premade dialogs which consist of 2 buttons, optional left-side icon and multi-line text are left-to-right
I don't think someone would ever want a text box selection to swap between rtl/ltr depending on the alphabet
right now it simply moves the selection by code points
Oh gods, your mention of CSS above made me think of libRocket which I used for game UI over a decade ago. They had HTML-but-not-really-HTML and CSS-but-not-really-CSS to lay out the UI.
ohh, I hate such things
Impossible to figure out how the formats actually worked, and no HTML/CSS references were useful, as they were different enough that most things didn't take.
its like "we support HTML but actually not, we rolled our own pseudo-HTML implementation which is not and will not be standard-compliant"
It's like any editor that claims to have a Vim mode. They may look like it on the surface, but they are often more pain than it's worth.
Motions go slightly wrong, some commands not implemented, regex engine differs, etc.
regexes ... thats a funny thing ... especially with unicode
I have a tool project which extends item filters with extra syntax but it uses a real LL(infinity) parser, no regexes. Much less error-prone, especially with a library which helps writing LL parser grammars. I definitely prefer to write a parser grammar or some imperative code than to fiddle with complex regexes
Good read what you linked, esp stuff like "Bad #3 is “correct” according to the Unicode spec in that the two emoji merge into one. But it’s pretty confusing for users, and bytewise, our caret has to move in order to not be stuck halfway inside a single emoji."
In my opinion, the absolute best text editors thing is case convertion / case (in)sensitive search. The whole idea, when applied to non-latin alphabets is broken by design. Many languages have more than 2 case states, some have 2 but there are condtions like first/last letters being different in same case, some languages casing uses multiple letters (german SS). It is virtually impossible to correctly support everyone's intention and what's worse: the search in multiple browsers does not have the most trivial implementation that simply byte-compares searched pattern - they try to be case insensitive with non-obvious rules; whenever you get non-latin text it is just broken
Text is hard - let's go shopping!
Had no idea of the complexities and all the little edge cases of text editing
Regarding German, it's funny because as of 2017 there is a difference between German Standard German and (Austrian Standard German and Swiss Standard German)
@carmine merlin there is just 1 rule: case convertion/case insensivity in non-latin alphabet? don't
In German Standard German, the SS as substitute for ß in capitalisation got replaced by ẞ, but not in the other Standard Germans
some non-latin alphabets have complex enough rules that you would need a sort of neural network to correctly change casing and substitute code points according to language's grammar rules
I only know English for now, so i think I'm safe
and even some latin-derived languages like german have the SS problem which breaks some search implementations because they don't expect ẞ (or any otehr letter) to be replacable by 2-letter string
But the point of ẞ is that it would only be replaced by ß
I thought the Germans were meant to be efficient 😄
You're converting case here, not from one Standard German to another
It's a 1:1 mapping now, so I guess the "German efficiency" still checks out
ok, try with greek then
some languages (e.g. Greek) have special final forms of some lower case letters, so case conversion routines must be aware of their position to perform the conversion correctly.
But in reality all 3 Standard Germans still have this problem, as almost nobody knows of ẞ (besides newspapers, etc - and even then some decide to just follow different rules)
misconceptions/mental shortcuts are common ... many programmers are not aware that "int_min - 1" is not underflow, it is still overflow. Underflow is a term only relevant in floating-point arithmetic
And regarding text: in many languages the char type is not suitable enough to hold "rendered characters". If char is 1 byte (C, C++), it is to hold the byte representation only. If it is more (2 in Java and C#) it is still insufficient to hold non-BMP characters and still using str[index] may cut invalid strings. Python didn't even bother and has no character type at all.
And then we have universal networking unspoken rule that everything is UTF-8 but Windows internally uses UTF-16
And sometimes you can even get Windows-1252 encoding
fortunately only in some editors, the OS unicode API is at least UTF-16 consistent but heard there were many bugs because:
- many programmers are/were unaware that UTF-16 has its own 2 variants (little/big endian) so there are 4 in total (8, 16le, 16be, 32)
- many incorrectly assume that UTF-16 code points always fit in 2 bytes (non-BMP characters will be 2x UTF-16 values)
I need some advise on the topic of wording.
Currently I have 3 filter branches
"Economy-Update-Softcore", "Economy-Updated-Hardcore" and "Stable"
the naming makes people assume that Stable is the safest one, which is not really true, it's just not receiving economy updates, which makes people shy away from the other 2
I think "Stable" nowadays is mostly good for SSF or really special cases
do you guys have an idea how to rename the branches?
Name it "Legacy"
that gives off the wrong idea too
it has nothing to do with legacy leagues, items or being outdated
"Stable-No-Economy-Updates"?
hmm
maybe, but that's not quite the case either. Stable does get economy updates, but only when it gets "normal" updates.
so just less frequent updates?
"Stable-No-Automatic-Updates"?
something like "Static-Economy"?
static/dynamic would be a good pair to use
Yeah
does anyone of you know of any tool being able to autogenerate inheritance diagrams from code?
Depends on the language
C++, tried doxygen already and works really well but if there are multiple hierarchies I get multiple images (no way to get 1 image with all trees)
Enough good so far but always looking for alternatives, maybe there is something better
Hi @fickle yew, the price of stacked decks is weird on poe.ninja
Looking at the json, the "sell" value is based on a single data point offering 135 c for 1 stacked deck
which is then averaged with the proper"buy" value of 4 c, resulting in a chaosEquivalent value of 69.5... reporting in case this is a bug
My suggestion would have been PlantUML but it seems like doxygen already builds upon than
Yeah, wikipedia says so
Well, I can stick with Doxygen. It is very good when it comes to understanding the code. The library I'm contributing into uses C++ "heavily" and I was worried how some non-IDE tools will deal with things like template <typename T> class fixed_widget : public T but as it turned out doxygen has no problems reading complex C++, even if templates inherit from T or have recursive inheritance. It is quite an undertaking to parse and draw such code.
I honestly should make one
just gonna link it to the stable branch
and tell people "great base, but you need to customize it to unlock the full SSFHC experience"
unlock? are we customize 2 win now? thats it, i'am out 🚪
Items on TESSFHC have very subjective value so I don't think it is possible to create a filter that will satisfy everyone
On a serious note, there's a higher focus on bases, crafting currency, things that may be worthless in a trade league but very usable in SSFHCBTW.
Economy: none 😛
Tbh your strict filter with some adapting is fine as is for it imo
@broken cloud yeah it's probably worth just looking at the buy columns when the counts are so skewed
@compact isle Is it possible to add a pseudo mod for searching timeless jewel with a particular seed? Having to enter 3 mods for each and entering the same number 6 times is cumbersome
6 times?
e.g. if you search glorious vanity you have to enter 3 mods for Xibaqua/Doryani/Zerphi, then for each you have to enter the seed into both min and max, so 6 times total
@frigid sierra naw man... weighted sum search my dude
then you only have to enter the value twice 😛
how?
@frigid sierra https://www.pathofexile.com/trade/search/Metamorph/aLzda9BTe
oh right
still need to enter the 3 mods though, and with this you can't search multiple seeds at once
@compact isle Would it be possible to include the item base separately for magic items in the stash river? So that
{
typeLine: "Rotund Leather Belt of the Furnace"
}
would become
{
typeLine: "Rotund Leather Belt of the Furnace",
baseType: "Leather Belt"
}
This might've been asked before though I couldn't find it
the website can't do that unfortunately
Ah that is unfortunate
will try and bump it with gameplay people again but my hands are tied
i have a small python function which does it if you want @deft jolt
Hm may I see it?
That would be the best outcome, yeah
Any reason why barrage support is also called barrage in the ggpk and doesn't have an individual name?
Only gems afaik that uses the same name tag
🤷♂️ there are a lot of odd naming conventions in the ggpk
messes with gem imports for PoB as it doesn't differentiate between the two
Please change the name to barrage support GGG
a lot of items use internal names and likely won't be changed because of GGG's hidden, internal data etc
- Frost Fury = Winter Orb
- Hand Cast Anticipation = Unleash Support
- Eclipse = Tempest League
Anyone here with the knowledge of SLL? Successfully downloading data from poe.ninja and poe.watch, but interested if I could easily do any validation on their SSL certificates (right now just accepting data from whatever claims to be "poe.ninja")
you can use curl to fetch data and use SSL_VERIFYPEER, SSL_VERIFYHOST
I think python does something similar to https connections
usually people ask how to ignore invalid or self signed ssl certificates, not the other way around 😄
I don't use curl or its library
but ok, if you say people try to ignore self-signed certs etc then I'm fine with not chekcing them
do you get any error when downloading from poe.ninja?
nope, it says encrypted, tls 1.3
on curl sometimes you need to specify ssl version, I don't know what language are you using and how are you downloading
I'm using boost beast
basically the standard high-level C++ library for networking, wraps OpenSSL underneath
I had to do this in an if because some SSL providers are non-compliant:
// Technically, we should not ignore this error but unfortunately some services (including poe.ninja's
// Cloudflare backend) shutdowns abruptly as a way to save bandwidth. This very shady optimization is
// seen from the client side as an SSL short read which could be a symptom of a man-in-the-middle attack
// trying to hijack the TCP connection. In HTTP 1.0, this could be used to exploit some implicit assumptions
// when the connection closes. As of HTTP 1.1, there are no known exploits because 1.1 has no on-close assumptions.
// See https://github.com/boostorg/beast/issues/38 for more details on the problem.
// If you use a different networking library and do not get this error, report this as a security issue anyway.
ec == boost::asio::ssl::error::stream_truncated
According to the specification, I should reject any data from poe.ninja because it can not correctly shutdown the connection after the download has been completed. Rejescting all data is "technically recommended" because this error can be a symptom of TCP/MitM attacks
In reality some providers are just very pragmatic at their performance... which leads them to this very badly looking "optimization"
you mean the "* Connection #0 to host poe.ninja left intact" in the end? isn't it some kind of cloudflare thing?
yeah
you get all the data but when you try to gracefully disconnect the endpoint just disappears and does not even send something like "ok, bye" in SSL protocol
seems like poe.ninja isn't closing the connection after output ends and in curl case curl just disconnects after it gets everything
yes, and wikipedia says this is a symptom of TCP hijacks or man in the middle attacks
the middleman is cloudflare in this case
I wonder if that is the cause of my "river slurp crashes overnight" panic.
@worthy cape AFAIK GGG also uses Cloudflare...
Time to make a debug build and bump up the logging level and see if it explodes some day.
Heh, PoB code exported from poe-profile.info imports into PoB as Frenzy, not Feeding Frenzy support.
Got me very confused.
check also Barrage vs Barrage Support, could be the same bug due to recent gem changes
Direct API import works in standalone client, and the resulting export from standalone works fine.
@worthy cape made a filter compiler/generator tool, using data from poe.ninja or poe.watch. For safety and code sanity I added a lot of error handling to make sure the economy price data is correct and so on. Now GGG remade the Atlas, added 4 new influences and the if (is_shaper && is_elder) broke quite fast after its introduction to the code. When writing item parsing, I could not even imagine an item could have more than 1 influence. 1 league passed and GGG managed to break my assumptions. Now I hesitate to verify quality is >= 0 ... maybe one league they allow negative - could actually be useful for Forbidden Taste
well, I don't verify and don't plan to verify all strings
so anything put into "" after BaseType or Prophecy or Class etc is never checked
That would be a huge pain to verify, maintain and update every league
@lavish gust at least the influences for shaper/elder are also outside of the big array still
The more I drive my asset viewer off the Data dir, the more brittle it gets ^^
A lot of stuff is named or structured differently in internal game files
not all item class names from wiki work the same in filters
@carmine merlin the SkillGems table (the one you seem to be looking at) doesn't have name text or anything so I'd check where that name is coming from
@compact isle would you be at liberty to say how one can figure out which stats are being eaten by the auras in the mods.ggpk?
It seems almost all of the third party resources are making the same mistake the official trade website made with respect to these
what's the communities understanding of the fields in that dat file?
there should be one that links to BuffDefinitions
The most common open source ggpk viewer I am aware of has the spec for Mods.dat here:
https://github.com/OmegaK2/PyPoE/blob/dev/PyPoE/poe/file/specification/data/stable.py#L12150-L12399
(Others can feel free to point to other resources which have more info in them)
There is a link to BuffDefinitions.dat
yep so BuffDefinitionsKey in that points to a row in BuffDefinitions.dat (StatsKeys) and the stats in that can be subtracted from the mods
Thanks for the clarification!
happy to share, definitely wasn't something I knew about either 😅
so in theory the public stash API should be faster now. Please let me know if there is any weird
probably
Ooh, 948ms to headers for the best request thus far 😄
1600ms worst, commonly 1200, indeed better.
@frigid nova et. al.,
I am to understand that this modifier cannot be rolled on an item? Perhaps it exists now for historical reasons and is deprecated? Or are there other ways for this particular modifier to get put on an item? My guess is that this crafting bench mod was replaced by JunMaster2PercentageAllAttributes3)
https://pathofexile.gamepedia.com/Modifier:JunMasterPercentageAllAttributes4
With the new crafts there are two separate ways they get put on an item - they either roll as a veiled mod, or they get put on by the crafting bench. The spawn weights there refer to the chance to roll as a veiled mod. The crafting bench information can be found in a separate dat
oh interesting
There are many legacy veiled mods though - and that is probably one such.
I haven't looked myself yet but I was curious how veiled mods showed up
I was half expecting a veiled mod_domain... but this wasn't the case
My guess is that the modifiers with "Master" in their name have been superseded by the "Master2" equivalents.
I'll have to learn if there are veiled-only mods
There are
Know one off the top of your head? ❤️
Janus Perandus
#% increased Rarity of Items Dropped by Slain Rare or Unique Enemies
Thank you
What do you mean by veiled-only?
I meant, you can only get that mod on an item if you unveil. You cannot craft it on at the bench
The point of veiled mods is that after you unveil it you can craft it, no?
I wasn't certain
I think I've misunderstood your question then
If that's the case then there should be no mods like I want 😦
I will note an oddity that used to exist, there were mods which would spawned veiled on certain item bases, and then were craftable only on other item bases.
which is fine
I don't think this is the case anymore though.
I thought you were looking for mods that are only obtainable though unveiling
yeah just to clarify, there are no veiled mods that are only obtainable through unveiling. they can all be bench crafted
Yeah, that's what I meant to say
Some of them have unexpected names in the crafting bench, e.g. Haku's (+#% to quality of socketed gems) appears in the bench as "Quality of Gems".
Anyone have any idea where the awakening level requirements (e.g. "complete this map at tier # with awakening level #") are stored? The tier is obviously the highest available, but I'm not sure where the awakening level comes from. In particular, it doesn't seem to correspond with any of the values in AtlasNode
if this is not implemented in https://woofle.net/atlastool/ then most likely we can't get the info.
@compact isle is there a way to write you a direct message here or everything needs to go through support@ email?
Highlights tend to work rather well for public laundry.
Last 24 hours of Public Stash API response time (entire request) - thanks @compact isle
Yeah milliseconds
for my requests it seems like 1700-1800 range, still better than 3k-4k
Time to grab the first bit of the response to extract next id went from 1500ms to 500ms
TTFB was more than halved from 2250 to 1050 
@fickle yew How do you report multi-influenced items in the BaseType JSON? So far noticed the field variant is a null or a string but what when the item has 2 influences?
@lavish gust they are not listed yet
got any plan if they would be implemented? Want to write future-proof code
Finally, got a helpful stack trace 
File "src/lib.rs", line 228, in poe_river::fetch_river::{{closure}}
id: id.clone().unwrap(),
I should probably handle things like 503s and not blindly scan the payload for b"\"next_change_id\":\"";
I suspect that my rare crashes coincide with maintenance.
@worthy cape But don't go too far on the other side like I did with error handling. I coded everything so "safely" than now I'm removing checks like if (is_shaper && is_elder) because GGG managed to break multiple expectations in just 1 Atlas update. Never thought items could get more than 1 influence...
River slurper is quite ignorant of the content, just follows the chain of requests, tracks rate limit information and emits raw uncooked payloads for the caller to deal with.
Heh, watching the Other Rhys talk about world generation. Novynn wasn't wrong when he said that my viewer looked a bit like official tooling 😄
All this sounds extremely familiar, having smashed my face against the vagaries of .arm files
@lavish gust Seems like the whole point of adding in tons of validation checks is with the intent of them breaking when GGG changes the feature set. If you're developing for a poe end point you inherently are developing for an api which changes every three months.
yeah, the goal should be to build an abstraction layer with a well defined set of rules your underlying tool can depend on. now assume they wouldn't have told you items can be influenced more than once this league... you would've found that out pretty quick if your checks caught it and threw an error before it reached the tool logic. Otherwise it would have crashed somewhere in your logic where you would've searched a lot for the actual error, or worse corrupted your data in a persistance layer
@frigid nova Right. My project is filter related so .. already thinking how 4.0 update will change the things
I'm more surprised how similar poe.ninja and poe.watch are. They both related downloads per league and the item price + categories mostly map 1:1
I support both sites to download economy data and abstracting which site is used turned out to be simpler than expected. Both sites separate items very similarly, both have concept of low confidence, both use JSON format...
Does anyone happen to have any pre 3.5.0 content.ggpk file on their hdd? I badly need it. I tried some torrents posted above but no seeds unfortunately.
@pseudo ocean I do.
Note that preseed torrents don't have the Data dir, so they're a bit of limited use.
Content-3.3.late.ggpk
Content-3.4.2-ish.ggpk
Content-3.4.3-ish.ggpk
Content-3.4.3f.ggpk
Content-3.4.5b.ggpk
@pseudo ocean What content do you need, and how old?
I've got GGPKs from all the major releases since 3.0, plus 2.2.1d if you want something really old 😛
Didn't know we had so many content.ggpk dealers here
anyone know of a mapping from gem name to art asset URL on the CDN? like:
Inspiration Support -> https://web.poecdn.com/image/Art/2DItems/Gems/Support/ReducedManaCost.png?scale=0
download data from poe.ninja or poe.watch
one of the fields is a link to official CDN image
@frigid nova I keep mine around to be able to see differences in whatever file format I'm working on. If someone has changed an asset or data file, it's way easier to figure the format out if you have a before and after.
For the API rate limits, are they considering only the duration of the request, or also the whole duration of the response.
I mean, am I "safe" if I only rate-limit my requests based on when I sent my last byte, or do I need to consider the responses in-flight?
Heh, got another kind of crash now that I've fixed the original bug in my code.
https://github.com/hyperium/h2/issues/417
@rapid pagoda 2.2.1d would be awesome! In the meantime, I'm fetching Content-3.3.late.ggpk from @worthy cape (ty man!) to see if it has what I'm after.
@pseudo ocean Are you getting any good speeds? Can't quite tell from here.
@pseudo ocean What content are you after in particular? I really don't want to upload the whole thing, my upstream is not great 😐
I'll have mine up on a faster host in 40 min or so, in case my home pipe doesn't agree with you.
@rapid pagoda I need the one from before they started to replace music tracks with these new ones from Janowski. As far as I remember, they changed hideout background music around 3.5.0 (at that point I noticed it), but they might have started to replace some of them earlier. Not sure when Lioneye's Watch and Sarn Encampent got changed. So basically, the older the better.
@worthy cape thanks for the upload, but my internet is shit anyway, so I don't feel much difference 😦
I can dump the 2.2.1d Music directory somewhere in a bit
That would be cool!
267 MB is way easier to upload than 10 GB 🙂
awakening OST should have the old ost tracks from adgio hutchings
also, iirc, 3.0 is where they started using FMOD for music which is a lot more annoying to extract
kind of a shame the tracks were also removed from purchased OSTs, can't really complain about it because you get the newest stuff as well for it
I suspect there were some distribution rights issues involved
But that music was ace
anyways, https://woofle.net/junk/Audio-221d.zip
there was a sampled tracks from a library pretty much used as-is from what I recall
you'll have to actually contact the artist/composer/release group to find out
I'm finding two fun things. 1) My code leaks very slowly; 2) My software stack behaves very strangely when running out of memory.
Upside of cloud instances with 2G of memory, even slow leaks exhaust the machine in like a day.
Nifty... I made it to the end of the river, my shard IDs are a dozen off from poe.ninja's last_change_id
@worthy cape leaks with rust?
@simple ravine A cache/queue is just a bounded leak 😛
In this case, I had channels between the request & id-extraction, fetching of the actual body, and parsing & database persistence.
Each was bounded by something like 100 elements or something, and there was just about enough pressure sometimes for it to heck up, but I'm not quite sure where.
I reduced everything to 4 and it seems to chug along. The wonders of asynchronous software, buffer bloat.
Now I just have to draw the rest of the owl.
a cache/queue is not leakage, it's allocation 😛
Indistinguishable from the outside, if policies are inadequate.
On the subject of leaks, there is actually a Box<T>::leak() function to explicitly lose track of a heap-allocated thing.
i've mad quite a bit of progress with my crafting sim if anyone wants to try to do more poking around to give some more feedback
https://leftn.github.io/
on a side note, does anyone have any idea where to find the new background images for the conqueror influences on items?
Anyone familiar with pob export codes?
I'm trying to build codes that have specific items as an export from a tool I have so they can be viewed in the pob UI.
I'm getting an exception(pob crashes D: with a stacktrace) here
https://github.com/Openarl/PathOfBuilding/blob/master/Modules/CalcDefence-3_0.lua#L563
With an export code that looks like https://pastebin.com/uXGL7DB7
I realize that pob codes are basically snapshots of internal application state but... this feels doable...
Right now I'm parsing a base export code(exported from loading up pob and immediately exporting an empty build) and adding items+slots to it; I'm missing... something...
are you correctly compressing via zlib then b64 encoding after changing the xml file content?
AFAIK I am, pob says the code is valid and I've successfully imported just weapons in the past
https://github.com/poediscord/poediscordbot/blob/master/poediscordbot/cogs/pob/util/pastebin.py#L31 you need to invert the order of operations here
and this is what my bot fetches for your pastebin
Ohhhhh I think I see a potential issue, your bot output is very useful 😄

@fickle yew any chance you'd support chin sol's extra pob logic in future ninja updates <3?
Okay! Looks like the issue was my slot indexing was assigning 0 for the first item... which meant every empty slot had the same item and pob really doesn't seem to appreciate that.
It cleanly imported after offsetting the index by 1, thanks @grave wren !
😿
@kind geyser I had come across a few nameless mods as well
Some I believe are no longer obtainable... but some are
Hmm, where are the ambient sounds stored in .ggpk? I got Audio directory, but they're not there.
Probably in unholy FMOD banks, maybe with some leads in Data dats.
@celest wasp > I realize that pob codes are basically snapshots of internal application state
You sure they are? I have seen / read somewhere that PoB pastes are encoded XML files. This is much better than direct serialization (allows unused and unrecognized fields, no binary compatibility required)
Can confirm, pob pastes are b64 encoded xml
if you're using python something like this for decoding
import zlib
import base64
def decode_build(build_string):
try:
data = base64.urlsafe_b64decode(build_string, "-_")
return zlib.decompress(data)
except zlib.error as e:
print(e)
except ValueError as e:
print(e)
@lavish gust You're totally right that they're XML. However, they seem to contain intermediate values for calculation which makes them a little sketchy to generate from scratch
<PlayerStat stat="AverageDamage" value="4.32"/>
<PlayerStat stat="Speed" value="1.2"/>
<PlayerStat stat="Speed" value="1.2"/>
<PlayerStat stat="PreEffectiveCritChance" value="0"/>
<PlayerStat stat="CritChance" value="0"/>
<PlayerStat stat="CritMultiplier" value="1.5"/>
<PlayerStat stat="HitChance" value="96"/>
TBH its a relatively friendly format apart from the fact pob explodes if you mess up
Why would they even contain intermediate values? I would rather put only items and all mods separated
Let me try something
@ionic holly yeah, I already encountered base64 in my job but more from it's "underground" part
@ionic holly a few quick problems - jewels are broken, and so are some fossils
Huh, it looks like it discards at least some of the player stats when it imports. RIP a 51 million level 1 damage pob code
I'll just leave this here: https://github.com/ppoelzl/PathOfBuildingAPI
@celest wasp It's not like these values are actually used for the calculations, they are just exported so that 3rd-party tools like mine can process builds
@ionic holly Use base64.urlsafe_b64decode instead
@golden bane gotcha, that makes more sense. Yesterday was a deep dive into pob codes which was an experience 🙂
@frigid nova which fossils are broken?
Maybe I should add support for generating PoB codes from items or characters
as for the pob decode code, I was planning on scrapping that part anyway and just using the pobapi module u linked
I'm using go for this project, shelling out to python 😬
you can "meet" both at the C level
@ionic holly If you have any issues or suggestions when you're using pobapi, be sure to let me know
Has anyone made any poe.watch / poe.ninja download analyzer/helper/diff etc? Using data from both, in majority for filter purposes but interested if there is something that could offer more than just downloading their JSONs
The slot name differences between the api and pob are fun
@golden bane should probably have the item indexes in item sets already be reduced by 1, since we here in pythonland obey the laws of proper indexing
You can always emulate delicious 1-based indexing in lists 😉
can you request the ladder information in json format? I'm not sure if I'm doing something wrong, or if it is just always html. from the url http://api.pathofexile.com/ladder/metamorph
ladders not ladder
so you can request the list of ladders in json, but not a specific ladder's json data?
^ u had a typo which got the html ladder, not json
oh!
that worked, thanks
and then there's a url to pull in the data of the ladder characters that come back somewhere, yes?
Join thousands of developers who use SwaggerHub to build and design great APIs. Signup or login today.
these are all the endpoints for all the data u will need
hold up someone took the time to put together swagger docs for ggg endpoints? ... no more wiki for me
so, does poeninja only include characters that have their characters set to public, or is there another way to get ladder leaders' passives/gear ?
only on ladder and must be public profile@steep latch
@celest wasp Still needed for things like the public stash endpoint, and even there, you need to also consult the per-league changes as the wiki is not updated.
The wiki is editable, of course, but ain't nobody got time for that.
The website API forum contains the relevant changes, incorporating them shouldn't be that hard 😄
@grave wren what is that?
Chin sol is the bow with a separate more multiplier when shooting from close up
It's a separate toggle as well
I'll ping you how it's called when I am back at home
Ah nvm here it is as well https://discordapp.com/channels/174993814845521922/174993814845521922/671063673162432522
Are any of you fine people also going to FOSDEM’20 this weekend in Brussels?
@fickle yew <Input name="conditionAtCloseRange" boolean="true"/>
@grave wren yeah that's probably fair to enable..
tbh i am still unsure why its not triggered by the proj distance
The 'Close Range' modifier applies to monsters within distance of 20 units[1] (the radius of cleave).
I had the same thought when I had to implement the close range mod for a different item. Not sure if I should keep it and also apply when having a proj distance of less than 20, or get rid of the button altogether and just use the proj distance similar to point blank
@carmine merlin It's a bit more complicated than that
Basically, there are two distinct concepts regarding distance: projectile travel distance and distance between enemy and player.
Note that these two are not necessarily the same as projectiles can change direction, players can move after using skills and mines/traps/totems/ballistas/brands can use skills from a position different to the one of the player.
Chin Sol's mod would fall into the second category here for example.
Also, Chin Sol's specific mod was reworded in 3.9
@compact isle Seems like all the weapon leech mods now have null hashes?
I just made a software to assist me while farming chaos recipe, it's simple and I'm not aware if there is similar software exist because I'm just too busy gaming 😄 here is the link https://dreamingacacia.itch.io/poe-chaos-recipe-tracker
@pulsar falcon https://static.itch.io/images/art/text/itch_error_03.png
@golden bane sorry I forgot to make it public 😅
@pulsar falcon You should open-source your tool and host it on Github (or equivalent) if you want adoption
Otherwise you'll be hard pressed to find people who want to run untrusted 3rd-party software
Any by "open-source" you probably mean "add a license"
No I mean "open-source" as in have the source code available to be able to build the project from source
Although adding a licence won't hurt either 😁
open source with no license is just open source, nothing else than viewing/copying the code is allowed
tbh it's not worth the effort to do those step, just a simple software and any programmers would be able to make it easily
tbh nobody will run a random .exe file just to see what's inside
whats the endpoint pathofbuilding uses to import character data
I was curious what the chaos recipe thing is... but yeah, not running arbitrary executables based on curiosity. I would also have appreciated being able to check out what it's doing and compile/execute it myself.
to build some executables you would need to install multiple GBs of necessary tools and then configure them properly
building yourself has not much point unless you read the entire source code
I echo Cinnabarit's suggestion above: host the source on Github. You can also have the executable(s) there as a Release for folks.
anyone knows the maintainer of acquisition?
@lavish gust xyz
reachable here?
Usually yes. Same dev as poe.trade.
poe.trade = poe.xyz.is I remember
@lavish gust The idea behind building yourself is that someone does read the whole source code, compiles it so they can vouch for the program
If that's not you, you have the additional option of trusting that person other than building yourself
In the current state, even that is impossible
what do you mean by "current state"?
Closed source
ahh, agree definitely; if someone ever wants others to download their program releasing the source is an absolute minimum
@ornate nest Everything under /character-window/: https://app.swaggerhub.com/apis/Chuanhsing/poe/1.0.0
Note that for non-public characters, you have to provide a session ID
It isn't done with releasing the source code, the binary has to be reproducable. Iirc Truecrypt had the problem for some time, people had problems reproducing it, there are even papers about it, e.g.https://madiba.encs.concordia.ca/~x_decarn/papers/verifiable-build-acsac2014.pdf
I thought that was obvious, but that's a good paper you linked
Ideally, you'd also have detailed build instructions in the repository
AFAIK it's very hard to verify the executable build unless you have exactly the same OS, compiler version, all used libraries and such. And still, there can be some non-deterministic things (eg filesystem randomness) which can impact the order of files read by the linker. Even worse if the released binary is stripped and cleaned of all unnecessary data.
@frigid nova that's annoying, I'll investigate
**1:3:8 split for total number of affixes** - For items with a max of 6 mods, extensive data farming has shown that there is a 1/12 chance for 6 mods, 4/12 chance for 5 mods, and 7/12 chance for 4 mods
What about items with 3 mods?
they never drop
And for chaos crafting?
items which drop behave as if by alchemy orb - they have the same rates
rare items don't drop with 3 mods, and also don't roll that way with things like essences/chaos orbs
So, you can only get a 3-mod rare with regals/annuls?
yes
or metacrafting, yes
I never even realized that 3-item mods didn't exist!
beastcrafting, some other smaller things but in general yeah 3 mod rares aren't a natural occurance
there are many small things that not everyone can easily notice
is there a dev for poe-lurker here?
Is there some sort of Path of Exile crafting simulator, like Path of Crafting, for PC?
there are so, so, so many crafting simulators
examples?
You can also use Path of Crafting on PC in an emulator
i know that, was looking for alternatives
@deft jolt you say there are lots of crafting sims, could you give me some examples?
I don't think that's what they are looking for
it's useful, but no not what I'm looking for
I'm looking for anything to do with crafting, like rare crafting
Path of Crafting comes to mind, but it's mobile. I can download BlueStacks and emulate it, but I want to see if there are alternatives
@quick wharf you can look at mine https://github.com/nickryder/poecraft
I try my best to make it accurate-it's been tested against lots of in game data. That being said it has no gui, it's mainly intended for a sandbox for myself and others
so I have to install PyPoE, RePoE, and then PoECraft?
Yes - I need to create a wheel for easier installation - but unfortunately it's a bit low on my list currently. Quite distracted with another PoE project...
I'll try it out, thanks
All feedback welcome.
@quick wharf im currently developing a crafting sim where you have to use currency, most ingame features are implemented, but it's still incomplete
"Your Crappy Item"
"Stats here"
I like it already
Yeah, name generation and stats display are low priority atm
it's still clearly in development, but it looks good so far. depending on whether or not I figure out how to properly install nick's poecraft or not (and how good it is c;) I'll probably use this
@frigid nova since I see you are making a crafting simulator, I might ask you a question: when exalting an item, is the chance for prefix and suffix always the same? Or there is no prefix-or-suffix step and the ex instantly draws from the weight of all possible mods?
No prefix-or-suffix step, for everything that doesn't explicitly state otherwise
The latter @lavish gust
ok, so craft-blocking high-weight mod does a lot then
@quick wharf Yeah my tool is intended mostly for large scale experiments. If you want a nice gui to mess around with I'd advise others.
as long as the GUI works and isn't insanely difficult to use, it's all good
and I get bored a lot but don't have much currency in POE at the moment, so might as well learn to craft without the fear of messing up
@frigid nova "So for 6 mod variants we have 119^6 possible permutations. [...] 10^12 leaves is computationally infeasible." and "However, with influenced items even the total number of mod groups can get near 100, leading to the same problem as before."
This may be only useful for a special usecases, nevertheless if you have a specific item in mind, can't you group some mod groups as unwanted?
e.g. crafting for a CI Cold spell char you want high ES and a specific damage type, so if you roll fire or phys damage on an item doesn't matter if they are equally useless for what you have in mind.
@frigid nova "Performant Crafting Simulator"
what is it that's computationally intensive?
aren't all crafts O(1)?
(that is, what question are you trying to answer because as Xeverous notes, a single roll is just a couple steps)
The weights you draw from change at each step
There are a lot of weights and calculating what they are can be expensive.
Weights do change - that's how the tag system works. I try to explain this in as much detail as possible in the README
@frigid nova I understand weights change depending on what's already on the item
but what is the question you're trying to answer
I can't comment on the complexity and/or algorithms if I don't know what the query is
ok looks like the process of rolling a mod is more compex than I thought
@lavish gust example, if a chaos orb rolls t3 life prefix as a first mod it can't also choose life as another mod so the mod pool and thus probabilities change
still, each mods has chance equal to weight/sum_of_weights, right?
@frigid nova is the question "what is the chance to end up with a specific combination of mods (plus maybe others) when a chaos orb is used"?
There are many questions one could be interested in asking. A general one would be to integrate any function over the space of all outcomes of a chaos orb.
that's not feasible indeed
assuming no other properties of the function
not too far off though
>>> binom(100, 6)
1192052400
Some of the functions are class functions over the mod groups, which I think might be feasible in some limited scenarios. But I settled on just doing rollouts to estimate.
Keep in mind binom(100,6) is an overestimate by probably a few orders of magnitude
since many configurations are illegal
>>> binom(50, 3) * binom(50, 3)
384160000
Still though, calculating the probability for any given configuration proved costly.
are there overlapping mod groups?
(There are 6! ways in general to obtain a given configuration)
No, mod groups partition the mods
ok
why so?
prefix/suffix is actually a huge simplification
or are there mod groups that span prefix/suffix?
I'm not sure why you'd think that, if I roll PPPS as opposed to SPPP
the total weights at each step look quite different.
Not in your binomial configuration 🙃
sorry I misread the thing
I'm not sure that's actually different though
assuming there's no mod group that spans both
What do you mean by actually? My claim is that the probability to end up with any subset of mods is the sum of all the orderings of the mods.
Another way to say this is computationally it's more reasonable to consider the space as ordered lists than unordered.
usually when spaces are partitioned like this all ordering effects of mutually exclusive events tend to cancel out
but
I'm not certain of either way ^^
@frigid nova I don't know software that solves this
but I'm pretty sure you can actually solve your problem efficiently
since the amount of mods is reasonable
and all constraints are partitions, therefore all mutually exclusive stuff can be encoded in a n^2 matrix
so you end up with n^2 conditional probabilities
of the form P(mod1 | mod2)
you can probably use some bayes package to then solve questions such as P(mod1 | mod2,mod3) or straight up P(mod1)
although the prefix/suffix stuff might throw a curveball unless you can fully separate the two
@frigid nova ok, let's for the moment assume we have correct probabilities for P(#prefix,#suffix)
e.g. we know that 2 prefixes and 2 suffixes has a certain probability
then I argue that the probability of prefixes/suffixes given that we already assume we get 2 prefixes and 2 suffixes means we no longer have to worry about the probability of a suffix affecting a prefix
if we can do that, there exists an efficient algorithm
oh wait that doesn't give the probability, just how to sample from this distribution
@frigid nova for what it's worth, I could very efficiently sample from this distribution with a quantum computer 😛
@frigid nova (sorry about this, I'm slightly dumb in the brain) I've downloaded PyPoE, RePoE, and PoECraft. How am I meant to actually get it running.
@quick wharf https://github.com/OmegaK2/PyPoE#quick-setup-guide Did you already do this? Do you need help with it?
@compact isle "Hits have (140-200)% increased Critical Strike Chance against you" is listed as explicit twice
I've done that for PyPoE and RePoE, just not sure about PoECraft now
Very similar: https://github.com/NickRyder/PoECraft#how-to-use
just another pip install?
Since PoECraft requires Cython to compile it can be pretty annoying on some operating systems... if you have any issues let me know
am I meant to be running the pip install in PoECraft-master, or PoECraft?
If you do not want or cannot compile Python packages yourself, there is this amazing site: https://www.lfd.uci.edu/~gohlke/pythonlibs/#cython
Do what the warning says
It's probably best to move this debugging out of this channel
I did what the warning said, didn't change anything when I tried again
@frigid nova let's see what more mathematical people than me have to say https://math.stackexchange.com/questions/3527603/probability-of-subset-in-weighted-event-sequence-sampled-without-replacement
I really think prefixes and suffixes are going to mess you up here 😉
I don't think they are if we calculate those odds before hand
assuming that there's no mod groups that span the gap of prefixes/suffixes
The 'adds_tags' field can really mess with your mod pool
Order of added mods makes a big difference
can you clarify @gritty quail ?
When you add a mod to an item, any tag in the mod's "adds_tags" list gets thrown on the item
I'm not sure what adds_tags is or how it works
So future selection of the valid mod pool has to take those new item tags into account
can you give a concrete example?
Sure let me dredge one up 🙂
You know how jewels often roll with paired modifiers that both target a specific item type?
A good example is bow/wand mods on abyss jewels. They are mutually exclusive due to tags, not mod groups.
That's because if you roll a mod that talks about "daggers" then it adds this:
"adds_tags": [
"dagger",
"specific_weapon",
"one_handed_mod"
],
ah yes, jewels are more complicated
It shows up on non-jewel items
If you gather the mod pool for that item again, the weights make all mods that don't target daggers drop to 0
where else? I'm curious because I can't think of any
Hybrid Attacker/Caster weapons use it to weight towards one or the other during rolling
Yep
I'm also working on a crafting simulator 😂
It's fun learning how their item generation stuff works
is adds_tags always a straight up blacklist
No
or can it be an arbitrary probability multiplier?
The latter
or well, weight
Anyway, I detail the algorithm I ended up settling on within the docstrings of my repo. Basically precompute and hash as much as possible for a given base so you can roll quickly
That's smart
I'm planning on doing monte carlo simulation at some point, a little worried about how slow this is all going to be, especially in javascript
within each modgroup everything is fair game though?
But I'll cross that bridge when I get to it
Not sure what you are asking @lusty musk
that is you could view the rolling algorithm as first choosing the modgroups of an item
and only then within each modgroup selecting an affix
This assumes that tags are uniform across all mods in a mod group, this constraint could be true in the current mods.dat but is not forced to be.
I think you could, I've been hesitant to take shortcuts like that because their format is very flexible and I don't want to make assumptions
@gritty quail based on the constantly fluctuating and buggy state of mods.dat that is a good design decision imo
I still think if you are interested in the probability of a specific combination you can take a huge shortcut
to massively reduce the 'outcome tree'
Even if you only look at mod groups I think it's still infeasible for many bases nowadays
basically at each node of the tree you can combine every single mod that isn't what you want into one giant mod group
That's not true
plus a probability distribution that dictates how that mod group shrinks
Well that's just equivalent to tracking all the mod groups
Since you need to condition on which one actually left for the next roll
not anymore because now the order can be disregarded
(only grouping those mods that don't add tags)
How do you figure?
different mod groups that you don't care about have different total sums
actually again the prefix/suffix count messes me up otherwise you could
Is it true that live searching on the official trade site has changed the max # of websockets from 80 to 20? I didn't see any post on the Website APIs thread on the forum for this.
Seems @compact isle confirmed this in the following: https://www.pathofexile.com/forum/view-thread/2759855
Thank you. I missed that post
Looks like some authorization aspect was introduced as well. I'm not sure if this ties it to a session id or something else.
From first glance it looks like CORS was enabled
Makes it a little more difficult for an external app to make use
Ah. Good to know! ❤️
@compact isle would it be possible to expose the websocket limit in the response headers somehow?
we don't support third parties using it which would be the only use that would have
Would it not also be relevant for people using the official trade website with multiple tabs?
only if we also added it to the front end
but 98% of people don't use over 20 searches
Thanks for the clarification!
also interestingly enough you can't get any information from the original HTTP request back when you open a websocket connection
so it wouldn't be able to be used by us or anyone else in the web-space
@fickle yew poe.ninja builds page doesn't seem to recognize High-Impact Mine Support as a mine skill, only Blastchain Mine Support and natural mine skills -- https://poe.ninja/challenge/builds?class=Saboteur&keystone=Demolitions-Specialist,Pyromaniac&skillmode=!Mine,!Trap&sort=depth-solo
can some one help me setup the new pob?
something about a string?
just @ me or w.e when available
taps the channel topic sign
The github page for the fork has a wiki page with detailed instructions on how to alter the manifest.
channel topic ?
isnt pob a 3rd party tool?
0.0
if im wrong could u point me to the right channel cause im confused now lol
"how do I setup the path of building fork" isn't anywhere near development discussion, there are like 5 other channels for that kind of thing
try #1┃endgame-help (or just read the installation instructions, since that's what they're going to tell you to do there too) https://github.com/LocalIdentity/PathOfBuilding/wiki/Installing-this-Fork
i didnt know that existed
i was only told of some string to change nothing else
ty for this
That advice is still accurate :D
The ultimate goal is to change where PoB gets “updates” from, following the changes from LI’s place instead of Arl’s.
yeah i see that now but it did confuse me
A more on topic question, how do people here do dev/prod databases and endpoints - just some config files with database connection strings and feature flags or something?
I’m at the point now that I feel that I want to both run a stable version in prod and also do active dev.
Responsibility isn’t my forte 🙂
@rugged pecan look for a feature that wasn’t present before, like the pantheons drop down or oils on nodes in the tree. If you got an update ready after the change, it’s likely you got the goods.
(I have no idea what upstream PoB does nowadays)
@worthy cape you mean networking stuff? You basically run 2 server instances, each with own databse or using the only one, each server having different address
ty
@lavish gust yeah, just wondering idly what kind of mechanisms people use to do this smoothly.
+1 for docker and compose files
@grizzled seal I'll take a look. Thanks.
I’m also having some trouble figuring out how to handle my source code, as i either have to keep multiple copies of the source on each machine I build on, or somehow distribute binaries from a local bunch of trees.
Kind of want to keep overhead low when iterating, going through CI would suck balls, as would spinning containers. Also debugging ^^
ideally you'd distribute packaged containers
I’ve got some code at work that is deployed by manual scp step to the target box and it sucks.
Not while developing
why
I mean, the project is in vcs but I wouldn’t commit every single edit I do to see if it builds/runs.
The PoE project is fun as I have two diverging trees, one in the cloud instance and one on the dB host.
Off to the hotel for now, got stuff to think about at least.
@worthy cape https://i.redd.it/7p6rgwk7dwd41.jpg
Any (unofficial) documentation on how to build poe.trade URLs to query for items with specific mods?
I know how to build URLs to search for items based on number of links, or whether or not the seller is online, but only because I found a minimal resource for that on a random GitHub repo a long time ago
not sure how the dev behind that repo even got that info.
maybe on the official post?@crimson epoch https://www.pathofexile.com/forum/view-thread/109153
mmm, quite a lot to search through
actually
this code could come in handy
looks like pretty much all parameters for poe.trade's POST requests are listed here
pob suddenly started telling me my profile is private, wasnt yesterday and the box is unchecked on my profile.. any tips?
https://prnt.sc/qv8jej
my kaspersky found a trojan spy in the actual download from poe trade companion... anyone here noticed that too?
Just don't use antivirus programs
shure... if you want your banking informations spread across the internet... dont use them... but i will
https://github.com/lemasato/POE-Trades-Companion/issues/124
It's a known issue, the newest comment is 11 days old.
lol I actually wonder what can be (falsely) found if anyone starts to scan my tool
@grizzled seal Deploying a fix for high impact mines. Will go through later today 🙂

what trading tool are people using now instead of poe.trade AHK?
(sorry if this not the right place to ask)
it isn't, but there was a whole bunch of new trade helpers posted on the subreddit a little bit ago, maybe try looking there or another channel for a detailed rundown
@dark wigeon Ask in #1┃endgame-help
k. thanks 🙂
@velvet fog
Elemental Penetration showing up as a suffix on bows, although all weights are zero
thanks
For anyone curious, @lusty musk, mods in a single mod group don't necessarily have the same tags
The following is one such example:
Also @velvet fog would you be wililng to display tags next to the mods, since currently that mod group displays like this:
Has anyone conducted experiments with corrupted essence fossils (Glyphic)?
@compact isle since the update I'm constantly getting cloudflare captcha'd by the website and I haven't ran anything for days now
send your public IP to support and we can review it
Novynn new wc3 map when :3
oh god

Does anyone have any experience whether or not https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getforegroundwindow can be used safely without invoking the ban-hammer? Everything else in my application is following the EULA, but this particular call might be pushing it. Basicly I only want logic in my application to run when Path Of Exile is running
@cyan ice Does EULA list explicitly allowed OS functions? There are many workarounds for implementing "when path of exile is running" behavior. Could help you with this if you find what is / is not allowed.
@lavish gust It is not only when it is running, it is when Path of Exile is the currently focused/top window. GetForegroundWindow is a known first bastion for anti-cheats and since we do not specificly know what is being checked in GGG's anti-cheat solution, i'd rather not use something that could trigger it. Or anything similiar
how is tademacro behaving with ctrl+C/cotrl+D for example? is it working outside of poe?
@zinc root It is not. I uses AHK language which abstracts some of OS API. AFAIK it only tries to get the name of the foreground window, which @cyan ice can probably be obtained in a non-intrusive way
trademacro wont run, get a parsing the league data (json) from poe api failed. servers are up and ruinning, tried reinstalling ahk and trademacro. nothing works.. also having trouble with pob
@cyan ice That's the exact function that AutoHotkey uses, and PoE-TradeMacro calls it frequently via IfWinActive. I'm quite certain GGG doesn't care about GetForegroundWindow. Application behavior is what matters, if you're actively trying not to break the EULA you're probably fine.
Getting information via user32.dll shouldn't be invasive or interact directly with PoE anyway, so there's no reason to be worried about it. Memory reading/manipulation and pixel scanning (aka what you're not supposed to do, ever) are handled by completely different DLLs. The only bad thing I'm aware user32.dll can even do is input manipulation, and GGG is pretty lenient about that as long as it doesn't involve multiple server actions without matching physical user input.
@grizzled seal Yeah in that case I feel more at ease. I'll continue with that then
getactivewindow or functions like that are often used 'by desktop managers acheats avoid them because of this
does anyone have these
cba setting up the py tool and waiting for cpy and paste
@halcyon whale do you want the raw dat or...? if you just want to look at the data, realistically, http://poedb.tw/us/mod.php probably has the information you need 😛
Yea Ik I looked at poedb @rapid pagoda
I need the raw dat. Or I would rather copy and paste then do it manually from poedb
I need a list of all magic item name modifiers for filtering out a base
ty 🙂
ouch
might have to use a different browser for the raw lmao
nvm I'll just save
"adds_tags": [],
"domain": "item",
"generation_type": "unique",
"generation_weights": [],
"grants_buff": {},
"grants_effects": [],
"group": "AuraBonus",
"is_essence_only": false,
"name": "",
"required_level": 1,
"spawn_weights": [],
"stats": [
{
"id": "critical_strike_chance_+%_against_enemies_on_consecrated_ground_while_affected_by_zealotry",
"max": 120,
"min": 100
}
],
"type": "ZealotryCriticalStrikeChanceAgainstEnemiesOnConsecratedGround"
},```
wait
so there is no reference to the name generated by the mod
can someone walk me thru magic item naming
?
@stone kelp repoe is installable as a python package which is detailed in the readme
there are docs in repoe which explain every field in the json
does it contain the naming system with the resdis?
magic item's are named based on the prefix and suffix which are on them.
so is there a dictionary for the actual adjective connected to each modifier?
name is the name of the mod
shame that name field is empty
ZealotryCriticalStrikeChanceAgainstEnemiesOnConsecratedGround doesn't have a name because it only appears on unique items (specifically, Watcher's Eye)
historically there have been a few mods which could spawn on non-unique items which had blank names -- I think most of them have been fixed though
I think there are a few right now actually 😮
eh I'm just getting an array of mod names so I can filter them out to find base type
hardcoding but is seems like the only way togo on the official trade site
the stash api
yea trying not the mess with them on a simple extension lol
im just messing with item base on trade site
The official trade website provides the mod names
mouse over the mods 😉
wouldn't be a smooth way to find base type
Smoother than hard coding.
ik you can force hover
I have a python function which unrolls it if you want
sent
Whats the best trade macro for the official site
@obsidian jetty try asking in #1┃endgame-help
Does anyone know if there is an indication in content.ggpk of which mods spawn on which sextants?
Before people used ilvl but they are all 1 now
when e.g. using a chaos orb on a chest, is the probability of 4/5/6 mods publicly known, or is it only rough values from experience one can get? I've tried looking through pypoe and repoe, but can't find anything regarding that there. When googling I've only found some thread where someone stated their results from chaosing ~1000 orbs...
1/12 6 mods, 4/12 5 mods, 7/12 4 mods, same for alchemy orb
where are those numbers from?
wiki and multiple people's experiments, quite big sample sizes
do you ahave a wiki link? (also thanks 🙂 )
no, it was on some currency article IIRC
ok
@velvet fog 👋
https://cdn.discordapp.com/attachments/283743181114441729/673177682451890176/unknown.png
Can't find a way to report this via the ad itself, do I just ping you?
got it thanks
