Arx-Game / arxcode

A text-based/web game using Evennia.
MIT License
45 stars 42 forks source link

Broker Limits #179

Open mentalelemental opened 4 years ago

mentalelemental commented 4 years ago

This is totally not important and should go way, way down in your priority queue (if it's even deemed as something worth doing) but .. the broker. Man. Maaan.

As there are more and more hagglers, it's getting increasingly difficult to make successful buy orders. It used to be that multiple people could throw up a broker/buy for 500-1,000ish units for each of the three available resources (social, economic, military) and everyone would get their orders met. These days though, people with lots of money are rolling in and putting up multi-thousand unit broker/buys with enough capital to change the price whenever someone tries to slip in with an order themselves. This doesn't break any rules but it makes it pretty much impossible for anyone who doesn't have a significant bank account to buy resources in a given week.

Maybe the market is supposed to function this way -- survival of the fittest/richest -- but it freezes out those who are just starting out/doesn't have a lot of cash. The cycle of things is: buy a bunch of resources off broker, haggle-sell those resources for money, use that money to either buy more resources or materials (the former to be haggle-sold again and the former to be placed on broker). When a handful of characters put up 2,000 .. 3,000 .. 6,000 units resource buys for each type, there is pretty much no hope for those of us with less money to work with. Someone new might put up an order for 500 units of whatever at a slightly higher buy-price and the high rollers simply adjust their price so anyone selling their resources will sell to them. By the end of the week, the market is pretty tapped out and even if they've had their multi-thousand unit orders filled, there generally are no more sellers to sell to those of us left at the mercy of the market.

Initially, I tried to solve this ICly. I reached out to a character who had a tendency to post up those big order buys and we agreed ICly to a kind of truce -- we'd each only buy up 750 of each type at the start of the week. Once we both met those initial needs, then it was back to free-for-all market shenanigans. And it worked! For, like, a week. Because then other people started rolling in with multi-thousand unit buy orders and it just did not seem feasible to track down every person who did this as this scenario would only work with 100% agreement from those working the broker system. The moment someone is like 'nah, I'm just going to do my thing', everyone else starts to do their thing and it is back to whoever-is-the-richest-wins.

So this is my long-winded way of asking: can we put limits on the broker? Even if it's just for the first half of the week: one can only place broker/buy orders for X units of resources per PC during the first three days. Then it's open season for the rest of the week. Or something like that!

It's getting rough out there.

Zironic commented 4 years ago

I don't think I agree with the premise here. No matter how arbitrarily huge the buy orders of the other characters are, yours will always be served first if you have the best price. What will naturally happen when there is a massive demand such as what is happening right now with the action freeze just around the corner and everyone wanting resources for the last actions they can submit for months is that the buy order prices will climb up and up. As I'm typing this they're up to 290 which is actually quite a bit beyond the point where the bulk traders make any profit.

If the bulk traders are matching the price of your small order, it just means you haven't raised your price high enough yet. The high amount of competition we're seeing right now is a good thing, trust me. For a very long time the only person with buy orders up was me which felt a bit awkward since I was the one who wrote the buy order code.

wahoo2 commented 4 years ago

I don't think hands-off capitalism has much room for life in a game where people are trying to have fun. No one enjoys being outbid constantly.

mentalelemental commented 4 years ago

Sure. I can raise my price. And I have. And then they just raise their price again. Immediately. At some point, I run out of cash to price raise Or it gets into the realm of it not being profitable.

It's often like:

Me: 750 units / 250 per Minute later Person A: 2,500 units / 251 per Minute later Person B: 3,000 / 260 Minute later Me: reprice to 265 Person A: reprice to 266 Person B: reprice to 275 ... And onward until they're up to 290/300

Zironic commented 4 years ago

I could see an argument for putting in some kind of cooldown just so no one feels like they have to sit in the market center watching their buy orders like a hawk and increasing them one silver at a time. Could also do some kind of round robin thing when two buy orders have the same silver amount.

From a design perspective I see mainly two different kinds of characters interact with the broker. The first is the bulk trader like Sven, Olin, Wren, Helle etc who buy and sell a whole bunch of stuff and they do it for the purpose of making silver. For the most part when they have resource buy orders up it's because they want to use haggle/findbuyer to sell those resources to NPCs for a profit. If they want to make a profit they won't buy resources for more then 275 silver because of how haggling works unless they think they can sell it to other PCs for more. In the current market climate the savvy haggler should be buying resources from the NPCs and sell them to PCs.

The second kind of character is looking for a specific transaction. Maybe they have resources and want silver, maybe the other way around or they're just looking for 20 shadowmeld. Either way since they have a specific need in mind they'll value things higher then the traders do because it's not about making a profit, it's about building a caravel or raising an army or funding an expedition for lost treasure or what have you.

If your character is in the first category then you just need to recognize that this is a sellers market. Haggle/findseller is amazing.

If your character is in the second category you just have to accept that prices are going to get really high up until the action freeze. No amount of tinkering with the broker code is going to change that the entire game has 9 days to submit their actions and there's only so many resources to go around.

mentalelemental commented 4 years ago

I realized shortly after posting my original suggestion that it isn't really feasible to make a code fix -- but it still doesn't change the fact that the current system is quickly sliding into 'not fun' territory. Bummer!

And the bulk traders do indeed raise their prices higher than 275. If you look at the market now, they're sitting at 290 at they moment.

Zironic commented 4 years ago

Yeah, unfortunately you're dealing with a people problem. That said if there's any part of your Arx life that can be improved by code I'm currently working on various UX tweaks so I want to encourage you to either comment on the tickets available or make new ones to show what you think is the most important and I should tackle next.

mentalelemental commented 4 years ago

Yeah, I'm a UX designer by trade and that was my perspective coming into this: this user experience is not good. But I can't see an easy way to resolve it -- even if there was a unit limit for the first half of the week before free-for-all happens, that would require the broker to flush after Cron every week or be smart enough to be like 'm - w, the market will only take X amount from a PC before selling to other PCs, leaving whatever over flow as inactive until Th' which seems overly complicated and burdensome.

If people keep putting up the huge buy requests, it's going to be pretty difficult for new hagglers to get their footing. Maybe the solve is just messaging upon putting up a broker/buy that says 'Are you posting a large amount? Please think of your fellow players when doing this and consider listing a smaller amount'

Zironic commented 4 years ago

The problem isn't really people putting up huge buy orders, it's that the haggle system isn't very intuitive and it's not very obvious for new hagglers how to make money. From a haggle point of view the people with the very highly priced buy orders are not making a profit.

The haggle system prices resources at 500 silver each and grants a 10% bonus to selling. That means that if you roll a 75% discount, it means the very same roll either sells to NPCs for 425 resources or buys from NPCs for 125 resources. Both of those are exactly 150 silver from 275 and that relationship will remain the same regardless of the roll, you'll always make the same amount of money using haggle/findseller and selling to other characters at 275 or using haggle/findbuyer and buying from them at 275.

That means that when someone like Olin puts up buy orders at 290 and you are a haggler, he's basically giving you 15 silver per resource for free if you're using haggle/findseller.

I'm not sure there exists a way to explain all of that in-game without it looking super intimidating. Maybe I could color code prices to indicate the natural pricepoint and how far away a particular order is?

TehomCD commented 4 years ago

Some cooldown on price adjustment might help, maybe. The tricky thing about arbitrary restrictions, though, is that if they're too onerous then you just wind up with people not using the broker and selling informally via classifieds or whatever, which defeats the point. Some sort of randomized incentive to opt for dealing with smaller deals at worse rates could potentially be fun, but it'd probably require some care.

I'm totally open to any changes if they seem reasonable. I just don't really have the bandwidth to tinker with things myself, though - any time I have to work on code at all is probably going to be related to the Attribute refactor. In the long term there needs to be a ton of tweaks to economic stuff as a whole - lack of meaningful sinks, income becoming too abstract and detached from intuitive expectations, etc.

netforce10 commented 4 years ago

Something which may also help is if bulk buyers had to actually raise their prices above yours, as it currently is whenever a buyer reprices the priority remains the same because it's a change not a new order. If instead when you change price and or add an amount it would put you at the end of the queue then that would also help a bit.

Another possible option is to have a service cost for keeping the orders up, for example let's say that everything above a certain total value for example 100,000 will incur a weekly cost of 1% of that value or alternatively base it on the amount only, so that for example if you have and order up for 8000 resources you'll need to pay that much silver each week.

Another possibility is that depending on the total amount you'll need to pay a certain amount per transaction, someone that's buying 2000 resources would pay an extra 2% silver per transaction in tax while someone that's buying 200 won't pay an extra tax. This would need some extra mechanic to keep them from immediately putting up a new order when the previous one gets taken however.

Zironic commented 4 years ago

What's the actual problem here that you want to solve? In terms of two players offering the same price it would be easy to change the code to either loop through the bids in reverse order or have it determine the order randomly. Slightly more work but perfectly doable would be to split the transaction between the orders.

netforce10 commented 4 years ago

The problem which was the reason for my search and finding this preexisting issue which is related was that when character A offers to buy a resource at 250 silver, character B offers to buy it at 255 silver, A adjusts their price to 255 silver to match the offer of B then when sold it will go to A.

in my opinion if you keep the way it currently work in that older offers get the first resources then changing the price should put someone at the back of the queue. But I personally would like your solutions more as that better solves the issue of large old orders which get added to often having higher priority than newer orders.

Although it wouldn't resolve the initial problem that was mentioned here even if that isn't a problem anymore currently at this moment.