#tooldev-general
1 messages · Page 128 of 1
ahh ty, that brings them back now
steel inventing new logout macro on stream 😂 (logs in second client to force kick yourself in 1st; bc as he said sometimes logout is not immediate)
Can't wait for someone to try to refine that into an extremely bannable tool that tries to do protocol replay and screw themselves and everyone ever touching it over.
Just Don't Get Hit ™️
New support - Peer when Damage Taken.
Cut Cord When Damage Taken
or Send FIN When Damage Taken
wonder when people will understand that the "Logout is not always immediate" might not be a protocol issue on client side, but how server do their routines
Need to stack ACKuracy.
Absolutely, to create SYNergy between client and server
I rewrote my fetching thing last night btw, @worthy cape - I was previously wrong, it's not just 50ms to shave off. It's around 600ms if u start from id 0 currently for me
so that's actually noticeable
Any estimate on when pob will be updated?
soon ™️
I'm adding all the changes for the skill gems to the patch this time which is why its taking longer
🎉 love PoB
wont be done for a couple hours though btw
Appreciate the effort! Also, I found a bug in PoB, would you like me to message you about it?
yeah sure
that was my immediate thought
If anyone wants to check out their build with all the gem changes before we release an update
Is there an API endpoint I can use just to check rate limit headers?
swift affliction duration line changed from reduced to less btw
ignore me mod("SkillAndDamagingAilmentDuration", "(-INC)+MORE", nil),
This is a patch notes version I can understand and relate to 😄
Like one as an example, or one that gets you state on the different independent policies your account/IP has counted up against recently?
Any should do for the former, don't think there's any for the latter but actually making requests to specific endpoints having the policy you care about (which would count towards it).
@velvet fog add this https://www.pathofexile.com/api/trade/data/change-ids to swagger
As in the latter. That's what I figured ut as well
where u find that? is it the latest-most change-id?
As I'm making the client async, I imagine I'd have to make the first request synchronous (before rate limit state is known) so I know how many requests I can do after
or make some assumptions of the default rate limits based on ip/client/user token
yes, id without 5 min delay (obviously when trade not lagging itself 😄 ). don't remember where I saw it, just bookmarked
Bonus fun when you're not the only process that are touching the policy on your computer/network.
Very fun
We're using the user's OAuth token, so need to pin their session to that instance 😐
or use some distributed thingy
IP still takes precedence over OAuth Token when it comes to rate-limiting, right?
i.e. you can't have a web-service work on behalf of let's say 100 users on a single IP
I don't get the IP rate limit state in headers, so not sure
oh, maybe he fixed that since I tried it back in 2018-2019
time to rekindle that application key
It will just be three users though. But then loading each stash tab or w/e even for one user reaches the rate limit really fast, essentially on a single unique tab 😄
time to get something with multiple NICs? 😄
Azure has something called Source NAT, which you attach a CIDR, and you'll get round-robined. A bit less deterministic in case of rate-limiting though. Main purpose of SNAT is to alleviate source port exhaustion, but could work.
tried HEAD request ?
hmm, I tried marking "last access" time just before connecting, and adding an arbitrary 50ms to that time, and ensure there's always 500ms before doing next request. I jsut got throttled anyway
argh
is this on the OAuth character API?
we rate-limit on OAuth client instead of IP when you're using tokens 😄
mind re-enabling my thing?
send me an email with what you want enabled in it
ok can do - is there a list of scopes available somewhere?
yeah it's kind of shit I need to redo that part of the docs
are there other ones not listed?
none that are available to the regular joe
it just needs to be more linked into the resources page so that it's more obvious which endpoints require which scopes
I think it's pretty fine as-is, quite obvious
that's good to hear! It's unfortunately the thing people struggle most with when requesting access
You've got mail. @compact isle
@carmine merlin is there a place to submit pull requests that 100% shouldn't be merged? I wrote up a pretty hacky proof of concept aurabot exporter inside of the calc's tab, but it should really be rewritten by somebody who's coded in Lua before today if it were to ever be merged in
Now, hopefully WinUI 3 becomes a stable development story soon ™️
mark it as a draft and create a PR
I vaguely recall that we discussed this a "couple" of years ago. Back then, I believe IP policy was in effect even when using delegated oauth
technology evolves!
thanks as always for updating PoB Fork guys
aye, these nerfs are going to be glorious to poe
i can't find earthbreaker support in the gems, is it just not in yet?
i was hoping it'd go as hard as back to 2.4
If you note something missing or broken, might be worth filing a GitHub issue.
Possible that totem-like things like that just don't have enough data to guesstimate anything.
New skills will be updated after the new league is launched
gotcha, thanks!
is anyone familiar with the cargoquery for the wiki? I can't seem to get the right query to pull skill_gems - trying to build something for fun here but can't find a good resource for skill gems in json format besides the cargoquery from wiki.fandom
Not enough info in say RePoE?
didn't know that existed...thanks!
PoB update out with the 3.15 skill tree and my hacked in skill gems
New bugs for all!
🐛
Ty for update local
This is a tooldev general appreciation message
Feel appreciated, all of you
hey guys i tried to download path of building and when i get it and installed it it keeeping to closing after i start it somebody have simmilar issue?
I had a problem with the new update and uninstalling it and downloading the new release fixed it
Mine would hang when the update terminal came up
Know old issue, when your stuff is installed in Program Files or some other privileged location, you tend to need administrative rights to do things. Suggested workaround is reinstall into appdata or other location that you have rights to: https://github.com/PathOfBuildingCommunity/PathOfBuilding/issues/2930
does POB support Cogwork / etc rings ?
seems like custom editing won't let you remove a prefix and add a suffix
No, but you can click the Edit button and put in whatever you want
The person preparing the patch notes often copy/pastes the formatting for skill stat descriptions from the wiki and then adjusts the values to the correct ones based on the skill's balance history.
PyPoE indirectly helps to write patch notes 😄 I can't believe they don't have tool to compare and format stats between 2 commits
why invent something that already exists? 🙂
well I shouldn't say anything, I am definitely one of those who suffer a bit from the 'not-invented-here-syndrome'
I don't understand why they wouldn't give that person an internally written tool for that
what's a little copy/paste error among friends I guess
Is it worth the dev time for something you do once a quarter and which normally isn't that much load?
in 7 languages YEP
that's a pretty valid point too, I guess
I'd like to think that the wiki is secretly authoritative for the game and we just haven't noticed.
Wikis are great, yet I feel that the data format and how things are linked is a bit "dangerous".
Wonder if there are any cool "knowledge graph" formats out there that is more "reliable" in the sense of validation and reading-by-a-computer-safe
and still user-friendly enough for people to use and display as a wiki of some kind
wee i'm a dev now! 😉 😅 Add space and newline before custom mods on Timeless Jewel nodes #2888 (Nightblade) ||+7 characters||
Based on your comment I ran with admin rights, and it updated correctly. Thanks, and is easier than reinstall.
I'm stuck in a weird state now with the async client. When there's no state, I need to make the first request blocking so I can read all the rate limit headers first and then allow the rest of the requests.
Otherwise I end up allowing all requests as it doesn't know what's the max hit count yet 😐
Idk if I should make an issue on the pob fork github, but gaining Hexproof via Vidiri's Veil in game still allows you to be cursed, you are just unaffected. Current PoB is counting you as curse immune instead of unaffected (for Self Flagellation, Coward's Legacy)
Anyone having issues updating/installing PoB fork
if you are, completely uninstall then reinstall
that fixes the vastly most common issue
hmm I was getting an error when trying to reinstall it when I tried moving the install location to my C drive program folders
but I let it try to use the folder it selected in user app data and it worked
recommended not to put it in Program Files, if you do that you need to run it as admin
the way it self-updates it needs an unprivileged location
hmm maybe thats what it was, this was the error message
yep
The other option is to always run PoB as admin 🤷
Is this because the new installer/update system cuz I previously had it installed on my C drive program folder no problems
it changed awhile ago yeah
the installer used to put it in Program Files, but hasn't for a long time
Usually it doesn't matter for most updates as most files weren't installed in a privileged location. This one changed a backend file that was, so you got the error
Hey, is this the right place to ask for help with POB? (it keeps crashing)
Have you searched the github issues?
Is it a proper fun crash with Windows dialog or to desktop, or the boring type with black-on-white with a red border with some Lua junk?
Praying it's not the former personally 😄
Torrent's up: https://www.pathofexile.com/forum/view-thread/3148008
Did they scrap all the Data files in the GGPK torrent?
always

I blame the Kalguurans, somehow.
I blame Dinkleberg
Game no longer has any data. All behaviour defined in code
Well, the current Content.ggpk has no all required bundles listed in the "index" file. I guess we have to wait for the release patch to get all the "_tiny" bundles etc.
Float parameters are for the hardcore players.
@compact isle but... PoB won't be ready anytime before league launch with the amount of new gems and only 3 hours to try to get things working... or is that the intent?
is intended that those things are still being worked on and we don't want them to be datamined, yes
roger
it would be very kind of you if you dropped us a line where the base item type values for armor, evasion, ES, etc. got moved to since that table seems to be gone in 3.15 when you guys are ready... I'm guessing probably into the base item type table itself
er... not sure how you think you know that; the whole Data directory is customarily omitted from torrents
Nostradamus was a prophet
You can still read all file names from _.index.bin, try it out
technically there's pages on the web site like https://www.pathofexile.com/item-data but they're terribly incomplete and I don't even know how accurate they are
heh, right, I don't actually have the torrent downloaded
(watch the index disappear from the next torrent)
they're up to date
that reminds me I need to add Ward to that page 😄
see, we're helping!
I couldn't figure a good way to do the subarea-specific searching so instead I just treated it as a flat set of mods that you can search through as normal
we'll see if the requirement to drill down further exists and do that later (it'll indexed in a way that we can add that later)
bosses are easy since they are per-faction as well as being directly specified in the description
Is there a maximum byte size for a publish stashes response from the river?
internally yes, so before the items are described
I implicitly thought it was 5 MiB and allocated and it threw an exception.
would it be possible to add a Content-Length header to the response?
Wouldn't that have quite the risk of delaying TTFB and increase buffering if it has to pre-render before sending any content at all?
yeah I think cloudflare will nuke that anyway when they re-compress it
Microtransactions image (ex: https://web.poecdn.com/image/Art/2DItems/Effects/Frames/AesirDemigod.png?w=2&h=2) removed from cdn, is it intent?
yeah all item images (and all images we generate FROM /Art) will be /gen/image from 3.15
key is required for mtx images
no hotlinking >:o
it's fine to link ones you get from us the problem was people getting paths from the GGPK and spamming constructed URLs at us
@compact isle sometimes, I get a 401 response when using the Authorization header. Not sure why, as retrying helps. Are there any benefits to using the authorization header for the public stash API?
for security reasons or cdn bandwidth? I don't know why to restrict it
This sounds like something i've recently implemented in PoE Overlay Community Fork where I construct a url path for any/all bulk exchangable items. Is this causing an issue? And will this be blocked in 3.15?
image paths that work right now will still work, we'll turn any direct /image/Art/2D(Art|Items)/... off in 3.16
same as PublicStash API?
all URLs we generate will be /gen/image
I just use the icon to distinguish item class and unique items
you can still read those from the base64 encoded segment of the path
okay, just build a mapping table like flasks
yep exactly like flasks but you can just read the URL and get the path out of it if anything depends on that
umm...... what dis? I no understand
I assume that https://www.pathofexile.com/api/trade/data/static will be updated in 3.15 (or 3.16) when everything moves over to /gen/image/...?
Known bug, some of the workarounds in the issue may work for you or you get to wait for an update: https://github.com/PathOfBuildingCommunity/PathOfBuilding/issues/2945
(GitHub is the primary place to report bugs with many tools, including PoB)
that's will heavy impact my site with that
heavily hotlinking the cdn images (passives, uiimages, ...)
I will try to store images on the site but the site bandwidth may not sufficient, or just give up
and shift to the new world
@compact isle when the /images/Art/... is fully removed, can we also get "image":"/gen/image/..." for Div cards, (Blighted) Maps and prophecies. Those are currently not included in the static trade API data
I've got most of my personal sites behind Cloudflare these days for fun. Does anyone know how much approximately that saves you on traffic?
with workers sites? https://developers.cloudflare.com/workers/platform/sites
Why not store the generated link in the items table in its own DB field, then simply use the generated link to display the image? That's my plan atleast, instead of composing the url based on the GGPK's base item type data, I'll just load up the static API data and grab the generated link from there and create the item record and attach the generated link to it (rather than the composed one)
I've got my site running as normal but using their DNS with the web fronts set up as "Proxied".
Hides the IP and caches stuff on their CDN.
Currently, yes. But based on Novynn's feedback on my earlier question, the static data's "composed urls" will be replaced with generated ones
there are not all in the static data
But then again, the trade/data/static only covers bulk-exchangable items... you'd still be missing a lot of others
Maybe "image" has to be added to trade/data/items too then, thus way each base item type & unique item has a generated image
https://web.poecdn.com/gen/image/<base64 data>/<10 hex digits>/Item.png
Is the significance of the 10 hex digits known? Changing that part causes "resource not found"
nope, that's secret
Doesn't the wiki also have all images of items? Maybe that can be used as an alternative source if something is missing from GGG's api? 🤔
Poe constantly deletes data files, adds more access restrictions, and lacks proper APIs. This is unhealthy for the 3rd party.
for me it saves around 30-35%. But it depends on your page and settings.
My stuff is pretty much only public_html so it makes sense that it caches most non-first hits.
Looks like some Jamanra files were added. Maybe those missing Nenet contracts and boss fight will be available in Expedition?
On Poedb: "Expedition stuff not up until patch drops tomorrow, the torrent deliberately does not have that data."
Does this refer to patch later when league starts, or the 2-3 hour downtime before that?
as soon as patching servers up, so technically poedb can start data mining 2h before league start (not unique items tho, they are added as soon as first seen in river afaik)
Ah thanks 😄
it's true for all tools....
LOL was mid flow working on my client and didn't realize release is so soon. Blocked by error 500s (:
patching 👍
880MB patch if you have the torrent btw
300kb download speed, take a lot of time to finish the download
mods.dat has reading breaks on the Data4 field 🤔 (ref|list|int)
hmm.. send me a copy of Data/ ?
These are the ones PoB uses
My Data/ folder is 150MB... so how is PoB's 7 MB xD
we dont use all of the dat64 files so only extract the ones we need
3.15 Data/ folder (from steam) https://easyupload.io/0yk7gm
@civic crane the data change you just deleted, that was Data1 and Data2, not Data4 🤔
yep, they were read corrctly but this is not what they hold anymore (both datatype and semantic)
So all DataX need to change to int32's? since they no longer serve their purpose?
It seems more data got shifted, changing Data4 to int32 now moves on to Keys1 field that suffers the same issue, it's no longer a ref|list|ulong
Added/removed data files, no huge surprises here
(PassiveSkillTrees probably got added in late 3.14 for Royale but whatever)
Yeah, it looks like the mods.dat table format completely changed. -- I'm still wondering if the .dat files don't actually contain table headers or field sizes or something, or would these be hard-coded into the EXE ?
yep, c++ code to read them into structs is codegened
there is definitely no structural metadata in the .dat files, if you look at some of the smaller, simpler files it's quite clear that it's all data
🤔 should try to data mine the exe then 😝
that's borderline off limits and honestly it's not going to help much anyway -- what we're most interested in is names and the executable (probably?) won't have those either
looks like BaseItemTypes changed significantly, 215 -> 166 byte rows
Just field sizes would already be a great start in order to then start to figure out the names. But the data mining of the exe is indeed going into an even grayer gray-area 😄
I got mods.dat loading now, but have a ton of additional bytes per row
We just need a mole within GGG 😆
Not sure where you get that, but mine only has 1 additional byte per row
ugh, maybe I'm using an old format definition
I got the Tags column back in the right spot by deleting Aura and Aura radius, but it doesn't last very long before going to crap again
if you are just seeing one additional byte, it's a single boolean on the end, provisionally "IsExpeditionCurrency"
Maybe... my last 4 fields are IsBlessing, Key0, Key1 and Key2
yeah, the 1's appear for the currencies and artifacts (which are also stackable currencies)
oh interesting you're right, it's also on heist coins and perandus coins
Special vendor currency then?
Since it's not Expedition only
You use Heist coins to pay for BP/contract stuff
and perandus coins at cadibro to buy his items
https://github.com/poe-tool-dev/dat-schema/blob/main/dat-schema/_Core.gql#L2471-L2498 a lot of ints added (probably new Stats7,8,9...)
MonsterMetadata: string is off though, but that might be because TagsKeys seems like the first "broken" field 🤔
what I've linked have it fixed
yeah, I think my data types aren't matching exactly with yours (I'm using the PyPoe py files for it)
What datatype is your rid and _ ?
rid = ref|long, [_] = ref|list|byte in pypoe
ha ha ha what the fuck
"[DNT] Stack of 5 regals you'll never use, exile?"
Are there any nerfs still missing in the PoB implementation, or have they been added already?
still doesn't align with pypoe's definitions though... between SpawnWeight_Values and MonsterMetadata are 6 fields (pypoe) and you only got 3? maybe because yours are longs rather than ints? 3 longs = 6 ints afterall...
some numerical changes
if that's the case, looks like my cyclone from last league still holds up very well
do you have a reference for that definition somewhere? both the definitions in PyPoE and SnosMe's schema look like they're from 3.13
Where did the values in ComponentArmour.dat go? I thought someone mentioned it but I can't find it
hmm, that looks basically the same as the other one, are you sure that works on 3.14?
Yup, 100% sure it worked for me back in 3.14 (especially since 3.14 is mentioned here: https://github.com/brather1ng/PyPoE/blob/dev/PyPoE/poe/file/specification/data/stable.py#L2327 for BaseItemTypes.dat)
1227369173-1231965578-1189849183-1331074882-1279269888 and now for Expedition
cough ArmourTypes cough
Anybody scraped the div cards from the GGPK yet?
I don't think so... but you can try 'n find new ones in the bulk exchange page 😉 (or the raw data: https://www.pathofexile.com/api/trade/data/static)
okay I was completely wrong about BaseItemTypes, ignore my previous comments
I misread analyze output, mistook variable data per row as row size
.... Blade Trap rotates +100 times enchant... 100 times???
@timber path doesn't that just have the name and the label ?
I'm looking for the actual text on them
like, the flavour text?
what the cards do
you can't until point you see it on trade (same as uniques)
well i mean, it's all in the GGPK isn't it?
hence me asking if anyone has scraped it yet
not everything is in the GGPK
true
maybe text is server side and only gotten from GGG severs (via trade, etc)
jsut wondering
I've never actually personally scraped the ggpk, and my guy that has is AKF
so was asking the community
MonsterTypes.dat had the Tags and MonsterResistances foreign keys modified (or moved)
do you have the stats for the new Reaper npc ?
like abilities and dmg typs / scaling?
@primal schooner https://poedb.tw/us/item.php?cn=Expedition
PoEDB provides new things come out each league, as well as unreleased skills or MTX, as all of the information is directly datamined from the game itself.
PoEDB provides new things come out each league, as well as unreleased skills or MTX, as all of the information is directly datamined from the game itself.
i mena from the scrape
which is hte only way to get the info
cause GGG doesn't release that info publically
@velvet fog is it confirmed that cadigan's crown and faithguard are the only new uniques, or can there be more?
The actual flavour text and effects might be in the GGPK, I'm not sure though... They're in there for things like Prophecies... Anyway, I got this list of new cards:
Added DivinationCardTheLastSupper
Added DivinationCardTheEmptiness
Added DivinationCardASeaOfBlue
Added DivinationCardTheOffspring
Added DivinationCardThePriceOfPrescience
Added DivinationCardTheMindsEyes
Added DivinationCardTerribleSecretOfSpace
Added DivinationCardTheBlessingOfMoosh
Added DivinationCardCostlyCurio
Added DivinationCardLachrymalNecrosis
Added DivinationCardDementophobia
Added DivinationCardAmbitiousObsession
Navali: "Do you have stairs in your house?"
Flavour text for the new div cards:
"Bino's brief career as a chef at Axiom saved the executioner a lot of work."
He appeared before the Light Eater, and at once knew his soul was damned.
The harvest ended, the floods began.
The swarm began with just a couple of children. Now, it is her entire existence.
size:26{The strange voice showed Aul a future where his legacy was forgotten, where new cultures broke themselves upon Aul's ruined world.}
"size:28{Through the eyes of a person,
you can see their soul
Through the eyes of a jewel,
you can see the universe}"
They said they were here to protect us.
While the Labyrinth traps have claimed countless adventurers, they were not designed with felines in mind.
"Oh no, I couldn't possibly afford this fine artefact. I'm... just looking."
Without the ability to weep, the heart hardens against both the pure and the corrupt.
"size:28{I never truly understood the depths of my insanity,
until I realized the voices beckoning me towards the abyss,
were none other than my own.}"
The most pathetic person in the world is someone who has sight, but no vision.
PoEDB provides new things come out each league, as well as unreleased skills or MTX, as all of the information is directly datamined from the game itself.
How do I scrape these from the GGPK? skillList = { "SummonedReaperMelee", "GASummonReaperUltimateLeftSlash", "GASummonReaperUltimateRightSlash", "GASummonReaperComboWhirl", "GASummonReaperComboLeftSlash", "GASummonReaperComboRightSlash", "GASummonReaperDashImpactSlash", "GASummonReaperDash", "EAASummonedReaperComboAttack", "SummonedReaperDash", "SummonedReaperUltimate", "ReaperConsumeMinionForHeal", "ReaperConsumeMinionForBuff", },
Or does someone have a tool and can look them up quickly ?
finally had a look at my reddit scraper again. now got an issue with switching between text and links in the richtext with the gui library i am using...
needs a bit more work on the gui elements to make it usable in gui mode and code separation...
basic
Sounds like league start went well, big pats to the launch peeps 
👀
Mod names greatly overrated 😄
Is there an endpoint for buyout tags?
Like the list at https://www.pathofexile.com/trade/about but programmatic?
yeah
hello
i'm getting SSL error when trying to import pastebin link ,it's prolly has to do with firewall i'm using kaspersky
oh, I bet I know what the new flag on perandus coins, heist tokens, and expedition artifacts is (in BaseItemTypes)
it's "can't be sold to vendor"
Ooh.
the game will no longer let you put those items in the vendor trade window at all
Hi, this isn't the place for addon support. POB's official home is https://github.com/PathOfBuildingCommunity/PathOfBuilding/
Anyone else having issues with Poe after the new expansion pack? The game cant start at all, it just crashes my PC completely, i've uninstalled it two times even rolled back my video card driver 3 times and it still doesn t work.
I recommend you contact the techsupport email at GGG or use the forums, as we're not them 😄
Tested in Standard, you can still trade coins and markers with players, was scared for a bit there.
Fellow devs who follow the river, how do you deal with the rate limiting header, and ensuring that you're fetching information in the most efficient manner?
I've made a more naive approach where I ensure every request at least has 500ms of wait time between them, since the first byte
I tried setting the timestamp of last access to when I sent the request, and added an arbitrary 50-100ms to that, to ensure the request has been received, but that got me throttled sometimes.
For guild stash audit log I keep a timestamped history of requests and wait them out when I near/reach the limit.
As well as honoring the timeout if something else sneaks in to put me over the edge.
One-shot downloads tho, not a continuous service.
Right, river is twice per 1 second
so it's a bit tricky to know exactly how that's counted on the server-side
I seem to be able to keep up with the river right now at least
but this time of day might not be the roughest?
What's up with these maps? I haven't seen these before.. Link and decode below.
[28,14,{\"f\":\"2DItems/Maps/act4maps/Map11\",\"w\":1,\"h\":1,\"scale\":1}]
They appeared on the river yesterday when the patch went live.
that squared look is from a pretty old series
Someone selling off their legacy maps?
Maybe. Just weird that they showed up out of the blue on patch day. Hundreds of them.
Hi all. What are the realistic alternatives to pypoe_exporter? It seems like every time I want to use it, it's behind on table size updates (and therefore refusing to export).
Check here: https://github.com/poe-tool-dev/ggpk.discussion/wiki/Implementations At least PoB's exporter got updated already (check out the dev branch)
Thanks!
Anyone know if there are other frameTypes now? (from wiki)
no, it's all
Anybody know of another Chaos/Exa Shard recipie overlay? @golden thunder 's isn't working
https://github.com/poe-tool-dev/awesome-poe ctrl+f "recipe", also this question better to ask in #1┃general
Do CROs just not work anymore?
did GGG change something about the API ?
this one I'm using uses your session ID, and it sees all my tabs etc, but it's just not pulling the info from said selected tabs to populate to overlay
the tabs are public
What mean "type": "array"?
array of what?
from schema.min.json
you can transform it to array of 1 byte if your app requires it
oh~ thanks alot
also documented here https://github.com/poe-tool-dev/dat-schema/blob/main/src/types.ts#L19
@civic crane great work on the dat-schema things
was meaning to say that earlier, but got distracted 😂
Hi,
I need some clarification on a section in the new dev doc https://www.pathofexile.com/developer/docs/index#policy
To what extant is this? I have no intention of modification of the game files itself but would like to be able to do the following with my own tool and publishing the tool:
- parse Client.txt
- watch production_Config.ini and *.filter for changes and possible provide an UI for easier manual editing through the user
- data extraction from the Content.ggpk for having my tool act for the current state of the game (item related info, etc)
- providing an easy way to view/extract/convert format of 3d models for hobby artists in the community via a tool with the notice that it obviously is GGGs property
- starting of PackCheck.exe / Client.exe
- cache clear
- F8 screenshots
Does "interact" here mean any kind of access like reading or just modification of files in the Content.ggpk/executables?
ToS 7b
Data extraction of all kinds is against ToS, it's just not currently enforced. ToS are not the law, you're only putting your account on the line. But they can terminate your licence regardless if you do anything they deem not to be the "intended spirit of participation in PoE".
Aren't you also using an extractor in PoB?
Yes 🙃
:/
I know. We've tried to get some clarification/exception to this, but could not achieve anything
@compact isle Would it be possible to make it a bit clearer what is allowed for us devs?
I mean even the wiki wouldn't work without scraping a bit in the ggpk...
Which is used by GGG internally 🤔
😛
It would be nice if GGG could provide space for a community moderated wiki. fandoom will probably end the current one or turn it into a living corpse...
and don't forget that it will be down on server restart 😄
eh, I would hope for some independence there...
Novynn promised to fix this on site year ago 😏 (but it's better that we got oauth + new cool dev docs)
I don't trust the wiki anymore. Usually, I go to straight to the GGPK or to poedb instead
poedb for me mostly
managed to actually add some gui elements after nearly 2 years(?) now 🙂
root dir of my little project
@golden bane im trying to run pob headless. what lua version should i use? I tried Shopify/go-lua which is a port of 5.2 but ran into issues with :match() - perhaps its missing (https://github.com/Shopify/go-lua/pull/76) ? Does 5.1 work with pob? https://github.com/yuin/gopher-lua is trying to implement 5.1. I currently am only starting to dive into lua...
ah - it is also on linux
so the binary modules will probably make issues if not replaced with mockups
You need LuaJIT, which is somewhere between Lua 5.1 and 5.2 in features. The latter two both won't work (for different reasons). We currently use LuaJIT 2.0.4-3
gopher-lua is very slow, probably too slow for PoB
I would only consider using a pure go implementation
speed is currently not a concern I just want it to run for now
I did test a bit with the original HeadlessWrapper.lua and https://github.com/VolatilePulse/PoB-Item-Tester/blob/master/ItemTester/mockui.lua
I don't know how to build it though, we get it from vcpkg
with go i have a very simple build process for all platforms. I did avoid anything needing other (cross,...)-compilers like the plague
Well, you're dealing with another language 🙂
https://pkg.go.dev/search?q=lua There are currently at least 3 lua implementations in go. I havent tested the 5.3 https://github.com/milochristiansen/lua yet
i do want to handle go code with that bit of lua no need for the c code of the compiler or what it is
"Just some Lua implementation" won't cut it though. LuaJIT provides extra features over 5.1 (which we rely on) while also being incompatible with 5.2
https://github.com/milochristiansen/lua#missing-stuff We need almost all of that stuff
thanks for the link
i would replace dofile and loadfile as i embed the files
collectgarbage would just be noop
does this PR contain the needed string functions? https://github.com/Shopify/go-lua/pull/76
You want something like this, not a partial Lua reimplementation: https://github.com/scoder/lupa
I'm not going to read all of that, sorry.
I think its a starting point if i want those features and the other implementations dont work
i think i had something for bitop prob a lot slower though
is the headless mode of pob being tested?
No
could you perhaps do that in the future and make it easier to use in scripts with some short howto?
its not that easy to do that without any prior lua knowledge...
Yes, but teaching Lua would also be out of scope of any Lua library. See: https://www.lua.org/pil/contents.html
here i am running into an issue where GetScriptPath() from mockui.lua which should be loaded is called in Modules/Main.lua but either is not defined or returns nil?
i meant specifically headless pob, starting it passing data, making it do something and getting output
Yeah, that could be useful. mockui.lua is not part of PoB though. Better ask for support for that where you got it from
right - i think it was based on the HeadlessWrapper.lua script
thx for the help. i will probably try tinkering with it this week again
far too tired now...
oh and fallback pure lua implementations for binary dependencies would be really cool for headless mode and other platforms
Not all of these dependencies have Lua implementations available. And creating and maintaining them ourselves is certainly out of scope. All binary dependencies should be really common libraries that build on every platform with a C compiler basically. Right now, Windows + scuffed headless mode is all we want to support
ok. I might annoy you with a PR though when i finally learned lua and have a bit time...
Hahaha, hope you have fun learning 😄
i do 😄 - why else would i do it?
made it work with luajit
script is from https://github.com/VolatilePulse/PoB-Item-Tester with a bit disabled code.
have now something working to compare my go experiments to
now fileName:match("%.lua") doesnt fail anymore
current error:
is unpack() the problem?
@compact isle the squished currency icons look wierd
Building LuaJIT is reasonably straightforward, lcurl is harder as their makefiles are innovative AF.
I've built both across Linux and macOS for my SimpleGraphic port, it's doable and you can probably rip out the makefiles and do whatever with some Go C build infra, whatever they have.
https://github.com/PathOfBuildingCommunity/PathOfBuilding/blob/master/spec/System/TestAttacks_spec.lua is as best as we have right now
Trying my best when krangling the runtime to not break it 🙂
no need for curl if i just want to calculate and in case i do need it i can just inject go functions with curl functionality instead
Yeah, just mentioning what things tripped me up when porting.
what deps does simplegraphics have?
giflib:x86-windows-static
libjpeg-turbo:x86-windows-static
liblzma:x86-windows-static
libpng:x86-windows-static
luajit:x86-windows-static
zlib:x86-windows-static
(vcpkg.txt)
In my fork there's also:
fmt:x86-windows-static
glfw3:x86-windows-static
I've also pulled in some STB libraries for image reading/writing, fonts, and stuff.
thanks. STB headers are lovely
thank you - that it() function what does it do?
It's a function of the unit test framework: https://olivinelabs.com/busted/
ah ok
i did patch shopify/go-lua with PRs adding string pattern functions and the read method and got a bit further
now im stuck with unpack() calls and not certain where the problem lies
and the unpack() implementation from table.go
forgot the line numbers...
it says "attempt to call a nil value". does the called value refer to the unpack() function or the ret argument but that isnt "called" or am i misunderstanding the error message?
Should be referring to unpack
yes, i did manage to fix it. it is somehow available as table.unpack() in go-lua.
lua.DoString(l, function unpack(...) return table.unpack(...) end)
im now trying to make lua.LoadString() available in lua as loadstring()
Has anybody tried this github program for controller on pc? This is new one i found. Different to mine is that when i move joystick, character moves without my pressing X or whatever. Isnt that bannable?
A single player action should lead to a single in-game action, and it may not change what action it performs.
A specific button that leads to a click at a fixed location is perfectly fine.
A button that when rapidly pressed would make you run in a circle would not be.
Or as the good old example goes, drink different potions every time.
@velvet fog any idea where they put the attack time and crit chance for shield throw, shield charge and shield crush?
It's in two extra columns at the end of GrantedSkillEffectsPerLevel, fyi
replaced loadstring with load - and the next error is ???
What Lua version does this Go implementation attempt to be compatible with? Sounds like an ambitious attempt 🙂
i can choose between 3 implementations
i think the one shopify has in prod prob is a good choice
when i have my trade tab done i can have tooltips with nice pob stats regarding item swap
embedding pob blows my binary up by a lot though
might try compiling it first before embedding
go:embed is still pretty new and doesnt have a compression flag for the go tool yet
What the world really needs is: https://github.com/apthorpe/fortran-lua53/tree/cmakify
Embed as bundling binary files as blobs in symbols?
its go so we pack all in
dont know how exactly its done
i think it differs from how 3rd party libs have done in the past
** globbing is not possible in the embed paths which is annoying me a bit
cant do pob/**.lua to match all lua files not much of an issue though - have to add subfolders manually though if pob changes structure
ok found out what the next error is: nil being passed to band which ends up in a sum...
@velvet fog Is the broken item image at pages like this due to the CDN stuff? https://poedb.tw/us/Expedition_Locker
Ah yes, I could just look at the URL, big brain.
they remove all microtransation and hideout doodads to /gen/image/
same as item/unique icon in Public Stash API
im still finding solutions for storing these images
first poe community abused pastebin, now we will imgur too 😄
https://apidocs.imgur.com/
Commercial Usage
Your application is commercial if you're making any money with it (which includes in-app advertising), if you plan on making any money with it, or if it belongs to a commercial organization.

API Status
Status for the API can be found at status.imgur.com!
Getting Started
Imgur's API exposes the entire Imgur infrastructure via a standardized programmatic interface. Using Imgur's API, you can do just about anything you can do on imgur.com, while using your pro...
Been thinking about this too, considering a local image cache instead... @worthy cape you might know, has stuff in image/Art/2DItems/* remained static over time, or have some of them been revised while keeping the same file name?
Not sure, think I've broken the content database that could answer it.
It's a bit hard to query with the symlinks and brotli in the old data.
only weapon/armor and uniques could be accesses by image/Art/2DItems/, and it will move to gen/image in Patch 3.16
No idea about the CDN, never used that.
Do you have over 100,000 image requests/10,000 new images each month? Looks like it's free if not. No idea how many assets are new in the GGPK each release
https://web.poecdn.com/image/Art/2DArt/UIImages/InGame/VaalGemItemPopupTitleBackground.png for example vaal gem header changed this league
Hmm, I see 🧐
UI images are bonus fun as those are mostly in sprite sheets.
I doubt anyone would hit these limits (for API request, not serving images if I understand correctly)
I will try this, thanks
any tips for debugging lua? print(debug.traceback()) is bricked for me ...
Assuming things like EmmyLua doesn't work with your impl?
i doubt it will work with go-lua
might still try to install it for language support in codium
guess il try later...
why are all the rooms locked i cant join them
This is a channel for discussing 3rd party tools, not issues with Discord. But to answer your question, #🔴how-to-join-voice🔴 is what you're looking for
anyone using AHK recently find that sendinput is skipping keys? for ex. a hotkey that is "Send {enter}/remaining" is only typing "remaing"
seems to be a limit of 7 characters, plus the slash... so /menagerie is "/menagri" but "/hideout" gets copied fully... does POE maybe have some new rate limit on characters or something?
Looks like it's dropping duplicate letters at first glance there.
odd, same script I've used for years but I come back this league and it does this
seems you are correct, tried a script with just 10 a's in a row and only the first got input...
nvm it was some other background program interfering with it
is the shop's current sale visible to the api?
Skill gem count scaler in PoB doesn't seem to work for totems? Bumped it up to 7 but still only see dps for single totem listed
Architecturally unless a skill has a dropdown to select particular thresholds of things, the top figures in the side pane are almost always per-each. In order to get an idea of how multiple instances and multiple skills interacts, there's the Full DPS infrastructure which reports at the bottom of the side pane when configured correctly.
Rather nifty setup, saves a lot of computation 😛
Yeah, but I can't seem to get it to show up
oh. uhh. nevermind. didn't see the "include in full DPS" button.
hmm. didn't remember needing to hit that before
did patch go-lua manually this time on the newest commit and now it doesnt crash (yet) - still running 😄
ok while i was typing it did crash...
Never speak positively about a running test.
but i think im making progress
ye...
have to fake the first program argument arg[1]
You've found the protocol handler stuff, eh?
PoB has the ability to load builds from URLs on the command line, suitable for use as a protocol handler for browsers.
curl stuff comes soon. functionality will be easy with net/url. i dont have the meshing of go and lua functions down yet though...
im testing with Testitem.lua from here https://github.com/VolatilePulse/PoB-Item-Tester/tree/master/ItemTester - os.Args[1] should be Build.xml a local file
not sure why it ends up in that function. probably just checking if it should dl it...
ok this doesnt seem to work in lua...
the load up of the lua code does take a while. a lot slower than luajit. prob trying to load it up and then loop and push new items in
@velvet fog any idea what is this, can this be some bugged unique from ROYALE
thats the royale version
oh yeah, checked in video, hope chuan will add section about Royale 🙏
@compact isle somehow unique items from royale leaked on trade site
hard to track royale unique
@compact isle could you please clarify this a bit?
it starts here
I would suggest that you go through official channels to ask that question
ok thanks for replying
@frank kayak wish to know the resuld if you can share
is there a way to query x-rate-limit without real query item in /trade/search/Standard?
i dont think so. and the limit also depends on if youre logged in (Account, IP method)
im playing with x-rate-limit but failed everytime :<
i was trying to implement rate-limiting for my library but it did mess up on the last allowed query iirc... probably shouldnt have coded iterated that code at 3 in the morning... i do store the different limits in a map with the endpoint urls as keys iirc. for trade i want to use the IP method first have to find out if i have to use the Account method for a search before the actual query - was it the search complexity? when it works itll be completely hidden in my library
was playing around with giving requests a priority not sure how that plays out
Your variable naming triggers me quite a bit :p
In true PoE spirit it's defensive layers against anyone reading.
native obfuscation code
Oneshot coding is living the dream
any idea to get /gen/image of ActiveSkills, BuffDefinitions, PassiveSkills, HideoutDoodad and MTX?
MTX -> /character-window/get-mtx-stash-items with POESESSION
PassiveSkills -> https://www.pathofexile.com/passive-skill-tree
i do have one mtx link: https://web.poecdn.com/gen/image/WzI1LDE0LHsiZiI6IjJESXRlbXMvRWZmZWN0cy9Db25zdW1lcmFibGVzL0RhcmtTb3VsY29hc3RlckZpcmV3b3JrIiwidyI6MSwiaCI6MSwic2NhbGUiOjF9XQ/e97e571018/DarkSoulcoasterFirework.png with a corrupt base64 [25,14,{"f":"2DItems/Effects/Consumerables/DarkSoulcoasterFirework","w":1,"h":1,"scale":1}]. when i reencode it i get the link https://web.poecdn.com/gen/image/WzI1LDE0LHsiZiI6IjJESXRlbXMvRWZmZWN0cy9Db25zdW1lcmFibGVzL0RhcmtTb3VsY29hc3RlckZpcmV3b3JrIiwidyI6MSwiaCI6MSwic2NhbGUiOjF9XQ==/e97e571018/DarkSoulcoasterFirework.png which is still valid. so i think we can at least exclude the possibility that the hash is based on the base64 string.
the f field in the json or the filename might be the string that gets hashed
40bit or perhaps truncated?
trying to change scale or the first numeric value doesnt work so i think that the string that gets base64 encoded might also be the one being hashed
25 is item class (or type)
ok
Secret server side salt: "n0vynn_rulez" 😉
I have no idea about anything, but I assume that it's never generated client-side, only ever sourced from server side secrets, a bit like how timeless jewels work.
that would be annoying...
if that would be the case the json would serve no purpose i think
In my mind, the JSON is the request, the hash is the digest from signing it.
Easy to validate given a public key, "impossible" to generate without the private key.
tried many one-way hash algorithm and no matched
yeah also tried all that i could find :/ ...
Just throwing out some random thought: maybe it's a truncated CRC (or other checkum hash?) of the actual image itself?
perhaps there are some clues in the js of the website
Another random thought: maybe the hash is a base-36 (aka alpha-numeric) [edit: or other base-N?] hash of a timestamp? Maybe the timestamp the file/image got originally created at/added to the GGGPK?
That was one of my favourite features of Haskell, at any point it'd just go "blackhole detected" and die.
The lazy evaluation of thunks was super powerful, but also a great way to accidentally build huge intermediaries and values that kind of could blow up infinitely when forced.
that doesnt appeal to my gusto
dont miss blow ups from dynamically typed languages like python ...or my old shell scripts
had a few scripts with more than 1k lines, ran in parallel and communicated with SIGUSR{1,2} traps.... that was dumb fun
now go for all my purposes
would be unfit for embedded hardware-stuff, or for high performance that would be rusts area. have no plans in tinkering in those areas though. so go all the way for me
does someone know where the capital PCall() function is defined in PoB?
i can only see the override from mockui.lua which is not part of PoB
SimpleGraphic, API source file IIRC.
The bindings are wired up down in https://github.com/PathOfBuildingCommunity/PathOfBuilding-SimpleGraphic/blob/4b386cc277533de16cd32a8a456864fe536b2745/ui_api.cpp#L1174
thanks!
i just found that it also is in the original HeadlessWrapper.lua as an override which i perhaps deleted. mockui.lua is based on that file
Yeah, the headless thing spoofs most of the bindings it ends up using, but helps to keep ui_api in mind when you read code.
didnt even consider that its from outside the lua code...
is the src of the pob.exe also somewhere?
ok
Launcher mostly handles krangling of command line args into the right encoding, loading SimpleGraphic DLL and invoking it with the src/ dir it finds and any builds given.
turns out there is special file "advanced_mod_stat_descriptions.txt", so I can cleanup this mess https://github.com/SnosMe/awakened-poe-trade/blob/master/src/parser/stat-translations.ts#L74
ignored the PCall error and got a bit further...
Hey guys. I'm doing a little tool that shows the base -> unique outcomes for an item to assist in the Gwennan gamble mechanic. Using the ctrl + c data.
Currently I'm loading the pricing from poe.ninja. But i wanted to know if there was some source of data on uniques that are boss only, league specific, fated etc?
wiki can be queried with CargoQuery but prob outdated
Hmm i guess i could parse the wiki to a json file then tweak it by hand for anything outdated.
you get the data as json from the wiki
Thanks @earnest radish I'm trying the wiki approach right now. As long as i get most of the common ones sorted it should be fine. People would be looking for high value items so i would expected they would have better more up to date data than some of the obscure items.
Currently looks like this
seems there is a unfinished new armour attribute: adaptation, on flask modifier
ActiveSkillType ID 102: Prismatic
is there any documentation on the structure of item copy text?
Was gonna suggest looking at existing implementations like PoB's or APT's, but PoB's is an unholy state machine and APT's was just rewritten to handle advanced mod descriptions only.
Might still be relevant tho.
Jonathan showing off tools and talk on https://www.twitch.tv/gamedeveloperguild right now
config editor on stream :o

hide yo dat files
yo dat files!
Did anyone capture that? ;p anything we can learn from it? 😄
there is a VoD: https://www.twitch.tv/videos/1100474115?t=0h44m44s
and he opened BaseItemTypes, ItemClasses, ItemVisualEffect, Mods
At best we'll get the proper names of the columns 🤷
(For those interested, the editor is shown at around ~44 minutes)
"Can be Super Corrupted" 🤣 is that "double corruption" ? xD
Krangling confirmed 😉
it was in ItemClasses, which got fully shown 😱 . Now we can verify if our naming is generally similar to GGG's own naming. Probably we ain't that far off
Supported .dat data types are also shown: String, Decimal, Bool, File, Directory, Reference, Interval, Color, Point, Enumeration and DateTime 😄
Too bad Cardinality didn't get shown though
Only saw "Single" in there
🧐
Would be for Server only data i would expect. Super duper secret stuff like drop rates etc
and QuestVendorRewards for gems
Yeah, I was going to say, not even super secret stuff like that.
ooh this is funky
@compact isle The trade webpage seems to have some issue when I want to use "any time indexed" filter (i.e. query > filters > trade_filters > filters > indexed > "option": null). When performing a post request it errors out with Invalid indexed type but when doing a manual search using the webpage itself and looking at the source, the same "option": null is being used, but the trade doesn't error out at all. 🤔
(Relevant url: https://www.pathofexile.com/trade/search/Expedition/RoVnDMRi7)
Nice, source generating the dats. I did the same a couple o fyears ago
the default webpage won't send things that are null
we had to strengthen some type checks to allow loading searches that get invalidated by stat descriptions changing hash
So the new approach is to omit it if it would be null ?
yeah by default there is no time filter
👍 cheers, then I'll have to fix that & push an update for the tool I'm working on 🙂
I'm logging failed queries atm to get a sense of where people are doing strange things and I'm surprised by what I see 😄
$ curl https://poe/hello/novynn/nice/day/isnt/it?
hehe
hah no clue, not very many web devs apply anyway
Scaring them away with the idea of successfully using PHP.
exactly, especially so with the mention of Zend
Just point that CoPilot AI at the PHP documentation comment section and everything solves itself.
Last time I did professional webdev was probably in 2008, with the lovely choice of PHP calling out to LaTeX or Java with all the beans.
this sentence... it scares me
Oh right, there was also a headless automation of OpenOffice to convert document formats.
User-sourced, of course.
Nowadays we have users do low-code/no-code solutions, connecting their "apps" to business data around the enterprises
it's lovely
this is why I'm happy to stick with PHP (plus a dive into C++ now and then)
I regret to say that there's PHP attempts on client-side WASM.
First few hits were running WASM in PHP, which is way more sane, but then it degenerated...
my php journey was like 1998 to 2004 (and then was thrown back into it a couple of times after that).
the mvc frameworks and things were really made by happy-go-lucky devs it feels like
imposing things like Active Record pattern etc
Which language would you teach?
I've got a textbook here on my shelf I should send to xanthics: "Now with JDK 1.1!"
100% agree that you should learn some of the lower-level stuff before you get into Java/C#/Kotlin/Whatever
so you actually learn a bit about how a computer actually works
I think we already see quite some python in schools, C probably mostly starting in university.
The thing is, it's the best to teach a general purpose language where you learn how to read basic code. If you know Java, you can basically also understand most other languages. C is probably too hard to start with, that's why they choose Java as a high level language. They could also choose C#, but at the end it's kinda similar. And it would be too much work to "rewrite" all courses.
The goal is to learn programming in general, not to learn a single language. Like if you get the basic concepts you can learn new languages even faster - and to get in touch with programming. If you understand the basics you can dive deeper into C, Assembler, Verilog 😄
But it's also important to adjust the materials to the audience. Do we really need to teach C in school were we have people who aren't really interested in programming and maybe even get feared?
i think Go is great to start with 🙂
I am a main go programmer, I would love to see that as well. But that wouldn't fit, there are too many things which are different to most other languages.
Right, that's a totally valid point - that''s why they mostly "skip" classes and explain them later. Quite sad but here were go
Good old Borland c++ builder 1947 edition
The amount of things you have to cover for the C++ Hello World.
Its always weird when people learn coding in python scripting style and have massive issues getting oop
Exactly
i think i came into contact with Pascal as my first programming language in the optional robot course back at my school
pascal probably an Europe thing?
Never had Pascal in school but I know someone who's a big Delphi fan
I think technical schools have some leeway in choosing languages at least in Germany
the pascal ides i worked with were always quite nice with the gui stuff and such. missing that in go
mostly Java here in Germany and Austria or Python in science...
I feel most make the mistake of not actually using stuff
Reading and copy pasting from tutorials clearly must be enough
Python is so ugly to deploy...
Uni was mostly java here too but school before that c/c++/asm
asm in school?
Yes technisches Gymnasium did it for me
pascal was the first thing i came into contact in school
ah
Basically more focus on specific things in the specialized schools
Turbo pascal is the thing
I still think I am too dumb for haskell
pascal was pretty good for teaching the basics imo, as a language, not sure
But I basically need to have more than a few academic examples before actually getting stuff
Haskell or in general for functional languages? You probably just need some more time or better tutorials, it's quite useful if you know the concepts, will maybe also improve your OOP coding
Concepts are fine but really doing anything useful in Haskell just never clicked for me
right nearly forgot about VB...
i acutally learned vba because i did a lot of shit in excel since i started working
current days?
last 10y
macros or is it also used for generating tables?
more macros than tables
dont have much contact with excel atm only some table generation every now and then. always in go so far. no macros luckily
my first big "project" was that league of legends had lack of stats tracking, but they had api ¯_(ツ)_/¯
so i made a few macros to pull my stats from api and populate pivot tables
@rapid pagoda Got any oriath.net/atlas updates planned for 3.15, or happily snoozing? 🙂
If anyone wast to try out my quick and dirty project for looking up unique from Gwennen's gamble window.
https://poe-gamble-web.vercel.app/
Next.js app template with Chakra-UI, TypeScript, and PWA configured
Yep
I'll try it when I fire up PoE 🙂
ggg forced to change stats without even translating them because of reddit, sadge
back in the early days of the wiki i smashed together some vba in excel to scrape skill gem info from trade forum posts. a little bit of mania can be quite productive 😉
@compact isle did you just blocked axios in user agent?
(403)
axios?
a http client lib for js - used for requests etc. Or maybe we are talking about something else, but it would fit. 😄
oh
why is it so quiet here?
some noise please
I made cherry pie!
pics or didnt happen
approved, looks good
Now I'm gonna make tacos.
Also thinking about the best way to map item names to item tags (buyout tags) from the river, while adhering to Open/Closed principle etc
i stumbled again upon https://pkg.go.dev/github.com/buger/jsonparser today - prob a good fit for the river for finding matches. a regular unmarshal afterwards in a goroutine.
should finish that go|lua-mess first though before i forget again where i was.
the parser from the std lib is totally fine for the river. And we know the data structure, no need for a parser which mostly focuses on unknown data structures. It would help a bit with memory allocation and speed, but that shouldn't really be a problem. tbh I wouldn't care about that and just use reflections and use structs.
But yeah, we have a static structure - it's not that worth it if I think about it. There are some parsers for that (ffjson, easyjson).
yeah i have my item struct with lots of tags and and old custom unmarshal function from when the socket field could be different types iirc.
thought that for that speed of the river just scanning for the fields to get the offsets is better and then pointing the std way onto those offsets only
doesnt seem like too much work and i have buffer upwards for peak times
is parsing slow for you in go?
i actually havent checked
the standard encoding/json package is slowed down by reflection and some other stuff afaik
its mostly just so that i can try a new library
does someone know what the throughput of the river is on avg and peaks?
when I started it - it takes the current change_id from poe.nina stats, and start, it was 5-6 MiB per chunk for a little while before it caught up
when developing and testing this, it hasn't been over 2-3 MiB
shouldn't reflection just be once, and then be cached?
for each field - heres some info about it https://philpearl.github.io/post/json_why_slow/
it nearly never matters
where im getting slowed down a lot is in go-lua
4 to 7 minutes to run TestItem.lua with pob
docu says the switch implementation of go is guilty
Let's rewrite PoB in C++ 
have to make the last few lines work first though then i can slowly optimize. uising a go implementation instead of the pure lua bitop dropin im using replacing other critical lua functions with go. perhaps trying to find out how to replace that slow switch with some go asm...
I had this stupid idea yesterday to perhaps make a simple calculation engine (in c#), just because I liked the challenge. I am not sure if I will though
Rewrite for web from the ground up imo 
wasm
PoB.party was a good start but web native has so much potential
i would like to implement the pob calcs in go
it certainly has indeed
with pob working in go-lua i could try replacing piece for piece
the problem is execution speed. wonder how wasm would bench vs a well-written statically typed thing
from what I heard, one challenge with PoB is how UI and calculation was kind of tightly coupled
a goal I personally would have if making one, is to have an architecture that's a bit more decoupled (low coupling, high cohesion, SOLID etc)
but with PoE 2 "around the corner" ™️ ®️ - not sure if it's a viable investment of time
perhaps something to look into for PoE 2?
maybe we have a native implementation then :p
i dont think that poe2 will mess up too much there
I think what's necessary is to create a calculation engine that has literally 0 coupling to a UI, and then use some mechanism to render whatever you'd like, MVVM/MVU-style (or whatever u prefer)
that way it can be used for several purposes - easier
no clue why its ui coppled, its annoying that its not a lib
It's not, really. Has a set of Calc* classes, and a separate folder of UI class elements
dont know about all those terminologies mvv/mvu. i did hear solid a few times and forget it each time
isnt a call to OnFrame necessary to start the calc?
solid =
s = single responsibility principle
o = open/closed principle
l = liskov's substitution principle
i = interface segregation principle
d = dependency inversion principle
mvvm = model view viewmodel
mvu = model view update (i think)
then you similarly have mvc = model view controller
when im done with cleaning up my tool i want you to look over the api that i havent messed up too much 😄
It's coupled in that way, but I think that could be changed to onCalculate instead and have the UI fire that event only when needed. Just hasn't been a high priority
would be great if you guys could improve pob so that its easier to script
What else do you want to have available?
if you look through https://github.com/VolatilePulse/PoB-Item-Tester/tree/master/ItemTester with mockui.lua (modified HeadlessWrapper.lua) there are so many faked functions... its not that nice too use
i dont have too much of an overview yet over the structure in pob
but it would be great if unnecessary ui-related stuff could be left out when pob is scripted
ugh I totally forgot I needed to update that -- thanks for reminding me
and perhaps provide easy high level functions to get the good stuff out of pob
Feel free to open a PR 🙂
oh when youre here dog i also have some requests
hehe, i had a gut feeling that answer would arrive
not enough lua knowledge yet
😛
would make the compiled c++ stuff digestable on linux first with a makefile etc
@rapid pagoda your gooz library isnt shown on pkg.go.dev because it cant find the license https://pkg.go.dev/github.com/oriath-net/gooz
As much as I'd love PoB to become robust enough to integrate with everyone else's tools, we have to rely on them to open PRs and not just rewrite HeadlessWrapper.lua for their own purposes. I know of at least 3 copies of it floating around out there
@rapid pagoda and it would be great if your ggpk package wouldnt hard depend on the gpl-licensed ooz code but have an decompressor interface which is provided by gooz. that way you can remove the dependency of pogo from ooz.
your library user has then the option to use the gooz decompressor for pogo
oh, that is super weird -- the COPYING I ended up with was truncated and wasn't detected. fixing
that's not a bad idea, I'll see what I can do
thanks
I need to rework the whole file loading "stack" to support steam installs anyway -- I can see about making the bundle compressor pluggable when I do that
i did request an update on pkg.go.dev
not working yet...
perhaps it takes a bit longer
its there 🙂
i might compile a separate ooz tool that can be used in general for decompression and make a decompressor that execs that. that should be allowed by the GPL
as long as there is no coupling in the interface noticeable
was a big fan of copyleft licenses a few years ago and mostly still am as long as i dont have to handle those dependencies...
GPLv2 and GPLv3? together? incompatible...
some nice solaris stuff under cddl? also an annoyance. pretty sure the cddl was made to be incompatible to the gpl
you can blame orable for that one
so much easier in go where most just use mit or bsd
yeah oracle can die off...
the thing about a few lines with the android api, openoffice what else was there?
opensolaris...
ZFS
how did oracle f** with zfs?
it originated in (open)solaris, so the code was all CDDL
ah, yeah that i know
i do use it with freenas. is that the solaris version modified?
wasnt there some movement last year to combine the efforts in openzfs and was it bsd?
...should go to bed
ah... @rapid pagoda are you perhaps interested in looking through my go code on gitlab before i make the repo public? i prob need a few more months to sort stuff out. can add anyone interested as reporter role to the repo if you have a gitlab account...
@gilded tree too
have a package that automagically gets me a poesessid etc
Emulating Virtual Functions in Go https://pagedout.institute/download/PagedOut_001_beta1.pdf p25
Best I can figure from this channel and elsewhere: The reason the wiki doesn't have any of the league's new skill gem's info (or a lot of other updated data) is that said data used to come from PyPoE but the guy who both maintained that and also made a lot of wiki edits with it stopped doing that in about May. There's at least one somewhat-maintained fork, but no one is trying to use it to fix the wiki yet.
Is this accurate?
I hate fandoom, but I hate not having skill gem wiki pages more. I thought I'd ask if anyone knows things before I try to figure out the hard way whether pypoe generates the massive templates for the wiki.
My python was decent back when 2.7 was the norm, but it's super rusty now. 😬
I just read this: https://medium.com/applike/how-to-using-composition-over-inheritance-6681ed1b78e4 and I lost all desires to learn golang 😄
wrangled .dat specs, updated atlas 🙂
https://github.com/oriath-net/pogo/commit/6794c33bc85337e1c47ec1ea9e802ab8527bb3f7 spec updates fyi -- far from complete but they're what I needed to generate the atlas JSON

@compact isle Do you have a list available for Item->extended->category, and potentially sub categories?
you could steal them from the trade site, run something like this when on the page:
app.static_.propertyFilters[0].filters[0].option.options.filter(x => x.id).map(x => x.id)
ah great, thank.
i am trying to map Items that have a "buyout tag" by using the data here: https://www.pathofexile.com/api/trade/data/static while indexing the public stash tabs.
and those are categorized a little differently, so trying to figure out the best and yet extensible way of doing it 🙂
I think Liu in #wiki has tried their hand at wrangling data imports, there's some forks of PyPoE to try to keep up with things but yeah, it's a bit in a bad shape since Omega went away.
It shouldn't be rocket surgery, but there's several leagues now of table restructuring that peeps need to dig into to get exports working, and the tooling may need some adjustment for the bundle structure.
@frank kayak One of the things that may be fun and which might be diverging a bit in behavior between proper and headless PoB is the subscripts.
I'm not sure if the calcs you use leverage them and if the wrapper reimplements them in some way.
In short, a subscript runs on a separate thread from the main Lua interpreter and has two sets of remote functions it can invoke on the main thread; one fire-and-forget type "sub" that doesn't return anything, and one "func" set that actually transmits a value back.
They're implemented kind of like a blocking RPC where the arguments and results are serialized on a queue which is polled and executed as part of the render loop - this is why some computations (including update checker) have performance that varies based on UI framerate.
I had some fun with the serialization code as it accidentally truncated strings with embedded zero bytes.
Sure, can take a look
Why? 😄
can you point out or make an example what you didnt like in that medium article?
heres also some great overview for gos type system https://rakyll.org/typesystem/ - rakyll was part of the go team at one point iirc
the separation of behaviour (interface) and data (structs) (rob pike calls it orthogonal i think) makes it very easy to avoid tightly coupled code
i would suggest trying go for some very little project and see how it feels first
that new warcry mtx looks ...liberating
anyone know a bit autohotkey ? got a small issue I need fixing.
Your best bet is to ask instead of asking to ask 
was unsure if this was the right channel&knowledgable ppl
#Ifwinactive, Path of Exile
~a::
SendInput, {Left}{End}
return
I use this and S key to navigate tabs. However, this also moves cursor right/left while in chat/searchable
fields. How to prevent that?
(you use triple backticks to do multi-line code blocks on Discord, single backtick to delineate in-line code)
There's no way to query from the game what UI state it's in, so anything you press is going to universally apply to everywhere.
right, so my best bet is to change to CTRL+S or something.
https://frame.work/ would insta buy if it had a track point 😦
touchpads feel like a gimmick to me - cant work with them
i think it might have a better chance at succeeding
you mean phone bloks or when it was bought out as project ara by google?
that sounds right
the reddit comments about the laptop were dumb af, but that's reddit I guess
ah i think it was a collab and not bought out
but the phone bloks project missed the right support
https://www.youtube.com/watch?v=0rkTgPt3M4k linus made a video promoting it and it can already be preordered
and its really not overpriced. i think they are ex engineers from lenovo & apple if i remember correctly from the vid
Looks good but for private use I'd still go with a m1 MacBook air
Getting a tuxedo notebook for work soon
there is fairphone now with some exchangeable parts https://shop.fairphone.com
macbook keys feel just bad for me and its fragile, overpriced, walled-garden, weird hardware badly supported on linux. wouldnt touch one even if it was a gift. 😛
i do have a company iphone and thats luckily it.
oh and forgot about all the glue etc to make repair as enjoyable as possible
those tuxedos look nice. thanks for mentioning them
cc @frank kayak
Composition is good, but enforcing it and not allowing interface segregation and inheritance doesn't appeal to me, in my mind right now. The examples I read when they argue against interfaces and inheritance are pretty terrible ones hehe.
If you adhere to Liskov Subsitution and make sane interfaces, which is a slight mental shift, it's really good tools to have. Surely you can achieve your goals with pure composition, but my gut feeling says it'd be messy.
Perhaps I am wrong. I don't know... hence why i said gut feel
Dunno last MacBook air I owned is from 2013 and the keyboard was decent since then
i do liked the thinkpad t410 keyboard and the new ones like P50 also feel nice. when i typed on macbooks it felt too "soft" i think
if i understand correctly what is meant by interface segregation then it is achieved by reducing the required methods a function argument/etc has to provide to the minimal by using an interface. in go its practice to return a struct and accept an interface.
for example the pretty common io.Reader interface accepts any object that provides a Read() method to read bytes. so functions often state io.Reader as a parameter type. you can throw os.File, encoders or whatever in as long as you can read from it.
im dont completely understand the difference between composition and inheritance. what do you think gos composition could not provide that would be possible with inheritance? @simple ravine
It can likely provide the same goal, but in a different way
but first I want to address a bad and a good example of inheritance
give me a second
namespace Foo
{
public interface IAnimal
{
void Walk();
}
public class Dog : IAnimal
{
// etc
}
}
bad example.
The way at least I refer to define interfaces are separated by capabilities that are required to work as a single unit, and not a "whole thing" such as IAnimal or IMonster
1 method interfaces are good in go
for some internal private stuff i do end up with many methods. my ui drawer interface being implemented by a gui, tui and so (bit of a mess)
btw in go types implement an interface implicitly. you dont state that you implement it. its structural typing and just requires you to have those methods - they can also be promoted from embedded structs or interfaces.
namespace Foo
{
public interface INotificationSender
{
public Task<INotification<IPayload>> SendAsync();
}
public interface INotificationReceiver
{
public Task<INotification<IPayload>> ReceiveAsync();
}
public interface IPayload { }
public interface INotification<TPayload> where TPayload : IPayload
{
public TPayload Payload { get; }
public DateTimeOffset Sent { get; }
}
}
in your 1st example what exactly is bad?
IAnimal as an interface does not say what behavior it satisfies
it's just a "thing"
isnt Walk() the bahaviour? i thought its the opposite?
someone smart once said, you should define your interface as the prefix I as in the word I (me). "I can X" and "I can Y"
ICanWalk and ICanSwim, etc
in go interfaces should end with -er if possible. like Reader which Read()s or Runner which Run()s
for me, that's not a language-specific guideline, but rather a sanity guideline 🙂
yeah
you have to recognize it
i do like that in go you can see by looking at the name if its exported (capital) or not
you mean if something is public or private?
yes
Dog in a package would be accessible from other packages. dog would not be acc.
takes a bit getting used to but very nice
I think I prefer the C#/Java way of defining things inside the "thing" and mark things as public or private
but it can be because I've been at it with this style for so long
pike (go author) also didnt like it at first but started to like it after a bit. you get the info by the name without looking up the definition
and code is less verbose
I guess for me it looks a bit scattered, and the idea of defining program flow first, and then types is quite foreign to me.
Especially since I am a big proponent of Domain Driven Design, where you encapsulate your business invariants (think of it as business rules) in your domain objects.
can you explain to a dummy like me what the 2nd example is? is INotification an implementation of the 2 interfaces INotificationSender, INotificationReceiver or just the combined interface (behaviour set) of the 2?
In general Go has many things which are a bit different than most other languages. They are following their own philosophy, I don’t like all of them either. Sometimes they tried to reinvent the wheel where it’s not really needed, idk.
Lack of generics just made me not touch it yet
Soon
woah, ok I thought it would create a post out of it
package foo
interface NotificationSender { Send([]byte) error; }
interface NotificationReceiver { Receive() ([]byte, error); }
struct Notification { data []byte; }
func (n *Notification) Send(d []byte) { /* do something with d */ return nil; }
func (n *Notification) Receive() { /* get d */ return d, nil; }
func ReceiveEmail(n NotificationReceiver) { data, _ := n.Receive(); fmt.Println(string(data)); }
func someFunc(){ notif := &Notification{}; ReceiveEmail(notif); }
this is for example how you could use a sender and receiver interface as a func param and pass a struct implementing it.
february and youll get well ripened generics in go 🙂
https://arxiv.org/abs/2005.11710 who is this Philip Wadler dude? /s
hope someone understands it as well as me
You want to work with times?
Reference time is Mon Jan 2 15:04:05 MST 2006
Why? Because it’s “pretty” in this format:
01/02 03:04:05PM '06 -0700
I don’t get that and will probably never get why they thought that’s a good way.
https://pkg.go.dev/time
Later today I can share some things regarding why I like OOP and DDD, perhaps we can ideate around how it would look like in corresponding languages.
that date is fucked... lol
DateTime in c# is just a struct that wraps a ulong 🙂
at least a time is now dual nature with a monotonic clock
Fuck why is time and date stuff shit in all languages
more about the dev of go generics: https://www.youtube.com/watch?v=Dq0WFigax_c
I really enjoy idea-driven discussions where you can compare different languages, and in a diplomatic way discuss their strengths and weaknesses. Especially since I really want to learn more about the strengths of other languages that I haven't gotten into yet, and at the same time give c# a bit more cred (a portion of the dev community thinks it's un-hip and bad, which I disagree with)
Isn't un-hip good
all languages are shit. just use sed for all 🙂 fite me
just use asm and get over it 😄
Wasted 6h in a shell script last friday
And turns out it just didn't work on my machine but does in gitlab runners
Hooray
macos with a 2 decade old bash?
or dash on debian?
better switch to rc shell 😛
if you also start your sed scripts with #n react with 🇳
if you use mini-sed and dont know what im talking about then dont
No Linux mint no clue why it didn't work as expected but I dread shell scripts regardless
Stuff is just black magic you cant read
i loved shell scripts and only switched to go because it runs everywhere without setup in most cases
debian centos differences did annoy me sometimes.
go generics proposal: https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md not sure if there was more
Yep, most people don’t even know about net core with the cross platform support without a vm
macOS is using zsh now 😄
I still want anything that comes close to iterm for linux
Tilix is the best I found and it's still not great
iTerm the terminal emulator?
Yes
named after some unrelated prof...
Alacritty?
Or kitty if you want less features, focused on other things
Thanks for the suggestions gonna check em out
if you have any questions about putting images into a terminal i probably know nearly all of em 😄 (or ripping cookies out of browsers...)
xterm and urxvt are decent but require quite a bit config
mlterm just works, vte limps behind with most features
Date/time is hard and complicated in libraries because date and time is hard.
Same goes for filesystems, text, and all the other filthy stuff that interfaces with reality.
Lots of different clocks with different representations, not to mention calendars and human time and the conversion to and from them.
modelling reality is complicated
nearly missed the chicken drop... thought 12h later...
for anyone else not aware 32$ twitch drops right now
for everyone?
too late?
5h event, first drop after 30min watched, second for 2h watched.
1.5h left so too late for heartbreaker
but not for the chicken
you need twitch prime and linked up
howto in here https://www.pathofexile.com/forum/view-thread/3153590
and dont forget to get it in the twitch inventory afterwords or you will lose it
the drop event is locked to the first drop-enabled stream
visited mathils stream first and couldnt switch...

tomorrow?