[Quest] The Black Knight Orders

Sup guys, i’ve decided to have a little fun trying to fix this quest, so first at all, i tried to gather as much info as i can on the TC issue tracker and i came up with this

– Black Knights Camp Spawns
DELETE FROM gameobject WHERE id IN (194357,194394,195011,300007);
INSERT INTO gameobject (id,map,spawnMask,phaseMask,position_x,position_y,position_z,orientation,rotation0,rotation1,rotation2,rotation3,spawntimesecs,animprogress,state) VALUES
(194357,571,1,1,9070.324,2050.733,67.21755,0,0,0,0,1,0,0,0),
(194357,571,1,1,9073.764,2050.12,68.15718,0,0,0,0,1,0,0,0),
(194357,571,1,1,9074.699,2050.709,68.17049,0,0,0,0,1,0,0,0),
(194357,571,1,1,9069.595,2050.349,67.21755,0,0,0,0,1,0,0,0),
(194394,571,1,1,9083.578,2041.696,67.81812,0,0,0,0,1,0,0,0),
(194357,571,1,1,9069.961,2050.538,67.21755,0,0,0,0,1,0,0,0),
(194357,571,1,1,9072.077,2049.292,67.78963,0,0,0,0,1,0,0,0),
(195011,571,1,1,9078.471,2057.547,67.21606,0,0,0,0.9981346,0.06105176,0,0,0),
(194357,571,1,1,9065.68,2052.618,67.28638,3.019413,0,0,0,1,0,0,0),
(300007,571,1,1,8523.900,566.635010,552.921,0,0,0,0,0,0,0,0);

DELETE FROM creature WHERE id=33537;
INSERT INTO creature (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
(33537,571,1,1,0,0,9071.043,2075.388,67.21542,4.93598,120,0,0,1,0,0,0,0,0),
(33537,571,1,1,0,0,9074.414,2049.259,67.34636,2.181662,120,0,0,1,0,0,0,0,0),
(33537,571,1,1,0,0,9081.28,2058.925,67.38979,3.612832,120,0,0,1,0,0,0,0,0);

– Template updates
UPDATE creature_template SET speed_run=4, InhabitType=5 WHERE entry=33519; – Black Knight’s Gryphon
UPDATE creature_template SET faction_A=2080,faction_H=2080,unit_flags=unit_flags|32768,equipment_id=823 WHERE entry=33537; – Cult Conspirator

– Addon data
DELETE FROM creature_template_addon WHERE entry IN (33519,33537);
INSERT INTO creature_template_addon (entry,mount,bytes1,bytes2,emote,auras) VALUES
(33519,0,0,2049,0,NULL),-- Black Knight’s Gryphon
(33537,0,1,1,0,NULL); – Cult Conspirator

– SAI for Black Knight’s Gryphon
SET @entry :=33519;
UPDATE creature_template SET AIName=‘SmartAI’ WHERE entry=@entry;
DELETE FROM smart_scripts WHERE source_type=0 AND entryorguid=@entry;
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,27,0,100,0,0,0,0,0,53,0,@entry,0,13663,0,0,1,0,0,0,0,0,0,0,‘Black Knight’‘s Gryphon - On Passenger - Start WP movement’),
(@entry,0,1,0,40,0,100,0,40,@entry,0,0,33,33519,0,0,0,0,0,7,0,0,0,0,0,0,0,‘Black Knight’‘s Gryphon - Quest Credit’),
(@entry,0,2,0,40,0,100,0,43,@entry,0,0,11,50630,0,0,0,0,0,7,0,0,0,0,0,0,0,‘Black Knight’‘s Gryphon - Dismount Spell’),
(@entry,0,3,0,40,0,100,0,44,@entry,0,0,41,0,0,0,0,0,0,1,0,0,0,0,0,0,0,‘Black Knight’‘s Gryphon - Despawn’);

DELETE FROM waypoints WHERE entry=33519;
INSERT INTO waypoints (entry,pointid,position_x,position_y,position_z,point_comment) VALUES
(33519,1,8521.271,569.596,552.8375,‘Black Knight’‘s Gryphon’),
(33519,2,8517.864,579.1095,553.2125,‘Black Knight’‘s Gryphon’),
(33519,3,8513.146,594.6724,551.2125,‘Black Knight’‘s Gryphon’),
(33519,4,8505.263,606.5569,550.4177,‘Black Knight’‘s Gryphon’),
(33519,5,8503.017,628.4188,547.4177,‘Black Knight’‘s Gryphon’),
(33519,6,8480.271,652.7083,547.4177,‘Black Knight’‘s Gryphon’),
(33519,7,8459.121,686.1427,547.4177,‘Black Knight’‘s Gryphon’),
(33519,8,8436.802,713.8687,547.3428,‘Black Knight’‘s Gryphon’),
(33519,9,8405.380,740.0045,547.4177,‘Black Knight’‘s Gryphon’),
(33519,10,8386.139,770.6009,547.5881,‘Black Knight’‘s Gryphon’),
(33519,11,8374.297,802.2525,547.9304,‘Black Knight’‘s Gryphon’),
(33519,12,8374.271,847.0363,548.0427,‘Black Knight’‘s Gryphon’),
(33519,13,8385.988,868.9881,548.0491,‘Black Knight’‘s Gryphon’),
(33519,14,8413.027,867.8573,547.2991,‘Black Knight’‘s Gryphon’),
(33519,15,8452.552,869.0339,547.2991,‘Black Knight’‘s Gryphon’),
(33519,16,8473.058,875.2012,547.2955,‘Black Knight’‘s Gryphon’),
(33519,17,8472.278,912.3134,547.4169,‘Black Knight’‘s Gryphon’),
(33519,18,8479.666,954.1650,547.3298,‘Black Knight’‘s Gryphon’),
(33519,19,8477.349,1001.368,547.3372,‘Black Knight’‘s Gryphon’),
(33519,20,8484.538,1025.797,547.4622,‘Black Knight’‘s Gryphon’),
(33519,21,8525.363,1029.284,547.4177,‘Black Knight’‘s Gryphon’),
(33519,22,8532.808,1052.904,548.1677,‘Black Knight’‘s Gryphon’),
(33519,23,8537.356,1077.927,554.5791,‘Black Knight’‘s Gryphon’),
(33519,24,8540.528,1083.379,569.6827,‘Black Knight’‘s Gryphon’),
(33519,25,8563.641,1140.965,569.6827,‘Black Knight’‘s Gryphon’),
(33519,26,8594.897,1205.458,569.6827,‘Black Knight’‘s Gryphon’),
(33519,27,8617.104,1257.399,566.1833,‘Black Knight’‘s Gryphon’),
(33519,28,8648.496,1329.349,558.0187,‘Black Knight’‘s Gryphon’),
(33519,29,8667.723,1388.411,546.188,‘Black Knight’‘s Gryphon’),
(33519,30,8699.145,1474.898,528.2197,‘Black Knight’‘s Gryphon’),
(33519,31,8726.869,1546.006,501.7741,‘Black Knight’‘s Gryphon’),
(33519,32,8739.058,1592.157,478.5511,‘Black Knight’‘s Gryphon’),
(33519,33,8750.799,1636.771,455.0797,‘Black Knight’‘s Gryphon’),
(33519,34,8760.006,1669.482,423.2208,‘Black Knight’‘s Gryphon’),
(33519,35,8783.31,1701.852,375.8872,‘Black Knight’‘s Gryphon’),
(33519,36,8817.336,1735.731,343.3323,‘Black Knight’‘s Gryphon’),
(33519,37,8882.32,1789.754,301.5807,‘Black Knight’‘s Gryphon’),
(33519,38,8958.597,1841.807,259.9141,‘Black Knight’‘s Gryphon’),
(33519,39,9045.891 ,1908.076,233.4143,‘Black Knight’‘s Gryphon’),
(33519,40,9107.177,1964.594,215.9704,‘Black Knight’‘s Gryphon’),
(33519,41,9134.763,2036.925,175.1925,‘Black Knight’‘s Gryphon’),
(33519,42,9128.608,2089.091,141.3593,‘Black Knight’‘s Gryphon’),
(33519,43,9093.364,2128.384,99.38685,‘Black Knight’‘s Gryphon’),
(33519,44,9050.709,2123.656,60.24802,‘Black Knight’‘s Gryphon’);

-- Quest: The Back Knights Orders (13663)

BUT, since i dont like to deal with SAI and other DB-Side-“Scripting” i decided to do that on the core, so i’m not using the SmartAI SQL part and the Waypoint one. This is how the script looks right now:

[SPOILER]

[CODE]enum BlackKnightOrders

{

QUEST_THE_BLACK_KNIGHT_ORDERS = 13663,

NPC_CREDIT_BLACK_GRYPHON      = 33519,

SPELL_EJECT_PASSENGER         = 50630,

};

const Position BlackKnightGryphonWaypoints[44] =

{

{8521.271f,  569.596f,  552.8375f},

{8517.864f,  579.1095f, 553.2125f},

{8513.146f,  594.6724f, 551.2125f},

{8505.263f, 606.5569f, 550.4177f},

{8503.017f, 628.4188f, 547.4177f},

{8480.271f, 652.7083f, 547.4177f},

{8459.121f, 686.1427f, 547.4177f},

{8436.802f, 713.8687f, 547.3428f},

{8405.380f, 740.0045f, 547.4177f},

{8386.139f, 770.6009f, 547.5881f},

{8374.297f, 802.2525f, 547.9304f},

{8374.271f, 847.0363f, 548.0427f},

{8385.988f, 868.9881f, 548.0491f},

{8413.027f, 867.8573f, 547.2991f},

{8452.552f, 869.0339f, 547.2991f},

{8473.058f, 875.2012f, 547.2955f},

{8472.278f, 912.3134f, 547.4169f},

{8479.666f, 954.1650f, 547.3298f},

{8477.349f, 1001.368f, 547.3372f},

{8484.538f, 1025.797f, 547.4622f},

{8525.363f, 1029.284f, 547.4177f},

{8532.808f, 1052.904f, 548.1677f},

{8537.356f, 1077.927f, 554.5791f},

{8540.528f, 1083.379f, 569.6827f},

{8563.641f, 1140.965f, 569.6827f},

{8594.897f, 1205.458f, 569.6827f},

{8617.104f, 1257.399f, 566.1833f},

{8648.496f, 1329.349f, 558.0187f},

{8667.723f, 1388.411f, 546.188f},

{8699.145f, 1474.898f, 528.2197f},

{8726.869f, 1546.006f, 501.7741f},

{8739.058f, 1592.157f, 478.5511f},

{8750.799f, 1636.771f, 455.0797f},

{8760.006f, 1669.482f, 423.2208f},

{8783.31f, 1701.852f, 375.8872f},

{8817.336f, 1735.731f, 343.3323f},

{8882.32f, 1789.754f, 301.5807f},

{8958.597f, 1841.807f, 259.9141f},

{9045.891f, 1908.076f, 233.4143f},

{9107.177f, 1964.594f, 215.9704f},

{9134.763f, 2036.925f, 175.1925f},

{9128.608f, 2089.091f, 141.3593f},

{9093.364f, 2128.384f, 99.38685f},

{9050.709f, 2123.656f, 60.24802f}

};

class npc_black_knight_gryphon : public CreatureScript

{

public:

npc_black_knight_gryphon() : CreatureScript("npc_black_knight_gryphon") { }


struct npc_black_knight_gryphonAI : public ScriptedAI

{

    npc_black_knight_gryphonAI(Creature* creature) : ScriptedAI(creature) { }


    uint8 count;

    bool wp_reached;

    bool movementStarted;


    void Reset()

    {

        count = 0;

        wp_reached = false;

        movementStarted = false;

    }


    void MoveInLineOfSight(Unit* who)

    {

        if (who->GetTypeId() != TYPEID_PLAYER)

            return;


        if (who->ToPlayer()->GetQuestStatus(QUEST_THE_BLACK_KNIGHT_ORDERS) == QUEST_STATUS_INCOMPLETE && !who->HasUnitState(UNIT_STAT_ONVEHICLE) && who->GetDistance(me) < 5.0f)

        {

            who->ToPlayer()->EnterVehicle(me);

            // disable player control

            if (Unit* base = who->GetVehicleBase())

            {

                if (base->isCharmed())

                    base->RemoveCharmedBy(base->GetCharmer());

            }

        }

    }


    void MovementInform(uint32 type, uint32 id)

    {

        if (type != POINT_MOTION_TYPE || id != count)

            return;


        if (id < 43)

        {

            ++count;

            wp_reached = true;

        }

        else 

        {

            Unit* player = me->GetVehicleKit()->GetPassenger(0);

            if (player && player->GetTypeId() == TYPEID_PLAYER)

            {

                player->ToPlayer()->KilledMonsterCredit(NPC_CREDIT_BLACK_GRYPHON, 0);

                me->CastSpell(player,SPELL_EJECT_PASSENGER,true);

                me->DespawnOrUnsummon(5000);

            }

        }

    }


    void UpdateAI(const uint32 /*diff*/)

    {

        if (!me->isCharmed() && !movementStarted)

        {

            movementStarted = true;

        }


        if (wp_reached)

        {

            wp_reached = false;

            me->GetMotionMaster()->MovePoint(count, BlackKnightGryphonWaypoints[count]);

        }

    }


};


CreatureAI* GetAI(Creature* creature) const

{

    return new npc_black_knight_gryphonAI(creature);

}

};[/CODE][/SPOILER]

The problem is, even if i get near the gryphon summoned by the spell 63163 i wont ride it >.>, so i started to research to find out what the EffectMiscValueB of the SPELL_EFFECT_SUMMON is, and i found this

[CODE]struct SummonPropertiesEntry

{

uint32  Id;                                             // 0

uint32  Category;                                       // 1, 0 - can't be controlled?, 1 - something guardian?, 2 - pet?, 3 - something controllable?, 4 - taxi/mount?

uint32  Faction;                                        // 2, 14 rows > 0

uint32  Type;                                           // 3, see enum

uint32  Slot;                                           // 4, 0-6

uint32  Flags;                                          // 5

};[/CODE]

but still, i wasn’t able to find the “byte values” of this effect misc value so i could build a “mountable” summoned gryphon value and change it on LoadDBCDataCorrections() /emoticons/default_tongue.png (the current one is being summoned as a “pet” so i cant mount it, i guess /emoticons/default_ohmy.png)

Well, any help on this would be appreciated /emoticons/default_biggrin.png

Hmm, thats my SAi fix, but its missing the npc_spellclick_spells entry