From 4d84ccc89f72ea65c86d65a63e4853516286d0ae Mon Sep 17 00:00:00 2001
From: Yona-TYT <yonatan.el.amigo@gmail.com>
Date: Sat, 16 Nov 2024 10:24:13 -0400
Subject: [PATCH] ADD param SystemType TEST

---
 src/simutrans/builder/wegbauer.cc      | 1 +
 src/simutrans/dataobj/scenario.cc      | 9 ++++++---
 src/simutrans/script/api/api_simple.cc | 1 +
 src/simutrans/script/api/api_simple.h  | 5 +++--
 src/simutrans/tool/simmenu.h           | 2 ++
 5 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/src/simutrans/builder/wegbauer.cc b/src/simutrans/builder/wegbauer.cc
index e14c38a96..8b94a412f 100644
--- a/src/simutrans/builder/wegbauer.cc
+++ b/src/simutrans/builder/wegbauer.cc
@@ -318,6 +318,7 @@ void way_builder_t::fill_menu(tool_selector_t *tool_selector, const waytype_t wt
 	// now add sorted ways
 	for(way_desc_t const* const i : matching) {
 		i->get_builder()->enabled = enable;
+		i->get_builder()->systemtype = i->get_styp();
 		tool_selector->add_tool_selector(i->get_builder());
 	}
 }
diff --git a/src/simutrans/dataobj/scenario.cc b/src/simutrans/dataobj/scenario.cc
index 487b29c9a..c8ea136cb 100644
--- a/src/simutrans/dataobj/scenario.cc
+++ b/src/simutrans/dataobj/scenario.cc
@@ -500,20 +500,23 @@ const char* scenario_t::is_work_allowed_here(const player_t* player, uint16 tool
 		bool is_ctrl = false;
 		bool is_shift = false;
 		uint8 player_nr = player ? player->get_player_nr() : PLAYER_UNOWNED;
+
+		tool_t *my_tool = welt->get_tool(player_nr);
+
 		if(player_nr != PLAYER_UNOWNED){
-			if (two_click_tool_t *two_tool = dynamic_cast<two_click_tool_t*>(welt->get_tool(player_nr))) {
+			if (two_click_tool_t *two_tool = dynamic_cast<two_click_tool_t*>(my_tool)) {
 				start_pos = two_tool->get_start_pos();
 				is_drag_tool = !two_tool->is_first_click();
 				is_ctrl = two_tool->is_ctrl_pressed();
 				is_shift = two_tool->is_shift_pressed();
 			}
-			else if (tool_t *tool = dynamic_cast<tool_t*>(welt->get_tool(player_nr))) {
+			else if (tool_t *tool = dynamic_cast<tool_t*>(my_tool)) {
 				is_ctrl = tool->is_ctrl_pressed();
 				is_shift = tool->is_shift_pressed();
 			}
 		}
 		static plainstring msg;
-		const char *err = script->call_function(script_vm_t::FORCE, "is_work_allowed_here", msg, player_nr, tool_id, pos, script_api::mytool_data_t(start_pos, is_drag_tool, is_ctrl, is_shift));
+		const char *err = script->call_function(script_vm_t::FORCE, "is_work_allowed_here", msg, player_nr, tool_id, pos, script_api::mytool_data_t(start_pos, is_drag_tool, is_ctrl, is_shift, my_tool->systemtype));
 
 		return err == NULL ? msg.c_str() : NULL;
 	}
diff --git a/src/simutrans/script/api/api_simple.cc b/src/simutrans/script/api/api_simple.cc
index 49a29e4c5..451a6a22d 100644
--- a/src/simutrans/script/api/api_simple.cc
+++ b/src/simutrans/script/api/api_simple.cc
@@ -74,6 +74,7 @@ SQInteger param<mytool_data_t>::push(HSQUIRRELVM vm, mytool_data_t const& v)
 	create_slot<bool>(vm, "is_drag_tool",	v.is_drag_tool);
 	create_slot<bool>(vm, "is_ctrl",		v.is_ctrl);
 	create_slot<bool>(vm, "is_shift",		v.is_shift);
+	create_slot<uint8>(vm, "systemtype",	v.systemtype);
 	return 1;
 }
 
diff --git a/src/simutrans/script/api/api_simple.h b/src/simutrans/script/api/api_simple.h
index 4d94d7156..2bac6c289 100644
--- a/src/simutrans/script/api/api_simple.h
+++ b/src/simutrans/script/api/api_simple.h
@@ -65,9 +65,10 @@ namespace script_api {
 		bool is_drag_tool;
 		bool is_ctrl;
 		bool is_shift;
+		uint8 systemtype;
 
-		mytool_data_t(koord3d pos, bool drag, bool ctrl, bool shift) :
-			start_pos(pos), is_drag_tool(drag), is_ctrl(ctrl), is_shift(shift)
+		mytool_data_t(koord3d pos, bool drag, bool ctrl, bool shift, uint8 st) :
+			start_pos(pos), is_drag_tool(drag), is_ctrl(ctrl), is_shift(shift), systemtype(st)
 		{}
 	};
 
diff --git a/src/simutrans/tool/simmenu.h b/src/simutrans/tool/simmenu.h
index d8098a22c..5686d1d5a 100644
--- a/src/simutrans/tool/simmenu.h
+++ b/src/simutrans/tool/simmenu.h
@@ -225,6 +225,8 @@ public:
 	/// cursor marks this area
 	koord cursor_area;
 
+	/// systemtype for build way
+	uint8 systemtype = type_all;
 	
 	/// cursor offset within marked area (only effective if cursor_centered != false)
 	koord cursor_offset;
-- 
2.47.0

