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).
|
/// 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)
|
||||||
{
|
{
|
||||||
int fd = sd->fd;
|
int fd = sd->fd;
|
||||||
int i;
|
int i;
|
||||||
|
int offset = 8;
|
||||||
|
|
||||||
#if PACKETVER >= 20141022
|
#if PACKETVER >= 20141022
|
||||||
int info_len = 15;
|
WFIFOHEAD(fd,sd->avail_quests*15+8);
|
||||||
int len = sd->avail_quests*info_len+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;
|
||||||
|
|
||||||
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);
|
||||||
|
#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).
|
/// 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
|
||||||
|
@ -42,17 +42,22 @@ struct quest_db *quest_search(int quest_id)
|
|||||||
*/
|
*/
|
||||||
int quest_pc_login(TBL_PC *sd)
|
int quest_pc_login(TBL_PC *sd)
|
||||||
{
|
{
|
||||||
|
#if PACKETVER < 20141022
|
||||||
int i;
|
int i;
|
||||||
|
#endif
|
||||||
|
|
||||||
if( sd->avail_quests == 0 )
|
if( sd->avail_quests == 0 )
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user