Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/trade manager #189

Draft
wants to merge 51 commits into
base: master
Choose a base branch
from
Draft

Conversation

nomis51
Copy link

@nomis51 nomis51 commented Jul 26, 2020

Hi,

I've been working on a trade manager for the app in the last couple days. It has several core features :

  • Handles incoming trade offers workflow (From the moment someone whisper you until the trade is completed)
  • Handles outgoing trade offers workflow (From the moment you whisper someone until the trade is completed)
  • Display offers in a simple and convenient way
  • Multiple hotkeys/shortcuts for the most used actions (e.g. Inviting a player to your party, sending a trade request in game, etc.)
  • Auto-whisper (e.g. Say "Thanks" once a trade is completed)
  • Auto-kick (e.g. Remove the buyer from your party when the trade is completed)
  • Player detection (e.g. the buyer has join your area)

Incoming trade offers

When you receive a trade offer whisper, it is diplayed onto the overlay just above the XP bar.

image

There are addtional informations in a tooltip when you mouse hover the item name of the offer.
The informations are :

  • The item name (full length this time without "...")
  • The name of buyer
  • The time
  • The stash tab name (e.g. tab "The tab name here")
  • The position of the item in that tab (e.g. Left: 4, Top: 5)

image

Actions before you invite the player to your party

Whisper that you're Busy :

image

Dismiss the offer :

image

Whisper that the item is Sold with Ctrl + Click on the offer :

image

Whisper the player to ask him if he's Still interested ? in your item with Ctrl + Shift + Click on the offer :

image

Highlight the related item in you stash (first select the relevant tab) with Alt + Click on the offer :

image

image

Invite the player to your Party with a simple Click on the offer :

image

Actions after you've invited the player to your party

Re-invite the player to your Party (Usefull if the buyer doesn't accept the request in time) :

image

Dismiss the offer (this time it also kick the buyer out of your party) :

image

You have access to the same commands Ctrl + Click, Ctrl + Shift + Click and Alt + Click at this point either.

When the player join your hideout, a User icon on the offer.

And, you can send a Trade Request to the player with a simple Click on the offer :

image

Once the trade is completed, a Thanks whisper is automatically sent to the player and he's kicked out of your party

Outgoing offers

Support whisper templates of www.pathofexile.com and poe.trade.

Simply click on the "Whisper" button available on the trade website.

image

The whisper is automatically sent to the related player in-game.

image

And the offer is displayed onto the overlay, on the right side of the screen.

image

You have severals informations available such as :

  • The name of the item
  • The name of the player
  • The time and the elapsed time from the moment you've sent the whisper
  • The price (Usefull if you have multiple items with different prices)

The offers are ordered by time and they expire (removed from the overlay) after 60 seconds. The offer won't expire if you join the hideout of a player using the Join hideout action (Notice that the timer keeps running as reference). See below.

Actions

You can join the hideout of the player (after you've joined his party) :

image

You can send a Trade Request to the player :

image

You can dismiss the offer :

image

Once the trade is completed, a Thanks whisper is automatically sent to the player.

About the changes

The Trade Manager adds the @types/lodash (Debounce while reading the Client.txt file) and the find-process (To find the location of PoE logs directory. Intended to work on all platform, but I've only tested Windows yet) dependencies.

It has it's own subfolder in /main/trade-manager/ and in /web/trade-manager/.

There are 4 new Vue components :

  • IncomingOffer (Display an incoming offer)
  • IncomingOffersContainer (Display the IncomingOffers and handles interaction with the MainProcess)
  • OutgoingOffer (Display an outgoing offer)
  • OutgoingOffersContainer (Display the OutgoingOffers and handles interaction with the MainProcess)

Adds multiple new Events in the MainProcess bindings related to the Trade Manager.

⚠️ Important ⚠️

The Outgoing Offer part of the Trade Manager is using an updated version of your parckage electron-overlay-window referenced in this PR. It basically add a BringWindowToTop(hwnd) command in the focusTarget() function. It's required to bring back PoE on top to be able to automatically send whisper when you click the "Whisper" button on the trade websites (See the Outgoing offers section). You may want to update your NPM repo or refactor this into two seperate functions, I don't know, but for now the electron-overlay-window package is referencing my forked version

As of now, it only support english language. Needs to implement parsers for other languages.

I'm creating a draft for now, because, I need to test the trade manager a bit more while playing the game, but you can begin to take a look at my work if you want to. You may ran into lint errors 😆, I haven't ran the linter yet on the branch.

@SnosMe
Copy link
Owner

SnosMe commented Jul 27, 2020

Thank you for interest in this feature. I always interested in different solutions and take best parts of each. While I can't merge your PR I'll take some notes from code. On a positive side you've learned APT code base, and can use your solution at least two weeks for sure, and even then my implementation will differ so you might want to continue using your version)

@nomis51
Copy link
Author

nomis51 commented Jul 27, 2020

Of course that was just a draft, to give some ideas, and I saw on your front page that you were planning to implement a fresh version of MercuryTrade/TradeCompanion/etc. or similar in the app, but I wasn't sure if that was in progress or not. So, considering i'm already a bit bored about the league 🤣, I decided to do some work on that to at least give some ideas.

And who knows ? Maybe I'll like your version better then mine ¯_(ツ)_/¯

I'm glad if I helped you!

@nemrod10
Copy link

Of course that was just a draft, to give some ideas, and I saw on your front page that you were planning to implement a fresh version of MercuryTrade/TradeCompanion/etc. or similar in the app, but I wasn't sure if that was in progress or not. So, considering i'm already a bit bored about the league 🤣, I decided to do some work on that to at least give some ideas.

And who knows ? Maybe I'll like your version better then mine ¯_(ツ)_/¯

I'm glad if I helped you!

And how could we get your version atm ?

@nomis51
Copy link
Author

nomis51 commented Aug 29, 2020

Of course that was just a draft, to give some ideas, and I saw on your front page that you were planning to implement a fresh version of MercuryTrade/TradeCompanion/etc. or similar in the app, but I wasn't sure if that was in progress or not. So, considering i'm already a bit bored about the league 🤣, I decided to do some work on that to at least give some ideas.
And who knows ? Maybe I'll like your version better then mine ¯_(ツ)_/¯
I'm glad if I helped you!

And how could we get your version atm ?

Fork my GitHub repo about awakened-poe-trade, then build the app locally on your computer for your OS (Windows / Linux).
Enjoy!

Keep in mind that this version isn't fully tested, so there might be some bugs remaining. And that you won't have the latest updates/fixes from SnosMe, if you don't merge his repo with my repo, before building.

@nemrod10
Copy link

nemrod10 commented Aug 30, 2020 via email

@nomis51
Copy link
Author

nomis51 commented Aug 30, 2020

I'm glad you're interested in what I did, but unfortunately, I won't be able to provide any release/working version (exe, etc.) of my forked version simply because, I don't want to steal the work of SnosMe, in case many people read this PR and start using my forked version instead. And, if my version, that is not fully tested btw, start to bug and crash, unfortunately some people might think that it's SnosMe fault and may create issues on his repo, and I don't want that either.

So, if someone wants to try my forked version while waiting for the official version of SnosMe, like I said, they can take a look and build my forked version on my repo by themselves. And, nowadays that's not a hard thing to do, even for people that are not really used to software development and those kind of stuff.

Hope you understand.

@nemrod10
Copy link

nemrod10 commented Aug 31, 2020 via email

@cjmanca
Copy link

cjmanca commented Sep 20, 2020

Be careful using this:

Once the trade is completed, a Thanks whisper is automatically sent to the player and he's kicked out of your party

If I'm understanding how it functions correctly, it's considered automation, since you didn't directly trigger it yourself, and could potentially get you banned.

@hammypants
Copy link

This is fantastic.

@zombodotcom
Copy link

So it's been a lot longer than 2 weeks from SnosMe commented on Jul 26

when @SnosMe said he was going to implement his version.

Are we going to get this added?

@nomis51
Copy link
Author

nomis51 commented Jan 1, 2021

@zombodotcom
In the meanwhile, I've built my own version of the trade manager with aditional features in C#, for several reasons :

  • Was kind of tired waiting 🤣
  • Performance
  • .NET is just faster and easier at doing several stuff required for the trade manager then JavaScript
  • Didn't want to pull and update my own version of Awakened PoE Trade every time SnosMe update the main repo 😲

Downside is that it's Windows-only, because it's built on .NET Framework and it's using severals Windows-only libs

It's called Menagerie

@zombodotcom
Copy link

Awesome! I'll check it out. Doesn't seem like they are ever going to add this feature anyways

@DarkSnowy
Copy link

Perhaps you didn't understand what SnosMe said the same way I did. He wasn't saying he would implement his own trade manager in 2 weeks. He was only stating that there would be no changes which broke nomis51's trade manager for 2 weeks.

Definitely check out nomis51's C# version but I for one support SnosMe to add a trade manager when they get the chance. For cross-platform capability and 'one-less-app' simplicity.

@SnosMe
Copy link
Owner

SnosMe commented Feb 21, 2021

I want to explain how currently "yo dev, just implement trade manager" situation looks for me.

  • Whispers from players using Kakao client (Korea) not logged in ClientLog.txt . Obviously GGG is forced to be compliant with Korean laws and this is the point just to keep in mind. Doesn't affect outgoing trades.

  • There are enough tools released (6+) for managing trades: Menagerie, POE-Trades-Companion, Poe-Lurker, MercuryTrade (or its fork), SlimTrade, pretty sure at least 2 more that I'm not aware of. As @DarkSnowy wrote should I do it only for sake of "one-less-app" installed, but my solution will suck from same problems as see above... and bellow...

  • Finding item position:

CTRL+F by item name App powered highlighting (overlay) CTRL+F with position:x,y syntax (not a thing)
Highlights item using its correct size (1x3, 1x4, 2x4, ...) ✔️ ❌ [1] ✔️ [3]
Highlights only one item when tab has multiple identical Unique items ✔️ ✔️ [3]
Highlights unidentified Unique items ✔️ ✔️ [3]
Works out of box with Quad and Normal tabs, stash Folders ✔️ ❌ [2] ✔️ [3]
Can have public Quad and Normal tab with the same name ✔️ ❌ [2] ✔️ [3]

[1] - Not critical, can be emulated by guessing item from whisper (no 100% guarantee tho), yet nice to have feature.
[2] - Either manually create list by hand with fields: stash tab name (no duplicates), is tab in folder, quad/normal tab. Or get this info from the website (requires POESESSID and most importantly pathofexile.com still doesn't support stash Folders).
[3] - This is a syntax I propose. As you know at least to try to get GGG attention you need to post it on Reddit with enough upvotes.
I tried this, but seems that motivation in post was not clear or players indeed think everything is as it should be.

  • For [2] these are not just problems, this is a potential flood of issues I see: Q: "Hey, tool doesn't recognize correctly my tab" A: "Maybe you renamed it, or switched to another league? Update your manually created list/Click that button to refetch from website."

  • Awakened PoE trade can't work like other trade managers: you will need to press Shift + Space to activate overlay mode and then interact with trade widget OR use hotkeys for this. IMO this is not bad, but for someone taking into account already mentioned problems they can perceive trade manager to be unusable.


There were a lot of changes made to this day (adaptation to new game data file format, my internal stat format changed, migrating to Vue3, supporting new league content, unexpected events like slow trade site and everyone says you should add caching because we like checking items in Rituals 😄 ). I have limited free time and feel like these things were more important, than adding trade manager that will have described issues (spending time on a feature that you know in advance doesn't always work). Sure it will be added (using the "CTRL+F by item name" variant, I really wish [3] was a thing), but I can't say when. 😄

@nomis51
Copy link
Author

nomis51 commented Feb 21, 2021

I feel you. The reasons why I created Menagerie were directly linked to what you said here :

  • I supposed you had much more important things to manage in APT before even thinking into implementing this, while knowing that there are other apps out there already doing it (By reading your comment, I see now I was right)
  • It's definitely not easy to do it with Electron, surprisingly, without breaking everything else

When I implemented the trade manager in APT, I faced so much issues, not due to the app structure, but due to the Electron way of doing certain things, like handling mouse/keyboard events in or out of visible screens. Just being able to interact with the trades on the overlay without actually blocking the user from interacting with the game was a challenge. It seems like Electron window is pretty opaque events-wise, it has only two states : I ignore all keyboard/mouse events OR I intercept everything, even if it's not on a visible part of the overlay. Which make this really hard to deal with (Reason why I chose WPF for Menagerie).

Also, the item highlighting is definitely another difficult thing to do. I went the easy way with Menagerie (after failing a bit in APT), by using the Ctrl + F way along with some whispers interpretations/parsing. Using the overlay to highlight, is simply a nightmare to manage 😄, Getting the right width, height, position, size, etc. of the grid/items aswell as knowing if it's quad/normal tab, dealing with whispers that don't have position message, etc. is a real mess to manage. I tried to do it in APT, but I quickly realized that it was going to create more problems then anything else.

I also hope [3] could be a thing, it would make this sooo much easier 😄

@DarkSnowy
Copy link

Huh. I was of the mindset that I could made a MVP trade manager for a single resolution in a couple days. Well, I support you not to add a trade manager to your application, then. Since I noticed you like to keep your code pure.

(Pure code for the win. Many hands makes light work but also drop the ball and make a mess)

@SnosMe SnosMe force-pushed the master branch 3 times, most recently from 74a9e49 to daab537 Compare December 7, 2023 09:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants