diff --git a/api/api.lua b/api/api.lua index 11ffb8d..c3b289a 100644 --- a/api/api.lua +++ b/api/api.lua @@ -2,6 +2,8 @@ -- API -- --------- +local S = draconis.S + -- Math -- local pi = math.pi @@ -53,7 +55,7 @@ local yaw2dir = minetest.yaw_to_dir -- Settings -- -------------- -local terrain_destruction = minetest.settings:get_bool("dragon_terrain_destruction", true) +local terrain_destruction = minetest.settings:get_bool("dragon_terrain_destruction", false) --------------------- -- Local Utilities -- @@ -302,7 +304,8 @@ local function generate_texture(self, force) self.wing_overlay = "(draconis_wing_fade.png^[multiply:" .. color .. ")" self:memorize("wing_overlay", self.wing_overlay) end - if self:get_props().textures[1]:find("wing_fade") and not force then return end + local props = self:get_props() + if props and props.textures and props.textures[1]:find("wing_fade") and not force then return end textures[1] = textures[1] .. "^" .. self.wing_overlay self:set_texture(1, textures) end @@ -690,7 +693,12 @@ local function damage_objects(self, pos, radius) damage = is_mob and (ent.hp or ent.health or 0) > 0 end if damage then - object:punch(self.object, 1.0, {damage_groups = {fleshy = math.ceil(self.damage * 0.33)}}) + local puncher = self.object + if self.rider + and self.rider:get_look_horizontal() then + puncher = self.rider + end + object:punch(puncher, 1.0, {damage_groups = {fleshy = math.ceil(self.damage * 0.33)}}) --self:punch_target(object, math.ceil(self.damage * 0.2)) if self.name == "draconis:ice_dragon" then freeze_object(object) @@ -1161,13 +1169,15 @@ draconis.dragon_api = { if collision.type == "node" then local n_pos = collision.node_pos if n_pos.y - pos.y >= 1 then - local node = minetest.get_node(n_pos) - if minetest.get_item_group(node.name, "cracky") ~= 1 - and minetest.get_item_group(node.name, "unbreakable") < 1 then - if random(6) < 2 then - minetest.dig_node(n_pos) - else - minetest.remove_node(n_pos) + if not minetest.is_protected(n_pos, "") then + local node = minetest.get_node(n_pos) + if minetest.get_item_group(node.name, "cracky") ~= 1 + and minetest.get_item_group(node.name, "unbreakable") < 1 then + if random(6) < 2 then + minetest.dig_node(n_pos) + else + minetest.remove_node(n_pos) + end end end end @@ -1177,6 +1187,7 @@ draconis.dragon_api = { -- Textures update_emission = function(self, force) local pos = self.object:get_pos() + if not pos then return end local level = minetest.get_node_light(pos, minetest.get_timeofday()) if not level then return end local texture = self:get_props().textures[1] @@ -1203,7 +1214,7 @@ draconis.dragon_api = { if self.name == "draconis:fire_dragon" then dragon_type = "fire" end - local eyes = "draconis_" .. dragon_type .. "_eyes_".. self.eye_color .. ".png" + local eyes = "draconis_" .. dragon_type .. "_eyes_".. self.eye_color .. ".png" if self.growth_scale < 0.25 then eyes = "draconis_" .. dragon_type .. "_eyes_child_".. self.eye_color .. ".png" end @@ -1619,17 +1630,16 @@ minetest.register_chatcommand("tamedragon", { pos.y = pos.y + player:get_properties().eye_height or 1.625 local dest = vec_add(pos, vec_multi(dir, 40)) local object, ent = get_pointed_mob(pos, dest) - if object - and ent.name:match("^draconis:") + if object and ent and ent.memorize then - local ent_pos = object:get_pos() + local ent_pos = ent:get_center_pos() local particle = "creatura_particle_green.png" if not ent.owner then ent.owner = name ent:memorize("owner", ent.owner) - minetest.chat_send_player(name, correct_name(ent.name) .. " has been tamed!") + minetest.chat_send_player(name, S("@1 has been tamed!", correct_name(ent.name))) else - minetest.chat_send_player(name, correct_name(ent.name) .. " is already tamed.") + minetest.chat_send_player(name, S("@1 is already tamed.", correct_name(ent.name))) particle = "creatura_particle_red.png" end minetest.add_particlespawner({ @@ -1655,7 +1665,7 @@ minetest.register_chatcommand("tamedragon", { glow = 16 }) else - minetest.chat_send_player(name, "You must be pointing at a mob.") + minetest.chat_send_player(name, S("You must be pointing at a mob.")) end end }) @@ -1673,12 +1683,12 @@ minetest.register_chatcommand("set_dragon_owner", { pos.y = pos.y + player:get_properties().eye_height or 1.625 local dest = vec_add(pos, vec_multi(dir, 40)) local object, ent = get_pointed_mob(pos, dest) - if object then + if object and ent then local ent_pos = ent:get_center_pos() local particle = "creatura_particle_green.png" ent.owner = param_name ent:memorize("owner", ent.owner) - minetest.chat_send_player(name, correct_name(ent.name) .. " is now owned by " .. param_name) + minetest.chat_send_player(name, S("@1 is now owned by @2", correct_name(ent.name), param_name)) minetest.add_particlespawner({ amount = 16, time = 0.25, @@ -1702,13 +1712,13 @@ minetest.register_chatcommand("set_dragon_owner", { glow = 16 }) else - minetest.chat_send_player(name, "You must be pointing at a mob.") + minetest.chat_send_player(name, S("You must be pointing at a mob.")) end end }) minetest.register_chatcommand("revive_dragon", { - description = "Revives pointed Dragon", + description = S("Revives pointed Dragon"), privs = {draconis_admin = true}, func = function(name) local player = minetest.get_player_by_name(name) @@ -1718,13 +1728,13 @@ minetest.register_chatcommand("revive_dragon", { pos.y = pos.y + player:get_properties().eye_height or 1.625 local dest = vec_add(pos, vec_multi(dir, 40)) local object, ent = get_pointed_mob(pos, dest) - if object + if object and ent and ent.hp <= 0 then local ent_pos = ent:get_center_pos() local particle = "creatura_particle_green.png" ent.hp = ent.max_health ent:memorize("hp", ent.hp) - minetest.chat_send_player(name, correct_name(ent.name) .. " has been revived!") + minetest.chat_send_player(name, S("@1 has been revived!", correct_name(ent.name))) minetest.add_particlespawner({ amount = 16, time = 0.25, @@ -1748,13 +1758,13 @@ minetest.register_chatcommand("revive_dragon", { glow = 16 }) else - minetest.chat_send_player(name, "You must be pointing at a mob.") + minetest.chat_send_player(name, S("You must be pointing at a mob.")) end end }) minetest.register_chatcommand("dragon_attack_blacklist_add", { - description = "Adds player to attack blacklist", + description = S("Adds player to attack blacklist"), params = "", privs = {draconis_admin = true}, func = function(name, params) @@ -1762,16 +1772,16 @@ minetest.register_chatcommand("dragon_attack_blacklist_add", { local param_name = params:match("%S+") if not player or not param_name then return false end if draconis.attack_blacklist[param_name] then - minetest.chat_send_player(name, param_name .. " is already on the Dragon attack blacklist.") + minetest.chat_send_player(name, S("@1 is already on the Dragon attack blacklist.", param_name)) return false end draconis.attack_blacklist[param_name] = true - minetest.chat_send_player(name, param_name .. " has been added to the Dragon attack blacklist.") + minetest.chat_send_player(name, S("@1 has been added to the Dragon attack blacklist.", param_name)) end }) minetest.register_chatcommand("dragon_attack_blacklist_remove", { - description = "Removes player to attack blacklist", + description = S("Removes player to attack blacklist"), params = "", privs = {draconis_admin = true}, func = function(name, params) @@ -1779,11 +1789,11 @@ minetest.register_chatcommand("dragon_attack_blacklist_remove", { local param_name = params:match("%S+") if not player or not param_name then return false end if not draconis.attack_blacklist[param_name] then - minetest.chat_send_player(name, param_name .. " isn't on the Dragon attack blacklist.") + minetest.chat_send_player(name, S("@1 isn't on the Dragon attack blacklist.", param_name)) return false end draconis.attack_blacklist[param_name] = nil - minetest.chat_send_player(name, param_name .. " has been removed from the Dragon attack blacklist.") + minetest.chat_send_player(name, S("@1 has been removed from the Dragon attack blacklist.", param_name)) end }) diff --git a/api/behaviors.lua b/api/behaviors.lua index 0a7764a..36dcd0e 100644 --- a/api/behaviors.lua +++ b/api/behaviors.lua @@ -2,6 +2,8 @@ -- Behaviors -- --------------- +local S = draconis.S + draconis.fire_dragon_targets = {} draconis.ice_dragon_targets = {} @@ -906,7 +908,7 @@ creatura.register_utility("draconis:wyvern_breaking", function(self, player) texture = texture, }) minetest.chat_send_player(player:get_player_name(), - "The Jungle Wyvern ate some " .. def.description .. "! Taming is at " .. taming .. "%") + S("The Jungle Wyvern ate some @1! Taming is at @2%", def.description, taming)) else draconis.detach_player(_self, player) return true @@ -914,7 +916,7 @@ creatura.register_utility("draconis:wyvern_breaking", function(self, player) feed_timer = 10 end if taming >= 100 then - minetest.chat_send_player(player:get_player_name(), "The Jungle Wyvern has been tamed!") + minetest.chat_send_player(player:get_player_name(), S("The Jungle Wyvern has been tamed!")) _self.owner = _self:memorize("owner", player:get_player_name()) return true end diff --git a/api/forms.lua b/api/forms.lua index d020825..90edfb6 100644 --- a/api/forms.lua +++ b/api/forms.lua @@ -60,8 +60,9 @@ local function get_dragon_formspec(self) local breath = get_perc(self.attack_stamina, 100) -- Visuals local frame_range = self.animations["stand"].range - local frame_loop = frame_range.x .. "," .. frame_range.y - local texture = self:get_props().textures[1] + local frame_loop = frame_range.x .. "," .. frame_range.y + local props = self:get_props() + local texture = (props and props.textures and props.textures[1]) or "blank.png" local health_ind = "draconis_forms_health_bg.png^[lowpart:" .. health .. ":draconis_forms_health_fg.png" local hunger_ind = "draconis_forms_hunger_bg.png^[lowpart:" .. hunger .. ":draconis_forms_hunger_fg.png" local stamina_ind = "draconis_forms_stamina_bg.png^[lowpart:" .. stamina .. ":draconis_forms_stamina_fg.png" @@ -106,9 +107,10 @@ draconis.dragon_api.show_formspec = function(self, player) end local function get_customize_formspec(self) - local texture = self.object:get_properties().textures[1] + local props = self.object:get_properties() + local texture = (props and props.textures and props.textures[1]) or "blank.png" local frame_range = self.animations["stand"].range - local frame_loop = frame_range.x .. "," .. frame_range.y + local frame_loop = frame_range.x .. "," .. frame_range.y local form if self.name == "draconis:fire_dragon" then form = { @@ -148,7 +150,7 @@ local function get_wyvern_formspec(self) local stamina = get_perc(self.flight_stamina, 900) -- Visuals local frame_range = self.animations["stand"].range - local frame_loop = frame_range.x .. "," .. frame_range.y + local frame_loop = frame_range.x .. "," .. frame_range.y local props = self:get_props() local texture = (props and props.textures and props.textures[1]) or "blank.png" local health_ind = "draconis_forms_health_bg.png^[lowpart:" .. health .. ":draconis_forms_health_fg.png" @@ -360,4 +362,4 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) form_objref[name] = nil end end -end) \ No newline at end of file +end) diff --git a/api/libri.lua b/api/libri.lua index 49746d0..3ee11be 100644 --- a/api/libri.lua +++ b/api/libri.lua @@ -2,6 +2,8 @@ -- Libri -- ----------- +local S = draconis.S + local color = minetest.colorize local libri_bg = { @@ -409,14 +411,14 @@ end --------------- minetest.register_craftitem("draconis:libri_draconis", { - description = "Libri Draconis", + description = S("Libri Draconis"), inventory_image = "draconis_libri_draconis.png", stack_max = 1, on_place = function(itemstack, player) local meta = itemstack:get_meta() local desc = meta:get_string("description") if desc:find("Bestiary") then - meta:set_string("description", "Libri Draconis") + meta:set_string("description", S("Libri Draconis")) meta:set_string("pages", nil) end local name = player:get_player_name() @@ -426,7 +428,7 @@ minetest.register_craftitem("draconis:libri_draconis", { local meta = itemstack:get_meta() local desc = meta:get_string("description") if desc:find("Bestiary") then - meta:set_string("description", "Libri Draconis") + meta:set_string("description", S("Libri Draconis")) meta:set_string("pages", nil) end local name = player:get_player_name() diff --git a/api/mount.lua b/api/mount.lua index 4fe49b8..04617d3 100644 --- a/api/mount.lua +++ b/api/mount.lua @@ -2,6 +2,8 @@ -- Mount API -- --------------- +local S = draconis.S + draconis.mounted_player_data = {} local abs = math.abs @@ -270,7 +272,7 @@ function draconis.detach_player(self, player) return end local player_name = player:get_player_name() - local data = draconis.mounted_player_data[player_name] + local data = draconis.mounted_player_data[player_name] or {} -- Attach Player player:set_detach() -- Set HUD @@ -368,11 +370,11 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if formname == "draconis:dragon_mount_settings" then if fields.btn_view_point then draconis.aux_key_setting[name] = "pov" - minetest.chat_send_player(name, "Sprint key now changes point of view") + minetest.chat_send_player(name, S("Sprint key now changes point of view")) end if fields.btn_pitch_toggle then draconis.aux_key_setting[name] = "vert_method" - minetest.chat_send_player(name, "Sprint key now changes vertical movement method") + minetest.chat_send_player(name, S("Sprint key now changes vertical movement method")) end end end) @@ -386,9 +388,9 @@ end) minetest.register_on_dieplayer(function(player) local name = player:get_player_name() - if name - and draconis.mounted_player_data[name] then - draconis.detach_player(draconis.mounted_player_data[name].dragon, player) + local data = draconis.mounted_player_data[name] + if data and data.dragon then + draconis.detach_player(data.dragon, player) end end) @@ -411,10 +413,12 @@ local function update_hud(self, player) local breath = self.attack_stamina / 100 * 100 local hud_data = draconis.mounted_player_data[name].huds -- Update Elements - player:hud_remove(hud_data["health"]) - player:hud_remove(hud_data["hunger"]) - player:hud_remove(hud_data["stamina"]) - player:hud_remove(hud_data["breath"]) + if hud_data then + player:hud_remove(hud_data["health"]) + player:hud_remove(hud_data["hunger"]) + player:hud_remove(hud_data["stamina"]) + player:hud_remove(hud_data["breath"]) + end draconis.mounted_player_data[name].huds = { ["health"] = set_hud(player, { text = "draconis_forms_health_bg.png^[lowpart:" .. health .. ":draconis_forms_health_fg.png", diff --git a/craftitems.lua b/craftitems.lua index bf693c5..a22485d 100644 --- a/craftitems.lua +++ b/craftitems.lua @@ -37,8 +37,6 @@ local function correct_name(str) end local function infotext(str, format) - str = S(str) - if format then return minetest.colorize("#a9a9a9", correct_name(str)) end @@ -48,17 +46,17 @@ end local function get_binder_desc(self) local item_name = S("Dragonbinder") - local info = item_name .. "\n" .. minetest.colorize("#a9a9a9", correct_name(self.name)) - if self.nametag == "" then - info = info.."\n" .. infotext("Nameless Dragon") + local info = item_name .. "\n" .. correct_name(self.name) + if self.nametag ~= "" then + info = info.."\n" .. infotext(self.nametag) else - info = info.."\n" .. infotext(self.nametag or "Nameless Dragon") + info = info.."\n" .. infotext(S("Nameless Dragon")) end if self.age then info = info.."\n" .. infotext(self.age) end if self.color then - info = info.."\n" .. infotext(self.color, true) + info = info.."\n" .. infotext(S(self.color), true) end return info end @@ -77,7 +75,7 @@ table.insert(dragon_drops, "draconis:dragon_bone") for color, hex in pairs(draconis.colors_fire) do minetest.register_craftitem("draconis:scales_fire_dragon_" .. color, { - description = S("Fire Dragon Scales") .. "\n" .. infotext(color, true), + description = S("Fire Dragon Scales") .. "\n" .. infotext(S(color), true), inventory_image = "draconis_dragon_scales.png^[multiply:#" .. hex, groups = {dragon_scales = 1} }) @@ -86,7 +84,7 @@ end for color, hex in pairs(draconis.colors_ice) do minetest.register_craftitem("draconis:scales_ice_dragon_" .. color, { - description = S("Ice Dragon Scales") .. "\n" .. infotext(color, true), + description = S("Ice Dragon Scales") .. "\n" .. infotext(S(color), true), inventory_image = "draconis_dragon_scales.png^[multiply:#" .. hex, groups = {dragon_scales = 1} }) @@ -132,13 +130,14 @@ local dragon_eggs = {} for color in pairs(draconis.colors_fire) do minetest.register_node("draconis:egg_fire_" .. color, { - description = S("Fire Dragon Egg") .. "\n" .. infotext(color, true), + description = S("Fire Dragon Egg") .. "\n" .. infotext(S(color), true), drawtype = "mesh", paramtype = "light", sunlight_propagates = true, mesh = "draconis_egg.obj", inventory_image = "draconis_fire_dragon_egg_" .. color .. ".png", tiles = {"draconis_fire_dragon_egg_mesh_" .. color .. ".png"}, + use_texture_alpha = "clip", collision_box = { type = "fixed", fixed = { @@ -278,13 +277,14 @@ end for color in pairs(draconis.colors_ice) do minetest.register_node("draconis:egg_ice_" .. color, { - description = S("Ice Dragon Egg") .. "\n" .. infotext(color, true), + description = S("Ice Dragon Egg") .. "\n" .. infotext(S(color), true), drawtype = "mesh", paramtype = "light", sunlight_propagates = true, mesh = "draconis_egg.obj", inventory_image = "draconis_ice_dragon_egg_" .. color .. ".png", tiles = {"draconis_ice_dragon_egg_mesh_" .. color .. ".png"}, + use_texture_alpha = "clip", collision_box = { type = "fixed", fixed = { @@ -444,18 +444,20 @@ local function capture(player, ent) meta:set_string("mob", ent.name) meta:set_string("dragon_id", ent.dragon_id) meta:set_string("staticdata", ent:get_staticdata()) - meta:set_string("nametag", ent.nametag or "Nameless Dragon") + meta:set_string("nametag", ent.nametag or S("Nameless Dragon")) meta:set_string("description", get_binder_desc(ent)) if stored_aging > 0 then meta:set_int("timestamp", os.time()) end player:set_wielded_item(stack) - draconis.dragons[ent.dragon_id].stored_in_item = true + if draconis.dragons[ent.dragon_id] then + draconis.dragons[ent.dragon_id].stored_in_item = true + end ent.object:remove() draconis.force_storage_save = true return stack else - minetest.chat_send_player(player:get_player_name(), "This Dragonbinder already contains a Dragon") + minetest.chat_send_player(player:get_player_name(), S("This Dragonbinder already contains a Dragon")) return false end end @@ -481,10 +483,10 @@ local function dragonbinder_use(itemstack, player, pointed_thing) if player:get_player_control().sneak then if stored_aging < 1 then meta:set_int("stored_aging", 1) - minetest.chat_send_player(player:get_player_name(), "Your Dragon will age while stored.") + minetest.chat_send_player(player:get_player_name(), S("Your Dragon will age while stored.")) else meta:set_int("stored_aging", 0) - minetest.chat_send_player(player:get_player_name(), "Your Dragon will not age while stored.") + minetest.chat_send_player(player:get_player_name(), S("Your Dragon will not age while stored.")) end player:set_wielded_item(itemstack) return itemstack @@ -494,7 +496,7 @@ local function dragonbinder_use(itemstack, player, pointed_thing) meta:set_string("mob", nil) meta:set_string("dragon_id", nil) meta:set_string("staticdata", nil) - meta:set_string("description", "Dragonbinder") + meta:set_string("description", S("Dragonbinder")) player:set_wielded_item(itemstack) return itemstack end @@ -516,7 +518,7 @@ local function dragonbinder_use(itemstack, player, pointed_thing) else ent.object:set_pos(player:get_pos()) end - minetest.chat_send_player(player:get_player_name(), "Teleporting Dragon") + minetest.chat_send_player(player:get_player_name(), S("Teleporting Dragon")) else -- Link Dragon to Horn local ent = pointed_thing.ref and pointed_thing.ref:get_luaentity() if ent @@ -544,7 +546,7 @@ local function dragonbinder_place(itemstack, player, pointed_thing) pos.y = pos.y + 3 local mob = meta:get_string("mob") local staticdata = meta:get_string("staticdata") - local nametag = meta:get_string("nametag") or "Nameless Dragon" + local nametag = meta:get_string("nametag") or S("Nameless Dragon") local id = meta:get_string("dragon_id") if not draconis.dragons[id] then -- Clear data if linked Dragon is dead meta:set_string("mob", nil) @@ -567,13 +569,13 @@ local function dragonbinder_place(itemstack, player, pointed_thing) draconis.dragons[id].stored_in_item = false end draconis.force_storage_save = true - local desc = "Dragonbinder\n" .. minetest.colorize("#a9a9a9", correct_name(mob)) + local desc = S("Dragonbinder") .. "\n" .. correct_name(mob) if nametag ~= "" then - desc = desc .. "\n"..infotext(nametag) + desc = desc .. "\n" .. infotext(nametag) end meta:set_string("staticdata", nil) meta:set_string("description", desc) - if meta:get_int("timestamp") > 0 then + if ent and meta:get_int("timestamp") > 0 then local time = meta:get_int("timestamp") local diff = os.time() - time ent:get_luaentity().time_in_horn = diff @@ -879,7 +881,8 @@ local function draconic_step(itemstack, player, pointed_thing) for k, v in pairs(toolcaps.groupcaps) do for i = 1, 3 do local def_time = v.times[i] - local current_time = round(current_caps.groupcaps[k].times[i], 0.1) + local groupcap = current_caps.groupcaps and current_caps.groupcaps[k] + local current_time = round(groupcap.times[i] or 1, 0.1) local time_diff = math.abs((def_time + speed_offset) - current_time) if time_diff > 0.1 then update = true @@ -1449,13 +1452,13 @@ minetest.register_on_craft(function(itemstack, player, old_craft_grid) local name = itemstack:get_name() local desc = minetest.registered_items[name].description meta:set_string("dragon_id", last_id) - local dragon_name = "Unnamed Dragon" + local dragon_name = S("Unnamed Dragon") if draconis.dragons[last_id] and draconis.dragons[last_id].name then dragon_name = draconis.dragons[last_id].name end - meta:set_string("description", desc .. "\n(Forged by " .. dragon_name .. ")") + meta:set_string("description", desc .. "\n" .. S("(Forged by @1)", dragon_name)) end return itemstack end -end) \ No newline at end of file +end) diff --git a/init.lua b/init.lua index 21d962d..d9b7d09 100644 --- a/init.lua +++ b/init.lua @@ -26,7 +26,7 @@ draconis.sounds = { dirt = {} } -if minetest.get_modpath("default") then +if minetest.get_modpath("default") and default then if default.node_sound_wood_defaults then draconis.sounds.wood = default.node_sound_wood_defaults() end @@ -113,7 +113,7 @@ dofile(path.."/nodes.lua") dofile(path.."/craftitems.lua") dofile(path.."/api/libri.lua") -if minetest.get_modpath("3d_armor") then +if minetest.get_modpath("3d_armor") and armor then dofile(path.."/armor.lua") end @@ -159,13 +159,13 @@ end -- Aliases -- -minetest.register_alias("draconis:dracolily_fire", "air") -minetest.register_alias("draconis:dracolily_ice", "air") +--minetest.register_alias("draconis:dracolily_fire", "air") +--minetest.register_alias("draconis:dracolily_ice", "air") -minetest.register_alias("draconis:blood_fire_dragon", "") -minetest.register_alias("draconis:blood_ice_dragon", "") +--minetest.register_alias("draconis:blood_fire_dragon", "") +--minetest.register_alias("draconis:blood_ice_dragon", "") -minetest.register_alias("draconis:manuscript", "") +--minetest.register_alias("draconis:manuscript", "") for color in pairs(draconis.colors_ice) do minetest.register_alias("draconis:egg_ice_dragon_" .. color, "draconis:egg_ice_" .. color) diff --git a/locale/draconis.ru.tr b/locale/draconis.ru.tr new file mode 100644 index 0000000..2b9723a --- /dev/null +++ b/locale/draconis.ru.tr @@ -0,0 +1,88 @@ +# textdomain: draconis +Fire-forged Draconic Steel Helmet=Огнекованый Драконий Стальной Шлем +Fire-forged Draconic Steel Chestplate=Огнекованая Дракония Стальная Кираса +Fire-forged Draconic Steel Leggings=Огнекованые Драконий Стальные Поножи +Fire-forged Draconic Steel Boots=Огнекованые Драконий Стальные Сапоги +Ice-forged Draconic Steel Helmet=Ледокованый Драконий Стальной Шлем +Ice-forged Draconic Steel Chestplate=Ледокованая Дракония Стальная Кираса +Ice-forged Draconic Steel Leggings=Ледокованые Драконий Стальные Поножи +Ice-forged Draconic Steel Boots=Ледокованые Драконий Стальные Сапоги + +Dragonbinder=Драконовод +Nameless Dragon=Безымянный Дракон +Dragon Bone=Кость Дракона +Fire Dragon Scales=Чешуя Огненного Дракона +Ice Dragon Scales=Чешуя Ледяного Дракона +Fire-Forged Draconic Steel Ingot=Огнекованый Драконий Стальной Слиток +Ice-Forged Draconic Steel Ingot=Ледокованый Драконий Стальной Слиток +Fire Dragon Egg=Яйцо Огненного Дракона +Ice Dragon Egg=Яйцо Ледяного Дракона +This Dragonbinder already contains a Dragon=Этот Драконовод уже содержит Дракона +Your Dragon will age while stored.=Ваш Дракон будет стареть, находясь в хранилище. +Your Dragon will not age while stored.=Ваш Дракон не будет стареть, находясь в хранилище. +Teleporting Dragon=Телепортация Дракона +Dragonstone Crucible=Драконитовый Тигель +Dragonstone Crucible (Full)=Драконитовый Тигель (Полный) +Dragonhide Pickaxe=Драконья Кирка +Dragonhide Shovel=Драконья Лопата +Dragonhide Axe=Драконий Топор +Dragonhide Sword=Драконий Меч +Dragonhide Pickaxe=Драконья Кирка +Dragonhide Shovel=Драконья Лопата +Ice-Forged Draconic Steel Pickaxe=Ледокованая Дракония Стальная Кирка +Fire-Forged Draconic Steel Pickaxe=Огнекованая Дракония Стальная Кирка +Ice-Forged Draconic Steel Shovel=Ледокованая Дракония Стальная Лопата +Fire-Forged Draconic Steel Shovel=Огнекованая Дракония Стальная Лопата +Ice-Forged Draconic Steel Axe=Ледокованый Драконий Стальной Топор +Fire-Forged Draconic Steel Axe=Огнекованый Драконий Стальной Топор +Ice-Forged Draconic Steel Sword=Ледокованый Драконий Стальной Меч +Fire-Forged Draconic Steel Sword=Огнекованый Драконий Стальной Меч +Unnamed Dragon=Безымянный Дракон +(Forged by @1)=(Выковано @1) + +Scorched Log=Обугленное Бревно +Frozen Log=Замерзшее Бревно +Scorched Stone=Обугленный Камень +Frozen Stone=Замерзший Камень +Scorched Soil=Обугленная Почва +Frozen Soil=Замерзшая Почва +Scorched Wood Planks=Обугленные Деревянные Доски +Frozen Wood Planks=Замерзшие Деревянные Доски +Fire Dragonstone Bricks=Огненные Драконитовые Кирпичи +Fire Dragonstone Block=Огненный Драконитовый Блок +Ice Dragonstone Bricks=Ледяные Драконитовые Кирпичи +Ice Dragonstone Block=Ледяной Драконитовый Блок +Scorched Stone Brick=Обугленный Каменный Кирпич +Frozen Stone Brick=Замерзший Каменный Кирпич +Fire Dragonhide Block=Огненный Драконий Блок +Ice Dragonhide Block=Ледяной Драконий Блок +Scorched Bone Pile=Обугленная Костяная Куча +Frozen Bone Pile=Замерзшая Костяная Куча +Fire Draconic Steel Forge=Огненная Драконий Стальная Кузница +Ice Draconic Steel Forge=Ледяная Драконий Стальная Кузница + +@1 has been tamed!=@1 был приручен! +@1 is already tamed.=@1 уже приручен. +You must be pointing at a mob.=Вы должны указывать на моба. +@1 is now owned by @2=@1 теперь принадлежит @2 +You must be pointing at a mob.=Вы должны указывать на моба. +Revives pointed Dragon=Оживляет указанного Дракона +@1 has been revived!=@1 был оживлён! +You must be pointing at a mob.=Вы должны указывать на моба. +Adds player to attack blacklist=Добавляет игрока в чёрный список атак +@1 is already on the Dragon attack blacklist.=@1 уже в чёрном списке атак Дракона. +@1 has been added to the Dragon attack blacklist.=@1 был добавлен в чёрный список атак Дракона. +Removes player to attack blacklist=Удаляет игрока из чёрного списка атак +@1 isn't on the Dragon attack blacklist.=@1 не находится в чёрном списке атак Дракона. +@1 has been removed from the Dragon attack blacklist.=@1 был удалён из чёрного списка атак Дракона. + +The Jungle Wyvern ate some @1! Taming is at @2%=Джунглевая Виверна съела немного @1! Уровень приручения @2% +The Jungle Wyvern has been tamed!=Джунглевая Виверна приручена! +Sprint key now changes point of view=Клавиша спринта теперь меняет точку обзора +Sprint key now changes vertical movement method=Клавиша спринта теперь меняет метод вертикального перемещения + +Creative Fire Dragon Egg=Креативное Яйцо Огненного Дракона +Creative Ice Dragon Egg=Креативное Яйцо Ледяного Дракона +Creative Jungle Wyvern Egg=Креативное Яйцо Джунглевой Виверны + +Libri Draconis=Книга Дракона diff --git a/mapgen.lua b/mapgen.lua index cfc381f..6eafef2 100644 --- a/mapgen.lua +++ b/mapgen.lua @@ -638,4 +638,4 @@ minetest.register_on_generated(function(minp, maxp) vm:write_to_map() end end -end) \ No newline at end of file +end) diff --git a/mobs/fire_dragon.lua b/mobs/fire_dragon.lua index 166746c..2ec58b2 100644 --- a/mobs/fire_dragon.lua +++ b/mobs/fire_dragon.lua @@ -2,6 +2,8 @@ -- Fire Dragon -- ----------------- +local S = draconis.S + local creative = minetest.settings:get_bool("creative_mode") local function is_value_in_table(tbl, val) @@ -263,7 +265,7 @@ creatura.register_mob("draconis:fire_dragon", { }) creatura.register_spawn_item("draconis:fire_dragon", { - description = "Creative Fire Dragon Egg", + description = S("Creative Fire Dragon Egg"), inventory_image = "draconis_creative_egg_fire.png" }) @@ -278,4 +280,4 @@ spawn_egg_def.on_place = function(itemstack, _, pointed_thing) end end -minetest.register_craftitem("draconis:spawn_fire_dragon", spawn_egg_def) \ No newline at end of file +minetest.register_craftitem("draconis:spawn_fire_dragon", spawn_egg_def) diff --git a/mobs/ice_dragon.lua b/mobs/ice_dragon.lua index 0e2e317..53c494f 100644 --- a/mobs/ice_dragon.lua +++ b/mobs/ice_dragon.lua @@ -2,6 +2,8 @@ -- Ice Dragon -- ---------------- +local S = draconis.S + local creative = minetest.settings:get_bool("creative_mode") local function is_value_in_table(tbl, val) @@ -267,7 +269,7 @@ creatura.register_mob("draconis:ice_dragon", { }) creatura.register_spawn_item("draconis:ice_dragon", { - description = "Creative Ice Dragon Egg", + description = S("Creative Ice Dragon Egg"), inventory_image = "draconis_creative_egg_ice.png" }) @@ -282,4 +284,4 @@ spawn_egg_def.on_place = function(itemstack, _, pointed_thing) end end -minetest.register_craftitem("draconis:spawn_ice_dragon", spawn_egg_def) \ No newline at end of file +minetest.register_craftitem("draconis:spawn_ice_dragon", spawn_egg_def) diff --git a/mobs/jungle_wyvern.lua b/mobs/jungle_wyvern.lua index 33b18ea..b33a226 100644 --- a/mobs/jungle_wyvern.lua +++ b/mobs/jungle_wyvern.lua @@ -2,6 +2,8 @@ -- Fire Dragon -- ----------------- +local S = draconis.S + local colors = {"amber", "aquamarine", "jade", "ruby"} creatura.register_mob("draconis:jungle_wyvern", { @@ -193,7 +195,7 @@ creatura.register_mob("draconis:jungle_wyvern", { }) creatura.register_spawn_item("draconis:jungle_wyvern", { - description = "Creative Jungle Wyvern Egg", + description = S("Creative Jungle Wyvern Egg"), inventory_image = "draconis_creative_egg_jungle.png" }) @@ -217,4 +219,4 @@ creatura.register_mob_spawn("draconis:jungle_wyvern", { max_group = 2, biomes = biomes, nodes = {"group:leaves"} -}) \ No newline at end of file +}) diff --git a/nodes.lua b/nodes.lua index 4222949..466a92a 100644 --- a/nodes.lua +++ b/nodes.lua @@ -41,8 +41,6 @@ end local stair_queue = {} local function register_node(name, def, register_stair) - def.description = S(def.description) - minetest.register_node(name, def) if register_stair then table.insert(stair_queue, name) @@ -52,7 +50,7 @@ end -- Logs -- register_node("draconis:log_scorched", { - description = "Scorched Log", + description = S("Scorched Log"), tiles = {"draconis_log_scorched_top.png", "draconis_log_scorched_top.png", "draconis_log_scorched.png"}, paramtype2 = "facedir", is_ground_content = false, @@ -62,7 +60,7 @@ register_node("draconis:log_scorched", { }, true) register_node("draconis:log_frozen", { - description = "Frozen Log", + description = S("Frozen Log"), tiles = {"draconis_log_frozen_top.png", "draconis_log_frozen_top.png", "draconis_log_frozen.png"}, paramtype2 = "facedir", is_ground_content = false, @@ -74,7 +72,7 @@ register_node("draconis:log_frozen", { -- Stone -- register_node("draconis:stone_scorched", { - description = "Scorched Stone", + description = S("Scorched Stone"), tiles = {"draconis_stone_scorched.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -84,7 +82,7 @@ register_node("draconis:stone_scorched", { }, true) register_node("draconis:stone_frozen", { - description = "Frozen Stone", + description = S("Frozen Stone"), tiles = {"draconis_stone_frozen.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -96,14 +94,14 @@ register_node("draconis:stone_frozen", { -- Soil -- register_node("draconis:soil_scorched", { - description = "Scorched Soil", + description = S("Scorched Soil"), tiles = {"draconis_soil_scorched.png"}, groups = {crumbly = 3, soil = 1}, sounds = draconis.sounds.dirt }) register_node("draconis:soil_frozen", { - description = "Frozen Soil", + description = S("Frozen Soil"), tiles = {"draconis_soil_frozen.png"}, groups = {crumbly = 3, soil = 1}, sounds = draconis.sounds.dirt @@ -112,7 +110,7 @@ register_node("draconis:soil_frozen", { -- Wood Planks register_node("draconis:wood_planks_scorched", { - description = "Scorched Wood Planks", + description = S("Scorched Wood Planks"), tiles = {"draconis_wood_planks_scorched.png"}, is_ground_content = false, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, @@ -120,7 +118,7 @@ register_node("draconis:wood_planks_scorched", { }, true) register_node("draconis:wood_planks_frozen", { - description = "Frozen Wood Planks", + description = S("Frozen Wood Planks"), tiles = {"draconis_wood_planks_frozen.png"}, is_ground_content = false, groups = {tree = 1, choppy = 2, oddly_breakable_by_hand = 1, flammable = 2}, @@ -130,7 +128,7 @@ register_node("draconis:wood_planks_frozen", { -- Stone Bricks -- register_node("draconis:dragonstone_bricks_fire", { - description = "Fire Dragonstone Bricks", + description = S("Fire Dragonstone Bricks"), tiles = {"draconis_dragonstone_bricks_fire.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -140,7 +138,7 @@ register_node("draconis:dragonstone_bricks_fire", { }, true) register_node("draconis:dragonstone_block_fire", { - description = "Fire Dragonstone Block", + description = S("Fire Dragonstone Block"), tiles = {"draconis_dragonstone_block_fire.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -150,7 +148,7 @@ register_node("draconis:dragonstone_block_fire", { }, true) register_node("draconis:dragonstone_bricks_ice", { - description = "Ice Dragonstone Bricks", + description = S("Ice Dragonstone Bricks"), tiles = {"draconis_dragonstone_bricks_ice.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -160,7 +158,7 @@ register_node("draconis:dragonstone_bricks_ice", { }, true) register_node("draconis:dragonstone_block_ice", { - description = "Ice Dragonstone Block", + description = S("Ice Dragonstone Block"), tiles = {"draconis_dragonstone_block_ice.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -170,7 +168,7 @@ register_node("draconis:dragonstone_block_ice", { }, true) register_node("draconis:stone_bricks_scorched", { - description = "Scorched Stone Brick", + description = S("Scorched Stone Brick"), tiles = {"draconis_stone_brick_scorched.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -180,7 +178,7 @@ register_node("draconis:stone_bricks_scorched", { }, true) register_node("draconis:stone_bricks_frozen", { - description = "Frozen Stone Brick", + description = S("Frozen Stone Brick"), tiles = {"draconis_stone_brick_frozen.png"}, paramtype2 = "facedir", place_param2 = 0, @@ -195,7 +193,7 @@ register_node("draconis:stone_bricks_frozen", { for color in pairs(draconis.colors_fire) do register_node("draconis:dragonhide_block_fire_" .. color, { - description = "Fire Dragonhide Block \n" .. infotext(color, true), + description = S("Fire Dragonhide Block") .. "\n" .. infotext(S(color), true), tiles = { "draconis_dragonhide_block_" .. color .. "_top.png", "draconis_dragonhide_block_" .. color .. "_top.png", @@ -211,7 +209,7 @@ end for color in pairs(draconis.colors_ice) do register_node("draconis:dragonhide_block_ice_" .. color, { - description = "Ice Dragonhide Block \n" .. infotext(color, true), + description = S("Ice Dragonhide Block") .. "\n" .. infotext(S(color), true), tiles = { "draconis_dragonhide_block_" .. color .. "_top.png", "draconis_dragonhide_block_" .. color .. "_top.png", @@ -228,7 +226,7 @@ end -- Bone Pile -- register_node("draconis:bone_pile_scorched", { - description = "Scorched Bone Pile", + description = S("Scorched Bone Pile"), tiles = { "draconis_bone_pile_scorched.png", }, @@ -240,7 +238,7 @@ register_node("draconis:bone_pile_scorched", { }) register_node("draconis:bone_pile_frozen", { - description = "Frozen Bone Pile", + description = S("Frozen Bone Pile"), tiles = { "draconis_bone_pile_frozen.png", }, @@ -680,7 +678,7 @@ minetest.register_node("draconis:draconic_forge_fire", { on_dig = function(pos, node, player) local structure = get_forge_structure(pos) if minetest.node_dig(pos, node, player) then - if player:get_player_control().sneak + if player and player:get_player_control().sneak and structure then local inv = player:get_inventory() local bricks = ItemStack(forge_shell[node.name] .. " " .. #shell_v) @@ -902,7 +900,7 @@ minetest.register_node("draconis:draconic_forge_ice", { on_dig = function(pos, node, player) local structure = get_forge_structure(pos) if minetest.node_dig(pos, node, player) then - if player:get_player_control().sneak + if player and player:get_player_control().sneak and structure then local inv = player:get_inventory() local bricks = ItemStack(forge_shell[node.name] .. " " .. #shell_v) @@ -1045,6 +1043,8 @@ minetest.register_node("draconis:draconic_forge_ice", { local register_stairs = minetest.settings:get_bool("register_stairs", true) if minetest.get_modpath("stairs") +and stairs +and stairs.register_stair_and_slab and register_stairs then for i = 1, #stair_queue do local name = stair_queue[i] diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..fe75f3d Binary files /dev/null and b/screenshot.png differ diff --git a/settingtypes.txt b/settingtypes.txt index e555835..6008d76 100644 --- a/settingtypes.txt +++ b/settingtypes.txt @@ -20,7 +20,7 @@ cavern_spawning (Ice and Fire Cavern Spawning) bool false cavern_spawn_rate (I/F Cavern Spawn Rate) int 32 # If true, Dragon breath will scorch/freeze nodes and Dragons will attempt to break blocks when stuck. -dragon_terrain_destruction (Terrain Destruction) bool true +dragon_terrain_destruction (Terrain Destruction) bool false # Disable if stairs mod gives a crash (Exile and other games are known to cause this) register_stairs (Register Stairs) bool true