From 07349c0923d7919f2a95d86197fd687c3187beda Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Sun, 22 May 2011 12:04:47 +0000
Subject: [PATCH] If the Eidolon is removed by any means from the Eidolon Plane
 it will instantly come back

git-svn-id: http://svn.net-core.org/repos/t-engine4@3430 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/engines/default/engine/Level.lua          |  4 ++--
 .../tome/data/zones/eidolon-plane/zone.lua     | 18 ++++++++++++++++++
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/game/engines/default/engine/Level.lua b/game/engines/default/engine/Level.lua
index 5f319611a4..d0ee99eb87 100644
--- a/game/engines/default/engine/Level.lua
+++ b/game/engines/default/engine/Level.lua
@@ -98,7 +98,7 @@ function _M:addEntity(e, after)
 end
 
 --- Removes an entity from the level
-function _M:removeEntity(e)
+function _M:removeEntity(e, force)
 	if e._fake_level_entity then
 		-- Tells it to delete itself if needed
 		if e.deleteFromMap then e:deleteFromMap(self.map) end
@@ -107,7 +107,7 @@ function _M:removeEntity(e)
 		return
 	end
 
-	if not self.entities[e.uid] then error("Entity "..e.uid.."("..e.name..") not present on the level") end
+	if not self.entities[e.uid] and not force then error("Entity "..e.uid.."("..e.name..") not present on the level") end
 	self.entities[e.uid] = nil
 	for i = 1, #self.e_array do
 		if self.e_array[i] == e then
diff --git a/game/modules/tome/data/zones/eidolon-plane/zone.lua b/game/modules/tome/data/zones/eidolon-plane/zone.lua
index af16cf665d..7b036155e7 100644
--- a/game/modules/tome/data/zones/eidolon-plane/zone.lua
+++ b/game/modules/tome/data/zones/eidolon-plane/zone.lua
@@ -75,6 +75,24 @@ return {
 		who:addObject(who.INVEN_INVEN, o)
 	end,
 
+	on_turn = function()
+		local eidolon = nil
+		for uid, e in pairs(game.level.entities) do
+			if e.define_as == "EIDOLON" then eidolon = e end
+		end
+		if not eidolon then
+			eidolon = game.zone:makeEntityByName(game.level, "actor", "EIDOLON")
+			local x, y = util.findFreeGrid(game.player.x, game.player.y, 10, true, {[engine.Map.ACTOR] = true})
+			if x and y then game.zone:addEntity(game.level, eidolon, "actor", x, y) end
+		elseif not eidolon.x or game.level.map(eidolon.x, eidolon.y, engine.Map.ACTOR) ~= eidolon then
+			eidolon.deleteFromMap = false
+			game.level:removeEntity(eidolon, true)
+			local x, y = util.findFreeGrid(game.player.x, game.player.y, 10, true, {[engine.Map.ACTOR] = true})
+			if x and y then game.zone:addEntity(game.level, eidolon, "actor", x, y) end
+			eidolon.deleteFromMap = nil
+		end
+	end,
+
 	eidolon_exit = function(to_worldmap)
 		game:onTickEnd(function()
 			local oldzone = game.zone
-- 
GitLab