You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
8.1 KiB
273 lines
8.1 KiB
local VERSION_TEXT = "v0.6.7";
|
|
local VERSION_DATE = 1754000000;
|
|
|
|
|
|
local addonName, addon = ...
|
|
|
|
local L = {}; --Locale
|
|
local API = {}; --Custom APIs used by this addon
|
|
local DB;
|
|
|
|
addon.L = L;
|
|
addon.API = API;
|
|
addon.VERSION_TEXT = VERSION_TEXT;
|
|
|
|
local DefaultValues = {
|
|
Theme = 1,
|
|
FrameSize = 2,
|
|
FontSizeBase = 1,
|
|
FontText = "default",
|
|
FontNumber = "default",
|
|
FrameOrientation = 2, --1:Left 2:Right(Default)
|
|
HideUI = true,
|
|
ShowChatWindow = true,
|
|
HideOutlineSparkles = true,
|
|
HideUnitNames = false,
|
|
ShowCopyTextButton = false,
|
|
ShowNPCNameOnPage = false,
|
|
MarkHighestSellPrice = false,
|
|
QuestTypeText = false,
|
|
SimplifyCurrencyReward = false,
|
|
UseRoleplayName = false,
|
|
UseBlizzardTooltip = false,
|
|
|
|
CameraMovement = 1, --0:OFF 1:Zoom-In 2:Horizontal
|
|
CameraChangeFov = true,
|
|
CameraMovement1MaintainPosition = false,
|
|
CameraMovement2MaintainPosition = true,
|
|
CameraMovementMountedCamera = true,
|
|
CameraMovementDisableInstance = false,
|
|
CameraZoomMultiplier = 1, --The smaller the further
|
|
|
|
InputDevice = 1, --1:K&M 2:XBOX 3.PS 4.Mobile
|
|
UseCustomBindings = false,
|
|
PrimaryControlKey = 1, --1: Space 2:Interact Key
|
|
ScrollDownThenAcceptQuest = false,
|
|
RightClickToCloseUI = true,
|
|
CycleRewardHotkeyEnabled = false, --Press Tab to cycle through choosable rewards
|
|
DisableHotkeyForTeleport = false, --Disable gossip hotkey when select teleportation
|
|
GamePadClickFirstObject = false, --If true, when starting a new interaction, pressing PAD1 will click the first object
|
|
EmulateSwipe = true,
|
|
MobileDeviceMode = false,
|
|
|
|
WidgetManagerDummy = true, --Doesn't control anything, used as a trigger
|
|
AutoQuestPopup = true,
|
|
QuestItemDisplay = false,
|
|
QuestItemDisplayHideSeen = false,
|
|
QuestItemDisplayDynamicFrameStrata = false,
|
|
QuickSlotQuestReward = false,
|
|
AutoCompleteQuest = false,
|
|
QuickSlotUseHotkey = true,
|
|
AutoSelectGossip = false,
|
|
ForceGossip = false,
|
|
ForceGossipSkipGameObject = false,
|
|
ShowDialogHint = true,
|
|
DisableDUIInInstance = false,
|
|
|
|
NameplateDialogEnabled = false, --Experimental. Not in the settings
|
|
|
|
DisableUIMotion = false,
|
|
|
|
TTSEnabled = false,
|
|
TTSUseHotkey = true, --Default key R
|
|
TTSAutoPlay = false,
|
|
TTSSkipRecent = false, --Skip recently read texts
|
|
TTSAutoPlayDelay = false, --Add a delay before starting auto play in case the NPC is speaking
|
|
TTSAutoStop = true, --Stop when leaving
|
|
TTSStopOnNew = true, --Stop when reading new quest
|
|
TTSVoiceMale = 0, --0: System default
|
|
TTSVoiceFemale = 0,
|
|
TTSUseNarrator = false,
|
|
TTSVoiceNarrator = 0,
|
|
TTSVolume = 10,
|
|
TTSRate = 0,
|
|
TTSContentSpeaker = false,
|
|
TTSContentQuestTitle = true,
|
|
TTSContentObjective = false,
|
|
|
|
--Book Settings
|
|
BookUIEnabled = true,
|
|
BookUISize = 1,
|
|
BookKeepUIOpen = false,
|
|
BookShowLocation = false,
|
|
BookUIItemDescription = false, --Show source item's description on top of the UI
|
|
BookDarkenScreen = true,
|
|
BookTTSVoice = 0,
|
|
BookTTSClickToRead = true,
|
|
|
|
--Not shown in the Settings. Accessible by other means
|
|
TooltipShowItemComparison = false, --Tooltip
|
|
TTSReadTranslation = false, --Read original text or translation. Controlled by TTSButton modifier key
|
|
|
|
--WidgetManagerPosition = {x, y};
|
|
--QuestItemDisplayPosition = {x, y};
|
|
|
|
|
|
--Deprecated:
|
|
--WarbandCompletedQuest = true, --Always ON
|
|
};
|
|
|
|
local InheritExistingValues = {
|
|
--Newly added systems may copy the the dbValue of similar system: BookUI/DialogueUI frame size, Book/Dialogue voice
|
|
--If the new dbValue doesn't exisit and the existing dbValue isn't the default value, use the new default value
|
|
{"BookUISize", "FrameSize"},
|
|
{"BookTTSVoice", "TTSVoiceNarrator"},
|
|
{"BookTTSVoice", "TTSVoiceMale"},
|
|
{"BookTTSVoice", "TTSVoiceFemale"},
|
|
};
|
|
|
|
local TutorialFlags = {
|
|
--Saved in the DB, prefix: Tutorial_
|
|
--e.g. Tutorial_OpenSettings = true
|
|
"OpenSettings",
|
|
"WarbandCompletedQuest",
|
|
};
|
|
|
|
local function GetDBValue(dbKey)
|
|
return DB[dbKey]
|
|
end
|
|
addon.GetDBValue = GetDBValue;
|
|
|
|
local function SetDBValue(dbKey, value, userInput)
|
|
DB[dbKey] = value;
|
|
addon.CallbackRegistry:Trigger("SettingChanged."..dbKey, value, userInput);
|
|
end
|
|
addon.SetDBValue = SetDBValue;
|
|
|
|
local function LoadTutorials()
|
|
--Tutorial Flags (nil means haven't shown)
|
|
|
|
for _, flag in pairs(TutorialFlags) do
|
|
local dbKey = "Tutorial_"..flag;
|
|
|
|
if DB[dbKey] == nil then
|
|
addon.CallbackRegistry:Trigger("Tutorial."..flag);
|
|
end
|
|
end
|
|
end
|
|
|
|
local function LoadDatabase()
|
|
DialogueUI_DB = DialogueUI_DB or {};
|
|
DB = DialogueUI_DB;
|
|
|
|
DialogueUI_Saves = DialogueUI_Saves or {};
|
|
|
|
local type = type;
|
|
|
|
for _, v in ipairs(InheritExistingValues) do
|
|
if DB[v[1]] == nil then
|
|
if DB[v[2]] ~= nil and DB[v[2]] ~= DefaultValues[v[2]] then
|
|
DB[v[1]] = DB[v[2]];
|
|
end
|
|
end
|
|
end
|
|
|
|
for dbKey, defaultValue in pairs(DefaultValues) do
|
|
--Some settings are inter-connected so we load all values first
|
|
if DB[dbKey] == nil or type(DB[dbKey]) ~= type(defaultValue) then
|
|
DB[dbKey] = defaultValue;
|
|
end
|
|
end
|
|
|
|
for dbKey, defaultValue in pairs(DefaultValues) do
|
|
SetDBValue(dbKey, DB[dbKey]);
|
|
end
|
|
|
|
if not DB.installTime or type(DB.installTime) ~= "number" then
|
|
DB.installTime = VERSION_DATE;
|
|
end
|
|
|
|
DefaultValues = nil;
|
|
InheritExistingValues = nil;
|
|
|
|
LoadTutorials();
|
|
|
|
addon.CallbackRegistry:Trigger("ADDON_LOADED", DB);
|
|
end
|
|
|
|
local function SetTutorialRead(tutorialFlag)
|
|
local dbKey = "Tutorial_"..tutorialFlag;
|
|
DB[dbKey] = true;
|
|
end
|
|
addon.SetTutorialRead = SetTutorialRead;
|
|
|
|
|
|
local EL = CreateFrame("Frame");
|
|
EL:RegisterEvent("ADDON_LOADED");
|
|
EL:RegisterEvent("PLAYER_ENTERING_WORLD");
|
|
|
|
EL:SetScript("OnEvent", function(self, event, ...)
|
|
if event == "ADDON_LOADED" then
|
|
local name = ...
|
|
if name == addonName then
|
|
self:UnregisterEvent(event);
|
|
LoadDatabase();
|
|
end
|
|
elseif event == "PLAYER_ENTERING_WORLD" then
|
|
--Keybindings are loaded after this
|
|
self:UnregisterEvent(event);
|
|
|
|
local dbKey = "PrimaryControlKey";
|
|
SetDBValue(dbKey, DB[dbKey]);
|
|
|
|
addon.CallbackRegistry:Trigger("PLAYER_ENTERING_WORLD");
|
|
end
|
|
end);
|
|
|
|
|
|
do
|
|
local currentToCVersion = select(4, GetBuildInfo());
|
|
if not currentToCVersion then
|
|
print("API Changed: GetBuildInfo()")
|
|
currentToCVersion = 999999;
|
|
end
|
|
currentToCVersion = tonumber(currentToCVersion);
|
|
|
|
local function IsToCVersionEqualOrNewerThan(targetVersion)
|
|
return currentToCVersion >= targetVersion
|
|
end
|
|
addon.IsToCVersionEqualOrNewerThan = IsToCVersionEqualOrNewerThan;
|
|
|
|
addon.IS_CLASSIC = not IsToCVersionEqualOrNewerThan(100000);
|
|
addon.IS_CATA = currentToCVersion >= 40400 and currentToCVersion < 50000;
|
|
end
|
|
|
|
|
|
local function GetDBBool(dbKey)
|
|
if DB then
|
|
return DB[dbKey] == true
|
|
end
|
|
end
|
|
addon.GetDBBool = GetDBBool;
|
|
|
|
|
|
local function FlipDBBool(dbKey, userInput)
|
|
if DB then
|
|
SetDBValue(dbKey, not GetDBBool(dbKey), userInput)
|
|
end
|
|
end
|
|
addon.FlipDBBool = FlipDBBool;
|
|
|
|
|
|
local function IsDBValue(dbKey, value)
|
|
if DB then
|
|
return DB[dbKey] == value
|
|
end
|
|
end
|
|
addon.IsDBValue = IsDBValue;
|
|
|
|
|
|
local function ResetTutorials()
|
|
for _, flag in pairs(TutorialFlags) do
|
|
local dbKey = "Tutorial_"..flag;
|
|
DB[dbKey] = nil;
|
|
end
|
|
end
|
|
addon.ResetTutorials = ResetTutorials;
|
|
|
|
|
|
|
|
|
|
do
|
|
DialogueUIAPI = {};
|
|
end
|