Advertisement
Shuraken007

Untitled

Apr 25th, 2017
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 15.41 KB | None | 0 0
  1. local _G = getfenv()
  2.  
  3. ServTr = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "AceHook-2.1")
  4. local L = AceLibrary("AceLocale-2.2"):new("ServTr")
  5. local waterfall = AceLibrary("Waterfall-1.0")
  6.  
  7. function ServTr:ReturnOptionsTable() return {
  8.     handler = ServTr,
  9.     type='group',
  10.     args = {
  11.         quests = {
  12.             type = 'toggle',
  13.             name = L["quests"],
  14.             desc = L["Toogle quests translation."],
  15.             get = function() return ServTr.db.profile.quests end,
  16.             set = function() ServTr.db.profile.quests = not ServTr.db.profile.quests end,
  17.         },
  18.         items = {
  19.             type = 'toggle',
  20.             name = L["items"],
  21.             desc = L["Toogle items translation."],
  22.             get = function() return ServTr.db.profile.items end,
  23.             set = function() ServTr.db.profile.items = not ServTr.db.profile.items end,
  24.         },
  25.         books = {
  26.             type = 'toggle',
  27.             name = L["books"],
  28.             desc = L["Toogle books translation."],
  29.             get = function() return ServTr.db.profile.books end,
  30.             set = function() ServTr.db.profile.books = not ServTr.db.profile.books end,
  31.         },
  32.         phrases = {
  33.             type = 'toggle',
  34.             name = L["phrases"],
  35.             desc = L["Toogle phrases translation."],
  36.             get = function() return ServTr.db.profile.phrases end,
  37.             set = function() ServTr.db.profile.phrases = not ServTr.db.profile.phrases end,
  38.         },
  39.         npc = {
  40.             type = 'toggle',
  41.             name = L["npc"],
  42.             desc = L["Toogle npcs translation."],
  43.             get = function() return ServTr.db.profile.npc end,
  44.             set = function() ServTr.db.profile.npc = not ServTr.db.profile.npc end,
  45.         },
  46.         objects = {
  47.             type = 'toggle',
  48.             name = L["objects"],
  49.             desc = L["Toogle objects translation."],
  50.             get = function() return ServTr.db.profile.objects end,
  51.             set = function() ServTr.db.profile.objects = not ServTr.db.profile.objects end,
  52.         },
  53.         language = {
  54.             type = 'text',
  55.             name = L["language"],
  56.             desc = L["Set language."],
  57.             usage = L["<your localizationl>"],
  58.             get = function() return ServTr.db.profile.language end,
  59.             set = function(lang) ServTr.db.profile.language = lang end,
  60.         },
  61.     },
  62. }end
  63.  
  64. function ServTr:OnInitialize(name)
  65.     self:RegisterDB("ST_DB")
  66.     self:RegisterDefaults("profile", {
  67.         quests = true,
  68.         items = true,
  69.         books = true,
  70.         phrases = true,
  71.         npc = true,
  72.         objects = true,
  73.         language = "ruRU",
  74.     })
  75.     self:RegisterChatCommand({"/servtrcl", "/servertranslationcl"}, ServTr:ReturnOptionsTable())
  76.     self:RegisterChatCommand({"/servtr", "/servertranslation"}, function() waterfall:Open('ServTr') end)
  77.     waterfall:Register('ServTr', 'aceOptions', ServTr:ReturnOptionsTable(), 'title','Server Translation 1.0','colorR', 0.2, 'colorG', 0.6, 'colorB', 0.2)
  78.     self:HookScript(GameTooltip, "OnShow", function()
  79.         self:items()
  80.         self:npc()
  81.         self:object()
  82.         GameTooltip:Show()
  83.     end)
  84.     self:HookScript(GameTooltip, "OnSizeChanged", function()
  85.         self:object()
  86.         GameTooltip:Show()
  87.     end)
  88. end
  89.  
  90. function ServTr:OnEnable()
  91.     self.QPref = ""
  92.     if EQL3_QuestLogFrame then
  93.         self.QPref = "EQL3_"
  94.     end
  95.     self:SecureHook("MerchantFrame_Update")
  96.     self:SecureHook("LootFrame_Update")
  97.     self:SecureHook("ChatFrame_OnEvent")
  98.     self:SecureHook("ItemTextFrame_OnEvent")
  99.     self:SecureHook("BankFrame_OnEvent")
  100.     self:SecureHook("TaxiFrame_OnEvent")
  101.     self:SecureHook("GossipFrameUpdate")
  102.     self:SecureHook("QuestFrame_SetPortrait")
  103.     self:SecureHook("QuestFrameGreetingPanel_OnShow")
  104.     self:SecureHook("QuestFrameDetailPanel_OnShow")
  105.     self:SecureHook("QuestFrameProgressPanel_OnShow")
  106.     self:SecureHook("QuestFrameProgressItems_Update")
  107.     self:SecureHook("QuestFrameRewardPanel_OnShow")
  108.     self:SecureHook("QuestLog_Update")
  109.     self:SecureHook("QuestLog_UpdateQuestDetails")
  110.     self:RegisterEvent("ADDON_LOADED")
  111. end
  112.  
  113. function ServTr:ADDON_LOADED(name)
  114.     Printd(name)
  115. end
  116.  
  117. function ServTr:trim(text)
  118.     if not text then return nil end
  119.     return gsub(gsub(gsub(text,"%s+"," "),"%s+$",""),"^%s+","")
  120. end
  121.  
  122. function ServTr:prepare(text)
  123.     return gsub(text,strchar(36)..strchar(66),strchar(10))
  124. end
  125.  
  126. function ServTr:CheckColor(text)
  127.     _, _, color, text = string.find(text, "(|cff%x%x%x%x%x%x)(.+)|r")
  128.     if color and text then
  129.         return text, color
  130.     else
  131.         return text
  132.     end
  133. end
  134.  
  135. function ServTr:GetText(db,text)
  136.     if not text then return nil end
  137.     local color, trans_text
  138.     text, color = self:CheckColor(text)
  139.     db = _G[self.db.profile.language.."_"..db]
  140.     if type(db)=="table" and db[text] then
  141.         trans_text = db[text]
  142.         if color then
  143.             trans_text = color..trans_text.."|r"
  144.         end
  145.         return self:prepare(trans_text)
  146.     end
  147.     return nil
  148. end
  149.  
  150. function ServTr:CheckEqlLevel(text)
  151.     local level = ""
  152.     if text and self.QPref == "EQL3_" then
  153.         local _,_, _level, _text = string.find(text, "(%[.-%] )(.+)")
  154.         if _level then return _level, _text end
  155.     end
  156.     return level, text
  157. end
  158.  
  159. function ServTr:npc()
  160.     local text, name, subname
  161.     if self.db.profile.npc then
  162.         for i=1, GameTooltip:NumLines(), 1 do
  163.             text=_G["GameTooltipTextLeft"..i]:GetText()
  164.             name=self:GetText("creature_template",text)
  165.             if name then _G["GameTooltipTextLeft"..1]:SetText(name) end
  166.             subname=self:GetText("creature_SubName",text)
  167.             if subname then _G["GameTooltipTextLeft"..i]:SetText(subname) end
  168.         end
  169.     end
  170. end
  171.  
  172. function ServTr:object()
  173.     if self.db.profile.objects then
  174.         local trans=self:GetText("gameobject_template",_G["GameTooltipTextLeft"..1]:GetText())
  175.         if trans then _G["GameTooltipTextLeft"..1]:SetText(trans) end
  176.     end
  177. end
  178.  
  179. function ServTr:items()
  180.     local text, desc, name, bonus, new_name, new_bonus
  181.     if self.db.profile.items then
  182.         for i=1, GameTooltip:NumLines(), 1 do
  183.             text=_G["GameTooltipTextLeft"..i]:GetText()
  184.             desc=self:GetText("item_description",text)
  185.             if desc then
  186.                 _G["GameTooltipTextLeft"..i]:SetText(desc)
  187.             end
  188.             name=self:GetText("item_template",text)
  189.             if name then
  190.                 _G["GameTooltipTextLeft"..1]:SetText(name)
  191.                 else
  192.                 _,_,name,bonus=string.find(text,"(.+)"..L[" of "].."(.+)")
  193.                 if not name or not bonus then return end
  194.                 new_name=self:GetText("item_template",name)
  195.                 new_bonus=self:GetText("bonus",bonus) or L[" of "]..bonus
  196.                 if new_name and new_bonus then
  197.                     _G["GameTooltipTextLeft"..1]:SetText(new_name..new_bonus)
  198.                 end
  199.             end
  200.         end
  201.     end
  202. end
  203.  
  204. function ServTr:ClassTrainerFrame_Update()
  205.     local trans
  206.     if self.db.profile.npc then
  207.         trans=self:GetText("creature_template",ClassTrainerNameText:GetText())
  208.         if trans then ClassTrainerNameText:SetText(trans) end
  209.         trans1=self:GetText("npc_text",self:trim(GetTrainerGreetingText()))
  210.         if trans1 then ClassTrainerGreetingText:SetText(trans1) end
  211.     end
  212. end
  213.  
  214. function ServTr:MerchantFrame_Update()
  215.     local trans, index
  216.     if self.db.profile.npc then
  217.         trans=self:GetText("creature_template",MerchantNameText:GetText())
  218.         if trans then MerchantNameText:SetText(trans) end
  219.     end
  220.     if self.db.profile.items then
  221.         for i=1,MERCHANT_ITEMS_PER_PAGE,1 do
  222.             index=(((MerchantFrame.page-1)*MERCHANT_ITEMS_PER_PAGE)+i)
  223.             trans=self:GetText("item_template",GetMerchantItemInfo(index))
  224.             if trans then _G["MerchantItem"..i.."Name"]:SetText(trans) end
  225.         end
  226.     end
  227. end
  228.  
  229. function ServTr:LootFrame_Update()
  230.     local slot, item, name
  231.     if self.db.profile.items then
  232.         for i=1,LOOTFRAME_NUMBUTTONS,1 do
  233.             slot=(LOOTFRAME_NUMBUTTONS*(LootFrame.page-1))+i -- slot = (numLootToShow * (LootFrame.page - 1)) + index
  234.             _, item=GetLootSlotInfo(slot)
  235.             name=self:GetText("item_template",item)
  236.             if name then
  237.                 _G["LootButton"..i.."Text"]:SetText(name)
  238.                 else
  239.                 _,_,name,bonus=string.find(item,"(.+)"..L[" of "].."(.+)")
  240.                 if not name or not bonus then return end
  241.                 new_name=self:GetText("item_template",name)
  242.                 new_bonus=self:GetText("bonus",bonus) or L[" of "]..bonus
  243.                 if new_name and new_bonus then
  244.                     _G["LootButton"..i.."Text"]:SetText(new_name..new_bonus)
  245.                 end
  246.             end
  247.         end
  248.     end
  249. end
  250.  
  251. function ServTr:ChatFrame_OnEvent(event) -- проверить!
  252.     local text
  253.     if self.db.profile.phrases and (event=="CHAT_MSG_MONSTER_SAY" or event=="CHAT_MSG_MONSTER_YELL" or event=="CHAT_MSG_MONSTER_EMOTE" or event=="CHAT_MSG_MONSTER_WHISPER") then
  254.         text=self:trim(arg1)
  255.         if type(_G[self.db.profile.language.."_".."creature_ai_texts"])=="table" and _G[self.db.profile.language.."_".."creature_ai_texts"][text] then
  256.             arg1= self:prepare(_G[self.db.profile.language.."_".."creature_ai_texts"][text])
  257.         end
  258.     end
  259. end
  260.  
  261. function ServTr:ItemTextFrame_OnEvent(event)
  262.     local trans, text, creator
  263.     if event=="ITEM_TEXT_READY" then
  264.         if self.db.profile.items then
  265.             trans=self:GetText("item_template",ItemTextGetItem())
  266.             if trans then ItemTextTitleText:SetText(trans) end
  267.         end
  268.         if self.db.profile.books then
  269.             text=self:GetText("page_text",self:trim(ItemTextGetText()))
  270.             creator=self:GetText("page_text",ItemTextGetCreator())
  271.             if creator then
  272.                 creator=strchar(10,10)..ITEM_TEXT_FROM..strchar(10)..creator..strchar(10,10)
  273.                 ItemTextPageText:SetText(strchar(10)..text..creator)
  274.                 else
  275.                 ItemTextPageText:SetText(strchar(10)..text..strchar(10,10))
  276.             end
  277.         end
  278.     end
  279. end
  280.  
  281. function ServTr:BankFrame_OnEvent(event)
  282.     if self.db.profile.npc and event=="BANKFRAME_OPENED" then
  283.         local trans=self:GetText("creature_template",BankFrameTitleText:GetText())
  284.         if trans then BankFrameTitleText:SetText(trans) end
  285.     end
  286. end
  287.  
  288. function ServTr:TaxiFrame_OnEvent(event)
  289.     if self.db.profile.npc and event=="TAXIMAP_OPENED" then
  290.         local trans=self:GetText("creature_template",TaxiMerchant:GetText())
  291.         if trans then TaxiMerchant:SetText(trans) end
  292.     end
  293. end
  294.  
  295. function ServTr:GossipFrameUpdate()
  296.     local trans, trans1, trans2
  297.     for i=1,NUMGOSSIPBUTTONS,1 do
  298.         if self.db.profile.npc then
  299.             trans=self:GetText("npc_text",self:trim(GossipGreetingText:GetText()))
  300.             if trans then GossipGreetingText:SetText(trans) end
  301.             trans1=self:GetText("creature_template",self:trim(GossipFrameNpcNameText:GetText()))
  302.             if trans1 then GossipFrameNpcNameText:SetText(trans1) end
  303.             trans2=self:GetText("gossip_menu_option",self:trim(_G["GossipTitleButton" .. i]:GetText()))
  304.             if trans2 then _G["GossipTitleButton" .. i]:SetText(trans2) end
  305.         end
  306.         if self.db.profile.quests then
  307.             local title, level = _G["GossipTitleButton" .. i]:GetText()
  308.             level, title  = self:CheckEqlLevel(title)
  309.             trans=self:GetText("Title",title)
  310.             if trans then _G["GossipTitleButton" .. i]:SetText(level..trans) end
  311.         end
  312.     end
  313. end
  314.  
  315. function ServTr:QuestFrame_SetPortrait()
  316.     if self.db.profile.npc then
  317.         local trans=self:GetText("creature_template",QuestFrameNpcNameText:GetText())
  318.         if trans then QuestFrameNpcNameText:SetText(trans) end
  319.     end
  320. end
  321.  
  322. function ServTr:QuestFrameGreetingPanel_OnShow()
  323.     local trans
  324.     if self.db.profile.quests then
  325.         for i=1,NUMGOSSIPBUTTONS,1 do
  326.             if self.db.profile.npc then
  327.                 trans=self:GetText("npc_text",self:trim(GetGreetingText()))
  328.                 if trans then GreetingText:SetText(trans) end
  329.             end
  330.             if self.db.profile.quests then
  331.                 local title, level = _G["QuestTitleButton" .. i]:GetText()
  332.                 level, title  = self:CheckEqlLevel(title)
  333.                 trans=self:GetText("Title",title)
  334.                 if trans then _G["QuestTitleButton" .. i]:SetText(level..trans) end
  335.             end
  336.         end
  337.     end
  338. end
  339.  
  340. function ServTr:QuestFrameDetailPanel_OnShow()
  341.     local trans, trans1, trans2
  342.     if self.db.profile.quests then
  343.         local title, level = GetTitleText()
  344.         level, title  = self:CheckEqlLevel(title)
  345.         trans=self:GetText("Title",title)
  346.         if trans then QuestTitleText:SetText(level..trans) end
  347.         trans1=self:GetText("Objectives",self:trim(GetObjectiveText()))
  348.         if trans1 then QuestObjectiveText:SetText(trans1) end
  349.         trans2=self:GetText("Details",self:trim(GetQuestText()))
  350.         if trans2 then QuestDescription:SetText(trans2) end
  351.     end
  352. end
  353.  
  354. function ServTr:QuestFrameProgressPanel_OnShow()
  355.     local trans, trans1
  356.     if self.db.profile.quests then
  357.         local title, level = GetTitleText()
  358.         level, title  = self:CheckEqlLevel(title)
  359.         trans=self:GetText("Title",title)
  360.         if trans then QuestProgressTitleText:SetText(level..trans) end
  361.         trans1=self:GetText("RequestItemsText",self:trim(GetProgressText()))
  362.         if trans1 then QuestProgressText:SetText(trans1) end
  363.     end
  364. end
  365.  
  366. function ServTr:QuestFrameProgressItems_Update()
  367.     if self.db.profile.items then
  368.         for i=1, GetNumQuestItems(), 1 do
  369.             local trans=self:GetText("item_template",_G["QuestProgressItem"..i.."Name"]:GetText())
  370.             if trans then _G["QuestProgressItem"..i.."Name"]:SetText(trans) end
  371.         end
  372.     end
  373. end
  374.  
  375. function ServTr:QuestFrameRewardPanel_OnShow()
  376.     local trans, trans1
  377.     if self.db.profile.quests then
  378.         local title, level = GetTitleText()
  379.         level, title  = self:CheckEqlLevel(title)
  380.         trans=self:GetText("Title",title)
  381.         if trans then QuestRewardTitleText:SetText(level..trans) end
  382.         trans1=self:GetText("OfferRewardText",self:trim(GetRewardText()))
  383.         if trans1 then QuestRewardText:SetText(trans1) end
  384.     end
  385. end
  386.  
  387. function ServTr:QuestLog_Update()
  388.     local questIndex, trans
  389.     if self.db.profile.quests then
  390.         if self.QPref == "" then
  391.             for i=1,QUESTS_DISPLAYED,1 do
  392.                 questIndex=i+FauxScrollFrame_GetOffset(QuestLogListScrollFrame)
  393.                 trans=self:GetText("Title",GetQuestLogTitle(questIndex))
  394.                 if trans then _G[self.QPref.."QuestLogTitle"..i]:SetText(trans) end
  395.             end
  396.             else
  397.             for i=1,EQL3_QUESTS_DISPLAYED,1 do
  398.                 questIndex=i+FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame)
  399.                 local questLogTitleText,level,questTag=GetQuestLogTitle(questIndex);
  400.                 trans=self:GetText("Title",questLogTitleText)
  401.                 if (QuestlogOptions[EQL3_Player].ShowQuestLevels==1) then
  402.                     tempLevel=level;
  403.                     if (questTag~=NIL) then
  404.                         tempLevel=tempLevel.."+";
  405.                     end
  406.                     if trans then _G["EQL3_QuestLogTitle"..i]:SetText("  ".."["..tempLevel.."] "..trans) end
  407.                     else
  408.                     if trans then _G["EQL3_QuestLogTitle"..i]:SetText(trans) end
  409.                 end
  410.             end
  411.         end
  412.     end
  413. end
  414.  
  415. function ServTr:QuestLog_UpdateQuestDetails()
  416.     local trans, trans1, trans2, trans3
  417.     if self.db.profile.quests then
  418.         trans=self:GetText("Title",GetQuestLogTitle(GetQuestLogSelection()))
  419.         if trans then getglobal(self.QPref.."QuestLogQuestTitle"):SetText(trans) end
  420.         local questDescription,questObjectives=GetQuestLogQuestText()
  421.         trans1=self:GetText("Objectives",self:trim(questObjectives))
  422.         if trans1 then getglobal(self.QPref.."QuestLogObjectivesText"):SetText(trans1) end
  423.         trans2=self:GetText("Details",self:trim(questDescription))
  424.         if trans2 then getglobal(self.QPref.."QuestLogQuestDescription"):SetText(trans2) end
  425.         for i=1, GetNumQuestLeaderBoards(), 1 do
  426.             s = _G[self.QPref.."QuestLogObjective"..i]:GetText()
  427.             local _,_,name, count = string.find(s, "(.+)( "..L["slain"]..": %d+/%d+)")
  428.             if not name or not count then
  429.                 _,_,name, count = string.find(s, "(.+)(: %d+/%d+)")
  430.             end
  431.             if name and count then
  432.                 trans3 = self:GetText("creature_template", name) or self:GetText("item_template", name) or self:GetText("ObjectiveText", name)
  433.                 if trans3 then _G[self.QPref.."QuestLogObjective"..i]:SetText(trans3..count) end
  434.             end
  435.         end
  436.     end
  437. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement