From 62b8dc37e2e25f519b55ba108cbc73aad0fb8d6b Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Thu, 18 Nov 2010 23:30:17 +0000
Subject: [PATCH] Weapon brands now affect only the weapon carrying it. Other
 equipment granting brands work for all weapons.

git-svn-id: http://svn.net-core.org/repos/t-engine4@1934 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/modules/tome/class/Game.lua               |  2 +-
 game/modules/tome/class/Object.lua             |  8 ++++++++
 game/modules/tome/class/interface/Combat.lua   |  5 +++++
 .../data/general/objects/boss-artifacts.lua    | 12 ++++++------
 .../tome/data/general/objects/egos/weapon.lua  | 18 ++++++++++--------
 .../data/general/objects/world-artifacts.lua   | 14 +++++---------
 6 files changed, 35 insertions(+), 24 deletions(-)

diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index 76d2d848b5..0c42e0fe3b 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -681,7 +681,7 @@ function _M:setupCommands()
 --]]
 -- [[
 				for i = 1, 50 do
-					local a = self.zone:makeEntity(self.level, "object", {type="scroll", ego_chance=100, add_levels=50}, nil, true)
+					local a = self.zone:makeEntity(self.level, "object", {type="weapon", ego_chance=100, add_levels=50}, nil, true)
 					if a then
 						a:identify(true)
 						self.zone:addEntity(self.level, a, "object", self.player.x, self.player.y)
diff --git a/game/modules/tome/class/Object.lua b/game/modules/tome/class/Object.lua
index 36581e643a..e4b23824f6 100644
--- a/game/modules/tome/class/Object.lua
+++ b/game/modules/tome/class/Object.lua
@@ -244,6 +244,14 @@ function _M:getTextualDesc()
 		if combat.travel_speed then
 			desc:add("Increase travel speed by "..combat.travel_speed.."%", true)
 		end
+
+		if combat.melee_project then
+			local rs = {}
+			for typ, dam in pairs(combat.melee_project) do
+				rs[#rs+1] = ("%d %s"):format(dam, DamageType.dam_def[typ].name)
+			end
+			desc:add(("Damage on strike(melee): %s."):format(table.concat(rs, ',')), true)
+		end
 	end
 
 	local desc_wielder = function(w)
diff --git a/game/modules/tome/class/interface/Combat.lua b/game/modules/tome/class/interface/Combat.lua
index 9776fba3ff..31c2db38ce 100644
--- a/game/modules/tome/class/interface/Combat.lua
+++ b/game/modules/tome/class/interface/Combat.lua
@@ -239,6 +239,11 @@ function _M:attackTargetWith(target, weapon, damtype, mult)
 	end
 
 	-- Melee project
+	if hitted and not target.dead and weapon.melee_project then for typ, dam in pairs(weapon.melee_project) do
+		if dam > 0 then
+			DamageType:get(typ).projector(self, target.x, target.y, typ, dam)
+		end
+	end end
 	if hitted and not target.dead then for typ, dam in pairs(self.melee_project) do
 		if dam > 0 then
 			DamageType:get(typ).projector(self, target.x, target.y, typ, dam)
diff --git a/game/modules/tome/data/general/objects/boss-artifacts.lua b/game/modules/tome/data/general/objects/boss-artifacts.lua
index 9ccf07a675..ace4ef9b83 100644
--- a/game/modules/tome/data/general/objects/boss-artifacts.lua
+++ b/game/modules/tome/data/general/objects/boss-artifacts.lua
@@ -38,13 +38,13 @@ It is said the Conclave created this weapon for their warmaster during the dark
 		physcrit = 10,
 		dammod = {str=1},
 		damrange = 1.4,
+		melee_project={[DamageType.ICE] = 15},
 	},
 	wielder = {
 		lite = 1,
 		see_invisible = 2,
 		resists={[DamageType.COLD] = 25},
 		inc_damage = { [DamageType.COLD] = 20 },
-		melee_project={[DamageType.ICE] = 15},
 	},
 	max_power = 18, power_regen = 1,
 	use_power = { name = "generate a burst of ice", power = 8,
@@ -164,6 +164,10 @@ Tridents require the exotic weapons mastery talent to correctly use.]],
 		physcrit = 15,
 		dammod = {str=1.3},
 		damrange = 1.4,
+		melee_project={
+			[DamageType.COLD] = 15,
+			[DamageType.NATURE] = 20,
+		},
 	},
 
 	wielder = {
@@ -171,10 +175,6 @@ Tridents require the exotic weapons mastery talent to correctly use.]],
 		see_invisible = 2,
 		resists={[DamageType.COLD] = 25},
 		inc_damage = { [DamageType.COLD] = 20 },
-		melee_project={
-			[DamageType.COLD] = 15,
-			[DamageType.NATURE] = 20,
-		},
 	},
 
 	max_power = 150, power_regen = 1,
@@ -356,11 +356,11 @@ newEntity{ base = "BASE_WARAXE",
 		physcrit = 10,
 		dammod = {str=1},
 		damrange = 1.2,
+		melee_project={[DamageType.BLIGHT] = 20},
 	},
 	wielder = {
 		life_regen = -0.3,
 		inc_damage = { [DamageType.BLIGHT] = 20 },
-		melee_project={[DamageType.BLIGHT] = 20},
 	},
 }
 
diff --git a/game/modules/tome/data/general/objects/egos/weapon.lua b/game/modules/tome/data/general/objects/egos/weapon.lua
index 575d5ed627..4e9cb53448 100644
--- a/game/modules/tome/data/general/objects/egos/weapon.lua
+++ b/game/modules/tome/data/general/objects/egos/weapon.lua
@@ -25,7 +25,7 @@ newEntity{
 	name = "flaming ", prefix=true, instant_resolve=true,
 	level_range = {1, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.FIRE] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.64 end)},
 	},
 }
@@ -33,7 +33,7 @@ newEntity{
 	name = "icy ", prefix=true, instant_resolve=true,
 	level_range = {15, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.ICE] = resolvers.mbonus_material(15, 4, function(e, v) return v * 0.7 end)},
 	},
 }
@@ -41,7 +41,7 @@ newEntity{
 	name = "acidic ", prefix=true, instant_resolve=true,
 	level_range = {1, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.ACID] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.7 end)},
 	},
 }
@@ -49,7 +49,7 @@ newEntity{
 	name = "shocking ", prefix=true, instant_resolve=true,
 	level_range = {1, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.LIGHTNING] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.7 end)},
 	},
 }
@@ -57,7 +57,7 @@ newEntity{
 	name = "poisonous ", prefix=true, instant_resolve=true,
 	level_range = {1, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.POISON] = resolvers.mbonus_material(45, 6, function(e, v) return v * 0.5 end)},
 	},
 }
@@ -66,7 +66,7 @@ newEntity{
 	name = "slime-covered ", prefix=true, instant_resolve=true,
 	level_range = {10, 50},
 	rarity = 5,
-	wielder = {
+	combat = {
 		melee_project={[DamageType.SLIME] = resolvers.mbonus_material(45, 6, function(e, v) return v * 0.9 end)},
 	},
 }
@@ -93,7 +93,7 @@ newEntity{
 	greater_ego = true,
 	rarity = 25,
 	cost = 35,
-	wielder = {
+	combat = {
 		melee_project={
 			[DamageType.FIRE] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.7 end),
 			[DamageType.ICE] = resolvers.mbonus_material(15, 4, function(e, v) return v * 0.7 end),
@@ -165,11 +165,13 @@ newEntity{
 	greater_ego = true,
 	rarity = 20,
 	cost = 35,
-	wielder = {
+	combat = {
 		melee_project={
 			[DamageType.BLIGHT] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.7 end),
 			[DamageType.DARKNESS] = resolvers.mbonus_material(25, 4, function(e, v) return v * 0.7 end),
 		},
+	},
+	wielder = {
 		see_invisible = resolvers.mbonus_material(20, 5, function(e, v) return v * 0.2 end),
 		combat_physcrit = resolvers.mbonus_material(10, 4, function(e, v) return v * 0.4 end),
 	},
diff --git a/game/modules/tome/data/general/objects/world-artifacts.lua b/game/modules/tome/data/general/objects/world-artifacts.lua
index 5bc1fb6311..5c27b4ad0c 100644
--- a/game/modules/tome/data/general/objects/world-artifacts.lua
+++ b/game/modules/tome/data/general/objects/world-artifacts.lua
@@ -588,8 +588,6 @@ newEntity{ base = "BASE_KNIFE",
 		physcrit = 8,
 		dammod = {dex=0.55,cun=0.35},
 		no_stealth_break = true,
-	},
-	wielder = {
 		melee_project={[DamageType.RANDOM_SILENCE] = 10},
 	},
 }
@@ -609,13 +607,13 @@ newEntity{ base = "BASE_KNIFE",
 		apr = 15,
 		physcrit = 5,
 		dammod = {dex=0.45,str=0.45},
+		melee_project={[DamageType.DARKNESS] = 20},
 	},
 	wielder = {
 		lite = -1,
 		inc_damage={
 			[DamageType.DARKNESS] = 5,
 		},
-		melee_project={[DamageType.DARKNESS] = 20},
 	},
 }
 
@@ -634,13 +632,13 @@ newEntity{ base = "BASE_KNIFE",
 		apr = 7,
 		physcrit = 13,
 		dammod = {dex=0.45,str=0.45},
+		melee_project={[DamageType.LIGHT] = 20},
 	},
 	wielder = {
 		lite = 1,
 		inc_damage={
 			[DamageType.LIGHT] = 5,
 		},
-		melee_project={[DamageType.LIGHT] = 20},
 	},
 }
 
@@ -692,12 +690,12 @@ newEntity{ base = "BASE_GREATMAUL",
 		physcrit = 4,
 		dammod = {str=1.2},
 		talent_on_hit = { [Talents.T_FLAMESHOCK] = {level=3, chance=10} },
+		melee_project={[DamageType.FIRE] = 30},
 	},
 	wielder = {
 		inc_damage={
 			[DamageType.PHYSICAL] = 15,
 		},
-		melee_project={[DamageType.FIRE] = 30},
 	},
 }
 
@@ -1005,10 +1003,10 @@ newEntity{ base = "BASE_WARAXE",
 		apr = 4.5,
 		physcrit = 7,
 		dammod = {str=1},
+		melee_project={[DamageType.COLD] = 25},
 	},
 	wielder = {
 		combat_atk = 15,
-		melee_project={[DamageType.COLD] = 25},
 	},
 }
 
@@ -1025,10 +1023,10 @@ newEntity{ base = "BASE_WHIP",
 		atk = 10,
 		physcrit = 5,
 		dammod = {dex=1},
+		melee_project={[DamageType.POISON] = 22},
 	},
 	wielder = {
 		see_invisible = 9,
-		melee_project={[DamageType.POISON] = 22},
 	},
 }
 
@@ -1296,8 +1294,6 @@ newEntity{ base = "BASE_GREATSWORD",
 			elseif eff == "confusion" then target:setEffect(target.EFF_CONFUSED, 3, {power=75})
 			end
 		end},
-	},
-	wielder = {
 		melee_project={[DamageType.LIGHT] = 40, [DamageType.DARKNESS] = 40},
 	},
 }
-- 
GitLab