![]() |
#1
|
|||
|
![]() In the original game, merchants did not display all of their inventory, but kept some of it hidden. If you bought out all of one item, then another item in their inventory would appear. This allowed for the art of 'merchant mining' (looking for those hidden items by buying out visible inventory), which a fair number of people practiced and enjoyed.
I do not recall exactly how many items merchants displayed originally, nor do I recall exactly how many items they could keep hidden (it was not unlimited). I could probably find out if there is any willingness to resurrect this mechanic. There were guides for merchant mining at one time, that I believe would detail some of this info. I believe that the merchant would display the items most recently sold to him; I am fairly sure of that because one technique was to sell one of a desired item to a merchant who had none of that item displayed. If it then appeared in his inventory, then he did not have any more of that item. If it did not appear, then he did have more and the just sold item had been added to the stack in his hidden inventory and thus could be mined. | ||
|
#2
|
|||
|
![]() This is a client issue.
Merchants have always had a relatively large inventory... like 80 slots or something. However, back in the days of the old UI, when merchant inventory showed up as a big bag (without prices unless you clicked an item, etc) it was limited to only showing 40 slots. This is what caused the effect of a hidden inventory. If the merchant had more than 40 different items, you wouldn't see the extra until someone purchased all of one of the first 40 items allowing the 41st item to move into the 40th slot. With the new UI, it shows the entire inventory as a list with prices etc. There may be UI mods out there which revert to the 'bag' view for merchants, and only include the top 40 slots, but it would only be in place for a person using that UI, not everyone (meaning you'd be gimping yourself only, everyone else would be able to see the full inventory and sort by price etc)
__________________
-Bumamgar
| ||
|
#3
|
|||
|
![]() Well its not really a client issue, and then again yes it is.
It still works the way you wrote. I've noticed it. its a matter of how high the value of the "shown_amount_of_items and stored_amount_of_items in the client is defined, or whatever these variables is called. Eg. it could be defined to "show" 40 Items, but the "stored" value sets how many items that people sold to the vendor that will be stored. eg. if its 128, once the merchant reaches 128 different items they will just be dished into nothingness of the matrix ... but he will still only show 40 items at once. It could be that the "stored" and "shown" values for some merchants are defined at the same amount so they don't have any "hidden" Items, but these variables has nothing to do with the client. Its definetly a server variable, since its general for ALL players, and if player A buys the 5 items that player B just sold, Player C will never see them when he comes by 10 min. later. | ||
|
#4
|
|||
|
![]() Dali, there are no such variables in the server. It works as I described it and the only way to emulate what the OP is asking for is with a custom UI. This is entirely a client display issue and cannot be globally 'fixed' for the server without forcing everyone to use a different client/UI.
It's just one of those things, like the 'new ui' and 'maps in newbie zones' that comes with using the Titanium client.
__________________
-Bumamgar
| ||
|
#5
|
|||
|
![]() The item list can not be stored on the client side - it has to be on the server, and has to be populated from the server when the merchant is opened. And I'm reasonably sure that there has to be a transaction with the server when an item is bought or sold, as you could have two or more people viewing the merchant at the same time.
If you watch a merchant get populated when you open one, it is clear that those items are getting sorted on the client side, but not necessarily getting transferred in any particular order, other than stock items first. If the server side simply limited the number of items it transfers to the client to some number less (say 15 or 20) than what is actually stored, then this should be theoretically doable. If the server side list was a LIFO push down list, then you would have the exact behavior of the classic merchants. I've never worked with an online code repository, but I'll see if I can get hooked up and try to find the relevant code. I'm not trying to be argumentative, I'm just not seeing how this can not be controlled from the server side. | ||
|
#6
|
|||
|
![]() The server and client have a packet format that is used to transfer information like the merchants inventory. If this packet format doesn't match, things don't work.
Since we're on an emulator server using the Titanium client, we have to conform to the packet format used by the Titanium client, and it expects certain information from the server regarding the merchants inventory. The server has to supply this information as dictated by the client or things don't work. Back in 1999 the packet format used between the server and UI for merchants only had space for 40 item pointers. On Sept 4th, 2002, they modified the packet format to expand it to 80 items (just prior to PoP), which is it's current state. That being stated, it may be possible to modify the server code such that it only sends a portion of the merchants inventory to the client and fills the rest of the structure with padding (so it still would send 80 'items', just some of them would be blank). However, due to the client we are using, that portion would still be sortable in the client and would still display the cost next to each item, etc (ie: NON CLASSIC) unless the user is using a UI that hides this information. So although it might be possible to modify the server to have it 'hide' the portions of the merchants inventory over 40 items, it would be a bit of a hack and involve having two seperate data structures. One for the merchant in memory, and one that is sent as the packet to the client with extra logic to mask out any items beyond the 40th. This is a departure from the way all entities are handled currently and might have unintended consiquences. Since the emu is fundamentally built on structures reverse engineered from the client, all the in-memory structures used for merchants, mobs, players, etc on the server are based on the network structures used to pass the data to the client. Frankly, this seems (to me) to be a waste of developer time, especially on a server like ours where you don't have 2000 players selling junk to vendors. Players on this server know the value of items and know what to save and sell to other players. Have you actually found vendors selling more than 40 items? Were any of those items actually something that you would have enjoyed 'finding' by wasting cash buying off their excess junk to 'uncover' ?
__________________
-Bumamgar
| ||
Last edited by Bumamgar; 05-26-2010 at 09:27 AM..
|
|
#7
|
|||
|
![]() Bumamgar, what happens now when the merchant has less than a full inventory? I understand that you know a lot more about the code than I do, and that I may not be understanding something, but I don't see how the client could possibly know how many items are going to be sent before they are sent.
Somewhere there is something like a 'for' loop that is iterating through the item list and transmitting the items in the order they are stored. If you just don't send the last 20 items, why would the client care? It handles that situation now. Forget the LIFO thing - let the inventory be populated the way it is now, and I really wouldn't care if you had to close and re-open the merchant to see the new inventory. But it seems to me that just a MAXSEND#, which is the lesser of the number in inventory, or a default number (e.g. 60) would do the trick. I could well be wrong - I've been wrong before (and often). As to your other two points - in my very brief time on this server, I've seen bone chips, quality pelts and silks on vendors. Not a lot, but some. Those, and various tradeskill items, always made up the bulk of what merchant miners were seeking. If you knew what you were doing, you didn't waste a lot of plat uncovering hidden items. As to wasting the developer's time: If I'm the only one, then yeah, it's a waste of their time; and so far I haven't seen anyone else looking for this. But, we're all here for various reasons directly related to changes in Everquest that happened over the years. PoP for almost everybody - but a lot of small and not so small things for each of us individually. A sequence of sad days when something was changed that made us either quit or decreased our enjoyment in playing the game. The day they made the merchant changes and removed hidden inventory was a day I remember and was one of those sad days for me. I'm here because I missed the original game - this is just one of the things I missed. | ||
|
#8
|
|||
|
![]() What happens now is that there is an in-memory structure for each merchant on the server side. That structure has slots for 80 items. This structure is directly manipulated when the merchant spawns to populate it's initial item tally, and then by the trading code whenever items are purchased or sold.
When a player interacts with a merchant, a request is sent from the client to the server, and the server responds by sending the merchant structure to the client. It doesn't currently have any logic to manipulate this structure, it simply takes the memory object and encodes it as a network packet and sends it over. This means that all 80 slots get sent to the client for display. To modify this behavior, it would be required to have the code create a copy of the current in-memory structure of the merchant, modify that copy to zero out the bottom 40 items in the list, and then send that modified copy to the client. It's doable, but not necessarily trivial and might have unforeseen impact on other things (for one thing, it would result in slightly increased server load).
__________________
-Bumamgar
| ||
|
#9
|
||||
|
![]() Quote:
| |||
|
![]() |
|
|