From 35afcb8d2b1774a27e6d87cdf416daabd22eb162 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Wed, 12 Apr 2017 20:30:45 +0200
Subject: [PATCH] safety

---
 game/engines/default/engine/Savefile.lua          | 15 ++++++++++-----
 .../engines/default/engine/dialogs/ChatFilter.lua |  1 +
 game/modules/tome/class/UserChatExtension.lua     |  2 ++
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/game/engines/default/engine/Savefile.lua b/game/engines/default/engine/Savefile.lua
index c6907fccc5..b30a5893e9 100644
--- a/game/engines/default/engine/Savefile.lua
+++ b/game/engines/default/engine/Savefile.lua
@@ -698,17 +698,22 @@ function _M:loadEntity(name)
 	local loadedEntity = self:loadReal("main")
 
 	-- Delay loaded must run
-	for i, o in ipairs(self.delayLoad) do
---		print("loader executed for class", o, o.__CLASSNAME)
-		o:loaded()
-	end
+	local ok = false
+	pcall(function()
+		for i, o in ipairs(self.delayLoad) do
+--			print("loader executed for class", o, o.__CLASSNAME)
+			o:loaded()
+		end
+		ok = true
+	end)
 
 	-- We check for the server return, while we loaded the save it probably responded so we do not wait at all
-	if not checker() then self:badMD5Load() end
+	if ok and not checker() then self:badMD5Load() end
 
 	popup:done()
 
 	fs.umount(path)
+	if not ok then return false end
 	return loadedEntity
 end
 
diff --git a/game/engines/default/engine/dialogs/ChatFilter.lua b/game/engines/default/engine/dialogs/ChatFilter.lua
index ae60fc0175..be5d77615b 100644
--- a/game/engines/default/engine/dialogs/ChatFilter.lua
+++ b/game/engines/default/engine/dialogs/ChatFilter.lua
@@ -38,6 +38,7 @@ function _M:init(adds)
 		{name = "Other achievements", kind = "achievement_other"},
 	}
 	for i, l in ipairs(adds or {}) do list[#list+1] = l end
+	self:triggerHook{"ChatFilters:list", list=list}
 
 	local c_desc = Textzone.new{width=self.iw - 10, height=1, auto_height=true, text="Select which types of chat events to see or not."}
 	local uis = { {left=0, top=0, ui=c_desc} }
diff --git a/game/modules/tome/class/UserChatExtension.lua b/game/modules/tome/class/UserChatExtension.lua
index 94d93117c3..0c743eab64 100644
--- a/game/modules/tome/class/UserChatExtension.lua
+++ b/game/modules/tome/class/UserChatExtension.lua
@@ -75,6 +75,8 @@ function _M:event(e)
 			self.chat:addMessage("link", e.channel, e.login, {e.name, color}, "#ANTIQUE_WHITE#has linked a creature: #WHITE# "..data.name, {mode="tooltip", tooltip=data.desc})
 		elseif data.kind == "killer-link" then
 			self.chat:addMessage("death", e.channel, e.login, {e.name, color}, "#CRIMSON#"..data.msg.."#WHITE#", data.desc and {mode="tooltip", tooltip=data.desc} or nil)
+		else
+			self:triggerHook{"UserChat:event", color=color, e=e, data=data}
 		end
 	end
 end
-- 
GitLab