예제 #1
0
void instance_violet_hold::SetRandomBosses()
{
    // Store bosses that are already done
    for (uint8 i = 0; i < MAX_MINIBOSSES; ++i)
    {
        if (m_auiEncounter[aBossInformation[i].uiType] == DONE)
            m_vRandomBosses.push_back(CreateBossSpawnByEntry(aBossInformation[i].uiEntry));
    }

    if (m_vRandomBosses.size() < 2)                         // Get some new random bosses
    {
        std::random_shuffle(m_vRandomBossList.begin(), m_vRandomBossList.end());
        // two required, in case the first is already pushed to m_vRandomBosses
        if (m_vRandomBossList.size() < 2)
            script_error_log("instance_violet_hold, Mini Bosses are not properly spawned");
        else
            m_vRandomBossList.resize(2);

        // Fill up some random bosses
        for (std::vector<uint32>::const_iterator itr = m_vRandomBossList.begin(); itr != m_vRandomBossList.end(); ++itr)
        {
            if (m_vRandomBosses.empty() || m_vRandomBosses[0]->uiEntry != *itr)
                m_vRandomBosses.push_back(CreateBossSpawnByEntry(*itr));
        }
    }

    for (uint8 i = 0; i < m_vRandomBosses.size(); ++i)
        debug_log("SD2: instance_violet_hold random boss %u is entry %u", i, m_vRandomBosses[i]->uiEntry);
}
예제 #2
0
void instance_violet_hold::SetRandomBosses()
{
    if (m_vRandomBosses.empty())
        for (uint8 i = 0; i < MAX_MINIBOSSES; ++i)
        {
            if (m_auiEncounter[aBossInformation[i].uiType] == DONE)
                m_vRandomBosses.push_back(CreateBossSpawnByEntry(aBossInformation[i].uiEntry));
        }

    if (m_vRandomBosses.size() >= 2)
        return;

    while (m_lRandomBossList.size() > 2)
    {
        uint32 uiPosition = urand(0, m_lRandomBossList.size() - 1);

        for (std::list<uint32>::iterator itr = m_lRandomBossList.begin(); itr != m_lRandomBossList.end(); ++itr, --uiPosition)
        {
            if (!*itr)
                continue;

            if (!uiPosition)
            {
                m_lRandomBossList.erase(itr);
                break;
            }
        }
    }

    if (!m_vRandomBosses.empty())
    {
        for (std::list<uint32>::const_iterator itr = m_lRandomBossList.begin(); itr != m_lRandomBossList.end(); ++itr)
        {
            if (m_vRandomBosses.at(0)->uiEntry != *itr)
                m_vRandomBosses.push_back(CreateBossSpawnByEntry(*itr));
        }
    }
    else
    {
        for (std::list<uint32>::const_iterator itr = m_lRandomBossList.begin(); itr != m_lRandomBossList.end(); ++itr)
            m_vRandomBosses.push_back(CreateBossSpawnByEntry(*itr));
    }

    for (std::vector<BossSpawn*>::const_iterator itr = m_vRandomBosses.begin(); itr != m_vRandomBosses.end(); ++itr)
        debug_log("SD2: instance_violet_hold first random boss is entry %u", (*itr)->uiEntry);
}