Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Server Code Submissions

Reply
 
Thread Tools Display Modes
  #1  
Old 01-12-2011, 12:12 AM
l0stmancd
Fire Beetle
 
Join Date: Apr 2005
Posts: 23
Default

Problem Definition:

What we see happening is that a user would attempt to, for example, deaugment a lore item.

Scenario:
User has SwordA that is Lore with Augment A on it.

User puts SwordA (with AugmentA) into the augmentation sealer.
- At this time, user has a single lore sword in inventory.
---
User puts the augment remover into the augmentation sealer.
- At this time, the user has a single lore sword in inventory.
---
User clicks the remove augment int eh window.
- At this time, the user has a single lore sword in inventory.
--
User confirms that the user wishes to remove the augment
- At this time, the user has a single lore sword in inventory.
--
At this point the server removes the augment and pushes the new sword and the new augment onto the cursor.
- At this time, the user has two lore swords in inventory (one in aug sealer and one on hand).
* Problem Happens Here*
--
For most users, the server would then send a delete item request for the items in the augmentation sealer.
- At this time, the user has a single lore sword in inventory (zero in aug sealer, one in hand).

The issue is that occasionally (uncommon but not rare) the client would get "DUPLICATE LORE ITEM DELETED!" message and then it would look like they only have a single augment on their cursor. The items in the augmentation sealer would, of course, be deleted. It would -appear- at this time that the user has lost the LoreSwordA.

The problem is that the server believes the user still has the lore sword in the top slot of their cursor inventory slots. At this point the client and server have a sync issue. The client can move around what they believe is the augment and the server believes they are moving around the loreSwordA. If the user zones / camps, then they are resynced and the user sees both the loreSwordA as well as the augment.

Reproduction Steps:
On a server augment / deaugment using the inventory augmentation container until you receive the "Duplicate Lore Item Deleted" message. The longest it took for me to receive this was ~20-25 times. I am not able to reproduce this easily on my local server without massively lagging out my virtual machine to try to introduce latency.

Original thought as to the cause was the two items being on the client at a given time causing the server (or client) to believe that lore items should be deleted. Original solution (as posted above) was to bring us into line with tradeskill combines and remove the items first and then add in the new item.

In chatting with Trevius, there seems to be some questions still regarding how this is happening so bringing into the thread to discuss.
Reply With Quote
  #2  
Old 01-12-2011, 12:38 AM
l0stmancd
Fire Beetle
 
Join Date: Apr 2005
Posts: 23
Default

Here is the really weird thing that makes me think this is client and not server controlled.

I was debugging into zoneperl.exe and had a trap on CheckLoreConflict call. I made sure it worked when I picked up a batwing off the ground. All good. Then I reproduced this defect.

When I reproduced this defect, the CheckLoreConflict function was not called at all.

Recompiling with this hard coded to "return false;" - my bet is that the client will still delete it because it believes there is a lore conflict.

-- Update --

Yup, this is a pure client issue. Appears to be occurring in SoD for sure. Will test this out in a Titanium Client.

How to reproduce easily.

Hard code CheckLoreConflict to return false.

#summonitem 5407 multiple times (Executioners axe - lore).

Note you can have multiple on you.

Drop one on the ground.

Pick it up and note you will have "Duplicate lore items deleted!" and the items will disappear. Log and come back in and they will still be present.

Testing this out on Titanium.

-- Update --

Titanium has same issue.

This may have been already noted in source via the comment:
" // if there is a lore conflict, delete the offending item from the server inventory
// the client updates itself and takes care of sending "duplicate lore item" messages
"

Seems to imply that the client will remove it from its own inventory and the server just needs to remove it from ours.

Would explain why it is fine when the user zones / camps (as server still has the "duplicate lore items" but client has them removed).

I consider that this is still the proper fix for this issue from the tests above...
Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

   

All times are GMT -4. The time now is 11:45 PM.


 

Everquest is a registered trademark of Daybreak Game Company LLC.
EQEmulator is not associated or affiliated in any way with Daybreak Game Company LLC.
Except where otherwise noted, this site is licensed under a Creative Commons License.
       
Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3