EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Development::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=590)
-   -   Mercenary Development Tracking (https://www.eqemulator.org/forums/showthread.php?t=39116)

trevius 12-15-2014 05:37 PM

Mercenary Development Tracking
 
This thread was created to track the development of Mercenaries in EQEmu.

Here is the previous (old) thread on this subject from when the work was initially started:
http://www.eqemulator.org/forums/showthread.php?t=35147

Overall, Mercenaries are now more functional than ever. There are still a few remaining issues to work out.


Last Updated - February 1st 2015


Top Priority Work:
1. Grouping - Mercenaries can sometimes still cause a group to get bugged in certain scenarios of creating/disbanding groups.
2. Stances - Currently, changing mercenary stances is not supported. This will require writing AI for different stance types and applying it.


Medium Priority Work:
1. Casters - There have been reports that the damage caster Mercenary does not cast often or at all. Needs further investigation.
2. Resurrection - Mercenaries resurrections are not yet supported in EQEmu.


Low Priority Work:
1. Timers - The timers for upkeep and suspend aren't always accurate. This is probably due to how/when we send certain packets.
2. Mercenary Window - Sometimes the Mercenary Window will pop up for players that don't own a mercenary. They also get messages related to Mercenaries. This needs to be investigated.
3. Base Settings - Mercenaries only save their current settings such as size, race, etc. They should have base settings added for those fields and only save the base instead.
4. Follow Distance - Mercenaries currently follow a bit too closely. Need to adjust the follow distance to about double (or so) what it is now.


Client Issues:
1. The dbstr_us.txt file does not include all Mercenary types for every race that is available for Mercenaries. This can be corrected by adjusting the database to match what the clients have available.


Database and Source Code Changes that will be needed at some point:
1. AAs - There is now a Mercenary AA tab on newer clients. No support for this yet in EQEmu.
2. Inventory - Mercenaries now have a few slots for inventory in newer clients. No support for this yet in EQEmu.
3. Multiple Mercenaries - Newer clients support owning multiple Mercenaries at a time, so you can switch between then without needing to visit the merchant again. Still only able to have 1 Mercenary spawned at a time.
4. Give Mercenary - Giving a Mercenary to another player is not yet supported in EQEmu.
5. Simplicity - Need to simplify database management of Mercenaries and their Merchants.


Recently Resolved Issues:
1. /split - Splitting money to a group using /split (and probably turning split on) caused Mercenaries to take a share. This has been resolved.
2. No Mercenary Messages - On zoning, you get duplicate no Mercenary messages. This was resolved by removing a duplicate SpawnMercOnZone() function during zone process.
3. Unsuspend Issues - Sometimes it is required to zone/relog in order to be able to unsuspend a Mercenary. This bug was resolved by having unsuspend load the Mercenary data if it isn't already loaded.
4. Leveling - Mercenaries currently don't level with a character. This was resolved by adding the level appearance on level as well as scaling their stats.


If there are any other issues with the current Mercenary updates, please feel free to post them in this thread and they will get added to the list above once verified.

bakajikara 01-04-2015 07:48 PM

Using ROF2 client sometimes caint unsuspend a merc unless zone or evac.

bakajikara 01-04-2015 11:18 PM

Another Merc issue has arrived since you did last update on Storm Haven i caint invite other toons my group if i have merc out have get rid it invite others group.

trevius 01-05-2015 12:35 PM

Quote:

Originally Posted by bakajikara (Post 236583)
Another Merc issue has arrived since you did last update on Storm Haven i caint invite other toons my group if i have merc out have get rid it invite others group.

I believe this issue is resolved on SH, and was due to one of the recent changes in the source related to groups (but not directly to mercs). We will still need to do further testing to figure out the final solution to correct the issue in the source.

I was already aware of the issue where mercs sometimes cannot be spawned without zoning first. I am not sure why this happens yet, but will look into it further once RoF2 is finished.

werebat 01-11-2015 01:29 PM

The AI on the healer mercs needs tweaking. Before level 10 my healer merc would cast heals when I was about 35% or so which is fine. Once she hit level 10, the healer merc would cast heals even if I was at 99%. Inefficiently burned up all her mana in battles. I am using recent build from 1/9/15 and SoF2 client.

fault 01-20-2015 03:32 PM

where can i debug (more debug then already can do) no mercs? #questerrors gives no errors, no errors in sourcing the sql in its all there in the database (manually confirmed this). no errors in any log any where, however i cant get the merc hire window to come up.

trevius 01-20-2015 04:49 PM

Quote:

Originally Posted by fault (Post 237037)
where can i debug (more debug then already can do) no mercs? #questerrors gives no errors, no errors in sourcing the sql in its all there in the database (manually confirmed this). no errors in any log any where, however i cant get the merc hire window to come up.

What version of source code are you running (what date on Github)? I would suggest using the latest source on Github, as I have removed the use of the merc view, which I think was causing the most issues when setting up mercs on a server. If you want to debug mercs, open the merc.h file and change the following line from 0 to 1:

Code:

#define MERC_DEBUG 0
Then compile your source again. That will cause merc debug info to be sent to all players. It can be pretty useful.

Pretty soon, I think that debug will be available to enable in-game without having to change anything in the source. The logging system is undergoing a massive revamp right now that I think should be done soon. Once it is ready, I will convert all of those client Message() debugs in the merc code into using the new logging system. You would then be able to chose what you want to be shown to GMs in game in real-time, which is pretty badass.

In the current source, it should be fairly simple to get mercs running. You just turn the AllowMercs rule on (true) and create an NPC of class 71 and set their NPC ID in the merc_merchant_entries table.

fault 01-20-2015 06:14 PM

After a few hours, i just dropped ALL merc tables and resourced them, i can now right click them, but about 1second later the window closes with the message

"you do not meet the requirements to purchase any mercenaries"


running RoF Client

and the git was from last night about 9pm when i updated it.

akathanam 01-21-2015 01:19 PM

I had the same problem, but only with the liaison in (revamped) freeport (did not try other cities), the ones in POK did work...

fault 01-22-2015 12:56 PM

I dont get it, everything is proper, rof2 client, i noticed that it reports 0/0 expansions, but eqemu has always done that, i can access all content, zones etc that are in eqemu and rof2.

just cant access these dog gone mercs


i even set account where expansion says 0 to 21 and went down from there and nothing.

trevius 01-22-2015 04:02 PM

And you added the Liaison NPC ID to your merc_merchant_entries table?

werebat 01-22-2015 04:02 PM

The mercs.sql appears to be incomplete. I had to run the extra scripts from the below thread. Once I did that, the merc vendors worked fine and I was able to buy one.

http://www.eqemulator.org/forums/sho...ht=merc+failed

trevius 01-22-2015 05:40 PM

If your tables are not correct, you should be getting MySQL error messages in your world process window. Have you reviewed that window to see if any errors show up when your zones boot or when you right click on a Mercenary Liaison?

fault 01-22-2015 05:48 PM

Quote:

Originally Posted by trevius (Post 237080)
And you added the Liaison NPC ID to your merc_merchant_entries table?

thats the issue trevius. i looked in the table only the 2 liasons in crescent are there went to crescent and the box loads,

when i source the sql for that table it gives errors

why is there such a query used for this?

heres the sql that comes with eqemu

Code:

REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Barbarian Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Caynd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Caynd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Barbarian Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Aderrawyn'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Aderrawyn'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Half Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jarenth'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jarenth'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Half Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhilali'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhilali'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Erudite Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Bomawyn'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Kobold Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Bomawyn'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Erudite Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Adiasean'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Kobold Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Adiasean'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Guktan Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Norerd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Guktan Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Erohach'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Gnome Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Frilikin'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Gnome Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Asirav'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Vah Shir Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Voelath'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Sporali Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Voelath'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Vah Shir Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Helind'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Sporali Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Helind'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Dwarf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rirak'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Goblin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rirak'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Dwarf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Cigosh'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Goblin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Cigosh'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Iksar Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jelab'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Froglok Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jelab'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Kunark Goblin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jelab'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Iksar Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Frendad'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Froglok Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Frendad'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Kunark Goblin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Frendad'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default High Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Onaut'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Brownie Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Onaut'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default High Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhenwan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Brownie Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhenwan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Wood Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Prau'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Wood Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Shabado'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Dark Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Kedirakith'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Dark Elf Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Onay'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Human Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Drendle'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Human Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Vaehan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Drakkin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Aboekor'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Drakkin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Adew'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Ogre Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Daknot'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Lizard Man Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Daknot'));       
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Ogre Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhorin'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Lizard Man Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Rhorin'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Troll Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Ulaurd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Froglok Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Ulaurd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Ulaurd'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Troll Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Wedrijan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Froglok Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Wedrijan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Orc Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Wedrijan'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Halfling Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Jerbabi'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Halfling Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Guardian_Thaowyn'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Drakkin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Mercenary_Mdjai'));
REPLACE INTO merc_merchant_entries ( merc_merchant_template_id, merchant_id ) VALUES ( (SELECT merc_merchant_template_id FROM merc_merchant_templates WHERE name = 'Default Drakkin Mercenaries'), (SELECT ID FROM npc_types WHERE name = 'Mercenary_Akana'));


and the error
[evlite] ERROR 1242: Subquery returns more than 1 row

fault 01-22-2015 06:30 PM

EDIT ON BOTTOM


just fyi, im working on new sql for this table, something a little more efficient, about halfway done with it.

no errors with this sql.

Code:

REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(1, 23, 394050);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(2, 23, 202112);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(3, 2, 202031);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(4, 3, 202097);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(5, 1, 202096);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(6, 5, 202099);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(7, 3, 202100);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(8, 8, 202101);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(9, 8, 202102);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(10, 12, 202103);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(11, 6, 202104);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(12, 9, 202105);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(13, 10, 202106);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(14, 16, 202107);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(15, 5, 202108);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(16, 4, 202109);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(17, 11, 202110);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(18, 12, 202111);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(19, 23, 202112);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(20, 3, 202113);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(21, 13, 202114);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(22, 1, 202115);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(23, 16, 202116);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(24, 9, 202117);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(25, 10, 202118);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(26, 6, 202119);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(27, 17, 202052);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(28, 13, 202053);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(29, 4, 202035);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(30, 7, 202032);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(31, 2, 202031);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(32, 2, 202030);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(33, 17, 202028);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(34, 11, 202027);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(35, 23, 394148);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(36, 1, 383091);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(37, 1, 383100);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(38, 10, 202448);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(39, 1, 202452);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(40, 24, 2156);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(41, 24, 2159);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(42, 24, 3058);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(43, 24, 3060);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(44, 11, 999243);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(45, 17, 999244);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(46, 2, 999246);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(47, 2, 999247);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(48, 7, 999251);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(49, 17, 999268);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(50, 13, 999269);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(51, 1, 999303);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(52, 3, 999304);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(53, 23, 999305);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(54, 5, 999306);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(55, 5, 999307);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(56, 8, 999308);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(57, 8, 999309);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(58, 12, 999310);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(59, 6, 999311);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(60, 9, 999312);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(61, 10, 999313);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(62, 16, 999314);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(63, 5, 999315);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(64, 4, 999316);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(65, 11, 999317);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(66, 12, 999318);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(67, 23, 999319);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(68, 3, 999320);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(69, 13, 999321);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(70, 1, 999322);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(71, 16, 999323);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(72, 9, 999324);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(73, 10, 999325);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(74, 6, 999326);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(75, 10, 999593);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(76, 1, 999597);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(77, 11, 999645);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(78, 17, 999646);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(79, 2, 999648);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(80, 7, 999650);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(81, 4, 999653);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(82, 17, 999670);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(83, 13, 999671);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(84, 1, 999705);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(85, 3, 999706);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(86, 23, 999707);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(87, 5, 999708);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(88, 7, 999709);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(89, 8, 999710);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(90, 8, 999711);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(91, 12, 999712);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(92, 6, 999713);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(93, 9, 999714);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(94, 10, 999715);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(95, 16, 999716);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(96, 5, 999717);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(97, 4, 999718);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(98, 11, 999719);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(99, 12, 999720);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(100, 23, 999721);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(101, 3, 999722);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(102, 13, 999723);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(103, 1, 999724);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(104, 16, 999725);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(105, 9, 999726);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(106, 10, 999727);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(107, 6, 999728);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(108, 10, 999995);
REPLACE INTO `merc_merchant_entries` (`merc_merchant_entry_id`, `merc_merchant_template_id`, `merchant_id`) VALUES(109, 1, 999999);


after i spent 30 minutes getting the sql right and in, the failed to load pops up, now ive already used the info in the linked thread so yea. not sure if i missed anything.

from query error log

Code:

[MYSQL ERR] Table 'eq.vwBotCharacterMobs' doesn't exist
SELECT c.id,c.name,c.class,c.level,c.timelaston,c.zoneid, g.guild_id,g.rank,g.tribute_enable,g.total_tribute,g.last_tribute, g.banker,g.public_note,g.alt FROM vwBotCharacterMobs AS c LEFT JOIN vwGuildMembers AS g ON c.id=g.char_id AND c.mobtype = g.mobtype  WHERE g.guild_id=1
[MYSQL ERR] Unknown column 'MercSize' in 'field list'
SELECT MercID, Slot, Name, TemplateID, SuspendedTime, IsSuspended, TimerRemaining, Gender, MercSize, StanceID, HP, Mana, Endurance, Face, LuclinHairStyle, LuclinHairColor, LuclinEyeColor, LuclinEyeColor2, LuclinBeardColor, LuclinBeard, DrakkinHeritage, DrakkinTattoo, DrakkinDetails FROM mercs WHERE OwnerCharacterID = '3' ORDER BY Slot
[MYSQL ERR] Table 'eq.vwBotCharacterMobs' doesn't exist
SELECT c.id,c.name,c.class,c.level,c.timelaston,c.zoneid, g.guild_id,g.rank,g.tribute_enable,g.total_tribute,g.last_tribute, g.banker,g.public_note,g.alt FROM vwBotCharacterMobs AS c LEFT JOIN vwGuildMembers AS g ON c.id=g.char_id AND c.mobtype = g.mobtype  WHERE g.guild_id=1
[MYSQL ERR] Unknown column 'MercSize' in 'field list'
SELECT MercID, Slot, Name, TemplateID, SuspendedTime, IsSuspended, TimerRemaining, Gender, MercSize, StanceID, HP, Mana, Endurance, Face, LuclinHairStyle, LuclinHairColor, LuclinEyeColor, LuclinEyeColor2, LuclinBeardColor, LuclinBeard, DrakkinHeritage, DrakkinTattoo, DrakkinDetails FROM mercs WHERE OwnerCharacterID = '3' ORDER BY Slot
[MYSQL ERR] Unknown column 'm_weaponinfo.d_melee_texture1' in 'field list'
SELECT m_stats.merc_npc_type_id, '' AS name, m_stats.level, m_types.race_id, m_subtypes.class_id, m_stats.hp, m_stats.mana, 0 AS gender, m_armorinfo.texture, m_armorinfo.helmtexture, m_stats.attack_speed, m_stats.STR, m_stats.STA, m_stats.DEX, m_stats.AGI, m_stats._INT, m_stats.WIS, m_stats.CHA, m_stats.MR, m_stats.CR, m_stats.DR, m_stats.FR, m_stats.PR, m_stats.Corrup, m_stats.mindmg, m_stats.maxdmg, m_stats.attack_count, m_stats.special_abilities, m_weaponinfo.d_melee_texture1, m_weaponinfo.d_melee_texture2, m_weaponinfo.prim_melee_type, m_weaponinfo.sec_melee_type, m_stats.runspeed, m_stats.hp_regen_rate, m_stats.mana_regen_rate, 1 AS bodytype, m_armorinfo.armortint_id, m_armorinfo.armortint_red, m_armorinfo.armortint_green, m_armorinfo.armortint_blue, m_stats.AC, m_stats.ATK, m_stats.Accuracy, m_stats.spellscale, m_stats.healscale FROM merc_stats m_stats INNER JOIN merc_armorinfo m_armorinfo ON m_stats.merc_npc_type_id = m_armorinfo.merc_npc_type_id AND m_armorinfo.minlevel <= m_stats.level AND m_armorinfo.maxlevel >= m_stats.level INNER JOIN merc_weaponinfo m_weaponinfo ON m_stats.merc_npc_type_id = m_weaponinfo.merc_npc_type_id AND m_weaponinfo.minlevel <= m_stats.level AND m_weaponinfo.maxlevel >= m_stats.level INNER JOIN merc_templates m_templates ON m_templates.merc_npc_type_id = m_stats.merc_npc_type_id INNER JOIN merc_types m_types ON m_templates.merc_type_id = m_types.merc_type_id INNER JOIN merc_subtypes m_subtypes ON m_templates.merc_subtype_id = m_subtypes.merc_subtype_id WHERE m_templates.merc_npc_type_id = 5 AND m_stats.clientlevel = 56 AND m_types.race_id = 6
[MYSQL ERR] Unknown column 'm_weaponinfo.d_melee_texture1' in 'field list'
SELECT m_stats.merc_npc_type_id, '' AS name, m_stats.level, m_types.race_id, m_subtypes.class_id, m_stats.hp, m_stats.mana, 0 AS gender, m_armorinfo.texture, m_armorinfo.helmtexture, m_stats.attack_speed, m_stats.STR, m_stats.STA, m_stats.DEX, m_stats.AGI, m_stats._INT, m_stats.WIS, m_stats.CHA, m_stats.MR, m_stats.CR, m_stats.DR, m_stats.FR, m_stats.PR, m_stats.Corrup, m_stats.mindmg, m_stats.maxdmg, m_stats.attack_count, m_stats.special_abilities, m_weaponinfo.d_melee_texture1, m_weaponinfo.d_melee_texture2, m_weaponinfo.prim_melee_type, m_weaponinfo.sec_melee_type, m_stats.runspeed, m_stats.hp_regen_rate, m_stats.mana_regen_rate, 1 AS bodytype, m_armorinfo.armortint_id, m_armorinfo.armortint_red, m_armorinfo.armortint_green, m_armorinfo.armortint_blue, m_stats.AC, m_stats.ATK, m_stats.Accuracy, m_stats.spellscale, m_stats.healscale FROM merc_stats m_stats INNER JOIN merc_armorinfo m_armorinfo ON m_stats.merc_npc_type_id = m_armorinfo.merc_npc_type_id AND m_armorinfo.minlevel <= m_stats.level AND m_armorinfo.maxlevel >= m_stats.level INNER JOIN merc_weaponinfo m_weaponinfo ON m_stats.merc_npc_type_id = m_weaponinfo.merc_npc_type_id AND m_weaponinfo.minlevel <= m_stats.level AND m_weaponinfo.maxlevel >= m_stats.level INNER JOIN merc_templates m_templates ON m_templates.merc_npc_type_id = m_stats.merc_npc_type_id INNER JOIN merc_types m_types ON m_templates.merc_type_id = m_types.merc_type_id INNER JOIN merc_subtypes m_subtypes ON m_templates.merc_subtype_id = m_subtypes.merc_subtype_id WHERE m_templates.merc_npc_type_id = 5 AND m_stats.clientlevel = 56 AND m_types.race_id = 6

found the melee weapon texture issue i believe. in the sql there is a typo in merc_weaponinfo it currently says d_meele_texture1 and d_meele_texture1

Code:

ALTER TABLE `merc_weaponinfo` CHANGE `d_meele_texture1` `d_melee_texture1` INT(10) UNSIGNED NOT NULL DEFAULT '0', CHANGE `d_meele_texture2` `d_melee_texture2` INT(10) UNSIGNED NOT NULL DEFAULT '0';

trevius 01-23-2015 04:29 PM

From your errors, I am guessing you are using bots, but also have some SQL issues with them.

As for the merc SQL errors, those should have been corrected when you started world and the auto db update script ran. When it starts, it will bring up a menu that says if your db is up to date or not (and yours should have said it was not due to the meele vs melee issue).

However, if your server was updated correctly, and then you resourced the merc stuff after that, the DB version would match the server code, so it wouldn't check for the db updates like the meele one for mercs. If you set your db version in the db_version table to something like 1, it would recheck all SQL updates and let you apply them automatically. This should have been able to correct your issue with the SQL errors.

As far as setting up the individual merchants goes, I haven't really looked into that when using a current PEQ DB and the merc related SQL. Basically, what you need to do is get 1 Merc Merchant working by adding it to the merc_merchant_entries table and after that you can fix the rest in the same way. Seems like you are already making progress on that stuff though.

fault 01-24-2015 08:45 PM

not using bots yet, compiled with but the sql is... and issue in another topic.


I built in the exact order (except the virtual box stuff) as this guide states http://wiki.eqemulator.org/p?EQEmu_o...n_7_Virtualbox

and still ended with those issues, but ive fixed them and mercs are operating excellently, tank mercs are swinging at about 500% haste but that is a small issue that can be fixed later

werebat 01-29-2015 09:37 AM

I have been playing Live recently and noticed that Merc healers (balanced) start to heal you when your health dips below 75%. In EQEmu it is set to 95%. Can this be adjusted to match Live? 95% is inefficient and a merc can burn all their mana early in one combat.

I have thought about parameterizing it, but I am not that well versed in C++.

dagulus2 01-29-2015 10:58 AM

Quote:

Originally Posted by fault (Post 237147)
and still ended with those issues, but ive fixed them and mercs are operating excellently, tank mercs are swinging at about 500% haste but that is a small issue that can be fixed later

Pretty sure this is due to NPCs being moved over to using attack_delay rather than attack_count/attack_speed.

trevius 01-29-2015 03:47 PM

Quote:

Originally Posted by werebat (Post 237264)
I have been playing Live recently and noticed that Merc healers (balanced) start to heal you when your health dips below 75%. In EQEmu it is set to 95%. Can this be adjusted to match Live? 95% is inefficient and a merc can burn all their mana early in one combat.

I have thought about parameterizing it, but I am not that well versed in C++.

The AI for Mercenaries has a decent amount of work left to do. I think the majority of it was a straight copy from the Bots AI. It would definitely be good to have a table to define AI settings at some point for Mercs (and possibly Bots). I am primarily trying to remove as many bugs with them as possible and allow full functionality if possible. Once that is done, I may take a look at AI at some point, but I am not really an expert in that area yet. I am sure many improvements could be made.

We still need to implement stances, roles, and plenty of other things first, unless someone else wants to work on the AI at the same time as this stuff is being done.

Quote:

Originally Posted by dagulus2 (Post 237265)
Pretty sure this is due to NPCs being moved over to using attack_delay rather than attack_count/attack_speed.

That is possible. The merc_stats table could probably be updated with simple queries to compensate for that issue in the time-being by anyone running Mercs.

demonstar55 01-30-2015 02:31 AM

Merc attack speed should be fixed now.

Huppy 03-16-2015 09:16 PM

Just started playing with a merc for first time, since they were put in the EQEmu game.
I only tried a tank merc, but seemed to work pretty good, zoned around, killed a few mobs.(on my own server)
I disabled the upkeep in rule values, then I noticed my UF client still getting the upkeep messages, so for now I set the
upkeep interval timer to 9999999 just to slow that annoying message down.
I also noticed if I zone with the merc unsuspended, the merc window changes and the "info" shows a db_string error.
No big deal though, everything still works.

markusdabrave 03-25-2015 02:29 AM

Hi guys, newbie here so please forgive me if this is answered elsewhere. I haven't had much luck finding fixes for the merc stuff though I do appreciate the fact that I've learned a lot of SQL and am really getting a good insight as to how things work on the backend.

Anyway, I've been working on getting my mercs up and running for a few days now and keep running into problems. I sourced mercs.sql but after a lot of forum research, I've come to the conclusion that I might have an old version of it. Eyeballing the database tables and looking at what the script was doing, I found some problems:
  • It was creating a column using meele instead of melee (obviously a typo that was copied)
  • It created a specialattks column, which apparently deprecated and replaced by special_abilities
  • It also created an attack_speed column which is also deprecated and replaced by attack_delay
Nothing a simple find/replace with NotePad++ couldn't fix. I manged to weed my way through those issues and fix them. However, now when I try to hire my merc in game I'm getting a message about a column called statscale being missing. This one has me stumped, but I noticed in the changelog this was added fairly recently.

Quote:

== 01/29/2015 ==
Trevius: Added more information to Mercenary Logging.
Trevius: Added potential fix for Mercenaries that fail to unsuspend.
Trevius: Added a new "statscale" field to the merc_stats table that can be used to quickly balance Mercenary Stats based on Level.
Trevius: The new "statscale" field now combines with the Mercs::ScaleRate rule value (default 100 percent for both).
So I guess what I'm wanting to know is: how can I obtain the most current mercs.sql or if that's a relatively easy fix can you point me in the right direction?

I'm running EQEmu in a Debian VM using MySQL if it matters. And definitely thanks for all you guys do, even without the mercs I'm having a lot of fun learning how the game works!

Edit: I think I got it. Rereading my own quote from Trevius (duh) I ran the query:

Quote:

alter table merc_stats
add statscale int
followed by:

Quote:

UPDATE `merc_stats` SET `statscale` = 100
No errors and my merc spawned. Will see where it goes from here.

castleman74 06-01-2015 06:48 PM

Is there a way to enable journeyman 5 mercs?

jpyou127 02-13-2016 11:34 AM

Just installed a fresh PEQ db from an install of the awesome auto-installer by Akkadius. I enabled one mercenary vendor (71) in PoK to test. I am using UF. I get apprentice and journeyman drop downs. But I get no tiers and the right 2 sub-panes DB string errors. I have tried 2 different client dbstr_us.txt (live current ~7mb and rof2 ~4mb). I have also reloaded mercs.sql and restarted the server. And last, when I hit hire I get "mercenary failed to spawn". There are no events logged and no sql errors in world pane. Oh and yes rule set is enable also.

Help!


Celestial

ionhsmith 02-16-2016 10:48 AM

Using ROF2 tested out mercs on my server and the tank merc journeyman tier 2 attacks everything as soon as auto attack comes on, the damage caster will run up to the mob but does nothing, and the healer will cast buff but not heal.

jpyou127 02-16-2016 11:34 AM

Update: I dropped all merc tables and the view. Sourced in tables from the current peq db and got Mercs to work. I confirm ionhsmith's assessment of merc behavior. I am using UF client.


Celestial

cannon 06-02-2016 04:54 PM

Quote:

Originally Posted by bakajikara (Post 236577)
Using ROF2 client sometimes caint unsuspend a merc unless zone or evac.

I had this issue too and thought it might be worth mentioning. This started happening to me after I changed the Merc:SuspendIntervalMS (milliseconds) time in the database and it did not match the Merc:SuspendIntervalS (seconds)

I noticed someone abusing the merc healer set at a default 10 second timer, by running him dry then suspending him and unspending him back to full mana and health.

So, I thought changing them both to the same number would change the interval, apparently the timer was hitting zero with the MS setting and the actual unsuspend time was going the full time of the Seconds setting and not letting me unsuspend. If that makes any sense.

I changed the Merc:SuspendIntervalMS setting to 180000 (1000 milliseconds = 1 second)
and the Merc:SuspendIntervalS setting to 180

Now the unsuspend merc button will appear after 3 minutes of suspending the merc or the death of the merc.

The unsuspend/suspend button works without zoning on Sof2 and Underfoot.

Shiny151 06-05-2016 04:49 PM

Quote:

Originally Posted by cannon (Post 249195)
I had this issue too and thought it might be worth mentioning. This started happening to me after I changed the Merc:SuspendIntervalMS (milliseconds) time in the database and it did not match the Merc:SuspendIntervalS (seconds)

I noticed someone abusing the merc healer set at a default 10 second timer, by running him dry then suspending him and unspending him back to full mana and health.

So, I thought changing them both to the same number would change the interval, apparently the timer was hitting zero with the MS setting and the actual unsuspend time was going the full time of the Seconds setting and not letting me unsuspend. If that makes any sense.

I changed the Merc:SuspendIntervalMS setting to 180000 (1000 milliseconds = 1 second)
and the Merc:SuspendIntervalS setting to 180

Now the unsuspend merc button will appear after 3 minutes of suspending the merc or the death of the merc.

The unsuspend/suspend button works without zoning on Sof2 and Underfoot.

Is this still working for you? I was running into the same issue and have tried various time constraints from 45 seconds to 3 minutes; unless it's a very short time the result is always the same; at some point the unsuspend fails.

cannon 06-05-2016 07:43 PM

Quote:

Originally Posted by Shiny151 (Post 249223)
Is this still working for you? I was running into the same issue and have tried various time constraints from 45 seconds to 3 minutes; unless it's a very short time the result is always the same; at some point the unsuspend fails.

Seems like I can suspend and unsuspend a couple times then it quits working at random.

Shiny151 06-05-2016 10:10 PM

Quote:

Originally Posted by cannon (Post 249227)
Seems like I can suspend and unsuspend a couple times then it quits working at random.

I'm getting similar results. If I find a solution I'll post it.

cannon 06-07-2016 01:42 PM

Quote:

Originally Posted by Shiny151 (Post 249236)
I'm getting similar results. If I find a solution I'll post it.

Seems to have something to do with the timer / refresh. If you set the suspendinterval in the rules_value to 0 then you can continuously suspend and unsuspend unlimited times in the same zone, once you change the timer to any amount of time is when it seems to break.

EDIT: Test this out for me. In your rule_values, set the Mercs:SuspendIntervalS to 52 and your Mercs:SuspendIntervalMS to 52000 and then restart your server and test the suspend button. Watch the timer and see where it starts and where it refreshes, then attempt to continue to use the suspend/unsuspend and see if works unlimited.

Somewhere 52 seconds is getting added to the timer, then when it hits 52 the button refreshes, anything set over 52 seconds and the timer will work twice then pass the 52 second mark without refreshing then run to 0 with no refresh of the unsuspend button.

Ok, it has nothing to do with the Mercs:SuspendIntervalS time, no matter what time you set it at, once you unsuspend the merc the timer tics until you run out of time to unsuspend after you either suspend or the merc dies.

Shiny151 06-08-2016 11:11 PM

Quote:

Originally Posted by cannon (Post 249277)
EDIT: Test this out for me. In your rule_values, set the Mercs:SuspendIntervalS to 52 and your Mercs:SuspendIntervalMS to 52000 and then restart your server and test the suspend button. Watch the timer and see where it starts and where it refreshes, then attempt to continue to use the suspend/unsuspend and see if works unlimited.

Yeah trying 52 still produces a random result. The first account I tried failed on the 4th suspend; the second account made it to 11 successful suspends/unsuspends; the third failed again at 4. I can't make sense of it.

Notice how you don't even need to populate Mercs:SuspendIntervalMS; you could just leave it at 0 and it falls back on the Mercs:SuspendIntervalS entry. The opposite isn't true, however.

cannon 06-09-2016 12:06 AM

Quote:

Originally Posted by Shiny151 (Post 249299)
Yeah trying 52 still produces a random result. The first account I tried failed on the 4th suspend; the second account made it to 11 successful suspends/unsuspends; the third failed again at 4. I can't make sense of it.

Notice how you don't even need to populate Mercs:SuspendIntervalMS; you could just leave it at 0 and it falls back on the Mercs:SuspendIntervalS entry. The opposite isn't true, however.

The refresh packet gets sent to unsuspend when 1) you zone or 2) if you have the timer set a 0, anything over 0 within the zone does not get refreshed. Seems like there is no event to trigger the unsuspend button once the timer runs out. Ive been trying different things for three days now and I am at a loss.

EDIT: Actually there is a packet sent to refresh the unsuspend button for a limited time, seems like the first time you unsuspend the mercenary a hidden timer goes off and after approximately 5 minutes or so the unsuspend will not refresh no matter how many times it worked prior. confusing i know. haha


All times are GMT -4. The time now is 08:46 AM.

Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.