Restoring Disciplines to their original load order (Slot)

Tribute uninitialized value database conversion fix
Tribute load fix (Lost in translation)
Changed Tribute 0 value to 0xFFFFFFFF instead of 0
Sanity check for unitialized tribute value on load
This commit is contained in:
akkadius 2014-09-23 19:12:31 -05:00
parent 973aa94cb5
commit 16ba3eb11e
3 changed files with 13 additions and 7 deletions

View File

@ -1857,7 +1857,7 @@ bool Database::CheckDatabaseConversions() {
/* Run Tribute Convert */ /* Run Tribute Convert */
first_entry = 0; rquery = ""; first_entry = 0; rquery = "";
for (i = 0; i < EmuConstants::TRIBUTE_SIZE; i++){ for (i = 0; i < EmuConstants::TRIBUTE_SIZE; i++){
if (pp->tributes[i].tribute > 0){ if (pp->tributes[i].tribute > 0 && pp->tributes[i].tribute != 4294967295){
if (first_entry != 1){ if (first_entry != 1){
rquery = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute); rquery = StringFormat("REPLACE INTO `character_tribute` (id, tier, tribute) VALUES (%u, %u, %u)", character_id, pp->tributes[i].tier, pp->tributes[i].tribute);
first_entry = 1; first_entry = 1;

View File

@ -597,6 +597,7 @@ void Client::Handle_Connect_OP_ZoneEntry(const EQApplicationPacket *app) {
database.LoadCharacterDisciplines(cid, &m_pp); /* Load Character Disciplines */ database.LoadCharacterDisciplines(cid, &m_pp); /* Load Character Disciplines */
database.LoadCharacterLanguages(cid, &m_pp); /* Load Character Languages */ database.LoadCharacterLanguages(cid, &m_pp); /* Load Character Languages */
database.LoadCharacterLeadershipAA(cid, &m_pp); /* Load Character Leadership AA's */ database.LoadCharacterLeadershipAA(cid, &m_pp); /* Load Character Leadership AA's */
database.LoadCharacterTribute(cid, &m_pp); /* Load CharacterTribute */
/* Set item material tint */ /* Set item material tint */
for (int i = EmuConstants::MATERIAL_BEGIN; i <= EmuConstants::MATERIAL_END; i++) for (int i = EmuConstants::MATERIAL_BEGIN; i <= EmuConstants::MATERIAL_END; i++)

View File

@ -1034,8 +1034,11 @@ bool ZoneDatabase::LoadCharacterDisciplines(uint32 character_id, PlayerProfile_S
"disc_id " "disc_id "
"FROM " "FROM "
"`character_disciplines`" "`character_disciplines`"
"WHERE `id` = %u ORDER BY `disc_id`", character_id); "WHERE `id` = %u ORDER BY `slot_id`", character_id);
auto results = database.QueryDatabase(query); int i = 0; auto results = database.QueryDatabase(query);
int i = 0;
/* Initialize Disciplines */
memset(pp->disciplines.values, 0, MAX_PP_DISCIPLINES);
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
if (i < MAX_PP_DISCIPLINES){ if (i < MAX_PP_DISCIPLINES){
pp->disciplines.values[i] = atoi(row[0]); pp->disciplines.values[i] = atoi(row[0]);
@ -1150,13 +1153,15 @@ bool ZoneDatabase::LoadCharacterTribute(uint32 character_id, PlayerProfile_Struc
std::string query = StringFormat("SELECT `tier`, `tribute` FROM `character_tribute` WHERE `id` = %u", character_id); std::string query = StringFormat("SELECT `tier`, `tribute` FROM `character_tribute` WHERE `id` = %u", character_id);
auto results = database.QueryDatabase(query); int i = 0; auto results = database.QueryDatabase(query); int i = 0;
for (i = 0; i < EmuConstants::TRIBUTE_SIZE; i++){ for (i = 0; i < EmuConstants::TRIBUTE_SIZE; i++){
pp->tributes[i].tribute = 0; pp->tributes[i].tribute = 0xFFFFFFFF;
pp->tributes[i].tier = 0; pp->tributes[i].tier = 0;
} }
for (auto row = results.begin(); row != results.end(); ++row) { for (auto row = results.begin(); row != results.end(); ++row) {
if(pp->tributes[i].tribute != TRIBUTE_NONE){
pp->tributes[i].tier = atoi(row[0]); pp->tributes[i].tier = atoi(row[0]);
pp->tributes[i].tribute = atoi(row[1]); pp->tributes[i].tribute = atoi(row[1]);
} }
}
return true; return true;
} }