forked from mtcontrib/3d_armor
		
	Compare commits
	
		
			70 Commits
		
	
	
		
			3ca25f7ec4
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8f775a64f0 | ||
|  | dbe0a9276a | ||
|  | dbc891a711 | ||
|  | a79d1383aa | ||
|  | 220cbc8d92 | ||
|  | 8fe014e6d3 | ||
|  | a586aeee0c | ||
|  | 082e866274 | ||
|  | c224a73df7 | ||
|  | 280165fada | ||
|  | ab1bec3be8 | ||
|  | 22955b413a | ||
|  | 1fcbf64d53 | ||
|  | fb86c02e43 | ||
|  | 20917da061 | ||
|  | 7bd77a7b80 | ||
|  | 25369e5165 | ||
|  | 7fc313f911 | ||
|  | 4bac73fc9e | ||
|  | f430395b64 | ||
|  | 467709c935 | ||
|  | e0b6112320 | ||
|  | f3e66701aa | ||
|  | 7a0c456638 | ||
|  | 9a687fbb51 | ||
|  | 1e2760a6cf | ||
|  | 1da9d94e7c | ||
|  | 3660e50312 | ||
|  | c894ba4b0c | ||
|  | aef125a0ca | ||
|  | 7d251784e7 | ||
|  | 6eb492b09c | ||
|  | dfa19cce98 | ||
|  | 1d8509e75b | ||
|  | 053c30b8b1 | ||
|  | dc7fbce09a | ||
|  | 72970b3da1 | ||
|  | 52f0e6a0ed | ||
|  | 400745dd0c | ||
|  | 68d724176e | ||
|  | 2ef66d3132 | ||
|  | e75c0bedcc | ||
|  | 92d036c5a7 | ||
|  | 7f20e5dcb7 | ||
|  | 04b45deec8 | ||
|  | bfa3a2b6d1 | ||
|  | 41301a4663 | ||
|  | eebee34fa0 | ||
|  | c7ee559a4c | ||
|  | 9444afd722 | ||
|  | e1a262ba20 | ||
|  | ac445a6cd0 | ||
|  | a9b8bc4ddd | ||
|  | b6651fd396 | ||
|  | 16e2648416 | ||
|  | 44778d7861 | ||
|  | 8dcbc42525 | ||
|  | c0f303abc1 | ||
|  | 46c599333e | ||
|  | da78601a77 | ||
|  | c790b20169 | ||
|  | a897f7e72f | ||
|  | ac7615212b | ||
|  | 38fc2cff2b | ||
|  | 1dec1f2153 | ||
|  | 0dffd62fb0 | ||
|  | a0cf12bbd0 | ||
|  | 371285a903 | ||
|  | f07f0507e2 | ||
|  | e75af55f7e | 
							
								
								
									
										5
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| .* export-ignore | ||||
| gendoc.sh export-ignore | ||||
| integration-test.sh export-ignore | ||||
| preview_gen.py export-ignore | ||||
| screenshot.xcf export-ignore | ||||
							
								
								
									
										31
									
								
								.github/workflows/reference.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								.github/workflows/reference.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| name: Build Reference | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: | ||||
|     - master | ||||
|  | ||||
| jobs: | ||||
|   build: | ||||
|     name: Build | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Checkout | ||||
|       uses: actions/checkout@v3 | ||||
|     - name: Setup Lua | ||||
|       uses: leafo/gh-actions-lua@v10.0.0 | ||||
|       with: | ||||
|         luaVersion: 5.4 | ||||
|     - name: Setup Lua Rocks | ||||
|       uses: leafo/gh-actions-luarocks@v4 | ||||
|     - name: Setup LDoc dependencies | ||||
|       run: luarocks install --only-deps https://raw.githubusercontent.com/lunarmodules/ldoc/master/rockspecs/ldoc-1.5.0-1.rockspec | ||||
|     - name: Setup LDoc | ||||
|       run: git clone --single-branch --branch=custom https://github.com/AntumDeluge/ldoc.git .ldoc/ldoc && chmod +x .ldoc/ldoc/ldoc.lua | ||||
|     - name: Generate docs | ||||
|       run: chmod +x .ldoc/gendoc.sh && ./.ldoc/gendoc.sh | ||||
|     - name: Deploy | ||||
|       uses: peaceiris/actions-gh-pages@v3 | ||||
|       with: | ||||
|         github_token: ${{ secrets.GITHUB_TOKEN }} | ||||
|         publish_dir: ./3d_armor/docs | ||||
							
								
								
									
										335
									
								
								.ldoc/config.ld
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										335
									
								
								.ldoc/config.ld
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,335 @@ | ||||
|  | ||||
| -- place this file in mod ".ldoc" directory | ||||
|  | ||||
| local print, type, string, table, tostring, tonumber, error, pairs, ipairs | ||||
| if import then | ||||
| 	print = import("print") | ||||
| 	type = import("type") | ||||
| 	string = import("string") | ||||
| 	table = import("table") | ||||
| 	tostring = import("tostring") | ||||
| 	tonumber = import("tonumber") | ||||
| 	error = import("error") | ||||
| 	pairs = import("pairs") | ||||
| 	ipairs = import("ipairs") | ||||
| end | ||||
|  | ||||
| project = "3d_armor" | ||||
| title = "3D Armor" | ||||
| format = "markdown" | ||||
| not_luadoc = true | ||||
| boilerplate = false | ||||
| wrap = false | ||||
| style = true | ||||
| favicon = "https://www.minetest.net/media/icon.svg" | ||||
|  | ||||
| file = { | ||||
| 	"3d_armor/api.lua", | ||||
| 	".ldoc/settings.luadoc", | ||||
| 	--".ldoc/armors.luadoc", | ||||
| 	".ldoc/helmets.luadoc", | ||||
| 	".ldoc/chestplates.luadoc", | ||||
| 	".ldoc/leggings.luadoc", | ||||
| 	".ldoc/boots.luadoc", | ||||
| 	--".ldoc/shields.luadoc", | ||||
| 	"shields/init.lua", | ||||
| 	".ldoc/crafting.luadoc", | ||||
| } | ||||
|  | ||||
|  | ||||
| new_type("setting", "Settings") | ||||
| new_type("armor", "Armors") | ||||
| new_type("craft", "Craft Recipes") | ||||
|  | ||||
| alias("helmet", "armor") | ||||
| alias("chestplate", "armor") | ||||
| alias("leggings", "armor") | ||||
| alias("boots", "armor") | ||||
| alias("shield", "armor") | ||||
| alias("grp", "group") | ||||
|  | ||||
| -- function declarations | ||||
| local format_text | ||||
| local format_group | ||||
|  | ||||
| custom_tags = { | ||||
| 	-- settings | ||||
| 	{ | ||||
| 		"settype", | ||||
| 		title = "Type", | ||||
| 		hidden = true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"min", | ||||
| 		title = "Minimum Value", | ||||
| 		hidden = true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"max", | ||||
| 		title = "Maximum Value", | ||||
| 		hidden = true, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"default", | ||||
| 		title = "Default Value", | ||||
| 		hidden = true, | ||||
| 	}, | ||||
| 	-- craft items/tools | ||||
| 	{ | ||||
| 		-- specify image basename only | ||||
| 		"img", | ||||
| 		title = "Inventory Image", | ||||
| 		format = function(value) | ||||
| 			return "<img src=\"../data/" .. value .. "\" style=\"width:32px; height:32px;\" />" | ||||
| 		end, | ||||
| 	}, | ||||
| 	{ | ||||
| 		-- specify full (relative or absolute) image path | ||||
| 		"image", | ||||
| 		title = "Image", | ||||
| 		format = function(value) | ||||
| 			return "<img src=\"" .. value .. "\" style=\"width:32px; height:32px;\" />" | ||||
| 		end, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"group", | ||||
| 		title = "Groups", | ||||
| 		format = function(value) | ||||
| 			return format_group(value) | ||||
| 		end, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"armorgrp", | ||||
| 		title = "Armor Groups", | ||||
| 		format = function(value) | ||||
| 			return format_group(value) | ||||
| 		end, | ||||
| 	}, | ||||
| 	{ | ||||
| 		"damagegrp", | ||||
| 		title = "Damage Groups", | ||||
| 		format = function(value) | ||||
| 			return format_group(value) | ||||
| 		end, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
|  | ||||
| if string then | ||||
| 	string.trim = function(st, delim) | ||||
| 		if not delim then | ||||
| 			delim = " " | ||||
| 		end | ||||
|  | ||||
| 		while string.find(st, delim) == 1 do | ||||
| 			st = st:sub(2) | ||||
| 		end | ||||
|  | ||||
| 		while string.sub(st, string.len(st)) == delim do | ||||
| 			st = st:sub(1, string.len(st)-1) | ||||
| 		end | ||||
|  | ||||
| 		return st | ||||
| 	end | ||||
|  | ||||
| 	string.split = function(st, delim) | ||||
| 		local list = {} | ||||
|  | ||||
| 		local idx = string.find(st, delim) | ||||
| 		while idx do | ||||
| 			table.insert(list, st:sub(1, idx-1)) | ||||
| 			st = st:sub(idx+1) | ||||
| 			idx = string.find(st, delim) | ||||
| 		end | ||||
| 		-- add remaining item | ||||
| 		table.insert(list, st) | ||||
|  | ||||
| 		return list | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if table then | ||||
| 	if not table.copy then | ||||
| 		table.copy = function(orig_table) | ||||
| 			local new_table = {} | ||||
| 			for k, v in pairs(orig_table) do | ||||
| 				new_table[k] = v | ||||
| 			end | ||||
|  | ||||
| 			return new_table | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| format_text = function(text, flags) | ||||
| 	local ret = "<" | ||||
| 	local ttype = "span" | ||||
| 	if flags.code then | ||||
| 		ttype = "code" | ||||
| 	end | ||||
|  | ||||
| 	ret = ret .. ttype .. " style=\"" | ||||
|  | ||||
| 	if flags.size then | ||||
| 		ret = ret .. "font-size:" .. flags.size .. ";" | ||||
| 	end | ||||
| 	if flags.mono then | ||||
| 		ret = ret .. "font-family:monospace;" | ||||
| 	end | ||||
| 	if flags.italic then | ||||
| 		ret = ret .. "font-style:italic;" | ||||
| 	end | ||||
| 	if flags.bold then | ||||
| 		ret = ret .. "font-weight:bold;" | ||||
| 	end | ||||
| 	if flags.color then | ||||
| 		ret = ret .. "color:" .. flags.color .. ";" | ||||
| 	end | ||||
| 	if flags.bgcolor then | ||||
| 		ret = ret .. "background-color:" .. flags.bgcolor .. ";" | ||||
| 	end | ||||
|  | ||||
| 	ret = ret .. "\">" .. text .. "</" .. ttype .. ">" | ||||
|  | ||||
| 	return ret | ||||
| end | ||||
|  | ||||
| format_group = function(text) | ||||
| 	if string then | ||||
| 		local idx, k, v = string.find(text, " ") | ||||
| 		if idx then | ||||
| 			text = format_text(string.sub(text, 1, idx-1) .. ": ", {mono=true, color="darkgreen"}) | ||||
| 				.. string.sub(text, idx) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	return text | ||||
| end | ||||
|  | ||||
|  | ||||
| local function format_setting_tag(desc, value) | ||||
| 	return "\n- <span style=\"font-size:80%;\">`" .. desc .. ":`</span> `" .. value .. "`" | ||||
| end | ||||
|  | ||||
|  | ||||
| local registered = { | ||||
| 	settings = {}, | ||||
| } | ||||
|  | ||||
| local function setting_handler(item) | ||||
| 	-- avoid parsing again | ||||
| 	if registered.settings[item.name] then | ||||
| 		return item | ||||
| 	end | ||||
|  | ||||
| 	if not ipairs or not type then | ||||
| 		return item | ||||
| 	end | ||||
|  | ||||
| 	local tags = { | ||||
| 		{"settype", "type"}, | ||||
| 		{"default"}, | ||||
| 		{"min", "minimum value"}, | ||||
| 		{"max", "maximum value"}, | ||||
| 	} | ||||
|  | ||||
| 	local def = { | ||||
| 		["settype"] = format_setting_tag("type", "string"), | ||||
| 	} | ||||
|  | ||||
| 	for _, t in ipairs(tags) do | ||||
| 		local name = t[1] | ||||
| 		local desc = t[2] | ||||
| 		if not desc then desc = name end | ||||
|  | ||||
| 		local value = item.tags[name] | ||||
| 		if type(value) == "table" then | ||||
| 			if #value > 1 then | ||||
| 				local msg = item.file.filename .. " (line " .. item.lineno | ||||
| 					.. "): multiple instances of tag \"" .. name .. "\" found" | ||||
| 				if error then | ||||
| 					error(msg) | ||||
| 				elseif print then | ||||
| 					print("WARNING: " .. msg) | ||||
| 				end | ||||
| 			end | ||||
|  | ||||
| 			if value[1] then | ||||
| 				def[name] = format_setting_tag(desc, value[1]) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	item.description = item.description .. "\n\n**Definition:**\n" .. def.settype | ||||
| 	for _, t in ipairs({def.default, def.min, def.max}) do | ||||
| 		if t then | ||||
| 			item.description = item.description .. t | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	registered.settings[item.name] = true | ||||
|  | ||||
| 	return item | ||||
| end | ||||
|  | ||||
| function custom_display_name_handler(item, default_handler) | ||||
| 	if item.type == "setting" then | ||||
| 		item = setting_handler(item) | ||||
| 	end | ||||
|  | ||||
| 	if item then | ||||
| 		return default_handler(item) | ||||
| 	end | ||||
| end | ||||
|  | ||||
|  | ||||
| local custom_see_links = { | ||||
| 	["ObjectRef"] = "https://minetest.gitlab.io/minetest/class-reference/#objectref", | ||||
| 	["PlayerMetaRef"] = "https://minetest.gitlab.io/minetest/class-reference/#playermetaref", | ||||
| 	["ItemDef"] = "https://minetest.gitlab.io/minetest/definition-tables/#item-definition", | ||||
| 	["ItemStack"] = "https://minetest.gitlab.io/minetest/class-reference/#itemstack", | ||||
| 	["groups"] = "https://minetest.gitlab.io/minetest/groups/", | ||||
| 	["entity_damage_mechanism"] = "https://minetest.gitlab.io/minetest/entity-damage-mechanism/", | ||||
| 	["vector"] = "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector", | ||||
| } | ||||
|  | ||||
| local function format_custom_see(name, section) | ||||
| 	local url = custom_see_links[name] | ||||
| 	if not url then | ||||
| 		url = "" | ||||
| 	end | ||||
|  | ||||
| 	if not name then | ||||
| 		name = "" | ||||
| 	end | ||||
|  | ||||
| 	return name, url | ||||
| end | ||||
|  | ||||
| custom_see_handler("^(ObjectRef)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(PlayerMetaRef)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(ItemDef)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(groups)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(entity_damage_mechanism)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(ItemStack)$", function(name, section) | ||||
| 	return format_custom_see(name, section) | ||||
| end) | ||||
|  | ||||
| custom_see_handler("^(vector)$", function(name, section) | ||||
| 	return name, "https://minetest.gitlab.io/minetest/representations-of-simple-things/#positionvector" | ||||
| end) | ||||
							
								
								
									
										39
									
								
								.ldoc/crafting.luadoc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								.ldoc/crafting.luadoc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
|  | ||||
| --- 3D Armor Crafting | ||||
| -- | ||||
| --  @topic crafting | ||||
|  | ||||
|  | ||||
| --- Craft recipes for helmets, chestplates, leggings, boots, & shields. | ||||
| -- | ||||
| --  @craft armor | ||||
| --  @usage | ||||
| --  Key: | ||||
| --  - m: material | ||||
| --    - wood:    group:wood | ||||
| --    - cactus:  default:cactus | ||||
| --    - steel:   default:steel_ingot | ||||
| --    - bronze:  default:bronze_ingot | ||||
| --    - diamond: default:diamond | ||||
| --    - gold:    default:gold_ingot | ||||
| --    - mithril: moreores:mithril_ingot | ||||
| --    - crystal: ethereal:crystal_ingot | ||||
| --    - nether:  nether:nether_ingot | ||||
| -- | ||||
| --  helmet:        chestplate:    leggings: | ||||
| --  ┌───┬───┬───┐  ┌───┬───┬───┐  ┌───┬───┬───┐ | ||||
| --  │ m │ m │ m │  │ m │   │ m │  │ m │ m │ m │ | ||||
| --  ├───┼───┼───┤  ├───┼───┼───┤  ├───┼───┼───┤ | ||||
| --  │ m │   │ m │  │ m │ m │ m │  │ m │   │ m │ | ||||
| --  ├───┼───┼───┤  ├───┼───┼───┤  ├───┼───┼───┤ | ||||
| --  │   │   │   │  │ m │ m │ m │  │ m │   │ m │ | ||||
| --  └───┴───┴───┘  └───┴───┴───┘  └───┴───┴───┘ | ||||
| -- | ||||
| --  boots:         shield: | ||||
| --  ┌───┬───┬───┐  ┌───┬───┬───┐ | ||||
| --  │   │   │   │  │ m │ m │ m │ | ||||
| --  ├───┼───┼───┤  ├───┼───┼───┤ | ||||
| --  │ m │   │ m │  │ m │ m │ m │ | ||||
| --  ├───┼───┼───┤  ├───┼───┼───┤ | ||||
| --  │ m │   │ m │  │   │ m │   │ | ||||
| --  └───┴───┴───┘  └───┴───┴───┘ | ||||
							
								
								
									
										88
									
								
								.ldoc/gendoc.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										88
									
								
								.ldoc/gendoc.sh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,88 @@ | ||||
| #!/usr/bin/env bash | ||||
|  | ||||
| # Place this file in mod ".ldoc" directory. | ||||
| # | ||||
| # To change output directory set the `d_export` environment variable. | ||||
| # Example: | ||||
| #   $ d_export=/custom/path ./gendoc.sh | ||||
|  | ||||
|  | ||||
| d_ldoc="$(dirname $(readlink -f $0))" | ||||
| f_config="${d_ldoc}/config.ld" | ||||
|  | ||||
| cd "${d_ldoc}/.." | ||||
|  | ||||
| d_root="$(pwd)" | ||||
| d_export="${d_export:-${d_root}/3d_armor/docs/reference}" | ||||
| d_data="${d_export}/data" | ||||
|  | ||||
| cmd_ldoc="${d_ldoc}/ldoc/ldoc.lua" | ||||
| if test -f "${cmd_ldoc}"; then | ||||
| 	if test ! -x "${cmd_ldoc}"; then | ||||
| 		chmod +x "${cmd_ldoc}" | ||||
| 	fi | ||||
| else | ||||
| 	cmd_ldoc="ldoc" | ||||
| fi | ||||
|  | ||||
|  | ||||
| # clean old files | ||||
| rm -rf "${d_export}" | ||||
|  | ||||
| # generate items, settings, & crafts topics temp files | ||||
| echo -e "\ngenerating temp files ..." | ||||
| for script in src settings; do | ||||
| 	script="${d_ldoc}/parse_${script}.py" | ||||
| 	if test ! -f "${script}"; then | ||||
| 		echo "ERROR: script doesn't exist: ${script}" | ||||
| 	else | ||||
| 		# check script's executable bit | ||||
| 		if test ! -x "${script}"; then | ||||
| 			chmod +x "${script}" | ||||
| 		fi | ||||
| 		# execute script | ||||
| 		"${script}" | ||||
| 	fi | ||||
| done | ||||
|  | ||||
| echo | ||||
|  | ||||
| # generate new doc files | ||||
| "${cmd_ldoc}" --unsafe_no_sandbox -c "${f_config}" -d "${d_export}" "${d_root}"; retval=$? | ||||
|  | ||||
| # check exit status | ||||
| if test ${retval} -ne 0; then | ||||
| 	echo -e "\nan error occurred (ldoc return code: ${retval})" | ||||
| 	exit ${retval} | ||||
| fi | ||||
|  | ||||
| echo -e "\ncleaning temp files ..." | ||||
| find "${d_ldoc}" -type f -name "*.luadoc" ! -name "crafting.luadoc" -exec rm -vf {} + | ||||
|  | ||||
| # HACK: ldoc does not seem to like the "shields:" prefix | ||||
| echo -e "\ncompensating for LDoc's issue with \"shields:\" prefix ..." | ||||
| sed -i \ | ||||
| 	-e 's/<strong>shield_/<strong>shields:shield_/' \ | ||||
| 	-e 's/<td class="name\(.*\)>shield_/<td class="name\1>shields:shield_/' \ | ||||
| 	-e 's/<a href="#shield_/<a href="#shields:shield_/' \ | ||||
| 	-e 's/<a name.*"shield_/<a name="shields:shield_/' \ | ||||
| 	"${d_export}/topics/shields.html" | ||||
|  | ||||
| # copy textures to data directory | ||||
| printf "\ncopying textures ..." | ||||
| mkdir -p "${d_data}" | ||||
| texture_count=0 | ||||
| for d_mod in armor_* shields; do | ||||
| 	printf "\rcopying textures from ${d_mod} ...\n" | ||||
| 	for png in $(find "${d_root}/${d_mod}/textures" -maxdepth 1 -type f -name "*.png"); do | ||||
| 		if test -f "${d_data}/$(basename ${png})"; then | ||||
| 			echo "WARNING: not overwriting existing file: ${png}" | ||||
| 		else | ||||
| 			cp "${png}" "${d_data}" | ||||
| 			texture_count=$((texture_count + 1)) | ||||
| 			printf "\rcopied ${texture_count} textures" | ||||
| 		fi | ||||
| 	done | ||||
| done | ||||
|  | ||||
| echo -e "\n\nDone!" | ||||
							
								
								
									
										305
									
								
								.ldoc/ldoc.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										305
									
								
								.ldoc/ldoc.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,305 @@ | ||||
| /* BEGIN RESET | ||||
|  | ||||
| Copyright (c) 2010, Yahoo! Inc. All rights reserved. | ||||
| Code licensed under the BSD License: | ||||
| http://developer.yahoo.com/yui/license.html | ||||
| version: 2.8.2r1 | ||||
| */ | ||||
| html { | ||||
|     color: #000; | ||||
|     background: #FFF; | ||||
| } | ||||
| body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td { | ||||
|     margin: 0; | ||||
|     padding: 0; | ||||
| } | ||||
| table { | ||||
|     border-collapse: collapse; | ||||
|     border-spacing: 0; | ||||
| } | ||||
| fieldset,img { | ||||
|     border: 0; | ||||
| } | ||||
| address,caption,cite,code,dfn,em,strong,th,var,optgroup { | ||||
|     font-style: inherit; | ||||
|     font-weight: inherit; | ||||
| } | ||||
| del,ins { | ||||
|     text-decoration: none; | ||||
| } | ||||
| li { | ||||
|     margin-left: 20px; | ||||
| } | ||||
| caption,th { | ||||
|     text-align: left; | ||||
| } | ||||
| h1,h2,h3,h4,h5,h6 { | ||||
|     font-size: 100%; | ||||
|     font-weight: bold; | ||||
| } | ||||
| q:before,q:after { | ||||
|     content: ''; | ||||
| } | ||||
| abbr,acronym { | ||||
|     border: 0; | ||||
|     font-variant: normal; | ||||
| } | ||||
| sup { | ||||
|     vertical-align: baseline; | ||||
| } | ||||
| sub { | ||||
|     vertical-align: baseline; | ||||
| } | ||||
| legend { | ||||
|     color: #000; | ||||
| } | ||||
| input,button,textarea,select,optgroup,option { | ||||
|     font-family: inherit; | ||||
|     font-size: inherit; | ||||
|     font-style: inherit; | ||||
|     font-weight: inherit; | ||||
| } | ||||
| input,button,textarea,select {*font-size:100%; | ||||
| } | ||||
| /* END RESET */ | ||||
|  | ||||
| body { | ||||
|     margin-left: 1em; | ||||
|     margin-right: 1em; | ||||
|     font-family: arial, helvetica, geneva, sans-serif; | ||||
|     background-color: #ffffff; margin: 0px; | ||||
| } | ||||
|  | ||||
| code, tt { font-family: monospace; font-size: 1.1em; } | ||||
| span.parameter { font-family:monospace; } | ||||
| span.parameter:after { content:":"; } | ||||
| span.types:before { content:"("; } | ||||
| span.types:after { content:")"; } | ||||
| .type { font-weight: bold; font-style:italic } | ||||
|  | ||||
| body, p, td, th { font-size: .95em; line-height: 1.2em;} | ||||
|  | ||||
| p, ul { margin: 10px 0 0 0px;} | ||||
|  | ||||
| strong { font-weight: bold;} | ||||
|  | ||||
| em { font-style: italic;} | ||||
|  | ||||
| h1 { | ||||
|     font-size: 1.5em; | ||||
|     margin: 20px 0 20px 0; | ||||
| } | ||||
| h2, h3, h4 { margin: 15px 0 10px 0; } | ||||
| h2 { font-size: 1.25em; } | ||||
| h3 { font-size: 1.15em; } | ||||
| h4 { font-size: 1.06em; } | ||||
|  | ||||
| a:link { font-weight: bold; color: #004080; text-decoration: none; } | ||||
| a:visited { font-weight: bold; color: #006699; text-decoration: none; } | ||||
| a:link:hover { text-decoration: underline; } | ||||
|  | ||||
| hr { | ||||
|     color:#cccccc; | ||||
|     background: #00007f; | ||||
|     height: 1px; | ||||
| } | ||||
|  | ||||
| blockquote { margin-left: 3em; } | ||||
|  | ||||
| ul { list-style-type: disc; } | ||||
|  | ||||
| p.name { | ||||
|     font-family: "Andale Mono", monospace; | ||||
|     padding-top: 1em; | ||||
| } | ||||
|  | ||||
| pre { | ||||
|     background-color: rgb(245, 245, 245); | ||||
|     border: 1px solid #C0C0C0; /* silver */ | ||||
|     padding: 10px; | ||||
|     margin: 10px 0 10px 0; | ||||
|     overflow: auto; | ||||
|     font-family: "Andale Mono", monospace; | ||||
| } | ||||
|  | ||||
| pre.example { | ||||
|     font-size: .85em; | ||||
| } | ||||
|  | ||||
| table.index { border: 1px #00007f; } | ||||
| table.index td { text-align: left; vertical-align: top; } | ||||
|  | ||||
| #container { | ||||
|     margin-left: 1em; | ||||
|     margin-right: 1em; | ||||
|     background-color: #f0f0f0; | ||||
| } | ||||
|  | ||||
| #product { | ||||
|     text-align: center; | ||||
|     border-bottom: 1px solid #cccccc; | ||||
|     background-color: #ffffff; | ||||
| } | ||||
|  | ||||
| #product big { | ||||
|     font-size: 2em; | ||||
| } | ||||
|  | ||||
| #main { | ||||
|     background-color: #f0f0f0; | ||||
|     border-left: 2px solid #cccccc; | ||||
| } | ||||
|  | ||||
| #navigation { | ||||
|     float: left; | ||||
|     width: 14em; | ||||
|     vertical-align: top; | ||||
|     background-color: #f0f0f0; | ||||
|     overflow: visible; | ||||
|     position: fixed; | ||||
| } | ||||
|  | ||||
| #navigation h2 { | ||||
|     background-color:#e7e7e7; | ||||
|     font-size:1.1em; | ||||
|     color:#000000; | ||||
|     text-align: left; | ||||
|     padding:0.2em; | ||||
|     border-top:1px solid #dddddd; | ||||
|     border-bottom:1px solid #dddddd; | ||||
| } | ||||
|  | ||||
| #navigation ul | ||||
| { | ||||
|     font-size:1em; | ||||
|     list-style-type: none; | ||||
|     margin: 1px 1px 10px 1px; | ||||
| } | ||||
|  | ||||
| #navigation li { | ||||
|     text-indent: -1em; | ||||
|     display: block; | ||||
|     margin: 3px 0px 0px 22px; | ||||
| } | ||||
|  | ||||
| #navigation li li a { | ||||
|     margin: 0px 3px 0px -1em; | ||||
| } | ||||
|  | ||||
| #content { | ||||
|     margin-left: 14em; | ||||
|     padding: 1em; | ||||
|     width: 700px; | ||||
|     border-left: 2px solid #cccccc; | ||||
|     border-right: 2px solid #cccccc; | ||||
|     background-color: #ffffff; | ||||
|     min-height: 425px; | ||||
| } | ||||
|  | ||||
| #about { | ||||
|     clear: both; | ||||
|     padding: 5px; | ||||
|     border-top: 2px solid #cccccc; | ||||
|     background-color: #ffffff; | ||||
| } | ||||
|  | ||||
| @media print { | ||||
|     body { | ||||
|         font: 12pt "Times New Roman", "TimeNR", Times, serif; | ||||
|     } | ||||
|     a { font-weight: bold; color: #004080; text-decoration: underline; } | ||||
|  | ||||
|     #main { | ||||
|         background-color: #ffffff; | ||||
|         border-left: 0px; | ||||
|     } | ||||
|  | ||||
|     #container { | ||||
|         margin-left: 2%; | ||||
|         margin-right: 2%; | ||||
|         background-color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     #content { | ||||
|         padding: 1em; | ||||
|         background-color: #ffffff; | ||||
|     } | ||||
|  | ||||
|     #navigation { | ||||
|         display: none; | ||||
|     } | ||||
|     pre.example { | ||||
|         font-family: "Andale Mono", monospace; | ||||
|         font-size: 10pt; | ||||
|         page-break-inside: avoid; | ||||
|     } | ||||
| } | ||||
|  | ||||
| table.module_list { | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: #cccccc; | ||||
|     border-collapse: collapse; | ||||
| } | ||||
| table.module_list td { | ||||
|     border-width: 1px; | ||||
|     padding: 3px; | ||||
|     border-style: solid; | ||||
|     border-color: #cccccc; | ||||
| } | ||||
| table.module_list td.name { background-color: #f0f0f0; min-width: 200px; } | ||||
| table.module_list td.summary { width: 100%; } | ||||
|  | ||||
|  | ||||
| table.function_list { | ||||
|     border-width: 1px; | ||||
|     border-style: solid; | ||||
|     border-color: #cccccc; | ||||
|     border-collapse: collapse; | ||||
| } | ||||
| table.function_list td { | ||||
|     border-width: 1px; | ||||
|     padding: 3px; | ||||
|     border-style: solid; | ||||
|     border-color: #cccccc; | ||||
| } | ||||
| table.function_list td.name { background-color: #f0f0f0; min-width: 200px; } | ||||
| table.function_list td.summary { width: 100%; } | ||||
|  | ||||
| ul.nowrap { | ||||
|     overflow:auto; | ||||
|     white-space:nowrap; | ||||
| } | ||||
|  | ||||
| dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;} | ||||
| dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;} | ||||
| dl.table h3, dl.function h3 {font-size: .95em;} | ||||
|  | ||||
| /* stop sublists from having initial vertical space */ | ||||
| ul ul { margin-top: 0px; } | ||||
| ol ul { margin-top: 0px; } | ||||
| ol ol { margin-top: 0px; } | ||||
| ul ol { margin-top: 0px; } | ||||
|  | ||||
| /* make the target distinct; helps when we're navigating to a function */ | ||||
| a:target + * { | ||||
|   background-color: #FF9; | ||||
| } | ||||
|  | ||||
|  | ||||
| /* styles for prettification of source */ | ||||
| pre .comment { color: #558817; } | ||||
| pre .constant { color: #a8660d; } | ||||
| pre .escape { color: #844631; } | ||||
| pre .keyword { color: #aa5050; font-weight: bold; } | ||||
| pre .library { color: #0e7c6b; } | ||||
| pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; } | ||||
| pre .string { color: #8080ff; } | ||||
| pre .number { color: #f8660d; } | ||||
| pre .operator { color: #2239a8; font-weight: bold; } | ||||
| pre .preprocessor, pre .prepro { color: #a33243; } | ||||
| pre .global { color: #800080; } | ||||
| pre .user-keyword { color: #800080; } | ||||
| pre .prompt { color: #558817; } | ||||
| pre .url { color: #272fc2; text-decoration: underline; } | ||||
|  | ||||
							
								
								
									
										118
									
								
								.ldoc/parse_settings.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								.ldoc/parse_settings.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,118 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # This script will format "settingtypes.txt" file found at the root | ||||
| # of 3d_armor modpack into a format readable by LDoc. | ||||
|  | ||||
| import sys, os, errno, codecs | ||||
|  | ||||
|  | ||||
| path = os.path.realpath(__file__) | ||||
| script = os.path.basename(path) | ||||
| d_root = os.path.dirname(os.path.dirname(path)) | ||||
| d_ldoc = os.path.join(d_root, ".ldoc") | ||||
| f_settings = os.path.join(d_root, "settingtypes.txt") | ||||
|  | ||||
| if not os.path.isfile(f_settings): | ||||
| 	print("settingtypes.txt does not exist") | ||||
| 	sys.exit(errno.ENOENT) | ||||
|  | ||||
| i_stream = codecs.open(f_settings, "r", "utf-8") | ||||
| data_in = i_stream.read() | ||||
| i_stream.close() | ||||
|  | ||||
| data_in = data_in.replace("\r", "") | ||||
|  | ||||
| sets = data_in.split("\n\n") | ||||
|  | ||||
| for idx in reversed(range(len(sets))): | ||||
| 	set = sets[idx] | ||||
| 	lines = set.split("\n") | ||||
| 	for idx2 in reversed(range(len(lines))): | ||||
| 		li = lines[idx2].strip(" \t") | ||||
| 		if li == "" or li[0] == "[": | ||||
| 			lines.pop(idx2) | ||||
|  | ||||
| 	if len(lines) == 0: | ||||
| 		sets.pop(idx) | ||||
| 	else: | ||||
| 		sets[idx] = "\n".join(lines) | ||||
|  | ||||
| filtered = [] | ||||
|  | ||||
| for set in sets: | ||||
| 	comment = False | ||||
| 	lines = set.split("\n") | ||||
| 	new_lines = [] | ||||
| 	for li in lines: | ||||
| 		if li[0] == "#": | ||||
| 			new_lines.append(li) | ||||
| 		else: | ||||
| 			new_lines.append(li) | ||||
| 			filtered.append("\n".join(new_lines)) | ||||
| 			new_lines = [] | ||||
|  | ||||
| settings = [] | ||||
|  | ||||
| def parse_setting(set): | ||||
| 	desc = [] | ||||
| 	setting = summary = stype = sdefault = soptions = None | ||||
|  | ||||
| 	for li in set.split("\n"): | ||||
| 		if li[0] == "#": | ||||
| 			desc.append("--  {}".format(li.lstrip(" #"))) | ||||
| 		else: | ||||
| 			setting = li.split(" ")[0] | ||||
| 			summary = li.split(")")[0].split("(")[-1] | ||||
| 			li = li.split(")")[-1].strip() | ||||
| 			rem = li.split(" ") | ||||
| 			stype = rem[0] | ||||
| 			rem.pop(0) | ||||
|  | ||||
| 			if len(rem) > 0: | ||||
| 				sdefault = rem[0] | ||||
| 				rem.pop(0) | ||||
|  | ||||
| 			if len(rem) > 0: | ||||
| 				soptions = " ".join(rem) | ||||
|  | ||||
| 	if not setting: | ||||
| 		return | ||||
|  | ||||
| 	st = "---" | ||||
| 	if summary: | ||||
| 		if summary[-1] != ".": | ||||
| 			summary = "{}.".format(summary) | ||||
| 		st = "{} {}".format(st, summary) | ||||
|  | ||||
| 	st = "{}\n--".format(st) | ||||
|  | ||||
| 	if len(desc) > 0: | ||||
| 		st = "{}\n{}\n--".format(st, "\n".join(desc)) | ||||
|  | ||||
| 	st = "{}\n--  @setting {}".format(st, setting) | ||||
|  | ||||
| 	if stype: | ||||
| 		st = "{}\n--  @settype {}".format(st, stype) | ||||
|  | ||||
| 	if sdefault: | ||||
| 		st = "{}\n--  @default {}".format(st, sdefault) | ||||
|  | ||||
| 	# TODO: add options | ||||
|  | ||||
| 	settings.append(st) | ||||
|  | ||||
| for f in filtered: | ||||
| 	parse_setting(f) | ||||
|  | ||||
| outfile = os.path.join(d_ldoc, "settings.luadoc") | ||||
| data_out = "\n--- 3D Armor Settings\n--\n--  @topic settings\n\n\n{}\n".format("\n\n".join(settings)) | ||||
|  | ||||
| o_stream = codecs.open(outfile, "w", "utf-8") | ||||
| if not o_stream: | ||||
| 	print("ERROR: could not open file for writing: {}".format(outfile)) | ||||
| 	sys.exit(errno.EIO) | ||||
|  | ||||
| o_stream.write(data_out) | ||||
| o_stream.close() | ||||
|  | ||||
| print("settings exported to\t{}".format(outfile)) | ||||
							
								
								
									
										90
									
								
								.ldoc/parse_src.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										90
									
								
								.ldoc/parse_src.py
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| # This script will parse source files for docstring. | ||||
|  | ||||
| import os, codecs | ||||
|  | ||||
|  | ||||
| path = os.path.realpath(__file__) | ||||
| script = os.path.basename(path) | ||||
| d_root = os.path.dirname(os.path.dirname(path)) | ||||
| d_ldoc = os.path.join(d_root, ".ldoc") | ||||
|  | ||||
|  | ||||
| armor_types = { | ||||
| 	"armor": {"topic": "Armors", "values": []}, | ||||
| 	"helmet": {"topic": "Helmets", "values": []}, | ||||
| 	"chestplate": {"topic": "Chestplates", "values": []}, | ||||
| 	"leggings": {"topic": "Leggings", "values": []}, | ||||
| 	"boots": {"topic": "Boots", "values": []}, | ||||
| 	#"shield": {"topic": "Shields", "values": []}, | ||||
| } | ||||
|  | ||||
| def parse_file(f): | ||||
| 	buffer = codecs.open(f, "r", "utf-8") | ||||
| 	if not buffer: | ||||
| 		print("ERROR: could not open file for reading: {}".format(f)) | ||||
| 		return | ||||
|  | ||||
| 	data_in = buffer.read() | ||||
| 	buffer.close() | ||||
|  | ||||
| 	# format to LF (Unix) | ||||
| 	data_in = data_in.replace("\r\n", "\n").replace("\r", "\n") | ||||
|  | ||||
| 	current_item = [] | ||||
| 	item_type = None | ||||
| 	new_item = False | ||||
| 	for li in data_in.split("\n"): | ||||
| 		li = li.strip() | ||||
| 		if li.startswith("---"): | ||||
| 			new_item = True | ||||
| 		elif not li.startswith("--"): | ||||
| 			new_item = False | ||||
|  | ||||
| 		if new_item: | ||||
| 			current_item.append(li) | ||||
| 			if not item_type: | ||||
| 				for a_type in armor_types: | ||||
| 					if "@{} ".format(a_type) in li: | ||||
| 						item_type = a_type | ||||
| 						break | ||||
| 		elif item_type and len(current_item): | ||||
| 			armor_types[item_type]["values"].append("\n".join(current_item)) | ||||
| 			item_type = None | ||||
| 			current_item = [] | ||||
| 		else: | ||||
| 			current_item = [] | ||||
|  | ||||
| to_parse = [] | ||||
|  | ||||
| for obj in os.listdir(d_root): | ||||
| 	fullpath = os.path.join(d_root, obj) | ||||
| 	if not obj.startswith(".") and os.path.isdir(fullpath): | ||||
| 		for root, dirs, files in os.walk(fullpath): | ||||
| 			for f in files: | ||||
| 				if f.endswith(".lua"): | ||||
| 					to_parse.append(os.path.join(root, f)) | ||||
|  | ||||
| for p in to_parse: | ||||
| 	if not os.path.isfile(p): | ||||
| 		print("ERROR: {} is not a file".format(p)) | ||||
| 	else: | ||||
| 		parse_file(p) | ||||
|  | ||||
| for t in armor_types: | ||||
| 	topic = armor_types[t]["topic"] | ||||
| 	items = armor_types[t]["values"] | ||||
|  | ||||
| 	if len(items): | ||||
| 		outfile = os.path.join(d_ldoc, "{}.luadoc".format(topic.lower())) | ||||
|  | ||||
| 		buffer = codecs.open(outfile, "w", "utf-8") | ||||
| 		if not buffer: | ||||
| 			print("ERROR: could not open file for writing: {}".format(outfile)) | ||||
| 			continue | ||||
|  | ||||
| 		buffer.write("\n--- 3D Armor {}\n--\n--  @topic {}\n\n\n{}\n".format(topic, topic.lower(), "\n\n".join(items))) | ||||
| 		buffer.close() | ||||
|  | ||||
| 		print("{} exported to\t{}".format(topic.lower(), outfile)) | ||||
| @@ -18,6 +18,7 @@ read_globals = { | ||||
|  | ||||
| 	-- deps | ||||
| 	"default", | ||||
| 	"player_api", | ||||
| 	"minetest", | ||||
| 	"unified_inventory", | ||||
| 	"wardrobe", | ||||
|   | ||||
| @@ -1,26 +0,0 @@ | ||||
| [mod] 3d Armor [3d_armor] | ||||
| ========================= | ||||
|  | ||||
| License Source Code | ||||
| ------------------- | ||||
|  | ||||
| Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU Lesser General Public License as published by | ||||
| the Free Software Foundation; either version 2.1 of the License, or | ||||
| (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Lesser General Public License for more details. | ||||
|  | ||||
| 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 Textures | ||||
| ---------------- | ||||
|  | ||||
| Copyright (C) 2017-2019 davidthecreator - CC-BY-SA 3.0 | ||||
| @@ -6,7 +6,7 @@ | ||||
| |-[Armor Configuration](#armor-configuration)                               |||- - [3d_Armor Item Storage](#3d_armor-item-storage) | ||||
| |- - [disable_specific_materials](#to-disable-individual-armor-materials)   |||- - [Armor Registration](#armor-registration) | ||||
| |- - [armor_init_delay](#initialization-glitches-when-a-player-first-joins) |||- - [Registering Armor Groups](#registering-armor-groups) | ||||
| |- - [armor_init_times](#number-of-initialization-attempts)                 |||- - [Groups used by 3d_Armor](#groups-used-by-3d_armor) | ||||
| |- - [wieldview_update_time](#how-often-player-wield-items-are-updated)     |||- - [Groups used by 3d_Armor](#groups-used-by-3d_armor) | ||||
| |- - [armor_bones_delay](#armor-not-in-bones-due-to-server-lag)             |||- - - [Elements](#elements) | ||||
| |- - [armor_update_time](#how-often-player-armor-items-are-updated)         |||- - - [Attributes](#attributes) | ||||
| |- - [armor_drop](#drop-armor-when-a-player-dies)                           |||- - - [Physics](#physics) | ||||
| @@ -19,7 +19,7 @@ | ||||
| |- - [armor_fire_protect](#enable-fire-protection)                          |||- - - [armor:remove_all](#armor-remove_all) | ||||
| |- - [armor_punch_damage](#enable-punch-damage-effects)                     |||- - - [armor:equip](#armor-equip) | ||||
| |- - [armor_migrate_old_inventory](#migration-of-old-armor-inventories)     |||- - - [armor:unequip](#armor-unequip) | ||||
| |- - [wieldview_update_time](#how-often-player-wield-items-are-updated)     |||- - - [armor:update_skin](#armor-update_skin) | ||||
| |                                                                           |||- - - [armor:update_skin](#armor-update_skin) | ||||
| |-[Credits](#credits)                                                       |||- - [Callbacks](#Callbacks) | ||||
| |                                                                           |||- - - [Item callbacks](#item-callbacks) | ||||
| |                                                                           |||- - - [Global callbacks](#global-callbacks) | ||||
| @@ -53,17 +53,13 @@ Change the following default settings by going to Main Menu>>Settings(Tab)>>All | ||||
|     armor_material_gold = true | ||||
|     armor_material_mithril = true | ||||
|     armor_material_crystal = true | ||||
|     armor_material_nether = true | ||||
|  | ||||
| ### Initialization glitches when a player first joins | ||||
|  **Increase to prevent glitches** | ||||
|   | ||||
|     armor_init_delay = 2 | ||||
|  | ||||
| ### Number of initialization attempts | ||||
|  **Increase to prevent glitches - Use in conjunction with armor_init_delay if initialization problems persist.** | ||||
|  | ||||
|     armor_init_times = 10 | ||||
|  | ||||
| ### Armor not in bones due to server lag | ||||
|  **Increase to help resolve** | ||||
|   | ||||
| @@ -253,7 +249,7 @@ The above allows armor to block/prevent new damage types but you also need to as | ||||
| ## Groups used by 3d_Armor | ||||
| 3d_armor has many default groups already registered, these are categorized under 4 main headings | ||||
|  - **Elements:** armor_head, armor_torso, armor_legs, armor_feet | ||||
|  - **Attributes:** armor_heal, armor_fire, armor_water | ||||
|  - **Attributes:** armor_heal, armor_fire, armor_water, armor_feather | ||||
|  - **Physics:** physics_jump, physics_speed, physics_gravity | ||||
|  - **Durability:** armor_use, flammable | ||||
|   | ||||
| @@ -333,6 +329,9 @@ The below Diamond chestplate has a 12% chance to completely block all damage (ar | ||||
| 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, | ||||
| 	}) | ||||
|  | ||||
| #### Armor_feather | ||||
| ***"Armor_feather"*** will slow a player when falling. This only has one level or state, which is armor_feather=1 | ||||
|  | ||||
| ### Physics | ||||
| The physics attributes supported by 3d_armor are ***physics_jump, physics_speed and physics_gravity***. Although 3d_armor supports the use of this with no other mods it is recommended that the mod [player_monoids](https://forum.minetest.net/viewtopic.php?t=14895) is used to help with intermod compatability.  | ||||
|  | ||||
| @@ -396,6 +395,8 @@ If all of the above were made of material "wood" the player would recieve an *** | ||||
|  | ||||
| ## Armor Functions | ||||
|  | ||||
| See also: [API Reference](https://minetest-mods.github.io/3d_armor/reference/) | ||||
|  | ||||
| ### armor set_player_armor | ||||
|  | ||||
| 	armor:set_player_armor(player) | ||||
|   | ||||
							
								
								
									
										388
									
								
								3d_armor/api.lua
									
									
									
									
									
								
							
							
						
						
									
										388
									
								
								3d_armor/api.lua
									
									
									
									
									
								
							| @@ -1,3 +1,82 @@ | ||||
|  | ||||
| --- 3D Armor API | ||||
| -- | ||||
| --  @topic api | ||||
|  | ||||
|  | ||||
| local transparent_armor = minetest.settings:get_bool("armor_transparent", false) | ||||
|  | ||||
|  | ||||
| --- Tables | ||||
| -- | ||||
| --  @section tables | ||||
|  | ||||
| --- Armor definition table used for registering armor. | ||||
| -- | ||||
| --  @table ArmorDef | ||||
| --  @tfield string description Human-readable name/description. | ||||
| --  @tfield string inventory_image Image filename used for icon. | ||||
| --  @tfield table groups See: `ArmorDef.groups` | ||||
| --  @tfield table armor_groups See: `ArmorDef.armor_groups` | ||||
| --  @tfield table damage_groups See: `ArmorDef.damage_groups` | ||||
| --  @see ItemDef | ||||
| --  @usage local def = { | ||||
| --    description = "Wood Helmet", | ||||
| --    inventory_image = "3d_armor_inv_helmet_wood.png", | ||||
| --    groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| --    armor_groups = {fleshy=5}, | ||||
| --    damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| --  } | ||||
|  | ||||
| --- Groups table. | ||||
| -- | ||||
| --  General groups defining item behavior. | ||||
| -- | ||||
| --  Some commonly used groups: ***armor\_<type>***, ***armor\_heal***, ***armor\_use*** | ||||
| -- | ||||
| --  @table ArmorDef.groups | ||||
| --  @tfield int armor_type The armor type. "head", "torso", "hands", "shield", etc. | ||||
| --  (**Note:** replace "type" with actual type). | ||||
| --  @tfield int armor_heal Healing value of armor when equipped. | ||||
| --  @tfield int armor_use Amount of uses/damage before armor "breaks". | ||||
| --  @see groups | ||||
| --  @usage groups = { | ||||
| --    armor_head = 1, | ||||
| --    armor_heal = 5, | ||||
| --    armor_use = 2000, | ||||
| --    flammable = 1, | ||||
| --  } | ||||
|  | ||||
| --- Armor groups table. | ||||
| -- | ||||
| --  Groups that this item is effective against when taking damage. | ||||
| -- | ||||
| --  Some commonly used groups: ***fleshy*** | ||||
| -- | ||||
| --  @table ArmorDef.armor_groups | ||||
| --  @usage armor_groups = { | ||||
| --    fleshy = 5, | ||||
| --  } | ||||
|  | ||||
| --- Damage groups table. | ||||
| -- | ||||
| --  Groups that this item is effective on when used as a weapon/tool. | ||||
| -- | ||||
| --  Some commonly used groups: ***cracky***, ***snappy***, ***choppy***, ***crumbly***, ***level*** | ||||
| -- | ||||
| --  @table ArmorDef.damage_groups | ||||
| --  @see entity_damage_mechanism | ||||
| --  @usage damage_groups = { | ||||
| --    cracky = 3, | ||||
| --    snappy = 2, | ||||
| --    choppy = 3, | ||||
| --    crumbly = 2, | ||||
| --    level = 1, | ||||
| --  } | ||||
|  | ||||
| --- @section end | ||||
|  | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator(minetest.get_current_modname()) | ||||
|  | ||||
| @@ -33,7 +112,7 @@ armor = { | ||||
| 	timer = 0, | ||||
| 	elements = {"head", "torso", "legs", "feet"}, | ||||
| 	physics = {"jump", "speed", "gravity"}, | ||||
| 	attributes = {"heal", "fire", "water"}, | ||||
| 	attributes = {"heal", "fire", "water", "feather"}, | ||||
| 	formspec = "image[2.5,0;2,4;armor_preview]".. | ||||
| 		default.gui_bg.. | ||||
| 		default.gui_bg_img.. | ||||
| @@ -53,14 +132,17 @@ armor = { | ||||
| 		gold = "default:gold_ingot", | ||||
| 		mithril = "moreores:mithril_ingot", | ||||
| 		crystal = "ethereal:crystal_ingot", | ||||
| 		nether = "nether:nether_ingot", | ||||
| 	}, | ||||
| 	fire_nodes = { | ||||
| 		{"nether:lava_source",      5, 8}, | ||||
| 		{"default:lava_source",     5, 8}, | ||||
| 		{"default:lava_flowing",    5, 8}, | ||||
| 		{"fire:basic_flame",        3, 4}, | ||||
| 		{"fire:permanent_flame",    3, 4}, | ||||
| 		{"ethereal:crystal_spike",  2, 1}, | ||||
| 		{"ethereal:fire_flower",    2, 1}, | ||||
| 		{"nether:lava_crust",       2, 1}, | ||||
| 		{"default:torch",           1, 1}, | ||||
| 		{"default:torch_ceiling",   1, 1}, | ||||
| 		{"default:torch_wall",      1, 1}, | ||||
| @@ -80,7 +162,6 @@ armor = { | ||||
|  | ||||
| armor.config = { | ||||
| 	init_delay = 2, | ||||
| 	init_times = 10, | ||||
| 	bones_delay = 1, | ||||
| 	update_time = 1, | ||||
| 	drop = minetest.get_modpath("bones") ~= nil, | ||||
| @@ -95,16 +176,33 @@ armor.config = { | ||||
| 	material_gold = true, | ||||
| 	material_mithril = true, | ||||
| 	material_crystal = true, | ||||
| 	material_nether = true, | ||||
| 	set_elements = "head torso legs feet shield", | ||||
| 	set_multiplier = 1.1, | ||||
| 	water_protect = true, | ||||
| 	fire_protect = minetest.get_modpath("ethereal") ~= nil, | ||||
| 	fire_protect_torch = minetest.get_modpath("ethereal") ~= nil, | ||||
| 	feather_fall = true, | ||||
| 	punch_damage = true, | ||||
| } | ||||
|  | ||||
| -- Armor Registration | ||||
|  | ||||
| --- Methods | ||||
| -- | ||||
| --  @section methods | ||||
|  | ||||
| --- Registers a new armor item. | ||||
| -- | ||||
| --  @function armor:register_armor | ||||
| --  @tparam string name Armor item technical name (ex: "3d\_armor:helmet\_gold"). | ||||
| --  @tparam ArmorDef def Armor definition table. | ||||
| --  @usage armor:register_armor("3d_armor:helmet_wood", { | ||||
| --    description = "Wood Helmet", | ||||
| --    inventory_image = "3d_armor_inv_helmet_wood.png", | ||||
| --    groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| --    armor_groups = {fleshy=5}, | ||||
| --    damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| --  }) | ||||
| armor.register_armor = function(self, name, def) | ||||
| 	def.on_secondary_use = function(itemstack, player) | ||||
| 		return armor:equip(player, itemstack) | ||||
| @@ -130,6 +228,11 @@ armor.register_armor = function(self, name, def) | ||||
| 	minetest.register_tool(name, def) | ||||
| end | ||||
|  | ||||
| --- Registers a new armor group. | ||||
| -- | ||||
| --  @function armor:register_armor_group | ||||
| --  @tparam string group Group ID. | ||||
| --  @tparam int base Base armor value. | ||||
| armor.register_armor_group = function(self, group, base) | ||||
| 	base = base or 100 | ||||
| 	self.registered_groups[group] = base | ||||
| @@ -138,38 +241,92 @@ armor.register_armor_group = function(self, group, base) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- Armor callbacks | ||||
| --- Armor Callbacks Registration | ||||
| -- | ||||
| --  @section callbacks | ||||
|  | ||||
| --- Registers a callback for when player visuals are update. | ||||
| -- | ||||
| --  @function armor:register_on_update | ||||
| --  @tparam function func Function to be executed. | ||||
| --  @see armor:update_player_visuals | ||||
| --  @usage armor:register_on_update(function(player, index, stack) | ||||
| --    -- code to execute | ||||
| --  end) | ||||
| armor.register_on_update = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_update, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Registers a callback for when armor is equipped. | ||||
| -- | ||||
| --  @function armor:register_on_equip | ||||
| --  @tparam function func Function to be executed. | ||||
| --  @usage armor:register_on_equip(function(player, index, stack) | ||||
| --    -- code to execute | ||||
| --  end) | ||||
| armor.register_on_equip = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_equip, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Registers a callback for when armor is unequipped. | ||||
| -- | ||||
| --  @function armor:register_on_unequip | ||||
| --  @tparam function func Function to be executed. | ||||
| --  @usage armor:register_on_unequip(function(player, index, stack) | ||||
| --    -- code to execute | ||||
| --  end) | ||||
| armor.register_on_unequip = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_unequip, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Registers a callback for when armor is damaged. | ||||
| -- | ||||
| --  @function armor:register_on_damage | ||||
| --  @tparam function func Function to be executed. | ||||
| --  @see armor:damage | ||||
| --  @usage armor:register_on_damage(function(player, index, stack) | ||||
| --    -- code to execute | ||||
| --  end) | ||||
| armor.register_on_damage = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_damage, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Registers a callback for when armor is destroyed. | ||||
| -- | ||||
| --  @function armor:register_on_destroy | ||||
| --  @tparam function func Function to be executed. | ||||
| --  @see armor:damage | ||||
| --  @usage armor:register_on_destroy(function(player, index, stack) | ||||
| --    -- code to execute | ||||
| --  end) | ||||
| armor.register_on_destroy = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_destroy, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- @section end | ||||
|  | ||||
|  | ||||
| --- Methods | ||||
| -- | ||||
| --  @section methods | ||||
|  | ||||
| --- Runs callbacks. | ||||
| -- | ||||
| --  @function armor:run_callbacks | ||||
| --  @tparam function callback Function to execute. | ||||
| --  @tparam ObjectRef player First parameter passed to callback. | ||||
| --  @tparam int index Second parameter passed to callback. | ||||
| --  @tparam ItemStack stack Callback owner. | ||||
| armor.run_callbacks = function(self, callback, player, index, stack) | ||||
| 	if stack then | ||||
| 		local def = stack:get_definition() or {} | ||||
| @@ -185,13 +342,17 @@ armor.run_callbacks = function(self, callback, player, index, stack) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Updates visuals. | ||||
| -- | ||||
| --  @function armor:update_player_visuals | ||||
| --  @tparam ObjectRef player | ||||
| armor.update_player_visuals = function(self, player) | ||||
| 	if not player then | ||||
| 		return | ||||
| 	end | ||||
| 	local name = player:get_player_name() | ||||
| 	if self.textures[name] then | ||||
| 		default.player_set_textures(player, { | ||||
| 		player_api.set_textures(player, { | ||||
| 			self.textures[name].skin, | ||||
| 			self.textures[name].armor, | ||||
| 			self.textures[name].wielditem, | ||||
| @@ -200,6 +361,10 @@ armor.update_player_visuals = function(self, player) | ||||
| 	self:run_callbacks("on_update", player) | ||||
| end | ||||
|  | ||||
| --- Sets player's armor attributes. | ||||
| -- | ||||
| --  @function armor:set_player_armor | ||||
| --  @tparam ObjectRef player | ||||
| armor.set_player_armor = function(self, player) | ||||
| 	local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") | ||||
| 	if not name then | ||||
| @@ -208,7 +373,7 @@ armor.set_player_armor = function(self, player) | ||||
| 	local state = 0 | ||||
| 	local count = 0 | ||||
| 	local preview = armor:get_preview(name) | ||||
| 	local texture = "3d_armor_trans.png" | ||||
| 	local texture = "blank.png" | ||||
| 	local physics = {} | ||||
| 	local attributes = {} | ||||
| 	local levels = {} | ||||
| @@ -250,7 +415,7 @@ armor.set_player_armor = function(self, player) | ||||
| 				end | ||||
| 				-- DEPRECATED, use armor_groups instead | ||||
| 				if def.groups["armor_radiation"] and levels["radiation"] then | ||||
| 					levels["radiation"] = def.groups["armor_radiation"] | ||||
| 					levels["radiation"] = levels["radiation"] + def.groups["armor_radiation"] | ||||
| 				end | ||||
| 			end | ||||
| 			local item = stack:get_name() | ||||
| @@ -258,7 +423,9 @@ armor.set_player_armor = function(self, player) | ||||
| 			tex = tex:gsub(".png$", "") | ||||
| 			local prev = def.preview or tex.."_preview" | ||||
| 			prev = prev:gsub(".png$", "") | ||||
| 			texture = texture.."^"..tex..".png" | ||||
| 			if not transparent_armor then | ||||
| 				texture = texture.."^"..tex..".png" | ||||
| 			end | ||||
| 			preview = preview.."^"..prev..".png" | ||||
| 			state = state + stack:get_wear() | ||||
| 			count = count + 1 | ||||
| @@ -323,10 +490,13 @@ armor.set_player_armor = function(self, player) | ||||
| 		armor_monoid.monoid:add_change(player, change, "3d_armor:armor") | ||||
| 	else | ||||
| 		-- Preserve immortal group (damage disabled for player) | ||||
| 		local immortal = player:get_armor_groups().immortal | ||||
| 		local player_groups = player:get_armor_groups() | ||||
| 		local immortal = player_groups.immortal | ||||
| 		if immortal and immortal ~= 0 then | ||||
| 			groups.immortal = 1 | ||||
| 		end | ||||
| 		-- Preserve fall_damage_add_percent group (fall damage modifier) | ||||
| 		groups.fall_damage_add_percent = player_groups.fall_damage_add_percent | ||||
| 		player:set_armor_groups(groups) | ||||
| 	end | ||||
| 	if use_player_monoids then | ||||
| @@ -358,6 +528,13 @@ armor.set_player_armor = function(self, player) | ||||
| 	self:update_player_visuals(player) | ||||
| end | ||||
|  | ||||
| --- Action when armor is punched. | ||||
| -- | ||||
| --  @function armor:punch | ||||
| --  @tparam ObjectRef player Player wearing the armor. | ||||
| --  @tparam ObjectRef hitter Entity attacking player. | ||||
| --  @tparam[opt] int time_from_last_punch Time in seconds since last punch action. | ||||
| --  @tparam[opt] table tool_capabilities See `entity_damage_mechanism`. | ||||
| armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabilities) | ||||
| 	local name, armor_inv = self:get_valid_player(player, "[punch]") | ||||
| 	if not name then | ||||
| @@ -443,9 +620,19 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili | ||||
| 	self.def[name].count = count | ||||
| end | ||||
|  | ||||
| --- Action when armor is damaged. | ||||
| -- | ||||
| --  @function armor:damage | ||||
| --  @tparam ObjectRef player | ||||
| --  @tparam int index Inventory index where armor is equipped. | ||||
| --  @tparam ItemStack stack Armor item receiving damaged. | ||||
| --  @tparam int use Amount of wear to add to armor item. | ||||
| armor.damage = function(self, player, index, stack, use) | ||||
| 	local old_stack = ItemStack(stack) | ||||
| 	local worn_armor = armor:get_weared_armor_elements(player) | ||||
| 	if not worn_armor then | ||||
| 		return | ||||
| 	end | ||||
| 	local armor_worn_cnt = 0 | ||||
| 	for k,v in pairs(worn_armor) do | ||||
| 		armor_worn_cnt = armor_worn_cnt + 1 | ||||
| @@ -461,6 +648,11 @@ armor.damage = function(self, player, index, stack, use) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Get elements of equipped armor. | ||||
| -- | ||||
| --  @function armor:get_weared_armor_elements | ||||
| --  @tparam ObjectRef player | ||||
| --  @treturn table List of equipped armors. | ||||
| armor.get_weared_armor_elements = function(self, player) | ||||
|     local name, inv = self:get_valid_player(player, "[get_weared_armor]") | ||||
| 	local weared_armor = {} | ||||
| @@ -477,40 +669,81 @@ armor.get_weared_armor_elements = function(self, player) | ||||
| 	return weared_armor | ||||
| end | ||||
|  | ||||
| --- Equips a piece of armor to a player. | ||||
| -- | ||||
| --  @function armor:equip | ||||
| --  @tparam ObjectRef player Player to whom item is equipped. | ||||
| --  @tparam ItemStack itemstack Armor item to be equipped. | ||||
| --  @treturn ItemStack Leftover item stack. | ||||
| armor.equip = function(self, player, itemstack) | ||||
|     local name, armor_inv = self:get_valid_player(player, "[equip]") | ||||
|     local weared_armor = self:get_weared_armor_elements(player) | ||||
|     local armor_element = self:get_element(itemstack:get_name()) | ||||
| 	if name and armor_element then | ||||
| 		if weared_armor[armor_element] ~= nil then | ||||
| 			self:unequip(player, armor_element) | ||||
| 		local index | ||||
| 		for i=1, armor_inv:get_size("armor") do | ||||
| 			local stack = armor_inv:get_stack("armor", i) | ||||
| 			if self:get_element(stack:get_name()) == armor_element then | ||||
| 				--prevents equiping an armor that would unequip a cursed armor. | ||||
| 				if minetest.get_item_group(stack:get_name(), "cursed") ~= 0 then | ||||
| 					return itemstack | ||||
| 				end | ||||
| 				index = i | ||||
| 				self:unequip(player, armor_element) | ||||
| 				break | ||||
| 			elseif not index and stack:is_empty() then | ||||
| 				index = i | ||||
| 			end | ||||
| 		end | ||||
| 		armor_inv:add_item("armor", itemstack:take_item()) | ||||
| 		if not index then -- armor inventory is full with other armor elements | ||||
| 			return itemstack | ||||
| 		end | ||||
| 		local stack = itemstack:take_item() | ||||
| 		armor_inv:set_stack("armor", index, stack) | ||||
| 		self:run_callbacks("on_equip", player, index, stack) | ||||
| 		self:set_player_armor(player) | ||||
| 		self:save_armor_inventory(player) | ||||
| 	end | ||||
| 	return itemstack | ||||
| end | ||||
|  | ||||
| --- Unequips a piece of armor from a player. | ||||
| -- | ||||
| --  @function armor:unequip | ||||
| --  @tparam ObjectRef player Player from whom item is removed. | ||||
| --  @tparam string armor_element Armor type identifier associated with the item | ||||
| --  to be removed ("head", "torso", "hands", "shield", "legs", "feet", etc.). | ||||
| armor.unequip = function(self, player, armor_element) | ||||
|     local name, armor_inv = self:get_valid_player(player, "[unequip]") | ||||
| 	local weared_armor = self:get_weared_armor_elements(player) | ||||
| 	if not name or not weared_armor[armor_element] then | ||||
| 	if not name then | ||||
| 		return | ||||
| 	end | ||||
| 	local itemstack = armor_inv:remove_item("armor", ItemStack(weared_armor[armor_element])) | ||||
| 	minetest.after(0, function() | ||||
| 		local inv = player:get_inventory() | ||||
| 		if inv:room_for_item("main", itemstack) then | ||||
| 			inv:add_item("main", itemstack) | ||||
| 		else | ||||
| 			minetest.add_item(player:get_pos(), itemstack) | ||||
| 	for i=1, armor_inv:get_size("armor") do | ||||
| 		local stack = armor_inv:get_stack("armor", i) | ||||
| 		if self:get_element(stack:get_name()) == armor_element then | ||||
| 			armor_inv:set_stack("armor", i, "") | ||||
| 			minetest.after(0, function() | ||||
| 				local pplayer = minetest.get_player_by_name(name) | ||||
| 				if pplayer then -- player is still online | ||||
| 					local inv = pplayer:get_inventory() | ||||
| 					if inv:room_for_item("main", stack) then | ||||
| 						inv:add_item("main", stack) | ||||
| 					else | ||||
| 						minetest.add_item(pplayer:get_pos(), stack) | ||||
| 					end | ||||
| 				end | ||||
| 			end) | ||||
| 			self:run_callbacks("on_unequip", player, i, stack) | ||||
| 			self:set_player_armor(player) | ||||
| 			self:save_armor_inventory(player) | ||||
| 			return | ||||
| 		end | ||||
| 	end) | ||||
|     self:set_player_armor(player) | ||||
| 	self:save_armor_inventory(player) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Removes all armor worn by player. | ||||
| -- | ||||
| --  @function armor:remove_all | ||||
| --  @tparam ObjectRef player | ||||
| armor.remove_all = function(self, player) | ||||
|     local name, inv = self:get_valid_player(player, "[remove_all]") | ||||
| 	if not name then | ||||
| @@ -521,17 +754,28 @@ armor.remove_all = function(self, player) | ||||
| 	self:save_armor_inventory(player) | ||||
| end | ||||
|  | ||||
| local skin_mod | ||||
|  | ||||
| --- Retrieves player's current skin. | ||||
| -- | ||||
| --  @function armor:get_player_skin | ||||
| --  @tparam string name Player name. | ||||
| --  @treturn string Skin filename. | ||||
| armor.get_player_skin = function(self, name) | ||||
| 	if (self.skin_mod == "skins" or self.skin_mod == "simple_skins") and skins.skins[name] then | ||||
| 	if (skin_mod == "skins" or skin_mod == "simple_skins") and skins.skins[name] then | ||||
| 		return skins.skins[name]..".png" | ||||
| 	elseif self.skin_mod == "u_skins" and u_skins.u_skins[name] then | ||||
| 	elseif skin_mod == "u_skins" and u_skins.u_skins[name] then | ||||
| 		return u_skins.u_skins[name]..".png" | ||||
| 	elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then | ||||
| 	elseif skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then | ||||
| 		return wardrobe.playerSkins[name] | ||||
| 	end | ||||
| 	return armor.default_skin..".png" | ||||
| end | ||||
|  | ||||
| --- Updates skin. | ||||
| -- | ||||
| --  @function armor:update_skin | ||||
| --  @tparam string name Player name. | ||||
| armor.update_skin = function(self, name) | ||||
| 	minetest.after(0, function() | ||||
| 		local pplayer = minetest.get_player_by_name(name) | ||||
| @@ -542,10 +786,19 @@ armor.update_skin = function(self, name) | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| --- Adds preview for armor inventory. | ||||
| -- | ||||
| --  @function armor:add_preview | ||||
| --  @tparam string preview Preview image filename. | ||||
| armor.add_preview = function(self, preview) | ||||
| 	skin_previews[preview] = true | ||||
| end | ||||
|  | ||||
| --- Retrieves preview for armor inventory. | ||||
| -- | ||||
| --  @function armor:get_preview | ||||
| --  @tparam string name Player name. | ||||
| --  @treturn string Preview image filename. | ||||
| armor.get_preview = function(self, name) | ||||
| 	local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png") | ||||
| 	if skin_previews[preview] then | ||||
| @@ -554,10 +807,13 @@ armor.get_preview = function(self, name) | ||||
| 	return "character_preview.png" | ||||
| end | ||||
|  | ||||
| --- Retrieves armor formspec. | ||||
| -- | ||||
| --  @function armor:get_armor_formspec | ||||
| --  @tparam string name Player name. | ||||
| --  @tparam[opt] bool listring Use `listring` formspec element (default: `false`). | ||||
| --  @treturn string Formspec formatted string. | ||||
| armor.get_armor_formspec = function(self, name, listring) | ||||
| 	if armor.def[name].init_time == 0 then | ||||
| 		return "label[0,0;Armor not initialized!]" | ||||
| 	end | ||||
| 	local formspec = armor.formspec.. | ||||
| 		"list[detached:"..name.."_armor;armor;0,0.5;2,3;]" | ||||
| 	if listring == true then | ||||
| @@ -576,6 +832,11 @@ armor.get_armor_formspec = function(self, name, listring) | ||||
| 	return formspec | ||||
| end | ||||
|  | ||||
| --- Retrieves element. | ||||
| -- | ||||
| --  @function armor:get_element | ||||
| --  @tparam string item_name | ||||
| --  @return Armor element. | ||||
| armor.get_element = function(self, item_name) | ||||
| 	for _, element in pairs(armor.elements) do | ||||
| 		if minetest.get_item_group(item_name, "armor_"..element) > 0 then | ||||
| @@ -584,6 +845,11 @@ armor.get_element = function(self, item_name) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Serializes armor inventory. | ||||
| -- | ||||
| --  @function armor:serialize_inventory_list | ||||
| --  @tparam table list Inventory contents. | ||||
| --  @treturn string | ||||
| armor.serialize_inventory_list = function(self, list) | ||||
| 	local list_table = {} | ||||
| 	for _, stack in ipairs(list) do | ||||
| @@ -592,6 +858,11 @@ armor.serialize_inventory_list = function(self, list) | ||||
| 	return minetest.serialize(list_table) | ||||
| end | ||||
|  | ||||
| --- Deserializes armor inventory. | ||||
| -- | ||||
| --  @function armor:deserialize_inventory_list | ||||
| --  @tparam string list_string Serialized inventory contents. | ||||
| --  @treturn table | ||||
| armor.deserialize_inventory_list = function(self, list_string) | ||||
| 	local list_table = minetest.deserialize(list_string) | ||||
| 	local list = {} | ||||
| @@ -601,6 +872,11 @@ armor.deserialize_inventory_list = function(self, list_string) | ||||
| 	return list | ||||
| end | ||||
|  | ||||
| --- Loads armor inventory. | ||||
| -- | ||||
| --  @function armor:load_armor_inventory | ||||
| --  @tparam ObjectRef player | ||||
| --  @treturn bool | ||||
| armor.load_armor_inventory = function(self, player) | ||||
| 	local _, inv = self:get_valid_player(player, "[load_armor_inventory]") | ||||
| 	if inv then | ||||
| @@ -614,6 +890,12 @@ armor.load_armor_inventory = function(self, player) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Saves armor inventory. | ||||
| -- | ||||
| --  Inventory is stored in `PlayerMetaRef` string "3d\_armor\_inventory". | ||||
| -- | ||||
| --  @function armor:save_armor_inventory | ||||
| --  @tparam ObjectRef player | ||||
| armor.save_armor_inventory = function(self, player) | ||||
| 	local _, inv = self:get_valid_player(player, "[save_armor_inventory]") | ||||
| 	if inv then | ||||
| @@ -623,10 +905,22 @@ armor.save_armor_inventory = function(self, player) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Updates inventory. | ||||
| -- | ||||
| --  DEPRECATED: Legacy inventory support. | ||||
| -- | ||||
| --  @function armor:update_inventory | ||||
| --  @param player | ||||
| armor.update_inventory = function(self, player) | ||||
| 	-- DEPRECATED: Legacy inventory support | ||||
| end | ||||
|  | ||||
| --- Sets inventory stack. | ||||
| -- | ||||
| --  @function armor:set_inventory_stack | ||||
| --  @tparam ObjectRef player | ||||
| --  @tparam int i Armor inventory index. | ||||
| --  @tparam ItemStack stack Armor item. | ||||
| armor.set_inventory_stack = function(self, player, i, stack) | ||||
| 	local _, inv = self:get_valid_player(player, "[set_inventory_stack]") | ||||
| 	if inv then | ||||
| @@ -635,25 +929,42 @@ armor.set_inventory_stack = function(self, player, i, stack) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Checks for a player that can use armor. | ||||
| -- | ||||
| --  @function armor:get_valid_player | ||||
| --  @tparam ObjectRef player | ||||
| --  @tparam string msg Additional info for log messages. | ||||
| --  @treturn list Player name & armor inventory. | ||||
| --  @usage local name, inv = armor:get_valid_player(player, "[equip]") | ||||
| armor.get_valid_player = function(self, player, msg) | ||||
| 	msg = msg or "" | ||||
| 	if not player then | ||||
| 		minetest.log("warning", S("3d_armor: Player reference is nil @1", msg)) | ||||
| 		minetest.log("warning", ("3d_armor%s: Player reference is nil"):format(msg)) | ||||
| 		return | ||||
| 	end | ||||
| 	if type(player) ~= "userdata" then | ||||
| 		-- Fake player, fail silently | ||||
| 		return | ||||
| 	end | ||||
| 	local name = player:get_player_name() | ||||
| 	if not name then | ||||
| 		minetest.log("warning", S("3d_armor: Player name is nil @1", msg)) | ||||
| 		minetest.log("warning", ("3d_armor%s: Player name is nil"):format(msg)) | ||||
| 		return | ||||
| 	end | ||||
| 	local inv = minetest.get_inventory({type="detached", name=name.."_armor"}) | ||||
| 	if not inv then | ||||
| 		minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) | ||||
| 		-- This check may fail when called inside `on_joinplayer` | ||||
| 		-- in that case, the armor will be initialized/updated later on | ||||
| 		minetest.log("warning", ("3d_armor%s: Detached armor inventory is nil"):format(msg)) | ||||
| 		return | ||||
| 	end | ||||
| 	return name, inv | ||||
| end | ||||
|  | ||||
| --- Drops armor item at given position. | ||||
| -- | ||||
| --  @tparam vector pos | ||||
| --  @tparam ItemStack stack Armor item to be dropped. | ||||
| armor.drop_armor = function(pos, stack) | ||||
| 	local node = minetest.get_node_or_nil(pos) | ||||
| 	if node then | ||||
| @@ -663,3 +974,12 @@ armor.drop_armor = function(pos, stack) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| --- Allows skin mod to be set manually. | ||||
| -- | ||||
| --  Useful for skin mod forks that do not use the same name. | ||||
| -- | ||||
| --  @tparam string mod Name of skin mod. Recognized names are "simple\_skins", "u\_skins", & "wardrobe". | ||||
| armor.set_skin_mod = function(mod) | ||||
| 	skin_mod = mod | ||||
| end | ||||
|   | ||||
| @@ -15,6 +15,7 @@ ARMOR_MATERIALS = { | ||||
| 	gold = "default:gold_ingot", | ||||
| 	mithril = "moreores:mithril_ingot", | ||||
| 	crystal = "ethereal:crystal_ingot", | ||||
| 	nether = "nether:nether_ingot", | ||||
| } | ||||
|  | ||||
| -- Enable fire protection (defaults true if using ethereal mod) | ||||
| @@ -34,10 +35,6 @@ ARMOR_FIRE_NODES = { | ||||
| -- Increase this if you get initialization glitches when a player first joins. | ||||
| ARMOR_INIT_DELAY = 1 | ||||
|  | ||||
| -- Number of initialization attempts. | ||||
| -- Use in conjunction with ARMOR_INIT_DELAY if initialization problems persist. | ||||
| ARMOR_INIT_TIMES = 1 | ||||
|  | ||||
| -- Increase this if armor is not getting into bones due to server lag. | ||||
| ARMOR_BONES_DELAY = 1 | ||||
|  | ||||
|   | ||||
| @@ -1,372 +0,0 @@ | ||||
| -- support for i18n | ||||
| local S = armor.get_translator | ||||
|  | ||||
| armor:register_armor("3d_armor:helmet_admin", { | ||||
| 	description = S("Admin Helmet"), | ||||
| 	inventory_image = "3d_armor_inv_helmet_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| armor:register_armor("3d_armor:chestplate_admin", { | ||||
| 	description = S("Admin Chestplate"), | ||||
| 	inventory_image = "3d_armor_inv_chestplate_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_torso=1, armor_heal=100, armor_use=0, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| armor:register_armor("3d_armor:leggings_admin", { | ||||
| 	description = S("Admin Leggings"), | ||||
| 	inventory_image = "3d_armor_inv_leggings_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_legs=1, armor_heal=100, armor_use=0, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| armor:register_armor("3d_armor:boots_admin", { | ||||
| 	description = S("Admin Boots"), | ||||
| 	inventory_image = "3d_armor_inv_boots_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_feet=1, armor_heal=100, armor_use=0, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_alias("adminboots", "3d_armor:boots_admin") | ||||
| minetest.register_alias("adminhelmet", "3d_armor:helmet_admin") | ||||
| minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin") | ||||
| minetest.register_alias("adminleggings", "3d_armor:leggings_admin") | ||||
|  | ||||
| if armor.materials.wood then | ||||
| 	armor:register_armor("3d_armor:helmet_wood", { | ||||
| 		description = S("Wood Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_wood.png", | ||||
| 		groups = {armor_head=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| 		armor_groups = {fleshy=5}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_wood", { | ||||
| 		description = S("Wood Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_wood.png", | ||||
| 		groups = {armor_torso=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_wood", { | ||||
| 		description = S("Wood Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_wood.png", | ||||
| 		groups = {armor_legs=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_wood", { | ||||
| 		description = S("Wood Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_wood.png", | ||||
| 		armor_groups = {fleshy=5}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=1}, | ||||
| 		groups = {armor_feet=1, armor_heal=0, armor_use=2000, flammable=1}, | ||||
| 	}) | ||||
| 	local wood_armor_fuel = { | ||||
| 		helmet = 6, | ||||
| 		chestplate = 8, | ||||
| 		leggings = 7, | ||||
| 		boots = 5 | ||||
| 	} | ||||
| 	for armor, burn in pairs(wood_armor_fuel) do | ||||
| 		minetest.register_craft({ | ||||
| 			type = "fuel", | ||||
| 			recipe = "3d_armor:" .. armor .. "_wood", | ||||
| 			burntime = burn, | ||||
| 		}) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if armor.materials.cactus then | ||||
| 	armor:register_armor("3d_armor:helmet_cactus", { | ||||
| 		description = S("Cactus Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_cactus.png", | ||||
| 		groups = {armor_head=1, armor_heal=0, armor_use=1000}, | ||||
| 		armor_groups = {fleshy=5}, | ||||
| 		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_cactus", { | ||||
| 		description = S("Cactus Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_cactus.png", | ||||
| 		groups = {armor_torso=1, armor_heal=0, armor_use=1000}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_cactus", { | ||||
| 		description = S("Cactus Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_cactus.png", | ||||
| 		groups = {armor_legs=1, armor_heal=0, armor_use=1000}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_cactus", { | ||||
| 		description = S("Cactus Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_cactus.png", | ||||
| 		groups = {armor_feet=1, armor_heal=0, armor_use=1000}, | ||||
| 		armor_groups = {fleshy=5}, | ||||
| 		damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, | ||||
| 	}) | ||||
| 	local cactus_armor_fuel = { | ||||
| 		helmet = 14, | ||||
| 		chestplate = 16, | ||||
| 		leggings = 15, | ||||
| 		boots = 13 | ||||
| 	} | ||||
| 	for armor, burn in pairs(cactus_armor_fuel) do | ||||
| 		minetest.register_craft({ | ||||
| 			type = "fuel", | ||||
| 			recipe = "3d_armor:" .. armor .. "_cactus", | ||||
| 			burntime = burn, | ||||
| 		}) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if armor.materials.steel then | ||||
| 	armor:register_armor("3d_armor:helmet_steel", { | ||||
| 		description = S("Steel Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_steel.png", | ||||
| 		groups = {armor_head=1, armor_heal=0, armor_use=800, | ||||
| 			physics_speed=-0.01, physics_gravity=0.01}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_steel", { | ||||
| 		description = S("Steel Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_steel.png", | ||||
| 		groups = {armor_torso=1, armor_heal=0, armor_use=800, | ||||
| 			physics_speed=-0.04, physics_gravity=0.04}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_steel", { | ||||
| 		description = S("Steel Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_steel.png", | ||||
| 		groups = {armor_legs=1, armor_heal=0, armor_use=800, | ||||
| 			physics_speed=-0.03, physics_gravity=0.03}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_steel", { | ||||
| 		description = S("Steel Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_steel.png", | ||||
| 		groups = {armor_feet=1, armor_heal=0, armor_use=800, | ||||
| 			physics_speed=-0.01, physics_gravity=0.01}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if armor.materials.bronze then | ||||
| 	armor:register_armor("3d_armor:helmet_bronze", { | ||||
| 		description = S("Bronze Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_bronze.png", | ||||
| 		groups = {armor_head=1, armor_heal=6, armor_use=400, | ||||
| 			physics_speed=-0.01, physics_gravity=0.01}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_bronze", { | ||||
| 		description = S("Bronze Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_bronze.png", | ||||
| 		groups = {armor_torso=1, armor_heal=6, armor_use=400, | ||||
| 			physics_speed=-0.04, physics_gravity=0.04}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_bronze", { | ||||
| 		description = S("Bronze Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_bronze.png", | ||||
| 		groups = {armor_legs=1, armor_heal=6, armor_use=400, | ||||
| 			physics_speed=-0.03, physics_gravity=0.03}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_bronze", { | ||||
| 		description = S("Bronze Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_bronze.png", | ||||
| 		groups = {armor_feet=1, armor_heal=6, armor_use=400, | ||||
| 			physics_speed=-0.01, physics_gravity=0.01}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=3, snappy=2, choppy=2, crumbly=1, level=2}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if armor.materials.diamond then | ||||
| 	armor:register_armor("3d_armor:helmet_diamond", { | ||||
| 		description = S("Diamond Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_diamond.png", | ||||
| 		groups = {armor_head=1, armor_heal=12, armor_use=200}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_diamond", { | ||||
| 		description = S("Diamond Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_diamond.png", | ||||
| 		groups = {armor_torso=1, armor_heal=12, armor_use=200}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_diamond", { | ||||
| 		description = S("Diamond Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_diamond.png", | ||||
| 		groups = {armor_legs=1, armor_heal=12, armor_use=200}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_diamond", { | ||||
| 		description = S("Diamond Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_diamond.png", | ||||
| 		groups = {armor_feet=1, armor_heal=12, armor_use=200}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if armor.materials.gold then | ||||
| 	armor:register_armor("3d_armor:helmet_gold", { | ||||
| 		description = S("Gold Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_gold.png", | ||||
| 		groups = {armor_head=1, armor_heal=6, armor_use=300, | ||||
| 			physics_speed=-0.02, physics_gravity=0.02}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_gold", { | ||||
| 		description = S("Gold Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_gold.png", | ||||
| 		groups = {armor_torso=1, armor_heal=6, armor_use=300, | ||||
| 			physics_speed=-0.05, physics_gravity=0.05}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_gold", { | ||||
| 		description = S("Gold Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_gold.png", | ||||
| 		groups = {armor_legs=1, armor_heal=6, armor_use=300, | ||||
| 			physics_speed=-0.04, physics_gravity=0.04}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_gold", { | ||||
| 		description = S("Gold Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_gold.png", | ||||
| 		groups = {armor_feet=1, armor_heal=6, armor_use=300, | ||||
| 			physics_speed=-0.02, physics_gravity=0.02}, | ||||
| 		armor_groups = {fleshy=10}, | ||||
| 		damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if armor.materials.mithril then | ||||
| 	armor:register_armor("3d_armor:helmet_mithril", { | ||||
| 		description = S("Mithril Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_mithril.png", | ||||
| 		groups = {armor_head=1, armor_heal=12, armor_use=100}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_mithril", { | ||||
| 		description = S("Mithril Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_mithril.png", | ||||
| 		groups = {armor_torso=1, armor_heal=12, armor_use=100}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_mithril", { | ||||
| 		description = S("Mithril Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_mithril.png", | ||||
| 		groups = {armor_legs=1, armor_heal=12, armor_use=100}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_mithril", { | ||||
| 		description = S("Mithril Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_mithril.png", | ||||
| 		groups = {armor_feet=1, armor_heal=12, armor_use=100}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| if armor.materials.crystal then | ||||
| 	armor:register_armor("3d_armor:helmet_crystal", { | ||||
| 		description = S("Crystal Helmet"), | ||||
| 		inventory_image = "3d_armor_inv_helmet_crystal.png", | ||||
| 		groups = {armor_head=1, armor_heal=12, armor_use=100, armor_fire=1}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:chestplate_crystal", { | ||||
| 		description = S("Crystal Chestplate"), | ||||
| 		inventory_image = "3d_armor_inv_chestplate_crystal.png", | ||||
| 		groups = {armor_torso=1, armor_heal=12, armor_use=100, armor_fire=1}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:leggings_crystal", { | ||||
| 		description = S("Crystal Leggings"), | ||||
| 		inventory_image = "3d_armor_inv_leggings_crystal.png", | ||||
| 		groups = {armor_legs=1, armor_heal=12, armor_use=100, armor_fire=1}, | ||||
| 		armor_groups = {fleshy=20}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| 	armor:register_armor("3d_armor:boots_crystal", { | ||||
| 		description = S("Crystal Boots"), | ||||
| 		inventory_image = "3d_armor_inv_boots_crystal.png", | ||||
| 		groups = {armor_feet=1, armor_heal=12, armor_use=100, physics_speed=1, | ||||
| 				physics_jump=0.5, armor_fire=1}, | ||||
| 		armor_groups = {fleshy=15}, | ||||
| 		damage_groups = {cracky=2, snappy=1, level=3}, | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| for k, v in pairs(armor.materials) do | ||||
| 	minetest.register_craft({ | ||||
| 		output = "3d_armor:helmet_"..k, | ||||
| 		recipe = { | ||||
| 			{v, v, v}, | ||||
| 			{v, "", v}, | ||||
| 			{"", "", ""}, | ||||
| 		}, | ||||
| 	}) | ||||
| 	minetest.register_craft({ | ||||
| 		output = "3d_armor:chestplate_"..k, | ||||
| 		recipe = { | ||||
| 			{v, "", v}, | ||||
| 			{v, v, v}, | ||||
| 			{v, v, v}, | ||||
| 		}, | ||||
| 	}) | ||||
| 	minetest.register_craft({ | ||||
| 		output = "3d_armor:leggings_"..k, | ||||
| 		recipe = { | ||||
| 			{v, v, v}, | ||||
| 			{v, "", v}, | ||||
| 			{v, "", v}, | ||||
| 		}, | ||||
| 	}) | ||||
| 	minetest.register_craft({ | ||||
| 		output = "3d_armor:boots_"..k, | ||||
| 		recipe = { | ||||
| 			{v, "", v}, | ||||
| 			{v, "", v}, | ||||
| 		}, | ||||
| 	}) | ||||
| end | ||||
| @@ -19,6 +19,7 @@ Helmets: | ||||
| [3d_armor:helmet_gold] X = [default:gold_ingot] | ||||
| [3d_armor:helmet_mithril] X = [moreores:mithril_ingot] * | ||||
| [3d_armor:helmet_crystal] X = [ethereal:crystal_ingot] ** | ||||
| [3d_armor:helmet_nether] X = [ethereal:nether_ingot] ** | ||||
|  | ||||
| Chestplates: | ||||
|  | ||||
| @@ -38,6 +39,7 @@ Chestplates: | ||||
| [3d_armor:chestplate_gold] X = [default:gold_ingot] | ||||
| [3d_armor:chestplate_mithril] X = [moreores:mithril_ingot] * | ||||
| [3d_armor:chestplate_crystal] X = [ethereal:crystal_ingot] ** | ||||
| [3d_armor:chestplate_nether] X = [ethereal:nether_ingot] ** | ||||
|  | ||||
| Leggings: | ||||
|  | ||||
| @@ -57,6 +59,7 @@ Leggings: | ||||
| [3d_armor:leggings_gold] X = [default:gold_ingot] | ||||
| [3d_armor:leggings_mithril] X = [moreores:mithril_ingot] * | ||||
| [3d_armor:leggings_crystal] X = [ethereal:crystal_ingot] ** | ||||
| [3d_armor:leggings_nether] X = [ethereal:nether_ingot] ** | ||||
|  | ||||
| Boots: | ||||
|  | ||||
| @@ -74,6 +77,8 @@ Boots: | ||||
| [3d_armor:boots_gold] X = [default:gold_ingot] | ||||
| [3d_armor:boots_mithril] X = [moreores:mithril_ingot] * | ||||
| [3d_armor:boots_crystal] X = [ethereal:crystal_ingot] ** | ||||
| [3d_armor:boots_nether] X = [ethereal:nether_ingot] ** | ||||
|  | ||||
|  * Requires moreores mod by Calinou - https://forum.minetest.net/viewtopic.php?id=549 | ||||
| ** Requires ethereal mod by Chinchow & TenPlus1 - https://github.com/tenplus1/ethereal | ||||
| ** Requires nether mod - https://github.com/minetest-mods/nether.git | ||||
|   | ||||
| @@ -1,8 +0,0 @@ | ||||
| default | ||||
| player_monoids? | ||||
| armor_monoid? | ||||
| pova? | ||||
| fire? | ||||
| ethereal? | ||||
| bakedclay? | ||||
| moreores? | ||||
| @@ -1 +0,0 @@ | ||||
| Adds craftable armor that is visible to other players. | ||||
| @@ -2,7 +2,6 @@ local modname = minetest.get_current_modname() | ||||
| local modpath = minetest.get_modpath(modname) | ||||
| local worldpath = minetest.get_worldpath() | ||||
| local last_punch_time = {} | ||||
| local pending_players = {} | ||||
| local timer = 0 | ||||
|  | ||||
| dofile(modpath.."/api.lua") | ||||
| @@ -96,17 +95,10 @@ for _, mod in pairs(skin_mods) do | ||||
| 				armor:add_preview(fn) | ||||
| 			end | ||||
| 		end | ||||
| 		armor.skin_mod = mod | ||||
| 		armor.set_skin_mod(mod) | ||||
| 	end | ||||
| end | ||||
| if not minetest.get_modpath("moreores") then | ||||
| 	armor.materials.mithril = nil | ||||
| end | ||||
| if not minetest.get_modpath("ethereal") then | ||||
| 	armor.materials.crystal = nil | ||||
| end | ||||
|  | ||||
| dofile(modpath.."/armor.lua") | ||||
|  | ||||
| -- Armor Initialization | ||||
|  | ||||
| @@ -188,11 +180,7 @@ local function validate_armor_inventory(player) | ||||
| end | ||||
|  | ||||
| local function init_player_armor(initplayer) | ||||
| 	local name = initplayer:get_player_name() | ||||
| 	local pos = initplayer:get_pos() | ||||
| 	if not name or not pos then | ||||
| 		return false | ||||
| 	end | ||||
| 	local name = assert(initplayer:get_player_name()) | ||||
| 	local armor_inv = minetest.create_detached_inventory(name.."_armor", { | ||||
| 		on_put = function(inv, listname, index, stack, player) | ||||
| 			validate_armor_inventory(player) | ||||
| @@ -231,6 +219,11 @@ local function init_player_armor(initplayer) | ||||
| 			if player:get_player_name() ~= name then | ||||
| 				return 0 | ||||
| 			end | ||||
| 			--cursed items cannot be unequiped by the player | ||||
| 			local is_cursed = minetest.get_item_group(stack:get_name(), "cursed") ~= 0 | ||||
| 			if not minetest.is_creative_enabled(player) and is_cursed then | ||||
| 				return 0 | ||||
| 			end | ||||
| 			return stack:get_count() | ||||
| 		end, | ||||
| 		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) | ||||
| @@ -258,7 +251,6 @@ local function init_player_armor(initplayer) | ||||
| 		end | ||||
| 	end | ||||
| 	armor.def[name] = { | ||||
| 		init_time = minetest.get_gametime(), | ||||
| 		level = 0, | ||||
| 		state = 0, | ||||
| 		count = 0, | ||||
| @@ -276,8 +268,8 @@ local function init_player_armor(initplayer) | ||||
| 	local skin = armor:get_player_skin(name) | ||||
| 	armor.textures[name] = { | ||||
| 		skin = skin, | ||||
| 		armor = "3d_armor_trans.png", | ||||
| 		wielditem = "3d_armor_trans.png", | ||||
| 		armor = "blank.png", | ||||
| 		wielditem = "blank.png", | ||||
| 		preview = armor.default_skin.."_preview.png", | ||||
| 	} | ||||
| 	local texture_path = minetest.get_modpath("player_textures") | ||||
| @@ -291,26 +283,34 @@ local function init_player_armor(initplayer) | ||||
| 		end | ||||
| 	end | ||||
| 	armor:set_player_armor(initplayer) | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| -- Armor Player Model | ||||
|  | ||||
| default.player_register_model("3d_armor_character.b3d", { | ||||
| player_api.register_model("3d_armor_character.b3d", { | ||||
| 	animation_speed = 30, | ||||
| 	textures = { | ||||
| 		armor.default_skin..".png", | ||||
| 		"3d_armor_trans.png", | ||||
| 		"3d_armor_trans.png", | ||||
| 		"blank.png", | ||||
| 		"blank.png", | ||||
| 	}, | ||||
| 	animations = { | ||||
| 		stand = {x=0, y=79}, | ||||
| 		lay = {x=162, y=166}, | ||||
| 		lay = {x=162, y=166, eye_height = 0.3, override_local = true, | ||||
| 			collisionbox = {-0.6, 0.0, -0.6, 0.6, 0.3, 0.6}}, | ||||
| 		walk = {x=168, y=187}, | ||||
| 		mine = {x=189, y=198}, | ||||
| 		walk_mine = {x=200, y=219}, | ||||
| 		sit = {x=81, y=160}, | ||||
| 		sit = {x=81, y=160, eye_height = 0.8, override_local = true, | ||||
| 			collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.0, 0.3}}, | ||||
| 		-- compatibility w/ the emote mod | ||||
| 		wave = {x = 192, y = 196, override_local = true}, | ||||
| 		point = {x = 196, y = 196, override_local = true}, | ||||
| 		freeze = {x = 205, y = 205, override_local = true}, | ||||
| 	}, | ||||
| 	collisionbox = {-0.3, 0.0, -0.3, 0.3, 1.7, 0.3}, | ||||
| 	-- stepheight: use default | ||||
| 	eye_height = 1.47, | ||||
| }) | ||||
|  | ||||
| minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| @@ -327,15 +327,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_joinplayer(function(player) | ||||
| 	default.player_set_model(player, "3d_armor_character.b3d") | ||||
| 	local player_name = player:get_player_name() | ||||
|  | ||||
| 	minetest.after(0, function() | ||||
| 		local pplayer = minetest.get_player_by_name(player_name) | ||||
| 		if pplayer and init_player_armor(pplayer) == false then | ||||
| 			pending_players[pplayer] = 0 | ||||
| 		end | ||||
| 	end) | ||||
| 	player_api.set_model(player, "3d_armor_character.b3d") | ||||
| 	init_player_armor(player) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_leaveplayer(function(player) | ||||
| @@ -344,7 +337,6 @@ minetest.register_on_leaveplayer(function(player) | ||||
| 		armor.def[name] = nil | ||||
| 		armor.textures[name] = nil | ||||
| 	end | ||||
| 	pending_players[player] = nil | ||||
| end) | ||||
|  | ||||
| if armor.config.drop == true or armor.config.destroy == true then | ||||
| @@ -357,9 +349,12 @@ if armor.config.drop == true or armor.config.destroy == true then | ||||
| 		for i=1, armor_inv:get_size("armor") do | ||||
| 			local stack = armor_inv:get_stack("armor", i) | ||||
| 			if stack:get_count() > 0 then | ||||
| 				table.insert(drop, stack) | ||||
| 				armor:run_callbacks("on_unequip", player, i, stack) | ||||
| 				armor_inv:set_stack("armor", i, nil) | ||||
| 				--soulbound armors remain equipped after death | ||||
| 				if minetest.get_item_group(stack:get_name(), "soulbound") == 0 then | ||||
| 					table.insert(drop, stack) | ||||
| 					armor:run_callbacks("on_unequip", player, i, stack) | ||||
| 					armor_inv:set_stack("armor", i, nil) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		armor:save_armor_inventory(player) | ||||
| @@ -395,8 +390,8 @@ if armor.config.drop == true or armor.config.destroy == true then | ||||
| 			end) | ||||
| 		end | ||||
| 	end) | ||||
| else -- reset un-dropped armor and it's effects | ||||
| 	minetest.register_on_respawnplayer(function(player) | ||||
| 		-- reset un-dropped armor and it's effects | ||||
| 		armor:set_player_armor(player) | ||||
| 	end) | ||||
| end | ||||
| @@ -405,10 +400,14 @@ if armor.config.punch_damage == true then | ||||
| 	minetest.register_on_punchplayer(function(player, hitter, | ||||
| 			time_from_last_punch, tool_capabilities) | ||||
| 		local name = player:get_player_name() | ||||
| 		local hit_ip = hitter:is_player() | ||||
| 		if name and hit_ip and minetest.is_protected(player:get_pos(), "") then | ||||
| 			return | ||||
| 		elseif name then | ||||
| 		if hitter then | ||||
| 			local hit_ip = hitter:is_player() | ||||
| 			if name and hit_ip and minetest.is_protected(player:get_pos(), "") then | ||||
| 				return | ||||
| 			end | ||||
| 		end | ||||
|  | ||||
| 		if name then | ||||
| 			armor:punch(player, hitter, time_from_last_punch, tool_capabilities) | ||||
| 			last_punch_time[name] = minetest.get_gametime() | ||||
| 		end | ||||
| @@ -416,43 +415,53 @@ if armor.config.punch_damage == true then | ||||
| end | ||||
|  | ||||
| minetest.register_on_player_hpchange(function(player, hp_change, reason) | ||||
| 	if player and reason.type ~= "drown" and reason.hunger == nil | ||||
| 			and hp_change < 0 then | ||||
| 		local name = player:get_player_name() | ||||
| 		if name then | ||||
| 			local heal = armor.def[name].heal | ||||
| 			if heal >= math.random(100) then | ||||
| 				hp_change = 0 | ||||
| 			end | ||||
| 			-- check if armor damage was handled by fire or on_punchplayer | ||||
| 			local time = last_punch_time[name] or 0 | ||||
| 			if time == 0 or time + 1 < minetest.get_gametime() then | ||||
| 				armor:punch(player) | ||||
| 			end | ||||
| 	if not minetest.is_player(player) then | ||||
| 		return hp_change | ||||
| 	end | ||||
|  | ||||
| 	if reason.type == "drown" or reason.hunger or hp_change >= 0 then | ||||
| 		return hp_change | ||||
| 	end | ||||
|  | ||||
| 	local name = player:get_player_name() | ||||
| 	local properties = player:get_properties() | ||||
| 	local hp = player:get_hp() | ||||
| 	if hp + hp_change < properties.hp_max then | ||||
| 		local heal = armor.def[name].heal | ||||
| 		if heal >= math.random(100) then | ||||
| 			hp_change = 0 | ||||
| 		end | ||||
| 		-- check if armor damage was handled by fire or on_punchplayer | ||||
| 		local time = last_punch_time[name] or 0 | ||||
| 		if time == 0 or time + 1 < minetest.get_gametime() then | ||||
| 			armor:punch(player) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	return hp_change | ||||
| end, true) | ||||
|  | ||||
| minetest.register_globalstep(function(dtime) | ||||
| 	timer = timer + dtime | ||||
|  | ||||
| 	if armor.config.feather_fall == true then | ||||
| 		for _,player in pairs(minetest.get_connected_players()) do | ||||
| 			local name = player:get_player_name() | ||||
| 			if armor.def[name].feather > 0 then | ||||
| 				local vel_y = player:get_velocity().y | ||||
| 				if vel_y < -0.5 then | ||||
| 					vel_y = -(vel_y * 0.05) | ||||
| 					player:add_velocity({x = 0, y = vel_y, z = 0}) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	if timer <= armor.config.init_delay then | ||||
| 		return | ||||
| 	end | ||||
| 	timer = 0 | ||||
|  | ||||
| 	for player, count in pairs(pending_players) do | ||||
| 		local remove = init_player_armor(player) == true | ||||
| 		pending_players[player] = count + 1 | ||||
| 		if remove == false and count > armor.config.init_times then | ||||
| 			minetest.log("warning", S("3d_armor: Failed to initialize player")) | ||||
| 			remove = true | ||||
| 		end | ||||
| 		if remove == true then | ||||
| 			pending_players[player] = nil | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	-- water breathing protection, added by TenPlus1 | ||||
| 	if armor.config.water_protect == true then | ||||
| 		for _,player in pairs(minetest.get_connected_players()) do | ||||
| @@ -465,22 +474,14 @@ minetest.register_globalstep(function(dtime) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| -- Fire Protection, added by TenPlus1. | ||||
| if armor.config.fire_protect == true then | ||||
| 	-- override any hot nodes that do not already deal damage | ||||
| 	for _, row in pairs(armor.fire_nodes) do | ||||
| 		if minetest.registered_nodes[row[1]] then | ||||
| 			local damage = minetest.registered_nodes[row[1]].damage_per_second | ||||
| 			if not damage or damage == 0 then | ||||
| 				minetest.override_item(row[1], {damage_per_second = row[3]}) | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| else | ||||
| 	print ("[3d_armor] Fire Nodes disabled") | ||||
| end | ||||
|  | ||||
| if armor.config.fire_protect == true then | ||||
| 	-- make torches hurt | ||||
| 	minetest.override_item("default:torch", {damage_per_second = 1}) | ||||
| 	minetest.override_item("default:torch_wall", {damage_per_second = 1}) | ||||
| 	minetest.override_item("default:torch_ceiling", {damage_per_second = 1}) | ||||
|  | ||||
| 	-- check player damage for any hot nodes we may be protected against | ||||
| 	minetest.register_on_player_hpchange(function(player, hp_change, reason) | ||||
|  | ||||
| 		if reason.type == "node_damage" and reason.node then | ||||
| @@ -489,9 +490,7 @@ if armor.config.fire_protect == true then | ||||
| 				local name = player:get_player_name() | ||||
| 				for _,igniter in pairs(armor.fire_nodes) do | ||||
| 					if reason.node == igniter[1] then | ||||
| 						if armor.def[name].fire < igniter[2] then | ||||
| 							armor:punch(player, "fire") | ||||
| 						else | ||||
| 						if armor.def[name].fire >= igniter[2] then | ||||
| 							hp_change = 0 | ||||
| 						end | ||||
| 					end | ||||
|   | ||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								3d_armor/locale/3d_armor.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
| Radiation=Strahlung | ||||
| Level=Stufe | ||||
| Heal=Heilung | ||||
| Fire=Feuer | ||||
| Your @1 is almost broken!=@1 ist fast kaputt! | ||||
| Your @1 got destroyed!=@1 wurde zerstört! | ||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								3d_armor/locale/3d_armor.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
| Radiation=Radiado | ||||
| Level=Nivelo | ||||
| Heal=Blokŝanco | ||||
| Fire=Fajro | ||||
| Your @1 is almost broken!=Via @1 estas preskaŭ rompita! | ||||
| Your @1 got destroyed!=Via @1 detruiĝis! | ||||
| @@ -1,58 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: La armadura desconectada es nula @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: El nombre del jugador es nulo @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: La referencia del jugador es nula @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=Botas de admin | ||||
| Admin Chestplate=Peto de admin | ||||
| Admin Helmet=Casco de admin | ||||
| Admin Leggings=Grebas de admin | ||||
| Bronze Boots=Botas de bronce | ||||
| Bronze Chestplate=Peto de bronce | ||||
| Bronze Helmet=Casco de bronce | ||||
| Bronze Leggings=Grebas de bronce | ||||
| Cactus Boots=Botas de cactus | ||||
| Cactus Chestplate=Peto de cactus | ||||
| Cactus Helmet=Casco de cactus | ||||
| Cactus Leggings=Grebas de cactus | ||||
| Crystal Boots=Botas de cristal | ||||
| Crystal Chestplate=Peto de cristal | ||||
| Crystal Helmet=Casco de cristal | ||||
| Crystal Leggings=Grebas de cristal | ||||
| Diamond Boots=Botas de diamante | ||||
| Diamond Chestplate=Peto de diamante | ||||
| Diamond Helmet=Casco de diamante | ||||
| Diamond Leggings=Grebas de diamante | ||||
| Gold Boots=Botas de oro | ||||
| Gold Chestplate=Peto de oro | ||||
| Gold Helmet=Casco de oro | ||||
| Gold Leggings=Grebas de oro | ||||
| Mithril Boots=Botas de mitrilo | ||||
| Mithril Chestplate=Peto de mitrilo | ||||
| Mithril Helmet=Casco de mitrilo | ||||
| Mithril Leggings=Grebas de mitrilo | ||||
| Steel Boots=Botas de acero | ||||
| Steel Chestplate=Peto de acero | ||||
| Steel Helmet=Casco de acero | ||||
| Steel Leggings=Grebas de acero | ||||
| Wood Boots=Botas de madera | ||||
| Wood Chestplate=Peto de madera | ||||
| Wood Helmet=Casco de madera | ||||
| Wood Leggings=Grebas de madera | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: Fallo en la inicialización del jugador | ||||
| Fire=Fuego | ||||
| Heal=Salud | ||||
| Level=Nivel | ||||
| Radiation=Radiación | ||||
| Your @1 got destroyed!=¡Tu @1 fue destruído! | ||||
| Level=Nivel | ||||
| Heal=Salud | ||||
| Fire=Fuego | ||||
| Your @1 is almost broken!=¡Tu @1 esta a punto de romperse! | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nodos de fuego desabilitados | ||||
| Your @1 got destroyed!=¡Tu @1 fue destruído! | ||||
|   | ||||
| @@ -1,58 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor : Inventaire détaché pour l'armure non trouvé @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor : Nom du joueur non trouvé @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor : Référence au joueur non trouvée @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=Bottes d'admin | ||||
| Admin Chestplate=Cuirasse d'admin | ||||
| Admin Helmet=Casque d'admin | ||||
| Admin Leggings=Jambières d'admin | ||||
| Bronze Boots=Bottes en bronze | ||||
| Bronze Chestplate=Cuirasse en bronze | ||||
| Bronze Helmet=Casque en bronze | ||||
| Bronze Leggings=Jambières en bronze | ||||
| Cactus Boots=Bottes en cactus | ||||
| Cactus Chestplate=Cuirasse en cactus | ||||
| Cactus Helmet=Casque en cactus | ||||
| Cactus Leggings=Jambières en cactus | ||||
| Crystal Boots=Bottes en cristal | ||||
| Crystal Chestplate=Cuirasse en cristal | ||||
| Crystal Helmet=Casque en cristal | ||||
| Crystal Leggings=Jambières en cristal | ||||
| Diamond Boots=Bottes en diamant | ||||
| Diamond Chestplate=Cuirasse en diamant | ||||
| Diamond Helmet=Casque en diamant | ||||
| Diamond Leggings=Jambières en diamant | ||||
| Gold Boots=Bottes en or | ||||
| Gold Chestplate=Cuirasse en or | ||||
| Gold Helmet=Casque en or | ||||
| Gold Leggings=Jambières en or | ||||
| Mithril Boots=Bottes en mithril | ||||
| Mithril Chestplate=Cuirasse en mithril | ||||
| Mithril Helmet=Casque en mithril | ||||
| Mithril Leggings=Jambières en mithril | ||||
| Steel Boots=Bottes en acier | ||||
| Steel Chestplate=Cuirasse en acier | ||||
| Steel Helmet=Casque en acier | ||||
| Steel Leggings=Jambières en acier | ||||
| Wood Boots=Bottes en bois | ||||
| Wood Chestplate=Cuirasse en bois | ||||
| Wood Helmet=Casque en bois | ||||
| Wood Leggings=Jambières en bois | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor : Impossible d'initialiser le joueur | ||||
| Fire=Fire | ||||
| Heal=Soins | ||||
| Level=Niveau | ||||
| Radiation=Radiation | ||||
| Your @1 got destroyed!=Une partie de votre armure a été détruite : @1 ! | ||||
| Level=Niveau | ||||
| Heal=Soins | ||||
| Fire=Fire | ||||
| Your @1 is almost broken!=Une partie de votre armure est presque détruite : @1 ! | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nœuds de type feu désactivés | ||||
| Your @1 got destroyed!=Une partie de votre armure a été détruite : @1 ! | ||||
|   | ||||
| @@ -1,85 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: L'inventario separato dell'armatura è nullo @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: Il nome dell'utente è nullo @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: Il riferimento all'utente è nullo @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=Stivali dell'amministratrice/tore | ||||
| Admin Chestplate=Corazza dell'amministratrice/tore | ||||
| Admin Helmet=Elmo dell'amministratrice/tore | ||||
| Admin Leggings=Gambali dell'amministratrice/tore | ||||
| Bronze Boots=Stivali di bronzo | ||||
| Bronze Chestplate=Corazza di bronzo | ||||
| Bronze Helmet=Elmo di bronzo | ||||
| Bronze Leggings=Gambali di bronzo | ||||
| Cactus Boots=Stivali di cactus | ||||
| Cactus Chestplate=Corazza di cactus | ||||
| Cactus Helmet=Elmo di cactus | ||||
| Cactus Leggings=Gambali di cactus | ||||
| Crystal Boots=Stivali di cristallo | ||||
| Crystal Chestplate=Corazza di cristallo | ||||
| Crystal Helmet=Elmo di cristallo | ||||
| Crystal Leggings=Gambali di cristallo | ||||
| Diamond Boots=Stivali di diamante | ||||
| Diamond Chestplate=Corazza di diamante | ||||
| Diamond Helmet=Elmo di diamante | ||||
| Diamond Leggings=Gambali di diamante | ||||
| Gold Boots=Stivali d'oro | ||||
| Gold Chestplate=Corazza d'oro | ||||
| Gold Helmet=Elmo d'oro | ||||
| Gold Leggings=Gambali d'oro | ||||
| Mithril Boots=Stivali di mithril | ||||
| Mithril Chestplate=Corazza di mithril | ||||
| Mithril Helmet=Elmo di mithril | ||||
| Mithril Leggings=Gambali di mithril | ||||
| Steel Boots=Stivali d'acciaio | ||||
| Steel Chestplate=Corazza d'acciaio | ||||
| Steel Helmet=Elmo d'acciaio | ||||
| Steel Leggings=Gambali d'acciaio | ||||
| Wood Boots=Stivali di legno | ||||
| Wood Chestplate=Corazza di legno | ||||
| Wood Helmet=Elmo di legno | ||||
| Wood Leggings=Gambali di legno | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: Inizializzazione dell'utente fallita | ||||
| Fire=Fuoco | ||||
| Heal=Guarigione | ||||
| Level=Livello | ||||
| Radiation=Radiazione | ||||
| Your @1 got destroyed!=@1 in frantumi! | ||||
| Level=Livello | ||||
| Heal=Guarigione | ||||
| Fire=Fuoco | ||||
| Your @1 is almost broken!=@1 quasi in frantumi! | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nodi fuoco disabilitati | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod caricata ma inutilizzata. | ||||
| Back=Indietro | ||||
| Armor=Armatura | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod caricata ma inutilizzata. | ||||
| Armor stand top=Parte superiore del supporto per armatura | ||||
| Armor stand=Supporto per armatura | ||||
| Armor Stand=Supporto per armatura | ||||
| Locked Armor stand=Supporto per armatura chiuso a chiave | ||||
| Armor Stand (owned by @1)=Supporto per armatura (di proprietà di @1) | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod caricata ma inutilizzata. | ||||
| 3d Armor=Armatura 3D | ||||
| Armor not initialized!=Armatura non inizializzata! | ||||
| Admin Shield=Scudo dell'amministratrice/tore | ||||
| Wooden Shield=Scudo di legno | ||||
| Enhanced Wood Shield=Scudo di legno migliorato | ||||
| Cactus Shield=Scudo di cactus | ||||
| Enhanced Cactus Shield=Scudo di cactus migliorato | ||||
| Steel Shield=Scudo d'acciaio | ||||
| Bronze Shield=Scudo di bronzo | ||||
| Diamond Shield=Scudo di diamante | ||||
| Gold Shield=Scudo d'oro | ||||
| Mithril Shield=Scudo di mithril | ||||
| Crystal Shield=Scudo di cristallo | ||||
| Your @1 got destroyed!=@1 in frantumi! | ||||
|   | ||||
| @@ -1,85 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: Inventori perisai terpisah tiada nilai @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: Nama pemain tiada nilai @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: Rujukan pemain tiada nilai @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=But Pentadbir | ||||
| Admin Chestplate=Perisai Dada Pentadbir | ||||
| Admin Helmet=Helmet Pentadbir | ||||
| Admin Leggings=Perisai Kaki Pentadbir | ||||
| Bronze Boots=But Gangsa | ||||
| Bronze Chestplate=Perisai Dada Gangsa | ||||
| Bronze Helmet=Helmet Gangsa | ||||
| Bronze Leggings=Perisai Kaki Gangsa | ||||
| Cactus Boots=But Kaktus | ||||
| Cactus Chestplate=Perisai Dada Kaktus | ||||
| Cactus Helmet=Helmet Kaktus | ||||
| Cactus Leggings=Perisai Kaki Kaktus | ||||
| Crystal Boots=But Kristal | ||||
| Crystal Chestplate=Perisai Dada Kristal | ||||
| Crystal Helmet=Helmet Kristal | ||||
| Crystal Leggings=Perisai Kaki Kristal | ||||
| Diamond Boots=But Intan | ||||
| Diamond Chestplate=Perisai Dada Intan | ||||
| Diamond Helmet=Helmet Intan | ||||
| Diamond Leggings=Perisai Kaki Intan | ||||
| Gold Boots=But Emas | ||||
| Gold Chestplate=Perisai Dada Emas | ||||
| Gold Helmet=Helmet Emas | ||||
| Gold Leggings=Perisai Kaki Emas | ||||
| Mithril Boots=But Mithril | ||||
| Mithril Chestplate=Perisai Dada Mithril | ||||
| Mithril Helmet=Helmet Mithril | ||||
| Mithril Leggings=Perisai Kaki Mithril | ||||
| Steel Boots=But Keluli | ||||
| Steel Chestplate=Perisai Dada Keluli | ||||
| Steel Helmet=Helmet Keluli | ||||
| Steel Leggings=Perisai Kaki Keluli | ||||
| Wood Boots=But Kayu | ||||
| Wood Chestplate=Perisai Dada Kayu | ||||
| Wood Helmet=Helmet Kayu | ||||
| Wood Leggings=Perisai Kaki Kayu | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: Gagal mengasalkan pemain | ||||
| Fire=Api | ||||
| Heal=Pulih | ||||
| Level=Tahap | ||||
| Radiation=Radiasi | ||||
| Your @1 got destroyed!=@1 anda telah musnah! | ||||
| Level=Tahap | ||||
| Heal=Pulih | ||||
| Fire=Api | ||||
| Your @1 is almost broken!= | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nod-nod Api dilumpuhkan | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mods dimuatkan tetapi tidak digunakan. | ||||
| Back=Kembali | ||||
| Armor=Perisai | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan. | ||||
| Armor stand top=Bhg atas dirian perisai | ||||
| Armor stand=Dirian perisai | ||||
| Armor Stand=Dirian Perisai | ||||
| Locked Armor stand=Dirian perisai Berkunci | ||||
| Armor Stand (owned by @1)=Dirian Perisai (milik @1) | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mods dimuatkan tetapi tidak digunakan. | ||||
| 3d Armor=Perisai 3d | ||||
| Armor not initialized!=Perisai tidak diasalkan! | ||||
| Admin Shield=Perisai Pegang Pentadbir | ||||
| Wooden Shield=Perisai Pegang Kayu | ||||
| Enhanced Wood Shield=Perisai Pegang Kayu Kukuh | ||||
| Cactus Shield=Perisai Pegang Kaktus | ||||
| Enhanced Cactus Shield=Perisai Pegang Kaktus Kukuh | ||||
| Steel Shield=Perisai Pegang Keluli | ||||
| Bronze Shield=Perisai Pegang Gangsa | ||||
| Diamond Shield=Perisai Pegang Intan | ||||
| Gold Shield=Perisai Pegang Emas | ||||
| Mithril Shield=Perisai Pegang Mithril | ||||
| Crystal Shield=Perisai Pegang Kristal | ||||
| Your @1 got destroyed!=@1 anda telah musnah! | ||||
|   | ||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.pl.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								3d_armor/locale/3d_armor.pl.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
| Radiation=Promieniowanie | ||||
| Level=Poziom | ||||
| Heal=Uzdrawianie | ||||
| Fire=Ogień | ||||
| Your @1 is almost broken!=Twój @1 jest prawie zepsuty! | ||||
| Your @1 got destroyed!=Twój @1 został zniszczony! | ||||
| @@ -1,85 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: Inventario avulso de armadura é nulo @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: Nome de jogador é nulo @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: Referência Jogador é nula @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=Botas de Administrador | ||||
| Admin Chestplate=Peitoral de Administrador | ||||
| Admin Helmet=Capacete de Administrador | ||||
| Admin Leggings=Calças de Administrador | ||||
| Bronze Boots=Botas de Bronze | ||||
| Bronze Chestplate=Peitoral de Bronze | ||||
| Bronze Helmet=Capacete de Bronze | ||||
| Bronze Leggings=Calças de Bronze | ||||
| Cactus Boots=Botas de Madeira | ||||
| Cactus Chestplate=Peitoral de Cacto | ||||
| Cactus Helmet=Capacete de Cacto | ||||
| Cactus Leggings=Calças de Cacto | ||||
| Crystal Boots=Botas de Cristal | ||||
| Crystal Chestplate=Peitoral de Cristal | ||||
| Crystal Helmet=Capacete de Cristal | ||||
| Crystal Leggings=Calças de Cristal | ||||
| Diamond Boots=Botas de Diamante | ||||
| Diamond Chestplate=Peitoral de Diamante | ||||
| Diamond Helmet=Capacete de Diamante | ||||
| Diamond Leggings=Calças de Diamante | ||||
| Gold Boots=Botas de Ouro | ||||
| Gold Chestplate=Peitoral de Ouro | ||||
| Gold Helmet=Capacete de Ouro | ||||
| Gold Leggings=Calças de Ouro | ||||
| Mithril Boots=Botas de Mithril | ||||
| Mithril Chestplate=Peitoral de Mithril | ||||
| Mithril Helmet=Capacete de Mithril | ||||
| Mithril Leggings=Calças de Mithril | ||||
| Steel Boots=Botas de Aço | ||||
| Steel Chestplate=Peitoral de Aço | ||||
| Steel Helmet=Capacete de Aço | ||||
| Steel Leggings=Calças de Aço | ||||
| Wood Boots=Botas de Madeira | ||||
| Wood Chestplate=Peitoral de Madeira | ||||
| Wood Helmet=Capacete de Madeira | ||||
| Wood Leggings=Calças de Madeira | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: Falha ao inicializar jogador | ||||
| Fire=Fogo | ||||
| Heal=Saúde | ||||
| Level=Nível | ||||
| Radiation=Radiação | ||||
| Your @1 got destroyed!=@1 foi destruído(a)! | ||||
| Level=Nível | ||||
| Heal=Saúde | ||||
| Fire=Fogo | ||||
| Your @1 is almost broken!= | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nodes de gofo desabilitados | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod carregado mas inoperante. | ||||
| Back=Voltar | ||||
| Armor=Armadura | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod carregado mas inoperante. | ||||
| Armor stand top=Topo de estande de armadura | ||||
| Armor stand=Estande de armadura | ||||
| Armor Stand=Estande de Armadura | ||||
| Locked Armor stand=Estande de Armadura Trancada | ||||
| Armor Stand (owned by @1)=Estande de Armadura (pertente a @1) | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod carregado mas inoperante. | ||||
| 3d Armor=3d Armor | ||||
| Armor not initialized!=Armadura não inicializada! | ||||
| Admin Shield=Escudo de Administrador | ||||
| Wooden Shield=Escudo de Madeira | ||||
| Enhanced Wood Shield=Escudo de Madeira Melhorado | ||||
| Cactus Shield=Escudo de Cacto | ||||
| Enhanced Cactus Shield=Escudo de Cacto Melhorado | ||||
| Steel Shield=Escudo de Aço | ||||
| Bronze Shield=Escudo de Bronze | ||||
| Diamond Shield=Escudo de Diamante | ||||
| Gold Shield=Escudo de Ouro | ||||
| Mithril Shield=Escudo de Mithril | ||||
| Crystal Shield=Escudo de Cristal | ||||
| Your @1 got destroyed!=@1 foi destruído(a)! | ||||
|   | ||||
| @@ -1,85 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: Inventario avulso de armadura é nulo @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: Nome de jogador é nulo @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: Referência Jogador é nula @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=Botas de Administrador | ||||
| Admin Chestplate=Peitoral de Administrador | ||||
| Admin Helmet=Capacete de Administrador | ||||
| Admin Leggings=Calças de Administrador | ||||
| Bronze Boots=Botas de Bronze | ||||
| Bronze Chestplate=Peitoral de Bronze | ||||
| Bronze Helmet=Capacete de Bronze | ||||
| Bronze Leggings=Calças de Bronze | ||||
| Cactus Boots=Botas de Madeira | ||||
| Cactus Chestplate=Peitoral de Cacto | ||||
| Cactus Helmet=Capacete de Cacto | ||||
| Cactus Leggings=Calças de Cacto | ||||
| Crystal Boots=Botas de Cristal | ||||
| Crystal Chestplate=Peitoral de Cristal | ||||
| Crystal Helmet=Capacete de Cristal | ||||
| Crystal Leggings=Calças de Cristal | ||||
| Diamond Boots=Botas de Diamante | ||||
| Diamond Chestplate=Peitoral de Diamante | ||||
| Diamond Helmet=Capacete de Diamante | ||||
| Diamond Leggings=Calças de Diamante | ||||
| Gold Boots=Botas de Ouro | ||||
| Gold Chestplate=Peitoral de Ouro | ||||
| Gold Helmet=Capacete de Ouro | ||||
| Gold Leggings=Calças de Ouro | ||||
| Mithril Boots=Botas de Mithril | ||||
| Mithril Chestplate=Peitoral de Mithril | ||||
| Mithril Helmet=Capacete de Mithril | ||||
| Mithril Leggings=Calças de Mithril | ||||
| Steel Boots=Botas de Aço | ||||
| Steel Chestplate=Peitoral de Aço | ||||
| Steel Helmet=Capacete de Aço | ||||
| Steel Leggings=Calças de Aço | ||||
| Wood Boots=Botas de Madeira | ||||
| Wood Chestplate=Peitoral de Madeira | ||||
| Wood Helmet=Capacete de Madeira | ||||
| Wood Leggings=Calças de Madeira | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: Falha ao inicializar jogador | ||||
| Fire=Fogo | ||||
| Heal=Saúde | ||||
| Level=Nível | ||||
| Radiation=Radiação | ||||
| Your @1 got destroyed!=@1 foi destruído(a)! | ||||
| Level=Nível | ||||
| Heal=Saúde | ||||
| Fire=Fogo | ||||
| Your @1 is almost broken!= | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] Nodes de gofo desabilitados | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip: Mod carregado mas inoperante. | ||||
| Back=Voltar | ||||
| Armor=Armadura | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: Mod carregado mas inoperante. | ||||
| Armor stand top=Topo de estande de armadura | ||||
| Armor stand=Estande de armadura | ||||
| Armor Stand=Estande de Armadura | ||||
| Locked Armor stand=Estande de Armadura Trancada | ||||
| Armor Stand (owned by @1)=Estande de Armadura (pertente a @1) | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui: Mod carregado mas inoperante. | ||||
| 3d Armor=3d Armor | ||||
| Armor not initialized!=Armadura não inicializada! | ||||
| Admin Shield=Escudo de Administrador | ||||
| Wooden Shield=Escudo de Madeira | ||||
| Enhanced Wood Shield=Escudo de Madeira Melhorado | ||||
| Cactus Shield=Escudo de Cacto | ||||
| Enhanced Cactus Shield=Escudo de Cacto Melhorado | ||||
| Steel Shield=Escudo de Aço | ||||
| Bronze Shield=Escudo de Bronze | ||||
| Diamond Shield=Escudo de Diamante | ||||
| Gold Shield=Escudo de Ouro | ||||
| Mithril Shield=Escudo de Mithril | ||||
| Crystal Shield=Escudo de Cristal | ||||
| Your @1 got destroyed!=@1 foi destruído(a)! | ||||
|   | ||||
| @@ -1,85 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1=3d_armor: Отдельный инвентарь брони является nil @1 | ||||
| 3d_armor: Player name is nil @1=3d_armor: Имя игрока является nil @1 | ||||
| 3d_armor: Player reference is nil @1=3d_armor: Ссылка игрока является nil @1 | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots=ботинки админа | ||||
| Admin Chestplate=бронежилет админа | ||||
| Admin Helmet=шлем админа | ||||
| Admin Leggings=гамаши админа | ||||
| Bronze Boots=бронзовые ботинки | ||||
| Bronze Chestplate=бронзовый бронежилет | ||||
| Bronze Helmet=бронзовый шлем | ||||
| Bronze Leggings=бронзовые гамаши | ||||
| Cactus Boots=кактусовые ботинки | ||||
| Cactus Chestplate=кактусовый бронежилет | ||||
| Cactus Helmet=кактусовый шлем | ||||
| Cactus Leggings=кактусовые гамаши | ||||
| Crystal Boots=кристалловые ботинки | ||||
| Crystal Chestplate=кристалловый бронежилет | ||||
| Crystal Helmet=кристалловый шлем | ||||
| Crystal Leggings=кристалловые гамаши | ||||
| Diamond Boots=алмазные ботинки | ||||
| Diamond Chestplate=алмазный бронежилет | ||||
| Diamond Helmet=алмазный шлем | ||||
| Diamond Leggings=алмазные гамаши | ||||
| Gold Boots=золотые ботинки | ||||
| Gold Chestplate=золотой бронежилет | ||||
| Gold Helmet=золотой шлем | ||||
| Gold Leggings=золотые гамаши | ||||
| Mithril Boots=мифриловые ботинки | ||||
| Mithril Chestplate=мифриловый бронежилет | ||||
| Mithril Helmet=мифриловый шлем | ||||
| Mithril Leggings=мифриловые гамаши | ||||
| Steel Boots=стальные ботинки | ||||
| Steel Chestplate=стальной бронежилет | ||||
| Steel Helmet=стальной шлем | ||||
| Steel Leggings=стальные гамаши | ||||
| Wood Boots=деревянные ботинки | ||||
| Wood Chestplate=деревянный бронежилет | ||||
| Wood Helmet=деревянный шлем | ||||
| Wood Leggings=деревянные гамаши | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player=3d_armor: не смог подготовить игрока | ||||
| Fire=огонь | ||||
| Heal=исцеление | ||||
| Level=уровень | ||||
| Radiation=излучение | ||||
| Your @1 got destroyed!=твой(и) @1 был(и) разрушен(ы)! | ||||
| Your @1 is almost broken!= | ||||
| [3d_armor] Fire Nodes disabled=[3d_armor] блоки огня отключены | ||||
|  | ||||
|  | ||||
| ##### not used anymore ##### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip: мод загружен но не используется. | ||||
| Back=назад | ||||
| Armor=бронь | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv: мод загружен но не используется. | ||||
| Armor stand top=стойка для брони (верх) | ||||
| Armor stand=стойка для брони | ||||
| Armor Stand=стойка для брони | ||||
| Locked Armor stand=защищенная стойка для брони | ||||
| Armor Stand (owned by @1)=стойка для брони (принадлежит @1) | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui: мод загружен но не используется. | ||||
| 3d Armor=3D бронь | ||||
| Armor not initialized!=бронь не подготовлена! | ||||
| Admin Shield=щит админа | ||||
| Wooden Shield=деревянный щит | ||||
| Enhanced Wood Shield=улучшенный деревянный щит | ||||
| Cactus Shield=кактусный щит | ||||
| Enhanced Cactus Shield=улучшенный кактусный щит | ||||
| Steel Shield=стальной щит | ||||
| Bronze Shield=бронзовый щит | ||||
| Diamond Shield=алмазный щит | ||||
| Gold Shield=золотой щит | ||||
| Mithril Shield=мифриловый щит | ||||
| Crystal Shield=кристалловый щит | ||||
| Radiation=Излучение | ||||
| Level=Уровень | ||||
| Heal=Исцеление | ||||
| Fire=Пламя | ||||
| Your @1 is almost broken!=Ваш предмет «@1» почти сломан! | ||||
| Your @1 got destroyed!=Ваш предмет «@1» был уничтожен! | ||||
|   | ||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								3d_armor/locale/3d_armor.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
| Radiation=Strålning | ||||
| Level=Nivå | ||||
| Heal=Läkning | ||||
| Fire=Eld | ||||
| Your @1 is almost broken!=Din @1 är nästan förstörd! | ||||
| Your @1 got destroyed!=Din @1 blev förstörd! | ||||
							
								
								
									
										7
									
								
								3d_armor/locale/3d_armor.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								3d_armor/locale/3d_armor.uk.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
| Radiation=Радіація | ||||
| Level=Рівень | ||||
| Heal=Зцілення | ||||
| Fire=Вогонь | ||||
| Your @1 is almost broken!=Ваш @1 майже зламаний! | ||||
| Your @1 got destroyed!=Ваш(і) @1 був(ли) зламаний(і)! | ||||
| @@ -1,58 +1,7 @@ | ||||
| # textdomain: 3d_armor | ||||
|  | ||||
|  | ||||
| ### api.lua ### | ||||
|  | ||||
| 3d_armor: Detached armor inventory is nil @1= | ||||
| 3d_armor: Player name is nil @1= | ||||
| 3d_armor: Player reference is nil @1= | ||||
|  | ||||
| ### armor.lua ### | ||||
|  | ||||
| Admin Boots= | ||||
| Admin Chestplate= | ||||
| Admin Helmet= | ||||
| Admin Leggings= | ||||
| Bronze Boots= | ||||
| Bronze Chestplate= | ||||
| Bronze Helmet= | ||||
| Bronze Leggings= | ||||
| Cactus Boots= | ||||
| Cactus Chestplate= | ||||
| Cactus Helmet= | ||||
| Cactus Leggings= | ||||
| Crystal Boots= | ||||
| Crystal Chestplate= | ||||
| Crystal Helmet= | ||||
| Crystal Leggings= | ||||
| Diamond Boots= | ||||
| Diamond Chestplate= | ||||
| Diamond Helmet= | ||||
| Diamond Leggings= | ||||
| Gold Boots= | ||||
| Gold Chestplate= | ||||
| Gold Helmet= | ||||
| Gold Leggings= | ||||
| Mithril Boots= | ||||
| Mithril Chestplate= | ||||
| Mithril Helmet= | ||||
| Mithril Leggings= | ||||
| Steel Boots= | ||||
| Steel Chestplate= | ||||
| Steel Helmet= | ||||
| Steel Leggings= | ||||
| Wood Boots= | ||||
| Wood Chestplate= | ||||
| Wood Helmet= | ||||
| Wood Leggings= | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor: Failed to initialize player= | ||||
| Fire= | ||||
| Heal= | ||||
| Level= | ||||
| Radiation= | ||||
| Your @1 got destroyed!= | ||||
| Level= | ||||
| Heal= | ||||
| Fire= | ||||
| Your @1 is almost broken!= | ||||
| [3d_armor] Fire Nodes disabled= | ||||
| Your @1 got destroyed!= | ||||
|   | ||||
| @@ -1,4 +1,5 @@ | ||||
| name = 3d_armor | ||||
| depends = default | ||||
| optional_depends = player_monoids, armor_monoid, pova, fire, ethereal, bakedclay, moreores | ||||
| depends = default, player_api | ||||
| optional_depends = player_monoids, armor_monoid, pova, moreores | ||||
| description = Adds craftable armor that is visible to other players. | ||||
| min_minetest_version = 5.0 | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 274 B | 
| @@ -1,44 +0,0 @@ | ||||
| 3d_armor/textures/3d_armor_helmet_wood.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_wood.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_wood.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_wood.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_cactus.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_cactus.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_cactus.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_cactus.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_steel.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_steel.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_steel.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_steel.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_bronze.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_bronze.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_bronze.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_bronze.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_gold.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_gold.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_gold.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_gold.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_diamond.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_diamond.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_diamond.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_diamond.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_mithril.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_mithril.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_mithril.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_mithril.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_crystal.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_crystal.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_crystal.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_crystal.png:feet | ||||
|  | ||||
| 3d_armor/textures/3d_armor_helmet_admin.png:head | ||||
| 3d_armor/textures/3d_armor_chestplate_admin.png:torso | ||||
| 3d_armor/textures/3d_armor_leggings_admin.png:legs | ||||
| 3d_armor/textures/3d_armor_boots_admin.png:feet | ||||
| @@ -1,18 +0,0 @@ | ||||
| [mod] 3d Armor integration to inventory plus [3d_armor_ip] | ||||
| ========================================================== | ||||
|  | ||||
| Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU Lesser General Public License as published by | ||||
| the Free Software Foundation; either version 2.1 of the License, or | ||||
| (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Lesser General Public License for more details. | ||||
|  | ||||
| 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. | ||||
| @@ -1,2 +0,0 @@ | ||||
| 3d_armor | ||||
| inventory_plus? | ||||
| @@ -1 +0,0 @@ | ||||
| Adds 3d_armor page to the inventory plus. | ||||
| @@ -3,7 +3,7 @@ local S = minetest.get_translator(minetest.get_current_modname()) | ||||
| local F = minetest.formspec_escape | ||||
|  | ||||
| if not minetest.global_exists("inventory_plus") then | ||||
| 	minetest.log("warning", S("3d_armor_ip: Mod loaded but unused.")) | ||||
| 	minetest.log("warning", "3d_armor_ip: Mod loaded but unused.") | ||||
| 	return | ||||
| end | ||||
|  | ||||
|   | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Zurück | ||||
| Armor=Rüstung | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Dorso | ||||
| Armor=Armaĵo | ||||
| @@ -1,8 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.=3d_armor_ip : Mod chargé mais inutilisé. | ||||
| Armor=Armure | ||||
| Back=Retour | ||||
| Armor=Armure | ||||
|   | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Voltar | ||||
| Armor=Armadura | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.ru.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Назад | ||||
| Armor=Броня | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Tillbaka | ||||
| Armor=Rustning | ||||
							
								
								
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								3d_armor_ip/locale/3d_armor_ip.uk.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
| Back=Назад | ||||
| Armor=Броня | ||||
| @@ -1,8 +1,3 @@ | ||||
| # textdomain: 3d_armor_ip | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor_ip: Mod loaded but unused.= | ||||
| Armor= | ||||
| Back= | ||||
| Armor= | ||||
|   | ||||
| @@ -1,18 +0,0 @@ | ||||
| [mod] 3d Armor sfinv integration [3d_armor_sfinv] | ||||
| ================================================= | ||||
|  | ||||
| Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU Lesser General Public License as published by | ||||
| the Free Software Foundation; either version 2.1 of the License, or | ||||
| (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Lesser General Public License for more details. | ||||
|  | ||||
| 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. | ||||
| @@ -1,2 +0,0 @@ | ||||
| 3d_armor | ||||
| sfinv? | ||||
| @@ -1 +0,0 @@ | ||||
| Adds 3d_armor page to the sfinv inventory. | ||||
| @@ -2,7 +2,7 @@ | ||||
| local S = minetest.get_translator(minetest.get_current_modname()) | ||||
|  | ||||
| if not minetest.global_exists("sfinv") then | ||||
| 	minetest.log("warning", S("3d_armor_sfinv: Mod loaded but unused.")) | ||||
| 	minetest.log("warning", "3d_armor_sfinv: Mod loaded but unused.") | ||||
| 	return | ||||
| end | ||||
|  | ||||
| @@ -15,7 +15,7 @@ sfinv.register_page("3d_armor:armor", { | ||||
| 	end | ||||
| }) | ||||
| armor:register_on_update(function(player) | ||||
| 	if sfinv.enabled then | ||||
| 	if sfinv.enabled and sfinv.get_page(player) == "3d_armor:armor" then | ||||
| 		sfinv.set_player_inventory_formspec(player) | ||||
| 	end | ||||
| end) | ||||
|   | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Rüstung | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Armaĵoj | ||||
| @@ -1,7 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv : Mod cargado pero no activado. | ||||
| Armor=Armadura | ||||
|   | ||||
| @@ -1,7 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor_sfinv: Mod loaded but unused.=3d_armor_sfinv : Mod chargé mais inutilisé. | ||||
| Armor=Armure | ||||
|   | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Armadura | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.ru.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Броня | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Rustning | ||||
							
								
								
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								3d_armor_sfinv/locale/3d_armor_sfinv.uk.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
| Armor=Броня | ||||
| @@ -1,7 +1,2 @@ | ||||
| # textdomain: 3d_armor_sfinv | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d_armor_sfinv: Mod loaded but unused.= | ||||
| Armor= | ||||
|   | ||||
| @@ -1,43 +0,0 @@ | ||||
| [mod] 3d Armor Stand [3d_armor_stand] | ||||
| ===================================== | ||||
|  | ||||
| License Source Code | ||||
| ------------------- | ||||
|  | ||||
| Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU Lesser General Public License as published by | ||||
| the Free Software Foundation; either version 2.1 of the License, or | ||||
| (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Lesser General Public License for more details. | ||||
|  | ||||
| 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. | ||||
|  | ||||
| Lecense Models | ||||
| -------------- | ||||
|  | ||||
| Copyright (C) 2016-2019 Stuart Jones - CC BY-SA 3.0 | ||||
|  | ||||
| UV model mapping by tobyplowy(aka toby109tt) | ||||
|  | ||||
| License Textures | ||||
| ---------------- | ||||
|  | ||||
| 3d_armor_stand.png | ||||
| 3d_armor_stand_locked.png | ||||
|  | ||||
| Copyright (C) 2017-2019 tobyplowy - CC BY-SA 3.0 | ||||
|  | ||||
| 3d_armor_stand_feet.png | ||||
| 3d_armor_stand_head.png | ||||
| 3d_armor_stand_legs.png | ||||
| 3d_armor_stand_torso.png | ||||
|  | ||||
| Copyright (C) 2016-2019 Stuart Jones - CC BY-SA 3.0 | ||||
| @@ -1,2 +0,0 @@ | ||||
| 3d_armor | ||||
|  | ||||
| @@ -6,27 +6,27 @@ local armor_stand_formspec = "size[8,7]" .. | ||||
| 	default.gui_bg_img .. | ||||
| 	default.gui_slots .. | ||||
| 	default.get_hotbar_bg(0,3) .. | ||||
| 	"list[current_name;armor_head;3,0.5;1,1;]" .. | ||||
| 	"list[current_name;armor_torso;4,0.5;1,1;]" .. | ||||
| 	"list[current_name;armor_legs;3,1.5;1,1;]" .. | ||||
| 	"list[current_name;armor_feet;4,1.5;1,1;]" .. | ||||
| 	"list[current_name;main;3,0.5;2,1;]" .. | ||||
| 	"list[current_name;main;3,1.5;2,1;2]" .. | ||||
| 	"image[3,0.5;1,1;3d_armor_stand_head.png]" .. | ||||
| 	"image[4,0.5;1,1;3d_armor_stand_torso.png]" .. | ||||
| 	"image[3,1.5;1,1;3d_armor_stand_legs.png]" .. | ||||
| 	"image[4,1.5;1,1;3d_armor_stand_feet.png]" .. | ||||
| 	"list[current_player;main;0,3;8,1;]" .. | ||||
| 	"list[current_player;main;0,4.25;8,3;8]" | ||||
| 	"list[current_player;main;0,4.25;8,3;8]" .. | ||||
| 	"listring[current_name;main]" .. | ||||
| 	"listring[current_player;main]" | ||||
|  | ||||
| local elements = {"head", "torso", "legs", "feet"} | ||||
|  | ||||
| local function drop_armor(pos) | ||||
| 	local meta = minetest.get_meta(pos) | ||||
| 	local inv = meta:get_inventory() | ||||
| 	for _, element in pairs(elements) do | ||||
| 		local stack = inv:get_stack("armor_"..element, 1) | ||||
| 	for i = 1, 4 do | ||||
| 		local stack = inv:get_stack("main", i) | ||||
| 		if stack and stack:get_count() > 0 then | ||||
| 			armor.drop_armor(pos, stack) | ||||
| 			inv:set_stack("armor_"..element, 1, nil) | ||||
| 			inv:set_stack("main", i, nil) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
| @@ -62,14 +62,14 @@ local function update_entity(pos) | ||||
| 		object = minetest.add_entity(pos, "3d_armor_stand:armor_entity") | ||||
| 	end | ||||
| 	if object then | ||||
| 		local texture = "3d_armor_trans.png" | ||||
| 		local texture = "blank.png" | ||||
| 		local textures = {} | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local inv = meta:get_inventory() | ||||
| 		local yaw = 0 | ||||
| 		if inv then | ||||
| 			for _, element in pairs(elements) do | ||||
| 				local stack = inv:get_stack("armor_"..element, 1) | ||||
| 			for i, element in ipairs(elements) do | ||||
| 				local stack = inv:get_stack("main", i) | ||||
| 				if stack:get_count() == 1 then | ||||
| 					local item = stack:get_name() or "" | ||||
| 					local def = stack:get_definition() or {} | ||||
| @@ -134,7 +134,7 @@ local function remove_hidden_node(pos) | ||||
| end | ||||
|  | ||||
| minetest.register_node("3d_armor_stand:top", { | ||||
| 	description = S("Armor stand top"), | ||||
| 	description = S("Armor Stand Top"), | ||||
| 	paramtype = "light", | ||||
| 	drawtype = "plantlike", | ||||
| 	sunlight_propagates = true, | ||||
| @@ -144,182 +144,168 @@ minetest.register_node("3d_armor_stand:top", { | ||||
| 	buildable_to = false, | ||||
| 	drop = "", | ||||
| 	groups = {not_in_creative_inventory = 1}, | ||||
| 	is_ground_content = false, | ||||
| 	on_blast = function() end, | ||||
| 	tiles = {"3d_armor_trans.png"}, | ||||
| 	tiles = {"blank.png"}, | ||||
| }) | ||||
|  | ||||
| minetest.register_node("3d_armor_stand:armor_stand", { | ||||
| 	description = S("Armor stand"), | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3d_armor_stand.obj", | ||||
| 	tiles = {"3d_armor_stand.png"}, | ||||
| 	use_texture_alpha = "clip", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25}, | ||||
| 			{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	groups = {choppy=2, oddly_breakable_by_hand=2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	on_construct = function(pos) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		meta:set_string("formspec", armor_stand_formspec) | ||||
| 		meta:set_string("infotext", S("Armor Stand")) | ||||
| 		local inv = meta:get_inventory() | ||||
| 		for _, element in pairs(elements) do | ||||
| 			inv:set_size("armor_"..element, 1) | ||||
| local function register_armor_stand(def) | ||||
| 	local function owns_armor_stand(pos, meta, player) | ||||
| 		if def.name == "locked_armor_stand" and not has_locked_armor_stand_privilege(meta, player) then | ||||
| 			return false | ||||
| 		end | ||||
| 	end, | ||||
| 	can_dig = function(pos, player) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local inv = meta:get_inventory() | ||||
| 		for _, element in pairs(elements) do | ||||
| 			if not inv:is_empty("armor_"..element) then | ||||
| 				return false | ||||
| 			end | ||||
| 		local has_access = minetest.is_player(player) and not minetest.is_protected(pos, player:get_player_name()) | ||||
| 		if def.name == "shared_armor_stand" and not has_access then | ||||
| 			return false | ||||
| 		end | ||||
| 		return true | ||||
| 	end, | ||||
| 	after_place_node = function(pos, placer) | ||||
| 		minetest.add_entity(pos, "3d_armor_stand:armor_entity") | ||||
| 		add_hidden_node(pos, placer) | ||||
| 	end, | ||||
| 	allow_metadata_inventory_put = function(pos, listname, index, stack) | ||||
| 		local def = stack:get_definition() or {} | ||||
| 		local groups = def.groups or {} | ||||
| 		if groups[listname] then | ||||
| 	end | ||||
|  | ||||
| 	minetest.register_node("3d_armor_stand:" .. def.name, { | ||||
| 		description = def.description, | ||||
| 		drawtype = "mesh", | ||||
| 		mesh = "3d_armor_stand.obj", | ||||
| 		tiles = {def.texture}, | ||||
| 		use_texture_alpha = "clip", | ||||
| 		paramtype = "light", | ||||
| 		paramtype2 = "facedir", | ||||
| 		walkable = false, | ||||
| 		selection_box = { | ||||
| 			type = "fixed", | ||||
| 			fixed = { | ||||
| 				{-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25}, | ||||
| 				{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, | ||||
| 			}, | ||||
| 		}, | ||||
| 		groups = {choppy=2, oddly_breakable_by_hand=2}, | ||||
| 		is_ground_content = false, | ||||
| 		sounds = default.node_sound_wood_defaults(), | ||||
| 		on_construct = function(pos) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			meta:set_string("formspec", armor_stand_formspec) | ||||
| 			meta:set_string("infotext", def.description) | ||||
| 			if def.name == "locked_armor_stand" then | ||||
| 				meta:set_string("owner", "") | ||||
| 			end | ||||
| 			local inv = meta:get_inventory() | ||||
| 			inv:set_size("main", 4) | ||||
| 		end, | ||||
| 		can_dig = function(pos, player) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			local inv = meta:get_inventory() | ||||
| 			if not inv:is_empty("main") then | ||||
| 				return false | ||||
| 			end | ||||
| 			return true | ||||
| 		end, | ||||
| 		after_place_node = function(pos, placer) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			minetest.add_entity(pos, "3d_armor_stand:armor_entity") | ||||
| 			if def.name == "locked_armor_stand" then | ||||
| 				meta:set_string("owner", placer:get_player_name() or "") | ||||
| 				meta:set_string("infotext", S("Armor Stand (owned by @1)", meta:get_string("owner"))) | ||||
| 			elseif def.name == "shared_armor_stand" then | ||||
| 				meta:set_string("infotext", def.description) | ||||
| 			end | ||||
| 			add_hidden_node(pos, placer) | ||||
| 		end, | ||||
| 		allow_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			if not owns_armor_stand(pos, meta, player) then | ||||
| 				return 0 | ||||
| 			end | ||||
| 			local inv = meta:get_inventory() | ||||
| 			local stack_def = stack:get_definition() or {} | ||||
| 			local groups = stack_def.groups or {} | ||||
| 			for i, element in ipairs(elements) do | ||||
| 				if groups["armor_"..element] and inv:get_stack(listname, i):is_empty() then | ||||
| 					return 1 | ||||
| 				end | ||||
| 			end | ||||
| 			return 0 | ||||
| 		end, | ||||
| 		allow_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			if not owns_armor_stand(pos, meta, player) then | ||||
| 				return 0 | ||||
| 			end | ||||
| 			return 1 | ||||
| 		end | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	allow_metadata_inventory_move = function(pos) | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	on_metadata_inventory_put = function(pos) | ||||
| 		update_entity(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_take = function(pos) | ||||
| 		update_entity(pos) | ||||
| 	end, | ||||
| 	after_destruct = function(pos) | ||||
| 		update_entity(pos) | ||||
| 		remove_hidden_node(pos) | ||||
| 	end, | ||||
| 		end, | ||||
| 		allow_metadata_inventory_move = function(pos) | ||||
| 			return 0 | ||||
| 		end, | ||||
| 		on_metadata_inventory_put = function(pos, listname, index, stack) | ||||
| 			local meta = minetest.get_meta(pos) | ||||
| 			local inv = meta:get_inventory() | ||||
| 			local stack_def = stack:get_definition() or {} | ||||
| 			local groups = stack_def.groups or {} | ||||
| 			for i, element in ipairs(elements) do | ||||
| 				if groups["armor_"..element] then | ||||
| 					inv:set_stack(listname, i, stack) | ||||
| 					if index ~= i then | ||||
| 						inv:set_stack(listname, index, nil) | ||||
| 					end | ||||
| 					break | ||||
| 				end | ||||
| 			end | ||||
| 			update_entity(pos) | ||||
| 		end, | ||||
| 		on_metadata_inventory_take = function(pos) | ||||
| 			update_entity(pos) | ||||
| 		end, | ||||
| 		after_destruct = function(pos) | ||||
| 			update_entity(pos) | ||||
| 			remove_hidden_node(pos) | ||||
| 		end, | ||||
| 		on_blast = def.on_blast | ||||
| 	}) | ||||
| end | ||||
|  | ||||
| register_armor_stand({ | ||||
| 	name = "armor_stand", | ||||
| 	description = S("Armor Stand"), | ||||
| 	texture = "3d_armor_stand.png", | ||||
| 	on_blast = function(pos) | ||||
| 		drop_armor(pos) | ||||
| 		armor.drop_armor(pos, "3d_armor_stand:armor_stand") | ||||
| 		minetest.remove_node(pos) | ||||
| 	end, | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| minetest.register_node("3d_armor_stand:locked_armor_stand", { | ||||
| 	description = S("Locked Armor stand"), | ||||
| 	drawtype = "mesh", | ||||
| 	mesh = "3d_armor_stand.obj", | ||||
| 	tiles = {"3d_armor_stand_locked.png"}, | ||||
| 	use_texture_alpha = "clip", | ||||
| 	paramtype = "light", | ||||
| 	paramtype2 = "facedir", | ||||
| 	walkable = false, | ||||
| 	selection_box = { | ||||
| 		type = "fixed", | ||||
| 		fixed = { | ||||
| 			{-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25}, | ||||
| 			{-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	groups = {choppy=2, oddly_breakable_by_hand=2}, | ||||
| 	sounds = default.node_sound_wood_defaults(), | ||||
| 	on_construct = function(pos) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		meta:set_string("formspec", armor_stand_formspec) | ||||
| 		meta:set_string("infotext", S("Armor Stand")) | ||||
| 		meta:set_string("owner", "") | ||||
| 		local inv = meta:get_inventory() | ||||
| 		for _, element in pairs(elements) do | ||||
| 			inv:set_size("armor_"..element, 1) | ||||
| 		end | ||||
| 	end, | ||||
| 	can_dig = function(pos, player) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local inv = meta:get_inventory() | ||||
| 		for _, element in pairs(elements) do | ||||
| 			if not inv:is_empty("armor_"..element) then | ||||
| 				return false | ||||
| 			end | ||||
| 		end | ||||
| 		return true | ||||
| 	end, | ||||
| 	after_place_node = function(pos, placer) | ||||
| 		minetest.add_entity(pos, "3d_armor_stand:armor_entity") | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		meta:set_string("owner", placer:get_player_name() or "") | ||||
| 		meta:set_string("infotext", S("Armor Stand (owned by @1)", meta:get_string("owner"))) | ||||
| 		add_hidden_node(pos, placer) | ||||
| 	end, | ||||
| 	allow_metadata_inventory_put = function(pos, listname, index, stack, player) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		if not has_locked_armor_stand_privilege(meta, player) then | ||||
| 			return 0 | ||||
| 		end | ||||
| 		local def = stack:get_definition() or {} | ||||
| 		local groups = def.groups or {} | ||||
| 		if groups[listname] then | ||||
| 			return 1 | ||||
| 		end | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	allow_metadata_inventory_take = function(pos, listname, index, stack, player) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		if not has_locked_armor_stand_privilege(meta, player) then | ||||
| 			return 0 | ||||
| 		end | ||||
| 		return stack:get_count() | ||||
| 	end, | ||||
| 	allow_metadata_inventory_move = function(pos) | ||||
| 		return 0 | ||||
| 	end, | ||||
| 	on_metadata_inventory_put = function(pos) | ||||
| 		update_entity(pos) | ||||
| 	end, | ||||
| 	on_metadata_inventory_take = function(pos) | ||||
| 		update_entity(pos) | ||||
| 	end, | ||||
| 	after_destruct = function(pos) | ||||
| 		update_entity(pos) | ||||
| 		remove_hidden_node(pos) | ||||
| 	end, | ||||
| 	on_blast = function(pos) | ||||
| 		-- Not affected by TNT | ||||
| 	end, | ||||
| register_armor_stand({ | ||||
| 	name = "locked_armor_stand", | ||||
| 	description = S("Locked Armor Stand"), | ||||
| 	texture = "3d_armor_stand_locked.png" | ||||
| }) | ||||
|  | ||||
| register_armor_stand({ | ||||
| 	name = "shared_armor_stand", | ||||
| 	description = S("Shared Armor Stand"), | ||||
| 	texture = "3d_armor_stand_shared.png" | ||||
| }) | ||||
|  | ||||
| minetest.register_entity("3d_armor_stand:armor_entity", { | ||||
| 	physical = true, | ||||
| 	visual = "mesh", | ||||
| 	mesh = "3d_armor_entity.obj", | ||||
| 	visual_size = {x=1, y=1}, | ||||
| 	collisionbox = {0,0,0,0,0,0}, | ||||
| 	textures = {"3d_armor_trans.png"}, | ||||
| 	pos = nil, | ||||
| 	timer = 0, | ||||
| 	initial_properties = { | ||||
| 		physical = true, | ||||
| 		visual = "mesh", | ||||
| 		mesh = "3d_armor_entity.obj", | ||||
| 		visual_size = {x=1, y=1}, | ||||
| 		collisionbox = {0,0,0,0,0,0}, | ||||
| 		textures = {"blank.png"}, | ||||
| 	}, | ||||
| 	_pos = nil, | ||||
| 	on_activate = function(self) | ||||
| 		local pos = self.object:get_pos() | ||||
| 		if pos then | ||||
| 			self.pos = vector.round(pos) | ||||
| 			self._pos = vector.round(pos) | ||||
| 			update_entity(pos) | ||||
| 		end | ||||
| 	end, | ||||
| 	on_blast = function(self, damage) | ||||
| 		local drops = {} | ||||
| 		local node = minetest.get_node(self.pos) | ||||
| 		local node = minetest.get_node(self._pos) | ||||
| 		if node.name == "3d_armor_stand:armor_stand" then | ||||
| 			drop_armor(self.pos) | ||||
| 			drop_armor(self._pos) | ||||
| 			self.object:remove() | ||||
| 		end | ||||
| 		return false, false, drops | ||||
| @@ -327,7 +313,7 @@ minetest.register_entity("3d_armor_stand:armor_entity", { | ||||
| }) | ||||
|  | ||||
| minetest.register_abm({ | ||||
| 	nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:armor_stand"}, | ||||
| 	nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:shared_armor_stand", "3d_armor_stand:armor_stand"}, | ||||
| 	interval = 15, | ||||
| 	chance = 1, | ||||
| 	action = function(pos, node, active_object_count, active_object_count_wider) | ||||
| @@ -338,6 +324,32 @@ minetest.register_abm({ | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| minetest.register_lbm({ | ||||
| 	label = "Update armor stand inventories", | ||||
| 	name = "3d_armor_stand:update_inventories", | ||||
| 	nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:shared_armor_stand", "3d_armor_stand:armor_stand"}, | ||||
| 	run_at_every_load = false, | ||||
| 	action = function(pos, node) | ||||
| 		local meta = minetest.get_meta(pos) | ||||
| 		local inv = meta:get_inventory() | ||||
| 		local lists = inv:get_lists() | ||||
| 		for _, element in pairs(elements) do | ||||
| 			if not lists["armor_"..element] then | ||||
| 				-- Abort to avoid item loss in case env_meta.txt is corrupted/deleted | ||||
| 				return | ||||
| 			end | ||||
| 		end | ||||
| 		inv:set_lists({main = { | ||||
| 			lists.armor_head[1], | ||||
| 			lists.armor_torso[1], | ||||
| 			lists.armor_legs[1], | ||||
| 			lists.armor_feet[1] | ||||
| 		}}) | ||||
| 		meta:set_string("formspec", armor_stand_formspec) | ||||
| 		update_entity(pos) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	output = "3d_armor_stand:armor_stand", | ||||
| 	recipe = { | ||||
| @@ -353,3 +365,10 @@ minetest.register_craft({ | ||||
| 		{"3d_armor_stand:armor_stand", "default:steel_ingot"}, | ||||
| 	} | ||||
| }) | ||||
|  | ||||
| minetest.register_craft({ | ||||
| 	output = "3d_armor_stand:shared_armor_stand", | ||||
| 	recipe = { | ||||
| 		{"3d_armor_stand:armor_stand", "default:copper_ingot"}, | ||||
| 	} | ||||
| }) | ||||
|   | ||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Rüstungsständeroberseite | ||||
| Armor Stand=Rüstungsständer | ||||
| Locked Armor Stand=Abgeschlossener Rüstungsständer | ||||
| Armor Stand (owned by @1)=Rüstungsständer (Eigentum von @1) | ||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Armaĵtenila Supro | ||||
| Armor Stand=Armaĵtenilo | ||||
| Locked Armor Stand=Ŝlosita Armaĵtenilo | ||||
| Armor Stand (owned by @1)=Ŝlosita Armaĵtenilo (posedata de @1) | ||||
							
								
								
									
										6
									
								
								3d_armor_stand/locale/3d_armor_stand.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								3d_armor_stand/locale/3d_armor_stand.es.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top= | ||||
| Armor Stand=Soporte de armadura | ||||
| Locked Armor Stand=Soporte de armadura privado | ||||
| Shared Armor Stand=Soporte de armadura compartido | ||||
| Armor Stand (owned by @1)=Soporte de armadura (de @1) | ||||
| @@ -1,10 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| Armor Stand Top=Haut de support d'armure | ||||
| Armor Stand=Support d'armure | ||||
| Locked Armor Stand=Support d'armure verrouillé | ||||
| Armor Stand (owned by @1)=Support d'armure (propriété de @1) | ||||
| Armor stand=Support d'armure | ||||
| Armor stand top=Haut de support d'armure | ||||
| Locked Armor stand=Support d'armure verrouillé | ||||
|   | ||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Topo do suporte de armadura | ||||
| Armor Stand=Suporte de Armadura | ||||
| Locked Armor Stand=Suporte de armadura trancado | ||||
| Armor Stand (owned by @1)=Suporte de Armadura (dono: @1) | ||||
							
								
								
									
										6
									
								
								3d_armor_stand/locale/3d_armor_stand.ru.tr
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								3d_armor_stand/locale/3d_armor_stand.ru.tr
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Верх Стойки для Брони | ||||
| Armor Stand=Стойка для Брони | ||||
| Locked Armor Stand=Заблокированная Стойка для Брони | ||||
| Shared Armor Stand=Публичная Стойка для Брони | ||||
| Armor Stand (owned by @1)=Стойка для Брони (владалец: @1) | ||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Rustningställstopp | ||||
| Armor Stand=Rustningställ | ||||
| Locked Armor Stand=Låst rustningställ | ||||
| Armor Stand (owned by @1)=Rustningställ (ägd av @1) | ||||
							
								
								
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.uk.tr
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								3d_armor_stand/locale/3d_armor_stand.uk.tr
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
| Armor Stand Top=Верх Стійки для Броні | ||||
| Armor Stand=Стійка для Броні | ||||
| Locked Armor Stand=Закрита Стійка для Броні | ||||
| Armor Stand (owned by @1)=Стійка для Броні (власник @1) | ||||
| @@ -1,10 +1,6 @@ | ||||
| # textdomain: 3d_armor_stand | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| Armor Stand Top= | ||||
| Armor Stand= | ||||
| Locked Armor Stand= | ||||
| Shared Armor Stand= | ||||
| Armor Stand (owned by @1)= | ||||
| Armor stand= | ||||
| Armor stand top= | ||||
| Locked Armor stand= | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								3d_armor_stand/models/3d_armor_stand_shared.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								3d_armor_stand/models/3d_armor_stand_shared.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 1011 B | 
| @@ -1,18 +0,0 @@ | ||||
| [mod] 3d Armor integration to unified inventory [3d_armor_ui] | ||||
| ============================================================= | ||||
|  | ||||
| Copyright (C) 2012-2019 stujones11, Stuart Jones <stujones111@gmail.com> | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify | ||||
| it under the terms of the GNU Lesser General Public License as published by | ||||
| the Free Software Foundation; either version 2.1 of the License, or | ||||
| (at your option) any later version. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, | ||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| GNU Lesser General Public License for more details. | ||||
|  | ||||
| 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. | ||||
| @@ -1,2 +0,0 @@ | ||||
| 3d_armor | ||||
| unified_inventory? | ||||
| @@ -1 +0,0 @@ | ||||
| Adds 3d_armor page to the unified inventory. | ||||
| @@ -2,14 +2,14 @@ | ||||
| local S = minetest.get_translator(minetest.get_current_modname()) | ||||
| local F = minetest.formspec_escape | ||||
| local has_technic = minetest.get_modpath("technic") ~= nil | ||||
| local ui = unified_inventory | ||||
|  | ||||
| if not minetest.global_exists("unified_inventory") then | ||||
| 	minetest.log("warning", S("3d_armor_ui: Mod loaded but unused.")) | ||||
| 	minetest.log("warning", "3d_armor_ui: Mod loaded but unused.") | ||||
| 	return | ||||
| end | ||||
|  | ||||
| if unified_inventory.sfinv_compat_layer then | ||||
| local ui = unified_inventory | ||||
| if ui.sfinv_compat_layer then | ||||
| 	return | ||||
| end | ||||
|  | ||||
| @@ -23,7 +23,7 @@ end) | ||||
| unified_inventory.register_button("armor", { | ||||
| 	type = "image", | ||||
| 	image = "inventory_plus_armor.png", | ||||
| 	tooltip = S("3d Armor") | ||||
| 	tooltip = S("3D Armor") | ||||
| }) | ||||
|  | ||||
| unified_inventory.register_page("armor", { | ||||
| @@ -33,9 +33,6 @@ unified_inventory.register_page("armor", { | ||||
| 		local gridy = 0.6 | ||||
|  | ||||
| 		local name = player:get_player_name() | ||||
| 		if armor.def[name].init_time == 0 then | ||||
| 			return {formspec="label[0,0;"..F(S("Armor not initialized!")).."]"} | ||||
| 		end | ||||
| 		local formspec = perplayer_formspec.standard_inv_bg.. | ||||
| 			perplayer_formspec.standard_inv.. | ||||
| 			ui.make_inv_img_grid(gridx, gridy, 2, 3).. | ||||
| @@ -49,7 +46,7 @@ unified_inventory.register_page("armor", { | ||||
| 			"listring[current_player;main]".. | ||||
| 			"listring[detached:"..name.."_armor;armor]" | ||||
| 		if armor.config.fire_protect then | ||||
| 			formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. | ||||
| 			formspec = formspec.."label[6.0,"..(fy + 1.0)..";".. | ||||
| 				F(S("Fire"))..":  "..armor.def[name].fire.."]" | ||||
| 		end | ||||
| 		if has_technic then | ||||
|   | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor=3D-Rüstung | ||||
| Armor not initialized!=Rüstung ist nicht initialisiert! | ||||
| Armor=Rüstung | ||||
| Level=Stufe | ||||
| Heal=Heilung | ||||
| Fire=Feuer | ||||
| Radiation=Strahlung | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor=3D Armaĵoj | ||||
| Armor not initialized!=Armaĵoj ne pretigitaj! | ||||
| Armor=Armaĵo | ||||
| Level=Nivelo | ||||
| Heal=Sanigi | ||||
| Fire=Fajro | ||||
| Radiation=Radiado | ||||
| @@ -1,13 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d Armor=Armure 3d | ||||
| 3d_armor_ui: Mod loaded but unused.=3d_armor_ui : Mod chargé mais inutilisé. | ||||
| Armor=Armure | ||||
| 3D Armor=Armure 3D | ||||
| Armor not initialized!=Armure non initialisée ! | ||||
| Fire=Feu | ||||
| Heal=Soins | ||||
| Armor=Armure | ||||
| Level=Niveau | ||||
| Heal=Soins | ||||
| Fire=Feu | ||||
| Radiation=Radiation | ||||
|   | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor=3D Armor | ||||
| Armor not initialized!=Armadura não inicializada! | ||||
| Armor=Armadura | ||||
| Level=Nível | ||||
| Heal=Vida | ||||
| Fire=Fogo | ||||
| Radiation=Radiação | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.ru.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor=3D Броня | ||||
| Armor not initialized!=Броня не инициализирована! | ||||
| Armor=Броня | ||||
| Level=Уровень | ||||
| Heal=Исцеление | ||||
| Fire=Пламя | ||||
| Radiation=Излучение | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor= | ||||
| Armor not initialized!=Rustning har inte initialiserats | ||||
| Armor=Rustning | ||||
| Level=Nivå | ||||
| Heal=Läkning | ||||
| Fire=Eld | ||||
| Radiation=Strålning | ||||
							
								
								
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								3d_armor_ui/locale/3d_armor_ui.uk.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
| 3D Armor=3D Броня | ||||
| Armor not initialized!=Броня не ініціалізована! | ||||
| Armor=Броня | ||||
| Level=Рівень | ||||
| Heal=Зцілення | ||||
| Fire=Вогонь | ||||
| Radiation=Радіація | ||||
| @@ -1,13 +1,8 @@ | ||||
| # textdomain: 3d_armor_ui | ||||
|  | ||||
|  | ||||
| ### init.lua ### | ||||
|  | ||||
| 3d Armor= | ||||
| 3d_armor_ui: Mod loaded but unused.= | ||||
| Armor= | ||||
| 3D Armor= | ||||
| Armor not initialized!= | ||||
| Fire= | ||||
| Heal= | ||||
| Armor= | ||||
| Level= | ||||
| Heal= | ||||
| Fire= | ||||
| Radiation= | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| 3D Armor - Visible Player Armor | ||||
| =============================== | ||||
|  | ||||
| License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 | ||||
| License Source Code: Copyright (C) 2013-2023 Stuart Jones - LGPL v2.1 | ||||
|  | ||||
| Armor Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0 | ||||
| Armor Textures: Copyright (C) 2017-2023 davidthecreator - CC-BY-SA 3.0 | ||||
|  | ||||
| Special credit to Jordach and MirceaKitsune for providing the default 3d character model. | ||||
|  | ||||
|   | ||||
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| Modpack - 3d Armor [0.4.13] | ||||
| =========================== | ||||
| Modpack - 3d Armor | ||||
| ================== | ||||
|  | ||||
|  | ||||
|  | ||||
| @@ -22,7 +22,7 @@ Modpack - 3d Armor [0.4.13] | ||||
| [mod] Visible Player Armor [3d_armor] | ||||
| ------------------------------------- | ||||
|  | ||||
| Minetest Version: 5.0.0 | ||||
| Minetest Version: 5.0.0 and newer | ||||
|  | ||||
| Game: minetest_game and many derivatives | ||||
|  | ||||
| @@ -49,7 +49,26 @@ and [simple_skins] by TenPlus1. | ||||
| Armor can be configured by adding a file called armor.conf in 3d_armor mod or world directory. | ||||
| see armor.conf.example for all available options. | ||||
|  | ||||
| For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods | ||||
| For **mod installation** instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods | ||||
|  | ||||
| The specific "armors as modpack" refactorization allows anyone to enable/disable any armors they want as mods rather than obscure settings of the past. (See [#78](https://github.com/minetest-mods/3d_armor/commit/9444afd7222a71fc17d40c9793506812d715dcc3) for further explanation.) | ||||
|  | ||||
| Currently, the modpack includes: | ||||
|  | ||||
| - armor_admin | ||||
| - armor_bronze | ||||
| - armor_cactus | ||||
| - armor_crystal | ||||
| - armor_diamond | ||||
| - armor_gold | ||||
| - armor_mithril | ||||
| - armor_nether | ||||
| - armor_steel | ||||
| - armor_wood | ||||
|  | ||||
| as separate armor mods intentionally. All these mods depend on 3d_armor. | ||||
|  | ||||
| [API Reference](https://minetest-mods.github.io/3d_armor/reference/) | ||||
|  | ||||
| [mod] Visible Wielded Items [wieldview] | ||||
| --------------------------------------- | ||||
|   | ||||
							
								
								
									
										94
									
								
								armor_admin/init.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								armor_admin/init.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
|  | ||||
| --- Registered armors. | ||||
| -- | ||||
| --  @topic armor | ||||
|  | ||||
|  | ||||
| -- support for i18n | ||||
| local S = minetest.get_translator(minetest.get_current_modname()) | ||||
|  | ||||
| --- Admin Helmet | ||||
| -- | ||||
| --  @helmet 3d_armor:helmet_admin | ||||
| --  @img 3d_armor_inv_helmet_admin.png | ||||
| --  @grp armor_head 1 | ||||
| --  @grp armor_heal 100 | ||||
| --  @grp armor_use 0 | ||||
| --  @grp armor_water 1 | ||||
| --  @grp not_in_creative_inventory 1 | ||||
| --  @armorgrp fleshy 100 | ||||
| armor:register_armor(":3d_armor:helmet_admin", { | ||||
| 	description = S("Admin Helmet"), | ||||
| 	inventory_image = "3d_armor_inv_helmet_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_head=1, armor_heal=100, armor_use=0, armor_water=1, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| --- Admin Chestplate | ||||
| -- | ||||
| --  @chestplate 3d_armor:chestplate_admin | ||||
| --  @img 3d_armor_inv_chestplate_admin.png | ||||
| --  @grp armor_torso 1 | ||||
| --  @grp armor_heal 100 | ||||
| --  @grp armor_use 0 | ||||
| --  @grp not_in_creative_inventory 1 | ||||
| --  @armorgrp fleshy 100 | ||||
| armor:register_armor(":3d_armor:chestplate_admin", { | ||||
| 	description = S("Admin Chestplate"), | ||||
| 	inventory_image = "3d_armor_inv_chestplate_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_torso=1, armor_heal=100, armor_use=0, armor_water=1, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| --- Admin Leggings | ||||
| -- | ||||
| --  @leggings 3d_armor:leggings_admin | ||||
| --  @img 3d_armor_inv_leggings_admin.png | ||||
| --  @grp armor_legs 1 | ||||
| --  @grp armor_heal 100 | ||||
| --  @grp armor_use 0 | ||||
| --  @grp not_in_creative_inventory 1 | ||||
| --  @armorgrp fleshy 100 | ||||
| armor:register_armor(":3d_armor:leggings_admin", { | ||||
| 	description = S("Admin Leggings"), | ||||
| 	inventory_image = "3d_armor_inv_leggings_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_legs=1, armor_heal=100, armor_use=0, armor_water=1, | ||||
| 			not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| --- Admin Boots | ||||
| -- | ||||
| --  @boots 3d_armor:boots_admin | ||||
| --  @img 3d_armor_inv_boots_admin.png | ||||
| --  @grp armor_feet 1 | ||||
| --  @grp armor_heal 100 | ||||
| --  @grp armor_use 0 | ||||
| --  @grp not_in_creative_inventory 1 | ||||
| --  @armorgrp fleshy 100 | ||||
| armor:register_armor(":3d_armor:boots_admin", { | ||||
| 	description = S("Admin Boots"), | ||||
| 	inventory_image = "3d_armor_inv_boots_admin.png", | ||||
| 	armor_groups = {fleshy=100}, | ||||
| 	groups = {armor_feet=1, armor_heal=100, armor_use=0, physics_speed=1, | ||||
| 			armor_water=1, not_in_creative_inventory=1}, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_alias("adminboots", "3d_armor:boots_admin") | ||||
| minetest.register_alias("adminhelmet", "3d_armor:helmet_admin") | ||||
| minetest.register_alias("adminchestplate", "3d_armor:chestplate_admin") | ||||
| minetest.register_alias("adminleggings", "3d_armor:leggings_admin") | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.de.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.de.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Adminhelm | ||||
| Admin Chestplate=Adminbrustplatte | ||||
| Admin Leggings=Adminhose | ||||
| Admin Boots=Adminstiefel | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.eo.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.eo.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Administra Kasko | ||||
| Admin Chestplate=Administra Kiraso | ||||
| Admin Leggings=Administra Pantalono | ||||
| Admin Boots=Administraj Botoj | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.es.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.es.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Casco de admin | ||||
| Admin Chestplate=Peto de admin | ||||
| Admin Leggings=Grebas de admin | ||||
| Admin Boots=Botas de admin | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.fr.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.fr.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Casque d'admin | ||||
| Admin Chestplate=Cuirasse d'admin | ||||
| Admin Leggings=Jambières d'admin | ||||
| Admin Boots=Bottes d'admin | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.it.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.it.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Elmo dell'amministratrice/tore | ||||
| Admin Chestplate=Corazza dell'amministratrice/tore | ||||
| Admin Leggings=Gambali dell'amministratrice/tore | ||||
| Admin Boots=Stivali dell'amministratrice/tore | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.ms.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.ms.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Helmet Pentadbir | ||||
| Admin Chestplate=Perisai Dada Pentadbir | ||||
| Admin Leggings=Perisai Kaki Pentadbir | ||||
| Admin Boots=But Pentadbir | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.pt.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.pt.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet= | ||||
| Admin Chestplate= | ||||
| Admin Leggings= | ||||
| Admin Boots= | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.pt_BR.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Capacete de Administrador | ||||
| Admin Chestplate=Peitoral de Administrador | ||||
| Admin Leggings=Calças de Administrador | ||||
| Admin Boots=Botas de Administrador | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.ru.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.ru.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Шлем Админа | ||||
| Admin Chestplate=Нагрудник Админа | ||||
| Admin Leggings=Поножи Админа | ||||
| Admin Boots=Ботинки Админа | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.sv.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.sv.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Adminhjälm | ||||
| Admin Chestplate=Adminbröstplåt | ||||
| Admin Leggings=Adminbyxor | ||||
| Admin Boots=Adminstövlar | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/armor_admin.uk.tr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/armor_admin.uk.tr
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet=Шолом адміна | ||||
| Admin Chestplate=Броня адміна | ||||
| Admin Leggings=Штани адміна | ||||
| Admin Boots=Взуття адміна | ||||
							
								
								
									
										5
									
								
								armor_admin/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								armor_admin/locale/template.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
| # textdomain: armor_admin | ||||
| Admin Helmet= | ||||
| Admin Chestplate= | ||||
| Admin Leggings= | ||||
| Admin Boots= | ||||
							
								
								
									
										3
									
								
								armor_admin/mod.conf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								armor_admin/mod.conf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| name = armor_admin | ||||
| depends = 3d_armor | ||||
| description = Adds admin armor. | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user