void HttpIndexLoader::AddIndexEntry(const PackId *ppackid, bool fDupCheck) { if (fDupCheck) { for (int i = 0; i < (int)index_.size(); i++) { IndexEntry *entry = &index_[i]; if (memcmp(ppackid, &entry->packid, sizeof(*ppackid)) == 0) { return; } } } MissionList *pml = CreateMissionList(ppackid, kmltAll); if (pml == NULL) { return; } if (pml->GetCount() == 0) { delete pml; return; } int cPlayersMin = 999; int cPlayersMax = -1; MissionDescription md; for (int i = pml->GetCount() - 1; i >= 0; i--) { if (!pml->GetMissionDescription(i, &md)) { delete pml; return; } if (md.cPlayersMin < cPlayersMin) { cPlayersMin = md.cPlayersMin; } if (md.cPlayersMax > cPlayersMax) { cPlayersMax = md.cPlayersMax; } } IndexEntry entry; entry.packid = *ppackid; entry.title = md.szPackName; entry.cMissions = pml->GetCount(); entry.cPlayersMin = cPlayersMin; entry.cPlayersMax = cPlayersMax; entry.inIndex = false; index_.push_back(entry); delete pml; sort_ = SORT_UNSORTED; }
bool CreateGameForm::DoModal(int *pnResult) { // Format the lists. int aidcList[] = { kidcChallengeList, kidcAddOnList }; for (int i = 0; i < ARRAYSIZE(aidcList); i++) { ListControl *plstc = (ListControl *)GetControlPtr(aidcList[i]); m_aplstc[i] = plstc; Rect rc; plstc->GetRect(&rc); Font *pfnt = gapfnt[kifntShadow]; int cxComplete = pfnt->GetTextExtent("Complete"); int xTitle = rc.Width() / 2 - cxComplete * 3 / 2; plstc->SetTabStops(xTitle); plstc->SetTabFlags(kfLstTabEllipsis); plstc->SetFlags(plstc->GetFlags() | kfLstcKeepInteriorPositioning); plstc->Clear(); } if (m_pml == NULL) { m_pml = CreateMissionList(NULL, kmltMultiplayer); } if (m_pml == NULL) { return false; } // If asked to find a certain mission, find it first to // see what type it is, and switch the radio button bar to // that type. int iPack = -1; int iMission = -1; int cLevels = m_pml->GetCount(); for (int nLevel = 0; nLevel < cLevels; nLevel++) { MissionIdentifier miid; m_pml->GetMissionIdentifier(nLevel, &miid); if (memcmp(&miid.packid, &m_miidFind.packid, sizeof(miid.packid)) == 0) { if (iPack == -1) { iPack = nLevel; } if (strcmp(miid.szLvlFilename, m_miidFind.szLvlFilename) == 0) { iMission = nLevel; break; } } } if (iMission == -1) { iMission = iPack; } int iMissionSelect = iMission; // Init the lists MissionType mt = InitLists(iMissionSelect); SwitchToMissionType(mt); // Game Speed m_tGameSpeed = gtGameSpeed; if (m_tGameSpeed < 4) m_tGameSpeed = 4; SliderControl *psldr = (SliderControl *)GetControlPtr(kidcGameSpeed); psldr->SetRange(2, ARRAYSIZE(gatGameSpeeds) - 1 - 3); // bring the extremes in a bit for multiplayer psldr->SetValue(8); for (int i = 0; i < ARRAYSIZE(gatGameSpeeds); i++) { if (gatGameSpeeds[i] == m_tGameSpeed) { psldr->SetValue(i); break; } } // Hide this label. If we're finding an Add-On mission, then // there are add-on missions and this label isn't meant to be visible. GetControlPtr(kidcAddOnMessage)->Show(false); UpdateLabels(); gptra->SetCallback(this); bool fSuccess = ShellForm::DoModal(pnResult); gptra->SetCallback(NULL); delete m_pml; m_pml = NULL; return fSuccess; }