コード例 #1
0
void instance_uldaman::SetData(uint32 uiType, uint32 uiData)
{
    switch (uiType)
    {
        case TYPE_ALTAR_EVENT:
            if (uiData == DONE)
            {
                DoUseDoorOrButton(GO_TEMPLE_DOOR_UPPER);
                DoUseDoorOrButton(GO_TEMPLE_DOOR_LOWER);
            }
            else if (uiData == IN_PROGRESS)
            {
                // Also do a reset before starting the event - this will respawn dead Keepers
                DoResetKeeperEvent();
                m_uiKeeperCooldown = 5000;
            }
            else if (uiData == NOT_STARTED)
            {
                DoResetKeeperEvent();
                m_uiStoneKeepersFallen = 0;
            }
            m_auiEncounter[0] = uiData;
            break;

        case TYPE_ARCHAEDAS:
            if (uiData == DONE)
            {
                DoUseDoorOrButton(GO_ANCIENT_VAULT);
                DoRespawnGameObject(GO_ANCIENT_TREASURE, HOUR);
            }
            m_auiEncounter[1] = uiData;
            break;
    }

    if (uiData == DONE)
    {
        OUT_SAVE_INST_DATA;

        std::ostringstream saveStream;

        saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1];

        m_strInstData = saveStream.str();
        SaveToDB();
        OUT_SAVE_INST_DATA_COMPLETE;
    }
}
コード例 #2
0
void instance_uldaman::Update(uint32 uiDiff)
{
    if (m_auiEncounter[0] == IN_PROGRESS)
    {
        if (m_uiKeeperCooldown >= uiDiff)
            m_uiKeeperCooldown -= uiDiff;
        else
        {
            m_uiKeeperCooldown = 5000;

            if (!m_mKeeperMap.empty())
            {
                for (std::map<ObjectGuid, bool>::iterator itr = m_mKeeperMap.begin(); itr != m_mKeeperMap.end(); ++itr)
                {
                    // died earlier
                    if (!itr->second)
                        continue;

                    if (Creature* pKeeper = instance->GetCreature(itr->first))
                    {
                        if (pKeeper->isAlive() && !pKeeper->getVictim())
                        {
                            if (Player* pPlayer = pKeeper->GetMap()->GetPlayer(m_playerGuid))
                            {
                                // we should use group instead, event starter can be dead while group is still fighting
                                if (pPlayer->isAlive() && !pPlayer->isInCombat())
                                {
                                    pKeeper->RemoveAurasDueToSpell(SPELL_STONED);
                                    pKeeper->SetInCombatWith(pPlayer);
                                    pKeeper->AddThreat(pPlayer);
                                }
                                else
                                {
                                    if (!pPlayer->isAlive())
                                        DoResetKeeperEvent();
                                }
                            }

                            break;
                        }
                        else if (!pKeeper->isAlive())
                        {
                            itr->second = pKeeper->isAlive();
                            ++m_uiStoneKeepersFallen;
                        }
                    }
                }

                if (m_uiStoneKeepersFallen == m_mKeeperMap.size())
                    SetData(TYPE_ALTAR_EVENT, DONE);
            }
        }
    }
}