Minecraft Wiki

Minecraft Wikiは、Microsoftから公式ウィキとみなされなくなったため、ウィキのロゴを含むいくつかの変更が必要となりました。詳細はこちらのお知らせをご覧ください。

もっと見る

Minecraft Wiki
Advertisement
Minecraft Wiki
4,149
ページ

このモジュールは、{{Experience}} を実装しています。直接渡される引数は受け入れず、親引数のみを受け入れるため、テンプレートから直接呼び出さないことが推奨されます。

[閲覧 | 編集 | 履歴 | キャッシュ削除]上記の解説は、モジュール:Experience/docから参照されています。
local p = {}

local i18n = {
	error_exp_arg_not_a_number = "モジュール:Experience: %sが数字ではありません", -- %1 = the description of the parameter
	error_exp_arg_too_small = "モジュール:Experience: %sが-32,768(16ビット符号付き整数の下限)より小さい値です", -- %1 = the description of the parameter
	error_exp_arg_too_large = "モジュール:Experience: %sが32,767(16ビット符号付き整数の上限)より大きい値です", -- %1 = the description of the parameter
	arg_desc_min_exp = "最小経験値", -- %1 = the description of the parameter
	arg_desc_max_exp = "最大経験値", -- %1 = the description of the parameter
	error_exp_min_gt_exp_max = "モジュール:Experience: %s (%d) > %s (%d)" -- %1 = min exp description, %2 = min exp, %3 = max exp description, %4 = max exp 
}

local EXP_VALUES = {
	{"Experience Orb Value -32768-2.png", -32768, 2},
	{"Experience Orb Value 3-6.png", 3, 6},
	{"Experience Orb Value 7-16.png", 7, 16},
	{"Experience Orb Value 17-36.png", 17, 36},
	{"Experience Orb Value 37-72.png", 37, 72},
	{"Experience Orb Value 73-148.png", 73, 148},
	{"Experience Orb Value 149-306.png", 149, 306},
	{"Experience Orb Value 307-616.png", 307, 616},
	{"Experience Orb Value 617-1236.png", 617, 1236},
	{"Experience Orb Value 1237-2476.png", 1237, 2476},
	{"Experience Orb Value 2477-32767.png", 2477, 32767}
}

local function validate_xp_arg(arg, desc)
	local arg_n = assert(tonumber(arg), i18n.error_exp_arg_not_a_number:format(desc))
	assert(arg_n >= -32768, i18n.error_exp_arg_too_small:format(desc))
	assert(arg_n <= 32767, i18n.error_exp_arg_too_large:format(desc))
	return arg_n
end

local function produce_exp_sprite(image, is_first)
	local sprite = mw.html.create('span'):addClass("pixel-image")
	if is_first then
		sprite:addClass("animated-active")
	end
	sprite:css({
		["padding-left"] = "19px",
		["background-size"] = "16px 16px",
		["background-position"] = "left center",
		["background-repeat"] = "no-repeat",
		["background-image"] = mw.getCurrentFrame():expandTemplate({title="テンプレート:FileUrl", args = {image}})
	})
	return sprite
end

local function produce_exp_anim(exp_min, exp_max)
	local wrap = mw.html.create("span"):addClass("animated")
	
	local lower_bound = 1
	local upper_bound = #EXP_VALUES
	for i, v in ipairs(EXP_VALUES) do
		if exp_min >= v[2] and exp_min <= v[3] then
			lower_bound = i
		end
		if exp_max >= v[2] and exp_max <= v[3] then
			upper_bound = i
		end	
	end
	--mw.log(lower_bound)
	--mw.log(upper_bound)
	
	local first = true
	for i = lower_bound, upper_bound do
		if first then
			wrap:node(produce_exp_sprite(EXP_VALUES[i][1], true))
			first = false
		else
			wrap:node(produce_exp_sprite(EXP_VALUES[i][1]))
		end
	end
	
	return tostring(wrap)
end

function p.main(exp_min, exp_max)
	local anim = produce_exp_anim(exp_min, exp_max)
	if exp_min == exp_max then
		return anim .. exp_min
	end
	return anim .. exp_min .. "–" .. exp_max
end

function p.exp_range(f)
	local args = require("モジュール:ProcessArgs").merge(true)
	local exp_min = validate_xp_arg(args[1], i18n.arg_desc_min_exp)
	local exp_max = validate_xp_arg(args[2], i18n.arg_desc_max_exp)
	
	assert(exp_max >= exp_min, i18n.error_exp_min_gt_exp_max:format(
		i18n.arg_desc_min_exp,
		exp_min,
		i18n.arg_desc_max_exp,
		exp_max
	))

	return p.main(exp_min, exp_max)
end

return p
Advertisement