summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/map/clif.c50
-rw-r--r--src/map/clif.h11
-rw-r--r--src/map/quest.c22
3 files changed, 49 insertions, 34 deletions
diff --git a/src/map/clif.c b/src/map/clif.c
index 515d7642a..f05209d96 100644
--- a/src/map/clif.c
+++ b/src/map/clif.c
@@ -12585,9 +12585,8 @@ void clif_parse_EquipTick(int fd, struct map_session_data* sd)
/*==========================================
* Questlog System [Kevin] [Inkfish]
*------------------------------------------*/
-//Send simple list of quests upon login
-//* 02B1 <packet_len>.W <ignored>.L { <quest_id>.L <state>.B }.5B*
-void clif_send_questlog(struct map_session_data * sd)
+//* 02B1 <packet_len>.W <quest_num>.L { <quest_id>.L <state>.B }.5B*
+void clif_quest_send_list(struct map_session_data * sd)
{
int fd = sd->fd;
int i;
@@ -12608,9 +12607,8 @@ void clif_send_questlog(struct map_session_data * sd)
}
-//Send objective info on login
-//* 02B2 <packet_len>.W <ignored>.L { <quest_id>.L <ignored>.L <time>.L <num mobs>.W {<ignored>.L <mob count>.W <Mob Name>.24B}.30B[3] }.104B*
-void clif_send_questlog_info(struct map_session_data * sd)
+//* 02B2 <packet_len>.W <quest_num>.L { <quest_id>.L <start time>.L <expire time>.L <num mobs>.W {<mob id>.L <mob count>.W <Mob Name>.24B}.30B[3] }.104B*
+void clif_quest_send_mission(struct map_session_data * sd)
{
int fd = sd->fd;
int i, j;
@@ -12625,11 +12623,13 @@ void clif_send_questlog_info(struct map_session_data * sd)
for( i = 0; i < sd->avail_quests; i++ )
{
WFIFOL(fd, i*104+8) = sd->quest_log[i].quest_id;
+ WFIFOL(fd, i*104+12) = sd->quest_log[i].time - quest_db[sd->quest_index[i]].time;
WFIFOL(fd, i*104+16) = sd->quest_log[i].time;
WFIFOW(fd, i*104+20) = quest_db[sd->quest_index[i]].num_objectives;
for( j = 0 ; j < quest_db[sd->quest_index[i]].num_objectives; j++ )
{
+ WFIFOL(fd, i*104+22+j*30) = quest_db[sd->quest_index[i]].mob[j];
WFIFOW(fd, i*104+26+j*30) = sd->quest_log[i].count[j];
mob = mob_db(quest_db[sd->quest_index[i]].mob[j]);
memcpy(WFIFOP(fd, i*104+28+j*30), mob?mob->jname:"NULL", NAME_LENGTH);
@@ -12639,24 +12639,24 @@ void clif_send_questlog_info(struct map_session_data * sd)
WFIFOSET(fd, len);
}
-//Send info when objective info needs an update
-//* 02B3 <quest_id>.L <state>.B <ignored>.L <time>.L <num mobs>.W {<ignored>.L <mob count>.W <Mob Name>.24B}.30B[3]
-void clif_send_quest_info(struct map_session_data * sd, struct quest * qd, int index)
+//* 02B3 <quest_id>.L <state>.B <start time>.L <expire time>.L <num mobs>.W {<mob id>.L <mob count>.W <Mob Name>.24B}.30B[3]
+void clif_quest_add(struct map_session_data * sd, struct quest * qd, int index)
{
int fd = sd->fd;
int i;
- //int len = MAX_QUEST_OBJECTIVES*30+17;
struct mob_db *mob;
WFIFOHEAD(fd, packet_len(0x02B3));
WFIFOW(fd, 0) = 0x02B3;
WFIFOL(fd, 2) = qd->quest_id;
WFIFOB(fd, 6) = qd->state;
+ WFIFOB(fd, 7) = qd->time - quest_db[index].time;
WFIFOL(fd, 11) = qd->time;
WFIFOW(fd, 15) = quest_db[index].num_objectives;
for( i = 0; i < quest_db[index].num_objectives; i++ )
{
+ WFIFOL(fd, i*30+17) = quest_db[index].mob[i];
WFIFOW(fd, i*30+21) = qd->count[i];
mob = mob_db(quest_db[index].mob[i]);
memcpy(WFIFOP(fd, i*30+23), mob?mob->jname:"NULL", NAME_LENGTH);
@@ -12665,9 +12665,8 @@ void clif_send_quest_info(struct map_session_data * sd, struct quest * qd, int i
WFIFOSET(fd, packet_len(0x02B3));
}
-//Send delete msg
//* 02B4 <quest_id>.L
-void clif_send_quest_delete(struct map_session_data * sd, int quest_id)
+void clif_quest_delete(struct map_session_data * sd, int quest_id)
{
int fd = sd->fd;
@@ -12677,17 +12676,36 @@ void clif_send_quest_delete(struct map_session_data * sd, int quest_id)
WFIFOSET(fd, packet_len(0x02B4));
}
-// * 02B5 <packet_len>.W <ignored>.L { }.10B* <-- UNKOWN PACKET
+//* 02b5 <packet_len>.w <mob_num>.w { <quest_id>.d <mob_id>.d <count>.w }.mob_num
+void clif_quest_update_objective(struct map_session_data * sd, struct quest * qd, int index)
+{
+ int fd = sd->fd;
+ int i;
+ int len = quest_db[index].num_objectives*10+6;
+
+ WFIFOHEAD(fd, len);
+ WFIFOW(fd, 0) = 0x02B5;
+ WFIFOW(fd, 2) = len;
+ WFIFOW(fd, 4) = quest_db[index].num_objectives;
+
+ for( i = 0; i < quest_db[index].num_objectives; i++ )
+ {
+ WFIFOL(fd, i*10+6) = qd->quest_id;
+ WFIFOL(fd, i*10+10) = quest_db[index].mob[i];
+ WFIFOW(fd, i*10+14) = qd->count[i];
+ }
+
+ WFIFOSET(fd, len);
+}
-// * 02B6 <quest_id>.L <state>.B
+//* 02B6 <quest_id>.L <state>.B
void clif_parse_questStateAck(int fd, struct map_session_data * sd)
{
quest_update_status(sd, RFIFOL(fd,2), RFIFOB(fd,6)?Q_ACTIVE:Q_INACTIVE);
}
-//Change active state of the quest
//* 02B7 <quest_id>.L <state_to>.B
-void clif_send_quest_status(struct map_session_data * sd, int quest_id, bool active)
+void clif_quest_update_status(struct map_session_data * sd, int quest_id, bool active)
{
int fd = sd->fd;
diff --git a/src/map/clif.h b/src/map/clif.h
index 18ab320ef..5a3df7ffb 100644
--- a/src/map/clif.h
+++ b/src/map/clif.h
@@ -432,11 +432,12 @@ void clif_viewequip_fail(struct map_session_data* sd);
void clif_equipcheckbox(struct map_session_data* sd);
//quest system [Kevin] [Inkfish]
-void clif_send_questlog(struct map_session_data * sd);
-void clif_send_questlog_info(struct map_session_data * sd);
-void clif_send_quest_info(struct map_session_data * sd, struct quest * qd, int index);
-void clif_send_quest_delete(struct map_session_data * sd, int quest_id);
-void clif_send_quest_status(struct map_session_data * sd, int quest_id, bool active);
+void clif_quest_send_list(struct map_session_data * sd);
+void clif_quest_send_mission(struct map_session_data * sd);
+void clif_quest_add(struct map_session_data * sd, struct quest * qd, int index);
+void clif_quest_delete(struct map_session_data * sd, int quest_id);
+void clif_quest_update_status(struct map_session_data * sd, int quest_id, bool active);
+void clif_quest_update_objective(struct map_session_data * sd, struct quest * qd, int index);
int clif_send(const uint8* buf, int len, struct block_list* bl, enum send_target type);
int do_final_clif(void);
diff --git a/src/map/quest.c b/src/map/quest.c
index 61d6fda36..03a74214f 100644
--- a/src/map/quest.c
+++ b/src/map/quest.c
@@ -50,8 +50,8 @@ int quest_pc_login(TBL_PC * sd)
if(sd->avail_quests == 0)
return 1;
- clif_send_questlog(sd);
- clif_send_questlog_info(sd);
+ clif_quest_send_list(sd);
+ clif_quest_send_mission(sd);
return 0;
}
@@ -93,7 +93,7 @@ int quest_add(TBL_PC * sd, int quest_id)
sd->num_quests++;
sd->avail_quests++;
- clif_send_quest_info(sd, &sd->quest_log[i], sd->quest_index[i]);
+ clif_quest_add(sd, &sd->quest_log[i], sd->quest_index[i]);
if( save_settings&64 )
chrif_save(sd,0);
@@ -139,8 +139,8 @@ int quest_change(TBL_PC * sd, int qid1, int qid2)
sd->quest_index[i] = j;
- clif_send_quest_delete(sd, qid1);
- clif_send_quest_info(sd, &sd->quest_log[i], sd->quest_index[i]);
+ clif_quest_delete(sd, qid1);
+ clif_quest_add(sd, &sd->quest_log[i], sd->quest_index[i]);
if( save_settings&64 )
chrif_save(sd,0);
@@ -170,7 +170,7 @@ int quest_delete(TBL_PC * sd, int quest_id)
memset(&sd->quest_log[sd->num_quests], 0, sizeof(struct quest));
sd->quest_index[sd->num_quests] = 0;
- clif_send_quest_delete(sd, quest_id);
+ clif_quest_delete(sd, quest_id);
if( save_settings&64 )
chrif_save(sd,0);
@@ -191,11 +191,7 @@ void quest_update_objective(TBL_PC * sd, int mob)
if( quest_db[sd->quest_index[i]].mob[j] == mob && sd->quest_log[i].count[j] < quest_db[sd->quest_index[i]].count[j] )
{
sd->quest_log[i].count[j]++;
-
- // Should figure out the real packet.
- //clif_send_quest_delete(sd, sd->quest_log[i].quest_id);
- //clif_send_quest_info(sd, &sd->quest_log[i]);
- //break;
+ clif_quest_update_objective(sd,&sd->quest_log[i],sd->quest_index[i]);
}
}
}
@@ -216,7 +212,7 @@ int quest_update_status(TBL_PC * sd, int quest_id, quest_state status)
if( status < Q_COMPLETE )
{
- clif_send_quest_status(sd, quest_id, (bool)status);
+ clif_quest_update_status(sd, quest_id, (bool)status);
return 0;
}
@@ -228,7 +224,7 @@ int quest_update_status(TBL_PC * sd, int quest_id, quest_state status)
memcpy(&sd->quest_log[sd->avail_quests], &tmp_quest,sizeof(struct quest));
}
- clif_send_quest_delete(sd, quest_id);
+ clif_quest_delete(sd, quest_id);
if( save_settings&64 )
chrif_save(sd,0);