From c15951a55d39afd7f1f5d77fa06c11f604883ef6 Mon Sep 17 00:00:00 2001
From: dg <dg@51575b47-30f0-44d4-a5cc-537603b46e54>
Date: Tue, 22 Jun 2010 15:45:34 +0000
Subject: [PATCH] Qucik Weapon Set SWitch key (x by default)

git-svn-id: http://svn.net-core.org/repos/t-engine4@826 51575b47-30f0-44d4-a5cc-537603b46e54
---
 game/data/keybinds/inventory.lua             |  7 ++++
 game/engine/interface/ActorInventory.lua     |  2 ++
 game/modules/tome/class/Game.lua             |  4 +++
 game/modules/tome/class/Player.lua           | 35 ++++++++++++--------
 game/modules/tome/data/birth/descriptors.lua |  2 +-
 game/modules/tome/load.lua                   |  2 ++
 6 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/game/data/keybinds/inventory.lua b/game/data/keybinds/inventory.lua
index 22a425fd4f..d8df18890b 100644
--- a/game/data/keybinds/inventory.lua
+++ b/game/data/keybinds/inventory.lua
@@ -62,3 +62,10 @@ defineAction{
 	group = "inventory",
 	name = "Use items",
 }
+
+defineAction{
+	default = { "uni:x", },
+	type = "QUICK_SWITCH_WEAPON",
+	group = "inventory",
+	name = "Quick switch weapons set",
+}
diff --git a/game/engine/interface/ActorInventory.lua b/game/engine/interface/ActorInventory.lua
index e1ab584b7a..c09b948e6a 100644
--- a/game/engine/interface/ActorInventory.lua
+++ b/game/engine/interface/ActorInventory.lua
@@ -44,6 +44,7 @@ function _M:defineInventory(short_name, name, is_worn, desc)
 	self.inven_def[#self.inven_def].id = #self.inven_def
 	self.inven_def[short_name] = self.inven_def[#self.inven_def]
 	self["INVEN_"..short_name:upper()] = #self.inven_def
+	print("[INVENTORY] define slot", #self.inven_def, self.inven_def[#self.inven_def].name)
 end
 
 -- Auto define the inventory
@@ -268,6 +269,7 @@ function _M:wearObject(o, replace, vocal)
 		if vocal then game.logSeen(self, "%s is not wearable.", o:getName{do_color=true}) end
 		return false
 	end
+	print("wear slot", inven)
 	local ok, err = self:canWearObject(o)
 	if not ok then
 		if vocal then game.logSeen(self, "%s can not wear: %s (%s).", self.name:capitalize(), o:getName{do_color=true}, err) end
diff --git a/game/modules/tome/class/Game.lua b/game/modules/tome/class/Game.lua
index fc83bc84af..20ea9b694e 100644
--- a/game/modules/tome/class/Game.lua
+++ b/game/modules/tome/class/Game.lua
@@ -655,6 +655,10 @@ function _M:setupCommands()
 			self.player:playerUseItem()
 		end),
 
+		QUICK_SWITCH_WEAPON = function()
+			self.player:quickSwitchWeapons()
+		end,
+
 		USE_TALENTS = not_wild(function()
 			self.player:useTalents()
 		end),
diff --git a/game/modules/tome/class/Player.lua b/game/modules/tome/class/Player.lua
index 4d033a9608..835238ac45 100644
--- a/game/modules/tome/class/Player.lua
+++ b/game/modules/tome/class/Player.lua
@@ -44,19 +44,6 @@ module(..., package.seeall, class.inherit(
 ))
 
 function _M:init(t, no_default)
-	t.body = {
-		INVEN = 1000,
-		MAINHAND = 1,
-		OFFHAND = 1,
-		FINGER = 2,
-		NECK = 1,
-		LITE = 1,
-		BODY = 1,
-		HEAD = 1,
-		HANDS = 1,
-		FEET = 1,
-		TOOL = 1,
-	}
 	t.display=t.display or '@'
 	t.color_r=t.color_r or 230
 	t.color_g=t.color_g or 230
@@ -490,6 +477,28 @@ function _M:playerUseItem(object, item, inven)
 	)
 end
 
+function _M:quickSwitchWeapons()
+	local mh1, mh2 = self.inven[self.INVEN_MAINHAND], self.inven[self.INVEN_QS_MAINHAND]
+	local oh1, oh2 = self.inven[self.INVEN_OFFHAND], self.inven[self.INVEN_QS_OFFHAND]
+
+	local mhset1, mhset2 = {}, {}
+	local ohset1, ohset2 = {}, {}
+	-- Remove them all
+	for i = #mh1, 1, -1 do mhset1[#mhset1+1] = self:removeObject(mh1, i, true) end
+	for i = #mh2, 1, -1 do mhset2[#mhset2+1] = self:removeObject(mh2, i, true) end
+	for i = #oh1, 1, -1 do ohset1[#ohset1+1] = self:removeObject(oh1, i, true) end
+	for i = #oh2, 1, -1 do ohset2[#ohset2+1] = self:removeObject(oh2, i, true) end
+
+	-- Put them all back
+	for i = 1, #mhset1 do self:addObject(mh2, mhset1[i]) end
+	for i = 1, #mhset2 do self:addObject(mh1, mhset2[i]) end
+	for i = 1, #ohset1 do self:addObject(oh2, ohset1[i]) end
+	for i = 1, #ohset2 do self:addObject(oh1, ohset2[i]) end
+
+	self:useEnergy()
+	game.logPlayer(self, "You switch your weapons.")
+end
+
 function _M:playerLevelup(on_finish)
 	if self.unused_stats > 0 then
 		local ds = LevelupStatsDialog.new(self, on_finish)
diff --git a/game/modules/tome/data/birth/descriptors.lua b/game/modules/tome/data/birth/descriptors.lua
index 01bfad3a60..dbf666d0ce 100644
--- a/game/modules/tome/data/birth/descriptors.lua
+++ b/game/modules/tome/data/birth/descriptors.lua
@@ -40,7 +40,7 @@ newBirthDescriptor{
 	},
 	talents = {},
 	experience = 1.0,
-	body = { INVEN = 1000, MAINHAND=1, OFFHAND=1, BODY=1, QUIVER=1 },
+	body = { INVEN = 1000, QS_MAINHAND = 1, QS_OFFHAND = 1, MAINHAND = 1, OFFHAND = 1, FINGER = 2, NECK = 1, LITE = 1, BODY = 1, HEAD = 1, HANDS = 1, FEET = 1, TOOL = 1, QUIVER = 1 },
 
 	copy = {
 		-- Mages are unheard of at first, nobody but them regenerates mana
diff --git a/game/modules/tome/load.lua b/game/modules/tome/load.lua
index 61236cea26..11ffc1c61c 100644
--- a/game/modules/tome/load.lua
+++ b/game/modules/tome/load.lua
@@ -54,6 +54,8 @@ dofile("/mod/resolvers.lua")
 -- Body parts
 ActorInventory:defineInventory("MAINHAND", "In main hand", true, "Most weapons are wielded in the main hand.")
 ActorInventory:defineInventory("OFFHAND", "In off hand", true, "You can use shields or a second weapon in your off-hand, if you have the talents for it.")
+ActorInventory:defineInventory("QS_MAINHAND", "In main hand (2)", false, "Weapon Set 2: Most weapons are wielded in the main hand.")
+ActorInventory:defineInventory("QS_OFFHAND", "In off hand (2)", false, "Weapon Set 2: You can use shields or a second weapon in your off-hand, if you have the talents for it.")
 ActorInventory:defineInventory("FINGER", "On fingers", true, "Rings are worn on fingers.")
 ActorInventory:defineInventory("NECK", "Around neck", true, "Amulets are worn around the neck.")
 ActorInventory:defineInventory("LITE", "Light source", true, "A light source allows you to see in the dark places of the world.")
-- 
GitLab