Trinitycore: [Quest][11097][DB/SAI] Deadliest Trap Ever Laid

Created on 24 Apr 2012  路  38Comments  路  Source: TrinityCore/TrinityCore

TrinityCore rev. (abed18d695d1+) (Unix, Release)
TDB 335.11.46

In this quest:

Assist Commander Hobb and the Scryers in defending the Sanctum of the Stars. Once all of the Dragonmaw forces have been defeated, return to Overlord Mor'ghor at Dragonmaw Base Camp with the Scryer Medals.

Video: http://www.youtube.com/watch?v=M_ygYydXyuk

Event.is missing.

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

Comp-Database Feedback-FixOutdatedMissingWIP Priority-Cosmetic Sub-Quests

Most helpful comment

If anyone can sniff \ share sniff with Aldor (https://tcubuntu.northeurope.cloudapp.azure.com/aowow/?quest=11101) version of this quest, I can script it too
Actually we can use https://github.com/cmangos/mangos-tbc/commit/4b2a388a2d2c26ee94b0b148a0d353eb32b9fe61 but compare with sniff is always better

All 38 comments

Confirm!

some more information on the spawnpositions, npcs abilities, texts and so on would be nice :)

confirmed

(wowhead) The Deadliest Trap Ever Laid 11097 http://wotlk.openwow.com/quest=11097
:grey_exclamation: Start: Commander Hobb NPC ID: 23434 http://wotlk.openwow.com/npc=23434
:grey_question: End: Overlord Mor'ghor NPC ID: 23139 http://wotlk.openwow.com/npc=23139
Additional requirements to obtain this quest:

  • Your reputation with The Scryers must be at least Neutral

Assist Commander Hobb and the Scryers in defending the Sanctum of the Stars. Once all of the Dragonmaw forces have been defeated, return to Overlord Mor'ghor at Dragonmaw Base Camp with the Scryer Medals.

Suggested Players [3]

Provided Item: Scryer Medals (item ID: 32843)

.npc info performed on Commander Hobb, transformed as burning 2H axe until Q11095 is done:

Player selected NPC
DB GUID: 1011, current GUID: 1011.
Faction: 1876.
npcFlags: 2.
Entry: 23434.
DisplayID: 21342 (Native: 21342).
Level: 71.
EquipmentId: 1 (Original: 1).
Health (base): 57440. (max): 57440. (current): 57440.
InhabitType: 3
Unit Flags: 32768
UNIT_FLAG_UNK_15 (0x8000)
Unit Flags 2: 2048.
Dynamic Flags: 8.
Faction Template: 1876.
SpawnTime: Full:3m Remain:0s
Loot: 0 Pickpocket: 0 Skinning: 0
InstanceID: 0
Phasemask: 1
Armor: 7007
Position: -4106.569824 1126.790039 43.644100.
AIName:  ScriptName: 
Flags Extra: 0
* is quest giver (2)
MechanicImmuneMask: 0

the whole quest is bugged - priority very low seems not to fit here :D

Yes, and 2 of the quests on the way to get that far are also bugged, NPCs are not selectable. I haven't had time to search and check if the issues exist already, but they are quests from Sanctum of the Stars.

Edit: I forgot to mention that I have not yet reached this quest, I had to take the quests leading up to Deadliest Trap Ever Laid and I will still try to see if I can gather more relevant information about this issue. I am still using TrinityCore rev. bc42c48d974f 2014-08-26 04:35:37 +0200 (master branch) (Win32, Release), TDB 355.55 + updates (up to and including 2014_08_26_01_world_spelldifficulty_dbc.sql). Not sure if I want to upgrade yet since it took me a few hours to get this far, starting from scratch with a GM character.

.npc info performed on Commander Hobb (normal), after character meets the Ashtongue Deathsworn:

Player selected NPC
DB GUID: 1011, current GUID: 1011.
Faction: 1876.
npcFlags: 2.
Entry: 23434.
DisplayID: 21505 (Native: 21505).
Level: 71.
EquipmentId: 1 (Original: 1).
Health (base): 57440. (max): 57440. (current): 57440.
InhabitType: 3
Unit Flags: 32768
UNIT_FLAG_UNK_15 (0x8000)
Unit Flags 2: 2048.
Dynamic Flags: 8.
Faction Template: 1876.
SpawnTime: Full:3m Remain:0s
Loot: 0 Pickpocket: 0 Skinning: 0
InstanceID: 0
Phasemask: 1
Armor: 7007
Position: -4106.569824 1126.790039 43.644100.
AIName:  ScriptName: 
Flags Extra: 0
* is quest giver (2)
MechanicImmuneMask: 0

Rebuilt to rev. 82f67fd09b14 2014-08-28 23:59:58 +0100 (master branch) (Win64, Release)
TDB 355 + updates up to and including 2014_08_28_06_world_command.sql

Restarted effort to replicate this issue, found that I had to start with the Netherwing Quest chain Kindness, leading up neutral rep with the Netherwing faction. Instead of doing the dailies I used GM commands to raise rep to gain access to more quests and also trying to follow all other quests around Sanctum of the Stars to be able to receive Deadliest Trap Ever Laid from Commander Hobb. Still got more testing ahead.

Confirmed. Issue seems unchanged, both in rev. 82f67fd 2014-08-28 23:59:58 +0100 (master branch) (Win64, Release) (TDB 355 + updates up to and including 2014_08_28_06_world_command.sql)
as well as in earlier releases. Commander Hobb only appears as a fiery 2H axe, even if char has raised reputation with the Netherwing to Revered, Scryer=Friendly. I think the GUID of Commander Hobb should be higher than 1011, seeing that the other NPCs around use GUID values higher than 65000.

.npc info , Commander Hobb (still looking like the fiery axe) :

Player selected NPC
DB GUID: 1011, current GUID: 1011.
Faction: 1876.
npcFlags: 2.
Entry: 23434.
DisplayID: 21342 (Native: 21342).
Level: 71.
EquipmentId: 1 (Original: 1).
Health (base): 57440. (max): 57440. (current): 57440.
InhabitType: 3
Unit Flags: 32768
UNIT_FLAG_UNK_15 (0x8000)
Unit Flags 2: 2048.
Dynamic Flags: 8.
Faction Template: 1876.
SpawnTime: Full:3m Remain:0s
Loot: 0 Pickpocket: 0 Skinning: 0
InstanceID: 0
Phasemask: 1
Armor: 5714
Position: -4106.569824 1126.790039 43.644100.
AIName:  ScriptName: 
Flags Extra: 0
* is quest giver (2)
MechanicImmuneMask: 0

Why he does not react or start the quest script, is beyond me at the moment.

Just to clarify: the issue seems to be that Commander Hobb is invisible, both with .gm on and .gm off. Here is a picture of him from WowHead: Note that only his 2H axe is visible in-game.
Commander Hobbs

modelid_other_gender has currios datas:
possibe solution for this:

UPDATE `creature_model_info` SET `modelid_other_gender`=21505 WHERE  `modelid`=21505;

... and the npc will be visible.

next step would be to find out the texts of the npc during the event,
the number of hostile npcs, their id's and spawnpositions.
i saw in several videos, that all hostile npcs despawn after a specific time and the quest will be completed for the player.
so what will initializise the 'fail' for that quest.
Must all friendly spawned npcs be dead if the quest gets failed, or commander hobb must be dead?

Yes, that made him visible. Oddly enough, I thought no change was made because of this:

UPDATE `creature_model_info` SET `modelid_other_gender`=21505 WHERE  `modelid`=21505;
/* Affected rows: 1  Found rows: 0  Warnings: 0  Duration for 1 query: 0,000 sec. */

(Looking at the Found rows: 0 and Duration for 1 query: 0,000 sec. parts. But it worked just fine.)

Edit: I can hardly believe that nobody thought of something as simple as that before, but that's perhaps because nobody took the time to look at the NPC info... :smirk: Anyway, I guess it's the event that is the main question here, so... that kind of explains it.

Hah, all it took was to Google "Commander Hobb yells" and Voila! :
https://github.com/FeenixServerProject/Archangel_2.4.3_Bugtracker/issues/1187 (same issue, different project(still open))
This comment is gold: https://github.com/FeenixServerProject/Archangel_2.4.3_Bugtracker/issues/1187#issuecomment-39061526

Quest The Deadliest Trap Ever Laid (Horde) (ported from #3158)

Sanctum Defender. He should be friendly for Alliance/Horde. He is missing the spell Shoot. I can't check him and his weapons, he doesn't spawn.
Dragonmaw Skybreaker. He is missing the spells Aimed Shot, Multi-Shot, Scatter Shot, Shoot. I can't check him or his weapons, he doesn't spawn. He should be immune to stun. When aggro'ed, he says:

Dragonmaw Skybreaker yells: BURN IT DOWN!
Dragonmaw Skybreaker yells: KILL THEM ALL!
Dragonmaw Skybreaker says: For the Dragonmaw!
Dragonmaw Skybreaker says: Long live the Dragonmaw! Die you worthless Commander Hobb!
Dragonmaw Skybreaker says: Long live the Dragonmaw! Die you worthless Sanctum Defender!
Dragonmaw Skybreaker says: Your bones will break under my boot, Sanctum Defender!

Commander Hobb. Missing spells: Aimed Shot, Multi-Shot, Shoot. I can't check if he is missing bow or not (Sunfury Bow of the Phoenix, same model, but red colored). Sometimes his body is invisible (happens after restarts and disconnects, maybe he trying to use another model). [Fixed]
[He has wrong spawn point](http://s14.postimg.org/8gt9vvd9t/Wo_WScrn_Shot_122413_195532.jpg), should spawn at (56.4, 58.7). The event takes place in front of the zone "Sanctum of the Stars". Video: Netherwing Ledge - Deadliest Trap Ever Laid

  • Commander Hobb yells: Defenders, show these mongrels the fury of a Scryer! at (56.4, 58.7)
  • Commander Hobb runs to (57.0, 58.0) - (57.4, 57.7)
  • Commander Hobb turns 180 degrees (57.4, 57.7)
  • Commander Hobb says: Stand tall, soldiers. Show them no quarter!
  • Commander Hobb turns back
  • Commander Hobb equips bow
  • First wave:

    • 2 Dragonmaw Skybreakers spawning at (57.2, 57.2)

    • 4 Dragonmaw Skybreakers spawning at (57.4, 57.8)

    • 3 Dragonmaw Skybreakers spawning at (57.6, 58.4)

  • When one Dragonmaw Skybreaker dies, he immediately despawns and new one spawn and flies to his point. As I understand, there are three waves for each mob.
  • After completing quest, Commander Hobb yells: Victory to the Scryers! The Dragonmaw have been defeated!
  • Commander Hobb runs to (57.4, 57.7) - (57.0, 58.0) - (56.4, 58.7)

According to the comments on Wowhead.com, the player can die, resurrect (multiple times?) and still complete the quest. I presume only the death of Commander Hobb will trigger "Quest Failed", but I don't have any documentation for that - yet. Edit: This assumption is made on basis of the comments where users describe how to solo this quest by focusing on the mobs attacking Hobb.

okay some basic work will be

/*####
 ## npc_commander_hobb
 ## Quest: The Deadliest Trap Ever Laid
 ####*/

enum HobbMisc
{
    SAY_BEGIN                      = 0,
    SAY_ATTACK                     = 1,
    SAY_END                        = 2,
    NPC_DRAGONMAW_SKYBREAKER_ONE   = 22274, // unused
    NPC_DRAGONMAW_SKYBREAKER_TWO   = 23440, 
    NPC_DRAGONMAW_SKYBREAKER_THREE = 23441, // unused
    NPC_SANCTUM_DEFENDER           = 23435,
    SPELL_AIMED_SHOT               = 38370,
    SPELL_MULI_SHOT                = 41448,
    SPELL_SHOOT                    = 41440,
    EVENT_START_WP                 = 1,
    EVENT_SPAWN_GUARD              = 2,
    EVENT_SAY_ATTACK               = 3,
    EVENT_SPAWN_ONE                = 4,
    EVENT_SPAWN_TWO                = 5,
    EVENT_SPAWN_THREE              = 6,
    EVENT_SPAWN_FOUR               = 7,
    EVENT_SPAWN_FIVE               = 8,
    EVENT_DESPAWN                  = 9,
    ACTION_START                   = 0,
    QUEST_DEADLIEST_TRAP           = 11097,
    NPC_COMMANDER_HOPP             = 23434
};

Position const GuardsPos[10] =
{
    {-4086.503662f, 1065.057617f, 31.350611f, 4.766143f},
    {-4080.797363f, 1065.430054f, 31.190235f, 4.532879f},
    {-4080.992676f, 1071.929810f, 31.664232f, 4.705667f},
    {-4084.207031f, 1069.164673f, 31.715506f, 4.784990f},
    {-4076.614990f, 1072.137939f, 31.158127f, 4.879239f},
    {-4075.368408f, 1068.156616f, 30.809317f, 5.020610f},
    {-4073.453857f, 1070.877197f, 30.736773f, 5.064565f},
    {-4071.126953f, 1076.464844f, 31.704157f, 5.229500f},
    {-4067.632324f, 1071.246094f, 30.546251f, 5.317856f},
    {-4065.033936f, 1075.178711f, 31.172022f, 5.423888f},
};

Position const SkybreakerPos[1] =
{
    {-4086.503662f, 1065.057617f, 31.350611f, 4.766143f},
};

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

        bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest) 
        {
            if (quest->GetQuestId() == QUEST_DEADLIEST_TRAP)
            {
                creature->AI()->Talk(SAY_BEGIN, player->GetGUID());
                creature->AI()->DoAction(ACTION_START);
            }
        return true;
        }

    struct npc_commander_hobbAI : public ScriptedAI
    {
        npc_commander_hobbAI(Creature* creature) : ScriptedAI(creature) { }

        uint32 AimedShootTimer;
        uint32 MultiShootTimer;
        uint32 ShootTimer;

        void Reset()
        {
            AimedShootTimer =  5 *IN_MILLISECONDS;
            MultiShootTimer =  8 *IN_MILLISECONDS;
            ShootTimer      = 15 *IN_MILLISECONDS;
            events.Reset();
        }

        void DoAction(int32 action)
        {
            if (action == ACTION_START)
            {
                events.ScheduleEvent(EVENT_START_WP, 2*IN_MILLISECONDS);
            }
        }

        void SpawnSkybreaker()
        {
            for (int i = 0; i < 1; ++i)
                me->SummonCreature(NPC_DRAGONMAW_SKYBREAKER_TWO, SkybreakerPos[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 120000);
        }

        void CompleteQuest()
        {
            if (Map *map = me->GetMap())
            {
                Map::PlayerList const &PlayerList = map->GetPlayers();
                for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
                {
                    if (Player *player = i->GetSource())
                    {
                        if (me->IsInRange(player, 0.0f, 100.0f))
                            player->CompleteQuest(QUEST_DEADLIEST_TRAP);
                    }
                }
            }
        }

        void JustDied(Unit* /*victim*/)
        {
            events.Reset();
            std::list<Player*> players = me->GetNearestPlayersList(100.0f);
            for (std::list<Player*>::const_iterator pitr = players.begin(); pitr != players.end(); ++pitr)
            {
                Player* player = *pitr;
                if (player->GetQuestStatus(QUEST_DEADLIEST_TRAP) == QUEST_STATUS_INCOMPLETE)
                {
                    player->FailQuest(QUEST_DEADLIEST_TRAP);
                }
            }
        }

        void UpdateAI(uint32 diff)
        {
            if (!UpdateVictim())
                return;

            events.Update(diff);

            switch (events.ExecuteEvent())
            {
                case EVENT_START_WP:
                    me->SetReactState(REACT_AGGRESSIVE);
                    me->GetMotionMaster()->MovePath(NPC_COMMANDER_HOPP * 10, false);
                    events.ScheduleEvent(EVENT_SPAWN_GUARD, 3*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_GUARD:
                    for (int i = 0; i < 10; ++i)
                        me->SummonCreature(NPC_SANCTUM_DEFENDER, GuardsPos[i], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 360000);
                    events.ScheduleEvent(EVENT_SAY_ATTACK, 5*IN_MILLISECONDS);
                    break;
                case EVENT_SAY_ATTACK:
                    Talk(SAY_ATTACK);
                    events.ScheduleEvent(EVENT_SPAWN_ONE, 5*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_ONE:
                    SpawnSkybreaker();
                    events.ScheduleEvent(EVENT_SPAWN_TWO, 40*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_TWO:
                    SpawnSkybreaker();
                    events.ScheduleEvent(EVENT_SPAWN_THREE, 40*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_THREE:
                    SpawnSkybreaker();
                    events.ScheduleEvent(EVENT_SPAWN_FOUR, 40*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_FOUR:
                    SpawnSkybreaker();
                    events.ScheduleEvent(EVENT_SPAWN_FIVE, 40*IN_MILLISECONDS);
                    break;
                case EVENT_SPAWN_FIVE:
                    SpawnSkybreaker();
                    events.ScheduleEvent(EVENT_DESPAWN, 40*IN_MILLISECONDS);
                    break;
                case EVENT_DESPAWN:
                    Talk(SAY_END);
                    me->SetReactState(REACT_PASSIVE);
                    CompleteQuest();
                    me->GetMotionMaster()->MovePath(NPC_COMMANDER_HOPP * 100, false);
                    break;
                default:
                    break;
            }

            if (me->GetVictim())
            {
                if (AimedShootTimer <= diff)
                {
                    DoCastVictim(SPELL_AIMED_SHOT, true);
                    AimedShootTimer = urand(25, 30)*IN_MILLISECONDS;
                }
                else AimedShootTimer -= diff;

                if (MultiShootTimer <= diff)
                {
                    DoCastVictim(SPELL_MULI_SHOT, true);
                    MultiShootTimer = urand(10, 30)*IN_MILLISECONDS;
                }
                else AimedShootTimer -= diff;

                if (ShootTimer <= diff)
                {
                    DoCastVictim(SPELL_SHOOT, true);
                    ShootTimer = urand(20, 30)*IN_MILLISECONDS;
                }
                else ShootTimer -= diff;

                DoMeleeAttackIfReady();
            }
        }
    private:
        EventMap events;
    };

    CreatureAI* GetAI(Creature* creature) const
    {
        return new npc_commander_hobbAI(creature);
    }

};

but this needs still some point:
Commander Hobb turns back - missing
Dragonmaw Skybreakers spawn - missing

i will add the texts, and waypoints soon.

Nice work, looks impressive to a non-programmer such as myself. But I thought that Hobb turns at the last point he runs to, something like this: (57.4, 57.7) - Commander Hobb turns 180 degrees (edit: to address the Sanctum Defenders)

I also thought that the spawn points for the Dragonmaw Skybreakers was like I mentioned:

  • 2 Dragonmaw Skybreakers at (57.2, 57.2)
  • 4 Dragonmaw Skybreakers at (57.4, 57.8)
  • 3 Dragonmaw Skybreakers at (57.6, 58.4)

Maybe there is something I misunderstood?

Maybe a bit excessive, but issue is still present in rev. dd4dbdcd16bb 2014-08-31 20:42:02 +0200 (master branch) (Win64, Release), TDB 355.55 + updates inc. 2014_08_31_02_world_spell_script_names.sql .
Re-entering the above script from @Rushor to make Commander Hobb visible again:

UPDATE `creature_model_info` SET `modelid_other_gender`=21505 WHERE  `modelid`=21505;

noone commited my changes ^^
a less hacky solution would be to set the modelid instantly, in the Reset-Call of the npc.
but i am not confident with the whole script and i will not create a pr :D

OK, I see. Thanks for the update. :smirk_cat: What about adding only the visibility line to core? :pencil:
Edit: perhaps I should make a separate issue just for Commander Hobb's invisibility?

I just noticed something odd about the NPCs around the Sanctum of the Stars. If you go there as a hunter with Track Humanoids on, you will see less than half of the NPCs shown in the minimap as humanoids:

| NPC trackable as humanoid | NPC ID | Untrackable NPC | NPC ID |
| :-- | :-: | :-- | :-: |
| Alorya, General Goods | 19625 | Scryer Guardian (13 guards) | 19504 |
| Belanna | 19626 | Alorra | 19517 |
| Sulamin | 19627 | Feranin, Food & Drink | 19518 |
| Furan | 19628 | Lelagar, Blacksmithing Supplies | 19520 |
| Roldemar, Innkeeper | 21744 | Arrond, Tailoring Supplies | 19521 |
| Alieshor, Flight Master | 21766 | Larissa Sunstrike | 21954 |
| | | Arcanist Thelis | 21955 |
| Commander Hobb | 23434 | Battlemage Vyara | 22211 |

Scryer Guardian - .npc info

Player selected NPC
DB GUID: 69885, current GUID: 69885.
Faction: 1838.
npcFlags: 0.
Entry: 19504.
DisplayID: 18943 (Native: 18943).
Level: 70.
EquipmentId: 1 (Original: 1).
Health (base): 5589. (max): 5589. (current): 5589.
InhabitType: 3
Unit Flags: 32768
UNIT_FLAG_UNK_15 (0x8000)
Unit Flags 2: 2048.
Dynamic Flags: 0.
Faction Template: 1838.
SpawnTime: Full:5m Remain:0s
Loot: 0 Pickpocket: 0 Skinning: 0
InstanceID: 0
Phasemask: 1
Armor: 5474
Position: -4067.979980 1115.390015 40.846500.
AIName:  ScriptName: 
Flags Extra: 0
MechanicImmuneMask: 0

Holy shit, tables!

P.S Excuse my side note

@Rushor : if you review your suggestions above, have you got any new thoughts on this? :smirk_cat:
Do you think there is anything in here worth a write-up or a PR?

Can be converted to SAI using the 10 phases available in SAI. I used the C++ script once only because of these phases, but at that time I didn't know that there a several phases which can also be used in SAI. ^^

:+1: Thanks, that sounds very positive. :+1: Looking forward to hear more, if you or @Killyana have got time to look at this issue again. :smirk_cat:

Anything here is valid? if yes, open a PR for it, if it can be done on SAI no.

Anything new with this?

If anyone can sniff \ share sniff with Aldor (https://tcubuntu.northeurope.cloudapp.azure.com/aowow/?quest=11101) version of this quest, I can script it too
Actually we can use https://github.com/cmangos/mangos-tbc/commit/4b2a388a2d2c26ee94b0b148a0d353eb32b9fe61 but compare with sniff is always better

Disabled ^

why disabled?

People are whining because of SetActive
No script - no problem

I hate to see hard work going into working content - only to have it removed. I'll be leaving my scripts in place for now.

However, moving forward, what is needed for a solution that satisfies? Is it the sniff request from a few posts ago?

I don't like how you phrased that "people are whining because of SetActive" - it is a fact that using it causes performance problems on the server (see #26048)

I don鈥檛 think there鈥檚 any other solution to this as without set active if grid unloads npcs summoned by event will just remain thrrr and event will never fail as nothing will happen.

and why is this marked as priority-cosmetic when if quest does not work it鈥檚 not cosmetic

and why is this marked as priority-cosmetic when if quest does not work it鈥檚 not cosmetic

I can only assume that the discussion around Commander Hobb being invisible may have taken away focus from the "Quest can not be completed" part of the issue.

I don't like how you phrased that "people are whining because of SetActive" - it is a fact that using it causes performance problems on the server (see #26048)

Fair enough, but where does that leave us? Do we need a less performance-reducing method of spawning NPCs and keeping them moving beyond the player's view distance, while also making sure that the creatures despawn properly before the event is over? I don't know coding well enough, but it seems to me like the wheel needs to be reinvented.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

Keader picture Keader  路  3Comments

Rushor picture Rushor  路  3Comments

besplash picture besplash  路  3Comments

DDuarte picture DDuarte  路  3Comments

ZenoX92 picture ZenoX92  路  3Comments