Compare commits
	
		
			163 Commits
		
	
	
		
			version-0.
			...
			imgbot
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8c35451f12 | ||
|  | f3ad7ec6f1 | ||
|  | fccd4d8b15 | ||
|  | e5b2cf3a34 | ||
|  | d2608351f6 | ||
|  | a05eae3782 | ||
|  | 2ac90f8d19 | ||
|  | 47ecef46f7 | ||
|  | 1d22612664 | ||
|  | 3fe7dd2249 | ||
|  | be9579a365 | ||
|  | 18320e96b9 | ||
|  | 99471d3aa0 | ||
|  | b6283f3f0f | ||
|  | 7e2d9426d1 | ||
|  | 813a88f3a1 | ||
|  | 4c032e8c7e | ||
|  | 945e816b55 | ||
|  | 10ded06705 | ||
|  | 43a69ad853 | ||
|  | 13a8f0d019 | ||
|  | 70325158e6 | ||
|  | c96ba7ef34 | ||
|  | 838867a6bc | ||
|  | 9ce0ed9f55 | ||
|  | c0d45ceaa1 | ||
|  | 656bcf30bc | ||
|  | 579e64a5e7 | ||
|  | 6f99803d2d | ||
|  | f960fc1a41 | ||
|  | af4a381433 | ||
|  | 1f11a28ad4 | ||
|  | a5ddc3e60a | ||
|  | 83f3e01efa | ||
|  | 7d30bc25a3 | ||
|  | e4b12558d4 | ||
|  | 21b5c68505 | ||
|  | 21716ffd31 | ||
|  | cc6fff2b04 | ||
|  | 4210cafff3 | ||
|  | 579d245a00 | ||
|  | c812e0ac56 | ||
|  | 4baed2ca22 | ||
|  | b9c8681e14 | ||
|  | 2fc92880fd | ||
|  | b4cfdac6f5 | ||
|  | 59b26b37f9 | ||
|  | 7226dd6174 | ||
|  | 4fc51971d1 | ||
|  | 291b34bfc6 | ||
|  | da7df11ce4 | ||
|  | 4ff61da39a | ||
|  | 688e21f285 | ||
|  | ea70066d7a | ||
|  | d5896a04e2 | ||
|  | d979815a49 | ||
|  | cca523f193 | ||
|  | ae448c150c | ||
|  | 925b39f577 | ||
|  | 0454d72c72 | ||
|  | 9fa95b2e2c | ||
|  | 43c9984d57 | ||
|  | cc26d04345 | ||
|  | 38d79b91a1 | ||
|  | db8fb5ebd4 | ||
|  | 2150fcea8d | ||
|  | 9577fb773e | ||
|  | ea29ec6f6f | ||
|  | 793c74856f | ||
|  | 47734969e2 | ||
|  | 1af0bb60f8 | ||
|  | a11b3302e1 | ||
|  | 664d9fbfef | ||
|  | 4dd7e41749 | ||
|  | df429ee487 | ||
|  | 7566ecccee | ||
|  | 99bc8cf2d3 | ||
|  | a2ec13e28d | ||
|  | 065815eec1 | ||
|  | 16b0ee2d9e | ||
|  | 64f8b3cd58 | ||
|  | 74ef6c5759 | ||
|  | b741b7426b | ||
|  | db312b3245 | ||
|  | de2c47f334 | ||
|  | b4283f6e60 | ||
|  | 888fbacb49 | ||
|  | 50453aa5a6 | ||
|  | b45fbd0f2a | ||
|  | 9ffcc19fd7 | ||
|  | 6359b0a0ed | ||
|  | 4dbe76312b | ||
|  | 20edce6c55 | ||
|  | 6e58d1280b | ||
|  | 20d4728829 | ||
|  | 7cfd744ff3 | ||
|  | a76a35f177 | ||
|  | e5e926a02e | ||
|  | 3951c833da | ||
|  | e9a2c57826 | ||
|  | 5508a26dbf | ||
|  | 0ec7858937 | ||
|  | 1e059f2557 | ||
|  | 5dab1ca887 | ||
|  | 1fdff7adaa | ||
|  | 23e4d5114f | ||
|  | 7fde7c050d | ||
|  | 45099ae25a | ||
|  | edebf13c1f | ||
|  | 4083782246 | ||
|  | 5911447048 | ||
|  | 3aac5c98f4 | ||
|  | fe9664589a | ||
|  | 11ce84873b | ||
|  | 86fd6b0d7d | ||
|  | 27a3823eed | ||
|  | 348dad3d4d | ||
|  | ea86aa35f5 | ||
|  | f0edb9a710 | ||
|  | 75191490c2 | ||
|  | f91af02c45 | ||
|  | 3843578a33 | ||
|  | 1570efb7ac | ||
|  | 5517be8ff2 | ||
|  | 709535dff0 | ||
|  | a1d904c517 | ||
|  | 3c2cb16351 | ||
|  | 6bf28dc2c5 | ||
|  | 75a7181e0f | ||
|  | 2b840fbe38 | ||
|  | 701215c22f | ||
|  | e46ff3488b | ||
|  | f74a52df62 | ||
|  | 3c4500a9bf | ||
|  | e69b59e2af | ||
|  | d43d96bb28 | ||
|  | 7a980a6717 | ||
|  | fc3fcea4b7 | ||
|  | b59464de88 | ||
|  | 80024fc154 | ||
|  | d826b53877 | ||
|  | 01a3425ec8 | ||
|  | 616d9398f2 | ||
|  | 6661ec0b40 | ||
|  | ca1cf6bfeb | ||
|  | 8f5ffeb384 | ||
|  | ca79d39688 | ||
|  | 8b8a554ff7 | ||
|  | 3df7802439 | ||
|  | 19e297a2e8 | ||
|  | 190614d47b | ||
|  | 37b10d1cee | ||
|  | 4b45f85687 | ||
|  | a5b650285b | ||
|  | 26212fb3e4 | ||
|  | 4829445d12 | ||
|  | 4d3b219e7d | ||
|  | 81ffdaa6a7 | ||
|  | ba62febdee | ||
|  | 8939a0dd43 | ||
|  | c691f3e219 | ||
|  | bf9ba59c0f | ||
|  | 75f808131c | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @@ -6,3 +6,6 @@ tags | ||||
| *.vim | ||||
| armor.conf | ||||
|  | ||||
| ## Eclipse project files & directories | ||||
| .project | ||||
| .settings | ||||
|   | ||||
| @@ -1,7 +1,26 @@ | ||||
| [mod] 3d Armor [3d_armor] | ||||
| ========================= | ||||
|  | ||||
| License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 | ||||
| License Source Code | ||||
| ------------------- | ||||
|  | ||||
| License Textures: Copyright (C) 2013-2017 Ryan Jones - CC-BY-SA 3.0 | ||||
| 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 | ||||
|   | ||||
| @@ -3,7 +3,9 @@ | ||||
|  | ||||
| Depends: default | ||||
|  | ||||
| Recommends: inventory_plus or unified_inventory (use only one) | ||||
| Recommends: sfinv, unified_inventory or smart_inventory (use only one to avoid conflicts) | ||||
|  | ||||
| Supports: player_monoids and armor_monoid | ||||
|  | ||||
| Adds craftable armor that is visible to other players. Each armor item worn contributes to | ||||
| a player's armor group level making them less vulnerable to weapons. | ||||
| @@ -14,11 +16,176 @@ Overall level is boosted by 10% when wearing a full matching set. | ||||
| Fire protection added by TenPlus1 when using crystal armor if Ethereal mod active, level 1 | ||||
| protects against torches, level 2 for crystal spike, level 3 for fire, level 5 for lava. | ||||
|  | ||||
| Configuration | ||||
| ------------- | ||||
| Armor Configuration | ||||
| ------------------- | ||||
|  | ||||
| Armor can be configured by adding a file called armor.conf in 3d_armor mod and/or world directory. | ||||
| see armor.conf.example for all available options. | ||||
| Override the following default settings by adding them to your minetest.conf file. | ||||
|  | ||||
| Note: worldpath config settings override any settings made in the mod's directory. | ||||
| -- Set false to disable individual armor materials. | ||||
| armor_material_wood = true | ||||
| armor_material_cactus = true | ||||
| armor_material_steel = true | ||||
| armor_material_bronze = true | ||||
| armor_material_diamond = true | ||||
| armor_material_gold = true | ||||
| armor_material_mithril = true | ||||
| armor_material_crystal = true | ||||
|  | ||||
| -- Increase this if you get initialization glitches when a player first joins. | ||||
| armor_init_delay = 2 | ||||
|  | ||||
| -- Number of initialization attempts. | ||||
| -- Use in conjunction with armor_init_delay if initialization problems persist. | ||||
| armor_init_times = 10 | ||||
|  | ||||
| -- Increase this if armor is not getting into bones due to server lag. | ||||
| armor_bones_delay = 1 | ||||
|  | ||||
| -- How often player armor items are updated. | ||||
| armor_update_time = 1 | ||||
|  | ||||
| -- Drop armor when a player dies. | ||||
| -- Uses bones mod if present, otherwise items are dropped around the player. | ||||
| armor_drop = true | ||||
|  | ||||
| -- Pulverise armor when a player dies, overrides armor_drop. | ||||
| armor_destroy = false | ||||
|  | ||||
| -- You can use this to increase or decrease overall armor effectiveness, | ||||
| -- eg: level_multiplier = 0.5 will reduce armor level by half. | ||||
| armor_level_multiplier = 1 | ||||
|  | ||||
| -- You can use this to increase or decrease overall armor healing, | ||||
| -- eg: armor_heal_multiplier = 0 will disable healing altogether. | ||||
| armor_heal_multiplier = 1 | ||||
|  | ||||
| -- Enable water protection (periodically restores breath when activated) | ||||
| armor_water_protect = true | ||||
|  | ||||
| -- Enable fire protection (defaults true if using ethereal mod) | ||||
| armor_fire_protect = false | ||||
|  | ||||
| -- Enable punch damage effects. | ||||
| armor_punch_damage = true | ||||
|  | ||||
| -- Enable migration of old armor inventories | ||||
| armor_migrate_old_inventory = true | ||||
|  | ||||
| API | ||||
| --- | ||||
|  | ||||
| Armor Registration: | ||||
|  | ||||
| armor:register_armor(name, def) | ||||
|  | ||||
| Wrapper function for `minetest.register_tool`, while registering armor as | ||||
| a tool item is still supported, this may be deprecated in future so new code | ||||
| should use this method. | ||||
|  | ||||
| Additional fields supported by 3d_armor: | ||||
|  | ||||
| 	texture = <filename> | ||||
| 	preview = <filename> | ||||
| 	armor_groups = <table> | ||||
| 	damage_groups = <table> | ||||
| 	reciprocate_damage = <bool> | ||||
| 	on_equip = <function> | ||||
| 	on_unequip = <function> | ||||
| 	on_destroy = <function> | ||||
| 	on_damage = <function> | ||||
| 	on_punched = <function> | ||||
|  | ||||
| armor:register_armor_group(group, base) | ||||
|  | ||||
| Example: | ||||
|  | ||||
| armor:register_armor_group("radiation", 100) | ||||
|  | ||||
| armor:register_armor("mod_name:speed_boots", { | ||||
| 	description = "Speed Boots", | ||||
| 	inventory_image = "mod_name_speed_boots_inv.png", | ||||
| 	texture = "mod_name_speed_boots.png", | ||||
| 	preview = "mod_name_speed_boots_preview.png", | ||||
| 	groups = {armor_feet=1, armor_use=500, physics_speed=1.2, flammable=1}, | ||||
| 	armor_groups = {fleshy=10, radiation=10}, | ||||
| 	damage_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1}, | ||||
| 	reciprocate_damage = true, | ||||
| 	on_destroy = function(player, index, stack) | ||||
| 		local pos = player:get_pos() | ||||
| 		if pos then | ||||
| 			minetest.sound_play({ | ||||
| 				name = "mod_name_break_sound", | ||||
| 				pos = pos, | ||||
| 				gain = 0.5, | ||||
| 			}) | ||||
| 		end | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| See armor.lua, technic_armor and shields mods for more examples. | ||||
|  | ||||
| Default groups: | ||||
|  | ||||
| Elements: armor_head, armor_torso, armor_legs, armor_feet | ||||
| Attributes: armor_heal, armor_fire, armor_water | ||||
| Physics: physics_jump, physics_speed, physics_gravity | ||||
| Durability: armor_use, flammable | ||||
|  | ||||
| Notes: | ||||
|  | ||||
| Elements may be modified by dependent mods, eg shields adds armor_shield. | ||||
| Attributes and physics values are 'stackable', durability is determined | ||||
| by the level of armor_use, total uses == approx (65535/armor_use), non-fleshy | ||||
| damage groups need to be defined in the tool/weapon used against the player. | ||||
|  | ||||
| Reciprocal tool damage will be done only by the first armor inventory item | ||||
|  with `reciprocate_damage = true` | ||||
|  | ||||
| Armor Functions: | ||||
|  | ||||
| armor:set_player_armor(player) | ||||
|  | ||||
| Primarily an internal function but can be called externally to apply any | ||||
| changes that might not otherwise get handled. | ||||
|  | ||||
| armor:punch(player, hitter, time_from_last_punch, tool_capabilities) | ||||
|  | ||||
| Used to apply damage to all equipped armor based on the damage groups of | ||||
| each individual item.`hitter`, `time_from_last_punch` and `tool_capabilities` | ||||
| are optional but should be valid if included. | ||||
|  | ||||
| armor:damage(player, index, stack, use) | ||||
|  | ||||
| Adds wear to a single armor itemstack, triggers `on_damage` callbacks and | ||||
| updates the necessary inventories. Also handles item destruction callbacks | ||||
| and so should NOT be called from `on_unequip` to avoid an infinite loop. | ||||
|  | ||||
| Item Callbacks: | ||||
|  | ||||
| on_equip = func(player, index, stack) | ||||
| on_unequip = func(player, index, stack) | ||||
| on_destroy = func(player, index, stack) | ||||
| on_damage = func(player, index, stack) | ||||
| on_punched = func(player, hitter, time_from_last_punch, tool_capabilities) | ||||
|  | ||||
| Notes: | ||||
|  | ||||
| `on_punched` is called every time a player is punched or takes damage, `hitter`, | ||||
| `time_from_last_punch` and `tool_capabilities` can be `nil` and will be in the | ||||
| case of fall damage, etc. When fire protection is enabled, hitter == "fire" | ||||
| in the event of fire damage. Return `false` to override armor damage effects. | ||||
| When armor is destroyed `stack` will contain a copy of the previous stack. | ||||
|  | ||||
| Global Callbacks: | ||||
|  | ||||
| armor:register_on_update(func(player)) | ||||
| armor:register_on_equip(func(player, index, stack)) | ||||
| armor:register_on_unequip(func(player, index, stack)) | ||||
| armor:register_on_destroy(func(player, index, stack)) | ||||
|  | ||||
| Global Callback Example: | ||||
|  | ||||
| armor:register_on_update(function(player) | ||||
| 	print(player:get_player_name().." armor updated!") | ||||
| end) | ||||
|  | ||||
|   | ||||
| @@ -1,45 +0,0 @@ | ||||
| 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") | ||||
|  | ||||
| minetest.register_tool("3d_armor:helmet_admin", { | ||||
| 	description = "Admin Helmet", | ||||
| 	inventory_image = "3d_armor_inv_helmet_admin.png", | ||||
| 	groups = {armor_head=1000, armor_heal=1000, armor_use=0, armor_water=1, not_in_creative_inventory=1}, | ||||
| 	wear = 0, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_tool("3d_armor:chestplate_admin", { | ||||
| 	description = "Admin Chestplate", | ||||
| 	inventory_image = "3d_armor_inv_chestplate_admin.png", | ||||
| 	groups = {armor_torso=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, | ||||
| 	wear = 0, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_tool("3d_armor:leggings_admin", { | ||||
| 	description = "Admin Leggings", | ||||
| 	inventory_image = "3d_armor_inv_leggings_admin.png", | ||||
| 	groups = {armor_legs=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, | ||||
| 	wear = 0, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_tool("3d_armor:boots_admin", { | ||||
| 	description = "Admin Boots", | ||||
| 	inventory_image = "3d_armor_inv_boots_admin.png", | ||||
| 	groups = {armor_feet=1000, armor_heal=1000, armor_use=0, not_in_creative_inventory=1}, | ||||
| 	wear = 0, | ||||
| 	on_drop = function(itemstack, dropper, pos) | ||||
| 		return | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
							
								
								
									
										530
									
								
								3d_armor/api.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,530 @@ | ||||
| -- support for i18n | ||||
| local S = armor_i18n.gettext | ||||
|  | ||||
| local skin_previews = {} | ||||
| local use_player_monoids = minetest.global_exists("player_monoids") | ||||
| local use_armor_monoid = minetest.global_exists("armor_monoid") | ||||
| local use_pova_mod = minetest.get_modpath("pova") | ||||
| local armor_def = setmetatable({}, { | ||||
| 	__index = function() | ||||
| 		return setmetatable({ | ||||
| 			groups = setmetatable({}, { | ||||
| 				__index = function() | ||||
| 					return 0 | ||||
| 				end}) | ||||
| 			}, { | ||||
| 			__index = function() | ||||
| 				return 0 | ||||
| 			end | ||||
| 		}) | ||||
| 	end, | ||||
| }) | ||||
| local armor_textures = setmetatable({}, { | ||||
| 	__index = function() | ||||
| 		return setmetatable({}, { | ||||
| 			__index = function() | ||||
| 				return "blank.png" | ||||
| 			end | ||||
| 		}) | ||||
| 	end | ||||
| }) | ||||
|  | ||||
| armor = { | ||||
| 	timer = 0, | ||||
| 	elements = {"head", "torso", "legs", "feet"}, | ||||
| 	physics = {"jump", "speed", "gravity"}, | ||||
| 	attributes = {"heal", "fire", "water"}, | ||||
| 	formspec = "image[2.5,0;2,4;armor_preview]".. | ||||
| 		default.gui_bg.. | ||||
| 		default.gui_bg_img.. | ||||
| 		default.gui_slots.. | ||||
| 		default.get_hotbar_bg(0, 4.7).. | ||||
| 		"list[current_player;main;0,4.7;8,1;]".. | ||||
| 		"list[current_player;main;0,5.85;8,3;8]", | ||||
| 	def = armor_def, | ||||
| 	textures = armor_textures, | ||||
| 	default_skin = "character", | ||||
| 	materials = { | ||||
| 		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", | ||||
| 	}, | ||||
| 	fire_nodes = { | ||||
| 		{"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}, | ||||
| 		{"default:torch",           1, 1}, | ||||
| 		{"default:torch_ceiling",   1, 1}, | ||||
| 		{"default:torch_wall",      1, 1}, | ||||
| 	}, | ||||
| 	registered_groups = {["fleshy"]=100}, | ||||
| 	registered_callbacks = { | ||||
| 		on_update = {}, | ||||
| 		on_equip = {}, | ||||
| 		on_unequip = {}, | ||||
| 		on_damage = {}, | ||||
| 		on_destroy = {}, | ||||
| 	}, | ||||
| 	migrate_old_inventory = true, | ||||
| 	version = "0.4.13", | ||||
| } | ||||
|  | ||||
| armor.config = { | ||||
| 	init_delay = 2, | ||||
| 	init_times = 10, | ||||
| 	bones_delay = 1, | ||||
| 	update_time = 1, | ||||
| 	drop = minetest.get_modpath("bones") ~= nil, | ||||
| 	destroy = false, | ||||
| 	level_multiplier = 1, | ||||
| 	heal_multiplier = 1, | ||||
| 	material_wood = true, | ||||
| 	material_cactus = true, | ||||
| 	material_steel = true, | ||||
| 	material_bronze = true, | ||||
| 	material_diamond = true, | ||||
| 	material_gold = true, | ||||
| 	material_mithril = true, | ||||
| 	material_crystal = true, | ||||
| 	water_protect = true, | ||||
| 	fire_protect = minetest.get_modpath("ethereal") ~= nil, | ||||
| 	punch_damage = true, | ||||
| } | ||||
|  | ||||
| -- Armor Registration | ||||
|  | ||||
| armor.register_armor = function(self, name, def) | ||||
| 	minetest.register_tool(name, def) | ||||
| end | ||||
|  | ||||
| armor.register_armor_group = function(self, group, base) | ||||
| 	base = base or 100 | ||||
| 	self.registered_groups[group] = base | ||||
| 	if use_armor_monoid then | ||||
| 		armor_monoid.register_armor_group(group, base) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- Armor callbacks | ||||
|  | ||||
| armor.register_on_update = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_update, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.register_on_equip = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_equip, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.register_on_unequip = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_unequip, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.register_on_damage = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_damage, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.register_on_destroy = function(self, func) | ||||
| 	if type(func) == "function" then | ||||
| 		table.insert(self.registered_callbacks.on_destroy, func) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.run_callbacks = function(self, callback, player, index, stack) | ||||
| 	if stack then | ||||
| 		local def = stack:get_definition() or {} | ||||
| 		if type(def[callback]) == "function" then | ||||
| 			def[callback](player, index, stack) | ||||
| 		end | ||||
| 	end | ||||
| 	local callbacks = self.registered_callbacks[callback] | ||||
| 	if callbacks then | ||||
| 		for _, func in pairs(callbacks) do | ||||
| 			func(player, index, stack) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| 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, { | ||||
| 			self.textures[name].skin, | ||||
| 			self.textures[name].armor, | ||||
| 			self.textures[name].wielditem, | ||||
| 		}) | ||||
| 	end | ||||
| 	self:run_callbacks("on_update", player) | ||||
| end | ||||
|  | ||||
| armor.set_player_armor = function(self, player) | ||||
| 	local name, armor_inv = self:get_valid_player(player, "[set_player_armor]") | ||||
| 	if not name then | ||||
| 		return | ||||
| 	end | ||||
| 	local state = 0 | ||||
| 	local count = 0 | ||||
| 	local material = {count=1} | ||||
| 	local preview = armor:get_preview(name) | ||||
| 	local texture = "3d_armor_trans.png" | ||||
| 	local textures = {} | ||||
| 	local physics = {} | ||||
| 	local attributes = {} | ||||
| 	local levels = {} | ||||
| 	local groups = {} | ||||
| 	local change = {} | ||||
| 	for _, phys in pairs(self.physics) do | ||||
| 		physics[phys] = 1 | ||||
| 	end | ||||
| 	for _, attr in pairs(self.attributes) do | ||||
| 		attributes[attr] = 0 | ||||
| 	end | ||||
| 	for group, _ in pairs(self.registered_groups) do | ||||
| 		change[group] = 1 | ||||
| 		levels[group] = 0 | ||||
| 	end | ||||
| 	local list = armor_inv:get_list("armor") | ||||
| 	if type(list) ~= "table" then | ||||
| 		return | ||||
| 	end | ||||
| 	for i, stack in pairs(list) do | ||||
| 		if stack:get_count() == 1 then | ||||
| 			local def = stack:get_definition() | ||||
| 			for _, element in pairs(self.elements) do | ||||
| 				if def.groups["armor_"..element] then | ||||
| 					if def.armor_groups then | ||||
| 						for group, level in pairs(def.armor_groups) do | ||||
| 							if levels[group] then | ||||
| 								levels[group] = levels[group] + level | ||||
| 							end | ||||
| 						end | ||||
| 					else | ||||
| 						local level = def.groups["armor_"..element] | ||||
| 						levels["fleshy"] = levels["fleshy"] + level | ||||
| 					end | ||||
| 					break | ||||
| 				end | ||||
| 				-- DEPRECATED, use armor_groups instead | ||||
| 				if def.groups["armor_radiation"] and levels["radiation"] then | ||||
| 					levels["radiation"] = def.groups["armor_radiation"] | ||||
| 				end | ||||
| 			end | ||||
| 			local item = stack:get_name() | ||||
| 			local tex = def.texture or item:gsub("%:", "_") | ||||
| 			tex = tex:gsub(".png$", "") | ||||
| 			local prev = def.preview or tex.."_preview" | ||||
| 			prev = prev:gsub(".png$", "") | ||||
| 			texture = texture.."^"..tex..".png" | ||||
| 			preview = preview.."^"..prev..".png" | ||||
| 			state = state + stack:get_wear() | ||||
| 			count = count + 1 | ||||
| 			for _, phys in pairs(self.physics) do | ||||
| 				local value = def.groups["physics_"..phys] or 0 | ||||
| 				physics[phys] = physics[phys] + value | ||||
| 			end | ||||
| 			for _, attr in pairs(self.attributes) do | ||||
| 				local value = def.groups["armor_"..attr] or 0 | ||||
| 				attributes[attr] = attributes[attr] + value | ||||
| 			end | ||||
| 			local mat = string.match(item, "%:.+_(.+)$") | ||||
| 			if material.name then | ||||
| 				if material.name == mat then | ||||
| 					material.count = material.count + 1 | ||||
| 				end | ||||
| 			else | ||||
| 				material.name = mat | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	for group, level in pairs(levels) do | ||||
| 		if level > 0 then | ||||
| 			level = level * armor.config.level_multiplier | ||||
| 			if material.name and material.count == #self.elements then | ||||
| 				level = level * 1.1 | ||||
| 			end | ||||
| 		end | ||||
| 		local base = self.registered_groups[group] | ||||
| 		self.def[name].groups[group] = level | ||||
| 		if level > base then | ||||
| 			level = base | ||||
| 		end | ||||
| 		groups[group] = base - level | ||||
| 		change[group] = groups[group] / base | ||||
| 	end | ||||
| 	for _, attr in pairs(self.attributes) do | ||||
| 		local mult = attr == "heal" and self.config.heal_multiplier or 1 | ||||
| 		self.def[name][attr] = attributes[attr] * mult | ||||
| 	end | ||||
| 	for _, phys in pairs(self.physics) do | ||||
| 		self.def[name][phys] = physics[phys] | ||||
| 	end | ||||
| 	if use_armor_monoid then | ||||
| 		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 | ||||
| 		if immortal and immortal ~= 0 then | ||||
| 			groups.immortal = 1 | ||||
| 		end | ||||
| 		player:set_armor_groups(groups) | ||||
| 	end | ||||
| 	if use_player_monoids then | ||||
| 		player_monoids.speed:add_change(player, physics.speed, | ||||
| 			"3d_armor:physics") | ||||
| 		player_monoids.jump:add_change(player, physics.jump, | ||||
| 			"3d_armor:physics") | ||||
| 		player_monoids.gravity:add_change(player, physics.gravity, | ||||
| 			"3d_armor:physics") | ||||
| 	elseif use_pova_mod then | ||||
| 		-- only add the changes, not the default 1.0 for each physics setting | ||||
| 		pova.add_override(name, "3d_armor", { | ||||
| 			speed = physics.speed - 1, | ||||
| 			jump = physics.jump - 1, | ||||
| 			gravity = physics.gravity - 1, | ||||
| 		}) | ||||
| 		pova.do_override(player) | ||||
| 	else | ||||
| 		player:set_physics_override(physics) | ||||
| 	end | ||||
| 	self.textures[name].armor = texture | ||||
| 	self.textures[name].preview = preview | ||||
| 	self.def[name].level = self.def[name].groups.fleshy or 0 | ||||
| 	self.def[name].state = state | ||||
| 	self.def[name].count = count | ||||
| 	self:update_player_visuals(player) | ||||
| end | ||||
|  | ||||
| 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 | ||||
| 		return | ||||
| 	end | ||||
| 	local state = 0 | ||||
| 	local count = 0 | ||||
| 	local recip = true | ||||
| 	local default_groups = {cracky=3, snappy=3, choppy=3, crumbly=3, level=1} | ||||
| 	local list = armor_inv:get_list("armor") | ||||
| 	for i, stack in pairs(list) do | ||||
| 		if stack:get_count() == 1 then | ||||
| 			local name = stack:get_name() | ||||
| 			local use = minetest.get_item_group(name, "armor_use") or 0 | ||||
| 			local damage = use > 0 | ||||
| 			local def = stack:get_definition() or {} | ||||
| 			if type(def.on_punched) == "function" then | ||||
| 				damage = def.on_punched(player, hitter, time_from_last_punch, | ||||
| 					tool_capabilities) ~= false and damage == true | ||||
| 			end | ||||
| 			if damage == true and tool_capabilities then | ||||
| 				local damage_groups = def.damage_groups or default_groups | ||||
| 				local level = damage_groups.level or 0 | ||||
| 				local groupcaps = tool_capabilities.groupcaps or {} | ||||
| 				local uses = 0 | ||||
| 				damage = false | ||||
| 				for group, caps in pairs(groupcaps) do | ||||
| 					local maxlevel = caps.maxlevel or 0 | ||||
| 					local diff = maxlevel - level | ||||
| 					if diff == 0 then | ||||
| 						diff = 1 | ||||
| 					end | ||||
| 					if diff > 0 and caps.times then | ||||
| 						local group_level = damage_groups[group] | ||||
| 						if group_level then | ||||
| 							local time = caps.times[group_level] | ||||
| 							if time then | ||||
| 								local dt = time_from_last_punch or 0 | ||||
| 								if dt > time / diff then | ||||
| 									if caps.uses then | ||||
| 										uses = caps.uses * math.pow(3, diff) | ||||
| 									end | ||||
| 									damage = true | ||||
| 									break | ||||
| 								end | ||||
| 							end | ||||
| 						end | ||||
| 					end | ||||
| 				end | ||||
| 				if damage == true and recip == true and hitter and | ||||
| 						def.reciprocate_damage == true and uses > 0 then | ||||
| 					local item = hitter:get_wielded_item() | ||||
| 					if item and item:get_name() ~= "" then | ||||
| 						item:add_wear(65535 / uses) | ||||
| 						hitter:set_wielded_item(item) | ||||
| 					end | ||||
| 					-- reciprocate tool damage only once | ||||
| 					recip = false | ||||
| 				end | ||||
| 			end | ||||
| 			if damage == true and hitter == "fire" then | ||||
| 				damage = minetest.get_item_group(name, "flammable") > 0 | ||||
| 			end | ||||
| 			if damage == true then | ||||
| 				self:damage(player, i, stack, use) | ||||
| 			end | ||||
| 			state = state + stack:get_wear() | ||||
| 			count = count + 1 | ||||
| 		end | ||||
| 	end | ||||
| 	self.def[name].state = state | ||||
| 	self.def[name].count = count | ||||
| end | ||||
|  | ||||
| armor.damage = function(self, player, index, stack, use) | ||||
| 	local old_stack = ItemStack(stack) | ||||
| 	stack:add_wear(use) | ||||
| 	self:run_callbacks("on_damage", player, index, stack) | ||||
| 	self:set_inventory_stack(player, index, stack) | ||||
| 	if stack:get_count() == 0 then | ||||
| 		self:run_callbacks("on_unequip", player, index, old_stack) | ||||
| 		self:run_callbacks("on_destroy", player, index, old_stack) | ||||
| 		self:set_player_armor(player) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.get_player_skin = function(self, name) | ||||
| 	if (self.skin_mod == "skins" or self.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 | ||||
| 		return u_skins.u_skins[name]..".png" | ||||
| 	elseif self.skin_mod == "wardrobe" and wardrobe.playerSkins and wardrobe.playerSkins[name] then | ||||
| 		return wardrobe.playerSkins[name] | ||||
| 	end | ||||
| 	return armor.default_skin..".png" | ||||
| end | ||||
|  | ||||
| armor.add_preview = function(self, preview) | ||||
| 	skin_previews[preview] = true | ||||
| end | ||||
|  | ||||
| armor.get_preview = function(self, name) | ||||
| 	local preview = string.gsub(armor:get_player_skin(name), ".png", "_preview.png") | ||||
| 	if skin_previews[preview] then | ||||
| 		return preview | ||||
| 	end | ||||
| 	return "character_preview.png" | ||||
| end | ||||
|  | ||||
| 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 | ||||
| 		formspec = formspec.."listring[current_player;main]".. | ||||
| 			"listring[detached:"..name.."_armor;armor]" | ||||
| 	end | ||||
| 	formspec = formspec:gsub("armor_preview", armor.textures[name].preview) | ||||
| 	formspec = formspec:gsub("armor_level", armor.def[name].level) | ||||
| 	for _, attr in pairs(self.attributes) do | ||||
| 		formspec = formspec:gsub("armor_attr_"..attr, armor.def[name][attr]) | ||||
| 	end | ||||
| 	for group, _ in pairs(self.registered_groups) do | ||||
| 		formspec = formspec:gsub("armor_group_"..group, | ||||
| 			armor.def[name].groups[group]) | ||||
| 	end | ||||
| 	return formspec | ||||
| end | ||||
|  | ||||
| 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 | ||||
| 			return element | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.serialize_inventory_list = function(self, list) | ||||
| 	local list_table = {} | ||||
| 	for _, stack in ipairs(list) do | ||||
| 		table.insert(list_table, stack:to_string()) | ||||
| 	end | ||||
| 	return minetest.serialize(list_table) | ||||
| end | ||||
|  | ||||
| armor.deserialize_inventory_list = function(self, list_string) | ||||
| 	local list_table = minetest.deserialize(list_string) | ||||
| 	local list = {} | ||||
| 	for _, stack in ipairs(list_table or {}) do | ||||
| 		table.insert(list, ItemStack(stack)) | ||||
| 	end | ||||
| 	return list | ||||
| end | ||||
|  | ||||
| armor.load_armor_inventory = function(self, player) | ||||
| 	local _, inv = self:get_valid_player(player, "[load_armor_inventory]") | ||||
| 	if inv then | ||||
| 		local armor_list_string = player:get_attribute("3d_armor_inventory") | ||||
| 		if armor_list_string then | ||||
| 			inv:set_list("armor", | ||||
| 				self:deserialize_inventory_list(armor_list_string)) | ||||
| 			return true | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.save_armor_inventory = function(self, player) | ||||
| 	local _, inv = self:get_valid_player(player, "[save_armor_inventory]") | ||||
| 	if inv then | ||||
| 		player:set_attribute("3d_armor_inventory", | ||||
| 			self:serialize_inventory_list(inv:get_list("armor"))) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.update_inventory = function(self, player) | ||||
| 	-- DEPRECATED: Legacy inventory support | ||||
| end | ||||
|  | ||||
| armor.set_inventory_stack = function(self, player, i, stack) | ||||
| 	local _, inv = self:get_valid_player(player, "[set_inventory_stack]") | ||||
| 	if inv then | ||||
| 		inv:set_stack("armor", i, stack) | ||||
| 		self:save_armor_inventory(player) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| 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)) | ||||
| 		return | ||||
| 	end | ||||
| 	local name = player:get_player_name() | ||||
| 	if not name then | ||||
| 		minetest.log("warning", S("3d_armor: Player name is nil @1", 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)) | ||||
| 		return | ||||
| 	end | ||||
| 	return name, inv | ||||
| end | ||||
|  | ||||
| armor.drop_armor = function(pos, stack) | ||||
| 	local node = minetest.get_node_or_nil(pos) | ||||
| 	if node then | ||||
| 		local obj = minetest.add_item(pos, stack) | ||||
| 		if obj then | ||||
| 			obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)}) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
| @@ -1,3 +1,7 @@ | ||||
| -- DEPRECATED, will not be supported in future versions | ||||
|  | ||||
| -- See README.txt for new configuration options. | ||||
|  | ||||
| -- Armor Configuration (defaults) | ||||
|  | ||||
| -- You can remove any unwanted armor materials from this table. | ||||
|   | ||||
| @@ -1,646 +1,346 @@ | ||||
| ARMOR_INIT_DELAY = 1 | ||||
| ARMOR_INIT_TIMES = 1 | ||||
| ARMOR_BONES_DELAY = 1 | ||||
| ARMOR_UPDATE_TIME = 1 | ||||
| ARMOR_DROP = minetest.get_modpath("bones") ~= nil | ||||
| ARMOR_DESTROY = false | ||||
| ARMOR_LEVEL_MULTIPLIER = 1 | ||||
| ARMOR_HEAL_MULTIPLIER = 1 | ||||
| ARMOR_RADIATION_MULTIPLIER = 1 | ||||
| ARMOR_MATERIALS = { | ||||
| 	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", | ||||
| } | ||||
| ARMOR_FIRE_PROTECT = minetest.get_modpath("ethereal") ~= nil | ||||
| ARMOR_FIRE_NODES = { | ||||
| 	{"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}, | ||||
| 	{"default:torch",           1, 1}, | ||||
| } | ||||
| -- support for i18n | ||||
| local S = armor_i18n.gettext | ||||
|  | ||||
| local skin_mod = nil | ||||
| local inv_mod = nil | ||||
|  | ||||
| local modpath = minetest.get_modpath(ARMOR_MOD_NAME) | ||||
| local worldpath = minetest.get_worldpath() | ||||
| local input = io.open(modpath.."/armor.conf", "r") | ||||
| if input then | ||||
| 	dofile(modpath.."/armor.conf") | ||||
| 	input:close() | ||||
| 	input = nil | ||||
| end | ||||
| input = io.open(worldpath.."/armor.conf", "r") | ||||
| if input then | ||||
| 	dofile(worldpath.."/armor.conf") | ||||
| 	input:close() | ||||
| 	input = nil | ||||
| 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 | ||||
|  | ||||
| armor = { | ||||
| 	timer = 0, | ||||
| 	elements = {"head", "torso", "legs", "feet"}, | ||||
| 	physics = {"jump","speed","gravity"}, | ||||
| 	formspec = "size[8,8.5]image[2,0.75;2,4;armor_preview]" | ||||
| 		.."list[current_player;main;0,4.5;8,4;]" | ||||
| 		.."list[current_player;craft;4,1;3,3;]" | ||||
| 		.."list[current_player;craftpreview;7,2;1,1;]" | ||||
| 		.."listring[current_player;main]" | ||||
| 		.."listring[current_player;craft]", | ||||
| 	textures = {}, | ||||
| 	default_skin = "character", | ||||
| 	version = "0.4.7", | ||||
| } | ||||
|  | ||||
| if minetest.get_modpath("inventory_plus") then | ||||
| 	inv_mod = "inventory_plus" | ||||
| 	armor.formspec = "size[8,8.5]button[0,0;2,0.5;main;Back]" | ||||
| 		.."image[2.5,0.75;2,4;armor_preview]" | ||||
| 		.."label[5,1;Level: armor_level]" | ||||
| 		.."label[5,1.5;Heal:  armor_heal]" | ||||
| 		.."label[5,2;Fire:  armor_fire]" | ||||
| 		.."label[5,2.5;Radiation:  armor_radiation]" | ||||
| 		.."list[current_player;main;0,4.5;8,4;]" | ||||
| 	if minetest.get_modpath("crafting") then | ||||
| 		inventory_plus.get_formspec = function(player, page) | ||||
| 		end | ||||
| 	end | ||||
| elseif minetest.get_modpath("unified_inventory") then | ||||
| 	inv_mod = "unified_inventory" | ||||
| 	unified_inventory.register_button("armor", { | ||||
| 		type = "image", | ||||
| 		image = "inventory_plus_armor.png", | ||||
| 	}) | ||||
| 	unified_inventory.register_page("armor", { | ||||
| 		get_formspec = function(player, perplayer_formspec) | ||||
| 			local fy = perplayer_formspec.formspec_y | ||||
| 			local name = player:get_player_name() | ||||
| 			local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]" | ||||
| 				.."label[0,0;Armor]" | ||||
| 				.."list[detached:"..name.."_armor;armor;0,"..fy..";2,3;]" | ||||
| 				.."image[2.5,"..(fy - 0.25)..";2,4;"..armor.textures[name].preview.."]" | ||||
| 				.."label[5.0,"..(fy + 0.0)..";Level: "..armor.def[name].level.."]" | ||||
| 				.."label[5.0,"..(fy + 0.5)..";Heal:  "..armor.def[name].heal.."]" | ||||
| 				.."label[5.0,"..(fy + 1.0)..";Fire:  "..armor.def[name].fire.."]" | ||||
| 				.."label[5.0,"..(fy + 1.5)..";Radiation:  "..armor.def[name].radiation.."]" | ||||
| 				.."listring[current_player;main]" | ||||
| 				.."listring[detached:"..name.."_armor;armor]" | ||||
| 			return {formspec=formspec} | ||||
| 		end, | ||||
| 	}) | ||||
| elseif minetest.get_modpath("inventory_enhanced") then | ||||
| 	inv_mod = "inventory_enhanced" | ||||
| end | ||||
|  | ||||
| if minetest.get_modpath("skins") then | ||||
| 	skin_mod = "skins" | ||||
| elseif minetest.get_modpath("simple_skins") then | ||||
| 	skin_mod = "simple_skins" | ||||
| elseif minetest.get_modpath("u_skins") then | ||||
| 	skin_mod = "u_skins" | ||||
| elseif minetest.get_modpath("wardrobe") then | ||||
| 	skin_mod = "wardrobe" | ||||
| end | ||||
|  | ||||
| armor.def = { | ||||
| 	state = 0, | ||||
| 	count = 0, | ||||
| } | ||||
|  | ||||
| armor.update_player_visuals = function(self, player) | ||||
| 	if not player then | ||||
| 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 | ||||
| 	local name = player:get_player_name() | ||||
| 	if self.textures[name] then | ||||
| 		default.player_set_textures(player, { | ||||
| 			self.textures[name].skin, | ||||
| 			self.textures[name].armor, | ||||
| 			self.textures[name].wielditem, | ||||
| 		}) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.set_player_armor = function(self, player) | ||||
| 	local name, player_inv = armor:get_valid_player(player, "[set_player_armor]") | ||||
| 	if not name then | ||||
| 		return | ||||
| 	end | ||||
| 	local armor_texture = "3d_armor_trans.png" | ||||
| 	local armor_level = 0 | ||||
| 	local armor_heal = 0 | ||||
| 	local armor_fire = 0 | ||||
| 	local armor_water = 0 | ||||
| 	local armor_radiation = 0 | ||||
| 	local state = 0 | ||||
| 	local items = 0 | ||||
| 	local elements = {} | ||||
| 	local textures = {} | ||||
| 	local physics_o = {speed=1,gravity=1,jump=1} | ||||
| 	local material = {type=nil, count=1} | ||||
| 	local preview = armor:get_preview(name) or "character_preview.png" | ||||
| 	for _,v in ipairs(self.elements) do | ||||
| 		elements[v] = false | ||||
| 	end | ||||
| 	for i=1, 6 do | ||||
| 		local stack = player_inv:get_stack("armor", i) | ||||
| 		local item = stack:get_name() | ||||
| 		if stack:get_count() == 1 then | ||||
| 			local def = stack:get_definition() | ||||
| 			for k, v in pairs(elements) do | ||||
| 				if v == false then | ||||
| 					local level = def.groups["armor_"..k] | ||||
| 					if level then | ||||
| 						local texture = def.texture or item:gsub("%:", "_") | ||||
| 						table.insert(textures, texture..".png") | ||||
| 						preview = preview.."^"..texture.."_preview.png" | ||||
| 						armor_level = armor_level + level | ||||
| 						state = state + stack:get_wear() | ||||
| 						items = items + 1 | ||||
| 						armor_heal = armor_heal + (def.groups["armor_heal"] or 0) | ||||
| 						armor_fire = armor_fire + (def.groups["armor_fire"] or 0) | ||||
| 						armor_water = armor_water + (def.groups["armor_water"] or 0) | ||||
| 						armor_radiation = armor_radiation + (def.groups["armor_radiation"] or 0) | ||||
| 						for kk,vv in ipairs(self.physics) do | ||||
| 							local o_value = def.groups["physics_"..vv] | ||||
| 							if o_value then | ||||
| 								physics_o[vv] = physics_o[vv] + o_value | ||||
| 							end | ||||
| 						end | ||||
| 						local mat = string.match(item, "%:.+_(.+)$") | ||||
| 						if material.type then | ||||
| 							if material.type == mat then | ||||
| 								material.count = material.count + 1 | ||||
| 							end | ||||
| 						else | ||||
| 							material.type = mat | ||||
| 						end | ||||
| 						elements[k] = true | ||||
| 					end | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	if minetest.get_modpath("shields") then | ||||
| 		armor_level = armor_level * 0.9 | ||||
| 	end | ||||
| 	if material.type and material.count == #self.elements then | ||||
| 		armor_level = armor_level * 1.1 | ||||
| 	end | ||||
| 	armor_level = armor_level * ARMOR_LEVEL_MULTIPLIER | ||||
| 	armor_heal = armor_heal * ARMOR_HEAL_MULTIPLIER | ||||
| 	armor_radiation = armor_radiation * ARMOR_RADIATION_MULTIPLIER | ||||
| 	if #textures > 0 then | ||||
| 		armor_texture = table.concat(textures, "^") | ||||
| 	end | ||||
| 	local armor_groups = {fleshy=100} | ||||
| 	if armor_level > 0 then | ||||
| 		armor_groups.level = math.floor(armor_level / 20) | ||||
| 		armor_groups.fleshy = 100 - armor_level | ||||
| 		armor_groups.radiation = 100 - armor_radiation | ||||
| 	end | ||||
| 	player:set_armor_groups(armor_groups) | ||||
| 	player:set_physics_override(physics_o) | ||||
| 	self.textures[name].armor = armor_texture | ||||
| 	self.textures[name].preview = preview | ||||
| 	self.def[name].state = state | ||||
| 	self.def[name].count = items | ||||
| 	self.def[name].level = armor_level | ||||
| 	self.def[name].heal = armor_heal | ||||
| 	self.def[name].jump = physics_o.jump | ||||
| 	self.def[name].speed = physics_o.speed | ||||
| 	self.def[name].gravity = physics_o.gravity | ||||
| 	self.def[name].fire = armor_fire | ||||
| 	self.def[name].water = armor_water | ||||
| 	self.def[name].radiation = armor_radiation | ||||
| 	self:update_player_visuals(player) | ||||
| end | ||||
|  | ||||
| armor.update_armor = function(self, player) | ||||
| 	-- Legacy support: Called when armor levels are changed | ||||
| 	-- Other mods can hook on to this function, see hud mod for example  | ||||
| end | ||||
|  | ||||
| armor.get_player_skin = function(self, name) | ||||
| 	local skin = nil | ||||
| 	if skin_mod == "skins" or skin_mod == "simple_skins" then | ||||
| 		skin = skins.skins[name] | ||||
| 	elseif skin_mod == "u_skins" then | ||||
| 		skin = u_skins.u_skins[name] | ||||
| 	elseif skin_mod == "wardrobe" then | ||||
| 		skin = string.gsub(wardrobe.playerSkins[name], "%.png$","") | ||||
| 	end | ||||
| 	return skin or armor.default_skin | ||||
| end | ||||
|  | ||||
| armor.get_preview = function(self, name) | ||||
| 	if skin_mod == "skins" then | ||||
| 		return armor:get_player_skin(name).."_preview.png" | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.get_armor_formspec = function(self, name) | ||||
| 	if not armor.textures[name] then | ||||
| 		minetest.log("error", "3d_armor: Player texture["..name.."] is nil [get_armor_formspec]") | ||||
| 		return "" | ||||
| 	end | ||||
| 	if not armor.def[name] then | ||||
| 		minetest.log("error", "3d_armor: Armor def["..name.."] is nil [get_armor_formspec]") | ||||
| 		return "" | ||||
| 	end | ||||
| 	local formspec = armor.formspec.."list[detached:"..name.."_armor;armor;0,1;2,3;]" | ||||
| 	formspec = formspec:gsub("armor_preview", armor.textures[name].preview) | ||||
| 	formspec = formspec:gsub("armor_level", armor.def[name].level) | ||||
| 	formspec = formspec:gsub("armor_heal", armor.def[name].heal) | ||||
| 	formspec = formspec:gsub("armor_fire", armor.def[name].fire) | ||||
| 	formspec = formspec:gsub("armor_radiation", armor.def[name].radiation) | ||||
| 	return formspec | ||||
| end | ||||
|  | ||||
| armor.update_inventory = function(self, player) | ||||
| 	local name = armor:get_valid_player(player, "[set_player_armor]") | ||||
| 	if not name or inv_mod == "inventory_enhanced" then | ||||
| 		return | ||||
| 	end | ||||
| 	if inv_mod == "unified_inventory" then | ||||
| 		if unified_inventory.current_page[name] == "armor" then | ||||
| 			unified_inventory.set_inventory_formspec(player, "armor") | ||||
| 		end | ||||
| 	else | ||||
| 		local formspec = armor:get_armor_formspec(name) | ||||
| 		if inv_mod == "inventory_plus" then | ||||
| 			formspec = formspec.."listring[current_player;main]" | ||||
| 				.."listring[detached:"..name.."_armor;armor]" | ||||
| 			local page = player:get_inventory_formspec() | ||||
| 			if page:find("detached:"..name.."_armor") then | ||||
| 				inventory_plus.set_inventory_formspec(player, formspec) | ||||
| 			end | ||||
| 		elseif not core.setting_getbool("creative_mode") then | ||||
| 			player:set_inventory_formspec(formspec) | ||||
| 		end | ||||
| 	end | ||||
| end | ||||
|  | ||||
| armor.get_valid_player = function(self, player, msg) | ||||
| 	msg = msg or "" | ||||
| 	if not player then | ||||
| 		minetest.log("error", "3d_armor: Player reference is nil "..msg) | ||||
| 		return | ||||
| 	end | ||||
| 	local name = player:get_player_name() | ||||
| 	if not name then | ||||
| 		minetest.log("error", "3d_armor: Player name is nil "..msg) | ||||
| 		return | ||||
| 	end | ||||
| 	local pos = player:getpos() | ||||
| 	local player_inv = player:get_inventory() | ||||
| 	local armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) | ||||
| 	if not pos then | ||||
| 		minetest.log("error", "3d_armor: Player position is nil "..msg) | ||||
| 		return | ||||
| 	elseif not player_inv then | ||||
| 		minetest.log("error", "3d_armor: Player inventory is nil "..msg) | ||||
| 		return | ||||
| 	elseif not armor_inv then | ||||
| 		minetest.log("error", "3d_armor: Detached armor inventory is nil "..msg) | ||||
| 		return | ||||
| 	end | ||||
| 	return name, player_inv, armor_inv, pos | ||||
| end | ||||
|  | ||||
| -- Register Player Model | ||||
|  | ||||
| default.player_register_model("3d_armor_character.b3d", { | ||||
| 	animation_speed = 30, | ||||
| 	textures = { | ||||
| 		armor.default_skin..".png", | ||||
| 		"3d_armor_trans.png", | ||||
| 		"3d_armor_trans.png", | ||||
| 	}, | ||||
| 	animations = { | ||||
| 		stand = {x=0, y=79}, | ||||
| 		lay = {x=162, y=166}, | ||||
| 		walk = {x=168, y=187}, | ||||
| 		mine = {x=189, y=198}, | ||||
| 		walk_mine = {x=200, y=219}, | ||||
| 		sit = {x=81, y=160}, | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| -- Register Callbacks | ||||
|  | ||||
| minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 	local name = armor:get_valid_player(player, "[on_player_receive_fields]") | ||||
| 	if not name or inv_mod == "inventory_enhanced" then | ||||
| 		return | ||||
| 	end | ||||
| 	if inv_mod == "inventory_plus" and fields.armor then | ||||
| 		local formspec = armor:get_armor_formspec(name) | ||||
| 		inventory_plus.set_inventory_formspec(player, formspec) | ||||
| 		return | ||||
| 	end | ||||
| 	for field, _ in pairs(fields) do | ||||
| 		if string.find(field, "skins_set") then | ||||
| 			minetest.after(0, function(player) | ||||
| 				local skin = armor:get_player_skin(name) | ||||
| 				armor.textures[name].skin = skin..".png" | ||||
| 				armor:set_player_armor(player) | ||||
| 			end, player) | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.register_on_joinplayer(function(player) | ||||
| 	default.player_set_model(player, "3d_armor_character.b3d") | ||||
| 	local name = player:get_player_name() | ||||
| 	local player_inv = player:get_inventory() | ||||
| 	local armor_inv = minetest.create_detached_inventory(name.."_armor", { | ||||
| 		on_put = function(inv, listname, index, stack, player) | ||||
| 			player:get_inventory():set_stack(listname, index, stack) | ||||
| 			armor:set_player_armor(player) | ||||
| 			armor:update_inventory(player) | ||||
| 		end, | ||||
| 		on_take = function(inv, listname, index, stack, player) | ||||
| 			player:get_inventory():set_stack(listname, index, nil) | ||||
| 			armor:set_player_armor(player) | ||||
| 			armor:update_inventory(player) | ||||
| 		end, | ||||
| 		on_move = function(inv, from_list, from_index, to_list, to_index, count, player) | ||||
| 			local plaver_inv = player:get_inventory() | ||||
| 			local stack = inv:get_stack(to_list, to_index) | ||||
| 			player_inv:set_stack(to_list, to_index, stack) | ||||
| 			player_inv:set_stack(from_list, from_index, nil) | ||||
| 			armor:set_player_armor(player) | ||||
| 			armor:update_inventory(player) | ||||
| 		end, | ||||
| 		allow_put = function(inv, listname, index, stack, player) | ||||
| 			return 1 | ||||
| 		end, | ||||
| 		allow_take = function(inv, listname, index, stack, player) | ||||
| 			return stack:get_count() | ||||
| 		end, | ||||
| 		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) | ||||
| 			return count | ||||
| 		end, | ||||
| 	}, name) | ||||
| 	if inv_mod == "inventory_plus" then | ||||
| 		inventory_plus.register_button(player,"armor", "Armor") | ||||
| 	end | ||||
| 	armor_inv:set_size("armor", 6) | ||||
| 	player_inv:set_size("armor", 6) | ||||
| 	for i=1, 6 do | ||||
| 		local stack = player_inv:get_stack("armor", i) | ||||
| 		armor_inv:set_stack("armor", i, stack) | ||||
| 	end	 | ||||
| 	armor.def[name] = { | ||||
| 		state = 0, | ||||
| 		count = 0, | ||||
| 		level = 0, | ||||
| 		heal = 0, | ||||
| 		jump = 1, | ||||
| 		speed = 1, | ||||
| 		gravity = 1, | ||||
| 		fire = 0, | ||||
| 		water = 0, | ||||
| 		radiation = 0, | ||||
| 	} | ||||
| 	armor.textures[name] = { | ||||
| 		skin = armor.default_skin..".png", | ||||
| 		armor = "3d_armor_trans.png", | ||||
| 		wielditem = "3d_armor_trans.png", | ||||
| 		preview = armor.default_skin.."_preview.png", | ||||
| 	} | ||||
| 	if skin_mod == "skins" then | ||||
| 		local skin = skins.skins[name] | ||||
| 		if skin and skins.get_type(skin) == skins.type.MODEL then | ||||
| 			armor.textures[name].skin = skin..".png" | ||||
| 		end | ||||
| 	elseif skin_mod == "simple_skins" then | ||||
| 		local skin = skins.skins[name] | ||||
| 		if skin then | ||||
| 			armor.textures[name].skin = skin..".png" | ||||
| 		end | ||||
| 	elseif skin_mod == "u_skins" then | ||||
| 		local skin = u_skins.u_skins[name] | ||||
| 		if skin and u_skins.get_type(skin) == u_skins.type.MODEL then | ||||
| 			armor.textures[name].skin = skin..".png" | ||||
| 		end | ||||
| 	elseif skin_mod == "wardrobe" then | ||||
| 		local skin = wardrobe.playerSkins[name] | ||||
| 		if skin then | ||||
| 			armor.textures[name].skin = skin | ||||
| 		end | ||||
| 	end | ||||
| 	if minetest.get_modpath("player_textures") then | ||||
| 		local filename = minetest.get_modpath("player_textures").."/textures/player_"..name | ||||
| 		local f = io.open(filename..".png") | ||||
| 		if f then | ||||
| 			f:close() | ||||
| 			armor.textures[name].skin = "player_"..name..".png" | ||||
| 		end | ||||
| 	end | ||||
| 	for i=1, ARMOR_INIT_TIMES do | ||||
| 		minetest.after(ARMOR_INIT_DELAY * i, function(player) | ||||
| 			armor:set_player_armor(player) | ||||
| 			if not inv_mod then | ||||
| 				armor:update_inventory(player) | ||||
| 			end | ||||
| 		end, player) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| if ARMOR_DROP == true or ARMOR_DESTROY == true then | ||||
| 	armor.drop_armor = function(pos, stack) | ||||
| 		local obj = minetest.add_item(pos, stack) | ||||
| 		if obj then | ||||
| 			obj:setvelocity({x=math.random(-1, 1), y=5, z=math.random(-1, 1)}) | ||||
| 		end | ||||
| 	end | ||||
| 	minetest.register_on_dieplayer(function(player) | ||||
| 		local name, player_inv, armor_inv, pos = armor:get_valid_player(player, "[on_dieplayer]") | ||||
| 		if not name then | ||||
| 			return | ||||
| 		end | ||||
| 		local drop = {} | ||||
| 		for i=1, player_inv:get_size("armor") do | ||||
| 			local stack = armor_inv:get_stack("armor", i) | ||||
| 			if stack:get_count() > 0 then | ||||
| 				table.insert(drop, stack) | ||||
| 				armor_inv:set_stack("armor", i, nil) | ||||
| 				player_inv:set_stack("armor", i, nil) | ||||
| 			end | ||||
| 		end | ||||
| 		armor:set_player_armor(player) | ||||
| 		if inv_mod == "unified_inventory" then | ||||
| 			unified_inventory.set_inventory_formspec(player, "craft") | ||||
| 		elseif inv_mod == "inventory_plus" then | ||||
| 			local formspec = inventory_plus.get_formspec(player,"main") | ||||
| 			inventory_plus.set_inventory_formspec(player, formspec) | ||||
| 		else | ||||
| 			armor:update_inventory(player) | ||||
| 		end | ||||
| 		if ARMOR_DESTROY == false then | ||||
| 			minetest.after(ARMOR_BONES_DELAY, function() | ||||
| 				local node = minetest.get_node(vector.round(pos)) | ||||
| 				if node then | ||||
| 					if node.name ~= "bones:bones" then | ||||
| 						pos.y = pos.y+1 | ||||
| 						node = minetest.get_node(vector.round(pos)) | ||||
| 						if node.name ~= "bones:bones" then | ||||
| 							minetest.log("warning", "Failed to add armor to bones node.") | ||||
| 							return | ||||
| 						end | ||||
| 					end | ||||
| 					local meta = minetest.get_meta(vector.round(pos)) | ||||
| 					local owner = meta:get_string("owner") | ||||
| 					local inv = meta:get_inventory() | ||||
| 					for _,stack in ipairs(drop) do | ||||
| 						if name == owner and inv:room_for_item("main", stack) then | ||||
| 							inv:add_item("main", stack) | ||||
| 						else | ||||
| 							armor.drop_armor(pos, stack) | ||||
| 						end | ||||
| 					end | ||||
| 				else | ||||
| 					for _,stack in ipairs(drop) do | ||||
| 						armor.drop_armor(pos, stack) | ||||
| 					end | ||||
| 				end | ||||
| 			end) | ||||
| 		end | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| minetest.register_on_player_hpchange(function(player, hp_change) | ||||
| 	local name, player_inv, armor_inv = armor:get_valid_player(player, "[on_hpchange]") | ||||
| 	if name and hp_change < 0 then | ||||
|  | ||||
| 		-- used for insta kill tools/commands like /kill (doesnt damage armor) | ||||
| 		if hp_change < -100 then | ||||
| 			return hp_change | ||||
| 		end | ||||
|  | ||||
| 		local heal_max = 0 | ||||
| 		local state = 0 | ||||
| 		local items = 0 | ||||
| 		for i=1, 6 do | ||||
| 			local stack = player_inv:get_stack("armor", i) | ||||
| 			if stack:get_count() > 0 then | ||||
| 				local use = stack:get_definition().groups["armor_use"] or 0 | ||||
| 				local heal = stack:get_definition().groups["armor_heal"] or 0 | ||||
| 				local item = stack:get_name() | ||||
| 				stack:add_wear(use) | ||||
| 				armor_inv:set_stack("armor", i, stack) | ||||
| 				player_inv:set_stack("armor", i, stack) | ||||
| 				state = state + stack:get_wear() | ||||
| 				items = items + 1 | ||||
| 				if stack:get_count() == 0 then | ||||
| 					local desc = minetest.registered_items[item].description | ||||
| 					if desc then | ||||
| 						minetest.chat_send_player(name, "Your "..desc.." got destroyed!") | ||||
| 					end | ||||
| 					armor:set_player_armor(player) | ||||
| 					armor:update_inventory(player) | ||||
| 				end | ||||
| 				heal_max = heal_max + heal | ||||
| 			end | ||||
| 		end | ||||
| 		armor.def[name].state = state | ||||
| 		armor.def[name].count = items | ||||
| 		heal_max = heal_max * ARMOR_HEAL_MULTIPLIER | ||||
| 		if heal_max > math.random(100) then | ||||
| 			hp_change = 0 | ||||
| 		end | ||||
| 		armor:update_armor(player) | ||||
| 	end | ||||
| 	return hp_change | ||||
| end, true) | ||||
|  | ||||
| -- Fire Protection and water breating, added by TenPlus1 | ||||
|  | ||||
| if ARMOR_FIRE_PROTECT == true then | ||||
| 	-- override hot nodes so they do not hurt player anywhere but mod | ||||
| 	for _, row in pairs(ARMOR_FIRE_NODES) do | ||||
| 		if minetest.registered_nodes[row[1]] then | ||||
| 			minetest.override_item(row[1], {damage_per_second = 0}) | ||||
| 		end | ||||
| 	end | ||||
| else | ||||
| 	print ("[3d_armor] Fire Nodes disabled") | ||||
| end | ||||
|  | ||||
| minetest.register_globalstep(function(dtime) | ||||
| 	armor.timer = armor.timer + dtime | ||||
| 	if armor.timer < ARMOR_UPDATE_TIME then | ||||
| 		return | ||||
| 	end | ||||
| 	for _,player in pairs(minetest.get_connected_players()) do | ||||
| 		local name = player:get_player_name() | ||||
| 		local pos = player:getpos() | ||||
| 		local hp = player:get_hp() | ||||
| 		-- water breathing | ||||
| 		if name and armor.def[name].water > 0 then | ||||
| 			if player:get_breath() < 10 then | ||||
| 				player:set_breath(10) | ||||
| 			end | ||||
| 		end | ||||
| 		-- fire protection | ||||
| 		if ARMOR_FIRE_PROTECT == true | ||||
| 		and name and pos and hp then | ||||
| 			pos.y = pos.y + 1.4 -- head level | ||||
| 			local node_head = minetest.get_node(pos).name | ||||
| 			pos.y = pos.y - 1.2 -- feet level | ||||
| 			local node_feet = minetest.get_node(pos).name | ||||
| 			-- is player inside a hot node? | ||||
| 			for _, row in pairs(ARMOR_FIRE_NODES) do | ||||
| 				-- check fire protection, if not enough then get hurt | ||||
| 				if row[1] == node_head or row[1] == node_feet then | ||||
| 					if hp > 0 and armor.def[name].fire < row[2] then | ||||
| 						hp = hp - row[3] * ARMOR_UPDATE_TIME | ||||
| 						player:set_hp(hp) | ||||
| 						break | ||||
| 					end | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	armor.timer = 0 | ||||
| end) | ||||
|  | ||||
| -- kill player when command issued | ||||
| minetest.register_chatcommand("kill", { | ||||
| 	params = "<name>", | ||||
| 	description = "Kills player instantly", | ||||
| 	privs = {ban=true}, | ||||
| 	func = function(name, param) | ||||
| 		local player = minetest.get_player_by_name(param) | ||||
| 		if player then | ||||
| 			player:set_hp(0) | ||||
| 		end | ||||
| 	end, | ||||
| }) | ||||
|  | ||||
| minetest.register_chatcommand("killme", { | ||||
| 	description = "Kill yourself instantly", | ||||
| 	func = function(name) | ||||
| 		local player = minetest.get_player_by_name(name) | ||||
| 		if player then | ||||
| 			player:set_hp(-1001) | ||||
| 		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}, | ||||
| 	}) | ||||
| 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}, | ||||
| 	}) | ||||
| 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 | ||||
|   | ||||
| @@ -1,6 +1,8 @@ | ||||
| default | ||||
| inventory_plus? | ||||
| unified_inventory? | ||||
| player_monoids? | ||||
| armor_monoid? | ||||
| pova? | ||||
| fire? | ||||
| ethereal? | ||||
| bakedclay? | ||||
| intllib? | ||||
|   | ||||
| @@ -1,254 +1,480 @@ | ||||
| ARMOR_MOD_NAME = minetest.get_current_modname() | ||||
| dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/armor.lua") | ||||
| dofile(minetest.get_modpath(ARMOR_MOD_NAME).."/admin.lua") | ||||
| 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 | ||||
|  | ||||
| if ARMOR_MATERIALS.wood then | ||||
| 	minetest.register_tool("3d_armor:helmet_wood", { | ||||
| 		description = "Wood Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_wood.png", | ||||
| 		groups = {armor_head=5, armor_heal=0, armor_use=2000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_wood", { | ||||
| 		description = "Wood Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_wood.png", | ||||
| 		groups = {armor_torso=10, armor_heal=0, armor_use=2000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_wood", { | ||||
| 		description = "Wood Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_wood.png", | ||||
| 		groups = {armor_legs=5, armor_heal=0, armor_use=2000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_wood", { | ||||
| 		description = "Wood Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_wood.png", | ||||
| 		groups = {armor_feet=5, armor_heal=0, armor_use=2000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| -- support for i18n | ||||
| armor_i18n = { } | ||||
| armor_i18n.gettext, armor_i18n.ngettext = dofile(modpath.."/intllib.lua") | ||||
|  | ||||
| -- local functions | ||||
| local S = armor_i18n.gettext | ||||
| local F = minetest.formspec_escape | ||||
|  | ||||
| dofile(modpath.."/api.lua") | ||||
|  | ||||
| -- Legacy Config Support | ||||
|  | ||||
| local input = io.open(modpath.."/armor.conf", "r") | ||||
| if input then | ||||
| 	dofile(modpath.."/armor.conf") | ||||
| 	input:close() | ||||
| 	input = nil | ||||
| end | ||||
| input = io.open(worldpath.."/armor.conf", "r") | ||||
| if input then | ||||
| 	dofile(worldpath.."/armor.conf") | ||||
| 	input:close() | ||||
| 	input = nil | ||||
| end | ||||
| for name, _ in pairs(armor.config) do | ||||
| 	local global = "ARMOR_"..name:upper() | ||||
| 	if minetest.global_exists(global) then | ||||
| 		armor.config[name] = _G[global] | ||||
| 	end | ||||
| end | ||||
| if minetest.global_exists("ARMOR_MATERIALS") then | ||||
| 	armor.materials = table.copy(ARMOR_MATERIALS) | ||||
| end | ||||
| if minetest.global_exists("ARMOR_FIRE_NODES") then | ||||
| 	armor.fire_nodes = table.copy(ARMOR_FIRE_NODES) | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.cactus then | ||||
| 	minetest.register_tool("3d_armor:helmet_cactus", { | ||||
| 		description = "Cactuc Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_cactus.png", | ||||
| 		groups = {armor_head=5, armor_heal=0, armor_use=1000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_cactus", { | ||||
| 		description = "Cactus Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_cactus.png", | ||||
| 		groups = {armor_torso=10, armor_heal=0, armor_use=1000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_cactus", { | ||||
| 		description = "Cactus Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_cactus.png", | ||||
| 		groups = {armor_legs=5, armor_heal=0, armor_use=1000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_cactus", { | ||||
| 		description = "Cactus Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_cactus.png", | ||||
| 		groups = {armor_feet=5, armor_heal=0, armor_use=2000}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| -- Load Configuration | ||||
|  | ||||
| for name, config in pairs(armor.config) do | ||||
| 	local setting = minetest.settings:get("armor_"..name) | ||||
| 	if type(config) == "number" then | ||||
| 		setting = tonumber(setting) | ||||
| 	elseif type(config) == "boolean" then | ||||
| 		setting = minetest.settings:get_bool("armor_"..name) | ||||
| 	end | ||||
| 	if setting ~= nil then | ||||
| 		armor.config[name] = setting | ||||
| 	end | ||||
| end | ||||
| for material, _ in pairs(armor.materials) do | ||||
| 	local key = "material_"..material | ||||
| 	if armor.config[key] == false then | ||||
| 		armor.materials[material] = nil | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.steel then | ||||
| 	minetest.register_tool("3d_armor:helmet_steel", { | ||||
| 		description = "Steel Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_steel.png", | ||||
| 		groups = {armor_head=10, armor_heal=0, armor_use=500}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_steel", { | ||||
| 		description = "Steel Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_steel.png", | ||||
| 		groups = {armor_torso=15, armor_heal=0, armor_use=500}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_steel", { | ||||
| 		description = "Steel Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_steel.png", | ||||
| 		groups = {armor_legs=15, armor_heal=0, armor_use=500}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_steel", { | ||||
| 		description = "Steel Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_steel.png", | ||||
| 		groups = {armor_feet=10, armor_heal=0, armor_use=500}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| -- Mod Compatibility | ||||
|  | ||||
| if minetest.get_modpath("technic") then | ||||
| 	armor.formspec = armor.formspec.. | ||||
| 		"label[5,2.5;"..F(S("Radiation"))..":  armor_group_radiation]" | ||||
| 	armor:register_armor_group("radiation") | ||||
| end | ||||
| local skin_mods = {"skins", "u_skins", "simple_skins", "wardrobe"} | ||||
| for _, mod in pairs(skin_mods) do | ||||
| 	local path = minetest.get_modpath(mod) | ||||
| 	if path then | ||||
| 		local dir_list = minetest.get_dir_list(path.."/textures") | ||||
| 		for _, fn in pairs(dir_list) do | ||||
| 			if fn:find("_preview.png$") then | ||||
| 				armor:add_preview(fn) | ||||
| 			end | ||||
| 		end | ||||
| 		armor.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 | ||||
|  | ||||
| if ARMOR_MATERIALS.bronze then | ||||
| 	minetest.register_tool("3d_armor:helmet_bronze", { | ||||
| 		description = "Bronze Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_bronze.png", | ||||
| 		groups = {armor_head=10, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_bronze", { | ||||
| 		description = "Bronze Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_bronze.png", | ||||
| 		groups = {armor_torso=15, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_bronze", { | ||||
| 		description = "Bronze Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_bronze.png", | ||||
| 		groups = {armor_legs=15, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_bronze", { | ||||
| 		description = "Bronze Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_bronze.png", | ||||
| 		groups = {armor_feet=10, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| dofile(modpath.."/armor.lua") | ||||
|  | ||||
| -- Armor Initialization | ||||
|  | ||||
| armor.formspec = armor.formspec.. | ||||
| 	"label[5,1;"..F(S("Level"))..": armor_level]".. | ||||
| 	"label[5,1.5;"..F(S("Heal"))..":  armor_attr_heal]" | ||||
| if armor.config.fire_protect then | ||||
| 	armor.formspec = armor.formspec.."label[5,2;"..F(S("Fire"))..":  armor_attr_fire]" | ||||
| end | ||||
| armor:register_on_damage(function(player, index, stack) | ||||
| 	local name = player:get_player_name() | ||||
| 	local def = stack:get_definition() | ||||
| 	if name and def and def.description and stack:get_wear() > 60100 then | ||||
| 		minetest.chat_send_player(name, S("Your @1 is almost broken!", def.description)) | ||||
| 		minetest.sound_play("default_tool_breaks", {to_player = name, gain = 2.0}) | ||||
| 	end | ||||
| end) | ||||
| armor:register_on_destroy(function(player, index, stack) | ||||
| 	local name = player:get_player_name() | ||||
| 	local def = stack:get_definition() | ||||
| 	if name and def and def.description then | ||||
| 		minetest.chat_send_player(name, S("Your @1 got destroyed!", def.description)) | ||||
| 		minetest.sound_play("default_tool_breaks", {to_player = name, gain = 2.0}) | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| local function validate_armor_inventory(player) | ||||
| 	-- Workaround for detached inventory swap exploit | ||||
| 	local _, inv = armor:get_valid_player(player, "[validate_armor_inventory]") | ||||
| 	local pos = player:get_pos() | ||||
| 	if not inv then | ||||
| 		return | ||||
| 	end | ||||
| 	local armor_prev = {} | ||||
| 	local armor_list_string = player:get_attribute("3d_armor_inventory") | ||||
| 	if armor_list_string then | ||||
| 		local armor_list = armor:deserialize_inventory_list(armor_list_string) | ||||
| 		for i, stack in ipairs(armor_list) do | ||||
| 			if stack:get_count() > 0 then | ||||
| 				armor_prev[stack:get_name()] = i | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	local elements = {} | ||||
| 	local player_inv = player:get_inventory() | ||||
| 	for i = 1, 6 do | ||||
| 		local stack = inv:get_stack("armor", i) | ||||
| 		if stack:get_count() > 0 then | ||||
| 			local item = stack:get_name() | ||||
| 			local element = armor:get_element(item) | ||||
| 			if element and not elements[element] then | ||||
| 				if armor_prev[item] then | ||||
| 					armor_prev[item] = nil | ||||
| 				else | ||||
| 					-- Item was not in previous inventory | ||||
| 					armor:run_callbacks("on_equip", player, i, stack) | ||||
| 				end | ||||
| 				elements[element] = true; | ||||
| 			else | ||||
| 				inv:remove_item("armor", stack) | ||||
| 				minetest.item_drop(stack, player, pos) | ||||
| 				-- The following code returns invalid items to the player's main | ||||
| 				-- inventory but could open up the possibity for a hacked client | ||||
| 				-- to receive items back they never really had. I am not certain | ||||
| 				-- so remove the is_singleplayer check at your own risk :] | ||||
| 				if minetest.is_singleplayer() and player_inv and | ||||
| 						player_inv:room_for_item("main", stack) then | ||||
| 					player_inv:add_item("main", stack) | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	for item, i in pairs(armor_prev) do | ||||
| 		local stack = ItemStack(item) | ||||
| 		-- Previous item is not in current inventory | ||||
| 		armor:run_callbacks("on_unequip", player, i, stack) | ||||
| 	end | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.diamond then | ||||
| 	minetest.register_tool("3d_armor:helmet_diamond", { | ||||
| 		description = "Diamond Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_diamond.png", | ||||
| 		groups = {armor_head=15, armor_heal=12, armor_use=100}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_diamond", { | ||||
| 		description = "Diamond Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_diamond.png", | ||||
| 		groups = {armor_torso=20, armor_heal=12, armor_use=100}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_diamond", { | ||||
| 		description = "Diamond Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_diamond.png", | ||||
| 		groups = {armor_legs=20, armor_heal=12, armor_use=100}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_diamond", { | ||||
| 		description = "Diamond Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_diamond.png", | ||||
| 		groups = {armor_feet=15, armor_heal=12, armor_use=100}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| local function init_player_armor(player) | ||||
| 	local name = player:get_player_name() | ||||
| 	local pos = player:get_pos() | ||||
| 	if not name or not pos then | ||||
| 		return false | ||||
| 	end | ||||
| 	local armor_inv = minetest.create_detached_inventory(name.."_armor", { | ||||
| 		on_put = function(inv, listname, index, stack, player) | ||||
| 			validate_armor_inventory(player) | ||||
| 			armor:save_armor_inventory(player) | ||||
| 			armor:set_player_armor(player) | ||||
| 		end, | ||||
| 		on_take = function(inv, listname, index, stack, player) | ||||
| 			validate_armor_inventory(player) | ||||
| 			armor:save_armor_inventory(player) | ||||
| 			armor:set_player_armor(player) | ||||
| 		end, | ||||
| 		on_move = function(inv, from_list, from_index, to_list, to_index, count, player) | ||||
| 			validate_armor_inventory(player) | ||||
| 			armor:save_armor_inventory(player) | ||||
| 			armor:set_player_armor(player) | ||||
| 		end, | ||||
| 		allow_put = function(inv, listname, index, put_stack, player) | ||||
| 			local element = armor:get_element(put_stack:get_name()) | ||||
| 			if not element then | ||||
| 				return 0 | ||||
| 			end | ||||
| 			for i = 1, 6 do | ||||
| 				local stack = inv:get_stack("armor", i) | ||||
| 				local def = stack:get_definition() or {} | ||||
| 				if def.groups and def.groups["armor_"..element] | ||||
| 						and i ~= index then | ||||
| 					return 0 | ||||
| 				end | ||||
| 			end | ||||
| 			return 1 | ||||
| 		end, | ||||
| 		allow_take = function(inv, listname, index, stack, player) | ||||
| 			return stack:get_count() | ||||
| 		end, | ||||
| 		allow_move = function(inv, from_list, from_index, to_list, to_index, count, player) | ||||
| 			return count | ||||
| 		end, | ||||
| 	}, name) | ||||
| 	armor_inv:set_size("armor", 6) | ||||
| 	if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then | ||||
| 		local player_inv = player:get_inventory() | ||||
| 		player_inv:set_size("armor", 6) | ||||
| 		for i=1, 6 do | ||||
| 			local stack = player_inv:get_stack("armor", i) | ||||
| 			armor_inv:set_stack("armor", i, stack) | ||||
| 		end | ||||
| 		armor:save_armor_inventory(player) | ||||
| 		player_inv:set_size("armor", 0) | ||||
| 	end | ||||
| 	for i=1, 6 do | ||||
| 		local stack = armor_inv:get_stack("armor", i) | ||||
| 		if stack:get_count() > 0 then | ||||
| 			armor:run_callbacks("on_equip", player, i, stack) | ||||
| 		end | ||||
| 	end | ||||
| 	armor.def[name] = { | ||||
| 		init_time = minetest.get_gametime(), | ||||
| 		level = 0, | ||||
| 		state = 0, | ||||
| 		count = 0, | ||||
| 		groups = {}, | ||||
| 	} | ||||
| 	for _, phys in pairs(armor.physics) do | ||||
| 		armor.def[name][phys] = 1 | ||||
| 	end | ||||
| 	for _, attr in pairs(armor.attributes) do | ||||
| 		armor.def[name][attr] = 0 | ||||
| 	end | ||||
| 	for group, _ in pairs(armor.registered_groups) do | ||||
| 		armor.def[name].groups[group] = 0 | ||||
| 	end | ||||
| 	local skin = armor:get_player_skin(name) | ||||
| 	armor.textures[name] = { | ||||
| 		skin = skin, | ||||
| 		armor = "3d_armor_trans.png", | ||||
| 		wielditem = "3d_armor_trans.png", | ||||
| 		preview = armor.default_skin.."_preview.png", | ||||
| 	} | ||||
| 	local texture_path = minetest.get_modpath("player_textures") | ||||
| 	if texture_path then | ||||
| 		local dir_list = minetest.get_dir_list(texture_path.."/textures") | ||||
| 		for _, fn in pairs(dir_list) do | ||||
| 			if fn == "player_"..name..".png" then | ||||
| 				armor.textures[name].skin = fn | ||||
| 				break | ||||
| 			end | ||||
| 		end | ||||
| 	end | ||||
| 	armor:set_player_armor(player) | ||||
| 	return true | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.gold then | ||||
| 	minetest.register_tool("3d_armor:helmet_gold", { | ||||
| 		description = "Gold Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_gold.png", | ||||
| 		groups = {armor_head=10, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_gold", { | ||||
| 		description = "Gold Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_gold.png", | ||||
| 		groups = {armor_torso=15, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_gold", { | ||||
| 		description = "Gold Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_gold.png", | ||||
| 		groups = {armor_legs=15, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_gold", { | ||||
| 		description = "Gold Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_gold.png", | ||||
| 		groups = {armor_feet=10, armor_heal=6, armor_use=250}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| -- Armor Player Model | ||||
|  | ||||
| default.player_register_model("3d_armor_character.b3d", { | ||||
| 	animation_speed = 30, | ||||
| 	textures = { | ||||
| 		armor.default_skin..".png", | ||||
| 		"3d_armor_trans.png", | ||||
| 		"3d_armor_trans.png", | ||||
| 	}, | ||||
| 	animations = { | ||||
| 		stand = {x=0, y=79}, | ||||
| 		lay = {x=162, y=166}, | ||||
| 		walk = {x=168, y=187}, | ||||
| 		mine = {x=189, y=198}, | ||||
| 		walk_mine = {x=200, y=219}, | ||||
| 		sit = {x=81, y=160}, | ||||
| 	}, | ||||
| }) | ||||
|  | ||||
| minetest.register_on_player_receive_fields(function(player, formname, fields) | ||||
| 	local name = armor:get_valid_player(player, "[on_player_receive_fields]") | ||||
| 	if not name then | ||||
| 		return | ||||
| 	end | ||||
| 	for field, _ in pairs(fields) do | ||||
| 		if string.find(field, "skins_set") then | ||||
| 			minetest.after(0, function(player) | ||||
| 				local skin = armor:get_player_skin(name) | ||||
| 				armor.textures[name].skin = skin | ||||
| 				armor:set_player_armor(player) | ||||
| 			end, player) | ||||
| 		end | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| minetest.register_on_joinplayer(function(player) | ||||
| 	default.player_set_model(player, "3d_armor_character.b3d") | ||||
| 	minetest.after(0, function(player) | ||||
| 		if init_player_armor(player) == false then | ||||
| 			pending_players[player] = 0 | ||||
| 		end | ||||
| 	end, player) | ||||
| end) | ||||
|  | ||||
| minetest.register_on_leaveplayer(function(player) | ||||
| 	local name = player:get_player_name() | ||||
| 	if name then | ||||
| 		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 | ||||
| 	minetest.register_on_dieplayer(function(player) | ||||
| 		local name, armor_inv = armor:get_valid_player(player, "[on_dieplayer]") | ||||
| 		if not name then | ||||
| 			return | ||||
| 		end | ||||
| 		local drop = {} | ||||
| 		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) | ||||
| 			end | ||||
| 		end | ||||
| 		armor:save_armor_inventory(player) | ||||
| 		armor:set_player_armor(player) | ||||
| 		local pos = player:get_pos() | ||||
| 		if pos and armor.config.destroy == false then | ||||
| 			minetest.after(armor.config.bones_delay, function() | ||||
| 				local meta = nil | ||||
| 				local maxp = vector.add(pos, 16) | ||||
| 				local minp = vector.subtract(pos, 16) | ||||
| 				local bones = minetest.find_nodes_in_area(minp, maxp, {"bones:bones"}) | ||||
| 				for _, p in pairs(bones) do | ||||
| 					local m = minetest.get_meta(p) | ||||
| 					if m:get_string("owner") == name then | ||||
| 						meta = m | ||||
| 						break | ||||
| 					end | ||||
| 				end | ||||
| 				if meta then | ||||
| 					local inv = meta:get_inventory() | ||||
| 					for _,stack in ipairs(drop) do | ||||
| 						if inv:room_for_item("main", stack) then | ||||
| 							inv:add_item("main", stack) | ||||
| 						else | ||||
| 							armor.drop_armor(pos, stack) | ||||
| 						end | ||||
| 					end | ||||
| 				else | ||||
| 					for _,stack in ipairs(drop) do | ||||
| 						armor.drop_armor(pos, stack) | ||||
| 					end | ||||
| 				end | ||||
| 			end) | ||||
| 		end | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.mithril then | ||||
| 	minetest.register_tool("3d_armor:helmet_mithril", { | ||||
| 		description = "Mithril Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_mithril.png", | ||||
| 		groups = {armor_head=15, armor_heal=12, armor_use=50}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_mithril", { | ||||
| 		description = "Mithril Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_mithril.png", | ||||
| 		groups = {armor_torso=20, armor_heal=12, armor_use=50}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_mithril", { | ||||
| 		description = "Mithril Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_mithril.png", | ||||
| 		groups = {armor_legs=20, armor_heal=12, armor_use=50}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_mithril", { | ||||
| 		description = "Mithril Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_mithril.png", | ||||
| 		groups = {armor_feet=15, armor_heal=12, armor_use=50}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 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() | ||||
| 		if name then | ||||
| 			armor:punch(player, hitter, time_from_last_punch, tool_capabilities) | ||||
| 			last_punch_time[name] = minetest.get_gametime() | ||||
| 		end | ||||
| 	end) | ||||
| end | ||||
|  | ||||
| if ARMOR_MATERIALS.crystal then | ||||
| 	minetest.register_tool("3d_armor:helmet_crystal", { | ||||
| 		description = "Crystal Helmet", | ||||
| 		inventory_image = "3d_armor_inv_helmet_crystal.png", | ||||
| 		groups = {armor_head=15, armor_heal=12, armor_use=50, armor_fire=1}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:chestplate_crystal", { | ||||
| 		description = "Crystal Chestplate", | ||||
| 		inventory_image = "3d_armor_inv_chestplate_crystal.png", | ||||
| 		groups = {armor_torso=20, armor_heal=12, armor_use=50, armor_fire=1}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:leggings_crystal", { | ||||
| 		description = "Crystal Leggings", | ||||
| 		inventory_image = "3d_armor_inv_leggings_crystal.png", | ||||
| 		groups = {armor_legs=20, armor_heal=12, armor_use=50, armor_fire=1}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| 	minetest.register_tool("3d_armor:boots_crystal", { | ||||
| 		description = "Crystal Boots", | ||||
| 		inventory_image = "3d_armor_inv_boots_crystal.png", | ||||
| 		groups = {armor_feet=15, armor_heal=12, armor_use=50, physics_speed=1, physics_jump=0.5, armor_fire=1}, | ||||
| 		wear = 0, | ||||
| 	}) | ||||
| minetest.register_on_player_hpchange(function(player, hp_change) | ||||
| 	if player 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 | ||||
| 		end | ||||
| 	end | ||||
| 	return hp_change | ||||
| end, true) | ||||
|  | ||||
| minetest.register_globalstep(function(dtime) | ||||
| 	timer = timer + dtime | ||||
| 	if timer > armor.config.init_delay then | ||||
| 		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 | ||||
| 		timer = 0 | ||||
| 	end | ||||
| end) | ||||
|  | ||||
| -- Fire Protection and water breating, added by TenPlus1 | ||||
|  | ||||
| if armor.config.fire_protect == true then | ||||
| 	-- override hot nodes so they do not hurt player anywhere but mod | ||||
| 	for _, row in pairs(armor.fire_nodes) do | ||||
| 		if minetest.registered_nodes[row[1]] then | ||||
| 			minetest.override_item(row[1], {damage_per_second = 0}) | ||||
| 		end | ||||
| 	end | ||||
| else | ||||
| 	print (S("[3d_armor] Fire Nodes disabled")) | ||||
| 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}, | ||||
| 		}, | ||||
| 	}) | ||||
| if armor.config.water_protect == true or armor.config.fire_protect == true then | ||||
| 	minetest.register_globalstep(function(dtime) | ||||
| 		armor.timer = armor.timer + dtime | ||||
| 		if armor.timer < armor.config.update_time then | ||||
| 			return | ||||
| 		end | ||||
| 		for _,player in pairs(minetest.get_connected_players()) do | ||||
| 			local name = player:get_player_name() | ||||
| 			local pos = player:get_pos() | ||||
| 			local hp = player:get_hp() | ||||
| 			if not name or not pos or not hp then | ||||
| 				return | ||||
| 			end | ||||
| 			-- water breathing | ||||
| 			if armor.config.water_protect == true then | ||||
| 				if armor.def[name].water > 0 and | ||||
| 						player:get_breath() < 10 then | ||||
| 					player:set_breath(10) | ||||
| 				end | ||||
| 			end | ||||
| 			-- fire protection | ||||
| 			if armor.config.fire_protect == true then | ||||
| 				local fire_damage = true | ||||
| 				pos.y = pos.y + 1.4 -- head level | ||||
| 				local node_head = minetest.get_node(pos).name | ||||
| 				pos.y = pos.y - 1.2 -- feet level | ||||
| 				local node_feet = minetest.get_node(pos).name | ||||
| 				-- is player inside a hot node? | ||||
| 				for _, row in pairs(armor.fire_nodes) do | ||||
| 					-- check fire protection, if not enough then get hurt | ||||
| 					if row[1] == node_head or row[1] == node_feet then | ||||
| 						if fire_damage == true then | ||||
| 							armor:punch(player, "fire") | ||||
| 							last_punch_time[name] = minetest.get_gametime() | ||||
| 							fire_damage = false | ||||
| 						end | ||||
| 						if hp > 0 and armor.def[name].fire < row[2] then | ||||
| 							hp = hp - row[3] * armor.config.update_time | ||||
| 							player:set_hp(hp) | ||||
| 							break | ||||
| 						end | ||||
| 					end | ||||
| 				end | ||||
| 			end | ||||
| 		end | ||||
| 		armor.timer = 0 | ||||
| 	end) | ||||
| end | ||||
|  | ||||
|   | ||||
							
								
								
									
										45
									
								
								3d_armor/intllib.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,45 @@ | ||||
|  | ||||
| -- Fallback functions for when `intllib` is not installed. | ||||
| -- Code released under Unlicense <http://unlicense.org>. | ||||
|  | ||||
| -- Get the latest version of this file at: | ||||
| --   https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua | ||||
|  | ||||
| local function format(str, ...) | ||||
| 	local args = { ... } | ||||
| 	local function repl(escape, open, num, close) | ||||
| 		if escape == "" then | ||||
| 			local replacement = tostring(args[tonumber(num)]) | ||||
| 			if open == "" then | ||||
| 				replacement = replacement..close | ||||
| 			end | ||||
| 			return replacement | ||||
| 		else | ||||
| 			return "@"..open..num..close | ||||
| 		end | ||||
| 	end | ||||
| 	return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) | ||||
| end | ||||
|  | ||||
| local gettext, ngettext | ||||
| if minetest.get_modpath("intllib") then | ||||
| 	if intllib.make_gettext_pair then | ||||
| 		-- New method using gettext. | ||||
| 		gettext, ngettext = intllib.make_gettext_pair() | ||||
| 	else | ||||
| 		-- Old method using text files. | ||||
| 		gettext = intllib.Getter() | ||||
| 	end | ||||
| end | ||||
|  | ||||
| -- Fill in missing functions. | ||||
|  | ||||
| gettext = gettext or function(msgid, ...) | ||||
| 	return format(msgid, ...) | ||||
| end | ||||
|  | ||||
| ngettext = ngettext or function(msgid, msgid_plural, n, ...) | ||||
| 	return format(n==1 and msgid or msgid_plural, ...) | ||||
| end | ||||
|  | ||||
| return gettext, ngettext | ||||
							
								
								
									
										384
									
								
								3d_armor/locale/es.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,384 @@ | ||||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2017-08-06 18:20+0200\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| "Language: es\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: El nombre del jugador es nulo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player inventory is nil @1" | ||||
| msgstr "3d_armor: El inventario del jugador es nulo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: La armadura desconectada es nula @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: La referencia del jugador es nula @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Casco de admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Peto de admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Polainas de admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "Botas de admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Casco de madera" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Peto de madera" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Polainas de madera" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "Botas de madera" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Casco de cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Peto de cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Polainas de cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "Botas de cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Casco de acero" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "Peto de acero" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Polainas de acero" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "Botas de acero" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Casco de bronce" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Peto de bronce" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Polainas de bronce" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "Botas de bronce" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Casco de diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Peto de diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Polainas de diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "Botas de diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Casco de oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Peto de oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Polainas de oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "Botas de oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Casco de mitrilo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Peto de mitrilo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Polainas de mitrilo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "Botas de mitrilo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Casco de cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Peto de cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Polainas de cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "Botas de cristal" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiación" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Nivel" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Salud" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Fuego" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "¡Tu @1 fue destruído!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: Fallo en la inicialización del jugador" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Nodos de fuego desabilitados" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: Mod cargado, pero sin ser usado." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Volver" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Armadura" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: Mod cargado, pero sin ser usado." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Parte arriba maniquí armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Maniquí para armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Maniquí para armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Maniquí para armadura (bloqueado)" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Maniquí para armadura (propiedad de @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: Mod cargado, pero sin ser usado." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "Armadura 3d" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "¡Armadura no inicializada!" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "hazmat_suit: Mod loaded but unused." | ||||
| msgstr "hazmat_suit: Mod cargado, pero sin ser usado." | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Helmet" | ||||
| msgstr "Casco de hazmat" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Chestplate" | ||||
| msgstr "Peto de hazmat" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Sleeve" | ||||
| msgstr "Manga de hazmat" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Leggins" | ||||
| msgstr "Polainas de hazmat" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Boots" | ||||
| msgstr "Botas de hazmat" | ||||
|  | ||||
| #: ../hazmat_suit/init.lua | ||||
| msgid "Hazmat Suit" | ||||
| msgstr "Traje de hazmat" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Escudo de admin" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Escudo de madera" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Escudo de madera mejorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Escudo de cactus" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Escudo de cactus mejorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Escudo de acero" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Escudo de bronce" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Escudo de diamante" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Escudo de oro" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Escudo de mitrilo" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Escudo de cristal" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "technic_armor: Mod loaded but unused." | ||||
| msgstr "technic_armor: Mod cargado, pero no usado." | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Lead" | ||||
| msgstr "Plomo" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Brass" | ||||
| msgstr "Latón" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Cast Iron" | ||||
| msgstr "Hierro fundido" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Carbon Steel" | ||||
| msgstr "Acero carbono" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Stainless Steel" | ||||
| msgstr "Acero inoxidable" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Tin" | ||||
| msgstr "Estaño" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Silver" | ||||
| msgstr "Plata" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Helmet" | ||||
| msgstr "Casco" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Chestplate" | ||||
| msgstr "Peto" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Leggins" | ||||
| msgstr "Polainas" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Boots" | ||||
| msgstr "Botas" | ||||
|  | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "Shield" | ||||
| msgstr "Escudo" | ||||
|  | ||||
| #. Translators: @1 stands for material and @2 for part of the armor, so that you could use a conjunction if in your language part name comes first then material (e.g. in french 'Silver Boots' is translated in 'Bottes en argent' by using '@2 en @1' as translated string) | ||||
| #: ../technic_armor/init.lua | ||||
| msgid "@1 @2" | ||||
| msgstr "@2 de @1" | ||||
							
								
								
									
										295
									
								
								3d_armor/locale/fr.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,295 @@ | ||||
| # French translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # fat115 <fat115@framasoft.org>, 2017. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: \n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:24+0200\n" | ||||
| "PO-Revision-Date: 2018-07-23 21:30+0200\n" | ||||
| "Last-Translator: fat115 <fat115@framasoft.org>\n" | ||||
| "Language-Team: \n" | ||||
| "Language: fr\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 1.8.12\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor : Référence au joueur non trouvée @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor : Nom du joueur non trouvé @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor : Inventaire détaché pour l'armure non trouvé @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Casque d'admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Cuirasse d'admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Jambières d'admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "Bottes d'admin" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Casque en bois" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Cuirasse en bois" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Jambières en bois" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "Bottes en bois" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Casque en cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Cuirasse en cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Jambières en cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "Bottes en cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Casque en acier" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr " = Cuirasse en acier" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Jambières en acier" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "Bottes en acier" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Casque en bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Cuirasse en bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Jambières en bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "Bottes en bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Casque en diamant" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Cuirasse en diamant" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Jambières en diamant" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "Bottes en diamant" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Casque en or" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Cuirasse en or" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Jambières en or" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "Bottes en or" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Casque en mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Cuirasse en mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Jambières en mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "Bottes en mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Casque en cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Cuirasse en cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Jambières en cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "Bottes en cristal" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiation" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Niveau" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Soins" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Fire" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "Une partie de votre armure a été détruite : @1 !" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor : Impossible d'initialiser le joueur" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Noeuds de type feu désactivés" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip : Mod chargé mais inutilisé." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Retour" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Armure" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv : Mod chargé mais inutilisé." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Haut de support d'armure" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Support d'armure" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Support d'armure" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Support d'armure verrouillé" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Support d'armure (propriété de @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui : Mod chargé mais inutilisé." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "Armure 3d" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "Armure non initialisée !" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Bouclier d'admin" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Bouclier en bois" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Bouclier en bois amélioré" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Bouclier en cactus" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Bouclier en cactus amélioré" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Bouclier en acier" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Bouclier en bronze" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Bouclier en diamant" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Bouclier en or" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Bouclier en mithril" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Bouclier en cristal" | ||||
							
								
								
									
										295
									
								
								3d_armor/locale/it.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,295 @@ | ||||
| # Italian translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # Hamlet <h4mlet@riseup.net>, 2017. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: Italian localization file for the 3D Armor module\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:24+0200\n" | ||||
| "PO-Revision-Date: 2018-07-23 21:30+0200\n" | ||||
| "Last-Translator: H4mlet <h4mlet@riseup.net>\n" | ||||
| "Language-Team: ITALIANO\n" | ||||
| "Language: it\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "X-Generator: Poedit 1.6.10\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: Il riferimento alla/al giocatrice/tore è nullo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: Il nome della/del gicatrice/tore è nullo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: L'inventario staccato dell'armatura è nullo @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Elmo dell'amministratrice/tore" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Corazza dell'amministratrice/tore" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Gambali dell'amministratrice/tore" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "Stivali dell'amministratrice/tore" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Elmo di legno" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Corazza di legno" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Gambali di legno" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "Stivali di legno" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Elmo di cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Corazza di cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Gambali di cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "Stivali di cactus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Elmo di acciaio" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "Corazza di acciaio" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Gambali di acciaio" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "Stivali di acciaio" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Elmo di bronzo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Corazza di bronzo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Gambali di bronzo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "Stivali di bronzo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Elmo di diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Corazza di diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Gambali di diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "Stivali di diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Elmo d'oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Corazza d'oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Gambali d'oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "Stivali d'oro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Elmo di mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Corazza di mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Gambali di mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "Stivali di mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Elmo di cristallo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Corazza di cristallo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Gambali di cristallo" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "Stivali di cristallo" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiazione" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Livello" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Guarigione" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Fuoco" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "Il/i vostro/i @1 è/sono stato/i distrutto/i!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: Inizializzazione della/del giocatrice/tore fallita" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Nodi fuoco disabilitati" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: Mod caricato ma inutilizzato." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Indietro" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Armatura" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: Mod caricato ma inutilizzato." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Parte superiore del supporto per armatura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Supporto per armatura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Supporto per armatura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Supporto per armatura chiuso a chiave" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Supporto per armatura (di proprietà di @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: Mod caricato ma inutilizzato." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "Armatura 3D" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "Armatura non inizializzata!" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Scudo dell'amministratrice/tore" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Scudo di legno" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Scudo di legno migliorato" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Scudo di cactus" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Scudo di cactus migliorato" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Scudo di acciaio" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Scudo di bronzo" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Scudo di diamante" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Scudo d'oro" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Scudo di mithril" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Scudo di cristallo" | ||||
							
								
								
									
										296
									
								
								3d_armor/locale/ms.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,296 @@ | ||||
| # Malay translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: \n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:21+0200\n" | ||||
| "PO-Revision-Date: 2018-07-23 21:30+0200\n" | ||||
| "Last-Translator: MuhdNurHidayat (MNH48) <mnh48mail@gmail.com>\n" | ||||
| "Language-Team: \n" | ||||
| "Language: ms\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: Rujukan pemain tiada nilai @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: Nama pemain tiada nilai @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: Inventori perisai terpisah tiada nilai @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Helmet Pentadbir" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Perisai Dada Pentadbir" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Perisai Kaki Pentadbir" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "But Pentadbir" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Helmet Kayu" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Perisai Dada Kayu" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Perisai Kaki Kayu" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "But Kayu" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Helmet Kaktus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Perisai Dada Kaktus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Perisai Kaki Kaktus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "But Kaktus" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Helmet Keluli" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "Perisai Dada Keluli" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Perisai Kaki Keluli" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "But Keluli" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Helmet Gangsa" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Perisai Dada Gangsa" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Perisai Kaki Gangsa" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "But Gangsa" | ||||
|  | ||||
| # 'Diamond' should be translated as 'intan' because the more common word 'berlian' is only specifically used for the gemstone diamond. | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Helmet Intan" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Perisai Dada Intan" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Perisai Kaki Intan" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "But Intan" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Helmet Emas" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Perisai Dada Emas" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Perisai Kaki Emas" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "But Emas" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Helmet Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Perisai Dada Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Perisai Kaki Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "But Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Helmet Kristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Perisai Dada Kristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Perisai Kaki Kristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "But Kristal" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiasi" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Tahap" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Pulih" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Api" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "@1 anda telah musnah!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: Gagal mengasalkan pemain" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Nod-nod Api dilumpuhkan" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: Mods dimuatkan tetapi tidak digunakan." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Kembali" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Perisai" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: Mods dimuatkan tetapi tidak digunakan." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Bhg atas dirian perisai" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Dirian perisai" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Dirian Perisai" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Dirian perisai Berkunci" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Dirian Perisai (milik @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: Mods dimuatkan tetapi tidak digunakan." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "Perisai 3d" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "Perisai tidak diasalkan!" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Perisai Pegang Pentadbir" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Perisai Pegang Kayu" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Perisai Pegang Kayu Kukuh" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Perisai Pegang Kaktus" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Perisai Pegang Kaktus Kukuh" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Perisai Pegang Keluli" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Perisai Pegang Gangsa" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Perisai Pegang Intan" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Perisai Pegang Emas" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Perisai Pegang Mithril" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Perisai Pegang Kristal" | ||||
							
								
								
									
										295
									
								
								3d_armor/locale/pt.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,295 @@ | ||||
| # LANGUAGE translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # BrunoMine <borgesdossantosbruno@gmail.com>, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: 3d_armor\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:24+0200\n" | ||||
| "PO-Revision-Date: 2018-11-08 13:12-0200\n" | ||||
| "Language-Team: \n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "Last-Translator: BrunoMine <borgesdossantosbruno@gmail.com>\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "Language: pt\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: Referência Jogador é nula @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: Nome de jogador é nulo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: Inventario avulso de armadura é nulo @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Capacete de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Peitoral de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Calças de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "Botas de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Capacete de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Peitoral de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Calças de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "Botas de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Capacete de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Peitoral de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Calças de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "Botas de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Capacete de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "Peitoral de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Calças de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "Botas de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Capacete de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Peitoral de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Calças de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "Botas de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Capacete de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Peitoral de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Calças de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "Botas de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Capacete de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Peitoral de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Calças de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "Botas de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Capacete de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Peitoral de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Calças de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "Botas de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Capacete de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Peitoral de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Calças de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "Botas de Cristal" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiação" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Nível" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Saúde" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Fogo" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "@1 foi destruído(a)!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: Falha ao inicializar jogador" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Nodes de gofo desabilitados" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Voltar" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Armadura" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Topo de estande de armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Estande de armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Estande de Armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Estande de Armadura Trancada" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Estande de Armadura (pertente a @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "3d Armor" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "Armadura não inicializada!" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Escudo de Administrador" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Escudo de Madeira" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Escudo de Madeira Melhorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Escudo de Cacto" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Escudo de Cacto Melhorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Escudo de Aço" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Escudo de Bronze" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Escudo de Diamante" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Escudo de Ouro" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Escudo de Mithril" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Escudo de Cristal" | ||||
							
								
								
									
										295
									
								
								3d_armor/locale/pt_BR.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,295 @@ | ||||
| # LANGUAGE translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # BrunoMine <borgesdossantosbruno@gmail.com>, 2018. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: 3d_armor\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:24+0200\n" | ||||
| "PO-Revision-Date: 2018-11-08 13:12-0200\n" | ||||
| "Language-Team: \n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "X-Generator: Poedit 2.0.6\n" | ||||
| "Last-Translator: BrunoMine <borgesdossantosbruno@gmail.com>\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| "Language: pt_BR\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: Referência Jogador é nula @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: Nome de jogador é nulo @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: Inventario avulso de armadura é nulo @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "Capacete de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "Peitoral de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "Calças de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "Botas de Administrador" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "Capacete de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "Peitoral de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "Calças de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "Botas de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "Capacete de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "Peitoral de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "Calças de Cacto" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "Botas de Madeira" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "Capacete de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "Peitoral de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "Calças de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "Botas de Aço" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "Capacete de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "Peitoral de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "Calças de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "Botas de Bronze" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "Capacete de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "Peitoral de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "Calças de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "Botas de Diamante" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "Capacete de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "Peitoral de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "Calças de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "Botas de Ouro" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "Capacete de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "Peitoral de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "Calças de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "Botas de Mithril" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "Capacete de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "Peitoral de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "Calças de Cristal" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "Botas de Cristal" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "Radiação" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "Nível" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "Saúde" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "Fogo" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "@1 foi destruído(a)!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: Falha ao inicializar jogador" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] Nodes de gofo desabilitados" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "Voltar" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "Armadura" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "Topo de estande de armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "Estande de armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "Estande de Armadura" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "Estande de Armadura Trancada" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "Estande de Armadura (pertente a @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: Mod carregado mas inoperante." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "3d Armor" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "Armadura não inicializada!" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "Escudo de Administrador" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "Escudo de Madeira" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "Escudo de Madeira Melhorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "Escudo de Cacto" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "Escudo de Cacto Melhorado" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "Escudo de Aço" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "Escudo de Bronze" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "Escudo de Diamante" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "Escudo de Ouro" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "Escudo de Mithril" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "Escudo de Cristal" | ||||
							
								
								
									
										294
									
								
								3d_armor/locale/ru.po
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,294 @@ | ||||
| # Russian translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # CodeXP <codexp@gmx.net>, 2018. | ||||
| # | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: 3d_armor\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:21+0200\n" | ||||
| "PO-Revision-Date: 2018-07-23 21:30+0200\n" | ||||
| "Last-Translator: CodeXP <codexp@gmx.net>\n" | ||||
| "Language-Team: \n" | ||||
| "Language: ru\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "3d_armor: Ссылка игрока является nil @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "3d_armor: Имя игрока является nil @1" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "3d_armor: Отдельный инвентарь брони является nil @1" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "шлем админа" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "бронежилет админа" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "гамаши админа" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "ботинки админа" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "деревянный шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "деревянный бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "деревянные гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "деревянные ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "кактусовый шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "кактусовый бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "кактусовые гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "кактусовые ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "стальной шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "стальной бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "стальные гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "стальные ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "бронзовый шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "бронзовый бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "бронзовые гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "бронзовые ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "алмазный шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "алмазный бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "алмазные гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "алмазные ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "золотой шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "золотой бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "золотые гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "золотые ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "мифриловый шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "мифриловый бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "мифриловые гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "мифриловые ботинки" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "кристалловый шлем" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "кристалловый бронежилет" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "кристалловые гамаши" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "кристалловые ботинки" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "излучение" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "уровень" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "исцеление" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "огонь" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "твой(и) @1 был(и) разрушен(ы)!" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "3d_armor: не смог подготовить игрока" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "[3d_armor] блоки огня отключены" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "3d_armor_ip: мод загружен но не используется." | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "назад" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "бронь" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "3d_armor_sfinv: мод загружен но не используется." | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "стойка для брони (верх)" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "стойка для брони" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "стойка для брони" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "защищенная стойка для брони" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "стойка для брони (принадлежит @1)" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "3d_armor_ui: мод загружен но не используется." | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "3D бронь" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "бронь не подготовлена!" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "щит админа" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "деревянный щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "улучшенный деревянный щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "кактусный щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "улучшенный кактусный щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "стальной щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "бронзовый щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "алмазный щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "золотой щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "мифриловый щит" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "кристалловый щит" | ||||
							
								
								
									
										294
									
								
								3d_armor/locale/template.pot
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @@ -0,0 +1,294 @@ | ||||
| # LANGUAGE translation for 3D ARMOR MOD | ||||
| # Copyright (C) 2018 by Stuart Jones | ||||
| # This file is distributed under the same license as the 3D ARMOR MOD package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2018-07-23 21:24+0200\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| "Language: \n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=CHARSET\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player reference is nil @1" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Player name is nil @1" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/api.lua | ||||
| msgid "3d_armor: Detached armor inventory is nil @1" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Admin Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Wood Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Cactus Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Steel Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Bronze Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Diamond Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Gold Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Mithril Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Helmet" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Chestplate" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Leggings" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/armor.lua | ||||
| msgid "Crystal Boots" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Radiation" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Level" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Heal" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Fire" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "Your @1 got destroyed!" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "3d_armor: Failed to initialize player" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor/init.lua | ||||
| msgid "[3d_armor] Fire Nodes disabled" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "3d_armor_ip: Mod loaded but unused." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua | ||||
| msgid "Back" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ip/init.lua ../3d_armor_sfinv/init.lua ../3d_armor_ui/init.lua | ||||
| msgid "Armor" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_sfinv/init.lua | ||||
| msgid "3d_armor_sfinv: Mod loaded but unused." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand top" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor stand" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Locked Armor stand" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_stand/init.lua | ||||
| msgid "Armor Stand (owned by @1)" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d_armor_ui: Mod loaded but unused." | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "3d Armor" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../3d_armor_ui/init.lua | ||||
| msgid "Armor not initialized!" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Admin Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Wooden Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Wood Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Cactus Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Enhanced Cactus Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Steel Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Bronze Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Diamond Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Gold Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Mithril Shield" | ||||
| msgstr "" | ||||
|  | ||||
| #: ../shields/init.lua | ||||
| msgid "Crystal Shield" | ||||
| msgstr "" | ||||
| Before Width: | Height: | Size: 291 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 383 B | 
| Before Width: | Height: | Size: 321 B After Width: | Height: | Size: 399 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 369 B | 
| Before Width: | Height: | Size: 308 B After Width: | Height: | Size: 404 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 376 B | 
| Before Width: | Height: | Size: 494 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 383 B | 
| Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 383 B | 
| Before Width: | Height: | Size: 287 B After Width: | Height: | Size: 399 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 369 B | 
| Before Width: | Height: | Size: 216 B After Width: | Height: | Size: 407 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 382 B | 
| Before Width: | Height: | Size: 316 B After Width: | Height: | Size: 393 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 369 B | 
| Before Width: | Height: | Size: 274 B After Width: | Height: | Size: 377 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 366 B | 
| Before Width: | Height: | Size: 782 B After Width: | Height: | Size: 516 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 446 B | 
| Before Width: | Height: | Size: 556 B After Width: | Height: | Size: 500 B | 
| Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 441 B | 
| Before Width: | Height: | Size: 712 B After Width: | Height: | Size: 504 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 444 B | 
| Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 516 B | 
| Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 446 B | 
| Before Width: | Height: | Size: 475 B After Width: | Height: | Size: 524 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 446 B | 
| Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 508 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 444 B | 
| Before Width: | Height: | Size: 669 B After Width: | Height: | Size: 514 B | 
| Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 446 B | 
| Before Width: | Height: | Size: 537 B After Width: | Height: | Size: 499 B | 
| Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 440 B | 
| Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 453 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 437 B | 
| Before Width: | Height: | Size: 463 B After Width: | Height: | Size: 476 B | 
| Before Width: | Height: | Size: 883 B After Width: | Height: | Size: 386 B | 
| Before Width: | Height: | Size: 583 B After Width: | Height: | Size: 468 B | 
| Before Width: | Height: | Size: 891 B After Width: | Height: | Size: 382 B | 
| Before Width: | Height: | Size: 533 B After Width: | Height: | Size: 464 B | 
| Before Width: | Height: | Size: 883 B After Width: | Height: | Size: 358 B | 
| Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 476 B | 
| Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 386 B | 
| Before Width: | Height: | Size: 508 B After Width: | Height: | Size: 476 B | 
| Before Width: | Height: | Size: 902 B After Width: | Height: | Size: 386 B | 
| Before Width: | Height: | Size: 475 B After Width: | Height: | Size: 491 B | 
| Before Width: | Height: | Size: 893 B After Width: | Height: | Size: 382 B | 
| Before Width: | Height: | Size: 511 B After Width: | Height: | Size: 474 B | 
| Before Width: | Height: | Size: 853 B After Width: | Height: | Size: 382 B | 
| Before Width: | Height: | Size: 549 B After Width: | Height: | Size: 495 B | 
| Before Width: | Height: | Size: 887 B After Width: | Height: | Size: 386 B | 
| Before Width: | Height: | Size: 472 B After Width: | Height: | Size: 462 B | 
| Before Width: | Height: | Size: 878 B After Width: | Height: | Size: 368 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 406 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 399 B | 
| Before Width: | Height: | Size: 200 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 408 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 406 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 415 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 409 B | 
| Before Width: | Height: | Size: 129 B After Width: | Height: | Size: 410 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 440 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 438 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 434 B | 
| Before Width: | Height: | Size: 236 B After Width: | Height: | Size: 440 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 440 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 438 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 433 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 438 B | 
| Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 426 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 392 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 389 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 386 B | 
| Before Width: | Height: | Size: 219 B After Width: | Height: | Size: 392 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 392 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 389 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 389 B | 
| Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 400 B |