ソースを参照

Follow up to 8310253

Achievement code now matches the Quest code.

Fixed a few small typos and removed some leftovers by @aleos89

Thanks to @CairoLee and @Tokeiburu
Lemongrass3110 7 年 前
コミット
4a28c8c1b0
3 ファイル変更6 行追加8 行削除
  1. 6 5
      src/map/achievement.c
  2. 0 2
      src/map/achievement.h
  3. 0 1
      src/map/script.c

+ 6 - 5
src/map/achievement.c

@@ -134,9 +134,9 @@ bool achievement_remove(struct map_session_data *sd, int achievement_id)
 	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.count == 0 ){
+		aFree(sd->achievement_data.achievements);
 		sd->achievement_data.achievements = NULL;
 	}else{
 		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;
 
 	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) {
 			achievement_add(sd, ad->achievement_id);
 			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) {
 		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;
@@ -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
 
 	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
 			return 0;
 		isNew = true;

+ 0 - 2
src/map/achievement.h

@@ -99,8 +99,6 @@ struct achievement_db {
 
 struct map_session_data;
 struct block_list;
-struct config_setting_t;
-enum _sp;
 
 struct achievement_db achievement_dummy;	///< Dummy entry for invalid achievement lookups
 

+ 0 - 1
src/map/script.c

@@ -23392,7 +23392,6 @@ BUILDIN_FUNC(achievementcomplete) {
 		script_pushint(st, false);
 		return SCRIPT_CMD_FAILURE;
 	}
-
 	
 	if( !sd->state.pc_loaded ){
 		if( !running_npc_stat_calc_event ){