summaryrefslogtreecommitdiff
path: root/src/map/quest.c
diff options
context:
space:
mode:
authorKevin <Kevin@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-04-11 01:38:41 +0000
committerKevin <Kevin@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-04-11 01:38:41 +0000
commiteb9d9a5e40f78993ab6280df285b1a15a7f27abb (patch)
treee9431a807a8fdfa9252a12d5f0eac1a51c8f32d9 /src/map/quest.c
parent773729d995cc32f98e87f6996b210ff6a2cc8d96 (diff)
downloadhercules-eb9d9a5e40f78993ab6280df285b1a15a7f27abb.tar.gz
hercules-eb9d9a5e40f78993ab6280df285b1a15a7f27abb.tar.bz2
hercules-eb9d9a5e40f78993ab6280df285b1a15a7f27abb.tar.xz
hercules-eb9d9a5e40f78993ab6280df285b1a15a7f27abb.zip
More questlog code.
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12556 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/map/quest.c')
-rw-r--r--src/map/quest.c137
1 files changed, 137 insertions, 0 deletions
diff --git a/src/map/quest.c b/src/map/quest.c
new file mode 100644
index 000000000..499d78d6c
--- /dev/null
+++ b/src/map/quest.c
@@ -0,0 +1,137 @@
+// 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)
+{
+ clif_send_questlog(sd);
+ clif_send_questlog_info(sd);
+ return 0;
+}
+
+struct quest * quest_make(int id, time_t time, int num_objs, struct quest_objective ** qo_arr)
+{
+ return NULL;
+}
+
+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, struct quest_objective qod)
+{
+
+ 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, qod.name, NAME_LENGTH);
+ sd->quest_log[i].objectives[objective_num].count = qod.count;
+
+ //Notify client
+ clif_send_quest_info(sd, &sd->quest_log[i]);
+
+ 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;
+}
+