模块:敌舰:修订间差异
跳转到导航
跳转到搜索
无编辑摘要 |
无编辑摘要 |
||
第58行: | 第58行: | ||
p['出现场所'] = function(frame) | p['出现场所'] = function(frame) | ||
local shipId = frame.args[1] | local shipId = frame.args[1] | ||
local | local maps = { } | ||
for node, nodeFleets in pairs(fleets) do | for node, nodeFleets in pairs(fleets) do | ||
local map = node:sub(1, 3) | local map = node:sub(1, 3) | ||
第65行: | 第64行: | ||
for j, ship in pairs(fleet.ships) do | for j, ship in pairs(fleet.ships) do | ||
if ship == shipId then | if ship == shipId then | ||
maps[map] = true | |||
break | break | ||
end | end | ||
end | end | ||
end | end | ||
end | |||
table.sort(maps) | |||
local ret = '' | |||
for map, t in ipairs(maps) do | |||
ret = ret .. ', ' .. map | |||
end | end | ||
return ret:sub(3) | return ret:sub(3) |
2016年10月18日 (二) 04:42的版本
{{#invoke:敌舰|属性|atk|20000001}}
模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)
{{#invoke:敌舰|装备|1|20000001}}
模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)
{{#invoke:敌舰|搭载|20000017}}
模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)
{{#invoke:敌舰|出现场所|20000001}}
模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)
{{#invoke:敌舰|阵容|<位置>|<带格式位置>|<列数>}}
结果可视为列表的一行(实际上为1~3行), 每列内容分别是: 位置, 舰队名, 阵型, 配置(默认6列), 索敌, 制空, 航速
参数除位置外均可省略
位置格式为x-y/z, 例如1-1/A
带格式位置为列表第一列显示的内容, 可以修改来表示 boss 点或迂回点等
列数为这张表中最多一队的敌舰个数, 比如1-1一个点最多有4艘船就设成4 例:
{| class='wikitable' !位置!!舰队!!阵型!!colspan=6|配置!!索敌!!制空!!航速 |- {{#invoke:敌舰|阵容|2-5/A|随便改改}} |- {{#invoke:敌舰|阵容|2-5/B}} |}模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)模块:特殊数据第3行Lua错误:attempt to index local 'data' (a boolean value)
位置 | 舰队 | 阵型 | 配置 | 索敌 | 制空 | 航速 |
---|
local enemyData = mw.loadData("模块:敌舰数据")
local ships = enemyData.ships
local fleets = enemyData.fleets
local equipts = mw.loadData("模块:特殊数据").equipts
local tr = mw.loadData("模块:对照表")
p = { }
p['属性'] = function(frame)
local ship = ships[frame.args[2]]
if ship == nil then return '' end
local ret = ship[frame.args[1]]
if ret == nil then return '' end
return ret
end
p['搭载'] = function(frame)
local ship = ships[frame.args[1]]
if ship == nil then return '' end
return ship.cap1 + ship.cap2 + ship.cap3 + ship.cap4
end
local function getEquiptAttrs(equipt)
local attrNames = { '火力', '装甲', '鱼雷', '对空', '轰炸', '索敌', '对潜', '命中', '回避', '幸运', '射程', '对空补正' }
local rangeName = { '短', '中', '长', '超长' }
if equipt == nil then return '' end
local ret = ''
for i,attr in pairs(attrNames) do
local val = equipt[tr[attr]]
if val ~= nil then
if ret ~= '' then ret = ret .. '<br>' end
ret = ret .. attr
if attr == '射程' then
ret = ret .. ': ' .. rangeName[val]
elseif attr == '对空补正' then
ret = ret .. ':<br>' .. val .. '%'
elseif val > 0 then
ret = ret .. '+' .. val
else
ret = ret .. val
end
end
end
if equipt.effect ~= nil then
ret = ret .. '<br>' .. equipt.effect
end
return ret
end
p['装备'] = function(frame)
local ship = ships[frame.args[2]]
if ship == nil then return '' end
local equiptName = ship['eq' .. frame.args[1]]
return getEquiptAttrs(equipts[equiptName])
end
p['出现场所'] = function(frame)
local shipId = frame.args[1]
local maps = { }
for node, nodeFleets in pairs(fleets) do
local map = node:sub(1, 3)
for i, fleet in pairs(nodeFleets) do
for j, ship in pairs(fleet.ships) do
if ship == shipId then
maps[map] = true
break
end
end
end
end
table.sort(maps)
local ret = ''
for map, t in ipairs(maps) do
ret = ret .. ', ' .. map
end
return ret:sub(3)
end
local function formatEnemyShip(ship)
local colorName = { 'black', 'green', 'blue', 'purple', 'orange', 'red' }
local ret = '[['
local len = mw.ustring.len(ship.title)
if mw.ustring.sub(ship.title, len, len) == '型' and mw.ustring.sub(ship.title, len - 2, len - 2) == '级' then
ret = ret .. mw.ustring.sub(ship.title, 1, len - 2)
else
ret = ret .. ship.title
end
return ret .. "|<span style='color:" .. colorName[ship.rarity] .. ";'>" .. ship.title .. "</span>]]"
end
local function calcAa(ship)
local ret = 0
local n = math.floor(ship.atk / 5) + 3
for i = 1, 4 do
local e = ship['eq' .. i]
if e:find('战斗机') ~= nil then
local f = math.log(math.min(n, ship['cap' .. i]) * 2 + 2)
ret = ret + f * equipts[e].aa
end
end
return ret
end
local function formatFloat(x)
if x == 0 then return 0 end
x = math.floor(x * 100 + 0.5) / 100
return string.format('%.2f', x)
end
local speedType = { }
speedType['航空母舰'] = 1
speedType['轻型航空母舰'] = 1
speedType['战列舰'] = 1
speedType['航空战列舰'] = 1
speedType['战列巡洋舰'] = 1
speedType['重巡洋舰'] = 2
speedType['重雷装巡洋舰'] = 2
speedType['轻巡洋舰'] = 2
speedType['驱逐舰'] = 2
speedType['补给舰'] = 2
speedType['潜艇'] = 3
p['阵容'] = function(frame)
local node = frame.args[1]
local label = frame.args[2]
if label == nil or label == '' then label = node:sub(5,5) end
local shipNum = frame.args[3]
if shipNum == nil then shipNum = 6 end
local ret = ''
local n = 0
for i, fleet in pairs(fleets[node]) do
if i ~= 1 then ret = ret .. '|-\n' end
ret = ret .. '|' .. fleet.title .. '||' .. fleet.formation
n = n + 1
local rec = 0
local aa = 0
local speed = { 0, 0, 0 }
local speedCnt = { 0, 0, 0 }
local m = 0
for j, shipId in pairs(fleet.ships) do
m = m + 1
local ship = ships[shipId]
ret = ret .. '||' .. formatEnemyShip(ship)
rec = rec + ship.rec
aa = aa + calcAa(ship)
local st = speedType[ship.type]
speed[st] = speed[st] + ship.speed
speedCnt[st] = speedCnt[st] + 1
end
for j = m + 1, shipNum do
ret = ret .. '||'
end
local s1 = 999
local s2 = 999
if speedCnt[1] ~= 0 then s1 = speed[1] / speedCnt[1] end
if speedCnt[2] ~= 0 then s2 = speed[2] / speedCnt[2] end
local s = math.min(s1, s2)
if speedCnt[1] == 0 and speedCnt[2] == 0 then
s = speed[3] / speedCnt[3]
end
ret = ret .. '||' .. rec .. '||' .. formatFloat(aa) .. '||' .. math.floor(s) .. '\n'
end
return '|rowspan=' .. n .. '|' .. label .. '|' .. ret
end
return p