From c948715d248f6f37e948f038587f63a287a2c0ff Mon Sep 17 00:00:00 2001 From: Brandon Date: Sat, 17 May 2014 22:09:05 -0500 Subject: [PATCH] use mobs process_weapon function in on_punchplayer callback, adjust energy formula, add physics.freeze_player and physics.unfreeze_player, freeze player on sit and sleep --- README.txt | 4 +++- mods/default/player.lua | 27 ++++++++------------------- mods/hud/stamina.lua | 9 ++++++--- mods/mobs | 2 +- mods/physics/init.lua | 18 ++++++++++++++++-- 5 files changed, 34 insertions(+), 26 deletions(-) diff --git a/README.txt b/README.txt index 6becde9..c209c46 100644 --- a/README.txt +++ b/README.txt @@ -27,7 +27,7 @@ You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -License of media (textures and sounds) +License of media (models, textures and sounds) -------------------------------------- Copyright (C) 2010-2012 celeron55, Perttu Ahola See README.txt in each mod directory for information about other authors. @@ -38,3 +38,5 @@ http://creativecommons.org/licenses/by-sa/3.0/ License of menu/header.png Copyright (C) 2013 BlockMen CC BY-3.0 +License of Spider model +Copyright (C) 2013 AspireMint CC BY-SA diff --git a/mods/default/player.lua b/mods/default/player.lua index 095a410..5144dc6 100644 --- a/mods/default/player.lua +++ b/mods/default/player.lua @@ -165,7 +165,7 @@ minetest.register_globalstep(function(dtime) local animation_speed_mod = model.animation_speed or 30 -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then + if ( controls.up or controls.down or controls.left or controls.right ) and physics.player_frozen[name] ~= true then walking = true end @@ -195,7 +195,7 @@ minetest.register_globalstep(function(dtime) player_set_animation(player, "walk", animation_speed_mod) end elseif controls.LMB then - if player_anim[name] == "lay" or player_anim[name] == "sit" then + if player_anim[name] == "lay" or player_anim[name] == "sit" and physics.player_frozen[name] ~= true then player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0}) if player_sleephuds[name] ~= nil then player:hud_remove(player_sleephuds[name]) @@ -214,23 +214,7 @@ end) if minetest.register_on_punchplayer ~= nil then minetest.register_on_punchplayer( function(player, hitter, time_from_last_punch, tool_capabilities, dir) - local weapon = hitter:get_wielded_item() - if tool_capabilities ~= nil then - local wear = ( tool_capabilities.full_punch_interval / 75 ) * 65535 - weapon:add_wear(wear) - hitter:set_wielded_item(weapon) - end - - if weapon:get_definition().sounds ~= nil then - local s = math.random(0,#weapon:get_definition().sounds) - minetest.sound_play(weapon:get_definition().sounds[s], { - object=hitter, - }) - else - minetest.sound_play("default_sword_wood", { - object = hitter, - }) - end + process_weapon(player,time_from_last_punch,tool_capabilities) blood_particles(player:getpos(),0.5,27,"mobs_blood.png") if player_anim[name] == "lay" or player_anim[name] == "sit" then player:set_eye_offset({x=0,y=0,z=0},{x=0,y=0,z=0}) @@ -238,6 +222,11 @@ if minetest.register_on_punchplayer ~= nil then player:hud_remove(player_sleephuds[name]) player_sleephuds[name] = nil end + physics.unfreeze_player(name) + end + if math.random(0,3) == 3 then + local snum = math.random(1,4) + minetest.sound_play("default_hurt"..tostring(snum),{object = player}) end end) end diff --git a/mods/hud/stamina.lua b/mods/hud/stamina.lua index 1e5ceda..f19cd8b 100644 --- a/mods/hud/stamina.lua +++ b/mods/hud/stamina.lua @@ -15,7 +15,7 @@ function hud.update_stamina(p,name) end local anim = default.player_get_animation(p) - local adj = 0.25 + local adj = 0.25 + ( 0.2 * ( skills.player_levels[name].level / 5 ) ) if anim.animation == "lay" then adj = adj + 0.75 if math.random(0,4) == 1 then @@ -31,11 +31,11 @@ function hud.update_stamina(p,name) -- adjust their stamina local vdiff = pos.y - player_lastpos[name].y if vdiff > 0 then - adj = adj - ( vdiff * 0.06 ) + adj = adj - ( vdiff * 0.05 ) end local hdiff = math.sqrt(math.pow(pos.x-player_lastpos[name].x, 2) + math.pow(pos.z-player_lastpos[name].z, 2)) - adj = adj - ( hdiff * 0.03 ) + adj = adj - ( hdiff * 0.02 ) player_stamina[name] = player_stamina[name] + adj if player_stamina[name] < 0 then @@ -95,6 +95,7 @@ minetest.register_chatcommand("sit",{ player:hud_remove(player_sleephuds[name]) player_sleephuds[name] = nil end + physics.freeze_player(name) end, }) @@ -112,6 +113,7 @@ minetest.register_chatcommand("sleep",{ alignment = {x=-1,y=-1}, offset = {x=0,y=0}, }) + physics.freeze_player(name) end, }) @@ -124,6 +126,7 @@ minetest.register_chatcommand("stand",{ player:hud_remove(player_sleephuds[name]) player_sleephuds[name] = nil end + physics.unfreeze_player(name) end, }) diff --git a/mods/mobs b/mods/mobs index 440cdbf..019f237 160000 --- a/mods/mobs +++ b/mods/mobs @@ -1 +1 @@ -Subproject commit 440cdbf593992a765fc06d3a0caaba4b20d26db8 +Subproject commit 019f2379273984e04c5e91a846f2d147eb9bb33b diff --git a/mods/physics/init.lua b/mods/physics/init.lua index aa9cda3..6e38503 100644 --- a/mods/physics/init.lua +++ b/mods/physics/init.lua @@ -6,7 +6,7 @@ physics = {} local physics_file = minetest.get_worldpath() .. "/physics" physics.player_physics = default.deserialize_from_file(physics_file) - +physics.player_frozen = {} function physics.adjust_physics(player,_physics) local name = player:get_player_name() for p,v in pairs(_physics) do @@ -17,7 +17,21 @@ end function physics.apply(player) local name = player:get_player_name() - player:set_physics_override(physics.player_physics[name]) + if physics.player_frozen[name] ~= true then + player:set_physics_override(physics.player_physics[name]) + end +end + +function physics.freeze_player(name) + local player = minetest.get_player_by_name(name) + physics.player_frozen[name] = true + player:set_physics_override({speed=0,jump=0}) +end + +function physics.unfreeze_player(name) + local player = minetest.get_player_by_name(name) + physics.player_frozen[name] = false + physics.apply(minetest.get_player_by_name(name)) end function physics.remove_item_physics(player,item)