123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- // 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 "intif.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 inter server
- intif_quest_add(sd->status.char_id, qd);
- return 0;
- }
- int quest_add_ack(int char_id, int quest_id, int success)
- {
- int i;
- TBL_PC * sd = map_charid2sd(char_id);
- ///Player no longer on map
- if(!sd)
- return -1;
- //Search for quest
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
- //Quest not found, shouldn't happen?
- if(i == MAX_QUEST)
- return -1;
- if(success)
- {
- //Notify client
- clif_send_quest_info(sd, &sd->quest_log[i]);
- }
- else
- {
- ShowError("Quest %d for character %d could not be added!\n", quest_id, char_id);
- //Zero quest
- memset(&sd->quest_log[i], 0, sizeof(struct quest));
- sd->num_quests--;
- }
- 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;
- intif_quest_delete(sd->status.char_id, quest_id);
- return 0;
- }
- int quest_delete_ack(int char_id, int quest_id, int success)
- {
- int i;
- TBL_PC * sd = map_charid2sd(char_id);
- ///Player no longer on map
- if(!sd)
- return -1;
- //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;
- if(success)
- {
- //Zero quest
- memset(&sd->quest_log[i], 0, sizeof(struct quest));
- sd->num_quests--;
- //Notify client
- clif_send_quest_delete(sd, quest_id);
- return 1;
- }
- else
- ShowError("Quest %d for character %d could not be deleted!\n", quest_id, char_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;
- }
- bool quest_has_quest(TBL_PC * sd, int quest_id)
- {
- int i;
- ARR_FIND(0, MAX_QUEST, i, sd->quest_log[i].quest_id == quest_id);
- return (i != MAX_QUEST);
- }
- int quest_update_status(TBL_PC * sd, int quest_id, bool status)
- {
- return 0;
- }
|