Merge pull request #669 from rathena/hotfix/questlog-2014
Fixed questlog display for clients from 2014-10-22 on
This commit is contained in:
commit
79ef03e656
@ -15605,40 +15605,69 @@ void clif_parse_PartyTick(int fd, struct map_session_data* sd)
|
||||
|
||||
/// Sends list of all quest states (ZC_ALL_QUEST_LIST).
|
||||
/// 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)
|
||||
{
|
||||
int fd = sd->fd;
|
||||
int i;
|
||||
int offset = 8;
|
||||
|
||||
#if PACKETVER >= 20141022
|
||||
int info_len = 15;
|
||||
int len = sd->avail_quests*info_len+8;
|
||||
WFIFOHEAD(fd,len);
|
||||
WFIFOHEAD(fd,sd->avail_quests*15+8);
|
||||
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;
|
||||
|
||||
for (i = 0; i < sd->avail_quests; i++) {
|
||||
#if PACKETVER >= 20141022
|
||||
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;
|
||||
WFIFOB(fd, i*info_len+12) = sd->quest_log[i].state;
|
||||
#if PACKETVER >= 20141022
|
||||
WFIFOL(fd, i*info_len+13) = sd->quest_log[i].time - qi->time;
|
||||
WFIFOL(fd, i*info_len+17) = sd->quest_log[i].time;
|
||||
WFIFOW(fd, i*info_len+21) = qi->objectives_count;
|
||||
#endif
|
||||
|
||||
WFIFOL(fd, offset) = sd->quest_log[i].quest_id;
|
||||
offset += 4;
|
||||
WFIFOB(fd, offset) = sd->quest_log[i].state;
|
||||
offset++;
|
||||
WFIFOL(fd, offset) = sd->quest_log[i].time - qi->time;
|
||||
offset += 4;
|
||||
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);
|
||||
#else
|
||||
WFIFOHEAD(fd,sd->avail_quests*5+8);
|
||||
WFIFOW(fd, 0) = 0x2b1;
|
||||
WFIFOL(fd, 4) = sd->avail_quests;
|
||||
|
||||
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);
|
||||
#endif
|
||||
}
|
||||
|
||||
/// 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
|
||||
|
@ -42,17 +42,22 @@ struct quest_db *quest_search(int quest_id)
|
||||
*/
|
||||
int quest_pc_login(TBL_PC *sd)
|
||||
{
|
||||
#if PACKETVER < 20141022
|
||||
int i;
|
||||
#endif
|
||||
|
||||
if( sd->avail_quests == 0 )
|
||||
return 1;
|
||||
|
||||
clif_quest_send_list(sd);
|
||||
|
||||
#if PACKETVER < 20141022
|
||||
clif_quest_send_mission(sd);
|
||||
|
||||
//@TODO[Haru]: Is this necessary? Does quest_send_mission not take care of this?
|
||||
for( i = 0; i < sd->avail_quests; i++ )
|
||||
clif_quest_update_objective(sd, &sd->quest_log[i]);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user