Advertisement
jadadev

Made by Rochet2 Rewritten by mthsena updated by JadaDev

Oct 21st, 2014
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.32 KB | None | 0 0
  1. /*
  2. ** Made by Rochet2(Eluna)
  3. ** Rewritten by mthsena(C++)
  4. ** Updated by JadaDev(c++)
  5. */
  6.  
  7. #include "ScriptPCH.h"
  8.  
  9. using namespace std;
  10.  
  11. #define DEFAULT_MESSAGE 907
  12.  
  13. struct VisualData
  14. {
  15.     uint32 Menu;
  16.     uint32 Submenu;
  17.     uint32 Icon;
  18.     uint32 Id;
  19.     string Name;
  20. };
  21.  
  22. VisualData vData[] =
  23. {
  24.     { 1, 0, GOSSIP_ICON_BATTLE, 3789, "Berserking" },
  25.     { 1, 0, GOSSIP_ICON_BATTLE, 3854, "Spell Power" },
  26.     { 1, 0, GOSSIP_ICON_BATTLE, 3273, "Deathfrost" },
  27.     { 1, 0, GOSSIP_ICON_BATTLE, 3225, "Executioner" },
  28.     { 1, 0, GOSSIP_ICON_BATTLE, 3870, "Blood Draining" },
  29.     { 1, 0, GOSSIP_ICON_BATTLE, 1899, "Unholy Weapon" },
  30.     { 1, 0, GOSSIP_ICON_BATTLE, 2674, "Spellsurge" },
  31.     { 1, 0, GOSSIP_ICON_BATTLE, 2675, "Battlemaster" },
  32.     { 1, 0, GOSSIP_ICON_BATTLE, 2671, "Arcane and Fire Spell Power" },
  33.     { 1, 0, GOSSIP_ICON_BATTLE, 2672, "Shadow and Frost Spell Power" },
  34.     { 1, 0, GOSSIP_ICON_BATTLE, 3365, "Rune of Swordshattering" },
  35.     { 1, 0, GOSSIP_ICON_BATTLE, 2673, "Mongoose" },
  36.     { 1, 0, GOSSIP_ICON_BATTLE, 2343, "Spell Power" },
  37.     { 1, 2, GOSSIP_ICON_TALK, 0, "Next.." },
  38.  
  39.     { 2, 0, GOSSIP_ICON_BATTLE, 425, "Black Temple Dummy" },
  40.     { 2, 0, GOSSIP_ICON_BATTLE, 3855, "Spell Power III" },
  41.     { 2, 0, GOSSIP_ICON_BATTLE, 1894, "Icy Weapon" },
  42.     { 2, 0, GOSSIP_ICON_BATTLE, 1103, "Agility" },
  43.     { 2, 0, GOSSIP_ICON_BATTLE, 1898, "Lifestealing" },
  44.     { 2, 0, GOSSIP_ICON_BATTLE, 3345, "Earthliving I" },
  45.     { 2, 0, GOSSIP_ICON_BATTLE, 1743, "MHTest02" },
  46.     { 2, 0, GOSSIP_ICON_BATTLE, 3093, "Attack Power vs Undead and Demons" },
  47.     { 2, 0, GOSSIP_ICON_BATTLE, 1900, "Crusader" },
  48.     { 2, 0, GOSSIP_ICON_BATTLE, 3846, "Spell Power II" },
  49.     { 2, 0, GOSSIP_ICON_BATTLE, 1606, "Attack Power" },
  50.     { 2, 0, GOSSIP_ICON_BATTLE, 283, "Windfury I" },
  51.     { 2, 0, GOSSIP_ICON_BATTLE, 1, "Rockbiter III" },
  52.     { 2, 3, GOSSIP_ICON_TALK, 0, "Next.." },
  53.     { 2, 1, GOSSIP_ICON_TALK, 0, "..Back" },
  54.  
  55.     { 3, 0, GOSSIP_ICON_BATTLE, 3265, "Blessed Weapon Coating" },
  56.     { 3, 0, GOSSIP_ICON_BATTLE, 2, "Frostbrand I" },
  57.     { 3, 0, GOSSIP_ICON_BATTLE, 3, "Flametongue III" },
  58.     { 3, 0, GOSSIP_ICON_BATTLE, 3266, "Righteous Weapon Coating" },
  59.     { 3, 0, GOSSIP_ICON_BATTLE, 1903, "Spirit" },
  60.     { 3, 0, GOSSIP_ICON_BATTLE, 13, "Sharpened" },
  61.     { 3, 0, GOSSIP_ICON_BATTLE, 26, "Frost Oil" },
  62.     { 3, 0, GOSSIP_ICON_BATTLE, 7, "Deadly Poison" },
  63.     { 3, 0, GOSSIP_ICON_BATTLE, 803, "Fiery Weapon" },
  64.     { 3, 0, GOSSIP_ICON_BATTLE, 1896, "Weapon Damage" },
  65.     { 3, 0, GOSSIP_ICON_BATTLE, 2666, "Intellect" },
  66.     { 3, 0, GOSSIP_ICON_BATTLE, 25, "Shadow Oil" },
  67.     { 3, 2, GOSSIP_ICON_TALK, 0, "..Back" },
  68. };
  69.  
  70. class NPC_VisualWeapon : public CreatureScript
  71. {
  72. public:
  73.     NPC_VisualWeapon() : CreatureScript("NPC_VisualWeapon") { }
  74.  
  75.     bool MainHand;
  76.  
  77.     void SetVisual(Player* player, uint32 visual)
  78.     {
  79.         uint8 slot = MainHand ? EQUIPMENT_SLOT_MAINHAND : EQUIPMENT_SLOT_OFFHAND;
  80.  
  81.         Item* item = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot);
  82.  
  83.         if (!item)
  84.         {
  85.             ChatHandler(player->GetSession()).PSendSysMessage("No item equipped in selected slot.");
  86.             return;
  87.         }
  88.  
  89.         const ItemTemplate* itemTemplate = item->GetTemplate();
  90.  
  91.         if (itemTemplate->SubClass == ITEM_SUBCLASS_ARMOR_SHIELD ||
  92.             itemTemplate->SubClass == ITEM_SUBCLASS_ARMOR_BUCKLER ||
  93.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_SPEAR ||
  94.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_BOW ||
  95.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_GUN ||
  96.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_obsolete ||
  97.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_EXOTIC ||
  98.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_EXOTIC2 ||
  99.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_MISC ||
  100.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_THROWN ||
  101.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_CROSSBOW ||
  102.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_WAND ||
  103.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_FISHING_POLE ||
  104.             itemTemplate->SubClass == ITEM_SUBCLASS_WEAPON_obsolete)
  105.             return;
  106.  
  107.         player->SetUInt16Value(PLAYER_VISIBLE_ITEM_1_ENCHANTMENT + (item->GetSlot() * 2), 0, visual);
  108.     }
  109.  
  110.     void GetMenu(Player* player, Creature* creature, uint32 menuId)
  111.     {
  112.         for (uint8 i = 0; i < (sizeof(vData) / sizeof(*vData)); i++)
  113.         {
  114.             if (vData[i].Menu == menuId)
  115.                 player->ADD_GOSSIP_ITEM(vData[i].Icon, vData[i].Name, GOSSIP_SENDER_MAIN, i);
  116.         }
  117.  
  118.         player->SEND_GOSSIP_MENU(DEFAULT_MESSAGE, creature->GetGUID());
  119.     }
  120.  
  121.     bool OnGossipHello(Player* player, Creature* creature)
  122.     {
  123.         player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "|TInterface/PaperDoll/UI-PaperDoll-Slot-MainHand:32:32:-32:0|tMain-Hand", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
  124.         player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "|TInterface/PaperDoll/UI-PaperDoll-Slot-SecondaryHand:32:32:-32:0|tOff-Hand", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
  125.         player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, "|TInterface/PaperDollInfoFrame/UI-GearManager-Undo:32:32:-32:0|tExit", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3);
  126.  
  127.         player->SEND_GOSSIP_MENU(DEFAULT_MESSAGE, creature->GetGUID());
  128.         return true;
  129.     }
  130.  
  131.     bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action)
  132.     {
  133.         player->PlayerTalkClass->ClearMenus();
  134.  
  135.         switch (action)
  136.         {
  137.         case GOSSIP_ACTION_INFO_DEF + 1:
  138.             MainHand = true;
  139.             GetMenu(player, creature, 1);
  140.             return false;
  141.  
  142.         case GOSSIP_ACTION_INFO_DEF + 2:
  143.             MainHand = false;
  144.             GetMenu(player, creature, 1);
  145.             return false;
  146.  
  147.         case GOSSIP_ACTION_INFO_DEF + 3:
  148.             player->CLOSE_GOSSIP_MENU();
  149.             return false;
  150.         }
  151.  
  152.         uint32 menuData = vData[action].Submenu;
  153.  
  154.         if (menuData == 0)
  155.         {
  156.             SetVisual(player, vData[action].Id);
  157.             menuData = vData[action].Menu;
  158.         }
  159.  
  160.         GetMenu(player, creature, menuData);
  161.         return true;
  162.     }
  163. };
  164.  
  165. void AddSC_NPC_VisualWeapon()
  166. {
  167.     new NPC_VisualWeapon;
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement