Initial plugins and other stuff commit
This commit is contained in:
898
PluginCache/K4sh/GlobalDependencies/Scripts/StandardBase.lua
Normal file
898
PluginCache/K4sh/GlobalDependencies/Scripts/StandardBase.lua
Normal file
@@ -0,0 +1,898 @@
|
||||
if ModuleDependencys:GetDependency("Theme") then
|
||||
require(ModuleDependencys:GetDependency("Theme"):GetPackageName())
|
||||
else
|
||||
require(GlobalDependencys:GetDependency("StandardTheme"):GetPackageName())
|
||||
end
|
||||
|
||||
int_tOriginalEXEName = nil
|
||||
int_tClassNames = nil
|
||||
int_tEXENames = nil
|
||||
int_FailureRetryInterval = 60
|
||||
int_CurrentRetryInterval = 0
|
||||
int_ViewportStarted = false
|
||||
int_FatelConfigEnableError = false
|
||||
|
||||
|
||||
function Init_BaseControls()
|
||||
|
||||
--Module Vars
|
||||
SyncDisplayDetection()
|
||||
HackTool = FWSBinds.c_HackTool()
|
||||
HackTool:SetProcessFriendlyName(Process_FriendlyName)
|
||||
WindowTool = FWSBinds.c_WindowTools()
|
||||
|
||||
if Process_EXEName == nil then Process_EXEName = "*" end
|
||||
if Process_ClassName == nil then Process_ClassName = "*" end
|
||||
if Process_WindowName == nil then Process_WindowName = "*" end
|
||||
|
||||
int_WindowNames = split(Process_WindowName,";")
|
||||
int_ClassNames = split(Process_ClassName,";")
|
||||
int_EXENames = split(Process_EXEName,";")
|
||||
|
||||
--UI VARS
|
||||
VersionString = "Unknown"
|
||||
bAutoDetectVersion = true
|
||||
bVersionSupported = false
|
||||
bIsSteam = false
|
||||
bIsOrigin = false
|
||||
|
||||
--INJECTION VARS
|
||||
RequreTarget = nil
|
||||
ConfigureFunction = nil
|
||||
EnableFunction = nil
|
||||
DisableFunction = nil
|
||||
PeriodicFunction = nil
|
||||
PreviouslyEnabled = false
|
||||
WaitingForProcessStart = false
|
||||
LastKnownPID = 0
|
||||
|
||||
if SuspendThread == nil then SuspendThread = true end
|
||||
if InjectDelay == nil then InjectDelay = 1 end
|
||||
if SearchInterval == nil then SearchInterval = 500 end
|
||||
if ConfigureDelay == nil then ConfigureDelay = 0 end
|
||||
if int_ScanRetryMax == nil then int_ScanRetryMax = 10 end
|
||||
|
||||
SigScanError = string.format("Could not find %%s injection point, %s may have updated to a version that is no longer supported.\r\n\r\nTry restarting %s or selecting a different version and re-enable the fix.",Process_FriendlyName,Process_FriendlyName)
|
||||
|
||||
DefaultControls.AddHeader("Header_EnableDisable","Enable / Disable",15,10,210,17)
|
||||
DefaultControls.AddFixToggle("CheckBox_Enable","Fix Enabled","CKEnable_Changed",25,41,100,14,true)
|
||||
DefaultControls.AddHeader("Header_Version","Game Version",245,10,210,17)
|
||||
|
||||
VersionOptions = {}
|
||||
for index,value in ipairs(SupportedVersions) do
|
||||
if value[2] ~= "Auto" then
|
||||
VersionOptions[index] = string.format("%s (%s)",value[1],value[2])
|
||||
else
|
||||
VersionOptions[index] = value[1]
|
||||
end
|
||||
end
|
||||
|
||||
DefaultControls.AddComboBox("VersionCombo","VersionCombo_Changed",VersionOptions,255,37,190,300)
|
||||
DefaultControls.AddTimer("Fix_Timer",60000,"Fix_Timer_Elapsed",SearchInterval,false)
|
||||
DefaultControls.AddTimer("Failed_Fix_Timer",60001,"Failed_Fix_Timer_Elapsed",1000,false)
|
||||
|
||||
Fix_Timer:SetEnabled(true)
|
||||
|
||||
end
|
||||
|
||||
function WriteBytes(AddressName, Bytes)
|
||||
|
||||
local PrepareString = string.format("%s" .. Bytes, "0x")
|
||||
local PrepareString = string.gsub(PrepareString, " ", ", 0x")
|
||||
x = 0
|
||||
local test = HackTool:GetAddress(AddressName)
|
||||
for key, value in PrepareString:gmatch("%P+") do
|
||||
test:WriteByte(key, x)
|
||||
x = x + 1
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function HK_EnableToggle()
|
||||
|
||||
if bFixEnabled == true then
|
||||
CheckBox_Enable:SetCheckState(0)
|
||||
CKEnable_Changed(CheckBox_Enable)
|
||||
else
|
||||
|
||||
CheckBox_Enable:SetCheckState(1)
|
||||
CKEnable_Changed(CheckBox_Enable)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function CKEnable_Changed(Sender)
|
||||
|
||||
Failed_Fix_Timer:SetEnabled(false)
|
||||
|
||||
if Toggle_CheckFix(Sender) == true then
|
||||
int_FatelConfigEnableError = false
|
||||
bFixEnabled = true
|
||||
PluginViewport:SetStatusMessage( "Searching for " .. Process_FriendlyName .. " process, please configure desired settings and launch the game." ,true )
|
||||
else
|
||||
bFixEnabled = false
|
||||
end
|
||||
|
||||
Fix_Timer:SetEnabled(bFixEnabled)
|
||||
Fix_Timer:SetInterval(SearchInterval)
|
||||
ForceUpdate()
|
||||
|
||||
end
|
||||
|
||||
function VersionCombo_Changed(Sender)
|
||||
|
||||
if HackTool:GetIsValid() == false then return false end
|
||||
|
||||
if LastKnownPID == HackTool:GetAttachedProcessID() then
|
||||
DisableFix()
|
||||
end
|
||||
|
||||
CleanUp()
|
||||
|
||||
if int_tOriginalEXEName ~= nil then
|
||||
Process_EXEName = int_tOriginalEXEName
|
||||
int_tOriginalEXEName = nil
|
||||
end
|
||||
|
||||
local tProcessName = HackTool:GetProcessEXEName()
|
||||
if Process_EXEName ~= tProcessName then
|
||||
int_tOriginalEXEName = Process_EXEName
|
||||
Process_EXEName = tProcessName
|
||||
else
|
||||
int_tOriginalEXEName = nil
|
||||
end
|
||||
|
||||
int_ScanRetryCount = 1
|
||||
PreviouslyEnabled = false
|
||||
|
||||
vString = Sender:GetSelectedString()
|
||||
|
||||
local DetectedVersion = HackTool:DetectProcessVersion()
|
||||
bIsSteam = HackTool:GetIsSteamApp()
|
||||
if bIsSteam == false then
|
||||
bIsOrigin = HackTool:GetIsOriginApp()
|
||||
end
|
||||
|
||||
local RefString = nil
|
||||
|
||||
for index,value in ipairs(SupportedVersions) do
|
||||
|
||||
if value[2] ~= "Auto" then
|
||||
RefString = string.format("%s (%s)",value[1],value[2])
|
||||
else
|
||||
RefString = value[1]
|
||||
end
|
||||
|
||||
if RefString == vString then
|
||||
|
||||
local VersionFound = false
|
||||
|
||||
local DetectType = 0
|
||||
local Functions = 0
|
||||
|
||||
if string.find(value[4],":") ~= nil then
|
||||
RequreTarget = string.sub(value[4],1,string.find(value[4],":")-1)
|
||||
Functions = string.sub(value[4],string.find(value[4],":")+1)
|
||||
else
|
||||
Functions = value[4]
|
||||
end
|
||||
|
||||
local LastPos = 0
|
||||
local ArgCount = 0
|
||||
|
||||
while LastPos ~= nil do
|
||||
ArgCount = ArgCount + 1
|
||||
if ArgCount == 1 then
|
||||
strConfigureFunction = string.sub(Functions,LastPos,string.find(Functions,";",LastPos+1)-1)
|
||||
elseif ArgCount == 2 then
|
||||
strEnableFunction = string.sub(Functions,LastPos+1,string.find(Functions,";",LastPos+1)-1)
|
||||
elseif ArgCount == 3 then
|
||||
strPeriodicFunction = string.sub(Functions,LastPos+1,string.find(Functions,";",LastPos+1)-1)
|
||||
elseif ArgCount == 4 then
|
||||
strDisableFunction = string.sub(Functions,LastPos+1,string.find(Functions,";",LastPos+1))
|
||||
if string.find(strDisableFunction,";") then strDisableFunction = string.sub(strDisableFunction,1,string.len(strDisableFunction)-1) end
|
||||
end
|
||||
LastPos = string.find(Functions,";",LastPos+1)
|
||||
end
|
||||
::configureretry::
|
||||
local ConfigureSuccess = false
|
||||
local EnableSuccess = false
|
||||
|
||||
if strConfigureFunction ~= nil then
|
||||
if _G[strConfigureFunction] then
|
||||
ConfigureFunction = _G[strConfigureFunction]
|
||||
PluginViewport:SetStatusMessage( "Configuring..." ,true )
|
||||
if ConfigureDelay ~= nil and ConfigureDelay > 0 then
|
||||
print("Delaying signature scan...")
|
||||
HiResSleep(ConfigureDelay)
|
||||
end
|
||||
|
||||
if SuspendThread == true then SuspendedThreadID = HackTool:SuspendAttachedThread() end
|
||||
ConfigureSuccess = ConfigureFunction()
|
||||
if SuspendThread == true then HackTool:ResumeThread(SuspendedThreadID) end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
if ConfigureSuccess == true then
|
||||
print("Configure Success = true")
|
||||
if strEnableFunction ~= nil then
|
||||
if _G[strEnableFunction] then EnableFunction = _G[strEnableFunction] end
|
||||
end
|
||||
|
||||
if strDisableFunction ~= nil then
|
||||
if _G[strDisableFunction] then DisableFunction = _G[strDisableFunction] end
|
||||
end
|
||||
|
||||
if strPeriodicFunction ~= nil then
|
||||
if _G[strPeriodicFunction] then PeriodicFunction = _G[strPeriodicFunction] end
|
||||
end
|
||||
else
|
||||
print("Configure Success = false")
|
||||
|
||||
if int_FatelConfigEnableError == true then
|
||||
return true
|
||||
end
|
||||
|
||||
if SuspendThread == true then HackTool:ResumeThread(SuspendedThreadID) end
|
||||
|
||||
if int_ScanRetryCount < int_ScanRetryMax+1 then
|
||||
|
||||
if HackTool:GetIsValid() == false then
|
||||
return false
|
||||
end
|
||||
|
||||
Sleep(50)
|
||||
print(string.format("Retrying, %d of %d",int_ScanRetryCount,int_ScanRetryMax))
|
||||
CleanUp()
|
||||
int_ScanRetryCount = int_ScanRetryCount + 1
|
||||
goto configureretry
|
||||
else
|
||||
return false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
if value[2] == "Auto" then DetectType = 1 elseif value[2] == "Hybrid" then DetectType = 2 else DetectType = 3 end
|
||||
|
||||
if DetectedVersion ~= "Unknown" then
|
||||
VersionFound = true
|
||||
else
|
||||
VersionFound = false
|
||||
end
|
||||
|
||||
local VersionString = string.format("%s (%s) -> Detected: %s",value[1],value[2],DetectedVersion)
|
||||
if bIsSteam == true then VersionString = VersionString .. " (Steam)"
|
||||
elseif bIsOrigin == true then VersionString = VersionString .. " (Origin)" end
|
||||
|
||||
HackTool:SetProcessVersion(VersionString)
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
if WaitingForProcessStart == true or LastKnownPID ~= HackTool:GetAttachedProcessID() then
|
||||
if InjectDelay > 0 then
|
||||
PluginViewport:SetStatusMessage( "Injection delay... waiting for process to stabilise, Please wait...\r\n\r\nPlease note, terminating Flawless Widescreen or the LUA Virtual Machine may result in undefined behaviour." , true )
|
||||
local ConfigureEnd = os.clock()
|
||||
print(string.format("Inject delay: %.0fms, Configure() took: %.0fms, Adjusted Inject delay: %.0fms", InjectDelay, (ConfigureEnd - ConfigureStart)*1000,InjectDelay - (ConfigureEnd - ConfigureStart)*1000))
|
||||
ConfigureEnd = os.clock()
|
||||
HiResSleep(InjectDelay - (ConfigureEnd - ConfigureStart)*1000)
|
||||
local Difference = os.clock()
|
||||
print(string.format("Actual delay: %.0fms", (Difference - ConfigureEnd)*1000))
|
||||
end
|
||||
end
|
||||
|
||||
PluginViewport:SetStatusMessage( "Injecting..." ,true )
|
||||
|
||||
if SuspendThread == true then SuspendedThreadID = HackTool:SuspendAttachedThread() end
|
||||
EnableFunction()
|
||||
if SuspendThread == true then HackTool:ResumeThread(SuspendedThreadID) end
|
||||
|
||||
Fix_Timer:SetInterval(WriteInterval)
|
||||
Fix_Timer:SetEnabled(true)
|
||||
ForceUpdate()
|
||||
|
||||
return true
|
||||
|
||||
end
|
||||
|
||||
function DisableFix()
|
||||
|
||||
if DisableFunction ~= nil then
|
||||
if WaitingForProcessStart == false then
|
||||
DisableFunction()
|
||||
end
|
||||
end
|
||||
|
||||
DisableFunction = nil
|
||||
PeriodicFunction = nil
|
||||
EnableFunction = nil
|
||||
ConfigureFunction = nil
|
||||
|
||||
CleanUp()
|
||||
|
||||
end
|
||||
|
||||
function CleanUp()
|
||||
|
||||
HackTool:DeleteCodeCaves()
|
||||
HackTool:DeleteAllocations()
|
||||
HackTool:DeleteAddresses()
|
||||
HackTool:DeletePointerChains()
|
||||
|
||||
end
|
||||
|
||||
function DisplayDetection_ResolutionChanged()
|
||||
|
||||
SyncDisplayDetection()
|
||||
|
||||
if ResolutionChanged ~= nil then
|
||||
ResolutionChanged()
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function Failed_Fix_Timer_Elapsed(Sender,Argument)
|
||||
|
||||
int_CurrentRetryInterval = int_CurrentRetryInterval + 1
|
||||
if int_CurrentRetryInterval > int_FailureRetryInterval then
|
||||
Sender:SetEnabled(false)
|
||||
int_CurrentRetryInterval = 0
|
||||
CheckBox_Enable:SetCheckState(1)
|
||||
CKEnable_Changed(CheckBox_Enable)
|
||||
else
|
||||
PluginViewport:SetStatusMessage( string.format("Configure function call for the attached process failed, retrying in %d seconds...\r\n\r\nLast Error:\r\n%s",int_FailureRetryInterval - int_CurrentRetryInterval,int_LastError),true )
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
function Fix_Timer_Elapsed(Sender,Argument)
|
||||
|
||||
if bFixEnabled == true then
|
||||
|
||||
if HackTool:GetIsValid() == true then
|
||||
PluginViewport:SetStatusMessage( HackTool:GetProcessSummary() )
|
||||
|
||||
if DisplayInfo and DisplayGridDetails then
|
||||
PluginViewport:AppendStatusMessage( DisplayInfo:GetDisplaySummary() )
|
||||
if PeriodicFunction ~= nil then PeriodicFunction() end
|
||||
end
|
||||
|
||||
PluginViewport:RenderStatusMessage()
|
||||
|
||||
else
|
||||
|
||||
if FWS_LoadingState == true then
|
||||
PluginViewport:SetStatusMessage( "Loading state information..." ,true )
|
||||
return
|
||||
else
|
||||
|
||||
local ProcessFound = false
|
||||
|
||||
if #int_ClassNames == 1 and #int_WindowNames == 1 and int_ClassNames[1] == "*" and int_WindowNames[1] == "*" then
|
||||
for key,exename in pairs(int_EXENames) do
|
||||
if HackTool:FindProcess("*",exename,"*") == true then
|
||||
if HackTool:OpenProcess(PROCESS_ALL_ACCESS) == true then
|
||||
Fix_Timer:SetEnabled(false)
|
||||
ProcessFound = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
else
|
||||
|
||||
for key,classname in pairs(int_ClassNames) do
|
||||
for key,windowname in pairs(int_WindowNames) do
|
||||
if HackTool:FindProcess(windowname,Process_EXEName,classname) == true then
|
||||
if HackTool:OpenProcess(PROCESS_ALL_ACCESS) == true then
|
||||
Fix_Timer:SetEnabled(false)
|
||||
ProcessFound = true
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
if ProcessFound == true then break end
|
||||
end
|
||||
end
|
||||
|
||||
if ProcessFound == false then
|
||||
if WaitingForProcessStart == false then
|
||||
PluginViewport:SetStatusMessage( "Searching for " .. Process_FriendlyName .. " process, please configure desired settings and launch the game." ,true )
|
||||
WaitingForProcessStart = true
|
||||
Fix_Timer:SetInterval(SearchInterval)
|
||||
end
|
||||
else
|
||||
WindowTool:AttachToWindow(HackTool:GetAttachedHWND())
|
||||
|
||||
ConfigureStart = os.clock()
|
||||
if VersionCombo_Changed(VersionCombo) == false then
|
||||
StartFailureCountdown()
|
||||
else
|
||||
WaitingForProcessStart = false
|
||||
LastKnownPID = HackTool:GetAttachedProcessID()
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
else
|
||||
DisableFix()
|
||||
Sender:SetEnabled(false)
|
||||
Fix_Timer:SetInterval(SearchInterval)
|
||||
HackTool:CloseProcess()
|
||||
PluginViewport:SetStatusMessage( Process_FriendlyName .. " Fix disabled - Click \"Fix Enabled\" to enable." , true)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function StartFailureCountdown()
|
||||
Fix_Timer:SetEnabled(false)
|
||||
int_CurrentRetryInterval = 0
|
||||
Failed_Fix_Timer:SetEnabled(true)
|
||||
HackTool:CloseProcess()
|
||||
end
|
||||
|
||||
function ErrorOccurred(error_text,fatel)
|
||||
|
||||
if int_ScanRetryCount > int_ScanRetryMax or fatel ~= nil and fatel == true then
|
||||
print("Fatel error.")
|
||||
CheckBox_Enable:SetCheckState(0)
|
||||
CKEnable_Changed(CheckBox_Enable)
|
||||
PluginViewport:SetStatusMessage( error_text , true)
|
||||
int_LastError = error_text
|
||||
int_FatelConfigEnableError = true
|
||||
|
||||
else
|
||||
print("Non-fatel error, retrying.")
|
||||
end
|
||||
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
function ForceUpdate()
|
||||
Fix_Timer_Elapsed(Fix_Timer,nil)
|
||||
end
|
||||
|
||||
function ForcePeriodic()
|
||||
if PeriodicFunction ~= nil then PeriodicFunction() end
|
||||
end
|
||||
|
||||
function Write_CodeCave(CodeCaveName)
|
||||
local CodeCave = HackTool:GetCodeCave(CodeCaveName)
|
||||
if CodeCave ~= nil then CodeCave:WriteData() end
|
||||
end
|
||||
|
||||
function Restore_CodeCave(CodeCaveName)
|
||||
local CodeCave = HackTool:GetCodeCave(CodeCaveName)
|
||||
if CodeCave ~= nil then CodeCave:Restore() end
|
||||
end
|
||||
|
||||
function Toggle_CodeCave(CodeCaveName, ToggleBool)
|
||||
local CodeCave = HackTool:GetCodeCave(CodeCaveName)
|
||||
if CodeCave ~= nil then
|
||||
if ToggleBool == true then
|
||||
CodeCave:WriteData()
|
||||
else
|
||||
CodeCave:Restore()
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function SyncDisplayDetection()
|
||||
DisplayInfo = DisplayDetection:GetPreferredDisplay()
|
||||
DisplayGridDetails = DisplayInfo:GetGridSize()
|
||||
|
||||
--block for a while incase the object is invalid
|
||||
while DisplayInfo == nil or DisplayGridDetails == nil do
|
||||
DisplayInfo = DisplayDetection:GetPreferredDisplay()
|
||||
DisplayGridDetails = DisplayInfo:GetGridSize()
|
||||
end
|
||||
end
|
||||
|
||||
function Round(what, precision)
|
||||
return FWSBinds.c_Tools_Round(what,precision)
|
||||
end
|
||||
|
||||
function GetContextAspectDevisional()
|
||||
|
||||
if fDefaultAspectRatio ~= nil then
|
||||
return DisplayInfo:GetAspectRatio() / fDefaultAspectRatio
|
||||
end
|
||||
|
||||
return DisplayInfo:GetAspectRatio() / 1.777777791
|
||||
end
|
||||
|
||||
function GetContextFOVMax()
|
||||
|
||||
if fFOVMax ~= nil and fDefaultAspectRatio ~= nil then
|
||||
local FOVMax = DisplayInfo:GetAdjustedFOV(fFOVMax,fDefaultAspectRatio,0,179)
|
||||
return FOVMax
|
||||
end
|
||||
|
||||
return DisplayInfo:GetAdjustedFOV(110,1.777777791,0,179)
|
||||
|
||||
end
|
||||
|
||||
function UpdateFOVCalculator_AdditionalFOV(AllocationName, AdditionalFOV)
|
||||
|
||||
local FOVCalc = HackTool:GetAllocation(AllocationName)
|
||||
if FOVCalc then
|
||||
local OffsetAdditionalFOV = FOVCalc["AdditionalFOV"]
|
||||
if OffsetAdditionalFOV then OffsetAdditionalFOV:WriteFloat(AdditionalFOV) end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function UpdateFOVCalculator_AspectDevisional(AllocationName, AspectDevisional)
|
||||
|
||||
local FOVCalc = HackTool:GetAllocation(AllocationName)
|
||||
if FOVCalc then
|
||||
local OffsetAspectDevisional = FOVCalc["AspectDevisional"]
|
||||
if OffsetAspectDevisional then OffsetAspectDevisional:WriteFloat(AspectDevisional) end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function UpdateFOVCalculator_MaxFOV(AllocationName, MaxFOV)
|
||||
|
||||
local FOVCalc = HackTool:GetAllocation(AllocationName)
|
||||
if FOVCalc then
|
||||
local OffsetFOVMaximum = FOVCalc["FOVMaximum"]
|
||||
if MaxFOV == nil then
|
||||
if OffsetFOVMaximum then OffsetFOVMaximum:WriteFloat(GetContextFOVMax()) end
|
||||
else
|
||||
if OffsetFOVMaximum then OffsetFOVMaximum:WriteFloat(MaxFOV) end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function UpdateFOVCalculator(AllocationName, AspectDevisional, AdditionalFOV, MaxFOV)
|
||||
local FOVCalc = HackTool:GetAllocation(AllocationName)
|
||||
if FOVCalc then
|
||||
local OffsetAdditionalFOV = FOVCalc["AdditionalFOV"]
|
||||
if OffsetAdditionalFOV then OffsetAdditionalFOV:WriteFloat(AdditionalFOV) end
|
||||
local OffsetAspectDevisional = FOVCalc["AspectDevisional"]
|
||||
if OffsetAspectDevisional then OffsetAspectDevisional:WriteFloat(AspectDevisional) end
|
||||
local OffsetFOVMaximum = FOVCalc["FOVMaximum"]
|
||||
|
||||
if MaxFOV == nil then
|
||||
if OffsetFOVMaximum then OffsetFOVMaximum:WriteFloat(GetContextFOVMax()) end
|
||||
else
|
||||
if OffsetFOVMaximum then OffsetFOVMaximum:WriteFloat(MaxFOV) end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
function FOVCalculatorSummary(AllocationName, Title, OptionalBool, ShowAdditional)
|
||||
if OptionalBool ~= nil and OptionalBool == false then return string.format(" (%s FOV) - Disabled",Title) end
|
||||
|
||||
local FOVCalc = HackTool:GetAllocation(AllocationName)
|
||||
if FOVCalc then
|
||||
local OffsetOriginalFOV = FOVCalc["OriginalFOV"]
|
||||
local OffsetFOVResult = FOVCalc["FOVResult"]
|
||||
local OffsetAdditionalFOV = FOVCalc["AdditionalFOV"]
|
||||
local OffsetMaxFOV = FOVCalc["FOVMaximum"]
|
||||
|
||||
if OffsetOriginalFOV and OffsetFOVResult and OffsetAdditionalFOV and OffsetMaxFOV then
|
||||
local Additional = OffsetAdditionalFOV:ReadFloat()
|
||||
local MaxFOV = OffsetMaxFOV:ReadFloat()
|
||||
local OutputFOV = OffsetFOVResult:ReadFloat()
|
||||
|
||||
local LimitingIndicator = ""
|
||||
if (OutputFOV+0.5) > MaxFOV then
|
||||
LimitingIndicator = "[!!]"
|
||||
elseif (OutputFOV+2.0) > MaxFOV then
|
||||
LimitingIndicator = "[!]"
|
||||
end
|
||||
|
||||
if Additional > 0 or Additional == 0 then
|
||||
return string.format(" (%s FOV) - In: %.2f, Out: %.2f (+%.2f) %s",Title,OffsetOriginalFOV:ReadFloat(),OutputFOV, Additional, LimitingIndicator)
|
||||
else
|
||||
return string.format(" (%s FOV) - In: %.2f, Out: %.2f (%.2f) %s",Title,OffsetOriginalFOV:ReadFloat(),OutputFOV, Additional, LimitingIndicator)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
return string.format(" (%s FOV) - Error",Title)
|
||||
end
|
||||
|
||||
function Toggle_CheckFix(Control)
|
||||
|
||||
local Result = false
|
||||
|
||||
if Control:GetCheckState() > 0 then
|
||||
Result = true
|
||||
else
|
||||
Result = false
|
||||
end
|
||||
|
||||
ApplyThemeToControl(Control,Theme.FixToggle)
|
||||
|
||||
return Result
|
||||
|
||||
end
|
||||
|
||||
function split (s, delim)
|
||||
|
||||
if delim ~= nil and string.find(s,delim) ~= nil then
|
||||
local start = 1
|
||||
local t = {}
|
||||
|
||||
while true do
|
||||
local pos = string.find (s, delim, start, true)
|
||||
if not pos then break end
|
||||
table.insert (t, string.sub (s, start, pos - 1))
|
||||
start = pos + string.len (delim)
|
||||
end
|
||||
|
||||
table.insert (t, string.sub (s, start))
|
||||
return t
|
||||
else
|
||||
return {s}
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
DefaultControls = {}
|
||||
|
||||
DefaultControls.AddHeader = function(ControlName, Label, Pos_X, Pos_Y, Width, Height)
|
||||
_G[ControlName] = FWSBinds.c_Label()
|
||||
local tLabel = _G[ControlName]
|
||||
tLabel:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
tLabel:SetBorder(true)
|
||||
tLabel.Caption:SetCaption( " + " .. Label )
|
||||
ApplyThemeToControl(tLabel,Theme.Header)
|
||||
ContainerChild:RegisterControl(tLabel,ControlName)
|
||||
return tLabel
|
||||
end
|
||||
|
||||
DefaultControls.AddWarning = function(ControlName, Label, Pos_X, Pos_Y, Width, Height)
|
||||
_G[ControlName] = FWSBinds.c_Label()
|
||||
local tLabel = _G[ControlName]
|
||||
|
||||
if Pos_X == nil then Pos_X = 15 end
|
||||
if Pos_Y == nil then Pos_Y = 350 end
|
||||
if Width == nil then Width = 440 end
|
||||
if Height == nil then Height = 70 end
|
||||
|
||||
tLabel:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
tLabel:SetAlignCenter()
|
||||
tLabel:SetBorder(true)
|
||||
tLabel.Caption:SetCaption(Label)
|
||||
ApplyThemeToControl(tLabel,Theme.Warning)
|
||||
ContainerChild:RegisterControl(tLabel,ControlName)
|
||||
|
||||
local CKWidth = 180
|
||||
local CKHeight = 14
|
||||
|
||||
DefaultControls.AddFixToggle("CK" .. ControlName,"Acknowledge and Ignore","CK" .. ControlName .. "_Changed",Pos_X+(Width/2)-(CKWidth/2),Pos_Y + Height + 8,CKWidth,CKHeight,false)
|
||||
return tLabel
|
||||
end
|
||||
|
||||
DefaultControls.AddFixedFOVSlider = function(ControlName, ChangeEvent, Pos_X, Pos_Y, Width, Height, LowValue, HighValue, DefaultValue, Scale)
|
||||
_G[ControlName] = FWSBinds.c_TrackBar()
|
||||
local FOVSlider = _G[ControlName]
|
||||
FOVSlider:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
FOVSlider:SetLabel1Text(LowValue)
|
||||
FOVSlider:SetLabel2Text(HighValue)
|
||||
FOVSlider:SetLabel1Enabled(true)
|
||||
FOVSlider:SetLabel2Enabled(true)
|
||||
|
||||
if Scale ~= nil then
|
||||
FOVSlider:SetTickFrequency(Scale)
|
||||
FOVSlider:SetRange(LowValue*Scale,HighValue*Scale)
|
||||
|
||||
if DefaultValue ~= nil then
|
||||
FOVSlider:SetPosition(DefaultValue*Scale)
|
||||
else
|
||||
FOVSlider:SetPosition((LowValue + ((HighValue - LowValue) / 2)) * Scale)
|
||||
end
|
||||
else
|
||||
FOVSlider:SetTickFrequency(1)
|
||||
FOVSlider:SetRange(LowValue,HighValue)
|
||||
|
||||
if DefaultValue ~= nil then
|
||||
FOVSlider:SetPosition(DefaultValue)
|
||||
else
|
||||
FOVSlider:SetPosition(LowValue + ((HighValue - LowValue) / 2))
|
||||
end
|
||||
end
|
||||
|
||||
local tLabel = FOVSlider:GetLabel1()
|
||||
ApplyThemeToControl(tLabel,Theme.FOVSlider.Labels)
|
||||
tLabel:SetRect(0,0,50,17)
|
||||
|
||||
local tLabel = FOVSlider:GetLabel2()
|
||||
ApplyThemeToControl(tLabel,Theme.FOVSlider.Labels)
|
||||
tLabel:SetRect(0,0,50,17)
|
||||
|
||||
|
||||
|
||||
FOVSlider.Events:SetLua_ValueChanged(ChangeEvent)
|
||||
FOVSlider:SetSaveState(true)
|
||||
ContainerChild:RegisterControl(FOVSlider,ControlName)
|
||||
|
||||
local LabelName = "lbl" .. ControlName
|
||||
_G[LabelName] = FWSBinds.c_Label()
|
||||
local lblFOVSlider = _G[LabelName]
|
||||
lblFOVSlider:SetRect(Pos_X+(Width/2)-(140/2),Pos_Y+35,140,17)
|
||||
ApplyThemeToControl(lblFOVSlider,Theme.FOVSlider.ValueLabel)
|
||||
lblFOVSlider.Caption:SetCaption( "Value: 0.00" )
|
||||
lblFOVSlider:SetAlignCenter()
|
||||
ContainerChild:RegisterControl(lblFOVSlider,LabelName)
|
||||
|
||||
if DefaultValue ~= nil then
|
||||
_G[ChangeEvent](FOVSlider)
|
||||
end
|
||||
|
||||
return FOVSlider
|
||||
end
|
||||
|
||||
DefaultControls.AddFOVSlider = function(ControlName, ChangeEvent, Pos_X, Pos_Y, Width, Height, DefaultValue)
|
||||
_G[ControlName] = FWSBinds.c_TrackBar()
|
||||
local FOVSlider = _G[ControlName]
|
||||
FOVSlider:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
FOVSlider:SetLabel1Text("Lower")
|
||||
FOVSlider:SetLabel2Text("Higher")
|
||||
FOVSlider:SetLabel1Enabled(true)
|
||||
FOVSlider:SetLabel2Enabled(true)
|
||||
FOVSlider:SetTickFrequency(15)
|
||||
FOVSlider:SetRange(0,200)
|
||||
|
||||
local tLabel = FOVSlider:GetLabel1()
|
||||
ApplyThemeToControl(tLabel,Theme.FOVSlider.Labels)
|
||||
tLabel:SetRect(0,0,50,17)
|
||||
|
||||
local tLabel = FOVSlider:GetLabel2()
|
||||
ApplyThemeToControl(tLabel,Theme.FOVSlider.Labels)
|
||||
tLabel:SetRect(0,0,50,17)
|
||||
|
||||
if DefaultValue ~= nil then
|
||||
FOVSlider:SetPosition(DefaultValue)
|
||||
else
|
||||
FOVSlider:SetPosition(100)
|
||||
end
|
||||
|
||||
FOVSlider.Events:SetLua_ValueChanged(ChangeEvent)
|
||||
FOVSlider:SetSaveState(true)
|
||||
ContainerChild:RegisterControl(FOVSlider,ControlName)
|
||||
|
||||
local LabelName = "lbl" .. ControlName
|
||||
_G[LabelName] = FWSBinds.c_Label()
|
||||
local lblFOVSlider = _G[LabelName]
|
||||
|
||||
local LabelWidth = 180
|
||||
local LabelHeight = 17
|
||||
|
||||
lblFOVSlider:SetRect(Pos_X+(Width/2)-(LabelWidth/2),Pos_Y+35,LabelWidth,LabelHeight)
|
||||
ApplyThemeToControl(lblFOVSlider,Theme.FOVSlider.ValueLabel)
|
||||
lblFOVSlider.Caption:SetCaption( "Value: 0.00" )
|
||||
lblFOVSlider:SetAlignCenter()
|
||||
ContainerChild:RegisterControl(lblFOVSlider,LabelName)
|
||||
|
||||
if DefaultValue ~= nil then
|
||||
_G[ChangeEvent](FOVSlider)
|
||||
end
|
||||
|
||||
return FOVSlider
|
||||
end
|
||||
|
||||
DefaultControls.AddFixToggle = function(ControlName, Caption, ChangeEvent, Pos_X, Pos_Y, Width, Height, DefaultValue)
|
||||
|
||||
_G[ControlName] = FWSBinds.c_CheckBox()
|
||||
local CKToggle = _G[ControlName]
|
||||
CKToggle:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
CKToggle.Caption:SetCaption(Caption)
|
||||
|
||||
if DefaultValue ~= nil and DefaultValue == false then
|
||||
CKToggle:SetCheckState(0)
|
||||
else
|
||||
CKToggle:SetCheckState(1)
|
||||
end
|
||||
|
||||
ApplyThemeToControl(CKToggle,Theme.FixToggle)
|
||||
|
||||
CKToggle.Events:SetLua_CheckStateChanged(ChangeEvent)
|
||||
CKToggle:SetSaveState(true)
|
||||
ContainerChild:RegisterControl(CKToggle,ControlName)
|
||||
return CKToggle
|
||||
end
|
||||
|
||||
DefaultControls.AddParameterBox = function(ControlName, Caption, ChangeEvent, Pos_X, Pos_Y, Width, Height)
|
||||
|
||||
_G[ControlName] = FWSBinds.c_InputBox()
|
||||
local EBControl = _G[ControlName]
|
||||
EBControl:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
EBControl:SetBorder(true)
|
||||
EBControl:SetAlignCenter()
|
||||
ApplyThemeToControl(EBControl,Theme.ParameterBox)
|
||||
EBControl.Events:SetLua_TextChanged(ChangeEvent)
|
||||
EBControl:SetSaveState(true)
|
||||
EBControl:SetText(Caption)
|
||||
ContainerChild:RegisterControl(EBControl,ControlName)
|
||||
return EBControl
|
||||
|
||||
end
|
||||
|
||||
DefaultControls.AddTimer = function (ControlName, TimerID, ElapsedFunction, Interval, Enabled)
|
||||
|
||||
_G[ControlName] = FWSBinds.c_Timer()
|
||||
local tTimer = _G[ControlName]
|
||||
tTimer:SetTimerID(TimerID)
|
||||
tTimer.Events:SetLua_TimerElapsed(ElapsedFunction)
|
||||
tTimer:SetInterval(Interval)
|
||||
tTimer:SetEnabled(Enabled)
|
||||
ContainerChild:RegisterControl(tTimer,ControlName)
|
||||
return tTimer
|
||||
|
||||
end
|
||||
|
||||
DefaultControls.AddComboBox = function (ControlName,SelectionChangedEvent,Options,Pos_X, Pos_Y, Width, Height)
|
||||
|
||||
_G[ControlName] = FWSBinds.c_ComboBox()
|
||||
local tComboBox = _G[ControlName]
|
||||
tComboBox:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
|
||||
for index,value in ipairs(Options) do
|
||||
tComboBox:InsertItem(Options[index])
|
||||
end
|
||||
|
||||
ApplyThemeToControl(tComboBox,Theme.ComboBox)
|
||||
|
||||
tComboBox:SetSelectedIndex(0)
|
||||
tComboBox:SetDropDownReadOnly()
|
||||
tComboBox.Events:SetLua_IndexChanged(SelectionChangedEvent)
|
||||
tComboBox:SetSaveState(true)
|
||||
ContainerChild:RegisterControl(tComboBox,ControlName)
|
||||
|
||||
return tComboBox
|
||||
end
|
||||
|
||||
DefaultControls.AddButton = function(ControlName,Caption,ButtonClickEvent,Pos_X,Pos_Y,Width,Height,StepType)
|
||||
|
||||
_G[ControlName] = FWSBinds.c_Button()
|
||||
local tButton = _G[ControlName]
|
||||
|
||||
tButton:SetRect(Pos_X,Pos_Y,Width,Height)
|
||||
|
||||
tButton.Caption:SetCaption(Caption)
|
||||
tButton.Events:SetLua_ButtonClick(ButtonClickEvent)
|
||||
|
||||
ApplyThemeToControl(tButton,Theme.Button)
|
||||
|
||||
if StepType ~= nil then
|
||||
local SetRect = false
|
||||
|
||||
if StepType == "Next" then
|
||||
tButton:SetType_NextStep()
|
||||
SetRect = true
|
||||
elseif StepType == "Prev" then
|
||||
tButton:SetType_PrevStep()
|
||||
SetRect = true
|
||||
elseif StepType == "Exec" then
|
||||
tButton:SetType_ExecStep()
|
||||
SetRect = true
|
||||
end
|
||||
|
||||
if SetRect == true then
|
||||
tButton:SetRect(Pos_X,Pos_Y,125,44)
|
||||
end
|
||||
end
|
||||
|
||||
ContainerChild:RegisterControl(tButton,ControlName)
|
||||
return tButton
|
||||
|
||||
end
|
||||
|
||||
172
PluginCache/K4sh/GlobalDependencies/Scripts/StandardTheme.lua
Normal file
172
PluginCache/K4sh/GlobalDependencies/Scripts/StandardTheme.lua
Normal file
@@ -0,0 +1,172 @@
|
||||
RGBToHex = FWSBinds.c_Tools_RGBtoHex
|
||||
|
||||
function ApplyThemeToControl(Control,Theme)
|
||||
|
||||
if Theme == nil or Control == nil then return end
|
||||
|
||||
local ControlObject = Control.Color
|
||||
if ControlObject then
|
||||
local tTheme = Theme.Color
|
||||
if tTheme then
|
||||
if tTheme.Backcolor then ControlObject:SetBackColor(tTheme.Backcolor) end
|
||||
if tTheme.Forecolor then ControlObject:SetForeColor(tTheme.Forecolor) end
|
||||
if tTheme.Alpha then ControlObject:SetBackColorAlpha(tTheme.Alpha) end
|
||||
if Control.GetCheckState then
|
||||
if tTheme.Checked_Forecolor then
|
||||
if Control:GetCheckState() == 0 then ControlObject:SetForeColor(tTheme.Checked_Forecolor) end
|
||||
end
|
||||
if tTheme.Unchecked_Forecolor then
|
||||
if Control:GetCheckState() == 1 then ControlObject:SetForeColor(tTheme.Unchecked_Forecolor) end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
local ControlObject = Control.Font
|
||||
if ControlObject then
|
||||
local tTheme = Theme.Font
|
||||
if tTheme then
|
||||
if tTheme.Size then ControlObject:SetFontSize(tTheme.Size) end
|
||||
if tTheme.Name then ControlObject:SetFontName(tTheme.Name) end
|
||||
if tTheme.Bold then ControlObject:SetBold(tTheme.Bold) end
|
||||
if tTheme.Italic then ControlObject:SetItalic(tTheme.Italic) end
|
||||
if tTheme.Underline then ControlObject:SetUnderline(tTheme.Underline) end
|
||||
end
|
||||
end
|
||||
|
||||
local ControlObject = Control.BackgroundImage
|
||||
if ControlObject then
|
||||
local tTheme = Theme.BackgroundImage
|
||||
if tTheme then
|
||||
if tTheme.Dependency then
|
||||
local Dependency = ModuleDependencys:GetDependency(tTheme.Dependency)
|
||||
if Dependency then
|
||||
ControlObject:SetDependency(Dependency)
|
||||
ControlObject:SetEnabled(true)
|
||||
end
|
||||
end
|
||||
|
||||
if tTheme.Alpha then ControlObject:SetTransparencyLevel(tTheme.Alpha) end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
Theme = {}
|
||||
|
||||
Theme.CheckBox = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE+0.5, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Checked_Forecolor=RGBToHex(255,0,0), Unchecked_Forecolor=COLOR_GREEN}
|
||||
}
|
||||
|
||||
Theme.Button = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
}
|
||||
|
||||
Theme.FixToggle = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE+0.5, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Checked_Forecolor=RGBToHex(255,0,0), Unchecked_Forecolor=COLOR_GREEN}
|
||||
}
|
||||
|
||||
Theme.Header = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Backcolor=RGBToHex(255,64,64), Forecolor=COLOR_WHITE, Alpha=100}
|
||||
}
|
||||
|
||||
Theme.Warning = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Backcolor=RGBToHex(255,32,32), Forecolor=COLOR_WHITE, Alpha=70}
|
||||
}
|
||||
|
||||
Theme.Label = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT},
|
||||
Color = {Backcolor=RGBToHex(255,64,64), Forecolor=COLOR_WHITE, Alpha=100}
|
||||
}
|
||||
|
||||
Theme.FOVSlider = {
|
||||
Labels = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
},
|
||||
ValueLabel = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE-0.5, Name=GUI_DEFAULTFONT},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
}
|
||||
}
|
||||
|
||||
Theme.ComboBox = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
}
|
||||
|
||||
Theme.ParameterBox = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT},
|
||||
Color = {Backcolor=RGBToHex(50,50,255), Forecolor=COLOR_WHITE, Alpha=40}
|
||||
}
|
||||
|
||||
Theme.ContainerHeader = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Backcolor=COLOR_GREEN, Forecolor=COLOR_GREEN, Alpha=60}
|
||||
}
|
||||
|
||||
Theme.ContainerLabelName = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE-0.25, Name=GUI_DEFAULTFONT, Bold=true},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
}
|
||||
|
||||
Theme.ContainerLabelValue = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE-0.25, Name=GUI_DEFAULTFONT},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
}
|
||||
|
||||
Theme.ContainerLinkLabel = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE-0.5, Name=GUI_DEFAULTFONT},
|
||||
Color = {Forecolor=COLOR_WHITE}
|
||||
}
|
||||
|
||||
Theme.ContainerEditBox = {
|
||||
Font = {Size=GUI_DEFAULTFONTSIZE-0.5, Name=GUI_DEFAULTFONT},
|
||||
Color = {Backcolor=COLOR_WHITE, Forecolor=COLOR_WHITE, Alpha=25}
|
||||
}
|
||||
|
||||
Theme.MainWindow = {
|
||||
Color = {Backcolor=COLOR_BLACK},
|
||||
BackgroundImage = {Dependency="UI Background", Alpha=45}
|
||||
}
|
||||
|
||||
Theme.Container = {
|
||||
Color = {Backcolor=COLOR_WHITE, Alpha=25}
|
||||
}
|
||||
|
||||
--MainWindow
|
||||
ApplyThemeToControl(MainWindow,Theme.MainWindow)
|
||||
|
||||
-- Container Window
|
||||
ApplyThemeToControl(ContainerChild,Theme.Container)
|
||||
|
||||
-- Information Header
|
||||
ApplyThemeToControl(lbl_InfoHeader,Theme.ContainerHeader)
|
||||
ApplyThemeToControl(lbl_InfoFilename,Theme.ContainerLabelName)
|
||||
ApplyThemeToControl(lbl_InfoFilenameVal,Theme.ContainerLabelValue)
|
||||
ApplyThemeToControl(lbl_Version,Theme.ContainerLabelName)
|
||||
ApplyThemeToControl(lbl_VersionVal,Theme.ContainerLabelValue)
|
||||
ApplyThemeToControl(lbl_InfoModType,Theme.ContainerLabelName)
|
||||
ApplyThemeToControl(lbl_InfoModTypeVal,Theme.ContainerLabelValue)
|
||||
ApplyThemeToControl(lbl_InfoModName,Theme.ContainerLabelName)
|
||||
ApplyThemeToControl(lbl_InfoModNameVal,Theme.ContainerLabelValue)
|
||||
ApplyThemeToControl(lbl_InfoAuthor,Theme.ContainerLabelName)
|
||||
ApplyThemeToControl(lbl_InfoAuthorVal,Theme.ContainerLabelValue)
|
||||
|
||||
--Description
|
||||
ApplyThemeToControl(lbl_DescrHeader,Theme.ContainerHeader)
|
||||
ApplyThemeToControl(eb_Description,Theme.ContainerEditBox)
|
||||
|
||||
--Links and Resources
|
||||
ApplyThemeToControl(lbl_LinkResourceHeader,Theme.ContainerHeader)
|
||||
ApplyThemeToControl(link_LinkBlock,Theme.ContainerLinkLabel)
|
||||
|
||||
--Status Window
|
||||
ApplyThemeToControl(lbl_StatusWindowHeader,Theme.ContainerHeader)
|
||||
ApplyThemeToControl(StatusWindowEditBox,Theme.ContainerEditBox)
|
||||
Reference in New Issue
Block a user