Fixed questlog display for clients from 2014-10-22 on

This commit is contained in:
Lemongrass3110 2015-10-09 00:24:25 +02:00
parent fd7d6c31fd
commit 45e50a3d24
2 changed files with 66 additions and 22 deletions

View File

@ -15608,40 +15608,81 @@ void clif_parse_PartyTick(int fd, struct map_session_data* sd)
/// Sends list of all quest states (ZC_ALL_QUEST_LIST). /// Sends list of all quest states (ZC_ALL_QUEST_LIST).
/// 02b1 <packet len>.W <num>.L { <quest id>.L <active>.B }*num /// 02b1 <packet len>.W <num>.L { <quest id>.L <active>.B }*num
/// 097a <packet len>.W <num>.L { <quest id>.L <active>.B <remaining time>.L <time>.L <count>.W { <mob_id>.L <killed>.W <total>.W <mob name>.24B }*count }*num
void clif_quest_send_list(struct map_session_data *sd) void clif_quest_send_list(struct map_session_data *sd)
{ {
#if PACKETVER >= 20141022
#define INFOLEN 15
int fd = sd->fd; int fd = sd->fd;
int i; int i;
#if PACKETVER >= 20141022 int offset;
int info_len = 15;
int len = sd->avail_quests*info_len+8; WFIFOHEAD(fd,sd->avail_quests*INFOLEN+8);
WFIFOHEAD(fd,len);
WFIFOW(fd, 0) = 0x97a; WFIFOW(fd, 0) = 0x97a;
#else
int info_len = 5;
int len = sd->avail_quests*info_len+8;
WFIFOHEAD(fd,len);
WFIFOW(fd, 0) = 0x2b1;
#endif
WFIFOW(fd, 2) = len;
WFIFOL(fd, 4) = sd->avail_quests; WFIFOL(fd, 4) = sd->avail_quests;
offset = 8;
for (i = 0; i < sd->avail_quests; i++) { for (i = 0; i < sd->avail_quests; i++) {
#if PACKETVER >= 20141022
struct quest_db *qi = quest_search(sd->quest_log[i].quest_id); struct quest_db *qi = quest_search(sd->quest_log[i].quest_id);
#endif
WFIFOL(fd, i*info_len+8) = sd->quest_log[i].quest_id; WFIFOL(fd, offset) = sd->quest_log[i].quest_id;
WFIFOB(fd, i*info_len+12) = sd->quest_log[i].state; offset += 4;
#if PACKETVER >= 20141022 WFIFOB(fd, offset) = sd->quest_log[i].state;
WFIFOL(fd, i*info_len+13) = sd->quest_log[i].time - qi->time; offset++;
WFIFOL(fd, i*info_len+17) = sd->quest_log[i].time; WFIFOL(fd, offset) = sd->quest_log[i].time - qi->time;
WFIFOW(fd, i*info_len+21) = qi->objectives_count; offset += 4;
#endif WFIFOL(fd, offset) = sd->quest_log[i].time;
offset += 4;
WFIFOW(fd, offset) = qi->objectives_count;
offset += 2;
if( qi->objectives_count > 0 ){
int j;
struct mob_db *mob;
for( j = 0; j < qi->objectives_count; j++ ){
mob = mob_db(qi->objectives[j].mob);
WFIFOL(fd, offset) = qi->objectives[j].mob;
offset += 4;
WFIFOW(fd, offset) = sd->quest_log[i].count[j];
offset += 2;
WFIFOW(fd, offset) = qi->objectives[j].count;
offset += 2;
memcpy(WFIFOP(fd, offset), mob->jname, NAME_LENGTH);
offset += NAME_LENGTH;
}
}
} }
WFIFOSET(fd, len); WFIFOW(fd, 2) = offset;
} WFIFOSET(fd, offset);
#undef INFOLEN
#else
#define INFOLEN 5
int i;
int offset;
int fd = sd->fd;
WFIFOHEAD(fd,sd->avail_quests*INFOLEN+8);
WFIFOW(fd, 0) = 0x2b1;
WFIFOL(fd, 4) = sd->avail_quests;
offset = 8;
for (i = 0; i < sd->avail_quests; i++) {
WFIFOL(fd, offset) = sd->quest_log[i].quest_id;
offset += 4;
WFIFOB(fd, offset) = sd->quest_log[i].state;
offset += 1;
}
WFIFOW(fd, 2) = offset;
WFIFOSET(fd, offset);
#undef INFOLEN
#endif
}
/// Sends list of all quest missions (ZC_ALL_QUEST_MISSION). /// Sends list of all quest missions (ZC_ALL_QUEST_MISSION).
/// 02b2 <packet len>.W <num>.L { <quest id>.L <start time>.L <expire time>.L <mobs>.W { <mob id>.L <mob count>.W <mob name>.24B }*3 }*num /// 02b2 <packet len>.W <num>.L { <quest id>.L <start time>.L <expire time>.L <mobs>.W { <mob id>.L <mob count>.W <mob name>.24B }*3 }*num

View File

@ -48,11 +48,14 @@ int quest_pc_login(TBL_PC *sd)
return 1; return 1;
clif_quest_send_list(sd); clif_quest_send_list(sd);
#if PACKETVER < 20141022
clif_quest_send_mission(sd); clif_quest_send_mission(sd);
//@TODO[Haru]: Is this necessary? Does quest_send_mission not take care of this? //@TODO[Haru]: Is this necessary? Does quest_send_mission not take care of this?
for( i = 0; i < sd->avail_quests; i++ ) for( i = 0; i < sd->avail_quests; i++ )
clif_quest_update_objective(sd, &sd->quest_log[i]); clif_quest_update_objective(sd, &sd->quest_log[i]);
#endif
return 0; return 0;
} }