diff options
| author | Mikhail Redko <ovitnez@gmail.com> | 2018-03-21 11:05:17 +0200 | 
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2018-03-21 10:05:17 +0100 | 
| commit | 7c5b69d18bb315d369bf0bbfc16b795d63d0f73c (patch) | |
| tree | 8d99ccbc026f25e1fc5d55d6062c23b03267b7dd /src/server/game | |
| parent | 4af3c33d04b8ccaba7dc38ce4f2c757970b86156 (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)
Diffstat (limited to 'src/server/game')
| -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 | 
3 files changed, 16 insertions, 10 deletions
| diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 2fc9158078a..deca5580059 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -44,7 +44,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 @@ -66,10 +66,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 b61ed20772b..639d66672c1 100644 --- a/src/server/game/Entities/Item/ItemDefines.h +++ b/src/server/game/Entities/Item/ItemDefines.h @@ -128,12 +128,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 07cc7a56ac2..a968536c6cc 100644 --- a/src/server/game/Handlers/ItemHandler.cpp +++ b/src/server/game/Handlers/ItemHandler.cpp @@ -385,6 +385,12 @@ void WorldSession::HandleSellItemOpcode(WorldPacket& recvData)          return;      } +    if ((creature->GetCreatureTemplate()->flags_extra & CREATURE_FLAG_EXTRA_NO_SELL_VENDOR) != 0) +    { +        _player->SendSellError(SELL_ERR_CANT_SELL_TO_THIS_MERCHANT, creature, itemguid, 0); +        return; +    } +      // remove fake death      if (GetPlayer()->HasUnitState(UNIT_STATE_DIED))          GetPlayer()->RemoveAurasByType(SPELL_AURA_FEIGN_DEATH); | 
