#tooldev-general

1 messages · Page 13 of 1

velvet fog
cobalt pollen
#

Exilence is outdated I thought?

#

Ah ok wealthy exile seems to basically be my whole idea + a lot more, that's super neat!!

#

Thank you for linking those!

oak estuary
cobalt pollen
#

In this case I maybe will think of a new idea, I don't particularly need it to be novel but I'd rather do something that isn't done too extensively already...

velvet fog
#

This is a curated list of applications created by the Path of Exile community of players.
It's intended to gather commonly used applications that are considered well-behaving and in the spirit of the game. The list does not guarantee safety but should serve as a good place to start - ultimately it's at GGG's discretion whether use of an applicat...

cobalt pollen
#

Oh thank you very much!

zenith zodiac
kindred pastureBOT
zenith zodiac
#

also it would be nice if you could put in multiple acceptable outcomes (e.g if you don't care if the 6th socket is red or green)

modest path
#

Ooo, will check it out - Thanks!

modest path
#

@zenith zodiac Yeah that's basically what I was after - Btw, do you have any idea if the it files are a known format? It's kinda funny to me how little storage was saved in having everything inherit even though there's a tiny handful of attributes per item type, and the data being trivial to parse but also full of nulls for no discernable reason is "interesting" to me

zenith zodiac
turbid thunder
#

Playstation client is not playable since the last update, keeps crashing

oak estuary
worthy cape
worthy cape
modest path
worthy cape
#

Tools like PyPoE/RePoE help by cooking some of the more commonly desired tables and data files into more consistent JSON for end application consumption.

modest path
#

I always wanted to be an archeologist when I was a kid but.. Not like this

#

I started using RePoE's generated data directly but wanted to control non-ggg assumptions and structure, so I've got jsonnet using the dat-schema json schemas to generate rust structs for the raw json export - That part is working well, and I'm currently just slurping the added metadata .it file exports in where necessary. Working so far, may do a custom .it file solution in the future if I want to reduce external dependencies

#

All good fun though

worthy cape
#

I might have to figure out how to host poe-dat-viewer some day on my own iron, I've got some changes I'd like to try to make.

modest path
#

poe-dat-viewer is not perfect but has been insanely valuable

rapid pagoda
modest path
#

I bet

#

I'd love to see the GGG apis to all of this

#

Don't suppose they've ever accidentally put out a binary with debug symbols

oak estuary
worthy cape
#

Game code pretty much has code-generated classes for loading data off the DAT files, thus lots of hardcoded offsets and assumptions about the data layout and correctness.

modest path
#

That surprises me not at al

#

l

worthy cape
#

At best you may find some code that suggests where columns start and what types they have from the instructions that operate on them or if the code constructs like a vector, but it's extremely hard work and doesn't get you any higher level info like names or purpose.

#

The GDG talk (and some previous presentations) have been great fun to watch to get a gist for how things fit together.

#

They tend to lean a bit more towards the visual side of things with tiles, terrain gen, VFX; but also has some of the table editor stuff.

modest path
#

@worthy cape Hilariously that talk you linked shows their data tool which actually has some of the real names of the columns of BaseItemTypes displayed

#

Oh, @oak estuary linked it actually

worthy cape
#

There's some issues in the schema/tool repos whether names should be reconciled 😄

modest path
#

Yeah I was thinking exactly that

#

I'm also surprised that when he shows the types dropdown there's more than I expected

#

Including things like Color

worthy cape
#

I think that peeps eventually came to the conclusion that it's not super worth to be 1:1 with terminology as the community has a different vocabulary.

#

Previously unknown ones are useful but altering existing ones just causes churn I reckon.

modest path
#

yeah, I get that, even though I tend toward team burn-it-down on things like that

#

ggg is the source of truth, after all

#

But not a zero-effort thing

worthy cape
#

If we had more communication or drops from the company, it'd be more valuable.

#

Heh, didn't notice Color before, that's cute. Don't think I've ever seen it used anywhere.

modest path
#

I assume all the exposed data in any fields anyone external cares about are probably in from that already in if they were unknown previously

#

I think the unknown column in ItemVisualEffects is armour, but probably zero external tools use that

#

String, Decimal, Bool, File, Directory, Reference, Interval, Color, Point, Enumeration, DateTime, for the record

compact isle
#

the names in those headers aren't even necessarily correct in terms of their use, which is always fun to learn internally

worthy cape
#

Good old case of "Use The Source, Luke".

modest path
#

Ahh yes, the source, otherwise known as the only documentation that is correct

modest path
worthy cape
#

Having control over all consumers? Witchcraft.

rapid pagoda
modest path
formal kraken
cobalt pollen
worthy cape
#

Beautiful spaghetti soup.

cobalt pollen
#

Spaghetti soup sounds delicious FWIW lol

#

I'm pasta point of caring about the DRY/SOLID of a program, I'm thoroughly impressed by the end result mostly.

modest path
#

Oh! Jumping back a bit, the metadata files in vaguely texty-format are utf-16, that's why they're half null bytes. Completely obvious in retrospect, given notepad and vim read them just fine. Also I forgot to run file on them -_-

modest path
#

Theory: Every GGG job interview involves having the candidate invent a new file format for storing data, which is then included in Content.ggpk

swift beacon
#

That would explain some things.

#

I'm pretty sure every person who starts working on the terrain generator just makes a new ARM version.

modest path
#

Maybe it's the first task in the playbook for the intern program?

worthy cape
worthy cape
modest path
#

At least it compresses well?

worthy cape
#

The platform has 32-bit wchar_t so that's what they went with across the board for both GGPK and DAT tables.

#

not any other formats tho.

modest path
#

The DOT cap and enemy health cap say hello

worthy cape
#

I guess the server might be UTF-32LE too, if that's on Linux.

modest path
#

The allowed characters in names would agree with that

#

I usually use fongman characters in my names so they are very likely to be free on league start

worthy cape
#

Are the CJK names restricted to a common set of ideograms or is it like all blocks?

#

Western peeps can't use most accents still, or even å.

#

Names do not necessarily imply an encoding, any UTF will do.

modest path
#

I couldn't make sense of what the restrictions were (also they change over time) so I just had an autohotkey script type a character into the name box, copy it back out and compare with expectations, then ran that over parts of unicode I was interested in using in names

#

Motivated by them removing my big dots that I used to use lol

worthy cape
#

Good thing PoB's font cache loads glyphs on demand, heh.

#

I had it load all of the supported fonts fully in dev, took ages to rasterise.

#

Good stress test of the rect packer tho.

stray elm
#

@civic crane (APT) (APT) привет, может сможешь помочь ,у меня не ищет цены предметов при нажатие ctrl+D,вообще никакой реакции не происходит, при нажатие ctrl+alt+D выдаёт ошибку , бинды на команды чата работают отлично,ещё у меня виндовс 11,помогите плз исправить чтобы можно было смотреть цену предмета в игре!

daring moss
#

poor snosme

frank drift
#

I don't think anyone gets @ed as much

frank drift
#

@velvet fog any chance "Glimpse of Chaos Implicit" could be added to the top of helmet mod pages, eg https://poedb.tw/us/Helmets_int#ModifiersCalc ? the same way "Vaal Orb Corrupted Implicit" or "Synthesis Implicit" is

velvet fog
#

Glimpse of Chaos isn't a generic helmet, let me think about it

hazy fiber
#

I think the reason he wants it is becouse it can be made into any helmet base, and not restricted to glimpse, but I do think it would be strange there

#

if you can think of a better spot to put it instead then thats great

fallow zinc
#

If I wanted to pull the price of an item (div card) off of poe.ninja in a spreadsheet, how would I achieve that?

hexed mesa
#

find the api for poe.ninja and simply fetch the data in vba in excel

#

vba/google scripts/whatever your spreadsheet of choice has

#

usually working with json isnt particularly fun in those, so good luck

grave wren
#

google sheets should do it relatively fine

frank drift
#

frequently seen on poeninja or on trade

worthy cape
#

[responding to deleted message] Heh, thought you were talking about respec costs at first.

#

Are those in the data tables by the way or is that logic?

late schooner
#

divine:chaos ratio on the trade site is set to 150 (eyeballed it). I understand it is stored manually, is there a way to get this value?

hazy fiber
#

my assumption is its not set manually, but iirc it only updates like once a week

#

and even then it takes a while for it to propagate through all search items?

worthy cape
#

I thought it was a manual process when it diverges too much as it's costly, but probably somewhere inbetween.

hazy fiber
#

but no, I dont think theres a way to get the value without manualy finding it or asking ggg

hazy fiber
cobalt pollen
#

Excuse my ignorance please but is it safe to assume that ChatGPT is a poor choice for information on the PoE API? I assume there's been too many different versions/changes over time for it to be consistently reliable at answering questions about it? Please note that I'm not asking about asking it for code - just for API hooks and other things.

If this is asked a lot, I apologize... I know it's a very controversial topic in general so I am prepared to be met with people not happy I've asked lol

grave wren
frank drift
#

LLMs will lie to you about anything

#

you can use one to get an idea of where to look, but don't trust it

formal kraken
#

It is safe to assume that ChatGPT is a poor choice.

robust anvil
#

@civic crane

modest path
#

Pretty sure there's an error in the stat_descriptions.txt statvalue matcher here in the Portuguese first text option: description 1 minion_maximum_mana_+% 2 1|# "Minions have {0}% increased maximum Mana" #|-1 "Minions have {0}% reduced maximum Mana" negate 1 lang "Portuguese" 2 1|1|# "Lacaios têm {0}% de Mana máxima aumentada" #|-1 "Lacaios têm {0}% de Mana máxima reduzida" negate 1

#

1|1|# doesn't appear to be valid, not sure if the game's parser just doesn't happen to care

cobalt pollen
#

I figured as much, never know though. Thanks for confirming it

modest path
#

Also, been playing poe for like 4k hours, didn't know minions had mana

#

here's the distribution on matchers with numbers sterilized to x: 95373 x|# 83722 # 55584 #|x 24862 x 8960 x|x 1323 !x 1 x|x|#

#

There's some other things that are almost certainly invalid or could be side-effects of utf-16 to utf-8 conversion

#

handed_descriptions first value having no tabs is weird but appears to be consistent

#

the other two I see are that the following lines appear to be the second half of description strings that have literal carriage returns in them: Le nombre de Boss supplémentaires invoqués est plus\nélevé s'il y a moins de monstres restants dans la Carte\nLes modificateurs affectant le Boss de fin de chaque Carte s'appliquent également à ces Boss invoqués" Le nombre de Boss supplémentaires invoqués est plus\nélevé s'il y a moins de monstres restants dans la Carte\nLes modificateurs affectant le Boss de fin de chaque Carte s'appliquent également à ces Boss invoqués"

#

Those are in Atlas_Stat_Descriptions.txt

#

fun

#

I kind of assume from the lua's behavior that pob is not handling handed_descriptions correctly

#

As the import script is just slurping handed_description's argument up and appears to be ignoring the bit where it has two different sets of statkeys

worthy cape
swift beacon
#

It always surprises me, because I would think things like missing delimiters between values or a broken file path would either cause their own parser to read the file wrong, or they'd have to account for it as a special case in their parser, but in that case why not just fix the anomalous file?

#

This is one of my favourite notes from my AO/AOC reader: "While most file references use /s in the path, files occasionally use \s instead, or a combination of /s and \s in the same path, or a combination of /s and //s."

velvet fog
#

there are many wrong newline slash in stats_descriptions too

modest path
#

Stat description include dependency graph:

modest path
#

I don't get why they have includes and not just one big file unless there are overrides I haven't noticed yet

worthy cape
#

Not sure really there. I know PyPoE puts some importance to the individual filenames but there's nothing inherently as far as I know mandating that a description goes in one file or the other.

wraith jasper
#

I swear I've seen this before, but where can you see what contributes to levels of a gem in PoB

worthy cape
#

Heh, was typing up how PoE gems worked, but in the UI in PoB?
You should be able to see it in a Calcs breakdown.

oak estuary
#

Just added in a recent release:

spiral gale
#

any discord mod i can speak to?

frank drift
spiral gale
#

ty

bright ridge
#

Is there a reason PoE DB and Craft of Exile aren't open source (at least not in the traditional sense - I see messages from the Craft of Exile dev saying his client-side code is freely available as client-side jquery via dev tools but that's not really open source for collaboration)?

I've been spending some time combing the .dat dumps using the poe-dat-viewer tool and the exported json files and wondering if there's a way for me to collaborate with these authors before diving on a probably insurmountable project of reverse engineering the crafting engine myself

#

my idea was to have a platform where one could have a step-by-step crafting guide / blog post with interactable elements (similar to the craft of exile emulation bench)

worthy cape
#

For such projects that have a prominent service, sometimes there's a bit of (rightful) fear that someone will take the thing, set it up, do some hacky changes or monetize it.

bright ridge
#

big fan of the interactive blog posts and felt inspired to bring the same kinda thing to poe. i know it'll be an extremely tedious effort. here are some examples of what i'm thinking (non poe)

https://ciechanow.ski/sound/
https://www.joshwcomeau.com/css/center-a-div/

Interactive article explaining how sound works.

Back in the day, centering an element was one of the trickiest things in CSS. As the language has evolved, we’ve been given lots of new tools we can use… But how do we pick the best option? When do we use Flexbox, or CSS Grid, or something else? Let's dig into it.

worthy cape
#

Backends can often be a horrible mess to set up and operate from scratch as well; just look at my Inya 😄

grave wren
velvet fog
formal kraken
#

Nessa is that you?

flat star
velvet fog
#

metadata/itemfilters/default.filter

flat star
#

There is only a folder called "items"

#

in metadata

worthy cape
#

Is there a "default" filter anyway?

flat star
#

It used to be there. I found it. Now (several years later) I can't find it

velvet fog
flat star
#

I can only watch on the website

velvet fog
worthy cape
#

I don't have the bundles handy here, but that's odd. I wonder if it's a poe-dat-viewer quirk or game changes.

flat star
# velvet fog

Thanks, but I would like to learn how to extract this data myself)

candid ridge
#

Is it possible for a tool like exile diary to detect when you've switched characters or does that always have to be a manual selection?

worthy cape
#

I know Fleury was looking for something that tracked it when making their progression tool, not sure if we ever found anything conclusive.

#

Maybe look for discussions around exilekit/PoESplit in the other tools channel.

worthy cape
candid ridge
#

makes sense but not applicable for leveled up characters doing mapping

formal kraken
#

I think they removed the current character api 😦

exotic egret
#

current still exists on characters when fetching them using the public oAuth APIs

grave wren
#

is current updated on logging into a char?

hazy fiber
#

its likely updated along with whatever else on the character, so login/zone transition/log out

worthy cape
#

I got around setting up a build environment and released bun 0.2.2 to handle the corner case of trying to extract non-existing files.

compact wigeon
#

I never actually got around to figuring out what those API keys actually mean. What does a character being current mean?

hexed mesa
#

if i were to guess its the character thats displayed on the main page if you are logged in, which is roughly the last character you played

hazy fiber
#

^

compact wigeon
#

Right, there's a character on the site, that seems like the likely candidate

#

Excellent, thank you! Maybe in a few months I'll be answering instead of asking kek

hazy fiber
#

it shows 2 characters on the profile page, you can choose what goes there, by defualt one is the "current", but the main thing it does is if you go to the /characters tab itll auto select the "current" character

#

you may be able to disable it iirc, but havnt looked at account settings in ages

sly mason
#

Hello. I don't know if this is the right place for this message. Apologies if I'm in the wrong channel. In Awakened PoE Trade, how do you include the recipient's name in the body of the message in a chat macro? I can't find this info anywhere.

worthy cape
#

At some time the character literally named @last got a ton of whispers 😄

sly mason
#

@zao Thanks

modest path
#

Anybody know what canonical_stat and canonical line are used for in the stat descriptions attribute modifier "functions"?

#

Seems like pob lua and repoe python ignore them for the most part, so I'm assuming no

worthy cape
#

I wonder if it has something to do with non-game purposes like what translation to use when pulling an item out of thin air when you don't have any mods or rolls but want to pick the "iconic" text variant.
Like trade or website or something?

#

RePoE and the wiki mostly cares about mods, for which the choice is "clear".

#

PoB likewise, it's way further detached from the game wordings.

#

(let's not talk about the "inverted" mods from Kalandra reflection, those are weird)

worthy cape
#

Bah, count is off for missing files when extracting with bun... not sure if I care to fix that:

Hash seed: 0x000000001337b33f
Could not find file "art/uiart/scrolling_hotmetal.dds.header"
Could not find file "art/uiart/scrolling_blue_hotmetal.dds"
Could not find file "art/uiart/scrolling_blue_hotmetal.dds.header"
Could not find file "art/uiart/scrolling_hotmetal.dds"
Done, 0/4 extracted, 0 missed.
velvet fog
flat star
#

Can someone tell me where these sprites are located in the game files?

swift beacon
#

/art/textures/interface/2d/2dart/uiimages/ingame

#

Spread across a few different spritesheets.

flat star
swift beacon
#

You just need to open them in a program that can read DDS files. Or convert them to another format like PNG.

#

There's quite a few tools that can do that, you'd just need to Google it.

worthy cape
#

The coordinates and file names are in uiimages.txt by the way.

#

Oh dear, I've forgotten the exact name... art/uiimages1.txt?
Look around and you'll find it.
I have some command line tools in the wiki utils repo to slice them on the command line, newer ImageMagick and xnview mp can open them, heck, even VS should be able to view.

dusky glacier
#

hi can I ask questions regarding the API here?

frank drift
#

you can ask sure

dusky glacier
#

So i'm tryin to do the athorization but I don't really know how to go about that all Oauth thing. it seems complicated

#

what I understand is that I generate some kind of request, I get some kind of json response, and in the json response there is a code I need to redeem for timed access to the api?

worthy cape
#

There's a song and dance for the client to be sent to the PoE website to authorize you to do stuff, they get back to an URL of your choosing with a token of sorts.
You in turn redeem and extend this token against the API in some way.

#

Never got around playing with it myself.

#

It's somewhat standard OAuth2, there's probably guides out there and good terms to Bing in the docs.

dusky glacier
#

couldn't find any that made sense

#

just conceptually tho... what I need to do is send some kind of request with a random-enough string, in return I get a token, with that token I can do stuff against the API?

#

what's that with the redirect url?

compact isle
#

the first question to ask is: which API are you wanting to use?

dusky glacier
#

the scope is just account:stashes

compact isle
#

do you want to use it for just your own account, or are you making a tool for others to use as well?

dusky glacier
#

well... for myself for now. but it would be cool if I could share the tool later on. not planning on making it a webapp tho.

compact isle
#

if it's just for yourself for now the easiest way to get started is to use the client credentials grant type which is just a one-time thing you do to get a "non-expiring" token that you can use to access your own account

#

the other one is complicated because it involves other people's data so there are security things going on

dusky glacier
#

Ohhhh so all I need is the client crendentials grant for myself? not the OAuth?

compact isle
#

yeah if it's just for you that's all you need, and you can just hardcode the token you get back in your app (don't expose it anywhere like github or something though)

dusky glacier
#

can I just ask for another code whenever the porgram starts?

compact isle
#

you could, but then you'd have to hardcode your client secret which is arguably worse

dusky glacier
#

hmmm

#

ok so now I just need to know how to send a POST request with python ig?

worthy cape
#

The Auth is generally built around the idea of a secure hosted web application, unless you use the Public Client concept which is more for untrusted standalone apps, think PoB.

dusky glacier
worthy cape
#

I'll let Novynn do the explaining, as they actually know what they're talking about.

compact isle
dusky glacier
#

hmm sure

compact isle
#

which is relatively complicated so if you're not confident in it yet then definitely stick with the client credentials approach for now

#

which will get you started with your own data and let you progress the rest of your app 😄

dusky glacier
#

ye

#

thanks!

loud flint
#

Hi Novynn, I am once again asking for an update on the currency exchange market API pepeLove

#

(didnt call it auction house, this deserves an answer)

compact isle
#

likely no movement on it until near next league at the earliest

loud flint
#

thanks for confirming it's going core at least 🤝

#

but yeah understandable, super excited to hopefully be able to do some things with the data

frank drift
#

@fickle yew any chance poeninja economy could get the unique tinctures?

hazy fiber
#

could easily just stick em in with flasks becouse they share a slot, and I dont think any of the unique tinctures are worth anything, but might help reduce edge cases around missing prices for other tools

frank drift
#

I could see that if categoy bloat on the side is a concern

#

and yes my problem is missing data for filterblade 😆

frank drift
fickle yew
#

I might just put them in flasks like Regisle suggested until there is more..

frank drift
#

works for me

dusky glacier
#

How do I get client ID na client secret for my private program? do I need to send some kind of email I understand? how does that work?

hazy fiber
#

if its private its possible you could just use your poe session ID depending on what you want to do

#

more than that you will need to email ggg

dusky glacier
#

what's a sessionID?

#

what I see in the example I put in request_data:

request_data = {"client_id":"???"
                ,"client_secret":"???"
                ,"grant_type":"client_credentials"
                ,"scope":scope
                }
hazy fiber
#

the login cookie on the website, your not supposed to use it, but it lets you retrieve things as if you were going through the official site

dusky glacier
#

I don't want to use thing I am not supposed to use

hexed mesa
#

also idk if its just me but the image is not working

dusky glacier
dusky glacier
#

crap I forgot to add redirect URI to the request email Q_Q

#

don't eve know what that is

worthy cape
# dusky glacier don't eve know what that is

The redirect URL is part of the authentication flow I described the other day for users to authorize the app to do stuff on their behalf.

You send the user off to a page on a PoE server where they get to authenticate with their PoE credentials and authorize your application to do actions in some "scopes", categories of functionality. This is so that you never get your hands on their credentials, it all goes through a trusted intermediary, GGG.
That page returns the user to an URL that you control afterwards, that's the redirect URL.

In the case of a normal "confidential client" project that runs on a server somewhere, that's a public URL somewhere that you control, at which point you resume control of the authentication flow and get hold of the tokens for that user.
In the case of a "public client" project that runs on individual computers, the same flow happens but is redirected to a particular URL at localhost, as the whole thing is supposed to be running on the user's computer.

In the case of client_credentials, the example there is written from the view of "I'm a web application and serve the needs of a lot of users, but sometimes I need to make requests not on behalf of any particular end user but as »myself», the application owner".

#

The request URL is needed to register your application because that's the "typical" way that applications function. The client_credentials case is a bit ancillary, working off the fact that you've got an application ID registered and have been given a client secret for that application.

#

As for your case where you only really seem to want to do things for yourself, I'm not sure how to apply and for what kind of application to apply.

cobalt pollen
frank drift
#

they've only been active even on the forum once in the past ~2 years, in February

cobalt pollen
#

Sad they aren't active often, oh well.

daring moss
#

Kinda worried about that website tbh, imagine asking users to type in their session ID instead of just supporting the proper API despairge

frank drift
#

I don't think the proper API was even a dream in someone's head when that website was created

cobalt pollen
#

Yeah it wasn't, I recall using that website yeaaaars ago, so many years ago. Lol

cobalt pollen
#

If I am making a third party calculator that does not touch the GGG provided API in any shape or form, can I develop it without submitting anything to GGG directly? Like, lets say I wanted to make my own Vorici calculator ( I don't but it's a relevant example FWIW ) but have it running via GDscript/Godot Engine.

kindred pastureBOT
cobalt pollen
#

Thanks Nessa but not quite 😛 lol

grave wren
#

yes, they just want your data if you use the api to contact you if something misbehaves or block your tool if needed

cobalt pollen
#

Oh awesome! I don't mind doing all the work for the API access, but I am still reading over Oauth2. It's new to me, and I want to be familiar with it.... but 71 pages takes a bit of time to read for me.

#

It'll be fun just playing around with the game stuff using GD engine without the API access while I wait to finish all the relevant docs 😄

grave wren
dusky glacier
fallen tide
#

@civic craneHow fixing this? All items can't checking

#

last version

civic crane
#

Change language to English

fallen tide
#

work. ty

exotic egret
exotic egret
atomic sage
#

Is there any craftofexile support?

#

I have an item that doesn't seem to behave the same way their simulator does

#

(1 in 16 million that it's just poor luck, I don't want to push more divs into it to keep getting more precision)

frank drift
#

@nova hamlet is around yes

dusky glacier
#

So...how long is it usually to get an answer for an API permission request?

worthy cape
#

One of the humans has to get around to it, few days maybe?

dusky glacier
#

👍

solid roost
#

does anyone of you know a reliable source of all debuff/buff icons and texts?

#

(without watermarks)

worthy cape
#

RePoE may have some, as does the wiki.
Otherwise lots of piecing together stuff from BuffDefinitions and templates I guess.

solid roost
#

does RePoE actually extract them? I would love an automated way to gather them, so wiki kind falls off

worthy cape
#

don't recall.

vale pier
#

@civic crane
I hope I post this on the right place and person and it is not already suggested a million times.
Now that quality over 20 matters on the value of items, I would love to see at "base Item" a quality checkbox like this.

carmine merlin
nova hamlet
lilac jungle
#

Anyone know how you are supported to tell all mods are supported for a given item in the RePoE dump?
The current recombinator science is that left and right bases have 50/50 chance to be selected, and if the wrong influenced base is selected, then influenced mods are unable to be rolled on that output item. So I need to be able to figure out allowable mods given a base.

I looked at the items from base_items.json and the mods from mods.json and it seems like maybe I could compare the mod spawn weights and the item tags, but there are a bunch of cases where that doesn't work:

  1. Essence and beastcraft mods don't have spawn weights
  2. Influence causes tags to say like "axe_elder" instead of "axe" - do I manually insert these myself when looking up mods for a given item tag?

It think the OOP structure of the base items is being used in PoE instead of spawn weight/tag comparisons, so like "is a Reaver Axe is an instance of One Handed Weapon"? But I am unsure how to get this information from RePoE. I see some kind of information about this in base_items (eg Metadata/Items/Weapons/OneHandWeapons/OneHandAxes/OneHandAxe18 for Reaver Axe) but I'm not sure how I am supposed to use it (split and insert underscores so I can check against item tags? or are item tags just the wrong place to look?)

hexed mesa
#

which is not ideal, but it's the best one can do with simply data included in the client

#

but yeah, generally you look at tags
there's plenty of mods which don't have spawn weights included in the client like delve and incursion mods

velvet fog
#

They are server side weights

zenith zodiac
dusky glacier
#

how would I ask for multiple scopes in a request?

worthy cape
#

Not quite sure what you're asking.
When registering an app you specify all the scopes you want to be able to use.
When doing the authorization dance your scope parameter "is a space-separated list of requested scopes".
The same probably holds for client_credentials.

#

And if not, you could probably request multiple tokens, one per scope.

dusky glacier
worthy cape
#

Probably escaped in whatever way that URLs/POSTs are expected to be, but yea.

dusky glacier
#

I'll play around with it,thanks 😄

worthy cape
#

Seems like it may be + for application/x-www-form-urlencoded as per some random StackOverflow answer.

dusky glacier
#

would make sense

dusky glacier
#

hi again, trying to get the initial request going as I got the api request approved.
I think I'm missing something here as I keep getting 403. any ideas?

# libs
import requests, secrets, hashlib
# files
import treasure
# simple post func
def send_post_request(url, data):
    response = requests.post(url, data)
    return response #not everything is json.

# scope
scope = "account:stashes"
# random enough randomness
base64_encoded_privkey = secrets.token_bytes(32)
base64_encoded_pubkey = hashlib.sha256(base64_encoded_privkey).digest()
# API point
API_token_endpoint = "https://pathofexile.com/oauth/token"
request_data = {"client_id":treasure.client_id
                ,"client_secret":treasure.client_secret
                ,"grant_type":"client_credentials"
                ,"scope":scope
                #, "code":base64_encoded_pubkey
                }





if __name__ == '__main__':
    response = send_post_request(API_token_endpoint,request_data)
    print(response)
#

gets me thinking maybe I should include metadata somewhere somehow?

grave wren
dusky glacier
worthy cape
#

Note that you need an user-agent.

grave wren
#

no it is a separate header you need to set when using your requests.post

dusky glacier
worthy cape
#

In HTTP, the "user-agent" header identifies your tool, typically used in browsers.

#

PoE's API requires that you supply an user-agent that identifies your tool name, version and contact info.

#

This is so that the admins can see what tools are breaking things, selectively block bad versions and get hold of the author.

dusky glacier
#

I am still getting a 403 :/
here's the code rn

# libs
import requests, secrets, hashlib
# files
import treasure
# simple post func
def send_post_request(url, data, header):
    response = requests.post(url, data, header)
    return response #not everything is json you dumb fuck!

# scope
scope = "account:stashes"
# random enough randomness
base64_encoded_privkey = secrets.token_bytes(32)
base64_encoded_pubkey = hashlib.sha256(base64_encoded_privkey).digest()
# header
header = {'Content-Type': 'application/x-www-form-urlencoded'}
# API point
API_token_endpoint = "https://pathofexile.com/oauth/token"
request_data = {"client_id":treasure.client_id
                ,"client_secret":treasure.client_secret
                ,"grant_type":"client_credentials"
                ,"scope":scope
                #, "code":base64_encoded_pubkey
                }





if __name__ == '__main__':
    response = send_post_request(API_token_endpoint,request_data, header)
    print(response)

do I need to do the guidelines too before getting a success response?

grave wren
#

yes thats why they're there - the requirement to have a user agent set is for all requests to their api

dusky glacier
#

I see, thanks!

dusky glacier
# worthy cape In HTTP, the "user-agent" header identifies your tool, typically used in browser...

ok some spooky action from python here... I set headers to something but it forces it to python-requests.

# libs
import requests, secrets, hashlib
# files
import treasure
# simple post func
def send_post_request(url, data, header):
    response = requests.post(url, data, header)
    return response #not everything is json you dumb fuck!

# scope
scope = "account:stashes"
# random enough randomness
base64_encoded_privkey = secrets.token_bytes(32)
base64_encoded_pubkey = hashlib.sha256(base64_encoded_privkey).digest()
# header
header = {'Content-Type': 'application/x-www-form-urlencoded'
          ,'User-Agent':'OAuth ' + treasure.client_id +"/"+ treasure.version + " (contact: " + treasure.contact+")"
          }
# API point
API_token_endpoint = "https://pathofexile.com/oauth/token"
request_data = {"client_id":treasure.client_id
                ,"client_secret":treasure.client_secret
                ,"grant_type":"client_credentials"
                ,"scope":scope
                #, "code":base64_encoded_pubkey
                }





if __name__ == '__main__':
    response = send_post_request(API_token_endpoint,request_data, header)
    #print(request_data)
    print(response.request.headers)
    print(response)

output:

{'User-Agent': 'python-requests/2.31.0', 'Accept-Encoding': 'gzip, deflate, br', 'Accept': '*/*', 'Connection': 'keep-alive', 'Content-Length': '107', 'Content-Type': 'application/x-www-form-urlencoded'}
<Response [403]>
worthy cape
#

In particular, positional arguments will be satisfied in turn, if you want to use a keyword argument you need to supply the keyword at the call site.

dusky glacier
#

I'm not familiar with **kwargs. I assume this is keyword args you are refering too? so what I did is send the header variable on the json paramater? is that correct?

worthy cape
#

Yeah, that's what your call did.

grave wren
#

i'd recommend using pycharm community to be able to quickly check the signature of methods you use plus using a debugger to be able to inspect stuff beyond just printing it

worthy cape
#

It might help to brush up on your Python knowledge.
**kwargs collects all arguments that are on the form of foo=bar in a function call in a dictionary, often times to forward them to some other function.

dusky glacier
#

that weird I seen examples that allow requests.post to specify headers

worthy cape
dusky glacier
#

I guess the headers=headers is there for a reason 😛

grave wren
#

yes its specifically naming the parameter

#

either you omit those and provide data in the right order or you name the named params you want to provide data for

dusky glacier
#

I can live with that if that's all the problem was. is there anything else I am missing?

worthy cape
#

Mostly just a personal stance, but I don't like profanity in code. It feels unprofessional and can turn people off.

worthy cape
#

Otherwise, it seems like a good starting point, again not familiar with API usage.

#

The U-A is a common enough trap 😄

dusky glacier
worthy cape
#

Oh sorry, User-Agent.

dusky glacier
#

Ye it's written in another page so i can imagine it's missable

worthy cape
#

People often interface with the other programmable interfaces of the website and trade, running into similar problems.
I think the common HTTP libraries are explicitly forbidden to make people realize that they need to ask or research about it.

dusky glacier
#

Common libraries are blocked?

#

and now I'm getting 405 Q_Q

worthy cape
dusky glacier
#

I changed the U-A

dusky glacier
worthy cape
#

Different error code now at least.

dusky glacier
#

I got the permissions yesterday I wounder if I should have waited more? I am asking the the scope I requested in the email.

worthy cape
#

Note that 405 is about HTTP methods.

dusky glacier
#

mehtod not allowed I assume it's from the server...

#

wait 4** is client side

#

I'm a derp

worthy cape
#

Method as in GET, POST, OPTIONS, HEAD, etc.

#

You are probably either using the wrong method or have managed to krangle your payload in such a manner that it doesn't understand it.

dusky glacier
#

I love that word, krangle.

#

probably krangled it somehow.

#

i'm trying to think what could have gone wrong...

worthy cape
#

If you're not certain if you're using the library right, it might help by using something like HTTPbin or a server of your own to inspect what you actually send.

dusky glacier
#

wait

worthy cape
#

I'm gonna PUT myself into bed, good luck. Bedge

dusky glacier
#

ok I have no idea. the method is post. yet I get back a response that the request method must be POST when creating a token.

dusky glacier
crude bane
grave wren
#

thats why my suggestion still is to familiarize yourself with a debug tool

dusky glacier
#

what's strange is that it doesn't seem to post the Content-Type when I print the headers.

#

no matter what I do it doesn't add the Content-Type header. wtf.

dusky glacier
grave wren
#

it's the hint with the content type thats also displayed there it's probably required

dusky glacier
#

but I do have it in the headers.

#

the content type

#

At this point I'm starting to doubt my own sanity

grave wren
#

could cross check your implementation by making a small flask server to check what is sent by your script

dusky glacier
#

me? i dunno how tod o that Q_Q

#

used flask before but was like 4 years ago

#

also printing the headers themselfs with print(response.reques.headers) straight out doesn't show the content type.
this is some spooky action.

formal kraken
#

also that json=None looks fishy

dusky glacier
#

it's not the problem I checked.

#

removed it

grave wren
#

this would be the minimal server, you could also check via ngrok but i prefer flask:

from flask import request, Flask

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
@app.route('/<path:any_path>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
def handle_request(any_path=None):
    print("Path:", any_path)
    print("Headers:", request.headers)
    print("Body:", request.data.decode('utf-8'))
    return "Request received", 200

if __name__ == '__main__':
    app.run(debug=True)
dusky glacier
#

the client_id and stuff are sent in the body right?

dusky glacier
grave wren
#

i assumed you did and did not find it - this will show the receiving end

#

i'd also recommend to use a http client like bruno to try the request

dusky glacier
#

how would I do that?

#

got bruno open. no idea how to use it Q_Q

grave wren
#

set up a new collection, open a request set it up like the api says: this way you know if your credentials etc work and its a code problem

#

set up a correct user-agent ofc like written in the docs

dusky glacier
#

Oohhh now I understand, it's a tool to SEND requests not recive them.

grave wren
#

correct, the flask route would be checking what you actually send, this one is to check if all the values you set should work

dusky glacier
#

same error

#

am I crazy?

#

@grave wren what does it mean?

#

that I got the same error

#

cause I'm starting to think it's a problem in the api

grave wren
#

its very likely not an issue with the api

#

did you set it up as form url encoded as the screenshot shows

dusky glacier
#

yup

grave wren
#

from experience id generally assume an error on my side over one on api side but idk - i dont personally use this api so this is as much as i can say about it

dusky glacier
#

is there any other way I can be sure it's not on my end?

#

nah man something here is weird... if I'm doing everything the same as everyone else and I'm getting a diff response... something is off.

formal kraken
dusky glacier
#

FUCK

formal kraken
dusky glacier
#

shitty mega shit ultra fuck

formal kraken
#

That sounds like I was right 😄

dusky glacier
#

I need a minute...

formal kraken
#

I assume some middleware tries to redirect which ends up changing the request from POST to GET and hence the error

#

Also holy, your discord is a mess 🤣

dusky glacier
#

ok I'm back

#

ye so that was a roller coaster

#

and ye I have a lot of discord servers I'm part of 😛

#

cool program that bruno. I might keep it 😄

grave wren
#

i love it, especially coming from postman which is so slow and overcrowded now

dusky glacier
#

I don't deal with API's a lot it's actually my first project with them.

formal kraken
#

Bruno is really nice, switched from postman to insomnia and then to Bruno

grave wren
#

i was wary of insomnia so it is postman -> intellij http files and maybe bruno at work

#

glad i skipped insomnia as they basically 1:1 copied all the shit postman did

formal kraken
#

oh yeah intellij's http files are quite nice too, perfect scratch pads

dusky glacier
#

I love my nvim 🙏

grave wren
#

yeah we share those in the repos at work so everyone has samples going

#

bruno is similar but i didnt have time to try to switch yet

oak estuary
#

Planning on switching my team to Bruno at work. Insomnia being always online now sucks hard

grave wren
#

i was so pissed when postman started taking multiple minutes to load

oak estuary
#

Plus having the request files stored with the code is awesome. Some teams built a bunch of tests using them + the cli tool, really neat

grave wren
#

the app was so good early on and they ruined it

dusky glacier
#

there a cli tool?

#

👀

oak estuary
#

For Bruno, yes

dusky glacier
#

isn't available on nixos sadly ig.

solid roost
#

does anyone know how awakaned poe trade is actually copying the item text on ctrl+d? I always though it just sends ctrl alt c to the app and then gets the clipboard text, but for some reason If I do that pressing the alt key is much more visible in the client (e.g. health bars popping up)

frank drift
#

I think Overlay Community does use ctrl alt c, so you could check the source for that to see if there's anything special going on

#

doubt it though

solid roost
#

hm i see, i always though they also somehow use ctrl alt c

#

because sometimes when pressing ctrl d I could swear I see a window flickering above my item

worthy cape
solid roost
#

whats AdvancedModKey?

worthy cape
#

The logic can be a bit hard to follow as it reads the actual key out from the game INI file.

#

Typically Alt, but it can be rebound in the game.

solid roost
#

hm thats strange

worthy cape
#

APT can handle it being most normal keyboard keys, but not mouse buttons.

solid roost
#

I try to replicate it using different methods to send keys but everything results in the healthsbars popping up

#

hm i cant find anything related to pressing alt on apt

worthy cape
#

There's logic that reads the modifier out somewhere and logic that sends stuff to the client.

#

Don't ask me to find where, TS is inscrutable.
It's definitely how the tool has worked since forever tho.

dusky glacier
#

So when I sent GET requests do I still need to add the headers? beside User-Agent

compact isle
zenith zodiac
#

anyone have a suggestion what to name this column? FrameType is the best l've come up with so far, but it's questionable as many of them share a frame

zenith zodiac
#

actually never mind l think it's a reference to BuffCategories (1-based, and with an extra value for cheat codes uncategorized)

cyan void
#

is there nothing to fetch prices in the official api? scimmed over the docs and didn’t see anything price related

hazy fiber
#

the official api doesnt expose prices no

#

thats why everyone uses poe ninja

cyan void
#

but then how does poe ninja get t hem

hazy fiber
#

you can search for an item and use that to figure out the price of it

#

poe ninja ingests alot of item data and tried to calculate the value the items are beign sold at (not just listed)

cyan void
#

are tools a allowed to use the unexposed api? I can most likely just copy whatever is going on when using poe trade

#

otherwise I guess I will use poe ninja price data

#

but Id rather rely on the official api *than a third party

#

oh this makes sense

#

if that data includes the price its listed at aswell

hazy fiber
#

it includes the notes attached to items (which does include prices)

cyan void
#

thanks alot for your answers

#

thats what I needed

velvet fog
#

you can query official trade for single item too, but need POESESSID and care the rate limit

cyan void
#

its not official if its not stated in the docs

#

I had my fair s hare of experience with unexposed api's and I wont touch them again

#

its usually TOS

velvet fog
#

hmm..okay

cyan void
#

actually will look at awakened poe, if they query it then I wont care and do it aswell

hazy fiber
#

most trade macros just search the item on trade

cyan void
#

ok it does use it

worthy cape
#

Not the trade site APIs that drive the trade site website.

pallid wraith
zenith zodiac
#

l also added a file buffs.json with slightly more detail - it was actually my first attempt, but then l realised some of the rows in BuffVisuals.dat don't seem to be linked from anywhere else (e.g. 'flaming runesurge' is linked from the 'runesurge' buff, but icy and crackling only exists in buffvisuals)

#

also note l've moved repoe to a shorter url (made changes that involved a significant rewrite of the git history). the old one is still there and l plan to maintain it for a while, but l think the new version will be easier to maintain in the long run

woeful cloak
#

Curios if there's anyone from the PoB-fork in here?

#

I have a couple questions about implementing some additions to the raise spectre options.

hazy fiber
#

the answer is yes there are people in here, what questions do you have?

woeful cloak
# hazy fiber the answer is yes there are people in here, what questions do you have?

So, entry of spectres and their skills to the Lua are not dealing accurately, and many of the skills have no scaling or damage. Missing tags, etc.

The leapslam on World shatterer for example: https://poedb.tw/us/World_Shatterer#WorldShattererGoatmanLeapSlamMapBossStandaloneAtlasUber

He is listed as lacking multistrike support functionality.
However, it is functional. I've already tried adjustments to tags, both additions and removals and no success.

The scaling on 99% of imported spectres is also wildly incorrect. Sometimes as low as 1-2%, other times it's 5+%.
And many others have no scaling or damage at all innately using the POEDB data imports.

So, basically trying to figure out: how do you address and fix these issues? I have a personally maintained and updated spectre.lua pack I share for spectres that are viable but not in PoB. As well as the adjustments required for them to function accurately. But I'd love to get it actually accurate and updated.

hazy fiber
#

POEDB data imports.
we export directly from gamefiles as most things should come from there

For the scaling issues, I am unsure how they could be wrong, all I can think of is we are missing a field or 2 from the ggpk needed to scale them correctly, this would likly require a fair amount of work to figure out what about the export is incorrect (unless its just poeDBs which are incorrect not PoBs),

This would be better to take this to the PoB discord (but no one with invite privileges is online atm), How much experience do you have looking at gamefiles or extracting from the ggpk (or do you just use poeDB?), it would help if you could take a look at those and see if we are missing anything

#

minions are still poorly understood and hard to test ingame to verify things, most of the time we get complaints stuff is wrong (eg Summon Holy Relic of Conviction) and we test it we find PoBs numbers are correct, or we forgot to implement a stat thats being exported

velvet fog
#

tell me if I lack anything. what adjustments required?

hazy fiber
#

yeah I am unsure, I assumed our numbers were basically always the same as yours,

woeful cloak
velvet fog
#

the information of summoning skills has always been very mysterious

#

I can’t find any information about the skill corresponding to the summoned monster, all of which are newly added manual

worthy cape
#

A lot of monster skill wiring and effects are probably in code rather than data, or depending on scripts.

velvet fog
#

I mean what kind of monster the skill summons, or what kind of buff the skill applied.

lone ingot
#

hi, does anyone know what would be the most reliable way to extract all of the more "dynamic" metadata related to constructing filters? (e.g. BaseType, Class, stat requirement, etc)

#

also, does anyone have any idea how the rarity catergory and tier groupings for uniques has been generated for websites like poeladder? are there ways to do this deterministically via data extract or is there manual community intervention involved? https://poeladder.com/uniques

frank drift
#

dust values are in game data, and you can derive unique tier by dust value (x droplevel), so it should be possible to do deterministically now

lone ingot
#

for context I have looked at https://snosme.github.io/poe-dat-viewer/ and the methods used there (querying update server or locally) and tools like libggpk3 (extracting raw data from Content.ggpk3), was just curious if anyone had walked down this road before I traverse into the unknown kek

#

that's really cool

#

I saw sirgog's video on the gold cost algorithm as well which seemed useful also

#

for context I want to make a local filter generator that's basically for ssf and unique completion

frank drift
lone ingot
#

I've had two filters get into a bricked state with filterblade this league (league start one had major issues applying custom sounds and getting weird partial reverts after transitioning between two save states) and this recent one you may have seen in that discord. I like all the features of filterblade (obviously, I make 1000s of changes lol) but the pattern for saving filter state, not having a revert option, etc is just worrisome for me

#

that said I think it's great for 99.99% of players

#

if there were settings for filterblade that made it so the save > sync to your account's filters instead inserted a new filter (e.g. MyFilter 1.1.0) or similar I think it'd take away the worry, just right now I dont want to spend hours fine tuning something and having it get into a bricked/unstable state again

woeful cloak
# hazy fiber > POEDB data imports. we export directly from gamefiles as most things should c...

So, as a brief example.
Using this monsters data Path of Building Spectre.lua, I copy its stats and leapslam skill to the appropriate luas in my PoB files. .
https://poedb.tw/us/World_Shatterer#WorldShattererGoatmanLeapSlamMapBossStandaloneAtlasUber

Then, I load a level 0 character, with zero supports or items.
According to the calculations tab for its damage:
I have the first images linked damage totals at level 85 Spectres. ( 1656-2494 POB base damage.)

However, the same monster+level gives me the second image as base damage.
(1332-1998 base damage on PoEDB.)

As i can tell, this is around a 20% difference in base damage numbers.

lone ingot
#

20% more could very easily be related to the quality changes, are the minions being interpreted as a kind of weapon in pob?

woeful cloak
#

Goat in question has a "has_one_handed_mace" tag as an example.

lone ingot
#

does changing the quality of the gem have any effect on the output?

woeful cloak
#

Nah, just gives it more resistances. lol

#

I can provide alternative examples if desired. But its pretty standard across the board that there's discrepancies in how POB calculates spectres. Im just not sure where the differential is, and how to adjust for it.

lone ingot
#

I guess it's not that then haha, it feels related still though

lone ingot
worthy cape
#

It's a bit rough when two of the parties involved are closed source, but at least poedb has some disclaimer on the effects that do not contribute.

woeful cloak
carmine merlin
hazy fiber
#

I couldnt find any issues with PoB either, poeDB is showing you the monster stats without some of the modifiers that should apply, those are fine becouse none of the ones its missing for the monster would apply to spectre

but its also missing any of the minion specific stuff (becouse your not looking at a minion on poeDB)

carmine merlin
#

Also specific to that goat monster we don’t include proper support for the melee at animation speed attack. The animation speed is meant to be derived from multiple different game files that we currently don’t parse

#

You also have the .ot files for some minions that sometimes include important stats like for dancing dervish where it contains the 95% less damage taken mod

woeful cloak
brittle oasis
#

I've been curious too, as someone who doesn't know squat about extracting data, what are the current ggpk tools I should be looking at to see how it's done?

To take it further, do the current tools basically extract everything and there's not much room for improvement or can more be done? If so, what topic should I be looking into to better understanding how all this is done better?

Cheers

worthy cape
#

Physical file access is universally solved, the problems tends to be in relating and understanding the loose metadata files; and divining the column schemas of the DAT table files.

worthy cape
#

Missed that barduck's message was from like March slowpoke

zenith zodiac
modern dove
#

for awakened poe trade what's the difference between the installer and portable?

worthy cape
#

One installs somewhere into your user profile and has uninstall functionality and program shortcuts.
The other runs out of a folder anywhere.

#

I don't think there's any functionality difference between the two.

modern dove
#

so installer is probably the easier option huh

worthy cape
#

Yeah, that's usually the normal method for most users and programs.

#

Portable is more if you like the philosophy of running anywhere and being able to put the program where you want, or if you have it on an external disks like an USB stick, literally the origin of the "portable" term.

brittle oasis
worthy cape
#

The approach is likely to be similar between PoE1 and PoE2 assuming the engine stays related between the two.
Many tables probably keep their rough purpose but the columns and their interpretation may change.
Data files like actors and item types and whatnot I'd don't think they'd have much reason to change.

#

The more they alter, the more they have to keep in sync for shared stuff 😄

brittle oasis
#

Makes sense, I guess it'll be readily available pretty quickly, thanks for the help

worthy cape
#

There'll always be a need for curious people who have learned how things work tho, feel free to take a look at the tools used and how to use them; the community is great at answering questions.

woeful cloak
# hazy fiber I couldnt find any issues with PoB either, poeDB is showing you the monster stat...

I am really sorry to bother you. Secondary Question I am trying to figure out.
Based on earlier comments, how are minion armor calculations done?

I ask as Hulking Miscreation should (again using the POEDB data sorry, as I've been out all day and haven't had time to learn a new thing yet), at level 85 spectre have 215k armor. However, POB provides an armor total of 44k at that level. As this is directly impactful on their ability to scale their damage; its relevant to the POB calculations. So i'm trying to see if its something I've missed, or if its just considered not relevant enough to have each minions base armor modifications taken into account? Or, is that using the "original monster" numbers versus the spectre numbers? Etc.

hazy fiber
#

I would need to go look into that to see why its differnt, theres not any multipliers to minion armour iirc,

my advice is if your planning on working with PoB stuff, learn to use its exporter tool, and export some minions, then if the values dont lineup ingame, see what part of the ggpk might be missing (by looking at the dat files)

woeful cloak
carmine merlin
#

It's easier to just use the MonsterArmour column in DefaultMonsterStats.dat though and multiply it by the minion armour bonus

woeful cloak
#

Hmm. Okay. Once I'm able to open it up I'll double check against the PoB calculations.

modern dove
#

QQ about awakedened poe trade - when i move my mouse at all, the window automatically closes?

lone ingot
#

what's the difference between trade category and item class? 😄

#

it's actually maddening

cyan void
#

i made this thing for exclusive map filters, currently only does mods but the resulting regex is in whatever I tested and my friends regex alot shorter than what poe.rs throws at you
https://poe.n1klas4008.com/

edit: moving this to github pages

formal kraken
#

Doesn't seem to do anything on mobile 🤔

cyan void
#

i just scrambled something together in 3 minutes maybe it broke kekL

#

probably linked it a bit to early
edit: working on fixing it i know what it is

cyan void
#

pc = bueno 👍

formal kraken
#

Yep works now!

cyan void
#

should be shorter than the regex provided by poe.re but its only for settlers league currently, still ALOT of room for improvement if I add checkboxes for T17 stuff and other things

formal kraken
#

How are you optimizing the regex?

cyan void
#

well idk how poe.re does it havent bothered to look at it

formal kraken
#

Nah I mean your approach

loud flint
#

Also why doing this server side vs. client side? I see there's an API request to the backend. Caching?

cyan void
#

im not a frontend guy

#

not to fancy with javascript so i wrote it in my comfort language

#

ideally i write this in javascript so i can save the api call but i hate anything that has todo with web 😭

#

probably making a github for it when i have more time

#

and then do it properly with javascript

#

also still alot of room for optimization because you can use $ and ^ for regex aswell thats not even taken into account yet

clever thistle
#

from memory, poe.re uses a simple LuT for the the short regexes

jolly geyser
#

looking to join a clan

worthy cape
# jolly geyser looking to join a clan

I recommend using a channel that is more appropriate, you may not be able to see all content on the server until you've been here for a while or have gotten some roles.

formal kraken
hazy fiber
formal kraken
zealous basin
#

That might've been an unrelated cult

cyan void
cyan void
#

updated it a little bit

loud flint
#

Moved things client side, nice pogu

cyan void
#

only issue i noticed is map names

#

my friend had a false positive match due to map prefix

#

"r mo" was matching cinder morass

#

theres no list of them to add to my blacklist, so im doing oauth atm to parse all public stashes build a table with all map names and then select all distinct ones

#

just got the basenames from the wiki but cant find anything else

#

to much todo, this was ment to be small fun project

hazy fiber
#

While magic items are named with their affixes, rare items have a random name generated. Two words are picked from a pool of possible words and combined to form the final name. Names do not affect the item in any way, although they can be important for certain vendor recipes. Names cannot be changed.
Note: This is not an official list and is pro...

cyan void
#

nope sadly not

#

need these prefixes or suffixes

#

they are nowhere

hazy fiber
#

oh I guess wiki hasnt been updated in a while

cyan void
#

already went to the wiki, admin responded with this

#

so my approach now is just parse all public stashes and collect whatever i can

loud flint
cyan void
#

huh

#

wait

hazy fiber
#

thats just for magic items

cyan void
#

ah yeah

#

well still something

#

can get all the suffixes from here

#

then its just prefixes

#

if thats even all

loud flint
#

rare names are not based on that tho iirc

cyan void
cyan void
#

i take all starting with of

loud flint
#

yeah but that was a magic map

cyan void
#

even just magic its something

loud flint
#

Befuddling Clearing is a randomly generated name ("randomly")

cyan void
#

ah

#

well the repo is setup to build the page and its fairly easy to modify the file just add a line and write the thing in it

#

maybe after parsing the stashes i call it a day and then whatever else exists can be added seperately

velvet fog
cyan void
#

oo yes

#

wtf

cyan void
#

is there also a list for the 2nd word?

#

e.g. clearing

velvet fog
cyan void
#

how do i navigate to find those

#

i was looking for like a whole hour earlier

#

i was focusing on maps guess i was in the wrong section

#

is there an api for poedb to just get the words and no other html

#

plaintest,csv,json anything

#

text*

#

what about suffixes like these? this one for example is not on rareitemsuffix-words

velvet fog
#

magic name using mods name, rare names using words name

cyan void
#

i can parse them from the page i guess, that will also work

oak estuary
#

They're in Words.dat, but I don't recall the metadata used to mark them as rare words

oak estuary
cyan void
#

❤️

velvet fog
#

ModGenerationTypeID: 1: Prefix, 2: Suffix
ItemFrameType: 1: Magic, 2: Rare

cyan void
#

what about in standard league only / settler league

#

guess thats not part of the data

velvet fog
#

no idea

cyan void
#

this works for me though thanks alot

cyan void
zenith zodiac
worthy cape
#

I'm curious, has anyone here ever tried deploying poe-dat-viewer from scratch?
Ran into some trouble the other night where I can't build the dat-analysis WASM with Zig at all, having different errors with different Zig releases.

#

Haven't even dared try to build/deploy the actual web snout yet.

worthy cape
rapid pagoda
clever thistle
#

now that we have a secret agent in ggg we can get all those spelling mistakes fixed too! 😄

worthy cape
#

Or add more, you never know.

grave wren
#

i require a hidden ß somewhere

velvet fog
#

Great mystery agent, we need some poe2 cbt key poke

worthy cape
grave wren
#

ẞaßaßin

#

the sassiest of the bunch

grave wren
#

@fickle yew hey i found that the list of all skills (now) includes support gems, should it do that or should it filter actual gems? If it should do that could we get a filter to only see active gems?e.g. https://poe.ninja/builds/settlers?skills=Righteous+Fire

fickle yew
grave wren
#

Would be cool to quickly check aura / buff use

lone ingot
#

pretty cool looking through stuff this way 😄

gilded tree
rapid pagoda
lone ingot
frank drift
#

data driven how?

lone ingot
# frank drift data driven how?

incorporating a few sources like your unique stash, groupings in game files, etc and basically making something that can be aware of what is currently in your stash

frank drift
#

FilterBlade already does all that, though some of it isn't used much (stash)

lone ingot
#

I like the idea of following grouping and tiering that's present in the game files, e.g. gold values, all the categories incl the new currency exchange ones etc

#

also like the idea of local runtime and fast feedback cycle for changes <> in game

frank drift
#

that is true, anything fast has to be local

#

FilterBlade stash features are only "eventual"

lone ingot
#

I think filterblade is probably fast itself, it's probably just the contact point with GGG's API

frank drift
#

correct

lone ingot
#

I am assuming there is some kind of rate limit

frank drift
#

also correct

#

about one filter update per 10 minutes per filter

#

you can of course turn on local filesystem saving on FilterBlade and use that, but a bit more of a hassle

lone ingot
#

yeah, it makes sense, there needs to be something protective on their side else it could be abused pretty easily

frank drift
#

GGG verifies that every filter upload runs without errors too, so that's no doubt a little costly

lone ingot
#

I basically want to do local client/server where the server can access the file system and update the filter immediately, the networking aspect purely being for getting data to inform the local process

#

I think the only really difficult problem network wise is oauth, as you'd need some service that the local server can interact with for a session

#

likely it'd need to be hosted in isolation

cyan void
#

sounds very doable

#

but anything dynamic is usually a bunch of work

#

i am working on something dynamic aswell currently hypers

#

got it to work properly for one of the many aspects now so I am happy

lone ingot
#

it seems like you can do a lot just with the game files from the patch server, I did some very basic mapping into a sqlite db in the browser's local storage and it seems fairly promising

lone ingot
cyan void
#

when you say update filter immediately that is a bunch of code to figure out what you want to update and how and why and when

lone ingot
#

I think for filters you basically just need to create some kind of dto between your interpretation of the game files and the text output in filters

cyan void
#

having data is one thing, deciding based on it and making it work is another

lone ingot
#

100% haha, I think it depends how you stucture it

cyan void
#

i have a slight problem with my code aswell atm but I bandaid fixed it

#

there is no solution to the dynamic approach sadly

#

*no good solution

lone ingot
#

I looked at the filter file format and it reminds me a lot of yaml, in that sense you can express each area of the filter with a key like in a hashmap

cyan void
#

hearing hashmap i think of java

#

oh i love java

lone ingot
#

or a dictionary etc

#

you want to be able to go existing filter > parse each section > file format that's indexable

cyan void
#

tbh if u have something local anyways id just write up my own data structure for it and then a parser that converts it to the filter format

#

probably way more efficient than live editing the filter file

lone ingot
#

you probably do that by using a comment like below then your parser's responsibility is to take that format, interpret that as a key to the intermediary format which your tools use

#  mysection
Show:
  ...
frank drift
#

NeverSink made a whole domain specific language for filter processing, that gets compiled into GGG's filter language

lone ingot
#

the point is on both sides you want to be able to existingFilter.sectionKey and dto.sectionKey

#

or dto.mysection following that example above

cyan void
#

funny, looked up the neversink repo, I started poe 4 weeks ago.. used to play wow so I selected wow as a style

#

why is that bad for beginners?

lone ingot
#

it does not really show things as differentiated

#

it's purely based on "rarity" and "worth" as concepts

frank drift
cyan void
#

oh im griefing myself

#

maybe thats why i put myself into misery to write this shit code

lone ingot
#

e.g. a currency item and a unique item may appear the same, even though they're very different

frank drift
cyan void
#

guess im changing my filter style

loud flint
#

the real chad move is to not use a filter at all

worthy cape
loud flint
#

Hey @velvet fog can I talk to you in DMs real quick?

flat star
brittle oasis
#

Is there a way to use these with regular css? Or was this meant for canvas/svg?

cyan void
#

happy for a first time project with typescript

loud flint
#

Quick note looking at the code

#

for of is generally better than for i

#

Or if you need index, just use forEach

cyan void
loud flint
#

You can also just use for in and then grab the element within

#
const someStuff = ["This", "List"];

for (const i in someStuff) {
   console.log(i) // 0, 1 (index)
   const el = someStuff[i];
}
#

Way easier to read than the old for i

#

Also way more performant due to optimizations in V8 iirc

oak estuary
modest path
#

Hmm, anybody know how the stat description "functions" like "divide_by_twenty_then_double_0dp" are referenced from code? I'm not seeing any of those strings in the binary, nor any substrings or anything

#

I know pob's lua and repoe both have blocks to handle them, and mine is working, i'm just curious about the actual code in the binary

worthy cape
worthy cape
modest path
#

The code

#

ajkl;afeejkl

worthy cape
#

😄

modest path
#

Is that different in the game?

#

I'm doing the display end of things with it

#

but I'm just curious what sort of non-euclidian shitfest this is as the game binary handles it

#

Because the list of "functions" is hilarious

worthy cape
#

One thing we've seen in other places like client log messages is that some parts of the log output are code locations hashed at compile-time, like FancyCTHash(__FILE__ __LINE__). It's very possible that whatever lookups the formatting code does is similarly compile-time, either intentionally or indirectly via hashmaps and a Sufficiently Cool Compiler.

#

I love those modifiers - they say exactly what they do so designers can write and read descriptions without having to do math or some other sort of expression.

modest path
#

Yeah, was kinda assuming it was either a compiler optimization or some sort of hashing, but the bit where the "functions" are in string format in the file kinda is wacky if that's the case

worthy cape
#

Great fun when new ones appear in patches and leagues tho.

modest path
#

@worthy cape I especially like how nearly all of them could have just been represented as a basic math operation and a format string

#

Also the bit where they already have format strings in the stat description texts...

worthy cape
#

It's loosely based on fmtlib, so they probably don't want to modify that.

modest path
#

they def have some version of fmtlib in their binary

worthy cape
#

And again, people writing these strings are typically non-programmers.

#

Heck, even translators at times; having it out of band there probably helps with that too.

modest path
#

Yeah, I get it, but I still don't like it

worthy cape
#

^_^

modest path
#

I wrote a parser combinator based library to parse both the full stat descriptions file format, but also a subparser to parse the "extra" portions, which is kinda stupid given that their implementation is clearly a switch - But mine is more fun and handles things like "2dp" dynamically as part of the parser

#

so it can technically parse formats that don't exist yet

#

if they're made of the same base elements

#

it is almost certainly not accurate when it comes to decimal places in one-off cases though

worthy cape
#

Now that they know, they can explicitly break your parse 😛

modest path
#

They were going to do that anyway

#

Should make a bingo card for new units of time and/or newways to express "/10" and play the slowest, most painful game of bingo ever

worthy cape
modest path
#

weeks_to_fortnights_then_multiply_by_point_five

modest path
#

Oh shit I totally missed that there's a statdescriptionfunctions.dat64, which has both the string that's in the stat_descriptions.txt file, as well as a pascalcase version, as well as an index that can be used as an ID

worthy cape
#

There's too many tables 😄

modest path
#

Yeah there are definitely a number of tables that is significantly above zero

#

Unfortunately, looking at what I now know is the parser code in ghidra is approximately as useful to me as not having found it

worthy cape
#

Modern C++ code is lovely, isn't it?

modest path
#

c++ machinecode is horrible

worthy cape
#

Extra fun with static runtime libraries as it gets particularly inlined.

#

Small string/vector optimizations make everything just a wee bit more annoying to read.

modest path
#

This function is definitely the parser, though

#

"Expected stat index after preformat function name" - well I guess I know what they're called now, at least

empty knot
#

Heya, Guys how you doing ^^

toxic agate
#

@cyan void I'm testing out exile.re and there seems to be a bit of a bug in the optimization when using "I want all of the modifiers"

It seems to be optimizing it as if you're looking for any of them, for example if you want both phys reflect and ele reflect the regex you get is just efl even though that will match with only one of the mods

also the more maps/more scarabs do nothing when you enter a value under 10. I think it would be valuable to be able to enter "1" or something like that just to verify that there is any more maps/scarabs

cyan void
#

efl actually matches both of those mods

#

its in the word reflect

#

if you select a single one you would get either tal d for elemental damage or f phfor physical damage

#

as far os optimization goes i havent checked if anything done with ^ or $ could be shorter than what it currently generates, but yeah thats it currently

#

oh it actually gives nothing when you enter 1, I'll have to check back on my code its supposed to give you something, i did some optimazition for 1 because in theory you dont need a regex, you just need the unique string followed by .* because the .* will match anything anyways which means no need to waste more characters

#

Ill fix that one now

toxic agate
cyan void
#

i dont see why this woudnt work?

#

oh wait

#

ok nvm I get it

#

has to be done different for inclusive

#

i mainly just use exclusive didnt put much thought into inclusive one

#

it should work fine for any i suppose but not all

toxic agate
#

yeah any works fine from what I can tell

cyan void
#

I'll disable that checkbox for now, thanks for letting me know

#

hopefully I can fix it tomorrow

cyan void
#

pushed a fix for the lower end numbers, page should be updated in a few minutes and work accordingly, if you cant select i want all mods then you have the updated version @toxic agate

toxic agate
#

works great!

empty knot
#

Hey guys, I want to ask something?

hazy fiber
#

better to just ask, than to ask to ask and then have to ask

cyan void
modest path
lone ingot
#

pretty cool huh

frank drift
#

cute

lone ingot
#

it's definitely possible for it be mosty data driven now which is pretty cool

#

the only major gap from the game files is uniques

frank drift
#

wonder how hard it would be to render the actual div cards

lone ingot
#

I think you could get the mappings of each base name to their art, I am just looking at the inventory icon at the moment

#

if anyone knows the mapping from ItemVisualIdentity or BaseItemTypes I can do it, I just made the visualiser to be a visual aid haha

lone ingot
worthy cape
lone ingot
#

what kind of shaders are they @worthy cape ?

worthy cape
#

HLSL. The hardest part was figuring out how to loop them as they're not really made for that.

#

Also compositing them together for the dual ones.

lone ingot
#

I think I'd like the art for things anyway, it's not necessary initially but it'd be nice for tooltips and things like icons when returning results from search

worthy cape
#

I don't remember if I uploaded a repo or not, but you could probably grab still frames out of the videos for an acceptable effect.

lone ingot
#

I had a similar question about flask, gems, etc. they are split in parts and overlayed on each other clearly. is there any way the game files instructs that to happen?

worthy cape
#

Another fun shader is the transfigured gems, those are probably easiest to pull from the wiki too.

#

Flasks and maps are probably hardcoded.

lone ingot
#

maps are at least somewhat simple because it's just their icon

worthy cape
#

Ho ho ho.

lone ingot
#

this I don't know 😄

worthy cape
#

We just noticed today that conq maps have an additional layer.

#

Split flasks in three vertical parts and overlay them, it's a back, a fluid, and a front.

#

The wiki's PyPoE has logic for assembling the art.

cedar grove
#

Good day, i was wondering why i get this error in poe awakene trade application while checking rare items, but on uniques or more simple items it works?

frank drift
#

did you change keybinds?

worthy cape
#

The mojibake there is a bit surprising, does that normally happen?

#

Ah yes, that's an , makes sense.

frank drift
#

I missed that, that might be it

worthy cape
#

Those codepoints have been there since years, so probably not super relevant, unless there's something weirdge about the locale.

worthy cape
#

I love literal screenshots, low-tech solutions 😄

toxic agate
#

@cyan void another couple issues here
firstly selecting some mods (either t17 or non t17) while "T17 mods are relevant" is checked causes the site to hang, nothing in the console and happens to me on chrome and firefox. I didn't test every mod but it's happening to me on the % increase monster movement/attack/cast speed mod and the monsters gain max life as es mod

and second, the optimization seems a bit aggressive sometimes. In my second screenshot I have 2 mods selected (ele reflect and monster impale), but it also blocks an extra mod (phys reflect) which I didn't select to be blocked
if I also add the phys reflect to the wanted mod list it gives me back a regex "!efl" "t \d+" which can never possibly match any map

cyan void
# toxic agate <@1257827541239205889> another couple issues here firstly selecting some mods (e...

thanks again, the site hangs because it cant find a unique match, due to it existing as a T17 version aswell (I did not link them up)
its impossible to find a unique string here, I have a mapping for things like these which groups them up as one

as far as for the 2nd issue, the left and right side are currently not connected which each other, also a thing I didnt think about but very easy to fix, I'll do that later today when I find time, the grouping I'll fix now quickly

cyan void
#

fixed the site hanging issue for now, not even caused by what I thought (them not being grouped), rather my dirty while loop which has now been exiled. should work for t hat part yet - but exclude & include sides are not connected yet logic wise I'll do that later when I have more time thanks again for reporting o7

#

actually it should be pretty easy to fix that aswell I'll go try quick

cyan void
#

AHHH ok its my grouping, lol.

#

(u have to subtract 1 from the line number on left screenshot)

#

if you put in refelect % of X damage it also throws in the other into the pool instead of jsut the t17 mod

#

i go fix it

#

27 should throw in both but not the other way around

#

i did this more than once this is a very good catch

cyan void
#

mh i need to improve disabling of mods, if i select for example "Monsters reflect #% of Physical Damage Monsters reflect #% of Elemental Damage" then i need to disable this and the two child mods, not just the 1:1 counterpart

cyan void
#

@toxic agate all fixed o7

#

( i hope )

#

if I also add the phys reflect to the wanted mod list it gives me back a regex "!efl" "t \d+" which can never possibly match any map

#

think i need to blacklist . as a character

#

i just realized thats not gonna be working as expected

#

i wonder if escaping it with \. would be accepted by the game, need to roll that mod to see

#

ok it is time to fix again

worthy cape
#

Every time I think I understand PoE's filter box, it confuses me.
Failed the other day to roll flasks where I wanted to highlight ones that had either one of two mods.

cyan void
#

i mean its just regex

#

its text matching

#

once you understand it it goes from what is this to oh this is really simple

worthy cape
#

I know regexes. I don't know the particular amusing logic with which PoE tokenizes and matches on parts of the expression.

frank drift
#

it's not just regex, it's a mix of certain regex features plus PoE's own syntax

frank drift
#

although it supports more features than it used to

cyan void
#

but for 90% i would say its regualr regex

#

if you dont try todo something fancy

worthy cape
#

I think I was trying to match something like bleed|increased effect and regardless of the amounts of quotes and parens I slammed into it, it refused.

#

I forget which the particular case was as I half-arsedly rolled all my flasks the other night.

cyan void
#

should be really easy for me to make a regex generator for anything else now

worthy cape
#

Might try to repro some day and see what actually happens; ended up using my eyes instead and reading mods.

cyan void
#

all i have todo is change the input file with item names

#

and it would work right out of the box

frank drift
cyan void
#

hope the 50 char limit gets lifted with poe2

#

or they have a proper inbuild filter system

#

its client side anyways, i dont understand why it was limited in the first place

#

maybe it was inefficient and crashed on longer input

#

one can only assume

frank drift
#

people are bypassing the 50 char limit by using controller entry

#

it's pretty funny

cyan void
#

like an actual controller? or am i not aware of some fancy lingo

frank drift
#

no an actual game controller

worthy cape
#

This one, repro'd:

worthy cape
frank drift
cyan void
#

quote should only matter for the second half but the first one is already matching

#

so it should just pick it up

#

can i have the flask for a few minutes? @worthy cape

#

i wanna play a bit

frank drift
#

if I run into issues I use mod name, which works since the mod names are in the name of magic items

worthy cape
#

@ZaoStriking in league.

cyan void
#

"bleed|recovery rate" works
bleed|recovery ra also works
the moment u add in the t it stops working lmao wtf is cooking behind the scenes, 12th character makes it break

#

other 12char strings are accepted

#

without quotes

worthy cape
#

Keep the item if you want to play, I'll make one from scratch tomorrow.

cyan void
#

nah with play i ment play around

worthy cape
#

Yeah, I understand.

cyan void
#

clearly something funky going on though thats interesting and good to know

#

guess always quoting to be safe is the play

cedar grove
#

Anyone had similar issue

worthy cape
#

Does it manifest only on that particular item or more/most?

worthy cape
# cedar grove

If you Ctrl-Alt-C and paste into Notepad, does it still show those broken dashes in the modifiers?

#

The code annoyingly uses the same exception (with logs to the console) for several error conditions.

#

Heaven knows where console.log ends up in an Electron app with no real main window.

cedar grove
#

Yep, broken dashes show up in notepad aswell

#

On some specific items like uniques and stuff application works, on rares not so much.

worthy cape
#

Something might be krangling your clipboard contents or something about your system affects the encoding of text on the clipboard.

#

Any unusual environment, like old Windows, non-English Windows display language or user codepage?

#

Maybe file an issue on github, preferably with the item text enclosed in triple backticks (```) so that it doesn't get mangled by the system.

empty knot
modest path
modest path
# cyan void other 12char strings are accepted

I think they first split on whitespace and and doing separate regex matches on each chunk - for me putting in bleed|recovery r matches a bunch of flasks but adding a then t then e progressively removes flasks that don't have one of bleed OR recovery AND r then ra then rat then rate. I suspec they did that because regex dosn't have a good way of doing order-insensitive ANDing

cyan void
#

ah

#

wait true

#

its a seperate string

#

idk i had brainlag

modest path
#

The quotation is also wacky in a way I don't fully understand - if you quote each entire regex though it does what you want

#

if you try to use quotes inside a regex it seems to maybe do space/quote tokenization before the regex gets run

#

breaking it

#

which totally makes sense because they're pretty certainly parsing it with character reads and if statements

#

Unrelated, do these strings mean anything to anyone? Stats normal Stats handed Stats 64 Stats 128 Stats 256 Stats 512 Stats other

worthy cape
# empty knot ok, well is there any channel here for the artwork?

If you're curious about accessing game data files, this place might have some insight.
If you're curious about things like community art competitions or finding similarly-minded people, heaven knows, one of the general channels that you may not immediately see.
If you're a bot, go away.

modest path
#

There an api or regularly freshened data dump with currency exchange rates from the trade site?

modest path
#

Amazing

#

I'm not after super up to date or anything, just general exchange rates for cost estimation

velvet fog
#

The only source currently is poe.ninja

modest path
#

I see their data dumps but that seems like it's previous leagues only unless I missed something

#

I mean I can obviously just slurp that

velvet fog
#

you must missed something

modest path
#

I see it's just a json endpoint for the currency page's data, easy enough

#

Just didn't see any docs

frank drift
#

there are none

modest path
#

Sure there are, they're just written in json ;)

frank drift
#

if you want to see it that way sure

modest path
#

Also they are 100% accurate docs

worthy cape
worthy cape
#

In other news, bleed|"recovery rate" is criminally wrong.

modest path
#

they have to be just stripping quotes in random circumstances

#

like is that rate" matching as rate, and the rest is being ignored

#

no that's not quite it

#

Lol try "bleed"|"xxx"

#

it won't match bleed

frank drift
#

this is why I don't even try to figure out what's going on

worthy cape
#

I have an idea of what's happening there, did they ever describe the syntax or just go "lol, there's regex"?

#

Or did people find it out without being told up-front?

modest path
#

hovering the icon by the search box "describes" it lol

frank drift
#

it didn't always have regex IIRC

#

I wonder if they annonced it when they added it

modest path
#

you don't ahve to put spaces between doublequoted strings

#

"recovery""consecrated"

#

matches things with both

worthy cape
frank drift
#

pretty sure regex features like groups are relatively recent too

modest path
#

they are def using a regex library elsewhere, it'd be insane for them not to just use that given this is client side right

#

it's gotta be standard msvcc c+= regex but with some tokenizer wrapped around it

#

Hmm, actually should be easy to check for with a more advanced feature like negative lookbehind assertions

worthy cape
modest path
#

yeah lookbehind/ahead assertions work

worthy cape
#

Fingerprinting regex libraries, that's something new 😄

modest path
#

Ehh, more just verifying they didn't hadn roll something for this

#

the msvc regex lib supports several modes: ```
ECMAScript: This is closest to the grammar used by JavaScript and the .NET languages.
basic: The POSIX basic regular expressions or BRE.
extended: The POSIX extended regular expressions or ERE.
awk: This is extended, but it has more escapes for non-printing characters.
grep: This is basic, but it also allows newline (\n) characters to separate alternations.
egrep: This is extended, but it also allows newline characters to separate alternations.

#

it's also somewhat ambiguous on what they're actually matching against

worthy cape
#

"text"

modest path
#

It appears like they're iether using one of the modes where it doesn't do \n, or the text is all one line

#

no flasks in my guild tab have multiple whitespace characters in a row

#

Ok here's a fun one lol

#

"^a" matches every flask with the item name starting with A, but it also matches The Sorrow of the Divine

#

Which doesn't start with A

worthy cape
#

The answer is in front of you.

modest path
#

But the sorrow also matches "^the sorrow" implying there are multiple separate calls on array elements or something

#

oh

#

the fucking description text starts with A

worthy cape
#

^_^

#

My Cinderswallow matched too.

modest path
#

God definitely weeps right now

worthy cape
modest path
#

so def separate matches per "line" whatever a line is

#

`"use$" does not match "creates a smoke cloud on use"

#

but "^creates" does

#

oh the control-alt-c text has (implicit) at the end

#

yeah "use\s+(implicit)$" matches