#include "../sc_defines.h" #include "../../../../game/Player.h" #include "../../../../game/GossipDef.h" #define GOSSIP_SENDER_SEC_UNLEARN 101 #define BLACKSMITHING_SKILLID 164 #define ARMORSMITH_QUESTID_ALIANCE 5283 #define ARMORSMITH_QUESTID_HORDE 5301 #define ARMORSMITH_SPELLID 9788 #define WEAPONSMITH_QUESTID_ALIANCE 5284 #define WEAPONSMITH_QUESTID_HORDE 5302 #define WEAPONSMITH_SPELLID 9787 #define AXESMITH_QUESTID 5306 #define AXESMITH_SPELLID 17041 #define HAMMERSMITH_SPELLID 17040 #define SWORDSMITH_SPELLID 17039 bool hasQuest(Player *player, uint32 questID) { return player->GetQuestRewardStatus(questID) == QUEST_STATUS_COMPLETE; } bool hasLevelAndSkill(Player *player) { return (player->getLevel() >= 50) && (player->GetSkillValue(BLACKSMITHING_SKILLID) >= 250); } int32 getUnlearnCost(bool weaponsmith, Player *player) { uint32 level = player->getLevel(); if (weaponsmith) { if (level < 66) return 50000; else return 100000; } else { if (level < 51) return 250000; else if (level < 66) return 500000; else return 1000000; } } uint32 getMessageId(uint32 cost) { switch(cost) { case 50000: return 100007; case 100000: return 100008; case 250000: return 100009; case 500000: return 100010; case 1000000: return 100011; } } bool GossipHello_Blacksmith(Player *player, Creature *_Creature) { bool hasArmorsmith = player->HasSpell(ARMORSMITH_SPELLID); bool hasWeaponsmith = player->HasSpell(WEAPONSMITH_SPELLID); bool hasAxesmith = player->HasSpell(AXESMITH_SPELLID); bool hasHammersmith = player->HasSpell(HAMMERSMITH_SPELLID); bool hasSwordsmith = player->HasSpell(SWORDSMITH_SPELLID); bool hasSpecialion = hasArmorsmith || hasWeaponsmith; bool hasWeaponSpecialition = hasAxesmith || hasHammersmith || hasSwordsmith; if (!hasSpecialion && (hasQuest(player, ARMORSMITH_QUESTID_ALIANCE) || hasQuest(player, ARMORSMITH_QUESTID_HORDE))) player->ADD_GOSSIP_ITEM( 0, "Learn me armorsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); if (hasArmorsmith) player->ADD_GOSSIP_ITEM( 0, "Unlearn me armorsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2); if (!hasSpecialion && (hasQuest(player, WEAPONSMITH_QUESTID_ALIANCE) || hasQuest(player, WEAPONSMITH_QUESTID_HORDE))) player->ADD_GOSSIP_ITEM( 0, "Learn me weaponsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 3); if (hasWeaponsmith && !hasWeaponSpecialition) player->ADD_GOSSIP_ITEM( 0, "Unlearn me weaponsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 4); if (hasWeaponsmith && !hasWeaponSpecialition && hasLevelAndSkill(player)) player->ADD_GOSSIP_ITEM( 0, "Learn me axesmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 5); if (hasAxesmith) player->ADD_GOSSIP_ITEM( 0, "Unlearn me axesmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 6); if (hasWeaponsmith && !hasWeaponSpecialition && hasLevelAndSkill(player)) player->ADD_GOSSIP_ITEM( 0, "Learn me hammersmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 7); if (hasHammersmith) player->ADD_GOSSIP_ITEM( 0, "Unlearn me hammersmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 8); if (hasWeaponsmith && !hasWeaponSpecialition && hasLevelAndSkill(player)) player->ADD_GOSSIP_ITEM( 0, "Learn me swordsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 9); if (hasSwordsmith) player->ADD_GOSSIP_ITEM( 0, "Unlearn me swordsmithing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 10); player->ADD_GOSSIP_ITEM( 0, "Nothing." , GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100001, _Creature->GetGUID()); return true; } void SendDefaultMenu_Blacksmith(Player *player, Creature *_Creature, uint32 action) { switch(action) { case GOSSIP_ACTION_INFO_DEF + 1: { //player->learnSpell(ARMORSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 1); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100002, _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 2: { //player->removeSpell(ARMORSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 2); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(getMessageId(getUnlearnCost(false,player)), _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 3: { //player->learnSpell(WEAPONSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 3); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100003, _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 4: { //player->removeSpell(WEAPONSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 4); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(getMessageId(getUnlearnCost(true,player)), _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 5: { //player->learnSpell(AXESMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 5); player->ADD_GOSSIP_ITEM( 0, "no" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100004, _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 6: { //player->removeSpell(AXESMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 6); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(getMessageId(getUnlearnCost(false,player)), _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 7: { //player->learnSpell(HAMMERSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 7); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100005, _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 8: { //player->removeSpell(HAMMERSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 8); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(getMessageId(getUnlearnCost(false,player)), _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 9: { //player->learnSpell(SWORDSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 9); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(100006, _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 10: { //player->removeSpell(SWORDSMITH_SPELLID); player->ADD_GOSSIP_ITEM( 0, "Yes" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 10); player->ADD_GOSSIP_ITEM( 0, "No" , GOSSIP_SENDER_SEC_UNLEARN, GOSSIP_ACTION_INFO_DEF + 11); player->SEND_GOSSIP_MENU(getMessageId(getUnlearnCost(false,player)), _Creature->GetGUID()); break; } case GOSSIP_ACTION_INFO_DEF + 11: { player->CLOSE_GOSSIP_MENU(); break; } } } void SendUnlearnMenu_Blacksmith(Player *player, Creature *_Creature, uint32 action) { switch(action) { case GOSSIP_ACTION_INFO_DEF + 1: { player->learnSpell(ARMORSMITH_SPELLID); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 2: { if (player->GetMoney() >= getUnlearnCost(false,player)) { player->ModifyMoney(-getUnlearnCost(false,player)); player->removeSpell(ARMORSMITH_SPELLID); } else _Creature->Say("Not enough money", LANG_UNIVERSAL, 0); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 3: { player->learnSpell(WEAPONSMITH_SPELLID); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 4: { if (player->GetMoney() >= getUnlearnCost(true,player)) { player->ModifyMoney(-getUnlearnCost(true,player)); player->removeSpell(WEAPONSMITH_SPELLID); } else _Creature->Say("Not enough money", LANG_UNIVERSAL, 0); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 5: { player->learnSpell(AXESMITH_SPELLID); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 6: { if (player->GetMoney() >= getUnlearnCost(false,player)) { player->ModifyMoney(-getUnlearnCost(false,player)); player->removeSpell(AXESMITH_SPELLID); } else _Creature->Say("Not enough money", LANG_UNIVERSAL, 0); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 7: { player->learnSpell(HAMMERSMITH_SPELLID); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 8: { if (player->GetMoney() >= getUnlearnCost(false,player)) { player->ModifyMoney(-getUnlearnCost(false,player)); player->removeSpell(HAMMERSMITH_SPELLID); } else _Creature->Say("Not enough money", LANG_UNIVERSAL, 0); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 9: { player->learnSpell(SWORDSMITH_SPELLID); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 10: { if (player->GetMoney() >= getUnlearnCost(false,player)) { player->ModifyMoney(-getUnlearnCost(false,player)); player->removeSpell(SWORDSMITH_SPELLID); } else _Creature->Say("Not enough money", LANG_UNIVERSAL, 0); player->CLOSE_GOSSIP_MENU(); break; } case GOSSIP_ACTION_INFO_DEF + 11: { player->CLOSE_GOSSIP_MENU(); break; } } } bool GossipSelect_Blacksmith(Player *player, Creature *_Creature, uint32 sender, uint32 action ) { switch(sender) { case GOSSIP_SENDER_MAIN: { SendDefaultMenu_Blacksmith(player, _Creature, action); break; } case GOSSIP_SENDER_SEC_UNLEARN: { SendUnlearnMenu_Blacksmith(player, _Creature, action); break; } } return true; } void AddSC_npc_blacksmithspec() { Script *newscript; newscript = new Script; newscript->Name="npc_blacksmithspec"; newscript->pGossipHello = &GossipHello_Blacksmith; newscript->pGossipSelect = &GossipSelect_Blacksmith; m_scripts[nrscripts++] = newscript; }