oEtG Forum

Auction House

serprex

  • Global Moderator
  • *****
    • Posts: 1543
Concept: async trading. Replaces Bazaar & Sell

Core idea: players can make "sell" orders & "buy" orders

What are orders? This could get as complicated as "Offers cards ABC for cards XYZ" but let's keep it simple: Offers are selling/buying single cards for coins

Players can build a deck which they then list a price that's per card. So I have a deck of 3 frogs, 5 wolves, 2 cocks & put a price of 1 then players can buy those individual cards for that amount

When you offer to sell the cards are removed from your collection. If you want them back you can always buy them back like any other player would (fun activity: list cards to sell at 2 a piece, buy a cards back at 1 from other players. This is totally fine)

So a buy order is basically the same thing, you list cards & say how much you want to buy them at

Players can then insta-sell or insta-buy. Ideally the UI should make create-sell-order & make-sell-order pretty much transparent. So I can build up a deck & it'll list "These can be bought for X" & anything I can't buy for X or which I want to buy for less I can then make an order for

Issues: subgold prices. What if I want to sell commons for a coin & a half? Could be like current bazaar: round up at end. So can list decimal prices, but then 1.5 will sell as 2, kind of opens up for being annoying to cut in line with sell orders tho, like listing sell price as 1.9 to get sells over someone listing 2, & people have to buy like 10 copies, bla. Initial implementation will just be in integers. Could always move towards tracking pennies



So how to store this in db? Currently we don't have a SQL backend but I'm considering it so I'm going to try avoid getting too specific on the storage, focus on the structure

We need to track an ordered list of buys & sells. (Card, Price): (User, Quantity)

Ideally we show a list of prices somehow, so want some query that efficiently gets '(Card, Quantity, min(Price)) group by Card with Quantity summed over the set of cards at min price'

Then if the user breaks that quantity in their order creation, query "Next lowest price & quantity after $price" where $price can bump multiple times as one digs through the orderbook

Now this is a bit annoying because maybe I just want to see that there's 4 giant frogs for sale, but only 1 is at min price, so the interface really may just want to say how many are available & what their min price is, letting me find out that only 2 are going for 2g while the remaining 2 are going for 20g. In reality I don't expect a large price gap, if there's a low price it's probably coming alongside a large quantity

I'm guessing CG won't like this idea, but other's like Chap might like it: Potentially remove Nymph pack, let them stay showing up in shard packs, & let async trading distribute them further
« Last Edit: April 21, 2018, 03:43:44 pm by serprex »


cg

  • Heckler
  • Member
  • **
    • Posts: 406
Notes as I'm reading through:

Don't remove sell-directly-to-game-for-cash. If there's a concern over sell-to-the-game-for-cash cutting in to the sell-to-players business, we can reduce the percentage. But I don't think it's going to overlap much. If it's something people want, people will likely pay at least its base value and probably more. If it's something people don't want, it's because it's too low rarity or too undesireable, which will mean there's no way to sell off the card.

I think keeping it entirely to selling for cash is best. Much easier to handle. P2P trading is there for card-for-card trades.

Don't do partial values. Require integers as input.

Don't remove nymphs as we are now, if you want to reassess keeping full pvp easily accessible, let's figure it out.


As far as how to functionally structure it, here's what I was thinking. This could be the backend for how the "list cards in deck" UI works or it could just be the entire interface on its own, but players select the following:
-buying or selling
-card for sale/wanted
-price per card
-number of times willing to peform the trade
-optional expiration date (checked at rollover once a day)

Seeking trades can default to showing those five attributes (along with offerer) in a table menu. Ideally, buttons on the UI to sort and filter each column.

edit: e.g. interface is rows of [BUY/SELL] [COPIES] of [CARD] for [PRICE], expires [DATE]

Players could each list up to X offers at once (and can cancel ones that aren't getting takers to free up more slots), 10-20 is probably a fine place to start.


Super excited for this. I am gonna play with this a whole bunch when it happens.


edit: I do really like the idea of adding more tradeable rare things. Are we okay with alternate art being a thing? I'd love to add stuff like that which only appears in packs at a low chance but is tradeable. I love rare and collectible stuff in-game, I just prefer it being aesthetic. If not alternate art, we could also make shards unpolishable and only appear as shinies from packs/daily. (If we do that, unpolish everyone's shards first)
« Last Edit: April 21, 2018, 04:23:53 pm by cg »


serprex

  • Global Moderator
  • *****
    • Posts: 1543
Want to remove Sell from being in the 'Upgrade' view. Potentially we can setup a price floor where when players offer sell orders below a threshold the server buys the cards & burns them

Expiration dates are annoying since we don't currently have a scheduled task system (oracle & wealth calculate on login. Guess we could also check for expired sell/buys, but for first iteration it's much simpler to let users manually buy/sell back)

Tangent: The hassle with shiny things is that they need codes. It's hard for us to really shift the codespace without breaking existing deck codes. I'd love to have 4-digit codes, 1st digit as a 5 bit value for random stuff like shiny/art/etc, then the 2nd digit for upped & element (1st bit is upped, next 4 bits are element), & last 2 digits for card. That leaves 1024 cards per element. Maybe we might want more.. digit allocation is always one of those "guess that you need, now put it up 2 orders of magnitude" things. So really I want 5 digit codes with 3 digit RLE. Which does explode us to 8 digits per card in a deck as opposed to the 5 we current have. Come up with a way for the RLE to use like rice encoding or something so that for deck codes it's usually 1 character, so only 6 characters. Also ideally the card type could be given it's own set of 3 bits. Potential way to convert to this: introduce an uppercase letter at the beginning of deck codes for code version (so lower case means old-code) & then have a way to map current codes to new codes. Would also have mark not be some random non existent card at the end but instead the 2nd letter of the code. Might be able to merge those 2 characters into one but I'd want to keep a versioning portion for future proofing
« Last Edit: April 21, 2018, 04:31:14 pm by serprex »


cg

  • Heckler
  • Member
  • **
    • Posts: 406
Server autobuys at 0.5 wealth value or whatever is a fabulous and elegant way to address that. I agree it needs to get out of upgrade.

We're totally fine without expiration dates now. In the medium term I'd be totally fine if expiration dates were only checked on server reboot. Or if things at 30 days were automatically removed at server reboot. But really the only reason to do that is to prevent it from getting clogged with old horribly bad offers. But that's purely a future concern.

100% on board with the tangent. It's nice to have shorter deck codes, but deck codes can be quite long with no real drawback. Nobody ever types one in, I don't even know if that would be possible. It's all copy/paste. Only drawback I can think of for a longer one (and it's a really minor drawback) is having the line wrap on forum deck display sometimes, which we just handle by making it not wrap (and hide overflow) and adding a "copy deck code to clipboard" button.

edit: i see no reason not to add unrestricted trading for gold to the p2p trade interface. also, to the extent my "how to handle this" happens, should be able to let someone accepting an offer choose how many times to accept it at once, instead of having to do it one at a time
« Last Edit: April 21, 2018, 04:51:14 pm by cg »


Chapuz

  • Member
  • **
    • Posts: 506
The concept of an auction house for this game is wonderful.

Buying interface: I imagine an interface similar to the vanilla Bazaar (cards to buy on the top, your cards on the bottom). The interface should allow a 1-click operation: Each card has their price at its right; the price I see is the minimum in the market for that card. Let's say that in the server there are 2 Firebrands at 20 gold and 4 at 25 gold, I see that Firebrand is at 20. You click = you buy, so if I click on Firebrand I am buying it at 20. But I don't want only 1, I want 6. So I click on Firebrand again and buy another one. Then I see that suddenly the price of Firebrand is at 25.
This alternative requires the game to automatically update the prices every time a player buys a card. If I happen to buy a Firebrand that I see it's at 20 but it's actually at 25 because another player just bought the 2nd one, I should be shown a message saying "This card is not available at this price anymore".

Interface to put my cards in the auction: It is fine to put in bulk the cards I want at a price.