Cleanup more code
This commit is contained in:
parent
8161cc7cab
commit
eaef187669
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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")
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user