applehook.lua
字号:
value(unpack(arg));
called = true;
end
end
if(not called) then
--Sea.IO.dprint(nil,"no hooks left for ",name,", clearing");
setglobal(name,Sea.util.Hooks[name].orig);
Sea.util.Hooks[name] = nil;
end
return retval;
end
-- Alias table
HookFunction = Sea.util.hook;
UnHookFunction = Sea.util.unhook;
Sea.string.split = Sea.util.split;
Sea.string.explode = Sea.util.split;
Sea.table = {
--
-- getValueIndex(table, value)
--
-- Returns the key associated with the value in the table/list.
--
-- Args:
-- (table t, object item)
-- t - table to search
-- item - item to find the index of
--
-- Returns:
-- nil - if empty
-- index - if found
getValueIndex = function (table, item)
if ( table ) then
for k,v in table do
if ( v == item ) then return k; end
end
end
return nil;
end;
--
-- isInTable(table, value )
--
-- Returns:
-- true if the item is in the list/table
-- false if not in the list/table
--
isInTable = function(table, value)
return (Sea.table.getValueIndex(table,value) ~= nil )
end;
--
-- isStringInTableValue(table[string] table, string word)
--
-- Returns:
-- true if word exists in a string value of table
-- false if word is never used
--
-- Aliases:
-- isWordInList()
--
isStringInTableValue = function (table, word)
if ( type(table) == "nil" ) then return false; end
for k,v in table do
if ( type(v) == "string" ) then
if ( string.find(word,v) ~= nil ) then
return true;
end
end
end
return false;
end;
--
-- Aliases:
-- Sea.table.getIndexInList
-- Sea.list.getIndexInList
--
--
-- push( table, value )
--
-- Adds a value to the end of the table.
--
-- Arg:
-- table - the table
-- value - the value for the end of the table
--
push = function (table,val)
if(not table or not table.n) then
--Sea.IO.derror(nil, "Bad table passed to push");
return nil;
end
table.n = table.n+1;
table[table.n] = val;
end;
--
-- pop ( table )
--
-- Removes a value and returns it from the table
-- Arg:
-- table - the table
--
pop = function (table)
if(not table or not table.n) then
--Sea.IO.derror(nil,"Bad table passed to pop");
return nil;
end
if ( table.n == 0 ) then
return nil;
end
local v = table[table.n];
table.n = table.n - 1;
return v;
end;
};
-- Aliases
Sea.table.getIndexInList = Sea.table.getValueIndex;
Sea.table.isWordInList = Sea.table.isStringInTableValue;
Sea.table.isInList = Sea.table.isInTable;
-- List and tables are equal in lua
Sea.list = Sea.table;
--[[任务等级部分]]
--local QuestLog_Update;
function QuestLog_Update()
-- Original code
local numEntries, numQuests = GetNumQuestLogEntries();
if ( numEntries == 0 ) then
EmptyQuestLogFrame:Show();
QuestLogFrameAbandonButton:Disable();
QuestLogFrame.hasTimer = nil;
QuestLogDetailScrollFrame:Hide();
QuestLogExpandButtonFrame:Hide();
else
EmptyQuestLogFrame:Hide();
QuestLogFrameAbandonButton:Enable();
QuestLogDetailScrollFrame:Show();
QuestLogExpandButtonFrame:Show();
end
-- Update Quest Count
QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS));
QuestLogCountMiddle:SetWidth(QuestLogQuestCount:GetWidth());
-- ScrollFrame update
FauxScrollFrame_Update(QuestLogListScrollFrame, numEntries, QUESTS_DISPLAYED, QUESTLOG_QUEST_HEIGHT, nil, nil, nil, QuestLogHighlightFrame, 293, 316 )
-- Update the quest listing
QuestLogHighlightFrame:Hide();
local questIndex, questLogTitle, questTitleTag, questNumGroupMates, questNormalText, questHighlightText, questDisabledText, questHighlight, questCheck;
local questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete, color;
local numPartyMembers, isOnQuest, partyMembersOnQuest, tempWidth;
for i=1, QUESTS_DISPLAYED, 1 do
questIndex = i + FauxScrollFrame_GetOffset(QuestLogListScrollFrame);
questLogTitle = getglobal("QuestLogTitle"..i);
questTitleTag = getglobal("QuestLogTitle"..i.."Tag");
questNumGroupMates = getglobal("QuestLogTitle"..i.."GroupMates");
questCheck = getglobal("QuestLogTitle"..i.."Check");
questNormalText = getglobal("QuestLogTitle"..i.."NormalText");
questHighlightText = getglobal("QuestLogTitle"..i.."HighlightText");
questDisabledText = getglobal("QuestLogTitle"..i.."DisabledText");
questHighlight = getglobal("QuestLogTitle"..i.."Highlight");
if ( questIndex <= numEntries ) then
questLogTitleText, level, questTag, isHeader, isCollapsed, isComplete = GetQuestLogTitle(questIndex);
if ( isHeader ) then
if ( questLogTitleText ) then
questLogTitle:SetText(questLogTitleText);
else
questLogTitle:SetText("");
end
if ( isCollapsed ) then
questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
else
questLogTitle:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
end
questHighlight:SetTexture("Interface\\Buttons\\UI-PlusButton-Hilight");
questNumGroupMates:SetText("");
questCheck:Hide();
else
questLogTitle:SetText("["..level.."] "..questLogTitleText); -- line edited to show level
--Set Dummy text to get text width *SUPER HACK*
QuestLogDummyText:SetText(" "..questLogTitleText);
questLogTitle:SetNormalTexture("");
questHighlight:SetTexture("");
-- If not a header see if any nearby group mates are on this quest
numPartyMembers = GetNumPartyMembers();
if ( numPartyMembers == 0 ) then
--return;
end
partyMembersOnQuest = 0;
for j=1, numPartyMembers do
isOnQuest = IsUnitOnQuest(questIndex, "party"..j);
if ( isOnQuest and isOnQuest == 1 ) then
partyMembersOnQuest = partyMembersOnQuest + 1;
end
end
if ( partyMembersOnQuest > 0 ) then
questNumGroupMates:SetText("["..partyMembersOnQuest.."]");
else
questNumGroupMates:SetText("");
end
end
-- Save if its a header or not
questLogTitle.isHeader = isHeader;
-- Set the quest tag
if ( isComplete and isComplete < 0 ) then
questTag = FAILED;
elseif ( isComplete and isComplete > 0 ) then
questTag = COMPLETE;
end
if ( questTag ) then
questTitleTag:SetText("("..questTag..")");
-- Shrink text to accomdate quest tags without wrapping
tempWidth = 275 - 5 - questTitleTag:GetWidth();
questNormalText:SetWidth(tempWidth);
-- If there's quest tag position check accordingly
questCheck:Hide();
if ( IsQuestWatched(questIndex) ) then
questCheck:SetPoint("LEFT", questLogTitle:GetName(), "LEFT", tempWidth+24, 0);
questCheck:Show();
end
else
questTitleTag:SetText("");
-- Reset to max text width
questNormalText:SetWidth(275);
-- Show check if quest is being watched
questCheck:Hide();
if ( IsQuestWatched(questIndex) ) then
questCheck:SetPoint("LEFT", questLogTitle:GetName(), "LEFT", QuestLogDummyText:GetWidth()+40, 0); -- edited so checkmark wont overlap
questCheck:Show();
end
end
-- Color the quest title and highlight according to the difficulty level
local playerLevel = UnitLevel("player");
if ( isHeader ) then
color = QuestDifficultyColor["header"];
else
color = GetDifficultyColor(level);
end
questTitleTag:SetTextColor(color.r, color.g, color.b);
questLogTitle:SetTextColor(color.r, color.g, color.b);
questNumGroupMates:SetTextColor(color.r, color.g, color.b);
questLogTitle.r = color.r;
questLogTitle.g = color.g;
questLogTitle.b = color.b;
questLogTitle:Show();
-- Place the highlight and lock the highlight state
if ( QuestLogFrame.selectedButtonID and GetQuestLogSelection() == questIndex ) then
QuestLogHighlightFrame:SetPoint("TOPLEFT", "QuestLogTitle"..i, "TOPLEFT", 0, 0);
QuestLogHighlightFrame:Show();
questTitleTag:SetTextColor(HIGHLIGHT_FONT_COLOR.r, HIGHLIGHT_FONT_COLOR.g, HIGHLIGHT_FONT_COLOR.b);
questLogTitle:LockHighlight();
else
questLogTitle:UnlockHighlight();
end
else
questLogTitle:Hide();
end
end
-- Set the expand/collapse all button texture
local numHeaders = 0;
local notExpanded = 0;
-- Somewhat redundant loop, but cleaner than the alternatives
for i=1, numEntries, 1 do
local index = i;
local questLogTitleText, level, questTag, isHeader, isCollapsed = GetQuestLogTitle(i);
if ( questLogTitleText and isHeader ) then
numHeaders = numHeaders + 1;
if ( isCollapsed ) then
notExpanded = notExpanded + 1;
end
end
end
-- If all headers are not expanded then show collapse button, otherwise show the expand button
if ( notExpanded ~= numHeaders ) then
QuestLogCollapseAllButton.collapsed = nil;
QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-MinusButton-Up");
else
QuestLogCollapseAllButton.collapsed = 1;
QuestLogCollapseAllButton:SetNormalTexture("Interface\\Buttons\\UI-PlusButton-Up");
end
-- Update Quest Count
QuestLogQuestCount:SetText(format(QUEST_LOG_COUNT_TEMPLATE, numQuests, MAX_QUESTLOG_QUESTS));
QuestLogCountMiddle:SetWidth(QuestLogQuestCount:GetWidth());
-- If no selection then set it to the first available quest
if ( GetQuestLogSelection() == 0 ) then
QuestLog_SetFirstValidSelection();
end
-- Determine whether the selected quest is pushable or not
if ( numEntries == 0 ) then
QuestFramePushQuestButton:Disable();
elseif ( GetQuestLogPushable() and GetNumPartyMembers() > 0 ) then
QuestFramePushQuestButton:Enable();
else
QuestFramePushQuestButton:Disable();
end
end
--[[任务等级结束]]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -