// 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 #include #include #include #include //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; }