#tooldev-general

1 messages · Page 101 of 1

prime wasp
#

from item name

#

don't need the actual info

golden bane
#

I found some errors and corrected them, but there are likely more

#

Oh, okay

golden bane
#

Which reminds that that I still have to add drop sources for the Conqueror items

#

Is there any complete info on which Conqueror drops which uniques?

prime wasp
#

wait you're sexy

#

@velvet fog

#

is there a list of all the types

#

nvm found a reddit thread

#

ty

#

perfect 👌

prime wasp
#

yay

#

ty again

orchid geode
#

hey there guys, saw that poemap.live does have OAuth for its login, but I wasn't able to find any documentation online about it (was thinking about developing a tool, and I would need that feature). any suggestion? 🤔

deft jolt
#

check the pins

golden bane
#

Check the pins

orchid geode
#

okay, my bad! thanks 🙂

frank lark
#

does any1 know why poe buddy is down? when trying to get on it it says 404 not found.

cold stream
#

hi all, just found this channel

#

posted this a couple days ago, lmk what you think 🙂

hazy fiber
#

@cold stream this was posted before, sadly discord search function is broken (if you want to see some responses to it)

#
reddit```
#

cant get the messages around it but you can scroll up

frigid nova
#
    "English": [
      {
        "condition": [
          {
            "max": 3,
            "min": 3
          }
        ],
        "format": [
          "ignore"
        ],
        "index_handlers": [
          []
        ],
        "string": "Socketed Gems have +3.5% Critical Strike Chance"
      }
worthy cape
#

C# and Rust interop sure is a bit sketchy, but managed to glue together enough examples for this:

using Backend.Pack pack = Backend.Pack.Open(@"C:\Games\Path of Exile (Standalone)\Content.ggpk");
_ = MessageBox.Show(string.Format("Root directory has {0} entries.", pack.RootEntryCount()));
simple ravine
#

Or you could just use my ggpk library

worthy cape
#

For that thing, for sure.

#

I've got all the other file formats wired up that I actually care about.

simple ravine
#

no nugets yet though, sorry

worthy cape
#

I found this talk the other day and lifted a bunch of implementations of ref/out type glue for interop: https://www.youtube.com/watch?v=0B1U3fVCIX0 , https://github.com/KodrAus/rust-csharp-ffi

Why would you ever want to introduce unmanaged code into your managed codebase when recent versions of C# have made writing high performance code in .NET more accessible than ever before? While C# has been pushing downwards into the realm of "systems programming", Rust, a lan...

▶ Play video
simple ravine
#

is it possible to compile rust libraries into c-like dlls?

#

that you can use as extern P/Invoke from C#?

worthy cape
#

Yes, both DLLs and static libraries.

simple ravine
#

i guess you just gotta make sure they're blittable?

simple ravine
#

ah yeah they're pinvoke

worthy cape
#

Yeah, things are either blittable structs or by pointer.

#

As always with FFI, you've got to go the boring route wrapping in and out of C along the way.

#

Got no idea if this would scale well or if there's a good boundary between Rust and C# for this viewer project, but it's fun to try.

#

Beats doing the same thing with C++ 😉

simple ravine
#

yeah

#

.NET Core 3.1 is quite fast though, so if you ever feel inclined

#

I have to say I am being a little curious on Rust, but also Elixir

worthy cape
#

The authors claim that there's quite less overhead for the interop when building AoT.

simple ravine
#

But as always, you can create really slow C# apps too

#

yeah, I can imagine that

#

but how does the AOT work?

worthy cape
#

Something with CoreRT, I've got no idea how these things fit together.

#

I guess it gets the opportunity to just inline native calls as it compiles.

#

The example I'm working off builds a native DLL for regular mode and a static library for AoT compilation.

#

Biggest problem I've got right now is that my C# assembly is not rebuilt as I alter the Rust code, but I've got a MSBuild guru to poke about that.

#

Time to hit the sack now tho, been pushing forward on this code while waiting for the clock to get late enough 😄

simple ravine
#

Thats quite early bed time. Have a good night

worthy cape
#

I've been all over time-wise for the holidays, been incrementally syncing up with work hours the last few days pushing myself a few hours further per day.

#

Should be in sync on Tuesday when work resumes, I pray.

simple ravine
#

You wake up very early when going to work, or you've been falling asleep in the middle of the day during holidays? o.o

worthy cape
#

The latter.

simple ravine
#

Ah. I did the opposite. Was coughing and sounding like Barry White.. still do.

grave wren
#

Rip

inland kestrel
#

@fickle yew this page is misleading: https://poe.ninja/challenge/watchstones
Without knowing the level of effort, I have a few suggestions to offer:

  1. a new filter-toolbar data-filter-select dropdown that lets you filter the "uses remaining" (https://poeapp.com/search/Metamorph/HZTyQY). This might be a little awkward because different watchstone have different maximum values, up to 18. (e.g., 18 dropdown items might feel weird but maybe not)
  2. an additional table entry for each watchstone type that has ", unused" (or something along those lines) which shows the current price/trend of a fresh watchstone
fickle yew
#

@inland kestrel That's a good point. Maybe it would actually make sense to just divide the original price with number of uses remaining and list an approximation of cost per use.

long edge
#

was about to write that

inland kestrel
#

That's also an option

fickle yew
#

Having a listing for 11 uses left and 12 seem superfluous..

inland kestrel
#

Agreed

fickle yew
#

Although having many uses remaining could be practical when buying in bulk and as such they could be more valuable

inland kestrel
#

I care mostly about wanting to buy them for juicing.. so I do put a premium on having to do minimum trades

long edge
#

having a toggle for unused doesnt seem that bloaty

fickle yew
#

But overall I think having fewer rows is better

inland kestrel
#

However, I think there is a separate use case for someone who wants the cheapest, 1-use-remaining for teching to awakener level 8 quickly

fickle yew
#

Hmm what about a combination then.

#

Avg price per use but grouped in "use groups" of 5.. 1-5, 6-10,...

long edge
#

maybe, but might be confusing/misleading still imo

inland kestrel
#

I think most people don't realize that the various watchstones have different maximum use remaining 😛

fickle yew
#

I think I'll have to look at the data

long edge
#

just do the average and the unused perhaps and then the weight of specific calcs has to be done by the user on tradesite

fickle yew
#

Whether the price per use actually is higher with many remaining

inland kestrel
#

Yeah, I don't have the right solution but wanted to offer some suggestions to look into. And offer the two main scenarios I have for them 😛

fickle yew
#

I'm leaning towards just having price per use..

#

For skmolixin

#

Simplicity.

inland kestrel
#

Simplest might also be just showing the max-use value

fickle yew
#

The max use value?

inland kestrel
#

that's what someone who just got the item and wants to throw it up for would want to go by

long edge
#

well showing unusued gives you a good overview for those looking for juice, and avg price per use gives an idea to those looking to minmax or simply min

#

if somebody is really into minmaxing they can script their own query results via any search sites, similar to how many people are doing for jewels already

inland kestrel
#

So for Misinformation you'd show the current average value for it when there are 11 uses remaining. For Terror you would only use the average value for when 12 uses are remaining

#

... so it's always the price of the item as it drops on the ground 🙂

fickle yew
#

Right

#

Ah they always drop with the max number?

inland kestrel
#

^ this is a good question. I assumed yes

fickle yew
#

Still low level in the lesgue...

#

I'll think about what to do. Thanks @inland kestrel

modern lava
#

guys i have a problem with POE Trade Macro. Can i ask a question here or does a different chat for bugs exist?

worthy cape
#

@modern lava If your question is about how to modify or otherwise develop on the trademacro codebase, maaaybe. If it's end-user support type things, heck no - then aim for the issue tracker or other community resources.

modern lava
#

@worthy cape ok. Thanks anyway 🙂

dusky charm
#

what is the macro/tool that people use to put stuff on trade window fast?

#

for example if they trade cheap oils

#

i have traded with people that put 600 oils in 2 sec

jade adder
#

they are currency bots

#

or they are using some sort of AHK script that is potentially against the rules but potentially not

#

either way not worth

dusky charm
#

oh so the so called currency bots are not allowed?

jade adder
#

no, they are bots

#

which is against the rules 😛

frigid nova
#

to be fair, bots is an overloaded term in this community

flat knot
#

Is there an api to transform the trade search query id "LgyQJkGtn" into query filters?

fickle yew
#

@inland kestrel Aw. It seems you can't filter on remaining uses on the official trade site 😦

frigid nova
fickle yew
#

Thanks

inland kestrel
#

I was just about to link that -- yep

fickle yew
#

@inland kestrel Deployed new overview. It now lists a line per "uses remaining". Probably the easiest way to not confuse players who just want a simple price. poe.trade and poeapp searches will do the correct filtering - official will when they implement it 🙂 It should be live shortly.

inland kestrel
#

Okay, cool. I'll probably get a chance to check it out when I get home. About to head out from work in a minute

fickle yew
#

I'm heading to bed. Hope it doesn't explode 🙂

inland kestrel
#

push && sleep

#

what could go wrong 😍

fickle yew
#

It's the only way

inland kestrel
#

I agree, haha ❤️

compact isle
flat knot
#

@compact isle perfect, my command line will look sane again

flat knot
#

anyone happen to know how many qps it is to keep current with stash tab updates? is it 1000/s 10k/s 100k/s or 1m/s

#

qps is wrong term, update/s is what im wondering

simple ravine
#

It can be more than 5 MB/s in terms of json data to parse, analyze and store

flat knot
#

thanks dude

compact isle
#

@fickle yew those mods are all available now

fickle yew
#

@compact isle Great. I'll add the filtering on my links.

eager apex
#

i have this error using acquisition all of a sudden. was playing and it happened no idea why. any ideas?

hushed relic
#

@compact isle Heya, there's something wrong about the OATH Api

#

Starting today morning, FilterBlade is giving:
{"error":"invalid_client","error_description":"No client id supplied"}

#

upon trying to log in with your POE account

#

While it might be something on our side, we didn't make any changes to the Filterblade code recently

compact isle
#

we did a patch today but nothing OAuth related was changed

hushed relic
#

hmm

compact isle
#

is the client id being supplied would be my first question

#

looks like it's just loading the endpoint without any params

hushed relic
#

Yeah, im on the road and on mobile right now, but I wouldn't understand why it suddenly starts behaving that way

compact isle
#

ah may be filterblade using an http link instead of https

compact isle
#

not sure what would've changed that behaviour but I'll see if I can find out

hushed relic
#

Whiiile I have your attention 😅

#

I have 2 additional questions about the filter lists

#
  1. Are there any specs about the API? I'd like to automate the filter update process there
#
  1. Is there an option to enable Oath to use the profile-filters scope?
#

ideally this would enable direct upload to the poe profile from filterblade

#

which would probably be a very nice QOL feature as well

#

@compact isle thanks :)

compact isle
#

if I remember correctly we had some changes we wanted to make first

#

I'll check back in on progress about it tomorrow

hushed relic
#

alright, thanks!

knotty imp
#

Is someone using Aspnet or visual studio 2019? I am trying to help out on a project but somehow I am not able to make new xaml windows. Even google wont help me with the issue, like its just supposed to work.

mortal bone
#

@knotty imp make sure you have the workloads required for whatever you are doing. Open the Visual Studio Installer -> Modify on Visual Studio 2019, then make sure you have .NET desktop developer, ASP.NET and web development, and .NET Core cross-platform development

#

I think those are the main 3 you want

knotty imp
#

Ah ive got 2 out of the 3, dumb. Thought I had em all

#

Had to reinstall 2019, still had the preview

amber mural
#

yeet

calm lodge
#

Hey, I made a bat file for myself so trademacro and mercury trade starts with the game. Now I wanted to add POE Trade Companion.
Maybe a stupid question, but is there a way I can bypass the asking for confirmation admin thing? Maybe in the .bat or a setting in windows for this folder?

For Trade Macro I did it with -noelevation, because that was an argument which I could pass.

tawny loom
#

Just modify ur user account control in the control panel of windows @calm lodge

calm lodge
#

what do I have to modify there?

#

@tawny loom

tawny loom
#

See the slider?

#

Pull it all the way down

calm lodge
#

But is there a way to only turn it off for that programm and not for all?

#

If not I would do it like you suggested, thanks

tawny loom
#

Don’t think u can do it for a specific app

#

Maybe u can do to comparability (on the script shortcut) and like make it run not as admin (not sure if it can work that way)

fast citrus
calm lodge
#

Thanks for the help @fast citrus, but im just going to turn down that slider I think. Because I cant remember a time I clicked no 😄

fast citrus
#

Haha yeah, I'd like to hope that if we're savvy enough to be making batch files we know better than to download the program we were emailed to claim our overseas inheritance to a long lost family member we never knew

tawny loom
#

Wait, u get that too? How are they gonna split the money now..

jade adder
#

when the deposed prince of nigeria asks you for money you don't just tell him no

calm lodge
#

I sent it to him and currently waiting to get rich

#

He said it takes some time

prime wasp
#

is auto-whispering from livesearches a nono?

#

can't seem to find a definitive answer

compact isle
#

automation is a no-no

#

that counts as automation

prime wasp
#

kk

frigid nova
#

@compact isle I emailed you a list of some odd stat_translations, checking in to see if you got it

compact isle
#

you could do something like a popup on screen that you click that pastes the message

#

yep received, Mark isn't back yet but it's in the queue

prime wasp
#

i have it currently set up to manually click the result and it auto pastes it into poe

snow whale
#

anyone know a bit about parsing the passive skill tree data that I can PM?

velvet fog
hazy fog
compact isle
#

the follow up comment was better

snow whale
#

@velvet fog hello, thanks for the links, but I have those already. my first question is for the root node's out key: are they in any particular order?

#

I was assuming they were ordered by class ID, e.g., 0-th index would be scion, but the 0-th node.out element is actually ranger and the rest are in some other seemingly random order

fast citrus
rapid pagoda
#

@snow whale my first guess would be "they're arbitrary", tbh

#

possibly with a dose of "when the skill tree changes, new nodes get new IDs"

compact isle
#

Why would scion be the 0th index if it was the last class added? chaosthinking

fast citrus
#

Everyone knows she's the favourite.

velvet fog
#

the root out is from Metadata/PassiveSkillGraph.psg and I think it is random order

snow whale
#

@velvet fog thanks! i'll give that a look and ask my other question tomorrow

velvet fog
#

they are starting passive, order is useless

mortal bone
#

@snow whale The "out" field is just a list of node id's in no particular order. The "root" is the same (slightly fewer fields) as a node in the node list

#

If you have any questions, let me know.

fast citrus
#

Ahh, I just saw your name attached to it and figured you'd probably be the most likely to have an answer 😛

mortal bone
inland kestrel
#

Are spawn weight values no longer available in the ggpk?

#

or is that only for certain modifiers

knotty imp
#

How can I listen to messages recieved in lets say C#? are there any guide or pages with info like this?

grave wren
#

Read the client.txt in the games log directory

golden bane
#

@knotty imp You are looking for something like the UNIX tail -f command

#

Start from there and try finding a C# library for that

knotty imp
#

Dang, dis gon take me longer than I thought. Thanks 🙂

grave wren
knotty imp
#

Aaah thanks

golden bane
knotty imp
#

It does help faust

grave wren
#

@golden bane neat thanks

golden bane
#

I've used it for a work related script in the past, can recommend

knotty imp
#

Ah, Ive found a C# solution, it works

grave wren
white bone
#

This is almost getting ridiculous, but me and a mate have also been working on a trademacro clone :/

#

You guys think we should just give up?

frigid nova
#

Is your feature set the same as the others?

#

You could instead help contribute to the others

white bone
#

I think we have a lot more already actually 😦

frigid nova
#

Ultimately it depends on whether or not you care about people using your project. And if you do- whether or not you can convince the community you have novel features the others don't

fast citrus
#

Ohh I downloaded that one last night to try out and then my internet died, thanks for the reminder

white bone
#

Yeah lol, we saw your random star on github on this unreleased tool 😂

fast citrus
#

Is there any way to run .jar files as an admin?

white bone
#

I think you can "java -jar yourprogram.jar" in an escalated command prompt

fast citrus
#

Ahh ok yeah, just not the simple properties > always run as admin trick

white bone
#

Is it broken? If it's something about a JNI error you have to update your java version

#

There's a way to package the runtime environment with the app, but we haven't gotten that far yet

fast citrus
#

nah, I had PoE running as admin and the overlay wasn't displaying. Works now I've reopened poe without admin

white bone
#

Ah 🙂

fast citrus
#

I do like the way the overlay looks, nicely done 🙂

white bone
#

Cheers!

#

If you alt+a on some maps theres a screenshot of the boss

#

It's my favorite feature :p

#

Only works on maps in Haewark Hamlet

#

No time to run 154 maps yet haha

fast citrus
#

Ohh it was lucky the map I happened to have in my inv was a haewark one lol

#

but I did see the request for map boss screenshots, if I happen to get close enough to one I'll try to help 🙂

white bone
#

😍

simple ravine
#

Can you compile it so you don't need java installed?

#

I really, really, really despise having Java installed

snow whale
mortal bone
#

Yeah, the spc is the starting player character field and it will be a list of one

snow whale
#

@elfin beacon hopefully just one more question, if I parse the out list for the starting marauder node I get these nodes:

Out nodes for: marauder
[
  { '31628': 'Melee Damage and Life' },
  { '50904': 'Life and Armour' },
  { '17765': 'Juggernaut' },
  { '24704': 'Chieftain' },
  { '29294': 'Berserker' }
]

Which makes sense because 'Melee Damage and Life' and 'Life and Armour' are the first nodes from the Marauder starting point. But if I check the Witch starting node (similar problem with templar, shadow, duelist, and scion), I get:

Out nodes for: witch
[
  { '57264': 'Spell Damage' },
  { '60791': 'Necromancer' },
  { '16023': 'Elementalist' },
  { '18378': 'Occultist' }
]

So the Witch's starting node's out list is missing the ID for the Energy Shield and Mana Regeneration node at her starting point. Any insight on the missing out node IDs?

mortal bone
#

Also, the ins are always a list of ids of the node you are on. (I.E. { 'id': 1, ..., 'in': [1, 1, 1] } and I don't know why)

radiant hawk
#

heh playing around with the stash api, i can see why poe trade is always behind

#

the api just can't keep up

#

seems like building it around whole stashes instead of items was a mistake, since every time someone reprices an item in a quad tab it has to resend potentially hundreds of items

worthy cape
#

There's several aspects of the river that are a bit silly, information-wise. 🙂

#

But yes, it's definitely not keeping up well.

radiant hawk
#

it's obviously useless for making a trade site (sorry poe trade), but if it can't even keep up with listings, it's useless for... well, everything

radiant hawk
#

eh cool apparently it also sometimes returns invalid json

#

tracking that down will be fun

worthy cape
#

Can't say I've heard any rants about that. Sounds like fun.

prime wasp
#

does /exchange/ update as live searches are found through /search/?

#

cause im live searching fossils for example and i make a request for the info using exchange

#

but im not getting the right prices or even a whisper message

ancient gorge
#

wow. i had no idea how bad the stash api was. zewt's messages made me look at it. what a steaming pile of crap that must be to work with

#

the documentation amounts to just the endpoint and a paragraph explaining the insanity

worthy cape
#

It’s exotic 😉

ancient gorge
#

at least we have an endpoint, i guess? lmao

worthy cape
#

There’s a reason why people do partial parses to get the next ID as fast as possible and defer the payload.

long edge
#

Path of Reworks

radiant hawk
#

also i couldn't find any way to just get the latest ID, and it would have taken literally forever to catch up one page at a time, so I had to write a parallel binary search to find the highest sequence number for each shard

simple ravine
#

zewt: poe.ninja shows the latest in the stats page 😂

radiant hawk
#

if I was going to do anything ongoing with it my script would need to figure it out automatically :P

#

could scrape that page I guess but... probably not doing anything with it anyway since actually getting the api to not fall behind is awful

#

there's an old dev post about a forced delay on the api, which is... sort of amusing now

#

60 second delay? i wish

#

also it explains why people who use poe.trade are always whispering for items that sold five minutes ago

simple ravine
#

yeah, a coupe of years ago we sniped stuff using the river and it actually worked

#

glorious times

white bone
#

@simple ravine Java packaged with the release now 🙂

simple ravine
#

does it install java on the machine?

white bone
#

Nop

simple ravine
#

👍

frigid nova
#

It installs spyware instead 😉

white bone
#

Shhh

rapid pagoda
#

@white bone Careful with that. Java has some weird licensing requirements

white bone
#

Thanks though, I'll check it out

fast citrus
#

block them

frigid nova
#

Do you have any idea what their incentive is?

#

Can you link to the github for your tool?

#

I was under the impression ahk scripts did not need to be executables

fast citrus
#

Oh hey I'm using the auto tracking version of that

halcyon whale
#

sometimes a complied version is more stable as well

#

if it doesn't load anything or use any system variables with % etc and only uses inbuilt functions definitely stick with the script

#

people prefer scripts 90% of the time

#

may I ask what the dropdowns do?

#

are they just references?

#

looks nice man I might download it 😄

#

also wtf is the auto tracking version there is no map tab or atlas api

#

pls tell me its not using OCR

fast citrus
#

clientlog

#

there's an entry when the conqueror spawns and talks

halcyon whale
#

ah ok

#

still that is kinda whacky

#

what if you download it late?

#

after doing some

fast citrus
#

you just update the config

cold stream
#

the auto tracking version is not mine, i didn't look at it yet

fast citrus
#

if you know where you're up to

#

That's what I did at least

halcyon whale
#

nah to fineky I would stick with the manual one

fast citrus
#

Eh it was a one time set up, didn't bother me

#

but yeah, I can see it being a little unfriendly

halcyon whale
#

not a big deal I guess

fast citrus
#

I tend to have long afk periods and my memory aint what it used to be 😛

halcyon whale
#

does the log output with a separator from chat?

#

also can you link the auto trackers repo?

fast citrus
#
2020/01/10 12:02:39 1029857296 ac9 [INFO Client 13380] Al-Hezmin, the Hunter: Dream becomes nightmare in this place.```
halcyon whale
#

where can one find this log?

#

Im new to poe btw

fast citrus
#

Ohh

#

It's in the log folder

#

two differnt locations depending on standalone/steam

halcyon whale
#

appdata, docu, gamefolder?

#

standalone

#

ty

fast citrus
#
C:\Steam\steamapps\common\Path of Exile\logs\Client.txt```
halcyon whale
#

the formatting and effort A+

#

sometimes I wish escapes could be changed with config 😭

#

got it nvm

#

that is why windows > mac

#

because you sub backslash for forward slash in file paths ;d

simple ravine
#

Windows supports forward-slash as well

radiant hawk
#

heh yeah too many people think windows requires backslashes, and bend over backwards in their code to replace them

frigid nova
#

@compact isle I'm noticing that some other aura mods are producing the mods from the auras in the extended info, even though they don't render on the item itself because there is no corresponding mod line. Will those examples be fixed as well? (Singularity, Dying Breath, Faminebind, Kingmaker, Eye of Malice, Garb of the Ephemeral, the phys delev mod, and probably others)

worthy cape
#

@simple ravine Varies based on what API and tools you use, tho.

#

Canonically it's backslashes-or-gtfo 🙂

golden bane
#

And then there are some CLI tools that can handle forward slashes in paths but not in path autocomplete 🤷

simple ravine
#

@worthy cape

worthy cape
#

Yes, as I said, it varies greatly between tools and APIs, and how you mix them.

#

I find that insisting on that you can use them tends to back-fire when some requirement changes and suddenly you're having errors where none previously existed.

#

NT APIs are way less friendly than Shell or user 🙂

#

The named pipe namespace is super fun there, where forward slashes sometimes are equivalent to backslashes.

#

(documentation forbids the use of a backslash in the name as it's supposed to be flat)

#

I much prefer to adhere to the platform convention and not get any surprises. If code needs to manipulate paths, it ought to use a friendly Path type anyway.

violet path
#

backwards line? doing fine
forward slash? gonna crash

simple ravine
#

Hmm yes, Win/NT APIs might not fancy them, that's true.

mint dome
#

do all 3rd party tools require POE to be in windowed mode?

golden bane
#

@mint dome If you mean overlays, then obviously yes

mint dome
#

what about exile diary? i ran a few maps on the character i set up for it and it isnt populating data

golden bane
#

I don't know exile diary specifically, but if it populates itself via the clipboard, whether PoE runs in exclusive mode should not matter

surreal robin
#

what a good trading macro

#

if i wanna like whisp ppl im in lab and stuff

worthy cape
#

@polar island I bought the two books, haven't really read them much. The online book is helpful as a reference I guess, and the boards (users.rust-lang.org) and Discord is probably helpful for interactive questions.

#

My start the second time I tried learning it I just set out to do Advent of Code from knowing nothing about the language 😄

#

Just generally curious or more into networking/services? The async story is shaping up with the keywords and tokio/futures.

#

The well-worn trivia of "you either get a single mutable reference or multiple immutable references" is good to have in the back of your mind when it comes to writing code.

#

I've been curious about whether I could make a crate to pull the river, but have no idea how to design something like that.

worthy cape
worthy cape
#

(mostly due to it being the first big project I did that evolved over time)

dusky charm
#

is there a way to manually change certain value in an item in currency cop

#

because its such a jebait when it gives clear/sepia/amber oil 1c each

long edge
#

this channel is for tool developing, not tool using

#

otherwise, id suggest a different channel, reddit question or post in ccop thread in poe forums

frigid nova
#

Does anyone know if the "tiers" which show up on advanced mod description are in the ggpk?

lavish gust
#

Anyone gets sometimes angry at Windows? Just realized there is SetProcessDpiAwareness() but also SetProcessDPIAware(). One is kept for back-compat but the "DPI" naming difference is mildly infuriating.

junior siren
#

Anyone familiar with working in java. I'm trying to figure out how to read the system.err console, but I can't figure out how to do so.

lavish gust
#

you mean the system's error stream?

junior siren
#

yes

lavish gust
#

AFAIK stderr is write-only

#

unless you mean that you want to run a different process and capture it's stderr

junior siren
#

hmm I'm trying to access console logs from one of the new POETrade tools written in java while it's running. In the log.properties file I see it's a console log handler so I'm assuming there's something I need to setup to see them

lavish gust
#

the simplest way would be to open a console and redirect its stderr output (eg to a file)

junior siren
#

I see, how do I open that console? That may be enough there if I can see the output in real time

lavish gust
#

to be precise: cmd command on Windows, /usr/bin/sh on any POSIX-compliant system (eg Linux)

#

then simply start the program in it

junior siren
#

ah

lavish gust
#

most consoles by default will merge programs stdout and stderr

junior siren
#

I see. The program is started by a bat file. I assume if I just run the contents of the bat in cmd I'll get the console output?

lavish gust
#

yes

junior siren
#

Sweet. Thank you very much

lavish gust
#

bat files are just console commands in a file

#

you should be able to execute the bat file in the console directly, although I don't know then what will happen with the output (no experience on Windows, but on unix system scripts are by default run in separate shells)

junior siren
#

Yeah I know my way around cmd prompt well enough. Not used to it being referred to as console. Got tied up into thinking it was a JVM feature I could pull up

lavish gust
#

its more of a system feature

#

by "console" or "terminal" people mean "the program bundled with the OS that lets you invoke shell calls"

junior siren
#

good to know. Thank you

golden bane
#

Context matters though: When working with front-end web technology, it most likely refers to the browser's own console, etc.

lavish gust
#

ofc, some terms like "interface" or "static" can have vastly different meanings depending on the context

radiant hawk
#

heh it seems like it would take some ugly heuristics and parallel requests to use the trade api at all

#

it takes about 2 seconds to make a request (for me), and from what I can tell that's over a second of delay, then all the data at once, as if it's all bound by the internal processing and not bandwidth

worthy cape
#

Are you grabbing the next ID out of the payload before trying to parse JSON?

radiant hawk
#

actually it's going through cloudflare, I bet it's buffering

#

i thought about that, but since all the data is coming at once after the delay, that's useless

lavish gust
#

welcome to networking

worthy cape
#

One thing I've been wondering about is if there's any benefit to open a connection ahead of time to get rid of any eventual up-front delay.

radiant hawk
#

1939ms to first chunk (with the next id), time to all data 2142ms

lavish gust
#

HTTP 1.1 lets you hold the connection

radiant hawk
#

establishing the connection is maybe 200ms

lavish gust
#

this lets you avoid the 3-way handshake for every request

worthy cape
#

Oh... for some reason I thought that was fancy future HTTP tech.

#

Mixing it up with multiplexing.

radiant hawk
#

oh sorry thought you were talking to me :P

#

yeah modern http will keep the connection open

#

i'm strongly suspecting it's cloudflare buffering the response though

#

since it's sending the whole response in like 200ms once data starts flowing, which is a bit too fast

lavish gust
#

Cloudflare has other problems. So far I have noticed it does not disconnect gracefully, it stops on SSL short read which is an error occuring during man-in-the-middle attacks

#

Some services use this as an "bandwidth optimization" but it looks very shady from the client's side

#

the client gets the data but according to the spec if the disconnect is not graceful it should assume the whole transfer was man-in-the-middle attack

radiant hawk
#

i wonder if the api used to be more responsive, then one day they shoved everything behind cloudflare, and didn't notice it screwed up the trade api

#

to be fair it shouldn't matter, it's only the annoying "peek at the next id" shenanigans that make it matter at all

#

(if that's even what's happening, but it seems likely)

#

if anyone else in here is using the api and doing similar things, i'm curious if you see the same behavior

vital loom
#

Not sure this is quite the right channel but giving it a shot. Does GGG expose attributes to the api so that you can sort by them and if so does poe.ninja support that in some way they don’t have in the UI.

golden bane
#

@vital loom You would have to fetch that data and sort it yourself

vital loom
#

I can’t find their search strings

golden bane
vital loom
#

It is fetchable though

#

That should have a question mark at the end 🙂

golden bane
#

For your particular request, you would need to

  • Fetch all accounts and characters on the ladder
  • Parse their builds using something like headless PoB
  • Dump all stats that interest you somewhere
  • Sort your build representation after a specific stat
vital loom
#

Ahh so not an API call directly asking for that

golden bane
#

No

vital loom
#

Makes sense, that’s a lot of overhead for those queries on the fly and not a need to expose that

golden bane
#

Exactly

vital loom
#

I wonder if poe.ninja has thought about adding in that kind of sorting with attribute stacking popularity here and there on builds

golden bane
#

You can ask rasmuskl#2841 (it's author) for that

frigid nova
#

@fickle yew

vital loom
#

You would probably want to only do a minimum and above like levels are currently done

#

Strength > 1200 for instance

#

Things like lethal pride would throw that off a bit though so maybe not

golden bane
#

Just undershoot your target strength

vital loom
#

They are the exception to the rule so probably just blueprint the search parameters without worrying about them

inland kestrel
#

Having a slow brain moment. I'm trying to get my bearings with the existing poe tools. Generating my own set of .dat and .json files from pypoe. I'm trying to use a script that comes with repoe to (I think) regenerate his simplified json files found in RePoE/data but I don't use python often and am getting the following issue error:

E:\RePoE\RePoE>python run_parser.py
Traceback (most recent call last):
  File "run_parser.py", line 3, in <module>
    from RePoE import add_jsons_to_global
ModuleNotFoundError: No module named 'RePoE'
frigid nova
#

@inland kestrel follow the instructions in the readme to pip install repoe

inland kestrel
#

ahhhh... right

#

it's basically the same instructions pypoe had and realize now that I made a bad assumption that i've already done that - thanks

#

ah... it actually has the pypoe instructions so maybe that's why i read over it quickly. I see now that repoe has it's own pip install

golden bane
#

Should both just be on PyPI imho

inland kestrel
#

so, with repoe, I actually didn't need to use pypoe_exporter, right?

fickle yew
#

@vital loom The most requested extra stat so far is mana. But strength could be interesting in some cases. My main problem at the moment is the width of the character table. So I have to be a bit creative.. It is something I have on my list though.

fickle yew
#

Does anyone know how translation ordering is described in GGPK, specifically magic and rare items. Like in spanish "Catalysing Driftwood Sceptre of Needling" becomes "Cetro de Madeira Balsa Catalisador de Agulhar"... and the type of the weapon is "Cetro". So instead of having "<prefix> <base> <suffix>" it's actually "<base> <prefix> <suffix>"... But hm.

#

^ @misty merlin I saw you discussed this in a github issue as well.. Did you figure anything out?

#

Ah. It's actually in ClientStrings.dat. "MagicNamePrefixSuffix": "%2% %1% %3%"

worthy cape
#

Hrm. How does rate limiting interact with HTTP2, is it per sub-stream or something?

vital loom
#

I would do Life, ES, Mana, DEX, INT, STR, Crit Multi?

#

Could have a few variables in there that people can do manually if they are so inclined

foggy bear
#

https://github.com/AkumaNoTsubasa/Izaro
Made my Izaro Bot public, as I hit the limits on my abilities and need help to be able to advance with the completion of this awesome bot that already serves good work on a multitude of servers. Hope a few of you like the bot too and would like to contribute eyesofzeal

fickle yew
#

@vital loom yeah that could work. I think the solution might be to have one column in the table where you can select which stat to show.

vital loom
#

You’re the best @fickle yew

fickle yew
#

Does 3 word rare item names even exist? (there's a formatting string for them in the ggpk)

wooden shadow
#

my mercury trade doesn't work when trades pop up

#

the toolbar always shows

#

but then i get a trade whisper and nothing shows up on the trade helper

violet path
#

mercurytrade afaik is no longer being supported, you'll have to find another trade helper

#

or rather, you can keep using it knowing that problems like that will always pop up

wooden shadow
#

ah

#

is there a similar alternative to use? i mainly want the trade helper feature and a betrayal cheatsheet

violet path
wooden shadow
#

ah alright, ty

quick gorge
#

Just in case someone wants or needs it...
i found myself bored and wanted to do something to make identifying good flipping currency easier.

outcome of that thought is a greasemonkey script (tested it on firefox) for poe.ninja.
it basically adds profit margins in chaos to the table and sorts the entries descending by profit.
i also have defined some variables for customizuation at the top of the script.

but beware of the "poe.ninja-internal"-sorting! if you sort the table by clicking on the header, the script breaks and you have to reload. if someone wants to fix that: message me. for my purposes, it's fine :D
https://gist.github.com/KaiL0r/1d6d1429959c9b0cc09e0e06bd541a57

Gist

poe.ninja profit display (GreaseMonkey Script, tested in FF 72.0.1) - poeninja-profit-display.user.js

inland kestrel
obtuse citrus
#

it's probably delve fossils

foggy bear
hazy fog
foggy bear
#

but dare you laugh at my sexy skills and codelayout akuma_aufreg_zappel

hazy fog
#

I hav e no time to laugh at things I'm mid dungeon with my fc

foggy bear
#

x)

#

good loot ^^

serene belfry
#

@foggy bear what do you mean by "failsafe checks" in the README?

worthy cape
#

What kind of intermediary storage do you people feed your river into? Does it go into something dedicated for a particular service you're building, or just raw onto some generic DB/bus?

#

I have no idea what I'm doing with web APIs, if you can't tell 😄

fickle yew
#

Ninja uses postgresql as a store. I know some others use elasticsearch

worthy cape
#

How raw is that data, just the blob as-is, or partly digested?

#

I should see if my postgres machine works... it had some upgrade trauma recently.

#

Turns out that if you let the OS auto-install new postgres versions from 10.low to 12.1, the DB needs to be quite migrated ^^

radiant hawk
#

yeah you never auto-upgrade major versions of a database heh

#

i haven't looked into database backends in a while, but I'd definitely never ever touch sql

#

especially for something as low-volume as poe trade data (you're not dealing with terabytes of data here)

foggy bear
#

@serene belfry it means that if you enter a wrong league name it shows you a list of all current trading-enabled active leagues, on using a wrong currency item, the bot will put out a list of items containing your search term, etc.

fickle yew
#

@worthy cape ninjas data is partly digested and I don't store items that are not relevant to me. If I just stored the raw river my db would be 10x

hollow belfry
inland kestrel
#

I'm looking to do a stat_translations lookup for base_chance_to_freeze_% (on behalf of mod ChanceToFreezeAddedDamageInfluence1_. There are three translation entries. It's odd because it looks like it's designed to handle mods with multiple values... but this mod has a single value, "(4-6)% chance to Freeze". That's fine I guess... but what are the rules for which condition array item should be used?

#

If the stat has a min value of 4 and max value of 6, should it match against

  {},
  {
    "min": 1
  }
],

or

"condition": [
  {
    "max": 99,
    "min": 1
  },
  {
    "max": 0,
    "min": 0
  }
],
#

Now I know the answer is the latter because of the accompanied format string. But was curious if there's some other translation lookup rule I should know / be following

#

Kind of curious what would match against that first condition (translating to "Always Freezes Enemies on Hit")

#

Pretty sure the stat_translation id for that one is always_freeze which I didn't see a reference to in mods.json. Maybe it came from somewhere else?

obtuse citrus
#

Look through the dat files for references to the according Stats.dat row that has always_freeze, there is something probably

#

also if you use repoe it does some filtering on the json files

#

it doesnt include all mods

inland kestrel
#

ah, okay. I am using the json files produced from repoe

inland kestrel
#

Omega, where did the Tags come from on the wiki for each modifier?

#

Is that inferred from the mod id or translated text?

#

or is that from a table I haven't stumbled upon yet :-X

#

Ah, I see ... mod_types

frigid nova
#

All of the info you are looking for is in repoe @inland kestrel

inland kestrel
#

alright, will do

frigid nova
#

To answer your first question - there are multiple stats which lead to the same effect. Often there are binary effects and chance effects, such as freeze and chance to freeze.

#

(This makes disambiguating mods based on their stat translations tricky)

inland kestrel
#

will the reverse always be deterministic? or are there still odd cases?

frigid nova
#

All stats only contribute to a single stat entry

#

so the mapping from a list of stats to the stat translations they generate is well-defined

inland kestrel
#

My example above for ChanceToFreezeAddedDamageInfluence1_ seemed odd still. There was only a single stat (range) and it was supposed to match a translation with a condition min:0 max:0 (for the second, non-existent stat)

frigid nova
#

ChanceToFreezeAddedDamageInfluence1_ grants the stat base_chance_to_freeze_%. It is in a stat translation with always_freeze. If base_chance_to_freeze_% is between 1 and 99 and always_freeze is 0 then the string is "{0}% chance to Freeze"

#

always_freeze, like all stats, is zero by default.

inland kestrel
#

Ah, I see. Implied zero

obtuse citrus
#

tags come from tags

#

.> it's a foreign key to tags.dat in mods.dat

#

and the reverse will not be always deterministic

#

due to rounding values and omitting values

grave wren
#

hm did anyone here look at pob's implementation of phantasm support? Depending on the base skill (not just lvl) the dps varies a ton

#

if i use raise spectre as a base it's at 190k per phantasm

#

if i use ek as a base it's 110k

sleek nacelle
#

@grave wren way late, but there's two things messing it up:

  1. it seems like the phantasms are incorrectly inheriting some things from the skill it's supporting. if you use a skill like Arc, the damage mods from great volley aren't applying to the phantasms even though they should, so your damage goes up a bit. if you use a projectile skill, the damage mods from greater volley do apply and the phantasms have lower DPS.

  2. this one's more complicated: phantasms actually(as in, intentionally in-game) gain flat damage based on the level of the skill gem it's supporting. it seems like the way PoB does it actually makes the phantasms look at the level requirement of the gem for some reason. also, the raise spectre gem has its own level modifier for the max level of spectres. so somehow, the phantasm support seems to be looking at the max spectre level instead of the level req. of the gem, which is giving the phantasms more flat damage than intended.

you can see that if you set Raise Spectre to level 16 and the spectres have a max level of 70, then compare it to your level 20 EK gem which requires level 70, the DPS of the phantasms will be the exact same on both skills.

#

and the second thing might be wrong, that's just a correlation I noticed. I actually can't find anything in PoB's code that tells it how much flat damage to give the phantasms, but it's easily testable and you can see the functionality is definitely there in some form. that's the only thing I can think of that it would be looking at

sleek nacelle
#

ok last update lol, was reading into a little bit more while I ate since I couldn't find a definite answer, and I found one. in PoB all minions gain damage based on their level. minion level checks for three things: is it equal to enemy level, is it set by the gem, or is it equal to the level requirement, and it seems to use whichever of those applies first. the spectre's minion level is being set by the gem using the "minionlevel" skilldata mod, and since it uses a skilldata mod it's applying to the whole socket group including the phantasm support, so the phantasms just use whatever the spectre's level is.

pseudo ocean
#

anyone know of some way to pull voice lines out of the game? would like to sample brutus for a song I'm working on for the talent competition

#

the only thing that I can think of is to record footage of the game with all sounds turned except voice turned off and hoping he uses the voice line that I want to use, then use ffmpeg to pull the audio track

#

I suppose it wouldn't particularly matter if pulling directly or recording ultimately end up with a lossy recording

rapid pagoda
#

@pseudo ocean You can pull them out of the game's data files using a tool like VisualGGPK. The Brutus audio will be under either Audio\Dialogue\NPC\Brute or Audio\Dialogue\NPC\BruteCombat

pseudo ocean
#

you are an incredible person, holy moly

#

thanks a bunch!

rapid pagoda
#

Interestingly, I don't think Brute\Brute_12_Death.ogg ("Sweet death... we've been waiting") is used in game.

pseudo ocean
#

hi quality oggs, nice

#

yea I don't think I've ever heard him say that

#

some neat effects on the voice too, makes my life slightly easier

rapid pagoda
#

There's a surprising amount of unused audio in the data files. Some alternate takes, some league-specific content which is no longer accessible, some things which never got used at all

#

Sin has lines for quests to capture a couple of gods which don't appear in the game, for example.

pseudo ocean
#

interesting

grave wren
#

@sleek nacelle awesome thank you for the in-depth analysis templarthumbsup

rapid pagoda
#

@grave wren If you dig any deeper into this, I'd be really interested to know how minion level works for pure Soulwrest phantasm configurations. I went through most of last league with no clue how much damage I was doing, besides "enough"

grave wren
#

That's where I am standing atm. I did it once without giving it much thought but I think the only way to properly get the info is recording small timeframes with known bosses

#

Phys configuration should be as close to pure damage as possible

rapid pagoda
#

Art/2DArt/Cursors

#

oh, whoa, never mind. those are unused 😛

golden bane
#

The hand with the energy orb thing looks interesting

#

I can't find the cursor, maybe it's embedded in the game client?

rapid pagoda
#

ah, sure enough, it is. cursor resource 102 in PathOfExile.exe

#

it's a pain in the ass :/

#

actually, here's a better job of it. I've used a bright green background to make it easy to matte

violet path
#

i think the problem is on ggg's end, like right now if I try to just have a real live search on the site it's stuck on connecting

radiant hawk
#

the trade site's websockets fail to connect very often for me

#

on the website i just hit the button and it sits there retrying and I forget about it until it figures it out, but it's a bit broken

#

just fails with some 5xx

vital loom
#

is there a good tutorial/resource out there to start pulling down the character database from the API?

mortal bone
#

I don't think anyone here has really made any blogs or anything

deft jolt
#

character database?

mortal bone
#

I just assumed they meant the "character-window " api

vital loom
#

yeah not sure I am asking the correct question

#

I want to pull all characters in a league, like poe.ninja or similar sites and dump their information into a database

#

not sure where I am starting though

ionic holly
#

first get all leagues with http://www.pathofexile.com/api/trade/data/leagues

then u can find character data using this api doc http://www.pathofexile.com/developer/docs/api-resource-ladders

you can then find more detailed data about the character api using this api doc https://app.swaggerhub.com/apis-docs/Chuanhsing/poe/1.0.0#/default

#

Thats as much as I know about poe's public api

mortal bone
#

That will only get you the top 15k characters in a given league. In order to get more than that you will need to parse the stash tab api to get characters/accounts

worthy cape
#
river=> SELECT payload -> 'next_change_id' as next_change_id FROM cache ORDER BY fetched_at DESC LIMIT 1;
                   next_change_id
-----------------------------------------------------
 "578553246-596356122-564753409-642912668-611183067"
(1 row)

Time: 63914.008 ms (01:03.914)
#

Protip - don't shove river chunks into a json field 😄

#

They also make pgAdmin 4 a bit non-interactive when it tries to show results 😄

worthy cape
#

How do I get up to speed with the river with the current rate limits? Not overly keen on spinning up a pool of machines to fetch harder.

simple ravine
#

1 machine, multiple IPs? 😄

deft jolt
#

Up to speed?

worthy cape
#

Feels like I never reach the end at the current rate I'm fetching from the last change ID advertised on ninja.

deft jolt
#

You can have concurrent downloads and send out iirc roughly 2.8 requests per second

#

Grab the change id from the buffer before all the json is read in and start a new request

worthy cape
#

@simple ravine The cloud I intend to play with has quite few public IPv4 IPs, sadly.

deft jolt
#

That does the trick for me at least

simple ravine
#

which cloud is that?

worthy cape
#

"Private" one at work.

simple ravine
#

ah

#

Azure Stack, OpenShift?

worthy cape
#

OpenStack, multiple regions but no federation.

#

Good to know that it's physically possible to catch the river, just got to fix up my rate limiter.

#

I'm supposed to be running the cloud, so I figured I'd try deploying some PoE toys in it to see how it actually works.

#

A bummer that GGG do not speak IPv6, those we have lots of ^^

#

I don't look forward to writing a web snout for this service.

simple ravine
#

web snout?

worthy cape
#

webb-tryne

#

Frontend 😛

#

The thing I'm building to get my hands dirty with web tech is a web app for me and my mates to monitor trade latency for our sell tabs.

#

Small web form that gets notified over websocket and lists changes to your stashes, to get a feeling for if your stuff has propagated out yet or not.

#

In a perfect world it would not be needed, but with current upstream...

simple ravine
#

what does it help you do, with that feeling?

worthy cape
#

It might help you recognize if a whisper you get seem to be automated snipers or long enough after being public that it's a regular human.

#

It could also help you not go down into a map after listing something, giving it a chance to be found in searches.

#

(but mostly just to see how one builds something like this, really)

worthy cape
#

Databases are black magic. Seems like my performance bottleneck might've been the field I LIMITed on.

#

More indices for the index god.

mortal bone
#

You basically need to do what nib suggested, once you get the 4th quote you know you have the full id, so you can move onto that. It shouldn't take very long to get the id

worthy cape
#

It takes around 2.2-2.8s for the headers and the ID bytes to come in, and around 800ms to get the payload.

mortal bone
#

that is brutal

worthy cape
#

Not sure if it's the time of day, geographical region, or my domestic 100/100 internet

delicate field
#

how does mercury trade's chat scanner actually scan chat

worthy cape
#

@delicate field The only interface to the game client is reading the log in Client.txt

delicate field
#

that holds that much info? including chat? o_o

worthy cape
#

Everything you see in your chat window (except most Korean accounts), and some area transitions.

#

Client-side trade tools scan it for messages that look like the format that trade sites make, and pop cute GUI for you.

elfin spear
#

i thought of something interesting

#

somehow connecting the loot drops to a hue light

#

or a smart light

#

so when a good gear drops it changes colors to the rarity

rapid pagoda
#

amusing idea, but that's not something the game exposes in a usable way

worthy cape
#

Finally managed to whip the cloud instance into shape, similar numbers there on a proper pipe.

#

(also found out the hard way that the Rust install script OOMs hard on 512M of RAM)

rapid pagoda
#

short of doing something silly like writing a loot filter that plays tones when items drop, then recognizing those tones externally?

golden bane
#

It's whacky, but entirely possible. The biggest downside is that you will most likely have to give up in-game audio altogether for best results

frigid nova
#

one should keep in mind the game infamously skips drop sounds all the time.

golden bane
#

More audio channels help to an extent, but yeah

rapid pagoda
#

I was thinking more along the lines of pure tone detection -- like DTMF. That can work reasonably with other background noise

golden bane
#

I think this would work best if you would record a sizeable amount of in-game audio beforehand to find good frequency ranges

dark wadi
#

Hey, launched myself into creating some kind of stash organiser.

-In python as I found most 3rd party stuff for this game is in python. correct ?
-Any resources for the program to find on-screen stuff, like those trading buds that invite you, click your frame+click trade etc. ?

Thx.

golden bane
#
  1. Python is popular and a good choice (besides others)
  2. Taking inspiration from botting tools is not, however
#

If with stash organiser you mean something that automatically sorts your stash, that would be a no-no

dark wadi
#

It was exactly what I had in mind. Something that could take a loot tab and automatically filter out currency, essences, cards, etc. into their respective tabs.

Your answer makes me wonder if that would be against ToS ? If so, how are the currency bots running? Those are totally legit and have been accepted a while back

golden bane
#

I don't know where you got that impression from

#

Some players may like trading with bots, but they're against ToS

dark wadi
#

This is unexpected to say the least. They have been golden standard for currency exchange for a while now...

violet path
#

and are 100% against ToS

golden bane
#

As I said

frigid nova
#

There is currently a post on the front page of reddit addressing this exact issue

violet path
#

the tos is pretty anti-automation, you'll be hardpressed to find any legal tools that could help with auto-tab sorting sadly

dark wadi
#

Thanks for the input. I'm crearly not informed enough.

violet path
#

well ignore that then

golden bane
#

If tab names were not server-side, how would you get them on a new installation?

dark wadi
#

But I must ask, why are they against ToS ? because they click items such as currency and trade automatically ? Okay. So the trade helper that a lot of player use are too then..?

frigid nova
#

ToS prohibits tools which automate more than one serverside action per user input.

#

We can tell you what is in the ToS, we cannot tell you why the ToS is the way it is.

golden bane
#

If you mean the 8+ trade macro alternatives that are out there: they are all compliant to my knowledge

#

There are console commands for many tasks, which are hotkeyable

#

Stuff like /invite, /kick, or /hideout

#

Those are allowed, as long as you have to press a different button for each, manually, without cycling different inputs

dark wadi
#

Okay, how does a tool would normally use those? by automating a click in the chat box and automate typing it in + enter ? Or is there a console behind PoE that's accessible

golden bane
#

Ingame chat?

frigid nova
#

The act of sending a message is considered one serverside action

dark wadi
#

so that's legal.

#

good

#

Thank you all

worthy cape
#

@dark wadi As long as you don't have a text field or modal dialog focused, sending an Enter opens chat reliably, so no need for a click. So they <CR>/kick {hardcoded_own_name}<CR> and assume you're not holding it wrong.

#

Mercury's "hover the trade to see where in the stash the thing is" feature requires you to hand-place the widget so that the outline will be roughly in the right place, it pulls nothing from the game.

worthy cape
#

Heh, it seems like I've accidentally broken our cloud. Probably unrelated to pulling down the river. Probably brittlHmm

simple ravine
#

probably

worthy cape
#

Phew, not me.

ionic holly
#

been working on this crafting simulator for the past week, and I think its at the point where I can start getting some feedback.
https://leftn.github.io/

im terrible at html/css so the interface will probably always look like shite, even as i develop this further.

#

it isn't obvious because of the broken css/html, but there is a working crafting bench tab.
but all the other stuff like fossils and essences are wip.

inland kestrel
ionic holly
#

mod groups + item types are being respected, but yeah merging stats is something that needs to be worked on

golden bane
#

You really need to indicate that you can scroll through the item bases

ionic holly
#

got any suggestions on how to make it more obvious? im not a ux kinda guy :S

violet path
#

should show info on the mods, like which are prefixes/suffixes, tier, name etc.

golden bane
#

Scrollbar?

ionic holly
#

theres is one, i guess its just not very visible

golden bane
#

Not visible at all on mobile

ionic holly
#

ah, i did 0 testing on mobile

#

as for displaying mod details, thats a low priority feature, so probs won't be added until I get all the other crafting options working

worthy cape
#

How do people store assorted small state for "stateless" programs running against primarily RDBMS? Separate table with a few columns/rows with the state they need?

#

(like at what ID in the river they've processed thus far, etc.)

#

Feels wrong to put things in a key-value table in postgres, or have a bajillion columns for all the settings.

#

I mostly do graphics dev on desktop, so there's essentially no persistent state of any kind in my life 🙂

#

If I had to guess, overzealous private watchers.

#

(I have no actual idea tho)

#

Like I've got one process whose only purpose in life is to pull down the river and shove it into storage, while another would walk that cached stream and pull out the information I need.

#

If I want that second one to be restartable, I need to keep track of how far it has gotten somehow.

simple ravine
#

statless services should be stateless, i.e. pure functions / functional

#

they take inputs, process and returns output

#

feels like it comes down to separation of concern, between stateless and stateful parts of your system

#

i.e.

  • River orchestration (stateful)
  • River fetcher (stateless)

where fetcher in this case likely

  • emits messages to a bus/queue when new next_id is found
  • stores the full JSON to a blob storage
  • emits message to a bus/queue when new JSON blob can be processed

orchestrator reacts/pull these messages, and do whatever it should with this, likely submit new request to the pull service, asks a stash processor to handle the JSON

grave wren
#

Sounds like a blackboard patternish thing

worthy cape
#

I've got an allergic reaction to Mongo and Rabbit. I should probably try to get over that.

grave wren
#

Never tried rabbitmq either but I dig mqs

worthy cape
#

One of the best sessions I attended at the OpenStack Summit was one where there was just some blokes sitting on stage telling battle stories on the multitude of ways RabbitMQ screwed up 😄

frigid nova
#

@ionic holly your roller doesn't respect the affix count the game uses.

ionic holly
#

how so? I made sure to split prefix and suffix apart, and can only add them if their count is < 2

frigid nova
#

I'm chaosing items which have 2 affixes

#

chaos orbs cannot roll 2 affixes on items with 6 total affixes

#

It also appears that you are not respecting tags

ionic holly
#

arn't chaos orbs meant to reroll the entire item?

frigid nova
#

Yes, large empirical tests have shown the number of affixes from a chaos orb on a 6 affix item follow the distribution 1:4:7 for 6,5,4 total affixes

ionic holly
#

huh, well behind the scenes, i just did a scour > alch for the chaos

frigid nova
#

I think you are missing the point I am making.

ionic holly
#

yes i am

frigid nova
#

A chaos orb will never make a body armour have 2 affixes

#

your crafting simulator does

ionic holly
#

so the minimum number of mods on an item after being choased is 4?

frigid nova
#

Yes.

#

And the distribution is 1/12 chance for 6 mods, 4/12 chance for 5 mods, and 7/12 chance for 6 mods

ionic holly
#

ok

#

is it the same for alchemy orbs?

frigid nova
#

In addition, it doesn't appear you take into account tags in your crafting simulator.

tight storm
#

Is there a recommended api wrapper available on a GitHub somewhere?

#

To make queries on what is available on premium tabs

frigid nova
#

@tight storm unclear what exactly you want - the only api which you can query is the official trade website

tight storm
#

Like someone wrapping up the requests in a python or Java library

#

So I can just call findItems(mods...)

worthy cape
#

No idea how well it works.

tight storm
#

I don't know rust :(

worthy cape
#

That covers most of the upstream API, but won't help you with interfacing with trade sites.

#

Depends really on what it is you're trying to achieve.

tight storm
#

Basically sort of like the official trade site but from command line

#

I guess I could parse the result of the web request

#

But I'd rather use a more direct method

frigid nova
#

to my knowledge, you won't be able to achieve that without either - parsing the river and storing everything in a database, or, querying directly to the official trade website

deft jolt
#

Hm, why not just use the website? Sounds like that would solve the problem

worthy cape
#

For poe.trade you might be able to construct queries similar to what poetrademacro does, but that still needs you to act as a client to that site.

#

I've got no idea how that conjures up search strings.

tight storm
#

I see, I thought the official trade site had an API available

frigid nova
#

it does

tight storm
#

Oh, so I can send requests to say find items with x requirements and y mods and get back a json response?

#

If so, I guess I'm just looking for wrapper library that already sends the REST messages properly and parses the json response

frigid nova
#

I don't know of one that exists. My only advice is to use asyncio for the requests 🙃

tight storm
#

Oh that's surprising that nothing exists for that

radiant hawk
#

don't know how documented it is, but it's easy enough to look at the requests in a browser

carmine merlin
#

@tight storm I’ve got something similar to what you want but it works through google sheets to update price info

#

Currently using an importJSON script that someone else wrote to be able to parse the data for the info I want

#

I’m not sure how to wrap it up into a nice little program though

lavish gust
#

Can anyone suggest me a good pseudocode to describe item sockets (the real code, not JSON from API)? I'm making a filter-related tool and when implementing a filter debugger, I need to somehow represent item links and colors in a convienient way that allows to easily check whether item matches eg Sockets 6 or SocketGroup RGB.
Initially thought to simply have an array of R/G/B/W/A enums, but then it can not represent links between them. And I think I can do better than a type with 6 enum fields and 5 booleans to denote links between sockets.

worthy cape
#

Denormalized structures tend to be easier to query by duplicating data. You could have link chains each holding counts of each colour, and also track the total number separately instead of summing up all the individual lengths.

#

Less combinatoric to query than the loose sockets+haslink structure you don't like.

lavish gust
#

So basically an array of linked socket groups where each group is an array of colors? Eg an item with R-R G-B-B W would be:

  • array of 3 linked groups
    • 1st group: R, R
    • 2nd group: G, B, B
    • 3rd group: W
      query item socket count: sum the size of all arrays (2 + 3 +1 = 6)
distant rock
#

Not sure this is what you're looking for but I can share some snippets of how we parse sockets and links in Exilence:


https://github.com/viktorgullmark/exilence/blob/master/ExilenceClient/src/app/authorize/components/char-profile/item/item-sockets/item-sockets.component.scss

https://github.com/viktorgullmark/exilence/blob/master/ExilenceClient/src/app/shared/interfaces/socket.interface.ts```

@lavish gust
lavish gust
#

@distant rock I don't get how you structure socket information. Read both item helper and socket.interface but I still dont know how you store sockets in an item type.

  • socket has a group number - sockets with the same value of this field are linked, am I right?
  • What is the purpose of attr boolean?
  • Why is the color a string? Shouldn't this be an enum given there is a known, limited set of values (R/G/B/W/A/D)?
distant rock
#
  • I'm pretty sure that's the case yea, long time since I wrote this part, but you can figure out the position of sockets and which ones are linked by looping them out and connecting the ones in the same group as we do.

  • The attribute is typed wrong, it's supposed to be a string. It represents the type of gem (D = dexterity, I = intelligence etc), check the CSS file for more info.

  • This is not a strongly typed example. We use typescript but we don't force types in this app, it's pretty old and being rewritten to Exilence Next which we're working on atm.

@lavish gust

violet path
#

@carmine merlin if you ever find a way to make a good program out of a sheet, i've got a pretty big one i'd like to switch

lavish gust
#

@distant rock Ok, so it is quite similar to my previous example. I think that an array of socket groups where each group is an array of color-enum will be the best approach. I can easily count the total number of sockets by summing up sizes of all groups, and each group can be easily tested if it satisfied filter's requirement on specific amount of colors in that group.

We use typescript but we don't force types in this app
Reminds me of some debugging nightmares, I really hate type-unsafe interfaces and similar things, did not know that TS doesn't actually enforce them

distant rock
#

Sounds good!

Well, you can enforce them, but we configured it more loosely in the old app, doing a more strict approach now 🙂

#

Typescript is very configurable since many projects require a mix of JS / TS in transition phases etc

lavish gust
#

@distant rock Very configurable? I work with C and C++ stuff. Know the pain of customizability/configuration. Major compilers have hundreds of options regarding warnings, optimization, extensions, platform-specific stuff and so on. There are still some libraries made in 80s or 90s which are not valid C and require a lot of workaround to make them work. The worst ones "poison" or hijack any descendant project with some optimization-reducing flags/code macros because some people writing it a long time ago did not bother to write standard-comformant code. This is why I enable the most pedantic warnings on any project and focus on very strong typing.

I remember some uni assignment and was working with some simple website, had to write a couple of functions in JS that interacted with jQuery. It was a nightmare to guess whetehr I get an object, a string, what fields does it have, what are the invariants. No documentation and the runtime debug was the only way. And of course like 99% of data were strings so no easy way to validate anything.

Worked a bit with Python too. Couldn't write any larger code (>50 lines) without type hints. They are not actually enforced by the interpreter, but they help with writing type-correct code and some smart IDEs can perform static analysis on it and underline definitely-wrong function calls.

What were your reasons to rewrite Exilence instead of refactoring? Too many issues?

distant rock
#

I mean yea that work's in a perfect world where you create all your projects from scratch, but what if you end up in a project that's already built in JS and want to move to typescript? Personally I agree and would have everything as strict as possible for maximum typesafety.

The reason to rebuild it is that we had another focus when creating the initial version. We wanted to let players inspect their friends and help with gearing etc, but we quickly realized that the net worth/currency aspect was the most frequently used part of the app. Along with this we had some performance issues, since we stored a lot of data locally on the client which led to memory issues and unresponsiveness etc.

Now we're setting up a backend to store data (secured with OAuth) and have shifted the focus of the app to be more net worth oriented basically, along with all the feedback we've gotten the past year with old Exilence.

@lavish gust

lavish gust
#

@distant rock What are you using for the frontend? Since this is JS/TS, I guess electron?

distant rock
lavish gust
#

Got any metrics so far (RAM/CPU usage, installation size)? Electron has been criticized for its bloatness but I heard also it is possible to tame it and make it quite performant. JS/TS is completely out of my world though, but I'm interested what are numbers in comparison to a native application. My project is definitely smaller when it comes to the size of UI (it's more about internal logic to support loot filter extensions, ~10k lines so far) and I'm also partially building/contibuting to a new GUI library (for fun/profit/experience/resume/etc reasons) so the development of actual features is rather slow but ... for the love of Kuduku, the executables consume <5 MB RAM without all optimizations. Kinda funny that adding a pretty few-megs-size background image for the UI doubles it's memory usage...

golden bane
#

@distant rock I'd be interested in how mobx compares to redux, I guess it's easier to start with but less powerful?

distant rock
#

@golden bane I wouldnt say it's less powerful, been comparing the two a lot myself (used redux in the past). You can achieve the same things, but I prefer the observable way of thinking in Mobx. Mobx is also more suited if you come from an object-oriented background (imo) compared to Redux which is more functional.

I mean, it's easier to do mistakes in mobx if you don't know how to do stuff, since it's more free and less boilerplate.

#

By default it's not very strict, but you can enable strict mode and only allow observables to change from within actions etc, so there are ways to structure it properly without it getting messy, but I'm still learning it and wouldn't say I'm very experienced with it yet, I took this opportunity to learn more about it basically

golden bane
#

I see, thanks! Seems like I will stick to learning redux, but good to know there is also a less functional alternative

distant rock
#

@lavish gust Electron by itself eats quite a lot of RAM and will never behave the same as a native app, but I don't see this as a problem, especially for the cross-platform functionality you get out of it, e.g we could port our app to the web very easily if the OAuth implementation was released to the stash tab API.

golden bane
#

For my purpose I want to have the backend also be useable as standalone, so redux makes more sense for me

distant rock
#

That's not any problem with mobx too though, but I guess you mean how you normalize data?

golden bane
#

Yeah

distant rock
#

I mean, you can structure it however you want in both mobx and redux, but both are weighted towards their own way of working

golden bane
#

I just need to share one data structure, so OOP seems overkill

lavish gust
#

@golden bane PoB API? Now that's a thing I have not seen before. Your approach is the same as I currently plan, that is an array of linked groups where each group is an array of socket colors. Very good to see Python docs with type hints. I have wrote below 1000 lines of Python, but I could not do anything without type hints.

distant rock
#

I mean, all it is is essentially that you nest objects and don't have to normalize, but you can do it either way you like, I don't see how mobx is a problem for this, but I understand if you prefer Redux. There's nothing wrong with it at all, but I just want to clarify that there's nothing blocking you from structuring things however you want in either of them

golden bane
#

I wish it was more widely known to save other devs that don't find this stuff as fun as me the trouble 😁

#

Good docs was the main objective from the start though, so that helped much

distant rock
#

Yea

#

Redux is really nice, what made me consider mobx was the reduced boilerplate code since you don't have to bind state variables like you do in redux etc

#

But Redux is larger which makes it easier to solve problems as well

golden bane
#

Hmm, reduced boilerplate sounds intriguing

distant rock
#

If you do start working with mobx, feel free to hit me up and I can help out.

golden bane
#

I might give it a try as I don't have much GUI already

distant rock
#

Do it 😄

lavish gust
#

@golden bane Yeah, docs look awesome and the project is a good library for other, larger projects but I think the choosen license can be a strong limitation. If EUPL works like LGPL+Affero, you really limit choices of any derived project. If you want to support others but have a copyleft-style guarantee, I would recommend MPL instead. It limits its "must have same license" requirement only to direct modifications of the library (not users of unmodified versions) and also allows for static linking.

golden bane
#

@lavish gust With derived projects you mean forks of pobapi? Because as-is, you can use the library anywhere afaik (with license notice ofc)

lavish gust
#

@golden bane with derived projects I mean any project that uses your project. As https://choosealicense.com/licenses/eupl-1.2/ states, it has the "same license" condition which means that anyone who wants to use your project in theirs, is forced to use EUPL. This is a big limitation. It also requires source code disclosure. It's more close to GPL or AGPL.

#

MPL in contrast, has the same requirements (same license, disclosure source) but only if you use modified versions of the project and they apply only to these modifications. Projects which simply use (without modifications) MPL'ed code, can be licensed on a different terms

#

LGPL is very similar to MPL, but it uses a different wording which unfortunately does not allow static linking. Thus I recommend to use MPL instead of LGPL because both practically achieve the same guuarantees for the author, but MPL does not hinder the build process with vague requirements that probably only people working with assembly/C/C++ could fully understand.

golden bane
#

This license stuff is even more complicated than I thought 😓

#

Okay so here is what I intended: library with weak copyleft: use it any way you want (with notice and source available); if you modify it, those modifications must be made under the same license; serving over web = distribution

#

That incorporation is pretty much always derivation went over my head somehow

lavish gust
#

Do you want to require users of your library to post the code of your library's modifications only OR both their full code and your library?

golden bane
#

Both, I should have made that clear

#

But it shouldn't matter if they want their code under MIT or GPL for example

lavish gust
#

if you want others to be allowed to use different license, then you can at most choose LGPL or MPL

#

GPL, AGPL and EUPL force the entire resulting product to be under 1 same license

golden bane
#

Ideally, I'd want something like ALGPL, but as this doesn't exist (yet?) I turned to EUPL

lavish gust
#

If by ALGPL you mean "LGPL but network use = distribution" then no, I don't think such license exists

golden bane
#

And it's already 2020

lavish gust
#

I propose MPL which is something between copyleft and permissive licenses:

  • MPL protects your code in a copyleft way. If someone modifies your code, that code is still copyleft.
  • MPL does not impose requirements on "pure users". If someone writes a derived project and only uses your project, that person's code can have a different license.
  • If the user made any modifications to your code, the modifications must be published, but only these modifications. User own code is not affected.
  • Unlike LGPL, MPL does not impose any requirements on the build/integration process. This gives a large freedom and convenience for many programming languages.
#

There is also EPL, which is similar to MPL but I'm not very knowledgeable on it

frigid nova
#

@velvet fog @obtuse citrus @woeful sphinx fyi 3.9.2b changed content.ggpk

solid sinew
#

hey are the map connections stored in content.ggpk?

velvet fog
#

Yes in Atlasnode.dat

solid sinew
#

thanks, i just found it too

#

still not sure where the numbers are defined tho

#

can you point me in the right direction?

#

for example, basilica is connected to 76, 73, and 9 at 0 watchstones, but I'm not sure what number basilica is or what maps those numbers refer to

rapid pagoda
#

They're IDs of other rows in AtlasNode.

#

You can map AtlasNodes to names by joining to WorldAreas on AtlasNode.WorldAreasKey.

golden bane
#

@lavish gust After some soul searching and much reading, I've come to the conclusion that I'd rather have other devs ruminate over the code instead of the license

#

So I'm considering to relicense to MIT instead 🤠

spare glade
#

Hey guys, I have asked this before, but is there some sort of crafting simulator on the PC? I know of Path of Crafting on the phone, but is there anything similar for the PC?

grave wren
#

Same i don't really care much about the open source stuff being modified in any way people want

spare glade
#

If not, would it be possible to create something for the PC using the PyPoE library? I might try to do a bit of development on a similar application for the PC, but it probably will be very low-quality as I'm just one guy.

frigid nova
#

@spare glade I have a python library that could use some help, but the bare essentials are there

#

I'd love any dev help

golden bane
#

You can use Path of Crafting in an emulator on PC in the meantime

#

But before you roll your own, see if you'd like to contribute to Nick's project

lavish gust
#

@golden bane That's a really permissive license choice

grave wren
#

I still want to check if your lib can replace my hacked up POB parsing too but I don't have the time atm to test it for the POB bot

golden bane
#

@grave wren You should try it, as it's still not stable yet. If you encounter any difficulties with it's design, it's all still open to change

#

I'll be sure to make it into whatever the community needs

#

Besides, I think I'm the only one who uses it right now anyways, so it wouldn't break other poeples code

grave wren
#

Yep it's the next thing I want to do for the bot

golden bane
#

I have another project planned that acts as a standardized, but configurable way to make PoB-preview-bots, on top of pobapi

#

Originally, my idea was to have a sort of "build-linter"

#

Like, if a build uses Atziri's Promise together with Avatar of Fire, it would give a warning

#

Or if you have "shocked" checked in PoB without having any means of applying shock, etc

#

It would be great if we as a community could combine efforts, as I think @earnest ledge bot is also written in Python

grave wren
golden bane
#

Ideally, if someone would still not like the offered formatting options, they would be able to extend the current capabilities instead of starting their own project, yeah

grave wren
#

My issue with it is finding a way that is not error prone for normal users

#

Either you allow full customizing with lots of possible broken configs or checks or you're better of just allowing modular enabling and disabling of output generation

golden bane
#

Oh I was talking about discord bot developers/maintainers, not regular users

#

If I was offering the linting capabilities to regular users, they should be non-configurable, but also not over-zealous imho

grave wren
#

Oh I see. The first part sounded a bit like what was on my mind quite a bit but I guess target audience differs a lot

#

Sounds good tho because a lot of build issues are findable even in an automated manner I bet

spare glade
#

Is there a way to see which types of tags the modifiers have?

frigid nova
#

yes - its in the ggpk or repoe or poedb

spare glade
#

For instance, if it is 'caster',' chaos', 'physical', ect

#

Because I can't find that at all in mods.json

#

Also, is there a way to download it from poedb?

frigid nova
#

For fossil tags, they are linked through type on the mods.json

#

this is detailed in the docs

worthy cape
#

I love hindsight. Just realized that I could have compressed my river chunks and saved a whole lot of bandwidth.

spare glade
#

Oh.

worthy cape
#

Excuse me while I go shove a hundred gigs of junk through the grinder.

spare glade
#

Are you doing everything through Python, or is there a database?

frigid nova
#

For the crafting simulator?

spare glade
#

Well... mainly for the modifiers in general

#

Otherwise I might be able to get an SQL server

frigid nova
#

All done in python, the mods/tags are plenty small to fit in RAM, a sql server would be serious overkill

spare glade
#

But I mean for filtering/searching?

#

For instance, if you want to find modifiers for ZealotryAuraEffect.

frigid nova
#

Most (if not all) of the relevant filter/searching needed can be cached ahead of time

spare glade
#

But I guess that searching won't be too intensive, because the list is sorted alphabetically

frigid nova
#

Anyway - for my repo I just load RePoE on launch

spare glade
#

But what do you mean with caching ahead of time?

#

Can I use Spyder/Anaconda for this, or do I need to use something like Pycharm?

frigid nova
#

I'm not particularly familiar with spyder or anaconda, but pycharm is just an ide to my knowledge.

spare glade
#

Yeah, I'm personally not that familiar with Python that much. I personally prefer to use C# instead.

frigid nova
#

well @simple ravine is your man 😉

grave wren
#

In general python does not require you to use a specific editor or ide

#

Thanks autocomplete for almost fucking up that sentence templar1

spare glade
#

How does crafting actually work?

#

For instance, if I use a transmutation orb.

#

Does it have 33% chance for a prefix, 33% for a suffix and 33% for both?

frigid nova
#

I try to detail it as much as possible in the readme in my crafting sim repo

#

But to answer your question - no

#

Emperically: 50% chance for 1 affix, 50% chance for 2 affixes

spare glade
#

- **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 6 mods
Is it also detailed if they are evenly split between prefixes and suffixes?

#

Also, I think you mean 7/12 chance for 4 mods

frigid nova
#

The game makes no such distinction, it draws from the total pool of all available prefixes and suffixes

#

Yeah there's a typo there 😦

spare glade
#

Readme is literally unplayable! 😠

frigid nova
#

fixed

spare glade
#

So let's take a hypothetical item.
There are 2 possible suffixes and 1 possible prefix.

P1: spawn weight = 40
S1: spawn weight = 9
S2: spawn weight = 1

If you are using alterations, is there 25% chance for P1, 22.5% for S1, 2.5% for S2, 45% for P1 and S1, 5% for P1 and S2?

hazy fiber
#

S1 isnt 49 times as common as S2

spare glade
#

OOPS.

#

But is my thinking correct?

#

Or do I need to factor in the P1 weight as well?

hazy fiber
#

your first 3 are wrong as well it draws from total pool, so theres a 40% chance for P1, 9% for S1, 1% for S2, and then the 45/5% for the dual affix

#

it rolls 1 affix, then pulls from the entire pool

spare glade
#

Alright

#

I never actually had to consider these things before 😅

hazy fiber
#

do note in the case it rolls 2 affixes, if it pulls a suffix then the only valid mod for the second affix is the prefix

spare glade
#

Yes, that makes sense

frigid nova
#
P1 - 1/2 * 40/50
S1 - 1/2 * 9/50
S2 - 1/2 * 1/50
P1 S1 - 1/2 * (40/50*9/10 + 9/50*40/40)
P1 S2 - 1/2 * (40/50*1/10 + 1/50*40/40)
#

(your math teachers lied, you should never reduce your fractions)

spare glade
#

Yeah. This seems a lot better.

#

In fact, I actually keep my equations like this even to this day.

#

Because you can actually see what's going on

golden bane
#

@spare glade If you're unfamiliar with or just not as interested in Python, using Anaconda may remove a lot of friction from the install process

#

Regarding development environment: If you want a text editor, go with VS Code. If you want an IDE, go with PyCharm Community

lavish gust
#

capturing keys globally (instead of only when the window has a focus) can raise conflicts between applications

grave wren
#

@golden bane is py 3.8 really the minimum for your pob api? I am kinda stuck with 3.6 for my docker container if i want to keep using pypy for now :<

golden bane
#

@grave wren It's more like 3.7 right now tbh. I thought walrus operators would help my project, but in the end I didn't find them useful at all 😆 I think you can get away with 3.6 if you backport dataclasses from ericvsmith though

grave wren
#

i'd had hoped pypy finally manages to support 3.7 after a few months :<

golden bane
#

I'll make a new release on PyPI with new license terms sometime later today, so stay tuned!

grave wren
#

i'm testing your example: active_skill() returns Hypothermia for me but it should be Vaal Blade Vortex if i understand your comment right

regal muralBOT
#
Blade Vortex - Elementalist (Lvl: 100) by: Faust
Defenses

Life: 6,911 (206%) | Reg: 242/s (3.5%) | Leech 1,133/s (16.4%)
Energy Shield: 634 (70%)
Mana: 222/1,111 (28%) | Reg: 50/s (4.5%) | Leech 222/s (20.0%)

Secondary Defense

Secondary: Dodge: 52% | Spell Dodge: 42%
Attributes: Str: 219 Int: 366 Dex: 158
Keystones: Phase Acrobatics, Elemental Overload, Acrobatics

Offense

DPS: 290,527@ 2.88/s
Crit: Chance 8.40% | Multiplier: 100%

Skill

Vaal Blade Vortex (20/12%) + Hypothermia (20/11%) + Ice Bite (20/20%) + Physical to Lightning (20/19%) + Efficacy + Controlled Destruction (21/20%)

Configuration

Enemy: Brand Attached, Chilled, Ignited, Bleeding, Boss: Shaper
Player: Fortify

frigid sierra
#

anyone with knowledge of pob code in here? got some questions

velvet fog
#

Post your question first

carmine merlin
#

Send me a pm if you want or post it here @frigid sierra

worthy cape
#

Throughput on my service is way better with compressed river chunks, but something is limiting me to around 11 MiB/s ingress between two 10gig machines.

#

I wonder if my traffic goes out onto the internet and back when on v6...

worthy cape
#

Hrm, nah, just a coincidence. Peaking at 17

radiant hawk
#

"MiB" :|

ionic holly
#

The mebibyte is a multiple of the unit byte for digital information. The binary prefix mebi means 220; therefore one mebibyte is equal to 1048576bytes, i.e., 1024 kibibytes. The unit symbol for the mebibyte is MiB.
The unit was established by the International Electrotechnica...

The megabyte is a multiple of the unit byte for digital information. Its recommended unit symbol is MB. The unit prefix mega is a multiplier of 1000000 (106) in the International System of Units (SI). Therefore, one megabyte is one million bytes of information. This definiti...

golden bane
#

I can't read user reviews of storage media anymore, it's always "well, I bought 1TB but there are actually only 931GB on there, 3 stars" or "I went with the 4TB drive even though I needed 3TB because it is known you always get less", etc.

ionic holly
#

Its real annoying that they haven't standardised which unit to use though.

golden bane
#

The real problem most of the time is that Windows Explorer, among others, calculates in 1024 units but displays SI units

ionic holly
#

Would be nice to cut down on the confusion however

#

I know I also fell for the "u actually get less storage" idea back when I had no idea how computers worked

broken cloud
#

Hi @fickle yew, curious why all awakened support gem listings on poe.ninja are L1/Q20

#

Checking the listings on the official trade site, there seems to be no shortage of 0-quality ones for sale

radiant hawk
#

"mibibyte" isn't a word, it's just an attempt to redefine language to legitimize the lies of hard drive marketing. it deserves to be cringed at

obtuse citrus
#

It's been a standard for over 20 years. The SI prefixes are base 10 and have been standard for much longer. The real problem as Cinnabarit said is that the units are incorrectly used, or more specifically that the SI prefixes are used for multiples of 1024 instead of 1000

frigid sierra
#

@carmine merlin @velvet fog Is there a way to run pob directly from a Lua interpreter instead of from the .exe file? I want to put it under a debugger

#

I tried to run Launch.lua and HeadlessWrapper.lua but got errors

carmine merlin
#

Not that I know of unfortunately

#

I’m guessing Openarl probably has this but it’s not out in the open asfaik

frigid sierra
#

so how do people debug when making PR? just doing printf like a caveman? 😛

golden bane
#

The Lua part of PoB is actually embedded in a closed source C++ application (the .exe) that provides the OpenGL environment, the console, hot reloading and other functions

#

You can use the Lua part in headless mode, but you will most likely need to add functionality, like the stubbed compress/decompress functions

#

printf doesn't really work if you debug with the GUI, you would need to use the provided ConPrintf C++ function

frigid sierra
#

pob.party is pob compiled into wasm right? so whoever does that must have access to all the code?

golden bane
#

It's reimplemented to some extent, and also closed source

#

The code for SimpleGraphics.dll is actually available (as in source-available, not as in open source), but not for PathOfBuilding.exe

frigid sierra
#

so about the fork, when Openarl adds some commits to the base pob like at the start of league, are those cherry picked manually into the fork?

simple ravine
#

I have high hopes for brathering and emmitt's library, that is now decoupled from the actual planner application, so we can at some point in time hopefully have some traction and collaboration around an open library that everybody can use

golden bane
#

It's from 2017 but it's not been updated since

simple ravine
#

I really hope I have the time to put some energy into this (as I kinda promised before, but haven't been able to do yet).

#

A separate calculation engine is, from my point of view, is really beneficial

frigid sierra
#

it is

worthy cape
#

@radiant hawk I use it as it uniquely identifies the power-of-two kind, regardless of how the regular one is misused. It’s unambiguous and that’s super useful.

#

Whether desktop vendors are trying their best to confuse the non-SI one, that’s a completely different problem 😄

#

I wonder if our object storage is up and running, would be nice to cache the river in.

#

You should see the OpenStack API, which uses all kinds of gigabytes, if they mention the unit at all 😄

#

🔪☁️

frigid sierra
#

is there a way to use ConPrintf to print a table variable?

golden bane
#

Gotta love Lua for things like that 😬

frigid sierra
#

cool, thanks

fickle yew
#

@broken cloud awakened gems need a bit more love. Been busy adding other things...

grave wren
#

@carmine merlin any idea how hard it'd be to add minion acc/crit/dmg to pob xml outputs?

golden bane
#

Or keystones, would be nice not to have to look through all items to find keystones granted by them

#

@grave wren Thanks for finding that bug btw, currently working on resolving it

grave wren
#

tried debugging it myself but pycharm doesnt reallly let me set breakpoints in 3rd party libs

frigid sierra
#

is there a way to print the stack trace with ConPrintf ?

golden bane
#

Better to just grab it from Github for that purpose

grave wren
#

yeah it's a bit meh in that regard unfortunately

golden bane
#

It's nice to use with the interactive prompt too btw, because everything prints there automatically

grave wren
#

way too used to the debugger workflow of pycharm to really swap over :<

golden bane
#

The bug lies in PoB's implementation of Vaal Skill Gems / the way they make their way into the XML

grave wren
#

oh i remember fixing something like this

golden bane
#

activeSkill=2 is a reference to Blade Vortex, which is not there because it is kind of a part of Vaal Blade Vortex

#

So there are three ways to go about this if the base version is selected:
Replace the Vaal ability with the base version in skill_groups
Replace it in active_skill only
Return the Vaal skill in active_skill regardless of the option set

#
  1. Would be awkward because then DPS won't match
#

I think 2. would be the least confusion approach

inland kestrel
#

How often does content.ggpk change when new patches (e.g., 3.9.2) come out during a league?

golden bane
#

Do you mean the structure or the content?

inland kestrel
#

I was thinking content

golden bane
#

Almost every time there are no server-side-only fixes, necessarily

worthy cape
#

Visual changes tend to lead to new shader caches, new items have assets and metadata, zone fixes may have new worldarea files, and so on.

#

I keep most old versions of them for the future, in case there’s differences in data files that make the formats easier to figure out, differentials are super useful.

grave wren
#

@fickle yew any plans to swap to the pob fork for impale support?

rapid pagoda
#

@worthy cape openstack is kind of a clusterfuck in general -- it's the worst kind of design-by-committee (specifically, the kind where the members of the committee were all trying to stab each other in the back)

golden bane
#

@grave wren It took way longer than it should, but I got a release - with support for Python 3.6 and the workaround (thanks!)

pearl reef
#

Hey guys! Is there is good documentation about how to make poe trade query links?..

I can't find good info and just trying to understand by looking on PoE Ninja's links...

fast citrus
#

Oh I just saw you're message in #wiki you mean the actual url query string.

#

I have seen information on that somewhere...

carmine merlin
#

@grave wren I’ll have a look at the minion stats thing. Thought those would already be in the XML though

civic crane
#
-8% increased Quantity ... => 8% reduced Quantity ...```
Where can I find a complete list of these "normalization" rules?
frigid sierra
#

when Openarl adds some commits to the base pob like at the start of league, are those cherry picked manually into the fork?

carmine merlin
#

yep, I have do go through and do most of it manually

pearl reef
#

@fast citrus yes, tnx, reddit post is exactly about that♥️

brazen goblet
#

is there a timeless jewel simulator?

fast citrus
#

Not that I've come across

frigid sierra
#

@carmine merlin do you know where is the place that the on-hover breakdown in the calc section is calculated and drawn? I know the label and format is specified in CalcSections-3_0.lua but I can't find the place it's used

golden bane
#

@frigid sierra CalcBreakdown.lua and CalcBreakdownControl.lua

#

The naming of all components is pretty straightforward

frigid sierra
#

thanks

rapid pagoda
#

@brazen goblet no, because nobody outside GGG knows how they are generated

#

Finally wrote this monstrosity: https://woofle.net/atlastool/ -- interactive atlas data table; lets you 1) look up maps, with sorting by name, region, and tier; 2) check off map completion; 3) keep track of what your watchstones are doing to map tiers, both by region and overall

fast citrus
#

Looks good

#

Enjoy the updates every league 😛

rapid pagoda
#

It's generated from the GGPK, actually. No manual data entry involved 🙂

fast citrus
#

Ahh I forgot my 'tongue-in-cheek' emote

pearl reef
#

I was asking how to make a trade search query link, and if for someone it would be interesting — this is how:

First you need to setup your filters, then open F12 and open Network tab. Next you return to site and press the search button and return back to F12 Network tab. There will be 2 records with "post" and "get" methods. We need to find out infromation that was posted so we click once at the name of the post method. It will open another tab and in the end of it there is "Request Payload" section containing the query.

We need to copy it and combine with:
https://www.pathofexile.com/api/trade/search/Metamorph?redirect&source=
... to get final link:

https://www.pathofexile.com/api/trade/search/Metamorph?redirect&source={"query":{"status":{"option":"online"},"type":"Vaal Regalia","stats":[{"type":"and","filters":[{"id":"pseudo.pseudo_total_resistance","value":{"min":70}}]}],"filters":{"socket_filters":{"disabled":false,"filters":{"links":{"min":6}}},"misc_filters":{"disabled":false,"filters":{"corrupted":{"option":"false"}}},"armour_filters":{"disabled":false,"filters":{"es":{"min":500}}}}},"sort":{"price":"asc"}}

It will work after Metamorph end, its linked to SC league. You need to change leaguename if you are playing other leagues like HC, standart, standart HC ...

frigid sierra
#

interesting, never knew you can do GET like that. I always just use POST

ionic holly
fickle yew
#

@grave wren I have considered it but haven't tried yet. Pob has been rock solid for me so far which is a priority when doing calculations for so many different builds. I'm very good at finding pob errors since someone in the population almost always has it. Closing on 9 million builds calculated..

grave wren
#

True, wish impale made it into openarl pob

worthy cape
#

@rapid pagoda I think back when we started the national science cloud project there was the dying Nebula or Shift or something project, and the somewhat promising OpenStack. We went with the least-shit-at-the-time choice 🙂

#

I do agree that it's a very janky solution, but it sometimes almost works 😄