mirror of
https://github.com/FaceDeer/dfcaverns.git
synced 2025-07-14 22:40:27 +02:00
add old bones to the underworld
This commit is contained in:
3
bones_loot/depends.txt
Normal file
3
bones_loot/depends.txt
Normal file
@ -0,0 +1,3 @@
|
||||
bones
|
||||
dungeon_loot?
|
||||
intllib?
|
82
bones_loot/init.lua
Normal file
82
bones_loot/init.lua
Normal file
@ -0,0 +1,82 @@
|
||||
-- internationalization boilerplate
|
||||
local MP = minetest.get_modpath(minetest.get_current_modname())
|
||||
local S, NS = dofile(MP.."/intllib.lua")
|
||||
|
||||
bones_loot = {}
|
||||
|
||||
local dungeon_loot_path = minetest.get_modpath("dungeon_loot")
|
||||
if dungeon_loot_path then
|
||||
local shuffle = function(tbl)
|
||||
for i = #tbl, 2, -1 do
|
||||
local rand = math.random(i)
|
||||
tbl[i], tbl[rand] = tbl[rand], tbl[i]
|
||||
end
|
||||
return tbl
|
||||
end
|
||||
|
||||
bones_loot.get_loot = function(pos, loot_type, max_stacks)
|
||||
|
||||
local item_list = {}
|
||||
local pos_y = pos.y
|
||||
for _, loot in ipairs(dungeon_loot.registered_loot) do
|
||||
if loot.y == nil or (pos_y >= loot.y[1] and pos_y <= loot.y[2]) then
|
||||
if loot.types == nil or table.indexof(loot.types, loot_type) ~= -1 then
|
||||
table.insert(item_list, loot)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
shuffle(item_list)
|
||||
|
||||
-- apply chances / randomized amounts and collect resulting items
|
||||
local items = {}
|
||||
for _, loot in ipairs(item_list) do
|
||||
if math.random() <= loot.chance then
|
||||
local itemdef = minetest.registered_items[loot.name]
|
||||
|
||||
local amount = 1
|
||||
if loot.count ~= nil then
|
||||
amount = math.random(loot.count[1], loot.count[2])
|
||||
end
|
||||
|
||||
if itemdef.tool_capabilities then
|
||||
for n = 1, amount do
|
||||
local wear = math.random(0.20 * 65535, 0.75 * 65535) -- 20% to 75% wear
|
||||
table.insert(items, ItemStack({name = loot.name, wear = wear}))
|
||||
max_stacks = max_stacks - 1
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
else
|
||||
local stack_max = itemdef.stack_max
|
||||
while amount > 0 do
|
||||
table.insert(items, ItemStack({name = loot.name, count = math.min(stack_max, amount)}))
|
||||
amount = amount - stack_max
|
||||
max_stacks = max_stacks - 1
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
end
|
||||
end
|
||||
if max_stacks <= 0 then break end
|
||||
end
|
||||
return items
|
||||
end
|
||||
end
|
||||
|
||||
bones_loot.place_bones = function(pos, loot_type, max_stacks, infotext)
|
||||
minetest.set_node(pos, {name="bones:bones", param2 = math.random(1,4)-1})
|
||||
local meta = minetest.get_meta(pos)
|
||||
if infotext == nil then
|
||||
infotext = S("Someone's old bones")
|
||||
end
|
||||
meta:set_string("infotext", infotext)
|
||||
|
||||
if bones_loot.get_loot and loot_type and max_stacks then
|
||||
local loot = bones_loot.get_loot(pos, loot_type, max_stacks)
|
||||
local inv = meta:get_inventory()
|
||||
inv:set_size("main", 8 * 4)
|
||||
for _, item in ipairs(loot) do
|
||||
inv:add_item("main", item)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
45
bones_loot/intllib.lua
Normal file
45
bones_loot/intllib.lua
Normal file
@ -0,0 +1,45 @@
|
||||
|
||||
-- Fallback functions for when `intllib` is not installed.
|
||||
-- Code released under Unlicense <http://unlicense.org>.
|
||||
|
||||
-- Get the latest version of this file at:
|
||||
-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua
|
||||
|
||||
local function format(str, ...)
|
||||
local args = { ... }
|
||||
local function repl(escape, open, num, close)
|
||||
if escape == "" then
|
||||
local replacement = tostring(args[tonumber(num)])
|
||||
if open == "" then
|
||||
replacement = replacement..close
|
||||
end
|
||||
return replacement
|
||||
else
|
||||
return "@"..open..num..close
|
||||
end
|
||||
end
|
||||
return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl))
|
||||
end
|
||||
|
||||
local gettext, ngettext
|
||||
if minetest.get_modpath("intllib") then
|
||||
if intllib.make_gettext_pair then
|
||||
-- New method using gettext.
|
||||
gettext, ngettext = intllib.make_gettext_pair()
|
||||
else
|
||||
-- Old method using text files.
|
||||
gettext = intllib.Getter()
|
||||
end
|
||||
end
|
||||
|
||||
-- Fill in missing functions.
|
||||
|
||||
gettext = gettext or function(msgid, ...)
|
||||
return format(msgid, ...)
|
||||
end
|
||||
|
||||
ngettext = ngettext or function(msgid, msgid_plural, n, ...)
|
||||
return format(n==1 and msgid or msgid_plural, ...)
|
||||
end
|
||||
|
||||
return gettext, ngettext
|
22
bones_loot/locale/template.pot
Normal file
22
bones_loot/locale/template.pot
Normal file
@ -0,0 +1,22 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-08-07 00:58-0600\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: bones_loot\init.lua:65
|
||||
msgid "Someone's old bones"
|
||||
msgstr ""
|
6
bones_loot/locale/update.bat
Normal file
6
bones_loot/locale/update.bat
Normal file
@ -0,0 +1,6 @@
|
||||
@echo off
|
||||
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
|
||||
cd ..
|
||||
set LIST=
|
||||
for /r %%X in (*.lua) do set LIST=!LIST! %%X
|
||||
..\..\intllib\tools\xgettext.bat %LIST%
|
4
bones_loot/mod.conf
Normal file
4
bones_loot/mod.conf
Normal file
@ -0,0 +1,4 @@
|
||||
name = bones_loot
|
||||
description = An API that allows bones to be placed procedurally with randomly generated loot
|
||||
depends = bones
|
||||
optional_depends = dungeon_loot, intllib
|
Reference in New Issue
Block a user