From 3e2be49541f4f9e464fb7cac1c4bd6eff4df5572 Mon Sep 17 00:00:00 2001 From: Kevin Date: Fri, 11 Apr 2008 07:12:45 +0000 Subject: Finished most of the quest log code, still bits here and there but it's usable now. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@12558 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/quest.c | 17 +++++++------ src/map/quest.h | 4 +++ src/map/script.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 90 insertions(+), 8 deletions(-) (limited to 'src/map') diff --git a/src/map/quest.c b/src/map/quest.c index f01ff4526..9ce8a0251 100644 --- a/src/map/quest.c +++ b/src/map/quest.c @@ -44,11 +44,6 @@ int quest_pc_login(TBL_PC * 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) { @@ -101,7 +96,7 @@ int quest_delete(TBL_PC * sd, int quest_id) } -int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, struct quest_objective qod) +int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, const char * name, int count) { int i; @@ -113,8 +108,8 @@ int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, struct 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; + 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]); @@ -123,6 +118,12 @@ int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, struct } +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; diff --git a/src/map/quest.h b/src/map/quest.h index efcfbc2d0..37ac357da 100644 --- a/src/map/quest.h +++ b/src/map/quest.h @@ -7,5 +7,9 @@ int quest_pc_login(TBL_PC * sd); int quest_load_info(TBL_PC * sd, struct mmo_charstatus * st); int quest_make_savedata(TBL_PC * sd); +int quest_add(TBL_PC * sd, struct quest * qd); +int quest_delete(TBL_PC * sd, int quest_id); +int quest_update_objective(TBL_PC * sd, int quest_id, int objective_num, const char * name, int count); +int quest_update_status(TBL_PC * sd, int quest_id, bool status); #endif diff --git a/src/map/script.c b/src/map/script.c index 4cfde66f9..f5c1339cd 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -43,6 +43,7 @@ #include "pet.h" #include "mail.h" #include "script.h" +#include "quest.h" #include #include @@ -13044,6 +13045,78 @@ BUILDIN_FUNC(setcell) return 0; } +/****************** +Questlog script commands +*******************/ + +BUILDIN_FUNC(getquest) +{ + + TBL_PC * sd = script_rid2sd(st); + struct quest qd; + int i, count = 0; + char * temp; + + memset(&qd, 0, sizeof(struct quest)); + + qd.quest_id = script_getnum(st, 2); + qd.time = script_getnum(st, 3); + qd.state = Q_ACTIVE; + + for(i=0; i<(script_lastdata(st)-3) && (i/2) < MAX_QUEST_OBJECTIVES; i+=2) + { + temp = (char*)script_getstr(st, i+4); + memcpy(&qd.objectives[i/2].name, temp, NAME_LENGTH); + temp = NULL; + qd.objectives[i/2].count = script_getnum(st, i+5); + count++; + } + + qd.num_objectives = count; + + quest_add(sd, &qd); + + return 0; + +} + +BUILDIN_FUNC(deletequest) +{ + + TBL_PC * sd = script_rid2sd(st); + int qid = script_getnum(st, 2); + + quest_delete(sd, qid); + return 0; + +} + +BUILDIN_FUNC(setquestobjective) +{ + + TBL_PC * sd = script_rid2sd(st); + int qid = script_getnum(st, 2); + int num = script_getnum(st, 3); + const char * str = script_getstr(st, 4); + int count = script_getnum(st, 5); + + quest_update_objective(sd, qid, num, str, count); + + return 0; +} + +BUILDIN_FUNC(setqueststatus) +{ + + TBL_PC * sd = script_rid2sd(st); + int qid = script_getnum(st, 2); + bool active = script_getnum(st, 3)?true:false; + + quest_update_status(sd, qid, active); + + return 0; +} + // declarations that were supposed to be exported from npc_chat.c #ifdef PCRE_SUPPORT @@ -13388,5 +13461,9 @@ struct script_function buildin_func[] = { BUILDIN_DEF(openauction,""), BUILDIN_DEF(checkcell,"siii"), BUILDIN_DEF(setcell,"siiiiii"), + BUILDIN_DEF(getquest, "ii*"), + BUILDIN_DEF(deletequest, "i"), + BUILDIN_DEF(setquestobjective, "iisi"), + BUILDIN_DEF(setqueststatus, "ii"), {NULL,NULL,NULL}, }; -- cgit v1.2.3-70-g09d2