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. |
All times are GMT -4. The time now is 04:36 PM. |
Powered by vBulletin®, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.