From c860e34a42863d27351435fdc2fbc08de1638620 Mon Sep 17 00:00:00 2001
From: Alexander Sedov <alex0player@gmail.com>
Date: Mon, 16 Feb 2015 12:57:33 +0300
Subject: [PATCH] egos & stuff

---
 game/modules/tome/class/Object.lua            |  4 ++--
 .../tome/data/general/objects/egos/staves.lua | 23 +++++++------------
 2 files changed, 10 insertions(+), 17 deletions(-)

diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index a6f08238c2..66590e7596 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -2120,14 +2120,14 @@ local standard_flavors = {
 local function update_staff_table(o, d_table_old, d_table_new, old_element, new_element, tab, v, is_greater)
 	if is_greater then
 		for i = 1, #d_table_old do
-			o.wielder[tab][d_table_old[i]] = math.max(0, o.wielder[tab][d_table_old[i]] - v)
+			o.wielder[tab][d_table_old[i]] = math.max(0, (o.wielder[tab][d_table_old[i]] or 0) - v)
 			if o.wielder[tab][d_table_old[i]] == 0 then o.wielder[tab][d_table_old[i]] = nil end
 		end
 		for i = 1, #d_table_new do
 			o.wielder[tab][d_table_new[i]] = (o.wielder[tab][d_table_new[i]] or 0) + v
 		end
 	else
-		o.wielder[tab][old_element] = math.max(0, o.wielder[tab][old_element] - v)
+		o.wielder[tab][old_element] = math.max(0, (o.wielder[tab][old_element] or 0) - v)
 		o.wielder[tab][new_element] = (o.wielder[tab][new_element] or 0) + v
 		if o.wielder[tab][old_element] == 0 then o.wielder[tab][old_element] = nil end
 	end
diff --git a/game/modules/tome/data/general/objects/egos/staves.lua b/game/modules/tome/data/general/objects/egos/staves.lua
index 55f9779957..d74e69a4df 100644
--- a/game/modules/tome/data/general/objects/egos/staves.lua
+++ b/game/modules/tome/data/general/objects/egos/staves.lua
@@ -66,12 +66,8 @@ newEntity{
 		combat_spellpower = resolvers.mbonus_material(3, 2),
 	},
 	resolvers.genericlast(function(e)
-		e.wielder.inc_damage[e.combat.element or e.combat.damtype] = e.combat.dam
-		if e.combat.of_breaching then
-			for d, v in pairs(e.wielder.inc_damage) do
-				e.wielder.resists_pen[d] = math.ceil(e.combat.dam/2)
-			end
-		end
+		e.combat.staff_power = e.combat.dam
+		e:commandStaff(e.element, e.flavor_name)
 	end),
 }
 
@@ -148,15 +144,7 @@ newEntity{
 		combat_spellpower = resolvers.mbonus_material(4, 3),
 	},
 	resolvers.generic(function(e)
-		local dam_tables = {
-			magestaff = { engine.DamageType.FIRE, engine.DamageType.COLD, engine.DamageType.LIGHTNING, engine.DamageType.ARCANE },
-			starstaff = { engine.DamageType.LIGHT, engine.DamageType.DARKNESS, engine.DamageType.TEMPORAL, engine.DamageType.PHYSICAL },
-			vilestaff = { engine.DamageType.DARKNESS, engine.DamageType.BLIGHT, engine.DamageType.ACID, engine.DamageType.FIRE },
-		}
-		local d_table = dam_tables[e.flavor_name]
-		for i = 1, #d_table do
-			e.wielder.inc_damage[d_table[i]] = e.combat.dam
-		end
+		e:commandStaff(e.combat.element, e.flavor_name)
 	end),
 }
 
@@ -307,6 +295,7 @@ newEntity{
 		wards = {},
 	},
 	combat = {of_warding = true},
+	command_staff = {of_warding = {add=2, mult=0, "wards"}},
 	resolvers.genericlast(function(e)
 		for d, v in pairs(e.wielder.inc_damage) do
 			e.wielder.wards[d] = 2
@@ -326,6 +315,7 @@ newEntity{
 		resists_pen = {},
 	},
 	combat = {of_breaching = true},
+	command_staff = {resists_pen=0.5,},
 	resolvers.genericlast(function(e)
 		for d, v in pairs(e.wielder.inc_damage) do
 			e.wielder.resists_pen[d] = v/2
@@ -433,6 +423,7 @@ newEntity{
 		wards = {},
 	},
 	combat = {of_greater_warding = true},
+	command_staff = {of_greater_warding = {add=3, mult=0, "wards"}},
 	resolvers.genericlast(function(e)
 		for d, v in pairs(e.wielder.inc_damage) do
 			e.wielder.wards[d] = 3
@@ -506,6 +497,7 @@ newEntity{
 		resists = {},
 	},
 	combat = {of_protection = true},
+	command_staff = {resists = 0.5,},
 	resolvers.genericlast(function(e)
 		for d, v in pairs(e.wielder.inc_damage) do
 			e.wielder.resists[d] = v/2
@@ -602,6 +594,7 @@ newEntity{
 			[DamageType.ARCANE] = resolvers.mbonus_material(30, 15),
 		},
 	},
+	-- XXX what is the purpose of this
 	resolvers.genericlast(function(e)
 		e.wielder.inc_damage[e.combat.element or e.combat.damtype] = e.combat.dam
 		if e.combat.of_breaching then
-- 
GitLab