From 8310253b8413252a7d7be6ffcbbb80ce6a761dea Mon Sep 17 00:00:00 2001 From: Lemongrass3110 Date: Mon, 7 Aug 2017 12:54:16 +0200 Subject: [PATCH] Follow up to ee12429 The incomplete count was not updated before moving the memory that way the counter had the wrong value. Also the memory manager would complain that the pointer is invalid when we have zero achievements. Thanks to @CairoLee --- src/map/achievement.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/map/achievement.c b/src/map/achievement.c index 875724709a..0fe30c178e 100644 --- a/src/map/achievement.c +++ b/src/map/achievement.c @@ -128,14 +128,19 @@ bool achievement_remove(struct map_session_data *sd, int achievement_id) return false; } + if (!sd->achievement_data.achievements[i].completed) + sd->achievement_data.incompleteCount--; + 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)); aFree(&sd->achievement_data.achievements[sd->achievement_data.count-1]); sd->achievement_data.count--; - if (!sd->achievement_data.achievements[i].completed) - sd->achievement_data.incompleteCount--; - RECREATE(sd->achievement_data.achievements, struct achievement, sd->achievement_data.count); + if( sd->achievement_data.count == 0 ){ + sd->achievement_data.achievements = NULL; + }else{ + RECREATE(sd->achievement_data.achievements, struct achievement, sd->achievement_data.count); + } sd->achievement_data.save = true; // Send a removed fake achievement