diff --git a/zone/tasks.cpp b/zone/tasks.cpp index d60fa5cd6..55f01196d 100644 --- a/zone/tasks.cpp +++ b/zone/tasks.cpp @@ -3133,7 +3133,7 @@ bool TaskGoalListManager::LoadLists() for (auto row = results.begin(); row != results.end(); ++row) { int listID = atoi(row[0]); int listSize = atoi(row[1]); - TaskGoalLists.push_back({listID, listSize, 0, 0}); + TaskGoalLists.push_back({listID, 0, 0}); TaskGoalLists[listIndex].GoalItemEntries.reserve(listSize); @@ -3143,23 +3143,16 @@ bool TaskGoalListManager::LoadLists() for (int listIndex = 0; listIndex < NumberOfLists; listIndex++) { int listID = TaskGoalLists[listIndex].ListID; - unsigned int size = TaskGoalLists[listIndex].Size; + auto size = TaskGoalLists[listIndex].GoalItemEntries.capacity(); // this was only done for manual memory management, shouldn't need to do this query = StringFormat("SELECT `entry` from `goallists` " "WHERE `listid` = %i " "ORDER BY `entry` ASC LIMIT %i", listID, size); results = database.QueryDatabase(query); if (!results.Success()) { - TaskGoalLists[listIndex].Size = 0; continue; } - // This should only happen if a row is deleted in between us retrieving the counts - // at the start of this method and getting to here. It should not be possible for - // an INSERT to cause a problem, as the SELECT is used with a LIMIT - if (results.RowCount() < size) - TaskGoalLists[listIndex].Size = results.RowCount(); - int entryIndex = 0; for (auto row = results.begin(); row != results.end(); ++row, ++entryIndex) { @@ -3197,7 +3190,7 @@ int TaskGoalListManager::GetFirstEntry(int ListID) { if((ListIndex < 0) || (ListIndex >= NumberOfLists)) return -1; - if(TaskGoalLists[ListIndex].Size == 0) return -1; + if(TaskGoalLists[ListIndex].GoalItemEntries.empty()) return -1; return TaskGoalLists[ListIndex].GoalItemEntries[0]; } @@ -3210,45 +3203,35 @@ std::vector TaskGoalListManager::GetListContents(int ListID) { if((ListIndex < 0) || (ListIndex >= NumberOfLists)) return ListContents; - for(int i=0; i= NumberOfLists)) return false; + if ((ListIndex < 0) || (ListIndex >= NumberOfLists)) + return false; - if((Entry < TaskGoalLists[ListIndex].Min) || (Entry > TaskGoalLists[ListIndex].Max)) + if ((Entry < TaskGoalLists[ListIndex].Min) || (Entry > TaskGoalLists[ListIndex].Max)) return false; int FirstEntry = 0; - int LastEntry = TaskGoalLists[ListIndex].Size - 1; + auto &task = TaskGoalLists[ListIndex]; - while(FirstEntry <= LastEntry) { - int MiddleEntry = (FirstEntry + LastEntry) / 2; + auto it = std::find(task.GoalItemEntries.begin(), task.GoalItemEntries.end(), Entry); - if(Entry > TaskGoalLists[ListIndex].GoalItemEntries[MiddleEntry]) - FirstEntry = MiddleEntry + 1; - else if(Entry < TaskGoalLists[ListIndex].GoalItemEntries[MiddleEntry]) - LastEntry = MiddleEntry - 1; - else { - Log(Logs::General, Logs::Tasks, "[UPDATE] TaskGoalListManager::IsInList(%i, %i) returning true", ListIndex, Entry); - return true; - } - - } - - return false; + if (it == task.GoalItemEntries.end()) + return false; + Log(Logs::General, Logs::Tasks, "[UPDATE] TaskGoalListManager::IsInList(%i, %i) returning true", ListIndex, + Entry); + return true; } TaskProximityManager::TaskProximityManager() { diff --git a/zone/tasks.h b/zone/tasks.h index 8bc14d956..b55203918 100644 --- a/zone/tasks.h +++ b/zone/tasks.h @@ -53,7 +53,6 @@ namespace EQEmu struct TaskGoalList_Struct { int ListID; - int Size; int Min, Max; std::vector GoalItemEntries; };