diff options
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/World/go_scripts.cpp | 1252 | 
1 files changed, 660 insertions, 592 deletions
diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 266b616c7d4..d0b35a47050 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -60,83 +60,118 @@ enum eCatFigurine      SPELL_SUMMON_GHOST_SABER    = 5968,  }; -bool GOHello_go_cat_figurine(Player *pPlayer, GameObject * /*pGO*/) +class go_cat_figurine : public GameObjectScript  { -    pPlayer->CastSpell(pPlayer,SPELL_SUMMON_GHOST_SABER,true); -    return false; -} +public: +    go_cat_figurine() : GameObjectScript("go_cat_figurine") { } + +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/) +    { +        pPlayer->CastSpell(pPlayer,SPELL_SUMMON_GHOST_SABER,true); +        return false; +    } +};  /*######  ## go_crystal_pylons (3x)  ######*/ - -bool GOHello_go_northern_crystal_pylon(Player *pPlayer, GameObject *pGO) +class go_northern_crystal_pylon : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +public: +    go_northern_crystal_pylon() : GameObjectScript("go_northern_crystal_pylon") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pPlayer->PrepareQuestMenu(pGO->GetGUID()); -        pPlayer->SendPreparedQuest(pGO->GetGUID()); -    } +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +        { +            pPlayer->PrepareQuestMenu(pGO->GetGUID()); +            pPlayer->SendPreparedQuest(pGO->GetGUID()); +        } -    if (pPlayer->GetQuestStatus(4285) == QUEST_STATUS_INCOMPLETE) -        pPlayer->AreaExploredOrEventHappens(4285); +        if (pPlayer->GetQuestStatus(4285) == QUEST_STATUS_INCOMPLETE) +            pPlayer->AreaExploredOrEventHappens(4285); -    return true; -} +        return true; +    } +}; -bool GOHello_go_eastern_crystal_pylon(Player *pPlayer, GameObject *pGO) +class go_eastern_crystal_pylon : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +public: +    go_eastern_crystal_pylon() : GameObjectScript("go_eastern_crystal_pylon") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pPlayer->PrepareQuestMenu(pGO->GetGUID()); -        pPlayer->SendPreparedQuest(pGO->GetGUID()); -    } +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +        { +            pPlayer->PrepareQuestMenu(pGO->GetGUID()); +            pPlayer->SendPreparedQuest(pGO->GetGUID()); +        } -    if (pPlayer->GetQuestStatus(4287) == QUEST_STATUS_INCOMPLETE) -        pPlayer->AreaExploredOrEventHappens(4287); +        if (pPlayer->GetQuestStatus(4287) == QUEST_STATUS_INCOMPLETE) +            pPlayer->AreaExploredOrEventHappens(4287); -    return true; -} +        return true; +    } +}; -bool GOHello_go_western_crystal_pylon(Player *pPlayer, GameObject *pGO) +class go_western_crystal_pylon : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +public: +    go_western_crystal_pylon() : GameObjectScript("go_western_crystal_pylon") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pPlayer->PrepareQuestMenu(pGO->GetGUID()); -        pPlayer->SendPreparedQuest(pGO->GetGUID()); -    } +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) +        { +            pPlayer->PrepareQuestMenu(pGO->GetGUID()); +            pPlayer->SendPreparedQuest(pGO->GetGUID()); +        } -    if (pPlayer->GetQuestStatus(4288) == QUEST_STATUS_INCOMPLETE) -        pPlayer->AreaExploredOrEventHappens(4288); +        if (pPlayer->GetQuestStatus(4288) == QUEST_STATUS_INCOMPLETE) +            pPlayer->AreaExploredOrEventHappens(4288); -    return true; -} +        return true; +    } +};  /*######  ## go_barov_journal  ######*/ -bool GOHello_go_barov_journal(Player *pPlayer, GameObject * /*pGO*/) +class go_barov_journal : public GameObjectScript  { -    if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !pPlayer->HasSpell(26086)) +public: +    go_barov_journal() : GameObjectScript("go_barov_journal") { } + +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/)      { -        pPlayer->CastSpell(pPlayer,26095,false); +        if (pPlayer->HasSkill(SKILL_TAILORING) && pPlayer->GetBaseSkillValue(SKILL_TAILORING) >= 280 && !pPlayer->HasSpell(26086)) +        { +            pPlayer->CastSpell(pPlayer,26095,false); +        } +        return true;      } -    return true; -} +};  /*######  ## go_field_repair_bot_74A  ######*/ -bool GOHello_go_field_repair_bot_74A(Player *pPlayer, GameObject * /*pGO*/) +class go_field_repair_bot_74A : public GameObjectScript  { -    if (pPlayer->HasSkill(SKILL_ENGINERING) && pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 300 && !pPlayer->HasSpell(22704)) +public: +    go_field_repair_bot_74A() : GameObjectScript("go_field_repair_bot_74A") { } + +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/)      { -        pPlayer->CastSpell(pPlayer,22864,false); +        if (pPlayer->HasSkill(SKILL_ENGINERING) && pPlayer->GetBaseSkillValue(SKILL_ENGINERING) >= 300 && !pPlayer->HasSpell(22704)) +        { +            pPlayer->CastSpell(pPlayer,22864,false); +        } +        return true;      } -    return true; -} +};  /*######  ## go_gilded_brazier (Paladin First Trail quest (9678)) @@ -147,71 +182,101 @@ enum eGildedBrazier      NPC_STILLBLADE  = 17716,  }; -bool GOHello_go_gilded_brazier(Player *pPlayer, GameObject *pGO) +class go_gilded_brazier : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) +public: +    go_gilded_brazier() : GameObjectScript("go_gilded_brazier") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        if (pPlayer->GetQuestStatus(9678) == QUEST_STATUS_INCOMPLETE) +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER)          { -            if (Creature* Stillblade = pPlayer->SummonCreature(NPC_STILLBLADE, 8106.11, -7542.06, 151.775, 3.02598, TEMPSUMMON_DEAD_DESPAWN, 60000)) -                Stillblade->AI()->AttackStart(pPlayer); +            if (pPlayer->GetQuestStatus(9678) == QUEST_STATUS_INCOMPLETE) +            { +                if (Creature* Stillblade = pPlayer->SummonCreature(NPC_STILLBLADE, 8106.11, -7542.06, 151.775, 3.02598, TEMPSUMMON_DEAD_DESPAWN, 60000)) +                    Stillblade->AI()->AttackStart(pPlayer); +            }          } +        return true;      } -    return true; -} +};  /*######  ## go_orb_of_command  ######*/ -bool GOHello_go_orb_of_command(Player *pPlayer, GameObject * /*pGO*/) +class go_orb_of_command : public GameObjectScript  { -    if (pPlayer->GetQuestRewardStatus(7761)) -        pPlayer->CastSpell(pPlayer,23460,true); +public: +    go_orb_of_command() : GameObjectScript("go_orb_of_command") { } -    return true; -} +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/) +    { +        if (pPlayer->GetQuestRewardStatus(7761)) +            pPlayer->CastSpell(pPlayer,23460,true); + +        return true; +    } +};  /*######  ## go_tablet_of_madness  ######*/ -bool GOHello_go_tablet_of_madness(Player *pPlayer, GameObject * /*pGO*/) +class go_tablet_of_madness : public GameObjectScript  { -    if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetSkillValue(SKILL_ALCHEMY) >= 300 && !pPlayer->HasSpell(24266)) +public: +    go_tablet_of_madness() : GameObjectScript("go_tablet_of_madness") { } + +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/)      { -        pPlayer->CastSpell(pPlayer,24267,false); +        if (pPlayer->HasSkill(SKILL_ALCHEMY) && pPlayer->GetSkillValue(SKILL_ALCHEMY) >= 300 && !pPlayer->HasSpell(24266)) +        { +            pPlayer->CastSpell(pPlayer,24267,false); +        } +        return true;      } -    return true; -} +};  /*######  ## go_tablet_of_the_seven  ######*/ -//TODO: use gossip option ("Transcript the Tablet") instead, if Trinity adds support. -bool GOHello_go_tablet_of_the_seven(Player *pPlayer, GameObject *pGO) +class go_tablet_of_the_seven : public GameObjectScript  { -    if (pGO->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) -        return true; +public: +    go_tablet_of_the_seven() : GameObjectScript("go_tablet_of_the_seven") { } -    if (pPlayer->GetQuestStatus(4296) == QUEST_STATUS_INCOMPLETE) -        pPlayer->CastSpell(pPlayer,15065,false); +    //TODO: use gossip option ("Transcript the Tablet") instead, if Trinity adds support. +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        if (pGO->GetGoType() != GAMEOBJECT_TYPE_QUESTGIVER) +            return true; -    return true; -} +        if (pPlayer->GetQuestStatus(4296) == QUEST_STATUS_INCOMPLETE) +            pPlayer->CastSpell(pPlayer,15065,false); + +        return true; +    } +};  /*#####  ## go_jump_a_tron  ######*/ -bool GOHello_go_jump_a_tron(Player *pPlayer, GameObject * /*pGO*/) +class go_jump_a_tron : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE) -     pPlayer->CastSpell(pPlayer,33382,true); +public: +    go_jump_a_tron() : GameObjectScript("go_jump_a_tron") { } -    return true; -} +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/) +    { +        if (pPlayer->GetQuestStatus(10111) == QUEST_STATUS_INCOMPLETE) +         pPlayer->CastSpell(pPlayer,33382,true); + +        return true; +    } +};  /*######  ## go_ethereum_prison @@ -233,40 +298,46 @@ const uint32 NpcPrisonEntry[] =      20783, 20784, 20785, 20786, 20788, 20789, 20790         //bad guys  }; -bool GOHello_go_ethereum_prison(Player *pPlayer, GameObject *pGO) +class go_ethereum_prison : public GameObjectScript  { -    int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32)); +public: +    go_ethereum_prison() : GameObjectScript("go_ethereum_prison") { } -    if (Creature* pCreature = pPlayer->SummonCreature(NpcPrisonEntry[Random], -        pGO->GetPositionX(), pGO->GetPositionY(), pGO->GetPositionZ(), pGO->GetAngle(pPlayer), -        TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        if (!pCreature->IsHostileTo(pPlayer)) -        { -            uint32 Spell = 0; +        int Random = rand() % (sizeof(NpcPrisonEntry) / sizeof(uint32)); -            if (FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry()) +        if (Creature* pCreature = pPlayer->SummonCreature(NpcPrisonEntry[Random], +            pGO->GetPositionX(), pGO->GetPositionY(), pGO->GetPositionZ(), pGO->GetAngle(pPlayer), +            TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000)) +        { +            if (!pCreature->IsHostileTo(pPlayer))              { -                switch(pFaction->faction) +                uint32 Spell = 0; + +                if (FactionTemplateEntry const* pFaction = pCreature->getFactionTemplateEntry())                  { -                    case 1011: Spell = SPELL_REP_LC; break; -                    case 935: Spell = SPELL_REP_SHAT; break; -                    case 942: Spell = SPELL_REP_CE; break; -                    case 933: Spell = SPELL_REP_CON; break; -                    case 989: Spell = SPELL_REP_KT; break; -                    case 970: Spell = SPELL_REP_SPOR; break; +                    switch(pFaction->faction) +                    { +                        case 1011: Spell = SPELL_REP_LC; break; +                        case 935: Spell = SPELL_REP_SHAT; break; +                        case 942: Spell = SPELL_REP_CE; break; +                        case 933: Spell = SPELL_REP_CON; break; +                        case 989: Spell = SPELL_REP_KT; break; +                        case 970: Spell = SPELL_REP_SPOR; break; +                    } + +                    if (Spell) +                        pCreature->CastSpell(pPlayer, Spell, false); +                    else +                        sLog.outError("TSCR: go_ethereum_prison summoned Creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction());                  } - -                if (Spell) -                    pCreature->CastSpell(pPlayer, Spell, false); -                else -                    sLog.outError("TSCR: go_ethereum_prison summoned Creature (entry %u) but faction (%u) are not expected by script.", pCreature->GetEntry(), pCreature->getFaction());              }          } -    } -    return false; -} +        return false; +    } +};  /*######  ## go_ethereum_stasis @@ -277,16 +348,22 @@ const uint32 NpcStasisEntry[] =      22825, 20888, 22827, 22826, 22828  }; -bool GOHello_go_ethereum_stasis(Player *pPlayer, GameObject *pGO) +class go_ethereum_stasis : public GameObjectScript  { -    int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32)); +public: +    go_ethereum_stasis() : GameObjectScript("go_ethereum_stasis") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        int Random = rand() % (sizeof(NpcStasisEntry) / sizeof(uint32)); -    pPlayer->SummonCreature(NpcStasisEntry[Random], -        pGO->GetPositionX(), pGO->GetPositionY(), pGO->GetPositionZ(), pGO->GetAngle(pPlayer), -        TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +        pPlayer->SummonCreature(NpcStasisEntry[Random], +            pGO->GetPositionX(), pGO->GetPositionY(), pGO->GetPositionZ(), pGO->GetAngle(pPlayer), +            TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); -    return false; -} +        return false; +    } +};  /*######  ## go_resonite_cask @@ -297,13 +374,19 @@ enum eResoniteCask      NPC_GOGGEROC    = 11920  }; -bool GOHello_go_resonite_cask(Player * /*pPlayer*/, GameObject *pGO) +class go_resonite_cask : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) -        pGO->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); +public: +    go_resonite_cask() : GameObjectScript("go_resonite_cask") { } -    return false; -} +    bool OnGossipHello(Player * /*pPlayer*/, GameObject *pGO) +    { +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) +            pGO->SummonCreature(NPC_GOGGEROC, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 300000); + +        return false; +    } +};  /*######  ## go_sacred_fire_of_life @@ -311,13 +394,19 @@ bool GOHello_go_resonite_cask(Player * /*pPlayer*/, GameObject *pGO)  #define NPC_ARIKARA  10882 -bool GOHello_go_sacred_fire_of_life(Player *pPlayer, GameObject *pGO) +class go_sacred_fire_of_life : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) -        pPlayer->SummonCreature(NPC_ARIKARA, -5008.338, -2118.894, 83.657, 0.874, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +public: +    go_sacred_fire_of_life() : GameObjectScript("go_sacred_fire_of_life") { } -    return true; -} +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) +            pPlayer->SummonCreature(NPC_ARIKARA, -5008.338, -2118.894, 83.657, 0.874, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + +        return true; +    } +};  /*######  ## go_shrine_of_the_birds @@ -333,31 +422,37 @@ enum eShrineOfTheBirds      GO_SHRINE_FALCON    = 185553  }; -bool GOHello_go_shrine_of_the_birds(Player *pPlayer, GameObject *pGO) +class go_shrine_of_the_birds : public GameObjectScript  { -    uint32 BirdEntry = 0; - -    float fX, fY, fZ; -    pGO->GetClosePoint(fX, fY, fZ, pGO->GetObjectSize(), INTERACTION_DISTANCE); +public: +    go_shrine_of_the_birds() : GameObjectScript("go_shrine_of_the_birds") { } -    switch(pGO->GetEntry()) +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        case GO_SHRINE_HAWK: -            BirdEntry = NPC_HAWK_GUARD; -            break; -        case GO_SHRINE_EAGLE: -            BirdEntry = NPC_EAGLE_GUARD; -            break; -        case GO_SHRINE_FALCON: -            BirdEntry = NPC_FALCON_GUARD; -            break; -    } +        uint32 BirdEntry = 0; -    if (BirdEntry) -        pPlayer->SummonCreature(BirdEntry, fX, fY, fZ, pGO->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); +        float fX, fY, fZ; +        pGO->GetClosePoint(fX, fY, fZ, pGO->GetObjectSize(), INTERACTION_DISTANCE); -    return false; -} +        switch(pGO->GetEntry()) +        { +            case GO_SHRINE_HAWK: +                BirdEntry = NPC_HAWK_GUARD; +                break; +            case GO_SHRINE_EAGLE: +                BirdEntry = NPC_EAGLE_GUARD; +                break; +            case GO_SHRINE_FALCON: +                BirdEntry = NPC_FALCON_GUARD; +                break; +        } + +        if (BirdEntry) +            pPlayer->SummonCreature(BirdEntry, fX, fY, fZ, pGO->GetOrientation(), TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 60000); + +        return false; +    } +};  /*######  ## go_southfury_moonstone @@ -368,19 +463,24 @@ enum eSouthfury      NPC_RIZZLE                  = 23002,      SPELL_BLACKJACK             = 39865, //stuns player      SPELL_SUMMON_RIZZLE         = 39866 -  }; -bool GOHello_go_southfury_moonstone(Player *pPlayer, GameObject * /*pGO*/) +class go_southfury_moonstone : public GameObjectScript  { -    //implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose -    //pPlayer->CastSpell(pPlayer,SPELL_SUMMON_RIZZLE,false); +public: +    go_southfury_moonstone() : GameObjectScript("go_southfury_moonstone") { } -    if (Creature* pCreature = pPlayer->SummonCreature(NPC_RIZZLE, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0)) -        pCreature->CastSpell(pPlayer,SPELL_BLACKJACK,false); +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/) +    { +        //implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose +        //pPlayer->CastSpell(pPlayer,SPELL_SUMMON_RIZZLE,false); -    return false; -} +        if (Creature* pCreature = pPlayer->SummonCreature(NPC_RIZZLE, 0.0f, 0.0f, 0.0f, 0.0f, TEMPSUMMON_DEAD_DESPAWN, 0)) +            pCreature->CastSpell(pPlayer,SPELL_BLACKJACK,false); + +        return false; +    } +};  /*######  ## go_tele_to_dalaran_crystal @@ -393,30 +493,41 @@ enum eDalaranCrystal  };  #define GO_TELE_TO_DALARAN_CRYSTAL_FAILED   "This teleport crystal cannot be used until the teleport crystal in Dalaran has been used at least once." - -bool GOHello_go_tele_to_dalaran_crystal(Player *pPlayer, GameObject * /*pGO*/) +class go_tele_to_dalaran_crystal : public GameObjectScript  { -    if (pPlayer->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG)) +public: +    go_tele_to_dalaran_crystal() : GameObjectScript("go_tele_to_dalaran_crystal") { } + +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/)      { -        return false; -    } -    else -        pPlayer->GetSession()->SendNotification(GO_TELE_TO_DALARAN_CRYSTAL_FAILED); +        if (pPlayer->GetQuestRewardStatus(QUEST_TELE_CRYSTAL_FLAG)) +        { +            return false; +        } +        else +            pPlayer->GetSession()->SendNotification(GO_TELE_TO_DALARAN_CRYSTAL_FAILED); -    return true; -} +        return true; +    } +};  /*######  ## go_tele_to_violet_stand  ######*/ -bool GOHello_go_tele_to_violet_stand(Player *pPlayer, GameObject * /*pGO*/) +class go_tele_to_violet_stand : public GameObjectScript  { -    if (pPlayer->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || pPlayer->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE) -        return false; +public: +    go_tele_to_violet_stand() : GameObjectScript("go_tele_to_violet_stand") { } -    return true; -} +    bool OnGossipHello(Player *pPlayer, GameObject * /*pGO*/) +    { +        if (pPlayer->GetQuestRewardStatus(QUEST_LEARN_LEAVE_RETURN) || pPlayer->GetQuestStatus(QUEST_LEARN_LEAVE_RETURN) == QUEST_STATUS_INCOMPLETE) +            return false; + +        return true; +    } +};  /*######  ## go_fel_crystalforge @@ -434,41 +545,47 @@ enum eFelCrystalforge      SPELL_CREATE_5_FLASK_OF_BEAST   = 40965,  }; -bool GOHello_go_fel_crystalforge(Player *pPlayer, GameObject *pGO) +class go_fel_crystalforge : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ -        pPlayer->PrepareQuestMenu(pGO->GetGUID()); /* return true*/ +public: +    go_fel_crystalforge() : GameObjectScript("go_fel_crystalforge") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ +            pPlayer->PrepareQuestMenu(pGO->GetGUID()); /* return true*/ -    pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); -    pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); +        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); +        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); -    pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_TEXT, pGO->GetGUID()); +        pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_TEXT, pGO->GetGUID()); -    return true; -} +        return true; +    } -bool GOSelect_go_fel_crystalforge(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction) -{ -    switch(uiAction) +    bool OnGossipSelect(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction)      { -        case GOSSIP_ACTION_INFO_DEF: -            pPlayer->CastSpell(pPlayer,SPELL_CREATE_1_FLASK_OF_BEAST,false); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); -            break; -        case GOSSIP_ACTION_INFO_DEF + 1: -            pPlayer->CastSpell(pPlayer,SPELL_CREATE_5_FLASK_OF_BEAST,false); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); -            break; -    case GOSSIP_ACTION_INFO_DEF + 2: -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_TEXT, pGO->GetGUID()); -            break; +        switch(uiAction) +        { +            case GOSSIP_ACTION_INFO_DEF: +                pPlayer->CastSpell(pPlayer,SPELL_CREATE_1_FLASK_OF_BEAST,false); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); +                break; +            case GOSSIP_ACTION_INFO_DEF + 1: +                pPlayer->CastSpell(pPlayer,SPELL_CREATE_5_FLASK_OF_BEAST,false); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); +                break; +        case GOSSIP_ACTION_INFO_DEF + 2: +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_FEL_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_FEL_CRYSTALFORGE_TEXT, pGO->GetGUID()); +                break; +        } +        return true;      } -    return true; -} +};  /*######  ## go_bashir_crystalforge @@ -486,41 +603,47 @@ enum eBashirCrystalforge      SPELL_CREATE_5_FLASK_OF_SORCERER   = 40970,  }; -bool GOHello_go_bashir_crystalforge(Player *pPlayer, GameObject *pGO) +class go_bashir_crystalforge : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ -        pPlayer->PrepareQuestMenu(pGO->GetGUID()); /* return true*/ +public: +    go_bashir_crystalforge() : GameObjectScript("go_bashir_crystalforge") { } -    pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); -    pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_QUESTGIVER) /* != GAMEOBJECT_TYPE_QUESTGIVER) */ +            pPlayer->PrepareQuestMenu(pGO->GetGUID()); /* return true*/ -    pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_TEXT, pGO->GetGUID()); +        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); +        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); -    return true; -} +        pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_TEXT, pGO->GetGUID()); -bool GOSelect_go_bashir_crystalforge(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction) -{ -    switch(uiAction) +        return true; +    } + +    bool OnGossipSelect(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction)      { -        case GOSSIP_ACTION_INFO_DEF: -            pPlayer->CastSpell(pPlayer,SPELL_CREATE_1_FLASK_OF_SORCERER,false); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); -            break; -        case GOSSIP_ACTION_INFO_DEF + 1: -            pPlayer->CastSpell(pPlayer,SPELL_CREATE_5_FLASK_OF_SORCERER,false); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); -            break; -    case GOSSIP_ACTION_INFO_DEF + 2: -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); -            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); -            pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_TEXT, pGO->GetGUID()); -            break; +        switch(uiAction) +        { +            case GOSSIP_ACTION_INFO_DEF: +                pPlayer->CastSpell(pPlayer,SPELL_CREATE_1_FLASK_OF_SORCERER,false); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); +                break; +            case GOSSIP_ACTION_INFO_DEF + 1: +                pPlayer->CastSpell(pPlayer,SPELL_CREATE_5_FLASK_OF_SORCERER,false); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_RETURN, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+2); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_ITEM_TEXT_RETURN, pGO->GetGUID()); +                break; +            case GOSSIP_ACTION_INFO_DEF + 2: +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_1, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF); +                pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_BASHIR_CRYSTALFORGE_ITEM_5, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); +                pPlayer->SEND_GOSSIP_MENU(GOSSIP_BASHIR_CRYSTALFORGE_TEXT, pGO->GetGUID()); +                break; +        } +        return true;      } -    return true; -} +};  /*######  ## matrix_punchograph @@ -543,43 +666,49 @@ enum eMatrixPunchograph      MATRIX_PUNCHOGRAPH_3005_D = 142696,  }; -bool GOHello_go_matrix_punchograph(Player *pPlayer, GameObject *pGO) +class go_matrix_punchograph : public GameObjectScript  { -    switch(pGO->GetEntry()) +public: +    go_matrix_punchograph() : GameObjectScript("go_matrix_punchograph") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        case MATRIX_PUNCHOGRAPH_3005_A: -            if (pPlayer->HasItemCount(ITEM_WHITE_PUNCH_CARD, 1)) -            { -                pPlayer->DestroyItemCount(ITEM_WHITE_PUNCH_CARD, 1, true); -                pPlayer->CastSpell(pPlayer,SPELL_YELLOW_PUNCH_CARD,true); -            } -            break; -        case MATRIX_PUNCHOGRAPH_3005_B: -            if (pPlayer->HasItemCount(ITEM_YELLOW_PUNCH_CARD, 1)) -            { -                pPlayer->DestroyItemCount(ITEM_YELLOW_PUNCH_CARD, 1, true); -                pPlayer->CastSpell(pPlayer,SPELL_BLUE_PUNCH_CARD,true); -            } -            break; -        case MATRIX_PUNCHOGRAPH_3005_C: -            if (pPlayer->HasItemCount(ITEM_BLUE_PUNCH_CARD, 1)) -            { -                pPlayer->DestroyItemCount(ITEM_BLUE_PUNCH_CARD, 1, true); -                pPlayer->CastSpell(pPlayer,SPELL_RED_PUNCH_CARD,true); -            } -            break; -        case MATRIX_PUNCHOGRAPH_3005_D: -            if (pPlayer->HasItemCount(ITEM_RED_PUNCH_CARD, 1)) -            { -                pPlayer->DestroyItemCount(ITEM_RED_PUNCH_CARD, 1, true); -                pPlayer->CastSpell(pPlayer, SPELL_PRISMATIC_PUNCH_CARD, true); -            } -            break; -        default: -            break; +        switch(pGO->GetEntry()) +        { +            case MATRIX_PUNCHOGRAPH_3005_A: +                if (pPlayer->HasItemCount(ITEM_WHITE_PUNCH_CARD, 1)) +                { +                    pPlayer->DestroyItemCount(ITEM_WHITE_PUNCH_CARD, 1, true); +                    pPlayer->CastSpell(pPlayer,SPELL_YELLOW_PUNCH_CARD,true); +                } +                break; +            case MATRIX_PUNCHOGRAPH_3005_B: +                if (pPlayer->HasItemCount(ITEM_YELLOW_PUNCH_CARD, 1)) +                { +                    pPlayer->DestroyItemCount(ITEM_YELLOW_PUNCH_CARD, 1, true); +                    pPlayer->CastSpell(pPlayer,SPELL_BLUE_PUNCH_CARD,true); +                } +                break; +            case MATRIX_PUNCHOGRAPH_3005_C: +                if (pPlayer->HasItemCount(ITEM_BLUE_PUNCH_CARD, 1)) +                { +                    pPlayer->DestroyItemCount(ITEM_BLUE_PUNCH_CARD, 1, true); +                    pPlayer->CastSpell(pPlayer,SPELL_RED_PUNCH_CARD,true); +                } +                break; +            case MATRIX_PUNCHOGRAPH_3005_D: +                if (pPlayer->HasItemCount(ITEM_RED_PUNCH_CARD, 1)) +                { +                    pPlayer->DestroyItemCount(ITEM_RED_PUNCH_CARD, 1, true); +                    pPlayer->CastSpell(pPlayer, SPELL_PRISMATIC_PUNCH_CARD, true); +                } +                break; +            default: +                break; +        } +        return false;      } -    return false; -} +};  /*######  ## go_rusty_cage @@ -590,17 +719,23 @@ enum eRustyCage      NPC_GOBLIN_PRISIONER    = 29466  }; -bool GOHello_go_rusty_cage(Player *pPlayer, GameObject *pGO) +class go_rusty_cage : public GameObjectScript  { -    if (Creature *pGoblinPrisoner = pGO->FindNearestCreature(NPC_GOBLIN_PRISIONER, 5.0f, true)) +public: +    go_rusty_cage() : GameObjectScript("go_rusty_cage") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pGO->SetGoState(GO_STATE_ACTIVE); -        pPlayer->KilledMonsterCredit(NPC_GOBLIN_PRISIONER, pGoblinPrisoner->GetGUID()); -        pGoblinPrisoner->DisappearAndDie(); -    } +        if (Creature *pGoblinPrisoner = pGO->FindNearestCreature(NPC_GOBLIN_PRISIONER, 5.0f, true)) +        { +            pGO->SetGoState(GO_STATE_ACTIVE); +            pPlayer->KilledMonsterCredit(NPC_GOBLIN_PRISIONER, pGoblinPrisoner->GetGUID()); +            pGoblinPrisoner->DisappearAndDie(); +        } -    return true; -} +        return true; +    } +};  /*######  ## go_scourge_cage @@ -611,17 +746,23 @@ enum eScourgeCage      NPC_SCOURGE_PRISONER = 25610  }; -bool GOHello_go_scourge_cage(Player *pPlayer, GameObject *pGO) +class go_scourge_cage : public GameObjectScript  { -    if (Creature *pNearestPrisoner = pGO->FindNearestCreature(NPC_SCOURGE_PRISONER, 5.0f, true)) +public: +    go_scourge_cage() : GameObjectScript("go_scourge_cage") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pGO->SetGoState(GO_STATE_ACTIVE); -        pPlayer->KilledMonsterCredit(NPC_SCOURGE_PRISONER, pNearestPrisoner->GetGUID()); -        pNearestPrisoner->DisappearAndDie(); -    } +        if (Creature *pNearestPrisoner = pGO->FindNearestCreature(NPC_SCOURGE_PRISONER, 5.0f, true)) +        { +            pGO->SetGoState(GO_STATE_ACTIVE); +            pPlayer->KilledMonsterCredit(NPC_SCOURGE_PRISONER, pNearestPrisoner->GetGUID()); +            pNearestPrisoner->DisappearAndDie(); +        } -    return true; -} +        return true; +    } +};  /*######  ## go_arcane_prison @@ -633,16 +774,22 @@ enum eArcanePrison      SPELL_ARCANE_PRISONER_KILL_CREDIT   = 45456  }; -bool GOHello_go_arcane_prison(Player *pPlayer, GameObject *pGO) +class go_arcane_prison : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(QUEST_PRISON_BREAK) == QUEST_STATUS_INCOMPLETE) +public: +    go_arcane_prison() : GameObjectScript("go_arcane_prison") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pGO->SummonCreature(25318, 3485.089844, 6115.7422188, 70.966812, 0, TEMPSUMMON_TIMED_DESPAWN, 60000); -        pPlayer->CastSpell(pPlayer, SPELL_ARCANE_PRISONER_KILL_CREDIT, true); -        return true; -    } else -        return false; -} +        if (pPlayer->GetQuestStatus(QUEST_PRISON_BREAK) == QUEST_STATUS_INCOMPLETE) +        { +            pGO->SummonCreature(25318, 3485.089844, 6115.7422188, 70.966812, 0, TEMPSUMMON_TIMED_DESPAWN, 60000); +            pPlayer->CastSpell(pPlayer, SPELL_ARCANE_PRISONER_KILL_CREDIT, true); +            return true; +        } else +            return false; +    } +};  /*######  ## go_blood_filled_orb @@ -650,13 +797,19 @@ bool GOHello_go_arcane_prison(Player *pPlayer, GameObject *pGO)  #define NPC_ZELEMAR  17830 -bool GOHello_go_blood_filled_orb(Player *pPlayer, GameObject *pGO) +class go_blood_filled_orb : public GameObjectScript  { -    if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) -        pPlayer->SummonCreature(NPC_ZELEMAR, -369.746, 166.759, -21.50, 5.235, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); +public: +    go_blood_filled_orb() : GameObjectScript("go_blood_filled_orb") { } -    return true; -} +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER) +            pPlayer->SummonCreature(NPC_ZELEMAR, -369.746, 166.759, -21.50, 5.235, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000); + +        return true; +    } +};  /*######  ## go_jotunheim_cage @@ -675,41 +828,48 @@ enum eJotunheimCage      SPELL_SUMMON_BLADE_KNIGHT_TROLL = 56214  }; -bool GOHello_go_jotunheim_cage(Player* pPlayer, GameObject* pGO) +class go_jotunheim_cage : public GameObjectScript  { -    Creature* pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_HUMAN, 5.0f, true); -    if (!pPrisoner) +public: +    go_jotunheim_cage() : GameObjectScript("go_jotunheim_cage") { } + +    bool OnGossipHello(Player* pPlayer, GameObject* pGO)      { -        pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_TROLL, 5.0f, true); +        Creature* pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_HUMAN, 5.0f, true);          if (!pPrisoner)          { -            pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_ORC, 5.0f, true); +            pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_TROLL, 5.0f, true);              if (!pPrisoner) -                pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_NE, 5.0f, true); +            { +                pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_ORC, 5.0f, true); +                if (!pPrisoner) +                    pPrisoner = pGO->FindNearestCreature(NPC_EBON_BLADE_PRISONER_NE, 5.0f, true); +            }          } -    } -    if (!pPrisoner || !pPrisoner->isAlive()) -        return false; +        if (!pPrisoner || !pPrisoner->isAlive()) +            return false; -    pPrisoner->DisappearAndDie(); -    pPlayer->KilledMonsterCredit(NPC_EBON_BLADE_PRISONER_HUMAN, 0); -    switch(pPrisoner->GetEntry()) -    { -        case NPC_EBON_BLADE_PRISONER_HUMAN: -            pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_H,true); -            break; -        case NPC_EBON_BLADE_PRISONER_NE: -            pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_NE,true); -            break; -        case NPC_EBON_BLADE_PRISONER_TROLL: -            pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_TROLL,true); -            break; -        case NPC_EBON_BLADE_PRISONER_ORC: -            pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_ORC,true); -            break; +        pPrisoner->DisappearAndDie(); +        pPlayer->KilledMonsterCredit(NPC_EBON_BLADE_PRISONER_HUMAN, 0); +        switch(pPrisoner->GetEntry()) +        { +            case NPC_EBON_BLADE_PRISONER_HUMAN: +                pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_H,true); +                break; +            case NPC_EBON_BLADE_PRISONER_NE: +                pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_NE,true); +                break; +            case NPC_EBON_BLADE_PRISONER_TROLL: +                pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_TROLL,true); +                break; +            case NPC_EBON_BLADE_PRISONER_ORC: +                pPlayer->CastSpell(pPlayer,SPELL_SUMMON_BLADE_KNIGHT_ORC,true); +                break; +        } +        return true;      } -    return true; -} +}; +  enum eTableTheka  {      GOSSIP_TABLE_THEKA = 1653, @@ -717,15 +877,21 @@ enum eTableTheka      QUEST_SPIDER_GOLD = 2936  }; -bool GOHello_go_table_theka(Player* pPlayer, GameObject* pGO) +class go_table_theka : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(QUEST_SPIDER_GOLD) == QUEST_STATUS_INCOMPLETE) -        pPlayer->AreaExploredOrEventHappens(QUEST_SPIDER_GOLD); +public: +    go_table_theka() : GameObjectScript("go_table_theka") { } -    pPlayer->SEND_GOSSIP_MENU(GOSSIP_TABLE_THEKA, pGO->GetGUID()); +    bool OnGossipHello(Player* pPlayer, GameObject* pGO) +    { +        if (pPlayer->GetQuestStatus(QUEST_SPIDER_GOLD) == QUEST_STATUS_INCOMPLETE) +            pPlayer->AreaExploredOrEventHappens(QUEST_SPIDER_GOLD); -    return true; -} +        pPlayer->SEND_GOSSIP_MENU(GOSSIP_TABLE_THEKA, pGO->GetGUID()); + +        return true; +    } +};  /*######  ## go_inconspicuous_landmark @@ -737,54 +903,66 @@ enum eInconspicuousLandmark      ITEM_CUERGOS_KEY                                 = 9275,  }; -bool GOHello_go_inconspicuous_landmark(Player *pPlayer, GameObject* /*pGO*/) +class go_inconspicuous_landmark : public GameObjectScript  { -    if (pPlayer->HasItemCount(ITEM_CUERGOS_KEY,1)) -        return false; +public: +    go_inconspicuous_landmark() : GameObjectScript("go_inconspicuous_landmark") { } -    pPlayer->CastSpell(pPlayer,SPELL_SUMMON_PIRATES_TREASURE_AND_TRIGGER_MOB,true); +    bool OnGossipHello(Player *pPlayer, GameObject* /*pGO*/) +    { +        if (pPlayer->HasItemCount(ITEM_CUERGOS_KEY,1)) +            return false; -    return true; -} +        pPlayer->CastSpell(pPlayer,SPELL_SUMMON_PIRATES_TREASURE_AND_TRIGGER_MOB,true); + +        return true; +    } +};  /*######  ## go_soulwell  ######*/ -bool GOHello_go_soulwell(Player *pPlayer, GameObject* pGO) +class go_soulwell : public GameObjectScript  { -    Unit *caster = pGO->GetOwner(); -    if (!caster || caster->GetTypeId() != TYPEID_PLAYER) -        return true; - -    if (!pPlayer->IsInSameRaidWith(static_cast<Player *>(caster))) -        return true; +public: +    go_soulwell() : GameObjectScript("go_soulwell") { } -    // Repeating this at every use is ugly and inefficient. But as long as we don't have proper -    // GO scripting with at least On Create and On Update events, the other options are no less -    // ugly and hacky. -    uint32 newSpell = 0; -    if (pGO->GetEntry() == 193169)                                  // Soulwell for rank 2 +    bool OnGossipHello(Player *pPlayer, GameObject* pGO)      { -        if (caster->HasAura(18693))      // Improved Healthstone rank 2 -            newSpell = 58898; -        else if (caster->HasAura(18692)) // Improved Healthstone rank 1 -            newSpell = 58896; -        else newSpell = 58890; -    } -    else if (pGO->GetEntry() == 181621)                             // Soulwell for rank 1 -    { -        if (caster->HasAura(18693))      // Improved Healthstone rank 2 -            newSpell = 34150; -        else if (caster->HasAura(18692)) // Improved Healthstone rank 1 -            newSpell = 34149; -        else newSpell = 34130; -    } +        Unit *caster = pGO->GetOwner(); +        if (!caster || caster->GetTypeId() != TYPEID_PLAYER) +            return true; -    pGO->AddUse(); -    pPlayer->CastSpell(pPlayer, newSpell, true); -    return true; -} +        if (!pPlayer->IsInSameRaidWith(static_cast<Player *>(caster))) +            return true; + +        // Repeating this at every use is ugly and inefficient. But as long as we don't have proper +        // GO scripting with at least On Create and On Update events, the other options are no less +        // ugly and hacky. +        uint32 newSpell = 0; +        if (pGO->GetEntry() == 193169)                                  // Soulwell for rank 2 +        { +            if (caster->HasAura(18693))      // Improved Healthstone rank 2 +                newSpell = 58898; +            else if (caster->HasAura(18692)) // Improved Healthstone rank 1 +                newSpell = 58896; +            else newSpell = 58890; +        } +        else if (pGO->GetEntry() == 181621)                             // Soulwell for rank 1 +        { +            if (caster->HasAura(18693))      // Improved Healthstone rank 2 +                newSpell = 34150; +            else if (caster->HasAura(18692)) // Improved Healthstone rank 1 +                newSpell = 34149; +            else newSpell = 34130; +        } + +        pGO->AddUse(); +        pPlayer->CastSpell(pPlayer, newSpell, true); +        return true; +    } +};  /*######  ## Quest 11255: Prisoners of Wyrmskull @@ -800,35 +978,41 @@ enum ePrisonersOfWyrmskull      NPC_PRISONER_PALADIN                          = 24090  }; -bool GOHello_go_dragonflayer_cage(Player *pPlayer, GameObject *pGO) +class go_dragonflayer_cage : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(QUEST_PRISONERS_OF_WYRMSKULL) != QUEST_STATUS_INCOMPLETE) -        return true; +public: +    go_dragonflayer_cage() : GameObjectScript("go_dragonflayer_cage") { } -    Creature* pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_PRIEST, 2.0f); -    if (!pPrisoner) +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_MAGE, 2.0f); +        if (pPlayer->GetQuestStatus(QUEST_PRISONERS_OF_WYRMSKULL) != QUEST_STATUS_INCOMPLETE) +            return true; + +        Creature* pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_PRIEST, 2.0f);          if (!pPrisoner)          { -            pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_WARRIOR, 2.0f); +            pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_MAGE, 2.0f);              if (!pPrisoner) -                pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_PALADIN, 2.0f); +            { +                pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_WARRIOR, 2.0f); +                if (!pPrisoner) +                    pPrisoner = pGO->FindNearestCreature(NPC_PRISONER_PALADIN, 2.0f); +            }          } -    } -    if (!pPrisoner || !pPrisoner->isAlive()) -        return true; +        if (!pPrisoner || !pPrisoner->isAlive()) +            return true; -    Quest const* qInfo = objmgr.GetQuestTemplate(QUEST_PRISONERS_OF_WYRMSKULL); -    if (qInfo) -    { -        //TODO: prisoner should help player for a short period of time -        pPlayer->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0],0); -        pPrisoner->DisappearAndDie(); +        Quest const* qInfo = objmgr.GetQuestTemplate(QUEST_PRISONERS_OF_WYRMSKULL); +        if (qInfo) +        { +            //TODO: prisoner should help player for a short period of time +            pPlayer->KilledMonsterCredit(qInfo->ReqCreatureOrGOId[0],0); +            pPrisoner->DisappearAndDie(); +        } +        return true;      } -    return true; -} +};  /*######  ## Quest 11560: Oh Noes, the Tadpoles! @@ -841,21 +1025,27 @@ enum eTadpoles      NPC_WINTERFIN_TADPOLE                         = 25201  }; -bool GOHello_go_tadpole_cage(Player *pPlayer, GameObject *pGO) +class go_tadpole_cage : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(QUEST_OH_NOES_THE_TADPOLES) == QUEST_STATUS_INCOMPLETE) +public: +    go_tadpole_cage() : GameObjectScript("go_tadpole_cage") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        Creature *pTadpole = pGO->FindNearestCreature(NPC_WINTERFIN_TADPOLE,1.0f); -        if (pTadpole) +        if (pPlayer->GetQuestStatus(QUEST_OH_NOES_THE_TADPOLES) == QUEST_STATUS_INCOMPLETE)          { -            pGO->UseDoorOrButton(); -            pTadpole->DisappearAndDie(); -            pPlayer->KilledMonsterCredit(NPC_WINTERFIN_TADPOLE,0); -            //FIX: Summon minion tadpole +            Creature *pTadpole = pGO->FindNearestCreature(NPC_WINTERFIN_TADPOLE,1.0f); +            if (pTadpole) +            { +                pGO->UseDoorOrButton(); +                pTadpole->DisappearAndDie(); +                pPlayer->KilledMonsterCredit(NPC_WINTERFIN_TADPOLE,0); +                //FIX: Summon minion tadpole +            }          } +        return true;      } -    return true; -} +};  /*######  ## Quest 14096 & 14142: You've Really Done It This Time, Kul @@ -870,23 +1060,29 @@ enum eReallyDoneItThisTime      NPC_KUL                                                 = 34956  }; -bool GOHello_go_black_cage(Player *pPlayer, GameObject *pGO) +class go_black_cage : public GameObjectScript  { -    if ((pPlayer->GetTeamId() == TEAM_ALLIANCE && pPlayer->GetQuestStatus(QUEST_ALLIANCE_YOU_VE_REALLY_DONE_IT_THIS_TIME_KUL) == QUEST_STATUS_INCOMPLETE) || -        (pPlayer->GetTeamId() == TEAM_HORDE && pPlayer->GetQuestStatus(QUEST_HORDE_YOU_VE_REALLY_DONE_IT_THIS_TIME_KUL) == QUEST_STATUS_INCOMPLETE)) +public: +    go_black_cage() : GameObjectScript("go_black_cage") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        Creature *pPrisoner = pGO->FindNearestCreature(NPC_CAPTIVE_ASPIRANT,1.0f); -        if (!pPrisoner) -            pPrisoner = pGO->FindNearestCreature(NPC_KUL,1.0f); -        if (pPrisoner) +        if ((pPlayer->GetTeamId() == TEAM_ALLIANCE && pPlayer->GetQuestStatus(QUEST_ALLIANCE_YOU_VE_REALLY_DONE_IT_THIS_TIME_KUL) == QUEST_STATUS_INCOMPLETE) || +            (pPlayer->GetTeamId() == TEAM_HORDE && pPlayer->GetQuestStatus(QUEST_HORDE_YOU_VE_REALLY_DONE_IT_THIS_TIME_KUL) == QUEST_STATUS_INCOMPLETE))          { -            pGO->UseDoorOrButton(); -            pPrisoner->DisappearAndDie(); -            pPlayer->KilledMonsterCredit(pPrisoner->GetEntry(),0); +            Creature *pPrisoner = pGO->FindNearestCreature(NPC_CAPTIVE_ASPIRANT,1.0f); +            if (!pPrisoner) +                pPrisoner = pGO->FindNearestCreature(NPC_KUL,1.0f); +            if (pPrisoner) +            { +                pGO->UseDoorOrButton(); +                pPrisoner->DisappearAndDie(); +                pPlayer->KilledMonsterCredit(pPrisoner->GetEntry(),0); +            }          } +        return true;      } -    return true; -} +};  /*######  ## go_amberpine_outhouse @@ -907,23 +1103,28 @@ enum eAmberpineOuthouse      GOSSIP_OUTHOUSE_VACANT          = 12779  }; -bool GOHello_go_amberpine_outhouse(Player *pPlayer, GameObject *pGO) +class go_amberpine_outhouse : public GameObjectScript  { -    if (pPlayer->GetQuestStatus(QUEST_DOING_YOUR_DUTY) == QUEST_STATUS_INCOMPLETE || -        (pPlayer->GetQuestStatus(QUEST_DOING_YOUR_DUTY) == QUEST_STATUS_COMPLETE)) +public: +    go_amberpine_outhouse() : GameObjectScript("go_amberpine_outhouse") { } + +    bool OnGossipHello(Player *pPlayer, GameObject *pGO)      { -        pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_USE_OUTHOUSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); -        pPlayer->SEND_GOSSIP_MENU(GOSSIP_OUTHOUSE_VACANT, pGO->GetGUID()); -        return true; +        if (pPlayer->GetQuestStatus(QUEST_DOING_YOUR_DUTY) == QUEST_STATUS_INCOMPLETE || +            (pPlayer->GetQuestStatus(QUEST_DOING_YOUR_DUTY) == QUEST_STATUS_COMPLETE)) +        { +            pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_USE_OUTHOUSE, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); +            pPlayer->SEND_GOSSIP_MENU(GOSSIP_OUTHOUSE_VACANT, pGO->GetGUID()); +            return true; +        } +        else +            pPlayer->SEND_GOSSIP_MENU(GOSSIP_OUTHOUSE_INUSE, pGO->GetGUID()); +            return true;      } -    else -        pPlayer->SEND_GOSSIP_MENU(GOSSIP_OUTHOUSE_INUSE, pGO->GetGUID()); -        return true; -} -bool GOSelect_go_amberpine_outhouse(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction) -{ -    if (uiAction == GOSSIP_ACTION_INFO_DEF +1) +    bool OnGossipSelect(Player *pPlayer, GameObject *pGO, uint32 /*uiSender*/, uint32 uiAction) +    { +        if (uiAction == GOSSIP_ACTION_INFO_DEF +1)          {              pPlayer->CLOSE_GOSSIP_MENU();              Creature* pTarget = GetClosestCreatureWithEntry(pPlayer, NPC_OUTHOUSE_BUNNY, 3.0f); @@ -938,10 +1139,13 @@ bool GOSelect_go_amberpine_outhouse(Player *pPlayer, GameObject *pGO, uint32 /*u              return true;          }          else +        {              pPlayer->CLOSE_GOSSIP_MENU();              pPlayer->GetSession()->SendNotification(GO_ANDERHOLS_SLIDER_CIDER_NOT_FOUND);              return false; -} +        } +    } +};  /*######  ## Quest 1126: Hive in the Tower @@ -953,204 +1157,68 @@ enum eHives      NPC_HIVE_AMBUSHER                             = 13301  }; -bool GOHello_go_hive_pod(Player *pPlayer, GameObject *pGO) +class go_hive_pod : public GameObjectScript  { -    pPlayer->SendLoot(pGO->GetGUID(), LOOT_CORPSE); -    pGO->SummonCreature(NPC_HIVE_AMBUSHER,pGO->GetPositionX()+1,pGO->GetPositionY(),pGO->GetPositionZ(),pGO->GetAngle(pPlayer),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); -    pGO->SummonCreature(NPC_HIVE_AMBUSHER,pGO->GetPositionX(),pGO->GetPositionY()+1,pGO->GetPositionZ(),pGO->GetAngle(pPlayer),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); -    return true; -} +public: +    go_hive_pod() : GameObjectScript("go_hive_pod") { } -bool GOHello_go_massive_seaforium_charge(Player* pPlayer, GameObject *pGo) +    bool OnGossipHello(Player *pPlayer, GameObject *pGO) +    { +        pPlayer->SendLoot(pGO->GetGUID(), LOOT_CORPSE); +        pGO->SummonCreature(NPC_HIVE_AMBUSHER,pGO->GetPositionX()+1,pGO->GetPositionY(),pGO->GetPositionZ(),pGO->GetAngle(pPlayer),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); +        pGO->SummonCreature(NPC_HIVE_AMBUSHER,pGO->GetPositionX(),pGO->GetPositionY()+1,pGO->GetPositionZ(),pGO->GetAngle(pPlayer),TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); +        return true; +    } +}; + +class go_massive_seaforium_charge : public GameObjectScript  { -    pGo->SetLootState(GO_JUST_DEACTIVATED); -    return true; -} +public: +    go_massive_seaforium_charge() : GameObjectScript("go_massive_seaforium_charge") { } + +    bool OnGossipHello(Player* pPlayer, GameObject *pGo) +    { +        pGo->SetLootState(GO_JUST_DEACTIVATED); +        return true; +    } +};  void AddSC_go_scripts()  { -    Script *newscript; - -    newscript = new Script; -    newscript->Name = "go_cat_figurine"; -    newscript->pGOHello =           &GOHello_go_cat_figurine; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_northern_crystal_pylon"; -    newscript->pGOHello =           &GOHello_go_northern_crystal_pylon; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_eastern_crystal_pylon"; -    newscript->pGOHello =           &GOHello_go_eastern_crystal_pylon; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_western_crystal_pylon"; -    newscript->pGOHello =           &GOHello_go_western_crystal_pylon; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_barov_journal"; -    newscript->pGOHello =           &GOHello_go_barov_journal; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_field_repair_bot_74A"; -    newscript->pGOHello =           &GOHello_go_field_repair_bot_74A; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_gilded_brazier"; -    newscript->pGOHello =           &GOHello_go_gilded_brazier; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_orb_of_command"; -    newscript->pGOHello =           &GOHello_go_orb_of_command; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_shrine_of_the_birds"; -    newscript->pGOHello =           &GOHello_go_shrine_of_the_birds; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_southfury_moonstone"; -    newscript->pGOHello =           &GOHello_go_southfury_moonstone; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_tablet_of_madness"; -    newscript->pGOHello =           &GOHello_go_tablet_of_madness; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_tablet_of_the_seven"; -    newscript->pGOHello =           &GOHello_go_tablet_of_the_seven; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_jump_a_tron"; -    newscript->pGOHello =           &GOHello_go_jump_a_tron; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_ethereum_prison"; -    newscript->pGOHello =           &GOHello_go_ethereum_prison; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_ethereum_stasis"; -    newscript->pGOHello =           &GOHello_go_ethereum_stasis; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_resonite_cask"; -    newscript->pGOHello =           &GOHello_go_resonite_cask; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_sacred_fire_of_life"; -    newscript->pGOHello =           &GOHello_go_sacred_fire_of_life; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_tele_to_dalaran_crystal"; -    newscript->pGOHello =           &GOHello_go_tele_to_dalaran_crystal; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_tele_to_violet_stand"; -    newscript->pGOHello =           &GOHello_go_tele_to_violet_stand; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_fel_crystalforge"; -    newscript->pGOHello =           &GOHello_go_fel_crystalforge; -    newscript->pGOSelect =          &GOSelect_go_fel_crystalforge; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_bashir_crystalforge"; -    newscript->pGOHello =           &GOHello_go_bashir_crystalforge; -    newscript->pGOSelect =          &GOSelect_go_bashir_crystalforge; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_matrix_punchograph"; -    newscript->pGOHello =           &GOHello_go_matrix_punchograph; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_rusty_cage"; -    newscript->pGOHello =           &GOHello_go_rusty_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_scourge_cage"; -    newscript->pGOHello =           &GOHello_go_scourge_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_arcane_prison"; -    newscript->pGOHello =           &GOHello_go_arcane_prison; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_blood_filled_orb"; -    newscript->pGOHello =           &GOHello_go_blood_filled_orb; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_jotunheim_cage"; -    newscript->pGOHello =           &GOHello_go_jotunheim_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_table_theka"; -    newscript->pGOHello =           &GOHello_go_table_theka; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_inconspicuous_landmark"; -    newscript->pGOHello =           &GOHello_go_inconspicuous_landmark; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_soulwell"; -    newscript->pGOHello =           &GOHello_go_soulwell; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_tadpole_cage"; -    newscript->pGOHello =           &GOHello_go_tadpole_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_dragonflayer_cage"; -    newscript->pGOHello =           &GOHello_go_dragonflayer_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_black_cage"; -    newscript->pGOHello =           &GOHello_go_black_cage; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_amberpine_outhouse"; -    newscript->pGOHello =           &GOHello_go_amberpine_outhouse; -    newscript->pGOSelect =          &GOSelect_go_amberpine_outhouse; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_hive_pod"; -    newscript->pGOHello = &GOHello_go_hive_pod; -    newscript->RegisterSelf(); - -    newscript = new Script; -    newscript->Name = "go_massive_seaforium_charge"; -    newscript->pGOHello = &GOHello_go_massive_seaforium_charge; -    newscript->RegisterSelf(); +    new go_cat_figurine; +    new go_northern_crystal_pylon; +    new go_eastern_crystal_pylon; +    new go_western_crystal_pylon; +    new go_barov_journal; +    new go_field_repair_bot_74A; +    new go_gilded_brazier; +    new go_orb_of_command; +    new go_shrine_of_the_birds; +    new go_southfury_moonstone; +    new go_tablet_of_madness; +    new go_tablet_of_the_seven; +    new go_jump_a_tron; +    new go_ethereum_prison; +    new go_ethereum_stasis; +    new go_resonite_cask; +    new go_sacred_fire_of_life; +    new go_tele_to_dalaran_crystal; +    new go_tele_to_violet_stand; +    new go_fel_crystalforge; +    new go_bashir_crystalforge; +    new go_matrix_punchograph; +    new go_rusty_cage; +    new go_scourge_cage; +    new go_arcane_prison; +    new go_blood_filled_orb; +    new go_jotunheim_cage; +    new go_table_theka; +    new go_inconspicuous_landmark; +    new go_soulwell; +    new go_tadpole_cage; +    new go_dragonflayer_cage; +    new go_black_cage; +    new go_amberpine_outhouse; +    new go_hive_pod; +    new go_massive_seaforium_charge;  }  | 
