167 lines
4.9 KiB
Lua
167 lines
4.9 KiB
Lua
local invertedHighPriorityItems = {}
|
|
local invertedHighPriorityCharacters = {}
|
|
local highPriorityComponents = {}
|
|
|
|
local signalComponents = {}
|
|
|
|
if SERVER then
|
|
Game.mapEntityUpdateInterval = PerformanceFix.Config.serverMapEntityUpdateInterval
|
|
Game.characterUpdateInterval = PerformanceFix.Config.serverCharacterUpdateInterval
|
|
|
|
highPriorityComponents = PerformanceFix.Config.serverComponentPriority
|
|
|
|
for key, value in pairs(PerformanceFix.Config.serverItemHighPriority) do
|
|
invertedHighPriorityItems[value] = key
|
|
end
|
|
|
|
for key, value in pairs(PerformanceFix.Config.highPriorityCharacters) do
|
|
invertedHighPriorityCharacters[value] = key
|
|
end
|
|
|
|
Hook.Add("item.equip", "highPriorityHands", function(item, char)
|
|
Game.RemovePriorityItem(item)
|
|
Game.AddPriorityItem(item)
|
|
end)
|
|
else
|
|
local result, error = pcall(function()
|
|
Game.mapEntityUpdateInterval = PerformanceFix.Config.clientMapEntityUpdateInterval
|
|
Game.characterUpdateInterval = PerformanceFix.Config.clientCharacterUpdateInterval
|
|
|
|
if Game.IsMultiplayer then
|
|
Game.poweredUpdateInterval = PerformanceFix.Config.poweredUpdateInterval or 1
|
|
end
|
|
|
|
Timer.AccumulatorMax = (PerformanceFix.Config.accumulatorMax or 50) / 1000
|
|
end)
|
|
|
|
if error then
|
|
printerror("The below error most likely was thrown because of an outdated Lua client, please consider updating.")
|
|
printerror(error)
|
|
end
|
|
|
|
highPriorityComponents = PerformanceFix.Config.clientComponentPriority
|
|
|
|
for key, value in pairs(PerformanceFix.Config.clientItemHighPriority) do
|
|
invertedHighPriorityItems[value] = key
|
|
end
|
|
|
|
for key, value in pairs(PerformanceFix.Config.highPriorityCharacters) do
|
|
invertedHighPriorityCharacters[value] = key
|
|
end
|
|
|
|
Hook.Add("item.equip", "highPriorityHands", function(item, char)
|
|
Game.RemovePriorityItem(item)
|
|
Game.AddPriorityItem(item)
|
|
end)
|
|
end
|
|
|
|
|
|
Hook.Add("think", "signalUpdatePerformanceFix", function()
|
|
for key, value in pairs(signalComponents) do
|
|
value.SendSignal(tostring(Game.mapEntityUpdateInterval), "signal_out")
|
|
end
|
|
end)
|
|
|
|
local function IsPriority(item)
|
|
if item.HasTag("highpriority") or invertedHighPriorityItems[item.Prefab.Identifier.Value] ~= nil then
|
|
return true
|
|
end
|
|
|
|
for _, comp in pairs(highPriorityComponents) do
|
|
if item.GetComponentString(comp) ~= nil then
|
|
return true
|
|
end
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
local function SetPriority()
|
|
if CLIENT then
|
|
for k, v in pairs(Item.ItemList) do
|
|
if PerformanceFix.Config.allowSingleplayerPermanentConfigs and Game.IsSingleplayer then
|
|
break
|
|
end
|
|
|
|
if string.find(v.Tags, "performancefix") then
|
|
table.insert(signalComponents, v)
|
|
end
|
|
|
|
local light = v.GetComponentString("LightComponent")
|
|
|
|
if light ~= nil then
|
|
if PerformanceFix.Config.disableShadowCastingLights then
|
|
light.CastShadows = false
|
|
end
|
|
if PerformanceFix.Config.disableDrawBehindSubsLights then
|
|
light.DrawBehindSubs = false
|
|
end
|
|
end
|
|
|
|
if PerformanceFix.Config.hideInGameWires then
|
|
local wire = v.GetComponentString("Wire")
|
|
|
|
if wire and #wire.Connections ~= 0 then
|
|
wire.Item.HiddenInGame = true
|
|
end
|
|
end
|
|
|
|
if PerformanceFix.Config.hideInGameComponents then
|
|
if v.HasTag("logic") then
|
|
v.HiddenInGame = true
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Game.ClearPriorityItem()
|
|
Game.ClearPriorityCharacter()
|
|
|
|
for key, value in pairs(Item.ItemList) do
|
|
if IsPriority(value) then
|
|
Game.AddPriorityItem(value)
|
|
end
|
|
end
|
|
|
|
for key, value in pairs(Character.CharacterList) do
|
|
if invertedHighPriorityCharacters[value.SpeciesName.Value] then
|
|
Game.AddPriorityCharacter(value)
|
|
end
|
|
|
|
if value.Inventory ~= nil then
|
|
local rightItem = value.Inventory.GetItemInLimbSlot(InvSlotType.RightHand)
|
|
local leftItem = value.Inventory.GetItemInLimbSlot(InvSlotType.LeftHand)
|
|
|
|
if rightItem ~= nil then
|
|
Game.AddPriorityItem(rightItem)
|
|
end
|
|
|
|
if leftItem ~= nil then
|
|
Game.AddPriorityItem(leftItem)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
Hook.Add("roundStart", "initRoundStart", function()
|
|
Timer.Wait(function()
|
|
SetPriority()
|
|
end, 1000)
|
|
end)
|
|
|
|
|
|
Hook.Add("characterCreated", "addToPriority", function(character)
|
|
if invertedHighPriorityCharacters[character.SpeciesName.Value] then
|
|
Game.AddPriorityCharacter(character)
|
|
end
|
|
end)
|
|
|
|
Hook.Add("item.created", "addToPriority", function (item)
|
|
if IsPriority(item) then
|
|
Game.AddPriorityItem(item)
|
|
end
|
|
end)
|
|
|
|
|
|
SetPriority()
|