Autogenerate skin previews and other @GreenDimond changes
@ -16,11 +16,14 @@ function skins.get_skin_info_formspec(skin)
|
|||||||
local m_name = skin:get_meta_string("name")
|
local m_name = skin:get_meta_string("name")
|
||||||
local m_author = skin:get_meta_string("author")
|
local m_author = skin:get_meta_string("author")
|
||||||
local m_license = skin:get_meta_string("license")
|
local m_license = skin:get_meta_string("license")
|
||||||
|
local m_format = skin:get_meta("format")
|
||||||
-- overview page
|
-- overview page
|
||||||
local formspec = "image[0,.75;1,2;"..skin:get_preview().."]"
|
local raw_size = m_format == "1.8" and "2,2" or "2,1"
|
||||||
|
|
||||||
|
local formspec = "image[0.8,.6;1,2;"..minetest.formspec_escape(skin:get_preview()).."]"
|
||||||
if texture then
|
if texture then
|
||||||
formspec = formspec.."label[6,.5;"..S("Raw texture")..":]"
|
formspec = formspec.."label[6,.5;"..S("Raw texture")..":]"
|
||||||
.."image[6,1;2,1;"..skin:get_texture().."]"
|
.."image[6,1;"..raw_size..";"..texture.."]"
|
||||||
end
|
end
|
||||||
if m_name ~= "" then
|
if m_name ~= "" then
|
||||||
formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]"
|
formspec = formspec.."label[2,.5;"..S("Name")..": "..minetest.formspec_escape(m_name).."]"
|
||||||
@ -63,7 +66,7 @@ function skins.get_skin_selection_formspec(player, context, y_delta)
|
|||||||
y = y_delta
|
y = y_delta
|
||||||
end
|
end
|
||||||
formspec = formspec.."image_button["..x..","..y..";1,2;"..
|
formspec = formspec.."image_button["..x..","..y..";1,2;"..
|
||||||
skin:get_preview()..";skins_set$"..i..";]"..
|
minetest.formspec_escape(skin:get_preview())..";skins_set$"..i..";]"..
|
||||||
"tooltip[skins_set$"..i..";"..minetest.formspec_escape(skin:get_meta_string("name")).."]"
|
"tooltip[skins_set$"..i..";"..minetest.formspec_escape(skin:get_meta_string("name")).."]"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
10
init.lua
@ -82,3 +82,13 @@ player_api.register_model("skinsdb_3d_armor_character_5.b3d", {
|
|||||||
sit = {x=81, y=160},
|
sit = {x=81, y=160},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
-- Register default character.png if not part of this mod
|
||||||
|
local default_skin_obj = skins.get(skins.default)
|
||||||
|
if not default_skin_obj then
|
||||||
|
default_skin_obj = skins.new(skins.default)
|
||||||
|
default_skin_obj:set_texture("character.png")
|
||||||
|
default_skin_obj:set_meta("format", '1.0')
|
||||||
|
default_skin_obj:set_meta("_sort_id", 0)
|
||||||
|
default_skin_obj:set_meta("name", "Sam")
|
||||||
|
end
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
Sam 0
|
|
||||||
Jordach
|
|
||||||
CC BY-SA 3.0
|
|
@ -56,7 +56,58 @@ function skin_class:set_preview(value)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function skin_class:get_preview()
|
function skin_class:get_preview()
|
||||||
return self._preview or "player.png"
|
if self._preview then
|
||||||
|
return self._preview
|
||||||
|
end
|
||||||
|
|
||||||
|
local player_skin = "("..self:get_texture()..")"
|
||||||
|
local skin = ""
|
||||||
|
|
||||||
|
-- Consistent on both sizes:
|
||||||
|
--Chest
|
||||||
|
skin = skin .. "([combine:16x32:-16,-12=" .. player_skin .. "^[mask:skindb_mask_chest.png)^"
|
||||||
|
--Head
|
||||||
|
skin = skin .. "([combine:16x32:-4,-8=" .. player_skin .. "^[mask:skindb_mask_head.png)^"
|
||||||
|
--Hat
|
||||||
|
skin = skin .. "([combine:16x32:-36,-8=" .. player_skin .. "^[mask:skindb_mask_head.png)^"
|
||||||
|
--Right Arm
|
||||||
|
skin = skin .. "([combine:16x32:-44,-12=" .. player_skin .. "^[mask:skindb_mask_rarm.png)^"
|
||||||
|
--Right Leg
|
||||||
|
skin = skin .. "([combine:16x32:0,0=" .. player_skin .. "^[mask:skindb_mask_rleg.png)^"
|
||||||
|
|
||||||
|
-- 64x skins have non-mirrored arms and legs
|
||||||
|
local left_arm
|
||||||
|
local left_leg
|
||||||
|
|
||||||
|
if self:get_meta("format") == "1.8" then
|
||||||
|
left_arm = "([combine:16x32:-24,-44=" .. player_skin .. "^[mask:(skindb_mask_rarm.png^[transformFX))^"
|
||||||
|
left_leg = "([combine:16x32:-12,-32=" .. player_skin .. "^[mask:(skindb_mask_rleg.png^[transformFX))^"
|
||||||
|
else
|
||||||
|
left_arm = "([combine:16x32:-44,-12=" .. player_skin .. "^[mask:skindb_mask_rarm.png^[transformFX)^"
|
||||||
|
left_leg = "([combine:16x32:0,0=" .. player_skin .. "^[mask:skindb_mask_rleg.png^[transformFX)^"
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Left Arm
|
||||||
|
skin = skin .. left_arm
|
||||||
|
--Left Leg
|
||||||
|
skin = skin .. left_leg
|
||||||
|
|
||||||
|
-- Add overlays for 64x skins. these wont appear if skin is 32x because it will be cropped out
|
||||||
|
--Chest Overlay
|
||||||
|
skin = skin .. "([combine:16x32:-16,-28=" .. player_skin .. "^[mask:skindb_mask_chest.png)^"
|
||||||
|
--Right Arm Overlay
|
||||||
|
skin = skin .. "([combine:16x32:-44,-28=" .. player_skin .. "^[mask:skindb_mask_rarm.png)^"
|
||||||
|
--Right Leg Overlay
|
||||||
|
skin = skin .. "([combine:16x32:0,-16=" .. player_skin .. "^[mask:skindb_mask_rleg.png)^"
|
||||||
|
--Left Arm Overlay
|
||||||
|
skin = skin .. "([combine:16x32:-40,-44=" .. player_skin .. "^[mask:(skindb_mask_rarm.png^[transformFX))^"
|
||||||
|
--Left Leg Overlay
|
||||||
|
skin = skin .. "([combine:16x32:4,-32=" .. player_skin .. "^[mask:(skindb_mask_rleg.png^[transformFX))"
|
||||||
|
|
||||||
|
-- Full Preview
|
||||||
|
skin = "(((" .. skin .. ")^[resize:64x128)^[mask:skindb_transform.png)"
|
||||||
|
|
||||||
|
return skin
|
||||||
end
|
end
|
||||||
|
|
||||||
function skin_class:apply_skin_to_player(player)
|
function skin_class:apply_skin_to_player(player)
|
||||||
@ -133,6 +184,6 @@ end
|
|||||||
|
|
||||||
function skin_class:is_applicable_for_player(playername)
|
function skin_class:is_applicable_for_player(playername)
|
||||||
local assigned_player = self:get_meta("playername")
|
local assigned_player = self:get_meta("playername")
|
||||||
return assigned_player == nil or assigned_player == true or
|
return minetest.check_player_privs(playername, {server=true}) or assigned_player == nil or assigned_player == true or
|
||||||
(assigned_player:lower() == playername:lower())
|
(assigned_player:lower() == playername:lower())
|
||||||
end
|
end
|
||||||
|
@ -1,9 +1,12 @@
|
|||||||
|
|
||||||
local skins_dir_list = minetest.get_dir_list(skins.modpath.."/textures")
|
local skins_dir_list = minetest.get_dir_list(skins.modpath.."/textures")
|
||||||
|
|
||||||
for _, fn in pairs(skins_dir_list) do
|
for _, fn in pairs(skins_dir_list) do
|
||||||
local name, sort_id, assignment, is_preview, playername
|
local name, sort_id, assignment, is_preview, playername
|
||||||
local nameparts = string.gsub(fn, "[.]", "_"):split("_")
|
local nameparts = {
|
||||||
|
fn:match("^%w+"),
|
||||||
|
fn:gsub("^%w+_", ""):gsub("%.%w+$", ""),
|
||||||
|
fn:match("%w+$"),
|
||||||
|
}
|
||||||
|
|
||||||
-- check allowed prefix and file extension
|
-- check allowed prefix and file extension
|
||||||
if (nameparts[1] == 'player' or nameparts[1] == 'character') and
|
if (nameparts[1] == 'player' or nameparts[1] == 'character') and
|
||||||
|
Before Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 604 B |
Before Width: | Height: | Size: 673 B |
@ -7,6 +7,7 @@ One or multiple private skins for player "nick":
|
|||||||
player_[nick].png or
|
player_[nick].png or
|
||||||
player_[nick]_[number-or-name].png
|
player_[nick]_[number-or-name].png
|
||||||
|
|
||||||
Preview files for public and private skins:
|
Preview files for public and private skins.
|
||||||
|
Optional, overrides the generated preview
|
||||||
character_*_preview.png or
|
character_*_preview.png or
|
||||||
player_*_*_preview.png
|
player_*_*_preview.png
|
||||||
|
BIN
textures/skindb_mask_chest.png
Normal file
After Width: | Height: | Size: 114 B |
BIN
textures/skindb_mask_head.png
Normal file
After Width: | Height: | Size: 139 B |
BIN
textures/skindb_mask_rarm.png
Normal file
After Width: | Height: | Size: 118 B |
BIN
textures/skindb_mask_rleg.png
Normal file
After Width: | Height: | Size: 118 B |
BIN
textures/skindb_transform.png
Normal file
After Width: | Height: | Size: 191 B |
Before Width: | Height: | Size: 309 B After Width: | Height: | Size: 250 B |
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 6.0 KiB |
@ -12,6 +12,7 @@ unified_inventory.register_page("skins", {
|
|||||||
unified_inventory.register_button("skins", {
|
unified_inventory.register_button("skins", {
|
||||||
type = "image",
|
type = "image",
|
||||||
image = "skins_button.png",
|
image = "skins_button.png",
|
||||||
|
tooltip = "Skins",
|
||||||
})
|
})
|
||||||
|
|
||||||
local function get_formspec(player)
|
local function get_formspec(player)
|
||||||
|