diff options
| author | Mikhail Redko <ovitnez@gmail.com> | 2018-03-21 11:05:17 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-09-19 22:54:08 +0200 |
| commit | f8dda8a4fc696d07bb6007e49140cec1b7f60dd5 (patch) | |
| tree | 4e8955d130726b50f8f929551827520bdb36b6e5 /src | |
| parent | 33bf5d385451e12917c4e48f29b14554553c91df (diff) | |
Core/Creatures: implement CREATURE_FLAG_EXTRA_NO_SELL_VENDOR (#21642)
* Add CREATURE_FLAG_EXTRA_NO_SELL_VENDOR and use it for a single no-sell vendor in game (there are more of them in later expansions)
(cherry picked from commit 7c5b69d18bb315d369bf0bbfc16b795d63d0f73c)
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 9 | ||||
| -rw-r--r-- | src/server/game/Entities/Item/ItemDefines.h | 11 | ||||
| -rw-r--r-- | src/server/game/Handlers/ItemHandler.cpp | 6 | ||||
| -rw-r--r-- | src/server/scripts/Commands/cs_npc.cpp | 14 |
4 files changed, 24 insertions, 16 deletions
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index be397ef9773..e0d68be0589 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -269,7 +269,7 @@ enum CreatureFlagsExtra : uint32 CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE = 0x00000200, // creature won't update movement flags CREATURE_FLAG_EXTRA_GHOST_VISIBILITY = 0x00000400, // creature will be only visible for dead players CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK = 0x00000800, // creature will use offhand attacks - CREATURE_FLAG_EXTRA_UNUSED_12 = 0x00001000, + CREATURE_FLAG_EXTRA_NO_SELL_VENDOR = 0x00001000, // players can't sell items to this vendor CREATURE_FLAG_EXTRA_UNUSED_13 = 0x00002000, CREATURE_FLAG_EXTRA_WORLDEVENT = 0x00004000, // custom flag for world event creatures (left room for merging) CREATURE_FLAG_EXTRA_GUARD = 0x00008000, // Creature is guard @@ -291,10 +291,9 @@ enum CreatureFlagsExtra : uint32 CREATURE_FLAG_EXTRA_UNUSED_31 = 0x80000000, // Masks - CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_12 | CREATURE_FLAG_EXTRA_UNUSED_13 | CREATURE_FLAG_EXTRA_UNUSED_16 | - CREATURE_FLAG_EXTRA_UNUSED_22 | CREATURE_FLAG_EXTRA_UNUSED_23 | CREATURE_FLAG_EXTRA_UNUSED_24 | - CREATURE_FLAG_EXTRA_UNUSED_25 | CREATURE_FLAG_EXTRA_UNUSED_26 | CREATURE_FLAG_EXTRA_UNUSED_27 | - CREATURE_FLAG_EXTRA_UNUSED_31), + CREATURE_FLAG_EXTRA_UNUSED = (CREATURE_FLAG_EXTRA_UNUSED_13 | CREATURE_FLAG_EXTRA_UNUSED_16 | CREATURE_FLAG_EXTRA_UNUSED_22 | + CREATURE_FLAG_EXTRA_UNUSED_23 | CREATURE_FLAG_EXTRA_UNUSED_24 | CREATURE_FLAG_EXTRA_UNUSED_25 | + CREATURE_FLAG_EXTRA_UNUSED_26 | CREATURE_FLAG_EXTRA_UNUSED_27 | CREATURE_FLAG_EXTRA_UNUSED_31), CREATURE_FLAG_EXTRA_DB_ALLOWED = (0xFFFFFFFF & ~(CREATURE_FLAG_EXTRA_UNUSED | CREATURE_FLAG_EXTRA_DUNGEON_BOSS)) }; diff --git a/src/server/game/Entities/Item/ItemDefines.h b/src/server/game/Entities/Item/ItemDefines.h index 1dde1a76fe9..1ed256aec39 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -150,12 +150,13 @@ enum BuyResult enum SellResult { - SELL_ERR_CANT_FIND_ITEM = 1, - SELL_ERR_CANT_SELL_ITEM = 2, // merchant doesn't like that item - SELL_ERR_CANT_FIND_VENDOR = 3, // merchant doesn't like you - SELL_ERR_YOU_DONT_OWN_THAT_ITEM = 4, // you don't own that item + SELL_ERR_CANT_FIND_ITEM = 1, // The item was not found. + SELL_ERR_CANT_SELL_ITEM = 2, // The merchant doesn't want that item. + SELL_ERR_CANT_FIND_VENDOR = 3, // The merchant doesn't like you. + SELL_ERR_YOU_DONT_OWN_THAT_ITEM = 4, // You don't own that item. SELL_ERR_UNK = 5, // nothing appears... - SELL_ERR_ONLY_EMPTY_BAG = 6 // can only do with empty bags + SELL_ERR_ONLY_EMPTY_BAG = 6, // You can only do that with empty bags. + SELL_ERR_CANT_SELL_TO_THIS_MERCHANT = 7 // You cannot sell items to this merchant. }; // -1 from client enchantment slot number diff --git a/src/server/game/Handlers/ItemHandler.cpp b/src/server/game/Handlers/ItemHandler.cpp index a3f1f1dd7b7..08987fb14f8 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -398,6 +398,12 @@ void WorldSession::HandleSellItemOpcode(WorldPackets::Item::SellItem& packet) return; } + if ((creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_SELL_VENDOR) != 0) + { + _player->SendSellError(SELL_ERR_CANT_SELL_TO_THIS_MERCHANT, creature, packet.ItemGUID); + return; + } + // remove fake death if (GetPlayer()->HasUnitState(UNIT_STATE_DIED)) GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index 3f0c6cb4346..a177a4e904a 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -51,10 +51,7 @@ struct EnumName #define CREATE_NAMED_ENUM(VALUE) { VALUE, STRINGIZE(VALUE) } -#define NPC_FLAG_COUNT 24 -#define FLAGS_EXTRA_COUNT 21 - -EnumName<NPCFlags, uint32> const npcFlagTexts[NPC_FLAG_COUNT] = +EnumName<NPCFlags, int32> const npcFlagTexts[] = { { UNIT_NPC_FLAG_AUCTIONEER, LANG_NPCINFO_AUCTIONEER }, { UNIT_NPC_FLAG_BANKER, LANG_NPCINFO_BANKER }, @@ -82,6 +79,8 @@ EnumName<NPCFlags, uint32> const npcFlagTexts[NPC_FLAG_COUNT] = { UNIT_NPC_FLAG_VENDOR_REAGENT, LANG_NPCINFO_VENDOR_REAGENT } }; +uint32 const NPCFLAG_COUNT = std::extent<decltype(npcFlagTexts)>::value; + EnumName<Mechanics> const mechanicImmunes[MAX_MECHANIC] = { CREATE_NAMED_ENUM(MECHANIC_NONE), @@ -183,7 +182,7 @@ EnumName<UnitFlags3> const unitFlags3[MAX_UNIT_FLAGS_3] = CREATE_NAMED_ENUM(UNIT_FLAG3_UNK1) }; -EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] = +EnumName<CreatureFlagsExtra> const flagsExtra[] = { CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_INSTANCE_BIND), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_CIVILIAN), @@ -195,6 +194,7 @@ EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] = CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_TRIGGER), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_TAUNT), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_MOVE_FLAGS_UPDATE), + CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_SELL_VENDOR), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_WORLDEVENT), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_GUARD), CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_NO_CRIT), @@ -208,6 +208,8 @@ EnumName<CreatureFlagsExtra> const flagsExtra[FLAGS_EXTRA_COUNT] = CREATE_NAMED_ENUM(CREATURE_FLAG_EXTRA_USE_OFFHAND_ATTACK) }; +uint32 const FLAGS_EXTRA_COUNT = std::extent<decltype(flagsExtra)>::value; + bool HandleNpcSpawnGroup(ChatHandler* handler, char const* args) { if (!*args) @@ -878,7 +880,7 @@ public: handler->PSendSysMessage("%s (0x%X)", flagsExtra[i].Name, flagsExtra[i].Value); handler->PSendSysMessage(LANG_NPCINFO_NPC_FLAGS, target->m_unitData->NpcFlags[0]); - for (uint8 i = 0; i < NPC_FLAG_COUNT; i++) + for (uint8 i = 0; i < NPCFLAG_COUNT; i++) if (npcflags & npcFlagTexts[i].Value) handler->PSendSysMessage(npcFlagTexts[i].Name, npcFlagTexts[i].Value); |
