"use strict";
game.import("mode", function (lib, game, ui, get, ai, _status) {
	return {
		name: "boss",
		start: function () {
			"step 0";
			var playback = localStorage.getItem(lib.configprefix + "playback");
			if (playback) {
				ui.create.me();
				ui.arena.style.display = "none";
				ui.system.style.display = "none";
				_status.playback = playback;
				localStorage.removeItem(lib.configprefix + "playback");
				var store = lib.db.transaction(["video"], "readwrite").objectStore("video");
				store.get(parseInt(playback)).onsuccess = function (e) {
					if (e.target.result) {
						game.playVideoContent(e.target.result.video);
					} else {
						alert("播放失败:找不到录像");
						game.reload();
					}
				};
				event.finish();
				return;
			}
			for (var i in lib.characterPack.mode_boss) {
				lib.character[i] = lib.characterPack.mode_boss[i];
			}
			for (var i in lib.skill) {
				if (lib.skill[i].changeSeat) {
					lib.skill[i] = {};
					if (lib.translate[i + "_info"]) {
						lib.translate[i + "_info"] = "此模式下不可用";
					}
				}
			}
			lib.translate.restart = "返回";
			lib.init.css(lib.assetURL + "layout/mode", "boss");
			game.delay(0.1);
			"step 1";
			var bosslist = ui.create.div("#bosslist.hidden");
			event.bosslist = bosslist;
			lib.setScroll(bosslist);
			// bosslist.ontouchmove = ui.click.touchScroll;
			// bosslist.style.WebkitOverflowScrolling='touch';
			if (!lib.config.touchscreen && lib.config.mousewheel) {
				bosslist._scrollspeed = 30;
				bosslist._scrollnum = 10;
				bosslist.onmousewheel = ui.click.mousewheel;
			}
			// var bosslistlinks={};
			// var toggleBoss=function(bool){
			//		game.saveConfig(this._link.config._name,bool,true);
			//		var node=bosslistlinks[this._link.config._name];
			//		if(bool){
			//			node.style.display='';
			//		}
			//		else{
			//			node.style.display='none';
			//		}
			// };
			var onpause = function () {
				ui.window.classList.add("bosspaused");
			};
			var onresume = function () {
				ui.window.classList.remove("bosspaused");
			};
			game.onpause = onpause;
			game.onpause2 = onpause;
			game.onresume = onresume;
			game.onresume2 = onresume;
			ui.create.div(bosslist);

			event.current = null;
			var list = [];
			if (lib.storage.current == undefined) lib.storage.current = "boss_hundun";
			for (var i in lib.character) {
				var info = lib.character[i];
				if (info.isBoss) {
					// var cfg=i+'_bossconfig';
					// if(get.config(cfg)==undefined){
					//		game.saveConfig(cfg,true,true);
					// }
					// lib.translate[cfg+'_config']=lib.translate[i];
					// lib.mode.boss.config[cfg]={
					//		name:get.translation(i),
					//		onclick:toggleBoss,
					//		init:true,
					// }
					var player = ui.create.player(bosslist).init(i);
					if (lib.characterPack.mode_boss[i] && get.config(i + "_boss_config") == false) {
						player.style.display = "none";
					}
					if (player.hp == 0) {
						player.node.hp.style.display = "none";
					}
					list.push(player);
					player.node.hp.classList.add("text");
					player.node.hp.dataset.condition = "";
					player.node.hp.innerHTML = info[2];
					if (info[2] == Infinity) {
						player.node.hp.innerHTML = "∞";
					}
					player.setIdentity(player.name);
					player.node.identity.dataset.color = info[5];
					// bosslistlinks[cfg]=player;
					player.classList.add("bossplayer");

					if (lib.storage.current == i) {
						event.current = player;
						player.classList.add("highlight");
						if (!lib.config.continue_name_boss && lib.boss[i] && lib.boss[i].control) {
							_status.bosschoice = lib.boss[i].control();
							_status.bosschoice.name = i;
							_status.bosschoice.link = lib.boss[i].controlid || i;
						}
					}

					// if(!get.config(cfg)){
					//		player.style.display='none';
					// }
				}
			}
			if (!list.length) {
				alert("没有可挑战的BOSS");
				event.finish();
				lib.init.onfree();
				_status.over = true;
				return;
			}
			if (!event.current) {
				event.current = bosslist.childNodes[1];
				event.current.classList.add("highlight");
			}
			ui.create.div(bosslist);
			ui.create.cardsAsync();
			game.finishCards();
			game.addGlobalSkill("autoswap");
			ui.arena.setNumber(8);
			ui.control.style.transitionProperty = "opacity";
			ui.control.classList.add("bosslist");
			setTimeout(function () {
				ui.control.style.transitionProperty = "";
			}, 1000);

			ui.window.appendChild(bosslist);

			setTimeout(function () {
				if (event.current) {
					var left = event.current.offsetLeft - (ui.window.offsetWidth - 180) / 2;
					if (bosslist.scrollLeft < left) {
						bosslist.scrollLeft = left;
					}
				}
				bosslist.show();
			}, 200);
			game.me = ui.create.player();
			if (lib.config.continue_name_boss) {
				event.noslide = true;
				lib.init.onfree();
			} else {
				game.chooseCharacter(function (target) {
					if (event.current) {
						event.current.classList.remove("highlight");
					}
					event.current = target;
					game.save("current", target.name);
					target.classList.add("highlight");
					if (_status.bosschoice) {
						var name = target.name;
						if (lib.boss[target.name] && lib.boss[target.name].controlid) {
							name = lib.boss[target.name].controlid;
						}
						if (_status.bosschoice.link != name) {
							lib.boss[_status.bosschoice.name].control("cancel", _status.bosschoice);
							_status.bosschoice.classList.remove("disabled");
							_status.bosschoice.close();
							delete _status.bosschoice;
						} else {
							return;
						}
					}
					if (lib.boss[target.name] && lib.boss[target.name].control) {
						_status.createControl = ui.control.firstChild;
						_status.bosschoice = lib.boss[target.name].control();
						_status.bosschoice.name = target.name;
						_status.bosschoice.link = lib.boss[target.name].controlid || target.name;
						if (ui.cheat2 && ui.cheat2.dialog == _status.event.dialog) {
							_status.bosschoice.classList.add("disabled");
						}
						delete _status.createControl;
					}
				});
			}
			if (lib.config.test_game) {
				event.current.classList.remove("highlight");
				if (event.current.nextSibling && event.current.nextSibling.classList.contains("player")) {
					event.current = event.current.nextSibling;
				} else {
					event.current = event.current.parentNode.childNodes[1];
				}
				game.save("current", event.current.name);
			}
			"step 2";
			game.bossinfo = lib.boss.global;
			for (var i in lib.boss[event.current.name]) {
				game.bossinfo[i] = lib.boss[event.current.name][i];
			}

			setTimeout(function () {
				ui.control.classList.remove("bosslist");
			}, 500);
			var boss = ui.create.player();
			boss.getId();
			game.boss = boss;
			boss.init(event.current.name);
			boss.side = true;
			if (!event.noslide) {
				var rect = event.current.getBoundingClientRect();
				boss.addTempClass("bossing");
				boss.node.hp.addTempClass("start");
				boss.bossinginfo = [rect.left + rect.width / 2, rect.top + rect.height / 2];
				boss.style.transition = "all 0s";
				boss.node.equips.style.opacity = "0";
			} else {
				boss.addTempClass("start");
			}
			boss.setIdentity("zhu");
			boss.identity = "zhu";
			if (lib.config.continue_name_boss) {
				result = lib.config.continue_name_boss;
				game.saveConfig("continue_name_boss");
			}
			for (var i = 0; i < result.links.length; i++) {
				var player = ui.create.player();
				player.getId();
				player.init(result.links[i]).addTempClass("start");
				player.setIdentity("cai");
				player.identity = "cai";
				player.side = false;
				game.players.push(player);
				if (result.boss) {
					if (game.bossinfo.minion) {
						player.dataset.position = i + 3;
					} else {
						player.dataset.position = (i + 1) * 2;
					}
				} else {
					player.dataset.position = i + 1;
				}
				ui.arena.appendChild(player);
			}
			if (result.boss) {
				game.players.unshift(boss);
				boss.dataset.position = 0;
			} else {
				game.players.push(boss);
				boss.dataset.position = 7;
			}
			if (game.bossinfo.minion) {
				if (!result.boss) {
					boss.dataset.position = 6;
				}
				for (var i in game.bossinfo.minion) {
					var player = ui.create.player();
					player.getId();
					player.init(game.bossinfo.minion[i]);
					if (boss.bossinginfo) {
						player.addTempClass("bossing");
						player.node.hp.addTempClass("start");
						player.style.transition = "all 0s";
					} else {
						player.addTempClass("start");
					}
					player.setIdentity("zhong");
					player.identity = "zhong";
					player.side = true;
					game.players.push(player);
					var num = parseInt(i);
					if (result.boss) {
						player.dataset.position = num - 1;
					} else {
						if (num == 2) {
							player.dataset.position = 7;
						} else {
							player.dataset.position = num - 3;
						}
					}
					ui.arena.appendChild(player);
					if (boss.bossinginfo) {
						var rect = player.getBoundingClientRect();
						player.style.transform =
							"translate(" +
							(boss.bossinginfo[0] - rect.left - rect.width / 2) +
							"px," +
							(boss.bossinginfo[1] - rect.top - rect.height / 2) +
							"px) scale(1.1)";
						ui.refresh(player);
						player.style.transition = "";
						player.style.transform = "";
					}
				}
			}
			ui.create.me();
			ui.fakeme = ui.create.div(".fakeme.avatar", ui.me);
			if (game.me !== boss) {
				game.singleHandcard = true;
				ui.arena.classList.add("single-handcard");
				ui.window.classList.add("single-handcard");
				game.onSwapControl();

				if (lib.config.show_handcardbutton) {
					lib.setPopped(
						ui.create.system("手牌", null, true),
						function () {
							var uiintro = ui.create.dialog("hidden");
							var players = game.players.concat(game.dead);
							for (var i = 0; i < players.length; i++) {
								if (players[i].side == game.me.side && players[i] != game.me) {
									uiintro.add(get.translation(players[i]));
									var cards = players[i].getCards("h");
									if (cards.length) {
										uiintro.addSmall(cards, true);
									} else {
										uiintro.add("(无)");
									}
								}
							}
							return uiintro;
						},
						220
					);
				}
			} else {
				ui.fakeme.style.display = "none";
			}
			if (game.bossinfo.chongzheng) {
				lib.setPopped(
					ui.create.system("重整", null, true),
					function () {
						var uiintro = ui.create.dialog("hidden");

						uiintro.add("重整");
						var table = ui.create.div(".bosschongzheng");

						var tr,
							td,
							added = false;
						for (var i = 0; i < game.dead.length; i++) {
							if (typeof game.dead[i].storage.boss_chongzheng !== "number") continue;
							added = true;
							tr = ui.create.div(table);
							td = ui.create.div(tr);
							td.innerHTML = get.translation(game.dead[i]);
							td = ui.create.div(tr);
							if (game.dead[i].maxHp > 0) {
								td.innerHTML =
									"剩余" +
									(game.bossinfo.chongzheng - game.dead[i].storage.boss_chongzheng) +
									"回合";
							} else {
								td.innerHTML = "无法重整";
							}
						}
						if (!added) {
							uiintro.add('<div class="text center">(无重整角色)</div>');
							uiintro.add(ui.create.div(".placeholder.slim"));
						} else {
							uiintro.add(table);
						}
						return uiintro;
					},
					180
				);
			}
			ui.single_swap = ui.create.system(
				"换人",
				function () {
					var players = get.players(game.me);
					players.remove(game.boss);
					if (players.length > 1) {
						if (ui.auto.classList.contains("hidden")) {
							game.me.popup("请稍后换人");
							return;
						}
						if (_status.event.isMine()) {
							ui.click.auto();
							setTimeout(function () {
								ui.click.auto();
							}, 500);
						}
						game.modeSwapPlayer(players[1]);
					}
				},
				true
			);
			if (get.config("single_control") || game.me == game.boss) {
				ui.single_swap.style.display = "none";
			}

			ui.arena.appendChild(boss);
			if (boss.bossinginfo) {
				var rect = boss.getBoundingClientRect();
				boss.style.transform =
					"translate(" +
					(boss.bossinginfo[0] - rect.left - rect.width / 2) +
					"px," +
					(boss.bossinginfo[1] - rect.top - rect.height / 2) +
					"px) scale(1.1)";
				ui.refresh(boss);
				boss.style.transition = "";
				boss.style.transform = "";
				delete boss.bossinginfo;
				setTimeout(function () {
					boss.node.equips.style.opacity = "";
				}, 500);
			}

			event.bosslist.delete();

			game.arrangePlayers();
			for (var i = 0; i < game.players.length; i++) {
				game.players[i].node.action.innerHTML = "行动";
			}

			var players = get.players(lib.sort.position);
			var info = [];
			for (var i = 0; i < players.length; i++) {
				info.push({
					name: players[i].name1,
					identity: players[i].identity,
					position: players[i].dataset.position,
				});
			}
			(_status.videoInited = true), (info.boss = game.me == game.boss);
			game.addVideo("init", null, info);
			if (game.bossinfo.init) {
				game.bossinfo.init();
			}
			delete lib.boss;
			"step 3";
			if (get.config("single_control")) {
				for (var i = 0; i < game.players.length; i++) {
					if (game.players[i].side == game.me.side) {
						game.addRecentCharacter(game.players[i].name);
					}
				}
			} else {
				game.addRecentCharacter(game.me.name);
			}
			event.trigger("gameStart");
			game.gameDraw(game.boss, game.bossinfo.gameDraw || 4);
			game.bossPhaseLoop();
			setTimeout(function () {
				ui.updatehl();
			}, 200);
		},
		element: {
			player: {
				dieAfter: function () {
					if (this != game.boss) {
						this.storage.boss_chongzheng = 0;
					}
					if (game.bossinfo.checkResult && game.bossinfo.checkResult(this) === false) {
						return;
					}
					if (
						this == game.boss ||
						!game.hasPlayer(function (current) {
							return !current.side;
						}, true)
					) {
						game.checkResult();
					}
				},
			},
		},
		card: {
			niaobaidaowenha: {
				type: "equip",
				subtype: "equip5",
				skills: ["niaobaidaowenha_skill"],
				modeimage: "boss",
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			goujiangdesidai: {
				type: "equip",
				subtype: "equip1",
				distance: { attackFrom: -6 },
				skills: ["goujiangdesidai_skill"],
				modeimage: "boss",
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			shenzhixiunvfu: {
				type: "equip",
				subtype: "equip2",
				modeimage: "boss",
				fullskin: true,
			},
			gubuzifeng: {
				type: "trick",
				fullskin: true,
				modeimage: "boss",
				enable: true,
				filterTarget: function (card, player, target) {
					return target != player;
				},
				content: function () {
					target.addTempSkill("gubuzifeng_disable", { player: "phaseAfter" });
					var skills = target.getSkills(null, false);
					for (var i = 0; i < skills.length; i++) {
						if (get.info(skills[i]).charlotte) skills.splice(i--, 1);
					}
					if (skills.length) {
						target.storage.gubuzifeng_disable.push(skills.randomGet());
						target.disableSkill("gubuzifeng_disable", target.storage.gubuzifeng_disable);
					}
				},
				ai: {
					order: 12,
					result: {
						target: function (player, target) {
							return -2;
						},
					},
				},
			},
			lingsheji: {
				type: "equip",
				subtype: "equip5",
				skills: ["lingsheji"],
				modeimage: "boss",
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			shanrangzhaoshu: {
				type: "equip",
				subtype: "equip5",
				skills: ["shanrangzhaoshu"],
				modeimage: "boss",
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			xingtianpojunfu: {
				type: "equip",
				subtype: "equip1",
				distance: { attackFrom: -3 },
				skills: ["noda_axe"],
				modeimage: "boss",
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			jinwuluorigong: {
				type: "equip",
				subtype: "equip1",
				skills: ["iwasawa_crowbow"],
				modeimage: "boss",
				distance: { attackFrom: -8 },
				ai: {
					basic: {
						equipValue: 7.5,
					},
				},
				fullskin: true,
			},
			boss_mengpohuihun: {
				mode: ["boss"],
				type: "trick",
				modeimage: "boss",
				fullskin: true,
				selectTarget: -1,
				enable: true,
				toself: true,
				multitarget: true,
				global: ["boss_mengpohuihun1"],
				modTarget: true,
				filterTarget: function (card, player, target) {
					return player == target;
				},
				content: function () {
					game.countPlayer2(function (current) {
						current.enableSkill("boss_wanghun");
					});
				},
				ai: {
					basic: {
						order: function () {
							return 11;
						},
						useful: [3, 1],
						value: 10,
					},
					result: {
						player: function (player, target) {
							if (player == game.boss) {
								return -2;
							} else {
								return 5;
							}
						},
					},
				},
			},
			sadouchengbing: {
				fullskin: true,
				type: "trick",
				enable: true,
				selectTarget: -1,
				cardcolor: "red",
				toself: true,
				modeimage: "boss",
				filterTarget: function (card, player, target) {
					return target == player;
				},
				modTarget: true,
				content: function () {
					var num = Math.min(5, target.maxHp);
					if (target.group == "shen") {
						target.draw(num);
					} else {
						var nh = target.countCards("h");
						if (nh < num) {
							target.draw(num - nh);
						}
					}
				},
				ai: {
					basic: {
						order: 7.2,
						useful: 4.5,
						value: 9.2,
					},
					result: {
						target: function (player, target) {
							var num = Math.min(5, target.maxHp);
							if (target.group == "shen") {
								return Math.sqrt(num);
							} else {
								var nh = target.countCards("h");
								if (target == player && player.countCards("h", "sadouchengbing")) {
									nh--;
								}
								if (nh < num) {
									return Math.sqrt(num - nh);
								}
							}
							return 0;
						},
					},
					tag: {
						draw: 2,
					},
				},
			},
			yihuajiemu: {
				type: "trick",
				fullskin: true,
				modeimage: "boss",
				enable: true,
				filterTarget: function (card, player, target) {
					return target != player && target.countCards("he");
				},
				content: function () {
					"step 0";
					if (target.hasSha()) {
						target.chooseToUse(function (card, player, event) {
							return get.name(card) == "sha" && lib.filter.filterCard.apply(this, arguments);
						}, "使用一张杀,或交给" + get.translation(player) + "两张牌");
					} else {
						event.directfalse = true;
					}
					"step 1";
					var nh = target.countCards("he");
					if ((event.directfalse || !result.bool) && nh) {
						if (nh <= 2) {
							event.directcards = true;
						} else {
							target.chooseCard("he", 2, true, "将两张牌交给" + get.translation(player));
						}
					} else {
						event.finish();
					}
					"step 2";
					if (event.directcards) {
						target.give(target.getCards("he"), player);
					} else if (result.bool && result.cards && result.cards.length) {
						target.give(result.cards, player);
					}
				},
				ai: {
					order: 7,
					result: {
						target: function (player, target) {
							if (target.hasSha() && _status.event.getRand() < 0.5) return 1;
							return -2;
						},
					},
				},
			},
			chiyanzhenhunqin: {
				type: "equip",
				fullskin: true,
				subtype: "equip1",
				modeimage: "boss",
				distance: { attackFrom: -3 },
				skills: ["chiyanzhenhunqin"],
				nomod: true,
				nopower: true,
				unique: true,
				ai: {
					equipValue: 5,
				},
			},
			juechenjinge: {
				type: "equip",
				fullskin: true,
				modeimage: "boss",
				subtype: "equip3",
				skills: ["juechenjinge"],
				nomod: true,
				nopower: true,
				unique: true,
				ai: {
					equipValue: 9,
				},
			},
			xiuluolianyuji: {
				type: "equip",
				fullskin: true,
				subtype: "equip1",
				modeimage: "boss",
				distance: { attackFrom: -3 },
				skills: ["xiuluolianyuji"],
				nomod: true,
				nopower: true,
				unique: true,
				ai: {
					equipValue: 9,
				},
			},
			longfenghemingjian: {
				type: "equip",
				fullskin: true,
				modeimage: "boss",
				subtype: "equip1",
				distance: { attackFrom: -2 },
				skills: ["longfenghemingjian"],
				nomod: true,
				nopower: true,
				unique: true,
				ai: {
					equipValue: 9,
				},
			},
			qicaishenlu: {
				fullskin: true,
				modeimage: "boss",
				type: "equip",
				subtype: "equip4",
				distance: { globalFrom: -1 },
				skills: ["qicaishenlu"],
				nomod: true,
				nopower: true,
				unique: true,
				ai: {
					equipValue: 9,
				},
			},
			honghuangzhili: {
				type: "trick",
				enable: true,
				fullskin: true,
				filterTarget: true,
				modeimage: "boss",
				content: function () {
					if (target.group == "shen") {
						target.addSkill("honghuangzhili");
						if (target.countCards("he")) {
							player.gainPlayerCard(target, "he", true);
						}
					} else {
						target.turnOver();
					}
				},
				ai: {
					order: 4,
					value: 10,
					result: {
						target: function (player, target) {
							if (target.group == "shen") {
								if (target.countCards("he")) return -2;
								return 0;
							} else {
								if (target.isTurnedOver()) return 4;
								return -3;
							}
						},
					},
				},
			},
		},
		characterPack: {
			mode_boss: {
				boss_hundun: [
					"male",
					"qun",
					25,
					["boss_xiongshou", "boss_wuzang", "boss_xiangde", "boss_yinzei", "boss_yinzei_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_qiongqi: [
					"male",
					"qun",
					"20/25",
					["boss_xiongshou", "boss_zhue", "boss_futai", "boss_yandu", "boss_yandu_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_taotie: [
					"male",
					"qun",
					20,
					["boss_xiongshou", "boss_tanyu", "boss_cangmu", "boss_jicai", "boss_jicai_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_taowu: [
					"male",
					"qun",
					25,
					[
						"boss_xiongshou",
						"boss_minwan",
						"boss_nitai",
						"boss_luanchang",
						"boss_luanchang_switch",
					],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_zhuyin: [
					"male",
					"qun",
					4,
					["boss_xiongshou"],
					["qun", "hiddenboss", "bossallowed"],
					"qun",
				],

				boss_xiangliu: [
					"male",
					"qun",
					25,
					["boss_yaoshou", "boss_duqu", "boss_jiushou", "boss_echou", "boss_echou_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_zhuyan: [
					"male",
					"qun",
					"25/30",
					["boss_yaoshou", "boss_bingxian", "boss_juyuan", "boss_xushi", "boss_xushi_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_bifang: [
					"male",
					"qun",
					25,
					["boss_yaoshou", "boss_zhaohuo", "boss_honglianx", "boss_yanyu", "boss_yanyu_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_yingzhao: [
					"male",
					"qun",
					25,
					["boss_yaoshou", "boss_fengdong", "boss_xunyou", "boss_sipu", "boss_sipu_switch"],
					["qun", "boss", "bossallowed"],
					"qun",
				],

				boss_qingmushilian: [
					"male",
					"",
					0,
					["boss_qingmu", "boss_qingmu_intro1", "boss_qingmu_intro2", "boss_qingmu_intro3"],
					["boss"],
					"wu",
				],
				boss_qinglong: [
					"male",
					"qun",
					4,
					["boss_shenyi", "releiji", "boss_qingmu2"],
					["wu", "hiddenboss", "bossallowed"],
				],
				boss_mushengoumang: [
					"male",
					"shen",
					5,
					["boss_shenyi", "boss_buchun", "boss_qingmu3"],
					["wu", "hiddenboss", "bossallowed"],
				],
				boss_shujing: ["female", "shen", 2, ["boss_cuidu"], ["wu", "hiddenboss", "bossallowed"]],
				boss_taihao: [
					"male",
					"shen",
					6,
					["boss_shenyi", "boss_shenen", "boss_qingyi"],
					["wu", "hiddenboss", "bossallowed"],
				],

				boss_chiyanshilian: [
					"male",
					"",
					0,
					["boss_chiyan", "boss_chiyan_intro1", "boss_chiyan_intro2", "boss_chiyan_intro3"],
					["boss"],
					"zhu",
				],
				boss_zhuque: [
					"female",
					"shen",
					4,
					["boss_shenyi", "boss_fentian", "boss_chiyan2"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_huoshenzhurong: [
					"male",
					"shen",
					5,
					["boss_shenyi", "boss_xingxia", "boss_chiyan3"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_yanling: [
					"male",
					"shen",
					4,
					["boss_huihuo", "boss_furan"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_yandi: [
					"male",
					"shen",
					6,
					["boss_shenyi", "boss_shenen", "boss_chiyi"],
					["shu", "hiddenboss", "bossallowed"],
				],

				boss_baimangshilian: [
					"male",
					"",
					0,
					["boss_baimang", "boss_baimang_intro1", "boss_baimang_intro2", "boss_baimang_intro3"],
					["boss"],
					"qun",
				],
				boss_baihu: [
					"male",
					"shen",
					4,
					["boss_shenyi", "boss_kuangxiao", "boss_baimang2"],
					["qun", "hiddenboss", "bossallowed"],
				],
				boss_jinshenrushou: [
					"male",
					"shen",
					5,
					["boss_shenyi", "boss_xingqiu", "boss_baimang3"],
					["qun", "hiddenboss", "bossallowed"],
				],
				boss_mingxingzhu: [
					"female",
					"shen",
					3,
					["boss_qingzhu", "boss_jiazu", "boss_jiding"],
					["qun", "hiddenboss", "bossallowed"],
				],
				boss_shaohao: [
					"male",
					"shen",
					6,
					["boss_shenyi", "boss_shenen", "boss_baiyi"],
					["qun", "hiddenboss", "bossallowed"],
				],

				boss_xuanlinshilian: [
					"male",
					"",
					0,
					["boss_xuanlin", "boss_xuanlin_intro1", "boss_xuanlin_intro2", "boss_xuanlin_intro3"],
					["boss"],
					"wei",
				],
				boss_xuanwu: [
					"male",
					"shen",
					4,
					["boss_shenyi", "boss_lingqu", "boss_xuanlin2"],
					["wei", "hiddenboss", "bossallowed"],
				],
				boss_shuishengonggong: [
					"male",
					"shen",
					5,
					["boss_shenyi", "boss_juehong", "boss_xuanlin3"],
					["wei", "hiddenboss", "bossallowed"],
				],
				boss_shuishenxuanming: [
					"female",
					"shen",
					5,
					["boss_shenyi", "boss_zirun", "boss_xuanlin3"],
					["wei", "hiddenboss", "bossallowed"],
				],
				boss_zhuanxu: [
					"male",
					"shen",
					6,
					["boss_shenyi", "boss_shenen", "boss_zaoyi"],
					["wei", "hiddenboss", "bossallowed"],
				],

				boss_zhuoguiquxie: [
					"male",
					"",
					0,
					[
						"boss_bianshen",
						"boss_bianshen_intro1",
						"boss_bianshen_intro2",
						"boss_bianshen_intro3",
						"boss_bianshen_intro4",
					],
					["boss"],
					"shu",
				],
				boss_nianshou_heti: [
					"male",
					"shen",
					12,
					["boss_nianrui", "boss_mengtai", "boss_nbianshen", "boss_nbianshenx"],
					["shu", "boss", "bossallowed"],
					"shu",
				],
				boss_nianshou_jingjue: [
					"male",
					"shen",
					12,
					["boss_nianrui", "boss_mengtai", "boss_jingjue", "boss_nbianshen"],
					["shu", "hiddenboss", "bossallowed"],
					"shu",
				],
				boss_nianshou_renxing: [
					"male",
					"shen",
					12,
					["boss_nianrui", "boss_mengtai", "boss_renxing", "boss_nbianshen"],
					["shu", "hiddenboss", "bossallowed"],
					"shu",
				],
				boss_nianshou_ruizhi: [
					"male",
					"shen",
					12,
					["boss_nianrui", "boss_mengtai", "boss_ruizhi", "boss_nbianshen"],
					["shu", "hiddenboss", "bossallowed"],
					"shu",
				],
				boss_nianshou_baonu: [
					"male",
					"shen",
					12,
					["boss_nianrui", "boss_mengtai", "boss_nbaonu", "boss_shouyi", "boss_nbianshen"],
					["shu", "hiddenboss", "bossallowed"],
					"shu",
				],

				boss_baiwuchang: [
					"male",
					"shen",
					9,
					["boss_baolian", "boss_qiangzheng", "boss_zuijiu", "juece", "boss_bianshen4"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_heiwuchang: [
					"male",
					"shen",
					9,
					["boss_guiji", "boss_taiping", "boss_suoming", "boss_xixing", "boss_bianshen4"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_luocha: [
					"female",
					"shen",
					12,
					["boss_modao", "boss_yushou", "yizhong", "boss_moyany"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_yecha: [
					"male",
					"shen",
					11,
					["boss_modao", "boss_mojian", "bazhen", "boss_danshu"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_niutou: [
					"male",
					"shen",
					7,
					["boss_baolian", "niepan", "boss_manjia", "boss_xiaoshou", "boss_bianshen3"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_mamian: [
					"male",
					"shen",
					6,
					["boss_guiji", "fankui", "boss_lianyu", "juece", "boss_bianshen3"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_chi: [
					"male",
					"shen",
					5,
					["boss_guimei", "boss_didong", "boss_shanbeng", "boss_bianshen2"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_mo: [
					"female",
					"shen",
					5,
					["boss_guimei", "enyuan", "boss_beiming", "boss_bianshen2"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_wang: [
					"male",
					"shen",
					5,
					["boss_guimei", "boss_luolei", "huilei", "boss_bianshen2"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_liang: [
					"female",
					"shen",
					5,
					["boss_guimei", "boss_guihuo", "boss_minbao", "boss_bianshen2"],
					["shu", "hiddenboss", "bossallowed"],
				],

				boss_qinguangwang: [
					"male",
					"qun",
					3,
					["boss_panguan", "boss_juhun", "boss_wangxiang", "boss_newhuanren"],
					["shu", "boss", "bossallowed"],
					"shu",
				],
				boss_chujiangwang: [
					"male",
					"qun",
					4,
					["weimu", "refankui", "boss_bingfeng"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_songdiwang: [
					"male",
					"qun",
					4,
					["boss_heisheng", "boss_shengfu", "enyuan"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_wuguanwang: [
					"male",
					"qun",
					4,
					["boss_zhiwang", "boss_gongzheng", "boss_xuechi"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_yanluowang: [
					"male",
					"qun",
					4,
					["boss_tiemian", "boss_zhadao", "boss_zhuxin"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_bianchengwang: [
					"male",
					"qun",
					4,
					["boss_leizhou", "boss_leifu", "boss_leizhu"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_taishanwang: [
					"male",
					"qun",
					4,
					["boss_fudu", "boss_kujiu", "boss_renao"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_dushiwang: [
					"male",
					"qun",
					4,
					["boss_remen", "boss_zhifen", "boss_huoxing"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_pingdengwang: [
					"male",
					"qun",
					4,
					["boss_suozu", "boss_abi", "boss_pingdeng"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_zhuanlunwang: [
					"male",
					"qun",
					6,
					["boss_modao", "boss_lunhui", "boss_wangsheng", "boss_zlfanshi"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_mengpo: [
					"female",
					"qun",
					3,
					["boss_shiyou", "boss_wanghun", "boss_wangshi"],
					["shu", "hiddenboss", "bossallowed"],
				],
				boss_dizangwang: [
					"male",
					"qun",
					8,
					["boss_bufo", "boss_wuliang", "boss_dayuan", "boss_diting"],
					["shu", "hiddenboss", "bossallowed"],
				],
				//boss_shikieiki:['female','qun',8,['boss_yingzhong'],['qun','hiddenboss','bossallowed']],

				boss_lvbu1: [
					"male",
					"shen",
					8,
					["mashu", "wushuang", "boss_baonu", "boss_jingjia", "boss_aozhan"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_lvbu2: [
					"male",
					"shen",
					6,
					["mashu", "wushuang", "xiuluo", "shenwei", "shenji"],
					["qun", "hiddenboss", "bossallowed"],
					"qun",
				],
				boss_lvbu3: [
					"male",
					"shen",
					6,
					["wushuang", "shenqu", "jiwu"],
					["qun", "hiddenboss", "bossallowed"],
					"qun",
				],

				boss_caocao: [
					"male",
					"shen",
					12,
					["boss_guixin", "xiongcai"],
					["wei", "boss", "bossallowed"],
					"wei",
				],
				boss_guojia: [
					"male",
					"shen",
					4,
					["tiandu", "boss_guimou", "boss_yuance", "boss_qizuo"],
					["wei", "boss", "bossallowed"],
					"zhu",
				],
				boss_zhangchunhua: [
					"female",
					"shen",
					4,
					["jueqing", "boss_wuxin", "shangshix"],
					["wei", "boss", "bossallowed"],
					"wei",
				],
				boss_zhenji: [
					"female",
					"shen",
					4,
					["tashui", "lingbo", "jiaoxia", "fanghua"],
					["wei", "boss", "bossallowed"],
					"wei",
				],

				boss_liubei: [
					"male",
					"shen",
					8,
					["xiaoxiong", "boss_zhangwu"],
					["shu", "boss", "bossallowed"],
					"qun",
				],
				boss_zhugeliang: [
					"male",
					"shen",
					Infinity,
					["xiangxing", "yueyin", "fengqi", "gaiming"],
					["shu", "boss", "bossallowed"],
					"qun",
				],
				boss_huangyueying: [
					"female",
					"shen",
					4,
					["boss_gongshen", "boss_jizhi", "qicai", "boss_guiyin"],
					["shu", "boss", "bossallowed"],
					"wei",
				],
				boss_pangtong: [
					"male",
					"shen",
					4,
					["boss_tianyu", "qiwu", "niepan", "boss_yuhuo"],
					["shu", "boss", "bossallowed"],
					"zhu",
				],

				boss_zhouyu: [
					"male",
					"shen",
					6,
					["huoshen", "boss_honglian", "boss_xianyin"],
					["wu", "boss", "bossallowed"],
					"zhu",
				],

				boss_caiwenji: [
					"female",
					"shen",
					4,
					["beige", "boss_hujia", "boss_guihan"],
					["qun", "boss", "bossallowed"],
					"wei",
				],
				boss_zhangjiao: [
					"male",
					"shen",
					8,
					["boss_leiji", "tiandao", "jidian"],
					["qun", "boss", "bossallowed"],
					"shu",
				],
				boss_zuoci: ["male", "shen", 0, ["huanhua"], ["qun", "boss", "bossallowed"], "shu"],

				boss_diaochan: [
					"female",
					"shen",
					4,
					["fengwu", "yunshen", "lianji", "boss_wange", "yuehun"],
					["qun", "boss", "bossallowed"],
					"qun",
				],
				boss_huatuo: [
					"male",
					"shen",
					6,
					["chulao", "mazui", "boss_shengshou", "guizhen", "wuqin"],
					["qun", "boss", "bossallowed"],
					"wu",
				],
				boss_dongzhuo: [
					"male",
					"shen",
					20,
					["jiuchi", "boss_qiangzheng", "boss_baolin"],
					["qun", "boss", "bossallowed"],
					"shu",
				],

				boss_sunce: [
					"male",
					"shen",
					"1/8",
					["boss_jiang", "boss_hunzi", "boss_hunyou", "boss_taoni"],
					["qun", "boss", "bossallowed", "InitFilter:noZhuHp:noZhuSkill"],
					"wu",
				],

				// boss_nianshou:['male','shen',Infinity,['boss_nianrui','boss_qixiang','boss_damagecount'],['boss'],'shu'],
				// boss_yuji:['male','qun',8,[],['boss','bossallowed'],'nei'],
				// boss_shuijing:['male','qun',8,[],['boss','bossallowed'],'wei'],
				// boss_sunshangxiang:['male','qun',8,[],['boss','bossallowed'],'wei'],
			},
		},
		cardPack: {
			mode_boss: [
				"honghuangzhili",
				"sadouchengbing",
				"yihuajiemu",
				"chiyanzhenhunqin",
				"juechenjinge",
				"xiuluolianyuji",
				"longfenghemingjian",
				"qicaishenlu",
				"hongmianbaihuapao",
				"boss_mengpohuihun",
				"lingsheji",
				"shanrangzhaoshu",
				"jinwuluorigong",
				"xingtianpojunfu",
				"gubuzifeng",
			],
		},
		init: function () {
			for (var i in lib.characterPack.mode_boss) {
				if (lib.characterPack.mode_boss[i].isHiddenBoss) continue;
				lib.mode.boss.config[i + "_boss_config"] = {
					name: get.translation(i),
					init: true,
					unfrequent: true,
				};
			}
		},
		game: {
			reserveDead: true,
			addBossFellow: function (position, name) {
				var fellow = game.addFellow(position, name, "zoominanim");
				fellow.directgain(get.cards(4));
				fellow.side = true;
				fellow.identity = "zhong";
				fellow.setIdentity("zhong");
				game.addVideo("setIdentity", fellow, "zhong");
			},
			changeBoss: function (name, player) {
				if (!player) {
					if (game.additionaldead) {
						game.additionaldead.push(game.boss);
					} else {
						game.additionaldead = [game.boss];
					}
					player = game.boss;
					delete game.boss;
				}

				player.delete();
				game.players.remove(player);
				game.dead.remove(player);
				var boss = ui.create.player();
				boss.getId();
				boss.init(name);
				boss.side = true;
				game.addVideo("bossSwap", player, (game.boss ? "_" : "") + boss.name);
				boss.dataset.position = player.dataset.position;
				if (game.me == player) {
					game.swapControl(boss);
				}
				game.players.push(boss.addTempClass("zoominanim"));
				game.arrangePlayers();
				if (!game.boss) {
					game.boss = boss;
					boss.setIdentity("zhu");
					boss.identity = "zhu";
				} else {
					boss.setIdentity("zhong");
					boss.identity = "zhong";
				}
				ui.arena.appendChild(boss);
				boss.directgain(get.cards(4));
			},
			checkResult: function () {
				if (game.boss == game.me) {
					game.over(game.boss.isAlive());
				} else {
					game.over(!game.boss.isAlive());
				}
			},
			getVideoName: function () {
				var str = get.translation(game.me.name);
				if (game.me.name2) {
					str += "/" + get.translation(game.me.name2);
				}
				var str2 = "挑战";
				if (game.me != game.boss) {
					str2 += " - " + get.translation(game.boss);
				}
				var name = [str, str2];
				return name;
			},
			bossPhaseLoop: function () {
				var next = game.createEvent("phaseLoop");
				if (game.bossinfo.loopFirst) {
					next.player = game.bossinfo.loopFirst();
				} else {
					next.player = game.boss;
				}
				_status.looped = true;
				next.setContent(function () {
					"step 0";
					if (player.chongzheng) {
						player.chongzheng = false;
					} else if (player.isDead()) {
						if (player.hp < 0) player.hp = 0;
						player.storage.boss_chongzheng++;
						if (player.maxHp > 0 && game.bossinfo.chongzheng) {
							if (player.hp < player.maxHp) {
								player.hp++;
							} else if (player.countCards("h") < 4) {
								var card = get.cards()[0];
								var sort = lib.config.sort_card(card);
								var position = sort > 0 ? player.node.handcards1 : player.node.handcards2;
								card.fix();
								card.addTempClass("start");
								position.insertBefore(card, position.firstChild);
							}
							player.update();
							if (player.storage.boss_chongzheng >= game.bossinfo.chongzheng) {
								player.revive(player.hp);
							}
						}
						if (game.bossinfo.loopType == 2) {
							game.boss.chongzheng = true;
						}
					} else {
						if (player.identity == "zhu" && game.boss != player) {
							player = game.boss;
						}
						player.phase();
					}
					"step 1";
					if (game.bossinfo.loopType == 2) {
						_status.roundStart = true;
						if (event.player == game.boss) {
							if (!_status.last || _status.last.nextSeat == game.boss) {
								event.player = game.boss.nextSeat;
							} else {
								event.player = _status.last.nextSeat;
							}
						} else {
							_status.last = player;
							event.player = game.boss;
							if (player.nextSeat == game.boss) {
								delete _status.roundStart;
							}
						}
					} else {
						event.player = event.player.nextSeat;
					}
					event.goto(0);
				});
			},
			onSwapControl: function () {
				if (game.me == game.boss) return;
				game.addVideo("onSwapControl");
				var name = game.me.name;
				if (ui.fakeme && ui.fakeme.current != name) {
					ui.fakeme.current = name;
					if (ui.versushighlight && ui.versushighlight != game.me) {
						ui.versushighlight.classList.remove("current_action");
					}
					ui.versushighlight = game.me;
					game.me.classList.add("current_action");
					// game.me.line(ui.fakeme,{opacity:0.5,dashed:true});

					ui.fakeme.style.backgroundImage = game.me.node.avatar.style.backgroundImage;
					// ui.fakeme.style.backgroundSize='cover';
				}
				ui.updatehl();
			},
			modeSwapPlayer: function (player) {
				var bool = game.me == game.boss || player == game.boss;
				game.swapControl(player);
				game.onSwapControl();
				if (!bool) return;
				if (game.me == game.boss) {
					game.singleHandcard = false;
					ui.arena.classList.remove("single-handcard");
					ui.window.classList.remove("single-handcard");
					ui.fakeme.style.display = "none";
					game.me.dataset.position = 0;
					game.me.nextSeat.dataset.position = 2;
					game.me.nextSeat.nextSeat.dataset.position = 4;
					game.me.nextSeat.nextSeat.nextSeat.dataset.position = 6;
				} else {
					game.singleHandcard = true;
					ui.arena.classList.add("single-handcard");
					ui.window.classList.add("single-handcard");
					ui.fakeme.style.display = "";
					game.boss.dataset.position = 7;
					game.boss.nextSeat.dataset.position = 1;
					game.boss.nextSeat.nextSeat.dataset.position = 2;
					game.boss.nextSeat.nextSeat.nextSeat.dataset.position = 3;
					if (game.me && game.me.node.handcards2.childNodes.length) {
						while (game.me.node.handcards2.childNodes.length) {
							game.me.node.handcards1.appendChild(game.me.node.handcards2.firstChild);
						}
					}
				}
			},
			chooseCharacter: function (func) {
				var next = game.createEvent("chooseCharacter");
				next.showConfig = true;
				next.customreplacetarget = func;
				next.ai = function (player, list) {
					if (get.config("double_character")) {
						player.init(list[0], list[1]);
					} else {
						player.init(list[0]);
					}
				};
				next.setContent(function () {
					"step 0";
					var i;
					var list = [];
					event.list = list;
					for (i in lib.character) {
						if (lib.character[i].isMinskin) continue;
						if (lib.character[i].isBoss) continue;
						if (lib.character[i].isHiddenBoss) continue;
						if (lib.character[i].isAiForbidden) continue;
						if (lib.config.forbidboss.includes(i)) continue;
						if (lib.filter.characterDisabled(i)) continue;
						list.push(i);
					}
					list.randomSort();
					var dialog = ui.create.dialog("选择参战角色", "hidden");
					dialog.classList.add("fixed");
					ui.window.appendChild(dialog);
					dialog.classList.add("bosscharacter");
					dialog.classList.add("modeshortcutpause");
					dialog.classList.add("withbg");
					// dialog.add('0/3');
					dialog.add([list.slice(0, 20), "character"]);
					dialog.noopen = true;
					var next = game.me.chooseButton(dialog, true).set("onfree", true);
					next._triggered = null;
					next.custom.replace.target = event.customreplacetarget;
					next.selectButton = [3, 3];
					// next.custom.add.button=function(){
					//		if(ui.cheat2&&ui.cheat2.backup) return;
					//		_status.event.dialog.content.childNodes[1].innerHTML=
					//		ui.selected.buttons.length+'/3';
					// };
					event.changeDialog = function () {
						if (ui.cheat2 && ui.cheat2.dialog == _status.event.dialog) {
							return;
						}
						if (game.changeCoin) {
							game.changeCoin(-3);
						}
						list.randomSort();

						var buttons = ui.create.div(".buttons");
						var node = _status.event.dialog.buttons[0].parentNode;
						_status.event.dialog.buttons = ui.create.buttons(
							list.slice(0, 20),
							"character",
							buttons
						);
						_status.event.dialog.content.insertBefore(buttons, node);
						buttons.addTempClass("start");
						node.remove();

						game.uncheck();
						game.check();
					};
					ui.create.cheat = function () {
						_status.createControl = ui.cheat2 || event.asboss;
						ui.cheat = ui.create.control("更换", event.changeDialog);
						delete _status.createControl;
					};
					var createCharacterDialog = function () {
						event.dialogxx = ui.create.characterDialog();
						event.dialogxx.classList.add("bosscharacter");
						event.dialogxx.classList.add("withbg");
						event.dialogxx.classList.add("fixed");
						if (ui.cheat2) {
							ui.cheat2.addTempClass("controlpressdownx", 500);
							ui.cheat2.classList.remove("disabled");
						}
					};
					if (lib.onfree) {
						lib.onfree.push(createCharacterDialog);
					} else {
						createCharacterDialog();
					}
					ui.create.cheat2 = function () {
						_status.createControl = event.asboss;
						ui.cheat2 = ui.create.control("自由选将", function () {
							if (this.dialog == _status.event.dialog) {
								if (game.changeCoin) {
									game.changeCoin(10);
								}
								this.dialog.close();
								_status.event.dialog = this.backup;
								ui.window.appendChild(this.backup);
								delete this.backup;
								game.uncheck();
								game.check();
								if (ui.cheat) {
									ui.cheat.addTempClass("controlpressdownx", 500);
									ui.cheat.classList.remove("disabled");
								}
								if (_status.bosschoice) {
									_status.bosschoice.addTempClass("controlpressdownx", 500);
									_status.bosschoice.classList.remove("disabled");
								}
							} else {
								if (game.changeCoin) {
									game.changeCoin(-10);
								}
								this.backup = _status.event.dialog;
								_status.event.dialog.close();
								_status.event.dialog = _status.event.parent.dialogxx;
								this.dialog = _status.event.dialog;
								ui.window.appendChild(this.dialog);
								game.uncheck();
								game.check();
								if (ui.cheat) {
									ui.cheat.classList.add("disabled");
								}
								if (_status.bosschoice) {
									_status.bosschoice.classList.add("disabled");
								}
							}
						});
						if (lib.onfree) {
							ui.cheat2.classList.add("disabled");
						}
						delete _status.createControl;
					};
					if (!ui.cheat && get.config("change_choice")) ui.create.cheat();
					if (!ui.cheat2 && get.config("free_choose")) ui.create.cheat2();

					event.asboss = ui.create.control("应战", function () {
						event.boss = true;
						event.enemy = [];
						for (var i = 0; i < ui.selected.buttons.length; i++) {
							event.enemy.push(ui.selected.buttons[i].link);
							event.list.remove(ui.selected.buttons[i].link);
						}
						while (event.enemy.length < 3) {
							var name = event.list.randomRemove();
							if (lib.boss[lib.storage.current] && lib.boss[lib.storage.current].randchoice) {
								name = lib.boss[lib.storage.current].randchoice(name, event.enemy);
							}
							event.enemy.push(name);
						}
						game.uncheck();
						if (ui.confirm) {
							ui.confirm.close();
						}
						game.resume();
					});
					"step 1";
					if (ui.cheat) {
						ui.cheat.close();
						delete ui.cheat;
					}
					if (ui.cheat2) {
						ui.cheat2.close();
						delete ui.cheat2;
					}
					event.asboss.close();
					if (_status.bosschoice) {
						_status.bosschoice.close();
						delete _status.bosschoice;
					}
					if (event.boss) {
						event.result = {
							boss: true,
							links: event.enemy,
						};
					} else {
						event.result = {
							boss: false,
							links: result.links,
						};
						_status.coinCoeff = get.coinCoeff(result.links);
					}
				});
				return next;
			},
		},
		boss: {
			boss_qiongqi: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_xiangliu: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_zhuyan: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_bifang: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_yingzhao: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_hundun: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_taotie: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function () {
					return lib.boss.boss_taowu.randchoice.apply(this, arguments);
				},
				controlid: "shenwuzaishi",
				control: function () {
					return lib.boss.boss_taowu.control.apply(this, arguments);
				},
				init: function () {
					return lib.boss.boss_taowu.init.apply(this, arguments);
				},
			},
			boss_taowu: {
				chongzheng: 0,
				loopFirst: function () {
					return game.boss.nextSeat.nextSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				minion: {
					2: "boss_zhuyin",
					8: "boss_zhuyin",
				},
				randchoice: function (name, list) {
					if (Math.random() > 1 / 3) {
						return name;
					} else {
						var arr = [
							"shen_caocao",
							"shen_simayi",
							"shen_guanyu",
							"shen_zhugeliang",
							"shen_zhaoyun",
							"shen_zhouyu",
							"shen_lvmeng",
							"shen_lvbu",
							"shen_liubei",
							"shen_luxun",
							"shen_ganning",
							"ol_zhangliao",
							"shen_zhenji",
							"shen_caopi",
							"key_kagari",
							"key_shiki",
							"db_key_hina",
						];
						arr.removeArray(list);
						return arr.randomGet();
					}
				},
				controlid: "shenwuzaishi",
				control: function (type, control) {
					if (type == "cancel") {
						if (!control.classList.contains("glow")) return;
						var dialog = control.dialog;
						dialog.content.removeChild(control.backup1);
						dialog.buttons.removeArray(control.backup2);

						game.uncheck();
						game.check();
					} else {
						var control = ui.create.control("神将", function () {
							if (ui.cheat2 && ui.cheat2.dialog == _status.event.dialog) {
								return;
							}
							var dialog = _status.event.dialog;
							this.dialog = dialog;
							if (this.classList.contains("glow")) {
								this.backup1.remove();
								dialog.buttons.removeArray(this.backup2);
							} else {
								var links = [];
								for (var i = 0; i < dialog.buttons.length; i++) {
									links.push(dialog.buttons[i].link);
								}
								for (var i = 0; i < this.backup2.length; i++) {
									if (links.includes(this.backup2[i].link)) {
										this.backup2[i].style.display = "none";
									} else {
										this.backup2[i].style.display = "";
									}
								}
								dialog.content.insertBefore(this.backup1, dialog.buttons[0].parentNode);
								dialog.buttons.addArray(this.backup2);
							}
							this.classList.toggle("glow");

							game.uncheck();
							game.check();
						});
						control.backup1 = ui.create.div(".buttons");
						control.backup2 = ui.create.buttons(
							[
								"shen_caocao",
								"shen_simayi",
								"shen_guanyu",
								"shen_zhugeliang",
								"shen_zhaoyun",
								"shen_zhouyu",
								"shen_lvmeng",
								"shen_lvbu",
								"shen_liubei",
								"shen_luxun",
								"shen_ganning",
								"ol_zhangliao",
								"shen_zhenji",
								"shen_caopi",
								"key_kagari",
								"key_shiki",
								"db_key_hina",
							],
							"character",
							control.backup1
						);
						return control;
					}
				},
				init: function () {
					game.addGlobalSkill("boss_shenwuzaishi");
					game.addGlobalSkill("TheDayIBecomeAGod");
					game.addGlobalSkill("thedayibecomeagod");
					var list = ["lebu", "bingliang"];
					for (var i = 0; i < game.players.length; i++) {
						switch (game.players[i].name1) {
							case "shen_guanyu": {
								game.players[i].equip(game.createCard2("guilongzhanyuedao", "spade", 5));
								lib.inpile.add("guilongzhanyuedao");
								list.push("qinglong");
								break;
							}
							case "shen_zhugeliang": {
								game.players[i].equip(game.createCard2("qimenbagua", "spade", 2));
								list.push("bagua");
								lib.inpile.add("qimenbagua");
								break;
							}
							case "shen_zhouyu": {
								game.players[i].equip(game.createCard2("chiyanzhenhunqin", "diamond", 1));
								list.push("zhuque");
								lib.inpile.add("chiyanzhenhunqin");
								break;
							}
							case "shen_caocao": {
								game.players[i].equip(game.createCard2("juechenjinge", "spade", 5));
								list.push("jueying");
								lib.inpile.add("juechenjinge");
								break;
							}
							case "shen_zhaoyun": {
								game.players[i].equip(game.createCard2("chixueqingfeng", "spade", 6));
								list.push("qinggang");
								lib.inpile.add("chixueqingfeng");
								break;
							}
							case "shen_lvbu": {
								game.players[i].equip(game.createCard2("xiuluolianyuji", "diamond", 12));
								list.push("fangtian");
								lib.inpile.add("xiuluolianyuji");
								break;
							}
							case "shen_simayi": {
								game.players[i].equip(game.createCard2("xuwangzhimian", "diamond", 4));
								lib.inpile.add("xuwangzhimian");
								break;
							}
							case "shen_liubei": {
								game.players[i].equip(game.createCard2("longfenghemingjian", "spade", 2));
								lib.inpile.add("longfenghemingjian");
								list.push("cixiong");
								break;
							}
							case "shen_lvmeng": {
								game.players[i].equip(game.createCard2("guofengyupao", "diamond", 3));
								lib.inpile.add("guofengyupao");
								break;
							}
							case "shen_luxun": {
								game.players[i].equip(game.createCard2("qicaishenlu", "diamond", 3));
								lib.inpile.add("qicaishenlu");
								break;
							}
							case "shen_ganning":
							case "key_iwasawa": {
								game.players[i].equip(game.createCard2("jinwuluorigong", "heart", 5));
								lib.inpile.add("jinwuluorigong");
								list.push("qilin");
								break;
							}
							case "ol_zhangliao":
							case "key_noda": {
								game.players[i].equip(game.createCard2("xingtianpojunfu", "diamond", 5));
								lib.inpile.add("xingtianpojunfu");
								list.push("guanshi");
								break;
							}
							case "shen_zhenji": {
								game.players[i].equip(game.createCard2("lingsheji", "club", 12));
								lib.inpile.add("lingsheji");
								break;
							}
							case "shen_caopi": {
								game.players[i].equip(game.createCard2("shanrangzhaoshu", "spade", 13));
								lib.inpile.add("shanrangzhaoshu");
								break;
							}
							case "key_kagari": {
								game.players[i].equip(game.createCard2("goujiangdesidai", "heart", 1));
								lib.inpile.add("goujiangdesidai");
								break;
							}
							case "key_shiki": {
								game.players[i].equip(game.createCard2("niaobaidaowenha", "diamond", 13));
								lib.inpile.add("niaobaidaowenha");
								break;
							}
							case "db_key_hina": {
								game.players[i].equip(game.createCard2("shenzhixiunvfu", "spade", 13));
								lib.inpile.add("shenzhixiunvfu");
								break;
							}
						}
					}
					lib.inpile.remove("wuzhong");
					lib.inpile.remove("jiedao");
					lib.inpile.add("sadouchengbing");
					lib.inpile.add("yihuajiemu");
					lib.inpile.add("gubuzifeng");
					for (var i = 0; i < ui.cardPile.childElementCount; i++) {
						var node = ui.cardPile.childNodes[i];
						if (node.name == "wuzhong") {
							node.init([node.suit, node.number, "sadouchengbing"]);
						} else if (node.name == "jiedao") {
							node.init([node.suit, node.number, "yihuajiemu"]);
						} else if (list.includes(node.name)) {
							lib.inpile.remove(node.name);
							node.remove();
						}
					}
					var cards = [
						game.createCard2("gubuzifeng", "club", 5),
						game.createCard2("gubuzifeng", "diamond", 7),
					];
					while (cards.length > 0) {
						ui.cardPile.insertBefore(
							cards.shift(),
							ui.cardPile.childNodes[get.rand(0, ui.cardPile.childElementCount - 1)]
						);
					}
					lib.inpile.sort(lib.sort.card);
				},
			},
			boss_chiyanshilian: {
				chongzheng: 0,
				loopType: 2,
				checkResult: function (player) {
					if (player == game.boss && game.boss.name != "boss_yandi") {
						return false;
					}
				},
				init: function () {
					_status.additionalReward = function () {
						return 500;
					};
					lib.inpile.remove("shandian");
					lib.inpile.remove("huoshan");
					lib.inpile.remove("hongshui");
					lib.inpile.remove("fulei");
					lib.inpile.add("honghuangzhili");
					lib.inpile.sort(lib.sort.card);
					for (var i = 0; i < ui.cardPile.childElementCount; i++) {
						var node = ui.cardPile.childNodes[i];
						if (node.name == "shandian") {
							node.classList.remove("fullskin");
							node.classList.remove("thunder");
							node.init([node.suit, node.number, "honghuangzhili"]);
						} else if (["huoshan", "hongshui", "fulei"].includes(node.name)) {
							node.remove();
						}
					}
				},
			},
			boss_qingmushilian: {
				chongzheng: 0,
				loopType: 2,
				checkResult: function (player) {
					if (player == game.boss && game.boss.name != "boss_taihao") {
						return false;
					}
				},
				init: function () {
					lib.boss.boss_chiyanshilian.init();
				},
			},
			boss_baimangshilian: {
				chongzheng: 0,
				loopType: 2,
				checkResult: function (player) {
					if (player == game.boss && game.boss.name != "boss_shaohao") {
						return false;
					}
				},
				init: function () {
					lib.boss.boss_chiyanshilian.init();
				},
			},
			boss_xuanlinshilian: {
				chongzheng: 0,
				loopType: 2,
				checkResult: function (player) {
					if (player == game.boss && game.boss.name != "boss_zhuanxu") {
						return false;
					}
				},
				init: function () {
					lib.boss.boss_chiyanshilian.init();
				},
			},
			boss_zhuoguiquxie: {
				chongzheng: 0,
				checkResult: function (player) {
					if (
						player == game.boss &&
						game.boss.name != "boss_yecha" &&
						game.boss.name != "boss_luocha"
					) {
						return false;
					}
				},
				init: function () {
					_status.additionalReward = function () {
						return 500;
					};
				},
			},
			boss_qinguangwang: {
				chongzheng: 0,
				checkResult: function (player) {
					if (
						player == game.boss &&
						(!_status.shidianyanluo_level || _status.shidianyanluo_level < 3)
					) {
						return false;
					}
				},
				init: function () {
					_status.shidianyanluo_level = 0;
					lib.inpile.remove("muniu");
					for (var i = 0; i < ui.cardPile.childElementCount; i++) {
						if (ui.cardPile.childNodes[i].name == "muniu") {
							ui.cardPile.childNodes[i].remove();
							break;
						}
					}
					_status.additionalReward = function () {
						return 500;
					};
				},
			},
			boss_nianshou: {
				chongzheng: 0,
				init: function () {
					game.boss.node.action.classList.add("freecolor");
					game.boss.node.action.style.opacity = 1;
					game.boss.node.action.style.letterSpacing = "4px";
					game.boss.node.action.style.marginRight = 0;
					game.boss.node.action.style.fontFamily = "huangcao";
					game.boss.node.action.innerHTML = "";
					_status.additionalReward = function () {
						return Math.round(Math.pow(_status.damageCount, 2.4)) * 2;
					};
					var time = 360;
					var interval = setInterval(function () {
						if (_status.over) {
							clearInterval(interval);
							return;
						}
						var sec = time % 60;
						if (sec < 10) {
							sec = "0" + sec;
						}
						game.boss.node.action.innerHTML = Math.floor(time / 60) + ":" + sec;
						if (time <= 0) {
							delete _status.additionalReward;
							if (typeof _status.coin == "number") {
								if (game.me == game.boss) {
									_status.coin += Math.round(Math.pow(_status.damageCount, 2.4));
								} else {
									_status.coin += Math.round(Math.pow(_status.damageCount, 1.8));
								}
							}
							game.forceOver(true);
							clearInterval(interval);
						}
						time--;
					}, 1000);
					_status.damageCount = 0;
					ui.damageCount = ui.create.system("伤害: 0", null, true);
				},
			},
			boss_nianshou_heti: {
				chongzheng: 0,
			},
			boss_zhangjiao: {
				// loopType:2,
			},
			boss_caiwenji: {
				loopType: 2,
			},
			boss_pangtong: {
				loopType: 2,
				chongzheng: 12,
			},
			boss_zhenji: {
				chongzheng: 4,
			},
			boss_lvbu1: {
				loopType: 2,
				gameDraw: function (player) {
					if (player == game.boss) return 8;
					if (player == game.boss.previous) return 5;
					return 4;
				},
				loopFirst: function () {
					return game.boss.nextSeat;
				},
				init: function () {
					lib.inpile.remove("wugu");
					lib.inpile.remove("taoyuan");
					lib.inpile.remove("bagua");
					lib.inpile.remove("tengjia");
					lib.inpile.remove("fangtian");
					lib.inpile.remove("muniu");
					lib.inpile.addArray([
						"wushuangfangtianji",
						"shufazijinguan",
						"hongmianbaihuapao",
						"linglongshimandai",
						"lianjunshengyan",
					]);
					lib.inpile.sort(lib.sort.card);
					var equiplist = [];
					for (var i = 0; i < ui.cardPile.childElementCount; i++) {
						var node = ui.cardPile.childNodes[i];
						if (node.name == "bagua") {
							node.init([node.suit, node.number, "linglongshimandai"]);
							equiplist.push(node);
						} else if (node.name == "tengjia") {
							node.init([node.suit, node.number, "hongmianbaihuapao"]);
							equiplist.push(node);
						} else if (node.name == "fangtian") {
							node.init([node.suit, node.number, "wushuangfangtianji"]);
							equiplist.push(node);
						} else if (node.name == "muniu") {
							node.init([node.suit, node.number, "shufazijinguan"]);
							equiplist.push(node);
						} else if (node.name == "wugu" || node.name == "taoyuan") {
							node.init([node.suit, node.number, "lianjunshengyan"]);
						}
					}
					equiplist.randomSort();
					var next = game.createEvent("boss_jingjia");
					next.player = game.boss;
					next.cards = equiplist;
					next.setContent(function () {
						"step 0";
						if (!cards.length) {
							event.finish();
							return;
						}
						player.logSkill("boss_jingjia");
						event.num = 1.5;
						"step 1";
						var card = cards.shift();
						if (player.canEquip(card) && Math.random() < event.num) {
							player.equip(card);
							event.num = 0.5;
						}
						if (cards.length) event.redo();
					});
				},
			},
			boss_zuoci: {
				chongzheng: 4,
			},
			boss_diaochan: {
				chongzheng: 4,
			},
			boss_huangyueying: {
				chongzheng: 12,
			},
			boss_sunce: {
				loopType: 2,
				loopFirst: function () {
					return game.boss.previousSeat;
				},
				gameDraw: function (player) {
					return player == game.boss ? 8 : 4;
				},
				init: function () {
					_status.taoni_over = get.copy(game.over);
				},
			},
			global: {
				loopType: 1,
				chongzheng: 6,
			},
		},
		skill: {
			boss_yingzhong: {
				//Unfinished
			},
			niaobaidaowenha_skill: {
				trigger: { player: "loseMaxHpAfter" },
				direct: true,
				content: function () {
					"step 0";
					event.count = trigger.num;
					"step 1";
					event.count--;
					player
						.chooseTarget(get.prompt2("niaobaidaowenha_skill"), lib.filter.notMe)
						.set("ai", function (target) {
							return get.attitude(_status.event.player, target) / (target.maxHp || 1);
						});
					"step 2";
					if (result.bool) {
						var target = result.targets[0];
						player.logSkill("niaobaidaowenha_skill", target);
						target.gainMaxHp();
						target.recover();
						if (event.count) event.goto(1);
					}
				},
			},
			goujiangdesidai_skill: {
				inherit: "kagari_zongsi",
				filter: function (event, player) {
					return !player.hasSkill("kagari_zongsi") || player.getStat("skill").kagari_zongsi;
				},
			},
			gubuzifeng_disable: {
				init: function (player, skill) {
					if (!player.storage[skill]) player.storage[skill] = [];
				},
				onremove: function (player, skill) {
					player.enableSkill(skill);
					delete player.storage[skill];
				},
				charlotte: true,
				locked: true,
				mark: true,
				intro: {
					content: function (storage, player, skill) {
						var list = [];
						for (var i in player.disabledSkills) {
							if (player.disabledSkills[i].includes(skill)) {
								list.push(i);
							}
						}
						if (list.length) {
							var str = "失效技能:";
							for (var i = 0; i < list.length; i++) {
								if (lib.translate[list[i] + "_info"]) {
									str += get.translation(list[i]) + "、";
								}
							}
							return str.slice(0, str.length - 1);
						}
					},
				},
			},
			thedayibecomeagod: {
				trigger: { player: "die" },
				direct: true,
				filter: function (event, player) {
					return player.group == "shen";
				},
				forceDie: true,
				skillAnimation: true,
				animationColor: "kami",
				content: function () {
					"step 0";
					player
						.chooseTarget(get.prompt2("thedayibecomeagod"), function (card, player, target) {
							return target.isFriendOf(player);
						})
						.set("forceDie", true).ai = function (target) {
						return get.attitude(_status.event.player, target);
					};
					"step 1";
					if (result.bool) {
						var target = result.targets[0];
						event.target = target;
						player.logSkill("thedayibecomeagod", target);
						if (target.group != "shen") {
							target.changeGroup("shen");
							game.log("此刻,便是", target, "成为神明之日!");
							event.finish();
						} else target.turnOver(false);
					} else event.finish();
					"step 2";
					if (target.isDamaged()) target.recover(target.maxHp - target.hp);
					"step 3";
					target.drawTo(5);
				},
			},
			TheDayIBecomeAGod: {
				trigger: { player: "useCard1" },
				ruleSkill: true,
				popup: false,
				forced: true,
				prompt: "是否将此【杀】改为神属性?",
				filter: function (event, player) {
					return player.group == "shen" && event.card.name == "sha";
				},
				content: function () {
					game.log(trigger.card, "被改为神属性");
					game.setNature(trigger.card, "kami");
				},
			},
			shanrangzhaoshu: {
				trigger: {
					global: ["gainEnd", "loseAsyncAfter"],
				},
				direct: true,
				filter: function (event, player) {
					let min = 0;
					if (!player.hasSkill("shanrangzhaoshu", null, false))
						min += get.sgn(player.getEquips("shanrangzhaoshu").length);
					const bool = player.countCards("he") > min;
					return game.hasPlayer((current) => {
						if (current == player || current == _status.currentPhase) return false;
						if (!bool && current.countCards("h") == 0) return false;
						const history = current.getHistory("gain")[0];
						if (!history) return false;
						if (event.name == "gain") {
							return history == event && event.getlx !== false;
						}
						return history.getParent() == event;
					});
				},
				content: function () {
					"step 0";
					event.targets = game
						.filterPlayer(function (current) {
							if (current == player || current == _status.currentPhase) return false;
							const history = current.getHistory("gain")[0];
							if (!history) return false;
							if (trigger.name == "gain") {
								return history == trigger && trigger.getlx !== false;
							}
							return history.getParent() == trigger;
						})
						.sortBySeat(_status.currentPhase);
					"step 1";
					var target = event.targets.shift();
					event.target = target;
					if (target.isIn()) {
						var list = [];
						var min = 0;
						if (!player.hasSkill("shanrangzhaoshu", null, false))
							min += get.sgn(player.getEquips("shanrangzhaoshu").length);
						if (player.countCards("he") > min) list.push(`交给${get.translation(target)}一张牌`);
						if (target.countCards("he") > 0)
							list.push(`令${get.translation(target)}交给你一张牌`);
						event.list = list;
						if (list.length == 0) event.goto(4);
						else if (list.length == 1) event._result = { index: 0 };
						else
							player
								.chooseControl("cancel2")
								.set("choiceList", list)
								.set("prompt", get.prompt("shanrangzhaoshu", target))
								.set("ai", function () {
									if (
										get.attitude(_status.event.player, _status.event.getParent().target) <
										0
									)
										return 1;
									return "cancel2";
								});
					} else event.goto(4);
					"step 2";
					if (result.control == "cancel2") {
						event.goto(4);
						return;
					}
					player.logSkill("shanrangzhaoshu", target);
					if (event.list[result.index][0] == "令") {
						event.gainner = player;
						event.giver = target;
						target.chooseCard("he", true, `交给${get.translation(player)}一张牌`);
					} else {
						event.giver = player;
						event.gainner = target;
						player
							.chooseCard("he", true, `交给${get.translation(target)}一张牌`)
							.set("filterCard", function (card, player) {
								if (_status.event.ignoreCard) return true;
								var cards = player.getEquips("shanrangzhaoshu");
								if (!cards.includes(card)) return true;
								return cards.some(
									(cardx) => cardx != card && !ui.selected.cards.includes(cardx)
								);
							})
							.set("ignoreCard", player.hasSkill("shanrangzhaoshu", null, false));
					}
					"step 3";
					if (result.cards && result.cards.length) event.giver.give(result.cards, event.gainner);
					"step 4";
					if (targets.length > 0) event.goto(1);
				},
			},
			lingsheji: {
				trigger: { player: "phaseUseEnd" },
				equipSkill: true,
				direct: true,
				content: function () {
					"step 0";
					var list = ["摸一张牌"];
					if (player.countCards("he") > 1) list.push("将一张牌置于武将牌上,于回合结束后获得之");
					player
						.chooseControl("cancel2")
						.set("prompt", get.prompt("lingsheji"))
						.set("choiceList", list)
						.set("ai", function () {
							var player = _status.event.player;
							if (
								player.countCards("e", function (card) {
									return card.name != "tengjia" && get.value(card) <= 0;
								})
							)
								return 1;
							if (!player.needsToDiscard()) return 0;
							return 1;
						});
					"step 1";
					if (result.control == "cancel2") {
						event.finish();
						return;
					}
					player.logSkill("lingsheji");
					if (result.index == 0) {
						player.draw();
						event.finish();
					} else {
						player
							.chooseCard("he", true, function (card, player) {
								return card != player.getEquip(5);
							})
							.set("ai", function (card) {
								if (get.position(card) == "e" && get.value(card) <= 0) return 10;
								return (get.position(card) == "h" ? 2 : 1) * -get.value(card);
							});
					}
					"step 2";
					player.addSkill("lingsheji2");
					player.lose(result.cards, ui.special, "toStorage");
					player.markAuto("lingsheji2", result.cards);
				},
			},
			lingsheji2: {
				trigger: { player: "phaseEnd" },
				equipSkill: true,
				forced: true,
				popup: false,
				content: function () {
					player.gain(player.getStorage("lingsheji2"), "gain2", "log");
					player.storage.lingsheji2.length = 0;
					player.removeSkill("lingsheji2");
				},
				intro: { content: "cards" },
			},
			noda_axe: {
				trigger: { player: "useCardToPlayered" },
				equipSkill: true,
				direct: true,
				filter: function (event, player) {
					return (
						player.isPhaseUsing() &&
						player != event.target &&
						event.targets.length == 1 &&
						player.countCards("he") > 2
					);
				},
				content: function () {
					"step 0";
					player
						.chooseToDiscard(
							"he",
							get.prompt("noda_axe", trigger.target),
							2,
							"弃置两张牌,令" +
								get.translation(trigger.target) +
								"本回合内不能使用或打出牌且防具技能无效。",
							function (card, player) {
								return card != player.getEquip(1);
							}
						)
						.set("logSkill", ["noda_axe", trigger.target])
						.set(
							"goon",
							(function (event, player) {
								if (player.hasSkill("noda_axe2")) return false;
								if (event.getParent().excluded.includes(player)) return false;
								if (get.attitude(event.player, player) > 0) {
									return false;
								}
								if (get.type(event.card) == "trick" && event.player.hasWuxie()) return true;
								if (get.tag(event.card, "respondSha")) {
									if (!player.hasSha()) return false;
									return true;
								} else if (get.tag(event.card, "respondShan")) {
									if (!player.hasShan()) return false;
									return true;
								}
								return false;
							})(trigger, trigger.target)
						)
						.set("ai", function (card) {
							if (_status.event.goon) return 7.5 - get.value(card);
							return 0;
						});
					"step 1";
					if (result.bool) trigger.target.addTempSkill("noda_axe2");
				},
			},
			noda_axe2: {
				equipSkill: true,
				mod: {
					cardEnabled: function () {
						return false;
					},
					cardSavable: function () {
						return false;
					},
					cardRespondable: function () {
						return false;
					},
				},
				mark: true,
				intro: {
					content: "不能使用或打出牌且防具技能无效直到回合结束",
				},
				ai: { unequip2: true },
			},
			iwasawa_crowbow: {
				equipSkill: true,
				trigger: {
					player: "loseAfter",
					global: [
						"equipAfter",
						"addJudgeAfter",
						"gainAfter",
						"loseAsyncAfter",
						"addToExpansionAfter",
					],
				},
				direct: true,
				filter: function (event, player) {
					var evt = event.getl(player);
					return evt && evt.hs && evt.hs.length > 1 && player.isPhaseUsing();
				},
				content: function () {
					"step 0";
					var evt = trigger.getl(player);
					event.num = evt.hs.length;
					player
						.chooseTarget(
							get.prompt("iwasawa_crowbow"),
							"弃置一名其他角色的" + get.cnNumber(event.num) + "张牌",
							function (card, player, target) {
								return player != target && target.countDiscardableCards(player, "he") > 0;
							}
						)
						.set("ai", function (target) {
							var att = get.attitude(_status.event.player, target);
							if (
								target.countDiscardableCards(_status.event.player, "he") >=
								_status.event.getParent().num
							)
								att = att * 2;
							return -att;
						});
					"step 1";
					if (result.bool) {
						var target = result.targets[0];
						player.logSkill("iwasawa_crowbow", target);
						player.discardPlayerCard(target, "he", true, num);
					}
				},
			},
			boss_panguan: {
				mod: {
					targetEnabled: function (card) {
						if (get.type(card) == "delay") return false;
					},
				},
			},
			boss_juhun: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				content: function () {
					var list = game.filterPlayer(function (current) {
						return current != player;
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target[["turnOver", "link"].randomGet()]();
					}
				},
			},
			boss_wangxiang: {
				trigger: { player: "die" },
				forced: true,
				forceDie: true,
				content: function () {
					game.countPlayer(function (current) {
						if (current != player && current.countCards("e")) {
							player.line(current);
							current.discard(current.getCards("e"));
						}
					});
				},
			},
			boss_xhuanren: {
				nobracket: true,
				global: "boss_xhuanren2",
			},
			boss_xhuanren2: {
				trigger: { player: "dieBegin" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				charlotte: true,
				silent: true,
				popup: false,
				filter: function (event, player) {
					if (lib.config.mode != "boss") return false;
					if (_status.shidianyanluo_level == undefined) return false;
					return player == game.boss;
				},
				content: function () {
					var next = game.createEvent("shidianyanluo_huanren", false, trigger.getParent());
					next.player = player;
					next.forceDie = true;
					next.setContent(lib.skill.boss_xhuanren2.contentx);
				},
				contentx: function () {
					"step 0";
					game.delay();
					"step 1";
					var list = [
						["boss_chujiangwang", "boss_songdiwang", "boss_wuguanwang", "boss_yanluowang"],
						["boss_bianchengwang", "boss_taishanwang", "boss_dushiwang", "boss_pingdengwang"],
						["boss_zhuanlunwang"],
					][_status.shidianyanluo_level];
					if (list.length == 1) event._result = { control: list[0] };
					else
						player
							.chooseControl(list)
							.set("prompt", "请选择下一个出战的角色")
							.set("forceDie", true).ai = function () {
							return list.randomGet();
						};
					"step 2";
					_status.shidianyanluo_level++;
					game.changeBoss(result.control);
				},
			},
			boss_newhuanren: {
				nobracket: true,
				global: "boss_newhuanren2",
				trigger: { global: "gameStart" },
				popup: false,
				forced: true,
				superCharlotte: true,
				charlotte: true,
				fixed: true,
				content: function () {
					if (get.mode() != "boss") return;
					//孟婆
					if (!_status.shidianyanluo_mengpo && Math.random() <= 0.4) {
						if (game.me != game.boss) {
							game.boss.changeSeat(6);
						} else {
							game.boss.nextSeat.changeSeat(3);
							game.boss.previousSeat.changeSeat(5);
						}
						//	game.addBossFellow(game.me==game.boss?1:7,'boss_mengpo');
						var fellow = game.addFellow(
							game.me == game.boss ? 1 : 7,
							"boss_mengpo",
							"zoominanim"
						);
						if (_status.shidianyanluo_level != 0) {
							fellow.directgain(get.cards(4));
						}
						fellow.side = true;
						fellow.identity = "zhong";
						fellow.setIdentity("zhong");
						game.addVideo("setIdentity", fellow, "zhong");
						_status.shidianyanluo_mengpo = true;
					}
					var list = [
						"luxun",
						"re_luxun",
						"zhangchunhua",
						"zuoci",
						"re_zuoci",
						"re_yuji",
						"xin_yuji",
						"jiangfei",
						"kongrong",
					]; //禁将
					game.countPlayer(function (current) {
						if (current != game.boss) {
							for (var i = 0; i < list.length; i++) {
								if (current.name == list[i] || current.name2 == list[i]) {
									current.init(["sunce", "re_sunce", "shen_sunce", "sb_sunce"].randomGet());
								}
							}
						}
					});
				},
			},
			boss_newhuanren2: {
				trigger: { global: ["die"] },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				charlotte: true,
				silent: true,
				popup: false,
				forceDie: true,
				filter: function (event, player) {
					if (lib.config.mode != "boss") return false;
					if (_status.shidianyanluo_level == undefined) return false;
					return player == game.boss && event.player == player;
				},
				content: function () {
					var next = game.createEvent("shidianyanluo_huanren", false, trigger.getParent());
					next.player = player;
					next.forceDie = true;
					next.setContent(lib.skill.boss_newhuanren2.contentx);
				},
				contentx: function () {
					"step 0";
					game.delay();
					var list = game.filterPlayer();
					for (var x = 0; x < list.length; x++) {
						list[x].removeSkill("diaohulishan");
						list[x].removeSkill("guogong2");
					}
					var list = game.boss.getEnemies();
					for (var x = 0; x < list.length; x++) {
						list[x].removeSkill("boss_wangshi2");
					}
					"step 1";
					var list = [
						["boss_chujiangwang", "boss_songdiwang", "boss_wuguanwang", "boss_yanluowang"],
						["boss_bianchengwang", "boss_taishanwang", "boss_dushiwang", "boss_pingdengwang"],
						["boss_zhuanlunwang"],
					][_status.shidianyanluo_level];
					//如果mengpo死亡且50回合内通过第三关,list[2]变成地藏王
					if (
						game.phaseNumber <= 50 &&
						_status.shidianyanluo_level == 2 &&
						_status.shidianyanluo_mengpodie == true
					) {
						list = ["boss_dizangwang"];
					}
					if (list.length == 1) event._result = { control: list[0] };
					else {
						player
							.chooseControl(list)
							.set("forceDie", true)
							.set("choice", list.randomGet())
							.set("ai", function () {
								return _status.event.choice;
							}).prompt = "选择下一个登场的武将";
					}
					"step 2";
					_status.shidianyanluo_level++;
					game.changeBoss(result.control);
					//地藏王登场摸3
					if (result.control == "boss_dizangwang") {
						game.boss.draw(3);
					}
					//计回合数
					var level = _status.shidianyanluo_level;
					//孟婆
					if (!_status.shidianyanluo_mengpo) {
						if (Math.random() <= 0.5 || level == 2) {
							if (game.me != game.boss) {
								game.boss.changeSeat(6);
							} else {
								game.boss.nextSeat.changeSeat(3);
								game.boss.previousSeat.changeSeat(5);
							}
							//game.addBossFellow();
							var fellow = game.addFellow(
								game.me == game.boss ? 1 : 7,
								"boss_mengpo",
								"zoominanim"
							);
							if (_status.shidianyanluo_level != 0) {
								fellow.directgain(get.cards(4));
							}
							fellow.side = true;
							fellow.identity = "zhong";
							fellow.setIdentity("zhong");
							game.addVideo("setIdentity", fellow, "zhong");
							_status.shidianyanluo_mengpo = true;
						}
					} else {
						//移除孟婆
						game.countPlayer2(function (current) {
							if (current.name == "boss_mengpo") {
								current.removed = true;
								current.classList.add("dead");
								current.remove();
								game.players.remove(current);
							}
						});
					}
					//然后是boss进行回合
					game.phaseLoop(game.boss);
				},
			},
			boss_bingfeng: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				filter: function (event) {
					return event.source && !event.source.isTurnedOver();
				},
				logTarget: "source",
				content: function () {
					trigger.source.turnOver();
				},
			},
			boss_heisheng: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					player.line(game.players.slice(0));
					game.countPlayer(function (current) {
						if (current != player) current.link();
					});
				},
			},
			boss_shengfu: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				popup: false,
				content: function () {
					var list = [];
					game.countPlayer(function (current) {
						if (current == player) return;
						var es = current.getCards("e", { subtype: ["equip3", "equip4", "equip6"] });
						if (es.length) list.push([current, es]);
					});
					if (list.length) {
						player.logSkill("boss_heisheng");
						var current = list.randomGet();
						player.line(current[0]);
						current[0].discard(current[1].randomGet());
					}
				},
			},
			boss_zhiwang: {
				derivation: "boss_zhiwang_planetarian",
				trigger: { global: "gainEnd" },
				filter: function (event, player) {
					return (
						event.player != player &&
						!(event.getParent().name == "draw" && event.getParent(2).name == "phaseDraw") &&
						event.player.countCards("h")
					);
				},
				forced: true,
				logTarget: "player",
				content: function () {
					var evt = trigger.getParent("boss_zhiwang");
					if (evt && evt.name == "boss_zhiwang") {
						trigger.player.uninit();
						trigger.player.init("sunce");
					}
					var hs = trigger.player.getCards("h");
					if (hs.length) {
						trigger.player.discard(hs.randomGet());
					}
				},
				subSkill: { planetarian: {} },
			},
			boss_gongzheng: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				filter: function (event, player) {
					return player.countCards("j") > 0;
				},
				content: function () {
					player.discard(player.getCards("j").randomGet());
				},
			},
			boss_xuechi: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					var target = list.randomGet();
					player.line(target);
					target.loseHp(2);
				},
			},
			boss_tiemian: {
				inherit: "renwang_skill",
				priority: -0.3,
				equipSkill: false,
				filter: function (event, player) {
					if (!player.hasEmptySlot(2)) return false;
					return lib.skill.renwang_skill.filter.apply(this, arguments);
				},
			},
			boss_zhadao: {
				inherit: "qinggang_skill",
				equipSkill: false,
			},
			boss_zhuxin: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					"step 0";
					player
						.chooseTarget(
							"【诛心】:请选择一名角色,令其受到2点伤害。",
							function (card, player, target) {
								return (
									target != player &&
									!game.hasPlayer(function (current) {
										return (
											current != player && current != target && current.hp < target.hp
										);
									})
								);
							}
						)
						.set("forceDie", true).ai = function (target) {
						return -get.attitude(_status.event.player, target);
					};
					"step 1";
					if (result.bool) {
						var target = result.targets[0];
						player.line(target);
						target.damage(2);
					}
				},
			},
			boss_leizhou: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target.damage("thunder");
					}
				},
			},
			boss_leifu: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target.link();
					}
				},
			},
			boss_leizhu: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						list.sort(lib.sort.seat);
						player.line(list);
						for (var i = 0; i < list.length; i++) {
							list[i].damage("thunder");
						}
					}
				},
			},
			boss_fudu: {
				trigger: { global: "useCard" },
				forced: true,
				filter: function (event, player) {
					return event.card.name == "tao" && event.player != player && game.players.length > 2;
				},
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					list.remove(trigger.player);
					var target = list.randomGet();
					player.line(target);
					target.loseHp();
				},
			},
			boss_kujiu: {
				trigger: { global: "phaseZhunbeiBegin" },
				forced: true,
				filter: function (event, player) {
					return event.player != player;
				},
				logTarget: "player",
				content: function () {
					"step 0";
					trigger.player.loseHp();
					"step 1";
					trigger.player.useCard({ name: "jiu" }, trigger.player);
				},
			},
			boss_renao: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target.damage(3, "fire");
					}
				},
			},
			boss_remen: {
				equipSkill: true,
				trigger: { target: ["useCardToBefore"] },
				forced: true,
				priority: 6,
				audio: true,
				filter: function (event, player) {
					if (!player.hasEmptySlot("equip2")) return false;
					if (event.card.name == "nanman") return true;
					if (event.card.name == "wanjian") return true;
					return event.card.name == "sha" && !game.hasNature(event.card);
				},
				content: function () {
					trigger.cancel();
				},
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (!target.hasEmptySlot("equip2")) return;
							if (card.name == "nanman" || card.name == "wanjian") return "zerotarget";
							if (card.name == "sha") {
								var equip1 = player.getEquip(1);
								if (equip1 && equip1.name == "zhuque") return 1.9;
								if (!game.hasNature(card)) return "zerotarget";
							}
						},
					},
				},
			},
			boss_zhifen: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				content: function () {
					"step 0";
					var list = game.filterPlayer();
					list.remove(player);
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						event.target = target;
						if (target.countGainableCards(player, "h")) player.gainPlayerCard(target, "h", true);
					} else event.finish();
					"step 1";
					target.damage("fire");
				},
			},

			boss_huoxing: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						list.sort(lib.sort.seat);
						player.line(list);
						for (var i = 0; i < list.length; i++) {
							list[i].damage("fire");
						}
					}
				},
			},
			boss_suozu: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				content: function () {
					var list = game.players.slice(0);
					list.remove(player);
					if (list.length) {
						list.sort(lib.sort.seat);
						player.line(list);
						for (var i = 0; i < list.length; i++) {
							list[i].link();
						}
					}
				},
			},
			boss_abi: {
				trigger: { player: "damageEnd" },
				forced: true,
				filter: function (event) {
					return event.source != undefined;
				},
				logTarget: "source",
				content: function () {
					trigger.source.damage().nature = ["fire", "thunder"].randomGet();
				},
			},
			boss_pingdeng: {
				trigger: { player: "die" },
				forceDie: true,
				forced: true,
				content: function () {
					"step 0";
					var list = game.filterPlayer(function (current) {
						return (
							current != player &&
							!game.hasPlayer(function (current2) {
								return current2.hp > current.hp;
							})
						);
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target.damage(2).nature = lib.linked.randomGet();
					} else event.finish();
					"step 1";
					var list = game.filterPlayer(function (current) {
						return (
							current != player &&
							!game.hasPlayer(function (current2) {
								return current2.hp > current.hp;
							})
						);
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						target.damage().nature = lib.linked.randomGet();
					}
				},
			},
			boss_lunhui: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				filter: function (event, player) {
					return (
						player.hp <= 2 &&
						game.hasPlayer(function (current) {
							return current != player && current.hp > 2;
						})
					);
				},
				content: function () {
					var list = game.filterPlayer(function (current) {
						return current != player && current.hp > 2;
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target);
						var hp1 = player.hp;
						var hp2 = target.hp;
						player.hp = Math.min(player.maxHp, hp2);
						target.hp = Math.min(target.maxHp, hp1);
						player.update();
						target.update();
						game.log(player, "和", target, "交换了体力值");
					}
				},
			},
			boss_wangsheng: {
				trigger: { player: "phaseUseBegin" },
				forced: true,
				content: function () {
					var name = ["nanman", "wanjian"].randomGet();
					player.useCard(
						{ name: name },
						game.filterPlayer(function (current) {
							return player.canUse({ name: name }, current);
						}),
						"noai"
					);
				},
			},
			boss_zlfanshi: {
				trigger: { player: "damageEnd" },
				forced: true,
				content: function () {
					if (player.hasSkill("boss_zlfanshi_terra")) {
						var list = game.players.slice(0);
						list.remove(player);
						if (list.length) {
							var target = list.randomGet();
							player.line(target);
							target.damage();
						}
					} else player.addTempSkill("boss_zlfanshi_terra");
				},
			},
			boss_zlfanshi_terra: { charlotte: true },
			//孟婆:
			boss_shiyou: {
				audio: true,
				trigger: { global: "loseAfter" },
				filter: function (event, player) {
					var evt = event.getParent(3);
					return (
						event.type == "discard" &&
						evt.name == "phaseDiscard" &&
						evt.player == event.player &&
						evt.player != player &&
						event.cards2 &&
						event.cards2.filterInD("d").length > 0
					);
				},
				content: function () {
					"step 0";
					event.cards = trigger.cards2.filterInD("d");
					"step 1";
					var next = player
						.chooseCardButton(get.prompt("boss_shiyou"), event.cards, [1, event.cards.length])
						.set("ai", function (button) {
							return get.value(button.link, player);
						})
						.set("filterButton", function (button) {
							for (var i = 0; i < ui.selected.buttons.length; i++) {
								if (get.suit(ui.selected.buttons[i].link) == get.suit(button.link))
									return false;
							}
							return true;
						});
					"step 2";
					if (result.bool) {
						player.gain(result.links, "gain2", "log");
					}
				},
			},
			boss_wangshi: {
				trigger: { global: "phaseZhunbeiBegin" },
				forced: true,
				audio: true,
				filter: function (event, player) {
					if (player.getEnemies().includes(event.player)) {
						return true;
					}
					return false;
				},
				logTarget: "player",
				content: function () {
					var list = ["basic", "trick", "equip"].randomGet();
					trigger.player.addTempSkill("boss_wangshi2");
					trigger.player.storage.boss_wangshi2 = [list];
					game.log(trigger.player, "本回合不能使用或打出", list, "牌");
					trigger.player.markSkill("boss_wangshi2");
				},
			},
			boss_wangshi2: {
				unique: true,
				charlotte: true,
				intro: {
					content: function (storage) {
						return "不能使用或打出" + get.translation(storage) + "牌";
					},
				},
				init: function (player, skill) {
					if (!player.storage[skill]) player.storage[skill] = [];
				},
				//mark:true,
				onremove: true,
				mod: {
					cardEnabled2: function (card, player) {
						if (player.storage.boss_wangshi2.includes(get.type(card, "trick"))) return false;
					},
				},
			},
			boss_mengpohuihun1: {
				mode: ["boss"],
				trigger: {
					player: "loseEnd",
					global: "cardsDiscardEnd",
				},
				filter: function (event, player) {
					for (var i = 0; i < event.cards.length; i++) {
						if (
							event.cards[i].name == "boss_mengpohuihun" &&
							get.position(event.cards[i], true) == "d"
						) {
							return true;
						}
					}
					return false;
				},
				forced: true,
				popup: false,
				content: function () {
					var cards = [];
					for (var i = 0; i < trigger.cards.length; i++) {
						if (
							trigger.cards[i].name == "boss_mengpohuihun" &&
							get.position(trigger.cards[i]) == "d"
						) {
							cards.push(trigger.cards[i]);
						}
					}
					if (cards.length) {
						game.cardsGotoSpecial(cards);
						game.log(cards, "已被移出游戏");
						player.popup("回魂");
					}
				},
			},
			boss_wanghun: {
				audio: true,
				forced: true,
				trigger: { player: "die" },
				forceDie: true,
				content: function () {
					_status.shidianyanluo_mengpodie = true;
					var list = player.getEnemies();
					if (list.length > 0) {
						for (var x = 0; x < list.length; x++) {
							list[x].removeSkill("boss_wangshi2");
						}
						var ran1 = list.randomGet(); //第一个角色
						list.remove(ran1); //移除
						var skills1 = ran1.getSkills(true, false);
						if (skills1.length) {
							for (var i = 0; i < skills1.length; i++) {
								//排除技能,然后随机失去一个可以失去的技能
								if (
									get.skills[i] ||
									lib.skill[skills1[i]].charlotte ||
									!lib.translate[skills1[i] + "_info"] ||
									lib.skill[skills1[i]].zhuSkill == true
								) {
									skills1.splice(i--, 1);
								}
							}
							if (skills1.length > 0) {
								skills1 = skills1.randomGet();
								ran1.disableSkill("boss_wanghun", skills1);
								game.log(ran1, "失去了", skills1);
							} else {
								game.log(ran1, "没有技能可失去");
							}
						}
						if (list.length > 0) {
							var ran2 = list.randomGet(); //第二个角色
							list.remove(ran2); //移除
							var skills2 = ran2.getSkills(true, false);
							if (skills2.length) {
								for (var i = 0; i < skills2.length; i++) {
									//排除技能,然后随机失去一个可以失去的技能
									if (
										get.skills[i] ||
										lib.skill[skills2[i]].charlotte ||
										!lib.translate[skills2[i] + "_info"] ||
										lib.skill[skills2[i]].zhuSkill == true
									) {
										skills2.splice(i--, 1);
									}
								}
								if (skills2.length > 0) {
									skills2 = skills2.randomGet();
									ran2.disableSkill("boss_wanghun", skills2);
									game.log(ran2, "失去了", skills2);
								} else {
									game.log(ran2, "没有技能可失去");
								}
							}
						}
						//添加两张回魂
						if (get.mode() == "boss") {
							var card1 = game.createCard("boss_mengpohuihun", "heart", 3, null);
							var card2 = game.createCard("boss_mengpohuihun", "club", 4, null);
							var a = [];
							if (ui.cardPile.childElementCount < 3) {
								game.boss.getCards(4);
							}
							for (var i = 0; i < ui.cardPile.childElementCount; i++) {
								a.push(i);
							}
							ui.cardPile.insertBefore(card1, ui.cardPile.childNodes[a.randomGet()]);
							a.push(a.length);
							ui.cardPile.insertBefore(card2, ui.cardPile.childNodes[a.randomGet()]);
							game.log("牌堆中添加了", card1, card2);
							game.updateRoundNumber();
						}
					}
				},
			},
			//地藏王:
			boss_bufo: {
				audio: true,
				forced: true,
				trigger: {
					player: ["damageBegin4", "phaseZhunbeiBegin"],
				},
				filter: function (event, player, name) {
					if (name == "damageBegin4") {
						return event.num && event.num > 1;
					}
					return game.hasPlayer(function (target) {
						return player != target && get.distance(player, target) <= 1;
					});
				},
				content: function () {
					var name = event.triggername;
					if (name == "damageBegin4") {
						trigger.num--;
					} else {
						game.countPlayer(function (target) {
							if (player != target && get.distance(player, target) <= 1) {
								target.damage(1, player, "fire");
							}
						});
					}
				},
			},
			boss_wuliang: {
				forced: true,
				audio: true,
				trigger: {
					global: "gameDrawAfter",
					player: ["phaseZhunbeiBegin", "phaseJieshuBegin", "enterGame"],
				},
				filter: function (event, player, name) {
					if (name == "gameDrawAfter" || name == "enterGame") {
						return true;
					} else if (name == "phaseZhunbeiBegin") {
						return player.hp < 3;
					}
					return true;
				},
				content: function () {
					var name = event.triggername;
					if (name == "phaseZhunbeiBegin") {
						player.recover(3 - player.hp);
					} else {
						player.draw(name == "gameDrawAfter" || name == "enterGame" ? 3 : 2);
					}
				},
			},
			boss_dayuan: {
				trigger: {
					global: "judge",
				},
				audio: true,
				direct: true,
				lastDo: true,
				content: function () {
					"step 0";
					var card = trigger.player.judging[0];
					var judge0 = trigger.judge(card);
					var judge1 = 0;
					var choice = "cancel2";
					event.suitchoice = "cancel2";
					var attitude = get.attitude(player, trigger.player);
					var list = [];
					event.suitx = ["heart", "diamond", "club", "spade"];
					for (var x = 0; x < 4; x++) {
						for (var i = 1; i < 14; i++) {
							list.add(i);
							var judge2 =
								(trigger.judge({
									name: get.name(card),
									suit: event.suitx[x],
									number: i,
									nature: get.nature(card),
								}) -
									judge0) *
								attitude;
							if (judge2 > judge1) {
								choice = i;
								event.suitchoice = event.suitx[x];
								judge1 = judge2;
							}
						}
					}
					list.push("cancel2");
					event.suitx.push("cancel2");
					player
						.chooseControl(list)
						.set("ai", function () {
							return _status.event.choice;
						})
						.set("choice", choice).prompt = get.prompt2(event.name);
					"step 1";
					if (result.control != "cancel2") {
						if (!event.logged) {
							event.logged = true;
							player.logSkill(event.name, trigger.player);
						}
						game.log(trigger.player, "判定结果点数为", "#g" + result.control);
						player.popup(result.control, "fire");
						if (!trigger.fixedResult) trigger.fixedResult = {};
						trigger.fixedResult.number = result.control;
					}
					player
						.chooseControl(event.suitx)
						.set("ai", function () {
							return _status.event.choice;
						})
						.set("choice", event.suitchoice).prompt = get.prompt2(event.name);
					"step 2";
					if (result.control != "cancel2") {
						if (!event.logged) {
							event.logged = true;
							player.logSkill(event.name, trigger.player);
						}
						game.log(trigger.player, "判定结果花色为", "#g" + result.control);
						player.popup(result.control, "fire");
						if (!trigger.fixedResult) trigger.fixedResult = {};
						trigger.fixedResult.suit = result.control;
						if (result.control == "club" || result.control == "spade") {
							trigger.fixedResult.color = "black";
						} else if (result.control == "heart" || result.control == "diamond") {
							trigger.fixedResult.color = "red";
						}
					}
				},
			},
			boss_diting: {
				audio: true,
				mod: {
					globalFrom: function (from, to, distance) {
						return distance - 1;
					},
					globalTo: function (from, to, distance) {
						return distance + 1;
					},
				},
				enable: "phaseUse",
				position: "h",
				filter: function (event, player) {
					return player.countCards("he", { subtype: ["equip3", "equip4", "equip6"] }) > 0;
				},
				filterCard: function (card) {
					return (
						get.subtype(card) == "equip3" ||
						get.subtype(card) == "equip4" ||
						get.subtype(card) == "equip6"
					);
				},
				check: function (card) {
					if (_status.event.player.isDisabled(get.subtype(card))) return 5;
					return 3 - get.value(card);
				},
				content: function () {
					player.draw();
				},
				discard: false,
				visible: true,
				loseTo: "discardPile",
				prompt: "将一张坐骑牌置入弃牌堆并摸一张牌",
				delay: 0.5,
				prepare: function (cards, player) {
					player.$throw(cards, 1000);
					game.log(player, "将", cards, "置入了弃牌堆");
				},
				ai: {
					order: 10,
					result: {
						player: 1,
					},
				},
				group: "boss_diting_init",
				subSkill: {
					init: {
						trigger: {
							global: "gameStart",
							player: "enterGame",
						},
						forced: true,
						filter: function (event, player) {
							return player.hasEnabledSlot(3) || player.hasEnabledSlot(4);
						},
						content: function () {
							var disables = [];
							for (var i = 3; i <= 4; i++) {
								for (var j = 0; j < player.countEnabledSlot(i); j++) {
									disables.push(i);
								}
							}
							if (disables.length > 0) player.disableEquip(disables);
						},
					},
				},
			},
			/*
			"boss_sdyl_level":{
				trigger:{global:'gameStart'},
				forced:true,
				superCharlotte:true,
				charlotte:true,
				fixed:true,
				content:function(){},
				contentplayer:function(player){
					var list=[1,2,3,4,5];
					var list2=["boss_sdyl_playerlevel1","boss_sdyl_playerlevel2","boss_sdyl_playerlevel3","boss_sdyl_playerlevel4","boss_sdyl_playerlevel5"];
					player.removeAdditionalSkill('boss_sdyl_level');
					var num=list.randomGet();
					player.storage.boss_sdyl_level=num;
					var list3=list2.concat();
					list3.length=num;
					player.addAdditionalSkill('boss_sdyl_level',list3);
					game.log(player,'的等阶为',num);
					if(num>1){
						var a=function(card){
							return get.type(card)=='equip';
						};
						for(var i=0;i<ui.cardPile.childNodes.length;i++){
							if(a(ui.cardPile.childNodes[i])){
								player.chooseUseTarget(ui.cardPile.childNodes[i],'noanimate','nopopup',true);
								ui.cardPile.removeChild(ui.cardPile.childNodes[i]);
								player.update();
								game.delay(2);
								break;
							}
						}
					}
				},
				contentboss:function(boss){
					var list=[1,2,3,4,5];
					var list2=["boss_sdyl_bosslevel1","boss_sdyl_bosslevel2","boss_sdyl_bosslevel3","boss_sdyl_bosslevel4","boss_sdyl_bosslevel5"];
					boss.removeAdditionalSkill('boss_sdyl_level');
					var num=list.randomGet();
					boss.storage.boss_sdyl_level=num;
					var list3=list2.concat();
					list3.length=num;
					boss.addAdditionalSkill('boss_sdyl_level',list3);
					game.log(boss,'的等阶为',num);
					if(num>1){
						var a=function(card){
							return get.type(card)=='equip';
						};
						for(var i=0;i<ui.cardPile.childNodes.length;i++){
							if(a(ui.cardPile.childNodes[i])){
								boss.chooseUseTarget(ui.cardPile.childNodes[i],'noanimate','nopopup',true);
								ui.cardPile.removeChild(ui.cardPile.childNodes[i]);
								boss.update();
								game.delay(2);
								break;
							}
						}
					}
				},
			},
			"boss_sdyl_playerlevel1":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
			},
			"boss_sdyl_playerlevel3":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
				init:function(player){
					player.maxHp++;
					player.hp++;
					player.update();
				},
				mod:{
					cardUsable:function (card,player,num){
						if(card.name=='sha') return num+=1;
					},
				},
			},
			"boss_sdyl_playerlevel2":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
			},
			"boss_sdyl_playerlevel4":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
				trigger:{player:'phaseDrawBegin2'},
				forced:true,
				filter:function (event,player){
					return !event.numFixed;
				},
				content:function(){
					trigger.num++;
				},
			},
			"boss_sdyl_playerlevel5":{
				init:function(player){
					player.storage.boss_sdyl_playerlevel5=false;
					player.maxHp++;
					player.hp++;
					player.update();
				},
				audio:'niepan',
				unique:true,
				enable:'chooseToUse',
				mark:true,
				skillAnimation:true,
				animationStr:'重生',
				limited:true,
				animationColor:'orange',
				filter:function(event,player){
					if(player.storage.boss_sdyl_playerlevel5) return false;
					if(event.type=='dying'){
						if(player!=event.dying) return false;
						return true;
					}
					return false;
				},
				content:function(){
					'step 0'
					player.awakenSkill('boss_sdyl_playerlevel5');
					player.storage.boss_sdyl_playerlevel5=true;
					player.discard(player.getCards('j'));
					'step 1'
					player.link(false);
					'step 2'
					player.turnOver(false);
					'step 3'
					player.drawTo(Math.min(5,player.maxHp));
					'step 4'
					player.recover(player.maxHp-player.hp);
				},
				ai:{
					order:1,
					skillTagFilter:function(player){
						if(player.storage.boss_sdyl_playerlevel5) return false;
						if(player.hp>0) return false;
					},
					save:true,
					result:{
						player:function(player){
							if(player.hp<=0) return 10;
							if(player.hp<=2&&player.countCards('he')<=1) return 10;
							return 0;
						}
					},
					threaten:function(player,target){
						if(!target.storage.boss_sdyl_playerlevel5) return 0.6;
					}
				},
				intro:{
					content:'limited'
				}
			},
			"boss_sdyl_bosslevel1":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
			},
			"boss_sdyl_bosslevel3":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
				init:function(player){
					player.maxHp++;
					player.hp++;
					player.update();
				},
				trigger:{player:'phaseZhunbeiBegin'},
				forced:true,
				content:function(){
					var card=get.cardPile('sha');
					if(card){
						player.gain(card);
					}
				},
				mod:{
					cardUsable:function (card,player,num){
						if(card.name=='sha') return num+=1;
					},
				},
			},
			"boss_sdyl_bosslevel2":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
			},
			"boss_sdyl_bosslevel4":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
				trigger:{player:'phaseDrawBegin2'},
				forced:true,
				filter:function (event,player){
					return !event.numFixed;
				},
				content:function(){
					trigger.num++;
				},
				mod:{
					maxHandcard:function (player,num){
						return num+=1;
					},
				},
			},
			"boss_sdyl_bosslevel5":{
				fixed:true,
				globalFixed:true,
				charlotte:true,
				silent:true,
				popup:false,
				forced:true,
				init:function(player){
					player.maxHp++;
					player.hp++;
					player.update();
					if(_status.shidianyanluo_level&&_status.shidianyanluo_level>0){
						var players=game.filterPlayer(function(current){return current!=player;});
						player.useCard({name:'nanman'},false,players);
					}
				},
				trigger:{
					source:"damageBegin4",
					player:"useCardAfter",
					global:'gameDrawAfter',
				},
				filter:function (event,player,name){
					if(name=='gameDrawAfter'){
						if(!_status.shidianyanluo_level||_status.shidianyanluo_level==0){
							var players=game.filterPlayer(function(current){return current!=player;});
							player.useCard({name:'nanman'},false,players);
						}
						return false;
					}
					if(player.storage.boss_sdyl_bosslevel5) return false;
					if(name=='damageBegin4'){
						if(!event.card||event.card.name!='nanman') return false;
						return true;
					}else if(name=='useCardAfter'){
						if(!event.card||event.card.name!='nanman') return false;
						player.storage.boss_sdyl_bosslevel5=true;
						return false;
					}
				},
				content:function (){
					trigger.num++;
				},
			},
	*/
			boss_jingjia: {},
			boss_aozhan: {
				forced: true,
				locked: true,
				charlotte: true,
				group: ["boss_aozhan_wuqi", "boss_aozhan_fangju", "boss_aozhan_zuoji", "boss_aozhan_baowu"],
				subSkill: {
					wuqi: {
						mod: {
							cardUsable: function (card, player, num) {
								if (player.getEquip(1) && card.name == "sha") return num + 1;
							},
						},
						sub: true,
					},
					fangju: {
						trigger: {
							player: "damageBegin4",
						},
						forced: true,
						filter: function (event, player) {
							return player.getEquip(2) && event.num > 1;
						},
						content: function () {
							trigger.num = 1;
						},
						sub: true,
					},
					zuoji: {
						trigger: {
							player: "phaseDrawBegin",
						},
						forced: true,
						filter: function (event, player) {
							return player.getEquip(3) || player.getEquip(4);
						},
						content: function () {
							trigger.num++;
						},
						sub: true,
					},
					baowu: {
						trigger: {
							player: "phaseJudgeBefore",
						},
						forced: true,
						filter: function (event, player) {
							return player.getEquip(5);
						},
						content: function () {
							trigger.cancel();
							game.log(player, "跳过了判定阶段");
						},
						sub: true,
					},
				},
			},

			boss_yaoshou: {
				mod: {
					globalFrom: function (from, to, distance) {
						return distance - 2;
					},
				},
			},
			boss_duqu: {
				trigger: { player: "damageEnd" },
				filter: function (event, player) {
					return event.source && !event.source.hasSkill("boss_duqu");
				},
				content: function () {
					var target = trigger.source;
					if (!target.storage.boss_shedu) target.storage.boss_shedu = 0;
					target.storage.boss_shedu++;
					target.markSkill("boss_shedu");
				},
				forced: true,
				global: "boss_shedu",
				mod: {
					cardname: function (card, player) {
						if (card.name == "tao") return "sha";
					},
				},
			},
			boss_shedu: {
				trigger: { player: "phaseBegin" },
				mark: true,
				intro: { content: "mark" },
				forced: true,
				filter: function (event, player) {
					return player.storage.boss_shedu && player.storage.boss_shedu > 0;
				},
				content: function () {
					"step 0";
					var num = player.storage.boss_shedu;
					event.num = num;
					var chs = get.cnNumber(num);
					player.chooseToDiscard("he", num, "弃置" + chs + "张牌,或失去" + chs + "点体力").ai =
						function (card) {
							return 12 - get.value(card);
						};
					"step 1";
					if (!result.bool) player.loseHp(num);
					player.storage.boss_shedu--;
					if (num > 1) player.markSkill("boss_shedu");
					else player.unmarkSkill("boss_shedu");
				},
			},
			boss_jiushou: {
				mod: {
					maxHandcard: function (player, num) {
						return num - player.hp + 9;
					},
				},
				trigger: { player: ["phaseUseBegin", "phaseJieshuBegin", "phaseDrawBegin"] },
				forced: true,
				filter: function (event, player) {
					return event.name == "phaseDraw" || player.countCards("h") < 9;
				},
				content: function () {
					if (trigger.name == "phaseDraw") trigger.cancel();
					else player.draw(9 - player.countCards("h"));
				},
			},
			boss_echou_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_echou_switch_on", "boss_echou_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_echou_awake", "boss_echou");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_echou_awake");
							player.removeSkill("boss_echou_switch");
						},
					},
				},
			},
			boss_echou: {
				trigger: { global: "useCard" },
				filter: function (event, player) {
					return !event.player.hasSkill("boss_duqu") && ["tao", "jiu"].includes(event.card.name);
				},
				content: function () {
					var target = trigger.player;
					player.line(target);
					if (!target.storage.boss_shedu) target.storage.boss_shedu = 0;
					target.storage.boss_shedu++;
					target.markSkill("boss_shedu");
				},
			},
			boss_bingxian: {
				trigger: { global: "phaseJieshuBegin" },
				filter: function (event, player) {
					return event.player != player && event.player.countUsed("sha", true) == 0;
				},
				forced: true,
				content: function () {
					player.useCard({ name: "sha" }, trigger.player);
				},
			},
			boss_juyuan: {
				init: function (player, skill) {
					player.storage[skill] = 0;
				},
				trigger: { player: "phaseAfter" },
				forced: true,
				silent: true,
				popup: false,
				content: function () {
					player.storage.boss_juyuan = player.hp;
				},
				mod: {
					selectTarget: function (card, player, range) {
						if (card.name != "sha") return;
						if (range[1] == -1) return;
						if (player.hp >= player.storage.boss_juyuan) return;
						range[1] += 2;
					},
				},
			},
			boss_xushi_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_xushi_switch_on", "boss_xushi_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_xushi_awake", "boss_xushi");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_xushi_awake");
							player.removeSkill("boss_xushi_switch");
						},
					},
				},
			},
			boss_xushi: {
				trigger: { player: ["phaseUseEnd", "turnOverEnd"] },
				filter: function (event, player) {
					return event.name == "phaseUse" || !player.isTurnedOver();
				},
				forced: true,
				content: function () {
					"step 0";
					if (trigger.name == "phaseUse") {
						player.turnOver();
						event.finish();
					} else {
						event.list = game.filterPlayer(function (current) {
							return current != player;
						});
						event.list.sort(lib.sort.seat);
						player.line(event.list, "green");
					}
					"step 1";
					var target = event.list.shift();
					target.damage([1, 2].randomGet());
					if (event.list.length) event.redo();
				},
			},
			boss_zhaohuo: {
				trigger: {
					player: "damageBegin4",
					source: "damageBegin1",
				},
				forced: true,
				filter: function (event, player) {
					if (player == event.player) return event.hasNature("fire") || player == event.source;
					return true;
				},
				content: function () {
					if (player == trigger.player) trigger.cancel();
					else game.setNature(trigger, "fire");
				},
				ai: {
					unequip: true,
					skillTagFilter: function (player) {
						if (player != _status.currentPhase) return false;
					},
				},
			},
			boss_honglianx: {
				mod: {
					ignoredHandcard: function (card, player) {
						if (get.color(card) == "red") {
							return true;
						}
					},
					cardDiscardable: function (card, player, name) {
						if (name == "phaseDiscard" && get.color(card) == "red") return false;
					},
				},
				forced: true,
				trigger: { player: "phaseZhunbeiBegin" },
				content: function () {
					"step 0";
					event.num1 = 3;
					event.num2 = [0, 1, 2, 3].randomGet();
					event.togain = [];
					while (event.togain.length < event.num2) {
						var card = get.cardPile(function (card) {
							return !event.togain.includes(card) && get.color(card) == "red";
						});
						if (card) event.togain.push(card);
						else break;
					}
					event.num1 -= event.togain.length;
					if (event.togain.length) player.gain(event.togain, "draw");
					if (event.num1 == 0) event.finish();
					else {
						event.list = game
							.filterPlayer(function (current) {
								return current != player;
							})
							.randomGets(event.num1)
							.sortBySeat();
						player.line(event.list, "fire");
					}
					"step 1";
					var target = event.list.shift();
					target.damage("fire");
					if (event.list.length) event.redo();
				},
			},
			boss_yanyu_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_yanyu_switch_on", "boss_yanyu_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_yanyu_awake", "boss_yanyu");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_yanyu_awake");
							player.removeSkill("boss_yanyu_switch");
						},
					},
				},
			},
			boss_yanyu: {
				forced: true,
				trigger: { global: "phaseBegin" },
				filter: function (event, player) {
					return player != event.player;
				},
				content: function () {
					"step 0";
					event.count = 3;
					player.line(trigger.player, "fire");
					"step 1";
					event.count--;
					trigger.player.judge(function (card) {
						if (get.color(card) == "red") return -5;
						return 5;
					});
					"step 2";
					if (!result.bool) {
						trigger.player.damage("fire");
						if (event.count) event.goto(1);
					}
				},
			},
			boss_fengdong: {
				trigger: { player: "phaseBegin" },
				forced: true,
				content: function () {
					game.countPlayer(function (current) {
						if (current != player) current.addTempSkill("fengyin");
					});
				},
			},
			boss_xunyou: {
				trigger: { global: "phaseBegin" },
				forced: true,
				filter: function (event, player) {
					return player != event.player;
				},
				content: function () {
					"step 0";
					var list = game.filterPlayer(function (current) {
						return current != player && current.countCards("hej");
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target, "green");
						var card = target.getCards("hej").randomGet();
						event.card = card;
						player.gain(card, target);
						target.$giveAuto(card, player);
					} else event.finish();
					"step 1";
					if (player.getCards("h").includes(card) && get.type(card) == "equip")
						player.chooseUseTarget(card, true, "nopopup", "noanimate");
				},
			},
			boss_sipu_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_sipu_switch_on", "boss_sipu_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_sipu_awake", "boss_sipu");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_sipu_awake");
							player.removeSkill("boss_sipu_switch");
						},
					},
				},
			},
			boss_sipu: {
				global: "boss_sipu2",
			},
			boss_sipu2: {
				mod: {
					cardEnabled: function (card, player) {
						var sc = _status.currentPhase;
						if (
							sc &&
							sc != player &&
							sc.isPhaseUsing() &&
							sc.hasSkill("boss_sipu") &&
							!sc.hasSkill("boss_sipu_switch") &&
							sc.countUsed() < 3
						) {
							return false;
						}
					},
					cardUsable: function (card, player) {
						var sc = _status.currentPhase;
						if (
							sc &&
							sc != player &&
							sc.isPhaseUsing() &&
							sc.hasSkill("boss_sipu") &&
							!sc.hasSkill("boss_sipu_switch") &&
							sc.countUsed() < 3
						) {
							return false;
						}
					},
					cardRespondable: function (card, player) {
						var sc = _status.currentPhase;
						if (
							sc &&
							sc != player &&
							sc.isPhaseUsing() &&
							sc.hasSkill("boss_sipu") &&
							!sc.hasSkill("boss_sipu_switch") &&
							sc.countUsed() < 3
						) {
							return false;
						}
					},
					cardSavable: function (card, player) {
						var sc = _status.currentPhase;
						if (
							sc &&
							sc != player &&
							sc.isPhaseUsing() &&
							sc.hasSkill("boss_sipu") &&
							!sc.hasSkill("boss_sipu_switch") &&
							sc.countUsed() < 3
						) {
							return false;
						}
					},
				},
			},
			/*----分界线----*/
			boss_zirun: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				logTarget: function () {
					return game.filterPlayer();
				},
				content: function () {
					var list = game.filterPlayer().sortBySeat();
					game.asyncDraw(list, function (current) {
						if (current.countCards("e")) return 2;
						return 1;
					});
				},
			},
			boss_juehong: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				logTarget: function (event, player) {
					return player.getEnemies();
				},
				content: function () {
					"step 0";
					event.list = player.getEnemies().sortBySeat();
					"step 1";
					if (event.list.length) {
						var target = event.list.shift();
						if (target.countCards("he")) {
							var es = target.getCards("e");
							if (es.length) {
								target.discard(es);
							} else {
								player.discardPlayerCard(target, "h", true);
							}
						}
						event.redo();
					}
				},
			},
			boss_zaoyi: {
				trigger: { global: "dieAfter" },
				forced: true,
				filter: function (event, player) {
					if (lib.config.mode != "boss") return false;
					var list = ["boss_shuishenxuanming", "boss_shuishengonggong"];
					if (list.includes(event.player.name)) {
						return !game.hasPlayer(function (current) {
							return list.includes(current.name);
						});
					}
					return false;
				},
				content: function () {
					player.draw(4);
					player.addSkill("boss_zaoyi_hp");
				},
				subSkill: {
					hp: {
						trigger: { player: "phaseZhunbeiBegin" },
						forced: true,
						mark: true,
						intro: {
							content: "每个回合开始时使体力值最少的敌方角色失去所有体力",
						},
						content: function () {
							var list = player.getEnemies();
							var min = list[0].hp;
							for (var i = 0; i < list.length; i++) {
								if (list[i].hp < min) {
									min = list[i].hp;
								}
							}
							for (var i = 0; i < list.length; i++) {
								if (list[i].hp > min) {
									list.splice(i--, 1);
								}
							}
							player.line(list, "green");
							list.sortBySeat();
							for (var i = 0; i < list.length; i++) {
								list[i].loseHp(min);
							}
						},
					},
				},
				mod: {
					targetEnabled: function (card, player, target, now) {
						if (target.isEnemyOf(player)) {
							var type = get.type(card, "trick");
							if (type == "trick") {
								if (
									game.hasPlayer(function (current) {
										return current.name == "boss_shuishenxuanming";
									})
								) {
									return false;
								}
							}
							if (type == "basic") {
								if (
									game.hasPlayer(function (current) {
										return current.name == "boss_shuishengonggong";
									})
								) {
									return false;
								}
							}
						}
					},
				},
			},
			boss_lingqu: {
				init: function (player) {
					player.storage.boss_lingqu = 0;
				},
				trigger: { player: "damageEnd" },
				forced: true,
				content: function () {
					player.draw();
					player.storage.boss_lingqu++;
					player.markSkill("boss_lingqu");
				},
				intro: {
					content: "手牌上限+#",
				},
				mod: {
					maxHandcard: function (player, num) {
						return num + player.storage.boss_lingqu;
					},
				},
				group: "boss_lingqu_cancel",
				subSkill: {
					cancel: {
						trigger: { player: "damageBegin4" },
						priority: -11,
						forced: true,
						filter: function (event) {
							return event.num > 1;
						},
						content: function () {
							trigger.num = 0;
						},
					},
				},
			},
			boss_baiyi: {
				group: ["boss_baiyi_draw", "boss_baiyi_thunder", "boss_baiyi_discard"],
				subSkill: {
					discard: {
						trigger: { global: "roundStart" },
						forced: true,
						filter: function () {
							return game.roundNumber == 5;
						},
						logTarget: function (event, player) {
							return player.getEnemies();
						},
						content: function () {
							"step 0";
							event.list = player.getEnemies();
							"step 1";
							if (event.list.length) {
								event.list.shift().chooseToDiscard("he", true, 2);
								event.redo();
							}
						},
					},
					draw: {
						trigger: { global: "phaseDrawBegin" },
						forced: true,
						filter: function (event, player) {
							return game.roundNumber < 3 && event.player.isEnemyOf(player);
						},
						content: function () {
							trigger.num--;
						},
					},
					thunder: {
						trigger: { player: "damageBegin4" },
						filter: function (event) {
							return event.hasNature("thunder") && game.roundNumber < 7;
						},
						forced: true,
						content: function () {
							trigger.cancel();
						},
						ai: {
							nothunder: true,
							skillTagFilter: function () {
								return game.roundNumber < 7;
							},
							effect: {
								target: function (card, player, target, current) {
									if (get.tag(card, "thunderDamage") && game.roundNumber < 7) return 0;
								},
							},
						},
					},
				},
			},
			boss_qingzhu: {
				trigger: { player: "phaseDiscardBefore" },
				forced: true,
				content: function () {
					trigger.cancel();
				},
				mod: {
					cardEnabled: function (card, player) {
						if (
							card.name == "sha" &&
							_status.currentPhase == player &&
							_status.event.getParent("phaseUse") &&
							!player.hasSkill("boss_jiding")
						) {
							return false;
						}
					},
				},
			},
			boss_jiazu: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				getTargets: function (player) {
					var targets = [];
					targets.add(player.getNext());
					targets.add(player.getPrevious());
					var enemies = player.getEnemies();
					for (var i = 0; i < targets.length; i++) {
						if (
							!enemies.includes(targets[i]) ||
							(!targets[i].getEquip(3) && !targets[i].getEquip(4))
						) {
							targets.splice(i--, 1);
						}
					}
					return targets;
				},
				filter: function (event, player) {
					return lib.skill.boss_jiazu.getTargets(player).length > 0;
				},
				logTarget: function (event, player) {
					return lib.skill.boss_jiazu.getTargets(player);
				},
				content: function () {
					"step 0";
					event.list = lib.skill.boss_jiazu.getTargets(player).sortBySeat();
					"step 1";
					if (event.list.length) {
						var target = event.list.shift();
						var cards = target.getCards("e", function (card) {
							var subtype = get.subtype(card);
							return subtype == "equip3" || subtype == "equip4";
						});
						if (cards.length) {
							target.discard(cards);
						}
						event.redo();
					}
				},
			},
			boss_jiding: {
				trigger: { global: "damageEnd" },
				forced: true,
				mark: true,
				intro: {
					content: "info",
				},
				filter: function (event, player) {
					return (
						event.player != player &&
						event.player.isFriendOf(player) &&
						event.source &&
						event.source.isIn() &&
						event.source.isEnemyOf(player)
					);
				},
				logTarget: "source",
				content: function () {
					"step 0";
					player.useCard({ name: "sha", nature: "thunder" }, trigger.source);
					"step 1";
					player.removeSkill("boss_jiding");
				},
				group: "boss_jiding_recover",
				subSkill: {
					recover: {
						trigger: { source: "damageEnd" },
						silent: true,
						filter: function (event, player) {
							return event.getParent(3).name == "boss_jiding";
						},
						content: function () {
							for (var i = 0; i < game.players.length; i++) {
								if (game.players[i].name == "boss_jinshenrushou") {
									game.players[i].recover();
									player.line(game.players[i], "green");
								}
							}
						},
					},
				},
			},
			boss_xingqiu: {
				init: function (player) {
					player.storage.boss_xingqiu = false;
				},
				trigger: { player: "phaseDrawBegin" },
				direct: true,
				locked: true,
				content: function () {
					"step 0";
					if (player.storage.boss_xingqiu) {
						player.logSkill("boss_xingqiu");
						event.list = player.getEnemies().sortBySeat();
					} else {
						event.finish();
					}
					player.storage.boss_xingqiu = !player.storage.boss_xingqiu;
					"step 1";
					if (event.list.length) {
						var target = event.list.shift();
						if (!target.isLinked()) {
							target.link();
							player.line(target, "green");
						}
						event.redo();
					}
					"step 2";
					game.delay();
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].name == "boss_mingxingzhu") {
							game.players[i].addSkill("boss_jiding");
						}
					}
				},
			},
			boss_kuangxiao: {
				mod: {
					targetInRange: function (card, player, target) {
						return true;
					},
					selectTarget: function (card, player, range) {
						if (card.name == "sha") {
							range[1] = -1;
							range[0] = -1;
						}
					},
					playerEnabled: function (card, player, target) {
						if (card.name == "sha" && target.isFriendOf(player)) {
							return false;
						}
					},
				},
			},
			boss_yinzei_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_yinzei_switch_on", "boss_yinzei_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_yinzei_awake", "boss_yinzei");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_yinzei_awake");
							player.removeSkill("boss_yinzei_switch");
						},
					},
				},
			},
			boss_jicai_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_jicai_switch_on", "boss_jicai_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_jicai_awake", "boss_jicai");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_jicai_awake");
							player.removeSkill("boss_jicai_switch");
						},
					},
				},
			},
			boss_luanchang_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_luanchang_switch_on", "boss_luanchang_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_luanchang_awake", "boss_luanchang");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_luanchang_awake");
							player.removeSkill("boss_luanchang_switch");
						},
					},
				},
			},
			boss_yandu_switch: {
				unique: true,
				charlotte: true,
				group: ["boss_yandu_switch_on", "boss_yandu_switch_off"],
				subSkill: {
					off: {
						trigger: { global: "gameStart" },
						content: function () {
							player.disableSkill("boss_yandu_awake", "boss_yandu");
						},
						silent: true,
					},
					on: {
						trigger: { player: "changeHp" },
						filter: function (event, player) {
							return player.hp <= player.maxHp / 2;
						},
						forced: true,
						skillAnimation: true,
						animationColor: "thunder",
						content: function () {
							player.enableSkill("boss_yandu_awake");
							player.removeSkill("boss_yandu_switch");
						},
					},
				},
			},
			boss_shenwuzaishi: {
				trigger: { global: "dieAfter" },
				silent: true,
				filter: function (event, player) {
					return player.side != game.boss.side;
				},
				content: function () {
					if (player == trigger.source && trigger.player.name == "boss_zhuyin") {
						player.draw(3);
						player.recover();
					} else if (trigger.player.side == player.side) {
						player.draw(player.group == "shen" ? 3 : 1);
						player.recover();
					}
				},
			},
			boss_wuzang: {
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				content: function () {
					trigger.num += Math.max(5, Math.floor(player.hp / 2)) - 2;
				},
				mod: {
					maxHandcard: function (player, num) {
						return num - player.hp;
					},
				},
			},
			boss_xiangde: {
				trigger: { player: "damageBegin3" },
				forced: true,
				filter: function (event, player) {
					return (
						event.source &&
						event.source.isIn() &&
						event.source != player &&
						event.source.getEquip(1)
					);
				},
				content: function () {
					trigger.num++;
				},
			},
			boss_yinzei: {
				trigger: { player: "damageEnd" },
				forced: true,
				logTarget: "source",
				filter: function (event, player) {
					return (
						event.source &&
						event.source.isIn() &&
						event.source != player &&
						event.source.countCards("he") &&
						!player.countCards("h")
					);
				},
				content: function () {
					trigger.source.randomDiscard();
				},
			},
			boss_zhue: {
				trigger: { global: "damageEnd" },
				forced: true,
				filter: function (event, player) {
					return event.source && event.source.isIn() && event.source != player;
				},
				logTarget: "source",
				content: function () {
					game.asyncDraw([player, trigger.source]);
				},
			},
			boss_yandu: {
				trigger: { global: "phaseJieshuBegin" },
				filter: function (event, player) {
					return (
						event.player != player &&
						!event.player.getStat("damage") &&
						event.player.countCards("he")
					);
				},
				logTarget: "player",
				forced: true,
				content: function () {
					player.gainPlayerCard(trigger.player, true);
				},
			},
			boss_futai: {
				global: "boss_futai2",
				trigger: { player: "phaseZhunbeiBegin" },
				logTarget: function (event, player) {
					return game.filterPlayer(function (current) {
						return current.isDamaged();
					});
				},
				forced: true,
				content: function () {
					"step 0";
					var list = game
						.filterPlayer(function (current) {
							return current.isDamaged();
						})
						.sortBySeat();
					event.list = list;
					"step 1";
					if (event.list.length) {
						event.list.shift().recover();
						event.redo();
					}
				},
			},
			boss_futai2: {
				mod: {
					cardSavable: function (card, player) {
						if (
							card.name == "tao" &&
							!_status.event.skill &&
							game.hasPlayer(function (current) {
								return (
									current != player &&
									current.hasSkill("boss_futai") &&
									_status.currentPhase != current
								);
							})
						) {
							return false;
						}
					},
					cardEnabled: function (card, player) {
						if (
							card.name == "tao" &&
							!_status.event.skill &&
							game.hasPlayer(function (current) {
								return (
									current != player &&
									current.hasSkill("boss_futai") &&
									_status.currentPhase != current
								);
							})
						) {
							return false;
						}
					},
				},
			},
			boss_luanchang: {
				group: ["boss_luanchang_begin", "boss_luanchang_end"],
				subSkill: {
					begin: {
						trigger: { player: "phaseZhunbeiBegin" },
						forced: true,
						content: function () {
							var list = game
								.filterPlayer(function (current) {
									return player.canUse("nanman", current);
								})
								.sortBySeat();
							if (list.length) {
								player.useCard({ name: "nanman" }, list);
							}
						},
					},
					end: {
						trigger: { player: "phaseJieshuBegin" },
						forced: true,
						content: function () {
							var list = game
								.filterPlayer(function (current) {
									return player.canUse("wanjian", current);
								})
								.sortBySeat();
							if (list.length) {
								player.useCard({ name: "wanjian" }, list);
							}
						},
					},
				},
			},
			boss_nitai: {
				group: ["boss_nitai_in", "boss_nitai_out"],
				subSkill: {
					in: {
						trigger: { player: "damageBegin4" },
						forced: true,
						filter: function (event, player) {
							return _status.currentPhase == player;
						},
						content: function () {
							trigger.cancel();
						},
					},
					out: {
						trigger: { player: "damageBegin1" },
						forced: true,
						filter: function (event, player) {
							return _status.currentPhase != player && event.hasNature("fire");
						},
						content: function () {
							trigger.num++;
						},
					},
				},
			},
			boss_minwan: {
				group: ["boss_minwan_clear", "boss_minwan_draw", "boss_minwan_add"],
				subSkill: {
					clear: {
						trigger: { player: "phaseAfter" },
						silent: true,
						content: function () {
							delete player.storage.boss_minwan;
						},
					},
					draw: {
						trigger: { player: "useCard" },
						forced: true,
						filter: function (event, player) {
							return (
								_status.currentPhase == player && Array.isArray(player.storage.boss_minwan)
							);
						},
						content: function () {
							player.draw();
						},
					},
					add: {
						trigger: { source: "damageAfter" },
						filter: function (event, player) {
							return _status.currentPhase == player;
						},
						forced: true,
						content: function () {
							if (!player.storage.boss_minwan) {
								player.storage.boss_minwan = [player];
							}
							player.storage.boss_minwan.add(trigger.player);
						},
					},
				},
				mod: {
					playerEnabled: function (card, player, target) {
						if (
							_status.currentPhase == player &&
							Array.isArray(player.storage.boss_minwan) &&
							!player.storage.boss_minwan.includes(target)
						) {
							return false;
						}
					},
				},
			},
			boss_tanyu: {
				trigger: { player: "phaseDiscardBefore" },
				forced: true,
				content: function () {
					trigger.cancel();
				},
				group: "boss_tanyu_hp",
				subSkill: {
					hp: {
						trigger: { player: "phaseJieshuBegin" },
						forced: true,
						popup: false,
						filter: function (event, player) {
							return player.isMaxHandcard();
						},
						content: function () {
							player.loseHp();
						},
					},
				},
			},
			boss_cangmu: {
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				content: function () {
					trigger.num += game.countPlayer() - 2;
				},
			},
			boss_jicai: {
				trigger: { global: "recoverAfter" },
				forced: true,
				logTarget: "player",
				content: function () {
					if (trigger.player == player) {
						player.draw(2);
					} else {
						game.asyncDraw([player, trigger.player]);
					}
				},
			},
			boss_xiongshou: {
				group: ["boss_xiongshou_turn", "boss_xiongshou_damage"],
				subSkill: {
					damage: {
						trigger: { source: "damageBegin1" },
						forced: true,
						filter: function (event, player) {
							return (
								event.notLink() &&
								event.card &&
								event.card.name == "sha" &&
								event.player.hp < player.hp
							);
						},
						content: function () {
							trigger.num++;
						},
					},
					turn: {
						trigger: { player: "turnOverBefore" },
						priority: 20,
						forced: true,
						filter: function (event, player) {
							return !player.isTurnedOver();
						},
						content: function () {
							trigger.cancel();
							game.log(player, "取消了翻面");
						},
					},
				},
				mod: {
					globalFrom: function (from, to, distance) {
						return distance - 1;
					},
				},
				ai: {
					noturn: true,
				},
			},
			xiuluolianyuji2: {
				equipSkill: true,
				vanish: true,
				trigger: { player: "damageEnd" },
				forced: true,
				popup: false,
				content: function () {
					if (trigger.xiuluolianyuji) player.recover();
					player.removeSkill("xiuluolianyuji2");
				},
			},
			xiuluolianyuji: {
				mod: {
					selectTarget: function (card, player, range) {
						if (card.name != "sha") return;
						if (range[1] == -1) return;
						range[1] = Infinity;
					},
				},
				trigger: { source: "damageBegin1" },
				forced: true,
				filter: function (event) {
					return event.card && event.card.name == "sha";
				},
				content: function () {
					trigger.num++;
					trigger.xiuluolianyuji = true;
					trigger.player.addSkill("xiuluolianyuji2");
				},
			},
			juechenjinge: {
				equipSkill: true,
				global: "juechenjinge2",
			},
			juechenjinge2: {
				equipSkill: true,
				mod: {
					globalTo: function (from, to, distance) {
						return (
							distance +
							game.countPlayer(function (current) {
								if (current == to) return;
								if (current.side != to.side) return;
								if (current.hasSkill("juechenjinge")) return 1;
							})
						);
					},
				},
			},
			chiyanzhenhunqin: {
				equipSkill: true,
				trigger: { source: "damageBegin1" },
				forced: true,
				content: function () {
					game.setNature(trigger, "fire");
				},
			},
			longfenghemingjian: {
				equipSkill: true,
				inherit: "cixiong_skill",
				filter: function (event, player) {
					return game.hasNature(event.card, "linked");
				},
			},
			qicaishenlu: {
				trigger: { source: "damageBegin1" },
				forced: true,
				filter: function (event, player) {
					return game.hasNature(event.card, "linked");
				},
				content: function () {
					trigger.num++;
				},
			},
			boss_chiyan: {
				trigger: { global: "gameStart" },
				forced: true,
				popup: false,
				unique: true,
				fixed: true,
				content: function () {
					player.smoothAvatar();
					player.init("boss_zhuque");
					_status.noswap = true;
					game.addVideo("reinit2", player, player.name);
				},
			},
			boss_chiyan2: {
				mode: ["boss"],
				global: "boss_chiyan2x",
				trigger: { player: "dieBegin" },
				silent: true,
				unique: true,
				fixed: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_chiyan2x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				unique: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_chiyan2");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					if (game.me != game.boss) {
						game.boss.changeSeat(6);
					} else {
						game.boss.nextSeat.changeSeat(3);
						game.boss.previousSeat.changeSeat(5);
					}
					game.changeBoss("boss_huoshenzhurong");
					for (var i = 0; i < game.players.length; i++) {
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].update();
					}
					game.delay(0.5);
					"step 2";
					game.addBossFellow(game.me == game.boss ? 1 : 5, "boss_yanling");
					game.addBossFellow(7, "boss_yanling");
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
					}
				},
			},
			boss_chiyan3: {
				mode: ["boss"],
				global: "boss_chiyan3x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				unique: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					player.nextSeat.hide();
					player.previousSeat.hide();
					game.addVideo("hidePlayer", player);
					game.addVideo("hidePlayer", player.nextSeat);
					game.addVideo("hidePlayer", player.previousSeat);
				},
			},
			boss_chiyan3x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				globalFixed: true,
				unique: true,
				fixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_chiyan3");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss("boss_yandi");
					game.delay(0.5);
					"step 2";
					game.changeBoss("boss_huoshenzhurong", game.boss.previousSeat);
					game.changeBoss("boss_yanling", game.boss.nextSeat);
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
				},
			},
			boss_qingmu: {
				trigger: { global: "gameStart" },
				forced: true,
				popup: false,
				fixed: true,
				unique: true,
				content: function () {
					player.smoothAvatar();
					player.init("boss_qinglong");
					_status.noswap = true;
					game.addVideo("reinit2", player, player.name);
				},
			},
			boss_qingmu2: {
				mode: ["boss"],
				global: "boss_qingmu2x",
				trigger: { player: "dieBegin" },
				silent: true,
				unique: true,
				fixed: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_qingmu2x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				globalFixed: true,
				unique: true,
				fixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_qingmu2");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					if (game.me != game.boss) {
						game.boss.changeSeat(6);
					} else {
						game.boss.nextSeat.changeSeat(3);
						game.boss.previousSeat.changeSeat(5);
					}
					game.changeBoss("boss_mushengoumang");
					for (var i = 0; i < game.players.length; i++) {
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].update();
					}
					game.delay(0.5);
					"step 2";
					game.addBossFellow(game.me == game.boss ? 1 : 5, "boss_shujing");
					game.addBossFellow(7, "boss_shujing");
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
					}
				},
			},
			boss_qingmu3: {
				mode: ["boss"],
				global: "boss_qingmu3x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				unique: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					player.nextSeat.hide();
					player.previousSeat.hide();
					game.addVideo("hidePlayer", player);
					game.addVideo("hidePlayer", player.nextSeat);
					game.addVideo("hidePlayer", player.previousSeat);
				},
			},
			boss_qingmu3x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				unique: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_qingmu3");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss("boss_taihao");
					game.delay(0.5);
					"step 2";
					game.changeBoss("boss_mushengoumang", game.boss.previousSeat);
					game.changeBoss("boss_shujing", game.boss.nextSeat);
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
				},
			},
			boss_xuanlin: {
				trigger: { global: "gameStart" },
				forced: true,
				popup: false,
				fixed: true,
				unique: true,
				content: function () {
					player.smoothAvatar();
					player.init("boss_xuanwu");
					_status.noswap = true;
					game.addVideo("reinit2", player, player.name);
				},
			},
			boss_xuanlin2: {
				mode: ["boss"],
				global: "boss_xuanlin2x",
				trigger: { player: "dieBegin" },
				silent: true,
				unique: true,
				fixed: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_xuanlin2x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				globalFixed: true,
				unique: true,
				fixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_xuanlin2");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					if (game.me != game.boss) {
						game.boss.changeSeat(6);
					} else {
						game.boss.nextSeat.changeSeat(3);
						game.boss.previousSeat.changeSeat(5);
					}
					game.changeBoss("boss_shuishengonggong");
					for (var i = 0; i < game.players.length; i++) {
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].update();
					}
					game.delay(0.5);
					"step 2";
					game.addBossFellow(game.me == game.boss ? 1 : 7, "boss_shuishenxuanming");
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
					}
				},
			},
			boss_xuanlin3: {
				mode: ["boss"],
				global: "boss_xuanlin3x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				unique: true,
				filter: function (event, player) {
					if (game.boss && game.boss.name == "boss_zhuanxu") return false;
					return true;
				},
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
					if (player.nextSeat.side == player.side) {
						player.nextSeat.hide();
						game.addVideo("hidePlayer", player.nextSeat);
					}
					if (player.previousSeat.side == player.side) {
						player.previousSeat.hide();
						player.previousSeat.node.handcards1.hide();
						player.previousSeat.node.handcards2.hide();
						game.addVideo("hidePlayer", player.previousSeat);
						game.addVideo("deleteHandcards", player.previousSeat);
					}
				},
			},
			boss_xuanlin3x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				unique: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					if (game.boss && game.boss.name == "boss_zhuanxu") return false;
					return event.player.hasSkill("boss_xuanlin3");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss("boss_zhuanxu");
					game.delay(0.5);
					"step 2";
					game.addBossFellow(game.me == game.boss ? 7 : 5, "boss_shuishengonggong");
					game.changeBoss("boss_shuishenxuanming", game.boss.nextSeat);
					game.boss.previousSeat.maxHp--;
					game.boss.previousSeat.update();
					game.boss.nextSeat.maxHp--;
					game.boss.nextSeat.update();
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
				},
			},
			boss_baimang: {
				trigger: { global: "gameStart" },
				forced: true,
				popup: false,
				fixed: true,
				unique: true,
				content: function () {
					player.smoothAvatar();
					player.init("boss_baihu");
					_status.noswap = true;
					game.addVideo("reinit2", player, player.name);
				},
			},
			boss_baimang2: {
				mode: ["boss"],
				global: "boss_baimang2x",
				trigger: { player: "dieBegin" },
				silent: true,
				unique: true,
				fixed: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_baimang2x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				globalFixed: true,
				unique: true,
				fixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_baimang2");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					if (game.me != game.boss) {
						game.boss.changeSeat(6);
					} else {
						game.boss.nextSeat.changeSeat(3);
						game.boss.previousSeat.changeSeat(5);
					}
					game.changeBoss("boss_jinshenrushou");
					for (var i = 0; i < game.players.length; i++) {
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].update();
					}
					game.delay(0.5);
					"step 2";
					game.addBossFellow(game.me == game.boss ? 1 : 5, "boss_mingxingzhu");
					game.addBossFellow(7, "boss_mingxingzhu");
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
					}
				},
			},
			boss_baimang3: {
				mode: ["boss"],
				global: "boss_baimang3x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				unique: true,
				filter: function (event, player) {
					return player == game.boss;
				},
				content: function () {
					player.hide();
					player.nextSeat.hide();
					player.previousSeat.hide();
					game.addVideo("hidePlayer", player);
					game.addVideo("hidePlayer", player.nextSeat);
					game.addVideo("hidePlayer", player.previousSeat);
				},
			},
			boss_baimang3x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				unique: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_baimang3");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss("boss_shaohao");
					game.delay(0.5);
					"step 2";
					game.changeBoss("boss_jinshenrushou", game.boss.previousSeat);
					game.changeBoss("boss_mingxingzhu", game.boss.nextSeat);
					game.boss.previousSeat.maxHp--;
					game.boss.previousSeat.update();
					if (game.me != game.boss) {
						game.addBossFellow(4, "boss_mingxingzhu");
					} else {
						// ui.arena.dataset.number='7';
						// game.addVideo('arenaNumber',null,7);
						// game.boss.previousSeat.changeSeat(6);
						// game.boss.nextSeat.nextSeat.changeSeat(2);
						// game.boss.nextSeat.nextSeat.nextSeat.changeSeat(3);
						// game.boss.nextSeat.nextSeat.nextSeat.nextSeat.changeSeat(4);
						game.addBossFellow(6, "boss_mingxingzhu");
					}
					"step 3";
					var dnum = 0;
					var dead = game.dead.slice(0);
					for (var i = 0; i < dead.length; i++) {
						if (!dead[i].side && dead[i].maxHp > 0 && dead[i].parentNode == player.parentNode) {
							dead[i].revive(dead[i].maxHp);
							dnum++;
						}
					}
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i].side) continue;
						game.players[i].removeEquipTrigger();
						var hej = game.players[i].getCards("hej");
						for (var j = 0; j < hej.length; j++) {
							hej[j].discard(false);
						}
						game.players[i].hp = game.players[i].maxHp;
						game.players[i].hujia = 0;
						game.players[i].classList.remove("turnedover");
						game.players[i].removeLink();
						game.players[i].directgain(get.cards(4 - dnum));
					}
					"step 4";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = game.boss;
					_status.event.step = 0;
					_status.roundStart = game.boss;
					game.phaseNumber = 0;
					game.roundNumber = 0;
				},
			},
			boss_shenyi: {
				unique: true,
				mod: {
					judge: function (player, result) {
						if (_status.event.type == "phase") {
							if (result.bool == false) {
								result.bool = null;
							} else {
								result.bool = false;
							}
						}
					},
				},
				trigger: { player: "turnOverBefore" },
				priority: 20,
				forced: true,
				filter: function (event, player) {
					return !player.isTurnedOver();
				},
				content: function () {
					trigger.cancel();
					game.log(player, "取消了翻面");
				},
				ai: {
					noturn: true,
					effect: {
						target: function (card, player, target) {
							if (get.type(card) == "delay") return 0.5;
						},
					},
				},
			},
			honghuangzhili: {
				init: function (player) {
					player.disableSkill("honghuangzhili", "boss_shenyi");
				},
				mark: true,
				nopop: true,
				intro: {
					content: "【神裔】无效直到下家的回合开始",
				},
				marktext: "荒",
				onremove: function (player) {
					player.enableSkill("honghuangzhili", "boss_shenyi");
				},
				trigger: { global: "phaseZhunbeiBegin" },
				forced: true,
				popup: false,
				filter: function (event, player) {
					return event.player == player.next;
				},
				content: function () {
					player.removeSkill("honghuangzhili");
				},
			},
			boss_shenen: {
				mode: ["boss"],
				unique: true,
				global: "boss_shenen2",
			},
			boss_shenen2: {
				mod: {
					targetInRange: function (card, player) {
						if (player.side) return true;
					},
					maxHandcard: function (player, num) {
						if (!player.side) return num + 1;
					},
				},
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				filter: function (event, player) {
					return !player.side;
				},
				content: function () {
					trigger.num++;
				},
			},
			boss_fentian: {
				trigger: { source: "damageBegin1" },
				forced: true,
				filter: function (event) {
					return !event.hasNature("fire");
				},
				content: function () {
					trigger.hasNature("fire");
				},
				mod: {
					cardUsable: function (card) {
						if (get.color(card) == "red") return Infinity;
					},
					targetInRange: function (card) {
						if (get.color(card) == "red") return true;
					},
					wuxieRespondable: function (card, player, target) {
						if (get.color(card) == "red" && player != target) return false;
					},
				},
				group: "boss_fentian2",
			},
			boss_fentian2: {
				trigger: { player: "useCard" },
				forced: true,
				filter: function (event, player) {
					return get.color(event.card) == "red";
				},
				content: function () {
					trigger.directHit.addArray(game.players);
					trigger.directHit.remove(player);
				},
			},
			boss_xingxia: {
				enable: "phaseUse",
				mode: ["boss"],
				filter: function (event, player) {
					if (
						!game.hasPlayer(function (current) {
							return current.name == "boss_yanling";
						})
					) {
						return false;
					}
					return (
						!player.storage.boss_xingxia || game.roundNumber - player.storage.boss_xingxia >= 2
					);
				},
				unique: true,
				filterTarget: function (card, player, target) {
					return target.name == "boss_yanling";
				},
				selectTarget: -1,
				line: "fire",
				content: function () {
					target.damage(2, "fire");
				},
				contentAfter: function () {
					"step 0";
					player.storage.boss_xingxia = game.roundNumber;
					player.chooseTarget(function (card, player, target) {
						return target.side != player.side;
					}).ai = function (target) {
						return get.damageEffect(target, player, player, "fire");
					};
					"step 1";
					if (result.bool) {
						event.target = result.targets[0];
						player.line(event.target, "fire");
						event.target.chooseToDiscard(
							"he",
							{ color: "red" },
							"弃置一张红色牌或受到1点火焰伤害"
						).ai = function (card) {
							var player = _status.event.player;
							var source = _status.event.parent.player;
							if (get.damageEffect(player, source, player, "fire") >= 0) return 0;
							return 8 - get.value(card);
						};
					} else {
						event.finish();
					}
					"step 2";
					if (!result.bool) {
						event.target.damage("fire");
					}
				},
				ai: {
					order: 6,
					result: {
						target: function (player, target) {
							if (
								target.isLinked() &&
								player.isLinked() &&
								get.damageEffect(player, player, player, "fire") < 0
							)
								return -1;
							return 1;
						},
					},
				},
			},
			boss_huihuo: {
				global: "boss_huihuo2",
				unique: true,
				mod: {
					cardUsable: function (card, player, num) {
						if (card.name == "sha") return num + 1;
					},
				},
				ai: {
					revertsave: true,
					effect: {
						target: function (card, player, target) {
							if (!game.boss) return;
							if (card.name == "tiesuo") {
								if (_status.event.player == game.boss) return "zeroplayertarget";
								return 0.5;
							}
							if (get.tag(card, "damage") || get.tag(card, "recover")) {
								if (
									game.boss.isLinked() &&
									get.damageEffect(game.boss, player, game.boss, "fire") < 0
								) {
									if (
										game.hasPlayer(function (current) {
											return current.isEnemyOf(game.boss) && current.isLinked();
										})
									) {
										return;
									}
									if (get.tag(card, "natureDamage") && target.isLinked()) {
										return;
									}
								}
								if (target.isDying()) {
									if (player.isEnemyOf(target) && player.hp >= -1) return [0, 0, 0, 1];
									return "zeroplayertarget";
								}
								return -0.5;
							}
						},
					},
				},
			},
			boss_huihuo2: {
				trigger: { global: "dieAfter" },
				forced: true,
				globalFixed: true,
				unique: true,
				filter: function (event, player) {
					return (
						event.player.hasSkill("boss_huihuo") &&
						event.player.isDead() &&
						player.isEnemyOf(event.player)
					);
				},
				content: function () {
					trigger.player.line(player, "fire");
					player.damage("nosource", "fire", 3).animate = false;
					player.$damage(trigger.player);
					player.$damagepop(-3, "fire");
					if (lib.config.animation && !lib.config.low_performance) {
						player.$fire();
					}
					if (!event.parent.parent.boss_huihuo_logv) {
						event.parent.parent.boss_huihuo_logv = true;
						game.logv(trigger.player, "boss_huihuo", game.filterPlayer(), event.parent.parent);
					}
				},
			},
			boss_furan: {
				unique: true,
				global: "boss_furan2",
			},
			boss_furan2: {
				enable: "chooseToUse",
				filter: function (event, player) {
					return (
						event.type == "dying" &&
						event.dying.hasSkill("boss_furan") &&
						player.isEnemyOf(event.dying)
					);
				},
				filterCard: function (card) {
					return get.color(card) == "red";
				},
				position: "he",
				viewAs: { name: "tao" },
				prompt: "将一张红色牌当桃使用",
				check: function (card) {
					return 8 - get.value(card);
				},
				ai: {
					order: 5,
					skillTagFilter: function (player) {
						var event = _status.event;
						if (
							event.dying &&
							event.dying.hasSkill("boss_furan") &&
							player.isEnemyOf(event.dying)
						) {
							return (
								player.countCards("he", { color: "red" }) > 0 &&
								_status.currentPhase != player
							);
						} else {
							return false;
						}
					},
					save: true,
				},
			},
			boss_chiyi: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				unique: true,
				filter: function (event, player) {
					return [3, 5, 7].includes(game.roundNumber);
				},
				content: function () {
					"step 0";
					if (game.roundNumber == 3) {
						var enemies = game.filterPlayer(function (current) {
							return current.isEnemyOf(player);
						});
						player.line(enemies, "green");
						for (var i = 0; i < enemies.length; i++) {
							enemies[i].addSkill("boss_chiyi2");
						}
						event.finish();
					} else if (game.roundNumber == 5) {
						event.targets = game.filterPlayer().sortBySeat();
						event.num = 1;
					} else {
						event.targets = game
							.filterPlayer(function (current) {
								return current.name == "boss_yanling";
							})
							.sortBySeat();
						event.num = 5;
					}
					"step 1";
					if (event.targets.length) {
						var target = event.targets.shift();
						player.line(target, "fire");
						target.damage(event.num, "fire");
						event.redo();
					}
				},
			},
			boss_chiyi2: {
				mark: true,
				marktext: "赤",
				intro: {
					content: "受到的伤害+1",
				},
				trigger: { player: "damageBegin3" },
				forced: true,
				popup: false,
				content: function () {
					trigger.num++;
				},
			},
			boss_buchun: {
				mode: ["boss"],
				unique: true,
				group: ["boss_buchun_recover", "boss_buchun_revive"],
				subSkill: {
					revive: {
						enable: "phaseUse",
						filter: function (event, player) {
							if (
								!player.storage.boss_buchun ||
								game.roundNumber - player.storage.boss_buchun >= 2
							) {
								for (var i = 0; i < game.dead.length; i++) {
									if (
										game.dead[i].parentNode == player.parentNode &&
										game.dead[i].name == "boss_shujing"
									) {
										return true;
									}
								}
							}
							return false;
						},
						content: function () {
							"step 0";
							player.loseHp();
							player.storage.boss_buchun = game.roundNumber;
							"step 1";
							event.targets = [];
							var dead = game.dead.slice(0);
							for (var i = 0; i < dead.length; i++) {
								if (
									dead[i].parentNode == player.parentNode &&
									dead[i].name == "boss_shujing"
								) {
									event.targets.push(dead[i]);
								}
							}
							if (event.targets[0] == player.previousSeat) {
								event.targets.push(event.targets.shift());
							}
							"step 2";
							if (event.targets.length) {
								var target = event.targets.shift();
								player.line(target, "green");
								target.revive(1);
								target.draw(2, false);
								target.$draw(2);
								event.redo();
							}
							"step 3";
							game.delay();
						},
						ai: {
							order: 6,
							result: {
								player: function (player, target) {
									if (player.hp <= 1) return 0;
									if (
										player.hp <= 3 &&
										game.hasPlayer(function (current) {
											return current.name == "boss_shujing" && current.hp == 1;
										})
									) {
										if (_status.event.getRand() < 0.4) {
											return 0;
										}
									}
									if (player.hp >= 3) return 1;
									if (player.hp >= 2 && player != game.boss) return 1;
									if (
										game.hasPlayer(function (current) {
											return current.name == "boss_shujing";
										})
									) {
										return 0;
									}
									return 1;
								},
							},
						},
					},
					recover: {
						enable: "phaseUse",
						filter: function (event, player) {
							if (
								!player.storage.boss_buchun ||
								game.roundNumber - player.storage.boss_buchun >= 2
							) {
								for (var i = 0; i < game.dead.length; i++) {
									if (
										game.dead[i].parentNode == player.parentNode &&
										game.dead[i].name == "boss_shujing"
									) {
										return false;
									}
								}
								return true;
							}
							return false;
						},
						prompt: "令一名己方角色回复2点体力",
						filterTarget: function (card, player, target) {
							return target.isFriendOf(player) && target.isDamaged();
						},
						content: function () {
							target.recover(2);
							player.storage.boss_buchun = game.roundNumber;
						},
						ai: {
							order: 6,
							result: {
								target: function (player, target) {
									var num = 1;
									if (target.maxHp - target.hp >= 2) {
										num = 1.5;
									}
									return 1.5 * get.recoverEffect(target, player, target);
								},
							},
						},
					},
				},
			},
			boss_cuidu: {
				trigger: { source: "damageEnd" },
				forced: true,
				unique: true,
				filter: function (event, player) {
					if (event._notrigger.includes(event.player)) return false;
					return (
						event.player.isIn() &&
						event.player.isEnemyOf(player) &&
						!event.player.hasSkill("boss_zhongdu")
					);
				},
				logTarget: "player",
				content: function () {
					trigger.player.addSkill("boss_zhongdu");
					var boss = game.findPlayer(function (current) {
						return current.name == "boss_mushengoumang";
					});
					if (boss) {
						boss.draw();
					}
				},
			},
			boss_zhongdu: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				mark: true,
				nopop: true,
				temp: true,
				intro: {
					content:
						"锁定技,回合开始时,你进行判定,若结果不为红桃,你受到1点无来源的伤害,若结果不为黑桃,你失去此技能",
				},
				content: function () {
					"step 0";
					player.judge(function (card) {
						var suit = get.suit(card);
						if (suit == "spade") return -1;
						if (suit == "heart") return 1;
						return 0;
					});
					"step 1";
					if (result.suit != "heart") {
						player.damage("nosource");
					}
					if (result.suit != "spade") {
						player.removeSkill("boss_zhongdu");
					}
				},
			},
			boss_qingyi: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				unique: true,
				filter: function (event, player) {
					return [3, 5, 7].includes(game.roundNumber);
				},
				content: function () {
					"step 0";
					if (game.roundNumber == 7) {
						var goumang, shujing;
						for (var i = 0; i < game.players.length; i++) {
							if (game.players[i].name == "boss_mushengoumang") {
								goumang = game.players[i];
							}
							if (game.players[i].name == "boss_shujing") {
								shujing = game.players[i];
							}
						}
						if (!goumang || !shujing) {
							for (var i = 0; i < game.dead.length; i++) {
								if (game.dead[i].parentNode != player.parentNode) continue;
								if (game.dead[i].name == "boss_mushengoumang") {
									goumang = game.dead[i];
								}
								if (game.dead[i].name == "boss_shujing") {
									shujing = game.dead[i];
								}
							}
						}
						event.targets = [];
						if (goumang) {
							event.targets.push(goumang);
						}
						if (shujing) {
							event.targets.push(shujing);
						}
						event.command = "revive";
					} else if (game.roundNumber == 5) {
						event.targets = game
							.filterPlayer(function (current) {
								return current.isEnemyOf(player);
							})
							.sortBySeat();
						event.command = "loseHp";
					} else {
						event.targets = game
							.filterPlayer(function (current) {
								return current.isFriendOf(player);
							})
							.sortBySeat();
						event.command = "recover";
					}
					"step 1";
					if (event.targets.length) {
						var target = event.targets.shift();
						player.line(target, "green");
						if (event.command == "revive") {
							player.line(target, "green");
							if (target.isDead()) {
								target.maxHp++;
								target.revive(3);
							} else {
								target.gainMaxHp();
								target.recover(3);
							}
							target.draw(3, false);
							target.$draw(3);
							event.delay = true;
						} else {
							target[event.command]();
						}
						event.redo();
					}
					"step 2";
					if (event.delay) {
						game.delay();
					}
				},
			},
			boss_qizuo: {
				trigger: { player: "useCardAfter" },
				filter: function (event, player) {
					if (event.parent.name == "boss_qizuo") return false;
					if (!event.targets || !event.card) return false;
					if (event.card && event.card.name == "wuxie") return false;
					var type = get.type(event.card);
					if (type != "trick") return false;
					var card = game.createCard(
						event.card.name,
						event.card.suit,
						event.card.number,
						event.card.nature
					);
					var targets = event._targets || event.targets;
					for (var i = 0; i < targets.length; i++) {
						if (!targets[i].isIn()) return false;
						if (!player.canUse({ name: event.card.name }, targets[i], false, false)) {
							return false;
						}
					}
					return true;
				},
				check: function (event, player) {
					if (event.card.name == "tiesuo") return false;
					return true;
				},
				content: function () {
					var card = game.createCard(
						trigger.card.name,
						trigger.card.suit,
						trigger.card.number,
						trigger.card.nature
					);
					player.useCard(card, (trigger._targets || trigger.targets).slice(0));
				},
				ai: {
					threaten: 1.3,
				},
			},
			boss_guimou: {
				trigger: { player: "phaseJieshuBegin" },
				frequent: true,
				content: function () {
					var list = game.filterPlayer(function (target) {
						return target != player && !target.isMad();
					});
					if (list.length) {
						var target = list.randomGet();
						player.line(target, "green");
						target.goMad({ player: "phaseAfter" });
					}
				},
			},
			boss_yuance: {
				trigger: { global: "damageEnd" },
				filter: function (event) {
					return (
						event.source &&
						event.source != event.player &&
						event.source.isAlive() &&
						event.player.isAlive()
					);
				},
				direct: true,
				content: function () {
					"step 0";
					var att1 = get.attitude(player, trigger.player);
					var att2 = get.attitude(player, trigger.source);
					var targets = player.getEnemies();
					var stop = false;
					for (var i = 0; i < targets.length; i++) {
						var skills = targets[i].getSkills();
						for (var j = 0; j < skills.length; j++) {
							if (get.tag(skills[j], "rejudge", targets[i])) {
								stop = true;
								break;
							}
						}
					}
					var rand = Math.random() < 0.5 ? "选项一" : "选项二";
					var sourcename = get.translation(trigger.source);
					var playername = get.translation(trigger.player);
					player
						.chooseControl("选项一", "选项二", "cancel2", function () {
							if (att1 == 0 && att2 == 0) return rand;
							if (att1 * att2 >= 0) {
								if (att1 + att2 > 0) {
									return "选项二";
								} else {
									return "选项一";
								}
							} else {
								if (trigger.player.isHealthy() && trigger.source.isHealthy()) return rand;
								if (trigger.player.isHealthy()) {
									if (att1 < 0) return "选项二";
									if (att1 > 0 && !stop) return "选项一";
								}
								if (trigger.source.isHealthy()) {
									if (att2 < 0) return "选项二";
									if (att2 > 0 && !stop) return "选项一";
								}
								if (stop) return "cancel2";
								return rand;
							}
						})
						.set("prompt", get.prompt("boss_yuance"))
						.set("choiceList", [
							"若判定结果为黑色," +
								playername +
								"失去1点体力,否则" +
								sourcename +
								"失去1点体力",
							"若判定结果为红色," +
								playername +
								"回复1点体力,否则" +
								sourcename +
								"回复1点体力",
						]);
					"step 1";
					var att1 = get.attitude(player, trigger.player);
					var att2 = get.attitude(player, trigger.source);
					if (result.control == "选项一") {
						event.type = 1;
						player.judge(function (card) {
							if (get.color(card) == "black") {
								if (att1 > 0) return -1;
								if (att1 < 0) return 1;
							} else {
								if (att2 > 0) return -1;
								if (att2 < 0) return 1;
							}
							return 0;
						});
					} else if (result.control == "选项二") {
						event.type = 2;
						player.judge(function (card) {
							if (get.color(card) == "red") {
								if (trigger.player.isDamaged()) {
									if (att1 > 0) return 1;
									if (att1 < 0) return -1;
								}
							} else {
								if (trigger.source.isDamaged()) {
									if (att2 > 0) return 1;
									if (att2 < 0) return -1;
								}
							}
							return 0;
						});
					} else {
						event.finish();
					}
					"step 2";
					if (event.type == 1) {
						if (result.color == "black") {
							trigger.player.loseHp();
						} else {
							trigger.source.loseHp();
						}
					} else {
						if (result.color == "red") {
							trigger.player.recover();
						} else {
							trigger.source.recover();
						}
					}
				},
			},
			boss_guixin: {
				trigger: { global: "drawAfter" },
				forced: true,
				logTarget: "player",
				filter: function (event, player) {
					return event.result && event.result.length >= 2 && event.player != player;
				},
				content: function () {
					"step 0";
					trigger.player.chooseCard(
						function (card) {
							return trigger.result.includes(card);
						},
						"归心:交给" + get.translation(player) + "一张牌",
						true
					);
					"step 1";
					if (result.bool) {
						player.gain(result.cards, trigger.player);
						trigger.player.$give(1, player);
					}
				},
			},
			xiongcai: {
				unique: true,
				trigger: { player: "phaseAfter" },
				direct: true,
				init: function (player) {
					player.storage.xiongcai = [];
					// player.storage.xiongcai2=0;
				},
				intro: {
					content: "characters",
				},
				content: function () {
					"step 0";
					// if(player.storage.xiongcai2<1){
					//		player.storage.xiongcai2++;
					//		event.finish();
					// }
					// else{
					//		player.storage.xiongcai2=0;
					// }
					"step 1";
					player.logSkill("xiongcai");
					var list = [];
					var list2 = [];
					var players = game.players.concat(game.dead);
					for (var i = 0; i < players.length; i++) {
						list2.add(players[i].name);
						list2.add(players[i].name1);
						list2.add(players[i].name2);
					}
					for (var i in lib.character) {
						if (lib.character[i][1] != "wei") continue;
						if (lib.character[i].isBoss) continue;
						if (lib.character[i].isMinskin) continue;
						if (player.storage.xiongcai.includes(i)) continue;
						if (list2.includes(i)) continue;
						list.push(i);
					}
					var name = list.randomGet();
					player.storage.xiongcai.push(name);
					player.markSkill("xiongcai");
					var skills = lib.character[name][3];
					for (var i = 0; i < skills.length; i++) {
						player.addSkill(skills[i]);
					}
					event.dialog = ui.create.dialog(
						'<div class="text center">' + get.translation(player) + "发动了【雄才】",
						[[name], "character"]
					);
					game.delay(2);
					"step 2";
					event.dialog.close();
				},
			},
			xiaoxiong: {
				trigger: { global: "useCardAfter" },
				forced: true,
				unique: true,
				forceunique: true,
				filter: function (event, player) {
					var type = get.type(event.card, "trick");
					return event.player != player && (type == "basic" || type == "trick");
				},
				content: function () {
					player.gain(game.createCard(trigger.card), "gain2");
				},
				group: "xiaoxiong_damage",
				subSkill: {
					damage: {
						trigger: { global: "phaseJieshuBegin" },
						forced: true,
						filter: function (event, player) {
							return event.player != player && event.player.countUsed() == 0;
						},
						logTarget: "player",
						content: function () {
							trigger.player.damage();
						},
					},
				},
			},
			boss_zhangwu: {
				global: "boss_zhangwu_ai",
				trigger: { player: "damageEnd" },
				check: function (event, player) {
					return (
						event.source &&
						event.source.isIn() &&
						get.damageEffect(event.source, player, player) > 0
					);
				},
				filter: function (event) {
					return event.source && event.source.isAlive();
				},
				direct: true,
				logTarget: "source",
				content: function () {
					"step 0";
					player
						.chooseToDiscard(get.prompt("boss_zhangwu", trigger.source), "he", [1, Infinity])
						.set("ai", function (card) {
							if (get.attitude(player, target) < 0) return 8 - get.value(card);
							return 0;
						})
						.set("logSkill", ["boss_zhangwu", trigger.source]);
					"step 1";
					if (result.bool) {
						var num = result.cards.length;
						var cnum = get.cnNumber(num);
						event.num = num;
						trigger.source
							.chooseToDiscard(
								"he",
								"章武:弃置" + cnum + "张牌,或取消并受到" + cnum + "点伤害",
								num
							)
							.set("ai", function (card) {
								if (!trigger.source.hasSkillTag("nodamage")) return 10 - get.value(card);
								return 0;
							});
					} else {
						event.finish();
					}
					"step 2";
					if (!result.bool) {
						trigger.source.damage(event.num);
					}
				},
				ai: {
					maixie: true,
					maixie_hp: true,
					effect: {
						target: function (card, player, target) {
							if (
								get.tag(card, "damage") &&
								get.attitude(target, player) < 0 &&
								player.countCards("he") < target.countCards("he")
							) {
								return [0, 2];
							}
						},
					},
				},
			},
			boss_zhangwu_ai: {
				ai: {
					effect: {
						target: function (card, player, target) {
							if (get.tag(card, "recover") && card.name != "recover") {
								for (var i = 0; i < game.players.length; i++) {
									if (
										game.players[i].hasSkill("xiaoxiong") &&
										get.attitude(target, game.players[i]) < 0
									) {
										return "zeroplayertarget";
									}
								}
							}
						},
					},
				},
			},
			yueyin: {
				unique: true,
				mark: true,
				intro: {
					content: function (storage, player) {
						var str = "扣减" + (7 - player.storage.xiangxing_count) + "点体力后失去下一枚星;";
						str +=
							"防上禳星伤害条件:" +
							lib.translate["xiangxing" + player.storage.xiangxing + "_info"];
						return str;
					},
					markcount: function (storage, player) {
						return Math.max(0, 7 - player.storage.xiangxing_count);
					},
				},
				skipDamage: {
					x7: function (player) {
						return player.countCards("h") == 0;
					},
					x6: function (player, event) {
						return event.hasNature("fire");
					},
					x5: function (player, event) {
						return event.hasNature("thunder");
					},
					x4: function (player, event) {
						return event.name == "loseHp";
					},
					x3: function (player, event) {
						return game.hasPlayer(function (current) {
							return current != player && current.countCards("e") >= 4;
						});
					},
					x2: function (player) {
						return player.countCards("j") >= 2;
					},
					x1: function () {
						return game.players.length == 2;
					},
				},
			},
			xiangxing: {
				unique: true,
				init: function (player) {
					player.storage.xiangxing = 7;
					player.storage.xiangxing_count = 0;
					player.addSkill("xiangxing7");
				},
				mark: true,
				intro: {
					content: "当前有#枚星",
				},
				trigger: { player: ["damageEnd", "loseHpEnd"] },
				forced: true,
				popup: false,
				content: function () {
					"step 0";
					var num = trigger.num;
					if (num) {
						player.storage.xiangxing_count += num;
					}
					if (player.storage.xiangxing_count >= 7) {
						if (
							player.hasSkill("yueyin") &&
							lib.skill.yueyin.skipDamage["x" + player.storage.xiangxing](player, trigger)
						) {
							event.goto(3);
						}
						player.removeSkill("xiangxing" + player.storage.xiangxing);
						player.storage.xiangxing--;
						player.storage.xiangxing_count = 0;
						player.updateMarks();
						if (player.storage.xiangxing) {
							player.addSkill("xiangxing" + player.storage.xiangxing);
						} else {
							player.awakenSkill("xiangxing");
						}
						player.popup("xiangxing");
						game.log(player, "失去了一枚星");
					} else {
						player.updateMarks();
						event.finish();
					}
					"step 1";
					var list = game.filterPlayer();
					list.remove(player);
					list.sort(lib.sort.seat);
					var list2 = [];
					for (var i = 0; i < list.length; i++) {
						list2.push(0);
					}
					for (var i = 0; i < 7; i++) {
						list2[Math.floor(Math.random() * list2.length)]++;
					}
					event.list = list;
					event.list2 = list2;
					"step 2";
					if (event.list.length) {
						var target = event.list.shift();
						target.damage(event.list2.shift(), "thunder");
						player.line(target, "thunder");
						event.redo();
					}
					"step 3";
					if (player.storage.xiangxing == 0) {
						player.maxHp = 3;
						player.update();
					}
				},
			},
			fengqi: {
				trigger: { player: ["phaseZhunbeiBegin", "phaseJieshuBegin"] },
				direct: true,
				content: function () {
					"step 0";
					var list = { basic: [], equip: [], trick: [], delay: [] };
					for (var i = 0; i < lib.inpile.length; i++) {
						var name = lib.inpile[i];
						var info = lib.card[name];
						if (info.autoViewAs || name == "yuansuhuimie") continue;
						if (lib.filter.cardEnabled({ name: name }, player)) {
							if (!list[info.type]) {
								list[info.type] = [];
							}
							list[info.type].push([get.translation(lib.card[name].type), "", name]);
						}
					}
					list.trick.sort(lib.sort.name);
					var dialog = ui.create.dialog("风起", [list.trick, "vcard"]);
					// for(var i in list){
					//		dialog.addText(get.translation(i)+'牌');
					//		dialog.add([list[i],'vcard']);
					// }
					var rand1 = Math.random() < 1 / 3;
					var rand2 = Math.random() < 0.5;
					var rand3 = Math.random() < 1 / 3;
					var rand4 = Math.random() < 1 / 3;
					player.chooseButton(dialog).ai = function (button) {
						var name = button.link[2];
						if (player.hp <= 1) {
							switch (name) {
								case "zhiliaobo":
									return 1;
								case "dunpaigedang":
									return 0.8;
								case "nanman":
									return 0.5;
								default:
									return 0;
							}
						}
						if (rand4 && player.countCards("h") <= 1) {
							switch (name) {
								case "zengbin":
									return 1;
								case "wuzhong":
									return 0.8;
								default:
									return 0;
							}
						}
						if (player.hasSkill("qinglonglingzhu")) {
							if (rand2) return name == "chiyuxi" ? 0.8 : 0;
							return name == "jingleishan" ? 0.8 : 0;
						}
						if (rand2) return name == "wanjian" ? 0.8 : 0;
						return name == "nanman" ? 0.8 : 0;
					};
					"step 1";
					if (result.bool) {
						player.chooseUseTarget(result.links[0][2], true, false);
					}
				},
				ai: {
					threaten: 1.5,
				},
			},
			fengqi2: {
				mod: {
					wuxieRespondable: function () {
						return false;
					},
				},
			},
			gaiming: {
				trigger: { player: "judgeBefore" },
				direct: true,
				priority: 1,
				unique: true,
				content: function () {
					"step 0";
					event.cards = get.cards(7);
					player.chooseCardButton(
						true,
						event.cards,
						"改命:选择一张牌作为你的" + trigger.judgestr + "判定结果"
					).ai = function (button) {
						if (get.attitude(player, trigger.player) > 0) {
							return 1 + trigger.judge(button.link);
						}
						if (get.attitude(player, trigger.player) < 0) {
							return 1 - trigger.judge(button.link);
						}
						return 0;
					};
					"step 1";
					if (!result.bool) {
						event.finish();
						return;
					}
					player.logSkill("gaiming", trigger.player);
					var card = result.links[0];
					event.cards.remove(card);
					var judgestr = get.translation(trigger.player) + "的" + trigger.judgestr + "判定";
					event.videoId = lib.status.videoId++;
					event.dialog = ui.create.dialog(judgestr);
					event.dialog.classList.add("center");
					event.dialog.videoId = event.videoId;

					game.addVideo("judge1", player, [get.cardInfo(card), judgestr, event.videoId]);
					for (var i = 0; i < event.cards.length; i++) event.cards[i].discard();
					// var node=card.copy('thrown','center',ui.arena).addTempClass('start');
					var node;
					if (game.chess) {
						node = card.copy("thrown", "center", ui.arena).addTempClass("start");
					} else {
						node = player.$throwordered(card.copy(), true);
					}
					node.classList.add("thrownhighlight");
					ui.arena.classList.add("thrownhighlight");
					if (card) {
						trigger.cancel();
						trigger.result = {
							card: card,
							judge: trigger.judge(card),
							node: node,
							number: get.number(card),
							suit: get.suit(card),
							color: get.color(card),
						};
						if (trigger.result.judge > 0) {
							trigger.result.bool = true;
							trigger.player.popup("改命成功");
						}
						if (trigger.result.judge < 0) {
							trigger.result.bool = false;
							trigger.player.popup("改命失败");
						}
						game.log(trigger.player, "的判定结果为", card);
						trigger.direct = true;
						trigger.position.appendChild(card);
						game.delay(2);
					} else {
						event.finish();
					}
					"step 2";
					ui.arena.classList.remove("thrownhighlight");
					event.dialog.close();
					game.addVideo("judge2", null, event.videoId);
					ui.clear();
					var card = trigger.result.card;
					trigger.position.appendChild(card);
					trigger.result.node.delete();
					game.delay();
				},
			},
			tiandao: {
				audio: true,
				trigger: { global: "judge" },
				direct: true,
				filter: function (event, player) {
					return player.countCards("he") > 0;
				},
				content: function () {
					"step 0";
					player.chooseCard(
						get.translation(trigger.player) +
							"的" +
							(trigger.judgestr || "") +
							"判定为" +
							get.translation(trigger.player.judging[0]) +
							"," +
							get.prompt("tiandao"),
						"he"
					).ai = function (card) {
						var trigger = _status.event.parent._trigger;
						var player = _status.event.player;
						var result = trigger.judge(card) - trigger.judge(trigger.player.judging[0]);
						var attitude = get.attitude(player, trigger.player);
						if (attitude == 0 || result == 0) return 0;
						if (attitude > 0) {
							return result;
						} else {
							return -result;
						}
					};
					"step 1";
					if (result.bool) {
						player.respond(result.cards, "highlight");
					} else {
						event.finish();
					}
					"step 2";
					if (result.bool) {
						player.logSkill("tiandao");
						player.$gain2(trigger.player.judging[0]);
						player.gain(trigger.player.judging[0]);
						trigger.player.judging[0] = result.cards[0];
						trigger.position.appendChild(result.cards[0]);
						game.log(trigger.player, "的判定牌改为", result.cards[0]);
					}
					"step 3";
					game.delay(2);
				},
				ai: {
					tag: {
						rejudge: 1,
					},
					threaten: 1.5,
				},
			},
			lianji: {
				audio: true,
				enable: "phaseUse",
				usable: 1,
				filterTarget: function (card, player, target) {
					if (player == target) return false;
					return target.countCards("h") > 0;
				},
				selectTarget: 2,
				multitarget: true,
				multiline: true,
				filter: function (event, player) {
					return player.countCards("h") > 0;
				},
				prepare: "throw",
				discard: false,
				filterCard: true,
				check: function (card) {
					return 6 - get.value(card);
				},
				content: function () {
					"step 0";
					if (targets[0].countCards("h") && targets[1].countCards("h")) {
						targets[0].chooseToCompare(targets[1]);
					} else {
						event.finish();
					}
					"step 1";
					if (result.bool) {
						targets[0].gain(cards);
						targets[0].$gain2(cards);
						targets[1].damage(targets[0]);
					} else {
						targets[1].gain(cards);
						targets[1].$gain2(cards);
						targets[0].damage(targets[1]);
					}
				},
				ai: {
					expose: 0.3,
					threaten: 2,
					order: 9,
					result: {
						target: -1,
					},
				},
			},
			mazui: {
				audio: true,
				enable: "phaseUse",
				usable: 1,
				filterCard: { color: "black" },
				filterTarget: function (card, player, target) {
					return !target.hasSkill("mazui2");
				},
				check: function (card) {
					return 6 - get.value(card);
				},
				discard: false,
				prepare: "give",
				content: function () {
					target.storage.mazui2 = cards[0];
					target.addSkill("mazui2");
					game.addVideo("storage", target, ["mazui2", get.cardInfo(target.storage.mazui2), "card"]);
				},
				ai: {
					expose: 0.2,
					result: {
						target: function (player, target) {
							return -target.hp;
						},
					},
					order: 4,
					threaten: 1.2,
				},
			},
			mazui2: {
				trigger: { source: "damageBegin1" },
				forced: true,
				mark: "card",
				filter: function (event) {
					return event.num > 0;
				},
				content: function () {
					trigger.num--;
					player.addSkill("mazui3");
					player.removeSkill("mazui2");
				},
				intro: {
					content: "card",
				},
			},
			mazui3: {
				trigger: { source: ["damageEnd", "damageZero"] },
				forced: true,
				popup: false,
				content: function () {
					player.gain(player.storage.mazui2, "gain2");
					game.log(player, "获得了", player.storage.mazui2);
					player.removeSkill("mazui3");
					delete player.storage.mazui2;
				},
			},
			yunshen: {
				trigger: { player: ["respond", "useCard"] },
				filter: function (event, player) {
					return event.card.name == "shan";
				},
				frequent: true,
				init: function (player) {
					player.storage.yunshen = 0;
				},
				content: function () {
					player.storage.yunshen++;
					player.markSkill("yunshen");
				},
				ai: {
					effect: {
						target: function (card, player, target) {
							if (get.tag(card, "respondShan")) {
								var shans = target.countCards("h", "shan");
								var hs = target.countCards("h");
								if (shans > 1) return [1, 1];
								if (shans && hs > 2) return [1, 1];
								if (shans) return [1, 0.5];
								if (hs > 2) return [1, 0.3];
								if (hs > 1) return [1, 0.2];
								return [1.2, 0];
							}
						},
					},
					threaten: 0.8,
				},
				intro: {
					content: "mark",
				},
				group: "yunshen2",
			},
			yunshen2: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				filter: function (event, player) {
					return player.storage.yunshen > 0;
				},
				content: function () {
					player.draw(player.storage.yunshen);
					player.storage.yunshen = 0;
					player.unmarkSkill("yunshen");
				},
				mod: {
					globalTo: function (from, to, distance) {
						if (typeof to.storage.yunshen == "number") return distance + to.storage.yunshen;
					},
				},
			},
			lingbo: {
				audio: 2,
				trigger: { player: ["respond", "useCard"] },
				filter: function (event, player) {
					return event.card.name == "shan";
				},
				frequent: true,
				content: function () {
					player.draw(2);
				},
				ai: {
					mingzhi: false,
					effect: {
						target: function (card, player, target) {
							if (get.tag(card, "respondShan")) {
								var shans = target.countCards("h", "shan");
								var hs = target.countCards("h");
								if (shans > 1) return [0, 1];
								if (shans && hs > 2) return [0, 1];
								if (shans) return [0, 0];
								if (hs > 2) return [0, 0];
								if (hs > 1) return [1, 0.5];
								return [1.5, 0];
							}
						},
					},
					threaten: 0.8,
				},
			},
			jiaoxia: {
				audio: 2,
				trigger: { target: "useCardToTargeted" },
				filter: function (event, player) {
					return event.card && get.color(event.card) == "red";
				},
				frequent: true,
				content: function () {
					player.draw();
				},
				ai: {
					effect: function (card, player, target) {
						if (get.color(card) == "red") return [1, 1];
					},
				},
			},
			boss_nbianshenx: {},
			boss_jingjue: {
				inherit: "boss_danshu",
			},
			boss_renxing: {
				trigger: { global: ["damageEnd", "recoverEnd"] },
				forced: true,
				filter: function (event, player) {
					return _status.currentPhase != player;
				},
				content: function () {
					player.draw();
				},
			},
			boss_ruizhi: {
				trigger: { global: "phaseZhunbeiBegin" },
				forced: true,
				filter: function (event, player) {
					return (
						event.player != player &&
						(event.player.countCards("h") > 1 || event.player.countCards("e") > 1)
					);
				},
				content: function () {
					"step 0";
					player.line(trigger.player, "green");
					var next = trigger.player.chooseCard(
						true,
						"选择保留一张手牌和一张装备区内的牌,然后弃置其它牌",
						"he",
						function (card) {
							switch (get.position(card)) {
								case "h": {
									if (ui.selected.cards.length) {
										return get.position(ui.selected.cards[0]) == "e";
									} else {
										return trigger.player.countCards("h") > 1;
									}
								}
								case "e": {
									if (ui.selected.cards.length) {
										return get.position(ui.selected.cards[0]) == "h";
									} else {
										return trigger.player.countCards("e") > 1;
									}
								}
							}
						}
					);
					var num = 0;
					if (trigger.player.countCards("h") > 1) {
						num++;
					}
					if (trigger.player.countCards("e") > 1) {
						num++;
					}
					next.selectCard = [num, num];
					next.ai = function (card) {
						return get.value(card);
					};
					"step 1";
					if (result.bool) {
						var he = [];
						var hs = trigger.player.getCards("h");
						var es = trigger.player.getCards("e");
						if (hs.length > 1) {
							he = he.concat(hs);
						}
						if (es.length > 1) {
							he = he.concat(es);
						}
						for (var i = 0; i < result.cards.length; i++) {
							he.remove(result.cards[i]);
						}
						trigger.player.discard(he);
					}
				},
			},
			boss_nbaonu: {
				group: ["boss_nbaonu_sha"],
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				priority: -1,
				content: function () {
					if (player.hp > 4) {
						trigger.num = 4 + Math.floor(Math.random() * (player.hp - 3));
					} else {
						trigger.num = 4;
					}
				},
				subSkill: {
					sha: {
						mod: {
							cardUsable: function (card, player, num) {
								if (card.name == "sha" && player.hp < 5) return Infinity;
							},
						},
						trigger: { source: "damageBegin1" },
						filter: function (event, player) {
							return event.card && event.card.name == "sha" && event.notLink() && player.hp < 5;
						},
						forced: true,
						content: function () {
							trigger.num++;
						},
					},
				},
			},
			boss_shouyi: {
				mod: {
					targetInRange: function () {
						return true;
					},
				},
			},
			boss_mengtai: {
				group: [
					"boss_mengtai_begin",
					"boss_mengtai_draw",
					"boss_mengtai_use",
					"boss_mengtai_discard",
					"boss_mengtai_end",
				],
				subSkill: {
					begin: {
						trigger: { player: "phaseZhunbeiBegin" },
						forced: true,
						popup: false,
						content: function () {
							player.storage.boss_mengtai_draw = true;
							player.storage.boss_mengtai_use = true;
						},
					},
					draw: {
						trigger: { player: "phaseDrawBegin" },
						forced: true,
						popup: false,
						content: function () {
							player.storage.boss_mengtai_draw = false;
						},
					},
					use: {
						trigger: { player: "phaseUseBegin" },
						forced: true,
						popup: false,
						content: function () {
							player.storage.boss_mengtai_use = false;
						},
					},
					discard: {
						trigger: { player: "phaseDiscardBefore" },
						forced: true,
						filter: function (event, player) {
							if (player.storage.boss_mengtai_use) return true;
							return false;
						},
						content: function () {
							trigger.cancel();
						},
					},
					end: {
						trigger: { player: "phaseJieshuBegin" },
						forced: true,
						filter: function (event, player) {
							if (player.storage.boss_mengtai_draw) return true;
							return false;
						},
						content: function () {
							player.draw(3);
						},
					},
				},
			},
			boss_nbianshen: {
				trigger: { player: "phaseBefore" },
				forced: true,
				popup: false,
				priority: 25,
				fixed: true,
				filter: function (event, player) {
					if (player.name == "boss_nianshou_heti" || player.storage.boss_nbianshen) return true;
					return false;
				},
				content: function () {
					if (player.storage.boss_nbianshen) {
						var hp = player.hp,
							maxHp = player.maxHp,
							hujia = player.hujia;
						player.init("boss_nianshou_" + player.storage.boss_nbianshen_next);
						player.storage.boss_nbianshen.remove(player.storage.boss_nbianshen_next);
						if (!player.storage.boss_nbianshen.length) {
							player.storage.boss_nbianshen = ["jingjue", "renxing", "ruizhi", "baonu"];
						}
						player.storage.boss_nbianshen_next = player.storage.boss_nbianshen.randomGet(
							player.storage.boss_nbianshen_next
						);
						player.hp = hp;
						player.maxHp = maxHp;
						player.hujia = hujia;
						player.update();
					} else {
						player.storage.boss_nbianshen = ["jingjue", "renxing", "ruizhi", "baonu"];
						player.storage.boss_nbianshen_next = player.storage.boss_nbianshen.randomGet();
						player.markSkill("boss_nbianshen");
					}
				},
				intro: {
					content: function (storage, player) {
						var map = {
							jingjue: "警觉",
							renxing: "任性",
							ruizhi: "睿智",
							baonu: "暴怒",
						};
						return "下一个状态:" + map[player.storage.boss_nbianshen_next];
					},
				},
			},
			boss_damagecount: {
				mode: ["boss"],
				global: "boss_damagecount2",
			},
			boss_damagecount2: {
				trigger: { source: "damageEnd" },
				silent: true,
				filter: function (event, player) {
					if (!ui.damageCount) return false;
					return event.num > 0 && player.isFriendOf(game.me) && event.player.isEnemyOf(game.me);
				},
				content: function () {
					_status.damageCount += trigger.num;
					ui.damageCount.innerHTML = "伤害: " + _status.damageCount;
				},
			},
			boss_nianrui: {
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				content: function () {
					trigger.num += 2;
				},
				ai: {
					threaten: 1.6,
				},
			},
			boss_qixiang: {
				group: ["boss_qixiang1", "boss_qixiang2"],
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (card.name == "lebu" && card.name == "bingliang") return 0.8;
						},
					},
				},
			},
			boss_qixiang1: {
				trigger: { player: "judge" },
				forced: true,
				filter: function (event, player) {
					if (event.card) {
						if (event.card.viewAs) {
							return event.card.viewAs == "lebu";
						} else {
							return event.card.name == "lebu";
						}
					}
				},
				content: function () {
					player.addTempSkill("boss_qixiang3", "judgeAfter");
				},
			},
			boss_qixiang2: {
				trigger: { player: "judge" },
				forced: true,
				filter: function (event, player) {
					if (event.card) {
						if (event.card.viewAs) {
							return event.card.viewAs == "bingliang";
						} else {
							return event.card.name == "bingliang";
						}
					}
				},
				content: function () {
					player.addTempSkill("boss_qixiang4", "judgeAfter");
				},
			},
			boss_qixiang3: {
				mod: {
					suit: function (card, suit) {
						if (suit == "diamond") return "heart";
					},
				},
			},
			boss_qixiang4: {
				mod: {
					suit: function (card, suit) {
						if (suit == "spade") return "club";
					},
				},
			},
			boss_bianshen2: {
				mode: ["boss"],
				fixed: true,
				global: "boss_bianshen2x",
				trigger: { player: "dieBegin" },
				silent: true,
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_bianshen2x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_bianshen2");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss(["boss_niutou", "boss_mamian"].randomGet());
				},
			},
			boss_bianshen3: {
				mode: ["boss"],
				global: "boss_bianshen3x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_bianshen3x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_bianshen3");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss(["boss_baiwuchang", "boss_heiwuchang"].randomGet());
				},
			},
			boss_bianshen4: {
				mode: ["boss"],
				global: "boss_bianshen4x",
				trigger: { player: "dieBegin" },
				silent: true,
				fixed: true,
				content: function () {
					player.hide();
					game.addVideo("hidePlayer", player);
				},
			},
			boss_bianshen4x: {
				trigger: { global: "dieAfter" },
				forced: true,
				priority: -10,
				fixed: true,
				globalFixed: true,
				filter: function (event) {
					if (lib.config.mode != "boss") return false;
					return event.player == game.boss && event.player.hasSkill("boss_bianshen4");
				},
				content: function () {
					"step 0";
					game.delay();
					"step 1";
					game.changeBoss(["boss_yecha", "boss_luocha"].randomGet());
				},
			},
			boss_moyany: {
				trigger: { player: "loseEnd" },
				frequent: true,
				unique: true,
				filter: function (event, player) {
					return _status.currentPhase != player;
				},
				content: function () {
					"step 0";
					player.judge(function (card) {
						return get.color(card) == "red" ? 1 : 0;
					});
					"step 1";
					if (result.bool) {
						player.chooseTarget(
							true,
							"选择一个目标对其造成两点火焰伤害",
							function (card, player, target) {
								return player != target;
							}
						).ai = function (target) {
							return get.damageEffect(target, player, player, "fire");
						};
					} else {
						event.finish();
					}
					"step 2";
					if (result.targets.length) {
						player.line(result.targets, "fire");
						result.targets[0].damage(2, "fire");
					}
				},
				ai: {
					effect: {
						target: function (card) {
							if (get.tag(card, "loseCard")) {
								return [0.5, 1];
							}
						},
					},
				},
			},
			boss_danshu: {
				trigger: { player: "loseEnd" },
				frequent: true,
				unique: true,
				filter: function (event, player) {
					return _status.currentPhase != player && player.hp < player.maxHp;
				},
				content: function () {
					"step 0";
					player.judge(function (card) {
						return get.color(card) == "red" ? 1 : 0;
					});
					"step 1";
					if (result.color == "red") {
						player.recover();
					}
				},
				ai: {
					effect: {
						target: function (card) {
							if (get.tag(card, "loseCard")) {
								return [0.5, 1];
							}
						},
					},
				},
			},
			boss_modao: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				content: function () {
					player.draw(2);
				},
			},
			boss_mojian: {
				trigger: { player: "phaseUseBegin" },
				content: function () {
					var list = game.filterPlayer(function (current) {
						return player.canUse("wanjian", current) && current.isEnemyOf(player);
					});
					list.sort(lib.sort.seat);
					player.useCard({ name: "wanjian" }, list);
				},
				ai: {
					threaten: 1.8,
				},
			},
			boss_yushou: {
				trigger: { player: "phaseUseBegin" },
				content: function () {
					var list = game.filterPlayer(function (current) {
						return player.canUse("nanman", current) && current.isEnemyOf(player);
					});
					list.sort(lib.sort.seat);
					player.useCard({ name: "nanman" }, list);
				},
			},
			boss_zuijiu: {
				trigger: { source: "damageBegin1" },
				filter: function (event) {
					return event.card && event.card.name == "sha" && event.getParent().name == "sha";
				},
				forced: true,
				content: function () {
					trigger.num++;
				},
			},
			boss_xixing: {
				trigger: { player: "phaseZhunbeiBegin" },
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_xixing"), function (card, player, target) {
						return player != target && target.isLinked();
					}).ai = function (target) {
						return get.damageEffect(target, player, player, "thunder");
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_xixing", result.targets);
						result.targets[0].damage("thunder");
						player.recover();
					}
				},
			},
			boss_suoming: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				filter: function (event, player) {
					return game.hasPlayer(function (current) {
						return current != player && !current.isLinked();
					});
				},
				content: function () {
					"step 0";
					var num = game.countPlayer(function (current) {
						return current != player && !current.isLinked();
					});
					player.chooseTarget(
						get.prompt("boss_suoming"),
						[1, num],
						function (card, player, target) {
							return !target.isLinked() && player != target;
						}
					).ai = function (target) {
						return -get.attitude(player, target);
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_suoming", result.targets);
						event.targets = result.targets;
						event.num = 0;
					} else {
						event.finish();
					}
					"step 2";
					if (event.num < event.targets.length) {
						event.targets[event.num].link();
						event.num++;
						event.redo();
					}
				},
			},
			boss_taiping: {
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				content: function () {
					trigger.num += 2;
				},
			},
			boss_baolian: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				content: function () {
					player.draw(2);
				},
			},
			boss_xiaoshou: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_xiaoshou"), function (card, player, target) {
						return player != target && target.hp >= player.hp;
					}).ai = function (target) {
						return get.damageEffect(target, player, player);
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_xiaoshou", result.targets);
						result.targets[0].damage(3);
					}
				},
			},
			boss_manjia: {
				group: ["boss_manjia1", "boss_manjia2"],
			},
			boss_manjia1: {
				trigger: { target: ["useCardToBefore", "shaBegin"] },
				forced: true,
				priority: 6,
				filter: function (event, player, name) {
					if (player.getEquip(2)) return false;
					if (name == "shaBegin") return lib.skill.tengjia3.filter(event, player);
					return lib.skill.tengjia1.filter(event, player);
				},
				content: function () {
					trigger.cancel();
				},
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (target.getEquip(2)) return;
							return lib.skill.tengjia1.ai.effect.target.apply(this, arguments);
						},
					},
				},
			},
			boss_manjia2: {
				trigger: { player: "damageBegin3" },
				filter: function (event, player) {
					if (player.getEquip(2)) return false;
					if (event.hasNature("fire")) return true;
				},
				forced: true,
				check: function () {
					return false;
				},
				content: function () {
					trigger.num++;
				},
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (target.getEquip(2)) return;
							return lib.skill.tengjia2.ai.effect.target.apply(this, arguments);
						},
					},
				},
			},
			boss_lianyu: {
				trigger: { player: "phaseJieshuBegin" },
				unique: true,
				content: function () {
					"step 0";
					event.players = get.players(player);
					"step 1";
					if (event.players.length) {
						var current = event.players.shift();
						if (current.isEnemyOf(player)) {
							player.line(current, "fire");
							current.damage("fire");
						}
						event.redo();
					}
				},
				ai: {
					threaten: 2,
				},
			},
			boss_guiji: {
				trigger: { player: "phaseJudgeBegin" },
				forced: true,
				content: function () {
					player.discard(player.getCards("j").randomGet());
				},
				filter: function (event, player) {
					return player.countCards("j") > 0;
				},
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (get.type(card) == "delay" && target.countCards("j") == 0) return 0.1;
						},
					},
				},
			},
			boss_minbao: {
				global: "boss_minbao2",
			},
			boss_minbao2: {
				trigger: { global: "dieAfter" },
				forced: true,
				globalFixed: true,
				filter: function (event, player) {
					return event.player.hasSkill("boss_minbao") && event.player.isDead();
				},
				content: function () {
					trigger.player.line(player, "fire");
					player.damage("nosource", "fire").animate = false;
					player.$damage(trigger.player);
					player.$damagepop(-1, "fire");
					if (lib.config.animation && !lib.config.low_performance) {
						player.$fire();
					}
					if (!event.parent.parent.boss_minbao_logv) {
						event.parent.parent.boss_minbao_logv = true;
						game.logv(trigger.player, "boss_minbao", game.filterPlayer(), event.parent.parent);
					}
				},
			},
			boss_guihuo: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_guihuo"), function (card, player, target) {
						return player != target;
					}).ai = function (target) {
						return get.damageEffect(target, player, player, "fire");
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_guihuo", result.targets);
						result.targets[0].damage("fire");
					}
				},
			},
			boss_luolei: {
				trigger: { player: "phaseZhunbeiBegin" },
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_luolei"), function (card, player, target) {
						return player != target;
					}).ai = function (target) {
						return get.damageEffect(target, player, player, "thunder");
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_luolei", result.targets);
						result.targets[0].damage("thunder");
					}
				},
			},
			boss_beiming: {
				trigger: { player: "dieBegin" },
				forced: true,
				filter: function (event) {
					return event.source != undefined;
				},
				content: function () {
					trigger.source.discard(trigger.source.getCards("h"));
				},
				ai: {
					threaten: 0.7,
				},
			},
			boss_shanbeng: {
				global: "boss_shanbeng2",
				trigger: { player: "dieBegin" },
				forced: true,
				logv: false,
				content: function () {
					var targets = game.filterPlayer(function (current) {
						return current.countCards("e");
					});
					player.line(targets, "green");
					game.delay();
					game.logv(player, "boss_shanbeng", targets, null, true);
				},
			},
			boss_shanbeng2: {
				trigger: { global: "dieAfter" },
				forced: true,
				globalFixed: true,
				filter: function (event, player) {
					return (
						player.countCards("e") > 0 &&
						event.player.hasSkill("boss_shanbeng") &&
						event.player.isDead()
					);
				},
				content: function () {
					player.discard(player.getCards("e"));
				},
			},
			boss_didong: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_didong"), function (card, player, target) {
						return target.isEnemyOf(player);
					}).ai = function (target) {
						var att = get.attitude(player, target);
						if (target.isTurnedOver()) {
							if (att > 0) {
								return att + 5;
							}
							return -1;
						}
						if (player.isTurnedOver()) {
							return 5 - att;
						}
						return -att;
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_didong", result.targets);
						result.targets[0].turnOver();
					}
				},
				ai: {
					threaten: 1.7,
				},
			},
			boss_guimei: {
				mod: {
					targetEnabled: function (card, player, target) {
						if (get.type(card) == "delay") {
							return false;
						}
					},
				},
			},
			boss_bianshen: {
				trigger: { global: "gameStart" },
				forced: true,
				popup: false,
				content: function () {
					player.smoothAvatar();
					player.init(["boss_chi", "boss_mo", "boss_wang", "boss_liang"].randomGet());
					game.addVideo("reinit2", player, player.name);
				},
			},
			boss_bianshen_intro1: { nobracket: true },
			boss_bianshen_intro2: { nobracket: true },
			boss_bianshen_intro3: { nobracket: true },
			boss_bianshen_intro4: { nobracket: true },
			boss_chiyan_intro1: { nobracket: true },
			boss_chiyan_intro2: { nobracket: true },
			boss_chiyan_intro3: { nobracket: true },
			boss_chiyan_intro4: { nobracket: true },
			boss_qingmu_intro1: { nobracket: true },
			boss_qingmu_intro2: { nobracket: true },
			boss_qingmu_intro3: { nobracket: true },
			boss_qingmu_intro4: { nobracket: true },
			boss_baimang_intro1: { nobracket: true },
			boss_baimang_intro2: { nobracket: true },
			boss_baimang_intro3: { nobracket: true },
			boss_baimang_intro4: { nobracket: true },
			boss_xuanlin_intro1: { nobracket: true },
			boss_xuanlin_intro2: { nobracket: true },
			boss_xuanlin_intro3: { nobracket: true },
			boss_xuanlin_intro4: { nobracket: true },
			boss_leiji: {
				audio: 2,
				trigger: { player: ["respond", "useCard"] },
				filter: function (event, player) {
					return event.card.name == "shan";
				},
				direct: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("boss_leiji")).ai = function (target) {
						return get.damageEffect(target, player, player, "thunder");
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_leiji", result.targets, "thunder");
						event.target = result.targets[0];
						event.target.judge(function (card) {
							// var suit=get.suit(card);
							// if(suit=='spade') return -4;
							// if(suit=='club') return -2;
							if (get.color(card) == "black") return -2;
							return 0;
						});
					} else {
						event.finish();
					}
					"step 2";
					if (result.bool == false) {
						event.target.damage("thunder");
						player.draw();
					}
				},
				ai: {
					effect: {
						target: function (card, player, target, current) {
							if (get.tag(card, "respondShan")) {
								var hastarget = false,
									players = game.filterPlayer();
								for (var i = 0; i < players.length; i++) {
									if (get.attitude(target, players[i]) < 0) {
										hastarget = true;
										break;
									}
								}
								var be = target.countCards("e", { color: "black" });
								if (target.countCards("h", "shan") && be) {
									if (!target.hasSkill("guidao")) return 0;
									return [0, hastarget ? target.countCards("he") / 2 : 0];
								}
								if (target.countCards("h", "shan") && target.countCards("h") > 2) {
									if (!target.hasSkill("guidao")) return 0;
									return [0, hastarget ? target.countCards("h") / 4 : 0];
								}
								if (target.countCards("h") > 3 || (be && target.countCards("h") >= 2)) {
									return [0, 0];
								}
								if (target.countCards("h") == 0) {
									return [1.5, 0];
								}
								if (target.countCards("h") == 1 && !be) {
									return [1.2, 0];
								}
								if (!target.hasSkill("guidao")) return [1, 0.05];
								return [1, Math.min(0.5, (target.countCards("h") + be) / 4)];
							}
						},
					},
				},
			},
			wuqin: {
				audio: 2,
				trigger: { player: "phaseJieshuBegin" },
				filter: function (event, player) {
					return player.countCards("h") == 0;
				},
				content: function () {
					player.draw(3);
				},
			},
			boss_baolin: {
				audio: true,
				inherit: "juece",
			},
			boss_qiangzheng: {
				audio: 2,
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				unique: true,
				filter: function (event, player) {
					return game.hasPlayer(function (current) {
						return current != player && current.countCards("h");
					});
				},
				content: function () {
					"step 0";
					var players = get.players(player);
					players.remove(player);
					event.players = players;
					player.line(players, "green");
					"step 1";
					if (event.players.length) {
						var current = event.players.shift();
						var hs = current.getCards("h");
						if (hs.length) {
							var card = hs.randomGet();
							player.gain(card, current);
							current.$giveAuto(card, player);
						}
						event.redo();
					}
				},
			},
			guizhen: {
				audio: 2,
				trigger: { player: "loseEnd" },
				frequent: true,
				filter: function (event, player) {
					if (player.countCards("h")) return false;
					for (var i = 0; i < event.cards.length; i++) {
						if (event.cards[i].original == "h") return true;
					}
					return false;
				},
				content: function () {
					"step 0";
					var players = get.players(player);
					players.remove(player);
					event.players = players;
					"step 1";
					if (event.players.length) {
						var current = event.players.shift();
						var hs = current.getCards("h");
						if (hs.length) {
							current.lose(hs)._triggered = null;
							current.$throw(hs);
						} else {
							current.loseHp();
						}
						game.delay(0.5);
						event.redo();
					}
				},
			},
			boss_konghun: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				filter: function () {
					return game.players.length >= 3;
				},
				content: function () {
					"step 0";
					player.chooseTarget(function (card, player, target) {
						return target != player;
					}).ai = function () {
						return 1;
					};
					"step 1";
					if (result.bool) {
						player.logSkill("boss_konghun", result.targets);
						result.targets[0].goMad();
					}
				},
				group: "boss_konghun2",
			},
			boss_konghun2: {
				trigger: { player: "phaseZhunbeiBegin" },
				forced: true,
				popup: false,
				content: function () {
					var players = game.players.concat(game.dead);
					for (var i = 0; i < players.length; i++) {
						if (players[i].isMad()) {
							players[i].unMad();
						}
					}
				},
			},
			yuehun: {
				unique: true,
				trigger: { player: "phaseJieshuBegin" },
				frequent: true,
				content: function () {
					player.recover();
					player.draw(2);
				},
			},
			boss_wange: {
				inherit: "boss_guiji",
			},
			fengwu: {
				audio: 2,
				unique: true,
				enable: "phaseUse",
				usable: 1,
				content: function () {
					"step 0";
					event.current = player.next;
					"step 1";
					event.current.chooseToUse({ name: "sha" }, function (card, player, target) {
						if (player == target) return false;
						if (get.distance(player, target) <= 1) return true;
						var players = game.filterPlayer();
						for (var i = 0; i < players.length; i++) {
							if (players[i] == player) continue;
							if (get.distance(player, players[i]) < get.distance(player, target)) return false;
						}
						return true;
					});
					"step 2";
					if (result.bool == false) event.current.loseHp();
					if (event.current.next != player) {
						event.current = event.current.next;
						game.delay(0.5);
						event.goto(1);
					}
				},
				ai: {
					order: 1,
					result: {
						player: function (player) {
							if (player.countCards("h", "shan")) return 1;
							var num = 0,
								players = game.filterPlayer();
							for (var i = 0; i < players.length; i++) {
								if (players[i].canUse("sha", player) && players[i].countCards("h") > 1) {
									num--;
								} else {
									num++;
								}
							}
							return num;
						},
					},
				},
			},
			huanhua: {
				audio: 2,
				trigger: { global: "gameDrawAfter" },
				forced: true,
				unique: true,
				content: function () {
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i] == player) continue;
						player.maxHp += game.players[i].maxHp;
						if (!game.players[i].name || !lib.character[game.players[i].name]) continue;
						var skills = lib.character[game.players[i].name][3];
						for (var j = 0; j < skills.length; j++) {
							if (!lib.skill[skills[j]].forceunique) {
								player.addSkill(skills[j]);
							}
						}
					}
					player.hp = player.maxHp;
					player.update();
				},
				group: ["huanhua3", "huanhua4"],
				ai: {
					threaten: 0.8,
					effect: {
						target: function (card) {
							if (card.name == "bingliang") return 0;
						},
					},
				},
			},
			huanhua2: {
				trigger: { player: "phaseDrawBefore" },
				priority: 10,
				forced: true,
				popup: false,
				check: function () {
					return false;
				},
				content: function () {
					trigger.cancel();
				},
			},
			huanhua3: {
				trigger: { global: "drawAfter" },
				forced: true,
				filter: function (event, player) {
					if (event.parent.name != "phaseDraw") return false;
					return event.player != player;
				},
				content: function () {
					player.draw(trigger.num);
				},
			},
			huanhua4: {
				trigger: { global: "discardAfter" },
				forced: true,
				filter: function (event, player) {
					if (event.parent.parent.name != "phaseDiscard") return false;
					return event.player != player;
				},
				content: function () {
					player.chooseToDiscard(trigger.cards.length, true);
				},
			},
			jidian: {
				audio: 2,
				trigger: { source: "damageAfter" },
				direct: true,
				unique: true,
				content: function () {
					"step 0";
					player.chooseTarget(get.prompt("jidian"), function (card, player, target) {
						return get.distance(trigger.player, target) <= 1 && trigger.player != target;
					}).ai = function (target) {
						return get.damageEffect(target, player, player, "thunder") + 0.1;
					};
					"step 1";
					if (result.bool) {
						event.target = result.targets[0];
						event.target.judge(function (card) {
							return get.color(card) == "red" ? 0 : -1;
						});
						player.logSkill("jidian", event.target, false);
						trigger.player.line(event.target, "thunder");
					} else {
						event.finish();
					}
					"step 2";
					if (result.color == "black") {
						event.target.damage("thunder");
					}
				},
			},
			tinqin: {
				audio: false,
				inherit: "manjuan",
			},
			boss_hujia: {
				audio: 2,
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				unique: true,
				filter: function (event, player) {
					if (player.hp == player.maxHp) return false;
					if (!player.countCards("he")) return false;
					return true;
				},
				content: function () {
					"step 0";
					player.chooseCardTarget({
						position: "he",
						filterTarget: function (card, player, target) {
							if (player == target) return false;
							if (!lib.character[target.name]) return false;
							return true;
						},
						filterCard: lib.filter.cardDiscardable,
						ai1: function (card) {
							return get.unuseful(card) + 9;
						},
						ai2: function (target) {
							if (target.storage.boss_hujia) return Math.max(1, 10 - target.maxHp);
							return 1 / target.maxHp;
						},
						prompt: get.prompt("boss_hujia"),
					});
					"step 1";
					if (result.bool) {
						var target = result.targets[0];
						player.logSkill("boss_hujia", target);
						if (target.storage.boss_hujia) {
							target.loseMaxHp();
						} else {
							target.disableSkill("boss_hujia", lib.character[target.name][3]);
							target.storage.boss_hujia = true;
						}
						player.discard(result.cards);
					}
				},
				ai: {
					expose: 0.2,
				},
			},
			boss_guihan: {
				audio: 2,
				unique: true,
				enable: "chooseToUse",
				mark: true,
				derivation: ["tinqin", "boss_huixin"],
				init: function (player) {
					player.storage.boss_guihan = false;
				},
				filter: function (event, player) {
					if (event.type != "dying") return false;
					if (!player.isDying()) return false;
					if (player.storage.boss_guihan) return false;
					return true;
				},
				content: function () {
					"step 0";
					player.removeSkill("boss_guihan");
					player.recover(player.maxHp - player.hp);
					player.storage.boss_guihan = true;
					"step 1";
					player.draw(4);
					"step 2";
					for (var i = 0; i < game.players.length; i++) {
						game.players[i].enableSkill("boss_hujia");
						delete game.players[i].storage.boss_hujia;
					}
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
						_status.roundStart = game.boss;
					}
					player.removeSkill("beige");
					player.removeSkill("boss_hujia");
					player.addSkill("tinqin");
					player.addSkill("boss_huixin");
				},
				ai: {
					skillTagFilter: function (player) {
						if (player.storage.boss_guihan) return false;
					},
					save: true,
					result: {
						player: 4,
					},
				},
				intro: {
					content: "limited",
				},
			},
			huoshen: {
				trigger: { player: "damageBegin1" },
				forced: true,
				unique: true,
				filter: function (event) {
					return event.hasNature("fire");
				},
				content: function () {
					trigger.cancel();
					player.recover();
				},
				ai: {
					effect: {
						target: function (card) {
							if (get.tag(card, "fireDamage")) {
								return [0, 2];
							}
						},
					},
				},
			},
			boss_xianyin: {
				trigger: { player: "loseEnd" },
				frequent: true,
				unique: true,
				filter: function (event, player) {
					return _status.currentPhase != player;
				},
				content: function () {
					"step 0";
					player.judge(function (card) {
						return get.color(card) == "red" ? 1 : 0;
					});
					"step 1";
					if (result.bool) {
						player.chooseTarget(
							true,
							"选择一个目标令其失去1点体力",
							function (card, player, target) {
								return player != target;
							}
						).ai = function (target) {
							return Math.max(1, 9 - target.hp);
						};
					} else {
						event.finish();
					}
					"step 2";
					if (result.targets.length) {
						player.line(result.targets);
						result.targets[0].loseHp();
					}
				},
				ai: {
					effect: {
						target: function (card) {
							if (get.tag(card, "loseCard")) {
								return [0.5, 1];
							}
						},
					},
				},
			},
			boss_huixin: {
				trigger: { player: "loseEnd" },
				frequent: true,
				unique: true,
				filter: function (event, player) {
					return _status.currentPhase != player;
				},
				content: function () {
					"step 0";
					player.judge();
					"step 1";
					if (result.color == "black") {
						_status.currentPhase.loseHp();
					} else {
						player.recover();
						player.draw();
					}
				},
				ai: {
					effect: {
						target: function (card) {
							if (get.tag(card, "loseCard")) {
								return [0.5, 1];
							}
						},
					},
				},
			},
			boss_shengshou: {
				audio: true,
				trigger: { player: "useCard" },
				frequent: true,
				unique: true,
				filter: function (event, player) {
					return player.hp < player.maxHp;
				},
				content: function () {
					"step 0";
					player.judge(function (card) {
						return get.color(card) == "red" ? 1 : 0;
					});
					"step 1";
					if (result.bool) {
						player.recover();
					}
				},
			},
			boss_honglian: {
				audio: 2,
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				unique: true,
				content: function () {
					"step 0";
					event.players = get.players(player);
					event.players.remove(player);
					player.draw(2);
					"step 1";
					if (event.players.length) {
						event.players.shift().damage("fire");
						event.redo();
					}
				},
			},
			boss_yuhuo: {
				trigger: { player: "niepanAfter" },
				forced: true,
				unique: true,
				derivation: ["shenwei", "zhuyu"],
				content: function () {
					player.addSkill("kanpo");
					player.addSkill("shenwei");
					player.addSkill("zhuyu");
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
						_status.roundStart = game.boss;
					}
				},
			},
			boss_tianyu: {
				audio: true,
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				filter: function (event, player) {
					if (player.isLinked()) return true;
					return game.hasPlayer(function (current) {
						return current != player && !current.isLinked();
					});
				},
				content: function () {
					"step 0";
					event.targets = game.filterPlayer();
					event.targets.remove(player);
					event.targets.sort(lib.sort.seat);
					if (player.isLinked()) player.link();
					"step 1";
					if (event.targets.length) {
						var target = event.targets.shift();
						if (!target.isLinked()) {
							target.link();
							player.line(target, "green");
						}
						event.redo();
					}
				},
			},
			boss_jizhi: {
				audio: 2,
				trigger: { player: "useCard" },
				frequent: true,
				unique: true,
				filter: function (event) {
					var type = get.type(event.card, "trick");
					return type != "basic" && event.card.isCard;
				},
				content: function () {
					var cards = get.cards();
					player.gain(cards, "gain2");
					game.log(player, "获得了", cards);
				},
				ai: {
					threaten: 1.4,
					noautowuxie: true,
				},
			},
			boss_guiyin: {
				mod: {
					targetEnabled: function (card, player, target) {
						if (_status.currentPhase == player && target.hp < player.hp) return false;
					},
				},
			},
			boss_gongshen: {
				trigger: { global: "gameDrawAfter" },
				forced: true,
				unique: true,
				content: function () {
					for (var i = 0; i < game.players.length; i++) {
						if (game.players[i] != player) {
							game.players[i].forcemin = true;
						}
					}
				},
				mod: {
					targetEnabled: function (card, player, target) {
						if (get.type(card) == "delay" && player != target) {
							return false;
						}
					},
				},
			},
			fanghua: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				locked: false,
				unique: true,
				filter: function () {
					return game.hasPlayer(function (current) {
						return current.isTurnedOver();
					});
				},
				content: function () {
					"step 0";
					event.players = get.players(player);
					event.num = 0;
					for (var i = 0; i < event.players.length; i++) {
						if (!event.players[i].isTurnedOver()) {
							event.players.splice(i--, 1);
						}
					}
					"step 1";
					if (event.players.length) {
						event.players.shift().loseHp();
						event.redo();
					}
				},
			},
			tashui: {
				audio: 2,
				trigger: { player: ["useCard", "respondAfter"] },
				direct: true,
				unique: true,
				filter: function (event) {
					return get.color(event.card) == "black";
				},
				content: function () {
					"step 0";
					game.delay(0.5);
					player.chooseTarget(get.prompt("tashui"), function (card, player, target) {
						return player != target;
					}).ai = function (target) {
						//	if(target.isTurnedOver()) return -1;
						var player = _status.event.player;
						if (get.attitude(_status.event.player, target) == 0) return 0;
						if (get.attitude(_status.event.player, target) > 0) {
							if (target.classList.contains("turnedover")) return 3;
							if (target.hasSkillTag("noturn")) return 1;
							return -1;
						} else {
							if (target.hasSkillTag("noturn")) return 0;
							if (target.classList.contains("turnedover")) return -1;
							return 5 - target.getDamagedHp();
						}
					};
					"step 1";
					if (result.bool) {
						player.logSkill("tashui", result.targets, "thunder");
						result.targets[0].turnOver();
					}
				},
				ai: {
					effect: {
						player: function (card) {
							if (get.color(card) == "black") {
								return [1, 2];
							}
						},
					},
				},
			},
			shangshix: {
				trigger: { player: ["loseEnd", "changeHp"] },
				forced: true,
				unique: true,
				audio: 2,
				filter: function (event, player) {
					return player.countCards("h") < 4;
				},
				content: function () {
					player.draw(4 - player.countCards("h"));
				},
				group: "shangshix2",
				ai: {
					effect: {
						target: function (card, player, target) {
							if (card.name == "shunshou") return;
							if (card.name == "guohe") {
								if (!target.countCards("e")) return [0, 1];
							} else if (get.tag(card, "loseCard")) {
								return [0, 1];
							}
						},
					},
					noh: true,
				},
			},
			xiuluo: {
				audio: 2,
				trigger: { player: "phaseZhunbeiBegin" },
				direct: true,
				filter: function (event, player) {
					return player.countCards("j") > 0;
				},
				content: function () {
					"step 0";
					var next = player.discardPlayerCard(
						player,
						2,
						"hj",
						"是否一张手牌来弃置一张花色相同的判定牌?"
					);
					next.filterButton = function (button) {
						var card = button.link;
						if (!lib.filter.cardDiscardable(card, player)) return false;
						if (ui.selected.buttons.length == 0) return true;
						if (get.position(ui.selected.buttons[0].link) == "h") {
							if (get.position(card) != "j") return false;
						}
						if (get.position(ui.selected.buttons[0].link) == "j") {
							if (get.position(card) != "h") return false;
						}
						return get.suit(card) == get.suit(ui.selected.buttons[0].link);
					};
					next.ai = function (button) {
						var card = button.link;
						if (get.position(card) == "h") {
							return 11 - get.value(card);
						}
						if (card.name == "lebu") return 5;
						if (card.name == "bingliang") return 4;
						if (card.name == "guiyoujie") return 3;
						return 2;
					};
					next.logSkill = "xiuluo";
					"step 1";
					if (result.bool && player.countCards("j")) event.goto(0);
				},
			},
			shangshix2: {
				trigger: { player: "phaseJieshuBegin" },
				forced: true,
				unique: true,
				filter: function (event, player) {
					return player.hp > 1;
				},
				content: function () {
					"step 0";
					event.players = get.players(player);
					event.num = 0;
					"step 1";
					if (event.players.length) {
						event.players.shift().loseHp();
						event.redo();
					}
				},
			},
			boss_wuxin: {
				audio: 2,
				mod: {
					targetEnabled: function (card, player, target) {
						if (get.type(card) == "delay" && player != target) return false;
					},
				},
				trigger: { player: "damageBefore" },
				forced: true,
				priority: 10,
				content: function () {
					trigger.cancel();
					player.loseHp();
				},
			},
			shenwei: {
				audio: 2,
				unique: true,
				trigger: { player: "phaseDrawBegin" },
				forced: true,
				content: function () {
					trigger.num += Math.min(3, game.players.length - 1);
				},
				mod: {
					maxHandcard: function (player, current) {
						return current + Math.min(3, game.players.length - 1);
					},
				},
			},
			boss_baonuwash: {
				trigger: { player: "phaseAfter" },
				forced: true,
				content: function () {
					game.over(game.me == game.boss);
				},
				temp: true,
			},
			boss_baonu: {
				unique: true,
				trigger: { player: "changeHp", global: "boss_baonuwash" },
				forced: true,
				priority: 100,
				fixed: true,
				audio: 2,
				mode: ["identity", "guozhan", "boss", "stone"],
				init: function (player) {
					if (get.mode() == "boss" && player == game.boss) {
						lib.onwash.push(function () {
							if (!_status.boss_baonuwash) {
								_status.boss_baonuwash = true;
								_status.event.parent.trigger("boss_baonuwash");
							} else {
								_status.event.player.addSkill("boss_baonuwash");
							}
						});
						for (var i in lib.card) {
							if (lib.card[i].subtype == "equip1") lib.card[i].recastable = true;
						}
					}
				},
				filter: function (event, player) {
					return player.hp <= 4 || _status.boss_baonuwash;
				},
				content: function () {
					"step 0";
					if (player.hp > 6) {
						game.delay();
					}
					"step 1";
					player
						.chooseControl("暴怒战神", "神鬼无前", function () {
							if (Math.random() < 0.5) return "神鬼无前";
							return "暴怒战神";
						})
						.set("prompt", "选择一个形态");
					"step 2";
					var hp = player.hp;
					player.removeSkill("boss_baonu", true);
					if (result.control == "暴怒战神") {
						player.init("boss_lvbu2");
					} else {
						player.init("boss_lvbu3");
					}
					if (hp > 6) {
						player.maxHp = hp;
						player.hp = hp;
					}
					player.update();
					ui.clear();
					if (player.isLinked()) player.link();
					if (player.isTurnedOver()) player.turnOver();
					player.discard(player.getCards("j"));
					"step 3";
					while (_status.event.name != "phaseLoop") {
						_status.event = _status.event.parent;
					}
					game.resetSkills();
					_status.paused = false;
					_status.event.player = player;
					_status.event.step = 0;
					if (game.bossinfo) {
						game.bossinfo.loopType = 1;
						_status.roundStart = game.boss;
					}
				},
				ai: {
					effect: {
						target: function (card, player, target) {
							if (get.tag(card, "damage") || get.tag(card, "loseHp")) {
								if (player.hp == 5) {
									if (game.players.length < 4) return [0, 5];
									var num = 0;
									for (var i = 0; i < game.players.length; i++) {
										if (game.players[i] != game.boss && game.players[i].hp == 1) {
											num++;
										}
									}
									if (num > 1) return [0, 2];
									if (num && Math.random() < 0.7) return [0, 1];
								}
							}
						},
					},
				},
			},
			qiwu: {
				audio: true,
				trigger: { player: "useCard" },
				forced: true,
				filter: function (event, player) {
					return get.suit(event.card) == "club" && player.hp < player.maxHp;
				},
				content: function () {
					player.recover();
				},
			},
			jizhen: {
				trigger: { player: "phaseJieshuBegin" },
				direct: true,
				filter: function (event, player) {
					return game.hasPlayer(function (current) {
						return current.isDamaged() && current != player;
					});
				},
				content: function () {
					"step 0";
					var num = 0;
					for (var i = 0; i < game.players.length; i++) {
						if (!game.players[i].isLinked() && player != game.players[i]) {
							num++;
						}
					}
					player.chooseTarget(get.prompt("jizhen"), [1, 2], function (card, player, target) {
						return target.hp < target.maxHp && player != target;
					}).ai = function (target) {
						return get.attitude(player, target);
					};
					"step 1";
					if (result.bool) {
						player.logSkill("jizhen", result.targets);
						game.asyncDraw(result.targets);
					}
				},
				ai: {
					expose: 0.3,
					threaten: 1.3,
				},
			},
			shenqu: {
				audio: 2,
				group: "shenqu2",
				trigger: { global: "phaseZhunbeiBegin" },
				filter: function (event, player) {
					return player.countCards("h") <= player.maxHp;
				},
				frequent: true,
				content: function () {
					player.draw(2);
				},
			},
			shenqu2: {
				trigger: { player: "damageAfter" },
				direct: true,
				filter: function (event, player) {
					return player.hasSkillTag("respondTao") || player.countCards("h", "tao") > 0;
				},
				content: function () {
					player.chooseToUse({ name: "tao" }, "神躯:是否使用一张桃?").logSkill = "shenqu";
				},
			},
			jiwu: {
				derivation: ["qiangxix", "retieji", "olxuanfeng", "rewansha"],
				audio: 2,
				enable: "phaseUse",
				filter: function (event, player) {
					if (player.countCards("he") == 0) return false;
					if (!player.hasSkill("qiangxix")) return true;
					if (!player.hasSkill("retieji")) return true;
					if (!player.hasSkill("olxuanfeng")) return true;
					if (!player.hasSkill("rewansha")) return true;
					return false;
				},
				filterCard: true,
				position: "he",
				check: function (card) {
					if (get.position(card) == "e" && _status.event.player.hasSkill("olxuanfeng"))
						return 16 - get.value(card);
					return 7 - get.value(card);
				},
				content: function () {
					"step 0";
					var list = [];
					if (!player.hasSkill("qiangxix")) list.push("qiangxix");
					if (!player.hasSkill("retieji")) list.push("retieji");
					if (!player.hasSkill("olxuanfeng")) list.push("olxuanfeng");
					if (!player.hasSkill("rewansha")) list.push("rewansha");
					if (list.length == 1) {
						player.addTempSkills(list[0]);
						event.finish();
					} else {
						player
							.chooseControl(list, function () {
								if (list.includes("olxuanfeng") && player.countCards("he", { type: "equip" }))
									return "olxuanfeng";
								if (!player.getStat().skill.qiangxix) {
									if (
										player.hasSkill("qiangxix") &&
										player.getEquip(1) &&
										list.includes("olxuanfeng")
									)
										return "olxuanfeng";
									if (list.includes("rewansha") || list.includes("qiangxix")) {
										var players = game.filterPlayer();
										for (var i = 0; i < players.length; i++) {
											if (players[i].hp == 1 && get.attitude(player, players[i]) < 0) {
												if (list.includes("rewansha")) return "rewansha";
												if (list.includes("qiangxix")) return "qiangxix";
											}
										}
									}
								}
								if (list.includes("qiangxix")) return "qiangxix";
								if (list.includes("rewansha")) return "rewansha";
								if (list.includes("olxuanfeng")) return "olxuanfeng";
								return "retieji";
							})
							.set("prompt", "选择获得一项技能直到回合结束");
					}
					"step 1";
					player.addTempSkills(result.control);
					// player.popup(get.translation(result.control));
				},
				ai: {
					order: function () {
						var player = _status.event.player;
						if (player.countCards("e", { type: "equip" })) return 10;
						if (!player.getStat().skill.qiangxix) {
							if (
								player.hasSkill("qiangxix") &&
								player.getEquip(1) &&
								!player.hasSkill("olxuanfeng")
							)
								return 10;
							if (player.hasSkill("rewansha")) return 1;
							var players = game.filterPlayer();
							for (var i = 0; i < players.length; i++) {
								if (players[i].hp == 1 && get.attitude(player, players[i]) < 0) return 10;
							}
						}
						return 1;
					},
					result: {
						player: function (player) {
							if (player.countCards("e", { type: "equip" })) return 1;
							if (!player.getStat().skill.qiangxix) {
								if (
									player.hasSkill("qiangxix") &&
									player.getEquip(1) &&
									!player.hasSkill("olxuanfeng")
								)
									return 1;
								if (!player.hasSkill("rewansha") || !player.hasSkill("qiangxix")) {
									var players = game.filterPlayer();
									for (var i = 0; i < players.length; i++) {
										if (players[i].hp == 1 && get.attitude(player, players[i]) < 0)
											return 1;
									}
								}
							}
							return 0;
						},
					},
				},
			},
			boss_hunzi: {
				skillAnimation: true,
				animationColor: "wood",
				audio: "hunzi",
				juexingji: true,
				derivation: ["reyingzi", "yinghun"],
				unique: true,
				trigger: {
					player: "phaseZhunbeiBegin",
				},
				filter: function (event, player) {
					return player.hp <= 2 && !player.storage.boss_hunzi;
				},
				forced: true,
				content: function () {
					player.removeSkill("boss_hunyou");
					player.removeSkill("boss_hunyou_dying");
					player.removeSkill("boss_hunyou_dieBegin");
					player.loseMaxHp();
					player.addSkill("reyingzi");
					player.addSkill("yinghun");
					game.log(player, "获得了技能", "#g【英姿】和【英魂】");
					game.log(player, "", "#y【魂佑】");
					player.awakenSkill("boss_hunzi");
					player.storage.boss_hunzi = true;
				},
				ai: {
					threaten: function (player, target) {
						if (target.hp == 1) return 2;
						return 0.5;
					},
					maixie: true,
					effect: {
						target: function (card, player, target) {
							if (!target.hasFriend()) return;
							if (
								get.tag(card, "damage") == 1 &&
								target.hp == 2 &&
								!target.isTurnedOver() &&
								_status.currentPhase != target &&
								get.distance(_status.currentPhase, target, "absolute") <= 3
							)
								return [0.5, 1];
						},
					},
				},
			},
			boss_jiang: {
				audio: "jiang",
				trigger: {
					global: ["respondEnd"],
				},
				charlotte: true,
				locked: true,
				init: function (player) {
					var a = window.setInterval(function () {
						if (player.hasSkill("boss_jiang")) {
							player.storage.boss_jiang = true;
						} else {
							game.addGlobalSkill("boss_jiang");
							game.addGlobalSkill("boss_jiang_use");
							window.clearInterval(a);
						}
					}, 1000);
				},
				filter2: function (event, player) {
					if (!event.respondTo[1]) return false;
					if (get.itemtype(event.cards) != "cards") return false;
					if (["h", "e", "j"].includes(get.position(event.cards[0]))) return false;
					if (event.respondTo[1] && get.itemtype(event.respondTo[1]) != "card") return false;
					if (event.respondTo[1] && ["h", "e", "j"].includes(get.position(event.respondTo[1])))
						return false;
				},
				filter: function (event, player) {
					if (!player.storage.boss_jiang) return false;
					if (!event.respondTo) return false;
					if (get.color(event.card) != "red") return false;
					if (event.respondTo[0] != player) {
						return event.player == player;
					} else {
						return event.player != player;
					}
				},
				frequent: true,
				content: function () {
					player.draw();
					if (!lib.skill.boss_jiang.filter2(trigger, player)) return;
					if (trigger.respondTo[0] != player) {
						if (trigger.respondTo[1] && get.position(trigger.respondTo[1]) == "d")
							player.gain(trigger.respondTo[1], "gain2");
					} else {
						if (get.position(trigger.cards[0]) == "d") player.gain(trigger.cards, "gain2");
					}
				},
				group: ["boss_jiang_use"],
				subSkill: {
					use: {
						trigger: {
							global: ["useCard"],
						},
						filter: function (event, player) {
							if (!player.storage.boss_jiang) return false;
							if (get.color(event.card) != "red") return false;
							return player == event.player || event.targets.includes(player);
						},
						frequent: true,
						content: function () {
							player.draw();
							if (
								trigger.player != player &&
								get.itemtype(trigger.cards) == "cards" &&
								get.position(trigger.cards[0]) == "d"
							)
								player.gain(trigger.cards, "gain2");
						},
						sub: true,
					},
				},
			},
			boss_hunyou: {
				forced: true,
				init: function (player) {
					player.hp = 1;
					player.storage.hp = player.hp;
					player.storage.maxHp = player.maxHp;
					player.update();
				},
				trigger: {
					player: [
						"damageBefore",
						"recoverBefore",
						"loseHpBefore",
						"loseMaxHpBefore",
						"gainMaxHpBefore",
					],
				},
				content: function () {
					trigger.cancel();
				},
				group: ["boss_hunyou_dying", "boss_hunyou_dieBegin"],
				subSkill: {
					dying: {
						trigger: {
							player: "dying",
						},
						silent: true,
						filter: function (event, player) {
							if (player.hp != player.storage.hp && player.storage.hp > 0) return true;
							return false;
						},
						content: function () {
							trigger.cancel();
							player.maxHp = player.storage.maxHp;
							player.hp = player.storage.hp;
							player.update();
						},
						sub: true,
						forced: true,
						popup: false,
					},
					dieBegin: {
						trigger: {
							player: "dieBegin",
						},
						silent: true,
						filter: function (event, player) {
							if (player.maxHp != player.storage.maxHp && player.storage.maxHp > 0) return true;
							return false;
						},
						content: function () {
							trigger.cancel();
							player.maxHp = player.storage.maxHp;
							player.hp = player.storage.hp;
							player.update();
						},
						sub: true,
						forced: true,
						popup: false,
					},
				},
			},
			boss_taoni: {
				forced: true,
				trigger: {
					global: ["gameStart", "phaseBefore"],
					player: "dieBegin",
				},
				priority: 50,
				init: function (player) {
					player.boss_taoni = function () {
						if (typeof _status.taoni_over != "function") {
							_status.taoni_over = function (str) {
								_status.over = true;
								game.alert(str);
							};
						}
						function isDefined(opd) {
							if (opd != undefined) {
								if (opd.get || opd.set || opd.writable != true || opd.configurable != true) {
									return true;
								}
							}
							return false;
						}
						var keysArray = ["length", "players", "Player", "element"];
						for (var i = 0; i < game[keysArray[1]][keysArray[0]]; i++) {
							var node = game[keysArray[1]][i];
							for (var a in Object.keys(lib[keysArray[3]][keysArray[2]].prototype)) {
								var opd = Object.getOwnPropertyDescriptor(node, a);
								if (isDefined(opd))
									_status.taoni_over(
										lib.translate[node.name] + "触发了〖讨逆〗,游戏已被终止。"
									);
								//还原函数
								node[a] = lib[keysArray[3]][keysArray[2]].prototype[a];
								var playerKeysArray = ["classList", "hp", "maxHp", "skills"];
								for (var b = 0; b < playerKeysArray.length; b++) {
									var opd2 = Object.getOwnPropertyDescriptor(node, playerKeysArray[b]);
									if (isDefined(opd2))
										_status.taoni_over(
											lib.translate[node.name] + "触发了〖讨逆〗,游戏已被终止。"
										);
								}
								var gameKeysArray = ["players", "dead", "over"];
								for (var c = 0; c < gameKeysArray.length; c++) {
									var opd3 = Object.getOwnPropertyDescriptor(game, gameKeysArray[c]);
									if (isDefined(opd3)) _status.taoni_over("〖讨逆〗被触发,游戏终止。");
								}
							}
						}
					};
				},
				content: function () {
					player.boss_taoni();
				},
			},
		},
		translate: {
			zhu: "神",
			cai: "盟",
			zhong: "从",

			boss_chi: "魑",
			boss_mo: "魅",
			boss_wang: "魍",
			boss_liang: "魉",
			boss_niutou: "牛头",
			boss_mamian: "马面",
			boss_baiwuchang: "白无常",
			boss_heiwuchang: "黑无常",
			boss_luocha: "罗刹",
			boss_yecha: "夜叉",
			boss_zhuoguiquxie: "捉鬼驱邪",

			boss_nianshou: "年兽",
			boss_nianshou_heti: "年兽",
			boss_nianshou_jingjue: "警觉年兽",
			boss_nianshou_renxing: "任性年兽",
			boss_nianshou_baonu: "暴怒年兽",
			boss_nianshou_ruizhi: "睿智年兽",

			boss_shuijing: "水镜先生",
			boss_huangyueying: "奇智女杰",
			boss_zhangchunhua: "冷血皇后",
			boss_satan: "堕落天使",
			boss_dongzhuo: "乱世魔王",
			boss_lvbu1: "最强神话",
			boss_lvbu2: "暴怒战神",
			boss_lvbu3: "神鬼无前",
			boss_zhouyu: "赤壁火神",
			boss_pangtong: "涅槃凤雏",
			boss_zhugeliang: "祭风卧龙",
			boss_zhangjiao: "天公将军",
			boss_zuoci: "迷之仙人",
			boss_yuji: "琅琊道士",
			boss_liubei: "蜀汉烈帝",
			boss_caiwenji: "异乡孤女",
			boss_huatuo: "药坛圣手",
			boss_luxun: "蹁跹君子",
			boss_zhenji: "洛水仙子",
			boss_diaochan: "绝代妖姬",
			boss_guojia: "世之奇士",
			boss_caocao: "魏武大帝",

			boss_chiyanshilian: "夏之试炼",
			boss_zhuque: "朱雀",
			boss_huoshenzhurong: "火神祝融",
			boss_yanling: "焰灵",
			boss_yandi: "炎帝",

			boss_hundun: "混沌",
			boss_qiongqi: "穷奇",
			boss_taowu: "梼杌",
			boss_taotie: "饕餮",
			boss_zhuyin: "烛阴",
			boss_xiangliu: "相柳",
			boss_zhuyan: "朱厌",
			boss_bifang: "毕方",
			boss_yingzhao: "英招",

			boss_yaoshou: "妖兽",
			boss_yaoshou_info: "锁定技,你与其他角色计算-2。",
			boss_duqu: "毒躯",
			boss_duqu_info:
				"锁定技,你受到伤害时,伤害来源获得1枚“蛇毒”标记;你自身不会拥有“蛇毒”标记;你的“桃”均视为“杀”。“蛇毒”标记:锁定技,拥有“蛇毒”标记的角色回合开始时,需要选择弃置X张牌或者失去X点体力,然后弃置一枚“蛇毒”标记。X为其拥有的“蛇毒”标记个数。",
			boss_shedu: "蛇毒",
			boss_jiushou: "九首",
			boss_jiushou_info:
				"锁定技,你的手牌上限始终为9,你的出牌阶段开始时以及你的回合结束时,将手牌补至手牌上限,你始终跳过你的摸牌阶段。",
			boss_echou_switch: "恶臭",
			boss_echou: "恶臭",
			boss_echou_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,除你之外的其他角色使用“桃”或“酒”时,获得1枚“蛇毒”标记。",
			boss_bingxian: "兵燹",
			boss_bingxian_info:
				"锁定技,其他角色的回合结束时,若其回合内没有使用杀,则视为你对其使用一张“杀”。",
			boss_juyuan: "巨猿",
			boss_juyuan_info:
				"锁定技,你的体力上限+5,你的出牌阶段内,若你的体力少于上一次你的回合结束时的体力,则你本回合使用“杀”可额外指定1个目标。",
			boss_xushi_switch: "蓄势",
			boss_xushi: "蓄势",
			boss_xushi_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,你的出牌阶段结束时,你令自己翻面;当你的武将牌从背面翻至正面时,对所有其他角色造成随机1至2点伤害。",
			boss_zhaohuo: "兆火",
			boss_zhaohuo_info:
				"锁定技,你造成的所有伤害均视为火属性伤害;你的回合中,所有其他角色的防具牌无效;你免疫所有火属性伤害。",
			boss_honglianx: "红莲",
			boss_honglianx_info:
				"锁定技,你的红色牌不计入你的手牌上限;你的回合开始时,随机获得牌堆中0到3张红色牌,然后随机对3到0名其他角色各造成1点火属性伤害。",
			boss_yanyu: "炎狱",
			boss_yanyu_switch: "炎狱",
			boss_yanyu_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,其他角色回合开始时进行判定,若为红色则受到1点火属性伤害,并重复此过程(每个回合最多判定3次)。",
			boss_fengdong: "封冻",
			boss_fengdong_info: "锁定技,你的回合内,其他角色的非锁定技无效。",
			boss_xunyou: "巡游",
			boss_xunyou_info:
				"锁定技,其他角色回合开始时,你随机获得场上除你以外的一名角色区域内的一张牌,若你获得的是装备牌,则你使用之。",
			boss_sipu: "司圃",
			boss_sipu_switch: "司圃",
			boss_sipu_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,你的出牌阶段内,若你使用的牌数小于等于2张,其他角色无法使用或打出牌。",

			boss_wuzang: "无脏",
			boss_wuzang_info:
				"锁定技,摸牌阶段,你的摸牌基数改为X(X为你的体力值一半且至少为5);你的手牌上限基数为0。",
			boss_xiangde: "相德",
			boss_xiangde_info: "锁定技,其他角色对你造成伤害时,若其装备区内有武器牌,此伤害+1。",
			boss_yinzei: "隐贼",
			boss_yinzei_switch: "隐贼",
			boss_yinzei_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,若你没有手牌,其他角色对你造成伤害后,随机弃置一张牌。",
			boss_zhue: "助恶",
			boss_zhue_info: "锁定技,每当一名其他角色造成伤害后,你与伤害来源各摸一张牌。",
			boss_futai: "复态",
			boss_futai_info:
				"锁定技,你的回合外,其他角色不能使用【桃】;你的回合开始时,你令所有角色回复1点体力。",
			boss_yandu: "厌笃",
			boss_yandu_switch: "厌笃",
			boss_yandu_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,其他角色回合结束后,若其未造成过伤害,你获得其一张牌。",
			boss_minwan: "冥顽",
			boss_minwan_info:
				"锁定技,当你于回合内使用牌对其他角色造成伤害后,你于此回合内使用牌只能指定你与这些角色为目标,且你每使用一张牌,摸一张牌。",
			boss_nitai: "拟态",
			boss_nitai_info: "锁定技,防止你于回合内受到的伤害;你于回合外受到火属性伤害+1。",
			boss_luanchang: "乱常",
			boss_luanchang_switch: "乱常",
			boss_luanchang_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,回合开始时,你视为使用【南蛮入侵】;回合结束时,你视为使用【万箭齐发】。",
			boss_tanyu: "贪欲",
			boss_tanyu_info: "锁定技,跳过你的弃牌阶段;结束阶段,若你的手牌数为全场最多,失去1点体力。",
			boss_cangmu: "藏目",
			boss_cangmu_info: "锁定技,你令摸牌阶段摸牌基数改为X(X为存活角色数)。",
			boss_jicai: "积财",
			boss_jicai_switch: "积财",
			boss_jicai_info:
				"体力值首次减少至一半或更少时激活此技能。锁定技,一名角色回复体力后,你与其各摸一张牌。",
			boss_xiongshou: "凶兽",
			boss_xiongshou_info:
				"锁定技,你使用【杀】对体力值小于你的角色造成的伤害+1;你与其他角色距离-1;你不能被翻面。",
			sadouchengbing: "撒豆成兵",
			sadouchengbing_info:
				"出牌阶段对自己使用,若你的势力为“神”,摸X张牌;否则将你手牌补至X;(X为你的体力上限且至多为5)。",
			yihuajiemu: "移花接木",
			yihuajiemu_info: "出牌阶段对一名有牌的其他角色使用,令其使用一张【杀】,或交给你两张牌。",
			chiyanzhenhunqin: "赤焰镇魂琴",
			chiyanzhenhunqin_info: "锁定技,你造成的伤害均视为具有火属性。",
			juechenjinge: "绝尘金戈",
			juechenjinge_info: "锁定技,敌方角色计算与己方其他角色距离+1。",
			xiuluolianyuji: "修罗炼狱戟",
			xiuluolianyuji_info:
				"你使用【杀】可以额外指定任意名攻击范围内的其他角色为目标;锁定技,你使用【杀】造成的伤害+1,然后令受到伤害的角色回复1点体力。",
			longfenghemingjian: "鸾凤和鸣剑",
			longfenghemingjian_info:
				"你使用的雷【杀】或火【杀】指定目标后,可令对方选择弃置一张牌或令你摸一张牌。",
			qicaishenlu: "七彩神鹿",
			qicaishenlu_info: "锁定技,你计算与其他角色的距离时-1,当你造成属性伤害时,你令此伤害+1。",
			boss_mengpohuihun: "回魂",
			boss_mengpohuihun_info:
				"若场上有角色在本局游戏中因孟婆的〖忘魂〗失去过技能,则令其恢复该技能;此牌进入弃牌堆后,会被销毁。",
			honghuangzhili: "洪荒之力",
			honghuangzhili_cbg: "洪",
			honghuangzhili_info:
				"若该角色的势力是神,你获得其一张牌,其〖神裔〗无效直到其下家的回合(这个下家是动态变化的,会随着一个人的死或者复活而变化)开始;若该角色的势力不是神,其翻面。",

			boss_qingmushilian: "春之试炼",
			boss_qinglong: "青龙",
			boss_mushengoumang: "木神勾芒",
			boss_shujing: "树精",
			boss_taihao: "太昊",

			boss_baimangshilian: "秋之试炼",
			boss_baihu: "白虎",
			boss_jinshenrushou: "金神蓐收",
			boss_mingxingzhu: "明刑柱",
			boss_shaohao: "少昊",

			boss_xuanlinshilian: "冬之试炼",
			boss_xuanwu: "玄武",
			boss_shuishenxuanming: "水神玄冥",
			boss_shuishengonggong: "水神共工",
			boss_zhuanxu: "颛顼",

			boss_lingqu: "灵躯",
			boss_lingqu_info:
				"锁定技,当你受到伤害后,你摸一张牌,然后手牌上限+1;防止你受到的大于1点的伤害。",
			boss_zirun: "滋润",
			boss_zirun_info:
				"锁定技,准备阶段开始时,你令所有角色摸一张牌,若其装备区内有牌,则其额外摸一张牌。",
			boss_juehong: "决洪",
			boss_juehong_info:
				"锁定技,准备阶段开始时,你令所有敌方角色自己弃置自己的装备区内的所有牌,若其装备区内没有牌,则改为你弃置其一张手牌。",
			boss_zaoyi: "皂仪",
			boss_zaoyi_info:
				"锁定技,只要水神玄冥存活,你不会成为敌方角色使用锦囊牌的目标,只要水神共工存活,你不会成为敌方角色使用基本牌的目标。水神玄冥和水神共工均死亡后,你摸四张牌,然后从下回合开始,每个回合开始时使体力值最少的敌方角色失去所有体力。",
			boss_baiyi: "白仪",
			boss_baiyi_info:
				"锁定技,每名敌方角色的摸牌阶段,若当前轮数小于3,其少摸一张牌;第五轮开始时,每名敌方角色弃置两张牌;当己方角色受到的雷电伤害时,若当前轮数小于7,其防止此伤害。",
			boss_qingzhu: "擎柱",
			boss_qingzhu_info: "锁定技,你跳过弃牌阶段,若你没有“殛顶”,你于出牌阶段不能使用【杀】。",
			boss_jiazu: "枷足",
			boss_jiazu_info: "锁定技,回合开始时,弃置你上家和下家的敌方角色的装备区内的坐骑牌。",
			boss_jiding: "殛顶",
			boss_jiding_info:
				"锁定技,其他己方角色受到伤害后,若伤害来源为敌方角色,则你视为对伤害来源使用雷【杀】,若此【杀】造成伤害,蓐收回复1点体力。然后你失去此技能(只有发动了才会失去,没发动不会失去)。",
			boss_xingqiu: "刑秋",
			boss_xingqiu_info:
				"锁定技,每两轮的出牌阶段开始时,你横置所有敌方角色,然后使明刑柱获得〖殛顶〗。",
			boss_kuangxiao: "狂啸",
			boss_kuangxiao_info: "锁定技,你的回合内,你使用【杀】没有距离限制,且指定所有敌方角色为目标。",
			boss_shenyi: "神裔",
			boss_shenyi_info: "锁定技,你的武将牌始终正面向上,你的判定区内的牌效果反转。",
			boss_shenen: "神恩",
			boss_shenen_info:
				"锁定技,所有己方角色使用牌无距离限制;所有敌方角色摸牌阶段多摸一张牌且手牌上限+1。",
			boss_fentian: "焚天",
			boss_fentian_info:
				"锁定技,你造成的伤害视为火焰伤害;你使用红色牌无距离和次数限制,且不可被其他角色使用【闪】或【无懈可击】响应。",
			boss_fentian2: "焚天",
			boss_xingxia: "行夏",
			boss_xingxia_info:
				"每两轮限一次,出牌阶段,你可以对焰灵造成2点火焰伤害,然后令每名敌方角色选择一项:1.弃置一张红色牌;2.你对其造成1点火焰伤害。",
			boss_huihuo: "回火",
			boss_huihuo_info:
				"锁定技,当你死亡时,你对所有敌方角色各造成3点火焰伤害;出牌阶段,你可以多使用一张【杀】。",
			boss_furan: "复燃",
			boss_furan2: "复燃",
			boss_furan_info: "当你濒死时,所有敌方角色视为可以将红色牌当【桃】对你使用。",
			boss_chiyi: "赤仪",
			boss_chiyi2: "赤仪",
			boss_chiyi_info:
				"锁定技,从第三轮开始,敌方角色受到的伤害+1;第五轮开始时,你对所有角色各造成1点火焰伤害;第七轮开始时,你对焰灵造成5点火焰伤害。",
			boss_buchun: "布春",
			boss_buchun_info:
				"每两轮限一次,出牌阶段,若场上有死亡的树精,你可以失去1点体力,复活所有树精,使其回复体力至1点,补充手牌至两张;若场上没有死亡的树精,你可以为一名己方角色回复2点体力。",
			boss_cuidu: "淬毒",
			boss_cuidu_info:
				"锁定技,你对敌方角色造成伤害后,若其没有“中毒”,你令其获得“中毒”,然后令木神勾芒摸一张牌。",
			boss_zhongdu: "中毒",
			boss_zhongdu_bg: "毒",
			boss_zhongdu_info:
				"锁定技,回合开始时,你进行判定,若结果不为红桃,你受到1点无来源的伤害,若结果不为黑桃,你失去此技能。",
			boss_qingyi: "青仪",
			boss_qingyi_info:
				"锁定技,第三轮开始时,己方角色各回复1点体力;第五轮开始时,敌方角色各失去1点体力;第七轮开始时,复活木神勾芒和树精,使其各摸三张牌,各+1体力上限,然后各回复3点体力。",

			boss_guimou: "鬼谋",
			boss_guimou_info: "结束阶段,你可以令一名随机的其他角色进入混乱状态直到其下一回合结束。",
			boss_yuance: "远策",
			boss_yuance_info:
				"每当一名角色受到其他角色的伤害,你可以选择一项并进行一次判定:1. 若结果为黑色,受伤害角色失去1点体力,否则伤害来源失去1点体力;2. 若结果为红色,受伤害角色回复1点体力,否则伤害来源回复1点体力。",
			boss_qizuo: "奇佐",
			boss_qizuo_info: "你可以令你的普通锦囊牌额外结算一次。",
			boss_guixin: "归心",
			boss_guixin_info: "锁定技,其他角色摸牌时,若摸牌数不少于2,须将摸到的牌中的一张交给你。",
			xiongcai: "雄才",
			xiongcai_info: "锁定技,你在回合结束后随机获得一个魏势力角色的所有技能。",
			xiaoxiong: "枭雄",
			xiaoxiong_info:
				"锁定技,每当一名其他角色使用一张基本牌或锦囊牌,你获得一张与之同名的牌;在一名其他角色的结束阶段,若其本回合没有使用牌,你对其造成1点伤害。",
			boss_zhangwu: "章武",
			boss_zhangwu_info:
				"每当你受到一次伤害,你可以弃置任意张牌并令伤害来源选择一项:弃置等量的牌,或受到等量的伤害。",
			xiangxing: "禳星",
			xiangxing_info:
				"锁定技,游戏开始时,你获得7枚星;每当你累计扣减7点体力,你失去一枚星,并造成7点雷属性伤害,随机分配给其他角色;当你失去全部星后,你的体力上限变为3。",
			yueyin: "月隐",
			yueyin_info: "锁定技,你的每一枚星对应的一个特定条件,当你失去星时,若满足此条件,则不造成伤害。",
			xiangxing7_info: "你没有手牌",
			xiangxing6_info: "此次受到的是火属性伤害",
			xiangxing5_info: "此次受到的是雷属性伤害",
			xiangxing4_info: "此次为失去体力",
			xiangxing3_info: "一名其他角色有至少4件装备",
			xiangxing2_info: "你的判定区内至少有两张牌",
			xiangxing1_info: "场上只有2名存活角色",
			gaiming: "改命",
			gaiming_info:
				"锁定技,在你的判定牌生效前,你观看牌堆顶的七张牌并选择一张作为判定结果,此结果不可更改。",
			fengqi: "风起",
			fengqi_info: "准备阶段和结束阶段,你可以视为使用任意一张普通锦囊牌。",

			jiaoxia: "皎霞",
			jiaoxia_info: "每当你成为红色牌的目标,你可以摸一张牌。",
			lingbo: "凌波",
			lingbo_info: "每当你使用或打出一张闪,你可以摸两张牌。",
			tiandao: "天道",
			tiandao_info: "任意一名角色的判定生效前,你可以打出一张牌替换之。",
			yunshen: "云身",
			yunshen2: "云身",
			yunshen_info:
				"每当你使用或打出一张闪时,你可以令你的防御距离+1;准备阶段,你将累计的防御距离清零,然后摸等量的牌。",
			lianji: "连计",
			lianji_info:
				"出牌阶段限一次,你可以选择一张手牌并指定两名角色进行拼点,拼点赢的角色获得此牌,并对没赢的角色造成1点伤害。",
			mazui: "麻醉",
			mazui2: "麻醉",
			mazui_info:
				"出牌阶段限一次,你可以将一张黑色手牌置于一名角色的武将牌上,该角色造成的下一次伤害-1,然后获得此牌。",

			boss_nbianshen: "变形",
			boss_nbianshenx: "变形",
			boss_nbianshenx_info: "你从第二轮开始,每一轮幻化为警觉、任性、睿智、暴怒四种随机状态中的一种。",
			boss_mengtai: "萌态",
			boss_mengtai_info:
				"锁定技,若你的出牌阶段被跳过,你跳过本回合的弃牌阶段;若你的摸牌阶段被跳过,结束阶段开始时,你摸三张牌。",
			boss_ruizhi: "睿智",
			boss_ruizhi_info:
				"锁定技,其他角色的准备阶段开始时,其选择一张手牌和一张装备区里的牌,然后弃置其余的牌。",
			boss_jingjue: "警觉",
			boss_jingjue_info: "每当你于回合外失去牌时,你可以进行一次判定,若结果为红色,你回复1点体力。",
			boss_renxing: "任性",
			boss_renxing_info: "锁定技,你的回合外,一名角色受到1点伤害后或回复1点体力时,你摸一张牌。",
			boss_nbaonu: "暴怒",
			boss_nbaonu_info:
				"锁定技,摸牌阶段,你改为摸X张牌(X为4到你体力值间的随机数);若你的体力值小于5,则你使用【杀】造成的伤害+1且无次数限制。",
			boss_shouyi: "兽裔",
			boss_shouyi_info: "锁定技,你使用牌无距离限制。",

			boss_nianrui: "年瑞",
			boss_nianrui_info: "锁定技,摸牌阶段,你额外摸两张牌。",
			boss_qixiang: "祺祥",
			boss_qixiang1: "祺祥",
			boss_qixiang2: "祺祥",
			boss_qixiang_info:
				"乐不思蜀判定时,你的方块判定牌视为红桃;兵粮寸断判定时,你的黑桃判定牌视为草花。",

			qiwu: "栖梧",
			qiwu_info: "锁定技。每当你使用一张梅花牌,你回复1点体力。",
			jizhen: "激阵",
			jizhen_info: "结束阶段,你可以令所至多两名已受伤角色摸一张牌。",

			boss_yushou: "驭兽",
			boss_yushou_info: "出牌阶段开始时,你可以对所有敌方角色使用一张【南蛮入侵】。",
			boss_moyany: "魔炎",
			boss_moyany_info:
				"每当你于回合外失去牌时,你可以进行一次判定,若结果为红色,你对一名其他角色造成2点火焰伤害。",
			boss_modao: "魔道",
			boss_modao_info: "锁定技,准备阶段,你摸两张牌。",
			boss_mojian: "魔箭",
			boss_mojian_info: "出牌阶段开始时,你可以对所有敌方角色使用一张【万箭齐发】。",
			boss_danshu: "丹术",
			boss_danshu_info: "每当你于回合外失去牌时,你可以进行一次判定,若结果为红色,你回复1点体力。",

			boss_zuijiu: "醉酒",
			boss_zuijiu_info: "锁定技,你因【杀】造成伤害时,此伤害+1。",
			boss_taiping: "太平",
			boss_taiping_info: "锁定技,摸牌阶段摸牌时,你的摸牌数量+2。",
			boss_suoming: "索命",
			boss_suoming_info: "结束阶段,将任意名未被横置的其他角色的武将牌横置。",
			boss_xixing: "吸星",
			boss_xixing_info: "准备阶段,对任意一名横置的其他角色造成1点雷电伤害,然后回复1点体力。",

			boss_baolian: "暴敛",
			boss_baolian_info: "锁定技,结束阶段,你摸两张牌。",
			boss_manjia: "蛮甲",
			boss_manjia_info: "锁定技,若你的装备区内没有防具牌,则你视为装备了【藤甲】。",
			boss_xiaoshou: "枭首",
			boss_xiaoshou_info: "结束阶段,对体力不小于你的一名其他角色造成3点伤害。",
			boss_guiji: "诡计",
			boss_guiji_info: "锁定技,准备阶段结束时,若你的判定区内有牌,你随机弃置其中一张牌。",
			boss_lianyu: "炼狱",
			boss_lianyu_info: "结束阶段,你可以对所有敌方角色造成1点火焰伤害。",

			boss_guihuo: "鬼火",
			boss_guihuo_info: "结束阶段,你可以对一名其他角色造成1点火焰伤害。",
			boss_minbao: "冥爆",
			boss_minbao_info: "锁定技,当你死亡时,对场上所有其他角色造成1点火焰伤害。",
			boss_luolei: "落雷",
			boss_luolei_info: "准备阶段,你可以对一名其他角色造成1点雷电伤害。",
			boss_beiming: "悲鸣",
			boss_beiming_info: "锁定技,当你死亡时,你令杀死你的角色弃置所有手牌。",
			boss_guimei: "鬼魅",
			boss_guimei_info: "锁定技,你不能成为延时类锦囊的目标。",
			boss_didong: "地动",
			boss_didong_info: "结束阶段,你可以选择一名敌方角色将其武将牌翻面。",
			boss_shanbeng: "山崩",
			boss_shanbeng_info: "锁定技,当你死亡时,你令所有其他角色弃置其装备区内的所有牌。",

			boss_chiyan_intro1: "&nbsp;第一关",
			boss_chiyan_intro1_info: "挑战朱雀",
			boss_chiyan_intro2: "&nbsp;第二关",
			boss_chiyan_intro2_info: "挑战火神祝融、焰灵",
			boss_chiyan_intro3: "&nbsp;第三关",
			boss_chiyan_intro3_info: "挑战炎帝、火神祝融、焰灵",
			boss_chiyan_intro3_append:
				"每通过一关,游戏轮数清零,阵亡角色复活,所有角色重置武将和区域内的牌,并获得4-X张起始手牌,X为阵亡角色数。",

			boss_qingmu_intro1: "&nbsp;第一关",
			boss_qingmu_intro1_info: "挑战青龙",
			boss_qingmu_intro2: "&nbsp;第二关",
			boss_qingmu_intro2_info: "挑战木神勾芒、树精",
			boss_qingmu_intro3: "&nbsp;第三关",
			boss_qingmu_intro3_info: "挑战太昊、木神勾芒、树精",
			boss_qingmu_intro3_append:
				"每通过一关,游戏轮数清零,阵亡角色复活,所有角色重置武将和区域内的牌,并获得4-X张起始手牌,X为阵亡角色数。",

			boss_xuanlin_intro1: "&nbsp;第一关",
			boss_xuanlin_intro1_info: "挑战玄武",
			boss_xuanlin_intro2: "&nbsp;第二关",
			boss_xuanlin_intro2_info: "挑战水神玄冥、水神共工",
			boss_xuanlin_intro3: "&nbsp;第三关",
			boss_xuanlin_intro3_info: "挑战颛顼、水神玄冥、水神共工",
			boss_xuanlin_intro3_append:
				"每通过一关,游戏轮数清零,阵亡角色复活,所有角色重置武将和区域内的牌,并获得4-X张起始手牌,X为阵亡角色数。",

			boss_baimang_intro1: "&nbsp;第一关",
			boss_baimang_intro1_info: "挑战白虎",
			boss_baimang_intro2: "&nbsp;第二关",
			boss_baimang_intro2_info: "挑战金神蓐收、明刑柱",
			boss_baimang_intro3: "&nbsp;第三关",
			boss_baimang_intro3_info: "挑战少昊、金神蓐收、明刑柱",
			boss_baimang_intro3_append:
				"每通过一关,游戏轮数清零,阵亡角色复活,所有角色重置武将和区域内的牌,并获得4-X张起始手牌,X为阵亡角色数。",

			boss_bianshen_intro1: "&nbsp;第一关",
			boss_bianshen_intro1_info: "挑战魑、魅、魍、魉中的随机一个",
			boss_bianshen_intro2: "&nbsp;第二关",
			boss_bianshen_intro2_info: "挑战牛头、马面中的随机一个",
			boss_bianshen_intro3: "&nbsp;第三关",
			boss_bianshen_intro3_info: "挑战白无常、黑无常中的随机一个",
			boss_bianshen_intro4: "&nbsp;第四关",
			boss_bianshen_intro4_info: "挑战罗刹、夜叉中的随机一个",
			// boss_bianshen2:'后援',
			// boss_bianshen2_info:'你死亡后,随机召唤牛头、马面中的一个。',
			// boss_bianshen3:'后援',
			// boss_bianshen3_info:'你死亡后,随机召唤白无常、黑无常中的一个。',
			// boss_bianshen4:'后援',
			// boss_bianshen4_info:'你死亡后,随机召唤罗刹、夜叉中的一个。',

			boss_qiangzheng: "强征",
			boss_qiangzheng_info: "锁定技,结束阶段,你获得每个敌方角色的一张手牌。",
			boss_baolin: "暴凌",
			guizhen: "归真",
			guizhen_info:
				"每当你失去最后一张手牌,你可以所有敌人失去全部手牌,没有手牌的角色失去1点体力(不触发技能)。",
			boss_shengshou: "圣手",
			boss_shengshou_info: "每当你使用一张牌,你可以进行一次判定,若为红色,你回复1点体力。",
			wuqin: "五禽戏",
			wuqin_info: "结束阶段,若你没有手牌,可以摸三张牌。",

			boss_konghun: "控心",
			boss_konghun_info:
				"结束阶段,你可以指定一名敌人令其进入混乱状态(不受对方控制,并将队友视为敌人)直到下一回合开始。",
			yuehun: "月魂",
			yuehun_info: "结束阶段,你可以回复1点体力并摸两张牌。",
			fengwu: "风舞",
			fengwu_info:
				"出牌阶段限一次,可令除你外的所有角色依次对与其距离最近的另一名角色使用一张【杀】,无法如此做者失去1点体力。",
			boss_wange: "笙歌",

			huanhua: "幻化",
			huanhua_info:
				"锁定技,游戏开始时,你获得其他角色的所有技能,体力上限变为其他角色之和;其他角色于摸牌阶段摸牌时,你摸等量的牌;其他角色于弃牌阶段弃牌时,你弃置等量的手牌。",

			boss_leiji: "雷击",
			boss_leiji_info:
				"每当你使用或打出一张【闪】,可令任意一名角色进行一次判定,若结果为黑色,其受到1点雷电伤害,然后你摸一张牌。",
			jidian: "亟电",
			jidian_info:
				"每当你造成一次伤害,可以指定距离受伤害角色1以内的一名其他角色进行判定,若结果为黑色,该角色受到1点雷电伤害。",

			tinqin: "听琴",
			boss_guihan: "归汉",
			boss_guihan_info:
				"限定技,濒死阶段,你可以将体力回复至体力上限,摸四张牌,令所有敌人的技能恢复,失去技能〖悲歌〗和〖胡笳〗,并获得技能〖听琴〗、〖蕙质〗。",
			boss_huixin: "蕙质",
			boss_huixin_info:
				"每当你于回合外失去牌,可以进行一次判定,若为黑色,当前回合角色失去1点体力,否则你回复1点体力并摸一张牌。",
			boss_hujia: "胡笳",
			boss_hujia_info:
				"结束阶段,若你已受伤,可以弃置一张牌令一名其他角色的所有技能失效,若其所有技能已失效,改为令其失去1点体力上限。",
			boss_honglian: "红莲",
			boss_honglian_info: "锁定技,结束阶段,你摸两张牌,并对所有敌人造成1点火焰伤害。",
			huoshen: "火神",
			huoshen_info: "锁定技,你防止即将受到的火焰伤害,改为回复1点体力。",
			boss_xianyin: "仙音",
			boss_xianyin_info:
				"每当你于回合外失去牌,你可以进行一次判定,若为红色,你令一名敌人失去1点体力。",

			boss_yuhuo: "浴火",
			boss_yuhuo_info: "觉醒技,在你涅槃后,你获得技能〖神威〗、〖朱羽〗。",
			boss_tianyu: "天狱",
			boss_tianyu_info: "锁定技,结束阶段,你解除横置状态,除你之外的所有角色进入横置状态。",

			boss_jizhi: "集智",
			boss_jizhi_info: "每当你使用一张非转化的非基本牌,你可以摸一张牌并展示之。",
			boss_guiyin: "归隐",
			boss_guiyin_info: "锁定技,体力值比你多的角色无法在回合内对你使用卡牌。",
			boss_gongshen: "工神",
			boss_gongshen_info: "锁定技,除你之外的角色没有装备区;你不能成为其他角色的延时锦囊牌的目标。",

			fanghua: "芳华",
			fanghua_info: "结束阶段,你可以令所有已翻面角色失去1点体力。",
			tashui: "踏水",
			tashui_info: "每当你使用或打出一张黑色牌,你可以令一名其他角色翻面。",

			boss_wuxin: "无心",
			boss_wuxin_info:
				"锁定技,你防止即将受到的伤害,改为失去1点体力;你不能成为其他角色的延时锦囊的目标。",
			shangshix: "伤逝",
			shangshix2: "伤逝",
			shangshix_info:
				"锁定技,你的手牌数至少为4,结束阶段,若你的体力值大于1,你令场上所有角色失去1点体力。",

			boss_baonu: "暴怒",
			boss_baonu_info:
				"锁定技,当你的体力值降至4或更低时,你变身为暴怒战神或神鬼无前,并立即开始你的回合。",
			shenwei: "神威",
			shenwei_info:
				"锁定技,摸牌阶段,你额外摸X张牌,你的手牌上限+X(X为场上其他角色的数目且至多为3)。",
			xiuluo: "修罗",
			xiuluo_info:
				"准备阶段,你可以弃置一张牌,然后弃置你判定区内一张同花色的牌,然后你可以重复此流程。",
			shenqu: "神躯",
			shenqu_info:
				"每名角色的准备阶段,若你的手牌数少于或等于你的体力上限数,你可以摸两张牌;当你受到伤害后,你可以使用一张【桃】。",
			jiwu: "极武",
			jiwu_info:
				"出牌阶段,你可以弃置一张牌,然后获得获得以下一项技能直到回合结束:〖强袭〗、〖铁骑〗、〖旋风〗、〖完杀〗。",

			boss_jingjia: "精甲",
			boss_jingjia_info: "锁定技,游戏开始时,将本局游戏中加入的装备随机置入你的装备区。",
			boss_aozhan: "鏖战",
			boss_aozhan_info:
				"锁定技,若你装备区内有:武器牌,你可以多使用一张【杀】;防具牌,防止你受到的超过1点的伤害;坐骑牌,摸牌阶段多摸一张牌;宝物牌,跳过你的判定阶段。",

			boss_qinguangwang_ab: "秦广王",
			boss_qinguangwang: "秦广王·蒋子文",
			boss_panguan: "判官",
			boss_panguan_info: "	锁定技,你不能成为延时类锦囊的目标。",
			boss_juhun: "拘魂",
			boss_juhun_info: "锁定技,结束阶段,你令随机一名其他角色的武将牌翻面或横置。",
			boss_wangxiang: "望乡",
			boss_wangxiang_info: "锁定技,当你死亡时,你令所有其他角色弃置其装备区内的所有牌。",
			boss_chujiangwang_ab: "楚江王",
			boss_chujiangwang: "楚江王·厉温",
			boss_bingfeng: "冰封",
			boss_bingfeng_info: "锁定技,你死亡时,若杀死你的角色武将牌是正面朝上, 你令其翻面。",
			boss_songdiwang: "宋帝王·余懃",
			boss_heisheng: "黑绳",
			boss_heisheng_info: "锁定技,你死亡时,横置所有场上角色。",
			boss_shengfu: "绳缚",
			boss_shengfu_info: "锁定技,你的回合结束时,随机弃置一张场上其他角色的坐骑牌。",
			boss_wuguanwang_ab: "五官王",
			boss_wuguanwang: "五官王·吕岱",
			boss_zhiwang: "治妄",
			boss_zhiwang_info: "锁定技,当其他角色于摸牌阶段外得到牌时,你随机弃置其一张手牌。",
			boss_zhiwang_planetarian: "注意事项",
			boss_zhiwang_planetarian_info:
				"若触发〖治妄〗的角色因〖治妄〗触发的其他的技能(如〖伤逝〗〖连营〗等)继续得到了牌,则该角色将其武将牌变更为孙策。",
			boss_gongzheng: "公正",
			boss_gongzheng_info: "锁定技,准备阶段,若你判定区有牌,你随机弃置一张你判定区的牌。",
			boss_xuechi: "血池",
			boss_xuechi_info: "锁定技,你的回合结束时,令随机一名其他角色失去2点体力。",
			boss_yanluowang_ab: "阎罗王",
			boss_yanluowang: "阎罗王·包拯",
			boss_tiemian: "铁面",
			boss_tiemian_info: "锁定技,你的防具区没有牌时,视为你装备【仁王盾】。",
			boss_zhadao: "铡刀",
			boss_zhadao_info: "锁定技,你使用【杀】指定目标后,你令目标角色防具无效。",
			boss_zhuxin: "诛心",
			boss_zhuxin_info: "锁定技,你死亡时,你令场上血量最少的一名其他角色受到2点伤害。",
			boss_bianchengwang_ab: "卞城王",
			boss_bianchengwang: "卞城王·毕元宾",
			boss_leizhou: "雷咒",
			boss_leizhou_info: "锁定技,准备阶段,你对随机一名其他角色造成1点雷属性伤害。",
			boss_leifu: "雷缚",
			boss_leifu_info: "锁定技,你的回合结束时,随机横置一名其他角色。",
			boss_leizhu: "雷诛",
			boss_leizhu_info: "锁定技,你死亡时,对所有其他角色造成依次造成1点雷属性伤害。",
			boss_taishanwang_ab: "泰山王",
			boss_taishanwang: "泰山王·董和",
			boss_fudu: "服毒",
			boss_fudu_info: "锁定技,其他角色使用【桃】时,你令随机另一名其他角色失去1点体力。",
			boss_kujiu: "苦酒",
			boss_kujiu_info: "锁定技,其他角色准备阶段,你令其失去1点体力,然后该角色视为使用一张【酒】。",
			boss_renao: "热恼",
			boss_renao_info: "锁定技,你死亡时,你令随机一名其他角色受到3点火属性伤害。",
			boss_dushiwang_ab: "都市王",
			boss_dushiwang: "都市王·黄中庸",
			boss_remen: "热闷",
			boss_remen_info:
				"锁定技,若你的装备区内没有防具牌,则【南蛮入侵】、【万箭齐发】和普通【杀】对你无效。",
			boss_zhifen: "炙焚",
			boss_zhifen_info:
				"锁定技,准备阶段,你随机选择一名其他角色,获得其1张手牌(没有则不获得),并对其造成1点火属性伤害。",
			boss_huoxing: "火刑",
			boss_huoxing_info: "锁定技,你死亡时,你对所有其他角色造成1点火属性伤害。",
			boss_pingdengwang_ab: "平等王",
			boss_pingdengwang: "平等王·陆游",
			boss_suozu: "锁足",
			boss_suozu_info: "锁定技,准备阶段,你令所有其他角色横置。",
			boss_abi: "阿鼻",
			boss_abi_info:
				"锁定技,锁定技,你受到伤害时,你对伤害来源造成伤害的角色造成1点随机属性伤害(雷或火随机)。",
			boss_pingdeng: "平等",
			boss_pingdeng_info:
				"锁定技,你死亡时,你对体力最多的一名其他角色造成2点随机属性伤害(属性随机),然后再对一名体力最多的其他角色造成1点随机属性伤害(属性随机)。",
			boss_zhuanlunwang_ab: "转轮王",
			boss_zhuanlunwang: "转轮王·薛礼",
			boss_lunhui: "轮回",
			boss_lunhui_info:
				"锁定技,准备阶段,若你的体力小于等于2,则你与场上除你以外体力最高且大于2的角色交换体力值。",
			boss_wangsheng: "往生",
			boss_wangsheng_info: "锁定技,你的出牌阶段开始时,视为你随机使用一张【南蛮入侵】或【万箭齐发】。",
			boss_zlfanshi: "反噬",
			boss_zlfanshi_info:
				"锁定技,每个回合你受到第一次伤害后,若再次受到伤害,则对随机一名其他角色造成1点伤害。",
			boss_shikieiki_ab: "四季映姫",
			boss_shikieiki: "四季映姬·夜魔仙那度",
			boss_yingzhong: "映冢",
			boss_yingzhong_info: "锁定技。你登场后的第一个回合开始时,你随机获得两个“阴间武将”的全部技能。",
			boss_yingzhong_append:
				'<span style="font-family:yuanli">四季映姬到阴曹地府<br>——阴(映)到家了!</span>',
			//孟婆:
			boss_mengpo: "孟婆",
			boss_shiyou: "拾忧",
			boss_shiyou_info:
				"其他角色于弃牌阶段弃置的牌进入弃牌堆前,你可以选择其中任意张花色各不相同的牌获得之。",
			boss_wanghun: "忘魂",
			boss_wanghun_info:
				"锁定技,你死亡时,令随机两名敌方角色各随机失去一个技能(主公技除外),并在牌堆中加入2张回魂。(回魂只能在挑战模式出现)",
			boss_wangshi: "往事",
			boss_wangshi_info:
				"锁定技,你存活时,敌方角色的回合开始时,令其于本回合不能使用或打出随机一种类型的牌(基本、锦囊、装备)。",
			boss_wangshi2: "往事",
			boss_wangshi2_info: "",
			//地藏王:
			boss_dizangwang: "地藏王",
			boss_bufo: "不佛",
			boss_bufo_info:
				"锁定技,你的回合开始时,你对所有距离为1的其他角色造成1点火焰伤害;你受到大于等于2的伤害时,令此伤害-1。",
			boss_wuliang: "无量",
			boss_wuliang_info:
				"锁定技,你登场时额外摸三张牌;结束阶段开始时,你摸两张牌;你的回合开始时,若你当前体力小于3,则回复至3。",
			boss_dayuan: "大愿",
			boss_dayuan_info: " 当一名角色判定牌最终生效前,你可以指定该判定牌的点数和花色。",
			boss_diting: "谛听",
			boss_diting_info:
				"锁定技,你的坐骑区被废除,你与别人计算距离时-1,别人与你计算距离时+1;你的坐骑牌均用于重铸。",
			/*
			//等阶
			"boss_sdyl_playerlevel1":"一阶",
			"boss_sdyl_playerlevel1_info":"",
			"boss_sdyl_playerlevel2":"二阶",
			"boss_sdyl_playerlevel2_info":"开局随机使用一张装备牌,起始手牌+1。",
			"boss_sdyl_playerlevel3":"三阶",
			"boss_sdyl_playerlevel3_info":"出杀次数+1,体力上限+1。",
			"boss_sdyl_playerlevel4":"四阶",
			"boss_sdyl_playerlevel4_info":"摸牌阶段多摸一张牌,起始手牌+1。",
			"boss_sdyl_playerlevel5":"重生",
			"boss_sdyl_playerlevel5_info":"限定技,当你处于濒死状态时,你可以弃置所有判定区牌,然后复原你的武将牌,将手牌补充至手牌体力上限(至多为5),将体力回复至体力上限。",

			"boss_sdyl_bosslevel1":"一阶",
			"boss_sdyl_bosslevel1_info":"",
			"boss_sdyl_bosslevel2":"二阶",
			"boss_sdyl_bosslevel2_info":"登场时随机使用一张装备牌。",
			"boss_sdyl_bosslevel3":"三阶",
			"boss_sdyl_bosslevel3_info":"出杀次数+1,回合开始获得一张【杀】,体力上限+1,起始手牌+1。",
			"boss_sdyl_bosslevel4":"四阶",
			"boss_sdyl_bosslevel4_info":"摸牌阶段多摸一张牌,手牌上限+1。",
			"boss_sdyl_bosslevel5":"五阶",
			"boss_sdyl_bosslevel5_info":"登场时视为使用一张【南蛮入侵】且此【南蛮入侵】伤害+1。体力上限+1,起始手牌+1。",
			*/
			boss_sunce: "那个男人",
			boss_hunzi: "魂姿",
			boss_hunzi_info:
				"觉醒技,准备阶段,若你的体力值为1,你减1点体力上限,失去技能〖魂佑〗并获得技能〖英姿〗和〖英魂〗。",
			boss_jiang: "激昂",
			boss_jiang_info:
				"①锁定技,〖激昂〗不会无效。<br>②每当你使用或打出红色牌时,你可以摸一张牌。若你是因响应其他角色使用或打出的牌,则你获得对方使用或打出的牌。<br>③当有其他角色使用或打出红色牌指定你为目标或响应你后,你可以摸一张牌并获得这些牌。",
			boss_hunyou: "魂佑",
			boss_hunyou_info: "锁定技,你的体力值变化和体力上限变化无效。",
			boss_taoni: "讨逆",
			boss_taoni_info:
				"锁定技,游戏开始时,每名角色回合开始时或你死亡时,你检查存活角色的合法性。若有角色存在非法行为,则你终止本局游戏。",

			boss_xhuanren: "关卡说明",
			boss_xhuanren_info: "",
			boss_xhuanren_info_boss:
				"第一关:挑战秦广王<br>第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个<br>第三关:挑战卞城王,泰山王,都市王,平等王中的一个<br>第四关:挑战转轮王",

			boss_newhuanren: "关卡说明",
			boss_newhuanren_info: "",
			boss_newhuanren_info_boss:
				"第一关:挑战秦广王<br>第二关:挑战楚江王,宋帝王,五官王,阎罗王中的一个<br>第三关:挑战卞城王,泰山王,都市王,平等王中的一个<br>第四关:挑战转轮王<br>注:孟婆将在每局前三个阶段随机一个阶段登场<br>地藏王登场规则为,50回合内通过第三关,并且在前三关中成功击杀孟婆。<li>选陆逊左慈张春华于吉蒋费孔融自动变孙笨",
			lingsheji: "灵蛇髻",
			lingsheji2: "灵蛇髻",
			shanrangzhaoshu: "禅让诏书",
			xingtianpojunfu: "刑天破军斧",
			noda_axe: "刑天破军斧",
			noda_axe2: "刑天破军斧",
			jinwuluorigong: "金乌落日弓",
			iwasawa_crowbow: "金乌落日弓",
			lingsheji_info:
				"出牌阶段结束时,你可选择:1.摸一张牌。2.将一张武将牌置于武将牌上,并于回合结束后获得此牌。",
			shanrangzhaoshu_info:
				"其他角色于回合外得到牌后,若是其本回合内第一次得到牌,则你可以选择一项:交给其一张牌,或令其交给你一张牌。",
			xingtianpojunfu_info:
				"当你于出牌阶段内使用牌指定唯一目标后,你可弃置两张牌。若如此做,其本回合内不能使用或打出牌且其防具技能无效。",
			jinwuluorigong_info:
				"当你于出牌阶段内一次性失去了两张以上的手牌后,你可以弃置一名其他角色等量的牌。",
			TheDayIBecomeAGod: "神杀",
			thedayibecomeagod: "传承",
			thedayibecomeagod_info:
				"选择一名其他己方角色。若其势力非神,则改为神势力;若其势力为神,则将武将牌翻至正面,回复体力至体力上限,并将手牌摸至5。",
			gubuzifeng: "故步自封",
			gubuzifeng_disable: "故步自封",
			gubuzifeng_info: "出牌阶段,对一名其他角色使用。其的一个随机技能失效直到其下个回合结束。",
			goujiangdesidai: "篝酱的丝带",
			goujiangdesidai_info:
				"锁定技,若你未拥有技能〖纵丝〗,则你视为拥有技能〖纵丝〗;若你拥有技能〖纵丝〗,则你将此技能改为「出牌阶段限两次」。",
			goujiangdesidai_skill: "纵丝",
			niaobaidaowenha: "鸟白岛文蛤",
			niaobaidaowenha_skill: "鸟白岛文蛤",
			niaobaidaowenha_info: "当你减少1点体力上限后,你可令一名其他角色增加1点体力上限并回复1点体力。",
			niaobaidaowenha_skill_info:
				"当你减少1点体力上限后,你可令一名其他角色增加1点体力上限并回复1点体力。",
			shenzhixiunvfu: "神之修女服",
			shenzhixiunvfu_info: "没什么实际作用的衣服,仅仅是显得像个神而已。",

			mode_boss_card_config: "挑战卡牌",
			mode_boss_character_config: "挑战武将",
		},
		get: {
			rawAttitude: function (from, to) {
				var num = to.identity == "zhong" ? 5 : 6;
				return from.side === to.side ? num : -num;
			},
		},
	};
});