console
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>血染钟楼JSON文件生成工具by黑心恰克</title>
<style>
body {
font-family: Arial, sans-serif;
padding: 20px;
}
.role-list {
max-height: 300px;
overflow-y: auto;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: 20px;
}
.role-item {
margin-bottom: 10px;
}
button {
padding: 10px 20px;
font-size: 16px;
margin-top: 20px;
}
.selection-info {
margin-bottom: 20px;
font-size: 16px;
color: #333;
}
</style>
</head>
<body>
<h1>血染钟楼JSON文件生成工具</h1>
<div class="role-list" id="townsfolk-list">
<h2>镇民</h2>
</div>
<div class="role-list" id="outsiders-list">
<h2>外来者</h2>
</div>
<div class="role-list" id="minions-list">
<h2>爪牙</h2>
</div>
<div class="role-list" id="demons-list">
<h2>恶魔</h2>
</div>
<div class="selection-info" id="selection-info">
已选择:镇民 0 个,外来者 0 个,爪牙 0 个,恶魔 0 个
</div>
<button onclick="generateJson()">生成JSON文件</button>
<script>
const townsfolkRoles = [
{ chinese: "洗衣妇", english: "washerwoman" },
{ chinese: "图书管理员", english: "librarian" },
{ chinese: "调查员", english: "investigator" },
{ chinese: "厨师", english: "chef" },
{ chinese: "共情者", english: "empath" },
{ chinese: "占卜师", english: "fortune_teller" },
{ chinese: "送葬者", english: "undertaker" },
{ chinese: "僧侣", english: "monk" },
{ chinese: "守鸦人", english: "ravenkeeper" },
{ chinese: "贞洁者", english: "virgin" },
{ chinese: "猎手", english: "slayer" },
{ chinese: "士兵", english: "soldier" },
{ chinese: "镇长", english: "mayor" },
{ chinese: "祖母", english: "grandmother" },
{ chinese: "水手", english: "sailor" },
{ chinese: "侍女", english: "chambermaid" },
{ chinese: "驱魔人", english: "exorcist" },
{ chinese: "旅店老板", english: "innkeeper" },
{ chinese: "赌徒", english: "gambler" },
{ chinese: "造谣者", english: "gossip" },
{ chinese: "侍臣", english: "courtier" },
{ chinese: "教授", english: "professor" },
{ chinese: "吟游诗人", english: "minstrel" },
{ chinese: "茶艺师", english: "tea_lady" },
{ chinese: "和平主义者", english: "pacifist" },
{ chinese: "弄臣", english: "fool" },
{ chinese: "钟表匠", english: "clockmaker" },
{ chinese: "筑梦师", english: "dreamer" },
{ chinese: "舞蛇人", english: "snake_charmer" },
{ chinese: "数学家", english: "mathematician" },
{ chinese: "卖花女孩", english: "flowergirl" },
{ chinese: "城镇公告员", english: "town_crier" },
{ chinese: "神谕者", english: "oracle" },
{ chinese: "博学者", english: "savant" },
{ chinese: "女裁缝", english: "seamstress" },
{ chinese: "哲学家", english: "philosopher" },
{ chinese: "艺术家", english: "artist" },
{ chinese: "杂耍艺人", english: "juggler" },
{ chinese: "贤者", english: "sage" },
{ chinese: "半兽人", english: "lycanthrope" },
{ chinese: "报丧女妖", english: "banshee" },
{ chinese: "唱诗男孩", english: "choirboy" },
{ chinese: "传教士", english: "preacher" },
{ chinese: "村夫", english: "village_idiot" },
{ chinese: "工程师", english: "engineer" },
{ chinese: "贵族", english: "noble" },
{ chinese: "国王", english: "king" },
{ chinese: "将军", english: "general" },
{ chinese: "炼金术士", english: "alchemist" },
{ chinese: "魔术师", english: "magician" },
{ chinese: "农夫", english: "farmer" },
{ chinese: "女祭司", english: "high_priestess" },
{ chinese: "气球驾驶员", english: "balloonist" },
{ chinese: "骑士", english: "knight" },
{ chinese: "赏金猎人", english: "bounty_hunter" },
{ chinese: "失忆者", english: "amnesiac" },
{ chinese: "食人族", english: "cannibal" },
{ chinese: "事务官", english: "steward" },
{ chinese: "守夜人", english: "nightwatchman" },
{ chinese: "无神论者", english: "atheist" },
{ chinese: "戏法师", english: "alsaahir" },
{ chinese: "小精灵", english: "pixie" },
{ chinese: "修行者", english: "shugenja" },
{ chinese: "巡山人", english: "huntsman" },
{ chinese: "异教领袖", english: "cult_leader" },
{ chinese: "罂粟种植者", english: "poppy_grower" },
{ chinese: "渔夫", english: "fisherman" },
{ chinese: "杂技演员", english: "acrobat" }
];
const outsidersRoles = [
{ chinese: "管家", english: "butler" },
{ chinese: "酒鬼", english: "drunk" },
{ chinese: "陌客", english: "recluse" },
{ chinese: "圣徒", english: "saint" },
{ chinese: "修补匠", english: "tinker" },
{ chinese: "月之子", english: "moonchild" },
{ chinese: "莽夫", english: "goon" },
{ chinese: "疯子", english: "lunatic" },
{ chinese: "畸形秀演员", english: "mutant" },
{ chinese: "心上人", english: "sweetheart" },
{ chinese: "理发师", english: "barber" },
{ chinese: "呆瓜", english: "klutz" },
{ chinese: "告密者", english: "snitch" },
{ chinese: "解谜大师", english: "puzzlemaster" },
{ chinese: "狂热者", english: "zealot" },
{ chinese: "落难少女", english: "damsel" },
{ chinese: "帽匠", english: "hatter" },
{ chinese: "魔像", english: "golem" },
{ chinese: "食人魔", english: "ogre" },
{ chinese: "瘟疫医生", english: "plague_doctor" },
{ chinese: "异端分子", english: "heretic" },
{ chinese: "政客", english: "politician" }
];
const minionsRoles = [
{ chinese: "投毒者", english: "poisoner" },
{ chinese: "间谍", english: "spy" },
{ chinese: "红唇女郎", english: "scarlet_woman" },
{ chinese: "男爵", english: "baron" },
{ chinese: "教父", english: "godfather" },
{ chinese: "魔鬼代言人", english: "devil's_advocate" },
{ chinese: "刺客", english: "assassin" },
{ chinese: "主谋", english: "mastermind" },
{ chinese: "镜像双子", english: "evil_twin" },
{ chinese: "女巫", english: "witch" },
{ chinese: "洗脑师", english: "cerenovus" },
{ chinese: "麻脸巫婆", english: "pit-hag" },
{ chinese: "哥布林", english: "goblin" },
{ chinese: "寡妇", english: "widow" },
{ chinese: "街头风琴手", english: "organ_grinder" },
{ chinese: "精神病患者", english: "psychopath" },
{ chinese: "科学怪人", english: "boffin" },
{ chinese: "恐惧之灵", english: "fearmonger" },
{ chinese: "灵言师", english: "mezepheles" },
{ chinese: "提线木偶", english: "marionette" },
{ chinese: "维齐尔", english: "vizier" },
{ chinese: "巫师", english: "wizard" },
{ chinese: "限", english: "xaan" },
{ chinese: "鹰身女妖", english: "harpy" },
{ chinese: "炸弹人", english: "boomdandy" },
{ chinese: "召唤师", english: "summoner" }
];
const demonsRoles = [
{ chinese: "小恶魔", english: "imp" },
{ chinese: "僵怖", english: "zombuul" },
{ chinese: "普卡", english: "pukka" },
{ chinese: "沙巴洛斯", english: "shabaloth" },
{ chinese: "珀", english: "po" },
{ chinese: "方古", english: "fang_gu" },
{ chinese: "亡骨魔", english: "vigormortis" },
{ chinese: "诺-达鲺", english: "no_dashii" },
{ chinese: "涡流", english: "vortox" },
{ chinese: "奥赫", english: "ojo" },
{ chinese: "暴乱", english: "riot" },
{ chinese: "堤丰之首", english: "lord_of_typhon" },
{ chinese: "哈迪寂亚", english: "al-hadikhia" },
{ chinese: "军团", english: "legion" },
{ chinese: "卡扎力", english: "kazali" },
{ chinese: "利维坦", english: "leviathan" },
{ chinese: "痢蛭", english: "lleech" },
{ chinese: "小怪宝", english: "lil_monsta" },
{ chinese: "牙噶巴卜", english: "yaggababble" }
];
function loadRoles(roles, containerId) {
const roleList = document.getElementById(containerId);
roles.forEach(role => {
const div = document.createElement('div');
div.className = 'role-item';
div.innerHTML = `
<label>
<input type="checkbox" value="${role.english}" onchange="updateSelectionCount()"> ${role.chinese}
</label>
`;
roleList.appendChild(div);
});
}
function updateSelectionCount() {
const townsfolkCount = document.querySelectorAll('#townsfolk-list input[type="checkbox"]:checked').length;
const outsidersCount = document.querySelectorAll('#outsiders-list input[type="checkbox"]:checked').length;
const minionsCount = document.querySelectorAll('#minions-list input[type="checkbox"]:checked').length;
const demonsCount = document.querySelectorAll('#demons-list input[type="checkbox"]:checked').length;
const selectionInfo = document.getElementById('selection-info');
selectionInfo.textContent = `已选择:镇民 ${townsfolkCount} 个,外来者 ${outsidersCount} 个,爪牙 ${minionsCount} 个,恶魔 ${demonsCount} 个`;
}
loadRoles(townsfolkRoles, 'townsfolk-list');
loadRoles(outsidersRoles, 'outsiders-list');
loadRoles(minionsRoles, 'minions-list');
loadRoles(demonsRoles, 'demons-list');
function generateJson() {
const selectedRoles = [];
document.querySelectorAll('.role-list input[type="checkbox"]:checked').forEach(checkbox => {
selectedRoles.push({ id: checkbox.value });
});
if (selectedRoles.length === 0) {
alert("请至少选择一个角色!");
return;
}
const jsonData = JSON.stringify(selectedRoles, null, 4);
const blob = new Blob([jsonData], { type: 'application/json' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = '黑心恰克工具生成的简易Json文件.json';
a.click();
URL.revokeObjectURL(url);
alert("JSON文件已生成!");
}
</script>
</body>
</html>