Go Back   EQEmulator Home > EQEmulator Forums > Development > Development::Development

Development::Development Forum for development topics and for those interested in EQEMu development. (Not a support forum)

Reply
 
Thread Tools Display Modes
  #1  
Old 11-19-2012, 08:17 PM
Uleat's Avatar
Uleat
Developer
 
Join Date: Apr 2012
Location: North Carolina
Posts: 2,815
Default Inventory Reference System

While working on the ResyncInventory method, I found that most of the code was repeating itself. As a result, I decided to find a way of eliminating this redundant code and process the actions in a condensed manner. What came out of this was a new bitmasked inventory reference system.

By passing a pre-defined or bitwised value into the appropriate function, a single list of slots is returned for processing. Incorporating a loop and a shifting-bit bitmask, numerous slot ranges can be processed in about the same amount of code that a single range took before. A modified client deletion method 'should' eliminate the worry of what slots can be deleted from while attempting to avoid crashing the client.

In addition, the research performed during the initial creation of ResyncInventory has led to alternate deletion methods that allow the server to 'properly' delete items from slot ranges that were previously unavailable using standard methods. (There are still a few ranges that cannot be accessed from the server, but, a notification message is sent to the client when a deletion occurs in these slots.)


Here is an overview of what I have in work at the moment. (This is mainly for add-to suggestions.)


INVENTORY REFERENCE SYSTEM:
GetWorkingRangeList - Returns a list of multiple slot ranges (Accepts client version parameter)
GetRangeSlotList - Returns a list of a single slot range (Accepts client version parameter)
GetRangeBySlot - Returns the range of a provided slot
GetParentRange - Checks for and returns the parent range of a provided range
GetChildRange - Checks for and returns the child range of a provided range
GetRangeNameByRanges - Returns a comma-space delimited string of range names (Optional: returns range slot name)
GetRangeNameBySlot - Returns the range name of a provided slot (Optional: returns range slot name)
GetRangeDeleteMethod - Returns the deletion method of a given range (Used in SendDeleteItemPacket below)
GetWhereToRangeConversion - Converts 'invWhere' bitmask to 'invRange'
GetRangeToWhereConversion - Converts 'invRange' bitmask to 'invWhere'
GetChildSlotList - Returns a list of slots by provided parent slot
GetParentSlot (Renamed: CalcSlotId(arg1))
GetChildSlot (Renamed: CalcSlotId(arg1, arg2))
GetBagIndex (Renamed: CalcBagIdx)
GetMaterialFromSlot (Renamed: CalcMaterialFromSlot)
GetSlotFromMaterial (Renamed: CalcSlotFromMaterial)

MODIFIED CLIENT DELETE METHOD:
DeleteItemInInventory - Moved packet creation into helper procedures
SendDeleteChargePacket - Added alternate update method that overwrites existing client item
SendDeleteCountPacket - Added alternate update method that overwrites existing client item
SendDeleteItemPacket - Added slot range discrimination with unique deletion methods
IsClientRestrictedSlot - Returns bool value for client-related slot restrictions

RESYNCRONIZATION METHOD:
ResyncInventory - Updated version of unpublished/uncommitted resync method..uses new inventory reference system
ResyncInvProcSlots - Helper procedure for ResyncInventory
ResyncInvSetCBDelay - Helper procedure for ResyncInventory
command_resyncinv - Added command to manually call this method

PEEKINV UPDATE:
command_peekinv - Reworked to use new inventory reference system and added published/uncommitted 'money' sub-command
GetBankMoney - Added for 'money' sub-command
GetSharedBankMoney - Added for 'money' sub-command
GetCursorMoney - Added for 'money' sub-command
GetBankCopper - Added for 'money' sub-command
GetBankSilver - Added for 'money' sub-command
GetBankGold - Added for 'money' sub-command
GetBankPlatinum - Added for 'money' sub-command
GetSharedPlatinum - Added for 'money' sub-command
GetCursorCopper - Added for 'money' sub-command
GetCursorSilver - Added for 'money' sub-command
GetCursorGold - Added for 'money' sub-command
GetCursorPlatinum - Added for 'money' sub-command

MISC:
NukeItem - Reworked to use new inventory reference system (Added container override requisite)
BulkSendInventoryItems - Reworked to use new inventory reference system
RemoveNoRent - Reworked to use new inventory reference system
TakeMoneyFromPP - Added published/uncommitted rework of this procedure
AddMoneyToPP - Added published/uncommitted rework of this procedure (Copper-only version)
SummonItem - Reworked augment lore-check


I believe this is everything, but there may be a few minor changes elsewhere.

I'd like to add functions that return a pointer to the actual maps associated with the 'invWhere' buckets to fully integrate both methods and allow more redundant code reduction. I haven't looked into how to do this just yet.
__________________
Uleat of Bertoxxulous

Compilin' Dirty
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 07:50 AM.


 

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 - 2024, Jelsoft Enterprises Ltd.
Template by Bluepearl Design and vBulletin Templates - Ver3.3