From f5a5d05d802a1d5ff9dc2e5409febe58c7bc58a2 Mon Sep 17 00:00:00 2001
From: DarkGod <darkgod@net-core.org>
Date: Thu, 19 Sep 2013 22:58:46 +0200
Subject: [PATCH] Rares should be more interresting/powerfull

---
 game/modules/tome/class/GameState.lua | 31 ++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/game/modules/tome/class/GameState.lua b/game/modules/tome/class/GameState.lua
index 581e67f85e..0a055641a2 100644
--- a/game/modules/tome/class/GameState.lua
+++ b/game/modules/tome/class/GameState.lua
@@ -355,6 +355,7 @@ function _M:generateRandart(data)
 	-- Add ego properties
 	-----------------------------------------------------------
 	local nb_egos = data.egos or 3
+	local gr_egos = data.greater_egos_bias or math.floor(nb_egos*2/3) -- 2/3 greater egos by default
 	if o.egos and nb_egos > 0 then
 		local legos = {}
 		local been_greater = 0
@@ -365,7 +366,7 @@ function _M:generateRandart(data)
 			local egos = rng.table(legos)
 			local list = {}
 			local filter = nil
-			if rng.percent(lev) and been_greater < 2 then been_greater = been_greater + 1 filter = function(e) return e.greater_ego end end
+			if rng.percent(100*lev/(lev+50)) and been_greater < gr_egos then been_greater = been_greater + 1 filter = function(e) return e.greater_ego end end --RE Phase out (but don't eliminate) lesser egos with level
 			for z = 1, #egos do list[#list+1] = egos[z].e end
 
 			local ef = self:egoFilter(game.zone, game.level, "object", "randartego", o, {special=filter, forbid_power_source=data.forbid_power_source, power_source=data.power_source}, list, {})
@@ -1266,6 +1267,32 @@ function _M:entityFilterPost(zone, level, type, e, filter)
 					end
 					if data.user_post then data.user_post(b, data) end
 				end,
+				post = function(b, data)
+					if data.level <= 20 then
+						b.inc_damage = b.inc_damage or {}
+						b.inc_damage.all = (b.inc_damage.all or 0) - 40 * (20 - data.level + 1) / 20
+					end
+
+					-- Drop
+					for i = 1, data.nb_rares do -- generate rares as weak (1 ego) randarts
+						local fil = {lev=lev, egos=1, greater_egos_bias = 0, forbid_power_source=b.not_power_source,
+							base_filter = {no_tome_drops=true, ego_filter={keep_egos=true, ego_chance=-1000}, 
+							special=function(e)
+								return (not e.unique and e.randart_able) and (not e.material_level or e.material_level >= 1) and true or false
+							end}
+						}
+						local o = game.state:generateRandart(fil,nil, true)
+						if o then
+--							print("[entityFilterPost]: Generated random object for", tostring(b.name)) --RE
+							o.unique, o.randart, o.rare = nil, nil, true
+							b:addObject(b.INVEN_INVEN, o)
+							game.zone:addEntity(game.level, o, "object")
+						else
+							print("[entityFilterPost]: Failed to generate random object for", tostring(b.name))
+						end
+					end
+					if data.user_post then data.user_post(b, data) end
+				end,
 			}
 			e = self:createRandomBoss(e, table.merge(base, filter.random_elite, true))
 		end
@@ -1273,6 +1300,8 @@ function _M:entityFilterPost(zone, level, type, e, filter)
 		if filter.random_object and not e.unique and e.randart_able then
 			local data = _G.type(filter.random_object) == "table" and filter.random_object or {}
 			local lev = math.max(1, game.zone:level_adjust_level(game.level, game.zone, "object"))
+			print("[entityFilterPost]: Generating obsolete random_object")
+			print(debug.traceback())
 			e = game.state:generateRandart{
 				lev = lev,
 				egos = 0,
-- 
GitLab