Rebuilding the Old Bazaar
I seem to have gotten to a point now where I am not sure what to do, and hoping someone can point me in the right direction.
At the moment I can/have... Zone into the old Bazaar (although not where I want!) Most NPC's in place (think I am just missing the gnome that sells spells on the second floor of the trades building now) All merchants loaded Trader stalls working (Thanks N0ctrnl for your work on that in your Old Bazaar post) Problems I am running into... /bazaar brings up the bazaar search window, but does not work (won't list traders or find items, find trader and update traders buttons stay grayed out). Also I get both "Welcome to The Bazaar!" messages when entering the zone. The original for /bazaar and /trader and the newer one for /barter and /buyer. The message pops up in my chat box 3 times in a row on zone in. For both of these I have no clue where to start. M̶y̶ ̶n̶e̶x̶t̶ ̶p̶r̶o̶b̶l̶e̶m̶ ̶i̶s̶ ̶m̶y̶ ̶z̶o̶n̶e̶ ̶l̶i̶n̶e̶s̶ ̶a̶r̶e̶ ̶o̶f̶f̶.̶ ̶I̶s̶ ̶t̶h̶i̶s̶ ̶j̶u̶s̶t̶ ̶a̶ ̶f̶i̶x̶ ̶o̶f̶ ̶g̶o̶i̶n̶g̶ ̶i̶n̶t̶o̶ ̶t̶h̶e̶ ̶z̶o̶n̶e̶_̶p̶o̶i̶n̶t̶s̶ ̶t̶a̶b̶l̶e̶ ̶a̶n̶d̶ ̶c̶h̶a̶n̶g̶i̶n̶g̶ ̶t̶h̶e̶ ̶x̶,̶ ̶y̶,̶ ̶z̶ ̶a̶n̶d̶/̶o̶r̶ ̶t̶a̶r̶g̶e̶t̶_̶x̶,̶y̶,̶z̶ ̶f̶o̶r̶ ̶T̶h̶e̶ ̶B̶a̶z̶a̶a̶r̶,̶ ̶S̶h̶a̶d̶o̶w̶ ̶H̶a̶v̶e̶n̶,̶ ̶T̶h̶e̶ ̶N̶e̶x̶u̶s̶ ̶a̶n̶d̶ ̶P̶o̶K̶?̶ The last thing would be the missing doors on the two small bank buildings (I think I remember there being doors on them?). Again for this I am not sure where to start. After writing this and thinking about other stuff still needed I realize I am not as close to done as I thought! :( |
I got Nexus zone in working so I should be able to get the other zone lines figured out.
|
There may be posts around here for this info..but, here's a couple of bits of what I remember when I was working on it...
There is something hard-coded in the client (newer ones?) that looks for zone id. Might have to do with the client's '/trader' command (memory fails for absolute use...) I believe that every zone change packet sent by the client is also accompanied by a bazaar status update packet - not sure which clients affect this behavior. Reliable purchasing is still unavailable for RoF+ clients due to the lack of item guid tags in the server code. Older clients have a bug in regards to certain stackable items and this change did resolve that issue. |
Quote:
Here is a screenshot of the repeating message I get on zoning into the Bazaar. Would anyone be able to explain why this is occurring and if this is something I could fix? I don't think this helps at all, but I deleted the buyer table to see what would happen. It did remove the "There are 0 Buyers......use /buyer to set up your own Buy Lines." text (while giving me an SQL error in game). https://imgur.com/a/1YjGh I am guessing this is linked also to why my Bazaar window does not work properly? |
https://github.com/EQEmu/Server/blob...ding.cpp#L1750
https://github.com/EQEmu/Server/blob...cket.cpp#L1094 Those will get you into the neighborhood of the buyers message. https://github.com/EQEmu/Server/blob...cket.cpp#L3657 https://github.com/EQEmu/Server/blob...ding.cpp#L1754 Same for bazaar search... I definitely can't guarantee that anything you change in those functions will help you along the way..but, that is where both activities are handled. You might try turning on 'gmsay' log output and watching any related messages. When I work on a system, I usually do that so that I can monitor actual packet flow associated with any activity. |
Yep way out of my league! On the bright side, you have given me something to do now for the foreseeable future.
While I am extremely grateful for things like EoC and Akkas Server Installer (without it I probably would have never tried any of this), it's a double edge sword for me. Feeling like I should know a lot of things that I don't (like #log!). I wasn't sure what you meant by gmsay logs but I found the Logging System Overhaul wiki page. I hope you don't mind me asking one more question? How do I access the client_packet and trading.cpp files? |
Assuming you're on windows, you'll need to (at least...)
http://wiki.eqemulator.org/p?Complet...top-windows-7- http://wiki.eqemulator.org/p?Complet...or-windowsnbsp http://wiki.eqemulator.org/p?Complet...load-cmakenbsp http://wiki.eqemulator.org/p?Complet...indows-desktop http://wiki.eqemulator.org/p?Complet...-to-everything (git and cmake only) http://wiki.eqemulator.org/p?Complet...ing-the-server That's a heavy-handed description of what's left..but, I believe those are the only things not included in Akkadius's installer script. At this point, you will no longer need to download pre-compiled binaries through the script..though, you can overwrite any local compiles by using the script downloads. Step 4d of "Compiling the server" says to 'compile' the server. You want to make any changes to the source code prior to compiling and copying the binaries. Additionally, any future changes (including code reversions) will need to be recompiled and copied as well. EDIT: If you have never compiled source code, the task can seem quite daunting... It is relatively easy, however. You can start with just compiling the base source code. To get your feet wet, you can make little changes to messages sent to the client so that you can see the results of what you are doing. Visual Studio is fairly decent at telling you what is legal coding syntax. Code:
char a[8] = "1234567"; // correct |
Thank you Uleat. I really appreciate your time doing all this.
|
Just wondering if I am on the correct path to understanding some of this. Sorry that the code snippet is so long.
Code:
void Client::SendBazaarResults(uint32 TraderID, uint32 Class_, uint32 Race, uint32 ItemStat, uint32 Slot, uint32 Type, |
|
Thanks, I will add that to the other tutorial I have been reading. I am having a hard time understanding the term void.
Code:
void Client::SendBazaarResults(uint32 TraderID, uint32 Class_, uint32 Race, uint32 ItemStat, uint32 Slot, uint32 Type, Void says to Client::SendBazaarReults I do not need you to return any values for the following (uint32 TraderID, uint32 Class_, uint32 Race, uint32 ItemStat, uint32 Slot, uint32 Type, char Name[64], uint32 MinPrice, uint32 MaxPrice) Just show this information |
Do you mean the
Code:
void Client::SendBazaarResults(...) The 'void' in that case just indicates the type of object that is expected to be returned once the function has reached a termination point. For instance: Code:
void Foo() { Code:
short Foo() { Code:
short Foo() { Code:
const char* Foo() { (known as a c-string and is essentially just an array of chars with a null terminator character at the end.) In the case of the bazaar function, no return is expected. Any action is predicated on the values passed into the function and by the Client object itself. I'm really only seeing one fail point in the generation code that would cause an early return: Code:
if (!results.Success()) { Code:
if (results.RowCount() == static_cast<unsigned long>(RuleI(Bazaar, MaxSearchResults))) Even if all of the functional server code if working properly, there could still be an issue with the client translator function - if it has one. (assuming RoF2...) We want to look for this opcode Code:
auto outapp = new EQApplicationPacket(OP_BazaarSearch, Size); (ENCODE tranlates server->client packets, DECODE translates client->server packets) https://github.com/EQEmu/Server/blob.../rof2.cpp#L396 If you have query logging turned on, I'm pretty sure that gms receive the queries (or use to) that are generated. You should be able to run those directly from HeidiSQL and see the results as well. None of this really says how to fix any issue..but, it does give you most all of the places to look :) |
I'm going to take a step back from that part of the Bazaar while studying the tutorial Beast posted. It's way out of my league and at least I can come back to it with hopefully a bit more of an understanding.
With my "fun time" working on stuff I figured I would try and get the 4 doors back in on the banks. I read over Akkadius Placing Doors page on the wiki. Not sure if I don't have it installed right or what, but I can not get it working. Here are the steps I took. Perl Package Manager says I have both DBI and DBD-mysql installed (not sure how else to test this?) Have MySQL.pl configured and in my plugins folder Installed the Mysql table `cust_obj_data` to my database Installed the NPC Types ID 51,52,53,54 for the 'Reference NPC's' I did have to make changes to the NPC Types IDs to get the query to run. Code:
REPLACE INTO `npc_types` (`id`, `name`, `lastname`, `level`, `race`, `class`, `bodytype`, `hp`, `mana`, `gender`, `texture`, `helmtexture`, `herosforgemodel`, `size`, `hp_regen_rate`, `mana_regen_rate`, `loottable_id`, `merchant_id`, `alt_currency_id`, `npc_spells_id`, I have Doors_Manip.pl saved in my plugins folder I added the code... Code:
sub EVENT_CLICKDOOR{ Rebooted server and nothing. Any suggestions or am I just not doing something simple here? |
Okay I got it to work by adding the code...
Code:
sub EVENT_CLICKDOOR{ Why does it only work with a player.pl in the zone and not with using global_player.pl? |
Player.pl in your zone folder has precedence over the global folder's global_player.pl, as is such for an NPC's script in the zone folder having precedence over a global version of the NPC script. Which means, if you have a player.pl in your zone folder, even if it's empty, it will take precedence over your global_player.pl.
|
All times are GMT -4. The time now is 12:50 PM. |
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.