diff --git a/plugins/eventMacro/eventMacro/Condition/QuestActive.pm b/plugins/eventMacro/eventMacro/Condition/QuestActive.pm index 1322713df8..5daa232f59 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestActive.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestActive.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -83,18 +82,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_ID} = undef; - $self->{fulfilled_member_index} = undef; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/plugins/eventMacro/eventMacro/Condition/QuestHuntCompleted.pm b/plugins/eventMacro/eventMacro/Condition/QuestHuntCompleted.pm index 214410d8a8..ce7bf8a64e 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestHuntCompleted.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestHuntCompleted.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -102,6 +101,7 @@ sub update_vars { sub check_quests { my ( $self, $list ) = @_; + my $found = 0; $self->{fulfilled_quest_id} = undef; $self->{fulfilled_mob_id} = undef; $self->{fulfilled_member_index} = undef; @@ -118,24 +118,31 @@ sub check_quests { next unless ($quest->{active}); next unless (exists $quest->{missions}); + next unless (keys %{$quest->{missions}}); - my $quest_hunt_ID; - foreach (keys %{$questList->{$quest_ID}->{missions}}) { - my $mission = \%{$questList->{$quest_ID}->{missions}->{$_}}; + #my $quest_hunt_ID; + #my $count; + #my $goal; + + foreach my $key (keys %{$quest->{missions}}) { + next unless (defined $key); + my $mission = \%{$quest->{missions}{$key}}; if ((exists $mission->{mob_id} && $mission->{mob_id} == $mob_ID) || (exists $mission->{hunt_id} && $mission->{hunt_id} == $mob_ID)) { - $quest_hunt_ID = $_; - last; + next unless (exists $mission->{'mob_count'} && defined $mission->{'mob_count'}); + next unless (exists $mission->{'mob_goal'} && defined $mission->{'mob_goal'}); + next unless ($mission->{'mob_count'} == $mission->{'mob_goal'}); + $found = 1; + #$quest_hunt_ID = $key; + #$count = $mission->{'mob_count'}; + #$goal = $mission->{'mob_goal'}; + + $self->{fulfilled_quest_id} = $quest_ID; + $self->{fulfilled_mob_id} = $mob_ID; + $self->{fulfilled_member_index} = $member_index; } + last if ($found); } - - next unless (exists $quest->{missions}->{$quest_hunt_ID}->{mob_count}); - next unless (exists $quest->{missions}->{$quest_hunt_ID}->{mob_goal}); - next unless ($quest->{missions}->{$quest_hunt_ID}->{mob_count} == $quest->{missions}->{$quest_hunt_ID}->{mob_goal}); - - $self->{fulfilled_quest_id} = $quest_ID; - $self->{fulfilled_mob_id} = $mob_ID; - $self->{fulfilled_member_index} = $member_index; - last; + last if ($found); } } @@ -143,20 +150,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_quest_id} = undef; - $self->{fulfilled_mob_id} = undef; - $self->{fulfilled_member_index} = undef; - $self->{is_on_stand_by} = 1; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/plugins/eventMacro/eventMacro/Condition/QuestHuntOngoing.pm b/plugins/eventMacro/eventMacro/Condition/QuestHuntOngoing.pm index 990178006f..5fda2c5e9c 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestHuntOngoing.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestHuntOngoing.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -102,6 +101,7 @@ sub update_vars { sub check_quests { my ( $self, $list ) = @_; + my $found = 0; $self->{fulfilled_quest_id} = undef; $self->{fulfilled_mob_id} = undef; $self->{fulfilled_member_index} = undef; @@ -112,29 +112,38 @@ sub check_quests { next unless (defined $quest_ID); next unless (defined $mob_ID); next unless (exists $questList->{$quest_ID}); - next unless (exists $questList->{$quest_ID}->{active}); - next unless ($questList->{$quest_ID}->{active}); - next unless (exists $questList->{$quest_ID}->{missions}); + my $quest = $questList->{$quest_ID}; - my $quest_hunt_ID; - foreach (keys %{$questList->{$quest_ID}->{missions}}) { - my $mission = \%{$questList->{$quest_ID}->{missions}->{$_}}; + next unless (exists $quest->{active}); + next unless ($quest->{active}); + + next unless (exists $quest->{missions}); + next unless (keys %{$quest->{missions}}); + + #my $quest_hunt_ID; + #my $count; + #my $goal; + + foreach my $key (keys %{$quest->{missions}}) { + next unless (defined $key); + my $mission = \%{$questList->{$quest_ID}->{missions}->{$key}}; if ((exists $mission->{mob_id} && $mission->{mob_id} == $mob_ID) || (exists $mission->{hunt_id} && $mission->{hunt_id} == $mob_ID)) { - $quest_hunt_ID = $_; - last; + next unless (exists $mission->{'mob_count'} && defined $mission->{'mob_count'}); + next unless (exists $mission->{'mob_goal'} && defined $mission->{'mob_goal'}); + next unless ($mission->{'mob_count'} < $mission->{'mob_goal'}); + $found = 1; + #$quest_hunt_ID = $key; + #$count = $mission->{'mob_count'}; + #$goal = $mission->{'mob_goal'}; + + + $self->{fulfilled_quest_id} = $quest_ID; + $self->{fulfilled_mob_id} = $mob_ID; + $self->{fulfilled_member_index} = $member_index; } + last if ($found); } - - next if ( - exists $questList->{$quest_ID}->{missions}->{$quest_hunt_ID}->{mob_count} && - exists $questList->{$quest_ID}->{missions}->{$quest_hunt_ID}->{mob_goal} && - $questList->{$quest_ID}->{missions}->{$quest_hunt_ID}->{mob_count} == $questList->{$quest_ID}->{missions}->{$quest_hunt_ID}->{mob_goal} - ); - - $self->{fulfilled_quest_id} = $quest_ID; - $self->{fulfilled_mob_id} = $mob_ID; - $self->{fulfilled_member_index} = $member_index; - last; + last if ($found); } } @@ -142,20 +151,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_quest_id} = undef; - $self->{fulfilled_mob_id} = undef; - $self->{fulfilled_member_index} = undef; - $self->{is_on_stand_by} = 0; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/plugins/eventMacro/eventMacro/Condition/QuestInactive.pm b/plugins/eventMacro/eventMacro/Condition/QuestInactive.pm index 30a8dde135..c6f3956178 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestInactive.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestInactive.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -70,10 +69,11 @@ sub check_quests { foreach my $member_index ( 0..$#{ $self->{members_array} } ) { my $quest_ID = $self->{members_array}->[$member_index]; next unless (defined $quest_ID); - next if (exists $questList->{$quest_ID} && exists $questList->{$quest_ID}->{active} && $questList->{$quest_ID}->{active}); - $self->{fulfilled_ID} = $quest_ID; - $self->{fulfilled_member_index} = $member_index; - last; + if (!keys %{$questList} || !exists $questList->{$quest_ID} || !exists $questList->{$quest_ID}->{active} || !$questList->{$quest_ID}->{active}) { + $self->{fulfilled_ID} = $quest_ID; + $self->{fulfilled_member_index} = $member_index; + last; + } } } @@ -81,19 +81,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_ID} = undef; - $self->{fulfilled_member_index} = undef; - $self->{is_on_stand_by} = 1; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/plugins/eventMacro/eventMacro/Condition/QuestOnTime.pm b/plugins/eventMacro/eventMacro/Condition/QuestOnTime.pm index 164865785f..81402fd83d 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestOnTime.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestOnTime.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -87,19 +86,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_ID} = undef; - $self->{fulfilled_member_index} = undef; - $self->{is_on_stand_by} = 1; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/plugins/eventMacro/eventMacro/Condition/QuestTimeOverdue.pm b/plugins/eventMacro/eventMacro/Condition/QuestTimeOverdue.pm index e1fdd4f655..ae1bd31f4f 100644 --- a/plugins/eventMacro/eventMacro/Condition/QuestTimeOverdue.pm +++ b/plugins/eventMacro/eventMacro/Condition/QuestTimeOverdue.pm @@ -6,9 +6,8 @@ use eventMacro::Utilities qw( find_variable ); use base 'eventMacro::Condition'; -# Using 'inventory_ready' is not optimal, but it works. sub _hooks { - ['packet_mapChange','inventory_ready','packet/quest_all_list','packet/quest_all_list2','packet/quest_all_list3','packet/quest_all_mission','packet/quest_add','packet/quest_delete','packet/quest_update_mission_hunt','packet/quest_active']; + ['quest_all_list_end','quest_all_mission_end','quest_added','quest_update_mission_hunt_end','quest_delete','quest_active']; } sub _parse_syntax { @@ -87,19 +86,7 @@ sub validate_condition { my ( $self, $callback_type, $callback_name, $args ) = @_; if ($callback_type eq 'hook') { - - if ($callback_name eq 'packet_mapChange') { - $self->{fulfilled_ID} = undef; - $self->{fulfilled_member_index} = undef; - $self->{is_on_stand_by} = 1; - - } elsif ($callback_name eq 'inventory_ready') { - return $self->SUPER::validate_condition if ($self->{is_on_stand_by} == 0); - $self->{is_on_stand_by} = 0; - - } else { - $self->{is_on_stand_by} = 0; - } + $self->{is_on_stand_by} = 0; } elsif ($callback_type eq 'variable') { $self->update_vars($callback_name, $args); diff --git a/src/Network/Receive.pm b/src/Network/Receive.pm index 68ca387976..e9b754074c 100644 --- a/src/Network/Receive.pm +++ b/src/Network/Receive.pm @@ -4623,7 +4623,7 @@ sub quest_all_list { mission_len => 44, }; - } elsif ($args->{switch} eq '0AFF') { # SERVERTYPE >= 20150513 + } elsif ($args->{switch} eq '0AFF') { # SERVERTYPE >= 20181010 $quest_info = { quest_pack => 'V C V2 v', quest_keys => [qw(quest_id active time_expire time_start mission_amount)], @@ -4657,6 +4657,8 @@ sub quest_all_list { $offset += $quest_info->{quest_len}; next if !exists $quest->{mission_amount}; + + debug "- Mission amount: $quest->{mission_amount}\n", "info"; for ( my $j = 0 ; $j < $quest->{mission_amount}; $j++ ) { my $mission; @@ -4678,7 +4680,7 @@ sub quest_all_list { } } - Plugins::callHook('quest_list'); + Plugins::callHook('quest_all_list_end'); } # 02b2 .W .L { .L .L .L .W { .L .W .24B }*3 }*num @@ -4737,6 +4739,8 @@ sub quest_all_mission { }); } } + + Plugins::callHook('quest_all_mission_end'); } # 02b3 .L .B .L .L .W { .L .W .24B }*3 (ZC_ADD_QUEST) @@ -4906,6 +4910,8 @@ sub quest_update_mission_hunt { goal => $quest_mission->{mob_goal} }); } + + Plugins::callHook('quest_update_mission_hunt_end'); } # 02B4 @@ -4913,6 +4919,8 @@ sub quest_delete { my ($self, $args) = @_; message TF("Quest: %s has been deleted.\n", $quests_lut{$args->{questID}} ? "$quests_lut{$args->{questID}}{title} ($args->{questID})" : $args->{questID}), "info"; delete $questList->{$args->{questID}}; + + Plugins::callHook('quest_delete'); } # 02B7 @@ -4925,6 +4933,8 @@ sub quest_active { , "info"; $questList->{$args->{questID}}->{active} = $args->{active}; + + Plugins::callHook('quest_active'); } # 02C1