JustArchiNET / ArchiSteamFarm

C# application with primary purpose of farming Steam cards from multiple accounts simultaneously.
Apache License 2.0
11.09k stars 1.04k forks source link

Counter an STM trade when a subset is more preferable to us #3028

Closed zypA13510 closed 11 months ago

zypA13510 commented 11 months ago

Checklist

Enhancement purpose

Suppose in a 5-card set (ABCDE), I have AABBCC, and a trade offer like this come in:

+DDEE
-AABC

Currently the trade will be deemed neutral or better and thus accepted by STM algorithm. The cards I have will become BCDDEE, we have indeed progressed by 1 card.

However, when you think about it, if, for example, we can give away only 1 copy of A instead of 2 As, we would have every card and finish the set in one trade. And it is not unfair to the other party, is it?

Solution

Add one more step in the STM trading logic to check if any subset is more preferable to us. If so, counter trade with the optimal subset. In the case above, the counter will be

+DDE
-ABC

or

+DEE
-ABC

Why currently available solutions are not sufficient?

If the above card A is hard to find, our bot could be taken advantage of by a specifically prepared offer to deprive us of all copies of card A. (The same could be said about AB->AC, but in that case, it is not as preventable as this one).

Can you help us with this enhancement idea?

Somehow, I can test and offer feedback, but can't code

Additional info

Actually, the answer to the above question "can you help us" is - it depends, on the difficulty of development setup and so on. Also, not sure if this idea makes sense to you.

Abrynos commented 11 months ago

Technically that trade would be better FOR YOU, but you have to look at it from the perspective of the person sending the trade.

When sending a trade we primarily want to help ourselves and IF WE CAN help other people in the process.

After all, the person sending has a choice and they will always choose what's best for themselves. That's why the algorithm is always sending the best possible offer for the account in question, which is still "neutral or better" for the receiving account.

Taking your example:

+DDEE
-AABC

For the person sending you the trade it looks like this:

+AABC
-DDEE

Now assume the other person has following inventory to start with BCDDDDEEEE.

The outcome of the trade they actively sent you is following: AABBCCDDEE (2 complete sets; no left-over cards)

Now if we modify the offer according to your suggestion (see diff below) the new outcome for that person would be ABBCCDDEEE (1 complete set; BCDEE left), which is objectively worse for them.

+ABC
-DDE

Now imagine all offers like this are declined and countered with a better one. That means as soon as that person receives your offer, their ASF will look whether there is a better one available, discover the one you've declined, decline your counter-offer and send the first one again... and then we're at the start again where your ASF cancels and modifies the offer to contain less cards... that then leads to their ASF to send you another offer with more cards... which leads to your ASF to send one with less... which... I think you get what I'm trying to explain.

In the end it comes down to the "person" sending the trade having a choice between "good" and "better" with both of them being "good" for the other "person" involved. Focus being on the sender having the choice. Same as you have a choice of not accepting such offers. Change your settings and trade manually if you don't like it.

JustArchi commented 11 months ago

What you presented vastly overcomplicates existing ASF mechanisms and algorithm with a solution that perhaps is better for you, but definitely isn't for the other person. ASF's objective in 1:1 trading remains and always has been the same: to help the community finish sets while trying to improve and at the very worst maintain the set progress we have right now (fair bots). There are other ASF settings, mainly MatchActively which has other objective - to actively look across inventories of other bots and improve our situation (while, as per above, improving or at least maintaining inventory of those fair bots).

If you don't agree with this logic or you believe that somebody is "exploiting" you by taking advantage of rare cards, cards value or anything else, then it means that ASF trading logic is not for you, and you should rather disable that entirely and manually approve/reject trade offers based on your rules, which no longer apply to ASF bots which are trading on unified (one and the only) algorithm on both ends.

As such, this enhancement idea is simply not going to happen. I don't see any added value to ASF, in fact, I see active degradation in ASF's value and core purpose while overcomplicating its codebase and adding additional maintenance burden.

If you want to help yourself only - use MatchActively, you don't even need to accept neutral+ trades anymore in this case if you don't want to, SteamTradeMatcher is optional when using MatchActively.

zypA13510 commented 11 months ago

@Abrynos consider all the possibilities in your case:

@JustArchi I'm fine with this proposal being rejected. But,

If you want to help yourself only - use MatchActively

If I had plan to support ASF before, this statement will make me reconsider - it now sounds like a salesman trying to sell me MatchActively service 😦

JustArchi commented 11 months ago

No, I don't care if you use MatchActively or not, since I don't profit from it in any way and it doesn't make a difference for me whether 1 person or 10000 people will use it. I say that ASF already has functionality for your use case and doing it correct way - sending offers to other people, rather than declining and countering those that arrive. You can as well code your own solution that does that based on whatever rules you want, it'll still apply.