模块:数据:修订间差异
来自舰R百科
更多操作
无编辑摘要 |
无编辑摘要 |
||
| (未显示1个用户的39个中间版本) | |||
| 第1行: | 第1行: | ||
local tr = mw.loadData("模块:对照表") | local tr = mw.loadData("模块:对照表") | ||
local ships = mw.loadData("模块: | local equipts = mw.loadData("模块:特殊数据/装备").equipts | ||
local ships = mw.loadData("模块:特殊数据/舰娘").ships | |||
local byIndex = mw.loadData("模块:特殊数据/舰娘").byIndex | |||
local enemy = mw.loadData("模块:敌舰数据") | |||
local enemyShips = enemy.ships | |||
local enemyFleets = enemy.fleets | |||
p = { } | p = { } | ||
local function getAttr(ship, attr) | local function replaceCountryName(name) | ||
name = name:gsub('C国', '中国') | |||
name = name:gsub('E国', '英国') | |||
name = name:gsub('F国', '法国') | |||
name = name:gsub('G国', '德国') | |||
name = name:gsub('I国', '意大利') | |||
name = name:gsub('J国', '日本') | |||
name = name:gsub('S国', '苏联') | |||
name = name:gsub('U国', '美国') | |||
return name | |||
end | |||
local function getAttr(ship, attr, default) | |||
if tr[attr] ~= nil then attr = tr[attr] end | |||
if attr == '搭载' then | if attr == '搭载' then | ||
return ship.cap1 + ship.cap2 + ship.cap3 + ship.cap4 | return ship.cap1 + ship.cap2 + ship.cap3 + ship.cap4 | ||
elseif attr:sub(1, 2) == 'eq' then | |||
return replaceCountryName(ship[attr]) | |||
elseif ship[attr] ~= nil then | elseif ship[attr] ~= nil then | ||
return ship[attr] | return ship[attr] | ||
else | else | ||
return '' | return default | ||
end | |||
end | |||
local equiptAttrs = { '火力', '装甲', '鱼雷', '对空', '轰炸', '索敌', '对潜', '命中', '回避', '幸运', '射程', '对空补正' } | |||
local rangeName = { '短', '中', '长', '超长' } | |||
local function getEquiptAttrs(equipt) | |||
if equipt == nil then return '' end | |||
local ret = '' | |||
for i,attr in pairs(equiptAttrs) 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 .. ':<wbr>' .. val .. '%' | |||
elseif val > 0 then | |||
ret = ret .. '+' .. val | |||
else | |||
ret = ret .. val | |||
end | |||
end | |||
end | |||
if equipt.effect ~= nil then | |||
return ret .. '<br>' .. equipt.effect | |||
else | |||
return ret | |||
end | end | ||
end | end | ||
| 第17行: | 第66行: | ||
local shipName = frame.args[1] | local shipName = frame.args[1] | ||
local attr = frame.args[2] | local attr = frame.args[2] | ||
return getAttr(ships[shipName], attr) | local default = frame.args[3] | ||
if default == nil then default = '' end | |||
return getAttr(ships[shipName], attr, default) | |||
end | |||
p['简介'] = function(frame) | |||
local shipName = frame.args[1] | |||
return replaceCountryName(ships[shipName]['简介']) | |||
end | |||
p['改造'] = function(frame) | |||
local shipName = frame.args[1] | |||
local mod = ships[shipName].mod | |||
if mod == nil then mod = '' end | |||
return mod | |||
end | |||
p['台词'] = function(frame) | |||
local shipName = frame.args[1] | |||
local dialogue = frame.args[2] | |||
local force = frame.args[3] | |||
if force ~= nil and force ~= '' then return force end | |||
if shipName == '' then return '' end | |||
local ret = ships[shipName][dialogue] | |||
if ret == nil then ret = '' end | |||
return ret | |||
end | |||
p['查找编号'] = function(frame) | |||
return byIndex[tonumber(frame.args[1])] | |||
end | |||
p['页面'] = function(frame) | |||
local idx = ships[frame.args[1]].index | |||
return byIndex[idx % 1000] | |||
end | |||
local typeCode = { } | |||
typeCode['航空母舰'] = 'cv' | |||
typeCode['轻型航空母舰'] = 'cvl' | |||
typeCode['装甲航母'] = 'av' | |||
typeCode['战列舰'] = 'bb' | |||
typeCode['航空战列舰'] = 'bbv' | |||
typeCode['战列巡洋舰'] = 'bc' | |||
typeCode['重巡洋舰'] = 'ca' | |||
typeCode['轻巡洋舰'] = 'cl' | |||
typeCode['浅水重炮舰'] = 'bm' | |||
typeCode['驱逐舰'] = 'dd' | |||
typeCode['重炮潜艇'] = 'sc' | |||
typeCode['潜艇'] = 'ss' | |||
typeCode['补给舰'] = 'ap' | |||
local curFrame = nil | |||
local function expand(idx) | |||
local name = byIndex[idx] | |||
local link = byIndex[idx % 1000] | |||
local ship = ships[name] | |||
local moe = ship['萌王'] | |||
if moe == nil then moe = '' end | |||
local args = { idx, name:gsub('·改', ''), link, ship.rarity, typeCode[ship.type], moe } | |||
return curFrame:expandTemplate{ title = '图鉴立绘2', args = args } | |||
end | |||
local function genShipList(idx) | |||
local part1 = '' | |||
local part2 = '' | |||
local empty1 = true | |||
local empty2 = true | |||
local prefix = '\n|width="200px"|' | |||
for i = idx + 1, idx + 5 do | |||
part1 = part1 .. prefix | |||
if byIndex[i] ~= nil then | |||
part1 = part1 .. expand(i) | |||
empty1 = false | |||
end | |||
end | |||
if not empty1 then prefix = '\n|' end | |||
for i = idx + 6, idx + 10 do | |||
part2 = part2 .. prefix | |||
if byIndex[i] ~= nil then | |||
part2 = part2 .. expand(i) | |||
empty2 = false | |||
end | |||
end | |||
if empty1 and empty2 then | |||
return nil | |||
elseif empty1 then | |||
return '{|\n|- valign="bottom"' .. part2 .. '\n|}\n' | |||
elseif empty2 then | |||
return '{|\n|- valign="bottom"' .. part1 .. '\n|}\n' | |||
else | |||
return '{|\n|- valign="bottom"' .. part1 .. '\n|-' .. part2 .. '\n|}\n' | |||
end | |||
end | |||
p['图鉴'] = function(frame) | |||
curFrame = frame | |||
local l = math.floor((tonumber(frame.args[1]) - 1) / 10) * 10 | |||
local r = math.floor((tonumber(frame.args[2]) - 1) / 10) * 10 | |||
local ret = '' | |||
local buf = '' | |||
for i = l, r, 10 do | |||
local title = '===No.' .. (i + 1) .. '~' .. (i + 10) .. '===\n' | |||
local list = genShipList(i) | |||
if list ~= nil then | |||
ret = ret .. buf .. title .. list | |||
buf = '' | |||
else | |||
buf = buf .. title | |||
end | |||
end | |||
return ret | |||
end | |||
p['装备属性'] = function(frame) | |||
local shipName = frame.args[1] | |||
local index = frame.args[2] | |||
local attr = frame.args[3] | |||
local equiptName = ships[shipName]['eq' .. index] | |||
if attr ~= nil then | |||
return equipts[equiptName][tr[attr]] | |||
else | |||
return getEquiptAttrs(equipts[equiptName]) | |||
end | |||
end | |||
p['敌舰属性'] = function(frame) | |||
local shipId = frame.args[1] | |||
local attr = frame.args[2] | |||
return getAttr(enemyShips[shipId], attr, '?') | |||
end | |||
p['敌舰装备属性'] = function(frame) | |||
local shipId = frame.args[1] | |||
local index = frame.args[2] | |||
local equiptName = enemyShips[shipId]['eq' .. index] | |||
return getEquiptAttrs(equipts[equiptName]) | |||
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 | |||
local colorName = { 'black', 'green', 'blue', 'purple', 'orange', 'red' } | |||
local function formatEnemyShip(ship) | |||
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 | |||
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(enemyFleets[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 = enemyShips[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 | |||
p.debug = function() | |||
f = { } | |||
f.args = {'1', '400' } | |||
return p['图鉴'](f) | |||
end | end | ||
return p | return p | ||