diff --git a/data/setup.otml b/data/setup.otml index 9732949b4e..8b3eaf1488 100644 --- a/data/setup.otml +++ b/data/setup.otml @@ -1,6 +1,6 @@ game sprite-size: 32 - last-supported-version: 1316 + last-supported-version: 1321 map viewport: 8 6 diff --git a/modules/game_features/features.lua b/modules/game_features/features.lua index aae40451a1..10477fdf3e 100644 --- a/modules/game_features/features.lua +++ b/modules/game_features/features.lua @@ -171,6 +171,7 @@ controller:registerEvents(g_game, { if version >= 1094 then g_game.enableFeature(GameAdditionalSkills); + g_game.enableFeature(GameLeechAmount); end if version >= 1200 then @@ -217,5 +218,20 @@ controller:registerEvents(g_game, { g_game.disableFeature(GameTournamentPackets); g_game.enableFeature(GameDynamicForgeVariables); end + + if version >= 1320 then + g_game.enableFeature(GameEffectU16); + g_game.enableFeature(GameContainerTypes); + g_game.enableFeature(GameBosstiaryTracker); + g_game.enableFeature(GamePlayerStateCounter); + g_game.disableFeature(GameLeechAmount); + g_game.enableFeature(GameItemAugment); + g_game.enableFeature(GameDynamicBugReporter); + end + + if version >= 1321 then + g_game.enableFeature(GameWrapKit); + g_game.enableFeature(GameContainerFilter); + end end }) diff --git a/modules/gamelib/const.lua b/modules/gamelib/const.lua index 652a5c700f..7b814f2e19 100644 --- a/modules/gamelib/const.lua +++ b/modules/gamelib/const.lua @@ -181,6 +181,15 @@ GameItemShader = 101 GameCreatureShader = 102 GameCreatureAttachedEffect = 103 GameCountU16 = 104 +GameEffectU16 = 105 +GameContainerTypes = 106 +GameBosstiaryTracker = 107 +GamePlayerStateCounter = 108 +GameLeechAmount = 109 +GameItemAugment = 110 +GameDynamicBugReporter = 111 +GameWrapKit = 112 +GameContainerFilter = 113 TextColors = { red = '#f55e5e', -- '#c83200' diff --git a/modules/gamelib/game.lua b/modules/gamelib/game.lua index 6a1ca4e33b..1ea6df944e 100644 --- a/modules/gamelib/game.lua +++ b/modules/gamelib/game.lua @@ -58,7 +58,7 @@ function g_game.getSupportedClients() 1012, 1013, 1020, 1021, 1022, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1080, 1081, 1082, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1281, 1285, - 1286, 1287, 1291, 1300, 1314, 1316 } + 1286, 1287, 1291, 1300, 1314, 1316, 1320, 1321 } end -- The client version and protocol version where diff --git a/modules/gamelib/market.lua b/modules/gamelib/market.lua index 93ae68c13c..f125a7f5b6 100644 --- a/modules/gamelib/market.lua +++ b/modules/gamelib/market.lua @@ -141,13 +141,14 @@ MarketItemDescription = { Charges = 13, WeaponName = 14, Weight = 15, - ImbuingSlots = 16, - MagicShield = 17, - Cleave = 18, - Reflection = 19, - Perfect = 20, - UpgradeClassification = 21, - CurrentTier = 22 + Augment = 16, + ImbuingSlots = 17, + MagicShield = 18, + Cleave = 19, + Reflection = 20, + Perfect = 21, + UpgradeClassification = 22, + CurrentTier = 23 } MarketItemDescription.First = MarketItemDescription.Armor @@ -169,13 +170,14 @@ MarketItemDescriptionStrings = { [13] = 'Charges', [14] = 'Weapon Type', [15] = 'Weight', - [16] = 'Imbuing Slots', - [17] = 'Magic Shield', - [18] = 'Cleave', - [19] = 'Reflection', - [20] = 'Perfect Show', - [21] = 'Upgrade Classification', - [22] = 'Tier' + [16] = 'Augment', + [17] = 'Imbuing Slots', + [18] = 'Magic Shield', + [19] = 'Cleave', + [20] = 'Reflection', + [21] = 'Perfect Show', + [22] = 'Upgrade Classification', + [23] = 'Tier' } function getMarketDescriptionName(id) diff --git a/src/client/const.h b/src/client/const.h index 7b54ba65ab..ce41951a53 100644 --- a/src/client/const.h +++ b/src/client/const.h @@ -532,7 +532,16 @@ namespace Otc GameCreatureShader = 102, GameCreatureAttachedEffect = 103, GameCountU16 = 104, - LastGameFeature = 105 + GameEffectU16 = 105, + GameContainerTypes = 106, + GameBosstiaryTracker = 107, + GamePlayerStateCounter = 108, + GameLeechAmount = 109, + GameItemAugment = 110, + GameDynamicBugReporter = 111, + GameWrapKit = 112, + GameContainerFilter = 113, + LastGameFeature = 114 }; enum MagicEffectsType_t : uint8_t @@ -668,13 +677,14 @@ namespace Otc ITEM_DESC_CHARGES = 13, ITEM_DESC_WEAPONTYPE = 14, ITEM_DESC_WEIGHT = 15, - ITEM_DESC_IMBUINGSLOTS = 16, - ITEM_DESC_MAGICSHIELD = 17, - ITEM_DESC_CLEAVE = 18, - ITEM_DESC_REFLECTION = 19, - ITEM_DESC_PERFECT = 20, - ITEM_DESC_UPGRADECLASS = 21, - ITEM_DESC_CURRENTTIER = 22, + ITEM_DESC_AUGMENT = 16, + ITEM_DESC_IMBUINGSLOTS = 17, + ITEM_DESC_MAGICSHIELD = 18, + ITEM_DESC_CLEAVE = 19, + ITEM_DESC_REFLECTION = 20, + ITEM_DESC_PERFECT = 21, + ITEM_DESC_UPGRADECLASS = 22, + ITEM_DESC_CURRENTTIER = 23, ITEM_DESC_FIRST = ITEM_DESC_ARMOR, ITEM_DESC_LAST = ITEM_DESC_CURRENTTIER, diff --git a/src/client/gameconfig.h b/src/client/gameconfig.h index 3932568439..48f39231d7 100644 --- a/src/client/gameconfig.h +++ b/src/client/gameconfig.h @@ -77,7 +77,7 @@ class GameConfig // Game uint8_t m_spriteSize{ 32 }; - uint16_t m_lastSupportedVersion{ 1291 }; + uint16_t m_lastSupportedVersion{ 1321 }; // Map Size m_mapViewPort{ 8,6 }; diff --git a/src/client/protocolcodes.h b/src/client/protocolcodes.h index 5dd177c6d9..2356ee9e44 100644 --- a/src/client/protocolcodes.h +++ b/src/client/protocolcodes.h @@ -54,6 +54,7 @@ namespace Proto GameServerLoginSuccess = 23, GameServerSessionEnd = 24, GameServerStoreButtonIndicators = 25, // 1097 + GameServerBugReport = 26, GameServerPingBack = 29, GameServerPing = 30, GameServerChallenge = 31, diff --git a/src/client/protocolgame.h b/src/client/protocolgame.h index de3d17b7e0..7cd0e291ed 100644 --- a/src/client/protocolgame.h +++ b/src/client/protocolgame.h @@ -163,6 +163,7 @@ class ProtocolGame : public Protocol void parseCreatureType(const InputMessagePtr& msg); void parsePlayerHelpers(const InputMessagePtr& msg) const; void parseMessage(const InputMessagePtr& msg); + void parseBugReport(const InputMessagePtr& msg); void parsePendingGame(const InputMessagePtr& msg); void parseEnterGame(const InputMessagePtr& msg); void parseLogin(const InputMessagePtr& msg) const; diff --git a/src/client/protocolgameparse.cpp b/src/client/protocolgameparse.cpp index fd06a9e028..d1cc91d208 100644 --- a/src/client/protocolgameparse.cpp +++ b/src/client/protocolgameparse.cpp @@ -68,6 +68,9 @@ void ProtocolGame::parseMessage(const InputMessagePtr& msg) else parseLogin(msg); break; + case Proto::GameServerBugReport: + parseBugReport(msg); + break; case Proto::GameServerGMActions: parseGMActions(msg); break; @@ -583,7 +586,10 @@ void ProtocolGame::parseLogin(const InputMessagePtr& msg) const Creature::speedC = msg->getDouble(); } - const bool canReportBugs = msg->getU8(); + bool canReportBugs = false; + if (!g_game.getFeature(Otc::GameDynamicBugReporter)) { + canReportBugs = msg->getU8() > 0; + } if (g_game.getClientVersion() >= 1054) msg->getU8(); // can change pvp frame option @@ -616,6 +622,12 @@ void ProtocolGame::parseLogin(const InputMessagePtr& msg) const Game::processLogin(); } +void ProtocolGame::parseBugReport(const InputMessagePtr& msg) +{ + const bool canReportBugs = msg->getU8() > 0; + g_game.setCanReportBugs(canReportBugs); +} + void ProtocolGame::parsePendingGame(const InputMessagePtr&) { //set player to pending game state @@ -1109,6 +1121,15 @@ void ProtocolGame::parseOpenContainer(const InputMessagePtr& msg) for (int_fast32_t i = -1; ++i < itemCount;) items[i] = getItem(msg); + if (g_game.getFeature(Otc::GameContainerFilter)) { + msg->getU8(); + const uint8_t listSize = msg->getU8(); + for (int_fast8_t i = -1; ++i < listSize;) { + msg->getU8(); + msg->getString(); + } + } + g_game.processOpenContainer(containerId, containerItem, name, capacity, hasParent, items, isUnlocked, hasPages, containerSize, firstIndex); } @@ -1292,7 +1313,12 @@ void ProtocolGame::parseMagicEffect(const InputMessagePtr& msg) case Otc::MAGIC_EFFECTS_CREATE_DISTANCEEFFECT: case Otc::MAGIC_EFFECTS_CREATE_DISTANCEEFFECT_REVERSED: { - const uint8_t shotId = msg->getU8(); + uint16_t shotId; + if (g_game.getFeature(Otc::GameEffectU16)) { + shotId = msg->getU16(); + } else { + shotId = msg->getU8(); + } const int8_t offsetX = static_cast(msg->getU8()); const int8_t offsetY = static_cast(msg->getU8()); if (!g_things.isValidDatId(shotId, ThingCategoryMissile)) { @@ -1313,7 +1339,12 @@ void ProtocolGame::parseMagicEffect(const InputMessagePtr& msg) } case Otc::MAGIC_EFFECTS_CREATE_EFFECT: { - const uint8_t effectId = msg->getU8(); + uint16_t effectId; + if (g_game.getFeature(Otc::GameEffectU16)) { + effectId = msg->getU16(); + } else { + effectId = msg->getU8(); + } if (!g_things.isValidDatId(effectId, ThingCategoryEffect)) { g_logger.traceError(stdext::format("invalid effect id %d", effectId)); continue; @@ -1833,6 +1864,12 @@ void ProtocolGame::parsePlayerSkills(const InputMessagePtr& msg) const const uint8_t lastSkill = g_game.getClientVersion() >= 1281 ? Otc::LastSkill : Otc::ManaLeechAmount + 1; for (int_fast32_t skill = Otc::CriticalChance; skill < lastSkill; ++skill) { + if (!g_game.getFeature(Otc::GameLeechAmount)) { + if (skill == Otc::LifeLeechAmount || skill == Otc::ManaLeechAmount) { + continue; + } + } + const uint16_t level = msg->getU16(); const uint16_t baseLevel = msg->getU16(); m_localPlayer->setSkill(static_cast(skill), level, 0); @@ -1855,6 +1892,8 @@ void ProtocolGame::parsePlayerState(const InputMessagePtr& msg) const if (g_game.getClientVersion() >= 1281) { states = msg->getU32(); + if (g_game.getFeature(Otc::GamePlayerStateCounter)) + msg->getU8(); } else { if (g_game.getFeature(Otc::GamePlayerStateU16)) states = msg->getU16(); @@ -2886,17 +2925,43 @@ ItemPtr ProtocolGame::getItem(const InputMessagePtr& msg, int id) } if (item->isContainer()) { - if (g_game.getFeature(Otc::GameThingQuickLoot)) { - const bool hasQuickLootFlags = msg->getU8() != 0; - if (hasQuickLootFlags) { - msg->getU32(); // quick loot flags + if (g_game.getFeature(Otc::GameContainerTypes)) { + const uint8_t type = msg->getU8(); + switch (type) { + case 0: // Empty + break; + case 1: { + if (g_game.getFeature(Otc::GameThingQuickLoot)) { + msg->getU32(); // quick loot flags + } + break; + } + case 2: { + if (g_game.getFeature(Otc::GameThingQuiver)) { + msg->getU32(); // ammoTotal + } + break; + } + case 4: // Empty (Loot highlight boolean) + break; + default: { + throw Exception("unknown container type %d", type); + break; + } + } + } else { + if (g_game.getFeature(Otc::GameThingQuickLoot)) { + const bool hasQuickLootFlags = msg->getU8() != 0; + if (hasQuickLootFlags) { + msg->getU32(); // quick loot flags + } } - } - if (g_game.getFeature(Otc::GameThingQuiver)) { - const uint8_t hasQuiverAmmoCount = msg->getU8(); - if (hasQuiverAmmoCount) { - msg->getU32(); // ammoTotal + if (g_game.getFeature(Otc::GameThingQuiver)) { + const uint8_t hasQuiverAmmoCount = msg->getU8(); + if (hasQuiverAmmoCount) { + msg->getU32(); // ammoTotal + } } } } @@ -2921,6 +2986,12 @@ ItemPtr ProtocolGame::getItem(const InputMessagePtr& msg, int id) } } + if (g_game.getFeature(Otc::GameWrapKit)) { + if (item->isDecoKit()) { + msg->getU16(); + } + } + if (g_game.getFeature(Otc::GameItemAnimationPhase)) { if (item->getAnimationPhases() > 1) { // 0x00 => automatic phase @@ -2982,6 +3053,10 @@ void ProtocolGame::parseShowDescription(const InputMessagePtr& msg) void ProtocolGame::parseBestiaryTracker(const InputMessagePtr& msg) { + if (g_game.getFeature(Otc::GameBosstiaryTracker)) { + msg->getU8(); // is bestiary boolean + } + const uint8_t size = msg->getU8(); for (uint8_t i = 0; i < size; i++) { msg->getU16(); // RaceID @@ -3613,6 +3688,10 @@ void ProtocolGame::parseMarketDetail(const InputMessagePtr& msg) lastAttribute = Otc::ITEM_DESC_LAST; for (int_fast32_t i = Otc::ITEM_DESC_FIRST; i <= lastAttribute; i++) { + if (i == Otc::ITEM_DESC_AUGMENT && !g_game.getFeature(Otc::GameItemAugment)) { + continue; + } + if (msg->peekU16() != 0x00) { const auto& sentString = msg->getString(); descriptions.try_emplace(i, sentString); diff --git a/src/client/protocolgamesend.cpp b/src/client/protocolgamesend.cpp index 4c82cb99a9..6d857eaa0c 100644 --- a/src/client/protocolgamesend.cpp +++ b/src/client/protocolgamesend.cpp @@ -914,6 +914,9 @@ void ProtocolGame::sendSeekInContainer(int cid, int index) msg->addU8(Proto::ClientSeekInContainer); msg->addU8(cid); msg->addU16(index); + if (g_game.getFeature(Otc::GameContainerFilter)) { + msg->addU8(0); // Filter + } send(msg); } diff --git a/src/client/thing.h b/src/client/thing.h index e95cfb763b..fdb09aa6e7 100644 --- a/src/client/thing.h +++ b/src/client/thing.h @@ -152,6 +152,7 @@ class Thing : public LuaObject bool hasExpire() const { return m_thingType->hasExpire(); } bool hasExpireStop() const { return m_thingType->hasExpireStop(); } bool hasAnimationPhases() const { return m_thingType->getAnimationPhases() > 1; } + bool isDecoKit() const { return m_thingType->isDecoKit(); } PLAYER_ACTION getDefaultAction() { return m_thingType->getDefaultAction(); } diff --git a/src/client/thingtype.cpp b/src/client/thingtype.cpp index 46851fe790..55d04cc921 100644 --- a/src/client/thingtype.cpp +++ b/src/client/thingtype.cpp @@ -229,7 +229,7 @@ void ThingType::unserializeAppearance(uint16_t clientId, ThingCategory category, // cyclopediaitem // ammo - if (flags.has_show_off_socket()) { + if (flags.has_show_off_socket() && flags.show_off_socket()) { m_flags |= ThingFlagAttrPodium; } @@ -244,19 +244,23 @@ void ThingType::unserializeAppearance(uint16_t clientId, ThingCategory category, // reverse_addons_south // reverse_addons_north - if (flags.has_wearout()) { + if (flags.has_wearout() && flags.wearout()) { m_flags |= ThingFlagAttrWearOut; } - if (flags.has_clockexpire()) { + if (flags.has_clockexpire() && flags.clockexpire()) { m_flags |= ThingFlagAttrClockExpire; } - if (flags.has_expire()) { + if (flags.has_expire() && flags.expire()) { m_flags |= ThingFlagAttrExpire; } - if (flags.has_expirestop()) { + if (flags.has_expirestop() && flags.expirestop()) { + m_flags |= ThingFlagAttrExpireStop; + } + + if (flags.has_deco_kit() && flags.deco_kit()) { m_flags |= ThingFlagAttrExpireStop; } @@ -920,6 +924,7 @@ ThingFlagAttr ThingType::thingAttrToThingFlagAttr(ThingAttr attr) { case ThingAttrPodium: return ThingFlagAttrPodium; case ThingAttrTopEffect: return ThingFlagAttrTopEffect; case ThingAttrMarket: return ThingFlagAttrMarket; + case ThingAttrDecoKit: return ThingFlagAttrDecoKit; default: break; } diff --git a/src/client/thingtype.h b/src/client/thingtype.h index 07bfa9159a..3ef27e5a6f 100644 --- a/src/client/thingtype.h +++ b/src/client/thingtype.h @@ -101,6 +101,7 @@ enum ThingAttr : uint8_t ThingAttrExpire = 41, ThingAttrExpireStop = 42, ThingAttrPodium = 43, + ThingAttrDecoKit = 44, // additional ThingAttrOpacity = 100, @@ -160,7 +161,8 @@ enum ThingFlagAttr :uint64_t ThingFlagAttrExpireStop = static_cast(1) << 41, ThingFlagAttrPodium = static_cast(1) << 42, ThingFlagAttrTopEffect = static_cast(1) << 43, - ThingFlagAttrDefaultAction = static_cast(1) << 44 + ThingFlagAttrDefaultAction = static_cast(1) << 44, + ThingFlagAttrDecoKit = static_cast(1) << 45 }; enum STACK_PRIORITY : uint8_t @@ -364,6 +366,7 @@ class ThingType : public LuaObject bool isTopEffect() { return (m_flags & ThingFlagAttrTopEffect); } bool hasAction() { return (m_flags & ThingFlagAttrDefaultAction); } bool isOpaque() { if (m_opaque == -1) getTexture(0); return m_opaque == 1; } + bool isDecoKit() { return (m_flags & ThingFlagAttrDecoKit); } bool isItem() const { return m_category == ThingCategoryItem; } bool isEffect() const { return m_category == ThingCategoryEffect; } diff --git a/src/protobuf/appearances.pb.cc b/src/protobuf/appearances.pb.cc index 106ca97362..2145646f9c 100644 --- a/src/protobuf/appearances.pb.cc +++ b/src/protobuf/appearances.pb.cc @@ -223,7 +223,8 @@ PROTOBUF_CONSTEXPR AppearanceFlags::AppearanceFlags( , /*decltype(_impl_.wearout_)*/false , /*decltype(_impl_.clockexpire_)*/false , /*decltype(_impl_.expire_)*/false - , /*decltype(_impl_.expirestop_)*/false} {} + , /*decltype(_impl_.expirestop_)*/false + , /*decltype(_impl_.deco_kit_)*/false} {} struct AppearanceFlagsDefaultTypeInternal { PROTOBUF_CONSTEXPR AppearanceFlagsDefaultTypeInternal() : _instance(::_pbi::ConstantInitialized{}) {} @@ -681,6 +682,7 @@ const uint32_t TableStruct_appearances_2eproto::offsets[] PROTOBUF_SECTION_VARIA PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlags, _impl_.clockexpire_), PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlags, _impl_.expire_), PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlags, _impl_.expirestop_), + PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlags, _impl_.deco_kit_), 0, 15, 16, @@ -737,6 +739,7 @@ const uint32_t TableStruct_appearances_2eproto::offsets[] PROTOBUF_SECTION_VARIA 52, 53, 54, + 55, PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlagUpgradeClassification, _impl_._has_bits_), PROTOBUF_FIELD_OFFSET(::otclient::protobuf::appearances::AppearanceFlagUpgradeClassification, _internal_metadata_), ~0u, // no _extensions_ @@ -919,24 +922,24 @@ static const ::_pbi::MigrationSchema schemas[] PROTOBUF_SECTION_VARIABLE(protode { 70, 85, -1, sizeof(::otclient::protobuf::appearances::SpriteInfo)}, { 94, 103, -1, sizeof(::otclient::protobuf::appearances::FrameGroup)}, { 106, 117, -1, sizeof(::otclient::protobuf::appearances::Appearance)}, - { 122, 184, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlags)}, - { 240, 247, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagUpgradeClassification)}, - { 248, 255, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagBank)}, - { 256, 263, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagWrite)}, - { 264, 271, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagWriteOnce)}, - { 272, 280, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagLight)}, - { 282, 289, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagHeight)}, - { 290, 298, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagShift)}, - { 300, 307, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagClothes)}, - { 308, 315, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagDefaultAction)}, - { 316, 328, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagMarket)}, - { 334, 346, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagNPC)}, - { 352, 359, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagAutomap)}, - { 360, 368, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagHook)}, - { 370, 377, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagLenshelp)}, - { 378, 385, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagChangedToExpire)}, - { 386, 393, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagCyclopedia)}, - { 394, 406, -1, sizeof(::otclient::protobuf::appearances::SpecialMeaningAppearanceIds)}, + { 122, 185, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlags)}, + { 242, 249, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagUpgradeClassification)}, + { 250, 257, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagBank)}, + { 258, 265, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagWrite)}, + { 266, 273, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagWriteOnce)}, + { 274, 282, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagLight)}, + { 284, 291, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagHeight)}, + { 292, 300, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagShift)}, + { 302, 309, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagClothes)}, + { 310, 317, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagDefaultAction)}, + { 318, 330, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagMarket)}, + { 336, 348, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagNPC)}, + { 354, 361, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagAutomap)}, + { 362, 370, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagHook)}, + { 372, 379, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagLenshelp)}, + { 380, 387, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagChangedToExpire)}, + { 388, 395, -1, sizeof(::otclient::protobuf::appearances::AppearanceFlagCyclopedia)}, + { 396, 408, -1, sizeof(::otclient::protobuf::appearances::SpecialMeaningAppearanceIds)}, }; static const ::_pb::Message* const file_default_instances[] = { @@ -1006,7 +1009,7 @@ const char descriptor_table_protodef_appearances_2eproto[] PROTOBUF_SECTION_VARI "obuf.appearances.FrameGroup\022=\n\005flags\030\003 \001" "(\0132..otclient.protobuf.appearances.Appea" "ranceFlags\022\014\n\004name\030\004 \001(\t\022\023\n\013description\030" - "\005 \001(\t\"\275\017\n\017AppearanceFlags\022\?\n\004bank\030\001 \001(\0132" + "\005 \001(\t\"\317\017\n\017AppearanceFlags\022\?\n\004bank\030\001 \001(\0132" "1.otclient.protobuf.appearances.Appearan" "ceFlagBank\022\014\n\004clip\030\002 \001(\010\022\016\n\006bottom\030\003 \001(\010" "\022\013\n\003top\030\004 \001(\010\022\021\n\tcontainer\030\005 \001(\010\022\022\n\ncumu" @@ -1055,82 +1058,83 @@ const char descriptor_table_protodef_appearances_2eproto[] PROTOBUF_SECTION_VARI "dons_west\0302 \001(\010\022\034\n\024reverse_addons_south\030" "3 \001(\010\022\034\n\024reverse_addons_north\0304 \001(\010\022\017\n\007w" "earout\0305 \001(\010\022\023\n\013clockexpire\0306 \001(\010\022\016\n\006exp" - "ire\0307 \001(\010\022\022\n\nexpirestop\0308 \001(\010\"E\n#Appeara" - "nceFlagUpgradeClassification\022\036\n\026upgrade_" - "classification\030\001 \001(\r\"\'\n\022AppearanceFlagBa" - "nk\022\021\n\twaypoints\030\001 \001(\r\".\n\023AppearanceFlagW" - "rite\022\027\n\017max_text_length\030\001 \001(\r\"7\n\027Appeara" - "nceFlagWriteOnce\022\034\n\024max_text_length_once" - "\030\001 \001(\r\"8\n\023AppearanceFlagLight\022\022\n\nbrightn" - "ess\030\001 \001(\r\022\r\n\005color\030\002 \001(\r\")\n\024AppearanceFl" - "agHeight\022\021\n\televation\030\001 \001(\r\"+\n\023Appearanc" - "eFlagShift\022\t\n\001x\030\001 \001(\r\022\t\n\001y\030\002 \001(\r\"%\n\025Appe" - "aranceFlagClothes\022\014\n\004slot\030\001 \001(\r\"[\n\033Appea" - "ranceFlagDefaultAction\022<\n\006action\030\001 \001(\0162," - ".otclient.protobuf.appearances.PLAYER_AC" - "TION\"\204\002\n\024AppearanceFlagMarket\022>\n\010categor" - "y\030\001 \001(\0162,.otclient.protobuf.appearances." - "ITEM_CATEGORY\022\032\n\022trade_as_object_id\030\002 \001(" - "\r\022\031\n\021show_as_object_id\030\003 \001(\r\022\014\n\004name\030\004 \001" - "(\t\022P\n\026restrict_to_profession\030\005 \003(\01620.otc" - "lient.protobuf.appearances.PLAYER_PROFES" - "SION\022\025\n\rminimum_level\030\006 \001(\r\"\245\001\n\021Appearan" - "ceFlagNPC\022\014\n\004name\030\001 \001(\t\022\020\n\010location\030\002 \001(" - "\t\022\022\n\nsale_price\030\003 \001(\r\022\021\n\tbuy_price\030\004 \001(\r" - "\022\037\n\027currency_object_type_id\030\005 \001(\r\022(\n cur" - "rency_quest_flag_display_name\030\006 \001(\t\"&\n\025A" - "ppearanceFlagAutomap\022\r\n\005color\030\001 \001(\r\"\205\001\n\022" - "AppearanceFlagHook\0227\n\005south\030\001 \001(\0162(.otcl" - "ient.protobuf.appearances.HOOK_TYPE\0226\n\004e" - "ast\030\002 \001(\0162(.otclient.protobuf.appearance" - "s.HOOK_TYPE\"$\n\026AppearanceFlagLenshelp\022\n\n" - "\002id\030\001 \001(\r\"=\n\035AppearanceFlagChangedToExpi" - "re\022\034\n\024former_object_typeid\030\001 \001(\r\"3\n\030Appe" - "aranceFlagCyclopedia\022\027\n\017cyclopedia_type\030" - "\001 \001(\r\"\261\001\n\033SpecialMeaningAppearanceIds\022\024\n" - "\014gold_coin_id\030\001 \001(\r\022\030\n\020platinum_coin_id\030" - "\002 \001(\r\022\027\n\017crystal_coin_id\030\003 \001(\r\022\025\n\rtibia_" - "coin_id\030\004 \001(\r\022\031\n\021stamped_letter_id\030\005 \001(\r" - "\022\027\n\017supply_stash_id\030\006 \001(\r*\224\001\n\rPLAYER_ACT" - "ION\022\026\n\022PLAYER_ACTION_NONE\020\000\022\026\n\022PLAYER_AC" - "TION_LOOK\020\001\022\025\n\021PLAYER_ACTION_USE\020\002\022\026\n\022PL" - "AYER_ACTION_OPEN\020\003\022$\n PLAYER_ACTION_AUTO" - "WALK_HIGHLIGHT\020\004*\263\005\n\rITEM_CATEGORY\022\030\n\024IT" - "EM_CATEGORY_ARMORS\020\001\022\031\n\025ITEM_CATEGORY_AM" - "ULETS\020\002\022\027\n\023ITEM_CATEGORY_BOOTS\020\003\022\034\n\030ITEM" - "_CATEGORY_CONTAINERS\020\004\022\034\n\030ITEM_CATEGORY_" - "DECORATION\020\005\022\026\n\022ITEM_CATEGORY_FOOD\020\006\022\036\n\032" - "ITEM_CATEGORY_HELMETS_HATS\020\007\022\026\n\022ITEM_CAT" - "EGORY_LEGS\020\010\022\030\n\024ITEM_CATEGORY_OTHERS\020\t\022\031" - "\n\025ITEM_CATEGORY_POTIONS\020\n\022\027\n\023ITEM_CATEGO" - "RY_RINGS\020\013\022\027\n\023ITEM_CATEGORY_RUNES\020\014\022\031\n\025I" - "TEM_CATEGORY_SHIELDS\020\r\022\027\n\023ITEM_CATEGORY_" - "TOOLS\020\016\022\033\n\027ITEM_CATEGORY_VALUABLES\020\017\022\034\n\030" - "ITEM_CATEGORY_AMMUNITION\020\020\022\026\n\022ITEM_CATEG" - "ORY_AXES\020\021\022\027\n\023ITEM_CATEGORY_CLUBS\020\022\022\"\n\036I" - "TEM_CATEGORY_DISTANCE_WEAPONS\020\023\022\030\n\024ITEM_" - "CATEGORY_SWORDS\020\024\022\034\n\030ITEM_CATEGORY_WANDS" - "_RODS\020\025\022!\n\035ITEM_CATEGORY_PREMIUM_SCROLLS" - "\020\026\022\035\n\031ITEM_CATEGORY_TIBIA_COINS\020\027\022#\n\037ITE" - "M_CATEGORY_CREATURE_PRODUCTS\020\030*\355\001\n\021PLAYE" - "R_PROFESSION\022\"\n\025PLAYER_PROFESSION_ANY\020\377\377" - "\377\377\377\377\377\377\377\001\022\032\n\026PLAYER_PROFESSION_NONE\020\000\022\034\n\030" - "PLAYER_PROFESSION_KNIGHT\020\001\022\035\n\031PLAYER_PRO" - "FESSION_PALADIN\020\002\022\036\n\032PLAYER_PROFESSION_S" - "ORCERER\020\003\022\033\n\027PLAYER_PROFESSION_DRUID\020\004\022\036" - "\n\032PLAYER_PROFESSION_PROMOTED\020\n*\203\001\n\023ANIMA" - "TION_LOOP_TYPE\022)\n\034ANIMATION_LOOP_TYPE_PI" - "NGPONG\020\377\377\377\377\377\377\377\377\377\001\022 \n\034ANIMATION_LOOP_TYPE" - "_INFINITE\020\000\022\037\n\033ANIMATION_LOOP_TYPE_COUNT" - "ED\020\001*4\n\tHOOK_TYPE\022\023\n\017HOOK_TYPE_SOUTH\020\001\022\022" - "\n\016HOOK_TYPE_EAST\020\002*\201\001\n\021FIXED_FRAME_GROUP" - "\022!\n\035FIXED_FRAME_GROUP_OUTFIT_IDLE\020\000\022#\n\037F" - "IXED_FRAME_GROUP_OUTFIT_MOVING\020\001\022$\n FIXE" - "D_FRAME_GROUP_OBJECT_INITIAL\020\002" + "ire\0307 \001(\010\022\022\n\nexpirestop\0308 \001(\010\022\020\n\010deco_ki" + "t\0309 \001(\010\"E\n#AppearanceFlagUpgradeClassifi" + "cation\022\036\n\026upgrade_classification\030\001 \001(\r\"\'" + "\n\022AppearanceFlagBank\022\021\n\twaypoints\030\001 \001(\r\"" + ".\n\023AppearanceFlagWrite\022\027\n\017max_text_lengt" + "h\030\001 \001(\r\"7\n\027AppearanceFlagWriteOnce\022\034\n\024ma" + "x_text_length_once\030\001 \001(\r\"8\n\023AppearanceFl" + "agLight\022\022\n\nbrightness\030\001 \001(\r\022\r\n\005color\030\002 \001" + "(\r\")\n\024AppearanceFlagHeight\022\021\n\televation\030" + "\001 \001(\r\"+\n\023AppearanceFlagShift\022\t\n\001x\030\001 \001(\r\022" + "\t\n\001y\030\002 \001(\r\"%\n\025AppearanceFlagClothes\022\014\n\004s" + "lot\030\001 \001(\r\"[\n\033AppearanceFlagDefaultAction" + "\022<\n\006action\030\001 \001(\0162,.otclient.protobuf.app" + "earances.PLAYER_ACTION\"\204\002\n\024AppearanceFla" + "gMarket\022>\n\010category\030\001 \001(\0162,.otclient.pro" + "tobuf.appearances.ITEM_CATEGORY\022\032\n\022trade" + "_as_object_id\030\002 \001(\r\022\031\n\021show_as_object_id" + "\030\003 \001(\r\022\014\n\004name\030\004 \001(\t\022P\n\026restrict_to_prof" + "ession\030\005 \003(\01620.otclient.protobuf.appeara" + "nces.PLAYER_PROFESSION\022\025\n\rminimum_level\030" + "\006 \001(\r\"\245\001\n\021AppearanceFlagNPC\022\014\n\004name\030\001 \001(" + "\t\022\020\n\010location\030\002 \001(\t\022\022\n\nsale_price\030\003 \001(\r\022" + "\021\n\tbuy_price\030\004 \001(\r\022\037\n\027currency_object_ty" + "pe_id\030\005 \001(\r\022(\n currency_quest_flag_displ" + "ay_name\030\006 \001(\t\"&\n\025AppearanceFlagAutomap\022\r" + "\n\005color\030\001 \001(\r\"\205\001\n\022AppearanceFlagHook\0227\n\005" + "south\030\001 \001(\0162(.otclient.protobuf.appearan" + "ces.HOOK_TYPE\0226\n\004east\030\002 \001(\0162(.otclient.p" + "rotobuf.appearances.HOOK_TYPE\"$\n\026Appeara" + "nceFlagLenshelp\022\n\n\002id\030\001 \001(\r\"=\n\035Appearanc" + "eFlagChangedToExpire\022\034\n\024former_object_ty" + "peid\030\001 \001(\r\"3\n\030AppearanceFlagCyclopedia\022\027" + "\n\017cyclopedia_type\030\001 \001(\r\"\261\001\n\033SpecialMeani" + "ngAppearanceIds\022\024\n\014gold_coin_id\030\001 \001(\r\022\030\n" + "\020platinum_coin_id\030\002 \001(\r\022\027\n\017crystal_coin_" + "id\030\003 \001(\r\022\025\n\rtibia_coin_id\030\004 \001(\r\022\031\n\021stamp" + "ed_letter_id\030\005 \001(\r\022\027\n\017supply_stash_id\030\006 " + "\001(\r*\224\001\n\rPLAYER_ACTION\022\026\n\022PLAYER_ACTION_N" + "ONE\020\000\022\026\n\022PLAYER_ACTION_LOOK\020\001\022\025\n\021PLAYER_" + "ACTION_USE\020\002\022\026\n\022PLAYER_ACTION_OPEN\020\003\022$\n " + "PLAYER_ACTION_AUTOWALK_HIGHLIGHT\020\004*\263\005\n\rI" + "TEM_CATEGORY\022\030\n\024ITEM_CATEGORY_ARMORS\020\001\022\031" + "\n\025ITEM_CATEGORY_AMULETS\020\002\022\027\n\023ITEM_CATEGO" + "RY_BOOTS\020\003\022\034\n\030ITEM_CATEGORY_CONTAINERS\020\004" + "\022\034\n\030ITEM_CATEGORY_DECORATION\020\005\022\026\n\022ITEM_C" + "ATEGORY_FOOD\020\006\022\036\n\032ITEM_CATEGORY_HELMETS_" + "HATS\020\007\022\026\n\022ITEM_CATEGORY_LEGS\020\010\022\030\n\024ITEM_C" + "ATEGORY_OTHERS\020\t\022\031\n\025ITEM_CATEGORY_POTION" + "S\020\n\022\027\n\023ITEM_CATEGORY_RINGS\020\013\022\027\n\023ITEM_CAT" + "EGORY_RUNES\020\014\022\031\n\025ITEM_CATEGORY_SHIELDS\020\r" + "\022\027\n\023ITEM_CATEGORY_TOOLS\020\016\022\033\n\027ITEM_CATEGO" + "RY_VALUABLES\020\017\022\034\n\030ITEM_CATEGORY_AMMUNITI" + "ON\020\020\022\026\n\022ITEM_CATEGORY_AXES\020\021\022\027\n\023ITEM_CAT" + "EGORY_CLUBS\020\022\022\"\n\036ITEM_CATEGORY_DISTANCE_" + "WEAPONS\020\023\022\030\n\024ITEM_CATEGORY_SWORDS\020\024\022\034\n\030I" + "TEM_CATEGORY_WANDS_RODS\020\025\022!\n\035ITEM_CATEGO" + "RY_PREMIUM_SCROLLS\020\026\022\035\n\031ITEM_CATEGORY_TI" + "BIA_COINS\020\027\022#\n\037ITEM_CATEGORY_CREATURE_PR" + "ODUCTS\020\030*\355\001\n\021PLAYER_PROFESSION\022\"\n\025PLAYER" + "_PROFESSION_ANY\020\377\377\377\377\377\377\377\377\377\001\022\032\n\026PLAYER_PRO" + "FESSION_NONE\020\000\022\034\n\030PLAYER_PROFESSION_KNIG" + "HT\020\001\022\035\n\031PLAYER_PROFESSION_PALADIN\020\002\022\036\n\032P" + "LAYER_PROFESSION_SORCERER\020\003\022\033\n\027PLAYER_PR" + "OFESSION_DRUID\020\004\022\036\n\032PLAYER_PROFESSION_PR" + "OMOTED\020\n*\203\001\n\023ANIMATION_LOOP_TYPE\022)\n\034ANIM" + "ATION_LOOP_TYPE_PINGPONG\020\377\377\377\377\377\377\377\377\377\001\022 \n\034A" + "NIMATION_LOOP_TYPE_INFINITE\020\000\022\037\n\033ANIMATI" + "ON_LOOP_TYPE_COUNTED\020\001*4\n\tHOOK_TYPE\022\023\n\017H" + "OOK_TYPE_SOUTH\020\001\022\022\n\016HOOK_TYPE_EAST\020\002*\201\001\n" + "\021FIXED_FRAME_GROUP\022!\n\035FIXED_FRAME_GROUP_" + "OUTFIT_IDLE\020\000\022#\n\037FIXED_FRAME_GROUP_OUTFI" + "T_MOVING\020\001\022$\n FIXED_FRAME_GROUP_OBJECT_I" + "NITIAL\020\002" ; static ::_pbi::once_flag descriptor_table_appearances_2eproto_once; const ::_pbi::DescriptorTable descriptor_table_appearances_2eproto = { - false, false, 6310, descriptor_table_protodef_appearances_2eproto, + false, false, 6328, descriptor_table_protodef_appearances_2eproto, "appearances.proto", &descriptor_table_appearances_2eproto_once, nullptr, 0, 26, schemas, file_default_instances, TableStruct_appearances_2eproto::offsets, @@ -4098,6 +4102,9 @@ class AppearanceFlags::_Internal { static void set_has_expirestop(HasBits* has_bits) { (*has_bits)[1] |= 4194304u; } + static void set_has_deco_kit(HasBits* has_bits) { + (*has_bits)[1] |= 8388608u; + } }; const ::otclient::protobuf::appearances::AppearanceFlagBank& @@ -4227,7 +4234,8 @@ AppearanceFlags::AppearanceFlags(const AppearanceFlags& from) , decltype(_impl_.wearout_){} , decltype(_impl_.clockexpire_){} , decltype(_impl_.expire_){} - , decltype(_impl_.expirestop_){}}; + , decltype(_impl_.expirestop_){} + , decltype(_impl_.deco_kit_){}}; _internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); if (from._internal_has_bank()) { @@ -4276,8 +4284,8 @@ AppearanceFlags::AppearanceFlags(const AppearanceFlags& from) _this->_impl_.upgradeclassification_ = new ::otclient::protobuf::appearances::AppearanceFlagUpgradeClassification(*from._impl_.upgradeclassification_); } ::memcpy(&_impl_.clip_, &from._impl_.clip_, - static_cast(reinterpret_cast(&_impl_.expirestop_) - - reinterpret_cast(&_impl_.clip_)) + sizeof(_impl_.expirestop_)); + static_cast(reinterpret_cast(&_impl_.deco_kit_) - + reinterpret_cast(&_impl_.clip_)) + sizeof(_impl_.deco_kit_)); // @@protoc_insertion_point(copy_constructor:otclient.protobuf.appearances.AppearanceFlags) } @@ -4344,6 +4352,7 @@ inline void AppearanceFlags::SharedCtor( , decltype(_impl_.clockexpire_){false} , decltype(_impl_.expire_){false} , decltype(_impl_.expirestop_){false} + , decltype(_impl_.deco_kit_){false} }; } @@ -4474,10 +4483,10 @@ void AppearanceFlags::Clear() { reinterpret_cast(&_impl_.reverse_addons_east_) - reinterpret_cast(&_impl_.unwrap_)) + sizeof(_impl_.reverse_addons_east_)); } - if (cached_has_bits & 0x007f0000u) { + if (cached_has_bits & 0x00ff0000u) { ::memset(&_impl_.reverse_addons_west_, 0, static_cast( - reinterpret_cast(&_impl_.expirestop_) - - reinterpret_cast(&_impl_.reverse_addons_west_)) + sizeof(_impl_.expirestop_)); + reinterpret_cast(&_impl_.deco_kit_) - + reinterpret_cast(&_impl_.reverse_addons_west_)) + sizeof(_impl_.deco_kit_)); } _impl_._has_bits_.Clear(); _internal_metadata_.Clear<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(); @@ -4982,6 +4991,15 @@ const char* AppearanceFlags::_InternalParse(const char* ptr, ::_pbi::ParseContex } else goto handle_unusual; continue; + // optional bool deco_kit = 57; + case 57: + if (PROTOBUF_PREDICT_TRUE(static_cast(tag) == 200)) { + _Internal::set_has_deco_kit(&_impl_._has_bits_); + _impl_.deco_kit_ = ::PROTOBUF_NAMESPACE_ID::internal::ReadVarint64(&ptr); + CHK_(ptr); + } else + goto handle_unusual; + continue; default: goto handle_unusual; } // switch @@ -5380,6 +5398,12 @@ uint8_t* AppearanceFlags::_InternalSerialize( target = ::_pbi::WireFormatLite::WriteBoolToArray(56, this->_internal_expirestop(), target); } + // optional bool deco_kit = 57; + if (cached_has_bits & 0x00800000u) { + target = stream->EnsureSpace(target); + target = ::_pbi::WireFormatLite::WriteBoolToArray(57, this->_internal_deco_kit(), target); + } + if (PROTOBUF_PREDICT_FALSE(_internal_metadata_.have_unknown_fields())) { target = ::_pbi::WireFormat::InternalSerializeUnknownFieldsToArray( _internal_metadata_.unknown_fields<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(::PROTOBUF_NAMESPACE_ID::UnknownFieldSet::default_instance), target, stream); @@ -5687,7 +5711,7 @@ size_t AppearanceFlags::ByteSizeLong() const { } } - if (cached_has_bits & 0x007f0000u) { + if (cached_has_bits & 0x00ff0000u) { // optional bool reverse_addons_west = 50; if (cached_has_bits & 0x00010000u) { total_size += 2 + 1; @@ -5723,6 +5747,11 @@ size_t AppearanceFlags::ByteSizeLong() const { total_size += 2 + 1; } + // optional bool deco_kit = 57; + if (cached_has_bits & 0x00800000u) { + total_size += 2 + 1; + } + } return MaybeComputeUnknownFieldsSize(total_size, &_impl_._cached_size_); } @@ -5921,7 +5950,7 @@ void AppearanceFlags::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const } _this->_impl_._has_bits_[1] |= cached_has_bits; } - if (cached_has_bits & 0x007f0000u) { + if (cached_has_bits & 0x00ff0000u) { if (cached_has_bits & 0x00010000u) { _this->_impl_.reverse_addons_west_ = from._impl_.reverse_addons_west_; } @@ -5943,6 +5972,9 @@ void AppearanceFlags::MergeImpl(::PROTOBUF_NAMESPACE_ID::Message& to_msg, const if (cached_has_bits & 0x00400000u) { _this->_impl_.expirestop_ = from._impl_.expirestop_; } + if (cached_has_bits & 0x00800000u) { + _this->_impl_.deco_kit_ = from._impl_.deco_kit_; + } _this->_impl_._has_bits_[1] |= cached_has_bits; } _this->_internal_metadata_.MergeFrom<::PROTOBUF_NAMESPACE_ID::UnknownFieldSet>(from._internal_metadata_); @@ -5966,8 +5998,8 @@ void AppearanceFlags::InternalSwap(AppearanceFlags* other) { swap(_impl_._has_bits_[1], other->_impl_._has_bits_[1]); _impl_.npcsaledata_.InternalSwap(&other->_impl_.npcsaledata_); ::PROTOBUF_NAMESPACE_ID::internal::memswap< - PROTOBUF_FIELD_OFFSET(AppearanceFlags, _impl_.expirestop_) - + sizeof(AppearanceFlags::_impl_.expirestop_) + PROTOBUF_FIELD_OFFSET(AppearanceFlags, _impl_.deco_kit_) + + sizeof(AppearanceFlags::_impl_.deco_kit_) - PROTOBUF_FIELD_OFFSET(AppearanceFlags, _impl_.bank_)>( reinterpret_cast(&_impl_.bank_), reinterpret_cast(&other->_impl_.bank_)); diff --git a/src/protobuf/appearances.pb.h b/src/protobuf/appearances.pb.h index f3f39afff9..82c4ebb281 100644 --- a/src/protobuf/appearances.pb.h +++ b/src/protobuf/appearances.pb.h @@ -13,7 +13,7 @@ #error incompatible with your Protocol Buffer headers. Please update #error your headers. #endif -#if 3021012 < PROTOBUF_MIN_PROTOC_VERSION +#if 3021002 < PROTOBUF_MIN_PROTOC_VERSION #error This file was generated by an older version of protoc which is #error incompatible with your Protocol Buffer headers. Please #error regenerate this file with a newer version of protoc. @@ -2306,6 +2306,7 @@ class AppearanceFlags final : kClockexpireFieldNumber = 54, kExpireFieldNumber = 55, kExpirestopFieldNumber = 56, + kDecoKitFieldNumber = 57, }; // repeated .otclient.protobuf.appearances.AppearanceFlagNPC npcsaledata = 40; int npcsaledata_size() const; @@ -3115,6 +3116,19 @@ class AppearanceFlags final : void _internal_set_expirestop(bool value); public: + // optional bool deco_kit = 57; + bool has_deco_kit() const; + private: + bool _internal_has_deco_kit() const; + public: + void clear_deco_kit(); + bool deco_kit() const; + void set_deco_kit(bool value); + private: + bool _internal_deco_kit() const; + void _internal_set_deco_kit(bool value); + public: + // @@protoc_insertion_point(class_scope:otclient.protobuf.appearances.AppearanceFlags) private: class _Internal; @@ -3181,6 +3195,7 @@ class AppearanceFlags final : bool clockexpire_; bool expire_; bool expirestop_; + bool deco_kit_; }; union { Impl_ _impl_; }; friend struct ::TableStruct_appearances_2eproto; @@ -10221,6 +10236,34 @@ inline void AppearanceFlags::set_expirestop(bool value) { // @@protoc_insertion_point(field_set:otclient.protobuf.appearances.AppearanceFlags.expirestop) } +// optional bool deco_kit = 57; +inline bool AppearanceFlags::_internal_has_deco_kit() const { + bool value = (_impl_._has_bits_[1] & 0x00800000u) != 0; + return value; +} +inline bool AppearanceFlags::has_deco_kit() const { + return _internal_has_deco_kit(); +} +inline void AppearanceFlags::clear_deco_kit() { + _impl_.deco_kit_ = false; + _impl_._has_bits_[1] &= ~0x00800000u; +} +inline bool AppearanceFlags::_internal_deco_kit() const { + return _impl_.deco_kit_; +} +inline bool AppearanceFlags::deco_kit() const { + // @@protoc_insertion_point(field_get:otclient.protobuf.appearances.AppearanceFlags.deco_kit) + return _internal_deco_kit(); +} +inline void AppearanceFlags::_internal_set_deco_kit(bool value) { + _impl_._has_bits_[1] |= 0x00800000u; + _impl_.deco_kit_ = value; +} +inline void AppearanceFlags::set_deco_kit(bool value) { + _internal_set_deco_kit(value); + // @@protoc_insertion_point(field_set:otclient.protobuf.appearances.AppearanceFlags.deco_kit) +} + // ------------------------------------------------------------------- // AppearanceFlagUpgradeClassification diff --git a/src/protobuf/appearances.proto b/src/protobuf/appearances.proto index 035da50dcd..d9e1bbd9e5 100644 --- a/src/protobuf/appearances.proto +++ b/src/protobuf/appearances.proto @@ -176,6 +176,7 @@ message AppearanceFlags { optional bool clockexpire = 54; optional bool expire = 55; optional bool expirestop = 56; + optional bool deco_kit = 57; } message AppearanceFlagUpgradeClassification {