@@ -570,6 +570,13 @@ enum Enchants
570570 WEP_HEAL ,
571571 WEP2H_INT ,
572572 WEP2H_SPIRIT ,
573+ OFFHAND_CRUSADER ,
574+ OFFHAND_STRENGTH ,
575+ OFFHAND_AGILITY ,
576+ OFFHAND_LIFESTEAL ,
577+ OFFHAND_FIERY ,
578+ OFFHAND_ICY ,
579+ OFFHAND_DEMONSLAYING ,
573580 OFFHAND_SPIRIT ,
574581 OFFHAND_STAM ,
575582 OFFHAND_FROSTRES ,
@@ -682,10 +689,33 @@ bool GossipSelect_EnchantNPC(Player* player, Creature* creature, uint32 sender,
682689 player->ADD_GOSSIP_ITEM (5 , " Demonslaying" , GOSSIP_SENDER_MAIN , WEP_DEMONSLAYING );
683690 break ;
684691 case EQUIPMENT_SLOT_OFFHAND :
685- player->ADD_GOSSIP_ITEM (5 , " Spirit" , GOSSIP_SENDER_MAIN , OFFHAND_SPIRIT );
686- player->ADD_GOSSIP_ITEM (5 , " Stamina" , GOSSIP_SENDER_MAIN , OFFHAND_STAM );
687- player->ADD_GOSSIP_ITEM (5 , " Frost Resistance" , GOSSIP_SENDER_MAIN , OFFHAND_FROSTRES );
688- player->ADD_GOSSIP_ITEM (5 , " Shield Spike" , GOSSIP_SENDER_MAIN , OFFHAND_SHIELDSPIKE );
692+ // If wielding shield, show shield enchants. If not, show weapon enchants.
693+ if (Item* item = player->GetItemByPos (INVENTORY_SLOT_BAG_0 , EQUIPMENT_SLOT_OFFHAND ))
694+ {
695+ if (item->GetProto ()->SubClass == ITEM_SUBCLASS_ARMOR_SHIELD )
696+ {
697+ player->ADD_GOSSIP_ITEM (5 , " Spirit" , GOSSIP_SENDER_MAIN , OFFHAND_SPIRIT );
698+ player->ADD_GOSSIP_ITEM (5 , " Stamina" , GOSSIP_SENDER_MAIN , OFFHAND_STAM );
699+ player->ADD_GOSSIP_ITEM (5 , " Frost Resistance" , GOSSIP_SENDER_MAIN , OFFHAND_FROSTRES );
700+ player->ADD_GOSSIP_ITEM (5 , " Shield Spike" , GOSSIP_SENDER_MAIN , OFFHAND_SHIELDSPIKE );
701+ }
702+ else
703+ {
704+ player->ADD_GOSSIP_ITEM (5 , " Crusader" , GOSSIP_SENDER_MAIN , OFFHAND_CRUSADER );
705+ player->ADD_GOSSIP_ITEM (5 , " 1H Strength" , GOSSIP_SENDER_MAIN , OFFHAND_STRENGTH );
706+ player->ADD_GOSSIP_ITEM (5 , " 1H Agility" , GOSSIP_SENDER_MAIN , OFFHAND_AGILITY );
707+ player->ADD_GOSSIP_ITEM (5 , " Lifesteal" , GOSSIP_SENDER_MAIN , OFFHAND_LIFESTEAL );
708+ player->ADD_GOSSIP_ITEM (5 , " Fiery" , GOSSIP_SENDER_MAIN , OFFHAND_FIERY );
709+ player->ADD_GOSSIP_ITEM (5 , " Icy" , GOSSIP_SENDER_MAIN , OFFHAND_ICY );
710+ player->ADD_GOSSIP_ITEM (5 , " Demonslaying" , GOSSIP_SENDER_MAIN , OFFHAND_DEMONSLAYING );
711+ }
712+ }
713+ else
714+ {
715+ player->GetSession ()->SendNotification (" You don't have anything equipped in your offhand!" );
716+ player->CLOSE_GOSSIP_MENU ();
717+ return true ;
718+ }
689719 break ;
690720 }
691721 player->SEND_GOSSIP_MENU (DEFAULT_GOSSIP_MESSAGE , creature->GetGUID ());
@@ -755,6 +785,42 @@ bool GossipSelect_EnchantNPC(Player* player, Creature* creature, uint32 sender,
755785 id = 912 ;
756786 break ;
757787
788+ case OFFHAND_CRUSADER :
789+ case OFFHAND_STRENGTH :
790+ case OFFHAND_AGILITY :
791+ case OFFHAND_LIFESTEAL :
792+ case OFFHAND_FIERY :
793+ case OFFHAND_ICY :
794+ case OFFHAND_DEMONSLAYING :
795+ // If wielding non-weapons like flowers, enchant fails. Else, enchant succeeds.
796+ item = player->GetItemByPos (INVENTORY_SLOT_BAG_0 , EQUIPMENT_SLOT_OFFHAND );
797+ if (item->GetProto ()->Class != ITEM_CLASS_WEAPON ||
798+ (item && item->GetProto ()->SubClass != ITEM_SUBCLASS_WEAPON_SWORD
799+ && item->GetProto ()->SubClass != ITEM_SUBCLASS_WEAPON_MACE
800+ && item->GetProto ()->SubClass != ITEM_SUBCLASS_WEAPON_AXE
801+ && item->GetProto ()->SubClass != ITEM_SUBCLASS_WEAPON_DAGGER
802+ && item->GetProto ()->SubClass != ITEM_SUBCLASS_WEAPON_FIST ))
803+ {
804+ player->GetSession ()->SendNotification (" Requires Offhand Weapon" );
805+ player->CLOSE_GOSSIP_MENU ();
806+ return true ;
807+ }
808+ if (action == OFFHAND_CRUSADER )
809+ id = 1900 ;
810+ else if (action == OFFHAND_STRENGTH )
811+ id = 2563 ;
812+ else if (action == OFFHAND_AGILITY )
813+ id = 2564 ;
814+ else if (action == OFFHAND_LIFESTEAL )
815+ id = 1898 ;
816+ else if (action == OFFHAND_ICY )
817+ id = 1894 ;
818+ else if (action == OFFHAND_FIERY )
819+ id = 803 ;
820+ else if (action == OFFHAND_DEMONSLAYING )
821+ id = 912 ;
822+ break ;
823+
758824 case OFFHAND_SPIRIT :
759825 case OFFHAND_STAM :
760826 case OFFHAND_FROSTRES :
0 commit comments