1
+ -- QuestTradutor, Addon para Vanilla (1.12.1), TBC (2.4) e Wrath (3.3.0+)
2
+ -- Port por: Leandro Araujo
3
+ -- Pagina do Github: https://github.com/leoaviana/QuestTradutor
4
+ -- Original Addon: WoWpoPolsku_Quests (wersja: CLASSIC.02) 2019.12.23
5
+ -- Opis: AddOn wyświetla przetłumaczone questy w języku polskim.
6
+ -- Autor: Platine (e-mail: platine.wow@gmail.com)
7
+ -- Original Addon project page: https://wowpopolsku.pl
8
+
9
+ QuestTradutor = CreateFrame (" Frame" , nil , UIParent );
10
+
11
+
12
+ local _ , _ , _ , version = GetBuildInfo ();
13
+
14
+ if version >= 20000 and version <= 20400 then
15
+ QuestTradutor .target = 2
16
+ elseif version >= 30000 and version <= 30300 then
17
+ QuestTradutor .target = 3
18
+ else
19
+ QuestTradutor .target = 3
20
+ end
21
+
22
+ QuestTradutor :RegisterEvent (" ADDON_LOADED" );
23
+ QuestTradutor :RegisterEvent (" QUEST_LOG_UPDATE" );
24
+ QuestTradutor :RegisterEvent (" QUEST_DETAIL" );
25
+ QuestTradutor :RegisterEvent (" QUEST_PROGRESS" );
26
+ QuestTradutor :RegisterEvent (" QUEST_COMPLETE" );
27
+ QuestTradutor :RegisterEvent (" QUEST_ACCEPTED" );
28
+ QuestTradutor :RegisterEvent (" QUEST_GREETING" );
29
+ QuestTradutor :RegisterEvent (" GOSSIP_SHOW" );
30
+
31
+ if (QuestTradutor .target == 2 ) then
32
+ QuestTradutor .G = getfenv ()
33
+ QuestTradutor .QuestLogDetailFrame = QuestLogFrame
34
+ else
35
+ QuestTradutor .G = _G
36
+ QuestTradutor .QuestLogDetailFrame = QuestLogDetailFrame
37
+ end
38
+
39
+
40
+ if (QuestTradutor .target > 2 ) then
41
+ QuestTradutor .Print = function (...) print (... ) end
42
+ else
43
+ QuestTradutor .Print = function (arg1 ) DEFAULT_CHAT_FRAME :AddMessage (arg1 ); end
44
+ end
45
+
46
+
47
+ local function c_gossipHelper (...)
48
+ local gn = 0
49
+ for i = 1 , select (' #' , ... ), 2 do
50
+ gn = gn + 1
51
+ end
52
+ return gn
53
+ end
54
+
55
+ QuestTradutor .SecHookScript = function (f , script , func )
56
+ local prev = f :GetScript (script )
57
+ f :SetScript (script , function (a1 ,a2 ,a3 ,a4 ,a5 ,a6 ,a7 ,a8 ,a9 )
58
+ if prev then prev (a1 ,a2 ,a3 ,a4 ,a5 ,a6 ,a7 ,a8 ,a9 ) end
59
+ func (a1 ,a2 ,a3 ,a4 ,a5 ,a6 ,a7 ,a8 ,a9 )
60
+ end )
61
+ end
62
+
63
+ QuestTradutor .HookSecureFunction = hooksecurefunc
64
+
65
+ if (QuestTradutor .target < 3 ) then
66
+ QuestTradutor .GetNumGossipOptions = function ()
67
+ return c_gossipHelper (GetGossipOptions ())
68
+ end
69
+ else
70
+ QuestTradutor .GetNumGossipOptions = GetNumGossipOptions
71
+ end
72
+ QuestTradutor .GetNumGossipActiveQuests = GetNumGossipActiveQuests
73
+ QuestTradutor .GetNumGossipAvailableQuests = GetNumGossipAvailableQuests
74
+
75
+ QuestTradutor .StringHash = function (self , text )
76
+ local counter = 1 ;
77
+ local pomoc = 0 ;
78
+ local dlug = string.len (text );
79
+ for i = 1 , dlug , 3 do
80
+ counter = math.fmod (counter * 8161 , 4294967279 ); -- 2^32 - 17: Prime!
81
+ pomoc = (string.byte (text ,i )* 16776193 );
82
+ counter = counter + pomoc ;
83
+ pomoc = ((string.byte (text ,i + 1 ) or (dlug - i + 256 ))* 8372226 );
84
+ counter = counter + pomoc ;
85
+ pomoc = ((string.byte (text ,i + 2 ) or (dlug - i + 256 ))* 3932164 );
86
+ counter = counter + pomoc ;
87
+ end
88
+ return math.fmod (counter , 4294967291 ) -- 2^32 - 5: Prime (and different from the prime in the loop)
89
+ end
90
+
91
+ QuestTradutor .GetQuestIDFromQuestLog = function (self , questName , questID , QTR_name , QTR_race , QTR_class )
92
+ local q_title = questName
93
+ local q_i
94
+ local quest_ID
95
+
96
+ if ( quest_ID == 0 or quest_ID == nil ) then
97
+ if (QuestTranslator_QuestList [q_title ]) then
98
+ local q_lists = QuestTranslator_QuestList [q_title ];
99
+ q_i = string.find (q_lists , " ," );
100
+ if ( string.find (q_lists , " ," )== nil ) then
101
+ -- only 1 questID to this title
102
+ quest_ID = tonumber (q_lists );
103
+ else
104
+ local QTR_table = QuestTradutor :splitqinfo (q_lists , " ," , - 1 );
105
+
106
+ if (QTR_table == nil ) then
107
+ return 0 ;
108
+ end
109
+ local QTR_multiple = " " ;
110
+ local QTR_Center = " " ;
111
+
112
+ SelectQuestLogEntry (questID )
113
+
114
+ for ii ,vv in ipairs (QTR_table ) do
115
+ if (QuestTranslator_QuestMatch [tonumber (vv )]) then
116
+ local origQuestText = GetQuestLogQuestText ();
117
+ local questTxtMatch = QuestTranslator_QuestMatch [tonumber (vv )];
118
+ questTxtMatch = string.gsub (questTxtMatch , ' $N$' , string.upper (QTR_name ));
119
+ questTxtMatch = string.gsub (questTxtMatch , ' $N' , QTR_name );
120
+ questTxtMatch = string.gsub (questTxtMatch , ' $B' , ' \n ' );
121
+ questTxtMatch = string.gsub (questTxtMatch , ' $R' , QTR_race );
122
+ questTxtMatch = string.gsub (questTxtMatch , ' $C' , QTR_class );
123
+ questTxtMatch = string.gsub (questTxtMatch , ' $b$' , string.upper (QTR_name ));
124
+ questTxtMatch = string.gsub (questTxtMatch , ' $n' , QTR_name );
125
+ questTxtMatch = string.gsub (questTxtMatch , ' $b' , ' \n ' );
126
+ questTxtMatch = string.gsub (questTxtMatch , ' $r' , QTR_race );
127
+ questTxtMatch = string.gsub (questTxtMatch , ' $c' , QTR_class );
128
+
129
+ if (string.find (origQuestText , questTxtMatch )) then
130
+ if (QTR_Center == " " ) then
131
+ QTR_Center = vv ;
132
+ else
133
+ QTR_multiple = QTR_multiple .. " , " .. vv ;
134
+ end
135
+ end
136
+ end
137
+ end
138
+ if ( string.len (QTR_Center )> 0 ) then
139
+ quest_ID = tonumber (QTR_Center );
140
+ if ( string.len (QTR_multiple )> 0 ) then
141
+ QTR_multiple = " (" .. string.sub (QTR_multiple , 3 ) .. " )" ;
142
+ -- Essa quest possui duplicatas, sua tradução pode estar incorreta, porem, é garantida a seleção correta da quest no banco
143
+ -- de dados utilizando o QuestLog (L) (WOTLK apenas.)
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ return (quest_ID );
150
+ end
0 commit comments