Pārlūkot izejas kodu

Fixed mob counts and quest states are not saved properly sometimes

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13964 54d463be-8e91-2dee-dedb-b68131a5f0ec
Inkfish 16 gadi atpakaļ
vecāks
revīzija
816e93ef9b

+ 0 - 0
sql-files/upgrade_svn_questlog.sql → sql-files/upgrade_svn13960_questlog.sql


+ 0 - 0
sql-files/upgrade_svn_13963.sql → sql-files/upgrade_svn13963.sql


+ 1 - 1
src/common/mmo.h

@@ -135,7 +135,7 @@ struct quest {
 	int mob[MAX_QUEST_OBJECTIVES];
 	int count[MAX_QUEST_OBJECTIVES];
 	quest_state state;
-
+	bool save_quest;
 	int num_objectives;
 };
 

+ 0 - 1
src/map/pc.h

@@ -380,7 +380,6 @@ struct map_session_data {
 	//Quest log system [Kevin] [Inkfish]
 	int num_quests;
 	int avail_quests;
-	bool save_quest[MAX_QUEST_DB];
 	struct quest quest_log[MAX_QUEST_DB];
 
 	// temporary debug [flaviojs]

+ 5 - 5
src/map/quest.c

@@ -184,7 +184,7 @@ void quest_update_objective(TBL_PC * sd, int mob)
 			if( sd->quest_log[i].mob[j] == mob )
 			{
 				sd->quest_log[i].count[j]++;
-				sd->save_quest[i] = true;
+				sd->quest_log[i].save_quest = true;
 				//clif_send_quest_info(sd, &sd->quest_log[i]); //TODO: Figure out the real packet [Inkfish]
 				//break;
 			}
@@ -207,7 +207,7 @@ int quest_update_status(TBL_PC * sd, int quest_id, int status)
 	if( status != Q_COMPLETE )
 	{
 		clif_send_quest_status(sd, quest_id, (bool)status);
-		sd->save_quest[i] = true;
+		sd->quest_log[i].save_quest = true;
 	}
 	else
 	{
@@ -220,7 +220,7 @@ int quest_update_status(TBL_PC * sd, int quest_id, int status)
 		memcpy(&sd->quest_log[i], &sd->quest_log[sd->avail_quests],sizeof(struct quest));
 		memcpy(&sd->quest_log[sd->avail_quests], &tmp_quest,sizeof(struct quest));
 
-		sd->save_quest[sd->avail_quests] = true;
+		sd->quest_log[sd->avail_quests].save_quest = true;
 	}
 
 	return 0;
@@ -231,7 +231,7 @@ int quest_save(TBL_PC * sd)
 	int i;
 
 	for( i = 0; i < sd->num_quests; i++ )
-		if( sd->save_quest[i] )
+		if( sd->quest_log[i].save_quest )
 			intif_quest_save(sd->status.char_id, &sd->quest_log[i]);
 
 	return 0;
@@ -253,7 +253,7 @@ int quest_save_ack(int char_id, int quest_id, int success)
 		return -1;
 
 	if(success)
-		sd->save_quest[i] = false;
+		sd->quest_log[i].save_quest = false;
 	else
 	{
 		ShowError("Quest %d for character %d could not be saved!\n", quest_id, char_id);

+ 1 - 0
src/map/script.c

@@ -13447,6 +13447,7 @@ BUILDIN_FUNC(completequest)
 	TBL_PC * sd = script_rid2sd(st);
 
 	quest_update_status(sd, script_getnum(st, 2), Q_COMPLETE);
+	intif_quest_save(sd->status.char_id, &sd->quest_log[sd->avail_quests]);
 	return 0;
 }