daily pastebin goal
56%
SHARE
TWEET

Untitled

a guest Dec 16th, 2018 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*######
  2. ## npc_faction_valiant_champion
  3. ######*/
  4.  
  5. /*
  6. UPDATE creature_template SET scriptname = 'npc_faction_valiant_champion' WHERE entry IN (33559,33562,33558,33564,33306,33285,33382,33561,33383,33384);
  7. UPDATE creature_template SET scriptname = 'npc_faction_valiant_champion' WHERE entry IN (33738,33739,33740,33743,33744,33745,33746,33747,33748,33749);
  8. */
  9.  
  10. enum valiantChampion
  11. {
  12.    //SPELL_CHARGE                = 63010,
  13.    //SPELL_SHIELD_BREAKER        = 65147,
  14.    SPELL_REFRESH_MOUNT         = 66483,
  15.  
  16.    SPELL_GIVE_VALIANT_MARK_1   = 62724,
  17.    SPELL_GIVE_VALIANT_MARK_2   = 62770,
  18.    SPELL_GIVE_VALIANT_MARK_3   = 62771,
  19.    SPELL_GIVE_VALIANT_MARK_4   = 62995,
  20.    SPELL_GIVE_VALIANT_MARK_5   = 62996,
  21.  
  22.    SPELL_GIVE_CHAMPION_MARK    = 63596,
  23.  
  24.    SPELL_DEFEND_AURA_PERIODIC   = 64223,
  25.  
  26.    QUEST_THE_GRAND_MELEE_0     = 13665,
  27.    QUEST_THE_GRAND_MELEE_1     = 13745,
  28.    QUEST_THE_GRAND_MELEE_2     = 13750,
  29.    QUEST_THE_GRAND_MELEE_3     = 13756,
  30.    QUEST_THE_GRAND_MELEE_4     = 13761,
  31.    QUEST_THE_GRAND_MELEE_5     = 13767,
  32.    QUEST_THE_GRAND_MELEE_6     = 13772,
  33.    QUEST_THE_GRAND_MELEE_7     = 13777,
  34.    QUEST_THE_GRAND_MELEE_8     = 13782,
  35.    QUEST_THE_GRAND_MELEE_9     = 13787,
  36.  
  37.    QUEST_AMONG_THE_CHAMPIONS_0 = 13790,
  38.    QUEST_AMONG_THE_CHAMPIONS_1 = 13793,
  39.    QUEST_AMONG_THE_CHAMPIONS_2 = 13811,
  40.    QUEST_AMONG_THE_CHAMPIONS_3 = 13814,
  41.  
  42.    SPELL_BESTED_DARNASSUS      = 64805,
  43.    SPELL_BESTED_GNOMEREGAN     = 64809,
  44.    SPELL_BESTED_IRONFORGE      = 64810,
  45.    SPELL_BESTED_ORGRIMMAR      = 64811,
  46.    SPELL_BESTED_SENJIN         = 64812,
  47.    SPELL_BESTED_SILVERMOON     = 64813,
  48.    SPELL_BESTED_STORMWIND      = 64814,
  49.    SPELL_BESTED_EXODAR         = 64808,
  50.    SPELL_BESTED_UNDERCITY      = 64816,
  51.    SPELL_BESTED_THUNDERBLUFF   = 64815,
  52. };
  53.  
  54. #define GOSSIP_MELEE_FIGHT      "I'am ready to fight!"
  55.  
  56. class npc_faction_valiant_champion : public CreatureScript
  57. {
  58. public:
  59.    npc_faction_valiant_champion() : CreatureScript("npc_faction_valiant_champion") { }
  60.  
  61.    struct npc_faction_valiant_championAI : public ScriptedAI
  62.    {
  63.        npc_faction_valiant_championAI(Creature* creature) : ScriptedAI(creature)
  64.        {
  65.        }
  66.  
  67.        uint32 uiChargeTimer;
  68.        uint32 uiShieldBreakerTimer;
  69.        uint64 guidAttacker;
  70.        bool chargeing;
  71.  
  72.        void Reset()
  73.        {
  74.            uiChargeTimer = 7000;
  75.            uiShieldBreakerTimer = 10000;
  76.  
  77.            me->setFaction(35);
  78.        }
  79.  
  80.        void EnterCombat(Unit* attacker)
  81.        {
  82.            guidAttacker = attacker->GetGUID();
  83.            DoCast(me,SPELL_DEFEND_AURA_PERIODIC,true);
  84.            if (Aura* aur = me->AddAura(SPELL_RANGED_DEFEND,me))
  85.                aur->ModStackAmount(1);
  86.        }
  87.  
  88.        void MovementInform(uint32 uiType, uint32 uiId)
  89.        {
  90.            if (uiType != POINT_MOTION_TYPE)
  91.                return;
  92.  
  93.            if (uiId != 1)
  94.                return;
  95.  
  96.            chargeing = false;
  97.  
  98.            DoCastVictim(SPELL_CHARGE);
  99.            if (me->getVictim())
  100.                me->GetMotionMaster()->MoveChase(me->getVictim());
  101.        }
  102.  
  103.        void DamageTaken(Unit* pDoneBy, uint32& uiDamage)
  104.        {
  105.            // esto era un chequeo extra para cuando estaba creando el script lo dejo comentado por que me ayudara
  106.            // en futuros cambios para recordar algunas cositas ;)!
  107.            //if (pDoneBy && pDoneBy->GetGUID() != guidAttacker)
  108.              //  uiDamage = 0;
  109.  
  110.            if (uiDamage > me->GetHealth() && pDoneBy->GetTypeId() == TYPEID_PLAYER)
  111.            {
  112.                uiDamage = 0;
  113.  
  114.                if (pDoneBy->HasAura(63034))
  115.                {
  116.                    switch(me->GetEntry())
  117.                    {
  118.                    case 33559: // Darnassus
  119.                    case 33562: // Exodar
  120.                    case 33558: // Gnomeregan
  121.                    case 33564: // Ironforge
  122.                    case 33306: // Orgrimmar
  123.                    case 33285: // Sen'jin
  124.                    case 33382: // Silvermoon
  125.                    case 33561: // Stormwind
  126.                    case 33383: // Thunder Bluff
  127.                    case 33384: // Undercity
  128.                        {
  129.                            pDoneBy->CastSpell(pDoneBy,SPELL_GIVE_VALIANT_MARK_1,true);
  130.                            break;
  131.                        }
  132.                    case 33738: // Darnassus
  133.                    case 33739: // Exodar
  134.                    case 33740: // Gnomeregan
  135.                    case 33743: // Ironforge
  136.                    case 33744: // Orgrimmar
  137.                    case 33745: // Sen'jin
  138.                    case 33746: // Silvermoon
  139.                    case 33747: // Stormwind
  140.                    case 33748: // Thunder Bluff
  141.                    case 33749: // Undercity
  142.                        {
  143.                            pDoneBy->CastSpell(pDoneBy,SPELL_GIVE_CHAMPION_MARK,true);
  144.                            break;
  145.                        }
  146.                    }
  147.  
  148.                   switch(me->GetEntry())
  149.                   {
  150.                       case 33738: // Darnassus
  151.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_DARNASSUS,true); break;
  152.                        case 33739: // Exodar
  153.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_EXODAR,true); break;
  154.                        case 33740: // Gnomeregan
  155.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_GNOMEREGAN,true); break;
  156.                        case 33743: // Ironforge
  157.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_IRONFORGE,true); break;
  158.                        case 33744: // Orgrimmar
  159.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_ORGRIMMAR,true); break;
  160.                        case 33745: // Sen'jin
  161.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_SENJIN,true); break;
  162.                        case 33746: // Silvermoon
  163.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_SILVERMOON,true); break;
  164.                        case 33747: // Stormwind
  165.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_STORMWIND,true); break;
  166.                        case 33748: // Thunder Bluff
  167.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_THUNDERBLUFF,true); break;
  168.                        case 33749: // Undercity
  169.                            pDoneBy->CastSpell(pDoneBy,SPELL_BESTED_UNDERCITY,true); break;
  170.                    }
  171.                }
  172.  
  173.                me->setFaction(35);
  174.                EnterEvadeMode();
  175.                me->CastSpell(me,SPELL_REFRESH_MOUNT,true);
  176.            }
  177.        }
  178.  
  179.        void UpdateAI(const uint32 uiDiff)
  180.        {
  181.            if (!UpdateVictim())
  182.                return;
  183.  
  184.            if (uiChargeTimer <= uiDiff)
  185.            {
  186.                chargeing = true;
  187.                float x,y,z;
  188.                //me->GetNearPoint(me, x, y, z, 1.0f, 15.0f, float(M_PI*2*rand_norm()));
  189.                me->GetNearPoint(me, x, y, z, 1.0f, 15.0f, float(2 * M_PI * rand_norm()));
  190.                me->GetMotionMaster()->MovePoint(1,x,y,z);
  191.  
  192.                uiChargeTimer = 15000;
  193.            } else uiChargeTimer -= uiDiff;
  194.  
  195.            if (uiShieldBreakerTimer <= uiDiff)
  196.            {
  197.                DoCastVictim(SPELL_SHIELD_BREAKER);
  198.                uiShieldBreakerTimer = 10000;
  199.            } else uiShieldBreakerTimer -= uiDiff;
  200.  
  201.            if (me->isAttackReady())
  202.            {
  203.                DoCast(me->getVictim(), SPELL_PLAYER_THRUST, true);
  204.                me->resetAttackTimer();
  205.            }
  206.  
  207.            if (Player* plr = Player::GetPlayer(*me,guidAttacker))
  208.                 if (!plr->HasAura(63034))
  209.                     EnterEvadeMode();
  210.        }
  211.    };
  212.  
  213.    CreatureAI *GetAI(Creature* creature) const
  214.    {
  215.        return new npc_faction_valiant_championAI(creature);
  216.    }
  217.  
  218.    bool CanMakeDuel(Player* player, uint32 npcEntry)
  219.    {
  220.        switch(npcEntry)
  221.        {
  222.        case 33738: // Darnassus
  223.            return !player->HasAura(SPELL_BESTED_DARNASSUS);
  224.        case 33739: // Exodar
  225.            return !player->HasAura(SPELL_BESTED_EXODAR);
  226.        case 33740: // Gnomeregan
  227.            return !player->HasAura(SPELL_BESTED_GNOMEREGAN);
  228.        case 33743: // Ironforge
  229.            return !player->HasAura(SPELL_BESTED_IRONFORGE);
  230.        case 33744: // Orgrimmar
  231.            return !player->HasAura(SPELL_BESTED_ORGRIMMAR);
  232.        case 33745: // Sen'jin
  233.            return !player->HasAura(SPELL_BESTED_SENJIN);
  234.        case 33746: // Silvermoon
  235.            return !player->HasAura(SPELL_BESTED_SILVERMOON);
  236.        case 33747: // Stormwind
  237.            return !player->HasAura(SPELL_BESTED_STORMWIND);
  238.        case 33748: // Thunder Bluff
  239.            return !player->HasAura(SPELL_BESTED_THUNDERBLUFF);
  240.        case 33749: // Undercity
  241.            return !player->HasAura(SPELL_BESTED_UNDERCITY);
  242.        }
  243.        return true;
  244.    }
  245.  
  246.    void AddMeleeFightGossip(Player* player)
  247.    {
  248.        if (!player)
  249.            return;
  250.  
  251.        if ( player->HasAura(63034) &&
  252.            ((player->GetQuestStatus(QUEST_THE_GRAND_MELEE_0) == QUEST_STATUS_INCOMPLETE) ||
  253.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_1) == QUEST_STATUS_INCOMPLETE) ||
  254.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_2) == QUEST_STATUS_INCOMPLETE) ||
  255.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_3) == QUEST_STATUS_INCOMPLETE) ||
  256.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_4) == QUEST_STATUS_INCOMPLETE) ||
  257.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_5) == QUEST_STATUS_INCOMPLETE) ||
  258.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_6) == QUEST_STATUS_INCOMPLETE) ||
  259.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_7) == QUEST_STATUS_INCOMPLETE) ||
  260.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_8) == QUEST_STATUS_INCOMPLETE) ||
  261.            (player->GetQuestStatus(QUEST_THE_GRAND_MELEE_9) == QUEST_STATUS_INCOMPLETE)))
  262.        {
  263.            player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_MELEE_FIGHT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
  264.        }
  265.    }
  266.  
  267.  
  268.    bool OnGossipHello(Player* player, Creature* creature)
  269.    {
  270.        switch(creature->GetEntry())
  271.        {
  272.        case 33559: // Darnassus
  273.        case 33562: // Exodar
  274.        case 33558: // Gnomeregan
  275.        case 33564: // Ironforge
  276.        case 33561: // Stormwind
  277.           {
  278.                if (player->GetTeamId() == TEAM_ALLIANCE)
  279.                    AddMeleeFightGossip(player);
  280.                break;
  281.            }
  282.        case 33306: // Orgrimmar
  283.        case 33285: // Sen'jin
  284.        case 33382: // Silvermoon
  285.        case 33383: // Thunder Bluff
  286.        case 33384: // Undercity
  287.            {
  288.                if (player->GetTeamId() == TEAM_HORDE)
  289.                    AddMeleeFightGossip(player);
  290.                break;
  291.            }
  292.        case 33738: // Darnassus
  293.        case 33739: // Exodar
  294.        case 33740: // Gnomeregan
  295.        case 33743: // Ironforge
  296.        case 33744: // Orgrimmar
  297.        case 33745: // Sen'jin
  298.        case 33746: // Silvermoon
  299.        case 33747: // Stormwind
  300.        case 33748: // Thunder Bluff
  301.        case 33749: // Undercity
  302.             {
  303.                if ( player->HasAura(63034) &&
  304.                    ((player->GetQuestStatus(QUEST_AMONG_THE_CHAMPIONS_0) == QUEST_STATUS_INCOMPLETE) ||
  305.                    (player->GetQuestStatus(QUEST_AMONG_THE_CHAMPIONS_1) == QUEST_STATUS_INCOMPLETE) ||
  306.                    (player->GetQuestStatus(QUEST_AMONG_THE_CHAMPIONS_2) == QUEST_STATUS_INCOMPLETE) ||
  307.                    (player->GetQuestStatus(QUEST_AMONG_THE_CHAMPIONS_3) == QUEST_STATUS_INCOMPLETE)))
  308.                {
  309.                    if (CanMakeDuel(player,creature->GetEntry()))
  310.                        player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_MELEE_FIGHT, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);
  311.                }
  312.                break;
  313.            }
  314.        }
  315.  
  316.        player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
  317.        return true;
  318.    }
  319.  
  320.    bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction)
  321.    {
  322.        player->PlayerTalkClass->ClearMenus();
  323.        player->CLOSE_GOSSIP_MENU();
  324.        if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
  325.        {
  326.            creature->setFaction(14);
  327.            creature->AI()->AttackStart(player->GetVehicleCreatureBase());
  328.            creature->AddThreat(player, 0.0f);
  329.            creature->SetInCombatWith(player);
  330.            player->SetInCombatWith(creature);
  331.            return true;
  332.        }
  333.  
  334.        if (uiAction == GOSSIP_ACTION_INFO_DEF + 2)
  335.        {
  336.            creature->setFaction(14);
  337.            creature->AI()->AttackStart(player->GetVehicleCreatureBase());
  338.            creature->AddThreat(player, 0.0f);
  339.            creature->SetInCombatWith(player);
  340.            player->SetInCombatWith(creature);
  341.            return true;
  342.        }
  343.        return true;
  344.    }
  345. };
  346.  
  347.  
  348. new npc_faction_valiant_champion();
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top