本WIKI由spt赛小息6于2020年05月27日担任站长并维护更新,编辑权限开放,如遇Chrome浏览器登陆后无法编辑点这里 BWIKI反馈留言板
目前WIKI是开放编辑权限,任何人都可以在遵守《BWIKI社区规则》和《赛尔号星球大战WIKI社区规则》的前提下进行内容制作,违规者将会被封禁。
全站通知:
模块:属性克制
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:属性克制/doc创建
local p = {}
-- 所有属性(单 + 双)
p.allAttributes = {
"草", "水", "火", "飞行", "电", "机械", "地面", "普通", "冰", "超能", "战斗", "光", "暗影", "神秘", "龙", "圣灵","次元", "远古", "邪灵", "自然",
"草·超能", "草·战斗", "草·暗影",
"水·超能", "水·龙", "火·龙",
"火·超能", "飞行·超能", "光·飞行", "飞行·龙", "火·电",
"机械·地面",
"机械·龙","地面·暗影",
"光·冰", "冰·暗影", "战斗·火", "战斗·暗影",
"战斗·地面", "神秘·光", "神秘·暗影", "暗影·龙", "光·火"
}
-- 外部命名 → 内部命名
p.externalToInternal = {
["草超能"] = "草·超能", ["草战斗"] = "草·战斗", ["草暗影"] = "草·暗影",
["水超能"] = "水·超能", ["水龙"] = "水·龙",
["火龙"] = "火·龙", ["火超能"] = "火·超能",
["飞行超能"] = "飞行·超能", ["光飞行"] = "光·飞行", ["飞行龙"] = "飞行·龙",
["火电"] = "火·电", ["机械地面"] = "机械·地面",
["机械龙"] = "机械·龙",
["地面暗影"] = "地面·暗影", ["光冰"] = "光·冰",
["冰暗影"] = "冰·暗影",["战斗火"] = "战斗·火",
["战斗暗影"] = "战斗·暗影", ["战斗地面"] = "战斗·地面", ["神秘光"] = "神秘·光",
["神秘暗影"] = "神秘·暗影", ["暗影龙"] = "暗影·龙", ["光火"] = "光·火"
}
-- 去重函数
local function unique(t)
local seen, out = {}, {}
for _, v in ipairs(t) do
if not seen[v] then
seen[v] = true
table.insert(out, v)
end
end
for i, v in ipairs(out) do t[i] = v end
for i = #out + 1, #t do t[i] = nil end -- 把多余尾巴清掉
end
-- 自动插入双属性(仅当不存在时才插入)
for _, internal in pairs(p.externalToInternal) do
local found = false
for _, v in ipairs(p.allAttributes) do
if v == internal then found = true; break end
end
if not found then
table.insert(p.allAttributes, internal)
end
end
-- 单属性系数表(已简化,可继续补充)
p.coefData = {
["草"] = {
["attack"] = { ["火"] = 0.5, ["水"] = 2, ["草"] = 0.5, ["飞行"] = 0.5, ["电"] = 1, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 2, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 0.5, ["邪灵"] = 1, ["自然"] = 1 },
["defense"] = { ["火"] = 2, ["水"] = 0.5, ["草"] = 0.5, ["飞行"] = 2, ["电"] = 0.5, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 0, ["龙"] = 0.5, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 2, ["邪灵"] = 1, ["自然"] = 2 }
},
["水"] = {
["attack"] = { ["火"] = 2, ["水"] = 0.5, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 1, ["地面"] = 2, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5 },
["defense"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 2, ["飞行"] = 1, ["电"] = 2, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2 }
},
["火"] = {
["attack"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 2, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5 },
["defense"] = { ["火"] = 0.5, ["水"] = 2, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 1, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2}
},
["飞行"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 2, ["飞行"] = 1, ["电"] = 0.5, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 0.5, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 0.5},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 2, ["地面"] = 0, ["机械"] = 1, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 2, ["远古"] = 2, ["邪灵"] = 1, ["自然"] = 2}
},
["电"] = {
["attack"] = { ["火"] = 1, ["水"] = 2, ["草"] = 0.5, ["飞行"] = 2, ["电"] = 0.5, ["地面"] = 0, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 2, ["光"] = 1, ["龙"] = 1, ["神秘"] = 0.5, ["圣灵"] = 0.5, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 0.5, ["电"] = 0.5, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 2, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2}
},
["机械"] = {
["attack"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 1, ["飞行"] = 1, ["电"] = 0.5, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 0.5, ["远古"] = 2, ["邪灵"] = 2, ["自然"] = 1},
["defense"] = { ["火"] = 2, ["水"] = 1, ["草"] = 0.5, ["飞行"] = 0.5, ["电"] = 1, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 0.5, ["光"] = 0.5, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 2, ["远古"] = 0.5, ["邪灵"] = 0.5, ["自然"] = 0.5}
},
["地面"] = {
["attack"] = { ["火"] = 2, ["水"] = 1, ["草"] = 0.5, ["飞行"] = 0, ["电"] = 2, ["地面"] = 1, ["机械"] = 2, ["冰"] = 1, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 0.5, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5},
["defense"] = { ["火"] = 1, ["水"] = 2, ["草"] = 2, ["飞行"] = 1, ["电"] = 0, ["地面"] = 1, ["机械"] = 1, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 0.5, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2 }
},
["普通"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 1},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 1}
},
["冰"] = {
["attack"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 2, ["飞行"] = 2, ["电"] = 1, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 2, ["远古"] = 2, ["邪灵"] = 1, ["自然"] = 1},
["defense"] = { ["火"] = 2, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 0.5, ["光"] = 0.5, ["龙"] = 2, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 0.5, ["远古"] = 0.5, ["邪灵"] = 0.5, ["自然"] = 1}
},
["超能"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 1, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 1, ["光"] = 0, ["龙"] = 1, ["神秘"] = 2, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2 },
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 1, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 2, ["光"] = 2, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 0.5}
},
["战斗"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 2, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 0.5, ["光"] = 1, ["龙"] = 2, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 1},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 2, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 1, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 0.5, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5}
},
["光"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 0, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 2, ["光"] = 0.5, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 0.5},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 2, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 1, ["冰"] = 1, ["超能"] = 0, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 0.5, ["光"] = 0.5, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 2, ["自然"] = 2 }
},
["暗影"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 2, ["光"] = 0.5, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 1},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 2, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 2, ["光"] = 2, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 0, ["远古"] = 1, ["邪灵"] = 2, ["自然"] = 0.5 }
},
["神秘"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 2, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 2, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 2},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 0.5, ["地面"] = 1, ["机械"] = 1, ["冰"] = 1, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 1, ["神秘"] = 2, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 2, ["邪灵"] = 2, ["自然"] = 0.5}
},
["龙"] = {
["attack"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 0.5, ["地面"] = 1, ["机械"] = 1, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 2, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 0.5, ["邪灵"] = 2, ["自然"] = 1 },
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 1, ["光"] = 1, ["龙"] = 2, ["神秘"] = 1, ["圣灵"] = 0.5, ["次元"] = 1, ["远古"] = 2, ["邪灵"] = 1, ["自然"] = 1}
},
["圣灵"] = {
["attack"] = { ["火"] = 2, ["水"] = 2, ["草"] = 2, ["飞行"] = 1, ["电"] = 2, ["地面"] = 1, ["机械"] = 1, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 1, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 0.5, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 2, ["邪灵"] = 0.5, ["自然"] = 1},
["defense"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 0.5, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 2, ["暗影"] = 0.5, ["光"] = 0.5, ["龙"] = 2, ["神秘"] = 2, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 1}
},
["次元"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 2, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 0.5, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 0, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 2, ["自然"] = 2},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 0.5, ["电"] = 2, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 2, ["光"] = 1, ["龙"] = 1, ["神秘"] = 1, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 2, ["自然"] = 0.5}
},
["远古"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 2, ["飞行"] = 2, ["电"] = 1, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 2, ["神秘"] = 2, ["圣灵"] = 1, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 1},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 0.5, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 2, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 1, ["龙"] = 0.5, ["神秘"] = 1, ["圣灵"] = 2, ["次元"] = 1, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 1}
},
["邪灵"] = {
["attack"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 1, ["电"] = 1, ["地面"] = 1, ["机械"] = 0.5, ["冰"] = 0.5, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 2, ["光"] = 2, ["龙"] = 1, ["神秘"] = 2, ["圣灵"] = 0.5, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 2},
["defense"] = { ["火"] = 1, ["水"] = 1, ["草"] = 1, ["飞行"] = 0.5, ["电"] = 1, ["地面"] = 1, ["机械"] = 2, ["冰"] = 1, ["超能"] = 1, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 0.5, ["光"] = 0.5, ["龙"] = 2, ["神秘"] = 0.5, ["圣灵"] = 1, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 1, ["自然"] = 0.5}
},
["自然"] = {
["attack"] = { ["火"] = 2, ["水"] = 2, ["草"] = 2, ["飞行"] = 2, ["电"] = 2, ["地面"] = 2, ["机械"] = 0.5, ["冰"] = 1, ["超能"] = 0.5, ["普通"] = 1, ["战斗"] = 0.5, ["暗影"] = 0.5, ["光"] = 2, ["龙"] = 1, ["神秘"] = 0.5, ["圣灵"] = 1, ["次元"] = 0.5, ["远古"] = 1, ["邪灵"] = 0.5, ["自然"] = 1},
["defense"] = { ["火"] = 0.5, ["水"] = 0.5, ["草"] = 1, ["飞行"] = 0.5, ["电"] = 0.5, ["地面"] = 0.5, ["机械"] = 1, ["冰"] = 1, ["超能"] = 2, ["普通"] = 1, ["战斗"] = 1, ["暗影"] = 1, ["光"] = 0.5, ["龙"] = 1, ["神秘"] = 2, ["圣灵"] = 1, ["次元"] = 2, ["远古"] = 1, ["邪灵"] = 2, ["自然"] = 1}
}
}
-- 工具:分割属性
local function splitAttribute(attr)
if string.find(attr, "·") then
local parts = {}
for part in string.gmatch(attr, "([^·]+)") do
table.insert(parts, part)
end
return parts
else
return { attr }
end
end
-- 双属性系数计算
-- 返回单属性 atkAttr 对 defAttr 的系数(缺省=1)
local function singleCoef(atkAttr, defAttr, mode)
local t = p.coefData[atkAttr]
if not t then return 1 end
local v = t[mode][defAttr]
return v == nil and 1 or v
end
--[[
计算 双属性 A·B 对 单属性 C 的系数
符合官方规则:
两个系数都是 2 → 4
任一系数为 0 → (和)/4
其余 → (和)/2
]]
local function dualVsSingle(A, B, C, mode)
local a = singleCoef(A, C, mode)
local b = singleCoef(B, C, mode)
if a == 2 and b == 2 then return 4 end
if a == 0 or b == 0 then return (a + b) / 4 end
return (a + b) / 2
end
-- 主入口:计算 dualAttr 对 targetAttr 的系数
-- mode = "attack" / "defense"
function p.getDualAttributeCoef(dualAttr, targetAttr, mode)
local A, B = dualAttr:match("([^·]+)·([^·]+)")
if not A or not B then return 1 end
-- 拆分目标
local tParts = splitAttribute(targetAttr)
if #tParts == 1 then
-- 双 vs 单
return dualVsSingle(A, B, tParts[1], mode)
else
-- 双 vs 双:分别计算 双→t1 和 双→t2 两个中间值,再平均
local x = dualVsSingle(A, B, tParts[1], mode)
local y = dualVsSingle(A, B, tParts[2], mode)
return (x + y) / 2
end
end
-- 图片路径
function p.getImagePath(attr)
local key = attr:gsub("·", "") -- "草·超能" → "草超能"
local filename = key .. "系.png"
return string.format("[[File:%s|%s系|30px|link=%s系]]", filename,key, key)
end
-- 输入归一化
function p.normalizeInput(attr)
return p.externalToInternal[attr] or attr
end
-- 主入口
-- 主入口
function p.getResults(frame)
local attr = frame.args.attribute or ""
if attr == "" then return "未提供属性" end
attr = p.normalizeInput(attr) -- "草超能" → "草·超能"
local isDual = string.find(attr, "·") ~= nil
local attackResults, defenseResults = {}, {}
-- 攻击方克制:当前属性 打 其他属性
-- 攻击方克制:当前属性 打 其他属性(含双属性)
for _, target in ipairs(p.allAttributes) do
local atkCoef
local tarParts = splitAttribute(target) -- 目标可能是单或双
if isDual then
-- 当前属性是双属性:用已有函数
atkCoef = p.getDualAttributeCoef(attr, target, "attack")
else
-- 当前属性是单属性:统一按「单 vs 单」两次再合并
if #tarParts == 1 then
atkCoef = singleCoef(attr, tarParts[1], "attack")
else
local coef1 = singleCoef(attr, tarParts[1], "attack")
local coef2 = singleCoef(attr, tarParts[2], "attack")
-- 官方合并规则
if coef1 == 2 and coef2 == 2 then
atkCoef = 4
elseif coef1 == 0 or coef2 == 0 then
atkCoef = (coef1 + coef2) / 4
else
atkCoef = (coef1 + coef2) / 2
end
end
end
if atkCoef ~= 1 then
table.insert(attackResults, { attr = target, coef = atkCoef })
end
end
-- 防守方被克制:其他属性(单/双)打当前属性(可能单也可能双)
local curParts = splitAttribute(attr) -- 当前属性拆半
for _, attacker in ipairs(p.allAttributes) do
local defCoef
local atkParts = splitAttribute(attacker) -- attacker 拆半
-- 统一逻辑:attacker 的每一半分别打 curParts 的每一半,再合并
if #atkParts == 1 then
-- attacker 是单属性
local coefs = {}
for _, c in ipairs(curParts) do
table.insert(coefs, singleCoef(atkParts[1], c, "attack"))
end
if #curParts == 1 then
defCoef = coefs[1] -- 单 vs 单
else
local a, b = coefs[1], coefs[2] -- 单 vs 双
if a == 2 and b == 2 then defCoef = 4
elseif a == 0 or b == 0 then defCoef = (a + b) / 4
else defCoef = (a + b) / 2
end
end
else
-- attacker 是双属性
local coefs = {}
for _, c in ipairs(curParts) do
table.insert(coefs, dualVsSingle(atkParts[1], atkParts[2], c, "attack"))
end
if #curParts == 1 then
defCoef = coefs[1] -- 双 vs 单
else
defCoef = (coefs[1] + coefs[2]) / 2 -- 双 vs 双(再÷2)
end
end
if defCoef ~= 1 then
table.insert(defenseResults, { attr = attacker, coef = defCoef })
end
end
-- 排序
table.sort(attackResults, function(a, b) return a.coef > b.coef end)
table.sort(defenseResults, function(a, b) return a.coef > b.coef end)
local function render(title, results)
local html = { string.format("<h3>%s</h3><div class='result-section'>", title) }
for _, r in ipairs(results) do
local img = p.getImagePath(r.attr)
local cls = ""
if r.coef > 2 then cls = "coef-2"
elseif r.coef > 1 then cls = "coef-1"
elseif r.coef < 1 and r.coef > 0 then cls = "coef-less-1"
elseif r.coef == 0 then cls = "coef-0"
end
table.insert(html,
string.format([[<div class="shuxing" style="display: inline-block;background: #36c;overflow: hidden;position:relative;width: 50px;height: 59px;box-shadow: 0 0 2px #000;margin:2px;border-radius: 4px;"><div class="shuxingi" style="margin-left: 11px;margin-top: 8px;">%s</div><div class="%s" style="position: absolute;bottom: -2px;left:0px;font-size:12px;color:#fff;font-weight: bolder;text-shadow: #000 -1px 0 0,#763c12 0 -1px 0,#5d2b08 1px 0 0,#1d1515 0 1px 0;width: 50px;display: inline-block;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;line-height:14px;padding:2px 0px;"><center><b color="#fff">%.3f</b></center></div></div>]],img, cls, r.coef))
end
table.insert(html, "</div>")
return table.concat(html, "\n")
end
return render("攻击方克制", attackResults) .. render("防守方被克制", defenseResults)
end
unique(p.allAttributes)
return p