Skip to content

Commit 69eed58

Browse files
authored
Sort quest missions and map hunt updates (OpenKore#4204)
Improve quest mission ordering and robustly handle server hunt updates. Commands.pm: sort mission entries by mission_index (fallback to 9999) then by numeric mobID so missions display in intended order. Network/Receive.pm: ignore mission updates for unknown quests early, and add a fallback mapping for servers that send updates keyed only by hunt_id — derive a mission_index from hunt_id and match against existing missions (allowing off-by-one), with safety checks to avoid applying updates to non-existent missions. These changes prevent incorrect ordering and missed/incorrect mission updates from varied server implementations.
1 parent f76730c commit 69eed58

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

src/Commands.pm

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7091,7 +7091,9 @@ sub cmdQuest {
70917091
my $quest = $questList->{$questID};
70927092
$msg .= swrite(sprintf("\@%s \@%s \@%s \@%s \@%s", ('>'x2), ('<'x5), ('<'x30), ('<'x10), ('<'x24)),
70937093
[$k, $questID, $quests_lut{$questID} ? $quests_lut{$questID}{title} : '', $quest->{active} ? T("active") : T("inactive"), $quest->{time_expire} ? scalar localtime $quest->{time_expire} : '']);
7094-
foreach my $mobID (keys %{$quest->{missions}}) {
7094+
foreach my $mobID (sort {
7095+
($quest->{missions}{$a}{mission_index} // 9999) <=> ($quest->{missions}{$b}{mission_index} // 9999) || $a <=> $b
7096+
} keys %{$quest->{missions}}) {
70957097
my $mission = $quest->{missions}->{$mobID};
70967098
$msg .= swrite(sprintf("\@%s \@%s \@%s", ('>'x2), ('<'x30), ('<'x30)),
70977099
[" -", $mission->{mob_name}, sprintf(defined $mission->{mob_goal} ? '%d/%d' : '%d', @{$mission}{qw(mob_count mob_goal)})]);
@@ -8786,4 +8788,3 @@ sub cmdEden {
87868788

87878789
1;
87888790

8789-

src/Network/Receive.pm

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4891,6 +4891,8 @@ sub quest_update_mission_hunt {
48914891

48924892
@{$mission}{@{$quest_info->{mission_keys}}} = unpack($quest_info->{mission_pack}, substr($args->{message}, $offset, $quest_info->{mission_len}));
48934893

4894+
next unless exists $questList->{$mission->{questID}};
4895+
48944896
my $quest = \%{$questList->{$mission->{questID}}};
48954897

48964898
my $mission_id;
@@ -4924,6 +4926,21 @@ sub quest_update_mission_hunt {
49244926
}
49254927
}
49264928

4929+
# Some servers can return mission updates keyed only by hunt identification.
4930+
# If direct lookup fails, map update by mission index from hunt_id.
4931+
if (!defined $mission_id && exists $mission->{hunt_id}) {
4932+
my $mission_index = $mission->{hunt_id} - ($mission->{questID} * 1000);
4933+
4934+
foreach my $current_key (keys %{$quest->{missions}}) {
4935+
next unless exists $quest->{missions}->{$current_key}{mission_index};
4936+
next unless $quest->{missions}->{$current_key}{mission_index} == $mission_index || $quest->{missions}->{$current_key}{mission_index} == $mission_index - 1;
4937+
$mission_id = $current_key;
4938+
last;
4939+
}
4940+
}
4941+
4942+
next unless defined $mission_id && exists $quest->{missions}->{$mission_id};
4943+
49274944
my $quest_mission = \%{$quest->{missions}->{$mission_id}};
49284945

49294946
$quest_mission->{mob_count} = $mission->{mob_count};
@@ -12604,4 +12621,3 @@ sub notify_accessible_mapname {
1260412621
}
1260512622

1260612623
1;
12607-

0 commit comments

Comments
 (0)