模块:舰娘特殊装备

来自舰娘百科
跳转至: 导航搜索

此模块的文档可以在模块:舰娘特殊装备/doc创建

local eqData = require("模块:舰娘装备数据改")
local sData = require("模块:舰娘数据")
local scData = require("模块:ShipClass")

local f = {}
local equipDataTb = eqData.equipDataTb;
local shipDataTb = sData.shipDataTb;
local scDataTb = scData.shipclassDataTb;


local nShipType = {
	"海防舰",
	"驱逐舰",
	"轻型巡洋舰",
	"重型雷装巡洋舰",
	"重型巡洋舰",
	"航空巡洋舰",
	"轻型航空母舰",
	"战列巡洋舰",
	"战列舰",
	"航空战列舰",
	"航空母舰",
	"超弩级战舰",
	"潜水舰",
	"潜水航空母舰",
	"补给舰(深海)",
	"水上机母舰",
	"扬陆舰",
	"装甲航空母舰",
	"工作舰",
	"潜水母舰",
	"练习巡洋舰",
	"补给舰",
	"轻航空巡洋舰",
	"改装航空巡洋舰",
	"兵装实验轻巡"
}

local mapping = {
	["驱逐舰"] = "驱逐舰", 
	["轻巡洋舰"] = "轻巡洋舰", 
	["重雷装巡洋舰"] = "重雷装巡洋舰", 
	["重巡洋舰"] = "重巡洋舰", 
	["航空巡洋舰"] = "航空巡洋舰", 
	["战列舰"] = "低速战舰", 
	["战列巡洋舰"] = "高速战舰", 
	["航空战列舰"] = "航空战舰", 
	["轻型航母"] = "轻空母", 
	["正规航母"] = "正规空母", 
	["装甲航母"] = "装甲空母", 
	["水上机母舰"] = "水上飞机母舰", 
	["潜艇"] = "潜水艇", 
	["航空潜艇"] = "潜水空母", 
	["登陆突击舰"] = "扬陆舰", 
	["维修舰"] = "工作舰", 
	["潜艇补给舰"] = "潜水母舰", 
	["练习巡洋舰"] = "练习巡洋舰", 
	["舰队油船"] = "补给舰", 
	["海防舰"] = "海防舰",
	["轻航空巡洋舰"] ="轻航空巡洋舰",
	["改装航空巡洋舰"] = "改装航空巡洋舰",
	["兵装实验轻巡"] = "兵装实验轻巡"
}

equipTypeTb = {
	[1] ="小口径主炮",
	[2] ="中口径主炮",
	[3] ="大口径主炮",
	[4] ="副炮",
	[5] ="鱼雷",
	[6] ="舰上战斗机",
	[7] ="舰上爆击机",
	[8] ="舰上攻击机",
	[9] ="舰上侦察机",
	[10] ="水上侦察机",
	[11] ="水上爆击机",
	[12] ="小型电探",
	[13] ="大型电探",
	[14] ="声呐",
	[15] ="爆雷",
	[16] ="追加装甲",
	[17] ="机关部强化",
	[18] ="对空强化弹",
	[19] ="对舰强化弹",
	[20] ="VT信管",
	[21] ="对空机铳",
	[22] ="特殊潜航艇",
	[23] ="应急修理要员",
	[24] ="上陆用舟艇",
	[25] ="旋翼飞机",
	[26] ="对潜哨戒机",
	[27] ="追加装甲(中型)",
	[28] ="追加装甲(大型)",
	[29] ="探照灯",
	[30] ="简易输送部材",
	[31] ="舰艇修理设施",
	[32] ="潜水舰鱼雷",
	[33] ="照明弹",
	[34] ="司令部设施",
	[35] ="航空要员",
	[36] ="高射装置",
	[37] ="对地装备",
	[38] ="大口径主炮(II)",
	[39] ="水上舰要员",
	[40] ="大型声呐",
	[41] ="大型飞行艇",
	[42] ="大型探照灯",
	[43] ="战斗粮食",
	[44] ="补给物资",
	[45] ="水上战斗机",
	[46] ="特型内火艇",	
	[47] ="陆上攻击机",	
	[48] ="局地战斗机",	
	[50] ="输送部材",
	[51] ="潜水艇装备",
	[57] ="喷气式战斗轰炸机",
	[93] ="大型电探(II)",
	[94] ="舰上侦察机(II)",
	[99] ="其他",
}


function f.equipData(frame)
	local value;
	local value1;

--	value = "无特殊装备"
	
	if  shipDataTb[frame.args[1]] == nil then
		return "";
	end
	local t = {}
	local tt = {}
	local aa = {}
	local nn = {}
	local pp ={}
	
	for eqNum in pairs(equipDataTb) do
		for k, v in pairs(equipDataTb[eqNum]["装备适用"]) do
			if not mapping[v] then
--				if eqNum == "001" then
--					value
				if v == shipDataTb[frame.args[1]]["中文名"] then
					table.insert(nn,equipDataTb[eqNum]["类别"][3])
					table.insert(pp,equipDataTb[eqNum]["类别"][3])
					table.insert(aa,equipDataTb[eqNum]["中文名"])
--					table.insert(t, "[[" .. equipDataTb[eqNum]["中文名"] .. "]]")
				end
			end	
		end
	end
	
	if #aa == 0 then
		value = "无特殊装备"
	return value
	end
	
	table.sort(nn)
--	else
	if #aa ~= 0 then
	local lei={}
	table.insert(lei,nn[1])
	for  ss=1,#nn do
--		for kk=1,#lei do
			if nn[ss]~=lei[#lei] then
			table.insert(lei,nn[ss])
			end
--		end
	end

	for ss=1,#lei do
		table.insert(tt,equipTypeTb[lei[ss]])
		table.insert(tt," : ")
		for xx=1,#nn do
			if pp[xx] == lei[ss] then
			table.insert(tt,"[[" .. aa[xx] .. "]]")
			if xx~=#nn then
			table.insert(tt," ")
			end
			end
		end
		table.insert(tt,"<br>")
	end
	value = table.concat(tt)
	return value
	end
end

function f.getBonusEquip(frame)
	local id = frame.args[1]
	local g_id
	if not id or not shipDataTb[id] then
		return "无效舰娘ID"
	else
		g_id = shipDataTb[id].ID
	end
	local log = {}
	local r = {}
	local belong = function(id, t)
		for _, v in pairs(t) do
			if (v == shipDataTb[id]["中文名"]) then
				return true
			elseif v:find("^(.+)级$") then
				local sc = v:match("^(.+)级$")
				if not scDataTb[sc] then
					table.insert(log, "缺失信息: " .. sc)
				else
					for __, tid in pairs(scDataTb[sc]) do
						if tid == tonumber(g_id) then
							return true
						end
					end
				end
			elseif nShipType[shipDataTb[id]["舰种"]] == v or mapping[nShipType[shipDataTb[id]["舰种"]]] == v then
				return true
			end
		end
		return false
	end
	local fmt = function(p, t, plus)
		local b = {}
		for k, v in pairs(t) do
			if type(v) == "table" then
				local s = ""
				if p == "区域" then
					s = ("(出击%s时) "):format(k)
				elseif p == "改修" then
					s = ("(+%s☆)) "):format(k)
				else
					s = ("(装备%s个时) "):format(k)
				end
				local bonus = {}
				for k2, v2 in pairs(v) do
					local op = "+"
					if tonumber(v2) < 0 then
						op = "-"
					end
					table.insert(bonus, string.format("%s %s %d", k2, op, math.abs(v2)))
				end
				table.insert(b, s .. table.concat(bonus, ","))
			else
				local op = "+"
				if tonumber(v) < 0 then
					op = "-"
				end
				table.insert(b, string.format("%s %s %d", k, op, math.abs(v)))
			end
		end
		return (not plus and "" or "同时装备" .. table.concat(plus, " + ") .. "时, ") .. table.concat(b, ", ")
	end
	for k, v in pairs(equipDataTb) do
		local c = 1
		if belong(id, v["装备适用"]) then -- todo
			while true do
				local ref = v["额外收益" .. (c == 1 and "" or c)]
				if not ref then
					break
				end
				if (not ref["适用舰娘"] or belong(id, ref["适用舰娘"])) and (not ref["非适用舰娘"] or not belong(id, ref["非适用舰娘"])) then
					table.insert(r, string.format("[[%s]], %s;", v["中文名"], fmt(ref["收益类型"], ref["收益属性"], ref["装备组合"])))
				end
				c = c + 1
			end
		end
	end
	return table.concat(r, "<br>") .. table.concat(log, "<br>")
end

return f