diff --git a/README.md b/README.md index 73f69e59..ff9fc220 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m * [pipeworks][] ([WTFPL][lic.wtfpl]) -- version: [2eff6e3 Git][ver.pipeworks] *2017-06-07* ***UPDATE*** * plantlife/ * player/action/ - * [hbsprint][] ([LGPL][lic.lgpl2.1]) -- version: [c473d57 Git][ver.hbsprint] *2017-08-07* ([patched][patch.hbsprint]) + * [hbsprint][] ([LGPL][lic.lgpl2.1]) -- version: [7fd2beb Git][ver.hbsprint] *2017-08-23* ([patched][patch.hbsprint]) * player/visuals/ * [invisibility][] ([MIT][lic.invisibility]) -- version: [bf4156b Git][ver.invisibility] *2016-08-19* ([patched][patch.invisibility]) ***UPDATE*** * [playeranim][] ([BSD 2-Clause][lic.playeranim]) - version [59bcd38 Git][ver.playeranim] *2017-06-07* ([patched][patch.playeranim]) ***UPDATE*** @@ -455,7 +455,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [ver.glass]: https://github.com/AntumMT/mod-glass/tree/d61a6c6 [ver.glow]: https://github.com/bdjnk/glow/tree/c611ae0 [ver.hbarmor]: http://repo.or.cz/minetest_hbarmor.git/tree/ceb313e -[ver.hbsprint]: https://github.com/tacotexmex/hbsprint/tree/c473d57 +[ver.hbsprint]: https://github.com/tacotexmex/hbsprint/tree/7fd2beb [ver.helicopter]: https://github.com/SokolovPavel/helicopter/tree/10f1433 [ver.helicopter_pm]: https://github.com/petermaloney/helicopter/tree/abdf5fa [ver.hill_nodebox]: https://github.com/cornernote/minetest-hill_nodebox/tree/41bbfa2 @@ -549,7 +549,7 @@ The game includes the mods from the default [minetest_game](https://github.com/m [patch.gems_encrustable]: https://github.com/AntumMT/mod-gems_encrustable/tree/a043b9c [patch.gems_tools]: https://github.com/AntumMT/mod-gems_tools/tree/cc86c61 [patch.hbarmor]: https://github.com/AntumMT/mod-hbarmor/tree/587dae9 -[patch.hbsprint]: https://github.com/AntumMT/mod-hbsprint/tree/f406038 +[patch.hbsprint]: https://github.com/AntumMT/mod-hbsprint/tree/e2a8d88 [patch.helicopter]: https://github.com/AntumMT/mod-helicopter/tree/9ffee1f [patch.homedecor]: https://github.com/AntumMT/mp-homedecor/tree/8e0e64c [patch.hovercraft]: https://github.com/AntumMT/mod-hovercraft/tree/73a6223 diff --git a/mods/player/action/hbsprint/init.lua b/mods/player/action/hbsprint/init.lua index 5ba1494c..925ed3a3 100644 --- a/mods/player/action/hbsprint/init.lua +++ b/mods/player/action/hbsprint/init.lua @@ -20,10 +20,8 @@ if breath ~= false then breath = true end local sprint_timer_step = 0.5 local sprint_timer = 0 -local player_stamina = 20 local stamina_timer = 0 local breath_timer = 0 -local sprinting = false local hudbars = false local starve = false local monoids = false @@ -35,163 +33,164 @@ if minetest.get_modpath("player_monoids") ~= nil then monoids = true else monoid -- Functions local function start_sprint(player) - if not sprinting then - if monoids then - player_monoids.speed:add_change(player, speed, "hbsprint:speed") - player_monoids.jump:add_change(player, jump, "hbsprint:jump") - else - player:set_physics_override({speed = speed, jump = jump}) - end - end + if player:get_attribute("sprinting") == "false" then + if monoids then + player_monoids.speed:add_change(player, speed, "hbsprint:speed") + player_monoids.jump:add_change(player, jump, "hbsprint:jump") + else + player:set_physics_override({speed = speed, jump = jump}) + end + end end local function stop_sprint(player) - if sprinting then - if monoids then - player_monoids.speed:del_change(player, "hbsprint:speed") - player_monoids.jump:del_change(player, "hbsprint:jump") - else - player:set_physics_override({speed = 1, jump = 1}) - end - end + if player:get_attribute("sprinting") == "true" then + if monoids then + player_monoids.speed:del_change(player, "hbsprint:speed") + player_monoids.jump:del_change(player, "hbsprint:jump") + else + player:set_physics_override({speed = 1, jump = 1}) + end + end end local function drain_stamina(player) - player_stamina = tonumber(player:get_attribute("stamina")) - if player_stamina > 0 then - player:set_attribute("stamina", player_stamina - stamina_drain) - end - if hudbars then - if autohide and player_stamina < 20 then hb.unhide_hudbar(player, "stamina") end - hb.change_hudbar(player, "stamina", player_stamina) - end + local player_stamina = tonumber(player:get_attribute("stamina")) + if player_stamina > 0 then + player:set_attribute("stamina", player_stamina - stamina_drain) + end + if hudbars then + if autohide and player_stamina < 20 then hb.unhide_hudbar(player, "stamina") end + hb.change_hudbar(player, "stamina", player_stamina) + end end local function replenish_stamina(player) - player_stamina = tonumber(player:get_attribute("stamina")) - if player_stamina < 20 then - player:set_attribute("stamina", player_stamina + stamina_drain) - end - if hudbars then - hb.change_hudbar(player, "stamina", player_stamina) - if autohide and player_stamina == 20 then hb.hide_hudbar(player, "stamina") end - end + local player_stamina = tonumber(player:get_attribute("stamina")) + if player_stamina < 20 then + player:set_attribute("stamina", player_stamina + stamina_drain) + end + if hudbars then + hb.change_hudbar(player, "stamina", player_stamina) + if autohide and player_stamina == 20 then hb.hide_hudbar(player, "stamina") end + end end local function drain_hunger(player, hunger, name) - if hunger > 0 then - hbhunger.hunger[name] = hunger - starve_drain - hbhunger.set_hunger_raw(player) - end + if hunger > 0 then + hbhunger.hunger[name] = hunger - starve_drain + hbhunger.set_hunger_raw(player) + end end local function drain_breath(player) - local player_breath = player:get_breath() - if player_breath < 11 then - player_breath = player_breath - breath_drain - if player_breath > 0 then - player:set_breath(player_breath) - end - end + local player_breath = player:get_breath() + if player_breath < 11 then + player_breath = player_breath - breath_drain + if player_breath > 0 then + player:set_breath(player_breath) + end + end end local function create_particles(player, name, pos, ground) - if ground and ground.name ~= "air" and ground.name ~= "ignore" then - local def = minetest.registered_nodes[ground.name] - local tile = def.tiles[1] or def.inventory_image or "" - if type(tile) == "string" then - for i = 1, particles do - minetest.add_particle({ - pos = {x = pos.x + math.random(-1,1) * math.random() / 2, y = pos.y + 0.1, z = pos.z + math.random(-1,1) * math.random() / 2}, - velocity = {x = 0, y = 5, z = 0}, - acceleration = {x = 0, y = -13, z = 0}, - expirationtime = math.random(), - size = math.random() + 0.5, - vertical = false, - texture = tile, - }) - end - end - end + if ground and ground.name ~= "air" and ground.name ~= "ignore" then + local def = minetest.registered_nodes[ground.name] + local tile = def.tiles[1] or def.inventory_image or "" + if type(tile) == "string" then + for i = 1, particles do + minetest.add_particle({ + pos = {x = pos.x + math.random(-1,1) * math.random() / 2, y = pos.y + 0.1, z = pos.z + math.random(-1,1) * math.random() / 2}, + velocity = {x = 0, y = 5, z = 0}, + acceleration = {x = 0, y = -13, z = 0}, + expirationtime = math.random(), + size = math.random() + 0.5, + vertical = false, + texture = tile, + }) + end + end + end end -- Registrations if minetest.get_modpath("hudbars") ~= nil and stamina then - hb.register_hudbar("stamina", - 0xFFFFFF, - "Stamina", - { bar = "sprint_stamina_bar.png", icon = "sprint_stamina_icon.png", bgicon = "sprint_stamina_bgicon.png" }, - player_stamina, player_stamina, - false, "%s: %.1f/%.1f") - hudbars = true - if autohide then - hb.hide_hudbar(nil, "stamina") - end + hb.register_hudbar("stamina", + 0xFFFFFF, + "Stamina", + { bar = "sprint_stamina_bar.png", icon = "sprint_stamina_icon.png", bgicon = "sprint_stamina_bgicon.png" }, + 20, 20, + false, "%s: %.1f/%.1f") + hudbars = true + if autohide then + hb.hide_hudbar(player, "stamina") + end end minetest.register_on_joinplayer(function(player) - if hudbars and stamina then hb.init_hudbar(player, "stamina") end - player:set_attribute("stamina", 20) + if hudbars and stamina then hb.init_hudbar(player, "stamina") end + player:set_attribute("stamina", 20) end) minetest.register_globalstep(function(dtime) - sprint_timer = sprint_timer + dtime - stamina_timer = stamina_timer + dtime - breath_timer = breath_timer + dtime - if sprint_timer >= sprint_timer_step then - for _,player in ipairs(minetest.get_connected_players()) do - local ctrl = player:get_player_control() - local key_press = false - if key == "Use" and dir then - key_press = ctrl.aux1 and ctrl.up and not ctrl.left and not ctrl.right - elseif key == "Use" and not dir then - key_press = ctrl.aux1 - end + sprint_timer = sprint_timer + dtime + stamina_timer = stamina_timer + dtime + breath_timer = breath_timer + dtime + if sprint_timer >= sprint_timer_step then + for _,player in ipairs(minetest.get_connected_players()) do + local ctrl = player:get_player_control() + local key_press = false + if key == "Use" and dir then + key_press = ctrl.aux1 and ctrl.up and not ctrl.left and not ctrl.right + elseif key == "Use" and not dir then + key_press = ctrl.aux1 + end - -- if key == "W" and dir then - -- key_press = ctrl.aux1 and ctrl.up or key_press and ctrl.up - -- elseif key == "W" then - -- key_press = ctrl.aux1 or key_press and key_tap - -- end + -- if key == "W" and dir then + -- key_press = ctrl.aux1 and ctrl.up or key_press and ctrl.up + -- elseif key == "W" then + -- key_press = ctrl.aux1 or key_press and key_tap + -- end - if key_press then - local name = player:get_player_name() - local hunger = 30 - local pos = player:get_pos() - local ground = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z}) - local walkable = false - if starve then - hunger = tonumber(hbhunger.hunger[name]) - end - if ground ~= nil then - walkable = minetest.registered_nodes[ground.name].walkable - end - if player_stamina > 0 and hunger > 9 and walkable then - start_sprint(player) - sprinting = true - if stamina then drain_stamina(player) end - if starve then drain_hunger(player, hunger, name) end - if breath then - if breath_timer >= 2 then - drain_breath(player) - breath_timer = 0 - end - end - if particles then create_particles(player, name, pos, ground) end - else - stop_sprint(player) - sprinting = false - end - else - stop_sprint(player) - sprinting = false - if stamina_timer >= replenish then - if stamina then replenish_stamina(player) end - stamina_timer = 0 - end - end - end - sprint_timer = 0 - end + if key_press then + local name = player:get_player_name() + local hunger = 30 + local pos = player:get_pos() + local ground = minetest.get_node_or_nil({x=pos.x, y=pos.y-1, z=pos.z}) + local walkable = false + local player_stamina = tonumber(player:get_attribute("stamina")) + if starve then + hunger = tonumber(hbhunger.hunger[name]) + end + if ground ~= nil then + walkable = minetest.registered_nodes[ground.name].walkable + end + if player_stamina > 0 and hunger > 9 and walkable then + start_sprint(player) + player:set_attribute("sprinting", "true") + if stamina then drain_stamina(player) end + if starve then drain_hunger(player, hunger, name) end + if breath then + if breath_timer >= 2 then + drain_breath(player) + breath_timer = 0 + end + end + if particles then create_particles(player, name, pos, ground) end + else + stop_sprint(player) + player:set_attribute("sprinting", "false") + end + else + stop_sprint(player) + player:set_attribute("sprinting", "false") + if stamina_timer >= replenish then + if stamina then replenish_stamina(player) end + stamina_timer = 0 + end + end + end + sprint_timer = 0 + end end)