~gpcf/advtrains

Make killing velocity configurable v1 APPROVED

Blockhead: 1
 Make killing velocity configurable
Y. Wang: 1
 Allow kill velocity to be set to zero

 4 files changed, 14 insertions(+), 6 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~gpcf/advtrains/patches/29806/mbox | git am -3
Learn more about email & git

[PATCH] Make killing velocity configurable Export this patch

At the same time, fix a longstanding issue where overrun mode was
actually defaulting to nil when unconfigured and behaving like 'none',
which is probably why 56independent wasn't seeing that behaviour.
---
 advtrains/settingtypes.txt | 4 ++++
 advtrains/trainlogic.lua   | 7 +++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/advtrains/settingtypes.txt b/advtrains/settingtypes.txt
index 2b627cb..2f8df0d 100644
--- a/advtrains/settingtypes.txt
+++ b/advtrains/settingtypes.txt
@@ -40,6 +40,9 @@ advtrains_prot_range_down (Track protection range [down]) int 1 0 10
#    normal: Player is killed, game-defined behavior is applied as if the player died by other means.
advtrains_overrun_mode (Overrun mode) enum drop none,drop,normal

#    Kill the player when a train hits them going above this velocity.
advtrains_kill_velocity (Train velocity to kill players and entities) int 3 1 30

#    Wagon entity loading/unloading range, in nodes
#    When a wagon is within this range to a player, it is loaded
#    When a wagon leaves this range + 32 nodes, it is unloaded
@@ -61,3 +64,4 @@ advtrains_save_interval (Save Interval) int 60 20 3600
#    If enabled, trains only collide with nodes with "normal" drawtype.
advtrains_forgiving_collision (Forgiving Collision mode) bool false

#
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
index 35c3726..4a9b998 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/trainlogic.lua
@@ -1,7 +1,8 @@
--trainlogic.lua
--controls train entities stuff about connecting/disconnecting/colliding trains and other things

local setting_overrun_mode = minetest.settings:get("advtrains_overrun_mode")
local setting_overrun_mode = minetest.settings:get("advtrains_overrun_mode") or "normal"
local setting_kill_velocity = tonumber(minetest.settings:get("advtrains_kill_velocity")) or 3

local benchmark=false
local bm={}
@@ -771,7 +772,9 @@ function advtrains.train_step_c(id, train, dtime)
						end

						--- 8b damage players ---
						if is_loaded_area and train.velocity > 3 and (setting_overrun_mode=="drop" or setting_overrun_mode=="normal") then
                        if is_loaded_area and train.velocity > setting_kill_velocity
                            and (setting_overrun_mode=="drop" or setting_overrun_mode=="normal")
                        then
							local testpts = minetest.pos_to_string(testpos)
							local player=advtrains.playersbypts[testpts]
							if player and player:get_hp()>0 and advtrains.is_damage_enabled(player:get_player_name()) then
-- 
2.34.1

[PATCH] Allow kill velocity to be set to zero Export this patch

Here are the changes I proposed in my reply email.

---
 advtrains/settingtypes.txt | 3 ++-
 advtrains/trainlogic.lua   | 6 +++---
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/advtrains/settingtypes.txt b/advtrains/settingtypes.txt
index 2f8df0d..7bfa298 100644
--- a/advtrains/settingtypes.txt
+++ b/advtrains/settingtypes.txt
@@ -41,7 +41,8 @@ advtrains_prot_range_down (Track protection range [down]) int 1 0 10
advtrains_overrun_mode (Overrun mode) enum drop none,drop,normal

#    Kill the player when a train hits them going above this velocity.
advtrains_kill_velocity (Train velocity to kill players and entities) int 3 1 30
#    This setting is only sensible if advtrains_overrun_mode is set to "drop" or "normal".
advtrains_kill_velocity (Train velocity to kill players and entities) int 3 0 30

#    Wagon entity loading/unloading range, in nodes
#    When a wagon is within this range to a player, it is loaded
diff --git a/advtrains/trainlogic.lua b/advtrains/trainlogic.lua
index 4a9b998..27c7cab 100644
--- a/advtrains/trainlogic.lua
+++ b/advtrains/trainlogic.lua
@@ -772,9 +772,9 @@ function advtrains.train_step_c(id, train, dtime)
						end

						--- 8b damage players ---
                        if is_loaded_area and train.velocity > setting_kill_velocity
                            and (setting_overrun_mode=="drop" or setting_overrun_mode=="normal")
                        then
						if is_loaded_area and train.velocity > setting_kill_velocity
							and (setting_overrun_mode=="drop" or setting_overrun_mode=="normal")
						then
							local testpts = minetest.pos_to_string(testpos)
							local player=advtrains.playersbypts[testpts]
							if player and player:get_hp()>0 and advtrains.is_damage_enabled(player:get_player_name()) then
-- 
2.35.1