Cleanup more code

This commit is contained in:
KaadmY 2017-05-15 14:41:46 -07:00
parent 8161cc7cab
commit eaef187669
6 changed files with 219 additions and 118 deletions

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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")

View File

@ -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")

View File

@ -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")