From eaef1876699f31a17fa554095cda9427cd7b6b58 Mon Sep 17 00:00:00 2001 From: KaadmY Date: Mon, 15 May 2017 14:41:46 -0700 Subject: [PATCH] Cleanup more code --- mods/bed/init.lua | 8 +- mods/default/README.txt | 8 +- mods/default/model.lua | 156 ++++++++++++++++++++++--------------- mods/default/player.lua | 42 +++++++--- mods/hunger/init.lua | 6 +- mods/player_skins/init.lua | 117 +++++++++++++++++++--------- 6 files changed, 219 insertions(+), 118 deletions(-) diff --git a/mods/bed/init.lua b/mods/bed/init.lua index 8f4be73..3ba5ed5 100644 --- a/mods/bed/init.lua +++ b/mods/bed/init.lua @@ -55,9 +55,9 @@ local function put_player_in_bed(player) {x=162, y=166}, {x=162, y=166}, {x=162, y=168}, - 30) + default.player_animation_speed) - default.player_set_animation(player, "lay", 30) + default.player_set_animation(player, "lay", player_animation_speed) default.player_attached[name] = true @@ -80,9 +80,9 @@ local function take_player_from_bed(player) {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, - 30) + default.player_animation_speed) - default.player_set_animation(player, "stand", 30) + default.player_set_animation(player, "stand", default.player_animation_speed) default.player_attached[name] = false end diff --git a/mods/default/README.txt b/mods/default/README.txt index 642a353..6e5d396 100644 --- a/mods/default/README.txt +++ b/mods/default/README.txt @@ -4,7 +4,13 @@ By Kaadmy, for Pixture Adds the required stuff to run -WARNING: This mod will not be compatible with existing mods, tons of stuff has been renamed! +WARNING: This mod will not be compatible with existing mods, tons of stuff has +been renamed! + +Modified from minetest_game: + +- model.lua +- functions.lua Sound license: CC0 Texture license: CC BY-SA 4.0 diff --git a/mods/default/model.lua b/mods/default/model.lua index 5445e58..eb7969f 100644 --- a/mods/default/model.lua +++ b/mods/default/model.lua @@ -1,18 +1,22 @@ + -- Copied from minetest_game and changed a bit -- Minetest 0.4 mod: player -- See README.txt for licensing and other information. -- Variable for animation speed; 30-35 is good + local player_animation_speed = 33 -- Player animation blending -- Note: This is currently broken due to a bug in Irrlicht, leave at 0 + local animation_blend = 0 default.registered_player_models = {} -- Local for speed. + local models = default.registered_player_models function default.player_register_model(name, def) @@ -20,6 +24,7 @@ function default.player_register_model(name, def) end -- Default player appearance + default.player_register_model( "character.b3d", { @@ -35,13 +40,15 @@ default.player_register_model( -- Extra animations (not currently used by the game). sit = { x = 81, y = 160}, }, - }) +}) -- Player stats and animations + local player_model = {} local player_textures = {} local player_anim = {} local player_sneak = {} + default.player_attached = {} function default.player_get_animation(player) @@ -54,6 +61,7 @@ function default.player_get_animation(player) end -- Called when a player's appearance needs to be updated + function default.player_set_model(player, model_name) local name = player:get_player_name() local model = models[model_name] @@ -68,7 +76,8 @@ function default.player_set_model(player, model_name) textures = player_textures[name] or model.textures, visual = "mesh", visual_size = model.visual_size or {x = 1, y = 1}, - }) + }) + default.player_set_animation(player, "stand") player_model[name] = model_name @@ -97,84 +106,103 @@ function default.player_set_animation(player, anim_name, speed) end local model = player_model[name] and models[player_model[name]] + if not (model and model.animations[anim_name]) then return end local anim = model.animations[anim_name] + player_anim[name] = anim_name + player:set_animation(anim, speed or model.animation_speed, animation_blend) end --- Update appearance when the player joins -minetest.register_on_joinplayer( - function(player) - default.player_attached[player:get_player_name()] = false - default.player_set_model(player, "character.b3d") - player:set_local_animation({x = 0, y = 79}, {x = 168, y = 187}, {x = 189, y = 198}, {x = 200, y = 219}, player_animation_speed) - end) - -minetest.register_on_leaveplayer( - function(player) - local name = player:get_player_name() - player_model[name] = nil - player_anim[name] = nil - player_textures[name] = nil - end) - -- Localize for better performance. + local player_set_animation = default.player_set_animation local player_attached = default.player_attached --- Check each player and apply animations -minetest.register_globalstep( - function(dtime) - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local model_name = player_model[name] - local model = model_name and models[model_name] - local controls = player:get_player_control() +-- Update appearance when the player joins - if player_sneak[name] ~= controls.sneak then - if controls.sneak then - player:set_nametag_attributes({color = {a = 30, r = 255, g = 255, b = 255}}) - else - player:set_nametag_attributes({color = {a = 255, r = 255, g = 255, b = 255}}) - end - end +local function on_joinplayer(player) + default.player_attached[player:get_player_name()] = false + default.player_set_model(player, "character.b3d") - if model and not player_attached[name] then - local walking = false - local animation_speed_mod = model.animation_speed or player_animation_speed + player:set_local_animation( + {x = 0, y = 79}, + {x = 168, y = 187}, + {x = 189, y = 198}, + {x = 200, y = 219}, + default.player_animation_speed) +end - -- Determine if the player is walking - if controls.up or controls.down or controls.left or controls.right then - walking = true - end +local function on_leaveplayer(player) + local name = player:get_player_name() - -- Determine if the player is sneaking, and reduce animation speed if so - if controls.sneak then - animation_speed_mod = animation_speed_mod * 0.7 - end + player_model[name] = nil + player_anim[name] = nil + player_textures[name] = nil +end - -- Apply animations based on what the player is doing - if player:get_hp() == 0 then -- dead - player_set_animation(player, "lay") - elseif walking then -- walking - if player_sneak[name] ~= controls.sneak then - player_anim[name] = nil - player_sneak[name] = controls.sneak - end - if controls.LMB then -- walking and mining - player_set_animation(player, "walk_mine", animation_speed_mod) - else -- walking - player_set_animation(player, "walk", animation_speed_mod) - end - elseif controls.LMB then -- mining - player_set_animation(player, "mine") - else -- standing - player_set_animation(player, "stand", animation_speed_mod) - end - end +local function on_globalstep(dtime) + for _, player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + local model_name = player_model[name] + local model = model_name and models[model_name] + local controls = player:get_player_control() + + if player_sneak[name] ~= controls.sneak then + if controls.sneak then + player:set_nametag_attributes( + { + color = {a = 30, r = 255, g = 255, b = 255} + }) + else + player:set_nametag_attributes( + { + color = {a = 255, r = 255, g = 255, b = 255} + }) + end end - end) + + if model and not player_attached[name] then + local walking = false + local animation_speed_mod = model.animation_speed or player_animation_speed + + -- Determine if the player is walking + if controls.up or controls.down or controls.left or controls.right then + walking = true + end + + -- Determine if the player is sneaking, and reduce animation speed if so + if controls.sneak then + animation_speed_mod = animation_speed_mod * 0.7 + end + + -- Apply animations based on what the player is doing + if player:get_hp() == 0 then -- dead + player_set_animation(player, "lay") + elseif walking then -- walking + if player_sneak[name] ~= controls.sneak then + player_anim[name] = nil + player_sneak[name] = controls.sneak + end + if controls.LMB then -- walking and mining + player_set_animation(player, "walk_mine", animation_speed_mod) + else -- walking + player_set_animation(player, "walk", animation_speed_mod) + end + elseif controls.LMB then -- mining + player_set_animation(player, "mine") + else -- standing + player_set_animation(player, "stand", animation_speed_mod) + end + end + end +end + +minetest.register_on_joinplayer(on_joinplayer) +minetest.register_on_leaveplayer(on_leaveplayer) + +minetest.register_globalstep(on_globalstep) diff --git a/mods/default/player.lua b/mods/default/player.lua index 49d4719..0364eb3 100644 --- a/mods/default/player.lua +++ b/mods/default/player.lua @@ -16,7 +16,13 @@ local function step(dtime) if player_pos.x < -30000 or player_pos.x > 30000 or player_pos.y < -30000 or player_pos.y > 30000 or player_pos.z < -30000 or player_pos.z > 30000 then - minetest.chat_send_player(name, minetest.colorize("#f00", "Don't go past 30000m in any direction!")) + minetest.chat_send_player( + name, + minetest.colorize( + "#f00", + "Don't go past 30000m in any direction!" + )) + player:setpos(player_lastpos[name]) end @@ -30,6 +36,7 @@ local function step(dtime) max_hear_distance = 4, }) end + player_health[name] = player:get_hp() head_pos.x=math.floor(head_pos.x+0.5) @@ -49,8 +56,16 @@ local function step(dtime) { amount = 2, time = 0.1, - minpos = {x = head_pos.x - 0.2, y = head_pos.y - 0.3, z = head_pos.z - 0.3}, - maxpos = {x = head_pos.x + 0.3, y = head_pos.y + 0.3, z = head_pos.z + 0.3}, + minpos = { + x = head_pos.x - 0.2, + y = head_pos.y - 0.3, + z = head_pos.z - 0.3 + }, + maxpos = { + x = head_pos.x + 0.3, + y = head_pos.y + 0.3, + z = head_pos.z + 0.3 + }, minvel = {x = -0.5, y = 0, z = -0.5}, maxvel = {x = 0.5, y = 0, z = 0.5}, minacc = {x = -0.5, y = 4, z = -0.5}, @@ -62,10 +77,12 @@ local function step(dtime) texture = "bubble.png" }) - minetest.after(0.15, function() minetest.delete_particlespawner(particlespawners[name]) end) + minetest.after(0.15, function() + minetest.delete_particlespawner(particlespawners[name]) + end) end - if minetest.get_item_group(minetest.get_node(player_pos).name, 'water') > 0 then + if minetest.get_item_group(minetest.get_node(player_pos).name, "water") > 0 then if player_lastsound[name] > 3.3 then player_soundspec[name]=minetest.sound_play( "default_water", @@ -112,15 +129,19 @@ local function on_joinplayer(player) player:hud_set_flags({minimap = false}) -- Welcome - local function welcome() - minetest.chat_send_player(player:get_player_name(), minetest.colorize("#ff0", "Welcome to Pixture! Type /help for a list of commands.")) - end - minetest.after(1.0, welcome) + minetest.after(1.0, function() + minetest.chat_send_player( + player:get_player_name(), + minetest.colorize( + "#ff0", + "Welcome to Pixture! Type /help for a list of commands." + )) + end) end local function on_leaveplayer(player) - local name=player:get_player_name() + local name = player:get_player_name() player_health[name] = nil @@ -132,6 +153,7 @@ end minetest.register_on_joinplayer(on_joinplayer) minetest.register_on_leaveplayer(on_leaveplayer) + minetest.register_globalstep(step) default.log("player", "loaded") diff --git a/mods/hunger/init.lua b/mods/hunger/init.lua index 505065c..2d0a4c4 100644 --- a/mods/hunger/init.lua +++ b/mods/hunger/init.lua @@ -15,13 +15,13 @@ local player_step = {} local player_health_step = {} local player_bar = {} +local hunger_file = minetest.get_worldpath() .. "/hunger.dat" +local saving = false + -- Seconds per hunger update, 2.0 is slightly fast local timer_interval = tonumber(minetest.setting_get("hunger_step")) or 3.0 local timer = 0 -local hunger_file = minetest.get_worldpath() .. "/hunger.dat" -local saving = false - local function save_hunger() local f = io.open(hunger_file, "w") diff --git a/mods/player_skins/init.lua b/mods/player_skins/init.lua index 18d9622..a9a5713 100644 --- a/mods/player_skins/init.lua +++ b/mods/player_skins/init.lua @@ -5,6 +5,8 @@ player_skins = {} +-- Array of usable player skins + player_skins.skin_names = {"male", "female"} if minetest.setting_get("player_skins_names") then @@ -14,11 +16,13 @@ end player_skins.old_skins = {} player_skins.skins = {} -local update_time = 1 -local timer = 10 local skins_file = minetest.get_worldpath() .. "/player_skins.dat" +local saving = false -local function save_skins() +local timer_interval = 1 +local timer = 10 + +local function save_player_skins() local f = io.open(skins_file, "w") for name, tex in pairs(player_skins.skins) do @@ -28,7 +32,15 @@ local function save_skins() io.close(f) end -local function load_skins() +local function delayed_save() + if not saving then + saving = true + + minetest.after(40, save_player_skins) + end +end + +local function load_player_skins() local f = io.open(skins_file, "r") if f then @@ -43,7 +55,7 @@ local function load_skins() io.close(f) else - save_skins() + save_player_skins() end end @@ -65,28 +77,24 @@ function player_skins.set_skin(name, tex) if minetest.check_player_privs(name, {player_skin = true}) then if is_valid_skin(tex) then player_skins.skins[name] = tex - save_skins() + save_player_skins() else minetest.chat_send_player(name, "Invalid skin") end else - minetest.chat_send_player(name, "You do not have the privilege to change your skin.") + minetest.chat_send_player( + name, + "You do not have the privilege to change your skin." + ) end end -local function step(dtime) - timer = timer + dtime - if timer > update_time then - for _, player in pairs(minetest.get_connected_players()) do - local name = player:get_player_name() +local function on_load() + load_player_skins() +end - if player_skins.skins[name] ~= player_skins.old_skins[name] then - default.player_set_textures(player, {"player_skins_" .. player_skins.skins[name] .. ".png"}) - player_skins.old_skins[name] = player_skins.skins[name] - end - end - timer = 0 - end +local function on_shutdown() + save_player_skins() end local function on_joinplayer(player) @@ -97,9 +105,39 @@ local function on_joinplayer(player) end end -minetest.register_globalstep(step) +local function on_globalstep(dtime) + timer = timer + dtime + + if timer < timer_interval then + return + end + + timer = 0 + + for _, player in pairs(minetest.get_connected_players()) do + local name = player:get_player_name() + + if player_skins.skins[name] ~= player_skins.old_skins[name] then + default.player_set_textures( + player, { + "player_skins_" .. player_skins.skins[name] .. ".png" + }) + + player_skins.old_skins[name] = player_skins.skins[name] + + delayed_save() + end + end +end + +minetest.after(0, on_load) + +minetest.register_on_shutdown(on_shutdown) + minetest.register_on_joinplayer(on_joinplayer) +minetest.register_globalstep(on_globalstep) + local function get_chatparams() local s = "[" @@ -128,10 +166,13 @@ function player_skins.get_formspec(playername) y = y - 8 end - form = form .. default.ui.button(x, y, 2, 1, "skin_select_" .. name, player_skins.skin_names[i]) - form = form .. "image[" .. (x + 2.25) .. "," .. y.. ";1,1;player_skins_icon_" .. name .. ".png]" + form = form .. default.ui.button(x, y, 2, 1, "skin_select_" + .. name, player_skins.skin_names[i]) + form = form .. "image[" .. (x + 2.25) .. "," .. y.. ";1,1;player_skins_icon_" + .. name .. ".png]" if player_skins.skins[playername] == name then - form = form .. "image[" .. (x + 3.25) .. "," .. (y + 0.25).. ";0.5,0.5;ui_checkmark.png]" + form = form .. "image[" .. (x + 3.25) .. "," .. (y + 0.25) + .. ";0.5,0.5;ui_checkmark.png]" end end @@ -148,10 +189,11 @@ minetest.register_on_player_receive_fields( if skinname ~= nil then player_skins.set_skin(name, skinname) - minetest.show_formspec(name, "player_skins:player_skins", player_skins.get_formspec(name)) + minetest.show_formspec(name, "player_skins:player_skins", + player_skins.get_formspec(name)) end end - end) +end) minetest.register_privilege("player_skin", "Can change player skin") minetest.register_chatcommand( @@ -161,16 +203,19 @@ minetest.register_chatcommand( description = "Set your player skin", privs = {player_skin = true}, func = function(name, param) - if is_valid_skin(param) then - player_skins.set_skin(name, param) - elseif param == "" then - minetest.chat_send_player(name, "Current player skin: " .. player_skins.skins[name]) - else - minetest.chat_send_player(name, "Bad param for /player_skin; type /help player_skin") - end - end - }) - -minetest.after(1.0, load_skins) + if is_valid_skin(param) then + player_skins.set_skin(name, param) + elseif param == "" then + minetest.chat_send_player( + name, + "Current player skin: " .. player_skins.skins[name]) + else + minetest.chat_send_player( + name, + "Bad param for /player_skin; type /help player_skin" + ) + end + end +}) default.log("mod:player_skins", "loaded")