in the following code quests has my current non completed quests and the quest # for the quest waiting to be accepted but its contents are null
am doing a trace to find out why its even in the list
Code: Select all
void WorldDatabase::SaveCharacterQuests(Client* client){
Query query;
map<int32, Quest*>::iterator itr;
master_quest_list.LockQuests(); //prevent reloading until we are done
client->GetPlayer()->LockQuests(); //prevent all quest modifications until we are done
map<int32, Quest*>* quests = client->GetPlayer()->GetPlayerQuests();
for(itr = quests->begin(); itr != quests->end(); itr++){
if(client->GetCurrentQuestID() == itr->first){
query.RunQuery2(Q_UPDATE, "update character_quests set current_quest = 0 where char_id = %u", client->GetCharacterID());
query.RunQuery2(Q_UPDATE, "update character_quests set current_quest = 1 where char_id = %u and quest_id = %u", client->GetCharacterID(), itr->first);
}
if(itr->second->GetSaveNeeded()){
query.RunQuery2(Q_INSERT, "insert ignore into character_quests (char_id, quest_id, given_date, quest_giver) values(%u, %u, now(), %u)", client->GetCharacterID(), itr->first, itr->second->GetQuestGiver());
query.RunQuery2(Q_UPDATE, "update character_quests set tracked = %i, quest_flags = %u, hidden = %i, complete_count = %u where char_id = %u and quest_id = %u", itr->second->IsTracked() ? 1 : 0, itr->second->GetQuestFlags(), itr->second->IsHidden() ? 1 : 0, itr->second->GetCompleteCount(), client->GetCharacterID(), itr->first);
SaveCharacterQuestProgress(client, itr->second);
itr->second->SetSaveNeeded(false);
}
}
if(query.GetErrorNumber() && query.GetError() && query.GetErrorNumber() < 0xFFFFFFFF)
LogWrite(WORLD__ERROR, 0, "World", "Error in SaveCharacterQuests query '%s': %s", query.GetQuery(), query.GetError());
quests = client->GetPlayer()->GetCompletedPlayerQuests();
for(itr = quests->begin(); itr != quests->end(); itr++){
if(itr->second->GetSaveNeeded()){
query.RunQuery2(Q_DELETE, "delete FROM character_quest_progress where char_id = %u and quest_id = %u", client->GetCharacterID(), itr->first);
/* incase the quest is completed before the quest could be inserted in the PlayerQuests loop, we first try to insert it. If it already exists then we can just update
* the completed_date */
query.RunQuery2(Q_INSERT, "INSERT INTO character_quests (char_id, quest_id, quest_giver, current_quest, given_date, completed_date, complete_count) values (%u,%u,%u,0, now(),now(), %u) ON DUPLICATE KEY UPDATE completed_date = now(), complete_count = %u, current_quest = 0", client->GetCharacterID(), itr->first, itr->second->GetQuestGiver(), itr->second->GetCompleteCount(), itr->second->GetCompleteCount());
itr->second->SetSaveNeeded(false);
}
}
client->GetPlayer()->UnlockQuests();
master_quest_list.UnlockQuests();
}