|
@@ -7968,6 +7968,9 @@ void clif_parse_LoadEndAck(int fd,struct map_session_data *sd)
|
|
|
mail_clear(sd);
|
|
|
#endif
|
|
|
|
|
|
+ //Send quest log [Kevin]
|
|
|
+ clif_send_questlog(sd);
|
|
|
+
|
|
|
if(map[sd->bl.m].flag.loadevent) // Lance
|
|
|
npc_script_event(sd, NPCE_LOADMAP);
|
|
|
|
|
@@ -12132,6 +12135,128 @@ void clif_parse_EquipTick(int fd, struct map_session_data* sd)
|
|
|
clif_equiptickack(sd, flag);
|
|
|
}
|
|
|
|
|
|
+/*==========================================
|
|
|
+ * Questlog System [Kevin]
|
|
|
+ * 02B5 <packet_len>.W <ignored>.L { }.10B* <-- UNKOWN PACKET
|
|
|
+ * 02B7 <quest_id>.L <state>.B
|
|
|
+ *------------------------------------------*/
|
|
|
+
|
|
|
+void clif_parse_questStateAck(int fd, struct map_session_data * sd)
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//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)
|
|
|
+{
|
|
|
+ int fd = sd->fd;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ WFIFOHEAD(fd,sd->num_quests*5+8);
|
|
|
+ WFIFOW(fd, 0) = 0x02B1;
|
|
|
+ WFIFOW(fd, 2) = sd->num_quests*5+8;
|
|
|
+
|
|
|
+ for(i=0; i<MAX_QUEST; i++)
|
|
|
+ {
|
|
|
+ if(!sd->quest_log[i].quest_id)
|
|
|
+ continue;
|
|
|
+
|
|
|
+
|
|
|
+ WFIFOL(fd, i*5+8) = sd->quest_log[i].quest_id;
|
|
|
+ WFIFOB(fd, i*5+12) = sd->quest_log[i].state;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ WFIFOSET(fd, WFIFOW(fd, 2));
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//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)
|
|
|
+{
|
|
|
+ int fd = sd->fd;
|
|
|
+ int i, j;
|
|
|
+
|
|
|
+ WFIFOHEAD(fd,sd->num_quests*104+8);
|
|
|
+ WFIFOW(fd, 0) = 0x02B2;
|
|
|
+ WFIFOW(fd, 2) = sd->num_quests*104+8;
|
|
|
+
|
|
|
+ for(i=0; i<MAX_QUEST; i++)
|
|
|
+ {
|
|
|
+ if(!sd->quest_log[i].quest_id)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ WFIFOL(fd, i*104+8) = sd->quest_log[i].quest_id;
|
|
|
+
|
|
|
+ // I have no idea what the time field does [Kevin]
|
|
|
+ WFIFOL(fd, i*104+16) = 0;
|
|
|
+ WFIFOW(fd, i*104+20) = sd->quest_log[i].num_objectives;
|
|
|
+
|
|
|
+ for(j=0; j<sd->quest_log[i].num_objectives; j++)
|
|
|
+ {
|
|
|
+ WFIFOW(fd, i*104+26+j*30) = sd->quest_log[i].objectives[j].count;
|
|
|
+ memcpy(WFIFOP(fd, i*104+28+j*30), sd->quest_log[i].objectives[j].name, NAME_LENGTH);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ WFIFOSET(fd, WFIFOW(fd, 2));
|
|
|
+}
|
|
|
+
|
|
|
+//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 fd = sd->fd;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ WFIFOHEAD(fd,qd->num_objectives*30+17);
|
|
|
+ WFIFOW(fd, 0) = 0x02B3;
|
|
|
+ WFIFOL(fd, 2) = qd->quest_id;
|
|
|
+ WFIFOB(fd, 6) = qd->state;
|
|
|
+
|
|
|
+ //Same time value thing
|
|
|
+ WFIFOW(fd, 11) = 0;
|
|
|
+ WFIFOW(fd, 15) = qd->num_objectives;
|
|
|
+
|
|
|
+ for(i=0; i<qd->num_objectives; i++)
|
|
|
+ {
|
|
|
+ WFIFOW(fd, i*30+21) = qd->objectives[i].count;
|
|
|
+ memcpy(WFIFOP(fd, i*30+23), qd->objectives[i].name, NAME_LENGTH);
|
|
|
+ }
|
|
|
+
|
|
|
+ WFIFOSET(fd, qd->num_objectives*30+17);
|
|
|
+}
|
|
|
+
|
|
|
+//Send delete msg
|
|
|
+//* 02B4 <quest_id>.L
|
|
|
+void clif_send_quest_delete(struct map_session_data * sd, int quest_id)
|
|
|
+{
|
|
|
+ int fd = sd->fd;
|
|
|
+
|
|
|
+ WFIFOHEAD(fd, 6);
|
|
|
+ WFIFOW(fd, 0) = 0x02B4;
|
|
|
+ WFIFOL(fd, 2) = quest_id;
|
|
|
+ WFIFOSET(fd, 6);
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+//Change active state of the quest
|
|
|
+//* 02B6 <quest_id>.L <state_to>.B
|
|
|
+void clif_send_quest_status(struct map_session_data * sd, int quest_id, bool active)
|
|
|
+{
|
|
|
+ int fd = sd->fd;
|
|
|
+
|
|
|
+ WFIFOHEAD(fd, 7);
|
|
|
+ WFIFOW(fd, 0) = 0x02B4;
|
|
|
+ WFIFOL(fd, 2) = quest_id;
|
|
|
+ WFIFOB(fd, 6) = active?1:0;
|
|
|
+ WFIFOSET(fd, 7);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
/*==========================================
|
|
|
* ƒpƒPƒbƒgƒfƒoƒbƒO
|
|
|
*------------------------------------------*/
|