From 58765e12c25c659d8fe32023358967252c68f7cc Mon Sep 17 00:00:00 2001
From: Yona-TYT <yonatan.el.amigo@gmail.com>
Date: Wed, 6 Nov 2024 06:47:41 -0400
Subject: [PATCH] ADD is_language_changing script function

---
 src/simutrans/dataobj/scenario.cc        | 18 ++++++++++++++++++
 src/simutrans/dataobj/scenario.h         |  7 +++++++
 src/simutrans/gui/sprachen.cc            |  8 ++++++++
 src/simutrans/script/api/api_skeleton.cc |  9 +++++++++
 4 files changed, 42 insertions(+)

diff --git a/src/simutrans/dataobj/scenario.cc b/src/simutrans/dataobj/scenario.cc
index 0d0e4ef0a..487b29c9a 100644
--- a/src/simutrans/dataobj/scenario.cc
+++ b/src/simutrans/dataobj/scenario.cc
@@ -595,6 +595,24 @@ const char* scenario_t::jump_to_link_executed(koord3d pos)
 	return NULL;
 }
 
+
+const char* scenario_t::is_language_changing()
+{
+	if (env_t::server) {
+		// networkgame: allowed
+		return NULL;
+	}
+	// call script
+	if (what_scenario == SCRIPTED) {
+		static plainstring msg;
+		const char *err = script->call_function(script_vm_t::FORCE, "is_language_changing", msg);
+
+		return err == NULL ? msg.c_str() : NULL;
+	}
+	return NULL;
+}
+
+
 const char* scenario_t::get_error_text()
 {
 	if (script) {
diff --git a/src/simutrans/dataobj/scenario.h b/src/simutrans/dataobj/scenario.h
index 42aafeaab..1a4aecf4b 100644
--- a/src/simutrans/dataobj/scenario.h
+++ b/src/simutrans/dataobj/scenario.h
@@ -455,6 +455,13 @@ public:
 	 */
 	const char* jump_to_link_executed(koord3d pos);
 
+	/**
+	 * Called when the player changes the language.
+	 *
+	 * @return an error message otherwise or null
+	 */
+	const char* is_language_changing();
+
 	/// @return debug dump of forbidden tools
 	const char* get_forbidden_text();
 	/// @}
diff --git a/src/simutrans/gui/sprachen.cc b/src/simutrans/gui/sprachen.cc
index ce474d6e3..accd3652b 100644
--- a/src/simutrans/gui/sprachen.cc
+++ b/src/simutrans/gui/sprachen.cc
@@ -21,6 +21,7 @@
 
 #include "../dataobj/environment.h"
 #include "../dataobj/translator.h"
+#include "../dataobj/scenario.h"
 #include "../sys/simsys.h"
 #include "../utils/simstring.h"
 #include "../world/simworld.h"
@@ -189,6 +190,13 @@ bool sprachengui_t::action_triggered( gui_action_creator_t *comp, value_t)
 				// must not update non-existent toolbars
 				tool_t::update_toolbars();
 			}
+
+			scenario_t *scen = welt->get_scenario();
+			if (scen->is_scripted()) {
+				scen->is_language_changing();
+
+			}
+
 		}
 		else {
 			b->pressed = false;
diff --git a/src/simutrans/script/api/api_skeleton.cc b/src/simutrans/script/api/api_skeleton.cc
index 7607b14b4..74cdbfeeb 100644
--- a/src/simutrans/script/api/api_skeleton.cc
+++ b/src/simutrans/script/api/api_skeleton.cc
@@ -289,6 +289,15 @@ register_function("is_convoy_allowed");
  */
 register_function("jump_to_link_executed");
 
+/**
+ * Called when the player changes the language.
+ *
+ * @return null if allowed, an error message otherwise
+ * @ingroup scen_skel
+ * @ingroup quick_return_func
+ */
+register_function("is_language_changing");
+
 /**
  * Initializes the tool.
  * @returns true upon success.
-- 
2.47.0

