Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local _G = getfenv()
- ServTr = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceConsole-2.0", "AceDB-2.0", "AceHook-2.1")
- local L = AceLibrary("AceLocale-2.2"):new("ServTr")
- local waterfall = AceLibrary("Waterfall-1.0")
- function ServTr:ReturnOptionsTable() return {
- handler = ServTr,
- type='group',
- args = {
- quests = {
- type = 'toggle',
- name = L["quests"],
- desc = L["Toogle quests translation."],
- get = function() return ServTr.db.profile.quests end,
- set = function() ServTr.db.profile.quests = not ServTr.db.profile.quests end,
- },
- items = {
- type = 'toggle',
- name = L["items"],
- desc = L["Toogle items translation."],
- get = function() return ServTr.db.profile.items end,
- set = function() ServTr.db.profile.items = not ServTr.db.profile.items end,
- },
- books = {
- type = 'toggle',
- name = L["books"],
- desc = L["Toogle books translation."],
- get = function() return ServTr.db.profile.books end,
- set = function() ServTr.db.profile.books = not ServTr.db.profile.books end,
- },
- phrases = {
- type = 'toggle',
- name = L["phrases"],
- desc = L["Toogle phrases translation."],
- get = function() return ServTr.db.profile.phrases end,
- set = function() ServTr.db.profile.phrases = not ServTr.db.profile.phrases end,
- },
- npc = {
- type = 'toggle',
- name = L["npc"],
- desc = L["Toogle npcs translation."],
- get = function() return ServTr.db.profile.npc end,
- set = function() ServTr.db.profile.npc = not ServTr.db.profile.npc end,
- },
- objects = {
- type = 'toggle',
- name = L["objects"],
- desc = L["Toogle objects translation."],
- get = function() return ServTr.db.profile.objects end,
- set = function() ServTr.db.profile.objects = not ServTr.db.profile.objects end,
- },
- language = {
- type = 'text',
- name = L["language"],
- desc = L["Set language."],
- usage = L["<your localizationl>"],
- get = function() return ServTr.db.profile.language end,
- set = function(lang) ServTr.db.profile.language = lang end,
- },
- },
- }end
- function ServTr:OnInitialize(name)
- self:RegisterDB("ST_DB")
- self:RegisterDefaults("profile", {
- quests = true,
- items = true,
- books = true,
- phrases = true,
- npc = true,
- objects = true,
- language = "ruRU",
- })
- self:RegisterChatCommand({"/servtrcl", "/servertranslationcl"}, ServTr:ReturnOptionsTable())
- self:RegisterChatCommand({"/servtr", "/servertranslation"}, function() waterfall:Open('ServTr') end)
- waterfall:Register('ServTr', 'aceOptions', ServTr:ReturnOptionsTable(), 'title','Server Translation 1.0','colorR', 0.2, 'colorG', 0.6, 'colorB', 0.2)
- self:HookScript(GameTooltip, "OnShow", function()
- self:items()
- self:npc()
- self:object()
- GameTooltip:Show()
- end)
- self:HookScript(GameTooltip, "OnSizeChanged", function()
- self:object()
- GameTooltip:Show()
- end)
- end
- function ServTr:OnEnable()
- self.QPref = ""
- if EQL3_QuestLogFrame then
- self.QPref = "EQL3_"
- end
- self:SecureHook("MerchantFrame_Update")
- self:SecureHook("LootFrame_Update")
- self:SecureHook("ChatFrame_OnEvent")
- self:SecureHook("ItemTextFrame_OnEvent")
- self:SecureHook("BankFrame_OnEvent")
- self:SecureHook("TaxiFrame_OnEvent")
- self:SecureHook("GossipFrameUpdate")
- self:SecureHook("QuestFrame_SetPortrait")
- self:SecureHook("QuestFrameGreetingPanel_OnShow")
- self:SecureHook("QuestFrameDetailPanel_OnShow")
- self:SecureHook("QuestFrameProgressPanel_OnShow")
- self:SecureHook("QuestFrameProgressItems_Update")
- self:SecureHook("QuestFrameRewardPanel_OnShow")
- self:SecureHook("QuestLog_Update")
- self:SecureHook("QuestLog_UpdateQuestDetails")
- self:RegisterEvent("ADDON_LOADED")
- end
- function ServTr:ADDON_LOADED(name)
- Printd(name)
- end
- function ServTr:trim(text)
- if not text then return nil end
- return gsub(gsub(gsub(text,"%s+"," "),"%s+$",""),"^%s+","")
- end
- function ServTr:prepare(text)
- return gsub(text,strchar(36)..strchar(66),strchar(10))
- end
- function ServTr:CheckColor(text)
- _, _, color, text = string.find(text, "(|cff%x%x%x%x%x%x)(.+)|r")
- if color and text then
- return text, color
- else
- return text
- end
- end
- function ServTr:GetText(db,text)
- if not text then return nil end
- local color, trans_text
- text, color = self:CheckColor(text)
- db = _G[self.db.profile.language.."_"..db]
- if type(db)=="table" and db[text] then
- trans_text = db[text]
- if color then
- trans_text = color..trans_text.."|r"
- end
- return self:prepare(trans_text)
- end
- return nil
- end
- function ServTr:CheckEqlLevel(text)
- local level = ""
- if text and self.QPref == "EQL3_" then
- local _,_, _level, _text = string.find(text, "(%[.-%] )(.+)")
- if _level then return _level, _text end
- end
- return level, text
- end
- function ServTr:npc()
- local text, name, subname
- if self.db.profile.npc then
- for i=1, GameTooltip:NumLines(), 1 do
- text=_G["GameTooltipTextLeft"..i]:GetText()
- name=self:GetText("creature_template",text)
- if name then _G["GameTooltipTextLeft"..1]:SetText(name) end
- subname=self:GetText("creature_SubName",text)
- if subname then _G["GameTooltipTextLeft"..i]:SetText(subname) end
- end
- end
- end
- function ServTr:object()
- if self.db.profile.objects then
- local trans=self:GetText("gameobject_template",_G["GameTooltipTextLeft"..1]:GetText())
- if trans then _G["GameTooltipTextLeft"..1]:SetText(trans) end
- end
- end
- function ServTr:items()
- local text, desc, name, bonus, new_name, new_bonus
- if self.db.profile.items then
- for i=1, GameTooltip:NumLines(), 1 do
- text=_G["GameTooltipTextLeft"..i]:GetText()
- desc=self:GetText("item_description",text)
- if desc then
- _G["GameTooltipTextLeft"..i]:SetText(desc)
- end
- name=self:GetText("item_template",text)
- if name then
- _G["GameTooltipTextLeft"..1]:SetText(name)
- else
- _,_,name,bonus=string.find(text,"(.+)"..L[" of "].."(.+)")
- if not name or not bonus then return end
- new_name=self:GetText("item_template",name)
- new_bonus=self:GetText("bonus",bonus) or L[" of "]..bonus
- if new_name and new_bonus then
- _G["GameTooltipTextLeft"..1]:SetText(new_name..new_bonus)
- end
- end
- end
- end
- end
- function ServTr:ClassTrainerFrame_Update()
- local trans
- if self.db.profile.npc then
- trans=self:GetText("creature_template",ClassTrainerNameText:GetText())
- if trans then ClassTrainerNameText:SetText(trans) end
- trans1=self:GetText("npc_text",self:trim(GetTrainerGreetingText()))
- if trans1 then ClassTrainerGreetingText:SetText(trans1) end
- end
- end
- function ServTr:MerchantFrame_Update()
- local trans, index
- if self.db.profile.npc then
- trans=self:GetText("creature_template",MerchantNameText:GetText())
- if trans then MerchantNameText:SetText(trans) end
- end
- if self.db.profile.items then
- for i=1,MERCHANT_ITEMS_PER_PAGE,1 do
- index=(((MerchantFrame.page-1)*MERCHANT_ITEMS_PER_PAGE)+i)
- trans=self:GetText("item_template",GetMerchantItemInfo(index))
- if trans then _G["MerchantItem"..i.."Name"]:SetText(trans) end
- end
- end
- end
- function ServTr:LootFrame_Update()
- local slot, item, name
- if self.db.profile.items then
- for i=1,LOOTFRAME_NUMBUTTONS,1 do
- slot=(LOOTFRAME_NUMBUTTONS*(LootFrame.page-1))+i -- slot = (numLootToShow * (LootFrame.page - 1)) + index
- _, item=GetLootSlotInfo(slot)
- name=self:GetText("item_template",item)
- if name then
- _G["LootButton"..i.."Text"]:SetText(name)
- else
- _,_,name,bonus=string.find(item,"(.+)"..L[" of "].."(.+)")
- if not name or not bonus then return end
- new_name=self:GetText("item_template",name)
- new_bonus=self:GetText("bonus",bonus) or L[" of "]..bonus
- if new_name and new_bonus then
- _G["LootButton"..i.."Text"]:SetText(new_name..new_bonus)
- end
- end
- end
- end
- end
- function ServTr:ChatFrame_OnEvent(event) -- проверить!
- local text
- 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
- text=self:trim(arg1)
- if type(_G[self.db.profile.language.."_".."creature_ai_texts"])=="table" and _G[self.db.profile.language.."_".."creature_ai_texts"][text] then
- arg1= self:prepare(_G[self.db.profile.language.."_".."creature_ai_texts"][text])
- end
- end
- end
- function ServTr:ItemTextFrame_OnEvent(event)
- local trans, text, creator
- if event=="ITEM_TEXT_READY" then
- if self.db.profile.items then
- trans=self:GetText("item_template",ItemTextGetItem())
- if trans then ItemTextTitleText:SetText(trans) end
- end
- if self.db.profile.books then
- text=self:GetText("page_text",self:trim(ItemTextGetText()))
- creator=self:GetText("page_text",ItemTextGetCreator())
- if creator then
- creator=strchar(10,10)..ITEM_TEXT_FROM..strchar(10)..creator..strchar(10,10)
- ItemTextPageText:SetText(strchar(10)..text..creator)
- else
- ItemTextPageText:SetText(strchar(10)..text..strchar(10,10))
- end
- end
- end
- end
- function ServTr:BankFrame_OnEvent(event)
- if self.db.profile.npc and event=="BANKFRAME_OPENED" then
- local trans=self:GetText("creature_template",BankFrameTitleText:GetText())
- if trans then BankFrameTitleText:SetText(trans) end
- end
- end
- function ServTr:TaxiFrame_OnEvent(event)
- if self.db.profile.npc and event=="TAXIMAP_OPENED" then
- local trans=self:GetText("creature_template",TaxiMerchant:GetText())
- if trans then TaxiMerchant:SetText(trans) end
- end
- end
- function ServTr:GossipFrameUpdate()
- local trans, trans1, trans2
- for i=1,NUMGOSSIPBUTTONS,1 do
- if self.db.profile.npc then
- trans=self:GetText("npc_text",self:trim(GossipGreetingText:GetText()))
- if trans then GossipGreetingText:SetText(trans) end
- trans1=self:GetText("creature_template",self:trim(GossipFrameNpcNameText:GetText()))
- if trans1 then GossipFrameNpcNameText:SetText(trans1) end
- trans2=self:GetText("gossip_menu_option",self:trim(_G["GossipTitleButton" .. i]:GetText()))
- if trans2 then _G["GossipTitleButton" .. i]:SetText(trans2) end
- end
- if self.db.profile.quests then
- local title, level = _G["GossipTitleButton" .. i]:GetText()
- level, title = self:CheckEqlLevel(title)
- trans=self:GetText("Title",title)
- if trans then _G["GossipTitleButton" .. i]:SetText(level..trans) end
- end
- end
- end
- function ServTr:QuestFrame_SetPortrait()
- if self.db.profile.npc then
- local trans=self:GetText("creature_template",QuestFrameNpcNameText:GetText())
- if trans then QuestFrameNpcNameText:SetText(trans) end
- end
- end
- function ServTr:QuestFrameGreetingPanel_OnShow()
- local trans
- if self.db.profile.quests then
- for i=1,NUMGOSSIPBUTTONS,1 do
- if self.db.profile.npc then
- trans=self:GetText("npc_text",self:trim(GetGreetingText()))
- if trans then GreetingText:SetText(trans) end
- end
- if self.db.profile.quests then
- local title, level = _G["QuestTitleButton" .. i]:GetText()
- level, title = self:CheckEqlLevel(title)
- trans=self:GetText("Title",title)
- if trans then _G["QuestTitleButton" .. i]:SetText(level..trans) end
- end
- end
- end
- end
- function ServTr:QuestFrameDetailPanel_OnShow()
- local trans, trans1, trans2
- if self.db.profile.quests then
- local title, level = GetTitleText()
- level, title = self:CheckEqlLevel(title)
- trans=self:GetText("Title",title)
- if trans then QuestTitleText:SetText(level..trans) end
- trans1=self:GetText("Objectives",self:trim(GetObjectiveText()))
- if trans1 then QuestObjectiveText:SetText(trans1) end
- trans2=self:GetText("Details",self:trim(GetQuestText()))
- if trans2 then QuestDescription:SetText(trans2) end
- end
- end
- function ServTr:QuestFrameProgressPanel_OnShow()
- local trans, trans1
- if self.db.profile.quests then
- local title, level = GetTitleText()
- level, title = self:CheckEqlLevel(title)
- trans=self:GetText("Title",title)
- if trans then QuestProgressTitleText:SetText(level..trans) end
- trans1=self:GetText("RequestItemsText",self:trim(GetProgressText()))
- if trans1 then QuestProgressText:SetText(trans1) end
- end
- end
- function ServTr:QuestFrameProgressItems_Update()
- if self.db.profile.items then
- for i=1, GetNumQuestItems(), 1 do
- local trans=self:GetText("item_template",_G["QuestProgressItem"..i.."Name"]:GetText())
- if trans then _G["QuestProgressItem"..i.."Name"]:SetText(trans) end
- end
- end
- end
- function ServTr:QuestFrameRewardPanel_OnShow()
- local trans, trans1
- if self.db.profile.quests then
- local title, level = GetTitleText()
- level, title = self:CheckEqlLevel(title)
- trans=self:GetText("Title",title)
- if trans then QuestRewardTitleText:SetText(level..trans) end
- trans1=self:GetText("OfferRewardText",self:trim(GetRewardText()))
- if trans1 then QuestRewardText:SetText(trans1) end
- end
- end
- function ServTr:QuestLog_Update()
- local questIndex, trans
- if self.db.profile.quests then
- if self.QPref == "" then
- for i=1,QUESTS_DISPLAYED,1 do
- questIndex=i+FauxScrollFrame_GetOffset(QuestLogListScrollFrame)
- trans=self:GetText("Title",GetQuestLogTitle(questIndex))
- if trans then _G[self.QPref.."QuestLogTitle"..i]:SetText(trans) end
- end
- else
- for i=1,EQL3_QUESTS_DISPLAYED,1 do
- questIndex=i+FauxScrollFrame_GetOffset(EQL3_QuestLogListScrollFrame)
- local questLogTitleText,level,questTag=GetQuestLogTitle(questIndex);
- trans=self:GetText("Title",questLogTitleText)
- if (QuestlogOptions[EQL3_Player].ShowQuestLevels==1) then
- tempLevel=level;
- if (questTag~=NIL) then
- tempLevel=tempLevel.."+";
- end
- if trans then _G["EQL3_QuestLogTitle"..i]:SetText(" ".."["..tempLevel.."] "..trans) end
- else
- if trans then _G["EQL3_QuestLogTitle"..i]:SetText(trans) end
- end
- end
- end
- end
- end
- function ServTr:QuestLog_UpdateQuestDetails()
- local trans, trans1, trans2, trans3
- if self.db.profile.quests then
- trans=self:GetText("Title",GetQuestLogTitle(GetQuestLogSelection()))
- if trans then getglobal(self.QPref.."QuestLogQuestTitle"):SetText(trans) end
- local questDescription,questObjectives=GetQuestLogQuestText()
- trans1=self:GetText("Objectives",self:trim(questObjectives))
- if trans1 then getglobal(self.QPref.."QuestLogObjectivesText"):SetText(trans1) end
- trans2=self:GetText("Details",self:trim(questDescription))
- if trans2 then getglobal(self.QPref.."QuestLogQuestDescription"):SetText(trans2) end
- for i=1, GetNumQuestLeaderBoards(), 1 do
- s = _G[self.QPref.."QuestLogObjective"..i]:GetText()
- local _,_,name, count = string.find(s, "(.+)( "..L["slain"]..": %d+/%d+)")
- if not name or not count then
- _,_,name, count = string.find(s, "(.+)(: %d+/%d+)")
- end
- if name and count then
- trans3 = self:GetText("creature_template", name) or self:GetText("item_template", name) or self:GetText("ObjectiveText", name)
- if trans3 then _G[self.QPref.."QuestLogObjective"..i]:SetText(trans3..count) end
- end
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement