|
@@ -134,9 +134,9 @@ bool achievement_remove(struct map_session_data *sd, int achievement_id)
|
|
if (i != sd->achievement_data.count - 1)
|
|
if (i != sd->achievement_data.count - 1)
|
|
memmove(&sd->achievement_data.achievements[i], &sd->achievement_data.achievements[i + 1], sizeof(struct achievement) * (sd->achievement_data.count - 1 - i));
|
|
memmove(&sd->achievement_data.achievements[i], &sd->achievement_data.achievements[i + 1], sizeof(struct achievement) * (sd->achievement_data.count - 1 - i));
|
|
|
|
|
|
- aFree(&sd->achievement_data.achievements[sd->achievement_data.count-1]);
|
|
|
|
sd->achievement_data.count--;
|
|
sd->achievement_data.count--;
|
|
if( sd->achievement_data.count == 0 ){
|
|
if( sd->achievement_data.count == 0 ){
|
|
|
|
+ aFree(sd->achievement_data.achievements);
|
|
sd->achievement_data.achievements = NULL;
|
|
sd->achievement_data.achievements = NULL;
|
|
}else{
|
|
}else{
|
|
RECREATE(sd->achievement_data.achievements, struct achievement, sd->achievement_data.count);
|
|
RECREATE(sd->achievement_data.achievements, struct achievement, sd->achievement_data.count);
|
|
@@ -212,7 +212,7 @@ static int achievement_check_groups(DBKey key, DBData *data, va_list ap)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == ad->achievement_id);
|
|
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == ad->achievement_id);
|
|
- if (i == sd->achievement_data.count) { // Achievment isn't in player's log
|
|
|
|
|
|
+ if (i == sd->achievement_data.count) { // Achievement isn't in player's log
|
|
if (achievement_check_dependent(sd, ad->achievement_id) == true) {
|
|
if (achievement_check_dependent(sd, ad->achievement_id) == true) {
|
|
achievement_add(sd, ad->achievement_id);
|
|
achievement_add(sd, ad->achievement_id);
|
|
achievement_update_achievement(sd, ad->achievement_id, true);
|
|
achievement_update_achievement(sd, ad->achievement_id, true);
|
|
@@ -496,8 +496,9 @@ int *achievement_level(struct map_session_data *sd, bool flag)
|
|
if (flag == true && old_level != sd->achievement_data.level) {
|
|
if (flag == true && old_level != sd->achievement_data.level) {
|
|
int achievement_id = 240000 + sd->achievement_data.level;
|
|
int achievement_id = 240000 + sd->achievement_data.level;
|
|
|
|
|
|
- achievement_add(sd, achievement_id);
|
|
|
|
- achievement_update_achievement(sd, achievement_id, true);
|
|
|
|
|
|
+ if( achievement_add(sd, achievement_id) ){
|
|
|
|
+ achievement_update_achievement(sd, achievement_id, true);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
return info;
|
|
return info;
|
|
@@ -533,7 +534,7 @@ static int achievement_update_objectives(DBKey key, DBData *data, va_list ap)
|
|
memset(objective_count, 0, sizeof(objective_count)); // Current objectives count
|
|
memset(objective_count, 0, sizeof(objective_count)); // Current objectives count
|
|
|
|
|
|
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == ad->achievement_id);
|
|
ARR_FIND(0, sd->achievement_data.count, i, sd->achievement_data.achievements[i].achievement_id == ad->achievement_id);
|
|
- if (i == sd->achievement_data.count) { // Achievment isn't in player's log
|
|
|
|
|
|
+ if (i == sd->achievement_data.count) { // Achievement isn't in player's log
|
|
if (achievement_check_dependent(sd, ad->achievement_id) == false) // Check to see if dependents are complete before adding to player's log
|
|
if (achievement_check_dependent(sd, ad->achievement_id) == false) // Check to see if dependents are complete before adding to player's log
|
|
return 0;
|
|
return 0;
|
|
isNew = true;
|
|
isNew = true;
|