From 578df5d59de03b0f24ccd2737336fc588cc9317b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Bosc=C3=A1?= Date: Wed, 1 Apr 2026 15:36:25 -0300 Subject: [PATCH] Translate mission mob names on quest add Register the quest_mission_added event and add a handler to translate mission mob names when missions are added at runtime. Introduces _translate_single_token_inplace (to handle single-token strings) and questMissionAdded which validates quest/mission data, runs token and single-token translation on mission->{mob_name}, skips entries flagged as missing, and updates the mission name in-place. --- plugins/LATAMTranslate/LATAMTranslate.pl | 30 +++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/plugins/LATAMTranslate/LATAMTranslate.pl b/plugins/LATAMTranslate/LATAMTranslate.pl index f06778ef60..458edf8c3b 100644 --- a/plugins/LATAMTranslate/LATAMTranslate.pl +++ b/plugins/LATAMTranslate/LATAMTranslate.pl @@ -46,7 +46,8 @@ sub load { ['packet_pre/local_broadcast', \&localBroadcastPre, undef], ['packet_pre/system_chat', \&systemChatPre, undef], ['packet_pre/npc_talk', \&npcTalkPre, undef], - ['pre/npc_talk_responses', \&npcTalkRespPre, undef] + ['pre/npc_talk_responses', \&npcTalkRespPre, undef], + ['quest_mission_added', \&questMissionAdded, undef] ); loadJSON(); } @@ -154,6 +155,14 @@ sub _translate_tokens_inplace { $$sref =~ s/$RE_TOKEN_BLOB/_translate_blob($1)/gex; } +sub _translate_single_token_inplace { + my ($sref) = @_; + return unless defined $$sref; + return unless length $$sref; + return unless exists $strings_cache{$$sref}; + $$sref = translate_token($$sref); +} + sub _translate_args_field { my ($args, $field) = @_; my $val = $args->{$field}; @@ -162,6 +171,25 @@ sub _translate_args_field { $args->{$field} = $val; } +sub questMissionAdded { + my (undef, $args) = @_; + + return unless defined $args->{questID} && defined $args->{mission_id}; + return unless exists $questList->{$args->{questID}}; + return unless exists $questList->{$args->{questID}}->{missions}; + return unless exists $questList->{$args->{questID}}->{missions}->{$args->{mission_id}}; + + my $mission = $questList->{$args->{questID}}->{missions}->{$args->{mission_id}}; + return unless defined $mission->{mob_name}; + + my $name = $mission->{mob_name}; + _translate_tokens_inplace(\$name); + _translate_single_token_inplace(\$name); + return if $name =~ /\[MISSING:/; + + $mission->{mob_name} = $name; +} + sub setName { my (undef, $args) = @_; my $name = $args->{new_name};