模块:数据
跳转到导航
跳转到搜索
修改数据[编辑源代码]
大部分游戏数据保存在模块:数据库,这些数据可以用Python脚本自动生成,不建议手动修改。一方面因为手动修改的内容很容易被别人用自动生成的覆盖,另一方面我们永远不知道HM偷偷改了哪些数据,所以只有自动程序才能保证没有遗漏。
如果台词中有错别字或语病等建议使用模板:台词的参数修改,而不要直接修改数据库。
少部分需要人工编辑的数据保存在模块:特殊数据中,主要包含以下两项:
- 不属于日、德、英、美、意、法、苏、中这8个国家的船无法自动判断国籍,需要人工指定;
- 炮弹等装备的特殊效果如果自动采集则会包含一些无意义的内容,需要人工组织语言。
如果必须人工编辑数据库,可以参照模块:对照表来理解英文缩写的含义。
使用[编辑源代码]
模板:台词[编辑源代码]
例: {{#invoke:数据|台词|胡德|获得}}
模板:舰娘[编辑源代码]
船的属性: {{#invoke:数据|属性|{{{船名}}}|{{{属性名}}}}}
例: {{#invoke:数据|属性|胡德|火力max}}
93
装备属性: {{#invoke:数据|装备属性|{{{船名}}}|{{{装备位置}}}}}
例: {{#invoke:数据|装备属性|胡德·改|1}}
火力+19
命中+2
射程: 长
敌舰[编辑源代码]
{{#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}} |}
位置 | 舰队 | 阵形 | 配置 | 索敌 | 制空 | 航速 | |||||
---|---|---|---|---|---|---|---|---|---|---|---|
随便改改 | 敌哨戒舰队 | 复纵 | 战巡Κ级Ⅱ型 | 重巡Ι级Ⅱ型 | 重巡Ι级Ⅱ型 | 轻巡Η级Ⅲ型 | 驱逐Τ级Ⅱ型 | 67 | 0 | 30 | |
敌哨戒舰队 | 复纵 | 战巡Κ级Ⅱ型 | 重巡Ι级Ⅱ型 | 轻巡Ζ级Ⅲ型 | 轻巡Η级Ⅲ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 92 | 0 | 30 | |
敌哨戒舰队 | 梯形 | 战巡Κ级Ⅱ型 | 轻巡Ζ级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 111 | 0 | 30 | |
B | 敌巡洋编队 | 复纵 | 轻母Ξ级Ⅲ型 | 轻母Ξ级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 160 | 28.90 | 35 |
敌巡洋编队 | 轮形 | 轻母Ξ级Ⅲ型 | 重巡Ι级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 140 | 14.45 | 35 | |
敌巡洋编队 | 单纵 | 战巡Κ级Ⅲ型 | 重巡Ι级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 轻巡Ζ级Ⅲ型 | 驱逐Τ级Ⅱ型 | 驱逐Τ级Ⅱ型 | 120 | 0 | 33 |
local tr = 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 = { }
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
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
return ship[attr]
else
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
p['属性'] = function(frame)
local shipName = frame.args[1]
local attr = frame.args[2]
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
return p