TrinityCore / TrinityCore

TrinityCore Open Source MMO Framework (master = 11.0.5.57388, 3.3.5 = 3.3.5a.12340, cata classic = 4.4.1.57294)
http://www.trinitycore.org
GNU General Public License v2.0
9.61k stars 6.06k forks source link

[3.3.5a] [NPC] Lieutenant General Andorov #9636

Open FireEmerald opened 11 years ago

FireEmerald commented 11 years ago

The NPC Lieutenant General Andorov - [15471] is missing in Ruins of Ahn'Qiraj.

He should start the General Rajaxx event.

After the fight he should sell some epic patterns, Major Healing and Mana Potions, and bandages.

Core: https://github.com/TrinityCore/TrinityCore/commit/51f6db79159576d6b8f550670629a8eb65fa2150 DB: TDB 335.51 (clean)

Want to back this issue? Post a bounty on it! We accept bounties via Bountysource.

TheMaaster commented 11 years ago

From what i understood he should spawn when u kill Kurinnaxx (witch i just tried, and no Andorov to be found)

Core revision: Trinity Core 740ab1816a2f Database revision: TDB 335.52

FireEmerald commented 11 years ago

@TheMaaster This was "changed" since cata. In WotLK you had to talk to him to start the event.

1.

By enotrai (1,287 – 2·14) on 2006/12/06 (Patch 2.0.1) Keep this guy alive while you're fighting General Rajaxx.

2.

By Havik (315 – 3) on 2007/12/12 (Patch 2.3.0)

When you talk to him to start the General Rajaxx event, he yells: -"Remember when I said i'd kill you last Rajaxx?"....... -"I Lied."

3.

By sweettums (536 – 5·6) on 2010/07/04 (Patch 3.3.5)

Anyone know what you need to do to get him to sell to you? When I click on him the only option given is the one >that starts the event. I am exalted with CC.

Ahhh. He needs to survive the event. Then he sells.

4.

By cutterx2202 (7,329 – 3·7·32) on 2010/11/17 (Patch 4.0.3)

As of 4.0.1, this npc wasn't spawning at the end of the first boss so he won't help for boss 2 or be available for >pattern purchases.

Edit: In 5.4.8 (offi) he spawned correctly.

TheMaaster commented 11 years ago

We still @ WotLK 3.3.5a

FireEmerald commented 10 years ago

Patch 5.4.8 (5.4.8.18291) after the fight against General Rajaxx: screenshot

Rushor commented 10 years ago

i found this in the mangosrepo: https://github.com/mangosone/server/blob/master/src/scripts/scripts/kalimdor/ruins_of_ahnqiraj/boss_rajaxx.cpp question: how should the npc behave, if the npc died. if the npc is died the group must kill the waves of creatures which are already spawned for themself und the waves will not attack the group separated, like it would be handeled, if the Lieutenant General Andorov is living - isn't it?

and moreover: is the boss attackable, if the waveevent is not already completed?

Rushor commented 9 years ago

some basic shit

/*####
## npc_general_andronov
####*/

static Position KaldoreiEliteLoc[] =
{
    { -8880.787109f, 1643.450195f, 21.386433f }, // 1 
    { -8879.288086f, 1648.774658f, 21.386433f }, // 2 
    { -8875.350586f, 1648.345581f, 21.386433f }, // 3 
    { -8873.777344f, 1644.600830f, 21.386433f }  // 4 
};

enum AndronovMisc
{
    FACTION_ANDRONOV_ESCORT  = 250,
    SPELL_AURA_OF_COMMAND    = 25516,
    SPELL_BASH               = 25515,
    SPELL_STRIKE             = 22591,
    SAY_ANDOROV_INTRO        = 0,   // Before for the first wave
    SAY_ANDOROV_ATTACK       = 1,   // Beginning the event
    GOSSIP_ANDRNOV           = 7047
};

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

    bool OnGossipSelect(Player* player, Creature* creature, uint32 /*uiSender*/, uint32 uiAction) OVERRIDE
    {
        player->PlayerTalkClass->ClearMenus();
        if (uiAction == GOSSIP_ACTION_INFO_DEF + 1)
        {
            player->CLOSE_GOSSIP_MENU();

            if (npc_escortAI* pEscortAI = CAST_AI(npc_general_andronov::npc_general_andronovAI, creature->AI()))
                pEscortAI->Start(false, true, 0, NULL, false, false);
        }
        if (uiAction == GOSSIP_ACTION_INFO_DEF + 2)
        {
            player->CLOSE_GOSSIP_MENU();
            player->GetSession()->SendListInventory(creature->GetGUID());
        }
        return true;
    }

    bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
    {
        InstanceScript* instance = creature->GetInstanceScript();

        if (instance->GetBossState(DATA_RAJAXX) != DONE)
            player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, player->GetOptionTextWithEntry(GOSSIP_ANDRNOV, 1), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);

        if (instance->GetBossState(DATA_RAJAXX) == DONE)
            player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, player->GetOptionTextWithEntry(GOSSIP_ANDRNOV, 0), GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 2);

        player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());

        return true;
    }

    struct npc_general_andronovAI : public npc_escortAI
    {
        npc_general_andronovAI(Creature* creature) : npc_escortAI(creature)
        {
            instance = creature->GetInstanceScript();
            SetDespawnAtEnd(false);
            SetDespawnAtFar(false);
        }

        void InitializeAI() OVERRIDE
        {
            for (uint8 i = 0; i < 4; i++)
                if (Creature* kaldoreielitist = me->SummonCreature(NPC_KALDOREI_ELITE, KaldoreiEliteLoc[i]))
                {
                   kaldoreielitist->SetOwnerGUID(me->GetGUID());
                   kaldoreielitist->GetMotionMaster()->MoveFollow(me, urand(1.0f, 3.0f), urand(1.0f, 5.0f) + i);
                   kaldoreielitist->SetReactState(REACT_AGGRESSIVE);
                   kaldoreielitist->setFaction(FACTION_ESCORT_H_ACTIVE);
                   kaldoreielitist->SetFacingTo(kaldoreielitist->GetAngle(me));
                }

            me->setFaction(FACTION_ANDRONOV_ESCORT);
            Endwaypoint = false;
        }

        void Reset() OVERRIDE
        {
            CommandAuraTimer =  urand(1, 3) * IN_MILLISECONDS;
            BashTimer        = urand(8, 11) * IN_MILLISECONDS;
            StrikeTimer      =  urand(2, 5) * IN_MILLISECONDS;
        }

        void WaypointReached(uint32 waypointId) OVERRIDE
        {
            switch (waypointId)
            {
                case 0:
                    me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER);
                    SetRun(true);
                    break;
                case 8:
                    SetEscortPaused(true);
                    if (!Endwaypoint)
                    {
                        uiTimer = 3 * IN_MILLISECONDS;
                        uiPhase = 1;
                        Endwaypoint = true;
                        Talk(SAY_ANDOROV_INTRO);
                    }
                    break;
            }
        }

        void JustDied(Unit* /*killer*/) OVERRIDE
        {
            me->DespawnOrUnsummon();
            std::list<Creature*> HelperList;
            me->GetCreatureListWithEntryInGrid(HelperList, NPC_KALDOREI_ELITE, 200.0f);
            if (!HelperList.empty())
                for (std::list<Creature*>::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++)
                    (*itr)->DespawnOrUnsummon();

            if (instance)
            {
                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 200.0f))
                    rajaxx->AI()->Talk(SAY_KILLS_ANDOROV);
            }
        }

        void KilledUnit(Unit* victim) OVERRIDE 
        {
            if (victim->GetEntry() == NPC_RAJAXX)
               Talk(SAY_ANDOROV_ATTACK);
        }

        void MoveInLineOfSight(Unit* who) OVERRIDE
        {
            // If Rajaxx is in range attack him
            if (who->GetEntry() == NPC_RAJAXX && me->IsWithinDistInMap(who, 50.0f))
                AttackStart(who);

            ScriptedAI::MoveInLineOfSight(who);
        }

        void UpdateAI(uint32 diff) OVERRIDE
        {
            if (uiPhase)
            {
                if (uiTimer <= diff)
                {
                    switch (uiPhase)
                    {
                        case 1:
                            if (Creature* queez = me->FindNearestCreature(NPC_QEEZ, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                queez->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_WAVE3);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 2;
                            break;
                        case 2:
                            if (Creature* tuubid = me->FindNearestCreature(NPC_TUUBID, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                tuubid->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_WAVE4);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 3;
                            break;
                        case 3:
                            if (Creature* dreen = me->FindNearestCreature(NPC_DRENN, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                dreen->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_WAVE5);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 4;
                            break;
                        case 4:
                            if (Creature* xurrem = me->FindNearestCreature(NPC_XURREM, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                xurrem->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_WAVE6);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 5;
                            break;
                        case 5:
                            if (Creature* xurrem = me->FindNearestCreature(NPC_XURREM, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                xurrem->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_WAVE7);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 6;
                            break;
                        case 6:
                            if (Creature* yeggeth = me->FindNearestCreature(NPC_YEGGETH, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                yeggeth->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_UNK1);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 7;
                            break;
                        case 7:
                            if (Creature* pakkon = me->FindNearestCreature(NPC_PAKKON, 400.0f, true))
                            {
                                uiTimer = 60 * IN_MILLISECONDS;
                                pakkon->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_UNK2);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 8;
                            break;
                        case 8:
                            if (Creature* zerran = me->FindNearestCreature(NPC_ZERRAN, 400.0f, true))
                            {
                                uiTimer = 30 * IN_MILLISECONDS;
                                zerran->AI()->AttackStart(me);
                                if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                                    rajaxx->AI()->Talk(SAY_UNK3);
                            }
                            else
                                uiTimer = 0;
                            uiPhase = 9;
                            break;
                        case 9: 
                            if (Creature* rajaxx = me->FindNearestCreature(NPC_RAJAXX, 400.0f, true))
                            {
                                rajaxx->AI()->AttackStart(me);
                                rajaxx->AI()->Talk(SAY_INTRO);
                            }                                
                            uiTimer = 0;
                            uiPhase = 0;
                            break;
                    }
                }
                else uiTimer -= diff;
            }
            npc_escortAI::UpdateAI(diff);

            if (!UpdateVictim())
                return;

            if (BashTimer <= diff)
            {
                DoCastVictim(SPELL_BASH);
                BashTimer = urand(12, 15) * IN_MILLISECONDS;
            }
            else
                BashTimer -= diff;

            if (StrikeTimer <= diff)
            {
                DoCastVictim(SPELL_STRIKE);
                StrikeTimer = urand(4, 6) * IN_MILLISECONDS;
            }
            else
                StrikeTimer -= diff;

            if (CommandAuraTimer <= diff)
            {
                DoCast(me, SPELL_AURA_OF_COMMAND, true);
                CommandAuraTimer = urand(10, 20) * IN_MILLISECONDS;
            }
            else
                CommandAuraTimer -= diff;

            DoMeleeAttackIfReady();
        }

        void EnterCombat(Unit* /*who*/) OVERRIDE { }
    private:
        InstanceScript* instance;
        bool Endwaypoint;
        uint32 uiTimer;
        uint32 uiPhase;
        uint32 CommandAuraTimer;
        uint32 BashTimer;
        uint32 StrikeTimer;
    };

    CreatureAI* GetAI(Creature* creature) const OVERRIDE
    {
        return new npc_general_andronovAI(creature);
    }
};
UPDATE `creature_template` SET `ScriptName`='npc_general_andronov' WHERE `entry`=15471;
UPDATE `creature_template` SET `npcflag`=129, `speed_walk`=1.4, `speed_run`=1.4, `gossip_menu_id`=7047 WHERE  `entry`=15471;

DELETE FROM `script_waypoint` WHERE `entry`=15471;
INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`, `point_comment`) VALUES 
(15471, 0, -8876.79, 1634.59, 21.3864, 0, 'Andronov'),
(15471, 1, -8877.69, 1627.65, 21.3864, 0, 'Andronov'),
(15471, 2, -8884.18, 1606.13, 21.3864, 0, 'Andronov'),
(15471, 3, -8892.82, 1591.76, 21.3864, 0, 'Andronov'),
(15471, 4, -8905.6, 1575.1, 21.387, 0, 'Andronov'),
(15471, 5, -8914.31, 1564.14, 21.387, 0, 'Andronov'),
(15471, 6, -8928.91, 1551.86, 21.387, 0, 'Andronov'),
(15471, 7, -8937.75, 1551.09, 21.388, 0, 'Andronov'),
(15471, 8, -8941.71, 1550.75, 21.7797, 90000000, 'Andronov');

DELETE FROM `gossip_menu_option` WHERE `menu_id`=7047;
INSERT INTO `gossip_menu_option` (`menu_id`, `id`, `option_icon`, `option_text`, `option_id`, `npc_option_npcflag`, `action_menu_id`, `action_poi_id`, `box_coded`, `box_money`, `box_text`) VALUES 
(7047, 0, 1, 'Lasst doch mal sehen.', 3, 128, 0, 0, 0, 0, NULL), -- 15471
(7047, 1, 1, 'Gerne unterstütze ich euch in dem Kampf!', 1, 1, 0, 0, 0, 0, NULL); -- 15471

SET @GUID := 3107793;
/*DELETE FROM `creature` WHERE `id` IN (15344, 15387, 15385, 15386, 15388, 15389, 15390, 15391, 15392);*/
DELETE FROM `creature` WHERE `guid` BETWEEN @GUID+0 AND @GUID+49;
INSERT INTO `creature` (`guid`, `id`, `map`, `spawnMask`, `phaseMask`, `modelid`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `spawndist`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`) VALUES 
(@GUID+0, 15344, 509, 3, 1, 0, 0, -9132.83, 1539.1, 21.4696, 1.65806, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+1, 15344, 509, 3, 1, 0, 0, -9012.13, 1608.77, 24.8693, 3.14159, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+2, 15344, 509, 3, 1, 0, 0, -9022.04, 1612.05, 22.8073, 3.15905, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+3, 15344, 509, 3, 1, 0, 0, -9003.75, 1536.16, 21.4697, 2.63545, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+4, 15344, 509, 3, 1, 0, 0, -9029.94, 1498.08, 22.1401, 2.33874, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+5, 15344, 509, 3, 1, 0, 0, -9038.44, 1491.04, 23.2296, 2.26893, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+6, 15344, 509, 3, 1, 0, 0, -9020.15, 1586.73, 21.4697, 2.94961, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+7, 15344, 509, 3, 1, 0, 0, -9014.36, 1597.68, 21.4697, 3.03687, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+8, 15344, 509, 3, 1, 0, 0, -9031.99, 1592.26, 21.4697, 2.98451, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+9, 15344, 509, 3, 1, 0, 0, -9071.76, 1611.28, 21.4721, 3.1765, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+10, 15344, 509, 3, 1, 0, 0, -9071.04, 1622.14, 21.4697, 3.33358, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+11, 15344, 509, 3, 1, 0, 0, -9091.76, 1519.37, 21.4697, 2.05949, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+12, 15344, 509, 3, 1, 0, 0, -9097.29, 1578.36, 21.4696, 2.51327, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+13, 15344, 509, 3, 1, 0, 0, -9102.55, 1569.42, 21.4757, 2.32129, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+14, 15344, 509, 3, 1, 0, 0, -9078.8, 1622.8, 21.4697, 3.36848, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+15, 15344, 509, 3, 1, 0, 0, -9076.42, 1530.23, 21.4697, 2.23402, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+16, 15344, 509, 3, 1, 0, 0, -9092.34, 1586.27, 21.4696, 2.68781, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+17, 15344, 509, 3, 1, 0, 0, -9070.71, 1634.37, 21.4812, 3.49066, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+18, 15344, 509, 3, 1, 0, 0, -8991.15, 1554, 21.6539, 2.77507, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+19, 15344, 509, 3, 1, 0, 0, -9022.71, 1505.88, 21.5596, 2.40855, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+20, 15344, 509, 3, 1, 0, 0, -9083.14, 1524.76, 21.4697, 2.14675, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+21, 15385, 509, 3, 1, 0, 0, -9108.29, 1584.17, 21.471, 2.49582, 7200, 0, 0, 1, 0, 1, 0, 0, 0),
(@GUID+22, 15386, 509, 3, 1, 0, 0, -9085.03, 1622.4, 21.4697, 0.0174533, 7200, 0, 0, 1, 0, 1, 0, 0, 0),
(@GUID+23, 15387, 509, 1, 1, 0, 0, -9023.85, 1601.58, 21.4697, 3.07178, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+24, 15387, 509, 1, 1, 0, 0, -8998.05, 1560.15, 22.1308, 2.80998, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+25, 15387, 509, 1, 1, 0, 0, -9010.7, 1542.47, 21.4697, 2.6529, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+26, 15387, 509, 1, 1, 0, 0, -9030.08, 1512.31, 21.4706, 2.40855, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+27, 15387, 509, 1, 1, 0, 0, -8994.83, 1542.27, 21.6486, 2.70526, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+28, 15387, 509, 1, 1, 0, 0, -9074, 1515.23, 21.4697, 2.16421, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+29, 15387, 509, 1, 1, 0, 0, -9001.26, 1549.05, 22.0209, 2.72271, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+30, 15387, 509, 1, 1, 0, 0, -9074, 1515.23, 21.4697, 2.16421, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+31, 15387, 509, 1, 1, 0, 0, -9066.89, 1521.48, 21.4697, 2.25148, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+32, 15387, 509, 1, 1, 0, 0, -9046.5, 1498.26, 22.0108, 2.26893, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+33, 15387, 509, 1, 1, 0, 0, -9125.76, 1549.29, 21.4696, 1.78024, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+34, 15387, 509, 1, 1, 0, 0, -9123.58, 1541.55, 21.4696, 1.79769, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+35, 15387, 509, 1, 1, 0, 0, -9134.14, 1546.72, 21.4696, 1.64061, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+36, 15387, 509, 1, 1, 0, 0, -9117.37, 1553.28, 21.4696, 1.93731, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+38, 15387, 509, 1, 1, 0, 0, -9102.67, 1581.56, 21.471, 2.49582, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+39, 15387, 509, 1, 1, 0, 0, -9098.18, 1589.88, 21.47, 2.70526, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+40, 15387, 509, 1, 1, 0, 0, -9107.89, 1574.31, 21.4863, 2.30383, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+41, 15387, 509, 1, 1, 0, 0, -9078.07, 1635.03, 21.4697, 3.54302, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+42, 15387, 509, 1, 1, 0, 0, -9082.67, 1510.19, 21.5131, 2.07694, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+43, 15387, 509, 1, 1, 0, 0, -9080.05, 1612.09, 21.4697, 3.19395, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+44, 15388, 509, 3, 1, 0, 0, -9127.98, 1558.54, 21.6879, 5.044, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+45, 15389, 509, 1, 1, 0, 0, -9033.17, 1604.66, 21.4697, 5.96903, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+46, 15390, 509, 1, 1, 0, 0, -9087.01, 1530.26, 21.4697, 2.14675, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+47, 15391, 509, 1, 1, 0, 0, -9007.4, 1556.87, 21.6039, 5.51524, 259200, 0, 0, 1, 0, 0, 0, 0, 0),
(@GUID+48, 15392, 509, 1, 1, 0, 0, -9041.36, 1512.58, 21.4748, 5.46288, 259200, 0, 0, 1, 0, 0, 0, 0, 0);

-- Kaldorei Elite SAI
SET @ENTRY := 15473;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@ENTRY,0,0,0,0,0,100,0,6000,9000,6000,9000,11,26350,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kaldorei Elite - In Combat - Cast 'Cleave'"),
(@ENTRY,0,1,0,0,0,100,0,9000,13000,9000,13000,11,16856,0,0,0,0,0,2,0,0,0,0,0,0,0,"Kaldorei Elite - In Combat - Cast 'Mortal Strike'");

-- Swarmguard Needler SAI
SET @ENTRY := 15344;
UPDATE `creature_template` SET `AIName`="SmartAI" WHERE `entry`=@ENTRY;
DELETE FROM `smart_scripts` WHERE `entryorguid`=@ENTRY AND `source_type`=0;
INSERT INTO `smart_scripts` (`entryorguid`,`source_type`,`id`,`link`,`event_type`,`event_phase_mask`,`event_chance`,`event_flags`,`event_param1`,`event_param2`,`event_param3`,`event_param4`,`action_type`,`action_param1`,`action_param2`,`action_param3`,`action_param4`,`action_param5`,`action_param6`,`target_type`,`target_param1`,`target_param2`,`target_param3`,`target_x`,`target_y`,`target_z`,`target_o`,`comment`) VALUES
(@ENTRY,0,0,0,0,0,100,0,5000,9000,5000,9000,11,40504,0,0,0,0,0,2,0,0,0,0,0,0,0,"Swarmguard Needler - In Combat - Cast 'Cleave'");

DELETE FROM `creature_formations` WHERE `leaderGUID` IN (3107838, 3107815, 3107814, 3107837, 3107840, 3107841, 3107839);
INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`) VALUES 
(3107840, 3107840, 0, 0, 2),
(3107840, 3107817, 0, 0, 2),
(3107840, 3107822, 0, 0, 2),
(3107840, 3107818, 0, 0, 2),
(3107840, 3107796, 0, 0, 2),
(3107840, 3107820, 0, 0, 2),
(3107840, 3107811, 0, 0, 2),

(3107841, 3107841, 0, 0, 2),
(3107841, 3107819, 0, 0, 2),
(3107841, 3107825, 0, 0, 2),
(3107841, 3107798, 0, 0, 2),
(3107841, 3107797, 0, 0, 2),
(3107841, 3107812, 0, 0, 2),

(3107839, 3107839, 0, 0, 2),
(3107839, 3107804, 0, 0, 2),
(3107839, 3107813, 0, 0, 2),
(3107839, 3107808, 0, 0, 2),
(3107839, 3107824, 0, 0, 2),
(3107839, 3107823, 0, 0, 2),
(3107839, 3107835, 0, 0, 2),

(3107837, 3107837, 0, 0, 2),
(3107837, 3107827, 0, 0, 2),
(3107837, 3107793, 0, 0, 2),
(3107837, 3107829, 0, 0, 2),
(3107837, 3107826, 0, 0, 2),
(3107837, 3107828, 0, 0, 2),

(3107814, 3107814, 0, 0, 2),
(3107814, 3107833, 0, 0, 2),
(3107814, 3107806, 0, 0, 2),
(3107814, 3107831, 0, 0, 2),
(3107814, 3107805, 0, 0, 2),
(3107814, 3107809, 0, 0, 2),
(3107814, 3107832, 0, 0, 2),

(3107815, 3107815, 0, 0, 2),
(3107815, 3107836, 0, 0, 2),
(3107815, 3107807, 0, 0, 2),
(3107815, 3107834, 0, 0, 2),
(3107815, 3107802, 0, 0, 2),
(3107815, 3107803, 0, 0, 2),
(3107815, 3107810, 0, 0, 2),

(3107838, 3107838, 0, 0, 2),
(3107838, 3107801, 0, 0, 2),
(3107838, 3107816, 0, 0, 2),
(3107838, 3107795, 0, 0, 2),
(3107838, 3107794, 0, 0, 2),
(3107838, 3107800, 0, 0, 2),
(3107838, 3107799, 0, 0, 2);

/*
DELETE FROM `broadcast_text` WHERE `ID` IN (11650, 11821);
INSERT INTO `broadcast_text` (`ID`, `Language`, `MaleText`, `FemaleText`, `EmoteID0`, `EmoteID1`, `EmoteID2`, `EmoteDelay0`, `EmoteDelay1`, `EmoteDelay2`, `SoundId`, `Unk1`, `Unk2`, `VerifiedBuild`) VALUES
(11650, 0, 'Wir haben den Befehl von ganz oben erhalten, Rajaxx zu vernichten. Termination mit extremer Voreingenommenheit, um es mal so zu sagen.', '', 0, 0, 0, 0, 0, 0, 0, 0, 1, 18414), -- 11650
(11821, 0, 'Meine Mission ist abgeschlossen. Ich hätte hier allerdings eventuell noch einige Vorräte, solltet Ihr etwas benötigen.', '', 0, 0, 0, 0, 0, 0, 0, 0, 1, 18414); -- 11821
*/

spawnpos. took from sniffs

Aokromes commented 8 years ago

If this fix is valid, plz open a PR for it.