mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 21:33:46 +03:00
127 lines
3.0 KiB
Lua
127 lines
3.0 KiB
Lua
--[[
|
|
| This file was obtained through the combined efforts
|
|
| of Madbluntz & Plymouth Antiquarian Society.
|
|
|
|
|
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
|
| Maloy, DrPepper10 @ RIP, Atle!
|
|
|
|
|
| Visit for more: https://plymouth.thetwilightzone.ru/
|
|
--]]
|
|
|
|
|
|
--
|
|
-- Here we get a callback from the game/client code on Lua errors, and display a nice notification.
|
|
--
|
|
-- This should help `newbs` find out which addons are crashing.
|
|
--
|
|
|
|
local Errors = {}
|
|
|
|
hook.Add( "OnLuaError", "MenuErrorHandler", function( str, realm, stack, addontitle, addonid )
|
|
|
|
-- This error is caused by a specific workshop addon
|
|
--[[if ( isstring( addonid ) ) then
|
|
|
|
-- Down Vote
|
|
steamworks.Vote( addonid, false )
|
|
|
|
-- Disable Naughty Addon
|
|
timer.Simple( 5, function()
|
|
MsgN( "Disabling addon '", addontitle, "' due to lua errors" )
|
|
steamworks.SetShouldMountAddon( addonid, false )
|
|
steamworks.ApplyAddons()
|
|
end )
|
|
|
|
end]]
|
|
|
|
if ( addonid == nil ) then addonid = 0 end
|
|
|
|
if ( Errors[ addonid ] ) then
|
|
Errors[ addonid ].times = Errors[ addonid ].times + 1
|
|
Errors[ addonid ].last = SysTime()
|
|
|
|
return
|
|
end
|
|
|
|
local text = language.GetPhrase( "errors.something_p" )
|
|
|
|
-- We know the name, display it to the user
|
|
if ( isstring( addontitle ) ) then
|
|
text = string.format( language.GetPhrase( "errors.addon_p" ), addontitle )
|
|
end
|
|
|
|
local error = {
|
|
first = SysTime(),
|
|
last = SysTime(),
|
|
times = 1,
|
|
title = addontitle,
|
|
x = 32,
|
|
text = text
|
|
}
|
|
|
|
Errors[ addonid ] = error
|
|
|
|
end )
|
|
|
|
hook.Add( "OnPauseMenuBlockedTooManyTimes", "TellAboutShiftEsc", function()
|
|
|
|
Errors[ "internal_shift+esc" ] = {
|
|
first = SysTime(),
|
|
last = SysTime(),
|
|
times = 1,
|
|
title = "",
|
|
x = 32,
|
|
text = "You can force open the main menu by holding Shift when pressing the Escape key."
|
|
}
|
|
|
|
end )
|
|
|
|
local matAlert = Material( "icon16/error.png" )
|
|
|
|
local cl_drawhud = GetConVar( "cl_drawhud" )
|
|
|
|
hook.Add( "DrawOverlay", "MenuDrawLuaErrors", function()
|
|
|
|
if ( table.IsEmpty( Errors ) ) then return end
|
|
if ( !cl_drawhud:GetBool() ) then return end
|
|
|
|
local idealy = 32
|
|
local height = 30
|
|
local EndTime = SysTime() - 10
|
|
local Recent = SysTime() - 0.5
|
|
|
|
for k, v in SortedPairsByMemberValue( Errors, "last" ) do
|
|
|
|
surface.SetFont( "DermaDefaultBold" )
|
|
if ( v.y == nil ) then v.y = idealy end
|
|
if ( v.w == nil ) then v.w = surface.GetTextSize( v.text ) + 48 end
|
|
|
|
draw.RoundedBox( 2, v.x + 2, v.y + 2, v.w, height, Color( 40, 40, 40, 255 ) )
|
|
draw.RoundedBox( 2, v.x, v.y, v.w, height, Color( 240, 240, 240, 255 ) )
|
|
|
|
if ( v.last > Recent ) then
|
|
|
|
draw.RoundedBox( 2, v.x, v.y, v.w, height, Color( 255, 200, 0, ( v.last - Recent ) * 510 ) )
|
|
|
|
end
|
|
|
|
surface.SetTextColor( 90, 90, 90, 255 )
|
|
surface.SetTextPos( v.x + 34, v.y + 8 )
|
|
surface.DrawText( v.text )
|
|
|
|
surface.SetDrawColor( 255, 255, 255, 150 + math.sin( v.y + SysTime() * 30 ) * 100 )
|
|
surface.SetMaterial( matAlert )
|
|
surface.DrawTexturedRect( v.x + 6, v.y + 6, 16, 16 )
|
|
|
|
v.y = idealy
|
|
|
|
idealy = idealy + 40
|
|
|
|
if ( v.last < EndTime ) then
|
|
Errors[ k ] = nil
|
|
end
|
|
|
|
end
|
|
|
|
end )
|