diff --git a/mods/3d_armor-master/.gitignore b/mods/3d_armor-master/.gitignore index 6e4e459..ba96b08 100644 --- a/mods/3d_armor-master/.gitignore +++ b/mods/3d_armor-master/.gitignore @@ -6,3 +6,6 @@ tags *.vim armor.conf +## Eclipse project files & directories +.project +.settings diff --git a/mods/3d_armor-master/3d_armor/LICENSE.txt b/mods/3d_armor-master/3d_armor/LICENSE.txt new file mode 100644 index 0000000..e1949c0 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/LICENSE.txt @@ -0,0 +1,9 @@ +[mod] 3d Armor [3d_armor] +========================= + +License Source Code: (C) 2012-2017 Stuart Jones - LGPL v2.1 + +License Textures: Copyright (C) 2017 davidthecreator - CC-BY-SA 3.0 + +https://github.com/daviddoesminetest/3d-armors-new-textures + diff --git a/mods/3d_armor-master/3d_armor/README.txt b/mods/3d_armor-master/3d_armor/README.txt index 224f81c..a0cb3b1 100644 --- a/mods/3d_armor-master/3d_armor/README.txt +++ b/mods/3d_armor-master/3d_armor/README.txt @@ -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 = 1 + +-- Number of initialization attempts. +-- Use in conjunction with armor_init_delay if initialization problems persist. +armor_init_times = 1 + +-- Increase this if armor is not getting into bones due to server lag. +armor_bones_delay = 1 + +-- 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 = + preview = + armor_groups = + damage_groups =
+ reciprocate_damage = + on_equip = + on_unequip = + on_destroy = + on_damage = + on_punched = + +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:getpos() + 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) diff --git a/mods/3d_armor-master/3d_armor/api.lua b/mods/3d_armor-master/3d_armor/api.lua new file mode 100644 index 0000000..540f007 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/api.lua @@ -0,0 +1,529 @@ +-- 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 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.11", +} + +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 + self.def[name][attr] = attributes[attr] + 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 + 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") + 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.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 msg = "[load_armor_inventory]" + 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 armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + local armor_list_string = player:get_attribute("3d_armor_inventory") + if armor_list_string then + armor_inv:set_list("armor", self:deserialize_inventory_list(armor_list_string)) + return true + end +end + +armor.save_armor_inventory = function(self, player) + local msg = "[save_armor_inventory]" + 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 armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + player:set_attribute("3d_armor_inventory", self:serialize_inventory_list(armor_inv:get_list("armor"))) +end + +armor.update_inventory = function(self, player) + -- DEPRECATED: Legacy inventory support +end + +armor.set_inventory_stack = function(self, player, i, stack) + local msg = "[set_inventory_stack]" + 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 armor_inv = minetest.get_inventory({type="detached", name=name.."_armor"}) + if not armor_inv then + minetest.log("warning", S("3d_armor: Detached armor inventory is nil @1", msg)) + return + end + armor_inv:set_stack("armor", i, stack) + self:save_armor_inventory(player) +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 diff --git a/mods/3d_armor-master/3d_armor/armor.conf.example b/mods/3d_armor-master/3d_armor/armor.conf.example index 15cfe91..9ce34b4 100644 --- a/mods/3d_armor-master/3d_armor/armor.conf.example +++ b/mods/3d_armor-master/3d_armor/armor.conf.example @@ -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. @@ -18,12 +22,13 @@ ARMOR_FIRE_PROTECT = false -- Fire protection nodes, (name, protection level, damage) ARMOR_FIRE_NODES = { - {"default:lava_source", 5, 4}, - {"default:lava_flowing", 5, 4}, - {"fire:basic_flame", 3, 4}, - {"ethereal:crystal_spike", 2, 1}, - {"bakedclay:safe_fire", 2, 1}, - {"default:torch", 1, 1}, + {"default:lava_source", 5, 4}, + {"default:lava_flowing", 5, 4}, + {"fire:basic_flame", 3, 4}, + {"fire:permanent_flame", 3, 4}, + {"ethereal:crystal_spike", 2, 1}, + {"ethereal:fire_flower", 2, 1}, + {"default:torch", 1, 1}, } -- Increase this if you get initialization glitches when a player first joins. @@ -54,3 +59,7 @@ ARMOR_LEVEL_MULTIPLIER = 1 -- eg: ARMOR_HEAL_MULTIPLIER = 0 will disable healing altogether. ARMOR_HEAL_MULTIPLIER = 1 +-- You can use this to increase or decrease overall armor radiation protection, +-- eg: ARMOR_RADIATION_MULTIPLIER = 0 will completely disable radiation protection. +-- Note: patched technic mod is required +ARMOR_RADIATION_MULTIPLIER = 1 diff --git a/mods/3d_armor-master/3d_armor/armor.lua b/mods/3d_armor-master/3d_armor/armor.lua index 62c8bc4..85d120a 100644 --- a/mods/3d_armor-master/3d_armor/armor.lua +++ b/mods/3d_armor-master/3d_armor/armor.lua @@ -1,625 +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_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, 4}, - {"default:lava_flowing", 5, 4}, - {"fire:basic_flame", 3, 4}, - {"ethereal:crystal_spike", 2, 1}, - {"bakedclay:safe_fire", 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.5", -} - -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]" - .."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.."]" - .."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, -} - ---bloody player code -bloodskin = "blood_0.png" -local checktimer = 0 -minetest.register_globalstep(function(dtime) - if checktimer > 2 then - checktimer = 0 - for _, player in pairs(minetest.get_connected_players()) do - local hp = player:get_hp(player) - if hp <= 6 then - bloodskin = "blood_3.png" - elseif hp <= 10 then - bloodskin = "blood_2.png" - elseif hp <= 16 then - bloodskin = "blood_1.png" - elseif hp > 16 then - bloodskin = "blood_0.png" - end - armor:set_player_armor(player) - end - else - checktimer = checktimer + dtime - end -end) - -minetest.register_on_player_hpchange(function(player, hp_change) - local hp = player:get_hp(player) - if hp <= 6 then - bloodskin = "blood_3.png" - elseif hp <= 10 then - bloodskin = "blood_2.png" - elseif hp <= 16 then - bloodskin = "blood_1.png" - elseif hp > 16 then - bloodskin = "blood_0.png" - end - armor:set_player_armor(player) -end) - -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.."^"..bloodskin, - 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 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 - local heal = def.groups["armor_heal"] or 0 - armor_heal = armor_heal + heal - local fire = def.groups["armor_fire"] or 0 - armor_fire = armor_fire + fire - 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 - 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 - 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: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) - 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 - else - 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}, - }, + end, }) --- 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 +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 - 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) + 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, +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}, }) - 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, - } - 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 - 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 - 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 - 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, added by TenPlus1 - -if ARMOR_FIRE_PROTECT == true then - -- override hot nodes so they do not hurt player anywhere but mod - for _, row in ipairs(ARMOR_FIRE_NODES) do - if minetest.registered_nodes[row[1]] then - minetest.override_item(row[1], {damage_per_second = 0}) - end - end - minetest.register_globalstep(function(dtime) - armor.timer = armor.timer + dtime - if armor.timer > ARMOR_UPDATE_TIME then - for _,player in ipairs(minetest.get_connected_players()) do - local name = player:get_player_name() - local pos = player:getpos() - local hp = player:get_hp() - if 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 ipairs(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 - 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 diff --git a/mods/3d_armor-master/3d_armor/depends.txt b/mods/3d_armor-master/3d_armor/depends.txt index 3acf737..fa1b233 100644 --- a/mods/3d_armor-master/3d_armor/depends.txt +++ b/mods/3d_armor-master/3d_armor/depends.txt @@ -1,6 +1,7 @@ default -inventory_plus? -unified_inventory? +player_monoids? +armor_monoid? fire? ethereal? bakedclay? +intllib? diff --git a/mods/3d_armor-master/3d_armor/description.txt b/mods/3d_armor-master/3d_armor/description.txt new file mode 100644 index 0000000..b0a9b0a --- /dev/null +++ b/mods/3d_armor-master/3d_armor/description.txt @@ -0,0 +1 @@ +Adds craftable armor that is visible to other players. diff --git a/mods/3d_armor-master/3d_armor/init.lua b/mods/3d_armor-master/3d_armor/init.lua index 0c8bac8..3e88e9d 100644 --- a/mods/3d_armor-master/3d_armor/init.lua +++ b/mods/3d_armor-master/3d_armor/init.lua @@ -1,281 +1,418 @@ -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") +-- support for i18n +armor_i18n = { } +local MP = minetest.get_modpath(minetest.get_current_modname()) +armor_i18n.gettext, armor_i18n.ngettext = dofile(MP.."/intllib.lua") +-- escaping formspec +armor_i18n.fgettext = function(...) return minetest.formspec_escape(armor_i18n.gettext(...)) end +-- local functions +local S = armor_i18n.gettext +local F = armor_i18n.fgettext -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, - }) +local modname = minetest.get_current_modname() +local modpath = minetest.get_modpath(modname) +local worldpath = minetest.get_worldpath() +local last_punch_time = {} +local pending_players = {} +local timer = 0 + +dofile(modpath.."/api.lua") + +-- 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, - }) -end +-- Load Configuration -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, physics_speed=-0.05}, - 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, physics_speed=-0.1}, - 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, physics_speed=-0.1}, - 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, physics_speed=-0.05}, - wear = 0, - }) +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 - -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=2, armor_use=250, physics_speed=-0.06}, - 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=2, armor_use=250, physics_speed=-0.11}, - 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=2, armor_use=250, physics_speed=-0.11}, - 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=2, armor_use=250, physics_speed=-0.06}, - wear = 0, - }) -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, - }) -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=4, armor_use=250, physics_speed=-0.1}, - 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=4, armor_use=250, physics_speed=-0.15}, - 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=4, armor_use=250, physics_speed=-0.15}, - 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=4, armor_use=250, physics_speed=-0.1}, - wear = 0, - }) -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, - }) -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, - }) -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}, - }, - }) ---MELTING DOWN -if v ~= "group:wood" then - minetest.register_craft({ - output = v .. " 5", - type = "cooking", - cooktime = 14, - recipe = "3d_armor:helmet_"..k - }) - minetest.register_craft({ - output = v .. " 8", - type = "cooking", - cooktime = 14, - recipe = "3d_armor:chestplate_"..k - }) - minetest.register_craft({ - output = v .. " 7", - type = "cooking", - cooktime = 14, - recipe = "3d_armor:leggings_"..k - }) - minetest.register_craft({ - output = v .. " 4", - type = "cooking", - cooktime = 14, - recipe = "3d_armor:boots_"..k - }) +for material, _ in pairs(armor.materials) do + local key = "material_"..material + if armor.config[key] == false then + armor.materials[material] = nil end end +-- Mod Compatibility + +if minetest.get_modpath("technic") then + armor.formspec = armor.formspec.. + "label[5,2.5;"..F("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 + +dofile(modpath.."/armor.lua") + +-- Armor Initialization + +armor.formspec = armor.formspec.. + "label[5,1;"..F("Level")..": armor_level]".. + "label[5,1.5;"..F("Heal")..": armor_attr_heal]" +if armor.config.fire_protect then + armor.formspec = armor.formspec.."label[5,2;"..F("Fire")..": armor_fire]" +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)) + end +end) + +local function init_player_armor(player) + local name = player:get_player_name() + local pos = player:getpos() + 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) + armor:save_armor_inventory(player) + armor:run_callbacks("on_equip", player, index, stack) + armor:set_player_armor(player) + end, + on_take = function(inv, listname, index, stack, player) + armor:save_armor_inventory(player) + armor:run_callbacks("on_unequip", player, index, stack) + armor:set_player_armor(player) + end, + on_move = function(inv, from_list, from_index, to_list, to_index, count, player) + armor:save_armor_inventory(player) + armor:set_player_armor(player) + end, + allow_put = function(inv, listname, index, stack, player) + local def = stack:get_definition() or {} + local allowed = 0 + for _, element in pairs(armor.elements) do + if def.groups["armor_"..element] then + allowed = 1 + for i = 1, 6 do + local item = inv:get_stack("armor", i):get_name() + if minetest.get_item_group(item, "armor_"..element) > 0 then + return 0 + end + end + end + end + return allowed + 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) + armor:run_callbacks("on_equip", player, i, stack) + 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 + +-- 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:set_inventory_stack(player, i, nil) + armor:run_callbacks("on_unequip", player, i, stack) + end + end + armor:set_player_armor(player) + local pos = player:getpos() + if pos and armor.config.destroy == false then + minetest.after(armor.config.bones_delay, function() + local meta = nil + local maxp = vector.add(pos, 8) + local minp = vector.subtract(pos, 8) + 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.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 + +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 + heal = heal * armor.config.heal_multiplier + 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 + +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:getpos() + 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 diff --git a/mods/3d_armor-master/3d_armor/intllib.lua b/mods/3d_armor-master/3d_armor/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- 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 diff --git a/mods/3d_armor-master/3d_armor/locale/fr.po b/mods/3d_armor-master/3d_armor/locale/fr.po new file mode 100644 index 0000000..013e961 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/locale/fr.po @@ -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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-06 18:20+0200\n" +"PO-Revision-Date: 2017-08-06 18:20+0200\n" +"Last-Translator: fat115 \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 name is nil @1" +msgstr "3d_armor : Nom du joueur non trouvé @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "3d_armor : Inventaire 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/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor : Référence au joueur non trouvée @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 !" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit : Mod chargé mais non utilisé." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Casque 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Cuirasse 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Manches 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Jambières 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "Bottes 'Hazmat'" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Combinaison 'Hazmat'" + +#: ../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" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor : Mod chargé mais non utilisé." + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "plomb" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "laiton" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "fonte" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "acier au carbone" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "acier inoxydable" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "étain" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "argent" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Casque" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Cuirasse" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Jambières" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "Bottes" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Bouclier" + +#. 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 en @1" diff --git a/mods/3d_armor-master/3d_armor/locale/it.po b/mods/3d_armor-master/3d_armor/locale/it.po new file mode 100644 index 0000000..9e44322 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/locale/it.po @@ -0,0 +1,384 @@ +# ITALIAN LOCALE FILE FOR THE 3D ARMOR MODULE +# Copyright (C) 2012-2017 Stuart Jones +# This file is distributed under the same license as the 3D ARMOR package. +# Hamlet , 2017. +# +msgid "" +msgstr "" +"Project-Id-Version: Italian localization file for the 3D Armor module\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-06 18:20+0200\n" +"PO-Revision-Date: 2017-08-18 00:36+0100\n" +"Last-Translator: H4mlet \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 name is nil @1" +msgstr "3d_armor: Il nome della/del gicatrice/tore è nullo @1" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "3d_armor: L'inventario della/del giocatrice/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/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor: Il riferimento alla/al giocatrice/tore è 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!" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit: Mod caricato ma inutilizzato." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Elmo hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Corazza hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Manica hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Gambali hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "Stivali hazmat" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Completo hazmat" + +#: ../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" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor: Mod caricato ma inutilizzato." + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "Piombo" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "Ottone" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "Ghisa" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "Acciaio al carbonio" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "Acciaio inossidabile" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "Stagno" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "Argento" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Elmo" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Corazza" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Gambali" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "Stivali" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Scudo" + +#. 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 di @1" diff --git a/mods/3d_armor-master/3d_armor/locale/ms.po b/mods/3d_armor-master/3d_armor/locale/ms.po new file mode 100644 index 0000000..c86546f --- /dev/null +++ b/mods/3d_armor-master/3d_armor/locale/ms.po @@ -0,0 +1,386 @@ +# 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 , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-08-06 18:20+0200\n" +"PO-Revision-Date: 2018-02-07 13:25+0800\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: MuhdNurHidayat (MNH48) \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"Language: ms\n" + +#: ../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: Player inventory is nil @1" +msgstr "3d_armor: Inventori 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/api.lua +msgid "3d_armor: Player reference is nil @1" +msgstr "3d_armor: Rujukan pemain 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!" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "hazmat_suit: Mods dimuatkan tetapi tidak digunakan." + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "Helmet Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "Perisai Dada Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "Perisai Tangan Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "Perisai Kaki Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "But Keselamatan" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +msgstr "Pakaian Keselamatan" + +#: ../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" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "technic_armor: Mods dimuatkan tetapi tidak digunakan." + +# 'Lead' here is the chemical compound so the translation is 'plumbum', not 'pimpin' (act of leading). +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "Plumbum" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "Loyang" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "Besi Tuang" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "Keluli Karbon" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "Keluli Tahan Karat" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "Timah" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "Perak" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "Helmet" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "Perisai Dada" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "Perisai Kaki" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "But" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "Perisai Pegang" + +#. 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 @1" diff --git a/mods/3d_armor-master/3d_armor/locale/template.pot b/mods/3d_armor-master/3d_armor/locale/template.pot new file mode 100644 index 0000000..20b7504 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/locale/template.pot @@ -0,0 +1,383 @@ +# 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 , 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 \n" +"Language-Team: LANGUAGE \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 name is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player inventory is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Detached armor inventory is nil @1" +msgstr "" + +#: ../3d_armor/api.lua +msgid "3d_armor: Player reference 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 "" + +#: ../hazmat_suit/init.lua +msgid "hazmat_suit: Mod loaded but unused." +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Helmet" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Chestplate" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Sleeve" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Leggins" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Boots" +msgstr "" + +#: ../hazmat_suit/init.lua +msgid "Hazmat Suit" +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 "" + +#: ../technic_armor/init.lua +msgid "technic_armor: Mod loaded but unused." +msgstr "" + +#: ../technic_armor/init.lua +msgid "Lead" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Brass" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Cast Iron" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Carbon Steel" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Stainless Steel" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Tin" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Silver" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Helmet" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Chestplate" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Leggings" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Boots" +msgstr "" + +#: ../technic_armor/init.lua +msgid "Shield" +msgstr "" + +#. 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 "" diff --git a/mods/3d_armor-master/3d_armor/models/3d_armor_character.b3d b/mods/3d_armor-master/3d_armor/models/3d_armor_character.b3d index 278956b..7c27cae 100644 Binary files a/mods/3d_armor-master/3d_armor/models/3d_armor_character.b3d and b/mods/3d_armor-master/3d_armor/models/3d_armor_character.b3d differ diff --git a/mods/3d_armor-master/3d_armor/models/3d_armor_character.blend b/mods/3d_armor-master/3d_armor/models/3d_armor_character.blend index 5ded978..f61e222 100644 Binary files a/mods/3d_armor-master/3d_armor/models/3d_armor_character.blend and b/mods/3d_armor-master/3d_armor/models/3d_armor_character.blend differ diff --git a/mods/3d_armor-master/3d_armor/tools/updatepo.sh b/mods/3d_armor-master/3d_armor/tools/updatepo.sh new file mode 100644 index 0000000..21ca5b5 --- /dev/null +++ b/mods/3d_armor-master/3d_armor/tools/updatepo.sh @@ -0,0 +1,25 @@ +#! /bin/bash + +# To create a new translation: +# msginit --locale=ll_CC -o locale/ll_CC.po -i locale/template.pot + +cd "$(dirname "${BASH_SOURCE[0]}")/.."; + +# Extract translatable strings. +xgettext --from-code=UTF-8 \ + --language=Lua \ + --sort-by-file \ + --keyword=S \ + --keyword=NS:1,2 \ + --keyword=N_ \ + --keyword=F \ + --add-comments='Translators:' \ + --add-location=file \ + -o locale/template.pot \ + $(find .. -name '*.lua') + +# Update translations. +find locale -name '*.po' | while read -r file; do + echo $file + msgmerge --update $file locale/template.pot; +done diff --git a/mods/3d_armor-master/3d_armor_ip/LICENSE.txt b/mods/3d_armor-master/3d_armor_ip/LICENSE.txt new file mode 100644 index 0000000..96ff8c3 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ip/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor integration to inventory plus [3d_armor_ip] +========================================================== + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-master/3d_armor_ip/depends.txt b/mods/3d_armor-master/3d_armor_ip/depends.txt new file mode 100644 index 0000000..e96293b --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ip/depends.txt @@ -0,0 +1,2 @@ +3d_armor +inventory_plus? diff --git a/mods/3d_armor-master/3d_armor_ip/description.txt b/mods/3d_armor-master/3d_armor_ip/description.txt new file mode 100644 index 0000000..01e1b54 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ip/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the inventory plus diff --git a/mods/3d_armor-master/3d_armor_ip/init.lua b/mods/3d_armor-master/3d_armor_ip/init.lua new file mode 100644 index 0000000..ea6fa57 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ip/init.lua @@ -0,0 +1,38 @@ +-- support for i18n +local S = armor_i18n.gettext +local F = armor_i18n.fgettext + +if not minetest.global_exists("inventory_plus") then + minetest.log("warning", S("3d_armor_ip: Mod loaded but unused.")) + return +end + +armor.formspec = "size[8,8.5]button[6,0;2,0.5;main;"..F("Back").."]"..armor.formspec +armor:register_on_update(function(player) + local name = player:get_player_name() + local formspec = armor:get_armor_formspec(name, true) + local page = player:get_inventory_formspec() + if page:find("detached:"..name.."_armor") then + inventory_plus.set_inventory_formspec(player, formspec) + end +end) + +if minetest.get_modpath("crafting") then + inventory_plus.get_formspec = function(player, page) + end +end + +minetest.register_on_joinplayer(function(player) + inventory_plus.register_button(player,"armor", S("Armor")) +end) + +minetest.register_on_player_receive_fields(function(player, formname, fields) + if fields.armor then + local name = armor:get_valid_player(player, "[on_player_receive_fields]") + if not name then + return + end + local formspec = armor:get_armor_formspec(name, true) + inventory_plus.set_inventory_formspec(player, formspec) + end +end) diff --git a/mods/3d_armor-master/3d_armor_sfinv/LICENSE.txt b/mods/3d_armor-master/3d_armor_sfinv/LICENSE.txt new file mode 100644 index 0000000..5b4d955 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_sfinv/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor sfinv integration [3d_armor_sfinv] +================================================= + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-master/3d_armor_sfinv/depends.txt b/mods/3d_armor-master/3d_armor_sfinv/depends.txt new file mode 100644 index 0000000..c7beeda --- /dev/null +++ b/mods/3d_armor-master/3d_armor_sfinv/depends.txt @@ -0,0 +1,2 @@ +3d_armor +sfinv? diff --git a/mods/3d_armor-master/3d_armor_sfinv/description.txt b/mods/3d_armor-master/3d_armor_sfinv/description.txt new file mode 100644 index 0000000..0ef2ae9 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_sfinv/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the sfinv inventory diff --git a/mods/3d_armor-master/3d_armor_sfinv/init.lua b/mods/3d_armor-master/3d_armor_sfinv/init.lua new file mode 100644 index 0000000..a937127 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_sfinv/init.lua @@ -0,0 +1,21 @@ +-- support for i18n +local S = armor_i18n.gettext + +if not minetest.global_exists("sfinv") then + minetest.log("warning", S("3d_armor_sfinv: Mod loaded but unused.")) + return +end + +sfinv.register_page("3d_armor:armor", { + title = S("Armor"), + get = function(self, player, context) + local name = player:get_player_name() + local formspec = armor:get_armor_formspec(name, true) + return sfinv.make_formspec(player, context, formspec, false) + end +}) +armor:register_on_update(function(player) + if sfinv.enabled then + sfinv.set_player_inventory_formspec(player) + end +end) diff --git a/mods/3d_armor-master/3d_armor_stand/LICENSE.txt b/mods/3d_armor-master/3d_armor_stand/LICENSE.txt index 65f46c8..82e5de6 100644 --- a/mods/3d_armor-master/3d_armor_stand/LICENSE.txt +++ b/mods/3d_armor-master/3d_armor_stand/LICENSE.txt @@ -1,9 +1,9 @@ [mod] 3d Armor Stand [3d_armor_stand] ===================================== -License Source Code: (C) 2016-2017 Stuart Jones - LGPL v2.1 +License Source Code: (C) 2016-2018 Stuart Jones - LGPL v2.1 -Lecense Models: (C) 2016-2017 Stuart Jones - CC BY-SA 3.0 +Lecense Models: (C) 2016-2018 Stuart Jones - CC BY-SA 3.0 UV model mapping by tobyplowy(aka toby109tt) diff --git a/mods/3d_armor-master/3d_armor_stand/init.lua b/mods/3d_armor-master/3d_armor_stand/init.lua index 48051d8..6570270 100644 --- a/mods/3d_armor-master/3d_armor_stand/init.lua +++ b/mods/3d_armor-master/3d_armor_stand/init.lua @@ -1,3 +1,6 @@ +-- support for i18n +local S = armor_i18n.gettext + local armor_stand_formspec = "size[8,7]" .. default.gui_bg .. default.gui_bg_img .. @@ -16,6 +19,18 @@ local armor_stand_formspec = "size[8,7]" .. local elements = {"head", "torso", "legs", "feet"} +local function drop_armor(pos) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + for _, element in pairs(elements) do + local stack = inv:get_stack("armor_"..element, 1) + if stack and stack:get_count() > 0 then + armor.drop_armor(pos, stack) + inv:set_stack("armor_"..element, 1, nil) + end + end +end + local function get_stand_object(pos) local object = nil local objects = minetest.get_objects_inside_radius(pos, 0.5) or {} @@ -98,8 +113,40 @@ local function has_locked_armor_stand_privilege(meta, player) return true end +local function add_hidden_node(pos, player) + local p = {x=pos.x, y=pos.y + 1, z=pos.z} + local name = player:get_player_name() + local node = minetest.get_node(p) + if node.name == "air" and not minetest.is_protected(pos, name) then + minetest.set_node(p, {name="3d_armor_stand:top"}) + end +end + +local function remove_hidden_node(pos) + local p = {x=pos.x, y=pos.y + 1, z=pos.z} + local node = minetest.get_node(p) + if node.name == "3d_armor_stand:top" then + minetest.remove_node(p) + end +end + +minetest.register_node("3d_armor_stand:top", { + description = S("Armor stand top"), + paramtype = "light", + drawtype = "plantlike", + sunlight_propagates = true, + walkable = true, + pointable = false, + diggable = false, + buildable_to = false, + drop = "", + groups = {not_in_creative_inventory = 1}, + on_blast = function() end, + tiles = {"3d_armor_trans.png"}, +}) + minetest.register_node("3d_armor_stand:armor_stand", { - description = "Armor stand", + description = S("Armor stand"), drawtype = "mesh", mesh = "3d_armor_stand.obj", tiles = {"3d_armor_stand.png"}, @@ -108,14 +155,17 @@ minetest.register_node("3d_armor_stand:armor_stand", { walkable = false, selection_box = { type = "fixed", - fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5} + fixed = { + {-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25}, + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + }, }, groups = {choppy=2, oddly_breakable_by_hand=2}, sounds = default.node_sound_wood_defaults(), on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", armor_stand_formspec) - meta:set_string("infotext", "Armor Stand") + meta:set_string("infotext", S("Armor Stand")) local inv = meta:get_inventory() for _, element in pairs(elements) do inv:set_size("armor_"..element, 1) @@ -131,8 +181,9 @@ minetest.register_node("3d_armor_stand:armor_stand", { end return true end, - after_place_node = function(pos) + after_place_node = function(pos, placer) minetest.add_entity(pos, "3d_armor_stand:armor_entity") + add_hidden_node(pos, placer) end, allow_metadata_inventory_put = function(pos, listname, index, stack) local def = stack:get_definition() or {} @@ -153,20 +204,17 @@ minetest.register_node("3d_armor_stand:armor_stand", { end, after_destruct = function(pos) update_entity(pos) + remove_hidden_node(pos) end, on_blast = function(pos) - local object = get_stand_object(pos) - if object then - object:remove() - end - minetest.after(1, function(pos) - update_entity(pos) - end, pos) + drop_armor(pos) + armor.drop_armor(pos, "3d_armor_stand:armor_stand") + minetest.remove_node(pos) end, }) minetest.register_node("3d_armor_stand:locked_armor_stand", { - description = "Protected Armor stand", + description = S("Locked Armor stand"), drawtype = "mesh", mesh = "3d_armor_stand.obj", tiles = {"3d_armor_stand_locked.png"}, @@ -175,14 +223,17 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", { walkable = false, selection_box = { type = "fixed", - fixed = {-0.5,-0.5,-0.5, 0.5,1.4,0.5} + fixed = { + {-0.25, -0.4375, -0.25, 0.25, 1.4, 0.25}, + {-0.5, -0.5, -0.5, 0.5, -0.4375, 0.5}, + }, }, groups = {choppy=2, oddly_breakable_by_hand=2}, sounds = default.node_sound_wood_defaults(), on_construct = function(pos) local meta = minetest.get_meta(pos) meta:set_string("formspec", armor_stand_formspec) - meta:set_string("infotext", "Armor Stand") + meta:set_string("infotext", S("Armor Stand")) meta:set_string("owner", "") local inv = meta:get_inventory() for _, element in pairs(elements) do @@ -202,27 +253,27 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", { after_place_node = function(pos, placer) minetest.add_entity(pos, "3d_armor_stand:armor_entity") local meta = minetest.get_meta(pos) - meta:set_string("infotext", "Protected Armor Stand") - --meta:set_string("owner", placer:get_player_name() or "") - --meta:set_string("infotext", "Armor Stand (owned by " .. - --meta:get_string("owner") .. ")") + meta:set_string("owner", placer:get_player_name() or "") + meta:set_string("infotext", S("Armor Stand (owned by @1)", meta:get_string("owner"))) + add_hidden_node(pos, placer) end, allow_metadata_inventory_put = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) + if not has_locked_armor_stand_privilege(meta, player) then + return 0 + end local def = stack:get_definition() or {} local groups = def.groups or {} if groups[listname] then - if not minetest.is_protected(pos, player:get_player_name()) then return 1 - end end return 0 end, allow_metadata_inventory_take = function(pos, listname, index, stack, player) local meta = minetest.get_meta(pos) - if minetest.is_protected(pos, player:get_player_name()) then + if not has_locked_armor_stand_privilege(meta, player) then return 0 - end + end return stack:get_count() end, allow_metadata_inventory_move = function(pos) @@ -236,15 +287,10 @@ minetest.register_node("3d_armor_stand:locked_armor_stand", { end, after_destruct = function(pos) update_entity(pos) + remove_hidden_node(pos) end, on_blast = function(pos) - local object = get_stand_object(pos) - if object then - object:remove() - end - minetest.after(1, function(pos) - update_entity(pos) - end, pos) + -- Not affected by TNT end, }) @@ -253,7 +299,7 @@ minetest.register_entity("3d_armor_stand:armor_entity", { visual = "mesh", mesh = "3d_armor_entity.obj", visual_size = {x=1, y=1}, - collisionbox = {-0.1,-0.4,-0.1, 0.1,1.3,0.1}, + collisionbox = {0,0,0,0,0,0}, textures = {"3d_armor_trans.png"}, pos = nil, timer = 0, @@ -264,31 +310,35 @@ minetest.register_entity("3d_armor_stand:armor_entity", { update_entity(pos) end end, - on_step = function(self, dtime) - if not self.pos then - return - end - self.timer = self.timer + dtime - if self.timer > 1 then - self.timer = 0 - local pos = self.object:getpos() - if pos then - if vector.equals(vector.round(pos), self.pos) then - return - end - end - update_entity(self.pos) + on_blast = function(self, damage) + local drops = {} + local node = minetest.get_node(self.pos) + if node.name == "3d_armor_stand:armor_stand" then + drop_armor(self.pos) self.object:remove() end + return false, false, drops end, }) +minetest.register_abm({ + nodenames = {"3d_armor_stand:locked_armor_stand", "3d_armor_stand:armor_stand"}, + interval = 15, + chance = 1, + action = function(pos, node, active_object_count, active_object_count_wider) + local num + num = #minetest.get_objects_inside_radius(pos, 0.5) + if num > 0 then return end + update_entity(pos) + end +}) + minetest.register_craft({ output = "3d_armor_stand:armor_stand", recipe = { - {"default:fence_wood"}, - {"default:fence_wood"}, - {"default:cobble"}, + {"", "group:fence", ""}, + {"", "group:fence", ""}, + {"default:steel_ingot", "default:steel_ingot", "default:steel_ingot"}, } }) @@ -298,4 +348,3 @@ minetest.register_craft({ {"3d_armor_stand:armor_stand", "default:steel_ingot"}, } }) - diff --git a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_feet.png b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_feet.png index d04f9e3..2427a60 100644 Binary files a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_feet.png and b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_feet.png differ diff --git a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_head.png b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_head.png index 228c08e..5676e0b 100644 Binary files a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_head.png and b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_head.png differ diff --git a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_legs.png b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_legs.png index 66ec357..1d8d4c1 100644 Binary files a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_legs.png and b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_legs.png differ diff --git a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_torso.png b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_torso.png index af95ec7..ef134f8 100644 Binary files a/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_torso.png and b/mods/3d_armor-master/3d_armor_stand/textures/3d_armor_stand_torso.png differ diff --git a/mods/3d_armor-master/3d_armor_ui/LICENSE.txt b/mods/3d_armor-master/3d_armor_ui/LICENSE.txt new file mode 100644 index 0000000..5dd82c8 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ui/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] 3d Armor integration to unified inventory [3d_armor_ui] +============================================================= + +License Source Code: (C) 2012-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-master/3d_armor_ui/depends.txt b/mods/3d_armor-master/3d_armor_ui/depends.txt new file mode 100644 index 0000000..cf4ccf9 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ui/depends.txt @@ -0,0 +1,2 @@ +3d_armor +unified_inventory? diff --git a/mods/3d_armor-master/3d_armor_ui/description.txt b/mods/3d_armor-master/3d_armor_ui/description.txt new file mode 100644 index 0000000..873f876 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ui/description.txt @@ -0,0 +1 @@ +Adds 3d_armor page to the unified inventory diff --git a/mods/3d_armor-master/3d_armor_ui/init.lua b/mods/3d_armor-master/3d_armor_ui/init.lua new file mode 100644 index 0000000..6187229 --- /dev/null +++ b/mods/3d_armor-master/3d_armor_ui/init.lua @@ -0,0 +1,53 @@ +-- support for i18n +local S = armor_i18n.gettext +local F = armor_i18n.fgettext +local has_technic = minetest.get_modpath("technic") ~= nil + +if not minetest.global_exists("unified_inventory") then + minetest.log("warning", S("3d_armor_ui: Mod loaded but unused.")) + return +end + +if unified_inventory.sfinv_compat_layer then + return +end + +armor:register_on_update(function(player) + local name = player:get_player_name() + if unified_inventory.current_page[name] == "armor" then + unified_inventory.set_inventory_formspec(player, "armor") + end +end) + +unified_inventory.register_button("armor", { + type = "image", + image = "inventory_plus_armor.png", + tooltip = S("3d Armor") +}) + +unified_inventory.register_page("armor", { + get_formspec = function(player, perplayer_formspec) + local fy = perplayer_formspec.formspec_y + local name = player:get_player_name() + if armor.def[name].init_time == 0 then + return {formspec="label[0,0;"..F("Armor not initialized!").."]"} + end + local formspec = "background[0.06,"..fy..";7.92,7.52;3d_armor_ui_form.png]".. + "label[0,0;"..F("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)..";"..F("Level")..": "..armor.def[name].level.."]".. + "label[5.0,"..(fy + 0.5)..";"..F("Heal")..": "..armor.def[name].heal.."]".. + "listring[current_player;main]".. + "listring[detached:"..name.."_armor;armor]" + if armor.config.fire_protect then + formspec = formspec.."label[5.0,"..(fy + 1.0)..";".. + F("Fire")..": "..armor.def[name].fire.."]" + end + if has_technic then + formspec = formspec.."label[5.0,"..(fy + 1.5)..";".. + F("Radiation")..": "..armor.def[name].groups["radiation"].."]" + end + return {formspec=formspec} + end, +}) diff --git a/mods/3d_armor-master/LICENSE.md b/mods/3d_armor-master/LICENSE.md index d383270..56c93cd 100644 --- a/mods/3d_armor-master/LICENSE.md +++ b/mods/3d_armor-master/LICENSE.md @@ -1,11 +1,9 @@ 3D Armor - Visible Player Armor =============================== -Default Item Textures (C) Cisoun - WTFPL +License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 -Armor Textures: Copyright (C) 2013 Ryan Jones - CC-BY-SA - -Source Code: Copyright (C) 2013 Stuart Jones - LGPL +Armor Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0 Special credit to Jordach and MirceaKitsune for providing the default 3d character model. diff --git a/mods/3d_armor-master/README.md b/mods/3d_armor-master/README.md index 16ca0c1..9cff8a0 100644 --- a/mods/3d_armor-master/README.md +++ b/mods/3d_armor-master/README.md @@ -1,17 +1,28 @@ -Modpack - 3d Armor [0.4.5] -========================== +Modpack - 3d Armor [0.4.11] +=========================== + +### Table of Contents + + + + +- [[mod] Visible Player Armor [3d_armor]](#mod-visible-player-armor-3d_armor) +- [[mod] Visible Wielded Items [wieldview]](#mod-visible-wielded-items-wieldview) +- [[mod] Shields [shields]](#mod-shields-shields) +- [[mod] 3d Armor Stand [3d_armor_stand]](#mod-3d-armor-stand-3d_armor_stand) + + + [mod] Visible Player Armor [3d_armor] ------------------------------------- -Minetest Version: 0.4.13 +Minetest Version: 0.4.16 Game: minetest_game and many derivatives Depends: default -Recommends: inventory_plus or unified_inventory (use only one) - 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 attack. @@ -23,12 +34,18 @@ Fire protection has been added by TenPlus1 and in use when ethereal mod is found armor has been enabled. each piece of armor offers 1 fire protection, level 1 protects against torches, level 2 against crystal spikes, 3 for fire and 5 protects when in lava. -Compatible with player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam +Compatible with sfinv, inventory plus or unified inventory by enabling the appropriate +inventory module, [3d_armor_sfinv], [3d_armor_ip] and [3d_armor_ui] respectively. +Also compatible with [smart_inventory] without the need for additional modules. + +built in support player skins [skins] by Zeg9 and Player Textures [player_textures] by PilzAdam and [simple_skins] by TenPlus1. Armor can be configured by adding a file called armor.conf in 3d_armor mod or world directory. see armor.conf.example for all available options. +For mod installation instructions, please visit: http://wiki.minetest.com/wiki/Installing_Mods + [mod] Visible Wielded Items [wieldview] --------------------------------------- @@ -44,11 +61,9 @@ Depends: 3d_armor Originally a part of 3d_armor, shields have been re-included as an optional extra. If you do not want shields then simply remove the shields folder from the modpack. -[mod] Technic Armor [technic_armor] ------------------------------------ +[mod] 3d Armor Stand [3d_armor_stand] +------------------------------------- Depends: 3d_armor -Adds tin, silver and technic materials to 3d_armor. -Requires technic mod to be installed for craft registration. - +Adds a chest-like armor stand for armor storage and display. diff --git a/mods/3d_armor-master/description.txt b/mods/3d_armor-master/description.txt new file mode 100644 index 0000000..2da5ba4 --- /dev/null +++ b/mods/3d_armor-master/description.txt @@ -0,0 +1 @@ +Visible player armor & wielded items. diff --git a/mods/3d_armor-master/preview_gen.py b/mods/3d_armor-master/preview_gen.py new file mode 100644 index 0000000..a18954d --- /dev/null +++ b/mods/3d_armor-master/preview_gen.py @@ -0,0 +1,81 @@ +#!/usr/bin/python + +import os +import sys +import Image + +try : + arg = sys.argv[1] +except IndexError : + print "Usage: preview_gen.py " + sys.exit(1) + +try : + index = open(arg, "r") +except IOError : + print "Failed to open index file%s" %s (arg) + sys.exit(1) + +preview = [] + +for line in index.readlines() : + if ":" in line : + line = line.rstrip('\n') + preview.append(line.split(':')) + +print "Generating preview images..." +for fn, place in preview : + try : + imi = Image.open(fn) + except IOError : + print "Failed to open %s" % (fn) + sys.exit(1) + + w, h = imi.size + if h != w / 2: + print "Incompatible texture size %s" % (fn) + sys.exit(1) + + s = w / 64 + imo = Image.new("RGBA", (16 * s, 32 * s)) + + if place == "all" or place == "head" : + face = (40 * s, 8 * s, 48 * s, 16 * s) + side_l = (56 * s, 8 * s, 57 * s, 16 * s) + side_r = (63 * s, 8 * s, 64 * s, 16 * s) + imo.paste(imi.crop(side_l), (4 * s, 0, 5 * s, 8 * s)) + imo.paste(imi.crop(side_r), (11 * s, 0, 12 * s, 8 * s)) + imo.paste(imi.crop(face), (4 * s, 0, 12 * s, 8 * s)) + + if place == "all" or place == "torso" : + arm = (44 * s, 20 * s, 48 * s, 32 * s) + body = (20 * s, 20 * s, 28 * s, 32 * s) + imo.paste(imi.crop(arm), (0 * s, 8 * s, 4 * s, 20 * s)) + imo.paste(imi.crop(arm).transpose(Image.FLIP_LEFT_RIGHT), + (12 * s, 8 * s, 16 * s, 20 * s)) + imo.paste(imi.crop(body), (4 * s, 8 * s, 12 * s, 20 * s)) + + if place == "all" or place == "legs" : + leg = (4 * s, 20 * s, 8 * s, 32 * s) + imo.paste(imi.crop(leg), (4 * s, 20 * s, 8 * s, 32 * s)) + imo.paste(imi.crop(leg).transpose(Image.FLIP_LEFT_RIGHT), + (8 * s, 20 * s, 12 * s, 32 * s)) + + if place == "all" or place == "feet" : + boot = (20 * s, 4 * s, 24 * s, 11 * s) + imo.paste(imi.crop(boot), (4 * s, 25 * s, 8 * s, 32 * s)) + imo.paste(imi.crop(boot).transpose(Image.FLIP_LEFT_RIGHT), + (8 * s, 25 * s, 12 * s, 32 * s)) + + size = (32 * s, 64 * s) + imo = imo.resize(size) + + if place == "shield" : + shield = (0, 0, 16 * s, 16 * s) + imo.paste(imi.crop(shield), (16 * s, 32 * s, 32 * s, 48 * s)) + + outfile = fn.replace(".png", "_preview.png") + imo.save(outfile) + print outfile + + diff --git a/mods/3d_armor-master/screenshot.png b/mods/3d_armor-master/screenshot.png new file mode 100644 index 0000000..f568cea Binary files /dev/null and b/mods/3d_armor-master/screenshot.png differ diff --git a/mods/3d_armor-master/shields/LICENSE.txt b/mods/3d_armor-master/shields/LICENSE.txt new file mode 100644 index 0000000..15e2345 --- /dev/null +++ b/mods/3d_armor-master/shields/LICENSE.txt @@ -0,0 +1,8 @@ +[mod] Shields [shields] +======================= + +License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 + +License Textures: Copyright (C) 2017-2018 davidthecreator - CC-BY-SA 3.0 + +https://github.com/daviddoesminetest/3d-armors-new-textures diff --git a/mods/3d_armor-master/shields/README.txt b/mods/3d_armor-master/shields/README.txt index 3146bcb..5a72097 100644 --- a/mods/3d_armor-master/shields/README.txt +++ b/mods/3d_armor-master/shields/README.txt @@ -1,6 +1,16 @@ +[mod] Shields [shields] +======================= + Adds shields to 3d_armor Depends: 3d_armor Originally a part of 3d_armor, shields have been re-included as an optional extra. If you do not what shields then simply remove the shields folder from the modpack. + +Shields Configuration +--------------------- + +Override the following default settings by adding them to your minetest.conf file. + +shields_disable_sounds = false diff --git a/mods/3d_armor-master/shields/description.txt b/mods/3d_armor-master/shields/description.txt new file mode 100644 index 0000000..cb378bb --- /dev/null +++ b/mods/3d_armor-master/shields/description.txt @@ -0,0 +1 @@ +Adds visible shields to 3d armor. diff --git a/mods/3d_armor-master/shields/init.lua b/mods/3d_armor-master/shields/init.lua index e768e57..36ab9b0 100644 --- a/mods/3d_armor-master/shields/init.lua +++ b/mods/3d_armor-master/shields/init.lua @@ -1,26 +1,66 @@ +-- support for i18n +local S = armor_i18n.gettext + +local disable_sounds = minetest.settings:get_bool("shields_disable_sounds") local use_moreores = minetest.get_modpath("moreores") +local function play_sound_effect(player, name) + if not disable_sounds and player then + local pos = player:getpos() + if pos then + minetest.sound_play({ + pos = pos, + name = name, + max_hear_distance = 10, + gain = 0.5, + }) + end + end +end + +if minetest.global_exists("armor") and armor.elements then + table.insert(armor.elements, "shield") + local mult = armor.config.level_multiplier or 1 + armor.config.level_multiplier = mult * 0.9 +end -- Regisiter Shields -minetest.register_tool("shields:shield_admin", { - description = "Admin Shield", +armor:register_armor("shields:shield_admin", { + description = S("Admin Shield"), inventory_image = "shields_inv_shield_admin.png", groups = {armor_shield=1000, armor_heal=100, armor_use=0, not_in_creative_inventory=1}, - wear = 0, }) -if ARMOR_MATERIALS.wood then - minetest.register_tool("shields:shield_wood", { - description = "Wooden Shield", +minetest.register_alias("adminshield", "shields:shield_admin") + +if armor.materials.wood then + armor:register_armor("shields:shield_wood", { + description = S("Wooden Shield"), inventory_image = "shields_inv_shield_wood.png", - groups = {armor_shield=5, armor_heal=0, armor_use=2000}, - wear = 0, + groups = {armor_shield=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}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_wood_footstep") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_wood_footstep") + end, }) - minetest.register_tool("shields:shield_enhanced_wood", { - description = "Enhanced Wood Shield", + armor:register_armor("shields:shield_enhanced_wood", { + description = S("Enhanced Wood Shield"), inventory_image = "shields_inv_shield_enhanced_wood.png", - groups = {armor_shield=8, armor_heal=0, armor_use=1000}, - wear = 0, + groups = {armor_shield=1, armor_heal=0, armor_use=2000}, + armor_groups = {fleshy=8}, + damage_groups = {cracky=3, snappy=2, choppy=3, crumbly=2, level=2}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_dig_metal") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_dug_metal") + end, }) minetest.register_craft({ output = "shields:shield_enhanced_wood", @@ -32,18 +72,34 @@ if ARMOR_MATERIALS.wood then }) end -if ARMOR_MATERIALS.cactus then - minetest.register_tool("shields:shield_cactus", { - description = "Cactus Shield", +if armor.materials.cactus then + armor:register_armor("shields:shield_cactus", { + description = S("Cactus Shield"), inventory_image = "shields_inv_shield_cactus.png", - groups = {armor_shield=5, armor_heal=0, armor_use=2000}, - wear = 0, + groups = {armor_shield=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=5}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=1}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_wood_footstep") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_wood_footstep") + end, }) - minetest.register_tool("shields:shield_enhanced_cactus", { - description = "Enhanced Cactus Shield", + armor:register_armor("shields:shield_enhanced_cactus", { + description = S("Enhanced Cactus Shield"), inventory_image = "shields_inv_shield_enhanced_cactus.png", - groups = {armor_shield=8, armor_heal=0, armor_use=1000}, - wear = 0, + groups = {armor_shield=1, armor_heal=0, armor_use=1000}, + armor_groups = {fleshy=8}, + damage_groups = {cracky=3, snappy=3, choppy=2, crumbly=2, level=2}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_dig_metal") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_dug_metal") + end, }) minetest.register_craft({ output = "shields:shield_enhanced_cactus", @@ -55,61 +111,112 @@ if ARMOR_MATERIALS.cactus then }) end -if ARMOR_MATERIALS.steel then - minetest.register_tool("shields:shield_steel", { - description = "Steel Shield", +if armor.materials.steel then + armor:register_armor("shields:shield_steel", { + description = S("Steel Shield"), inventory_image = "shields_inv_shield_steel.png", - groups = {armor_shield=10, armor_heal=0, armor_use=500}, - wear = 0, + groups = {armor_shield=1, armor_heal=0, armor_use=800, + physics_speed=-0.03, physics_gravity=0.03}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_dig_metal") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_dug_metal") + end, }) end -if ARMOR_MATERIALS.bronze then - minetest.register_tool("shields:shield_bronze", { - description = "Bronze Shield", +if armor.materials.bronze then + armor:register_armor("shields:shield_bronze", { + description = S("Bronze Shield"), inventory_image = "shields_inv_shield_bronze.png", - groups = {armor_shield=10, armor_heal=6, armor_use=250}, - wear = 0, + groups = {armor_shield=1, armor_heal=6, armor_use=400, + physics_speed=-0.03, physics_gravity=0.03}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=2, snappy=3, choppy=2, crumbly=1, level=2}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_dig_metal") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_dug_metal") + end, }) end -if ARMOR_MATERIALS.diamond then - minetest.register_tool("shields:shield_diamond", { - description = "Diamond Shield", +if armor.materials.diamond then + armor:register_armor("shields:shield_diamond", { + description = S("Diamond Shield"), inventory_image = "shields_inv_shield_diamond.png", - groups = {armor_shield=15, armor_heal=12, armor_use=100}, - wear = 0, + groups = {armor_shield=1, armor_heal=12, armor_use=200}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, choppy=1, level=3}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_glass_footstep") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_break_glass") + end, }) end -if ARMOR_MATERIALS.gold then - minetest.register_tool("shields:shield_gold", { - description = "Gold Shield", +if armor.materials.gold then + armor:register_armor("shields:shield_gold", { + description = S("Gold Shield"), inventory_image = "shields_inv_shield_gold.png", - groups = {armor_shield=10, armor_heal=6, armor_use=250}, - wear = 0, + groups = {armor_shield=1, armor_heal=6, armor_use=300, + physics_speed=-0.04, physics_gravity=0.04}, + armor_groups = {fleshy=10}, + damage_groups = {cracky=1, snappy=2, choppy=2, crumbly=3, level=2}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_dig_metal") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_dug_metal") + end, }) end -if ARMOR_MATERIALS.mithril then - minetest.register_tool("shields:shield_mithril", { - description = "Mithril Shield", +if armor.materials.mithril then + armor:register_armor("shields:shield_mithril", { + description = S("Mithril Shield"), inventory_image = "shields_inv_shield_mithril.png", - groups = {armor_shield=15, armor_heal=12, armor_use=50}, - wear = 0, + groups = {armor_shield=1, armor_heal=12, armor_use=100}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_glass_footstep") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_break_glass") + end, }) end -if ARMOR_MATERIALS.crystal then - minetest.register_tool("shields:shield_crystal", { - description = "Crystal Shield", +if armor.materials.crystal then + armor:register_armor("shields:shield_crystal", { + description = S("Crystal Shield"), inventory_image = "shields_inv_shield_crystal.png", - groups = {armor_shield=15, armor_heal=12, armor_use=50, armor_fire=1}, - wear = 0, + groups = {armor_shield=1, armor_heal=12, armor_use=100, armor_fire=1}, + armor_groups = {fleshy=15}, + damage_groups = {cracky=2, snappy=1, level=3}, + reciprocate_damage = true, + on_damage = function(player, index, stack) + play_sound_effect(player, "default_glass_footstep") + end, + on_destroy = function(player, index, stack) + play_sound_effect(player, "default_break_glass") + end, }) end -for k, v in pairs(ARMOR_MATERIALS) do +for k, v in pairs(armor.materials) do minetest.register_craft({ output = "shields:shield_"..k, recipe = { @@ -118,18 +225,4 @@ for k, v in pairs(ARMOR_MATERIALS) do {"", v, ""}, }, }) - --MELTING - if v ~= "group:wood" then - minetest.register_craft({ - output = v .. " 7", - type = "cooking", - cooktime = 14, - recipe = "shields:shield_"..k - }) - end end - -minetest.after(0, function() - table.insert(armor.elements, "shield") -end) - diff --git a/mods/3d_armor-master/wieldview/LICENSE.txt b/mods/3d_armor-master/wieldview/LICENSE.txt new file mode 100644 index 0000000..fff42d8 --- /dev/null +++ b/mods/3d_armor-master/wieldview/LICENSE.txt @@ -0,0 +1,5 @@ +[mod] visible wielded items [wieldview] +======================================= + +License Source Code: Copyright (C) 2013-2018 Stuart Jones - LGPL v2.1 + diff --git a/mods/3d_armor-master/wieldview/README.txt b/mods/3d_armor-master/wieldview/README.txt index cffae46..ffa5ef0 100644 --- a/mods/3d_armor-master/wieldview/README.txt +++ b/mods/3d_armor-master/wieldview/README.txt @@ -1,7 +1,7 @@ [mod] visible wielded items [wieldview] ======================================= -depends: default, 3d_armor +Depends on: 3d_armor Makes hand wielded items visible to other players. @@ -13,3 +13,11 @@ wieldview_update_time = 2 # Show nodes as tiles, disabled by default wieldview_node_tiles = false + +Info for modders +################ + +Wield image transformation: To apply a simple transformation to the item in +hand, add the group “wieldview_transform” to the item definition. The group +rating equals one of the numbers used for the [transform texture modifier +of the Lua API. diff --git a/mods/3d_armor-master/wieldview/depends.txt b/mods/3d_armor-master/wieldview/depends.txt index 585cc7a..b6cac21 100644 --- a/mods/3d_armor-master/wieldview/depends.txt +++ b/mods/3d_armor-master/wieldview/depends.txt @@ -1,2 +1 @@ -default 3d_armor diff --git a/mods/3d_armor-master/wieldview/description.txt b/mods/3d_armor-master/wieldview/description.txt new file mode 100644 index 0000000..0d51ad9 --- /dev/null +++ b/mods/3d_armor-master/wieldview/description.txt @@ -0,0 +1 @@ +Makes hand wielded items visible to other players. diff --git a/mods/3d_armor-master/wieldview/init.lua b/mods/3d_armor-master/wieldview/init.lua index 7a5a619..45f9fca 100644 --- a/mods/3d_armor-master/wieldview/init.lua +++ b/mods/3d_armor-master/wieldview/init.lua @@ -1,13 +1,13 @@ local time = 0 -local update_time = tonumber(minetest.setting_get("wieldview_update_time")) +local update_time = tonumber(minetest.settings:get("wieldview_update_time")) if not update_time then update_time = 2 - minetest.setting_set("wieldview_update_time", tostring(update_time)) + minetest.settings:set("wieldview_update_time", tostring(update_time)) end -local node_tiles = minetest.setting_getbool("wieldview_node_tiles") +local node_tiles = minetest.settings:get_bool("wieldview_node_tiles") if not node_tiles then node_tiles = false - minetest.setting_set("wieldview_node_tiles", "false") + minetest.settings:set("wieldview_node_tiles", "false") end wieldview = { @@ -29,8 +29,15 @@ wieldview.get_item_texture = function(self, item) texture = minetest.inventorycube(minetest.registered_items[item].tiles[1]) end end - if wieldview.transform[item] then - texture = texture.."^[transform"..wieldview.transform[item] + -- Get item image transformation, first from group, then from transform.lua + local transform = minetest.get_item_group(item, "wieldview_transform") + if transform == 0 then + transform = wieldview.transform[item] + end + if transform then + -- This actually works with groups ratings because transform1, transform2, etc. + -- have meaning and transform0 is used for identidy, so it can be ignored + texture = texture.."^[transform"..tostring(transform) end end return texture diff --git a/mods/playeranim/LICENSE.md b/mods/playeranim/LICENSE.md index 5c93f45..539d1d7 100644 --- a/mods/playeranim/LICENSE.md +++ b/mods/playeranim/LICENSE.md @@ -1,13 +1,23 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 +Copyright (c) 2013-2014, Diego Martínez +Copyright (c) 2016, Rui +All rights reserved. - Copyright (C) 2004 Sam Hocevar +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mods/playeranim/README.md b/mods/playeranim/README.md index bf95d0e..395d687 100644 --- a/mods/playeranim/README.md +++ b/mods/playeranim/README.md @@ -5,4 +5,19 @@ The head only turns up and down relative to the body, except it turns slightly t Works in multiplayer, I tested it on a local server. +Configuration +------------- + +This mod supports 2 versions of the player model: +- The old version: v1 (before nov. 2016) +- The new version: v2 (after nov. 2016) +(see also init.lua) + +As there is no automatic way to determine which version is used, this must be manually configured in `init.lua`. + +Symptoms of having configured the incorrect player model: +- In rest, arms are raised up, and are either detached from the body, or are too close to the body +- Cape (if visible) points upward + + Created by Rui914, this document was written by sloantothebone. diff --git a/mods/playeranim/depends.txt b/mods/playeranim/depends.txt index c12cc51..4ad96d5 100644 --- a/mods/playeranim/depends.txt +++ b/mods/playeranim/depends.txt @@ -1,2 +1 @@ default -3d_armor? diff --git a/mods/playeranim/description.txt b/mods/playeranim/description.txt index 5747a2a..0c1198d 100644 --- a/mods/playeranim/description.txt +++ b/mods/playeranim/description.txt @@ -1 +1 @@ -Adds animations to the players' head and right arm. +Adds animations to the players' head and right arm. \ No newline at end of file diff --git a/mods/playeranim/init.lua b/mods/playeranim/init.lua index a2a4b32..8fae9b5 100644 --- a/mods/playeranim/init.lua +++ b/mods/playeranim/init.lua @@ -1,12 +1,30 @@ -local model = minetest.get_modpath("3d_armor") and "armor" or "normal" +-- Version of player model. +-- default_character_v1: +-- minetest_game before 25 nov 2016 +-- 3d_armor before 27 nov 2016 (overrides model from minetest_game) +-- default_character_v2: +-- minetest_game after 25 nov 2016 +-- 3d_armor after 27 nov 2016 (overrides model from minetest_game) --- Localize functions to avoid table lookups (better performance) +local valid_player_model_versions = { + default_character_v1 = true, + default_character_v2 = true, + default_character_v3 = true, +} + +local player_model_version = minetest.settings:get("player_model_version") +if not player_model_version or player_model_version == "" then + player_model_version = "default_character_v2" +elseif not valid_player_model_versions[player_model_version] then + error("Invalid value for player_model_version in minetest.conf: " .. player_model_version) +end + +-- Localize to avoid table lookups local vector_new = vector.new +local math_pi = math.pi local math_sin = math.sin -local math_deg = math.deg local table_remove = table.remove local get_animation = default.player_get_animation -local get_connected_players = minetest.get_connected_players -- Animation alias local STAND = 1 @@ -26,49 +44,72 @@ local LLEG = "Leg_Left" local RLEG = "Leg_Right" local bone_positions = { - normal = { + default_character_v1 = { [BODY] = vector_new(0, -3.5, 0), - [HEAD] = vector_new(0, 6.5, 0), - [CAPE] = vector_new(0, 6.5, 1.5), - [LARM] = vector_new(-3.9, 6.5, 0), - [RARM] = vector_new(3.9, 6.5, 0), + [HEAD] = vector_new(0, 6.75, 0), + [CAPE] = vector_new(0, 6.75, 1.1), + [LARM] = vector_new(2, 6.75, 0), + [RARM] = vector_new(-2, 6.75, 0), [LLEG] = vector_new(-1, 0, 0), [RLEG] = vector_new(1, 0, 0) }, - armor = { + default_character_v2 = { [BODY] = vector_new(0, -3.5, 0), [HEAD] = vector_new(0, 6.75, 0), - [CAPE] = vector_new(0, 6.75, 1.5), - [LARM] = vector_new(2, 6.5, 0), - [RARM] = vector_new(-2, 6.5, 0), + [CAPE] = vector_new(0, 6.75, 1.2), + [LARM] = vector_new(3, 5.75, 0), + [RARM] = vector_new(-3, 5.75, 0), + [LLEG] = vector_new(1, 0, 0), + [RLEG] = vector_new(-1, 0, 0) + }, + default_character_v3 = { + [BODY] = vector_new(0, 6.75, 0), + [HEAD] = vector_new(0, 6.75, 0), + [CAPE] = vector_new(0, 6.75, 1.2), + [LARM] = vector_new(3, 5.75, 0), + [RARM] = vector_new(-3, 5.75, 0), [LLEG] = vector_new(1, 0, 0), [RLEG] = vector_new(-1, 0, 0) } } local bone_rotations = { - normal = { + default_character_v1 = { [BODY] = vector_new(0, 0, 0), [HEAD] = vector_new(0, 0, 0), - [CAPE] = vector_new(0, 0, 180), - [LARM] = vector_new(180, 0, 7.5), - [RARM] = vector_new(180, 0, -7.5), + [CAPE] = vector_new(180, 0, 0), + [LARM] = vector_new(180, 0, 9), + [RARM] = vector_new(180, 0, -9), [LLEG] = vector_new(0, 0, 0), [RLEG] = vector_new(0, 0, 0) }, - armor = { + default_character_v2 = { [BODY] = vector_new(0, 0, 0), [HEAD] = vector_new(0, 0, 0), - [CAPE] = vector_new(180, 0, 180), - [LARM] = vector_new(180, 0, 9), - [RARM] = vector_new(180, 0, -9), + [CAPE] = vector_new(0, 0, 0), + [LARM] = vector_new(0, 0, 0), + [RARM] = vector_new(0, 0, 0), + [LLEG] = vector_new(0, 0, 0), + [RLEG] = vector_new(0, 0, 0) + }, + default_character_v3 = { + [BODY] = vector_new(0, 0, 0), + [HEAD] = vector_new(0, 0, 0), + [CAPE] = vector_new(0, 0, 0), + [LARM] = vector_new(0, 0, 0), + [RARM] = vector_new(0, 0, 0), [LLEG] = vector_new(0, 0, 0), [RLEG] = vector_new(0, 0, 0) } } -local bone_rotation = bone_rotations[model] -local bone_position = bone_positions[model] +local bone_rotation = bone_rotations[player_model_version] +local bone_position = bone_positions[player_model_version] +if not bone_rotation or not bone_position then + error("Internal error: invalid player_model_version: " .. player_model_version) +end + +local bone_rotation_cache = {} local function rotate(player, bone, x, y, z) local default_rotation = bone_rotation[bone] @@ -77,10 +118,21 @@ local function rotate(player, bone, x, y, z) y = (y or 0) + default_rotation.y, z = (z or 0) + default_rotation.z } - player:set_bone_position(bone, bone_position[bone], rotation) + + local player_cache = bone_rotation_cache[player] + local rotation_cache = player_cache[bone] + + if not rotation_cache + or rotation.x ~= rotation_cache.x + or rotation.y ~= rotation_cache.y + or rotation.z ~= rotation_cache.z then + player_cache[bone] = rotation + player:set_bone_position(bone, bone_position[bone], rotation) + end end local step = 0 + local look_pitch = {} local animation_speed = {} @@ -95,11 +147,9 @@ local animations = { end, [WALK] = function(player) - local name = player:get_player_name() + local swing = math_sin(step * 4 * animation_speed[player]) - local swing = math_sin(step * 4 * animation_speed[name]) - - rotate(player, CAPE, swing * 30 + 35) + rotate(player, CAPE, swing * -30 - 35) rotate(player, LARM, swing * -40) rotate(player, RARM, swing * 40) rotate(player, LLEG, swing * 40) @@ -107,29 +157,29 @@ local animations = { end, [MINE] = function(player) - local name = player:get_player_name() + local pitch = look_pitch[player] + local speed = animation_speed[player] - local pitch = look_pitch[name] - local swing = math_sin(step * 4 * animation_speed[name]) - local hand_swing = math_sin(step * 8 * animation_speed[name]) + local swing = math_sin(step * 4 * speed) + local hand_swing = math_sin(step * 8 * speed) - rotate(player, CAPE, swing * 5 + 10) + rotate(player, CAPE, swing * -5 - 10) rotate(player, LARM) - rotate(player, RARM, hand_swing * 20 + 80 + pitch) + rotate(player, RARM, hand_swing * 20 + 80 + pitch, hand_swing * 5 - 3, 10) rotate(player, LLEG) rotate(player, RLEG) end, [WALK_MINE] = function(player) - local name = player:get_player_name() + local pitch = look_pitch[player] + local speed = animation_speed[player] - local pitch = look_pitch[name] - local swing = math_sin(step * 4 * animation_speed[name]) - local hand_swing = math_sin(step * 8 * animation_speed[name]) + local swing = math_sin(step * 4 * speed) + local hand_swing = math_sin(step * 8 * speed) - rotate(player, CAPE, swing * 30 + 35) + rotate(player, CAPE, swing * -30 - 35) rotate(player, LARM, swing * -40) - rotate(player, RARM, hand_swing * 20 + 80 + pitch) + rotate(player, RARM, hand_swing * 20 + 80 + pitch, hand_swing * 5 - 3, 10) rotate(player, LLEG, swing * 40) rotate(player, RLEG, swing * -40) end, @@ -147,81 +197,52 @@ local animations = { end, [LAY] = function(player) + rotate(player, HEAD) + rotate(player, CAPE) + rotate(player, LARM) + rotate(player, RARM) + rotate(player, LLEG) + rotate(player, RLEG) + local body_position = {x = 0, y = -9, z = 0} local body_rotation = {x = 270, y = 0, z = 0} player:set_bone_position(BODY, body_position, body_rotation) - - rotate(player, HEAD) end } local function update_look_pitch(player) - local name = player:get_player_name() - local pitch = math_deg(player:get_look_pitch()) + local pitch = -player:get_look_vertical() * 180 / math_pi - if look_pitch[name] ~= pitch then - look_pitch[name] = pitch + if look_pitch[player] ~= pitch then + look_pitch[player] = pitch end end -local function set_animation_speed(player, bool_sneak) - local name = player:get_player_name() - local speed = bool_sneak and 0.75 or 2 +local function set_animation_speed(player, sneak) + local speed = sneak and 0.75 or 2 - if animation_speed[name] ~= speed then - animation_speed[name] = speed + if animation_speed[player] ~= speed then + animation_speed[player] = speed end end local previous_animation = {} local function set_animation(player, anim) - local name = player:get_player_name() - - if anim == LAY then - if previous_animation[name] ~= anim then - previous_animation[name] = anim - animations[anim](player) - end - return - end - - if anim == WALK or anim == MINE or anim == WALK_MINE then - previous_animation[name] = anim + if (anim == WALK or anim == MINE or anim == WALK_MINE) + or (previous_animation[player] ~= anim) then + previous_animation[player] = anim animations[anim](player) - return - end - - if previous_animation[name] ~= anim then - previous_animation[name] = anim - animations[anim](player) - end -end - -local previous_head = {} - -local function head_rotate(player, y) - local name = player:get_player_name() - - local x = look_pitch[name] - local old_head = previous_head[name] - - if x ~= old_head.x - or y ~= old_head.y then - previous_head[name] = {x = x, y = y} - rotate(player, HEAD, x, y) end end local previous_yaw = {} -local previous_body = {} -local function body_moving(player, bool_sneak, no_rotate_body) - local name = player:get_player_name() - local yaw = player:get_look_yaw() +local function body_moving(player, sneak, no_rotate_body) + local yaw = player:get_look_horizontal() - local player_previous_yaw = previous_yaw[name] + local player_previous_yaw = previous_yaw[player] local index = #player_previous_yaw + 1 player_previous_yaw[index] = yaw @@ -233,83 +254,96 @@ local function body_moving(player, bool_sneak, no_rotate_body) local x, y = 0, 0 if not no_rotate_body then - x = bool_sneak and 5 or 0 - y = math_deg(yaw - next_yaw) + x = sneak and 5 or 0 + y = (yaw - next_yaw) * 180 / math_pi end - local old_body = previous_body[name] + rotate(player, BODY, x, y) + rotate(player, HEAD, look_pitch[player], -y) +end - if x ~= old_body.x - or y ~= old_body.y then - rotate(player, BODY, x, y) - previous_body[name] = {x = x, y = y} +local players = {} +local player_list = {} +local player_count = 0 + +local function update_players() + players = {} + + local position = 0 + + for player, joined in pairs(player_list) do + if joined and player:is_player_connected() then + position = position + 1 + players[position] = player + end end - head_rotate(player, -y) + player_count = position end minetest.register_on_joinplayer(function(player) - local name = player:get_player_name() + bone_rotation_cache[player] = {} + previous_yaw[player] = {} - previous_yaw[name] = {} - previous_head[name] = {x = 0, y = 0} - previous_body[name] = {x = 0, y = 0} + player_list[player] = true + update_players() end) minetest.register_on_leaveplayer(function(player) - local name = player:get_player_name() + bone_rotation_cache[player] = nil - look_pitch[name] = nil - animation_speed[name] = nil + look_pitch[player] = nil + animation_speed[player] = nil - previous_yaw[name] = nil - previous_head[name] = nil - previous_body[name] = nil - previous_animation[name] = nil + previous_yaw[player] = nil + previous_animation[player] = nil + + player_list[player] = nil + update_players() end) minetest.register_globalstep(function(dtime) + if player_count == 0 then return end + step = step + dtime if step >= 3600 then step = 1 end - local players = get_connected_players() - - local player_count = #players - if player_count == 0 then return end - for i = 1, player_count do local player = players[i] local animation = get_animation(player).animation - if animation == "lay" then -- No head rotate - set_animation(player, STAND) -- Reset + if animation == "lay" then set_animation(player, LAY) + + if #previous_yaw[player] ~= 0 then + previous_yaw[player] = {} + end else local controls = player:get_player_control() - local bool_sneak = controls.sneak + local sneak = controls.sneak update_look_pitch(player) if animation == "walk" then - set_animation_speed(player, bool_sneak) + set_animation_speed(player, sneak) set_animation(player, WALK) - body_moving(player, bool_sneak) + body_moving(player, sneak) elseif animation == "mine" then - set_animation_speed(player, bool_sneak) + set_animation_speed(player, sneak) set_animation(player, MINE) - body_moving(player, bool_sneak) + body_moving(player, sneak) elseif animation == "walk_mine" then - set_animation_speed(player, bool_sneak) + set_animation_speed(player, sneak) set_animation(player, WALK_MINE) - body_moving(player, bool_sneak) + body_moving(player, sneak) elseif animation == "sit" then set_animation(player, SIT) - body_moving(player, bool_sneak, true) + body_moving(player, sneak, true) else set_animation(player, STAND) - body_moving(player, bool_sneak) + body_moving(player, sneak) end end end diff --git a/mods/playeranim/license.md b/mods/playeranim/license.md index 5c93f45..539d1d7 100644 --- a/mods/playeranim/license.md +++ b/mods/playeranim/license.md @@ -1,13 +1,23 @@ - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 +Copyright (c) 2013-2014, Diego Martínez +Copyright (c) 2016, Rui +All rights reserved. - Copyright (C) 2004 Sam Hocevar +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/mods/playeranim/readme.md b/mods/playeranim/readme.md index bf95d0e..395d687 100644 --- a/mods/playeranim/readme.md +++ b/mods/playeranim/readme.md @@ -5,4 +5,19 @@ The head only turns up and down relative to the body, except it turns slightly t Works in multiplayer, I tested it on a local server. +Configuration +------------- + +This mod supports 2 versions of the player model: +- The old version: v1 (before nov. 2016) +- The new version: v2 (after nov. 2016) +(see also init.lua) + +As there is no automatic way to determine which version is used, this must be manually configured in `init.lua`. + +Symptoms of having configured the incorrect player model: +- In rest, arms are raised up, and are either detached from the body, or are too close to the body +- Cape (if visible) points upward + + Created by Rui914, this document was written by sloantothebone. diff --git a/mods/playeranim/settingtypes.txt b/mods/playeranim/settingtypes.txt index 19912bb..8444fa8 100644 --- a/mods/playeranim/settingtypes.txt +++ b/mods/playeranim/settingtypes.txt @@ -10,5 +10,8 @@ # . -- default_character_v2; used in: # . -- minetest_game after 25 nov 2016 # . -- 3d_armor after 27 nov 2016 (overrides model from minetest_game) -player_model_version (Version of player model) enum default_character_v2 default_character_v1,default_character_v2 +# . -- default_character_v3; used in: +# . -- minetest_game after 22 jul 2017 +# . -- 3d_armor after ???????????????? (overrides model from minetest_game) +player_model_version (Version of player model) enum default_character_v2 default_character_v1,default_character_v2,default_character_v3