关灯
开启左侧

靠NPC脚本模拟出来的天赋树-T端脚本代码

  [复制链接]
admin实名认证 发表于 2016-4-23 17:46:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
这个是一个靠NPC来模拟天赋树的功能。主要就是学习对应的天赋了哦。

至于具体的细节功能还没有测试。


适用T端。有兴趣的人去试试

#include "ScriptPCH.h"

class Talent_Specialization : public CreatureScript
{
    public:
        Talent_Specialization() : CreatureScript("Talent_Specialization") { }


bool HasSpec(Player* pPlayer, uint32 talentID)
{
TalentEntry const* talentInfo = sTalentStore.LookupEntry(talentID);

    if (!talentInfo) // You gave me the wrong ID
        return false;

uint32 points = 0;

uint32 tTab = talentInfo->TalentTab;
    if (talentInfo->Row > 0)
    {
        uint32 numRows = sTalentStore.GetNumRows();
        for (uint32 i = 0; i < numRows; i++)          // Loop through all talents.
        {
            // Someday, someone needs to revamp
            const TalentEntry* tmpTalent = sTalentStore.LookupEntry(i);
            if (tmpTalent)                                  // the way talents are tracked
            {
                if (tmpTalent->TalentTab == tTab)
                {
                    for (uint8 rank = 0; rank < MAX_TALENT_RANK; rank++)
                    {
                        if (tmpTalent->RankID[rank] != 0)
                        {
                            if (pPlayer->HasSpell(tmpTalent->RankID[rank]))
                            {
                                points += (rank + 1);
                            }
                        }
                    }
                }
            }
        }
    }
if (points > 5)
     return true;
         return false;

}


    bool OnGossipHello(Player * pPlayer, Creature * pCreature)
    {

        switch(pPlayer->getClass())
        {
            case CLASS_PALADIN:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a paladin. Paladins can perform all three possible roles of damage dealing, healing, or tanking.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffE066FFRetribution|r specialization. This specialization focuses on damage dealing by applying additional holy damage to each attack.", GOSSIP_SENDER_MAIN, 0);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: The Art of War, Judgements of the Wise, and Pursuit of Justice. Actives: Crusader Strike, Seal of Command and Exorcism", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffFFFFFFHoly|r specialization. This specialization will make you a better healer, assisting your allies in combat.", GOSSIP_SENDER_MAIN, 1);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Illumination, Infusion of Light, and Holy guidance. Actives: Holy shock, Cleanse, and Divine Illumination.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff2E37FEProtection|r specialization, used for tanking. It focuses around absorbing damage and keeping enemies in an area focused on hitting you.", GOSSIP_SENDER_MAIN, 2);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Spiritual Attunement, Rebout and Shield of the Templar. Actives: Blessing of Santuary, Avenger's Shield and Hammer of the Righteous.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_MAGE:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a mage. Mages may only fulfill the role of damage dealing, but they are notoriously good at doing so.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff1D7CF2Arcane|r specialization, which mainly relies on arcane magic and utility to defeat the enemy.", GOSSIP_SENDER_MAIN, 3);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passive: Arcane Mind, Arcane Empowerment and Missile Barrage. Counterspell and Arcane barrage.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffB22222Fire|r specialization. Fire spec mages rely on mobility and destructive fire magic to burn their enemies to a crisp.", GOSSIP_SENDER_MAIN, 4);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Blazing Speed and Critical Mass Actives: Blast Wave, Dragon's Breath, Living Bomb", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff0EBFE9Frost|r specialization. It is unique in the way that the mage may slow or even halt their enemy's progress while dealing signifigant damage.", GOSSIP_SENDER_MAIN, 5);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Shatter and Fingers of Frost Actives: Ice Barrier, Iceblock, Deep Freeze.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_WARRIOR:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a warrior. Warriors can perform well in both the role of a tank and a damage dealer.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff7B68EEArms|r specialization. Arms warriors typically use a two-handed weapon, pumping out massive damage slowly.", GOSSIP_SENDER_MAIN, 600);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Taste for Blood, Deep Wounds, Second Wind, Blood Frenzy (And a weapon specialization). Actives: Mortal Strike", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff8B2500Fury|r specialization. Fury warriors would normally be found dual wielding one-handed weapons, attacking fast and strong.", GOSSIP_SENDER_MAIN, 7);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Flurry, Improved Berserker Stance, Bloodsurge. Actives: Deathwish, Bloodthirst, and Slam", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff8B5742Protection|r specialization, used for tanking. It focuses around taking all the damage from your allies. You want to make sure all the enemies are attacking you when you're Protection spec.", GOSSIP_SENDER_MAIN, 8);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Damage Shield, Sword and Board, Vitality. Actives: Shield Slam, Devastate, Vigilance.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_PRIEST:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a priest. Priests may act as damage dealers by harming the soul and healers by soothing the spirit.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffFFFFFFHoly|r specialization. This specialization will make you a better group healer, but a poor healer for individual people in need.", GOSSIP_SENDER_MAIN, 9);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Inspiration, Body and Soul, Spiritual Guidance. Actives: Prayer of Mending and Guardian Spirit.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff78AB46Discipline|r specialization. It will increase your ability to heal, but mainly only good for strong heals on one target at a time.", GOSSIP_SENDER_MAIN, 10);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Divine Aegis, Focused Will, and Borrowed Time Actives: Pain Surpression and Penance.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff757575Shadow|r specialization, which focuses on using shadow magic to defeat the enemy.", GOSSIP_SENDER_MAIN, 11);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Shadow Weaving and Shadow Power Actives: Shadowform, Mind Flay, Devouring Plague.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_HUNTER:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a hunter. Hunters have a vast array of utilities and excel in dealing damage by teaming up with a pet.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff800000Marksmanship|r specialization. This specialization focuses on the increasing your reliance on your gun, bow, or crossbow.", GOSSIP_SENDER_MAIN, 12);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features passives: Wild quiver, Piercing Shots, and Improved Steady Shot. Actives: Aimed shot and Steady shot", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff7BCC70Survival|r specialization. It will increase your ability to live through long and dangerous fights.", GOSSIP_SENDER_MAIN, 13);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Lock and Load and Survivalist actives: Feign Death, Frost Trap, Scatter shot.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff8A2BE2Beastmastery|r specialization. You will be able to manipulate your beasts into doing vast amounts of damage.", GOSSIP_SENDER_MAIN, 14);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Kindred Spirits, Frenzy, Serpents Swiftness Actives: Beastial Wrath and The Beast Within", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_ROGUE:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a rogue. Rogues specialize in being stealthy, dealing damage should they choose to reveal themselves.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff838EDESubtlety|r specialization. You will operate in the darkness, using your stealth as your greatest tool.", GOSSIP_SENDER_MAIN, 15);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Honor Among Thieves, Cheat Death, Slaughter from the Shadows Actives: Shadowstep, Hemo, Vanish", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff8B3626Assassination|r specialization. Assassins typically deal great damage in short bursts and escape the scene.", GOSSIP_SENDER_MAIN, 16);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Overkill, Focused Attacks, Fleet Footed, Seal Fate, Deadly Brew Actives: Mutilate.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff87CEEBCombat|r specialization. Though not the most traditional rogue spec, you will abandon your stealth-like nature to become a great damage dealer.", GOSSIP_SENDER_MAIN, 1700);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Lightning Reflexes, Combat Potency, Unfair Advantage (And either Dagger, Swords/Axes, or Mace spec). Actives: Adrenaline Rush, Blade Flurry", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_SHAMAN:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a shaman. Shamans are able to fulfill the roles of spell caster, melee damage dealer and healer, relying greatly on their totems.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff7BBF6ARestoration|r specialization. This specialization will make you a better healer, assisting your allies in combat.", GOSSIP_SENDER_MAIN, 18);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features Passives: Ancestral Healing and Nature's Blessing Actives: Earthshield, Nature's swiftness and EarthLiving Weapon.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffD9D919Enhancement|r specialization. Those who follow this path typically dual wield one-handed weapons, relying on totems and bursty spells to take down the enemy.", GOSSIP_SENDER_MAIN, 19);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Flurry, Dual Wield, Maelstrom weapons Actives: Stormstrike and Lavalash.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff912CEEElemental|r specialization. This specialization will increase the potency of your spells, making you a great damage dealer.", GOSSIP_SENDER_MAIN, 20);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Lightning Mastery, Lightning Overload, and Storm Earth and Fire Actives: Chain Lightning, Thunderstorm.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_WARLOCK:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a warlock. Warlocks use dark magic to corrupt their enemies and minions to do their dirty work.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff9CCB19Affliciton|r specialization, which consists of inflicting a great variety of curses on the enemy to take them down.", GOSSIP_SENDER_MAIN, 21);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features Passives: Pandemic, Death's Embrace, Nightfall, and Siphon Life. Actives: Unstable Affliction.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffA020F0Demonology|r specialization. Under this path, you will unlock the secret to increasing the power of your minions.", GOSSIP_SENDER_MAIN, 22);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives:Demonic Pact, Master Summoner, Demonic Knowledge. Actives:Summon Felguard and Soul Link.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff9E0508Destruction|r specialization. Destruction warlocks wreak havoc, causing large amounts of damage with their long cast yet high damage spells.", GOSSIP_SENDER_MAIN, 23);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives:Backlash and Backdraft. Actives:Shadowfury, Conflag, and Incinerate.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
            case CLASS_DRUID:
                pPlayer->ADD_GOSSIP_ITEM(7, "Greetings. You are a druid. A druid may fulfill all roles as spell caster, melee damage dealer, healer, and tank. Druids rely on their forms for survival.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cffE6E6FABalance|r specialization. The balance specialization focuses on using nature and arcane spells to destroy the enemy in the blink of an eye.", GOSSIP_SENDER_MAIN, 25);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Dreamstate, Earth and Moon, Eclipse, Nature's Splendor, Improved Faerie Fire Actives: Moonkin Form.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff7BBF6ARestoration|r specialization. This specialization will make you a better healer, assisting your allies in combat.", GOSSIP_SENDER_MAIN, 26);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Nature's Bounty, Living Seed, Improved Barkskin Actives: Wild Growth, Tree form, Swiftmend.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(3, "This is the |cff7B3F00Feral|r specialization, which focuses on dealing physical and over time damage in both bear and cat forms.", GOSSIP_SENDER_MAIN, 27);
                pPlayer->ADD_GOSSIP_ITEM(0, "This specialization features: Passives: Feral Swiftness, Leader of the Pack, Rend and Tear, Primal Gore Actives: Feral Charge and Lacerate.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, pCreature->GetGUID());
                break;
        }
        return true;
    }

    bool OnGossipSelect(Player * pPlayer, Creature * creature, uint32 sender, uint32 uiAction)
    {
        uint32 ret[6] = {20375, 35395, 879, 53488, 26023, 31878}; //these are spellids for each class
        uint32 pprot[6] = {20911, 20135, 53711, 31935, 53595, 33776};// assuming you aren't a fuckass or cant read, this is pretty
        uint32 pholy[6] = {20215, 31842, 20473, 4987, 31841, 53576}; // obvious shit.

        uint32 arcane[5] = {44425, 2139, 31583, 54490, 12503};
        uint32 fire[5] = {11368, 31642, 11113, 31661, 44457};
        uint32 frost[5] = {11426, 44572, 44545, 12983, 45438};

        uint32 arms[6] = {12294, 12849, 56638, 29838, 29859, 12712};
        uint32 fury[6] = {23881, 46915, 29763, 12974, 29801, 12292};
        uint32 protection[6] = {29144, 58874, 46953, 23922, 50720, 20243}; //in case you havent noticed, some trees have the same name so I switch em up a bit

        uint32 holy[5] = {15363, 15031, 64129, 33076, 47788};
        uint32 discipline[5] = {47515, 52800, 45244, 33206, 47540};
        uint32 shadow[5] = {15473, 2944, 15332, 15407, 33225};

        uint32 bm[5] = {19574, 34692, 19625, 56318, 34470};
        uint32 marksman[5] = {34120, 53224, 19434, 53217, 53238};
        uint32 survival[5] = {5384, 36732, 13809, 19259, 56344};

        uint32 elemental[5] = {51490, 421, 51486, 16582, 30679};
        uint32 enhancement[5] = {16284, 674, 51532, 17364, 60103};
        uint32 srestoration[5] = {974, 51730, 16188, 16240, 30869};

        uint32 affliction[5] = {47200, 58435, 63108, 18095, 30108};
        uint32 demonology[5] = {18710, 47240, 35693, 30146, 19028};
        uint32 destruction[5] = {17962, 34939, 47260, 30283, 29722};

        uint32 balance[6] = {60433, 33956, 48525, 33602, 24858, 57865};
        uint32 restoration[6] = {63411, 65139, 18562, 17078, 48438, 48500};
        uint32 feral[6] = {49377, 33917, 37117, 17007, 51269, 24866};

        uint32 assassin[6] = {31209, 58426, 51636, 14195, 1329, 51626};
        uint32 combat[6] = {13875, 51674, 13789, 35553, 13750, 13877};
        uint32 subtlety[6] = {16511, 31230, 1856, 51701, 36554, 51712};

        uint32 rweaponspec[3] = {13807, 13964, 13803}; //daggers, swords, maces in that order
        uint32 wweaponspec[3] = {12785, 12815, 12704}; //axe, sword, mace in that order

        if (sender == GOSSIP_SENDER_MAIN, 100)
        {
            pPlayer->PlayerTalkClass->ClearMenus();

            switch(uiAction)
            {
            case 100:
                OnGossipHello(pPlayer, creature);
            break;

                // Paladin
                case 0: //Retrubition
                    if (HasSpec(pPlayer, 1403))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(ret, false);
                            pPlayer->removeSpell(pholy, false, false);
                            pPlayer->removeSpell(pprot, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Retribution Tree!");
                    break;
                case 1: //Holy
                    if (HasSpec(pPlayer, 1432))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(pholy, false);
                            pPlayer->removeSpell(ret, false, false);
                            pPlayer->removeSpell(pprot, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Holy Tree!");
                    break;
                case 2:  //Protection
                    if (HasSpec(pPlayer, 1442))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(pprot, false);
                            pPlayer->removeSpell(ret, false, false);
                            pPlayer->removeSpell(pholy, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Protection Tree!");
                    break;

                // Mage
                case 3: // Arcane
                    if (HasSpec(pPlayer, 74))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(arcane, false);
                            pPlayer->removeSpell(fire, false, false);
                            pPlayer->removeSpell(frost, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Arcane Tree!");
                    break;

                case 4: // Fire
                    if (HasSpec(pPlayer, 27))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(fire, false);
                            pPlayer->removeSpell(frost, false, false);
                            pPlayer->removeSpell(arcane, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Fire Tree!");
                    break;

                case 5: // Frost
                    if (HasSpec(pPlayer, 38))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(arcane, false);
                            pPlayer->removeSpell(fire, false, false);
                            pPlayer->removeSpell(frost, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Frost Tree!");
                    break;

                // Warrior


                case 7: // Fury
                    if (HasSpec(pPlayer, 2250))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(fury, false);
                            pPlayer->removeSpell(arms, false, false);
                            pPlayer->removeSpell(protection, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Fury Tree!");
                    break;
                case 8: // Protection
                    if (HasSpec(pPlayer, 142))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(protection, false);
                            pPlayer->removeSpell(arms, false, false);
                            pPlayer->removeSpell(fury, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Protection Tree!");
                    break;

                // Priest
                case 9: // Holy
                    if (HasSpec(pPlayer, 410))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(holy, false);
                            pPlayer->removeSpell(discipline, false, false);
                            pPlayer->removeSpell(shadow, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Holy Tree!");
                    break;
                case 10: // Discipline
                    if (HasSpec(pPlayer, 342))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(discipline, false);
                            pPlayer->removeSpell(holy, false, false);
                            pPlayer->removeSpell(shadow, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Discipline Tree!");
                    break;
                case 11: // Shadow
                    if (HasSpec(pPlayer, 465))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(shadow, false);
                            pPlayer->removeSpell(discipline, false, false);
                            pPlayer->removeSpell(holy, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Shadow Tree!");
                    break;

                // Hunter
                case 12: // Marksman
                    if (HasSpec(pPlayer, 1341))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(marksman, false);
                            pPlayer->removeSpell(survival, false, false);
                            pPlayer->removeSpell(bm, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Marksman Tree!");
                    break;
                case 13: // Survival
                    if (HasSpec(pPlayer, 1623))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(survival, false);
                            pPlayer->removeSpell(bm, false, false);
                            pPlayer->removeSpell(marksman, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Survival Tree!");
                    break;
                case 14: // Beastmaster
                    if (HasSpec(pPlayer, 1382))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(bm, false);
                            pPlayer->removeSpell(marksman, false, false);
                            pPlayer->removeSpell(survival, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Beastmastery Tree!");
                    break;

                // Rogue
                case 15: //Sub
                    if (HasSpec(pPlayer, 2244))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(subtlety, false);
                            pPlayer->removeSpell(combat, false, false);
                            pPlayer->removeSpell(assassin, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Subtlety Tree!");
                    break;
                case 16: // Assassination
                    if (HasSpec(pPlayer, 276))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(assassin, false);
                            pPlayer->removeSpell(combat, false, false);
                            pPlayer->removeSpell(subtlety, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Assassination Tree!");
                    break;

                // Shaman
                case 18: //Restoration
                    if (HasSpec(pPlayer, 586))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(srestoration, false);
                            pPlayer->removeSpell(enhancement, false, false);
                            pPlayer->removeSpell(elemental, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Restoration Tree!");
                    break;
                case 19: // Enhancement
                    if (HasSpec(pPlayer, 610))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(enhancement, false);
                            pPlayer->removeSpell(elemental, false, false);
                            pPlayer->removeSpell(srestoration, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Enhancement Tree!");
                    break;
                case 20: // Elemental
                    if (HasSpec(pPlayer, 564))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(elemental, false);
                            pPlayer->removeSpell(srestoration, false, false);
                            pPlayer->removeSpell(enhancement, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Elemental Tree!");
                    break;

                // Warlock
                case 21: //Affliction
                    if (HasSpec(pPlayer, 1284))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(affliction, false);
                            pPlayer->removeSpell(demonology, false, false);
                            pPlayer->removeSpell(destruction, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Affliction Tree!");
                    break;
                case 22: // Demonology
                    if (HasSpec(pPlayer, 1221))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(demonology, false);
                            pPlayer->removeSpell(affliction, false, false);
                            pPlayer->removeSpell(destruction, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Demonology Tree!");
                    break;
                case 23: //Destruction
                    if (HasSpec(pPlayer, 944))
                    {
                        for (uint32 i = 0; i < 5; i++)
                        {
                            pPlayer->learnSpell(destruction, false);
                            pPlayer->removeSpell(demonology, false, false);
                            pPlayer->removeSpell(affliction, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Destruction Tree!");
                    break;

                // Druid
                case 25: // Balance
                    if (HasSpec(pPlayer, 783))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(balance, false);
                            pPlayer->removeSpell(feral, false, false);
                            pPlayer->removeSpell(restoration, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Balance Tree!");
                    break;
                case 26: //Restoration   
                    if (HasSpec(pPlayer, 824))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(restoration, false);
                            pPlayer->removeSpell(balance, false, false);
                            pPlayer->removeSpell(feral, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Restoration Tree!");
                    break;

                case 27: //Feral
                    if (HasSpec(pPlayer, 801))
                    {
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(feral, false);
                            pPlayer->removeSpell(balance, false, false);
                            pPlayer->removeSpell(restoration, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Feral Tree!");
                    break;

                case 600:
                pPlayer->ADD_GOSSIP_ITEM(0, "You may choose a weapon specialization talent.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(5, "Poleaxe Specialization: While wielding an Axe or Poleaxe you recieve +5% critical strike chance.", GOSSIP_SENDER_MAIN, 999);
                pPlayer->ADD_GOSSIP_ITEM(5, "Mace Specialization: While wielding a Mace you recieve +15% Armor Penetration.", GOSSIP_SENDER_MAIN, 998);
                pPlayer->ADD_GOSSIP_ITEM(5, "Sword Specialization: While wielding a sword you have a 10% chance to strike again.", GOSSIP_SENDER_MAIN, 997);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
                break;

                case 999:
                if (HasSpec(pPlayer, 124))
                    {
                        pPlayer->learnSpell(wweaponspec[0], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(arms, false);
                            pPlayer->removeSpell(fury, false, false);
                            pPlayer->removeSpell(protection, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Arms Tree!");
                    break;

                                    case 998:
                if (HasSpec(pPlayer, 124))
                    {
                        pPlayer->learnSpell(wweaponspec[2], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(arms, false);
                            pPlayer->removeSpell(fury, false, false);
                            pPlayer->removeSpell(protection, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Arms Tree!");
                    break;


                                    case 997:
                if (HasSpec(pPlayer, 124))
                    {
                        pPlayer->learnSpell(wweaponspec[1], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(arms, false);
                            pPlayer->removeSpell(fury, false, false);
                            pPlayer->removeSpell(protection, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Arms Tree!");
                    break;

                case 1700:
                pPlayer->ADD_GOSSIP_ITEM(0, "You may choose a weapon specialization talent.", GOSSIP_SENDER_MAIN, 100);
                pPlayer->ADD_GOSSIP_ITEM(5, "Close Quarters Combat: While wielding a Dagger or Fist Weapon you recieve +5% critical strike chance.", GOSSIP_SENDER_MAIN, 996);
                pPlayer->ADD_GOSSIP_ITEM(5, "Mace Specialization: While wielding a Mace you recieve +15% Armor Penetration.", GOSSIP_SENDER_MAIN, 995);
                pPlayer->ADD_GOSSIP_ITEM(5, "Hack and Slash: While wielding a Sword or Axe you have a 5% chance to strike again.", GOSSIP_SENDER_MAIN, 994);
                pPlayer->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
                break;

                case 996:
                if (HasSpec(pPlayer, 203))
                    {
                        pPlayer->learnSpell(rweaponspec[0], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(combat, false);
                            pPlayer->removeSpell(assassin, false, false);
                            pPlayer->removeSpell(subtlety, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Combat Tree!");
                    break;


                case 995:
                if (HasSpec(pPlayer, 203))
                    {
                        pPlayer->learnSpell(rweaponspec[2], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(combat, false);
                            pPlayer->removeSpell(assassin, false, false);
                            pPlayer->removeSpell(subtlety, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Combat Tree!");
                    break;


                case 994:
                if (HasSpec(pPlayer, 203))
                    {
                        pPlayer->learnSpell(rweaponspec[1], false);
                        for (uint32 i = 0; i < 6; i++)
                        {
                            pPlayer->learnSpell(combat, false);
                            pPlayer->removeSpell(assassin, false, false);
                            pPlayer->removeSpell(subtlety, false, false);
                        }
                    pPlayer->PlayDirectSound(3337);
                    pPlayer->CastSpell(pPlayer, 47292);
                    }
                    pPlayer->GetSession()->SendNotification("You do not have six (6) points in the Combat Tree!");
                    break;
            }
            pPlayer->CLOSE_GOSSIP_MENU();
        }
        return true;
    }
};

void AddSC_Talent_Specialization()
{
    new Talent_Specialization();
}



回复下载完整的脚本代码
游客,如果您要查看本帖隐藏内容请回复




 
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 灌水之王

    经常在论坛发帖,且发帖量较大
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

0关注

5粉丝

3421帖子

排行榜
作者专栏

QQ交流群&&微信订阅号

QQ交流群

微信订阅号

吾爱尚玩资源基地永久域名:

Www.523Play.Com

在线管理员QQ:1589479632

邮箱:Email@523play.com

QQ交流群:558936238

Copyright   ©2015-2116  吾爱尚玩资源基地|523play.comPowered by©523Pplay.Com技术支持:吾爱尚玩资源基地