|
@@ -1,142 +1,142 @@
|
|
|
-// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
|
|
|
-// For more information, see LICENCE in the main folder
|
|
|
-
|
|
|
-#include "../common/cbasetypes.h"
|
|
|
-#include "../common/socket.h"
|
|
|
-#include "../common/timer.h"
|
|
|
-#include "../common/malloc.h"
|
|
|
-#include "../common/version.h"
|
|
|
-#include "../common/nullpo.h"
|
|
|
-#include "../common/showmsg.h"
|
|
|
-#include "../common/strlib.h"
|
|
|
-#include "../common/utils.h"
|
|
|
-
|
|
|
-#include "map.h"
|
|
|
-#include "chrif.h"
|
|
|
-#include "pc.h"
|
|
|
-#include "npc.h"
|
|
|
-#include "itemdb.h"
|
|
|
-#include "script.h"
|
|
|
-#include "intif.h"
|
|
|
-#include "battle.h"
|
|
|
-#include "mob.h"
|
|
|
-#include "party.h"
|
|
|
-#include "unit.h"
|
|
|
-#include "log.h"
|
|
|
-#include "clif.h"
|
|
|
-#include "quest.h"
|
|
|
-
|
|
|
-#include <stdio.h>
|
|
|
-#include <stdlib.h>
|
|
|
-#include <string.h>
|
|
|
-#include <stdarg.h>
|
|
|
-#include <time.h>
|
|
|
-
|
|
|
-//Send quest info on login
|
|
|
-int quest_pc_login(TBL_PC * sd)
|
|
|
-{
|
|
|
-
|
|
|
- if(sd->num_quests == 0)
|
|
|
- return 1;
|
|
|
-
|
|
|
- clif_send_questlog(sd);
|
|
|
- clif_send_questlog_info(sd);
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-int quest_add(TBL_PC * sd, struct quest * qd)
|
|
|
-{
|
|
|
-
|
|
|
- int i;
|
|
|
-
|
|
|
- //Search to see if this quest exists
|
|
|
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == qd->quest_id);
|
|
|
-
|
|
|
- //Already have this quest
|
|
|
- if(i!=MAX_QUEST)
|
|
|
- return 1;
|
|
|
-
|
|
|
- //Find empty quest log spot
|
|
|
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == 0);
|
|
|
-
|
|
|
- //Quest log is full
|
|
|
- if(i == MAX_QUEST)
|
|
|
- return -1;
|
|
|
-
|
|
|
- //Copy over quest data
|
|
|
- memcpy(&sd->quest_log[i], qd, sizeof(struct quest));
|
|
|
- sd->num_quests++;
|
|
|
-
|
|
|
- //Notify client
|
|
|
- clif_send_quest_info(sd, &sd->quest_log[i]);
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-int quest_delete(TBL_PC * sd, int quest_id)
|
|
|
-{
|
|
|
-
|
|
|
- int i;
|
|
|
-
|
|
|
- //Search for quest
|
|
|
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
|
|
|
-
|
|
|
- //Quest not found
|
|
|
- if(i != MAX_QUEST)
|
|
|
- return -1;
|
|
|
-
|
|
|
- //Zero quest
|
|
|
- memset(&sd->quest_log[i], 0, sizeof(struct quest));
|
|
|
-
|
|
|
- //Notify client
|
|
|
- clif_send_quest_delete(sd, quest_id);
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, const char * name, int count)
|
|
|
-{
|
|
|
-
|
|
|
- int i;
|
|
|
-
|
|
|
- //Search for quest
|
|
|
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
|
|
|
-
|
|
|
- //Quest not found
|
|
|
- if(i != MAX_QUEST)
|
|
|
- return -1;
|
|
|
-
|
|
|
- memcpy(&sd->quest_log[i].objectives[objective_num].name, name, NAME_LENGTH);
|
|
|
- sd->quest_log[i].objectives[objective_num].count = count;
|
|
|
-
|
|
|
- //Notify client
|
|
|
- clif_send_quest_info(sd, &sd->quest_log[i]);
|
|
|
-
|
|
|
- return 0;
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-int quest_update_status(TBL_PC * sd, int quest_id, bool status)
|
|
|
-{
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-int quest_load_info(TBL_PC * sd, struct mmo_charstatus * st)
|
|
|
-{
|
|
|
- sd->num_quests = st->num_quests;
|
|
|
- memcpy(sd->quest_log, st->quest_log, sizeof(st->quest_log));
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-int quest_make_savedata(TBL_PC * sd)
|
|
|
-{
|
|
|
- sd->status.num_quests = sd->num_quests;
|
|
|
- memcpy(sd->status.quest_log, sd->quest_log, sizeof(sd->quest_log));
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
+// Copyright (c) Athena Dev Teams - Licensed under GNU GPL
|
|
|
+// For more information, see LICENCE in the main folder
|
|
|
+
|
|
|
+#include "../common/cbasetypes.h"
|
|
|
+#include "../common/socket.h"
|
|
|
+#include "../common/timer.h"
|
|
|
+#include "../common/malloc.h"
|
|
|
+#include "../common/version.h"
|
|
|
+#include "../common/nullpo.h"
|
|
|
+#include "../common/showmsg.h"
|
|
|
+#include "../common/strlib.h"
|
|
|
+#include "../common/utils.h"
|
|
|
+
|
|
|
+#include "map.h"
|
|
|
+#include "chrif.h"
|
|
|
+#include "pc.h"
|
|
|
+#include "npc.h"
|
|
|
+#include "itemdb.h"
|
|
|
+#include "script.h"
|
|
|
+#include "intif.h"
|
|
|
+#include "battle.h"
|
|
|
+#include "mob.h"
|
|
|
+#include "party.h"
|
|
|
+#include "unit.h"
|
|
|
+#include "log.h"
|
|
|
+#include "clif.h"
|
|
|
+#include "quest.h"
|
|
|
+
|
|
|
+#include <stdio.h>
|
|
|
+#include <stdlib.h>
|
|
|
+#include <string.h>
|
|
|
+#include <stdarg.h>
|
|
|
+#include <time.h>
|
|
|
+
|
|
|
+//Send quest info on login
|
|
|
+int quest_pc_login(TBL_PC * sd)
|
|
|
+{
|
|
|
+
|
|
|
+ if(sd->num_quests == 0)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ clif_send_questlog(sd);
|
|
|
+ clif_send_questlog_info(sd);
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int quest_add(TBL_PC * sd, struct quest * qd)
|
|
|
+{
|
|
|
+
|
|
|
+ int i;
|
|
|
+
|
|
|
+ //Search to see if this quest exists
|
|
|
+ ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == qd->quest_id);
|
|
|
+
|
|
|
+ //Already have this quest
|
|
|
+ if(i!=MAX_QUEST)
|
|
|
+ return 1;
|
|
|
+
|
|
|
+ //Find empty quest log spot
|
|
|
+ ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == 0);
|
|
|
+
|
|
|
+ //Quest log is full
|
|
|
+ if(i == MAX_QUEST)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ //Copy over quest data
|
|
|
+ memcpy(&sd->quest_log[i], qd, sizeof(struct quest));
|
|
|
+ sd->num_quests++;
|
|
|
+
|
|
|
+ //Notify client
|
|
|
+ clif_send_quest_info(sd, &sd->quest_log[i]);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+int quest_delete(TBL_PC * sd, int quest_id)
|
|
|
+{
|
|
|
+
|
|
|
+ int i;
|
|
|
+
|
|
|
+ //Search for quest
|
|
|
+ ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
|
|
|
+
|
|
|
+ //Quest not found
|
|
|
+ if(i != MAX_QUEST)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ //Zero quest
|
|
|
+ memset(&sd->quest_log[i], 0, sizeof(struct quest));
|
|
|
+
|
|
|
+ //Notify client
|
|
|
+ clif_send_quest_delete(sd, quest_id);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, const char * name, int count)
|
|
|
+{
|
|
|
+
|
|
|
+ int i;
|
|
|
+
|
|
|
+ //Search for quest
|
|
|
+ ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
|
|
|
+
|
|
|
+ //Quest not found
|
|
|
+ if(i != MAX_QUEST)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ memcpy(&sd->quest_log[i].objectives[objective_num].name, name, NAME_LENGTH);
|
|
|
+ sd->quest_log[i].objectives[objective_num].count = count;
|
|
|
+
|
|
|
+ //Notify client
|
|
|
+ clif_send_quest_info(sd, &sd->quest_log[i]);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+int quest_update_status(TBL_PC * sd, int quest_id, bool status)
|
|
|
+{
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int quest_load_info(TBL_PC * sd, struct mmo_charstatus * st)
|
|
|
+{
|
|
|
+ sd->num_quests = st->num_quests;
|
|
|
+ memcpy(sd->quest_log, st->quest_log, sizeof(st->quest_log));
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+int quest_make_savedata(TBL_PC * sd)
|
|
|
+{
|
|
|
+ sd->status.num_quests = sd->num_quests;
|
|
|
+ memcpy(sd->status.quest_log, sd->quest_log, sizeof(sd->quest_log));
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|