From 2a74d0463589721f3f0a7c58ba5bee21cea8f699 Mon Sep 17 00:00:00 2001 From: Uleat Date: Sun, 29 May 2016 20:30:03 -0400 Subject: [PATCH] Added offline client inventory version definitions and convertors --- common/emu_versions.cpp | 108 +++++++++++++++++ common/emu_versions.h | 19 ++- common/eq_limits.cpp | 248 +++++++++++++++++++++++++++++++++++----- 3 files changed, 342 insertions(+), 33 deletions(-) diff --git a/common/emu_versions.cpp b/common/emu_versions.cpp index 1de91a503..3104b6832 100644 --- a/common/emu_versions.cpp +++ b/common/emu_versions.cpp @@ -151,6 +151,14 @@ bool EQEmu::versions::IsValidNonPCInventoryVersion(InventoryVersion inventory_ve return true; } +bool EQEmu::versions::IsValidOfflinePCInventoryVersion(InventoryVersion inventory_version) +{ + if (inventory_version <= LastNonPCInventoryVersion || inventory_version > LastOfflinePCInventoryVersion) + return false; + + return true; +} + EQEmu::versions::InventoryVersion EQEmu::versions::ValidateInventoryVersion(InventoryVersion inventory_version) { if (inventory_version <= InventoryVersion::Unknown || inventory_version > LastInventoryVersion) @@ -175,6 +183,14 @@ EQEmu::versions::InventoryVersion EQEmu::versions::ValidateNonPCInventoryVersion return inventory_version; } +EQEmu::versions::InventoryVersion EQEmu::versions::ValidateOfflinePCInventoryVersion(InventoryVersion inventory_version) +{ + if (inventory_version <= LastNonPCInventoryVersion || inventory_version > LastOfflinePCInventoryVersion) + return InventoryVersion::Unknown; + + return inventory_version; +} + const char* EQEmu::versions::InventoryVersionName(InventoryVersion inventory_version) { switch (inventory_version) { @@ -202,6 +218,18 @@ const char* EQEmu::versions::InventoryVersionName(InventoryVersion inventory_ver return "Bot"; case InventoryVersion::Pet: return "Pet"; + case InventoryVersion::OfflineTitanium: + return "Offline Titanium"; + case InventoryVersion::OfflineSoF: + return "Offline SoF"; + case InventoryVersion::OfflineSoD: + return "Offline SoD"; + case InventoryVersion::OfflineUF: + return "Offline UF"; + case InventoryVersion::OfflineRoF: + return "Offline RoF"; + case InventoryVersion::OfflineRoF2: + return "Offline RoF2"; default: return "Invalid Version"; }; @@ -252,3 +280,83 @@ EQEmu::versions::InventoryVersion EQEmu::versions::ConvertClientVersionToInvento return InventoryVersion::Unknown; } } + +EQEmu::versions::InventoryVersion EQEmu::versions::ConvertPCInventoryVersionToOfflinePCInventoryVersion(InventoryVersion inventory_version) +{ + switch (inventory_version) { + case InventoryVersion::Titanium: + return InventoryVersion::OfflineTitanium; + case InventoryVersion::SoF: + return InventoryVersion::OfflineSoF; + case InventoryVersion::SoD: + return InventoryVersion::OfflineSoD; + case InventoryVersion::UF: + return InventoryVersion::OfflineUF; + case InventoryVersion::RoF: + return InventoryVersion::OfflineRoF; + case InventoryVersion::RoF2: + return InventoryVersion::OfflineRoF2; + default: + return InventoryVersion::Unknown; + } +} + +EQEmu::versions::InventoryVersion EQEmu::versions::ConvertOfflinePCInventoryVersionToPCInventoryVersion(InventoryVersion inventory_version) +{ + switch (inventory_version) { + case InventoryVersion::OfflineTitanium: + return InventoryVersion::Titanium; + case InventoryVersion::OfflineSoF: + return InventoryVersion::SoF; + case InventoryVersion::OfflineSoD: + return InventoryVersion::SoD; + case InventoryVersion::OfflineUF: + return InventoryVersion::UF; + case InventoryVersion::OfflineRoF: + return InventoryVersion::RoF; + case InventoryVersion::OfflineRoF2: + return InventoryVersion::RoF2; + default: + return InventoryVersion::Unknown; + } +} + +EQEmu::versions::ClientVersion EQEmu::versions::ConvertOfflinePCInventoryVersionToClientVersion(InventoryVersion inventory_version) +{ + switch (inventory_version) { + case InventoryVersion::OfflineTitanium: + return ClientVersion::Titanium; + case InventoryVersion::OfflineSoF: + return ClientVersion::SoF; + case InventoryVersion::OfflineSoD: + return ClientVersion::SoD; + case InventoryVersion::OfflineUF: + return ClientVersion::UF; + case InventoryVersion::OfflineRoF: + return ClientVersion::RoF; + case InventoryVersion::OfflineRoF2: + return ClientVersion::RoF2; + default: + return ClientVersion::Unknown; + } +} + +EQEmu::versions::InventoryVersion EQEmu::versions::ConvertClientVersionToOfflinePCInventoryVersion(ClientVersion client_version) +{ + switch (client_version) { + case ClientVersion::Titanium: + return InventoryVersion::OfflineTitanium; + case ClientVersion::SoF: + return InventoryVersion::OfflineSoF; + case ClientVersion::SoD: + return InventoryVersion::OfflineSoD; + case ClientVersion::UF: + return InventoryVersion::OfflineUF; + case ClientVersion::RoF: + return InventoryVersion::OfflineRoF; + case ClientVersion::RoF2: + return InventoryVersion::OfflineRoF2; + default: + return InventoryVersion::Unknown; + } +} diff --git a/common/emu_versions.h b/common/emu_versions.h index 45bb4ddb1..82244f039 100644 --- a/common/emu_versions.h +++ b/common/emu_versions.h @@ -86,23 +86,38 @@ namespace EQEmu NPC, Merc, Bot, - Pet + Pet, + OfflineTitanium, + OfflineSoF, + OfflineSoD, + OfflineUF, + OfflineRoF, + OfflineRoF2 }; - const InventoryVersion LastInventoryVersion = InventoryVersion::Pet; + const InventoryVersion LastInventoryVersion = InventoryVersion::OfflineRoF2; const InventoryVersion LastPCInventoryVersion = InventoryVersion::RoF2; const InventoryVersion LastNonPCInventoryVersion = InventoryVersion::Pet; + const InventoryVersion LastOfflinePCInventoryVersion = InventoryVersion::OfflineRoF2; const size_t InventoryVersionCount = (static_cast(LastInventoryVersion) + 1); extern bool IsValidInventoryVersion(InventoryVersion inventory_version); extern bool IsValidPCInventoryVersion(InventoryVersion inventory_version); extern bool IsValidNonPCInventoryVersion(InventoryVersion inventory_version); + extern bool IsValidOfflinePCInventoryVersion(InventoryVersion inventory_version); + extern InventoryVersion ValidateInventoryVersion(InventoryVersion inventory_version); extern InventoryVersion ValidatePCInventoryVersion(InventoryVersion inventory_version); extern InventoryVersion ValidateNonPCInventoryVersion(InventoryVersion inventory_version); + extern InventoryVersion ValidateOfflinePCInventoryVersion(InventoryVersion inventory_version); + extern const char* InventoryVersionName(InventoryVersion inventory_version); extern ClientVersion ConvertInventoryVersionToClientVersion(InventoryVersion inventory_version); extern InventoryVersion ConvertClientVersionToInventoryVersion(ClientVersion client_version); + extern InventoryVersion ConvertPCInventoryVersionToOfflinePCInventoryVersion(InventoryVersion inventory_version); + extern InventoryVersion ConvertOfflinePCInventoryVersionToPCInventoryVersion(InventoryVersion inventory_version); + extern ClientVersion ConvertOfflinePCInventoryVersionToClientVersion(InventoryVersion inventory_version); + extern InventoryVersion ConvertClientVersionToOfflinePCInventoryVersion(ClientVersion client_version); } /*versions*/ diff --git a/common/eq_limits.cpp b/common/eq_limits.cpp index 8dffc71f9..2c40a98b9 100644 --- a/common/eq_limits.cpp +++ b/common/eq_limits.cpp @@ -52,7 +52,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ legacy::TYPE_POSSESSIONS_SIZE, legacy::TYPE_POSSESSIONS_SIZE, legacy::TYPE_POSSESSIONS_SIZE, - legacy::TYPE_POSSESSIONS_SIZE + legacy::TYPE_POSSESSIONS_SIZE, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeBank] ClientUnknown::Null, @@ -66,7 +72,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeSharedBank] ClientUnknown::Null, @@ -80,7 +92,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeTrade] ClientUnknown::Null, @@ -94,7 +112,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ 4, 4, legacy::TYPE_TRADE_SIZE, // client thinks this is another client - 4 + 4, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeWorld] ClientUnknown::Null, @@ -108,7 +132,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeLimbo] ClientUnknown::Null, @@ -122,7 +152,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeTribute] ClientUnknown::Null, @@ -136,7 +172,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeTrophyTribute] ClientUnknown::Null, @@ -150,7 +192,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeGuildTribute] ClientUnknown::Null, @@ -164,7 +212,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeMerchant] ClientUnknown::Null, @@ -178,7 +232,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeDeleted] ClientUnknown::Null, @@ -192,7 +252,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeCorpse] ClientUnknown::Null, @@ -206,7 +272,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeBazaar] ClientUnknown::Null, @@ -220,7 +292,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeInspect] ClientUnknown::Null, @@ -234,7 +312,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeRealEstate] ClientUnknown::Null, @@ -248,7 +332,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeViewMODPC] ClientUnknown::Null, @@ -262,7 +352,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeViewMODBank] ClientUnknown::Null, @@ -276,7 +372,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeViewMODSharedBank] ClientUnknown::Null, @@ -290,7 +392,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeViewMODLimbo] ClientUnknown::Null, @@ -304,7 +412,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeAltStorage] ClientUnknown::Null, @@ -318,7 +432,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeArchived] ClientUnknown::Null, @@ -332,7 +452,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeMail] ClientUnknown::Null, @@ -346,7 +472,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeGuildTrophyTribute] ClientUnknown::Null, @@ -360,7 +492,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeKrono] ClientUnknown::Null, @@ -374,7 +512,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }, { // local[TypeOther] ClientUnknown::Null, @@ -388,7 +532,13 @@ uint16 EQEmu::inventory::InventoryTypeSize(versions::InventoryVersion inventory_ EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null } }; @@ -412,7 +562,13 @@ uint64 EQEmu::inventory::PossessionsBitmask(versions::InventoryVersion inventory EntityLimits::npc::Null, EntityLimits::merc::Null, EntityLimits::bot::Null, - EntityLimits::pet::Null + EntityLimits::pet::Null, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }; return NOT_USED; @@ -433,7 +589,13 @@ bool EQEmu::inventory::AllowEmptyBagInBag(versions::InventoryVersion inventory_v EntityLimits::npc::False, EntityLimits::merc::False, EntityLimits::bot::False, - EntityLimits::pet::False + EntityLimits::pet::False, + Titanium::False, + SoF::False, + SoD::False, + UF::False, + RoF::False, + RoF2::False }; return false; @@ -454,7 +616,13 @@ bool EQEmu::inventory::AllowClickCastFromBag(versions::InventoryVersion inventor EntityLimits::npc::False, EntityLimits::merc::False, EntityLimits::bot::False, - EntityLimits::pet::False + EntityLimits::pet::False, + Titanium::False, + SoF::False, + SoD::False, + UF::False, + RoF::False, + RoF2::False }; return local[static_cast(versions::ValidateInventoryVersion(inventory_version))]; @@ -474,7 +642,13 @@ uint16 EQEmu::inventory::ItemAugSize(versions::InventoryVersion inventory_versio legacy::ITEM_COMMON_SIZE, legacy::ITEM_COMMON_SIZE, legacy::ITEM_COMMON_SIZE, - legacy::ITEM_COMMON_SIZE + legacy::ITEM_COMMON_SIZE, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }; return local[static_cast(versions::ValidateInventoryVersion(inventory_version))]; @@ -494,7 +668,13 @@ uint16 EQEmu::inventory::ItemBagSize(versions::InventoryVersion inventory_versio legacy::ITEM_CONTAINER_SIZE, legacy::ITEM_CONTAINER_SIZE, legacy::ITEM_CONTAINER_SIZE, - legacy::ITEM_CONTAINER_SIZE + legacy::ITEM_CONTAINER_SIZE, + Titanium::Null, + SoF::Null, + SoD::Null, + UF::Null, + RoF::Null, + RoF2::Null }; return local[static_cast(versions::ValidateInventoryVersion(inventory_version))]; @@ -514,7 +694,13 @@ bool EQEmu::profile::CoinHasWeight(versions::InventoryVersion inventory_version) EntityLimits::npc::True, EntityLimits::merc::True, EntityLimits::bot::True, - EntityLimits::pet::True + EntityLimits::pet::True, + Titanium::False, + SoF::False, + SoD::False, + UF::False, + RoF::False, + RoF2::False }; return local[static_cast(versions::ValidateInventoryVersion(inventory_version))];