从牌堆中将一张牌作为“侠义”置于武将牌上${player!=trigger.player&&player.countCards('h')?',然后将任意张手牌交给其':''}
`,[list,'vcard']];
- var result=yield player.chooseButton(dialog).set('ai',function(button){
- var trigger=_status.event.getTrigger();
- var player=_status.event.player,name=button.link[2];
- if(!get.cardPile2(card=>card.name==name)) return 0;
- var value=get.value({name:name});
- if(['tao','jiu','caochuan','wuxie'].includes(name)&&get.event().getRand()>0.4) return value*2;
+ var dialog = [`###${get.prompt('twshenyi', trigger.player)}###从牌堆中将一张牌作为“侠义”置于武将牌上${player != trigger.player && player.countCards('h') ? ',然后将任意张手牌交给其' : ''}
`, [list, 'vcard']];
+ var result = yield player.chooseButton(dialog).set('ai', function (button) {
+ var trigger = _status.event.getTrigger();
+ var player = _status.event.player, name = button.link[2];
+ if (!get.cardPile2(card => card.name == name)) return 0;
+ var value = get.value({ name: name });
+ if (['tao', 'jiu', 'caochuan', 'wuxie'].includes(name) && get.event().getRand() > 0.4) return value * 2;
return value;
});
- if(result.bool){
- var name=result.links[0][2],nature=result.links[0][3];
- var cardx={name:name,nature:nature};
- player.logSkill('twshenyi',trigger.player);
+ if (result.bool) {
+ var name = result.links[0][2], nature = result.links[0][3];
+ var cardx = { name: name, nature: nature };
+ player.logSkill('twshenyi', trigger.player);
player.popup(cardx);
- player.markAuto('twshenyi',[name]);
- game.log(player,'声明了',`#y${get.translation(cardx)}`);
- var card=get.cardPile2(card=>get.name(card,false)==name&&get.nature(card,false)==nature);
- if(card) player.addToExpansion([card],'gain2').gaintag.add('twshenyi');
- else{
- var card=get.cardPile2(card=>get.type2(card)==get.type2(name));
- if(card) player.addToExpansion([card],'gain2').gaintag.add('twshenyi');
+ player.markAuto('twshenyi', [name]);
+ game.log(player, '声明了', `#y${get.translation(cardx)}`);
+ var card = get.cardPile2(card => get.name(card, false) == name && get.nature(card, false) == nature);
+ if (card) player.addToExpansion([card], 'gain2').gaintag.add('twshenyi');
+ else {
+ var card = get.cardPile2(card => get.type2(card) == get.type2(name));
+ if (card) player.addToExpansion([card], 'gain2').gaintag.add('twshenyi');
else player.chat('无牌可得?!');
}
- if(trigger.player!=player&&player.countCards('h')){
+ if (trigger.player != player && player.countCards('h')) {
game.delayex();
- var skill='twshenyi_'+player.playerid;
- game.broadcastAll(lib.skill.twshenyi.createGainTag,skill,player.name);
- game.addVideo('skill',player,['twshenyi',[skill,player.name]]);
- var result2=yield player.chooseCard('伸义:是否将任意张牌交给'+get.translation(trigger.player)+'?',[1,player.countCards('h')]).set('ai',card=>{
- if(!_status.event.goon) return 0;
- return 7-get.value(card);
- }).set('goon',get.attitude(player,trigger.player)>0);
- if(result2.bool){
- player.give(result2.cards,trigger.player).gaintag.add(skill);
+ var skill = 'twshenyi_' + player.playerid;
+ game.broadcastAll(lib.skill.twshenyi.createGainTag, skill, player.name);
+ game.addVideo('skill', player, ['twshenyi', [skill, player.name]]);
+ var result2 = yield player.chooseCard('伸义:是否将任意张牌交给' + get.translation(trigger.player) + '?', [1, player.countCards('h')]).set('ai', card => {
+ if (!_status.event.goon) return 0;
+ return 7 - get.value(card);
+ }).set('goon', get.attitude(player, trigger.player) > 0);
+ if (result2.bool) {
+ player.give(result2.cards, trigger.player).gaintag.add(skill);
player.addSkill('twshenyi_draw');
}
}
}
else player.storage.counttrigger.twshenyi--;
},
- video:(player,info)=>lib.skill.twshenyi.createGainTag(info[0],info[1]),
- createGainTag:function(skill,name){
- if(!lib.skill[skill]){
- lib.skill[skill]={charlotte:true};
- lib.translate[skill]='义·'+get.translation(name);
+ video: (player, info) => lib.skill.twshenyi.createGainTag(info[0], info[1]),
+ createGainTag: function (skill, name) {
+ if (!lib.skill[skill]) {
+ lib.skill[skill] = { charlotte: true };
+ lib.translate[skill] = '义·' + get.translation(name);
}
- if(!_status.postReconnect.twshenyi){
- _status.postReconnect.twshenyi=[
- lib.skill.twshenyi.createGainTag,[],[]
+ if (!_status.postReconnect.twshenyi) {
+ _status.postReconnect.twshenyi = [
+ lib.skill.twshenyi.createGainTag, [], []
];
}
_status.postReconnect.twshenyi[1].add(skill);
_status.postReconnect.twshenyi[2].add(name);
},
- marktext:'义',
- intro:{
- name:'侠义',
- content:'expansion',
- markcount:'expansion',
+ marktext: '义',
+ intro: {
+ name: '侠义',
+ content: 'expansion',
+ markcount: 'expansion',
},
- onremove:function(player,skill){
+ onremove: function (player, skill) {
delete player.storage[skill];
//var cards=player.getExpansions(skill);
//if(cards.length) player.loseToDiscardpile(cards);
},
- subSkill:{
- draw:{
- charlotte:true,
- audio:'twshenyi',
- trigger:{
- global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ subSkill: {
+ draw: {
+ charlotte: true,
+ audio: 'twshenyi',
+ trigger: {
+ global: ['loseAfter', 'equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
},
- filter:function(event,player){
- var skill='twshenyi_'+player.playerid;
- return game.hasPlayer(target=>{
- var evt=event.getl(target);
- if(!evt||!evt.hs||!evt.hs.length) return false;
- for(let i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes(skill)) return true;
+ filter: function (event, player) {
+ var skill = 'twshenyi_' + player.playerid;
+ return game.hasPlayer(target => {
+ var evt = event.getl(target);
+ if (!evt || !evt.hs || !evt.hs.length) return false;
+ for (let i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes(skill)) return true;
}
return false;
});
},
- forced:true,
- direct:true,
- content:function(){
- var skill='twshenyi_'+player.playerid;
- var num=0;
- var targets=game.filterPlayer(target=>{
- var evt=trigger.getl(target);
- var numx=0;
- if(!evt||!evt.hs||!evt.hs.length) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes(skill)) numx++;
+ forced: true,
+ direct: true,
+ content: function () {
+ var skill = 'twshenyi_' + player.playerid;
+ var num = 0;
+ var targets = game.filterPlayer(target => {
+ var evt = trigger.getl(target);
+ var numx = 0;
+ if (!evt || !evt.hs || !evt.hs.length) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes(skill)) numx++;
}
- if(numx>0) return num+=numx;
+ if (numx > 0) return num += numx;
return false;
});
- if(num>0){
- player.logSkill('twshenyi_draw',targets);
+ if (num > 0) {
+ player.logSkill('twshenyi_draw', targets);
player.draw(num);
}
},
},
},
},
- twxinghan:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- return player.getExpansions('twshenyi').length>game.countPlayer();
+ twxinghan: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ return player.getExpansions('twshenyi').length > game.countPlayer();
},
- check:function(event,player){
- if(player.hp>=3||(player.countCards('h')>=4&&player.getExpansions('twshenyi').every(card=>!player.hasValueTarget(card)||!get.tag(card,'damage')||!lib.skill.xunshi.isXunshi(card)))) return false;
- return player.getExpansions('twshenyi').some(card=>player.hasValueTarget(card));
+ check: function (event, player) {
+ if (player.hp >= 3 || (player.countCards('h') >= 4 && player.getExpansions('twshenyi').every(card => !player.hasValueTarget(card) || !get.tag(card, 'damage') || !lib.skill.xunshi.isXunshi(card)))) return false;
+ return player.getExpansions('twshenyi').some(card => player.hasValueTarget(card));
},
- direct:true,
- content:function*(event,map){
- var player=map.player;
- var result=yield player.chooseBool().set('createDialog',[
+ direct: true,
+ content: function* (event, map) {
+ var player = map.player;
+ var result = yield player.chooseBool().set('createDialog', [
get.prompt('twxinghan'),
`${lose_list.map(list=>{
+ const lose_list = trigger.lose_list.slice().sort((a, b) => lib.sort.seat(a[0], b[0]));
+ dialog.push(`
${lose_list.map(list => {
return get.translation(list[0]);
}).join(' / ')}
`);
- const cards=lose_list.map(list=>list[1]).flat();
+ const cards = lose_list.map(list => list[1]).flat();
dialog.push(cards);
- const result=await player.chooseButton(dialog,2)
- .set('filterButton',button=>{
- const type=typeof button.link;
- if(ui.selected.buttons.length&&type===typeof ui.selected.buttons[0].link) return false;
+ const result = await player.chooseButton(dialog, 2)
+ .set('filterButton', button => {
+ const type = typeof button.link;
+ if (ui.selected.buttons.length && type === typeof ui.selected.buttons[0].link) return false;
return true;
})
.forResult()
- if(!result.bool) return;
- const {links}=result;
- if(typeof links[0]!=='string') links.reverse();
- let [fn,card]=links;
- const selectedPlayer=lose_list[cards.indexOf(card)][0];
- player.logSkill('twniju',selectedPlayer);
+ if (!result.bool) return;
+ const { links } = result;
+ if (typeof links[0] !== 'string') links.reverse();
+ let [fn, card] = links;
+ const selectedPlayer = lose_list[cards.indexOf(card)][0];
+ player.logSkill('twniju', selectedPlayer);
selectedPlayer.addTempSkill('twniju_change');
- if(!selectedPlayer.storage.twniju_change) selectedPlayer.storage.twniju_change=[];
- selectedPlayer.storage.twniju_change.push([fn,num,card]);
+ if (!selectedPlayer.storage.twniju_change) selectedPlayer.storage.twniju_change = [];
+ selectedPlayer.storage.twniju_change.push([fn, num, card]);
player.when('chooseToCompareAfter')
- .filter(evt=>evt===trigger)
+ .filter(evt => evt === trigger)
.vars({
- toDraw:num,
+ toDraw: num,
})
- .then(()=>{
- const num1=trigger.result.num1,num2=trigger.result.num2;
- let bool=false;
- if(typeof num1==='number'&&typeof num2==='number'){
- if(num1===num2){
- bool=true;
+ .then(() => {
+ const num1 = trigger.result.num1, num2 = trigger.result.num2;
+ let bool = false;
+ if (typeof num1 === 'number' && typeof num2 === 'number') {
+ if (num1 === num2) {
+ bool = true;
}
}
- else{
- const num1List=num1.toUniqued();
- const totalList=num1List.concat(num2).toUniqued();
- if(totalList.length
{
- const cards=Array.isArray(list[1])?list[1]:[list[1]];
- return list[0]===player&&storage.some(s=>cards.includes(s[2]));
+ subSkill: {
+ change: {
+ trigger: { global: 'compare' },
+ filter(event, player) {
+ const storage = player.getStorage('twniju_change');
+ if (!storage.length) return false;
+ if ((player !== event.player || event.iwhile) && player !== event.target) return false;
+ return event.lose_list.some(list => {
+ const cards = Array.isArray(list[1]) ? list[1] : [list[1]];
+ return list[0] === player && storage.some(s => cards.includes(s[2]));
});
},
- charlotte:true,
- forced:true,
- silent:true,
- async content(event,trigger,player){
- const [fn,num]=player.getStorage('twniju_change').find(s=>{
- return trigger.lose_list.some(list=>{
- const cards=Array.isArray(list[1])?list[1]:[list[1]];
- return list[0]===player&&cards.includes(s[2]);
+ charlotte: true,
+ forced: true,
+ silent: true,
+ async content(event, trigger, player) {
+ const [fn, num] = player.getStorage('twniju_change').find(s => {
+ return trigger.lose_list.some(list => {
+ const cards = Array.isArray(list[1]) ? list[1] : [list[1]];
+ return list[0] === player && cards.includes(s[2]);
});
});
- const numId=player===trigger.player?'num1':'num2';
- trigger[fn](numId,num);
- if(trigger[numId]>13) trigger[numId]=13;
- else if(trigger[numId]<1) trigger[numId]=1;
- game.log(player,'的拼点牌点数',fn==='addNumber'?'+':'-',num);
+ const numId = player === trigger.player ? 'num1' : 'num2';
+ trigger[fn](numId, num);
+ if (trigger[numId] > 13) trigger[numId] = 13;
+ else if (trigger[numId] < 1) trigger[numId] = 1;
+ game.log(player, '的拼点牌点数', fn === 'addNumber' ? '+' : '-', num);
}
},
},
@@ -2136,7 +2136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if (get.tag(card, 'damage') > 0 && target.storage.twchongwangx.includes(player)) return false;
},
},
- locked:false,
+ locked: false,
unique: true,
onremove: true,
global: 'twchongwang_global',
@@ -2198,356 +2198,356 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//公孙范
- twhuiyuan:{
- audio:2,
- trigger:{player:'useCardAfter'},
- filter:function(event,player){
- var evt=event.getParent('phaseUse');
- if(!evt||evt.player!=player) return false;
- var type=get.type2(event.card);
- return !player.hasHistory('gain',evtx=>{
- if(evtx.getParent('phaseUse')!=evt) return false;
- return evtx.cards.some(card=>get.type2(card)==type);
+ twhuiyuan: {
+ audio: 2,
+ trigger: { player: 'useCardAfter' },
+ filter: function (event, player) {
+ var evt = event.getParent('phaseUse');
+ if (!evt || evt.player != player) return false;
+ var type = get.type2(event.card);
+ return !player.hasHistory('gain', evtx => {
+ if (evtx.getParent('phaseUse') != evt) return false;
+ return evtx.cards.some(card => get.type2(card) == type);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var prompt2='展示一名角色的一张手牌。若展示牌为'+get.translation(get.type2(trigger.card))+'牌,则你获得之,否则其弃置之并摸一张牌。然后若其在你的攻击范围内,且你不在其攻击范围内,你对其造成1点伤害';
- player.chooseTarget(get.prompt('twhuiyuan'),prompt2,(card,player,target)=>{
+ var prompt2 = '展示一名角色的一张手牌。若展示牌为' + get.translation(get.type2(trigger.card)) + '牌,则你获得之,否则其弃置之并摸一张牌。然后若其在你的攻击范围内,且你不在其攻击范围内,你对其造成1点伤害';
+ player.chooseTarget(get.prompt('twhuiyuan'), prompt2, (card, player, target) => {
return target.countCards('h');
- }).set('ai',target=>{
- var player=_status.event.player;
- var att=get.attitude(player,target);
- return -att+(player.inRange(target)&&!target.inRange(player)?get.damageEffect(target,player,player)/3:0);
+ }).set('ai', target => {
+ var player = _status.event.player;
+ var att = get.attitude(player, target);
+ return -att + (player.inRange(target) && !target.inRange(player) ? get.damageEffect(target, player, player) / 3 : 0);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twhuiyuan',target);
- player.choosePlayerCard(target,'h',true,'回援:展示'+get.translation(target)+'一张手牌');
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twhuiyuan', target);
+ player.choosePlayerCard(target, 'h', true, '回援:展示' + get.translation(target) + '一张手牌');
}
else event.finish();
'step 2'
- if(result.bool){
- var card=result.cards[0];
- target.showCards([card],get.translation(target)+'【回援】展示');
- if(get.type2(card)==get.type2(trigger.card)){
- if(lib.filter.canBeGained(card,target,player)){
- player.gain(card,target,'giveAuto','bySelf');
+ if (result.bool) {
+ var card = result.cards[0];
+ target.showCards([card], get.translation(target) + '【回援】展示');
+ if (get.type2(card) == get.type2(trigger.card)) {
+ if (lib.filter.canBeGained(card, target, player)) {
+ player.gain(card, target, 'giveAuto', 'bySelf');
}
}
- else{
- if(lib.filter.canBeDiscarded(card,target,player)){
- target.discard(card,'notBySelf');
+ else {
+ if (lib.filter.canBeDiscarded(card, target, player)) {
+ target.discard(card, 'notBySelf');
target.draw();
}
}
}
else event.finish();
'step 3'
- if(player.inRange(target)&&!target.inRange(player)){
- game.log(player,'触发了','#y搏击','效果');
+ if (player.inRange(target) && !target.inRange(player)) {
+ game.log(player, '触发了', '#y搏击', '效果');
player.line(target);
target.damage();
}
},
- ai:{
- expose:0.2,
- threaten:3,
+ ai: {
+ expose: 0.2,
+ threaten: 3,
}
},
- twshoushou:{
- audio:2,
- trigger:{
- player:'gainAfter',
- global:'loseAsyncAfter',
+ twshoushou: {
+ audio: 2,
+ trigger: {
+ player: 'gainAfter',
+ global: 'loseAsyncAfter',
},
- filter:function(event,player){
- var cards=event.getg(player);
- if(!cards.length) return false;
- return game.hasPlayer(current=>{
+ filter: function (event, player) {
+ var cards = event.getg(player);
+ if (!cards.length) return false;
+ return game.hasPlayer(current => {
return event.getl(current).cards2.length;
- })&&game.hasPlayer(current=>{
+ }) && game.hasPlayer(current => {
return current.inRange(player);
});
},
- forced:true,
- locked:false,
- group:'twshoushou_damage',
- onremove:function(player){
- if(player.countMark('twshoushou_plus')-player.countMark('twshoushou_minus')==0){
+ forced: true,
+ locked: false,
+ group: 'twshoushou_damage',
+ onremove: function (player) {
+ if (player.countMark('twshoushou_plus') - player.countMark('twshoushou_minus') == 0) {
player.removeSkill('twshoushou_distance');
}
},
- content:function(){
+ content: function () {
player.addSkill('twshoushou_distance');
- player.addMark('twshoushou_plus',1,false);
+ player.addMark('twshoushou_plus', 1, false);
},
- ai:{
- halfneg:true,
+ ai: {
+ halfneg: true,
},
- subSkill:{
- damage:{
- trigger:{
- player:'damageEnd',
- source:'damageSource'
+ subSkill: {
+ damage: {
+ trigger: {
+ player: 'damageEnd',
+ source: 'damageSource'
},
- filter:function(event,player){
- return game.hasPlayer(current=>{
- return current!=player&&!current.inRange(player);
+ filter: function (event, player) {
+ return game.hasPlayer(current => {
+ return current != player && !current.inRange(player);
});
},
- forced:true,
- locked:false,
- content:function(){
+ forced: true,
+ locked: false,
+ content: function () {
player.addSkill('twshoushou_distance');
- player.addMark('twshoushou_minus',1,false);
+ player.addMark('twshoushou_minus', 1, false);
}
},
- distance:{
- mark:true,
- marktext:'绶',
- intro:{
- markcount:function(storage,player){
- return player.countMark('twshoushou_plus')-player.countMark('twshoushou_minus');
+ distance: {
+ mark: true,
+ marktext: '绶',
+ intro: {
+ markcount: function (storage, player) {
+ return player.countMark('twshoushou_plus') - player.countMark('twshoushou_minus');
},
- content:function(storage,player){
- var dis=player.countMark('twshoushou_plus')-player.countMark('twshoushou_minus');
- return '其他角色至你的距离'+(dis>=0?'+':'')+dis;
+ content: function (storage, player) {
+ var dis = player.countMark('twshoushou_plus') - player.countMark('twshoushou_minus');
+ return '其他角色至你的距离' + (dis >= 0 ? '+' : '') + dis;
}
},
- mod:{
- globalTo:function(from,to,distance){
- return distance+to.countMark('twshoushou_plus')-to.countMark('twshoushou_minus');
+ mod: {
+ globalTo: function (from, to, distance) {
+ return distance + to.countMark('twshoushou_plus') - to.countMark('twshoushou_minus');
}
}
}
}
},
//严纲
- twzhiqu:{
- audio:2,
- trigger:{player:'phaseJieshuBegin'},
- direct:true,
- content:function(){
+ twzhiqu: {
+ audio: 2,
+ trigger: { player: 'phaseJieshuBegin' },
+ direct: true,
+ content: function () {
'step 0'
- var count=get.cnNumber(game.countPlayer(current=>{
- return get.distance(player,current)<=1;
+ var count = get.cnNumber(game.countPlayer(current => {
+ return get.distance(player, current) <= 1;
}));
- player.chooseTarget(get.prompt('twzhiqu'),'选择一名其他角色并视为使用牌堆顶'+count+'张牌中的【杀】。若你与其均在对方的攻击范围内,你改为依次对其使用牌堆顶'+count+'张牌中的【杀】或锦囊牌。',lib.filter.notMe).set('ai',target=>{
- var player=_status.event.player;
- return get.effect(target,{name:'sha'},player,player)*(get.distance(player,target)==1?2:1);
+ player.chooseTarget(get.prompt('twzhiqu'), '选择一名其他角色并视为使用牌堆顶' + count + '张牌中的【杀】。若你与其均在对方的攻击范围内,你改为依次对其使用牌堆顶' + count + '张牌中的【杀】或锦囊牌。', lib.filter.notMe).set('ai', target => {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'sha' }, player, player) * (get.distance(player, target) == 1 ? 2 : 1);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twzhiqu',target);
- event.fight=player.inRange(target)&&target.inRange(player);
- if(event.fight) game.log(player,'触发了','#y搏击','效果');
- event.cards=game.cardsGotoOrdering(get.cards(game.countPlayer(current=>{
- return get.distance(player,current)<=1;
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twzhiqu', target);
+ event.fight = player.inRange(target) && target.inRange(player);
+ if (event.fight) game.log(player, '触发了', '#y搏击', '效果');
+ event.cards = game.cardsGotoOrdering(get.cards(game.countPlayer(current => {
+ return get.distance(player, current) <= 1;
}))).cards.slice();
}
else event.finish();
'step 2'
- if(player.isIn()&&target.isIn()&&cards.length){
- do var card=cards.shift();
- while(get.name(card)!='sha'&&(!event.fight||get.type2(card)!='trick')&&cards.length);
- if(get.name(card)!='sha'&&(!event.fight||get.type2(card)!='trick')) return;
- player.showCards([card],get.translation(player)+'发动了【直取】');
- player.chooseUseTarget(card,true,false,'nodistance').set('filterTarget',function(card,player,target){
- var evt=_status.event;
- if(_status.event.name=='chooseTarget') evt=evt.getParent();
- if(target!=player&&target!=evt.twzhiqu_target) return false;
- return lib.filter.targetEnabledx(card,player,target);
- }).set('twzhiqu_target',target);
+ if (player.isIn() && target.isIn() && cards.length) {
+ do var card = cards.shift();
+ while (get.name(card) != 'sha' && (!event.fight || get.type2(card) != 'trick') && cards.length);
+ if (get.name(card) != 'sha' && (!event.fight || get.type2(card) != 'trick')) return;
+ player.showCards([card], get.translation(player) + '发动了【直取】');
+ player.chooseUseTarget(card, true, false, 'nodistance').set('filterTarget', function (card, player, target) {
+ var evt = _status.event;
+ if (_status.event.name == 'chooseTarget') evt = evt.getParent();
+ if (target != player && target != evt.twzhiqu_target) return false;
+ return lib.filter.targetEnabledx(card, player, target);
+ }).set('twzhiqu_target', target);
event.redo();
}
}
},
- twxianfeng:{
- audio:2,
- trigger:{source:'damageSource'},
- filter:function(event,player){
- if(!player.isPhaseUsing()) return false;
- if(player==event.player) return false;
- if(!event.player.isIn()) return false;
- if(!event.card) return false;
- return event.card.name=='sha'||get.type(event.card)=='trick'&&get.tag(event.card,'damage');
+ twxianfeng: {
+ audio: 2,
+ trigger: { source: 'damageSource' },
+ filter: function (event, player) {
+ if (!player.isPhaseUsing()) return false;
+ if (player == event.player) return false;
+ if (!event.player.isIn()) return false;
+ if (!event.card) return false;
+ return event.card.name == 'sha' || get.type(event.card) == 'trick' && get.tag(event.card, 'damage');
},
- logTarget:'player',
- check:function(event,player){
- let att=get.attitude(player,event.player);
- if(att>0) return true;
- if(!player.hasSkill('twzhiqu')) return false;
- let cnt=game.countPlayer(current=>get.distance(player,current)===2);
- if(cnt>2||cnt===2&&Math.abs(att)<2||cnt&&Math.abs(att)<1) return true;
+ logTarget: 'player',
+ check: function (event, player) {
+ let att = get.attitude(player, event.player);
+ if (att > 0) return true;
+ if (!player.hasSkill('twzhiqu')) return false;
+ let cnt = game.countPlayer(current => get.distance(player, current) === 2);
+ if (cnt > 2 || cnt === 2 && Math.abs(att) < 2 || cnt && Math.abs(att) < 1) return true;
return false;
},
- content:function(){
+ content: function () {
'step 0'
- var target=trigger.player;
- event.target=target;
- target.chooseControl().set('choiceList',[
- '你摸一张牌,然后直到'+get.translation(player)+'下个回合开始时,其至其他角色的距离-1',
- get.translation(player)+'摸一张牌,然后直到其下个回合开始时,你至其的距离-1',
- ]).set('prompt','先锋:请选择一项').set('ai',()=>{
+ var target = trigger.player;
+ event.target = target;
+ target.chooseControl().set('choiceList', [
+ '你摸一张牌,然后直到' + get.translation(player) + '下个回合开始时,其至其他角色的距离-1',
+ get.translation(player) + '摸一张牌,然后直到其下个回合开始时,你至其的距离-1',
+ ]).set('prompt', '先锋:请选择一项').set('ai', () => {
return _status.event.choice;
- }).set('choice',function(){
- var att=get.attitude(target,player);
- if(att===0) return 0;
- if(player.hasSkill('twzhiqu')){
- var cnt=game.countPlayer(current=>get.distance(player,current)===2);
- if(att>0){
- if(cnt||player.needsToDiscard(1)) return 0;
+ }).set('choice', function () {
+ var att = get.attitude(target, player);
+ if (att === 0) return 0;
+ if (player.hasSkill('twzhiqu')) {
+ var cnt = game.countPlayer(current => get.distance(player, current) === 2);
+ if (att > 0) {
+ if (cnt || player.needsToDiscard(1)) return 0;
return 1;
}
- if(!cnt) return 0;
- if(cnt>=2||get.distance(target,player,'attack')===2||get.distance(target,player)===2) return 1;
+ if (!cnt) return 0;
+ if (cnt >= 2 || get.distance(target, player, 'attack') === 2 || get.distance(target, player) === 2) return 1;
return 0;
}
- if(att<0||player.needsToDiscard(1)&&game.hasPlayer(function(current){
- return current!==player&¤t!==target&&!player.inRange(current);
+ if (att < 0 || player.needsToDiscard(1) && game.hasPlayer(function (current) {
+ return current !== player && current !== target && !player.inRange(current);
})) return 0;
- return [0,1].randomGet();
+ return [0, 1].randomGet();
}());
'step 1'
- if(result.index==0){
+ if (result.index == 0) {
target.draw();
- player.addTempSkill('twxianfeng_me',{player:'phaseBegin'});
- player.addMark('twxianfeng_me',1,false);
+ player.addTempSkill('twxianfeng_me', { player: 'phaseBegin' });
+ player.addMark('twxianfeng_me', 1, false);
}
- else{
+ else {
player.draw();
target.addSkill('twxianfeng_others');
- if(!target.storage.twxianfeng_others) target.storage.twxianfeng_others={};
- if(typeof target.storage.twxianfeng_others[player.playerid]!='number') target.storage.twxianfeng_others[player.playerid]=0;
+ if (!target.storage.twxianfeng_others) target.storage.twxianfeng_others = {};
+ if (typeof target.storage.twxianfeng_others[player.playerid] != 'number') target.storage.twxianfeng_others[player.playerid] = 0;
target.storage.twxianfeng_others[player.playerid]++;
}
},
- subSkill:{
- me:{
- charlotte:true,
- mark:true,
- intro:{content:'至其他角色的距离-#'},
- mod:{
- globalFrom:function(from,to,distance){
- return distance-from.countMark('twxianfeng_me');
+ subSkill: {
+ me: {
+ charlotte: true,
+ mark: true,
+ intro: { content: '至其他角色的距离-#' },
+ mod: {
+ globalFrom: function (from, to, distance) {
+ return distance - from.countMark('twxianfeng_me');
}
}
},
- others:{
- trigger:{global:['phaseBegin','die']},
- filter:function(event,player){
- return player.storage.twxianfeng_others&&player.storage.twxianfeng_others[event.player.playerid];
+ others: {
+ trigger: { global: ['phaseBegin', 'die'] },
+ filter: function (event, player) {
+ return player.storage.twxianfeng_others && player.storage.twxianfeng_others[event.player.playerid];
},
- charlotte:true,
- mark:true,
- forced:true,
- intro:{
- markcount:function(storage,player){
- var max=0;
- for(var id in storage){
- if(storage[id]>max) max=storage[id];
+ charlotte: true,
+ mark: true,
+ forced: true,
+ intro: {
+ markcount: function (storage, player) {
+ var max = 0;
+ for (var id in storage) {
+ if (storage[id] > max) max = storage[id];
}
return max;
},
- content:function(storage,player){
- if(!storage) return '';
- var str='';
- var map=(_status.connectMode?lib.playerOL:game.playerMap);
- for(var id in storage){
- str+='至'+get.translation(map[id])+'的距离-'+storage[id]+'、';
+ content: function (storage, player) {
+ if (!storage) return '';
+ var str = '';
+ var map = (_status.connectMode ? lib.playerOL : game.playerMap);
+ for (var id in storage) {
+ str += '至' + get.translation(map[id]) + '的距离-' + storage[id] + '、';
}
- return str.slice(0,-1);
+ return str.slice(0, -1);
},
},
- content:function(){
+ content: function () {
delete player.storage.twxianfeng_others[trigger.player.playerid];
- if(get.is.empty(player.storage.twxianfeng_others)) player.removeSkill('twxianfeng_others');
+ if (get.is.empty(player.storage.twxianfeng_others)) player.removeSkill('twxianfeng_others');
},
- mod:{
- globalFrom:function(from,to,distance){
- if(from.storage.twxianfeng_others&&typeof from.storage.twxianfeng_others[to.playerid]=='number') return distance-from.storage.twxianfeng_others[to.playerid];
+ mod: {
+ globalFrom: function (from, to, distance) {
+ if (from.storage.twxianfeng_others && typeof from.storage.twxianfeng_others[to.playerid] == 'number') return distance - from.storage.twxianfeng_others[to.playerid];
}
}
},
}
},
//夏侯紫萼
- twxuechang:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterTarget:function(card,player,target){
+ twxuechang: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filterTarget: function (card, player, target) {
return player.canCompare(target);
},
- content:function(){
+ content: function () {
'step 0'
player.chooseToCompare(target);
'step 1'
- if(result.bool){
- if(!target.countGainableCards(player,'he')) event.finish();
- else player.gainPlayerCard(target,'he',true);
+ if (result.bool) {
+ if (!target.countGainableCards(player, 'he')) event.finish();
+ else player.gainPlayerCard(target, 'he', true);
}
- else{
+ else {
player.damage(target);
player.addSkill('twxuechang_add');
- if(!player.storage.twxuechang_add) player.storage.twxuechang_add={};
- if(!player.storage.twxuechang_add[target.playerid]) player.storage.twxuechang_add[target.playerid]=0;
+ if (!player.storage.twxuechang_add) player.storage.twxuechang_add = {};
+ if (!player.storage.twxuechang_add[target.playerid]) player.storage.twxuechang_add[target.playerid] = 0;
player.storage.twxuechang_add[target.playerid]++;
player.markSkill('twxuechang_add');
event.finish();
}
'step 2'
- var card=result.cards[0];
- if(get.type(card)=='equip'){
- var card={name:'sha',isCard:true};
- if(player.canUse(card,target,false)) player.useCard(card,target,'noai',false);
+ var card = result.cards[0];
+ if (get.type(card) == 'equip') {
+ var card = { name: 'sha', isCard: true };
+ if (player.canUse(card, target, false)) player.useCard(card, target, 'noai', false);
}
},
- ai:{
- order:6.5,
- result:{
- target:function(player,target){
- var hs=player.getCards('h').sort(function(a,b){
- return get.number(b)-get.number(a);
+ ai: {
+ order: 6.5,
+ result: {
+ target: function (player, target) {
+ var hs = player.getCards('h').sort(function (a, b) {
+ return get.number(b) - get.number(a);
});
- var ts=target.getCards('h').sort(function(a,b){
- return get.number(b)-get.number(a);
+ var ts = target.getCards('h').sort(function (a, b) {
+ return get.number(b) - get.number(a);
});
- if(!hs.length||!ts.length) return 0;
- if(get.number(hs[0])>get.number(ts[0])||get.number(hs[0])-ts.length>=(9+Math.min(2,player.hp/2))) return get.sgnAttitude(player,target)*get.effect(target,{name:'shunshou_copy2'},player,player);
+ if (!hs.length || !ts.length) return 0;
+ if (get.number(hs[0]) > get.number(ts[0]) || get.number(hs[0]) - ts.length >= (9 + Math.min(2, player.hp / 2))) return get.sgnAttitude(player, target) * get.effect(target, { name: 'shunshou_copy2' }, player, player);
return 0;
}
}
},
- subSkill:{
- add:{
- audio:'twxuechang',
- trigger:{source:'damageBegin1'},
- filter:function(event,player){
- return player.storage.twxuechang_add&&player.storage.twxuechang_add[event.player.playerid];
+ subSkill: {
+ add: {
+ audio: 'twxuechang',
+ trigger: { source: 'damageBegin1' },
+ filter: function (event, player) {
+ return player.storage.twxuechang_add && player.storage.twxuechang_add[event.player.playerid];
},
- forced:true,
- charlotte:true,
- content:function(){
- trigger.num+=player.storage.twxuechang_add[trigger.player.playerid];
+ forced: true,
+ charlotte: true,
+ content: function () {
+ trigger.num += player.storage.twxuechang_add[trigger.player.playerid];
delete player.storage.twxuechang_add[trigger.player.playerid];
- if(get.is.empty(player.storage.twxuechang_add)) player.removeSkill('twxuechang_add');
+ if (get.is.empty(player.storage.twxuechang_add)) player.removeSkill('twxuechang_add');
else player.markSkill('twxuechang_add');
},
- marktext:'偿',
- intro:{
- content:function(storage,player){
- if(!storage) return '';
- var str='';
- var map=(_status.connectMode?lib.playerOL:game.playerMap);
- for(var i in storage){
- str+='下次对'+get.translation(map[i])+'造成的伤害+'+storage[i];
+ marktext: '偿',
+ intro: {
+ content: function (storage, player) {
+ if (!storage) return '';
+ var str = '';
+ var map = (_status.connectMode ? lib.playerOL : game.playerMap);
+ for (var i in storage) {
+ str += '下次对' + get.translation(map[i]) + '造成的伤害+' + storage[i];
}
return str;
}
@@ -2555,68 +2555,68 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
- twduoren:{
- audio:2,
- trigger:{source:'dieAfter'},
- check:function(event,player){
- if(player.hp<3&&!player.isDamaged()) return false;
- var skills=event.player.getSkills(null,false,false).filter(skill=>{
- if(player.hasSkill(skill,null,false,false)) return false;
- var info=get.info(skill);
- return info&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte;
+ twduoren: {
+ audio: 2,
+ trigger: { source: 'dieAfter' },
+ check: function (event, player) {
+ if (player.hp < 3 && !player.isDamaged()) return false;
+ var skills = event.player.getSkills(null, false, false).filter(skill => {
+ if (player.hasSkill(skill, null, false, false)) return false;
+ var info = get.info(skill);
+ return info && !info.hiddenSkill && !info.zhuSkill && !info.charlotte;
});
- return skills.length>0;
+ return skills.length > 0;
},
- group:'twduoren_remove',
- prompt2:function(event,player){
- var skills=event.player.getSkills(null,false,false).filter(skill=>{
- if(player.hasSkill(skill,null,false,false)) return false;
- var info=get.info(skill);
- return info&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte;
+ group: 'twduoren_remove',
+ prompt2: function (event, player) {
+ var skills = event.player.getSkills(null, false, false).filter(skill => {
+ if (player.hasSkill(skill, null, false, false)) return false;
+ var info = get.info(skill);
+ return info && !info.hiddenSkill && !info.zhuSkill && !info.charlotte;
});
- var str='';
- for(var i of skills){
- str+='〖'+get.translation(i)+'〗、';
+ var str = '';
+ for (var i of skills) {
+ str += '〖' + get.translation(i) + '〗、';
}
- str=str.slice(0,str.length-1);
- return '减1点体力上限,然后'+(str.length?'获得'+str:'听一句技能配音');
+ str = str.slice(0, str.length - 1);
+ return '减1点体力上限,然后' + (str.length ? '获得' + str : '听一句技能配音');
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
player.loseMaxHp();
'step 1'
- var skills=trigger.player.getSkills(null,false,false).filter(skill=>{
- if(player.hasSkill(skill,null,false,false)) return false;
- var info=get.info(skill);
- return info&&!info.hiddenSkill&&!info.zhuSkill&&!info.charlotte;
+ var skills = trigger.player.getSkills(null, false, false).filter(skill => {
+ if (player.hasSkill(skill, null, false, false)) return false;
+ var info = get.info(skill);
+ return info && !info.hiddenSkill && !info.zhuSkill && !info.charlotte;
});
- if(skills.length){
+ if (skills.length) {
//for(var i of skills) player.addSkillLog(i);
player.addSkills(skills);
- player.markAuto('twduoren',skills);
- game.broadcastAll(function(list){
+ player.markAuto('twduoren', skills);
+ game.broadcastAll(function (list) {
game.expandSkills(list);
- for(var i of list){
- var info=lib.skill[i];
- if(!info) continue;
- if(!info.audioname2) info.audioname2={};
- info.audioname2.xia_xiahouzie='twduoren';
+ for (var i of list) {
+ var info = lib.skill[i];
+ if (!info) continue;
+ if (!info.audioname2) info.audioname2 = {};
+ info.audioname2.xia_xiahouzie = 'twduoren';
}
- },skills);
+ }, skills);
}
},
- subSkill:{
- remove:{
- trigger:{source:'dying'},
- filter:function(event,player){
- return event.player!=player&&player.getStorage('twduoren').some(skill=>{
- return player.hasSkill(skill,null,false,false);
+ subSkill: {
+ remove: {
+ trigger: { source: 'dying' },
+ filter: function (event, player) {
+ return event.player != player && player.getStorage('twduoren').some(skill => {
+ return player.hasSkill(skill, null, false, false);
});
},
- forced:true,
- locked:false,
- content:function(){
+ forced: true,
+ locked: false,
+ content: function () {
player.removeSkills(player.getStorage('twduoren'));
delete player.storage.twduoren;
}
@@ -2624,141 +2624,141 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
//赵娥
- twyanshi:{
- audio:2,
- trigger:{global:'phaseBefore',player:'enterGame'},
- forced:true,
- locked:false,
- direct:true,
- onremove:true,
- intro:{
- content:'players'
+ twyanshi: {
+ audio: 2,
+ trigger: { global: 'phaseBefore', player: 'enterGame' },
+ forced: true,
+ locked: false,
+ direct: true,
+ onremove: true,
+ intro: {
+ content: 'players'
},
- filter:function(event,player){
- return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
+ filter: function (event, player) {
+ return game.hasPlayer(current => current != player) && (event.name != 'phase' || game.phaseNumber == 0);
},
- group:['twyanshi_hurt','twyanshi_damage'],
- content:function(){
+ group: ['twyanshi_hurt', 'twyanshi_damage'],
+ content: function () {
'step 0'
- player.chooseTarget('言誓:选择一名其他角色',lib.filter.notMe,true).set('ai',target=>get.attitude(_status.event.player,target));
+ player.chooseTarget('言誓:选择一名其他角色', lib.filter.notMe, true).set('ai', target => get.attitude(_status.event.player, target));
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twyanshi',target);
- player.markAuto('twyanshi',[target]);
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twyanshi', target);
+ player.markAuto('twyanshi', [target]);
}
},
- mod:{
- targetInRange:function(card,player,target){
- if(target.hasMark('twyanshi_mark')) return true;
+ mod: {
+ targetInRange: function (card, player, target) {
+ if (target.hasMark('twyanshi_mark')) return true;
},
},
- subSkill:{
- hurt:{
- audio:'twyanshi',
- trigger:{
- global:'damageEnd',
+ subSkill: {
+ hurt: {
+ audio: 'twyanshi',
+ trigger: {
+ global: 'damageEnd',
},
- forced:true,
- locked:false,
- filter:function(event,player){
- if(!event.source||!event.source.isIn()) return false;
- return player==event.player&&!player.getStorage('twyanshi').includes(event.source)||player!=event.source&&player.getStorage('twyanshi').includes(event.player);
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ if (!event.source || !event.source.isIn()) return false;
+ return player == event.player && !player.getStorage('twyanshi').includes(event.source) || player != event.source && player.getStorage('twyanshi').includes(event.player);
},
- content:function(){
- trigger.source.addMark('twyanshi_mark',1);
+ content: function () {
+ trigger.source.addMark('twyanshi_mark', 1);
}
},
- damage:{
- audio:'twyanshi',
- trigger:{
- source:['damageBegin1','damageSource'],
+ damage: {
+ audio: 'twyanshi',
+ trigger: {
+ source: ['damageBegin1', 'damageSource'],
},
- forced:true,
- locked:false,
- filter:function(event,player){
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
return event.player.hasMark('twyanshi_mark');
},
- content:function(){
+ content: function () {
'step 0'
- if(event.triggername=='damageBegin1'){
+ if (event.triggername == 'damageBegin1') {
trigger.num++;
}
- else{
+ else {
player.draw(trigger.num);
- trigger.player.removeMark('twyanshi_mark',trigger.player.countMark('twyanshi_mark'));
+ trigger.player.removeMark('twyanshi_mark', trigger.player.countMark('twyanshi_mark'));
}
}
},
- mark:{
- marktext:'誓',
- intro:{
- name:'誓',
- name2:'誓',
- content:'mark'
+ mark: {
+ marktext: '誓',
+ intro: {
+ name: '誓',
+ name2: '誓',
+ content: 'mark'
},
}
}
},
- twrenchou:{
- audio:2,
- trigger:{global:'die'},
- forced:true,
- forceDie:true,
- filter:function(event,player){
- if(!event.source||!event.source.isIn()) return false;
- if(event.player==player){
- return player.getStorage('twyanshi').some(i=>i.isIn()&&i.hp>0);
+ twrenchou: {
+ audio: 2,
+ trigger: { global: 'die' },
+ forced: true,
+ forceDie: true,
+ filter: function (event, player) {
+ if (!event.source || !event.source.isIn()) return false;
+ if (event.player == player) {
+ return player.getStorage('twyanshi').some(i => i.isIn() && i.hp > 0);
}
- if(player.getStorage('twyanshi').includes(event.player)){
- return player.isIn()&&player.hp>0;
+ if (player.getStorage('twyanshi').includes(event.player)) {
+ return player.isIn() && player.hp > 0;
}
return false;
},
- logTarget:'source',
- line:false,
- skillAnimation:true,
- animationColor:'water',
- global:'twrenchou_ai',
- content:function(){
+ logTarget: 'source',
+ line: false,
+ skillAnimation: true,
+ animationColor: 'water',
+ global: 'twrenchou_ai',
+ content: function () {
'step 0'
- var avengers=[];
- if(trigger.player==player){
- avengers=player.getStorage('twyanshi').filter(i=>i.isIn()&&i.hp>0);
+ var avengers = [];
+ if (trigger.player == player) {
+ avengers = player.getStorage('twyanshi').filter(i => i.isIn() && i.hp > 0);
}
- if(player.getStorage('twyanshi').includes(trigger.player)){
- avengers=[player];
+ if (player.getStorage('twyanshi').includes(trigger.player)) {
+ avengers = [player];
}
- event.avengers=avengers;
+ event.avengers = avengers;
'step 1'
- var avenger=event.avengers.shift();
- avenger.line(trigger.source,'fire');
- trigger.source.damage(avenger,avenger.hp);
+ var avenger = event.avengers.shift();
+ avenger.line(trigger.source, 'fire');
+ trigger.source.damage(avenger, avenger.hp);
'step 2'
- if(event.avengers.length&&trigger.source.isIn()) event.goto(1);
+ if (event.avengers.length && trigger.source.isIn()) event.goto(1);
},
- ai:{
- combo:'twyanshi',
+ ai: {
+ combo: 'twyanshi',
},
- subSkill:{
- ai:{
- ai:{
- effect:{
- target:function(card,player,target){
- if(!get.tag(card,'damage')) return;
- if(target.hp>1) return;
- var num=0;
- game.filterPlayer(current=>{
- if(current.getStorage('twyanshi').some(i=>target==i)){
- num+=current.hp;
+ subSkill: {
+ ai: {
+ ai: {
+ effect: {
+ target: function (card, player, target) {
+ if (!get.tag(card, 'damage')) return;
+ if (target.hp > 1) return;
+ var num = 0;
+ game.filterPlayer(current => {
+ if (current.getStorage('twyanshi').some(i => target == i)) {
+ num += current.hp;
}
});
- var targets=target.getStorage('twyanshi').filter(i=>i.isIn());
- for(var targetx of targets){
- num+=targetx.hp;
+ var targets = target.getStorage('twyanshi').filter(i => i.isIn());
+ for (var targetx of targets) {
+ num += targetx.hp;
}
- if(num>=player.hp) return 0;
- if(num>0) return [1,0,0,0.5-1.5*num];
+ if (num >= player.hp) return 0;
+ if (num > 0) return [1, 0, 0, 0.5 - 1.5 * num];
}
}
}
@@ -2766,84 +2766,84 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
//侠典韦
- twliexi:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
+ twliexi: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
return player.countCards('he');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var list=[[],[]];
- for(var current of game.players){
- if(current==player) continue;
- var cards=[];
- var weapon=false;
- for(var card of player.getCards('he')){
- if(!lib.filter.cardDiscardable(card,player)) continue;
- if(get.subtype(card)=='equip1'&&!ui.selected.cards.some(i=>get.subtype(i)=='equip1')){
- if(16-get.value(card)>0){
+ var list = [[], []];
+ for (var current of game.players) {
+ if (current == player) continue;
+ var cards = [];
+ var weapon = false;
+ for (var card of player.getCards('he')) {
+ if (!lib.filter.cardDiscardable(card, player)) continue;
+ if (get.subtype(card) == 'equip1' && !ui.selected.cards.some(i => get.subtype(i) == 'equip1')) {
+ if (16 - get.value(card) > 0) {
cards.push(card);
- weapon=true;
+ weapon = true;
}
}
- if(7-get.value(card)>0) cards.push(card);
+ if (7 - get.value(card) > 0) cards.push(card);
}
- if(cards.length>current.hp){
- var val=0;
- for(var card of cards){
- if(get.subtype(card)!='equip1') val+=get.value(card);
+ if (cards.length > current.hp) {
+ var val = 0;
+ for (var card of cards) {
+ if (get.subtype(card) != 'equip1') val += get.value(card);
}
- if(val<30) list[0].push(current);
+ if (val < 30) list[0].push(current);
}
- if(weapon&&player.hp>2||get.damageEffect(player,current,player)>10) list[1].push(current);
+ if (weapon && player.hp > 2 || get.damageEffect(player, current, player) > 10) list[1].push(current);
}
- list[0].sort((a,b)=>{
- return get.damageEffect(b,player,player)-get.damageEffect(a,player,player);
+ list[0].sort((a, b) => {
+ return get.damageEffect(b, player, player) - get.damageEffect(a, player, player);
});
player.chooseCardTarget({
- filterCard:lib.filter.cardDiscardable,
- selectCard:[1,Infinity],
- position:'he',
- filterTarget:lib.filter.notMe,
- prompt:get.prompt2('twliexi'),
- targetsx:[list[0][0],list[1][0]],
- ai1:function(card){
- var targetx=_status.event.targetsx[0];
- var hasWeapon=ui.selected.cards.some(i=>get.subtype(i)=='equip1');
- if(!targetx){
- var targetx=_status.event.targetsx[1];
- if(get.subtype(card)=='equip1'&&!hasWeapon) return 30-get.value(card);
+ filterCard: lib.filter.cardDiscardable,
+ selectCard: [1, Infinity],
+ position: 'he',
+ filterTarget: lib.filter.notMe,
+ prompt: get.prompt2('twliexi'),
+ targetsx: [list[0][0], list[1][0]],
+ ai1: function (card) {
+ var targetx = _status.event.targetsx[0];
+ var hasWeapon = ui.selected.cards.some(i => get.subtype(i) == 'equip1');
+ if (!targetx) {
+ var targetx = _status.event.targetsx[1];
+ if (get.subtype(card) == 'equip1' && !hasWeapon) return 30 - get.value(card);
return -get.value(card);
}
- if(ui.selected.cards.length>targetx.hp) return 0;
- if(get.subtype(card)=='equip1'&&!hasWeapon) return 30-get.value(card);
- return 7-get.value(card);
+ if (ui.selected.cards.length > targetx.hp) return 0;
+ if (get.subtype(card) == 'equip1' && !hasWeapon) return 30 - get.value(card);
+ return 7 - get.value(card);
},
- ai2:function(target){
- var targetx=_status.event.targetsx[0]||_status.event.targetsx[1];
- if(targetx==target) return 10;
+ ai2: function (target) {
+ var targetx = _status.event.targetsx[0] || _status.event.targetsx[1];
+ if (targetx == target) return 10;
return 0;
},
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- var cards=result.cards;
- player.logSkill('twliexi',target);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ var cards = result.cards;
+ player.logSkill('twliexi', target);
player.discard(cards);
- if(cards.length>target.hp) target.damage();
+ if (cards.length > target.hp) target.damage();
else player.damage(target);
- var goon=false;
- for(var card of cards){
- if(get.subtype(card)=='equip1'){
- goon=true;
+ var goon = false;
+ for (var card of cards) {
+ if (get.subtype(card) == 'equip1') {
+ goon = true;
break;
}
}
- if(!goon) event.finish();
+ if (!goon) event.finish();
}
else event.finish();
'step 2'
@@ -2851,98 +2851,98 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.damage();
}
},
- twshezhong:{
- audio:2,
- trigger:{player:'phaseJieshuBegin'},
- direct:true,
- content:function(){
+ twshezhong: {
+ audio: 2,
+ trigger: { player: 'phaseJieshuBegin' },
+ direct: true,
+ content: function () {
'step 0'
- var damage=player.getHistory('sourceDamage').length;
- if(damage){
- player.chooseTarget(get.prompt('twshezhong'),'令至多'+get.cnNumber(damage)+'名其他角色下个摸牌阶段的摸牌数-1',[1,damage],lib.filter.notMe).set('ai',target=>{
- return -get.attitude(_status.event.player,target);
+ var damage = player.getHistory('sourceDamage').length;
+ if (damage) {
+ player.chooseTarget(get.prompt('twshezhong'), '令至多' + get.cnNumber(damage) + '名其他角色下个摸牌阶段的摸牌数-1', [1, damage], lib.filter.notMe).set('ai', target => {
+ return -get.attitude(_status.event.player, target);
});
}
else event.goto(2);
'step 1'
- if(result.bool){
- var targets=result.targets;
- player.logSkill('twshezhong',targets);
- for(var target of targets){
+ if (result.bool) {
+ var targets = result.targets;
+ player.logSkill('twshezhong', targets);
+ for (var target of targets) {
target.addSkill('twshezhong_minus');
- target.addMark('twshezhong_minus',1,false);
+ target.addMark('twshezhong_minus', 1, false);
}
}
'step 2'
- var targets=[];
- for(var evt of player.getHistory('damage')){
- if(evt.source&&evt.source.isIn()) targets.add(evt.source);
+ var targets = [];
+ for (var evt of player.getHistory('damage')) {
+ if (evt.source && evt.source.isIn()) targets.add(evt.source);
}
- if(targets.length){
- player.chooseTarget(get.prompt('twshezhong'),'将手牌摸至一名与一名本回合对你造成过伤害的角色的体力值相同,且至多摸至五张',(card,player,target)=>{
+ if (targets.length) {
+ player.chooseTarget(get.prompt('twshezhong'), '将手牌摸至一名与一名本回合对你造成过伤害的角色的体力值相同,且至多摸至五张', (card, player, target) => {
return _status.event.targets.includes(target);
- }).set('ai',target=>{
- return Math.max(0.1,target.hp-_status.event.player.countCards('h'));
- }).set('targets',targets);
+ }).set('ai', target => {
+ return Math.max(0.1, target.hp - _status.event.player.countCards('h'));
+ }).set('targets', targets);
}
else event.finish();
'step 3'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twshezhong',target);
- var num=Math.min(target.hp,5)-player.countCards('h');
- if(num>0) player.draw(num);
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twshezhong', target);
+ var num = Math.min(target.hp, 5) - player.countCards('h');
+ if (num > 0) player.draw(num);
}
},
- subSkill:{
- minus:{
- trigger:{player:'phaseDrawBegin'},
- forced:true,
- onremove:true,
- content:function(){
- var num=player.countMark('twshezhong_minus');
- trigger.num-=num;
- game.log(player,'的额定摸牌数','#g-'+num);
+ subSkill: {
+ minus: {
+ trigger: { player: 'phaseDrawBegin' },
+ forced: true,
+ onremove: true,
+ content: function () {
+ var num = player.countMark('twshezhong_minus');
+ trigger.num -= num;
+ game.log(player, '的额定摸牌数', '#g-' + num);
player.removeSkill('twshezhong_minus');
},
- mark:true,
- intro:{
- content:'额定摸牌数-#',
+ mark: true,
+ intro: {
+ content: '额定摸牌数-#',
},
}
}
},
//侠鲁肃
- twkaizeng:{
- audio:2,
- global:'twkaizeng_want',
- refuseInfo:['不给','拒绝'],
- subSkill:{
- want:{
- audio:'twkaizeng',
- forceaudio:true,
- enable:'phaseUse',
- usable:1,
- charlotte:true,
- filter:function(event,player){
- return game.hasPlayer(current=>{
- return current!=player&¤t.hasSkill('twkaizeng');
+ twkaizeng: {
+ audio: 2,
+ global: 'twkaizeng_want',
+ refuseInfo: ['不给', '拒绝'],
+ subSkill: {
+ want: {
+ audio: 'twkaizeng',
+ forceaudio: true,
+ enable: 'phaseUse',
+ usable: 1,
+ charlotte: true,
+ filter: function (event, player) {
+ return game.hasPlayer(current => {
+ return current != player && current.hasSkill('twkaizeng');
});
},
- chooseButton:{
- dialog:function(event,player){
- var targets=game.filterPlayer(current=>{
- return current!=player&¤t.hasSkill('twkaizeng');
+ chooseButton: {
+ dialog: function (event, player) {
+ var targets = game.filterPlayer(current => {
+ return current != player && current.hasSkill('twkaizeng');
});
- return ui.create.dialog('###慨赠###'+'选择一种基本牌的牌名或非基本牌的类型,然后令'+get.translation(targets)+(targets.length>1?'中的一人':'')+'选择是否交给你任意张牌');
+ return ui.create.dialog('###慨赠###' + '选择一种基本牌的牌名或非基本牌的类型,然后令' + get.translation(targets) + (targets.length > 1 ? '中的一人' : '') + '选择是否交给你任意张牌');
},
- chooseControl:function(){
- var list=[];
- var basic=[];
- for(var i=0;icurrent!=player&¤t.hasSkill('twkaizeng'));
- targets.sort((a,b)=>get.attitude(player,b)-get.attitude(player,a));
- var cards=targets[0].getCards('h');
- var list=[];
- for(var card of cards){
- var type=get.type2(card);
- if(type=='basic') list.add(get.name(card));
+ var targets = game.filterPlayer(current => current != player && current.hasSkill('twkaizeng'));
+ targets.sort((a, b) => get.attitude(player, b) - get.attitude(player, a));
+ var cards = targets[0].getCards('h');
+ var list = [];
+ for (var card of cards) {
+ var type = get.type2(card);
+ if (type == 'basic') list.add(get.name(card));
else list.add(type);
}
- var need=['trick','equip'].randomSort();
- need.addArray(['sha','jiu'].randomSort());
- for(var type of need){
- if(list.includes(type)) return type;
+ var need = ['trick', 'equip'].randomSort();
+ need.addArray(['sha', 'jiu'].randomSort());
+ for (var type of need) {
+ if (list.includes(type)) return type;
}
return list.randomGet();
},
- backup:function(result,player){
+ backup: function (result, player) {
return {
- audio:'twkaizeng',
- type:result.control,
- log:false,
- delay:false,
- filterTarget:function(card,player,target){
+ audio: 'twkaizeng',
+ type: result.control,
+ log: false,
+ delay: false,
+ filterTarget: function (card, player, target) {
return target.hasSkill('twkaizeng');
},
- selectTarget:function(){
- var player=_status.event.player;
- var targets=game.filterPlayer(function(current){
- return current!=player&¤t.hasSkill('twkaizeng');
+ selectTarget: function () {
+ var player = _status.event.player;
+ var targets = game.filterPlayer(function (current) {
+ return current != player && current.hasSkill('twkaizeng');
});
- return targets.length>1?1:-1;
+ return targets.length > 1 ? 1 : -1;
},
- prepare:function(cards,player,targets){
- targets[0].logSkill('twkaizeng_want',player);
+ prepare: function (cards, player, targets) {
+ targets[0].logSkill('twkaizeng_want', player);
},
- content:function(){
+ content: function () {
'step 0'
- var type=lib.skill.twkaizeng_want_backup.type;
- var isbasic=lib.card[type];
- target.chooseCard('慨赠:是否交给'+get.translation(player)+'任意张手牌?','若你以此法:交给其至少两张牌,你摸一张牌;交给其的牌包含其选择的牌名或类型,你获得一张不为此牌名或类型的牌',[1,Infinity]).set('ai',card=>{
- if(!_status.event.goon) return -get.value(card);
- var player=_status.event.player,target=_status.event.getParent().player;
- if(ui.selected.cards.length>player.countCards('h')/2&&ui.selected.cards.length>=2) return 0;
- var type=_status.event.type;
- var isbasic=lib.card[type];
- var add=0;
- if(!ui.selected.cards.some(i=>get[isbasic?'name':'type2'](i,target)==type)) add+=3;
- if(ui.selected.cards.length<2) add+=3;
- return get.value(card,target)-get.value(card,player)+add;
- }).set('type',type).set('goon',get.attitude(target,player)>0);
+ var type = lib.skill.twkaizeng_want_backup.type;
+ var isbasic = lib.card[type];
+ target.chooseCard('慨赠:是否交给' + get.translation(player) + '任意张手牌?', '若你以此法:交给其至少两张牌,你摸一张牌;交给其的牌包含其选择的牌名或类型,你获得一张不为此牌名或类型的牌', [1, Infinity]).set('ai', card => {
+ if (!_status.event.goon) return -get.value(card);
+ var player = _status.event.player, target = _status.event.getParent().player;
+ if (ui.selected.cards.length > player.countCards('h') / 2 && ui.selected.cards.length >= 2) return 0;
+ var type = _status.event.type;
+ var isbasic = lib.card[type];
+ var add = 0;
+ if (!ui.selected.cards.some(i => get[isbasic ? 'name' : 'type2'](i, target) == type)) add += 3;
+ if (ui.selected.cards.length < 2) add += 3;
+ return get.value(card, target) - get.value(card, player) + add;
+ }).set('type', type).set('goon', get.attitude(target, player) > 0);
'step 1'
- if(result.bool){
- var cards=result.cards;
- event.cards=cards;
- target.give(cards,player);
+ if (result.bool) {
+ var cards = result.cards;
+ event.cards = cards;
+ target.give(cards, player);
}
- else{
- var refuseInfo=lib.skill.twkaizeng.refuseInfo.slice();
- if(get.attitude(target,player)<0) refuseInfo.push('没门');
+ else {
+ var refuseInfo = lib.skill.twkaizeng.refuseInfo.slice();
+ if (get.attitude(target, player) < 0) refuseInfo.push('没门');
target.chat(refuseInfo.randomGet());
event.finish();
}
'step 2'
- if(cards.length>1) target.draw();
+ if (cards.length > 1) target.draw();
'step 3'
- var type=lib.skill.twkaizeng_want_backup.type;
- var isbasic=lib.card[type];
- var fn=isbasic?'name':'type2';
- if(cards.some(card=>get[fn](card,player)==type)){
- var card=get.cardPile(cardx=>{
- return get[fn](cardx,target)!=type;
+ var type = lib.skill.twkaizeng_want_backup.type;
+ var isbasic = lib.card[type];
+ var fn = isbasic ? 'name' : 'type2';
+ if (cards.some(card => get[fn](card, player) == type)) {
+ var card = get.cardPile(cardx => {
+ return get[fn](cardx, target) != type;
});
- if(card) target.gain(card,'gain2');
+ if (card) target.gain(card, 'gain2');
}
'step 4'
game.delayx();
},
- ai:{
- result:{
- target:1,
+ ai: {
+ result: {
+ target: 1,
},
},
}
},
- prompt:()=>'请选择一名有【慨赠】的角色',
+ prompt: () => '请选择一名有【慨赠】的角色',
},
- ai:{
- order:10,
- result:{
- player:function(player){
- var targets=game.filterPlayer(current=>{
- return current!=player&¤t.hasSkill('twkaizeng');
+ ai: {
+ order: 10,
+ result: {
+ player: function (player) {
+ var targets = game.filterPlayer(current => {
+ return current != player && current.hasSkill('twkaizeng');
});
- for(var i of targets) if(get.attitude(player,i)>0) return 1;
+ for (var i of targets) if (get.attitude(player, i) > 0) return 1;
return 0;
}
},
},
},
- want_backup:{},
+ want_backup: {},
},
- ai:{
- threaten:3
+ ai: {
+ threaten: 3
}
},
- twyangming:{
- audio:2,
- trigger:{
- player:'phaseUseEnd',
+ twyangming: {
+ audio: 2,
+ trigger: {
+ player: 'phaseUseEnd',
},
- frequent:true,
- filter:function(event,player){
- return player.hasHistory('useCard',evt=>evt.getParent('phaseUse')==event);
+ frequent: true,
+ filter: function (event, player) {
+ return player.hasHistory('useCard', evt => evt.getParent('phaseUse') == event);
},
- content:function(){
- var types=[];
- var history=player.getHistory('useCard',evt=>evt.getParent('phaseUse')==trigger);
- for(var evt of history){
+ content: function () {
+ var types = [];
+ var history = player.getHistory('useCard', evt => evt.getParent('phaseUse') == trigger);
+ for (var evt of history) {
types.add(get.type2(evt.card));
}
- var num=types.length;
+ var num = types.length;
player.draw(num);
player.addTempSkill('twyangming_limit');
- player.addMark('twyangming_limit',num,false);
- game.log(player,'本回合的手牌上限','#g+'+num);
+ player.addMark('twyangming_limit', num, false);
+ game.log(player, '本回合的手牌上限', '#g+' + num);
},
- subSkill:{
- limit:{
- charlotte:true,
- onremove:true,
- mod:{
- maxHandcard:function(player,num){
- return num+player.countMark('twyangming_limit');
+ subSkill: {
+ limit: {
+ charlotte: true,
+ onremove: true,
+ mod: {
+ maxHandcard: function (player, num) {
+ return num + player.countMark('twyangming_limit');
}
}
}
}
},
//邴原
- twbingde:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.countCards('he')&&player.getStorage('twbingde_clear').length<4;
+ twbingde: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.countCards('he') && player.getStorage('twbingde_clear').length < 4;
},
- onChooseToUse:function(event){
- if(event.type=='phase'&&!game.online){
- var map={};
- event.player.getHistory('useCard',evt=>{
- var evtx=evt.getParent('phaseUse'),suit=get.suit(evt.card);
- if(!lib.suit.includes(suit)) return;
- if(evtx!=event.getParent('phaseUse')) return;
- if(typeof map[suit]!='number') map[suit]=0;
+ onChooseToUse: function (event) {
+ if (event.type == 'phase' && !game.online) {
+ var map = {};
+ event.player.getHistory('useCard', evt => {
+ var evtx = evt.getParent('phaseUse'), suit = get.suit(evt.card);
+ if (!lib.suit.includes(suit)) return;
+ if (evtx != event.getParent('phaseUse')) return;
+ if (typeof map[suit] != 'number') map[suit] = 0;
map[suit]++;
});
- event.set('twbingde_map',map);
+ event.set('twbingde_map', map);
}
},
- chooseButton:{
- dialog:function(event,player){
- var str=get.translation('twbingde_info'),str2='';
- if(event.twbingde_map){
- str2='本回合使用牌对应花色数:
';
- str2+='';
- for(var suit of lib.suit){
- str2+=get.translation(suit)+':'+get.cnNumber(event.twbingde_map[suit]||0)+'张;';
+ chooseButton: {
+ dialog: function (event, player) {
+ var str = get.translation('twbingde_info'), str2 = '';
+ if (event.twbingde_map) {
+ str2 = '
本回合使用牌对应花色数:
';
+ str2 += '
';
+ for (var suit of lib.suit) {
+ str2 += get.translation(suit) + ':' + get.cnNumber(event.twbingde_map[suit] || 0) + '张;';
}
- str2=str2.slice(0,str2.length-1)+'
';
+ str2 = str2.slice(0, str2.length - 1) + '
';
}
- return ui.create.dialog('###秉德###'+str,str2);
+ return ui.create.dialog('###秉德###' + str, str2);
},
- chooseControl:function(event,player){
- var list=lib.suit.slice();
+ chooseControl: function (event, player) {
+ var list = lib.suit.slice();
list.removeArray(player.getStorage('twbingde_clear'));
list.push('cancel2');
return list;
},
- check:function(event,player){
- var map=event.twbingde_map;
- var suit=lib.suit.filter(i=>!player.getStorage('twbingde_clear').includes(i)).sort((a,b)=>{
- return map[b]-map[a];
+ check: function (event, player) {
+ var map = event.twbingde_map;
+ var suit = lib.suit.filter(i => !player.getStorage('twbingde_clear').includes(i)).sort((a, b) => {
+ return map[b] - map[a];
})[0];
- if(map[suit]==0) return 'cancel2';
+ if (map[suit] == 0) return 'cancel2';
return suit;
},
- backup:function(result,player){
+ backup: function (result, player) {
return {
- audio:'twbingde',
- filterCard:true,
- selectCard:1,
- position:'he',
- suit:result.control,
- check:function(card){
- var suit=lib.skill.twbingde.suit;
- if(get.suit(card)==suit) return 10-get.value(card);
- return 6-get.value(card);
+ audio: 'twbingde',
+ filterCard: true,
+ selectCard: 1,
+ position: 'he',
+ suit: result.control,
+ check: function (card) {
+ var suit = lib.skill.twbingde.suit;
+ if (get.suit(card) == suit) return 10 - get.value(card);
+ return 6 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
- var suit=lib.skill.twbingde_backup.suit,num=0;
- player.popup(suit+2);
- game.log(player,'选择了','#y'+suit+2);
- player.addTempSkill('twbingde_clear','phaseUseAfter');
- player.markAuto('twbingde_clear',[suit]);
- player.getHistory('useCard',evt=>{
- var evtx=evt.getParent('phaseUse'),suitx=get.suit(evt.card);
- if(!evtx||evtx!=event.getParent('phaseUse')||suit!=suitx) return false;
+ var suit = lib.skill.twbingde_backup.suit, num = 0;
+ player.popup(suit + 2);
+ game.log(player, '选择了', '#y' + suit + 2);
+ player.addTempSkill('twbingde_clear', 'phaseUseAfter');
+ player.markAuto('twbingde_clear', [suit]);
+ player.getHistory('useCard', evt => {
+ var evtx = evt.getParent('phaseUse'), suitx = get.suit(evt.card);
+ if (!evtx || evtx != event.getParent('phaseUse') || suit != suitx) return false;
num++;
});
- if(num>0) player.draw(num);
+ if (num > 0) player.draw(num);
'step 1'
- if(get.suit(cards[0],player)==lib.skill.twbingde_backup.suit){
+ if (get.suit(cards[0], player) == lib.skill.twbingde_backup.suit) {
delete player.getStat('skill').twbingde;
}
},
- ai:{
- result:{
- player:1,
+ ai: {
+ result: {
+ player: 1,
},
},
}
},
- prompt:()=>'秉德:弃置一张牌',
+ prompt: () => '秉德:弃置一张牌',
},
- ai:{
- order:2,
- result:{player:1}
+ ai: {
+ order: 2,
+ result: { player: 1 }
},
- subSkill:{
- backup:{},
- clear:{
- charlotte:true,
- onremove:true,
+ subSkill: {
+ backup: {},
+ clear: {
+ charlotte: true,
+ onremove: true,
}
},
},
- twqingtao:{
- audio:2,
- trigger:{player:'phaseDrawEnd'},
- filter:function(event,player){
+ twqingtao: {
+ audio: 2,
+ trigger: { player: 'phaseDrawEnd' },
+ filter: function (event, player) {
return player.countCards('he');
},
- direct:true,
- group:'twqingtao_jieshu',
- content:function(){
+ direct: true,
+ group: 'twqingtao_jieshu',
+ content: function () {
'step 0'
- player.chooseCard(get.prompt2('twqingtao'),'he',lib.filter.cardRecastable).set('ai',function(card){
- if(card.name=='jiu'||get.type(card)!='basic') return 10-get.value(card);
- return 6-get.value(card);
+ player.chooseCard(get.prompt2('twqingtao'), 'he', lib.filter.cardRecastable).set('ai', function (card) {
+ if (card.name == 'jiu' || get.type(card) != 'basic') return 10 - get.value(card);
+ return 6 - get.value(card);
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twqingtao');
player.recast(result.cards);
- if(get.name(result.cards[0])=='jiu'||get.type(result.cards[0],false,player)!='basic') player.draw();
+ if (get.name(result.cards[0]) == 'jiu' || get.type(result.cards[0], false, player) != 'basic') player.draw();
}
},
- subSkill:{
- jieshu:{
- audio:'twqingtao',
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
- return player.countCards('he')>0&&!player.hasHistory('useSkill',evt=>evt.skill=='twqingtao');
+ subSkill: {
+ jieshu: {
+ audio: 'twqingtao',
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return player.countCards('he') > 0 && !player.hasHistory('useSkill', evt => evt.skill == 'twqingtao');
},
- direct:true,
- content:function(){
- var next=game.createEvent('twqingtao');
- next.player=player;
+ direct: true,
+ content: function () {
+ var next = game.createEvent('twqingtao');
+ next.player = player;
next.setContent(lib.skill.twqingtao.content);
},
}
}
},
//牛董
- twjuntun:{
- audio:2,
- trigger:{
- global:['phaseBefore','dieAfter'],
- player:'enterGame',
+ twjuntun: {
+ audio: 2,
+ trigger: {
+ global: ['phaseBefore', 'dieAfter'],
+ player: 'enterGame',
},
- init:function(player){lib.skill.baonvezhi.change(player,0)},
- direct:true,
- derivation:['twxiongjun','baonvezhi_faq'],
- group:'twjuntun_extra',
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(current=>{
+ init: function (player) { lib.skill.baonvezhi.change(player, 0) },
+ direct: true,
+ derivation: ['twxiongjun', 'baonvezhi_faq'],
+ group: 'twjuntun_extra',
+ filter: function (event, player) {
+ return (event.name != 'phase' || game.phaseNumber == 0) && game.hasPlayer(current => {
return !current.hasSkill('twxiongjun');
});
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twjuntun'),'令一名角色获得〖凶军〗',(card,player,target)=>{
+ player.chooseTarget(get.prompt('twjuntun'), '令一名角色获得〖凶军〗', (card, player, target) => {
return !target.hasSkill('twxiongjun');
- }).set('ai',target=>get.attitude(player,target)-2);
+ }).set('ai', target => get.attitude(player, target) - 2);
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twjuntun',target);
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twjuntun', target);
target.addSkills('twxiongjun');
- if(target!=player) player.addExpose(0.25);
+ if (target != player) player.addExpose(0.25);
}
},
- subSkill:{
- extra:{
- audio:2,
- trigger:{global:'damageSource'},
- forced:true,
- locked:false,
- filter:function(event,player){
- return event.source&&event.source.hasSkill('twxiongjun')&&event.source!=player;
+ subSkill: {
+ extra: {
+ audio: 2,
+ trigger: { global: 'damageSource' },
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ return event.source && event.source.hasSkill('twxiongjun') && event.source != player;
},
- logTarget:'source',
- content:function(){
- lib.skill.baonvezhi.change(player,trigger.num);
+ logTarget: 'source',
+ content: function () {
+ lib.skill.baonvezhi.change(player, trigger.num);
}
},
},
},
- baonvezhi:{
- audio:2,
- trigger:{
- player:'damageEnd',
- source:'damageSource',
+ baonvezhi: {
+ audio: 2,
+ trigger: {
+ player: 'damageEnd',
+ source: 'damageSource',
},
- silent:true,
- forced:true,
- charlotte:true,
- baonvezhi_max:5,
- change:function(player,num){
- var baonvezhi_max=lib.skill.baonvezhi.baonvezhi_max;
+ silent: true,
+ forced: true,
+ charlotte: true,
+ baonvezhi_max: 5,
+ change: function (player, num) {
+ var baonvezhi_max = lib.skill.baonvezhi.baonvezhi_max;
player.addSkill('baonvezhi');
- var tmp=player.countMark('baonvezhi');
- if(tmp+num>baonvezhi_max) num=baonvezhi_max-tmp;
- else if(tmp+num<0) num=-tmp;
- if(num===0) return;
- player[num>0?'addMark':'removeMark']('baonvezhi',Math.abs(num),false);
- game.log(player,num>=0?'获得了':'失去了',get.cnNumber(Math.abs(num))+'点暴虐值');
- player[player.countMark('baonvezhi')>0?'markSkill':'unmarkSkill']('baonvezhi');
+ var tmp = player.countMark('baonvezhi');
+ if (tmp + num > baonvezhi_max) num = baonvezhi_max - tmp;
+ else if (tmp + num < 0) num = -tmp;
+ if (num === 0) return;
+ player[num > 0 ? 'addMark' : 'removeMark']('baonvezhi', Math.abs(num), false);
+ game.log(player, num >= 0 ? '获得了' : '失去了', get.cnNumber(Math.abs(num)) + '点暴虐值');
+ player[player.countMark('baonvezhi') > 0 ? 'markSkill' : 'unmarkSkill']('baonvezhi');
},
- filter:function(event,player){
- return player.countMark('baonvezhi')current.hasSkill('twxiongjun')).sortBySeat();
- player.line(targets,'green');
+ baonvezhi_faq: {},
+ twxiongjun: {
+ init: function (player) { lib.skill.baonvezhi.change(player, 0) },
+ trigger: { source: 'damageSource' },
+ forced: true,
+ usable: 1,
+ content: function () {
+ var targets = game.filterPlayer(current => current.hasSkill('twxiongjun')).sortBySeat();
+ player.line(targets, 'green');
game.asyncDraw(targets);
},
},
- twxiongxi:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- init:function(player){lib.skill.baonvezhi.change(player,0)},
- filterCard:()=>true,
- selectCard:function(){
- return (lib.skill.baonvezhi.baonvezhi_max||5)-_status.event.player.countMark('baonvezhi');
+ twxiongxi: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ init: function (player) { lib.skill.baonvezhi.change(player, 0) },
+ filterCard: () => true,
+ selectCard: function () {
+ return (lib.skill.baonvezhi.baonvezhi_max || 5) - _status.event.player.countMark('baonvezhi');
},
- check:function(card){
- return 6-get.value(card);
+ check: function (card) {
+ return 6 - get.value(card);
},
- position:'he',
- filterTarget:function(card,player,target){
- return target!=player;
+ position: 'he',
+ filterTarget: function (card, player, target) {
+ return target != player;
},
- content:function(){
+ content: function () {
target.damage();
},
- ai:{
- expose:0.25,
- order:8,
- result:{
- target:function(player,target){
- return get.damageEffect(target,player,player);
+ ai: {
+ expose: 0.25,
+ order: 8,
+ result: {
+ target: function (player, target) {
+ return get.damageEffect(target, player, player);
}
}
}
},
- twxiafeng:{
- audio:2,
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player){
- return player.countMark('baonvezhi')>0;
+ twxiafeng: {
+ audio: 2,
+ trigger: { player: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return player.countMark('baonvezhi') > 0;
},
- init:function(player){lib.skill.baonvezhi.change(player,0)},
- direct:true,
- content:function(){
+ init: function (player) { lib.skill.baonvezhi.change(player, 0) },
+ direct: true,
+ content: function () {
'step 0'
- player.chooseButton(['黠凤:选择要消耗的暴虐值',[['tw_bn_1','tw_bn_2','tw_bn_3'],'vcard']],(button)=>{
- var num=player.countCards('hs',card=>get.tag(card,'damage')&&game.hasPlayer(current=>get.effect(current,card,player,player)>0));
- if(num<=0) return 0;
- if(num>=3) num=3;
- if(button.link[2]=='tw_bn_'+num) return 10;
+ player.chooseButton(['黠凤:选择要消耗的暴虐值', [['tw_bn_1', 'tw_bn_2', 'tw_bn_3'], 'vcard']], (button) => {
+ var num = player.countCards('hs', card => get.tag(card, 'damage') && game.hasPlayer(current => get.effect(current, card, player, player) > 0));
+ if (num <= 0) return 0;
+ if (num >= 3) num = 3;
+ if (button.link[2] == 'tw_bn_' + num) return 10;
return 1;
- }).set('filterButton',(button)=>{
- var player=_status.event.player;
- var link=button.link[2];
- if(link[link.length-1]*1>player.storage.baonvezhi) return false;
+ }).set('filterButton', (button) => {
+ var player = _status.event.player;
+ var link = button.link[2];
+ if (link[link.length - 1] * 1 > player.storage.baonvezhi) return false;
return true;
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twxiafeng');
- var link=result.links[0][2],num=link[link.length-1]*1;
+ var link = result.links[0][2], num = link[link.length - 1] * 1;
player.addTempSkill('twxiafeng_effect');
- player.storage.twxiafeng_effect=num;
- lib.skill.baonvezhi.change(player,-num);
+ player.storage.twxiafeng_effect = num;
+ lib.skill.baonvezhi.change(player, -num);
}
},
- subSkill:{
- effect:{
- trigger:{player:'useCard'},
- filter:function(event,player){
+ subSkill: {
+ effect: {
+ trigger: { player: 'useCard' },
+ filter: function (event, player) {
return !player.storage.twxiafeng_effect2;
},
- forced:true,
- content:function(){
- var count=player.getHistory('useCard',evt=>evt.getParent('phaseUse').player==player).length;
- if(count==player.storage.twxiafeng_effect){
- player.storage.twxiafeng_effect2=true;
+ forced: true,
+ content: function () {
+ var count = player.getHistory('useCard', evt => evt.getParent('phaseUse').player == player).length;
+ if (count == player.storage.twxiafeng_effect) {
+ player.storage.twxiafeng_effect2 = true;
}
- if(count<=player.storage.twxiafeng_effect){
+ if (count <= player.storage.twxiafeng_effect) {
trigger.directHit.addArray(game.players);
- if(trigger.addCount!==false){
- trigger.addCount=false;
- var stat=player.getStat().card,name=trigger.card.name;
- if(typeof stat[name]=='number') stat[name]--;
+ if (trigger.addCount !== false) {
+ trigger.addCount = false;
+ var stat = player.getStat().card, name = trigger.card.name;
+ if (typeof stat[name] == 'number') stat[name]--;
}
}
},
- onremove:function(player){
+ onremove: function (player) {
delete player.storage.twxiafeng_effect;
delete player.storage.twxiafeng_effect2;
},
- mod:{
- targetInRange:function(card,player,target,now){
- if(!player.storage.twxiafeng_effect2) return true;
+ mod: {
+ targetInRange: function (card, player, target, now) {
+ if (!player.storage.twxiafeng_effect2) return true;
},
- cardUsableTarget:function(card,player,target){
- if(!player.storage.twxiafeng_effect2) return true;
+ cardUsableTarget: function (card, player, target) {
+ if (!player.storage.twxiafeng_effect2) return true;
},
- maxHandcard:function(player,num){
- return num+(player.storage.twxiafeng_effect||0);
+ maxHandcard: function (player, num) {
+ return num + (player.storage.twxiafeng_effect || 0);
}
},
}
}
},
//蒋济
- twjichou:{
- audio:2,
- enable:'chooseToUse',
- group:['twjichou_ban','twjichou_give'],
- filter:function(event,player){
- if(player.hasSkill('twjichou_used')&&player.hasSkill('twjichou_given')) return false;
- if(!player.hasSkill('twjichou_used')){
- var record=player.getStorage('twjichou');
- for(var i of lib.inpile){
- var type=get.type(i);
- if(type=='trick'&&!record.includes(i)&&event.filterCard({name:i,isCard:true},player,event)) return true;
+ twjichou: {
+ audio: 2,
+ enable: 'chooseToUse',
+ group: ['twjichou_ban', 'twjichou_give'],
+ filter: function (event, player) {
+ if (player.hasSkill('twjichou_used') && player.hasSkill('twjichou_given')) return false;
+ if (!player.hasSkill('twjichou_used')) {
+ var record = player.getStorage('twjichou');
+ for (var i of lib.inpile) {
+ var type = get.type(i);
+ if (type == 'trick' && !record.includes(i) && event.filterCard({ name: i, isCard: true }, player, event)) return true;
}
}
return false;
},
- chooseButton:{
- dialog:function(event,player){
- var dialog=ui.create.dialog('急筹');
- if(!player.hasSkill('twjichou_used')&&!player.hasSkill('twjichou_given')&&event.type=='phase'&&player.countCards('h',card=>{
+ chooseButton: {
+ dialog: function (event, player) {
+ var dialog = ui.create.dialog('急筹');
+ if (!player.hasSkill('twjichou_used') && !player.hasSkill('twjichou_given') && event.type == 'phase' && player.countCards('h', card => {
return player.getStorage('twjichou').includes(get.name(card));
- })){
- dialog._chosenOpt=[];
- var table=document.createElement('div');
+ })) {
+ dialog._chosenOpt = [];
+ var table = document.createElement('div');
table.classList.add('add-setting');
- table.style.margin='0';
- table.style.width='100%';
- table.style.position='relative';
- var list=['视为使用牌','交出锦囊牌'];
- for(var i of list){
- var td=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
- td.innerHTML=''+i+'';
- td.link=i;
- if(i==list[0]){
+ table.style.margin = '0';
+ table.style.width = '100%';
+ table.style.position = 'relative';
+ var list = ['视为使用牌', '交出锦囊牌'];
+ for (var i of list) {
+ var td = ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode');
+ td.innerHTML = '' + i + '';
+ td.link = i;
+ if (i == list[0]) {
td.classList.add('bluebg');
dialog._chosenOpt.add(td);
}
- td.addEventListener(lib.config.touchscreen?'touchend':'click',function(){
- if(_status.dragged) return;
- if(_status.clicked) return;
- if(_status.justdragged) return;
- _status.tempNoButton=true;
- _status.clicked=true;
- setTimeout(function(){
- _status.tempNoButton=false;
- },500);
- var link=this.link;
- if(link=='交出锦囊牌') game.uncheck();
- var current=this.parentNode.querySelector('.bluebg');
- if(current){
+ td.addEventListener(lib.config.touchscreen ? 'touchend' : 'click', function () {
+ if (_status.dragged) return;
+ if (_status.clicked) return;
+ if (_status.justdragged) return;
+ _status.tempNoButton = true;
+ _status.clicked = true;
+ setTimeout(function () {
+ _status.tempNoButton = false;
+ }, 500);
+ var link = this.link;
+ if (link == '交出锦囊牌') game.uncheck();
+ var current = this.parentNode.querySelector('.bluebg');
+ if (current) {
current.classList.remove('bluebg');
dialog._chosenOpt.remove(current);
}
@@ -3484,275 +3484,275 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
dialog.content.appendChild(table);
}
- var list=[],record=player.getStorage('twjichou');
- for(var name of lib.inpile){
- if(get.type(name)=='trick'&&!record.includes(name)&&event.filterCard({name:name,isCard:true},player,event)) list.push(['锦囊','',name]);
+ var list = [], record = player.getStorage('twjichou');
+ for (var name of lib.inpile) {
+ if (get.type(name) == 'trick' && !record.includes(name) && event.filterCard({ name: name, isCard: true }, player, event)) list.push(['锦囊', '', name]);
}
- dialog.add([list,'vcard']);
+ dialog.add([list, 'vcard']);
return dialog;
},
- filter:function(button){
- if(_status.event.dialog){
- var opts=_status.event.dialog._chosenOpt;
- if(opts&&opts.length&&opts[0].link=='交出锦囊牌'&&typeof button.link!=typeof opts[0].link){
+ filter: function (button) {
+ if (_status.event.dialog) {
+ var opts = _status.event.dialog._chosenOpt;
+ if (opts && opts.length && opts[0].link == '交出锦囊牌' && typeof button.link != typeof opts[0].link) {
return false;
}
return true;
}
return false;
},
- select:function(){
- if(_status.event.dialog){
- var opts=_status.event.dialog._chosenOpt;
- return opts&&opts.length&&opts[0].link=='交出锦囊牌'?0:1;
+ select: function () {
+ if (_status.event.dialog) {
+ var opts = _status.event.dialog._chosenOpt;
+ return opts && opts.length && opts[0].link == '交出锦囊牌' ? 0 : 1;
}
return 0;
},
- check:function(button){
- if(_status.event.getParent().type!='phase') return 1;
- var player=_status.event.player;
- if(['wugu','zhulu_card','yiyi','lulitongxin','lianjunshengyan','diaohulishan'].includes(button.link[2])) return 0.1;
- return player.getUseValue({name:button.link[2]});
+ check: function (button) {
+ if (_status.event.getParent().type != 'phase') return 1;
+ var player = _status.event.player;
+ if (['wugu', 'zhulu_card', 'yiyi', 'lulitongxin', 'lianjunshengyan', 'diaohulishan'].includes(button.link[2])) return 0.1;
+ return player.getUseValue({ name: button.link[2] });
},
- backup:function(links,player){
- var isUse=links.length==1;
- var backup=get.copy(lib.skill['twjichou_'+(isUse?'use':'give')]);
- if(isUse) backup.viewAs={name:links[0][2],isCard:true};
+ backup: function (links, player) {
+ var isUse = links.length == 1;
+ var backup = get.copy(lib.skill['twjichou_' + (isUse ? 'use' : 'give')]);
+ if (isUse) backup.viewAs = { name: links[0][2], isCard: true };
return backup;
},
- prompt:function(links,player){
- var isUse=links.length==1;
- return '急筹:'+(isUse?('视为使用'+get.translation(links[0][2])+''):'选择要交出的牌和要交给的目标');
+ prompt: function (links, player) {
+ var isUse = links.length == 1;
+ return '急筹:' + (isUse ? ('视为使用' + get.translation(links[0][2]) + '') : '选择要交出的牌和要交给的目标');
}
},
- hiddenCard:function(player,name){
- if(player.hasSkill('twjichou_used')) return false;
- var type=get.type(name);
- return type=='trick'&&!player.getStorage('twjichou').includes(name);
+ hiddenCard: function (player, name) {
+ if (player.hasSkill('twjichou_used')) return false;
+ var type = get.type(name);
+ return type == 'trick' && !player.getStorage('twjichou').includes(name);
},
- marktext:'筹',
- intro:{
- markcount:function(storage,player){
- if(storage&&storage.length) return storage.length;
+ marktext: '筹',
+ intro: {
+ markcount: function (storage, player) {
+ if (storage && storage.length) return storage.length;
return 0;
},
- content:'已记录牌名:$',
+ content: '已记录牌名:$',
},
- ai:{
- order:1,
- result:{
- player:function(player){
- if(_status.event.dying) return get.attitude(player,_status.event.dying);
+ ai: {
+ order: 1,
+ result: {
+ player: function (player) {
+ if (_status.event.dying) return get.attitude(player, _status.event.dying);
return 1;
},
},
},
- subSkill:{
- backup:{},
- used:{charlotte:true},
- given:{charlotte:true},
- ban:{
- trigger:{global:'useCard1'},
- filter:function(event,player){
+ subSkill: {
+ backup: {},
+ used: { charlotte: true },
+ given: { charlotte: true },
+ ban: {
+ trigger: { global: 'useCard1' },
+ filter: function (event, player) {
return player.getStorage('twjichou').includes(event.card.name);
},
- forced:true,
- locked:false,
- silent:true,
- content:function(){
+ forced: true,
+ locked: false,
+ silent: true,
+ content: function () {
trigger.directHit.add(player);
},
- mod:{
- cardEnabled:function(card,player){
- if(player.getStorage('twjichou').includes(card.name)&&(get.position(card)=='h'||card.cards&&card.cards.some(i=>get.position(i)=='h'))) return false;
+ mod: {
+ cardEnabled: function (card, player) {
+ if (player.getStorage('twjichou').includes(card.name) && (get.position(card) == 'h' || card.cards && card.cards.some(i => get.position(i) == 'h'))) return false;
},
- cardSavable:function(card,player){
- if(player.getStorage('twjichou').includes(card.name)&&(get.position(card)=='h'||card.cards&&card.cards.some(i=>get.position(i)=='h'))) return false;
+ cardSavable: function (card, player) {
+ if (player.getStorage('twjichou').includes(card.name) && (get.position(card) == 'h' || card.cards && card.cards.some(i => get.position(i) == 'h'))) return false;
},
- aiValue:function(player,card){
- if(get.type(card)!='trick'||_status.twjichou_give_aiCheck) return;
- if(!player.getFriends().length&&player.getStorage('twjichou').includes(get.name(card))) return 0;
+ aiValue: function (player, card) {
+ if (get.type(card) != 'trick' || _status.twjichou_give_aiCheck) return;
+ if (!player.getFriends().length && player.getStorage('twjichou').includes(get.name(card))) return 0;
},
- aiUseful:function(){
- return lib.skill.twjichou_ban.mod.aiValue.apply(this,arguments);
+ aiUseful: function () {
+ return lib.skill.twjichou_ban.mod.aiValue.apply(this, arguments);
},
},
},
- use:{
- filterCard:()=>false,
- selectCard:-1,
- audio:'twjichou',
- popname:true,
- onuse:function(links,player){
- player.markAuto('twjichou',[links.card.name]);
+ use: {
+ filterCard: () => false,
+ selectCard: -1,
+ audio: 'twjichou',
+ popname: true,
+ onuse: function (links, player) {
+ player.markAuto('twjichou', [links.card.name]);
player.syncStorage('twjichou');
player.addTempSkill('twjichou_used');
},
},
- give:{
- audio:'twjichou',
- enable:'phaseUse',
- filter:function(event,player){
- return player.hasSkill('twjichou_used')&&!player.hasSkill('twjichou_given')&&player.countCards('h',i=>player.getStorage('twjichou').includes(get.name(i)));
+ give: {
+ audio: 'twjichou',
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ return player.hasSkill('twjichou_used') && !player.hasSkill('twjichou_given') && player.countCards('h', i => player.getStorage('twjichou').includes(get.name(i)));
},
- filterTarget:function(card,player,target){
- return target!=player;
+ filterTarget: function (card, player, target) {
+ return target != player;
},
- filterCard:function(card,player){
+ filterCard: function (card, player) {
return player.getStorage('twjichou').includes(get.name(card));
},
- check:function(card){
- _status.twjichou_give_aiCheck=true;
- var val=get.value(card);
+ check: function (card) {
+ _status.twjichou_give_aiCheck = true;
+ var val = get.value(card);
delete _status.twjichou_give_aiCheck;
return val;
},
- prompt:()=>'选择要交出的牌和要交给的目标',
- selectCard:1,
- discard:false,
- lose:false,
- delay:false,
- content:function(){
- player.give(cards,target);
- player.addTempSkill('twjichou_given','phaseUseAfter');
+ prompt: () => '选择要交出的牌和要交给的目标',
+ selectCard: 1,
+ discard: false,
+ lose: false,
+ delay: false,
+ content: function () {
+ player.give(cards, target);
+ player.addTempSkill('twjichou_given', 'phaseUseAfter');
},
- ai:{
- order:0.9,
- result:{
- target:function(player,target){
- if(target.hasSkillTag('nogain')) return 0;
- if(target.hasJudge('lebu')) return 0;
- return target.getCards('h',card=>player.getStorage('twjichou').includes(get.name(card))).reduce((p,c)=>p+(target.getUseValue(c)||1),0);
+ ai: {
+ order: 0.9,
+ result: {
+ target: function (player, target) {
+ if (target.hasSkillTag('nogain')) return 0;
+ if (target.hasJudge('lebu')) return 0;
+ return target.getCards('h', card => player.getStorage('twjichou').includes(get.name(card))).reduce((p, c) => p + (target.getUseValue(c) || 1), 0);
}
},
}
},
}
},
- twjilun:{
- audio:2,
- trigger:{player:'damageEnd'},
- direct:true,
- content:function(){
+ twjilun: {
+ audio: 2,
+ trigger: { player: 'damageEnd' },
+ direct: true,
+ content: function () {
'step 0'
- var num=Math.min(Math.max(1,player.getStorage('twjichou').length),5);
- event.num=num;
- var choices=['选项一'];
- var choiceList=['摸'+get.cnNumber(num)+'张牌','视为使用一张在〖急筹〗记录内且不在〖机论〗记录内的普通锦囊牌'];
- if((!player.getStorage('twjichou').length)||player.getStorage('twjichou').filter(name=>{
- return !player.getStorage('twjilun').includes(name)&&player.hasUseTarget({name:name});
- }).length==0)
- choiceList[1]=''+choiceList[1]+'';
+ var num = Math.min(Math.max(1, player.getStorage('twjichou').length), 5);
+ event.num = num;
+ var choices = ['选项一'];
+ var choiceList = ['摸' + get.cnNumber(num) + '张牌', '视为使用一张在〖急筹〗记录内且不在〖机论〗记录内的普通锦囊牌'];
+ if ((!player.getStorage('twjichou').length) || player.getStorage('twjichou').filter(name => {
+ return !player.getStorage('twjilun').includes(name) && player.hasUseTarget({ name: name });
+ }).length == 0)
+ choiceList[1] = '' + choiceList[1] + '';
else choices.push('选项二');
- player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('twjilun')).set('ai',()=>{
- if(_status.event.choiceList.length==1||!player.getStorage('twjichou').length) return 0;
- var val=_status.event.num>3?Math.min(1.5,1+(_status.event.num-3)*0.1):1;
- for(var name of player.getStorage('twjichou')){
- if(player.getStorage('twjilun').includes(name)) continue;
- if(player.getUseValue({name:name})>4*val) return 1;
+ player.chooseControl(choices, 'cancel2').set('choiceList', choiceList).set('prompt', get.prompt('twjilun')).set('ai', () => {
+ if (_status.event.choiceList.length == 1 || !player.getStorage('twjichou').length) return 0;
+ var val = _status.event.num > 3 ? Math.min(1.5, 1 + (_status.event.num - 3) * 0.1) : 1;
+ for (var name of player.getStorage('twjichou')) {
+ if (player.getStorage('twjilun').includes(name)) continue;
+ if (player.getUseValue({ name: name }) > 4 * val) return 1;
}
return 0;
- }).set('num',num);
+ }).set('num', num);
'step 1'
- if(result.control!='cancel2'){
- if(result.control=='选项一'){
+ if (result.control != 'cancel2') {
+ if (result.control == '选项一') {
player.logSkill('twjilun');
player.draw(num);
event.finish();
}
- else{
- var list=[];
- for(var name of player.getStorage('twjichou')){
- if(!player.getStorage('twjilun').includes(name)){
- list.push(['锦囊','',name]);
+ else {
+ var list = [];
+ for (var name of player.getStorage('twjichou')) {
+ if (!player.getStorage('twjilun').includes(name)) {
+ list.push(['锦囊', '', name]);
}
}
- player.chooseButton(['###机论###是否视为使用一张〖急筹〗已记录的普通锦囊牌?
',[list,'vcard']]).set('filterButton',button=>{
- return _status.event.player.hasUseTarget({name:button.link[2]});
- }).set('ai',button=>{
- return _status.event.getParent().player.getUseValue({name:button.link[2]},null,true);
+ player.chooseButton(['###机论###是否视为使用一张〖急筹〗已记录的普通锦囊牌?
', [list, 'vcard']]).set('filterButton', button => {
+ return _status.event.player.hasUseTarget({ name: button.link[2] });
+ }).set('ai', button => {
+ return _status.event.getParent().player.getUseValue({ name: button.link[2] }, null, true);
});
}
} else event.finish();
'step 2'
- if(result.bool){
- var card={name:result.links[0][2],isCard:true};
- player.chooseUseTarget(card,true).set('logSkill','twjilun');
- player.markAuto('twjilun',[card.name]);
+ if (result.bool) {
+ var card = { name: result.links[0][2], isCard: true };
+ player.chooseUseTarget(card, true).set('logSkill', 'twjilun');
+ player.markAuto('twjilun', [card.name]);
player.syncStorage('twjilun');
} else event.goto(0);
},
- marktext:'论',
- intro:{
- markcount:function(storage,player){
- if(storage&&storage.length) return storage.length;
+ marktext: '论',
+ intro: {
+ markcount: function (storage, player) {
+ if (storage && storage.length) return storage.length;
return 0;
},
- content:'已记录牌名:$',
+ content: '已记录牌名:$',
},
- ai:{
- maixie:true,
- maixie_defend:true,
- threaten:0.7,
+ ai: {
+ maixie: true,
+ maixie_defend: true,
+ threaten: 0.7,
}
},
//蹇硕
- twkunsi:{
- audio:2,
- enable:'phaseUse',
- onremove:true,
- derivation:'twlinglu',
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return player.canUse({name:'sha',isCard:true},current,false)&¤t!=player&&!player.getStorage('twkunsi').includes(current);
+ twkunsi: {
+ audio: 2,
+ enable: 'phaseUse',
+ onremove: true,
+ derivation: 'twlinglu',
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return player.canUse({ name: 'sha', isCard: true }, current, false) && current != player && !player.getStorage('twkunsi').includes(current);
});
},
- filterTarget:function(card,player,target){
- return player.canUse({name:'sha',isCard:true},target,false)&&target!=player&&!player.getStorage('twkunsi').includes(target);
+ filterTarget: function (card, player, target) {
+ return player.canUse({ name: 'sha', isCard: true }, target, false) && target != player && !player.getStorage('twkunsi').includes(target);
},
- content:function(){
+ content: function () {
'step 0'
- player.markAuto('twkunsi',[target]);
+ player.markAuto('twkunsi', [target]);
player.storage.twkunsi.sortBySeat();
player.markSkill('twkunsi');
- player.useCard({name:'sha',isCard:true},target,false).animate=false;
+ player.useCard({ name: 'sha', isCard: true }, target, false).animate = false;
'step 1'
- if(!player.hasHistory('sourceDamage',function(evt){
- var card=evt.card;
- if(!card||card.name!='sha') return false;
- var evtx=evt.getParent('useCard');
- return evtx.card==card&&evtx.getParent()==event;
- })){
+ if (!player.hasHistory('sourceDamage', function (evt) {
+ var card = evt.card;
+ if (!card || card.name != 'sha') return false;
+ var evtx = evt.getParent('useCard');
+ return evtx.card == card && evtx.getParent() == event;
+ })) {
player.line(target);
- target.markAuto('twlinglu',[player]);
- target.addAdditionalSkills('twkunsi_temp','twlinglu');
- player.markAuto('twkunsi_clear',[target]);
- player.addTempSkill('twkunsi_clear',{player:'phaseBegin'});
+ target.markAuto('twlinglu', [player]);
+ target.addAdditionalSkills('twkunsi_temp', 'twlinglu');
+ player.markAuto('twkunsi_clear', [target]);
+ player.addTempSkill('twkunsi_clear', { player: 'phaseBegin' });
}
},
- intro:{content:'已对$发动过〖困兕〗'},
- ai:{
- order:function(){
- return get.order({name:'sha'})-0.1;
+ intro: { content: '已对$发动过〖困兕〗' },
+ ai: {
+ order: function () {
+ return get.order({ name: 'sha' }) - 0.1;
},
- expose:0.2,
- result:{
- target:function(player,target){
- if(target.countCards('h')<=target.hp&&!target.mayHaveShan(player,'use',target.getCards('h',i=>{
+ expose: 0.2,
+ result: {
+ target: function (player, target) {
+ if (target.countCards('h') <= target.hp && !target.mayHaveShan(player, 'use', target.getCards('h', i => {
return i.hasGaintag('sha_notshan');
- }))&&get.effect(target,{name:'sha',isCard:true},player,player)>0) return -1;
- else if(target.countCards('h')>target.hp&&target.hp>2&&target.hasShan()) return 1;
+ })) && get.effect(target, { name: 'sha', isCard: true }, player, player) > 0) return -1;
+ else if (target.countCards('h') > target.hp && target.hp > 2 && target.hasShan()) return 1;
return 0;
},
},
},
- subSkill:{
- clear:{
- forced:true,
- onremove:function(player,skill){
- var targets=player.getStorage(skill);
- for(var target of targets){
- if(target.isIn()){
+ subSkill: {
+ clear: {
+ forced: true,
+ onremove: function (player, skill) {
+ var targets = player.getStorage(skill);
+ for (var target of targets) {
+ if (target.isIn()) {
target.removeAdditionalSkill('twkunsi_temp');
}
}
@@ -3760,100 +3760,100 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
- twlinglu:{
- audio:2,
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current!=player;
+ twlinglu: {
+ audio: 2,
+ trigger: { player: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player;
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twlinglu'),function(card,player,target){
- return target!=player;
- }).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target);
- if(target.countCards('hs')>4&&target.hp>=3) return att;
- if(player.getStorage('twlinglu').includes(target)) return -2*att;
+ player.chooseTarget(get.prompt2('twlinglu'), function (card, player, target) {
+ return target != player;
+ }).set('ai', function (target) {
+ var player = _status.event.player, att = get.attitude(player, target);
+ if (target.countCards('hs') > 4 && target.hp >= 3) return att;
+ if (player.getStorage('twlinglu').includes(target)) return -2 * att;
return -att;
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twlinglu',target);
- target.addTempSkill('twlinglu_order',{player:'phaseAfter'});
- if(!target.storage.twlinglu_settle) target.storage.twlinglu_settle=[];
- target.storage.twlinglu_settle.unshift([player,1]);
- if(player.getStorage('twlinglu').includes(target)) player.chooseBool('是否令'+get.translation(target)+'于〖令戮〗失败时进行两次结算?').set('ai',function(){return true});
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twlinglu', target);
+ target.addTempSkill('twlinglu_order', { player: 'phaseAfter' });
+ if (!target.storage.twlinglu_settle) target.storage.twlinglu_settle = [];
+ target.storage.twlinglu_settle.unshift([player, 1]);
+ if (player.getStorage('twlinglu').includes(target)) player.chooseBool('是否令' + get.translation(target) + '于〖令戮〗失败时进行两次结算?').set('ai', function () { return true });
else event.finish();
}
else event.finish();
'step 2'
- if(result.bool){
+ if (result.bool) {
target.storage.twlinglu_settle[0][1]++;
- game.log(target,'于本次强令失败时进行两次结算');
+ game.log(target, '于本次强令失败时进行两次结算');
}
},
- ai:{expose:0.2},
- subSkill:{
- order:{
- audio:2,
- trigger:{source:'damageSource'},
- group:'twlinglu_settle',
- silent:true,
- charlotte:true,
- onremove:true,
- mark:true,
- marktext:'令',
- intro:{
- content:function(storage,player){
- return '任务目标:于你下回合结束前造成的伤害不小于2点
已造成'+player.countMark('twlinglu_order')+'点伤害';
+ ai: { expose: 0.2 },
+ subSkill: {
+ order: {
+ audio: 2,
+ trigger: { source: 'damageSource' },
+ group: 'twlinglu_settle',
+ silent: true,
+ charlotte: true,
+ onremove: true,
+ mark: true,
+ marktext: '令',
+ intro: {
+ content: function (storage, player) {
+ return '任务目标:于你下回合结束前造成的伤害不小于2点
已造成' + player.countMark('twlinglu_order') + '点伤害';
}
},
- content:function(){
- player.addMark('twlinglu_order',trigger.num,false);
+ content: function () {
+ player.addMark('twlinglu_order', trigger.num, false);
},
},
- settle:{
- audio:'twlinglu_order',
- trigger:{player:'phaseEnd'},
- charlotte:true,
- silent:true,
- onremove:true,
- filter:function(event,player){
- return player.getStorage('twlinglu_settle').length>0;
+ settle: {
+ audio: 'twlinglu_order',
+ trigger: { player: 'phaseEnd' },
+ charlotte: true,
+ silent: true,
+ onremove: true,
+ filter: function (event, player) {
+ return player.getStorage('twlinglu_settle').length > 0;
},
- content:function(){
+ content: function () {
'step 0'
- var list=player.getStorage('twlinglu_settle').shift();
- var target=list[0],count=list[1]||1;
- event.target=target; event.count=count;
+ var list = player.getStorage('twlinglu_settle').shift();
+ var target = list[0], count = list[1] || 1;
+ event.target = target; event.count = count;
'step 1'
- if(player.countMark('twlinglu_order')>=2){
- game.log(player,'成功完成了',target,'发布的','#g【令戮】','强令');
- player.popup('强令成功','wood');
+ if (player.countMark('twlinglu_order') >= 2) {
+ game.log(player, '成功完成了', target, '发布的', '#g【令戮】', '强令');
+ player.popup('强令成功', 'wood');
player.draw(2);
event.finish();
}
- else{
- game.log(player,'未完成',target,'发布的','#g【令戮】','强令');
- player.popup('强令失败','fire');
+ else {
+ game.log(player, '未完成', target, '发布的', '#g【令戮】', '强令');
+ player.popup('强令失败', 'fire');
}
'step 2'
- if(player.countMark('twlinglu_order')>=2){
+ if (player.countMark('twlinglu_order') >= 2) {
game.delayx();
}
- else{
+ else {
event.count--;
player.loseHp();
}
'step 3'
- if(event.count>0) event.goto(2);
+ if (event.count > 0) event.goto(2);
'step 4'
- if(player.getStorage('twlinglu_settle').length>0){
+ if (player.getStorage('twlinglu_settle').length > 0) {
event.goto(0);
game.delayx();
}
@@ -3862,359 +3862,359 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//马腾
- twxiongzheng:{
- audio:2,
- onremove:true,
- trigger:{global:'roundStart'},
- direct:true,
- content:function(){
+ twxiongzheng: {
+ audio: 2,
+ onremove: true,
+ trigger: { global: 'roundStart' },
+ direct: true,
+ content: function () {
'step 0'
- var target=player.storage.twxiongzheng_target;
+ var target = player.storage.twxiongzheng_target;
delete player.storage.twxiongzheng_target;
- if(!target){event.goto(4);return;}
- event.target=target;
- var list=[],list2=[];
- var history=target.actionHistory;
- if(history.length<2){event.goto(4);return;}
- for(var i=history.length-2;i>=0;i--){
- for(var evt of history[i].damage){
- if(evt.source) list.add(evt.source);
+ if (!target) { event.goto(4); return; }
+ event.target = target;
+ var list = [], list2 = [];
+ var history = target.actionHistory;
+ if (history.length < 2) { event.goto(4); return; }
+ for (var i = history.length - 2; i >= 0; i--) {
+ for (var evt of history[i].damage) {
+ if (evt.source) list.add(evt.source);
}
- if(history[i].isRound) break;
+ if (history[i].isRound) break;
}
- var list2=game.filterPlayer(i=>i!=player).removeArray(list);
- event.list=list; event.list2=list2;
- var choiceList=[
- '视为对任意名上一轮未对'+get.translation(target)+'造成过伤害的角色使用一张【杀】',
- '令任意名上一轮对'+get.translation(target)+'造成过伤害的角色摸两张牌'
+ var list2 = game.filterPlayer(i => i != player).removeArray(list);
+ event.list = list; event.list2 = list2;
+ var choiceList = [
+ '视为对任意名上一轮未对' + get.translation(target) + '造成过伤害的角色使用一张【杀】',
+ '令任意名上一轮对' + get.translation(target) + '造成过伤害的角色摸两张牌'
];
- var choices=[];
- if(list2.length){
+ var choices = [];
+ if (list2.length) {
choices.push('选项一');
- choiceList[0]+='('+get.translation(list2)+')';
+ choiceList[0] += '(' + get.translation(list2) + ')';
}
- else choiceList[0]=''+choiceList[0]+'';
- if(list.length){
+ else choiceList[0] = '' + choiceList[0] + '';
+ if (list.length) {
choices.push('选项二');
- choiceList[1]+='('+get.translation(list)+')';
+ choiceList[1] += '(' + get.translation(list) + ')';
}
- else choiceList[1]=''+choiceList[1]+'';
+ else choiceList[1] = '' + choiceList[1] + '';
choices.push('cancel2');
- player.chooseControl(choices).set('prompt','雄争:是否选择一项?').set('choiceList',choiceList).set('ai',function(){
- var player=_status.event.player;
- var list=_status.event.getParent().list,list2=_status.event.getParent().list2;
- var eff=list.map(target=>{
- if(target==player) return 0;
- return get.effect(target,{name:'sha'},player,player);
- }).reduce((p,c)=>p+c,0),eff2=list2.map(target=>2*get.effect(target,{name:'draw'},player,player)).reduce((p,c)=>p+c,0);
- if(_status.event.controls.includes('选项二')&&eff2>eff) return '选项二';
- if(eff>0) return 0;
+ player.chooseControl(choices).set('prompt', '雄争:是否选择一项?').set('choiceList', choiceList).set('ai', function () {
+ var player = _status.event.player;
+ var list = _status.event.getParent().list, list2 = _status.event.getParent().list2;
+ var eff = list.map(target => {
+ if (target == player) return 0;
+ return get.effect(target, { name: 'sha' }, player, player);
+ }).reduce((p, c) => p + c, 0), eff2 = list2.map(target => 2 * get.effect(target, { name: 'draw' }, player, player)).reduce((p, c) => p + c, 0);
+ if (_status.event.controls.includes('选项二') && eff2 > eff) return '选项二';
+ if (eff > 0) return 0;
return 'cancel2';
});
'step 1'
- if(result.control=='选项一'){
- event.bool=true;
- if(event.list2.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,你视为依次对这些角色使用一张杀',[1,Infinity],true,function(card,player,target){
- return player.canUse('sha',target,false,false)&&_status.event.getParent().list2.includes(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'sha'},player,player);
+ if (result.control == '选项一') {
+ event.bool = true;
+ if (event.list2.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,你视为依次对这些角色使用一张杀', [1, Infinity], true, function (card, player, target) {
+ return player.canUse('sha', target, false, false) && _status.event.getParent().list2.includes(target);
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'sha' }, player, player);
});
else event.finish();
}
- else if(result.control=='选项二'){
- event.bool=false;
- if(event.list.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,这些角色摸两张牌',[1,Infinity],true,function(card,player,target){
+ else if (result.control == '选项二') {
+ event.bool = false;
+ if (event.list.length) player.chooseTarget('雄争:请选择任意名满足条件的角色,这些角色摸两张牌', [1, Infinity], true, function (card, player, target) {
return _status.event.getParent().list.includes(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'draw'},player,player);
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'draw' }, player, player);
});
else event.finish();
}
else event.goto(3);
'step 2'
result.targets.sortBySeat();
- player.logSkill('twxiongzheng',result.targets);
- if(event.bool){
- for(var i of result.targets) player.useCard({name:'sha',isCard:true},i,false);
+ player.logSkill('twxiongzheng', result.targets);
+ if (event.bool) {
+ for (var i of result.targets) player.useCard({ name: 'sha', isCard: true }, i, false);
}
- else game.asyncDraw(result.targets,2);
+ else game.asyncDraw(result.targets, 2);
'step 3'
- if(!game.hasPlayer(function(current){
+ if (!game.hasPlayer(function (current) {
return !player.getStorage('twxiongzheng').includes(current);
})) event.finish();
else game.delayx();
'step 4'
- player.chooseTarget(get.prompt('twxiongzheng'),'选择一名未选择过的角色,称为“雄争”角色',function(card,player,target){
+ player.chooseTarget(get.prompt('twxiongzheng'), '选择一名未选择过的角色,称为“雄争”角色', function (card, player, target) {
return !player.getStorage('twxiongzheng').includes(target);
- }).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target);
- if(game.roundNumber<=1&&player.hasUnknown()) return 0;
+ }).set('ai', function (target) {
+ var player = _status.event.player, att = get.attitude(player, target);
+ if (game.roundNumber <= 1 && player.hasUnknown()) return 0;
return -att;
});
'step 5'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twxiongzheng',target);
- player.markAuto('twxiongzheng',[target]);
- player.storage.twxiongzheng_target=target;
- player.addTempSkill('twxiongzheng_mark','roundStart');
- target.addTempSkill('twxiongzheng_threaten','roundStart');
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twxiongzheng', target);
+ player.markAuto('twxiongzheng', [target]);
+ player.storage.twxiongzheng_target = target;
+ player.addTempSkill('twxiongzheng_mark', 'roundStart');
+ target.addTempSkill('twxiongzheng_threaten', 'roundStart');
game.delayx();
}
},
- subSkill:{
- mark:{
- intro:{
- content:'$参与了〖雄争〗的争斗',
- onunmark:true,
+ subSkill: {
+ mark: {
+ intro: {
+ content: '$参与了〖雄争〗的争斗',
+ onunmark: true,
},
- charlotte:true,
- onremove:true,
- trigger:{global:'damage'},
- firstDo:true,
- direct:true,
- filter:function(event,player){
- return event.player==player.storage.twxiongzheng_target&&get.itemtype(event.source)=='player';
+ charlotte: true,
+ onremove: true,
+ trigger: { global: 'damage' },
+ firstDo: true,
+ direct: true,
+ filter: function (event, player) {
+ return event.player == player.storage.twxiongzheng_target && get.itemtype(event.source) == 'player';
},
- content:function(){
- player.markAuto('twxiongzheng_mark',[trigger.source]);
+ content: function () {
+ player.markAuto('twxiongzheng_mark', [trigger.source]);
},
},
- threaten:{
- mark:true,
- intro:{content:'本轮〖雄争〗目标'},
- ai:{threaten:10},
+ threaten: {
+ mark: true,
+ intro: { content: '本轮〖雄争〗目标' },
+ ai: { threaten: 10 },
},
},
},
- twluannian:{
- audio:2,
- global:'twluannian_global',
- unique:true,
- zhuSkill:true,
- subSkill:{
- global:{
- audio:'twluannian',
- enable:'phaseUse',
- usable:1,
- forceaudio:true,
- onChooseToUse:function(event){
- if(!game.online){
- var num=1;
- game.countPlayer2(current=>{
- var history=current.actionHistory;
- for(var i=history.length-1;i>=0;i--){
- for(var evt of history[i].useSkill){
- if(evt.skill=='twluannian_global') num++;
+ twluannian: {
+ audio: 2,
+ global: 'twluannian_global',
+ unique: true,
+ zhuSkill: true,
+ subSkill: {
+ global: {
+ audio: 'twluannian',
+ enable: 'phaseUse',
+ usable: 1,
+ forceaudio: true,
+ onChooseToUse: function (event) {
+ if (!game.online) {
+ var num = 1;
+ game.countPlayer2(current => {
+ var history = current.actionHistory;
+ for (var i = history.length - 1; i >= 0; i--) {
+ for (var evt of history[i].useSkill) {
+ if (evt.skill == 'twluannian_global') num++;
}
- if(history[i].isRound) break;
+ if (history[i].isRound) break;
}
});
- event.set('twluannian_num',num);
+ event.set('twluannian_num', num);
}
},
- filter:function(event,player){
- if(!event.twluannian_num) return false;
- return player.group=='qun'&&player.countCards('he')>=event.twluannian_num&&game.hasPlayer(function(current){
- var target=current.storage.twxiongzheng_target;
- return target&&target.isIn()&¤t!=player&¤t.hasZhuSkill('twluannian',player)
+ filter: function (event, player) {
+ if (!event.twluannian_num) return false;
+ return player.group == 'qun' && player.countCards('he') >= event.twluannian_num && game.hasPlayer(function (current) {
+ var target = current.storage.twxiongzheng_target;
+ return target && target.isIn() && current != player && current.hasZhuSkill('twluannian', player)
})
},
- filterCard:true,
- position:'he',
- prompt:function(){
- var player=_status.event.player;
- var num=_status.event.twluannian_num
- var list=game.filterPlayer(function(current){
- return current.hasZhuSkill('twluannian',player);
- }).map(i=>i.storage.twxiongzheng_target).sortBySeat();
- return '弃置'+get.cnNumber(num)+'张牌,对'+get.translation(list)+(list.length>1?'中的一人':'')+'造成1点伤害';
+ filterCard: true,
+ position: 'he',
+ prompt: function () {
+ var player = _status.event.player;
+ var num = _status.event.twluannian_num
+ var list = game.filterPlayer(function (current) {
+ return current.hasZhuSkill('twluannian', player);
+ }).map(i => i.storage.twxiongzheng_target).sortBySeat();
+ return '弃置' + get.cnNumber(num) + '张牌,对' + get.translation(list) + (list.length > 1 ? '中的一人' : '') + '造成1点伤害';
},
- selectCard:function(){
+ selectCard: function () {
return _status.event.twluannian_num;
},
- complexSelect:true,
- complexCard:true,
- filterTarget:function(card,player,target){
- return game.filterPlayer(function(current){
- return current.hasZhuSkill('twluannian',player);
- }).map(i=>i.storage.twxiongzheng_target).includes(target);
+ complexSelect: true,
+ complexCard: true,
+ filterTarget: function (card, player, target) {
+ return game.filterPlayer(function (current) {
+ return current.hasZhuSkill('twluannian', player);
+ }).map(i => i.storage.twxiongzheng_target).includes(target);
},
- selectTarget:function(){
- return game.filterPlayer(function(current){
- return current.hasZhuSkill('twluannian',_status.event.player);
- }).map(i=>i.storage.twxiongzheng_target).filter(i=>i&&i.isIn()).length>1?1:-1;
+ selectTarget: function () {
+ return game.filterPlayer(function (current) {
+ return current.hasZhuSkill('twluannian', _status.event.player);
+ }).map(i => i.storage.twxiongzheng_target).filter(i => i && i.isIn()).length > 1 ? 1 : -1;
},
- check:function(card){
- return 6-get.value(card);
+ check: function (card) {
+ return 6 - get.value(card);
},
- content:function(){
+ content: function () {
target.damage();
},
- ai:{
- order:7,
- result:{
- target:function(player,target){
- return get.damageEffect(target,player,target);
+ ai: {
+ order: 7,
+ result: {
+ target: function (player, target) {
+ return get.damageEffect(target, player, target);
}
},
- expose:0.25,
+ expose: 0.25,
},
},
},
},
//鲍信
- twmutao:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterTarget:function(card,player,target){
+ twmutao: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filterTarget: function (card, player, target) {
return target.countCards('h');
},
- content:function(){
+ content: function () {
'step 0'
- event.togive=target.getNext();
- var cards=target.getCards('h',{name:'sha'});
- if(!cards.length){
- game.log('但',target,'没有','#y杀','!');
+ event.togive = target.getNext();
+ var cards = target.getCards('h', { name: 'sha' });
+ if (!cards.length) {
+ game.log('但', target, '没有', '#y杀', '!');
event.finish();
}
'step 1'
- var cards=target.getCards('h',{name:'sha'}),card=cards.randomRemove(1)[0];
- target.give(card,event.togive);
- if(cards.length){
- event.togive=event.togive.getNext();
+ var cards = target.getCards('h', { name: 'sha' }), card = cards.randomRemove(1)[0];
+ target.give(card, event.togive);
+ if (cards.length) {
+ event.togive = event.togive.getNext();
event.redo();
}
'step 2'
target.line(event.togive);
- event.togive.damage(Math.min(2,event.togive.countCards('h',{name:'sha'})),target);
+ event.togive.damage(Math.min(2, event.togive.countCards('h', { name: 'sha' })), target);
},
- ai:{
- order:10,
- result:{
- target:function(player,target){
- var num=0,numx=target.countCards('h',{name:'sha'}),targetx=target;
- for(var i=0; i0&&att2<0) num=0.25;
- if(att1<0&&att2<0) num=4;
- return att1*num*numx*(targetx.countCards('h',{name:'sha'})+1);
+ var att1 = get.attitude(player, target), att2 = get.attitude(player, targetx);
+ if (att1 > 0 && att2 < 0) num = 0.25;
+ if (att1 < 0 && att2 < 0) num = 4;
+ return att1 * num * numx * (targetx.countCards('h', { name: 'sha' }) + 1);
},
},
},
},
- twyimou:{
- audio:2,
- trigger:{global:'damageEnd'},
- filter:function(event,player){
- return event.player.isIn()&&get.distance(player,event.player)<=1;
+ twyimou: {
+ audio: 2,
+ trigger: { global: 'damageEnd' },
+ filter: function (event, player) {
+ return event.player.isIn() && get.distance(player, event.player) <= 1;
},
- logTarget:'player',
- check:function(event,player){
- return get.attitude(player,event.player)>0;
+ logTarget: 'player',
+ check: function (event, player) {
+ return get.attitude(player, event.player) > 0;
},
- content:function(){
+ content: function () {
'step 0'
- if(trigger.player!=player) player.addExpose(0.3);
- var target=get.translation(trigger.player);
- var choiceList=[
- '令'+target+'获得牌堆里的一张【杀】',
- '令'+target+'将一张牌交给另一名角色,然后'+target+'摸两张牌',
- '背水!'+(trigger.player!=player?'将所有手牌交给'+target+',然后':'')+'依次执行以上所有选项',
+ if (trigger.player != player) player.addExpose(0.3);
+ var target = get.translation(trigger.player);
+ var choiceList = [
+ '令' + target + '获得牌堆里的一张【杀】',
+ '令' + target + '将一张牌交给另一名角色,然后' + target + '摸两张牌',
+ '背水!' + (trigger.player != player ? '将所有手牌交给' + target + ',然后' : '') + '依次执行以上所有选项',
];
- var list=['选项一'];
- if(trigger.player.countCards('h')) list.push('选项二');
- else choiceList[1]=''+choiceList[1]+'';
- if(player.countCards('h')) list.push('背水!');
- else choiceList[2]=''+choiceList[2]+'';
- player.chooseControl(list).set('prompt','毅谋:请选择一项').set('choiceList',choiceList).set('ai',function(){
- var evt=_status.event.getTrigger(),list=_status.event.list;
- var player=_status.event.player;
- var target=evt.player;
- if((target.hp>=target.countCards('h')+2||target==player)&&list.includes('背水!')) return '背水!';
- if(target.countCards('h')&&list.includes('选项二')) return '选项二';
+ var list = ['选项一'];
+ if (trigger.player.countCards('h')) list.push('选项二');
+ else choiceList[1] = '' + choiceList[1] + '';
+ if (player.countCards('h')) list.push('背水!');
+ else choiceList[2] = '' + choiceList[2] + '';
+ player.chooseControl(list).set('prompt', '毅谋:请选择一项').set('choiceList', choiceList).set('ai', function () {
+ var evt = _status.event.getTrigger(), list = _status.event.list;
+ var player = _status.event.player;
+ var target = evt.player;
+ if ((target.hp >= target.countCards('h') + 2 || target == player) && list.includes('背水!')) return '背水!';
+ if (target.countCards('h') && list.includes('选项二')) return '选项二';
return '选项一';
- }).set('list',list);
+ }).set('list', list);
'step 1'
- event.choice=result.control;
- if(event.choice=='背水!'&&player!=trigger.player) player.give(player.getCards('h'),trigger.player);
+ event.choice = result.control;
+ if (event.choice == '背水!' && player != trigger.player) player.give(player.getCards('h'), trigger.player);
'step 2'
- if(event.choice!='选项二'){
- var card=get.cardPile2(function(card){
- return card.name=='sha';
+ if (event.choice != '选项二') {
+ var card = get.cardPile2(function (card) {
+ return card.name == 'sha';
});
- if(card) trigger.player.gain(card,'gain2');
- else game.log('但牌堆里已经没有','#y杀','了!');
- if(event.choice=='选项一') event.finish();
+ if (card) trigger.player.gain(card, 'gain2');
+ else game.log('但牌堆里已经没有', '#y杀', '了!');
+ if (event.choice == '选项一') event.finish();
}
'step 3'
- if(event.choice!='选项一'){
- if(trigger.player.countCards('h')) trigger.player.chooseCardTarget({
- prompt:'将一张手牌交给另一名其他角色并摸两张牌',
- filterCard:true,
- forced:true,
- filterTarget:lib.filter.notMe,
- ai1:function(card){
- return 1/Math.max(0.1,get.value(card));
+ if (event.choice != '选项一') {
+ if (trigger.player.countCards('h')) trigger.player.chooseCardTarget({
+ prompt: '将一张手牌交给另一名其他角色并摸两张牌',
+ filterCard: true,
+ forced: true,
+ filterTarget: lib.filter.notMe,
+ ai1: function (card) {
+ return 1 / Math.max(0.1, get.value(card));
},
- ai2:function(target){
- var player=_status.event.player,att=get.attitude(player,target);
- if(target.hasSkillTag('nogain')) att/=9;
- return 4+att;
+ ai2: function (target) {
+ var player = _status.event.player, att = get.attitude(player, target);
+ if (target.hasSkillTag('nogain')) att /= 9;
+ return 4 + att;
},
});
else event.finish();
}
'step 4'
- var target=result.targets[0];
+ var target = result.targets[0];
trigger.player.line(target);
- trigger.player.give(result.cards,target);
+ trigger.player.give(result.cards, target);
trigger.player.draw(2);
},
- ai:{
- threaten:2.5,
+ ai: {
+ threaten: 2.5,
},
},
//刘夫人
- twzhuidu:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current!=player&¤t.isDamaged();
+ twzhuidu: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player && current.isDamaged();
});
},
- filterTarget:function(card,player,target){
- if(player==target) return false;
+ filterTarget: function (card, player, target) {
+ if (player == target) return false;
return target.isDamaged();
},
- chooseButton:{
- dialog:function(event,player){
- var name=get.translation(event.result.targets[0]);
- var dialog=ui.create.dialog('追妒:选择一项','hidden');
+ chooseButton: {
+ dialog: function (event, player) {
+ var name = get.translation(event.result.targets[0]);
+ var dialog = ui.create.dialog('追妒:选择一项', 'hidden');
dialog.add([[
- ['damage','对'+name+'造成1点伤害'],
- ['discard','弃置'+name+'装备区里的一张牌'],
- ['both','背水!若该角色为女性,弃置一张牌,然后依次执行以上所有选项'],
- ],'textbutton']);
+ ['damage', '对' + name + '造成1点伤害'],
+ ['discard', '弃置' + name + '装备区里的一张牌'],
+ ['both', '背水!若该角色为女性,弃置一张牌,然后依次执行以上所有选项'],
+ ], 'textbutton']);
return dialog;
},
- filter:function(button,player){
- var target=_status.event.getParent().result.targets[0];
- var link=button.link;
- if(link=='damage') return true;
- if(link=='discard') return target.countCards('e');
- return target.hasSex('female')&&player.countDiscardableCards(player,'he')>0;
+ filter: function (button, player) {
+ var target = _status.event.getParent().result.targets[0];
+ var link = button.link;
+ if (link == 'damage') return true;
+ if (link == 'discard') return target.countCards('e');
+ return target.hasSex('female') && player.countDiscardableCards(player, 'he') > 0;
},
- check:function(button){
- switch (button.link){
+ check: function (button) {
+ switch (button.link) {
case 'damage':
return 10;
case 'discard':
@@ -4223,1081 +4223,1081 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 15;
}
},
- backup:function(links){
- var backup={
- audio:'twzhuidu',
- target:_status.event.result.targets[0],
- choice:links[0],
- filterTarget:function(card,player,target){
- return target==lib.skill.twzhuidu_backup.target;
+ backup: function (links) {
+ var backup = {
+ audio: 'twzhuidu',
+ target: _status.event.result.targets[0],
+ choice: links[0],
+ filterTarget: function (card, player, target) {
+ return target == lib.skill.twzhuidu_backup.target;
},
- selectTarget:-1,
- content:function(){
- var target=lib.skill.twzhuidu_backup.target;
- var choice=lib.skill.twzhuidu_backup.choice;
- if(choice!='discard') target.damage();
- if(choice!='damage') player.discardPlayerCard(target,'e',true);
+ selectTarget: -1,
+ content: function () {
+ var target = lib.skill.twzhuidu_backup.target;
+ var choice = lib.skill.twzhuidu_backup.choice;
+ if (choice != 'discard') target.damage();
+ if (choice != 'damage') player.discardPlayerCard(target, 'e', true);
}
}
- if(links[0]=='both'){
- backup.filterCard=true;
- backup.position='he';
+ if (links[0] == 'both') {
+ backup.filterCard = true;
+ backup.position = 'he';
}
return backup;
},
- prompt:function(links){
- var name=get.translation(_status.event.result.targets[0]);
- switch (links[0]){
+ prompt: function (links) {
+ var name = get.translation(_status.event.result.targets[0]);
+ switch (links[0]) {
case 'damage':
- return '对'+name+'造成1点伤害';
+ return '对' + name + '造成1点伤害';
case 'discard':
- return '弃置'+name+'装备区里的一张牌';
+ return '弃置' + name + '装备区里的一张牌';
case 'both':
- return '背水!弃置一张牌,然后对'+name+'造成1点伤害并弃置其装备区里的一张牌';
+ return '背水!弃置一张牌,然后对' + name + '造成1点伤害并弃置其装备区里的一张牌';
}
},
},
- subSkill:{
- backup:{},
+ subSkill: {
+ backup: {},
},
- ai:{
- order:7,
- result:{
- target:function(player,target){
- if(target.hasSex('female')&&target.countCards('e')&&player.countCards('he')) return -2;
+ ai: {
+ order: 7,
+ result: {
+ target: function (player, target) {
+ if (target.hasSex('female') && target.countCards('e') && player.countCards('he')) return -2;
return -1;
},
},
},
},
- twshigong:{
- audio:2,
- trigger:{player:'dying'},
- filter:function(event,player){
- var target=_status.currentPhase;
- return player.hp<=0&&target&&target.isIn()&&target!=player;
+ twshigong: {
+ audio: 2,
+ trigger: { player: 'dying' },
+ filter: function (event, player) {
+ var target = _status.currentPhase;
+ return player.hp <= 0 && target && target.isIn() && target != player;
},
- skillAnimation:true,
- animationColor:'gray',
- limited:true,
- logTarget:function(event,player){
+ skillAnimation: true,
+ animationColor: 'gray',
+ limited: true,
+ logTarget: function (event, player) {
return _status.currentPhase;
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twshigong');
- var target=_status.currentPhase;
- if(target.hp<=0) event._result={bool:false};
- else target.chooseToDiscard('h',target.hp,get.translation(player)+'对你发动了【示恭】,是否弃置'+get.cnNumber(target.hp)+'张手牌?','若如此做,其将体力回复至1点;或者点击“取消”加1点体力上限并回复1点体力,摸一张牌,然后其将体力回复至体力上限').set('ai',card=>{
- if(!_status.event.goon) return 0;
- return 7-get.value(card);
- }).set('goon',get.attitude(target,player)>=0);
+ var target = _status.currentPhase;
+ if (target.hp <= 0) event._result = { bool: false };
+ else target.chooseToDiscard('h', target.hp, get.translation(player) + '对你发动了【示恭】,是否弃置' + get.cnNumber(target.hp) + '张手牌?', '若如此做,其将体力回复至1点;或者点击“取消”加1点体力上限并回复1点体力,摸一张牌,然后其将体力回复至体力上限').set('ai', card => {
+ if (!_status.event.goon) return 0;
+ return 7 - get.value(card);
+ }).set('goon', get.attitude(target, player) >= 0);
'step 1'
- var target=_status.currentPhase;
- if(result.bool){
- var num=1-player.hp;
- if(num>0) player.recover(num);
+ var target = _status.currentPhase;
+ if (result.bool) {
+ var num = 1 - player.hp;
+ if (num > 0) player.recover(num);
event.finish();
}
- else{
+ else {
target.gainMaxHp();
target.recover();
target.draw();
}
'step 2'
- var num=player.maxHp-player.hp;
- if(num>0) player.recover(num);
+ var num = player.maxHp - player.hp;
+ if (num > 0) player.recover(num);
},
},
//王淩
- twmibei:{
- audio:'mibei',
- trigger:{player:'useCardAfter'},
- group:['twmibei_mark','twmibei_fail'],
- forced:true,
- locked:false,
- direct:true,
- dutySkill:true,
- derivation:'twmouli',
- filter:function(event,player){
- var map={basic:0,trick:0,equip:0};
- for(var name of player.getStorage('twmibei')){
- var type=get.type2(name);
- if(typeof map[type]=='number') map[type]++;
+ twmibei: {
+ audio: 'mibei',
+ trigger: { player: 'useCardAfter' },
+ group: ['twmibei_mark', 'twmibei_fail'],
+ forced: true,
+ locked: false,
+ direct: true,
+ dutySkill: true,
+ derivation: 'twmouli',
+ filter: function (event, player) {
+ var map = { basic: 0, trick: 0, equip: 0 };
+ for (var name of player.getStorage('twmibei')) {
+ var type = get.type2(name);
+ if (typeof map[type] == 'number') map[type]++;
}
- for(var i in map){
- if(map[i]<2) return false;
+ for (var i in map) {
+ if (map[i] < 2) return false;
}
return true;
},
- content:function(){
+ content: function () {
player.awakenSkill('twmibei');
player.logSkill('twmibei_achieve');
- game.log(player,'成功完成使命');
- player.addSkils('twmouli');
+ game.log(player, '成功完成使命');
+ player.addSkills('twmouli');
},
- intro:{content:'已使用牌名:$'},
- subSkill:{
- achieve:{
- audio:'mibei1',
- skillAnimation:true,
- animationColor:'water',
+ intro: { content: '已使用牌名:$' },
+ subSkill: {
+ achieve: {
+ audio: 'mibei1',
+ skillAnimation: true,
+ animationColor: 'water',
},
- mark:{
- trigger:{player:'useCard1'},
- filter:function(event,player){
+ mark: {
+ trigger: { player: 'useCard1' },
+ filter: function (event, player) {
return !player.getStorage('twmibei').includes(event.card.name);
},
- charlotte:true,
- forced:true,
- silent:true,
- dutySkill:true,
- content:function(){
- player.markAuto('twmibei',[trigger.card.name]);
+ charlotte: true,
+ forced: true,
+ silent: true,
+ dutySkill: true,
+ content: function () {
+ player.markAuto('twmibei', [trigger.card.name]);
},
},
- fail:{
- audio:'mibei2',
- trigger:{player:'phaseUseEnd'},
- forced:true,
- filter:function(event,player){
+ fail: {
+ audio: 'mibei2',
+ trigger: { player: 'phaseUseEnd' },
+ forced: true,
+ filter: function (event, player) {
return !player.getHistory('useCard').length;
},
- content:function(){
- game.log(player,'使命失败');
+ content: function () {
+ game.log(player, '使命失败');
delete player.storage.twmibei;
player.addTempSkill('twmibei_less');
- player.addMark('twmibei_less',1,false);
+ player.addMark('twmibei_less', 1, false);
},
},
- less:{
- charlotte:true,
- marktext:'缚',
- intro:{content:'本回合手牌上限-#'},
- mod:{
- maxHandcard:function(player,num){
- return num-player.countMark('twmibei_less');
+ less: {
+ charlotte: true,
+ marktext: '缚',
+ intro: { content: '本回合手牌上限-#' },
+ mod: {
+ maxHandcard: function (player, num) {
+ return num - player.countMark('twmibei_less');
},
},
},
},
},
- twxingqi:{
- audio:'xingqi',
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- var num=0;
- game.countPlayer(function(current){
- num+=current.countCards('ej');
+ twxingqi: {
+ audio: 'xingqi',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ var num = 0;
+ game.countPlayer(function (current) {
+ num += current.countCards('ej');
});
- return num>player.hp;
+ return num > player.hp;
},
- forced:true,
- juexingji:true,
- skillAnimation:true,
- animationColor:'thunder',
- content:function(){
+ forced: true,
+ juexingji: true,
+ skillAnimation: true,
+ animationColor: 'thunder',
+ content: function () {
player.awakenSkill('twxingqi');
player.recover();
- if(!player.awakenedSkills.includes('twmibei')){
- var list=['basic','equip','trick'],cards=[];
- for(var i of list){
- var card=get.cardPile2(function(card){
- return get.type(card)==i;
+ if (!player.awakenedSkills.includes('twmibei')) {
+ var list = ['basic', 'equip', 'trick'], cards = [];
+ for (var i of list) {
+ var card = get.cardPile2(function (card) {
+ return get.type(card) == i;
});
- if(card) cards.push(card);
+ if (card) cards.push(card);
}
- if(cards.length) player.gain(cards,'gain2');
+ if (cards.length) player.gain(cards, 'gain2');
}
else player.addSkill('twxingqi_range');
},
- subSkill:{
- range:{
- charlotte:true,
- mark:true,
- marktext:'启',
- mod:{
- targetInRange:()=>true,
+ subSkill: {
+ range: {
+ charlotte: true,
+ mark: true,
+ marktext: '启',
+ mod: {
+ targetInRange: () => true,
},
- intro:{content:'使用牌无距离限制'},
+ intro: { content: '使用牌无距离限制' },
},
},
},
- twmouli:{
- audio:'mouli',
- enable:'chooseToUse',
- filter:function(event,player){
- if(event.type=='wuxie') return false;
- if(player.hasSkill('twmouli_used')) return false;
- if(!Array.isArray(event.twmouli)) return false;
- for(var card of event.twmouli){
- if(event.filterCard(card,player,event)) return true;
+ twmouli: {
+ audio: 'mouli',
+ enable: 'chooseToUse',
+ filter: function (event, player) {
+ if (event.type == 'wuxie') return false;
+ if (player.hasSkill('twmouli_used')) return false;
+ if (!Array.isArray(event.twmouli)) return false;
+ for (var card of event.twmouli) {
+ if (event.filterCard(card, player, event)) return true;
}
return false;
},
- onChooseToUse:function(event){
- if(game.online||!event.player.hasSkill('twmouli')) return;
- var cards=[];
- for(var i=0;ifalse,
- selectCard:-1,
- viewAs:{name:links[0].name,isCard:true,cards:[links[0]]},
- popname:true,
- precontent:function(){
+ audio: 'mouli',
+ filterCard: () => false,
+ selectCard: -1,
+ viewAs: { name: links[0].name, isCard: true, cards: [links[0]] },
+ popname: true,
+ precontent: function () {
player.logSkill('twmouli');
player.addTempSkill('twmouli_used');
delete event.result.skill;
- var name=event.result.card.name;
- event.result.cards=event.result.card.cards;
- event.result.card=get.autoViewAs(event.result.cards[0]);
- event.result.card.name=name;
- var next=game.createEvent('twmouli_update');
+ var name = event.result.card.name;
+ event.result.cards = event.result.card.cards;
+ event.result.card = get.autoViewAs(event.result.cards[0]);
+ event.result.card.name = name;
+ var next = game.createEvent('twmouli_update');
event.next.remove(next);
event.getParent().after.push(next);
- next.setContent(function(){game.updateRoundNumber()});
+ next.setContent(function () { game.updateRoundNumber() });
},
}
},
- prompt:function(links,player){
- return '使用牌堆中的'+get.translation(links);
+ prompt: function (links, player) {
+ return '使用牌堆中的' + get.translation(links);
},
},
- hiddenCard:function(player,name){
- return get.type(name)=='basic'&&!player.getStat('skill').twmouli;
+ hiddenCard: function (player, name) {
+ return get.type(name) == 'basic' && !player.getStat('skill').twmouli;
},
- subSkill:{
- used:{charlotte:true},
+ subSkill: {
+ used: { charlotte: true },
},
- ai:{
- effect:{
- target:function(card,player,target,effect){
- if(get.tag(card,'respondShan')) return 0.7;
- if(get.tag(card,'respondSha')) return 0.7;
+ ai: {
+ effect: {
+ target: function (card, player, target, effect) {
+ if (get.tag(card, 'respondShan')) return 0.7;
+ if (get.tag(card, 'respondSha')) return 0.7;
},
},
- order:11,
- respondSha:true,
- respondShan:true,
- fireAttack:true,
- skillTagFilter:function(player,tag,arg){
- if(arg=='respond') return false;
- var list=[];
- for(var i=0;icards.some(card=>get.type2(card)==type));
- player.chooseControl(list).set('ai',function(){
- var listy=['basic','trick','equip'],listz=[0,0,0];
- var num=0,numx=0,num2=0,numx2=0;
- for(var i of _status.event.getParent().cards){
- for(var j=0;j<2;j++){
- if(get.type2(i)==listy[j]) listz[j]++;
+ var list = ['basic', 'trick', 'equip'].filter(type => cards.some(card => get.type2(card) == type));
+ player.chooseControl(list).set('ai', function () {
+ var listy = ['basic', 'trick', 'equip'], listz = [0, 0, 0];
+ var num = 0, numx = 0, num2 = 0, numx2 = 0;
+ for (var i of _status.event.getParent().cards) {
+ for (var j = 0; j < 2; j++) {
+ if (get.type2(i) == listy[j]) listz[j]++;
}
}
- for(var k=0;k<2;k++){
- if(listz[k]>num){
- num=listz[k];
- numx=k;
+ for (var k = 0; k < 2; k++) {
+ if (listz[k] > num) {
+ num = listz[k];
+ numx = k;
}
- if(listz[k]2) return listy[numx2];
+ if (!_status.event.player.hasFriend() && player.hp > 2) return listy[numx2];
return listy[numx];
});
'step 2'
- game.broadcastAll('closeDialog',event.videoId);
- event.cardsx=[];
- var type=result.control;
- for(var j of cards){
- if(type==get.type2(j)) event.cardsx.push(j);
+ game.broadcastAll('closeDialog', event.videoId);
+ event.cardsx = [];
+ var type = result.control;
+ for (var j of cards) {
+ if (type == get.type2(j)) event.cardsx.push(j);
}
- var time=1000-(get.utc()-event.time);
- if(time>0) game.delay(0,time);
- player.$gain2(event.cardsx,false);
+ var time = 1000 - (get.utc() - event.time);
+ if (time > 0) game.delay(0, time);
+ player.$gain2(event.cardsx, false);
game.delayx();
- if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
- event.given_map={};
- event.num=0;
+ if (_status.connectMode) game.broadcastAll(function () { _status.noclearcountdown = true });
+ event.given_map = {};
+ event.num = 0;
'step 3'
- if(event.cardsx.length>1){
- player.chooseCardButton('兴乱:请选择要分配的牌',true,event.cardsx,[1,Math.min(3,event.cardsx.length)]).set('ai',function(button){
- if(ui.selected.buttons.length==0) return 1;
+ if (event.cardsx.length > 1) {
+ player.chooseCardButton('兴乱:请选择要分配的牌', true, event.cardsx, [1, Math.min(3, event.cardsx.length)]).set('ai', function (button) {
+ if (ui.selected.buttons.length == 0) return 1;
return 0;
});
}
- else if(event.cardsx.length==1){
- event._result={links:event.cardsx.slice(0),bool:true};
+ else if (event.cardsx.length == 1) {
+ event._result = { links: event.cardsx.slice(0), bool: true };
}
- else{
+ else {
event.goto(6);
}
'step 4'
- if(result.bool){
- var cards=result.links;
- event.togive=cards.slice(0);
- player.chooseTarget('选择获得'+get.translation(cards)+'的角色',event.cardsx.length==1,(card,player,target)=>{
- var map=_status.event.getParent().given_map;
- var togive=_status.event.getParent().togive;
- return (map[target.playerid]||[]).length+togive.length<=3;
- }).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target);
- var map=_status.event.getParent().given_map;
- var togive=_status.event.getParent().togive;
- var num=(map[player.playerid]||[]).length,num2=(map[target.playerid]||[]).length;
- var value=_status.event.value,eff=get.effect(target,{name:'losehp'},player,player);
- if(num2+togive.length==num&&player!=target) return value*Math.sign(att)+eff+1000;
- else{
- if(value<0) return -att+1000;
- else if(att>0) return 1.5*att/(1+target.countCards('h'))+(player==target?eff/3:0)+1000;
- else return att/100+1000;
+ if (result.bool) {
+ var cards = result.links;
+ event.togive = cards.slice(0);
+ player.chooseTarget('选择获得' + get.translation(cards) + '的角色', event.cardsx.length == 1, (card, player, target) => {
+ var map = _status.event.getParent().given_map;
+ var togive = _status.event.getParent().togive;
+ return (map[target.playerid] || []).length + togive.length <= 3;
+ }).set('ai', function (target) {
+ var player = _status.event.player, att = get.attitude(player, target);
+ var map = _status.event.getParent().given_map;
+ var togive = _status.event.getParent().togive;
+ var num = (map[player.playerid] || []).length, num2 = (map[target.playerid] || []).length;
+ var value = _status.event.value, eff = get.effect(target, { name: 'losehp' }, player, player);
+ if (num2 + togive.length == num && player != target) return value * Math.sign(att) + eff + 1000;
+ else {
+ if (value < 0) return -att + 1000;
+ else if (att > 0) return 1.5 * att / (1 + target.countCards('h')) + (player == target ? eff / 3 : 0) + 1000;
+ else return att / 100 + 1000;
}
- }).set('value',cards.reduce((p,c)=>p+get.value(c,player,'raw'),0));
+ }).set('value', cards.reduce((p, c) => p + get.value(c, player, 'raw'), 0));
}
'step 5'
- if(result.bool){
+ if (result.bool) {
event.cardsx.removeArray(event.togive);
- if(result.targets.length){
- var id=result.targets[0].playerid,map=event.given_map;
- if(!map[id]) map[id]=[];
+ if (result.targets.length) {
+ var id = result.targets[0].playerid, map = event.given_map;
+ if (!map[id]) map[id] = [];
map[id].addArray(event.togive);
}
- if(event.cardsx.length>0) event.goto(3);
+ if (event.cardsx.length > 0) event.goto(3);
}
else event.goto(3);
'step 6'
- if(_status.connectMode){
- game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
+ if (_status.connectMode) {
+ game.broadcastAll(function () { delete _status.noclearcountdown; game.stopCountChoose() });
}
- var list=[];
- for(var i in event.given_map){
- var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
- if(player==source) event.num+=event.given_map[i].length;
- player.line(source,'green');
- game.log(source,'获得了',event.given_map[i]);
- list.push([source,event.given_map[i]]);
+ var list = [];
+ for (var i in event.given_map) {
+ var source = (_status.connectMode ? lib.playerOL : game.playerMap)[i];
+ if (player == source) event.num += event.given_map[i].length;
+ player.line(source, 'green');
+ game.log(source, '获得了', event.given_map[i]);
+ list.push([source, event.given_map[i]]);
}
game.loseAsync({
- gain_list:list,
- giver:player,
- animate:'gain2',
+ gain_list: list,
+ giver: player,
+ animate: 'gain2',
}).setContent('gaincardMultiple');
'step 7'
- var list=[];
- for(var i in event.given_map){
- var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
- if(event.given_map[i].length>=num) list.push(source);
+ var list = [];
+ for (var i in event.given_map) {
+ var source = (_status.connectMode ? lib.playerOL : game.playerMap)[i];
+ if (event.given_map[i].length >= num) list.push(source);
}
list.sortBySeat();
player.line(list);
- for(var i of list){
+ for (var i of list) {
i.loseHp();
}
},
},
//许靖
- twboming:{
- audio:'boming',
- enable:'phaseUse',
- usable:2,
- filter:function(event,player){
+ twboming: {
+ audio: 'boming',
+ enable: 'phaseUse',
+ usable: 2,
+ filter: function (event, player) {
return player.countCards('he');
},
- filterCard:true,
- position:'he',
- filterTarget:lib.filter.notMe,
- discard:false,
- lose:false,
- delay:false,
- content:function(){
- player.give(cards,target);
+ filterCard: true,
+ position: 'he',
+ filterTarget: lib.filter.notMe,
+ discard: false,
+ lose: false,
+ delay: false,
+ content: function () {
+ player.give(cards, target);
},
- check:function(card){
- return 5-get.value(card);
+ check: function (card) {
+ return 5 - get.value(card);
},
- ai:{
- order:10,
- result:{
- target:function(player,target){
- if(!ui.selected.cards.length) return 0;
- var card=ui.selected.cards[0];
- if(get.attitude(player,target)<0&&player.hasSkill('twejian')){
- var dam=get.damageEffect(target,player,target);
- if(dam>0) return dam;
- var type=get.type(card,target),ts=target.getCards('he',function(card){
- return get.type(card)==type;
+ ai: {
+ order: 10,
+ result: {
+ target: function (player, target) {
+ if (!ui.selected.cards.length) return 0;
+ var card = ui.selected.cards[0];
+ if (get.attitude(player, target) < 0 && player.hasSkill('twejian')) {
+ var dam = get.damageEffect(target, player, target);
+ if (dam > 0) return dam;
+ var type = get.type(card, target), ts = target.getCards('he', function (card) {
+ return get.type(card) == type;
});
- if(ts.length){
- var val=get.value(ts,target);
- if(val>get.value(card)) return -Math.max(1,val);
+ if (ts.length) {
+ var val = get.value(ts, target);
+ if (val > get.value(card)) return -Math.max(1, val);
return 0;
}
}
- return get.value(card,target)/1.5;
+ return get.value(card, target) / 1.5;
},
},
},
- group:'twboming_draw',
- subSkill:{
- draw:{
- audio:'boming',
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- locked:false,
- filter:function(event,player){
- var num=0;
- for(var target of game.filterPlayer(i=>i!=player)){
- target.getHistory('gain',evt=>num+=evt.cards.length);
- if(num>1) return true;
+ group: 'twboming_draw',
+ subSkill: {
+ draw: {
+ audio: 'boming',
+ trigger: { player: 'phaseJieshuBegin' },
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ var num = 0;
+ for (var target of game.filterPlayer(i => i != player)) {
+ target.getHistory('gain', evt => num += evt.cards.length);
+ if (num > 1) return true;
}
return false;
},
- content:function(){
+ content: function () {
player.draw(2);
},
},
},
},
- twejian:{
- audio:'ejian',
- trigger:{
- global:['gainAfter','loseAsyncAfter']
+ twejian: {
+ audio: 'ejian',
+ trigger: {
+ global: ['gainAfter', 'loseAsyncAfter']
},
- filter:function(event,player){
- if(event.name=='gain'){
- var cards=event.getg(event.player);
- if(!cards.length) return false;
- var cards2=event.getl(player).cards2;
- for(var i of cards2){
- if(cards.includes(i)&&event.player.countCards('he',card=>{
- return card!=i&&get.type2(card)==get.type2(i);
+ filter: function (event, player) {
+ if (event.name == 'gain') {
+ var cards = event.getg(event.player);
+ if (!cards.length) return false;
+ var cards2 = event.getl(player).cards2;
+ for (var i of cards2) {
+ if (cards.includes(i) && event.player.countCards('he', card => {
+ return card != i && get.type2(card) == get.type2(i);
})) return true;
}
return false;
}
- else{
- if(event.type!='gain') return false;
- var cards=event.getl(player).cards2;
- if(!cards.length) return false;
- return game.hasPlayer(current=>{
- if(current==player) return false;
- var cardsx=event.getg(current);
- for(var i of cardsx){
- if(cards.includes(i)&¤t.countCards('he',card=>{
- return card!=i&&get.type2(card)==get.type2(i);
+ else {
+ if (event.type != 'gain') return false;
+ var cards = event.getl(player).cards2;
+ if (!cards.length) return false;
+ return game.hasPlayer(current => {
+ if (current == player) return false;
+ var cardsx = event.getg(current);
+ for (var i of cardsx) {
+ if (cards.includes(i) && current.countCards('he', card => {
+ return card != i && get.type2(card) == get.type2(i);
})) return true;
}
return false;
});
}
},
- logTarget:function(event,player){
- if(event.name=='gain') return event.player;
- else{
- var cards=event.getl(player).cards2;
- return game.filterPlayer(current=>{
- if(current==player) return false;
- var cardsx=event.getg(current);
- for(var i of cardsx){
- if(cards.includes(i)&¤t.countCards('he',card=>{
- return card!=i&&get.type2(card)==get.type2(i);
+ logTarget: function (event, player) {
+ if (event.name == 'gain') return event.player;
+ else {
+ var cards = event.getl(player).cards2;
+ return game.filterPlayer(current => {
+ if (current == player) return false;
+ var cardsx = event.getg(current);
+ for (var i of cardsx) {
+ if (cards.includes(i) && current.countCards('he', card => {
+ return card != i && get.type2(card) == get.type2(i);
})) return true;
}
return false;
});
}
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- if(trigger.name=='gain') event.targets=[trigger.player];
- else{
- var cards=trigger.getl(player).cards2;
- event.targets=game.filterPlayer(current=>{
- if(current==player) return false;
- var cardsx=trigger.getg(current);
- for(var i of cardsx){
- if(cards.includes(i)&¤t.countCards('he',card=>{
- return card!=i&&get.type2(card)==get.type2(i);
+ if (trigger.name == 'gain') event.targets = [trigger.player];
+ else {
+ var cards = trigger.getl(player).cards2;
+ event.targets = game.filterPlayer(current => {
+ if (current == player) return false;
+ var cardsx = trigger.getg(current);
+ for (var i of cardsx) {
+ if (cards.includes(i) && current.countCards('he', card => {
+ return card != i && get.type2(card) == get.type2(i);
})) return true;
}
return false;
});
}
'step 1'
- var target=event.targets.shift();
- event.target=target;
- player.chooseBool(get.prompt('twejian',target),'当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌').set('ai',()=>{
- return get.attitude(player,_status.event.getParent().target)<0;
+ var target = event.targets.shift();
+ event.target = target;
+ player.chooseBool(get.prompt('twejian', target), '当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌').set('ai', () => {
+ return get.attitude(player, _status.event.getParent().target) < 0;
});
'step 2'
- if(result.bool){
- player.logSkill('twejian',target);
- var cards=trigger.getg(target);
- event.cards=cards;
- event.cardType=[];
- for(var card of cards){
- event.cardType.add(get.type(card,'trick',target));
+ if (result.bool) {
+ player.logSkill('twejian', target);
+ var cards = trigger.getg(target);
+ event.cards = cards;
+ event.cardType = [];
+ for (var card of cards) {
+ event.cardType.add(get.type(card, 'trick', target));
}
- var list=['选项一','选项二'];
- target.chooseControl(list).set('prompt','恶荐:请选择一项').set('choiceList',[
+ var list = ['选项一', '选项二'];
+ target.chooseControl(list).set('prompt', '恶荐:请选择一项').set('choiceList', [
'受到1点伤害',
- '弃置所有除'+get.translation(cards)+'外的'+get.translation(event.cardType)+'牌',
- ]).set('ai',function(){
- var player=_status.event.player;
- var types=_status.event.cardType,cards=player.getCards('he',function(card){
+ '弃置所有除' + get.translation(cards) + '外的' + get.translation(event.cardType) + '牌',
+ ]).set('ai', function () {
+ var player = _status.event.player;
+ var types = _status.event.cardType, cards = player.getCards('he', function (card) {
return types.includes(get.type2(card));
});
- if(cards.length==1) return '选项二';
- if(cards.length>=2){
- for(var i=0; i= 2) {
+ for (var i = 0; i < cards.length; i++) {
+ if (get.tag(cards[i], 'save')) return '选项一';
}
}
- if(player.hp==1) return '选项二';
- for(var i=0; i=8) return '选项一';
+ if (player.hp == 1) return '选项二';
+ for (var i = 0; i < cards.length; i++) {
+ if (get.value(cards[i]) >= 8) return '选项一';
}
- if(cards.length>2&&player.hp>2) return '选项一';
- if(cards.length>3) return '选项一';
+ if (cards.length > 2 && player.hp > 2) return '选项一';
+ if (cards.length > 3) return '选项一';
return '选项二';
- }).set('cardType',event.cardType);
+ }).set('cardType', event.cardType);
}
else event.goto(4);
'step 3'
- if(result.control=='选项一') target.damage();
- else target.discard(target.getCards('he',card=>{
- return event.cardType.includes(get.type2(card))&&!cards.includes(card);
+ if (result.control == '选项一') target.damage();
+ else target.discard(target.getCards('he', card => {
+ return event.cardType.includes(get.type2(card)) && !cards.includes(card);
}));
'step 4'
- if(event.targets.length>0) event.goto(1);
+ if (event.targets.length > 0) event.goto(1);
else event.finish();
},
- ai:{
- expose:0.3,
+ ai: {
+ expose: 0.3,
},
},
//张飞
- twxuhe:{
- audio:'retishen',
- trigger:{player:'shaMiss'},
- check:function(event,player){
- return get.attitude(player,event.target)<0;
+ twxuhe: {
+ audio: 'retishen',
+ trigger: { player: 'shaMiss' },
+ check: function (event, player) {
+ return get.attitude(player, event.target) < 0;
},
- logTarget:'target',
- content:function(){
+ logTarget: 'target',
+ content: function () {
'step 0'
- trigger.target.chooseControl().set('choiceList',[
- '受到'+get.translation(player)+'对你造成的1点伤害',
- '令'+get.translation(player)+'使用的下一张牌对你造成的伤害+2'
- ]).set('ai',function(){
- var target=_status.event.player,player=_status.event.getParent().player;
- if(target.hp<=3&&target.hp>1&&player.countCards('hs',function(card){
- return get.tag(card,'damage')&&player.canUse(card,target);
- })>0) return 0;
+ trigger.target.chooseControl().set('choiceList', [
+ '受到' + get.translation(player) + '对你造成的1点伤害',
+ '令' + get.translation(player) + '使用的下一张牌对你造成的伤害+2'
+ ]).set('ai', function () {
+ var target = _status.event.player, player = _status.event.getParent().player;
+ if (target.hp <= 3 && target.hp > 1 && player.countCards('hs', function (card) {
+ return get.tag(card, 'damage') && player.canUse(card, target);
+ }) > 0) return 0;
return 1;
});
'step 1'
- var target=trigger.target;
- switch (result.index){
+ var target = trigger.target;
+ switch (result.index) {
case 0:
- player.line(target,'fire');
+ player.line(target, 'fire');
target.damage();
break;
case 1:
- target.line(player,'fire');
- player.storage.twxuhe_damage=target;
- trigger.getParent().twxuhe=true;
+ target.line(player, 'fire');
+ player.storage.twxuhe_damage = target;
+ trigger.getParent().twxuhe = true;
player.addTempSkill('twxuhe_damage');
break;
}
},
- subSkill:{
- damage:{
- charlotte:true,
- onremove:true,
- mark:true,
- intro:{content:'本回合使用的下一张牌对$造成伤害时,此伤害+2'},
- trigger:{
- source:'damageBegin1',
- player:'useCardAfter',
+ subSkill: {
+ damage: {
+ charlotte: true,
+ onremove: true,
+ mark: true,
+ intro: { content: '本回合使用的下一张牌对$造成伤害时,此伤害+2' },
+ trigger: {
+ source: 'damageBegin1',
+ player: 'useCardAfter',
},
- direct:true,
- filter:function(event,player){
- if(event.name=='useCard') return !event.twxuhe;
- if(!event.card) return false;
- var evt=event.getParent(2);
- var history=player.getHistory('useCard');
- return evt.name=='useCard'&&history[history.indexOf(evt)-1].twxuhe;
+ direct: true,
+ filter: function (event, player) {
+ if (event.name == 'useCard') return !event.twxuhe;
+ if (!event.card) return false;
+ var evt = event.getParent(2);
+ var history = player.getHistory('useCard');
+ return evt.name == 'useCard' && history[history.indexOf(evt) - 1].twxuhe;
},
- content:function(){
- if(trigger.name!='useCard') trigger.num+=2;
+ content: function () {
+ if (trigger.name != 'useCard') trigger.num += 2;
player.removeSkill('twxuhe_damage');
},
}
},
},
//薛综
- twjiexun:{
- intro:{content:'已发动#次'},
- audio:'jiexun',
- trigger:{player:'phaseJieshuBegin'},
- onremove:true,
- direct:true,
- derivation:['twfunanx','twjiexunx'],
- content:function(){
+ twjiexun: {
+ intro: { content: '已发动#次' },
+ audio: 'jiexun',
+ trigger: { player: 'phaseJieshuBegin' },
+ onremove: true,
+ direct: true,
+ derivation: ['twfunanx', 'twjiexunx'],
+ content: function () {
'step 0'
- var suits={};
- game.countPlayer(current=>{
- for(var card of current.getCards('ej')) {
- if(typeof suits[get.suit(card)]!='number') suits[get.suit(card)]=0;
+ var suits = {};
+ game.countPlayer(current => {
+ for (var card of current.getCards('ej')) {
+ if (typeof suits[get.suit(card)] != 'number') suits[get.suit(card)] = 0;
suits[get.suit(card)]++;
}
});
- var choices=lib.suit.slice();
+ var choices = lib.suit.slice();
choices.push('cancel2');
- var str=lib.suit.map(suit=>{
- return get.translation(suit)+':'+get.cnNumber(suits[suit]||0)+'张'
+ var str = lib.suit.map(suit => {
+ return get.translation(suit) + ':' + get.cnNumber(suits[suit] || 0) + '张'
}).join(';');
- player.chooseControl(choices).set('prompt',get.prompt('twjiexun')+'(已发动过'+get.cnNumber(player.countMark('twjiexun'))+'次)').set('ai',function(){
- var player=_status.event.player;
- var map={};
- game.countPlayer(current=>{
- for(var card of current.getCards('ej')) {
- if(typeof map[get.suit(card)]!='number') map[get.suit(card)]=0;
+ player.chooseControl(choices).set('prompt', get.prompt('twjiexun') + '(已发动过' + get.cnNumber(player.countMark('twjiexun')) + '次)').set('ai', function () {
+ var player = _status.event.player;
+ var map = {};
+ game.countPlayer(current => {
+ for (var card of current.getCards('ej')) {
+ if (typeof map[get.suit(card)] != 'number') map[get.suit(card)] = 0;
map[get.suit(card)]++;
}
});
- for(var suit in map) map[suit]=Math.abs(map[suit]);
- var bool=game.hasPlayer(current=>get.attitude(player,current)>0&&player!=current);
- var list=lib.suit.slice().sort((a,b)=>(bool?1:-1)*((map[b]||0)-(map[a]||0)));
- if(bool&&map[list[0]]>0||!bool||player.hasMark('twjiexun')) return list[0];
+ for (var suit in map) map[suit] = Math.abs(map[suit]);
+ var bool = game.hasPlayer(current => get.attitude(player, current) > 0 && player != current);
+ var list = lib.suit.slice().sort((a, b) => (bool ? 1 : -1) * ((map[b] || 0) - (map[a] || 0)));
+ if (bool && map[list[0]] > 0 || !bool || player.hasMark('twjiexun')) return list[0];
return 'cancel2';
- }).set('prompt2',get.skillInfoTranslation('twjiexun',player)+'
'+str);
+ }).set('prompt2', get.skillInfoTranslation('twjiexun', player) + '
' + str);
'step 1'
- if(result.control!='cancel2'){
- var suit=result.control;
- event.suit=suit;
- var num1=game.countPlayer(function(current){
- return current.countCards('ej',{suit:suit});
+ if (result.control != 'cancel2') {
+ var suit = result.control;
+ event.suit = suit;
+ var num1 = game.countPlayer(function (current) {
+ return current.countCards('ej', { suit: suit });
});
- var num2=player.countMark('twjiexun');
- event.num1=num1;
- event.num2=num2;
- var str='令一名其他角色摸'+get.cnNumber(num1)+'张牌';
- if(num2) str+=',然后弃置'+get.cnNumber(num2)+'张牌';
- player.chooseTarget('请选择【诫训】的目标',str,lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target);
- return _status.event.eff*get.sgn(att)+att/114514;
- }).set('eff',num1>=num2&&num1>0?1:-1);
+ var num2 = player.countMark('twjiexun');
+ event.num1 = num1;
+ event.num2 = num2;
+ var str = '令一名其他角色摸' + get.cnNumber(num1) + '张牌';
+ if (num2) str += ',然后弃置' + get.cnNumber(num2) + '张牌';
+ player.chooseTarget('请选择【诫训】的目标', str, lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player, att = get.attitude(player, target);
+ return _status.event.eff * get.sgn(att) + att / 114514;
+ }).set('eff', num1 >= num2 && num1 > 0 ? 1 : -1);
}
else event.finish();
'step 2'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twjiexun',target);
- if(player.hasMark('twjiexun')||event.num1) player.addExpose(0.2);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twjiexun', target);
+ if (player.hasMark('twjiexun') || event.num1) player.addExpose(0.2);
player.popup(event.suit);
- game.log(player,'选择了','#y'+get.translation(event.suit));
- player.addMark('twjiexun',1,false);
- if(event.num1) target.draw(event.num1);
+ game.log(player, '选择了', '#y' + get.translation(event.suit));
+ player.addMark('twjiexun', 1, false);
+ if (event.num1) target.draw(event.num1);
}
else event.finish();
'step 3'
- if(event.num2) target.chooseToDiscard(event.num2,true,'he');
+ if (event.num2) target.chooseToDiscard(event.num2, true, 'he');
else event.finish();
'step 4'
- if(result.bool&&result.autochoose&&result.cards.length==result.rawcards.length&&!player.hasSkill('funan_jiexun')){
- player.chooseControl().set('choiceList',[
- '摸'+get.cnNumber(event.num2)+'张牌,将【诫训】的发动次数归零',
+ if (result.bool && result.autochoose && result.cards.length == result.rawcards.length && !player.hasSkill('funan_jiexun')) {
+ player.chooseControl().set('choiceList', [
+ '摸' + get.cnNumber(event.num2) + '张牌,将【诫训】的发动次数归零',
'修改【复难】和【诫训】'
- ]).set('ai',()=>_status.event.choice).set('prompt','诫训:选择一项').set('choice',event.num2>=4?0:(event.num2<=1?1:[0,1].randomGet()));
+ ]).set('ai', () => _status.event.choice).set('prompt', '诫训:选择一项').set('choice', event.num2 >= 4 ? 0 : (event.num2 <= 1 ? 1 : [0, 1].randomGet()));
}
else event.finish();
'step 5'
- if(result.index==0){
+ if (result.index == 0) {
player.draw(event.num2);
- player.removeMark('twjiexun',player.countMark('twjiexun'),false);
- game.log(player,'归零了','#g【诫训】','的发动次数');
+ player.removeMark('twjiexun', player.countMark('twjiexun'), false);
+ game.log(player, '归零了', '#g【诫训】', '的发动次数');
}
else {
- game.log(player,'修改了','#g【复难】','和','#g【诫训】');
+ game.log(player, '修改了', '#g【复难】', '和', '#g【诫训】');
player.addSkill('funan_jiexun');
}
},
},
//张宁
- twxingzhui:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- mahouSkill:true,
- filter:function(event,player){
+ twxingzhui: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ mahouSkill: true,
+ filter: function (event, player) {
return !player.hasSkill('twxingzhui_mahou');
},
- content:function(){
+ content: function () {
'step 0'
player.loseHp();
- player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
return 2;
});
'step 1'
- player.storage.twxingzhui_mahou=[result.index+1,result.index+1];
- player.addTempSkill('twxingzhui_mahou',{player:'die'});
+ player.storage.twxingzhui_mahou = [result.index + 1, result.index + 1];
+ player.addTempSkill('twxingzhui_mahou', { player: 'die' });
},
- ai:{
- order:2,
- result:{
- player:function(player,target){
- if(!player.hasFriend()) return 0;
- if(player.hp>1) return 1;
+ ai: {
+ order: 2,
+ result: {
+ player: function (player, target) {
+ if (!player.hasFriend()) return 0;
+ if (player.hp > 1) return 1;
return 0;
},
},
},
- subSkill:{
- mahou:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
+ subSkill: {
+ mahou: {
+ trigger: { global: 'phaseEnd' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
'step 0'
- var list=player.storage.twxingzhui_mahou;
+ var list = player.storage.twxingzhui_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的','#g星坠','魔法生效');
+ if (list[1] == 0) {
+ game.log(player, '的', '#g星坠', '魔法生效');
player.logSkill('twxingzhui');
- var num=list[0];
- event.num=num;
- var cards=game.cardsGotoOrdering(get.cards(num*2)).cards;
- event.cards=cards;
- player.showCards(cards,get.translation(player)+'发动了【星坠】');
+ var num = list[0];
+ event.num = num;
+ var cards = game.cardsGotoOrdering(get.cards(num * 2)).cards;
+ event.cards = cards;
+ player.showCards(cards, get.translation(player) + '发动了【星坠】');
player.removeSkill('twxingzhui_mahou');
}
- else{
- game.log(player,'的','#g星坠','魔法剩余','#g'+(list[1])+'回合');
+ else {
+ game.log(player, '的', '#g星坠', '魔法剩余', '#g' + (list[1]) + '回合');
player.markSkill('twxingzhui_mahou');
event.finish();
}
'step 1'
- var cards2=[];
- for(var card of event.cards){
- if(get.color(card,false)=='black') cards2.push(card);
+ var cards2 = [];
+ for (var card of event.cards) {
+ if (get.color(card, false) == 'black') cards2.push(card);
}
- if(!cards2.length) event.finish();
- else{
- event.cards2=cards2;
- var str='令一名其他角色获得其中的黑色牌('+get.translation(cards2)+')';
- if(cards2.length>=event.num) str+=',然后对其造成'+get.cnNumber(event.num)+'点伤害';
- player.chooseTarget('请选择〖星坠〗的目标',str,lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- if(_status.event.getParent().cards2.length>=_status.event.getParent().num) return get.damageEffect(target,player,player,'thunder');
- return get.attitude(player,target);
+ if (!cards2.length) event.finish();
+ else {
+ event.cards2 = cards2;
+ var str = '令一名其他角色获得其中的黑色牌(' + get.translation(cards2) + ')';
+ if (cards2.length >= event.num) str += ',然后对其造成' + get.cnNumber(event.num) + '点伤害';
+ player.chooseTarget('请选择〖星坠〗的目标', str, lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player;
+ if (_status.event.getParent().cards2.length >= _status.event.getParent().num) return get.damageEffect(target, player, player, 'thunder');
+ return get.attitude(player, target);
});
}
'step 2'
- if(result.bool){
- var target=result.targets[0];
+ if (result.bool) {
+ var target = result.targets[0];
player.line(target);
- target.gain(event.cards2,'gain2');
- if(event.cards2.length>=num) target.damage(event.num,'thunder');
+ target.gain(event.cards2, 'gain2');
+ if (event.cards2.length >= num) target.damage(event.num, 'thunder');
}
},
- mark:true,
- onremove:true,
- marktext:'♗',
- intro:{
- name:'施法:星坠',
- markcount:function(storage){
- if(storage) return storage[1];
+ mark: true,
+ onremove: true,
+ marktext: '♗',
+ intro: {
+ name: '施法:星坠',
+ markcount: function (storage) {
+ if (storage) return storage[1];
return 0;
},
- content:function(storage){
- if(storage) return '经过'+storage[1]+'个“回合结束时”后,亮出牌堆顶的'+get.cnNumber(storage[0]*2)+'张牌并执行后续效果';
+ content: function (storage) {
+ if (storage) return '经过' + storage[1] + '个“回合结束时”后,亮出牌堆顶的' + get.cnNumber(storage[0] * 2) + '张牌并执行后续效果';
return '未指定施法效果';
},
},
},
},
},
- twjuchen:{
- audio:2,
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h')>player.countCards('h');
- })&&game.hasPlayer(function(current){
- return current!=player&¤t.hp>player.hp;
+ twjuchen: {
+ audio: 2,
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player && current.countCards('h') > player.countCards('h');
+ }) && game.hasPlayer(function (current) {
+ return current != player && current.hp > player.hp;
});
},
- logTarget:function(event,player){
+ logTarget: function (event, player) {
return game.players.sortBySeat(player);
},
- content:function(){
+ content: function () {
'step 0'
- event.num=0;
- event.cards=[];
- event.targets=game.players.sortBySeat(player);
+ event.num = 0;
+ event.cards = [];
+ event.targets = game.players.sortBySeat(player);
'step 1'
- var target=targets[num];
- if(target.countCards('he')) target.chooseToDiscard('he',true);
- else event._result={bool:false};
+ var target = targets[num];
+ if (target.countCards('he')) target.chooseToDiscard('he', true);
+ else event._result = { bool: false };
'step 2'
- if(result.bool&&Array.isArray(result.cards)) event.cards.addArray(result.cards);
+ if (result.bool && Array.isArray(result.cards)) event.cards.addArray(result.cards);
event.num++;
- if(event.num1) return false;
- if(_status.dying.length) return false;
- if(player==event.player) return false;
- if(event.target.hp>=player.hp) return false;
- if(!['basic','trick'].includes(get.type(event.card))) return false;
+ twjiekuang: {
+ audio: 2,
+ trigger: { global: 'useCardToTargeted' },
+ filter: function (event, player) {
+ if (!event.target || event.targets.length > 1) return false;
+ if (_status.dying.length) return false;
+ if (player == event.player) return false;
+ if (event.target.hp >= player.hp) return false;
+ if (!['basic', 'trick'].includes(get.type(event.card))) return false;
return true;
},
- usable:1,
- direct:true,
- content:function(){
+ usable: 1,
+ direct: true,
+ content: function () {
'step 0'
- player.chooseControl('失去体力','减体力上限','cancel2').set('prompt',get.prompt2('twjiekuang',trigger.target)).set('ai',function(card){
- if(_status.event.aisave){
- if(player.isDamaged()) return '减体力上限';
+ player.chooseControl('失去体力', '减体力上限', 'cancel2').set('prompt', get.prompt2('twjiekuang', trigger.target)).set('ai', function (card) {
+ if (_status.event.aisave) {
+ if (player.isDamaged()) return '减体力上限';
return '失去体力';
}
return 'cancel2';
- }).set('aisave',function(){
- var save=false;
- if(get.attitude(player,trigger.target)>2){
- if(trigger.card.name=='sha'){
- if(player.countCards('h','shan')||player.getEquip(2) ||
- trigger.target.hp==1||player.hp>trigger.target.hp+1){
- if(!trigger.target.countCards('h','shan')||trigger.target.countCards('h') 2) {
+ if (trigger.card.name == 'sha') {
+ if (player.countCards('h', 'shan') || player.getEquip(2) ||
+ trigger.target.hp == 1 || player.hp > trigger.target.hp + 1) {
+ if (!trigger.target.countCards('h', 'shan') || trigger.target.countCards('h') < player.countCards('h')) {
+ save = true;
}
}
}
- else if(trigger.card.name=='juedou'&&trigger.target.hp==1){
- save=true;
+ else if (trigger.card.name == 'juedou' && trigger.target.hp == 1) {
+ save = true;
}
- else if(trigger.card.name=='shunshou' &&
- get.attitude(player,trigger.player)<0 &&
- get.attitude(trigger.player,trigger.target)<0){
- save=true;
+ else if (trigger.card.name == 'shunshou' &&
+ get.attitude(player, trigger.player) < 0 &&
+ get.attitude(trigger.player, trigger.target) < 0) {
+ save = true;
}
}
return save;
}());
'step 1'
- if(result.control!='cancel2'){
- player.logSkill('twjiekuang',trigger.target);
- player[result.control=='失去体力'?'loseHp':'loseMaxHp']();
+ if (result.control != 'cancel2') {
+ player.logSkill('twjiekuang', trigger.target);
+ player[result.control == '失去体力' ? 'loseHp' : 'loseMaxHp']();
player.addTempSkill('twjiekuang_after');
- trigger.getParent().twjiekuang=true;
+ trigger.getParent().twjiekuang = true;
trigger.getParent().targets.remove(trigger.target);
trigger.getParent().triggeredTargets4.remove(trigger.target);
trigger.getParent().targets.push(player);
@@ -5307,181 +5307,181 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else player.storage.counttrigger.twjiekuang--;
},
- subSkill:{
- after:{
- charlotte:true,
- trigger:{global:'useCardAfter'},
- filter:function(event,player){
+ subSkill: {
+ after: {
+ charlotte: true,
+ trigger: { global: 'useCardAfter' },
+ filter: function (event, player) {
return event.twjiekuang;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
player.removeSkill('twjiekuang_after');
- var card=get.autoViewAs({
- name:trigger.card.name,
- nature:trigger.card.nature,
- isCard:true
+ var card = get.autoViewAs({
+ name: trigger.card.name,
+ nature: trigger.card.nature,
+ isCard: true
});
- if(!game.countPlayer2(current=>{
- return current.hasHistory('damage',evt=>evt.card==trigger.card);
- })&&player.canUse(card,trigger.player,false)){
- player.useCard(card,trigger.player,false);
+ if (!game.countPlayer2(current => {
+ return current.hasHistory('damage', evt => evt.card == trigger.card);
+ }) && player.canUse(card, trigger.player, false)) {
+ player.useCard(card, trigger.player, false);
}
},
},
},
},
- twneirao:{
- audio:2,
- derivation:'twluanlve',
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
- juexingji:true,
- skillAnimation:true,
- animationColor:'gray',
- filter:function(event,player){
- return Math.max(0,player.hp)+player.maxHp<=9;
+ twneirao: {
+ audio: 2,
+ derivation: 'twluanlve',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ forced: true,
+ juexingji: true,
+ skillAnimation: true,
+ animationColor: 'gray',
+ filter: function (event, player) {
+ return Math.max(0, player.hp) + player.maxHp <= 9;
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twneirao');
player.removeSkills('twjiekuang');
'step 1'
- var num=player.countCards('he'),cards=[];
+ var num = player.countCards('he'), cards = [];
player.discard(player.getCards('he'));
- for(var i=0;i=player.countMark('twluanlve');
+ viewAsFilter: function (player) {
+ return player.isPhaseUsing() && player.countCards('hs', { name: 'sha' }) >= player.countMark('twluanlve');
},
- filterCard:function(card,player){
- if(player.countMark('twluanlve')==0) return false;
- return card.name=='sha';
+ filterCard: function (card, player) {
+ if (player.countMark('twluanlve') == 0) return false;
+ return card.name == 'sha';
},
- selectCard:function(){
- var player=_status.event.player;
- if(player.countMark('twluanlve')==0) return -1;
+ selectCard: function () {
+ var player = _status.event.player;
+ if (player.countMark('twluanlve') == 0) return -1;
return player.countMark('twluanlve');
},
- onChooseToUse:function(event){
- if(!game.online&&event.type=='phase'){
- var targets=[];
- game.countPlayer2(current=>{
- var history=current.getHistory('useCard');
- if(!history.length) return false;
- for(var evt of history){
- if(evt.card&&evt.card.name=='shunshou'){
+ onChooseToUse: function (event) {
+ if (!game.online && event.type == 'phase') {
+ var targets = [];
+ game.countPlayer2(current => {
+ var history = current.getHistory('useCard');
+ if (!history.length) return false;
+ for (var evt of history) {
+ if (evt.card && evt.card.name == 'shunshou') {
targets.addArray(evt.targets);
}
}
});
- event.set('twluanlve_ban',targets);
+ event.set('twluanlve_ban', targets);
}
},
- position:'hs',
- log:false,
- group:['twluanlve_directHit'],
- precontent:function(){
+ position: 'hs',
+ log: false,
+ group: ['twluanlve_directHit'],
+ precontent: function () {
player.logSkill('twluanlve');
- player.addMark('twluanlve',1,false);
+ player.addMark('twluanlve', 1, false);
},
- ai:{
- order:function(){
- return get.order({name:'shunshou'})+1;
+ ai: {
+ order: function () {
+ return get.order({ name: 'shunshou' }) + 1;
},
},
- mod:{
- playerEnabled:function(card,player,target){
- if(!_status.event.twluanlve_ban||!Array.isArray(_status.event.twluanlve_ban)) return;
- if(player.isPhaseUsing()&&card.name=='shunshou'&&card.storage&&card.storage.twluanlve&&_status.event.twluanlve_ban.includes(target)) return false;
+ mod: {
+ playerEnabled: function (card, player, target) {
+ if (!_status.event.twluanlve_ban || !Array.isArray(_status.event.twluanlve_ban)) return;
+ if (player.isPhaseUsing() && card.name == 'shunshou' && card.storage && card.storage.twluanlve && _status.event.twluanlve_ban.includes(target)) return false;
},
},
- subSkill:{
- directHit:{
- trigger:{player:'useCard'},
- filter:function(event,player){
- return event.card.name=='shunshou';
+ subSkill: {
+ directHit: {
+ trigger: { player: 'useCard' },
+ filter: function (event, player) {
+ return event.card.name == 'shunshou';
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
trigger.directHit.addArray(game.players);
- game.log(trigger.card,'不可被响应');
+ game.log(trigger.card, '不可被响应');
},
- ai:{
- directHit_ai:true,
- skillTagFilter:function(player,tag,arg){
- return arg&&arg.card&&arg.card.name=='shunshou';
+ ai: {
+ directHit_ai: true,
+ skillTagFilter: function (player, tag, arg) {
+ return arg && arg.card && arg.card.name == 'shunshou';
},
},
}
},
},
//冯习
- twqingkou:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return player.canUse('juedou',current,false);
+ twqingkou: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return player.canUse('juedou', current, false);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twqingkou'),'视为对一名其他角色使用一张【决斗】',function(card,player,target){
- return player.canUse('juedou',target,false);
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'juedou'},player,player);
+ player.chooseTarget(get.prompt('twqingkou'), '视为对一名其他角色使用一张【决斗】', function (card, player, target) {
+ return player.canUse('juedou', target, false);
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'juedou' }, player, player);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twqingkou',target);
- player.useCard({name:'juedou',isCard:true,storage:{twqingkou:true}},target,false);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twqingkou', target);
+ player.useCard({ name: 'juedou', isCard: true, storage: { twqingkou: true } }, target, false);
player.addTempSkill('twqingkou_after');
}
},
- subSkill:{
- after:{
- trigger:{global:'useCardAfter'},
- filter:function(event,player){
- return event.card.storage&&event.card.storage.twqingkou;
+ subSkill: {
+ after: {
+ trigger: { global: 'useCardAfter' },
+ filter: function (event, player) {
+ return event.card.storage && event.card.storage.twqingkou;
},
- charlotte:true,
- direct:true,
- content:function(){
- var targets=game.filterPlayer(current=>{
- return current.hasHistory('sourceDamage',function(evt){
- return evt.card==trigger.card;
+ charlotte: true,
+ direct: true,
+ content: function () {
+ var targets = game.filterPlayer(current => {
+ return current.hasHistory('sourceDamage', function (evt) {
+ return evt.card == trigger.card;
});
}).sortBySeat();
- for(var target of targets){
+ for (var target of targets) {
target.draw();
- if(target==player){
+ if (target == player) {
player.skip('phaseJudge');
- game.log(player,'跳过了','#y判定阶段');
+ game.log(player, '跳过了', '#y判定阶段');
player.skip('phaseDiscard');
- game.log(player,'跳过了','#y弃牌阶段');
+ game.log(player, '跳过了', '#y弃牌阶段');
}
}
},
@@ -5489,763 +5489,763 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//张既
- twdingzhen:{
- audio:2,
- trigger:{global:'roundStart'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return get.distance(player,current)<=Math.max(0,player.hp);
+ twdingzhen: {
+ audio: 2,
+ trigger: { global: 'roundStart' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return get.distance(player, current) <= Math.max(0, player.hp);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twdingzhen'),[1,Infinity],function(card,player,target){
- return get.distance(player,target)<=player.hp;
- }).set('ai',function(target){
- var player=_status.event.player;
- if(target==player) return 0;
- return Math.max(-get.attitude(player,target),1);
+ player.chooseTarget(get.prompt2('twdingzhen'), [1, Infinity], function (card, player, target) {
+ return get.distance(player, target) <= player.hp;
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ if (target == player) return 0;
+ return Math.max(-get.attitude(player, target), 1);
});
'step 1'
- if(result.bool){
+ if (result.bool) {
result.targets.sortBySeat();
- var targets=result.targets;
- event.targets=targets;
- player.logSkill('twdingzhen',targets);
- event.num=0;
+ var targets = result.targets;
+ event.targets = targets;
+ player.logSkill('twdingzhen', targets);
+ event.num = 0;
}
else event.finish();
'step 2'
- var target=targets[num];
- event.target=target;
- target.chooseToDiscard('h',{name:'sha'},'定镇:弃置一张【杀】,或本轮你于回合内使用的第一张牌不能指定'+get.translation(player)+'为目标').set('ai',function(card){
- if(_status.event.goon) return 1;
+ var target = targets[num];
+ event.target = target;
+ target.chooseToDiscard('h', { name: 'sha' }, '定镇:弃置一张【杀】,或本轮你于回合内使用的第一张牌不能指定' + get.translation(player) + '为目标').set('ai', function (card) {
+ if (_status.event.goon) return 1;
return 0;
- }).set('goon',get.attitude(target,player)<0&&player.countCards('hs')<=3&&target.countCards('hs',card=>{
+ }).set('goon', get.attitude(target, player) < 0 && player.countCards('hs') <= 3 && target.countCards('hs', card => {
return target.hasValueTarget(card);
- })>1);
+ }) > 1);
'step 3'
- if(result.bool) target.addExpose(0.1);
- else{
+ if (result.bool) target.addExpose(0.1);
+ else {
target.addSkill('twdingzhen_target');
- target.markAuto('twdingzhen_target',[player]);
+ target.markAuto('twdingzhen_target', [player]);
}
'step 4'
- if(event.num0,
- content:'回合内使用的第一张牌不能指定$为目标',
+ intro: {
+ markcount: () => 0,
+ content: '回合内使用的第一张牌不能指定$为目标',
},
- mod:{
- playerEnabled:function(card,player,target){
- if(_status.currentPhase==player&&!player.countUsed()&&player.getStorage('twdingzhen_target').includes(target)) return false;
+ mod: {
+ playerEnabled: function (card, player, target) {
+ if (_status.currentPhase == player && !player.countUsed() && player.getStorage('twdingzhen_target').includes(target)) return false;
},
},
},
},
},
- twyouye:{
- audio:2,
- trigger:{global:'phaseJieshuBegin'},
- filter:function(event,player){
- return event.player!=player&&!event.player.getHistory('sourceDamage',function(evt){
- return evt.player==player;
- }).length&&player.getExpansions('twyouye').length<5;
+ twyouye: {
+ audio: 2,
+ trigger: { global: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return event.player != player && !event.player.getHistory('sourceDamage', function (evt) {
+ return evt.player == player;
+ }).length && player.getExpansions('twyouye').length < 5;
},
- forced:true,
- group:'twyouye_give',
- content:function(){
- player.addToExpansion(get.cards(),'gain2').gaintag.add('twyouye');
+ forced: true,
+ group: 'twyouye_give',
+ content: function () {
+ player.addToExpansion(get.cards(), 'gain2').gaintag.add('twyouye');
},
- marktext:'蓄',
- intro:{
- name:'蓄(攸业)',
- content:'expansion',
- markcount:'expansion',
+ marktext: '蓄',
+ intro: {
+ name: '蓄(攸业)',
+ content: 'expansion',
+ markcount: 'expansion',
},
- onremove:function(player,skill){
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ onremove: function (player, skill) {
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
- subSkill:{
- give:{
- audio:'twyouye',
- trigger:{source:'damageSource',player:'damageEnd'},
- filter:function(event,player){
+ subSkill: {
+ give: {
+ audio: 'twyouye',
+ trigger: { source: 'damageSource', player: 'damageEnd' },
+ filter: function (event, player) {
return player.getExpansions('twyouye').length;
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
'step 0'
- event.boolx=_status.currentPhase&&_status.currentPhase.isIn();
- event.cards=player.getExpansions('twyouye');
- if(_status.connectMode) game.broadcastAll(function(){_status.noclearcountdown=true});
- event.given_map={};
+ event.boolx = _status.currentPhase && _status.currentPhase.isIn();
+ event.cards = player.getExpansions('twyouye');
+ if (_status.connectMode) game.broadcastAll(function () { _status.noclearcountdown = true });
+ event.given_map = {};
'step 1'
- if(event.cards.length>1){
- player.chooseCardButton('攸业:请选择要分配的牌',true,event.cards,[1,event.cards.length]).set('ai',function(button){
- if(ui.selected.buttons.length) return 0;
- return get.value(button.link,_status.event.player);
+ if (event.cards.length > 1) {
+ player.chooseCardButton('攸业:请选择要分配的牌', true, event.cards, [1, event.cards.length]).set('ai', function (button) {
+ if (ui.selected.buttons.length) return 0;
+ return get.value(button.link, _status.event.player);
});
}
- else if(event.cards.length==1) event._result={links:event.cards.slice(0),bool:true};
+ else if (event.cards.length == 1) event._result = { links: event.cards.slice(0), bool: true };
else event.finish();
'step 2'
- if(result.bool){
- var cards=result.links;
- event.cards2=cards;
- player.chooseTarget('选择一名角色获得'+get.translation(cards),function(card,player,target){
- var evt=_status.event.getParent();
- var cards=evt.cards,cards2=evt.cards2.slice();
- if(cards.removeArray(cards2).length>0||!evt.boolx) return true;
- return target==_status.currentPhase;
- },event.cards.length==1).set('ai',function(target){
- var att=get.attitude(_status.event.player,target);
- if(_status.event.enemy) return Math.max(0.01,100-att);
- else if(att>0) return Math.max(0.1,att/(1+target.countCards('h')+(_status.event.getParent().given_map[target.playerid]||0)));
- else return Math.max(0.01,(100+att)/100);
- }).set('enemy',get.value(cards[0],player,'raw')<0);
+ if (result.bool) {
+ var cards = result.links;
+ event.cards2 = cards;
+ player.chooseTarget('选择一名角色获得' + get.translation(cards), function (card, player, target) {
+ var evt = _status.event.getParent();
+ var cards = evt.cards, cards2 = evt.cards2.slice();
+ if (cards.removeArray(cards2).length > 0 || !evt.boolx) return true;
+ return target == _status.currentPhase;
+ }, event.cards.length == 1).set('ai', function (target) {
+ var att = get.attitude(_status.event.player, target);
+ if (_status.event.enemy) return Math.max(0.01, 100 - att);
+ else if (att > 0) return Math.max(0.1, att / (1 + target.countCards('h') + (_status.event.getParent().given_map[target.playerid] || 0)));
+ else return Math.max(0.01, (100 + att) / 100);
+ }).set('enemy', get.value(cards[0], player, 'raw') < 0);
}
'step 3'
- if(result.bool){
- var cards=event.cards2;
+ if (result.bool) {
+ var cards = event.cards2;
event.cards.removeArray(cards);
- event.togive=cards.slice(0);
- if(result.targets.length){
- if(result.targets[0]==_status.currentPhase) event.boolx=false;
- var id=result.targets[0].playerid,map=event.given_map;
- if(!map[id]) map[id]=[];
+ event.togive = cards.slice(0);
+ if (result.targets.length) {
+ if (result.targets[0] == _status.currentPhase) event.boolx = false;
+ var id = result.targets[0].playerid, map = event.given_map;
+ if (!map[id]) map[id] = [];
map[id].addArray(event.togive);
}
- if(event.cards.length>0) event.goto(1);
+ if (event.cards.length > 0) event.goto(1);
}
else event.goto(1);
'step 4'
- if(_status.connectMode) game.broadcastAll(function(){delete _status.noclearcountdown;game.stopCountChoose()});
- var list=[];
- for(var i in event.given_map){
- var source=(_status.connectMode?lib.playerOL:game.playerMap)[i];
- player.line(source,'green');
- list.push([source,event.given_map[i]]);
- game.log(source,'获得了',event.given_map[i]);
+ if (_status.connectMode) game.broadcastAll(function () { delete _status.noclearcountdown; game.stopCountChoose() });
+ var list = [];
+ for (var i in event.given_map) {
+ var source = (_status.connectMode ? lib.playerOL : game.playerMap)[i];
+ player.line(source, 'green');
+ list.push([source, event.given_map[i]]);
+ game.log(source, '获得了', event.given_map[i]);
}
game.loseAsync({
- gain_list:list,
- giver:player,
- animate:'gain2',
+ gain_list: list,
+ giver: player,
+ animate: 'gain2',
}).setContent('gaincardMultiple');
},
},
},
},
//荀谌
- twweipo:{
- audio:'mjweipo',
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return game.hasPlayer(function(current){
+ twweipo: {
+ audio: 'mjweipo',
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
return current.countCards('he');
});
},
- filterTarget:function(card,player,target){
+ filterTarget: function (card, player, target) {
return target.countCards('he');
},
- content:function(){
+ content: function () {
'step 0'
- target.chooseToDiscard('he',true);
+ target.chooseToDiscard('he', true);
'step 1'
- var list=['binglinchengxiax'];
+ var list = ['binglinchengxiax'];
list.addArray(get.zhinangs());
- player.chooseButton(['危迫:令其获得一张智囊牌或【兵临城下】',[list,'vcard']],true).set('ai',function(button){
- return _status.event.getParent().target.getUseValue({name:button.link[2]});
+ player.chooseButton(['危迫:令其获得一张智囊牌或【兵临城下】', [list, 'vcard']], true).set('ai', function (button) {
+ return _status.event.getParent().target.getUseValue({ name: button.link[2] });
});
'step 2'
- if(result.bool){
- var name=result.links[0][2],card=false;
- game.log(player,'选择了','#y'+get.translation(name));
- if(name=='binglinchengxiax'){
- if(!_status.binglinchengxiax){
- _status.binglinchengxiax=[
- ['spade',7],
- ['club',7],
- ['club',13],
+ if (result.bool) {
+ var name = result.links[0][2], card = false;
+ game.log(player, '选择了', '#y' + get.translation(name));
+ if (name == 'binglinchengxiax') {
+ if (!_status.binglinchengxiax) {
+ _status.binglinchengxiax = [
+ ['spade', 7],
+ ['club', 7],
+ ['club', 13],
];
- game.broadcastAll(function(){lib.inpile.add('binglinchengxiax')});
+ game.broadcastAll(function () { lib.inpile.add('binglinchengxiax') });
}
- if(_status.binglinchengxiax.length){
- var info=_status.binglinchengxiax.randomRemove();
- card=game.createCard2('binglinchengxiax',info[0],info[1]);
+ if (_status.binglinchengxiax.length) {
+ var info = _status.binglinchengxiax.randomRemove();
+ card = game.createCard2('binglinchengxiax', info[0], info[1]);
}
}
- if(!card) card=get.cardPile(name);
- if(card) target.gain(card,'gain2');
+ if (!card) card = get.cardPile(name);
+ if (card) target.gain(card, 'gain2');
}
},
- ai:{
- order:7.1,
- result:{
- target:function(player,target){
- if(target==player) return player.countCards('he')?10:0.01;
- return (target.countCards('he')+0.5)*Math.sqrt(Math.max(1,target.hp));
+ ai: {
+ order: 7.1,
+ result: {
+ target: function (player, target) {
+ if (target == player) return player.countCards('he') ? 10 : 0.01;
+ return (target.countCards('he') + 0.5) * Math.sqrt(Math.max(1, target.hp));
},
},
},
},
- twmouzhi:{
- audio:'mjmouzhi',
- intro:{content:'上次受到伤害的颜色:$'},
- trigger:{player:'damageBegin4'},
- forced:true,
- group:'twmouzhi_mark',
- filter:function(event,player){
- if(!event.card||get.color(event.card)=='none') return false;
- var all=player.getAllHistory('damage');
- if(!all.length) return false;
- return all[all.length-1].card&&get.color(all[all.length-1].card)==get.color(event.card);
+ twmouzhi: {
+ audio: 'mjmouzhi',
+ intro: { content: '上次受到伤害的颜色:$' },
+ trigger: { player: 'damageBegin4' },
+ forced: true,
+ group: 'twmouzhi_mark',
+ filter: function (event, player) {
+ if (!event.card || get.color(event.card) == 'none') return false;
+ var all = player.getAllHistory('damage');
+ if (!all.length) return false;
+ return all[all.length - 1].card && get.color(all[all.length - 1].card) == get.color(event.card);
},
- content:function(){
+ content: function () {
trigger.cancel();
},
- ai:{
- effect:{
- target:(card,player,target)=>{
- if(typeof card==='object'&&get.tag(card,'damage')){
- let color=get.color(card);
- if(color==='none') return;
- let all=target.getAllHistory('damage');
- if(!all.length||!all[all.length-1].card) return;
- if(get.color(all[all.length-1].card)===color) return 'zeroplayertarget';
+ ai: {
+ effect: {
+ target: (card, player, target) => {
+ if (typeof card === 'object' && get.tag(card, 'damage')) {
+ let color = get.color(card);
+ if (color === 'none') return;
+ let all = target.getAllHistory('damage');
+ if (!all.length || !all[all.length - 1].card) return;
+ if (get.color(all[all.length - 1].card) === color) return 'zeroplayertarget';
}
},
},
},
- subSkill:{
- mark:{
- trigger:{player:'damage'},
- silent:true,
- firstDo:true,
- content:function(){
- if(!trigger.card||get.color(trigger.card)=='none') player.unmarkSkill('twmouzhi');
+ subSkill: {
+ mark: {
+ trigger: { player: 'damage' },
+ silent: true,
+ firstDo: true,
+ content: function () {
+ if (!trigger.card || get.color(trigger.card) == 'none') player.unmarkSkill('twmouzhi');
else {
player.markSkill('twmouzhi');
- player.storage.twmouzhi=get.color(trigger.card);
- game.broadcastAll(function(player,color){
- if(player.marks.twmouzhi){
- player.marks.twmouzhi.firstChild.innerHTML='谋';
+ player.storage.twmouzhi = get.color(trigger.card);
+ game.broadcastAll(function (player, color) {
+ if (player.marks.twmouzhi) {
+ player.marks.twmouzhi.firstChild.innerHTML = '谋';
}
- player.storage.twmouzhi=color;
- },player,player.storage.twmouzhi)
+ player.storage.twmouzhi = color;
+ }, player, player.storage.twmouzhi)
}
},
},
},
},
//蒋钦
- twshangyi:{
- audio:'shangyi',
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.countCards('he')&&game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h');
+ twshangyi: {
+ audio: 'shangyi',
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.countCards('he') && game.hasPlayer(function (current) {
+ return current != player && current.countCards('h');
});
},
- filterTarget:function(card,player,target){
- return target!=player&&target.countCards('h');
+ filterTarget: function (card, player, target) {
+ return target != player && target.countCards('h');
},
- filterCard:true,
- position:'he',
- content:function(){
+ filterCard: true,
+ position: 'he',
+ content: function () {
'step 0'
target.viewHandcards(player);
var chooseButton;
- if(player.countCards('h')) chooseButton=player.chooseButton([1,2],['###尚义###选择'+get.translation(target)+'的一张手牌以弃置,或选择你与其的各一张牌以交换
',''+get.translation(target)+'的手牌
',target.getCards('h'),'你的手牌
',player.getCards('h')],true);
- else chooseButton=player.chooseButton(['###尚义###弃置'+get.translation(target)+'的一张手牌
',''+get.translation(target)+'的手牌
',target.getCards('h')],true);
- chooseButton.set('target',target);
- chooseButton.set('ai',function(button){
- var player=_status.event.player,owner=get.owner(button.link),color=get.color(button.link,owner),value=get.value(button.link,owner);
- if(player.countCards('h')){
- if(!ui.selected.buttons.length){
- if(player.countCards('h',function(card){
- return get.color(card,player)=='red'&&get.value(card)<6;
- })&&color=='red'&&value>7) return value*3;
+ if (player.countCards('h')) chooseButton = player.chooseButton([1, 2], ['###尚义###选择' + get.translation(target) + '的一张手牌以弃置,或选择你与其的各一张牌以交换
', '' + get.translation(target) + '的手牌
', target.getCards('h'), '你的手牌
', player.getCards('h')], true);
+ else chooseButton = player.chooseButton(['###尚义###弃置' + get.translation(target) + '的一张手牌
', '' + get.translation(target) + '的手牌
', target.getCards('h')], true);
+ chooseButton.set('target', target);
+ chooseButton.set('ai', function (button) {
+ var player = _status.event.player, owner = get.owner(button.link), color = get.color(button.link, owner), value = get.value(button.link, owner);
+ if (player.countCards('h')) {
+ if (!ui.selected.buttons.length) {
+ if (player.countCards('h', function (card) {
+ return get.color(card, player) == 'red' && get.value(card) < 6;
+ }) && color == 'red' && value > 7) return value * 3;
return value;
}
else {
- if(get.value(ui.selected.buttons[0].link)<4) return 0;
- return 4+(get.color(ui.selected.buttons[0].link,get.owner(ui.selected.buttons[0].link))=='red'?3:1)-value;
+ if (get.value(ui.selected.buttons[0].link) < 4) return 0;
+ return 4 + (get.color(ui.selected.buttons[0].link, get.owner(ui.selected.buttons[0].link)) == 'red' ? 3 : 1) - value;
}
}
else {
- if(color=='black') return value*1.5;
+ if (color == 'black') return value * 1.5;
return value;
}
});
- chooseButton.set('filterButton',function(button){
- if(get.itemtype(button.link)!='card') return false;
- if(!ui.selected.buttons.length&&get.owner(button.link)!=_status.event.target) return false;
- if(ui.selected.buttons.length&&get.owner(ui.selected.buttons[0].link)==get.owner(button.link)) return false;
+ chooseButton.set('filterButton', function (button) {
+ if (get.itemtype(button.link) != 'card') return false;
+ if (!ui.selected.buttons.length && get.owner(button.link) != _status.event.target) return false;
+ if (ui.selected.buttons.length && get.owner(ui.selected.buttons[0].link) == get.owner(button.link)) return false;
return true;
});
'step 1'
- if(result.bool){
- if(result.links.length==1){
- target.discard(result.links[0]).discarder=player;
- if(get.color(result.links[0],target)!='black') event.finish();
+ if (result.bool) {
+ if (result.links.length == 1) {
+ target.discard(result.links[0]).discarder = player;
+ if (get.color(result.links[0], target) != 'black') event.finish();
}
else {
- var links=result.links.slice();
- if(get.owner(links[0])!=player) links.reverse();
- var card1=links[0],card2=links[1];
- player.swapHandcards(target,[card1],[card2]);
- if(get.color(card1,player)!='red'||get.color(card2,target)!='red') event.finish();
+ var links = result.links.slice();
+ if (get.owner(links[0]) != player) links.reverse();
+ var card1 = links[0], card2 = links[1];
+ player.swapHandcards(target, [card1], [card2]);
+ if (get.color(card1, player) != 'red' || get.color(card2, target) != 'red') event.finish();
}
}
else event.finish();
'step 2'
player.draw();
},
- ai:{
- order:10,
- result:{target:-1},
+ ai: {
+ order: 10,
+ result: { target: -1 },
},
},
- twxiangyu:{
- group:'twxiangyu_lose',
- shaRelated:true,
- audio:'zniaoxiang',
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- return event.card.name=='sha'&&get.distance(player,event.player){
+ forced: true,
+ logTarget: 'target',
+ init: function (player) {
+ var target = _status.currentPhase;
+ if (!target || !target != player) return;
+ if (!player.getStorage('twxiangyu_range').length) {
+ var targets = game.filterPlayer(current => {
return current.getHistory('lose').length;
});
- if(targets.length){
+ if (targets.length) {
player.addTempSkill('twxiangyu_range');
- player.markAuto('twxiangyu_range',targets);
+ player.markAuto('twxiangyu_range', targets);
}
}
},
- content:function(){
- var id=trigger.target.playerid;
- var map=trigger.getParent().customArgs;
- if(!map[id]) map[id]={};
- if(typeof map[id].shanRequired=='number'){
+ content: function () {
+ var id = trigger.target.playerid;
+ var map = trigger.getParent().customArgs;
+ if (!map[id]) map[id] = {};
+ if (typeof map[id].shanRequired == 'number') {
map[id].shanRequired++;
}
- else map[id].shanRequired=2;
+ else map[id].shanRequired = 2;
},
- mod:{
- attackRange:function(player,num){
- return num+Math.min(5,player.getStorage('twxiangyu_range').length);
+ mod: {
+ attackRange: function (player, num) {
+ return num + Math.min(5, player.getStorage('twxiangyu_range').length);
},
},
- subSkill:{
- lose:{
- trigger:{
- global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ subSkill: {
+ lose: {
+ trigger: {
+ global: ['loseAfter', 'equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
},
- filter:function(event,player){
- return player==_status.currentPhase&&game.hasPlayer(function(current){
- if(player.getStorage('twxiangyu_range').includes(current)) return false;
- var evt=event.getl(current);
- return evt&&evt.cards2&&evt.cards2.length>0;
+ filter: function (event, player) {
+ return player == _status.currentPhase && game.hasPlayer(function (current) {
+ if (player.getStorage('twxiangyu_range').includes(current)) return false;
+ var evt = event.getl(current);
+ return evt && evt.cards2 && evt.cards2.length > 0;
});
},
- silent:true,
- charlotte:true,
- content:function(){
+ silent: true,
+ charlotte: true,
+ content: function () {
player.addTempSkill('twxiangyu_range');
- player.markAuto('twxiangyu_range',game.filterPlayer(function(current){
- if(player.getStorage('twxiangyu_range').includes(current)) return false;
- var evt=trigger.getl(current);
- return evt&&evt.cards2&&evt.cards2.length>0;
+ player.markAuto('twxiangyu_range', game.filterPlayer(function (current) {
+ if (player.getStorage('twxiangyu_range').includes(current)) return false;
+ var evt = trigger.getl(current);
+ return evt && evt.cards2 && evt.cards2.length > 0;
}));
player.syncStorage('twxiangyu_range');
},
},
- range:{
- marktext:'羽',
- intro:{
- content:function(storage,player){
- var num=Math.min(5,storage?storage.length:0);
- return '攻击范围+'+num;
+ range: {
+ marktext: '羽',
+ intro: {
+ content: function (storage, player) {
+ var num = Math.min(5, storage ? storage.length : 0);
+ return '攻击范围+' + num;
},
},
- charlotte:true,
- onremove:true,
+ charlotte: true,
+ onremove: true,
},
},
},
//顾雍
- twgyshenxing:{
- audio:'xinshenxing',
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('he')>=Math.min(2,player.countMark('twgyshenxing'));
+ twgyshenxing: {
+ audio: 'xinshenxing',
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ return player.countCards('he') >= Math.min(2, player.countMark('twgyshenxing'));
},
- selectCard:function(){
- return Math.min(2,_status.event.player.countMark('twgyshenxing'));
+ selectCard: function () {
+ return Math.min(2, _status.event.player.countMark('twgyshenxing'));
},
- prompt:function(){
- return '弃置'+get.cnNumber(Math.min(2,_status.event.player.countMark('twgyshenxing')))+'张牌并摸一张牌';
+ prompt: function () {
+ return '弃置' + get.cnNumber(Math.min(2, _status.event.player.countMark('twgyshenxing'))) + '张牌并摸一张牌';
},
- check:function(card){
- var num=_status.event.player.countCards('h',{color:get.color(card)});
- if(get.position(card)=='e') num++;
- return (Math.max(4,7.1-num)-get.value(card))/num;
+ check: function (card) {
+ var num = _status.event.player.countCards('h', { color: get.color(card) });
+ if (get.position(card) == 'e') num++;
+ return (Math.max(4, 7.1 - num) - get.value(card)) / num;
},
- filterCard:true,
- position:'he',
- content:function(){
+ filterCard: true,
+ position: 'he',
+ content: function () {
player.draw();
- player.addMark('twgyshenxing',1);
+ player.addMark('twgyshenxing', 1);
},
- marktext:'慎',
- intro:{content:'已发动过#次'},
- ai:{
- order:function(item,player){
- if(!player.hasMark('twgyshenxing')) return 10;
+ marktext: '慎',
+ intro: { content: '已发动过#次' },
+ ai: {
+ order: function (item, player) {
+ if (!player.hasMark('twgyshenxing')) return 10;
return 1;
},
- result:{player:1},
+ result: { player: 1 },
},
},
- twbingyi:{
- audio:'bingyi_xin_guyong',
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
+ twbingyi: {
+ audio: 'bingyi_xin_guyong',
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
return player.countCards('h');
},
- filterx:function(event,player){
- var cards=player.getCards('h');
- if(cards.length==1) return true;
- var color=get.color(cards[0],player),type=get.type2(cards[0],player);
- for(var i=1; iplayer.getCardUsable({name:'sha'})){
- return player.hp>2?2:0;
+ ]).set('ai', function () {
+ if (player.countCards('hs', function (card) {
+ return get.name(card) == 'sha' && player.hasValueTarget(card);
+ }) > player.getCardUsable({ name: 'sha' })) {
+ return player.hp > 2 ? 2 : 0;
}
return 1;
- }).set('prompt',get.prompt('twyilie'));
+ }).set('prompt', get.prompt('twyilie'));
'step 1'
- if(result.control!='cancel2'){
+ if (result.control != 'cancel2') {
player.logSkill('twyilie');
- game.log(player,'选择了','#g【毅烈】','的','#y'+result.control);
- if(result.index%2==0) player.addTempSkill('twyilie_add','phaseUseEnd');
- if(result.index>0) player.addTempSkill('twyilie_miss');
- if(result.index==2) player.loseHp();
+ game.log(player, '选择了', '#g【毅烈】', '的', '#y' + result.control);
+ if (result.index % 2 == 0) player.addTempSkill('twyilie_add', 'phaseUseEnd');
+ if (result.index > 0) player.addTempSkill('twyilie_miss');
+ if (result.index == 2) player.loseHp();
}
},
- subSkill:{
- add:{
- charlotte:true,
- mod:{
- cardUsable:function(card,player,num){
- if(card.name=='sha') return num+1;
+ subSkill: {
+ add: {
+ charlotte: true,
+ mod: {
+ cardUsable: function (card, player, num) {
+ if (card.name == 'sha') return num + 1;
},
},
- mark:true,
- intro:{content:'本阶段使用【杀】的次数上限+1'},
+ mark: true,
+ intro: { content: '本阶段使用【杀】的次数上限+1' },
},
- miss:{
- charlotte:true,
- audio:'spyilie',
- trigger:{player:['useCardToTargeted','shaMiss']},
- filter:function(event,player,name){
- if(name=='useCardToTargeted') return event.card.name=='sha'&&event.target.isLinked();
+ miss: {
+ charlotte: true,
+ audio: 'spyilie',
+ trigger: { player: ['useCardToTargeted', 'shaMiss'] },
+ filter: function (event, player, name) {
+ if (name == 'useCardToTargeted') return event.card.name == 'sha' && event.target.isLinked();
return true;
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
player.draw();
},
},
},
},
- twfenming:{
- audio:'spfenming',
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(target){
- return target!=player&&(target.countCards('he')||!target.isLinked());
+ twfenming: {
+ audio: 'spfenming',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (target) {
+ return target != player && (target.countCards('he') || !target.isLinked());
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twfenming'),function(card,player,target){
- return target!=player&&(target.countCards('he')||!target.isLinked());
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.damageEffect(target,player,player);
+ player.chooseTarget(get.prompt2('twfenming'), function (card, player, target) {
+ return target != player && (target.countCards('he') || !target.isLinked());
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.damageEffect(target, player, player);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twfenming',target);
- var list=[],choiceList=[
- '令'+get.translation(target)+'弃置一张牌',
- '令'+get.translation(target)+'横置',
- '背水!横置并依次令'+get.translation(target)+'执行上述所有选项',
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twfenming', target);
+ var list = [], choiceList = [
+ '令' + get.translation(target) + '弃置一张牌',
+ '令' + get.translation(target) + '横置',
+ '背水!横置并依次令' + get.translation(target) + '执行上述所有选项',
];
- if(target.countCards('he')) list.push('选项一');
- else choiceList[0]=''+choiceList[0]+'';
- if(!target.isLinked()) list.push('选项二');
- else choiceList[1]=''+choiceList[1]+'';
- if(target.countCards('he')&&!target.isLinked()&&!player.isLinked()) list.push('背水!');
- else choiceList[2]=''+choiceList[2]+'';
- if(list.length==1) event._result={control:list[0]};
- else player.chooseControl(list).set('choiceList',choiceList).set('ai',function(){
- var list=_status.event.controls;
- if(list.includes('背水!')) return '背水!';
- if(list.includes('选项一')) return '选项一';
+ if (target.countCards('he')) list.push('选项一');
+ else choiceList[0] = '' + choiceList[0] + '';
+ if (!target.isLinked()) list.push('选项二');
+ else choiceList[1] = '' + choiceList[1] + '';
+ if (target.countCards('he') && !target.isLinked() && !player.isLinked()) list.push('背水!');
+ else choiceList[2] = '' + choiceList[2] + '';
+ if (list.length == 1) event._result = { control: list[0] };
+ else player.chooseControl(list).set('choiceList', choiceList).set('ai', function () {
+ var list = _status.event.controls;
+ if (list.includes('背水!')) return '背水!';
+ if (list.includes('选项一')) return '选项一';
return '选项二';
- }).set('prompt','奋命:请选择一项');
+ }).set('prompt', '奋命:请选择一项');
}
else event.finish();
'step 2'
- game.log(player,'选择了','#y'+result.control);
- if(result.control=='背水!'&&!player.isLinked()) player.link(true);
- if(result.control!='选项二') target.chooseToDiscard('he',true);
- if(result.control!='选项一'&&!target.isLinked()) target.link(true);
+ game.log(player, '选择了', '#y' + result.control);
+ if (result.control == '背水!' && !player.isLinked()) player.link(true);
+ if (result.control != '选项二') target.chooseToDiscard('he', true);
+ if (result.control != '选项一' && !target.isLinked()) target.link(true);
},
},
//韩当
- twgongji:{
- audio:'regongji',
- enable:'phaseUse',
- usable:1,
- position:'he',
- filterCard:true,
- locked:false,
- filter:function(event,player){
+ twgongji: {
+ audio: 'regongji',
+ enable: 'phaseUse',
+ usable: 1,
+ position: 'he',
+ filterCard: true,
+ locked: false,
+ filter: function (event, player) {
return player.countCards('he');
},
- check:function(card){
- var base=0,player=_status.event.player,suit=get.suit(card,player),added=false,added2=false,added3;
- if(get.type(card)=='equip'&&game.hasPlayer(function(target){
- var att=get.attitude(player,target);
- if(att>=0) return 0;
- if(target.countCards('he',function(card){
- return get.value(card)>5;
+ check: function (card) {
+ var base = 0, player = _status.event.player, suit = get.suit(card, player), added = false, added2 = false, added3;
+ if (get.type(card) == 'equip' && game.hasPlayer(function (target) {
+ var att = get.attitude(player, target);
+ if (att >= 0) return 0;
+ if (target.countCards('he', function (card) {
+ return get.value(card) > 5;
})) return -att;
- })) base+=6;
- var hs=player.getCards('h');
- var muniu=player.getEquip('muniu');
- if(muniu&&card!=muniu&&muniu.cards) hs=hs.concat(muniu.cards);
- for(var i of hs){
- if(i!=card&&get.name(i)=='sha'){
- if(get.suit(i,player)==suit){
- if(player.hasValueTarget(i,false)){
- added3=true;
- base+=5.5;
+ })) base += 6;
+ var hs = player.getCards('h');
+ var muniu = player.getEquip('muniu');
+ if (muniu && card != muniu && muniu.cards) hs = hs.concat(muniu.cards);
+ for (var i of hs) {
+ if (i != card && get.name(i) == 'sha') {
+ if (get.suit(i, player) == suit) {
+ if (player.hasValueTarget(i, false)) {
+ added3 = true;
+ base += 5.5;
}
}
else {
- if(player.hasValueTarget(i,false)) added2=true;
- if(!added&&!player.hasValueTarget(i,null,true)&&player.hasValueTarget(i,false,true)){
- base+=4;
- added=true;
+ if (player.hasValueTarget(i, false)) added2 = true;
+ if (!added && !player.hasValueTarget(i, null, true) && player.hasValueTarget(i, false, true)) {
+ base += 4;
+ added = true;
}
}
}
}
- if(added3&&!added2) base-=4.5;
- return base-get.value(card);
+ if (added3 && !added2) base -= 4.5;
+ return base - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
player.addTempSkill('twgongji2');
- player.markAuto('twgongji2',[get.suit(cards[0],player)]);
+ player.markAuto('twgongji2', [get.suit(cards[0], player)]);
'step 1'
- if(get.type(cards[0],null,cards[0].original=='h'?player:false)=='equip'){
- player.chooseTarget('是否弃置一名角色的一张牌?',function(card,player,target){
- return player!=target&&target.countCards('he');
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'guohe_copy2'},player,player);
+ if (get.type(cards[0], null, cards[0].original == 'h' ? player : false) == 'equip') {
+ player.chooseTarget('是否弃置一名角色的一张牌?', function (card, player, target) {
+ return player != target && target.countCards('he');
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'guohe_copy2' }, player, player);
});
}
else event.finish();
'step 2'
- if(result.bool){
- player.line(result.targets,'green');
- player.discardPlayerCard(result.targets[0],'he',true);
+ if (result.bool) {
+ player.line(result.targets, 'green');
+ player.discardPlayerCard(result.targets[0], 'he', true);
}
},
- mod:{
- attackRangeBase:function(){
+ mod: {
+ attackRangeBase: function () {
return Infinity;
},
},
- ai:{
- order:4.5,
- result:{player:1},
+ ai: {
+ order: 4.5,
+ result: { player: 1 },
},
},
- twgongji2:{
- charlotte:true,
- onremove:true,
- mark:true,
- intro:{content:'使用$花色的杀无任何次数限制'},
- trigger:{player:'useCard1'},
- filter:function(event,player){
- if(_status.currentPhase==player&&event.card.name=='sha'&&
- player.getStorage('twgongji2').includes(get.suit(event.card))&&event.addCount!==false) return true;
+ twgongji2: {
+ charlotte: true,
+ onremove: true,
+ mark: true,
+ intro: { content: '使用$花色的杀无任何次数限制' },
+ trigger: { player: 'useCard1' },
+ filter: function (event, player) {
+ if (_status.currentPhase == player && event.card.name == 'sha' &&
+ player.getStorage('twgongji2').includes(get.suit(event.card)) && event.addCount !== false) return true;
return false;
},
- forced:true,
- locked:false,
- popup:false,
- firstDo:true,
- content:function(){
- trigger.addCount=false;
- if(player.stat[player.stat.length-1].card.sha>0){
- player.stat[player.stat.length-1].card.sha--;
+ forced: true,
+ locked: false,
+ popup: false,
+ firstDo: true,
+ content: function () {
+ trigger.addCount = false;
+ if (player.stat[player.stat.length - 1].card.sha > 0) {
+ player.stat[player.stat.length - 1].card.sha--;
}
},
- mod:{
- cardUsable:function(card,player){
- if(card.name=='sha'&&player.getStorage('twgongji2').includes(get.suit(card))) return Infinity;
+ mod: {
+ cardUsable: function (card, player) {
+ if (card.name == 'sha' && player.getStorage('twgongji2').includes(get.suit(card))) return Infinity;
},
- aiOrder:function(player,card,num){
- if(get.name(card)=='sha'&&!player.getStorage('twgongji2').includes(get.suit(card))) return num+1;
+ aiOrder: function (player, card, num) {
+ if (get.name(card) == 'sha' && !player.getStorage('twgongji2').includes(get.suit(card))) return num + 1;
},
},
},
- twjiefan:{
- skillAnimation:true,
- animationColor:'wood',
- audio:'jiefan_re_handang',
- limited:true,
- enable:'phaseUse',
- filterTarget:true,
- content:function(){
+ twjiefan: {
+ skillAnimation: true,
+ animationColor: 'wood',
+ audio: 'jiefan_re_handang',
+ limited: true,
+ enable: 'phaseUse',
+ filterTarget: true,
+ content: function () {
'step 0'
player.awakenSkill('twjiefan');
- event.players=game.filterPlayer(function(current){
- return current!=target&¤t.inRange(target);
+ event.players = game.filterPlayer(function (current) {
+ return current != target && current.inRange(target);
});
event.players.sortBySeat();
'step 1'
- if(event.players.length){
- event.current=event.players.shift();
+ if (event.players.length) {
+ event.current = event.players.shift();
event.current.addTempClass('target');
- player.line(event.current,'green');
- if(!event.current.countCards('he')||!target.isIn()) event._result={bool:false};
- else{
- event.current.chooseToDiscard({subtype:'equip1'},'he','解烦:弃置一张武器牌,或令'+get.translation(target)+'摸一张牌').set('ai',function(card){
- if(!_status.event.target.isIn()) return 0;
- if(get.attitude(_status.event.player,_status.event.target)<0) return 7-get.value(card);
+ player.line(event.current, 'green');
+ if (!event.current.countCards('he') || !target.isIn()) event._result = { bool: false };
+ else {
+ event.current.chooseToDiscard({ subtype: 'equip1' }, 'he', '解烦:弃置一张武器牌,或令' + get.translation(target) + '摸一张牌').set('ai', function (card) {
+ if (!_status.event.target.isIn()) return 0;
+ if (get.attitude(_status.event.player, _status.event.target) < 0) return 7 - get.value(card);
return -1;
- }).set('target',target);
+ }).set('target', target);
}
}
else {
player.addSkill('twjiefan2');
- player.markAuto('twjiefan2',[target]);
+ player.markAuto('twjiefan2', [target]);
event.finish();
}
'step 2'
- if(!result.bool&&target.isIn()) target.draw();
+ if (!result.bool && target.isIn()) target.draw();
event.goto(1);
},
- ai:{
- order:5,
- result:{
- target:function(player,target){
- if(player.hp>2&&game.phaseNumber 2 && game.phaseNumber < game.players.length * 2) return 0;
+ var num = 0, players = game.filterPlayer();
+ for (var i = 0; i < players.length; i++) {
+ if (players[i] != target && players[i].inRange(target)) {
num++;
}
}
@@ -6254,106 +6254,106 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
- twjiefan2:{
- charlotte:true,
- onremove:true,
- trigger:{global:'dying'},
- filter:function(event,player){
+ twjiefan2: {
+ charlotte: true,
+ onremove: true,
+ trigger: { global: 'dying' },
+ filter: function (event, player) {
return player.getStorage('twjiefan2').includes(event.player);
},
- forced:true,
- popup:false,
- content:function(){
+ forced: true,
+ popup: false,
+ content: function () {
player.removeSkill('twjiefan2');
player.restoreSkill('twjiefan');
},
},
- jiefan_re_handang:{audio:2},
+ jiefan_re_handang: { audio: 2 },
//纪灵
- twshuangren:{
- audio:'shuangren',
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player,name){
- if(!player.countCards('h')) return false;
- if(name=='phaseUseEnd') return !player.hasHistory('sourceDamage',function(evt){
- return evt.card.name=='sha'&&event.getParent('phaseUse')==evt;
+ twshuangren: {
+ audio: 'shuangren',
+ trigger: { player: 'phaseUseBegin' },
+ filter: function (event, player, name) {
+ if (!player.countCards('h')) return false;
+ if (name == 'phaseUseEnd') return !player.hasHistory('sourceDamage', function (evt) {
+ return evt.card.name == 'sha' && event.getParent('phaseUse') == evt;
});
return true;
},
- direct:true,
- group:'twshuangren_end',
- preHidden:true,
- content:function(){
+ direct: true,
+ group: 'twshuangren_end',
+ preHidden: true,
+ content: function () {
'step 0'
- var forced=event.getParent(2).name=='twshuangren_end'&&game.hasPlayer(current=>{
+ var forced = event.getParent(2).name == 'twshuangren_end' && game.hasPlayer(current => {
return player.canCompare(current);
});
- var str='与一名角色拼点,若你:赢,你可以视为对至多两名至其的距离不大于1的角色使用一张【杀】;没赢,其可以视为对你使用一张【杀】';
- player.chooseTarget(forced?'双刃:选择一名角色':get.prompt('twshuangren'),str,forced,(card,player,target)=>{
+ var str = '与一名角色拼点,若你:赢,你可以视为对至多两名至其的距离不大于1的角色使用一张【杀】;没赢,其可以视为对你使用一张【杀】';
+ player.chooseTarget(forced ? '双刃:选择一名角色' : get.prompt('twshuangren'), str, forced, (card, player, target) => {
return player.canCompare(target);
- }).set('ai',target=>{
- if(_status.event.goon) return get.effect(target,{name:'sha'},_status.event.player);
+ }).set('ai', target => {
+ if (_status.event.goon) return get.effect(target, { name: 'sha' }, _status.event.player);
return 0;
- }).set('goon',event.triggername!='phaseUseBegin'||(player.countCards('hs','sha')>0&&player.hasValueTarget({name:'sha'})));
+ }).set('goon', event.triggername != 'phaseUseBegin' || (player.countCards('hs', 'sha') > 0 && player.hasValueTarget({ name: 'sha' })));
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twshuangren',target);
- if(player.canCompare(target)) player.chooseToCompare(target);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twshuangren', target);
+ if (player.canCompare(target)) player.chooseToCompare(target);
else event.finish();
}
else event.finish();
'step 2'
- if(result.bool){
- event.sha=true;
- player.chooseTarget([1,2],'请选择【杀】的目标',true,function(card,player,target){
- if(!player.canUse('sha',target,false,false)) return false;
- return get.distance(target,_status.event.targetx)<=1;
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'sha'},player,player);
- }).set('targetx',target);
+ if (result.bool) {
+ event.sha = true;
+ player.chooseTarget([1, 2], '请选择【杀】的目标', true, function (card, player, target) {
+ if (!player.canUse('sha', target, false, false)) return false;
+ return get.distance(target, _status.event.targetx) <= 1;
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'sha' }, player, player);
+ }).set('targetx', target);
}
- else target.chooseBool('双刃:是否视为对'+get.translation(player)+'使用一张杀?').set('choice',get.effect(player,{name:'sha'},target,target)>0);
+ else target.chooseBool('双刃:是否视为对' + get.translation(player) + '使用一张杀?').set('choice', get.effect(player, { name: 'sha' }, target, target) > 0);
'step 3'
- if(result.bool){
- if(event.sha==true) {
+ if (result.bool) {
+ if (event.sha == true) {
result.targets.sortBySeat();
- for(var i of result.targets){
- player.useCard({name:'sha',isCard:true},i,false);
+ for (var i of result.targets) {
+ player.useCard({ name: 'sha', isCard: true }, i, false);
}
}
- else target.useCard({name:'sha',isCard:true},player,false);
+ else target.useCard({ name: 'sha', isCard: true }, player, false);
}
},
- subSkill:{
- end:{
- audio:'shuangren',
- trigger:{player:'phaseUseEnd'},
- filter:function(event,player,name){
- if(!player.countCards('h')) return false;
- return !player.hasHistory('useSkill',function(evt){
- return evt.skill=='twshuangren';
- })&&!player.hasHistory('sourceDamage',function(evt){
- return evt.card.name=='sha';
+ subSkill: {
+ end: {
+ audio: 'shuangren',
+ trigger: { player: 'phaseUseEnd' },
+ filter: function (event, player, name) {
+ if (!player.countCards('h')) return false;
+ return !player.hasHistory('useSkill', function (evt) {
+ return evt.skill == 'twshuangren';
+ }) && !player.hasHistory('sourceDamage', function (evt) {
+ return evt.card.name == 'sha';
});
},
- direct:true,
- preHidden:true,
- content:function(){
+ direct: true,
+ preHidden: true,
+ content: function () {
'step 0'
- player.chooseToDiscard(get.prompt('twshuangren'),'弃置一张牌发动〖双刃〗','he').set('ai',function(card){
- if(_status.event.goon) return 5-get.value(card);
+ player.chooseToDiscard(get.prompt('twshuangren'), '弃置一张牌发动〖双刃〗', 'he').set('ai', function (card) {
+ if (_status.event.goon) return 5 - get.value(card);
return 0;
- }).set('goon',function(){
- return player.hasCard(function(card){
- if(player.needsToDiscard()>1) return card.number>10&&get.value(card)<=5;
- return (card.number>=9&&get.value(card)<=5)||get.value(card)<=3;
+ }).set('goon', function () {
+ return player.hasCard(function (card) {
+ if (player.needsToDiscard() > 1) return card.number > 10 && get.value(card) <= 5;
+ return (card.number >= 9 && get.value(card) <= 5) || get.value(card) <= 3;
});
- }()).setHiddenSkill('twshuangren').set('logSkill','twshuangren');
+ }()).setHiddenSkill('twshuangren').set('logSkill', 'twshuangren');
'step 1'
- if(result.bool){
+ if (result.bool) {
player.useSkill('twshuangren');
}
}
@@ -6361,927 +6361,927 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
//法正
- twxuanhuo:{
- audio:'rexuanhuo',
- trigger:{player:'phaseDrawEnd'},
- filter:function(event,player){
- return player.countCards('he')>1&&game.countPlayer()>2;
+ twxuanhuo: {
+ audio: 'rexuanhuo',
+ trigger: { player: 'phaseDrawEnd' },
+ filter: function (event, player) {
+ return player.countCards('he') > 1 && game.countPlayer() > 2;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var ai2=function(target){
- var player=_status.event.player;
- if(get.attitude(player,target)<=0) return 0;
- var list=['sha','juedou'];
- var num=Math.max.apply(Math,list.map(function(i){
- return target.getUseValue({name:i,isCard:true},false);
+ var ai2 = function (target) {
+ var player = _status.event.player;
+ if (get.attitude(player, target) <= 0) return 0;
+ var list = ['sha', 'juedou'];
+ var num = Math.max.apply(Math, list.map(function (i) {
+ return target.getUseValue({ name: i, isCard: true }, false);
}));
- if(target.hasSkillTag('nogain')) num/=4;
+ if (target.hasSkillTag('nogain')) num /= 4;
return num;
};
player.chooseCardTarget({
- prompt:get.prompt2('twxuanhuo'),
- filterCard:true,
- selectCard:2,
- position:'he',
- filterTarget:lib.filter.notMe,
- goon:game.hasPlayer(function(current){
- return current!=player&&ai2(player,current)>0;
+ prompt: get.prompt2('twxuanhuo'),
+ filterCard: true,
+ selectCard: 2,
+ position: 'he',
+ filterTarget: lib.filter.notMe,
+ goon: game.hasPlayer(function (current) {
+ return current != player && ai2(player, current) > 0;
}),
- ai1:function(card){
- if(!_status.event.goon) return 0;
- return 7-get.value(card);
+ ai1: function (card) {
+ if (!_status.event.goon) return 0;
+ return 7 - get.value(card);
},
- ai2:ai2,
+ ai2: ai2,
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twxuanhuo',target);
- player.give(result.cards,target);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twxuanhuo', target);
+ player.give(result.cards, target);
}
else event.finish();
'step 2'
- if(game.hasPlayer(function(current){
- return current!=player&¤t!=target;
- })) player.chooseTarget(function(card,player,target){
- return target!=player&&target!=_status.event.target;
- },'选择'+get.translation(target)+'使用【杀】或【决斗】的目标',true).set('target',target).set('ai',function(target){
- var evt=_status.event;
- var list=['sha','juedou'];
- return Math.max.apply(Math,list.map(function(i){
- var card={name:i,isCard:true};
- if(!evt.target.canUse(card,target,false)) return 0;
- return get.effect(target,card,evt.target,evt.player);
+ if (game.hasPlayer(function (current) {
+ return current != player && current != target;
+ })) player.chooseTarget(function (card, player, target) {
+ return target != player && target != _status.event.target;
+ }, '选择' + get.translation(target) + '使用【杀】或【决斗】的目标', true).set('target', target).set('ai', function (target) {
+ var evt = _status.event;
+ var list = ['sha', 'juedou'];
+ return Math.max.apply(Math, list.map(function (i) {
+ var card = { name: i, isCard: true };
+ if (!evt.target.canUse(card, target, false)) return 0;
+ return get.effect(target, card, evt.target, evt.player);
}));
});
else event.finish();
'step 3'
- var target2=result.targets[0];
- event.target2=target2;
+ var target2 = result.targets[0];
+ event.target2 = target2;
player.line(target2);
- var vcards=[];
- if(target.canUse({name:'sha',isCard:true},target2,false)) vcards.push(['基本','','sha']);
- if(target.canUse({name:'juedou',isCard:true},target2,false)) vcards.push(['锦囊','','juedou']);
- if(!vcards.length){
- if(!target.countCards('h')) event.finish();
- else event._result={index:1};
+ var vcards = [];
+ if (target.canUse({ name: 'sha', isCard: true }, target2, false)) vcards.push(['基本', '', 'sha']);
+ if (target.canUse({ name: 'juedou', isCard: true }, target2, false)) vcards.push(['锦囊', '', 'juedou']);
+ if (!vcards.length) {
+ if (!target.countCards('h')) event.finish();
+ else event._result = { index: 1 };
}
- else if(!target.countCards('h')){
- event.vcards=vcards;
- event._result={index:0};
+ else if (!target.countCards('h')) {
+ event.vcards = vcards;
+ event._result = { index: 0 };
}
else {
- event.vcards=vcards;
- target.chooseControl().set('choiceList',[
- '视为对'+get.translation(target2)+'使用一张【杀】或【决斗】',
- '令'+get.translation(player)+'获得你的两张牌',
+ event.vcards = vcards;
+ target.chooseControl().set('choiceList', [
+ '视为对' + get.translation(target2) + '使用一张【杀】或【决斗】',
+ '令' + get.translation(player) + '获得你的两张牌',
]);
}
'step 4'
- if(result.index==0){
- if(event.vcards.length==1) event._result={links:event.vcards,bool:true};
- else target.chooseButton(['请选择要对'+get.translation(event.target2)+'使用的牌',[event.vcards,'vcard']],true).set('ai',function(button){
- var player=_status.event.player;
- return get.effect(_status.event.getParent().target2,{name:button.link[2],isCard:true},player,player);
+ if (result.index == 0) {
+ if (event.vcards.length == 1) event._result = { links: event.vcards, bool: true };
+ else target.chooseButton(['请选择要对' + get.translation(event.target2) + '使用的牌', [event.vcards, 'vcard']], true).set('ai', function (button) {
+ var player = _status.event.player;
+ return get.effect(_status.event.getParent().target2, { name: button.link[2], isCard: true }, player, player);
});
}
else {
- player.gainPlayerCard(target,2,'he',true);
+ player.gainPlayerCard(target, 2, 'he', true);
event.finish();
}
'step 5'
- if(result.bool) target.useCard({name:result.links[0][2],isCard:true},false,event.target2);
+ if (result.bool) target.useCard({ name: result.links[0][2], isCard: true }, false, event.target2);
},
- ai:{
- expose:0.15,
+ ai: {
+ expose: 0.15,
},
},
- twenyuan:{
- audio:'reenyuan',
- group:['twenyuan1','twenyuan2'],
+ twenyuan: {
+ audio: 'reenyuan',
+ group: ['twenyuan1', 'twenyuan2'],
},
- twenyuan1:{
- audio:'reenyuan',
- trigger:{
- global:['gainAfter','loseAsyncAfter']
+ twenyuan1: {
+ audio: 'reenyuan',
+ trigger: {
+ global: ['gainAfter', 'loseAsyncAfter']
},
- direct:true,
- filter:function(event,player){
- var cards=event.getg(player);
- if(!cards.length||cards.length<2) return false;
- return game.countPlayer(current=>{
- if(current==player) return false;
- var evt=event.getl(current);
- if(evt&&evt.cards&&evt.cards.filter(card=>cards.includes(card)).length>=2) return true;
+ direct: true,
+ filter: function (event, player) {
+ var cards = event.getg(player);
+ if (!cards.length || cards.length < 2) return false;
+ return game.countPlayer(current => {
+ if (current == player) return false;
+ var evt = event.getl(current);
+ if (evt && evt.cards && evt.cards.filter(card => cards.includes(card)).length >= 2) return true;
return false;
});
},
- check:function(event,player){
- var cards=event.getg(player);
- var target=game.filterPlayer(current=>{
- if(current==player) return false;
- var evt=event.getl(current);
- if(evt&&evt.cards&&evt.cards.filter(card=>cards.includes(card)).length>=2) return true;
+ check: function (event, player) {
+ var cards = event.getg(player);
+ var target = game.filterPlayer(current => {
+ if (current == player) return false;
+ var evt = event.getl(current);
+ if (evt && evt.cards && evt.cards.filter(card => cards.includes(card)).length >= 2) return true;
return false;
})[0];
- return get.attitude(player,target)>0;
+ return get.attitude(player, target) > 0;
},
- logTarget:function(event,player){
- var cards=event.getg(player);
- return game.filterPlayer(current=>{
- if(current==player) return false;
- var evt=event.getl(current);
- if(evt&&evt.cards&&evt.cards.filter(card=>cards.includes(card)).length>=2) return true;
+ logTarget: function (event, player) {
+ var cards = event.getg(player);
+ return game.filterPlayer(current => {
+ if (current == player) return false;
+ var evt = event.getl(current);
+ if (evt && evt.cards && evt.cards.filter(card => cards.includes(card)).length >= 2) return true;
return false;
});
},
- content:function(){
+ content: function () {
'step 0'
- var target=lib.skill.twenyuan1.logTarget(trigger,player)[0];
- event.target=target;
- var list=['摸一张牌'];
- var prompt2='令'+get.translation(target)+'摸一张牌';
- if((!target.countCards('h')||!target.countCards('e'))&&target.isDamaged()){
+ var target = lib.skill.twenyuan1.logTarget(trigger, player)[0];
+ event.target = target;
+ var list = ['摸一张牌'];
+ var prompt2 = '令' + get.translation(target) + '摸一张牌';
+ if ((!target.countCards('h') || !target.countCards('e')) && target.isDamaged()) {
list.push('回复1点体力');
- prompt2+='或回复1点体力';
+ prompt2 += '或回复1点体力';
}
list.push('cancel2');
- player.chooseControl(list).set('prompt',get.prompt('twenyuan',target)).set('prompt2',prompt2).set('ai',()=>_status.event.choice).set('choice',function(){
- if(get.attitude(player,target)>0){
- if(target.hp<=2&&list.includes('回复1点体力')) return '回复1点体力';
+ player.chooseControl(list).set('prompt', get.prompt('twenyuan', target)).set('prompt2', prompt2).set('ai', () => _status.event.choice).set('choice', function () {
+ if (get.attitude(player, target) > 0) {
+ if (target.hp <= 2 && list.includes('回复1点体力')) return '回复1点体力';
return 0;
}
return 'cancel2';
}());
'step 1'
- if(result.control=='cancel2'){
+ if (result.control == 'cancel2') {
event.finish(); return;
}
- player.logSkill('twenyuan1',target);
- if(result.control=='回复1点体力') target.recover();
+ player.logSkill('twenyuan1', target);
+ if (result.control == '回复1点体力') target.recover();
else target.draw();
},
},
- twenyuan2:{
- audio:'reenyuan',
- trigger:{player:'damageEnd'},
- logTarget:'source',
- filter:function(event,player){
- return event.source&&event.source.isIn();
+ twenyuan2: {
+ audio: 'reenyuan',
+ trigger: { player: 'damageEnd' },
+ logTarget: 'source',
+ filter: function (event, player) {
+ return event.source && event.source.isIn();
},
- check:function(event,player){
- var att=get.attitude(player,event.source);
- var num=event.source.countCards('h');
- if(att<=0) return true;
- if(get.effect(event.source,{name:'losehp'},player,event.source)>0) return true;
- if(num>2) return true;
- if(num) return att<4;
+ check: function (event, player) {
+ var att = get.attitude(player, event.source);
+ var num = event.source.countCards('h');
+ if (att <= 0) return true;
+ if (get.effect(event.source, { name: 'losehp' }, player, event.source) > 0) return true;
+ if (num > 2) return true;
+ if (num) return att < 4;
return false;
},
- prompt2:'令其选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。',
- content:function(){
+ prompt2: '令其选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。',
+ content: function () {
'step 0'
- event.count=trigger.num;
+ event.count = trigger.num;
'step 1'
- var target=trigger.source;
+ var target = trigger.source;
event.count--;
- if(!target.countCards('h')) event._result={bool:false};
- else target.chooseCard('h','恩怨:将一张手牌交给'+get.translation(player)+',或失去1点体力').set('ai',function(card){
- if(get.attitude(_status.event.player,_status.event.getParent().player)>0){
- if(get.suit(card)!='heart') return 15-get.value(card);
- return 11-get.value(card);
+ if (!target.countCards('h')) event._result = { bool: false };
+ else target.chooseCard('h', '恩怨:将一张手牌交给' + get.translation(player) + ',或失去1点体力').set('ai', function (card) {
+ if (get.attitude(_status.event.player, _status.event.getParent().player) > 0) {
+ if (get.suit(card) != 'heart') return 15 - get.value(card);
+ return 11 - get.value(card);
}
else {
- var num=12-_status.event.player.hp*2;
- if(get.suit(card)!='heart') num-=2;
- return num-get.value(card);
+ var num = 12 - _status.event.player.hp * 2;
+ if (get.suit(card) != 'heart') num -= 2;
+ return num - get.value(card);
}
});
'step 2'
- var target=trigger.source;
- if(result.bool){
- var card=result.cards[0];
- event.card=card;
- target.give(card,player);
+ var target = trigger.source;
+ if (result.bool) {
+ var card = result.cards[0];
+ event.card = card;
+ target.give(card, player);
}
- else{
+ else {
target.loseHp();
event.goto(4);
}
'step 3'
- if(get.suit(card)!='heart') player.draw();
+ if (get.suit(card) != 'heart') player.draw();
'step 4'
- var target=trigger.source;
- if(target.isIn()&&event.count>0&&player.hasSkill('twenyuan')) player.chooseBool(get.prompt('twenyuan',target),lib.skill.twenyuan2.prompt2).set('ai',function(){
- var evt=_status.event.getTrigger();
- return lib.skill.twenyuan2.check(evt,evt.player);
+ var target = trigger.source;
+ if (target.isIn() && event.count > 0 && player.hasSkill('twenyuan')) player.chooseBool(get.prompt('twenyuan', target), lib.skill.twenyuan2.prompt2).set('ai', function () {
+ var evt = _status.event.getTrigger();
+ return lib.skill.twenyuan2.check(evt, evt.player);
});
else event.finish();
'step 5'
- if(result.bool){
- player.logSkill('twenyuan2',trigger.source);
+ if (result.bool) {
+ player.logSkill('twenyuan2', trigger.source);
event.goto(1);
}
},
},
//马岱
- twqianxi:{
- audio:'qianxi',
- trigger:{player:'phaseZhunbeiBegin'},
- preHidden:true,
- content:function(){
+ twqianxi: {
+ audio: 'qianxi',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ preHidden: true,
+ content: function () {
'step 0'
player.draw();
'step 1'
- if(player.hasCard((card)=>lib.filter.cardDiscardable(card,player,'tweqianxi'),'he')) player.chooseToDiscard('he',true);
+ if (player.hasCard((card) => lib.filter.cardDiscardable(card, player, 'tweqianxi'), 'he')) player.chooseToDiscard('he', true);
else event.finish();
'step 2'
- if(!result.bool||!game.hasPlayer(target=>{
- return player!=target&&get.distance(player,target)<=1;
- })){
+ if (!result.bool || !game.hasPlayer(target => {
+ return player != target && get.distance(player, target) <= 1;
+ })) {
event.finish();
return;
}
- event.color=get.color(result.cards[0],player);
- player.chooseTarget(function(card,player,target){
- return player!=target&&get.distance(player,target)<=1;
- },true).set('ai',function(target){
- return get.effect(target,{name:'sha'},_status.event.player,_status.event.player)+5;
+ event.color = get.color(result.cards[0], player);
+ player.chooseTarget(function (card, player, target) {
+ return player != target && get.distance(player, target) <= 1;
+ }, true).set('ai', function (target) {
+ return get.effect(target, { name: 'sha' }, _status.event.player, _status.event.player) + 5;
});
'step 3'
- if(result.bool){
- var target=result.targets[0];
+ if (result.bool) {
+ var target = result.targets[0];
player.line(target);
- target.storage.twqianxi2=event.color;
+ target.storage.twqianxi2 = event.color;
target.addTempSkill('twqianxi2');
player.addTempSkill('twqianxi_self');
- player.markAuto('twqianxi_self',[target]);
+ player.markAuto('twqianxi_self', [target]);
}
},
- subSkill:{
- self:{
- audio:'qianxi',
- charlotte:true,
- onremove:true,
- forced:true,
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
- return player.hasHistory('sourceDamage',evt=>{
- if(!evt.card||evt.card.name!='sha'||!evt.player.isIn()) return false;
- if(player.getStorage('twqianxi_self').includes(evt.player)) return true;
+ subSkill: {
+ self: {
+ audio: 'qianxi',
+ charlotte: true,
+ onremove: true,
+ forced: true,
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return player.hasHistory('sourceDamage', evt => {
+ if (!evt.card || evt.card.name != 'sha' || !evt.player.isIn()) return false;
+ if (player.getStorage('twqianxi_self').includes(evt.player)) return true;
return false;
});
},
- content:function(){
+ content: function () {
'step 0'
- var targets=[];
- player.getHistory('sourceDamage',evt=>{
- if(!evt.card||evt.card.name!='sha') return false;
- if(player.getStorage('twqianxi_self').includes(evt.player)){
+ var targets = [];
+ player.getHistory('sourceDamage', evt => {
+ if (!evt.card || evt.card.name != 'sha') return false;
+ if (player.getStorage('twqianxi_self').includes(evt.player)) {
targets.add(evt.player);
}
return false;
});
player.line(targets);
- for(var target of targets){
- target.storage.twqianxi3=target.storage.twqianxi2;
- target.addTempSkill('twqianxi3',{player:'phaseAfter'});
+ for (var target of targets) {
+ target.storage.twqianxi3 = target.storage.twqianxi2;
+ target.addTempSkill('twqianxi3', { player: 'phaseAfter' });
}
}
}
}
},
- twqianxi2:{
- mark:true,
- charlotte:true,
- onremove:true,
- intro:{
- markcount:()=>0,
- content:function(storage){
- return '不能使用或打出'+get.translation(storage)+'手牌';
+ twqianxi2: {
+ mark: true,
+ charlotte: true,
+ onremove: true,
+ intro: {
+ markcount: () => 0,
+ content: function (storage) {
+ return '不能使用或打出' + get.translation(storage) + '手牌';
},
},
- mod:{
- cardEnabled2:function(card,player){
- if(get.itemtype(card)=='card'&&get.color(card)==player.getStorage('twqianxi2')&&get.position(card)=='h') return false;
+ mod: {
+ cardEnabled2: function (card, player) {
+ if (get.itemtype(card) == 'card' && get.color(card) == player.getStorage('twqianxi2') && get.position(card) == 'h') return false;
},
},
},
- twqianxi3:{
- mod:{
- cardEnabled2:function(card,player){
- if(get.itemtype(card)=='card'&&get.color(card)!=player.getStorage('twqianxi3')&&get.position(card)=='h') return false;
+ twqianxi3: {
+ mod: {
+ cardEnabled2: function (card, player) {
+ if (get.itemtype(card) == 'card' && get.color(card) != player.getStorage('twqianxi3') && get.position(card) == 'h') return false;
},
},
- mark:true,
- intro:{
- content:function(storage){
- return '不能使用或打出非'+get.translation(storage)+'手牌';
+ mark: true,
+ intro: {
+ content: function (storage) {
+ return '不能使用或打出非' + get.translation(storage) + '手牌';
},
},
- charlotte:true,
- onremove:true,
+ charlotte: true,
+ onremove: true,
},
//牛金
- twcuorui:{
- audio:'cuorui',
- limited:true,
- skillAnimation:true,
- animationColor:'thunder',
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current.countCards('h')>player.countCards('h');
+ twcuorui: {
+ audio: 'cuorui',
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'thunder',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current.countCards('h') > player.countCards('h');
});
},
- check:function(event,player){
- var num=0;
- for(var target of game.players){
- if(target!=player&&target.countCards('h')>num) num=target.countCards('h');
+ check: function (event, player) {
+ var num = 0;
+ for (var target of game.players) {
+ if (target != player && target.countCards('h') > num) num = target.countCards('h');
}
- num=Math.min(num,5+player.countCards('h'));
- return num-player.countCards('h')>=2;
+ num = Math.min(num, 5 + player.countCards('h'));
+ return num - player.countCards('h') >= 2;
},
- prompt:function(event,player){
- var num=0;
- for(var target of game.players){
- if(target!=player&&target.countCards('h')>num) num=target.countCards('h');
+ prompt: function (event, player) {
+ var num = 0;
+ for (var target of game.players) {
+ if (target != player && target.countCards('h') > num) num = target.countCards('h');
}
- num=Math.min(num,5+player.countCards('h'));
- return get.prompt('twcuorui')+'(可摸'+get.cnNumber(num-player.countCards('h'))+'张牌)';
+ num = Math.min(num, 5 + player.countCards('h'));
+ return get.prompt('twcuorui') + '(可摸' + get.cnNumber(num - player.countCards('h')) + '张牌)';
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twcuorui');
- var num=0;
- for(var target of game.players){
- if(target!=player&&target.countCards('h')>num) num=target.countCards('h');
+ var num = 0;
+ for (var target of game.players) {
+ if (target != player && target.countCards('h') > num) num = target.countCards('h');
}
- num=Math.min(num,5+player.countCards('h'));
+ num = Math.min(num, 5 + player.countCards('h'));
player.drawTo(num);
- if(!player.isDisabledJudge()){
+ if (!player.isDisabledJudge()) {
player.disableJudge();
event.finish();
}
- else player.chooseTarget('挫锐:是否对一名其他角色造成1点伤害?',lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- return get.damageEffect(target,player,player);
+ else player.chooseTarget('挫锐:是否对一名其他角色造成1点伤害?', lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.damageEffect(target, player, player);
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.line(result.targets[0]);
result.targets[0].damage();
}
},
},
- twliewei:{
- audio:'liewei',
- trigger:{source:'dieAfter'},
- forced:true,
- content:function(){
+ twliewei: {
+ audio: 'liewei',
+ trigger: { source: 'dieAfter' },
+ forced: true,
+ content: function () {
'step 0'
- if(!player.hasSkill('twcuorui',null,null,false)||!player.awakenedSkills.includes('twcuorui')) event._result={index:0};
- else player.chooseControl().set('prompt','裂围:请选择一项').set('choiceList',[
+ if (!player.hasSkill('twcuorui', null, null, false) || !player.awakenedSkills.includes('twcuorui')) event._result = { index: 0 };
+ else player.chooseControl().set('prompt', '裂围:请选择一项').set('choiceList', [
'摸两张牌',
'重置〖挫锐〗'
- ]).set('ai',function(){
+ ]).set('ai', function () {
return 1;
});
'step 1'
- if(result.index==0) player.draw(2);
+ if (result.index == 0) player.draw(2);
else player.restoreSkill('twcuorui');
},
},
//母兵脸
- twzhengrong:{
- audio:'drlt_zhenrong',
- trigger:{player:'useCardAfter',source:'damageSource'},
- filter:function(event,player){
- if(!event.isPhaseUsing(player)) return false;
- if(event.name=='damage') return player.getHistory('sourceDamage',evt=>{
- return evt.getParent('phaseUse')==event.getParent('phaseUse');
- }).indexOf(event)==0;
- if(!event.targets||event.targets.every(target=>target==player)) return false;
- return player.getAllHistory('useCard',function(evt){
- if(!evt.isPhaseUsing(player)) return false;
- if(evt.targets.every(target=>target==player)) return false;
+ twzhengrong: {
+ audio: 'drlt_zhenrong',
+ trigger: { player: 'useCardAfter', source: 'damageSource' },
+ filter: function (event, player) {
+ if (!event.isPhaseUsing(player)) return false;
+ if (event.name == 'damage') return player.getHistory('sourceDamage', evt => {
+ return evt.getParent('phaseUse') == event.getParent('phaseUse');
+ }).indexOf(event) == 0;
+ if (!event.targets || event.targets.every(target => target == player)) return false;
+ return player.getAllHistory('useCard', function (evt) {
+ if (!evt.isPhaseUsing(player)) return false;
+ if (evt.targets.every(target => target == player)) return false;
return true;
- }).indexOf(event)%2==1;
+ }).indexOf(event) % 2 == 1;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- if(!game.hasPlayer(function(target){
- return target!=player&&target.countCards('he');
- })){
+ if (!game.hasPlayer(function (target) {
+ return target != player && target.countCards('he');
+ })) {
event.finish();
return;
}
- player.chooseTarget(get.prompt('twzhengrong'),'将一名其他角色的一张牌置于武将牌上,称为“荣”',function(card,player,target){
- return target!=player&&target.countCards('he');
- }).set('ai',function(target){
- return get.effect(target,{name:'guohe_copy2'},_status.event.player,_status.event.player);
+ player.chooseTarget(get.prompt('twzhengrong'), '将一名其他角色的一张牌置于武将牌上,称为“荣”', function (card, player, target) {
+ return target != player && target.countCards('he');
+ }).set('ai', function (target) {
+ return get.effect(target, { name: 'guohe_copy2' }, _status.event.player, _status.event.player);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=result.targets[0];
- player.logSkill('twzhengrong',target);
- player.choosePlayerCard(target,'he',true);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = result.targets[0];
+ player.logSkill('twzhengrong', target);
+ player.choosePlayerCard(target, 'he', true);
}
else event.finish();
'step 2'
- if(result.bool) player.addToExpansion(result.links,target,'give').gaintag.add('twzhengrong');
+ if (result.bool) player.addToExpansion(result.links, target, 'give').gaintag.add('twzhengrong');
},
- marktext:'荣',
- onremove:function(player,skill){
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ marktext: '荣',
+ onremove: function (player, skill) {
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
- intro:{
- content:'expansion',
- markcount:'expansion',
+ intro: {
+ content: 'expansion',
+ markcount: 'expansion',
}
},
- twhongju:{
- derivation:['twqingce','twsaotao'],
- audio:'drlt_hongju',
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
- juexingji:true,
- skillAnimation:true,
- animationColor:'thunder',
- filter:function(event,player){
- return player.getExpansions('twzhengrong').length>=3;
+ twhongju: {
+ derivation: ['twqingce', 'twsaotao'],
+ audio: 'drlt_hongju',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ forced: true,
+ juexingji: true,
+ skillAnimation: true,
+ animationColor: 'thunder',
+ filter: function (event, player) {
+ return player.getExpansions('twzhengrong').length >= 3;
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twhongju');
player.draw(player.getExpansions('twzhengrong').length);
'step 1'
- if(player.countCards('h')==0) event.goto(3);
- else{
- var next=player.chooseToMove('鸿举:请选择要交换的手牌和“荣”');
- next.set('list',[
- [get.translation(player)+'(你)的“荣”',player.getExpansions('twzhengrong'),'twzhengrong_tag'],
- ['手牌区',player.getCards('h')],
+ if (player.countCards('h') == 0) event.goto(3);
+ else {
+ var next = player.chooseToMove('鸿举:请选择要交换的手牌和“荣”');
+ next.set('list', [
+ [get.translation(player) + '(你)的“荣”', player.getExpansions('twzhengrong'), 'twzhengrong_tag'],
+ ['手牌区', player.getCards('h')],
]);
- next.set('filterMove',function(from,to){
- return typeof to!='number';
+ next.set('filterMove', function (from, to) {
+ return typeof to != 'number';
});
- next.set('processAI',function(list){
- var player=_status.event.player,cards=list[0][1].concat(list[1][1]).sort(function(a,b){
- return player.getUseValue(a)-player.getUseValue(b);
- }),cards2=cards.splice(0,player.getExpansions('twzhengrong').length);
- return [cards2,cards];
+ next.set('processAI', function (list) {
+ var player = _status.event.player, cards = list[0][1].concat(list[1][1]).sort(function (a, b) {
+ return player.getUseValue(a) - player.getUseValue(b);
+ }), cards2 = cards.splice(0, player.getExpansions('twzhengrong').length);
+ return [cards2, cards];
});
}
'step 2'
- if(result.bool){
- var pushs=result.moved[0],gains=result.moved[1];
+ if (result.bool) {
+ var pushs = result.moved[0], gains = result.moved[1];
pushs.removeArray(player.getExpansions('twzhengrong'));
gains.removeArray(player.getCards('h'));
- if(!pushs.length||pushs.length!=gains.length) return;
- player.addToExpansion(pushs,player,'giveAuto').gaintag.add('twzhengrong');
- game.log(player,'将',pushs,'作为“荣”置于武将牌上');
- player.gain(gains,'gain2');
+ if (!pushs.length || pushs.length != gains.length) return;
+ player.addToExpansion(pushs, player, 'giveAuto').gaintag.add('twzhengrong');
+ game.log(player, '将', pushs, '作为“荣”置于武将牌上');
+ player.gain(gains, 'gain2');
}
'step 3'
player.addSkills('twqingce');
- player.chooseBool('是否减1点体力上限并获得〖扫讨〗?').set('ai',()=>_status.event.bool).set('bool',player.isDamaged()&&player.countCards('h')>=3?(Math.random()<0.5?true:false):false);
+ player.chooseBool('是否减1点体力上限并获得〖扫讨〗?').set('ai', () => _status.event.bool).set('bool', player.isDamaged() && player.countCards('h') >= 3 ? (Math.random() < 0.5 ? true : false) : false);
'step 4'
- if(result.bool){
+ if (result.bool) {
player.loseMaxHp();
player.addSkills('twsaotao');
game.delayx();
}
},
},
- twqingce:{
- enable:'phaseUse',
- audio:'drlt_qingce',
- filter:function(event,player){
- return player.getExpansions('twzhengrong').length>0;
+ twqingce: {
+ enable: 'phaseUse',
+ audio: 'drlt_qingce',
+ filter: function (event, player) {
+ return player.getExpansions('twzhengrong').length > 0;
},
- chooseButton:{
- dialog:function(event,player){
- return ui.create.dialog('清侧:请选择要移去的“荣”',player.getExpansions('twzhengrong'),'hidden');
+ chooseButton: {
+ dialog: function (event, player) {
+ return ui.create.dialog('清侧:请选择要移去的“荣”', player.getExpansions('twzhengrong'), 'hidden');
},
- backup:function(links,player){
+ backup: function (links, player) {
return {
- card:links[0],
- filterCard:function(){return false},
- selectCard:-1,
- filterTarget:function(card,player,target){
- return target.countDiscardableCards(player,'hej')>0;
+ card: links[0],
+ filterCard: function () { return false },
+ selectCard: -1,
+ filterTarget: function (card, player, target) {
+ return target.countDiscardableCards(player, 'hej') > 0;
},
- delay:false,
- audio:'drlt_qingce',
- content:lib.skill.twqingce.contentx,
- ai:{
- result:{
- target:function(player,target){
- return get.effect(target,{name:'guohe'},player,target);
+ delay: false,
+ audio: 'drlt_qingce',
+ content: lib.skill.twqingce.contentx,
+ ai: {
+ result: {
+ target: function (player, target) {
+ return get.effect(target, { name: 'guohe' }, player, target);
},
},
},
}
},
- prompt:()=>'弃置一名角色区域内的一张牌',
+ prompt: () => '弃置一名角色区域内的一张牌',
},
- contentx:function(){
+ contentx: function () {
'step 0'
- var card=lib.skill.twqingce_backup.card;
+ var card = lib.skill.twqingce_backup.card;
player.loseToDiscardpile([card]);
'step 1'
- if(target.countDiscardableCards(player,'hej')>0) player.discardPlayerCard('hej',true,target);
+ if (target.countDiscardableCards(player, 'hej') > 0) player.discardPlayerCard('hej', true, target);
},
- ai:{
- order:8,
- result:{
- player:function(player){
- if(game.hasPlayer(function(target){
- return get.effect(target,{name:'guohe'},player,player)>4*Math.max(0,5-player.getExpansions('twzhengrong').length);
+ ai: {
+ order: 8,
+ result: {
+ player: function (player) {
+ if (game.hasPlayer(function (target) {
+ return get.effect(target, { name: 'guohe' }, player, player) > 4 * Math.max(0, 5 - player.getExpansions('twzhengrong').length);
})) return 1;
return 0;
},
},
},
},
- twsaotao:{
- audio:2,
- trigger:{player:'useCard'},
- filter:function(event,player){
- return event.card.name=='sha'||get.type(event.card)=='trick';
+ twsaotao: {
+ audio: 2,
+ trigger: { player: 'useCard' },
+ filter: function (event, player) {
+ return event.card.name == 'sha' || get.type(event.card) == 'trick';
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
trigger.directHit.addArray(game.players);
},
- ai:{directHit_ai:true},
+ ai: { directHit_ai: true },
},
//大小乔
- twxingwu:{
- audio:'xingwu',
- trigger:{player:'phaseDiscardBegin'},
- filter:function(event,player){
+ twxingwu: {
+ audio: 'xingwu',
+ trigger: { player: 'phaseDiscardBegin' },
+ filter: function (event, player) {
return player.countCards('he');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseCard('he',get.prompt('twxingwu'),'将一张牌置于武将牌上作为“星舞”').set('ai',function(card){
- if(_status.event.goon) return 20-get.value(card);
- return 7-get.value(card);
- }).set('goon',player.needsToDiscard()||player.getExpansions('twxingwu').length>1);
+ player.chooseCard('he', get.prompt('twxingwu'), '将一张牌置于武将牌上作为“星舞”').set('ai', function (card) {
+ if (_status.event.goon) return 20 - get.value(card);
+ return 7 - get.value(card);
+ }).set('goon', player.needsToDiscard() || player.getExpansions('twxingwu').length > 1);
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twxingwu');
- var cards=result.cards;
- player.addToExpansion(cards,player,'give').gaintag.add('twxingwu');
+ var cards = result.cards;
+ player.addToExpansion(cards, player, 'give').gaintag.add('twxingwu');
}
else event.finish();
'step 2'
game.delayx();
- if(player.getExpansions('twxingwu').length<3||!game.hasPlayer(current=>current!=player)) event.finish();
+ if (player.getExpansions('twxingwu').length < 3 || !game.hasPlayer(current => current != player)) event.finish();
'step 3'
- player.chooseButton(['是否移去三张“星舞”牌并发射核弹?',player.getExpansions('twxingwu')],3).set('ai',function(button){
- if(_status.event.goon) return 1;
+ player.chooseButton(['是否移去三张“星舞”牌并发射核弹?', player.getExpansions('twxingwu')], 3).set('ai', function (button) {
+ if (_status.event.goon) return 1;
return 0;
- }).set('goon',game.hasPlayer(current=>get.damageEffect(current,player,player)<0));
+ }).set('goon', game.hasPlayer(current => get.damageEffect(current, player, player) < 0));
'step 4'
- if(result.bool) player.loseToDiscardpile(result.links);
+ if (result.bool) player.loseToDiscardpile(result.links);
else event.finish();
'step 5'
- player.chooseTarget('星舞:选择一名其他角色','弃置其装备区内的所有牌。然后对其造成2点伤害(若其性别包含女性则改为1点)',true,lib.filter.notMe).set('ai',function(target){
- return get.damageEffect(target,player,player)*Math.sqrt(4+target.countCards('e',function(card){
- return get.value(card,target)>0;
- }))*(target.hasSex('female')?1:2);
+ player.chooseTarget('星舞:选择一名其他角色', '弃置其装备区内的所有牌。然后对其造成2点伤害(若其性别包含女性则改为1点)', true, lib.filter.notMe).set('ai', function (target) {
+ return get.damageEffect(target, player, player) * Math.sqrt(4 + target.countCards('e', function (card) {
+ return get.value(card, target) > 0;
+ })) * (target.hasSex('female') ? 1 : 2);
});
'step 6'
- if(result.bool&&result.targets&&result.targets.length){
- var target=result.targets[0];
- player.line(target,'green');
- var num=target.countCards('e');
- if(num) player.discardPlayerCard(target,'e',num,true);
- target.damage(target.hasSex('female')?1:2);
+ if (result.bool && result.targets && result.targets.length) {
+ var target = result.targets[0];
+ player.line(target, 'green');
+ var num = target.countCards('e');
+ if (num) player.discardPlayerCard(target, 'e', num, true);
+ target.damage(target.hasSex('female') ? 1 : 2);
}
},
- intro:{
- content:'expansion',
- markcount:'expansion',
- onunmark:function(storage,player){
- if(player.hasSkill('twpingting')) return;
+ intro: {
+ content: 'expansion',
+ markcount: 'expansion',
+ onunmark: function (storage, player) {
+ if (player.hasSkill('twpingting')) return;
player.removeAdditionalSkill('twpingting');
},
},
- onremove:function(player,skill){
- if(player.hasSkill('twpingting')) return;
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ onremove: function (player, skill) {
+ if (player.hasSkill('twpingting')) return;
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
},
- twpingting:{
- audio:2,
- trigger:{global:['roundStart','dying']},
- init:function(player,skill){
- if(player.getExpansions('twxingwu').length) player.addAdditionalSkill(skill,['tianxiang','liuli']);
+ twpingting: {
+ audio: 2,
+ trigger: { global: ['roundStart', 'dying'] },
+ init: function (player, skill) {
+ if (player.getExpansions('twxingwu').length) player.addAdditionalSkill(skill, ['tianxiang', 'liuli']);
else player.removeAdditionalSkill(skill);
},
- filter:function(event,player){
- if(event.name=='dying') return player==_status.currentPhase&&event.player!=player;
+ filter: function (event, player) {
+ if (event.name == 'dying') return player == _status.currentPhase && event.player != player;
return true;
},
- forced:true,
- group:'twpingting_update',
- derivation:['tianxiang','liuli'],
- content:function(){
+ forced: true,
+ group: 'twpingting_update',
+ derivation: ['tianxiang', 'liuli'],
+ content: function () {
'step 0'
player.draw();
- player.chooseCard('he','娉婷:将一张牌置于武将牌上,称为“星舞”',true).set('ai',function(card){
+ player.chooseCard('he', '娉婷:将一张牌置于武将牌上,称为“星舞”', true).set('ai', function (card) {
return -get.value(card);
});
'step 1'
- if(result.bool){
- var cards=result.cards;
- player.addToExpansion(cards,player,'give').gaintag.add('twxingwu');
+ if (result.bool) {
+ var cards = result.cards;
+ player.addToExpansion(cards, player, 'give').gaintag.add('twxingwu');
}
},
- onremove:function(player,skill){
- if(player.hasSkill('twxingwu')) return;
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ onremove: function (player, skill) {
+ if (player.hasSkill('twxingwu')) return;
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
- subSkill:{
- update:{
- trigger:{player:['loseAfter','loseAsyncAfter','addToExpansionAfter']},
- filter:function(event,player){
- var cards=player.getExpansions('twxingwu'),skills=player.additionalSkills.twpingting;
- return !((cards.length&&skills&&skills.length)||(!cards.length&&(!skills||!skills.length)));
+ subSkill: {
+ update: {
+ trigger: { player: ['loseAfter', 'loseAsyncAfter', 'addToExpansionAfter'] },
+ filter: function (event, player) {
+ var cards = player.getExpansions('twxingwu'), skills = player.additionalSkills.twpingting;
+ return !((cards.length && skills && skills.length) || (!cards.length && (!skills || !skills.length)));
},
- forced:true,
- silent:true,
- content:function(){
- lib.skill.twpingting.init(player,'twpingting');
+ forced: true,
+ silent: true,
+ content: function () {
+ lib.skill.twpingting.init(player, 'twpingting');
}
}
}
},
- tianxiang_daxiaoqiao:{audio:2,inherit:'tianxiang'},
- liuli_daxiaoqiao:{audio:2,inherit:'liuli'},
+ tianxiang_daxiaoqiao: { audio: 2, inherit: 'tianxiang' },
+ liuli_daxiaoqiao: { audio: 2, inherit: 'liuli' },
//傅肜
- twxuewei:{
- audio:'xuewei',
- trigger:{global:'phaseUseBegin'},
- filter:function(event,player){
- return event.player!=player&&game.players.length>2&&!player.hasSkill('twxuewei_round');
+ twxuewei: {
+ audio: 'xuewei',
+ trigger: { global: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return event.player != player && game.players.length > 2 && !player.hasSkill('twxuewei_round');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twxuewei'),function(card,player,target){
- return target!=player&&target!=_status.event.getTrigger().player;
- }).set('ai',function(target){
- if(get.attitude(player,_status.event.getTrigger().player)>=0) return 0;
- return get.attitude(player,target);
+ player.chooseTarget(get.prompt2('twxuewei'), function (card, player, target) {
+ return target != player && target != _status.event.getTrigger().player;
+ }).set('ai', function (target) {
+ if (get.attitude(player, _status.event.getTrigger().player) >= 0) return 0;
+ return get.attitude(player, target);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twxuewei',trigger.player,false);
- player.addTempSkill('twxuewei_round','roundStart');
- player.line2([trigger.player,target]);
- trigger.player.chooseControl('选项一','选项二').set('choiceList',[
- '本回合不能对'+get.translation(target)+'使用【杀】且手牌上限-2',
- '令'+get.translation(player)+'视为对你使用一张【决斗】',
- ]).set('ai',function(){
- var player=_status.event.player,source=_status.event.getParent().player;
- if(get.effect(player,{name:'juedou'},source,player)>0) return 1;
- if(player.hp-player.countCards('h')>2||player.hp<=2) return 0;
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twxuewei', trigger.player, false);
+ player.addTempSkill('twxuewei_round', 'roundStart');
+ player.line2([trigger.player, target]);
+ trigger.player.chooseControl('选项一', '选项二').set('choiceList', [
+ '本回合不能对' + get.translation(target) + '使用【杀】且手牌上限-2',
+ '令' + get.translation(player) + '视为对你使用一张【决斗】',
+ ]).set('ai', function () {
+ var player = _status.event.player, source = _status.event.getParent().player;
+ if (get.effect(player, { name: 'juedou' }, source, player) > 0) return 1;
+ if (player.hp - player.countCards('h') > 2 || player.hp <= 2) return 0;
return 1;
});
}
else event.finish();
'step 2'
- game.log(trigger.player,'选择了','#g【血卫】','的','#y'+result.control);
- if(result.control=='选项一'){
- trigger.player.markAuto('twxuewei_block',[target]);
+ game.log(trigger.player, '选择了', '#g【血卫】', '的', '#y' + result.control);
+ if (result.control == '选项一') {
+ trigger.player.markAuto('twxuewei_block', [target]);
trigger.player.addTempSkill('twxuewei_block');
}
- else player.useCard({name:'juedou',isCard:true},trigger.player,false);
+ else player.useCard({ name: 'juedou', isCard: true }, trigger.player, false);
},
- subSkill:{
- round:{charlotte:true},
- block:{
- charlotte:true,
- onremove:true,
- locked:true,
- mark:true,
- marktext:'卫',
- intro:{
- content:function(storage,player){
- if(!storage||!storage.length) return;
- return '不能对'+get.translation(storage)+'使用【杀】;手牌上限-'+(2*storage.length);
+ subSkill: {
+ round: { charlotte: true },
+ block: {
+ charlotte: true,
+ onremove: true,
+ locked: true,
+ mark: true,
+ marktext: '卫',
+ intro: {
+ content: function (storage, player) {
+ if (!storage || !storage.length) return;
+ return '不能对' + get.translation(storage) + '使用【杀】;手牌上限-' + (2 * storage.length);
}
},
- mod:{
- maxHandcard:function(player,num){
- return num-2*player.getStorage('twxuewei_block').length;
+ mod: {
+ maxHandcard: function (player, num) {
+ return num - 2 * player.getStorage('twxuewei_block').length;
},
- playerEnabled:function(card,player,target){
- if(card.name=='sha'&&player.getStorage('twxuewei_block').includes(target)) return false;
+ playerEnabled: function (card, player, target) {
+ if (card.name == 'sha' && player.getStorage('twxuewei_block').includes(target)) return false;
},
},
},
},
},
- twliechi:{
- audio:'liechi',
- trigger:{player:'damageEnd'},
- filter:function(event,player){
- return event.source&&event.source.hp>=player.hp&&(event.source.countCards('h')>player.countCards('h')||event.source.countCards('he'));
+ twliechi: {
+ audio: 'liechi',
+ trigger: { player: 'damageEnd' },
+ filter: function (event, player) {
+ return event.source && event.source.hp >= player.hp && (event.source.countCards('h') > player.countCards('h') || event.source.countCards('he'));
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var num=trigger.source.countCards('h')-player.countCards('h');
- event.num=num;
- var list=[],choiceList=[
- '令'+get.translation(trigger.source)+'弃置'+get.cnNumber(num)+'张手牌',
- '弃置'+get.translation(trigger.source)+'一张牌',
+ var num = trigger.source.countCards('h') - player.countCards('h');
+ event.num = num;
+ var list = [], choiceList = [
+ '令' + get.translation(trigger.source) + '弃置' + get.cnNumber(num) + '张手牌',
+ '弃置' + get.translation(trigger.source) + '一张牌',
'背水!弃置一张装备牌,然后依次执行以上所有选项',
];
- if(trigger.source.countCards('h')>player.countCards('h')) list.push('选项一');
- else choiceList[0]=''+choiceList[0]+'';
- if(trigger.source.countCards('he')) list.push('选项二');
- else choiceList[1]=''+choiceList[1]+'';
- if(trigger.source.countCards('h')>player.countCards('h')&&trigger.source.countCards('he')&&player.countCards('he',{type:'equip'})&&game.getGlobalHistory('changeHp',evt=>{
- return evt.player==player&&evt.getParent()._dyinged;
+ if (trigger.source.countCards('h') > player.countCards('h')) list.push('选项一');
+ else choiceList[0] = '' + choiceList[0] + '';
+ if (trigger.source.countCards('he')) list.push('选项二');
+ else choiceList[1] = '' + choiceList[1] + '';
+ if (trigger.source.countCards('h') > player.countCards('h') && trigger.source.countCards('he') && player.countCards('he', { type: 'equip' }) && game.getGlobalHistory('changeHp', evt => {
+ return evt.player == player && evt.getParent()._dyinged;
}).length) list.push('背水!');
- else choiceList[2]=''+choiceList[2]+'(未进入过濒死状态)';
- player.chooseControl(list,'cancel2').set('prompt',get.prompt('twliechi',trigger.source)).set('choiceList',choiceList).set('ai',()=>_status.event.choice).set('choice',function(){
- if(get.attitude(player,trigger.source)>0) return 'cancel2';
- if(list.includes('背水!')) return '背水!';
- if(num>1) return '选项一';
+ else choiceList[2] = '' + choiceList[2] + '(未进入过濒死状态)';
+ player.chooseControl(list, 'cancel2').set('prompt', get.prompt('twliechi', trigger.source)).set('choiceList', choiceList).set('ai', () => _status.event.choice).set('choice', function () {
+ if (get.attitude(player, trigger.source) > 0) return 'cancel2';
+ if (list.includes('背水!')) return '背水!';
+ if (num > 1) return '选项一';
return '选项二';
}());
'step 1'
- if(result.control!='cancel2'){
- player.logSkill('twliechi',trigger.source);
- game.log(player,'选择了','#g【烈斥】','的','#y'+result.control);
- if(result.control=='背水!') player.chooseToDiscard('he',{type:'equip'},true);
- if(result.control!='选项二') trigger.source.chooseToDiscard('h',num,true);
- if(result.control!='选项一') player.discardPlayerCard(trigger.source,'he',true);
+ if (result.control != 'cancel2') {
+ player.logSkill('twliechi', trigger.source);
+ game.log(player, '选择了', '#g【烈斥】', '的', '#y' + result.control);
+ if (result.control == '背水!') player.chooseToDiscard('he', { type: 'equip' }, true);
+ if (result.control != '选项二') trigger.source.chooseToDiscard('h', num, true);
+ if (result.control != '选项一') player.discardPlayerCard(trigger.source, 'he', true);
}
}
},
//卢植
- twmingren:{
- marktext:'任',
- intro:{
- content:'expansion',
- markcount:'expansion',
+ twmingren: {
+ marktext: '任',
+ intro: {
+ content: 'expansion',
+ markcount: 'expansion',
},
- onremove:function(player,skill){
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ onremove: function (player, skill) {
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
- group:'twmingren_change',
- audio:'nzry_mingren_1',
- trigger:{global:'phaseBefore',player:'enterGame'},
- forced:true,
- locked:false,
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&!player.getExpansions('twmingren').length;
+ group: 'twmingren_change',
+ audio: 'nzry_mingren_1',
+ trigger: { global: 'phaseBefore', player: 'enterGame' },
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ return (event.name != 'phase' || game.phaseNumber == 0) && !player.getExpansions('twmingren').length;
},
- content:function(){
+ content: function () {
'step 0'
player.draw();
'step 1'
- if(!player.countCards('h')) event.finish();
- else player.chooseCard('h','明任:将一张手牌置于武将牌上,称为“任”',true).set('ai',function(card){
- return 6-get.value(card);
+ if (!player.countCards('h')) event.finish();
+ else player.chooseCard('h', '明任:将一张手牌置于武将牌上,称为“任”', true).set('ai', function (card) {
+ return 6 - get.value(card);
});
'step 2'
- if(result.bool) player.addToExpansion(result.cards[0],player,'give','log').gaintag.add('twmingren');
+ if (result.bool) player.addToExpansion(result.cards[0], player, 'give', 'log').gaintag.add('twmingren');
},
- subSkill:{
- change:{
- audio:'nzry_mingren_1',
- trigger:{player:['phaseUseBegin','phaseUseEnd']},
- filter:function(event,player){
- return player.countCards('he')&&player.getExpansions('twmingren').length;
+ subSkill: {
+ change: {
+ audio: 'nzry_mingren_1',
+ trigger: { player: ['phaseUseBegin', 'phaseUseEnd'] },
+ filter: function (event, player) {
+ return player.countCards('he') && player.getExpansions('twmingren').length;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseCard('he',get.prompt('twmingren'),'用一张牌替换“任”('+get.translation(player.getExpansions('twmingren')[0])+')').set('ai',function(card){
- var player=_status.event.player;
- var color=get.color(card);
- if(color==get.color(player.getExpansions('twmingren')[0])) return false;
- var num=0;
- var list=[];
- player.countCards('he',function(cardx){
- if(cardx!=card||get.color(cardx)!=color) return false;
- if(list.includes(cardx.name)) return false;
+ player.chooseCard('he', get.prompt('twmingren'), '用一张牌替换“任”(' + get.translation(player.getExpansions('twmingren')[0]) + ')').set('ai', function (card) {
+ var player = _status.event.player;
+ var color = get.color(card);
+ if (color == get.color(player.getExpansions('twmingren')[0])) return false;
+ var num = 0;
+ var list = [];
+ player.countCards('he', function (cardx) {
+ if (cardx != card || get.color(cardx) != color) return false;
+ if (list.includes(cardx.name)) return false;
list.push(cardx.name);
- switch (cardx.name){
- case 'wuxie':num+=(game.countPlayer()/2.2); break;
- case 'caochuan':num+=1.1; break;
- case 'shan':num+=1; break;
+ switch (cardx.name) {
+ case 'wuxie': num += (game.countPlayer() / 2.2); break;
+ case 'caochuan': num += 1.1; break;
+ case 'shan': num += 1; break;
}
});
- return num*(30-get.value(card));
+ return num * (30 - get.value(card));
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twmingren');
- player.addToExpansion(result.cards[0],'log','give',player).gaintag.add('twmingren');
- var card=player.getExpansions('twmingren')[0];
- if(card) player.gain(card,'gain2');
+ player.addToExpansion(result.cards[0], 'log', 'give', player).gaintag.add('twmingren');
+ var card = player.getExpansions('twmingren')[0];
+ if (card) player.gain(card, 'gain2');
}
},
},
},
},
- twzhenliang:{
- group:['twzhenliang_1','twzhenliang_2'],
- audio:'nzry_zhenliang_1',
- mark:true,
- zhuanhuanji:true,
- marktext:'☯',
- intro:{
- content:function(storage,player,skill){
- if(player.storage.twzhenliang==true) return '当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
+ twzhenliang: {
+ group: ['twzhenliang_1', 'twzhenliang_2'],
+ audio: 'nzry_zhenliang_1',
+ mark: true,
+ zhuanhuanji: true,
+ marktext: '☯',
+ intro: {
+ content: function (storage, player, skill) {
+ if (player.storage.twzhenliang == true) return '当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
return '出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
},
},
- subSkill:{
- 1:{
- audio:'nzry_zhenliang_1',
- enable:'phaseUse',
- filter:function(event,player){
- if(player.storage.twzhenliang) return false;
- return game.hasPlayer(function(current){
+ subSkill: {
+ 1: {
+ audio: 'nzry_zhenliang_1',
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ if (player.storage.twzhenliang) return false;
+ return game.hasPlayer(function (current) {
return player.inRange(current);
});
},
- position:'he',
- filterCard:true,
- filterTarget:function(card,player,target){
+ position: 'he',
+ filterCard: true,
+ filterTarget: function (card, player, target) {
return player.inRange(target);
},
- check:function(card){
- var player=_status.event.player,cardx=player.getExpansions('twmingren')[0];
- if(cardx&&get.color(cardx,player)==get.color(card,player)) return 10-get.value(card);
- return 7-get.value(card);
+ check: function (card) {
+ var player = _status.event.player, cardx = player.getExpansions('twmingren')[0];
+ if (cardx && get.color(cardx, player) == get.color(card, player)) return 10 - get.value(card);
+ return 7 - get.value(card);
},
- prompt:'弃置一张牌并对攻击范围内的一名角色造成1点伤害',
- content:function(){
+ prompt: '弃置一张牌并对攻击范围内的一名角色造成1点伤害',
+ content: function () {
'step 0'
player.changeZhuanhuanji('twzhenliang');
- var cardx=player.getExpansions('twmingren')[0];
+ var cardx = player.getExpansions('twmingren')[0];
target.damage('nocard');
- if(!cardx||get.color(cards[0],player)!=get.color(cardx,player)) event.finish();
+ if (!cardx || get.color(cards[0], player) != get.color(cardx, player)) event.finish();
'step 1'
player.draw();
},
- ai:{
- order:5,
- result:{
- player:function(player,target){
- return get.damageEffect(target,player,player);
+ ai: {
+ order: 5,
+ result: {
+ player: function (player, target) {
+ return get.damageEffect(target, player, player);
},
},
},
},
- 2:{
- audio:'nzry_zhenliang_1',
- trigger:{global:'damageBegin4'},
- filter:function(event,player){
- if(_status.currentPhase==player||!player.storage.twzhenliang) return false;
- return player.countCards('he')&&event.num>0&&(event.player==player||player.inRange(event.player));
+ 2: {
+ audio: 'nzry_zhenliang_1',
+ trigger: { global: 'damageBegin4' },
+ filter: function (event, player) {
+ if (_status.currentPhase == player || !player.storage.twzhenliang) return false;
+ return player.countCards('he') && event.num > 0 && (event.player == player || player.inRange(event.player));
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseToDiscard('he',get.prompt('twzhenliang',trigger.player),'弃置一张牌令此伤害-1').set('ai',function(card){
- if(_status.event.goon){
- var player=_status.event.player,cardx=player.getExpansions('twmingren')[0];
- if(cardx&&get.color(cardx,player)==get.color(card,player)) return 10-get.value(card);
- return 6-get.value(card);
+ player.chooseToDiscard('he', get.prompt('twzhenliang', trigger.player), '弃置一张牌令此伤害-1').set('ai', function (card) {
+ if (_status.event.goon) {
+ var player = _status.event.player, cardx = player.getExpansions('twmingren')[0];
+ if (cardx && get.color(cardx, player) == get.color(card, player)) return 10 - get.value(card);
+ return 6 - get.value(card);
}
return 0;
- }).set('goon',get.attitude(player,trigger.player)>0).logSkill=['twzhenliang',trigger.player];
+ }).set('goon', get.attitude(player, trigger.player) > 0).logSkill = ['twzhenliang', trigger.player];
'step 1'
- if(result.bool){
+ if (result.bool) {
player.changeZhuanhuanji('twzhenliang');
- var cardx=player.getExpansions('twmingren')[0];
- if(cardx&&get.color(result.cards[0],player)==get.color(cardx,player)) player.draw();
+ var cardx = player.getExpansions('twmingren')[0];
+ if (cardx && get.color(result.cards[0], player) == get.color(cardx, player)) player.draw();
trigger.num--;
}
},
@@ -7289,253 +7289,253 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//张南
- twfenwu:{
- audio:2,
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current!=player&&player.canUse('sha',current,false,false);
+ twfenwu: {
+ audio: 2,
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player && player.canUse('sha', current, false, false);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var list=[];
- player.getHistory('useCard',function(evt){
- if(get.type(evt.card)!='basic') return;
- var name=evt.card.name,nature=game.hasNature(evt.card)?get.nature(evt.card):'';
- if(!list.includes(name+nature)) list.push(name+nature);
+ var list = [];
+ player.getHistory('useCard', function (evt) {
+ if (get.type(evt.card) != 'basic') return;
+ var name = evt.card.name, nature = game.hasNature(evt.card) ? get.nature(evt.card) : '';
+ if (!list.includes(name + nature)) list.push(name + nature);
});
- event.addDamage=list.length>1;
- player.chooseTarget(get.prompt('twfenwu'),'失去1点体力并视为使用一张无距离限制的【杀】'+(event.addDamage?'(伤害基数+1)':''),function(card,player,target){
- return target!=player&&player.canUse('sha',target,false,false);
- }).set('ai',function(target){
- var player=_status.event.player;
- if(player.hp+player.countCards('hs',{name:['tao','jiu']})<=1) return -1;
- var num=1;
- if((!target.mayHaveShan(player,'use',target.getCards('h',i=>{
+ event.addDamage = list.length > 1;
+ player.chooseTarget(get.prompt('twfenwu'), '失去1点体力并视为使用一张无距离限制的【杀】' + (event.addDamage ? '(伤害基数+1)' : ''), function (card, player, target) {
+ return target != player && player.canUse('sha', target, false, false);
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ if (player.hp + player.countCards('hs', { name: ['tao', 'jiu'] }) <= 1) return -1;
+ var num = 1;
+ if ((!target.mayHaveShan(player, 'use', target.getCards('h', i => {
return i.hasGaintag('sha_notshan');
- }))||player.hasSkillTag('directHit_ai',true,{
- target:target,
- card:{name:'sha'},
- },true))&&!target.hasSkillTag('filterDamage',null,{
- player:player,
- card:{name:'sha'},
- })){
- num=1.3;
+ })) || player.hasSkillTag('directHit_ai', true, {
+ target: target,
+ card: { name: 'sha' },
+ }, true)) && !target.hasSkillTag('filterDamage', null, {
+ player: player,
+ card: { name: 'sha' },
+ })) {
+ num = 1.3;
}
- return get.effect(target,{name:'sha'},player,player)*num;
+ return get.effect(target, { name: 'sha' }, player, player) * num;
});
'step 1'
- if(result.bool){
- var num=1;
- var target=result.targets[0];
- player.logSkill('twfenwu',target);
+ if (result.bool) {
+ var num = 1;
+ var target = result.targets[0];
+ player.logSkill('twfenwu', target);
player.loseHp();
- if(event.addDamage){
- num=2;
- game.log('#y杀','的伤害基数+1');
+ if (event.addDamage) {
+ num = 2;
+ game.log('#y杀', '的伤害基数+1');
}
- player.useCard({name:'sha',isCard:true},target,false).baseDamage=num;
+ player.useCard({ name: 'sha', isCard: true }, target, false).baseDamage = num;
}
},
},
//呼厨泉
- twfupan:{
- audio:3,
- trigger:{
- player:'damageEnd',
- source:'damageSource'
+ twfupan: {
+ audio: 3,
+ trigger: {
+ player: 'damageEnd',
+ source: 'damageSource'
},
- check:()=>true,
- onremove:true,
- content:function(){
+ check: () => true,
+ onremove: true,
+ content: function () {
'step 0'
- if(!player.storage.twfupan) player.storage.twfupan={};
+ if (!player.storage.twfupan) player.storage.twfupan = {};
player.draw(trigger.num);
'step 1'
- if(player.countCards('he')&&game.hasPlayer(current=>{
- return !(player.storage.twfupan[current.playerid]>=2)&&player!=current;
- })){
+ if (player.countCards('he') && game.hasPlayer(current => {
+ return !(player.storage.twfupan[current.playerid] >= 2) && player != current;
+ })) {
player.chooseCardTarget({
- filterCard:true,
- selectCard:1,
- position:'he',
- forced:true,
- targetprompt:function(target){
- return !_status.event.player.storage.twfupan[target.playerid]?'你摸两张牌':'对其
造成伤害';
+ filterCard: true,
+ selectCard: 1,
+ position: 'he',
+ forced: true,
+ targetprompt: function (target) {
+ return !_status.event.player.storage.twfupan[target.playerid] ? '你摸两张牌' : '对其
造成伤害';
},
- filterTarget:function(card,player,target){
- return !(player.storage.twfupan[target.playerid]>=2)&&player!=target;
+ filterTarget: function (card, player, target) {
+ return !(player.storage.twfupan[target.playerid] >= 2) && player != target;
},
- ai1:function(card){
- var player=_status.event.player;
- if(get.value(card,false,'raw')<0) return 20*get.value(card);
- if(player==_status.currentPhase) return 20-player.getUseValue(card);
- return 20-get.value(card);
+ ai1: function (card) {
+ var player = _status.event.player;
+ if (get.value(card, false, 'raw') < 0) return 20 * get.value(card);
+ if (player == _status.currentPhase) return 20 - player.getUseValue(card);
+ return 20 - get.value(card);
},
- ai2:function(target){
- var player=_status.event.player;
- var att=get.attitude(player,target);
- if(ui.selected.cards.length&&get.value(ui.selected.cards[0],false,'raw')<0){
- return -0.1-att;
+ ai2: function (target) {
+ var player = _status.event.player;
+ var att = get.attitude(player, target);
+ if (ui.selected.cards.length && get.value(ui.selected.cards[0], false, 'raw') < 0) {
+ return -0.1 - att;
}
- if(player.storage.twfupan[target.playerid]===undefined) return 5;
- else if(player.storage.twfupan[target.playerid]===1) return get.damageEffect(target,player,player);
+ if (player.storage.twfupan[target.playerid] === undefined) return 5;
+ else if (player.storage.twfupan[target.playerid] === 1) return get.damageEffect(target, player, player);
return 1;
},
- prompt:'请选择要交出的卡牌和目标角色'
+ prompt: '请选择要交出的卡牌和目标角色'
});
- }else event.finish();
+ } else event.finish();
'step 2'
- if(result.bool){
- var cards=result.cards,target=result.targets[0];
- player.line(target,'green');
- player.give(cards,target);
- event.target=target;
- if(!player.storage.twfupan[target.playerid]){
- player.storage.twfupan[target.playerid]=1;
+ if (result.bool) {
+ var cards = result.cards, target = result.targets[0];
+ player.line(target, 'green');
+ player.give(cards, target);
+ event.target = target;
+ if (!player.storage.twfupan[target.playerid]) {
+ player.storage.twfupan[target.playerid] = 1;
player.draw(2);
event.finish();
- }else{
- player.chooseBool('复叛:是否对'+get.translation(target)+'造成1点伤害?','然后你不能再因此技能交给其牌').set('ai',()=>_status.event.bool).set('bool',get.damageEffect(target,player,player)>0);
+ } else {
+ player.chooseBool('复叛:是否对' + get.translation(target) + '造成1点伤害?', '然后你不能再因此技能交给其牌').set('ai', () => _status.event.bool).set('bool', get.damageEffect(target, player, player) > 0);
}
}
'step 3'
- if(result.bool){
- player.line(target,'fire');
+ if (result.bool) {
+ player.line(target, 'fire');
target.damage();
player.storage.twfupan[target.playerid]++;
}
},
- ai:{
- maixie:true,
- maixie_hp:true,
- threaten:0.9,
+ ai: {
+ maixie: true,
+ maixie_hp: true,
+ threaten: 0.9,
}
},
//刘璋
- twyaohu:{
- audio:'yinlang',
- trigger:{player:'phaseBegin'},
- direct:true,
- filter:function(event,player){
- return !player.hasSkill('twyaohu_round')&&game.hasPlayer(function(current){
- return current.group&¤t.group!='unknown';
+ twyaohu: {
+ audio: 'yinlang',
+ trigger: { player: 'phaseBegin' },
+ direct: true,
+ filter: function (event, player) {
+ return !player.hasSkill('twyaohu_round') && game.hasPlayer(function (current) {
+ return current.group && current.group != 'unknown';
});
},
- content:function(){
+ content: function () {
'step 0'
- var list=[];
- game.countPlayer(function(current){
- if(current.group&¤t.group!='unknown') list.add(current.group);
+ var list = [];
+ game.countPlayer(function (current) {
+ if (current.group && current.group != 'unknown') list.add(current.group);
});
- list.sort(function(a,b){
- return lib.group.indexOf(a)-lib.group.indexOf(b);
+ list.sort(function (a, b) {
+ return lib.group.indexOf(a) - lib.group.indexOf(b);
});
- if(!player.hasSkill('twyaohu')) list.push('cancel2');
- player.chooseControl(list).set('prompt','邀虎:请选择一个势力').set('ai',function(){
+ if (!player.hasSkill('twyaohu')) list.push('cancel2');
+ player.chooseControl(list).set('prompt', '邀虎:请选择一个势力').set('ai', function () {
return _status.event.choice;
- }).set('choice',function(){
- var getn=function(group){
- return game.countPlayer(function(current){
- if(current.group!=group) return false;
- if(player==current) return 2;
- if(get.attitude(current,player)>0) return 1;
+ }).set('choice', function () {
+ var getn = function (group) {
+ return game.countPlayer(function (current) {
+ if (current.group != group) return false;
+ if (player == current) return 2;
+ if (get.attitude(current, player) > 0) return 1;
return 1.3;
});
}
- list.sort(function(a,b){
- return getn(b)-getn(a);
+ list.sort(function (a, b) {
+ return getn(b) - getn(a);
});
return list[0];
}());
'step 1'
- if(result.control!='cancel2'){
- player.logSkill('twyaohu',game.filterPlayer(function(current){
- return current.group==result.control;
+ if (result.control != 'cancel2') {
+ player.logSkill('twyaohu', game.filterPlayer(function (current) {
+ return current.group == result.control;
}));
- game.log(player,'选择了','#y'+get.translation(result.control+2));
- player.storage.yaohu=result.control;
- player.storage.twyaohu=result.control;
+ game.log(player, '选择了', '#y' + get.translation(result.control + 2));
+ player.storage.yaohu = result.control;
+ player.storage.twyaohu = result.control;
player.markSkill('twyaohu');
}
},
- ai:{combo:'jutu'},
- intro:{content:'已选择了$势力'},
- group:'twyaohu_gain',
- subSkill:{
- round:{},
- gain:{
- audio:'yinlang',
- trigger:{global:'phaseUseBegin'},
- filter:function(event,player){
- return event.player.group==player.storage.yaohu&&event.player.isIn()&&player.getExpansions('jutu').length>0;
+ ai: { combo: 'jutu' },
+ intro: { content: '已选择了$势力' },
+ group: 'twyaohu_gain',
+ subSkill: {
+ round: {},
+ gain: {
+ audio: 'yinlang',
+ trigger: { global: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return event.player.group == player.storage.yaohu && event.player.isIn() && player.getExpansions('jutu').length > 0;
},
- forced:true,
- locked:false,
- logTarget:'player',
- content:function(){
+ forced: true,
+ locked: false,
+ logTarget: 'player',
+ content: function () {
'step 0'
- var target=trigger.player;
- event.target=target;
- target.chooseButton(['选择获得一张“生”',player.getExpansions('jutu')],true).set('ai',function(button){
- return get.value(button.link,player);
+ var target = trigger.player;
+ event.target = target;
+ target.chooseButton(['选择获得一张“生”', player.getExpansions('jutu')], true).set('ai', function (button) {
+ return get.value(button.link, player);
});
'step 1'
- if(result.bool){
- target.gain(result.links,'give',player);
+ if (result.bool) {
+ target.gain(result.links, 'give', player);
}
'step 2'
- if(game.hasPlayer(function(current){
- return current!=player&¤t!=target;
- })){
- player.chooseTarget(true,'选择'+get.translation(target)+'使用【杀】的目标',function(card,player,target){
- return target!=player&&target!=_status.event.source;
- }).set('source',target).set('ai',function(target){
- var evt=_status.event;
- return get.effect(target,{name:'sha'},evt.source,evt.player);
+ if (game.hasPlayer(function (current) {
+ return current != player && current != target;
+ })) {
+ player.chooseTarget(true, '选择' + get.translation(target) + '使用【杀】的目标', function (card, player, target) {
+ return target != player && target != _status.event.source;
+ }).set('source', target).set('ai', function (target) {
+ var evt = _status.event;
+ return get.effect(target, { name: 'sha' }, evt.source, evt.player);
});
}
else {
- event._result={bool:false};
+ event._result = { bool: false };
event.goto(4);
}
'step 3'
- var target2=result.targets[0];
- player.line(target2,'green');
- target.chooseToUse(function(card,player,event){
- if(get.name(card)!='sha') return false;
- return lib.filter.filterCard.apply(this,arguments);
- },'对'+get.translation(target2)+'使用一张杀,否则本回合使用伤害牌指定'+get.translation(player)+'为目标时须交给'+get.translation(player)+'两张牌,否则此牌对'+get.translation(player)+'无效').set('targetRequired',true).set('complexSelect',true).set('filterTarget',function(card,player,target){
- if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false;
- return lib.filter.targetEnabled.apply(this,arguments);
- }).set('sourcex',target2).set('addCount',false);
+ var target2 = result.targets[0];
+ player.line(target2, 'green');
+ target.chooseToUse(function (card, player, event) {
+ if (get.name(card) != 'sha') return false;
+ return lib.filter.filterCard.apply(this, arguments);
+ }, '对' + get.translation(target2) + '使用一张杀,否则本回合使用伤害牌指定' + get.translation(player) + '为目标时须交给' + get.translation(player) + '两张牌,否则此牌对' + get.translation(player) + '无效').set('targetRequired', true).set('complexSelect', true).set('filterTarget', function (card, player, target) {
+ if (target != _status.event.sourcex && !ui.selected.targets.includes(_status.event.sourcex)) return false;
+ return lib.filter.targetEnabled.apply(this, arguments);
+ }).set('sourcex', target2).set('addCount', false);
'step 4'
- if(!result.bool) player.addTempSkill('twyaohu_effect');
+ if (!result.bool) player.addTempSkill('twyaohu_effect');
},
},
- effect:{
- audio:'yinlang',
- trigger:{global:'useCardToPlayer'},
- charlotte:true,
- forced:true,
- filter:function(event,player){
- return event.target==player&&get.tag(event.card,'damage');
+ effect: {
+ audio: 'yinlang',
+ trigger: { global: 'useCardToPlayer' },
+ charlotte: true,
+ forced: true,
+ filter: function (event, player) {
+ return event.target == player && get.tag(event.card, 'damage');
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
- var hs=trigger.player.getCards('he');
- if(hs.length<2) event._result={bool:false};
- else trigger.player.chooseCard(2,'交给'+get.translation(player)+'两张牌,否则取消'+get.translation(trigger.card)+'对其的目标','he').set('ai',card=>{
- if(_status.event.goon) return 5-get.value(card);
+ var hs = trigger.player.getCards('he');
+ if (hs.length < 2) event._result = { bool: false };
+ else trigger.player.chooseCard(2, '交给' + get.translation(player) + '两张牌,否则取消' + get.translation(trigger.card) + '对其的目标', 'he').set('ai', card => {
+ if (_status.event.goon) return 5 - get.value(card);
return 0;
- }).set('goon',get.effect(player,trigger.card,trigger.player,trigger.player)>0);
+ }).set('goon', get.effect(player, trigger.card, trigger.player, trigger.player) > 0);
'step 1'
- if(result.bool){
- trigger.player.give(result.cards,player);
- }else{
+ if (result.bool) {
+ trigger.player.give(result.cards, player);
+ } else {
trigger.untrigger();
trigger.targets.remove(player);
trigger.getParent().triggeredTargets1.remove(player);
@@ -7545,111 +7545,111 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//李遗
- twjiaohua:{
- audio:2,
- trigger:{global:'gainAfter'},
- filter:function(event,player){
- if(event.getParent().name!='draw') return false;
- if(event.player!=player&&!event.player.isMinHp()) return false;
- var cards=event.cards,list=['basic','trick','equip'];
- for(var card of cards) if(list.includes(get.type2(card))) list.remove(get.type2(card));
- for(var type of event.player.getStorage('twjiaohua_gained')) if(list.includes(type)) list.remove(type);
- return list.length>0;
+ twjiaohua: {
+ audio: 2,
+ trigger: { global: 'gainAfter' },
+ filter: function (event, player) {
+ if (event.getParent().name != 'draw') return false;
+ if (event.player != player && !event.player.isMinHp()) return false;
+ var cards = event.cards, list = ['basic', 'trick', 'equip'];
+ for (var card of cards) if (list.includes(get.type2(card))) list.remove(get.type2(card));
+ for (var type of event.player.getStorage('twjiaohua_gained')) if (list.includes(type)) list.remove(type);
+ return list.length > 0;
},
- check:function(event,player){
- return get.attitude(player,event.player)>0;
+ check: function (event, player) {
+ return get.attitude(player, event.player) > 0;
},
- prompt2:function(event,player){
- var cards=event.cards,list=['basic','trick','equip'];
- for(var card of cards) if(list.includes(get.type2(card))) list.remove(get.type2(card));
- for(var type of event.player.getStorage('twjiaohua_gained')) if(list.includes(type)) list.remove(type);
- var name=event.player==player?'你':get.translation(event.player);
- return '令'+name+'从牌堆或弃牌堆中获得一张'+(event.player.isUnderControl(true)?list.map(i=>get.translation(i)+'牌').join('、').replace(/(.*)、/, '$1或'):'本次未获得的类别的牌');
+ prompt2: function (event, player) {
+ var cards = event.cards, list = ['basic', 'trick', 'equip'];
+ for (var card of cards) if (list.includes(get.type2(card))) list.remove(get.type2(card));
+ for (var type of event.player.getStorage('twjiaohua_gained')) if (list.includes(type)) list.remove(type);
+ var name = event.player == player ? '你' : get.translation(event.player);
+ return '令' + name + '从牌堆或弃牌堆中获得一张' + (event.player.isUnderControl(true) ? list.map(i => get.translation(i) + '牌').join('、').replace(/(.*)、/, '$1或') : '本次未获得的类别的牌');
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
trigger.player.addTempSkill('twjiaohua_gained');
- var cards=trigger.cards,list=['basic','trick','equip'];
- for(var card of cards) if(list.includes(get.type2(card))) list.remove(get.type2(card));
- for(var type of trigger.player.getStorage('twjiaohua_gained')) if(list.includes(type)) list.remove(type);
+ var cards = trigger.cards, list = ['basic', 'trick', 'equip'];
+ for (var card of cards) if (list.includes(get.type2(card))) list.remove(get.type2(card));
+ for (var type of trigger.player.getStorage('twjiaohua_gained')) if (list.includes(type)) list.remove(type);
list.randomSort();
- var card=get.cardPile(function(card){
+ var card = get.cardPile(function (card) {
return list.includes(get.type2(card));
});
- if(card){
- trigger.player.gain(card,'gain2');
- trigger.player.markAuto('twjiaohua_gained',[get.type2(card)]);
+ if (card) {
+ trigger.player.gain(card, 'gain2');
+ trigger.player.markAuto('twjiaohua_gained', [get.type2(card)]);
}
},
- subSkill:{
- gained:{onremove:true,charlotte:true}
+ subSkill: {
+ gained: { onremove: true, charlotte: true }
}
},
//阎象
- twkujian:{
- audio:3,
- enable:'phaseUse',
- filterCard:true,
- selectCard:[1,3],
- usable:1,
- discard:false,
- lose:false,
- delay:false,
- filterTarget:lib.filter.notMe,
- global:'twkujian_ai',
- check:function(card){
- if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0;
- if(!ui.selected.cards.length&&card.name=='du') return 20;
- var player=get.owner(card);
- if(ui.selected.cards.length>=Math.max(2,player.countCards('h')-player.hp)) return 0;
- if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){
- var players=game.filterPlayer();
- for(var i=0; i= Math.max(2, player.countCards('h') - player.hp)) return 0;
+ if (player.hp == player.maxHp || player.storage.jsprende < 0 || player.countCards('h') <= 1) {
+ var players = game.filterPlayer();
+ for (var i = 0; i < players.length; i++) {
+ if (players[i].hasSkill('haoshi') &&
!players[i].isTurnedOver() &&
!players[i].hasJudge('lebu') &&
- get.attitude(player,players[i])>=3 &&
- get.attitude(players[i],player)>=3){
- return 11-get.value(card);
+ get.attitude(player, players[i]) >= 3 &&
+ get.attitude(players[i], player) >= 3) {
+ return 11 - get.value(card);
}
}
- if(player.countCards('h')>player.hp) return 10-get.value(card);
- if(player.countCards('h')>2) return 6-get.value(card);
+ if (player.countCards('h') > player.hp) return 10 - get.value(card);
+ if (player.countCards('h') > 2) return 6 - get.value(card);
return -1;
}
- return 10-get.value(card);
+ return 10 - get.value(card);
},
- content:function(){
- player.give(cards,target).gaintag.add('twkujianx');
+ content: function () {
+ player.give(cards, target).gaintag.add('twkujianx');
player.addSkill('twkujian_draw');
player.addSkill('twkujian_discard');
},
- ai:{
- expose:0.2,
- order:7,
- result:{
- target:function(player,target){
- if(target.hasSkillTag('nogain')) return 0;
- if(ui.selected.cards.length&&ui.selected.cards[0].name=='du'){
- if(target.hasSkillTag('nodu')) return 0;
+ ai: {
+ expose: 0.2,
+ order: 7,
+ result: {
+ target: function (player, target) {
+ if (target.hasSkillTag('nogain')) return 0;
+ if (ui.selected.cards.length && ui.selected.cards[0].name == 'du') {
+ if (target.hasSkillTag('nodu')) return 0;
return -10;
}
- if(target.hasJudge('lebu')) return 0;
- var nh=target.countCards('h');
- var np=player.countCards('h');
- if(player.hp==player.maxHp||player.storage.jsprende<0||player.countCards('h')<=1){
- if(nh>=np-1&&np<=player.hp&&!target.hasSkill('haoshi')) return 0;
+ if (target.hasJudge('lebu')) return 0;
+ var nh = target.countCards('h');
+ var np = player.countCards('h');
+ if (player.hp == player.maxHp || player.storage.jsprende < 0 || player.countCards('h') <= 1) {
+ if (nh >= np - 1 && np <= player.hp && !target.hasSkill('haoshi')) return 0;
}
- return Math.max(1,5-nh);
+ return Math.max(1, 5 - nh);
},
},
- effect:{
- target:function(card,player,target){
- if(player==target&&get.type(card)=='equip'){
- if(player.countCards('e',{subtype:get.subtype(card)})){
- if(game.hasPlayer(function(current){
- return current!=player&&get.attitude(player,current)>0;
- })){
+ effect: {
+ target: function (card, player, target) {
+ if (player == target && get.type(card) == 'equip') {
+ if (player.countCards('e', { subtype: get.subtype(card) })) {
+ if (game.hasPlayer(function (current) {
+ return current != player && get.attitude(player, current) > 0;
+ })) {
return 0;
}
}
@@ -7657,386 +7657,386 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
- subSkill:{
- draw:{
- audio:'twkujian',
- trigger:{global:['useCardAfter','respondAfter']},
- forced:true,
- logTarget:'player',
- charlotte:true,
- filter:function(event,player){
- return event.player.hasHistory('lose',evt=>{
- if(event!=evt.getParent()) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes('twkujianx')) return true;
+ subSkill: {
+ draw: {
+ audio: 'twkujian',
+ trigger: { global: ['useCardAfter', 'respondAfter'] },
+ forced: true,
+ logTarget: 'player',
+ charlotte: true,
+ filter: function (event, player) {
+ return event.player.hasHistory('lose', evt => {
+ if (event != evt.getParent()) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes('twkujianx')) return true;
}
});
},
- content:function(){
+ content: function () {
'step 0'
- game.asyncDraw([player,trigger.player]);
+ game.asyncDraw([player, trigger.player]);
'step 1'
game.delayx();
}
},
- discard:{
- audio:'twkujian',
- trigger:{global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter']},
- forced:true,
- logTarget:function(event,player){
- return game.filterPlayer(function(current){
- var evt=event.getl(current);
- if(!evt||!evt.hs||!evt.hs.length) return false;
- if(event.name=='lose'){
- var name=event.getParent().name;
- if(name=='useCard'||name=='respond') return false;
- for(var i in event.gaintag_map){
- if(event.gaintag_map[i].includes('twkujianx')) return true;
+ discard: {
+ audio: 'twkujian',
+ trigger: { global: ['loseAfter', 'equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'] },
+ forced: true,
+ logTarget: function (event, player) {
+ return game.filterPlayer(function (current) {
+ var evt = event.getl(current);
+ if (!evt || !evt.hs || !evt.hs.length) return false;
+ if (event.name == 'lose') {
+ var name = event.getParent().name;
+ if (name == 'useCard' || name == 'respond') return false;
+ for (var i in event.gaintag_map) {
+ if (event.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
}
- return current.hasHistory('lose',function(evt){
- if(event!=evt.getParent()) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes('twkujianx')) return true;
+ return current.hasHistory('lose', function (evt) {
+ if (event != evt.getParent()) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
});
});
},
- charlotte:true,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- var evt=event.getl(current);
- if(!evt||!evt.hs||!evt.hs.length) return false;
- if(event.name=='lose'){
- var name=event.getParent().name;
- if(name=='useCard'||name=='respond') return false;
- for(var i in event.gaintag_map){
- if(event.gaintag_map[i].includes('twkujianx')) return true;
+ charlotte: true,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ var evt = event.getl(current);
+ if (!evt || !evt.hs || !evt.hs.length) return false;
+ if (event.name == 'lose') {
+ var name = event.getParent().name;
+ if (name == 'useCard' || name == 'respond') return false;
+ for (var i in event.gaintag_map) {
+ if (event.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
}
- return current.hasHistory('lose',function(evt){
- if(event!=evt.getParent()) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes('twkujianx')) return true;
+ return current.hasHistory('lose', function (evt) {
+ if (event != evt.getParent()) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
});
});
},
- content:function(){
+ content: function () {
'step 0'
- var event=trigger;
- var targets=game.filterPlayer(function(current){
- var evt=event.getl(current);
- if(!evt||!evt.hs||!evt.hs.length) return false;
- if(event.name=='lose'){
- var name=event.getParent().name;
- if(name=='useCard'||name=='respond') return false;
- for(var i in event.gaintag_map){
- if(event.gaintag_map[i].includes('twkujianx')) return true;
+ var event = trigger;
+ var targets = game.filterPlayer(function (current) {
+ var evt = event.getl(current);
+ if (!evt || !evt.hs || !evt.hs.length) return false;
+ if (event.name == 'lose') {
+ var name = event.getParent().name;
+ if (name == 'useCard' || name == 'respond') return false;
+ for (var i in event.gaintag_map) {
+ if (event.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
}
- return current.hasHistory('lose',function(evt){
- if(event!=evt.getParent()) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes('twkujianx')) return true;
+ return current.hasHistory('lose', function (evt) {
+ if (event != evt.getParent()) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes('twkujianx')) return true;
}
return false;
});
});
targets.add(player);
targets.sortBySeat();
- _status.event.targets=targets;
+ _status.event.targets = targets;
'step 1'
- var target=targets.shift();
- if(target.countCards('he')>0) target.chooseToDiscard('he',true);
- if(targets.length>0) event.redo();
+ var target = targets.shift();
+ if (target.countCards('he') > 0) target.chooseToDiscard('he', true);
+ if (targets.length > 0) event.redo();
}
},
- ai:{
- charlotte:true,
- ai:{
- effect:{
- player_use:function(card,player,target){
- if(card.cards&&card.cards.some(i=>i.hasGaintag('twkujianx'))&&game.hasPlayer(current=>{
- return get.attitude(player,current)>0;
- })) return [1,1];
+ ai: {
+ charlotte: true,
+ ai: {
+ effect: {
+ player_use: function (card, player, target) {
+ if (card.cards && card.cards.some(i => i.hasGaintag('twkujianx')) && game.hasPlayer(current => {
+ return get.attitude(player, current) > 0;
+ })) return [1, 1];
},
},
},
- mod:{
- aiOrder:function(player,card,num){
- if(get.itemtype(card)=='card'&&card.hasGaintag('twkujianx')&&game.hasPlayer(current=>{
- return get.attitude(player,current)>0;
- })) return num+0.5;
+ mod: {
+ aiOrder: function (player, card, num) {
+ if (get.itemtype(card) == 'card' && card.hasGaintag('twkujianx') && game.hasPlayer(current => {
+ return get.attitude(player, current) > 0;
+ })) return num + 0.5;
},
- aiValue:function(player,card,num){
- if(get.itemtype(card)=='card'&&card.hasGaintag('twkujianx')&&game.hasPlayer(current=>{
- return get.attitude(player,current)>0;
- })) return num+0.5;
+ aiValue: function (player, card, num) {
+ if (get.itemtype(card) == 'card' && card.hasGaintag('twkujianx') && game.hasPlayer(current => {
+ return get.attitude(player, current) > 0;
+ })) return num + 0.5;
}
}
}
}
},
- twruilian:{
- audio:2,
- trigger:{global:'roundStart'},
- direct:true,
- content:function(){
+ twruilian: {
+ audio: 2,
+ trigger: { global: 'roundStart' },
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twruilian')).set('ai',function(target){
- var player=_status.event.player,att=get.attitude(player,target),eff=att/(player==target?2:1)+1;
- if(att>=0){
- if(target.hasSkill('yongsi')) return eff*5;
- if(target.hasSkill('zhiheng')||target.hasSkill('rezhiheng')) return eff*4;
- if(target.hasSkill('rekurou')) return eff*3;
- if(target.hasSkill('xinlianji')||target.hasSkill('dclianji')) return eff*2;
- if(target.needsToDiscard()) return eff*1.5;
+ player.chooseTarget(get.prompt2('twruilian')).set('ai', function (target) {
+ var player = _status.event.player, att = get.attitude(player, target), eff = att / (player == target ? 2 : 1) + 1;
+ if (att >= 0) {
+ if (target.hasSkill('yongsi')) return eff * 5;
+ if (target.hasSkill('zhiheng') || target.hasSkill('rezhiheng')) return eff * 4;
+ if (target.hasSkill('rekurou')) return eff * 3;
+ if (target.hasSkill('xinlianji') || target.hasSkill('dclianji')) return eff * 2;
+ if (target.needsToDiscard()) return eff * 1.5;
return eff;
}
return 0;
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twruilian',target);
- player.markAuto('twruilian2',[target]);
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twruilian', target);
+ player.markAuto('twruilian2', [target]);
player.addSkill('twruilian2');
}
},
},
- twruilian2:{
- trigger:{global:'phaseEnd'},
- direct:true,
- charlotte:true,
- onremove:true,
- filter:function(event,player){
+ twruilian2: {
+ trigger: { global: 'phaseEnd' },
+ direct: true,
+ charlotte: true,
+ onremove: true,
+ filter: function (event, player) {
return player.getStorage('twruilian2').includes(event.player);
},
- intro:{content:'已选择$'},
- content:function(){
+ intro: { content: '已选择$' },
+ content: function () {
'step 0'
player.removeSkill('twruilian2');
- var target=trigger.player;
- event.target=target;
- var cards=[];
- target.getHistory('lose',function(evt){
- if(evt.type=='discard') cards.addArray(evt.cards2);
+ var target = trigger.player;
+ event.target = target;
+ var cards = [];
+ target.getHistory('lose', function (evt) {
+ if (evt.type == 'discard') cards.addArray(evt.cards2);
});
- if(cards.length<2) event.finish();
- else event.cards=cards;
+ if (cards.length < 2) event.finish();
+ else event.cards = cards;
'step 1'
- var list=[];
- for(var type of ['basic','trick','equip']){
- for(var card of event.cards){
- if(get.type2(card)==type){
+ var list = [];
+ for (var type of ['basic', 'trick', 'equip']) {
+ for (var card of event.cards) {
+ if (get.type2(card) == type) {
list.push(type);
break;
}
}
}
list.push('cancel2');
- player.chooseControl(list).set('prompt','睿敛:是否与'+get.translation(target)+'各获得一种类型的牌?').set('ai',function(){
- var player=_status.event.player,list=_status.event.controls;
- if(player.hp<=3&&!player.countCards('h',{name:['shan','tao']})&&list.includes('basic')) return 'basic';
- if(player.countCards('he',{type:'equip'})<2&&list.includes('equip')) return 'equip';
- if(list.includes('trick')) return 'trick';
+ player.chooseControl(list).set('prompt', '睿敛:是否与' + get.translation(target) + '各获得一种类型的牌?').set('ai', function () {
+ var player = _status.event.player, list = _status.event.controls;
+ if (player.hp <= 3 && !player.countCards('h', { name: ['shan', 'tao'] }) && list.includes('basic')) return 'basic';
+ if (player.countCards('he', { type: 'equip' }) < 2 && list.includes('equip')) return 'equip';
+ if (list.includes('trick')) return 'trick';
return list.remove('cancel2').randomGet();
});
'step 2'
- if(result.control!='cancel2'){
- player.logSkill('twruilian2',target);
- var type=result.control;
- var list=[target,player].sortBySeat(_status.currentPhase),cards=[];
- for(var current of list){
- var card=get.discardPile(function(card){
- return get.type2(card)==type&&!cards.includes(card);
+ if (result.control != 'cancel2') {
+ player.logSkill('twruilian2', target);
+ var type = result.control;
+ var list = [target, player].sortBySeat(_status.currentPhase), cards = [];
+ for (var current of list) {
+ var card = get.discardPile(function (card) {
+ return get.type2(card) == type && !cards.includes(card);
});
- if(card){
+ if (card) {
cards.push(card);
- current.gain(card,'gain2');
+ current.gain(card, 'gain2');
}
}
}
},
},
//夏侯恩
- twfujian:{
- audio:2,
- group:'twfujian_lose',
- trigger:{
- global:'phaseBefore',
- player:['enterGame','phaseZhunbeiBegin']
+ twfujian: {
+ audio: 2,
+ group: 'twfujian_lose',
+ trigger: {
+ global: 'phaseBefore',
+ player: ['enterGame', 'phaseZhunbeiBegin']
},
- filter:function(event,player){
- if(player.getEquips(1).length) return false;
- return event.name!='phase'||game.phaseNumber==0;
+ filter: function (event, player) {
+ if (player.getEquips(1).length) return false;
+ return event.name != 'phase' || game.phaseNumber == 0;
},
- forced:true,
- content:function(){
- var card=get.cardPile2(function(card){
- return get.type(card)=='equip'&&get.subtype(card)=='equip1';
+ forced: true,
+ content: function () {
+ var card = get.cardPile2(function (card) {
+ return get.type(card) == 'equip' && get.subtype(card) == 'equip1';
});
- event.card=card;
- if(card) player.equip(card);
- else{
+ event.card = card;
+ if (card) player.equip(card);
+ else {
game.log('但是牌堆中没有武器牌了!');
event.finish();
}
},
- subSkill:{
- lose:{
- audio:'twfujian',
- trigger:{
- player:'loseAfter',
- global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ subSkill: {
+ lose: {
+ audio: 'twfujian',
+ trigger: {
+ player: 'loseAfter',
+ global: ['equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
},
- filter:function(event,player){
- if(player==_status.currentPhase) return false;
- if(event.name=='gain'&&event.player==player) return false;
- var evt=event.getl(player);
- if(evt&&evt.cards2&&evt.cards2.some(i=>get.subtype(i)=='equip1')) return true;
+ filter: function (event, player) {
+ if (player == _status.currentPhase) return false;
+ if (event.name == 'gain' && event.player == player) return false;
+ var evt = event.getl(player);
+ if (evt && evt.cards2 && evt.cards2.some(i => get.subtype(i) == 'equip1')) return true;
return false;
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
player.loseHp();
},
},
},
},
- twjianwei:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- if(!player.getEquips(1).length) return false;
- return game.hasPlayer(function(current){
- return player.inRange(current)&&player.canCompare(current);
+ twjianwei: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ if (!player.getEquips(1).length) return false;
+ return game.hasPlayer(function (current) {
+ return player.inRange(current) && player.canCompare(current);
});
},
- pindianCheck:function(player,target){
- var hs=player.getCards('h').sort(function(a,b){
- return b.number-a.number;
+ pindianCheck: function (player, target) {
+ var hs = player.getCards('h').sort(function (a, b) {
+ return b.number - a.number;
});
- var ts=target.getCards('h').sort(function(a,b){
- return b.number-a.number;
+ var ts = target.getCards('h').sort(function (a, b) {
+ return b.number - a.number;
});
- if(!hs.length||!ts.length) return 0;
- if(Math.min(13,hs[0].number+player.getAttackRange())>ts[0].number||ts[0].number>9&&get.value(ts[0])<=5||target.countCards('j')) return true;
+ if (!hs.length || !ts.length) return 0;
+ if (Math.min(13, hs[0].number + player.getAttackRange()) > ts[0].number || ts[0].number > 9 && get.value(ts[0]) <= 5 || target.countCards('j')) return true;
return false;
},
- direct:true,
- locked:false,
- group:['twjianwei_pindian','twjianwei_zhaocha'],
- content:function(){
+ direct: true,
+ locked: false,
+ group: ['twjianwei_pindian', 'twjianwei_zhaocha'],
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twjianwei'),'与攻击范围内的一名角色拼点。若你赢,你获得其每个区域里的一张牌;若其赢,其获得你装备区里的武器牌',function(card,player,target){
- return player.inRange(target)&&player.canCompare(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- if(lib.skill.twjianwei.pindianCheck(player,target)) return -5*get.attitude(player,target);
- return -get.attitude(player,target);
+ player.chooseTarget(get.prompt('twjianwei'), '与攻击范围内的一名角色拼点。若你赢,你获得其每个区域里的一张牌;若其赢,其获得你装备区里的武器牌', function (card, player, target) {
+ return player.inRange(target) && player.canCompare(target);
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ if (lib.skill.twjianwei.pindianCheck(player, target)) return -5 * get.attitude(player, target);
+ return -get.attitude(player, target);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twjianwei',target);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twjianwei', target);
player.chooseToCompare(target);
}
else event.finish();
'step 2'
- if(result.bool){
- var num=0;
- if(target.countCards('h')) num++;
- if(target.countCards('e')) num++;
- if(target.countCards('j')) num++;
- if(num){
- player.gainPlayerCard(target,num,'hej',true).set('filterButton',function(button){
- for(var i=0; i13) trigger.num1=13;
+ forced: true,
+ locked: false,
+ content: function () {
+ var num = player.getAttackRange();
+ if (player == trigger.player) {
+ trigger.num1 += num;
+ if (trigger.num1 > 13) trigger.num1 = 13;
}
else {
- trigger.num2+=num;
- if(trigger.num2>13) trigger.num2=13;
+ trigger.num2 += num;
+ if (trigger.num2 > 13) trigger.num2 = 13;
}
- game.log(player,'的拼点牌点数+'+num);
+ game.log(player, '的拼点牌点数+' + num);
},
},
//你是故意找茬是不是
- zhaocha:{
- trigger:{global:'phaseZhunbeiBegin'},
- filter:function(event,player){
- if(event.player==player) return false;
+ zhaocha: {
+ trigger: { global: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ if (event.player == player) return false;
return event.player.canCompare(player);
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- trigger.player.chooseBool('剑威:是否与'+get.translation(player)+'拼点?','若你赢,你获得其装备区里的武器牌;若其赢,其获得你每个区域里的一张牌').set('ai',()=>_status.event.choice).set('choice',get.attitude(trigger.player,player)<0&&!lib.skill.twjianwei.pindianCheck(player,trigger.player));
+ trigger.player.chooseBool('剑威:是否与' + get.translation(player) + '拼点?', '若你赢,你获得其装备区里的武器牌;若其赢,其获得你每个区域里的一张牌').set('ai', () => _status.event.choice).set('choice', get.attitude(trigger.player, player) < 0 && !lib.skill.twjianwei.pindianCheck(player, trigger.player));
'step 1'
- if(result.bool){
- trigger.player.logSkill('twjianwei',player);
+ if (result.bool) {
+ trigger.player.logSkill('twjianwei', player);
trigger.player.chooseToCompare(player);
}
else event.finish();
'step 2'
- if(!result.tie){
- if(result.bool){
- var card=player.getEquips(1);
- if(card.length) trigger.player.gain(card,player,'give');
+ if (!result.tie) {
+ if (result.bool) {
+ var card = player.getEquips(1);
+ if (card.length) trigger.player.gain(card, player, 'give');
}
else {
- var num=0;
- if(trigger.player.countCards('h')) num++;
- if(trigger.player.countCards('e')) num++;
- if(trigger.player.countCards('j')) num++;
- if(num) player.gainPlayerCard(trigger.player,num,'hej',true).set('filterButton',function(button){
- for(var i=0; i0;
+ twtanfeng: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player && current.countDiscardableCards(player, 'hej') > 0;
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twtanfeng'),function(card,player,target){
- return target!=player&&target.countDiscardableCards(player,'hej')>0;
- }).set('ai',function(target){
- var player=_status.event.player,num=1;
- if(get.attitude(player,target)>0) num=3;
- else if(!target.countCards('he')||!target.canUse('sha',player)){
- if(target.hp+target.countCards('hs',{name:['tao','jiu']})<=1) num=2;
- else num=1.2;
+ player.chooseTarget(get.prompt2('twtanfeng'), function (card, player, target) {
+ return target != player && target.countDiscardableCards(player, 'hej') > 0;
+ }).set('ai', function (target) {
+ var player = _status.event.player, num = 1;
+ if (get.attitude(player, target) > 0) num = 3;
+ else if (!target.countCards('he') || !target.canUse('sha', player)) {
+ if (target.hp + target.countCards('hs', { name: ['tao', 'jiu'] }) <= 1) num = 2;
+ else num = 1.2;
}
- return get.effect(target,{name:'guohe'},player,player)*num*((player.hp<=1&&get.attitude(player,target)<=0)?0:1);
+ return get.effect(target, { name: 'guohe' }, player, player) * num * ((player.hp <= 1 && get.attitude(player, target) <= 0) ? 0 : 1);
}).setHiddenSkill(event.name);
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twtanfeng',target);
- player.discardPlayerCard(target,'hej',true);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twtanfeng', target);
+ player.discardPlayerCard(target, 'hej', true);
}
else event.finish();
'step 2'
target.chooseCardTarget({
- position:'hes',
- prompt:'选择一张牌当做【杀】对'+get.translation(player)+'使用',
- prompt2:'或点击“取消”,受到其造成的1点火焰伤害,并令其跳过本回合的一个阶段(准备阶段和结束阶段除外)',
- filterCard:function(card,player){
- return player.canUse(get.autoViewAs({name:'sha'},[card]),_status.event.getParent().player,false);
+ position: 'hes',
+ prompt: '选择一张牌当做【杀】对' + get.translation(player) + '使用',
+ prompt2: '或点击“取消”,受到其造成的1点火焰伤害,并令其跳过本回合的一个阶段(准备阶段和结束阶段除外)',
+ filterCard: function (card, player) {
+ return player.canUse(get.autoViewAs({ name: 'sha' }, [card]), _status.event.getParent().player, false);
},
- filterTarget:function(card,player,target){
- var source=_status.event.getParent().player;
- if(target!=source&&!ui.selected.targets.includes(source)) return false;
- card=get.autoViewAs({name:'sha'},[card]);
- return lib.filter.filterTarget.apply(this,arguments);
+ filterTarget: function (card, player, target) {
+ var source = _status.event.getParent().player;
+ if (target != source && !ui.selected.targets.includes(source)) return false;
+ card = get.autoViewAs({ name: 'sha' }, [card]);
+ return lib.filter.filterTarget.apply(this, arguments);
},
- selectTarget:function(){
- var card=get.card(),player=get.player();
- if(!card) return;
- card=get.autoViewAs({name:'sha'},[card]);
- var range=[1,1];
- game.checkMod(card,player,range,'selectTarget',player);
+ selectTarget: function () {
+ var card = get.card(), player = get.player();
+ if (!card) return;
+ card = get.autoViewAs({ name: 'sha' }, [card]);
+ var range = [1, 1];
+ game.checkMod(card, player, range, 'selectTarget', player);
return range;
},
- ai1:function(card){
- var player=_status.event.player,target=_status.event.getParent().player;
- var eff=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player);
- var eff2=get.damageEffect(player,target,player,'fire');
- if(eff<0||eff2>0||eff2>eff||get.tag(card,'recover')) return 0;
- return (player.hp==1?10:6)-get.value(card);
+ ai1: function (card) {
+ var player = _status.event.player, target = _status.event.getParent().player;
+ var eff = get.effect(target, get.autoViewAs({ name: 'sha' }, [card]), player, player);
+ var eff2 = get.damageEffect(player, target, player, 'fire');
+ if (eff < 0 || eff2 > 0 || eff2 > eff || get.tag(card, 'recover')) return 0;
+ return (player.hp == 1 ? 10 : 6) - get.value(card);
},
- ai2:function(target){
- if(target==_status.event.getParent().player) return 100;
- return get.effect(target,{name:'sha'},_status.event.player);
+ ai2: function (target) {
+ if (target == _status.event.getParent().player) return 100;
+ return get.effect(target, { name: 'sha' }, _status.event.player);
}
});
'step 3'
- if(result.bool){
- var cards=result.cards,targets=result.targets;
- var cardx=get.autoViewAs({name:'sha'},cards);
- target.useCard(cardx,cards,targets,false);
+ if (result.bool) {
+ var cards = result.cards, targets = result.targets;
+ var cardx = get.autoViewAs({ name: 'sha' }, cards);
+ target.useCard(cardx, cards, targets, false);
event.finish();
}
- else{
- player.line(target,'fire');
- target.damage(1,'fire');
+ else {
+ player.line(target, 'fire');
+ target.damage(1, 'fire');
}
'step 4'
- if(!target.isIn()){
+ if (!target.isIn()) {
event.finish(); return;
}
- var list=[];
- var list2=[];
- event.map={phaseJudge:'判定阶段',phaseDraw:'摸牌阶段',phaseUse:'出牌阶段',phaseDiscard:'弃牌阶段'};
- for(var i of ['phaseJudge','phaseDraw','phaseUse','phaseDiscard']){
- if(!player.skipList.includes(i)){
- i=event.map[i];
+ var list = [];
+ var list2 = [];
+ event.map = { phaseJudge: '判定阶段', phaseDraw: '摸牌阶段', phaseUse: '出牌阶段', phaseDiscard: '弃牌阶段' };
+ for (var i of ['phaseJudge', 'phaseDraw', 'phaseUse', 'phaseDiscard']) {
+ if (!player.skipList.includes(i)) {
+ i = event.map[i];
list.push(i);
- if(i!='判定阶段'&&i!='弃牌阶段') list2.push(i);
+ if (i != '判定阶段' && i != '弃牌阶段') list2.push(i);
}
}
- target.chooseControl(list).set('prompt','探锋:令'+get.translation(player)+'跳过一个阶段').set('ai',function(){
+ target.chooseControl(list).set('prompt', '探锋:令' + get.translation(player) + '跳过一个阶段').set('ai', function () {
return _status.event.choice;
- }).set('choice',function(){
- var att=get.attitude(target,player);
- var num=player.countCards('j');
- if(att>0){
- if(list.includes('判定阶段')&&num>0) return '判定阶段';
+ }).set('choice', function () {
+ var att = get.attitude(target, player);
+ var num = player.countCards('j');
+ if (att > 0) {
+ if (list.includes('判定阶段') && num > 0) return '判定阶段';
return '弃牌阶段';
}
- if(list.includes('摸牌阶段')&&player.hasJudge('lebu')) return '摸牌阶段';
- if(list.includes('出牌阶段')&&player.hasJudge('bingliang')||player.needsToDiscard()>0) return '出牌阶段';
+ if (list.includes('摸牌阶段') && player.hasJudge('lebu')) return '摸牌阶段';
+ if (list.includes('出牌阶段') && player.hasJudge('bingliang') || player.needsToDiscard() > 0) return '出牌阶段';
return list2.randomGet();
}());
'step 5'
- for(var i in event.map){
- if(event.map[i]==result.control) player.skip(i);
+ for (var i in event.map) {
+ if (event.map[i] == result.control) player.skip(i);
}
target.popup(result.control);
target.line(player);
- game.log(player,'跳过了','#y'+result.control);
+ game.log(player, '跳过了', '#y' + result.control);
},
},
//宗预
- twzhibian:{
- audio:'zhibian',
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player){
- return game.hasPlayer((current)=>(current!=player&&player.canCompare(current)));
+ twzhibian: {
+ audio: 'zhibian',
+ trigger: { player: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return game.hasPlayer((current) => (current != player && player.canCompare(current)));
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twzhibian'),'与一名其他角色拼点',function(card,player,target){
- return target!=player&&player.canCompare(target);
- }).set('ai',function(target){
- if(!_status.event.goon) return false;
- var att=get.attitude(player,target);
- if(att<0&&(target.countCards('h')>1||target.countCards('e',function(card){
- return player.canEquip(card)&&get.effect(player,card,target,player)>0;
- }))) return -att/Math.sqrt(target.countCards('h'));
- if(!player.isDamaged()) return false;
- if(att<=0) return (1-att)/Math.sqrt(target.countCards('h'));
- return Math.sqrt(2/att*Math.sqrt(target.countCards('h')));
- }).set('goon',function(){
- if(!player.hasCard(function(card){
- return (card.number>=14-player.hp&&get.value(card)<=5);
+ player.chooseTarget(get.prompt('twzhibian'), '与一名其他角色拼点', function (card, player, target) {
+ return target != player && player.canCompare(target);
+ }).set('ai', function (target) {
+ if (!_status.event.goon) return false;
+ var att = get.attitude(player, target);
+ if (att < 0 && (target.countCards('h') > 1 || target.countCards('e', function (card) {
+ return player.canEquip(card) && get.effect(player, card, target, player) > 0;
+ }))) return -att / Math.sqrt(target.countCards('h'));
+ if (!player.isDamaged()) return false;
+ if (att <= 0) return (1 - att) / Math.sqrt(target.countCards('h'));
+ return Math.sqrt(2 / att * Math.sqrt(target.countCards('h')));
+ }).set('goon', function () {
+ if (!player.hasCard(function (card) {
+ return (card.number >= 14 - player.hp && get.value(card) <= 5);
})) return false;
return true;
}());
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twzhibian',target);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twzhibian', target);
player.chooseToCompare(target);
}
else event.finish();
'step 2'
- if(result.bool){
- var list=[],list2=[
- '将'+get.translation(target)+'区域中的一张牌移动到你的区域内',
+ if (result.bool) {
+ var list = [], list2 = [
+ '将' + get.translation(target) + '区域中的一张牌移动到你的区域内',
'回复1点体力',
'背水!弃置一张非基本牌,并依次执行上述所有选项',
];
- if(target.countCards('h')||target.hasCard(function(card){
+ if (target.countCards('h') || target.hasCard(function (card) {
return player.canEquip(card);
- },'e')||target.hasCard(function(card){
+ }, 'e') || target.hasCard(function (card) {
return player.canAddJudge(card);
- },'j')) list.push('选项一');
- else list2[0]=''+list2[0]+'';
- if(player.isDamaged()) list.push('选项二');
- else list2[1]=''+list2[1]+'';
- if(!list.length){event.finish(); return;}
- if(player.countCards('he',card=>get.type(card)!='basic')) list.push('背水!')
- else list2[2]=''+list2[2]+'';
+ }, 'j')) list.push('选项一');
+ else list2[0] = '' + list2[0] + '';
+ if (player.isDamaged()) list.push('选项二');
+ else list2[1] = '' + list2[1] + '';
+ if (!list.length) { event.finish(); return; }
+ if (player.countCards('he', card => get.type(card) != 'basic')) list.push('背水!')
+ else list2[2] = '' + list2[2] + '';
list.push('cancel2');
- player.chooseControl(list).set('prompt','直辩:选择一项').set('choiceList',list2).set('ai',function(){
- var target=_status.event.getParent().target;
- if(_status.event.controls.includes('背水!')&&player.isDamaged()&&(target.countCards('h')||target.countCards('e',function(card){
- return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp();
+ player.chooseControl(list).set('prompt', '直辩:选择一项').set('choiceList', list2).set('ai', function () {
+ var target = _status.event.getParent().target;
+ if (_status.event.controls.includes('背水!') && player.isDamaged() && (target.countCards('h') || target.countCards('e', function (card) {
+ return player.canEquip(card) && get.value(card, target) >= 4 + player.getDamagedHp();
}))) return 2;
- if(player.isDamaged()&&(player.hp<=2||(!target.countCards('h')&&!target.countCards('e',function(card){
- return player.canEquip(card)&&get.value(card,target)>=4+player.getDamagedHp();
+ if (player.isDamaged() && (player.hp <= 2 || (!target.countCards('h') && !target.countCards('e', function (card) {
+ return player.canEquip(card) && get.value(card, target) >= 4 + player.getDamagedHp();
})))) return 1;
return 0;
});
@@ -8228,330 +8228,330 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish();
}
'step 3'
- if(result.control!='cancel2'){
- event.control=result.control;
- if(result.control=='背水!'&&player.countCards('he',function(card){
- return get.type(card)!='basic';
- })) player.chooseToDiscard('he',true,function(card){
- return get.type(card)!='basic';
+ if (result.control != 'cancel2') {
+ event.control = result.control;
+ if (result.control == '背水!' && player.countCards('he', function (card) {
+ return get.type(card) != 'basic';
+ })) player.chooseToDiscard('he', true, function (card) {
+ return get.type(card) != 'basic';
});
}
else event.finish();
'step 4'
- if(event.control=='选项一'||event.control=='背水!'){
- player.choosePlayerCard(target,'hej',true).set('ai',get.buttonValue);
+ if (event.control == '选项一' || event.control == '背水!') {
+ player.choosePlayerCard(target, 'hej', true).set('ai', get.buttonValue);
}
else event.goto(6);
'step 5'
- if(result.bool){
- var card=result.cards[0];
- switch (get.position(card)){
- case 'h':player.gain(card,target,'giveAuto'); break;
- case 'e':target.$give(card,player,false); player.equip(card); break;
- case 'j':target.$give(card,player,false); player.addJudge(card); break;
+ if (result.bool) {
+ var card = result.cards[0];
+ switch (get.position(card)) {
+ case 'h': player.gain(card, target, 'giveAuto'); break;
+ case 'e': target.$give(card, player, false); player.equip(card); break;
+ case 'j': target.$give(card, player, false); player.addJudge(card); break;
}
}
'step 6'
- if(event.control=='选项二'||event.control=='背水!') player.recover();
+ if (event.control == '选项二' || event.control == '背水!') player.recover();
},
},
- twyuyan:{
- audio:'yuyan',
- trigger:{target:'useCardToTarget'},
- filter:function(event,player){
- return event.card.name=='sha'&&event.card.isCard&&player.hp=13||!trigger.player.hasCard(function(card){
- if(_status.connectMode&&get.position(card)=='h') return true;
- return get.number(card)>num;
- },'he')))||(typeof num!='number'&&!trigger.player.hasCard(function(card){
- if(_status.connectMode&&get.position(card)=='h') return true;
- return get.type(card)!='basic';
- },'he'))) event._result={bool:false};
- else trigger.player.chooseCard('he',function(card){
- if(typeof _status.event.number=='number') return get.number(card)>_status.event.number;
- return get.type(card)!='basic';
- },'交给'+get.translation(player)+'一张'+str+'牌,或取消'+get.translation(trigger.card)+'对其的目标').set('number',num).set('ai',function(card){
- if(card.name=='shan'||card.name=='tao'||card.name=='jiu') return false;
- return 6-get.value(card);
+ var num = get.number(trigger.card), str = '';
+ if (typeof num == 'number') str = '点数大于' + get.cnNumber(num) + '的';
+ else str = '非基本';
+ if ((typeof num == 'number' && (num >= 13 || !trigger.player.hasCard(function (card) {
+ if (_status.connectMode && get.position(card) == 'h') return true;
+ return get.number(card) > num;
+ }, 'he'))) || (typeof num != 'number' && !trigger.player.hasCard(function (card) {
+ if (_status.connectMode && get.position(card) == 'h') return true;
+ return get.type(card) != 'basic';
+ }, 'he'))) event._result = { bool: false };
+ else trigger.player.chooseCard('he', function (card) {
+ if (typeof _status.event.number == 'number') return get.number(card) > _status.event.number;
+ return get.type(card) != 'basic';
+ }, '交给' + get.translation(player) + '一张' + str + '牌,或取消' + get.translation(trigger.card) + '对其的目标').set('number', num).set('ai', function (card) {
+ if (card.name == 'shan' || card.name == 'tao' || card.name == 'jiu') return false;
+ return 6 - get.value(card);
});
'step 1'
- if(result.bool) trigger.player.give(result.cards,player);
- else{
+ if (result.bool) trigger.player.give(result.cards, player);
+ else {
trigger.targets.remove(player);
trigger.getParent().triggeredTargets2.remove(player);
trigger.untrigger();
}
},
- ai:{
- effect:{
- target:function(card,player,target,current){
- if(card.name=='sha'&&player.hp>target.hp&&get.attitude(player,target)<0){
- var num=get.number(card);
- var bs=player.getCards('h',function(cardx){
- return (typeof num=='number'?(get.number(cardx)>num):(get.type(cardx)!='basic'))&&!['','',''].includes(cardx.name);
+ ai: {
+ effect: {
+ target: function (card, player, target, current) {
+ if (card.name == 'sha' && player.hp > target.hp && get.attitude(player, target) < 0) {
+ var num = get.number(card);
+ var bs = player.getCards('h', function (cardx) {
+ return (typeof num == 'number' ? (get.number(cardx) > num) : (get.type(cardx) != 'basic')) && !['', '', ''].includes(cardx.name);
});
- if(bs.length<2) return 0;
- if(player.hasSkill('jiu')||player.hasSkill('tianxianjiu')) return;
- if(bs.length<=2){
- for(var i=0; i{
- if(player!=evt.player&&evt._dyinged) targets.add(evt.player);
+ twchuhai: {
+ audio: 'chuhai',
+ trigger: { global: 'phaseEnd' },
+ filter: function (event, player) {
+ var targets = [];
+ player.getHistory('sourceDamage', evt => {
+ if (player != evt.player && evt._dyinged) targets.add(evt.player);
});
- return targets.length>=2;
+ return targets.length >= 2;
},
- forced:true,
- locked:false,
- dutySkill:true,
- skillAnimation:true,
- animationColor:'wood',
- group:'twchuhai_lose',
- content:function(){
+ forced: true,
+ locked: false,
+ dutySkill: true,
+ skillAnimation: true,
+ animationColor: 'wood',
+ group: 'twchuhai_lose',
+ content: function () {
'step 0'
- game.log(player,'成功完成使命');
+ game.log(player, '成功完成使命');
player.awakenSkill('twchuhai');
- if(!player.isDisabledJudge()) player.disableJudge();
- event.current=player.next;
+ if (!player.isDisabledJudge()) player.disableJudge();
+ event.current = player.next;
'step 1'
- if(!event.current.countCards('he')) event.goto(3);
- else event.current.chooseCard('交给'+get.translation(player)+'一张牌','he',true).set('ai',get.disvalue2);
+ if (!event.current.countCards('he')) event.goto(3);
+ else event.current.chooseCard('交给' + get.translation(player) + '一张牌', 'he', true).set('ai', get.disvalue2);
'step 2'
- if(result.bool&&result.cards&&result.cards.length) event.current.give(result.cards,player);
+ if (result.bool && result.cards && result.cards.length) event.current.give(result.cards, player);
'step 3'
- event.current=event.current.next;
- if(event.current!=player) event.goto(1);
+ event.current = event.current.next;
+ if (event.current != player) event.goto(1);
},
- subSkill:{
- lose:{
- audio:'chuhai',
- trigger:{
- global:['gainAfter','loseAsyncAfter']
+ subSkill: {
+ lose: {
+ audio: 'chuhai',
+ trigger: {
+ global: ['gainAfter', 'loseAsyncAfter']
},
- forced:true,
- dutySkill:true,
- filter:function(event,player){
- var cards=event.getg(player);
- if(!cards.length) return false;
- return game.hasPlayer(current=>{
- if(current==player) return false;
- var evt=event.getl(current);
- if(evt&&evt.cards&&evt.cards.length) return true;
+ forced: true,
+ dutySkill: true,
+ filter: function (event, player) {
+ var cards = event.getg(player);
+ if (!cards.length) return false;
+ return game.hasPlayer(current => {
+ if (current == player) return false;
+ var evt = event.getl(current);
+ if (evt && evt.cards && evt.cards.length) return true;
return false;
});
},
- content:function(){
+ content: function () {
'step 0'
- var cards=trigger.getg(player);
- if(!cards.length){
+ var cards = trigger.getg(player);
+ if (!cards.length) {
event.finish();
return;
}
- player.chooseCard('h','除害:将其中一张得到的牌置入弃牌堆',true,function(card){
+ player.chooseCard('h', '除害:将其中一张得到的牌置入弃牌堆', true, function (card) {
return _status.event.cards.includes(card);
- }).set('ai',function(card){
+ }).set('ai', function (card) {
return -get.value(card);
- }).set('cards',cards);
+ }).set('cards', cards);
'step 1'
- if(result.bool) player.loseToDiscardpile(result.cards);
+ if (result.bool) player.loseToDiscardpile(result.cards);
},
},
},
},
//桥公
- twyizhu:{
- audio:'yizhu',
- group:['twyizhu_use','twyizhu_discard'],
- trigger:{player:'phaseJieshuBegin'},
- forced:true,
- locked:false,
- content:function(){
+ twyizhu: {
+ audio: 'yizhu',
+ group: ['twyizhu_use', 'twyizhu_discard'],
+ trigger: { player: 'phaseJieshuBegin' },
+ forced: true,
+ locked: false,
+ content: function () {
'step 0'
player.draw(2);
'step 1'
- var hs=player.getCards('he');
- if(!hs.length) event.finish();
- else if(hs.length<=2) event._result={bool:true,cards:hs};
- else player.chooseCard('he',true,2,'选择两张牌洗入牌堆');
+ var hs = player.getCards('he');
+ if (!hs.length) event.finish();
+ else if (hs.length <= 2) event._result = { bool: true, cards: hs };
+ else player.chooseCard('he', true, 2, '选择两张牌洗入牌堆');
'step 2'
- if(result.bool){
- player.$throw(result.cards.length,1000);
- player.lose(result.cards,ui.cardPile).insert_index=function(){
- return ui.cardPile.childNodes[get.rand(0,game.players.length*2-2)];
+ if (result.bool) {
+ player.$throw(result.cards.length, 1000);
+ player.lose(result.cards, ui.cardPile).insert_index = function () {
+ return ui.cardPile.childNodes[get.rand(0, game.players.length * 2 - 2)];
}
- player.markAuto('twyizhu',result.cards);
+ player.markAuto('twyizhu', result.cards);
}
else event.finish();
'step 3'
game.updateRoundNumber();
game.delayx();
},
- intro:{
- mark:function(dialog,content,player){
- if(player==game.me||player.isUnderControl()) dialog.addAuto(content);
+ intro: {
+ mark: function (dialog, content, player) {
+ if (player == game.me || player.isUnderControl()) dialog.addAuto(content);
else {
- var names=[];
- for(var i of content) names.add(i.name);
+ var names = [];
+ for (var i of content) names.add(i.name);
return get.translation(names);
}
},
},
- subSkill:{
- use:{
- audio:'yizhu',
- trigger:{global:'useCardToPlayer'},
- filter:function(event,player){
- return player.getStorage('twyizhu').length&&
- event.player!=player&&event.targets.length==1&&
- event.cards.filter(function(i){
+ subSkill: {
+ use: {
+ audio: 'yizhu',
+ trigger: { global: 'useCardToPlayer' },
+ filter: function (event, player) {
+ return player.getStorage('twyizhu').length &&
+ event.player != player && event.targets.length == 1 &&
+ event.cards.filter(function (i) {
return player.getStorage('twyizhu').includes(i);
- }).length>0;
+ }).length > 0;
},
- logTarget:'player',
- forced:true,
- locked:false,
- content:function(){
+ logTarget: 'player',
+ forced: true,
+ locked: false,
+ content: function () {
'step 0'
- var list=[];
- if(!game.hasPlayer(function(current){
- return current!=trigger.target&&lib.filter.targetEnabled2(trigger.card,trigger.player,current);
+ var list = [];
+ if (!game.hasPlayer(function (current) {
+ return current != trigger.target && lib.filter.targetEnabled2(trigger.card, trigger.player, current);
})) event.goto(3);
- var filter=function(event,player){
- var card=event.card,info=get.info(card);
- if(info.allowMultiple==false) return false;
- if(!info.multitarget){
- return game.hasPlayer(current=>lib.filter.targetEnabled2(card,player,current));
+ var filter = function (event, player) {
+ var card = event.card, info = get.info(card);
+ if (info.allowMultiple == false) return false;
+ if (!info.multitarget) {
+ return game.hasPlayer(current => lib.filter.targetEnabled2(card, player, current));
}
return false;
}
- var enable=filter(trigger.getParent(),trigger.player);
- var prompt2='操作提示:';
- if(enable) prompt2+='选择一名合法的其他角色,以增加其为目标;或';
- prompt2+='选择目标角色('+get.translation(trigger.target)+')和另一名合法的角色,以取消前者为目标并增加后者为目标';
- player.chooseTarget('遗珠:是否'+(enable?'增加或':'')+'修改目标?',prompt2,[enable?1:2,2],(card,player,target)=>{
- var evt=_status.event.getTrigger(),card=evt.card;
- if(target==evt.target) return true;
- if(ui.selected.targets.length&&ui.selected.targets[0]!=evt.target) return false;
- return lib.filter.targetEnabled2(card,evt.player,target);
- }).set('targetprompt',target=>{
- return target==_status.event.targetx?'取消目标':'增加目标';
- }).set('filterOk',()=>{
- if(ui.selected.targets.length==1&&ui.selected.targets[0]==_status.event.targetx) return false;
+ var enable = filter(trigger.getParent(), trigger.player);
+ var prompt2 = '操作提示:';
+ if (enable) prompt2 += '选择一名合法的其他角色,以增加其为目标;或';
+ prompt2 += '选择目标角色(' + get.translation(trigger.target) + ')和另一名合法的角色,以取消前者为目标并增加后者为目标';
+ player.chooseTarget('遗珠:是否' + (enable ? '增加或' : '') + '修改目标?', prompt2, [enable ? 1 : 2, 2], (card, player, target) => {
+ var evt = _status.event.getTrigger(), card = evt.card;
+ if (target == evt.target) return true;
+ if (ui.selected.targets.length && ui.selected.targets[0] != evt.target) return false;
+ return lib.filter.targetEnabled2(card, evt.player, target);
+ }).set('targetprompt', target => {
+ return target == _status.event.targetx ? '取消目标' : '增加目标';
+ }).set('filterOk', () => {
+ if (ui.selected.targets.length == 1 && ui.selected.targets[0] == _status.event.targetx) return false;
return true;
- }).set('ai',target=>{
- var evt=_status.event.getTrigger(),card=evt.card,player=_status.event.player;
- if(target==evt.target&&get.effect(evt.target,card,evt.player,player)<0) return 100;
- if(target==evt.target) return -100;
- return get.effect(target,card,evt.player,player);
- }).set('targetx',trigger.target).set('card',trigger.card);
+ }).set('ai', target => {
+ var evt = _status.event.getTrigger(), card = evt.card, player = _status.event.player;
+ if (target == evt.target && get.effect(evt.target, card, evt.player, player) < 0) return 100;
+ if (target == evt.target) return -100;
+ return get.effect(target, card, evt.player, player);
+ }).set('targetx', trigger.target).set('card', trigger.card);
'step 1'
- if(result.bool){
- var target=result.targets[result.targets[0]==trigger.target?1:0];
- if(result.targets.length>1) {
- player.line2([trigger.target,target]);
+ if (result.bool) {
+ var target = result.targets[result.targets[0] == trigger.target ? 1 : 0];
+ if (result.targets.length > 1) {
+ player.line2([trigger.target, target]);
trigger.targets.remove(trigger.target);
trigger.getParent().triggeredTargets1.remove(trigger.target);
trigger.untrigger();
@@ -8560,160 +8560,160 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.targets.push(target);
}
'step 2'
- var list=trigger.cards.filter(function(i){
+ var list = trigger.cards.filter(function (i) {
return player.getStorage('twyizhu').includes(i);
});
- player.unmarkAuto('twyizhu',list);
+ player.unmarkAuto('twyizhu', list);
player.draw();
game.delayx();
},
},
- discard:{
- trigger:{
- global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter'],
+ discard: {
+ trigger: {
+ global: ['loseAfter', 'cardsDiscardAfter', 'loseAsyncAfter', 'equipAfter'],
},
- silent:true,
- forced:true,
- locked:false,
- filter:function(event,player){
- return player.getStorage('twyizhu').length&&event.getd().filter(function(i){
+ silent: true,
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ return player.getStorage('twyizhu').length && event.getd().filter(function (i) {
return player.getStorage('twyizhu').includes(i);
- }).length>0;
+ }).length > 0;
},
- content:function(){
- var list=trigger.getd().filter(function(i){
+ content: function () {
+ var list = trigger.getd().filter(function (i) {
return player.getStorage('twyizhu').includes(i);
});
- player.unmarkAuto('twyizhu',list);
+ player.unmarkAuto('twyizhu', list);
},
},
},
},
- twluanchou:{
- audio:'luanchou',
- enable:'phaseUse',
- usable:1,
- selectTarget:2,
- filterTarget:true,
- multitarget:true,
- multiline:true,
- content:function(){
+ twluanchou: {
+ audio: 'luanchou',
+ enable: 'phaseUse',
+ usable: 1,
+ selectTarget: 2,
+ filterTarget: true,
+ multitarget: true,
+ multiline: true,
+ content: function () {
'step 0'
- game.filterPlayer().sortBySeat().forEach(function(current){
+ game.filterPlayer().sortBySeat().forEach(function (current) {
current.removeSkills('twgonghuan');
});
'step 1'
targets.sortBySeat();
- for(var i of targets) i.addSkills('twgonghuan');
+ for (var i of targets) i.addSkills('twgonghuan');
},
- derivation:'twgonghuan',
- ai:{
- order:10,
- expose:0.2,
- result:{
- target:function(player,target){
- return Math.max(0.1,target.hp)*(get.attitude(player,target)+20);
+ derivation: 'twgonghuan',
+ ai: {
+ order: 10,
+ expose: 0.2,
+ result: {
+ target: function (player, target) {
+ return Math.max(0.1, target.hp) * (get.attitude(player, target) + 20);
},
},
},
},
- twgonghuan:{
- audio:'gonghuan',
- trigger:{global:'damageBegin4'},
- usable:1,
- filter:function(event,player){
- if(event.player==player) return false;
- return !event.twgonghuan&&event.player.hp<=player.hp&&event.player.hasSkill('twgonghuan');
+ twgonghuan: {
+ audio: 'gonghuan',
+ trigger: { global: 'damageBegin4' },
+ usable: 1,
+ filter: function (event, player) {
+ if (event.player == player) return false;
+ return !event.twgonghuan && event.player.hp <= player.hp && event.player.hasSkill('twgonghuan');
},
- check:function(event,player){
- if(get.damageEffect(event.player,event.source,player)>0||(get.attitude(player,event.player)>0&&get.damageEffect(event.player,event.source,event.player)>0)) return false;
- return get.attitude(player,event.player)>0&&event.player.hp0);
+ check: function (event, player) {
+ if (get.damageEffect(event.player, event.source, player) > 0 || (get.attitude(player, event.player) > 0 && get.damageEffect(event.player, event.source, event.player) > 0)) return false;
+ return get.attitude(player, event.player) > 0 && event.player.hp < player.hp && ((['君', '主'].includes(lib.translate[event.player.identity]) && !['野', '内'].includes(lib.translate[player.identity])) || player.hp + player.hujia - event.num > 0);
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
trigger.cancel();
- player.damage(trigger.source?trigger.source:'nosource',trigger.nature,trigger.num).set('card',trigger.card).set('cards',trigger.cards).twgonghuan=true;
+ player.damage(trigger.source ? trigger.source : 'nosource', trigger.nature, trigger.num).set('card', trigger.card).set('cards', trigger.cards).twgonghuan = true;
},
},
//桥蕤
- twxiawei:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- direct:true,
- locked:false,
- group:['twxiawei_init','twxiawei_lose','twxiawei_unmark'],
- content:function(){
+ twxiawei: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ direct: true,
+ locked: false,
+ group: ['twxiawei_init', 'twxiawei_lose', 'twxiawei_unmark'],
+ content: function () {
'step 0'
- player.chooseControl('1','2','3','4','cancel2').set('prompt',get.prompt('twxiawei')).set('prompt2','妄行:将X+1张牌置于武将牌上,称为“威”').set('ai',function(){
- var player=_status.event.player;
- if(player.maxHp>3) return 3;
- return Math.min(3,player.countCards('he')+1);
+ player.chooseControl('1', '2', '3', '4', 'cancel2').set('prompt', get.prompt('twxiawei')).set('prompt2', '妄行:将X+1张牌置于武将牌上,称为“威”').set('ai', function () {
+ var player = _status.event.player;
+ if (player.maxHp > 3) return 3;
+ return Math.min(3, player.countCards('he') + 1);
});
'step 1'
- if(result.control!='cancel2'){
- var num=result.index+1,cards=get.cards(num+1);
+ if (result.control != 'cancel2') {
+ var num = result.index + 1, cards = get.cards(num + 1);
player.logSkill('twxiawei');
player.addTempSkill('wangxing');
- player.addMark('wangxing',num,false);
- player.$gain2(cards,false);
- game.log(player,'将',cards,'作为“威”置于了武将牌上');
- player.loseToSpecial(cards,'twxiawei').visible=true;
+ player.addMark('wangxing', num, false);
+ player.$gain2(cards, false);
+ game.log(player, '将', cards, '作为“威”置于了武将牌上');
+ player.loseToSpecial(cards, 'twxiawei').visible = true;
}
else event.finish();
'step 2'
player.markSkill('twxiawei');
game.delayx();
},
- marktext:'威',
- intro:{
- mark:function(dialog,storage,player){
- var cards=player.getCards('s',function(card){
+ marktext: '威',
+ intro: {
+ mark: function (dialog, storage, player) {
+ var cards = player.getCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
- if(!cards||!cards.length) return;
+ if (!cards || !cards.length) return;
dialog.addAuto(cards);
},
- markcount:function(storage,player){
- return player.countCards('s',function(card){
+ markcount: function (storage, player) {
+ return player.countCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
},
- onunmark:function(storage,player){
- var cards=player.getCards('s',function(card){
+ onunmark: function (storage, player) {
+ var cards = player.getCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
- if(cards.length){
+ if (cards.length) {
player.loseToDiscardpile(cards);
}
},
},
- mod:{
- aiOrder:function(player,card,num){
- if(get.itemtype(card)=='card'&&card.hasGaintag('twxiawei')) return num+0.5;
+ mod: {
+ aiOrder: function (player, card, num) {
+ if (get.itemtype(card) == 'card' && card.hasGaintag('twxiawei')) return num + 0.5;
},
},
- subSkill:{
- init:{
- audio:'twxiawei',
- trigger:{global:'phaseBefore',player:'enterGame'},
- filter:function(event,player){
- return event.name!='phase'||game.phaseNumber==0;
+ subSkill: {
+ init: {
+ audio: 'twxiawei',
+ trigger: { global: 'phaseBefore', player: 'enterGame' },
+ filter: function (event, player) {
+ return event.name != 'phase' || game.phaseNumber == 0;
},
- forced:true,
- locked:false,
- content:function(){
+ forced: true,
+ locked: false,
+ content: function () {
'step 0'
- var cards=[];
- for(var i=1;i<=2;i++){
- var card=get.cardPile2(function(card){
- return !cards.includes(card)&&get.type(card)=='basic';
+ var cards = [];
+ for (var i = 1; i <= 2; i++) {
+ var card = get.cardPile2(function (card) {
+ return !cards.includes(card) && get.type(card) == 'basic';
});
- if(card) cards.push(card);
+ if (card) cards.push(card);
}
- if(cards.length){
- player.$gain2(cards,false);
- game.log(player,'将',cards,'作为“威”置于了武将牌上');
- player.loseToSpecial(cards,'twxiawei').visible=true;
+ if (cards.length) {
+ player.$gain2(cards, false);
+ game.log(player, '将', cards, '作为“威”置于了武将牌上');
+ player.loseToSpecial(cards, 'twxiawei').visible = true;
}
else event.finish();
'step 1'
@@ -8721,1018 +8721,1018 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
},
},
- lose:{
- audio:'twxiawei',
- trigger:{player:'phaseBegin'},
- filter:function(event,player){
- return player.countCards('s',function(card){
+ lose: {
+ audio: 'twxiawei',
+ trigger: { player: 'phaseBegin' },
+ filter: function (event, player) {
+ return player.countCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
},
- forced:true,
- locked:false,
- content:function(){
- var cards=player.getCards('s',function(card){
+ forced: true,
+ locked: false,
+ content: function () {
+ var cards = player.getCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
player.loseToDiscardpile(cards);
},
},
- unmark:{
- trigger:{player:'loseAfter'},
- filter:function(event,player){
- if(!event.ss||!event.ss.length) return false;
- return !player.countCards('s',function(card){
+ unmark: {
+ trigger: { player: 'loseAfter' },
+ filter: function (event, player) {
+ if (!event.ss || !event.ss.length) return false;
+ return !player.countCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
},
- charlotte:true,
- forced:true,
- silent:true,
- content:function(){
+ charlotte: true,
+ forced: true,
+ silent: true,
+ content: function () {
player.unmarkSkill('twxiawei');
},
},
},
},
- wangxing:{
- trigger:{player:'phaseEnd'},
- charlotte:true,
- onremove:true,
- forced:true,
- popup:false,
- filter:function(event,player){
- return player.countMark('wangxing')>0;
+ wangxing: {
+ trigger: { player: 'phaseEnd' },
+ charlotte: true,
+ onremove: true,
+ forced: true,
+ popup: false,
+ filter: function (event, player) {
+ return player.countMark('wangxing') > 0;
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseToDiscard('he',player.countMark('wangxing'),'妄行:请弃置'+get.cnNumber(player.countMark('wangxing'))+'张牌,或减1点体力上限').set('ai',function(card){
- var player=_status.event.player;
- if(player.maxHp==1) return 100-get.value(card);
- return 5+Math.max(0,5-player.maxHp)-get.value(card);
+ player.chooseToDiscard('he', player.countMark('wangxing'), '妄行:请弃置' + get.cnNumber(player.countMark('wangxing')) + '张牌,或减1点体力上限').set('ai', function (card) {
+ var player = _status.event.player;
+ if (player.maxHp == 1) return 100 - get.value(card);
+ return 5 + Math.max(0, 5 - player.maxHp) - get.value(card);
});
'step 1'
- if(!result.bool) player.loseMaxHp();
+ if (!result.bool) player.loseMaxHp();
},
- intro:{content:'回合结束时,你须弃置#张牌,否则减1点体力上限'},
+ intro: { content: '回合结束时,你须弃置#张牌,否则减1点体力上限' },
},
- twqiongji:{
- audio:2,
- trigger:{player:['useCardAfter','respondAfter','damageBegin3']},
- filter:function(event,player){
- if(event.name=='damage') return !player.countCards('s',function(card){
+ twqiongji: {
+ audio: 2,
+ trigger: { player: ['useCardAfter', 'respondAfter', 'damageBegin3'] },
+ filter: function (event, player) {
+ if (event.name == 'damage') return !player.countCards('s', function (card) {
return card.hasGaintag('twxiawei');
});
- return !player.hasSkill('twqiongji_silent')&&player.getHistory('lose',function(evt){
- if(evt.getParent()!=event) return false;
- for(var i in evt.gaintag_map){
- if(evt.gaintag_map[i].includes('twxiawei')) return true;
+ return !player.hasSkill('twqiongji_silent') && player.getHistory('lose', function (evt) {
+ if (evt.getParent() != event) return false;
+ for (var i in evt.gaintag_map) {
+ if (evt.gaintag_map[i].includes('twxiawei')) return true;
}
return false;
- }).length>0;
+ }).length > 0;
},
- forced:true,
- content:function(){
- if(trigger.name=='damage') trigger.num++;
+ forced: true,
+ content: function () {
+ if (trigger.name == 'damage') trigger.num++;
else {
player.draw();
player.addTempSkill('twqiongji_silent');
}
},
- ai:{combo:'twxiawei'},
- subSkill:{silent:{charlotte:true}},
+ ai: { combo: 'twxiawei' },
+ subSkill: { silent: { charlotte: true } },
},
//卞夫人
- twwanwei:{
- audio:'wanwei',
- trigger:{global:'damageBegin4'},
- filter:function(event,player){
+ twwanwei: {
+ audio: 'wanwei',
+ trigger: { global: 'damageBegin4' },
+ filter: function (event, player) {
return event.player.isMinHp();
},
- check:function(event,player){
- return get.attitude(player,event.player)>0&&event.player.hp 0 && event.player.hp < player.hp;
},
- usable:1,
- logTarget:'player',
- prompt2:function(event,player){
- if(player!=event.player){
- return '防止'+get.translation(event.player)+'即将受到的'+event.num+'点伤害,然后你失去1点体力';
+ usable: 1,
+ logTarget: 'player',
+ prompt2: function (event, player) {
+ if (player != event.player) {
+ return '防止' + get.translation(event.player) + '即将受到的' + event.num + '点伤害,然后你失去1点体力';
}
- else if(event.player==player||!game.hasPlayer(function(current){
- return current!=player&¤t.maxHp>player.maxHp
- })){
+ else if (event.player == player || !game.hasPlayer(function (current) {
+ return current != player && current.maxHp > player.maxHp
+ })) {
return '于当前回合的结束阶段获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之';
}
},
- content:function(){
- if(trigger.player!=player){
+ content: function () {
+ if (trigger.player != player) {
trigger.cancel();
player.loseHp();
}
- if(trigger.player==player||!game.hasPlayer(function(current){
- return current!=player&¤t.maxHp>player.maxHp
+ if (trigger.player == player || !game.hasPlayer(function (current) {
+ return current != player && current.maxHp > player.maxHp
})) player.addTempSkill('twwanwei_effect');
},
- subSkill:{
- effect:{
- audio:'wanwei',
- charlotte:true,
- trigger:{global:'phaseJieshuBegin'},
- prompt2:'获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之',
- content:function(){
+ subSkill: {
+ effect: {
+ audio: 'wanwei',
+ charlotte: true,
+ trigger: { global: 'phaseJieshuBegin' },
+ prompt2: '获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之',
+ content: function () {
'step 0'
- var card=get.cards()[0];
- player.gain(card,'gain2');
+ var card = get.cards()[0];
+ player.gain(card, 'gain2');
'step 1'
- var card=get.bottomCards()[0];
+ var card = get.bottomCards()[0];
ui.cardPile.appendChild(card);
game.updateRoundNumber();
- player.showCards([card],get.translation(player)+'挽危:牌堆底的牌');
- if(player.hasUseTarget(card)) player.chooseUseTarget(card,true);
+ player.showCards([card], get.translation(player) + '挽危:牌堆底的牌');
+ if (player.hasUseTarget(card)) player.chooseUseTarget(card, true);
},
},
},
},
- twyuejian:{
- audio:'yuejian',
- enable:'phaseUse',
- filterCard:true,
- selectCard:function(){
- var player=_status.event.player;
- var num=Math.max(1,player.countCards('h')-player.getHandcardLimit());
- return [1,num];
+ twyuejian: {
+ audio: 'yuejian',
+ enable: 'phaseUse',
+ filterCard: true,
+ selectCard: function () {
+ var player = _status.event.player;
+ var num = Math.max(1, player.countCards('h') - player.getHandcardLimit());
+ return [1, num];
},
- complexCard:true,
- discard:false,
- loseTo:'cardPile',
- insert:true,
- visible:true,
- delay:false,
- position:'he',
- usable:1,
- check:function(card){
- if(ui.selected.cards.length>=3) return 0;
- var player=_status.event.player;
- var num=Math.max(1,player.countCards('h')-player.getHandcardLimit());
- if(num>=3) return 5-get.value(card);
- if(num>=2&&player.isDamaged()&&ui.selected.cards.length<1) return 7-get.value(card);
- if(num>=1&&player.isDamaged()&&!ui.selected.cards.length) return 6-get.value(card);
+ complexCard: true,
+ discard: false,
+ loseTo: 'cardPile',
+ insert: true,
+ visible: true,
+ delay: false,
+ position: 'he',
+ usable: 1,
+ check: function (card) {
+ if (ui.selected.cards.length >= 3) return 0;
+ var player = _status.event.player;
+ var num = Math.max(1, player.countCards('h') - player.getHandcardLimit());
+ if (num >= 3) return 5 - get.value(card);
+ if (num >= 2 && player.isDamaged() && ui.selected.cards.length < 1) return 7 - get.value(card);
+ if (num >= 1 && player.isDamaged() && !ui.selected.cards.length) return 6 - get.value(card);
return 0;
},
- content:function(){
+ content: function () {
'step 0'
player.$throw(cards.length);
- var next=player.chooseToMove();
- next.set('list',[
- ['牌堆顶',cards],
+ var next = player.chooseToMove();
+ next.set('list', [
+ ['牌堆顶', cards],
['牌堆底'],
]);
- next.set('prompt','约俭:将这些牌置于牌堆顶或牌堆底');
- next.set('processAI',function(list){
- var cards=list[0][1],player=_status.event.player;
- var target=player.next;
- var att=get.sgn(get.attitude(player,target));
- var top=[];
- var judges=target.getCards('j');
- var stopped=false;
- if(player!=target||!target.hasWuxie()){
- for(var i=0;i0)) break;
+ while (cards.length) {
+ if ((get.value(cards[0], player) <= 5) == (att > 0)) break;
top.unshift(cards.shift());
}
}
- bottom=cards.sort(function(a,b){
- return player.getUseValue(a)-player.getUseValue(b);
+ bottom = cards.sort(function (a, b) {
+ return player.getUseValue(a) - player.getUseValue(b);
});
- return [top,bottom];
+ return [top, bottom];
});
'step 1'
- var top=result.moved[0];
- var bottom=result.moved[1];
+ var top = result.moved[0];
+ var bottom = result.moved[1];
top.reverse();
- for(var i=0;i=3) player.gainMaxHp();
+ if (cards.length >= 3) player.gainMaxHp();
'step 3'
- if(cards.length>=2) player.recover();
+ if (cards.length >= 2) player.recover();
'step 4'
- if(cards.length>=1){
+ if (cards.length >= 1) {
player.addSkill('twyuejian_effect');
- player.addMark('twyuejian_effect',1,false);
+ player.addMark('twyuejian_effect', 1, false);
}
},
- ai:{
- order:5,
- result:{player:1},
+ ai: {
+ order: 5,
+ result: { player: 1 },
},
- subSkill:{
- effect:{
- charlotte:true,
- onremove:true,
- marktext:'俭',
- intro:{
- content:'手牌上限+#',
+ subSkill: {
+ effect: {
+ charlotte: true,
+ onremove: true,
+ marktext: '俭',
+ intro: {
+ content: '手牌上限+#',
},
- mod:{
- maxHandcard:function(player,num){
- return num+player.countMark('twyuejian_effect');
+ mod: {
+ maxHandcard: function (player, num) {
+ return num + player.countMark('twyuejian_effect');
},
},
},
},
},
//陈震
- twmuyue:{
- audio:1,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.countCards('he')||player.hasSkill('twmuyue_effect');
+ twmuyue: {
+ audio: 1,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.countCards('he') || player.hasSkill('twmuyue_effect');
},
- chooseButton:{
- dialog:function(){
- var list=[];
- for(var i of lib.inpile){
- var type=get.type(i);
- if(type=='basic'||type=='trick') list.push([type,'',i]);
+ chooseButton: {
+ dialog: function () {
+ var list = [];
+ for (var i of lib.inpile) {
+ var type = get.type(i);
+ if (type == 'basic' || type == 'trick') list.push([type, '', i]);
}
- return ui.create.dialog('睦约',[list,'vcard']);
+ return ui.create.dialog('睦约', [list, 'vcard']);
},
- check:function(button){
- if(!get.cardPile2(function(cardx){
- return cardx.name==button.link[2];
+ check: function (button) {
+ if (!get.cardPile2(function (cardx) {
+ return cardx.name == button.link[2];
})) return 0;
- return get.value({name:button.link[2]});
+ return get.value({ name: button.link[2] });
},
- backup:function(links,player){
- return{
- audio:'twmuyue',
- filterCard:function(card,player,target){
+ backup: function (links, player) {
+ return {
+ audio: 'twmuyue',
+ filterCard: function (card, player, target) {
return !player.hasSkill('twmuyue_effect');
},
- selectCard:function(){
- var player=_status.event.player;
- return player.hasSkill('twmuyue_effect')?-1:1;
+ selectCard: function () {
+ var player = _status.event.player;
+ return player.hasSkill('twmuyue_effect') ? -1 : 1;
},
- check:function(card){
- return 7-get.value(card);
+ check: function (card) {
+ return 7 - get.value(card);
},
- position:'he',
- card:links[0],
- filterTarget:true,
- content:function(){
+ position: 'he',
+ card: links[0],
+ filterTarget: true,
+ content: function () {
'step 0'
- var card=lib.skill.twmuyue_backup.card;
- event.card=card;
+ var card = lib.skill.twmuyue_backup.card;
+ event.card = card;
player.removeSkill('twmuyue_effect');
- var cardx=get.cardPile2(function(cardx){
- return cardx.name==card[2];
+ var cardx = get.cardPile2(function (cardx) {
+ return cardx.name == card[2];
});
- player.line(target,'green');
- if(cardx) target.gain(cardx,'gain2');
- else{
+ player.line(target, 'green');
+ if (cardx) target.gain(cardx, 'gain2');
+ else {
player.chat('无牌可得了吗?!');
- game.log('但是牌堆中已经没有','#g【'+get.translation(card[2])+'】','了!');
+ game.log('但是牌堆中已经没有', '#g【' + get.translation(card[2]) + '】', '了!');
}
'step 1'
- if(cards&&cards.length&&get.name(cards[0],player)==card[2]) player.addSkill('twmuyue_effect');
+ if (cards && cards.length && get.name(cards[0], player) == card[2]) player.addSkill('twmuyue_effect');
},
- ai:{
- result:{
- target:function(player,target){
- var att=Math.abs(get.attitude(player,target));
- if(target.hasSkill('nogain')) att/=10;
- return att/Math.sqrt(get.distance(player,target,'absolute'));
+ ai: {
+ result: {
+ target: function (player, target) {
+ var att = Math.abs(get.attitude(player, target));
+ if (target.hasSkill('nogain')) att /= 10;
+ return att / Math.sqrt(get.distance(player, target, 'absolute'));
}
}
},
}
},
- prompt:function(links,player){
- return (player.hasSkill('twmuyue_effect')?'':'弃置一张牌,')+'令一名角色从牌堆中获得一张【'+get.translation(links[0][2])+'】';
+ prompt: function (links, player) {
+ return (player.hasSkill('twmuyue_effect') ? '' : '弃置一张牌,') + '令一名角色从牌堆中获得一张【' + get.translation(links[0][2]) + '】';
}
},
- ai:{
- order:3,
- result:{player:1},
+ ai: {
+ order: 3,
+ result: { player: 1 },
},
- subSkill:{
- effect:{
- charlotte:true,
- mark:true,
- intro:{content:'下一次发动【睦约】无需弃牌'},
+ subSkill: {
+ effect: {
+ charlotte: true,
+ mark: true,
+ intro: { content: '下一次发动【睦约】无需弃牌' },
},
- backup:{},
+ backup: {},
},
},
- twchayi:{
- audio:1,
- trigger:{player:'phaseJieshuBegin'},
- direct:true,
- content:function(){
+ twchayi: {
+ audio: 1,
+ trigger: { player: 'phaseJieshuBegin' },
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twchayi'),lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- return -get.attitude(player,target);
+ player.chooseTarget(get.prompt2('twchayi'), lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player;
+ return -get.attitude(player, target);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twchayi',target);
- if(!target.countCards('h')) event._result={index:1};
- else target.chooseControl().set('choiceList',[
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twchayi', target);
+ if (!target.countCards('h')) event._result = { index: 1 };
+ else target.chooseControl().set('choiceList', [
'展示手牌',
'下一次使用牌时候弃一张牌',
]);
}
else event.finish();
'step 2'
- target.storage.twchayi_re=[result.index,target.countCards('h')];
+ target.storage.twchayi_re = [result.index, target.countCards('h')];
target.addSkill('twchayi_re');
target.markSkill('twchayi_re');
- if(result.index==0) target.showCards(target.getCards('h'),get.translation(target)+'的手牌');
- else{
- target.addMark('twchayi_effect',1,false);
+ if (result.index == 0) target.showCards(target.getCards('h'), get.translation(target) + '的手牌');
+ else {
+ target.addMark('twchayi_effect', 1, false);
target.addSkill('twchayi_effect');
}
},
- subSkill:{
- effect:{
- intro:{content:'使用下一张牌时弃置&张牌'},
- charlotte:true,
- onremove:true,
- audio:'twchayi',
- trigger:{player:'useCard'},
- forced:true,
- content:function(){
- player.chooseToDiscard('he',true,player.countMark('twchayi_effect'));
+ subSkill: {
+ effect: {
+ intro: { content: '使用下一张牌时弃置&张牌' },
+ charlotte: true,
+ onremove: true,
+ audio: 'twchayi',
+ trigger: { player: 'useCard' },
+ forced: true,
+ content: function () {
+ player.chooseToDiscard('he', true, player.countMark('twchayi_effect'));
player.removeSkill('twchayi_effect');
},
},
- re:{
- charlotte:true,
- onremove:true,
- audio:'twchayi',
- trigger:{player:'phaseEnd'},
- direct:true,
- filter:function(event,player){
+ re: {
+ charlotte: true,
+ onremove: true,
+ audio: 'twchayi',
+ trigger: { player: 'phaseEnd' },
+ direct: true,
+ filter: function (event, player) {
return player.storage.twchayi_re;
},
- content:function(){
- if(player.countCards('h')!=player.storage.twchayi_re[1]){
+ content: function () {
+ if (player.countCards('h') != player.storage.twchayi_re[1]) {
player.popup('察异');
- if(player.storage.twchayi_re[0]==0){
- player.addMark('twchayi_effect',1,false);
+ if (player.storage.twchayi_re[0] == 0) {
+ player.addMark('twchayi_effect', 1, false);
player.addSkill('twchayi_effect');
}
- else player.showCards(player.getCards('h'),get.translation(player)+'的手牌');
+ else player.showCards(player.getCards('h'), get.translation(player) + '的手牌');
}
player.removeSkill('twchayi_re');
},
- marktext:'异',
- intro:{
- markcount:function(storage,player){
- if(!storage||!storage.length) return 0;
+ marktext: '异',
+ intro: {
+ markcount: function (storage, player) {
+ if (!storage || !storage.length) return 0;
return storage[1];
},
- content:function(storage,player){
- if(!storage||!storage.length) return;
- return '下个回合结束时,若你的手牌数不为'+storage[1]+',你'+(storage[0]==0?'下次使用牌时弃置一张牌':'展示所有手牌');
+ content: function (storage, player) {
+ if (!storage || !storage.length) return;
+ return '下个回合结束时,若你的手牌数不为' + storage[1] + ',你' + (storage[0] == 0 ? '下次使用牌时弃置一张牌' : '展示所有手牌');
}
}
},
},
},
//费祎
- twshengxi:{
- audio:'shengxi_feiyi',
- trigger:{player:'phaseJieshuBegin'},
- filter:function(event,player){
- return player.getHistory('useCard').length>0&&player.getHistory('sourceDamage').length==0;
+ twshengxi: {
+ audio: 'shengxi_feiyi',
+ trigger: { player: 'phaseJieshuBegin' },
+ filter: function (event, player) {
+ return player.getHistory('useCard').length > 0 && player.getHistory('sourceDamage').length == 0;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var list=get.zhinangs();
- player.chooseButton(['###'+get.prompt('twshengxi')+'###获得一张智囊并摸一张牌',[list,'vcard']]).set('ai',function(card){
- return (Math.random()+0.5)*get.value({name:card.link[2]},_status.event.player)
+ var list = get.zhinangs();
+ player.chooseButton(['###' + get.prompt('twshengxi') + '###获得一张智囊并摸一张牌', [list, 'vcard']]).set('ai', function (card) {
+ return (Math.random() + 0.5) * get.value({ name: card.link[2] }, _status.event.player)
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twshengxi');
- var card=get.cardPile2(function(card){
- return card.name==result.links[0][2];
+ var card = get.cardPile2(function (card) {
+ return card.name == result.links[0][2];
});
- if(card) player.gain(card,'gain2');
+ if (card) player.gain(card, 'gain2');
player.draw();
}
},
- group:'twshengxi_zhunbei',
- subfrequent:['zhunbei'],
- subSkill:{
- zhunbei:{
- audio:'shengxi_feiyi',
- trigger:{player:'phaseZhunbeiBegin'},
- frequent:true,
- prompt2:'从游戏外或牌堆中获得一张【调剂盐梅】',
- content:function(){
- if(!_status.tiaojiyanmei_suits||_status.tiaojiyanmei_suits.length>0){
- if(!lib.inpile.includes('tiaojiyanmei')){
- game.broadcastAll(function(){lib.inpile.add('tiaojiyanmei')});
+ group: 'twshengxi_zhunbei',
+ subfrequent: ['zhunbei'],
+ subSkill: {
+ zhunbei: {
+ audio: 'shengxi_feiyi',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ frequent: true,
+ prompt2: '从游戏外或牌堆中获得一张【调剂盐梅】',
+ content: function () {
+ if (!_status.tiaojiyanmei_suits || _status.tiaojiyanmei_suits.length > 0) {
+ if (!lib.inpile.includes('tiaojiyanmei')) {
+ game.broadcastAll(function () { lib.inpile.add('tiaojiyanmei') });
}
- if(!_status.tiaojiyanmei_suits) _status.tiaojiyanmei_suits=lib.suit.slice(0);
- player.gain(game.createCard2('tiaojiyanmei',_status.tiaojiyanmei_suits.randomRemove(),6),'gain2');
+ if (!_status.tiaojiyanmei_suits) _status.tiaojiyanmei_suits = lib.suit.slice(0);
+ player.gain(game.createCard2('tiaojiyanmei', _status.tiaojiyanmei_suits.randomRemove(), 6), 'gain2');
}
else {
- var card=get.cardPile2(function(card){
- return card.name=='tiaojiyanmei';
+ var card = get.cardPile2(function (card) {
+ return card.name == 'tiaojiyanmei';
});
- if(card) player.gain(card,'gain2');
+ if (card) player.gain(card, 'gain2');
}
},
},
},
},
- twkuanji:{
- audio:'fyjianyu',
- trigger:{
- player:'loseAfter',
- global:['cardsDiscardAfter','loseAsyncAfter','equipAfter'],
+ twkuanji: {
+ audio: 'fyjianyu',
+ trigger: {
+ player: 'loseAfter',
+ global: ['cardsDiscardAfter', 'loseAsyncAfter', 'equipAfter'],
},
- filter:function(event,player){
- if(event.name!='cardsDiscard'){
- return event.getd(player,'cards2').length>0;
+ filter: function (event, player) {
+ if (event.name != 'cardsDiscard') {
+ return event.getd(player, 'cards2').length > 0;
}
- else{
- if(event.cards.filterInD('d').length<=0) return false;
- var evt=event.getParent();
- if(evt.name!='orderingDiscard') return false;
- var evtx=(evt.relatedEvent||evt.getParent());
- if(evtx.player!=player) return false;
- if(evtx.name=='useCard') return false;
- return player.hasHistory('lose',evtxx=>{
- return evtx==(evtxx.relatedEvent||evtxx.getParent());
+ else {
+ if (event.cards.filterInD('d').length <= 0) return false;
+ var evt = event.getParent();
+ if (evt.name != 'orderingDiscard') return false;
+ var evtx = (evt.relatedEvent || evt.getParent());
+ if (evtx.player != player) return false;
+ if (evtx.name == 'useCard') return false;
+ return player.hasHistory('lose', evtxx => {
+ return evtx == (evtxx.relatedEvent || evtxx.getParent());
});
}
},
- usable:1,
- direct:true,
- content:function(){
+ usable: 1,
+ direct: true,
+ content: function () {
'step 0'
- var cards=[];
- if(trigger.name!='cardsDiscard'){
- cards=trigger.getd(player,'cards2');
+ var cards = [];
+ if (trigger.name != 'cardsDiscard') {
+ cards = trigger.getd(player, 'cards2');
}
- else cards=trigger.cards.filterInD('d');
- player.chooseButton(['宽济:是否将一张牌交给一名其他角色?',cards]).set('ai',function(button){
- var player=_status.event.player;
- if(game.hasPlayer(function(current){
- return current!=player&&get.attitude(player,current)>0;
- })) return Math.abs(get.value(button.link,'raw'))+1;
- return -get.value(button.link,'raw');
+ else cards = trigger.cards.filterInD('d');
+ player.chooseButton(['宽济:是否将一张牌交给一名其他角色?', cards]).set('ai', function (button) {
+ var player = _status.event.player;
+ if (game.hasPlayer(function (current) {
+ return current != player && get.attitude(player, current) > 0;
+ })) return Math.abs(get.value(button.link, 'raw')) + 1;
+ return -get.value(button.link, 'raw');
});
'step 1'
- if(result.bool){
- var card=result.links[0];
- event.card=card;
- player.chooseTarget('请选择【宽济】的目标','令一名其他角色获得'+get.translation(card),lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- return get.attitude(player,target)*get.value(_status.event.getParent().card,target)*(target.hasSkillTag('nogain')?0.1:1);
+ if (result.bool) {
+ var card = result.links[0];
+ event.card = card;
+ player.chooseTarget('请选择【宽济】的目标', '令一名其他角色获得' + get.translation(card), lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.attitude(player, target) * get.value(_status.event.getParent().card, target) * (target.hasSkillTag('nogain') ? 0.1 : 1);
});
}
- else{
+ else {
player.storage.counttrigger.twkuanji--;
event.finish();
}
'step 2'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twkuanji',target);
- target.gain(card,'gain2');
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twkuanji', target);
+ target.gain(card, 'gain2');
}
},
},
- shengxi_feiyi:{audio:2},
+ shengxi_feiyi: { audio: 2 },
//王越
- twyulong:{
- audio:2,
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- if(!event.isFirstTarget) return false;
- if(event.card.name!='sha') return false;
- return event.targets.some(target=>player.canCompare(target));
+ twyulong: {
+ audio: 2,
+ trigger: { player: 'useCardToPlayered' },
+ filter: function (event, player) {
+ if (!event.isFirstTarget) return false;
+ if (event.card.name != 'sha') return false;
+ return event.targets.some(target => player.canCompare(target));
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twyulong'),(card,player,target)=>{
- return _status.event.getTrigger().targets.includes(target)&&player.canCompare(target);
- }).set('ai',target=>{
- if(player.hasCard(card=>get.value(card)<6,'h')) return -get.attitude(_status.event.player,target);
+ player.chooseTarget(get.prompt2('twyulong'), (card, player, target) => {
+ return _status.event.getTrigger().targets.includes(target) && player.canCompare(target);
+ }).set('ai', target => {
+ if (player.hasCard(card => get.value(card) < 6, 'h')) return -get.attitude(_status.event.player, target);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twyulong',target);
- if(player.canCompare(target)){
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twyulong', target);
+ if (player.canCompare(target)) {
player.chooseToCompare(target);
}
}
- else{
+ else {
event.finish();
}
'step 2'
- if(result.bool){
- var color=get.color(result.player,false);
- if(color=='black') trigger.getParent().baseDamage++;
- else if(color=='red') trigger.directHit.addArray(game.players);
- trigger.getParent().twyulong=true;
+ if (result.bool) {
+ var color = get.color(result.player, false);
+ if (color == 'black') trigger.getParent().baseDamage++;
+ else if (color == 'red') trigger.directHit.addArray(game.players);
+ trigger.getParent().twyulong = true;
player.addTempSkill('twyulong_addCount');
}
},
- subSkill:{
- addCount:{
- charlotte:true,
- forced:true,
- trigger:{source:'damageSource'},
- filter:function(event,player){
- if(!event.card||event.card.name!='sha') return false;
- var evt=event.getParent(2);
- if(evt.name!='useCard'||!evt.twyulong) return false;
+ subSkill: {
+ addCount: {
+ charlotte: true,
+ forced: true,
+ trigger: { source: 'damageSource' },
+ filter: function (event, player) {
+ if (!event.card || event.card.name != 'sha') return false;
+ var evt = event.getParent(2);
+ if (evt.name != 'useCard' || !evt.twyulong) return false;
return true;
},
- content:function(){
- var evt=trigger.getParent(2);
- if(evt.addCount!==false){
- evt.addCount=false;
- if(player.stat[player.stat.length-1].card.sha>0){
- player.stat[player.stat.length-1].card.sha--;
+ content: function () {
+ var evt = trigger.getParent(2);
+ if (evt.addCount !== false) {
+ evt.addCount = false;
+ if (player.stat[player.stat.length - 1].card.sha > 0) {
+ player.stat[player.stat.length - 1].card.sha--;
}
}
}
}
}
},
- twjianming:{
- audio:2,
- trigger:{player:['useCard','respond']},
- filter:function(event,player){
- if(event.card.name!='sha'||!lib.suit.includes(get.suit(event.card))) return false;
- var list=[];
- player.getHistory('useCard',function(evt){
- if(evt.card.name=='sha'){
- if(event.card!=evt.card) list.push(get.suit(evt.card));
+ twjianming: {
+ audio: 2,
+ trigger: { player: ['useCard', 'respond'] },
+ filter: function (event, player) {
+ if (event.card.name != 'sha' || !lib.suit.includes(get.suit(event.card))) return false;
+ var list = [];
+ player.getHistory('useCard', function (evt) {
+ if (evt.card.name == 'sha') {
+ if (event.card != evt.card) list.push(get.suit(evt.card));
}
});
- player.getHistory('respond',function(evt){
- if(evt.card.name=='sha'){
- if(event.card!=evt.card) list.push(get.suit(evt.card));
+ player.getHistory('respond', function (evt) {
+ if (evt.card.name == 'sha') {
+ if (event.card != evt.card) list.push(get.suit(evt.card));
}
});
return !list.includes(get.suit(event.card));
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
player.draw();
},
},
//李彦
- twzhenhu:{
- audio:2,
- trigger:{player:'useCardToPlayer'},
- filter:function(event,player){
- if(!event.isFirstTarget||!get.tag(event.card,'damage')) return false;
- return !player.hasSkillTag('noCompareSource')&&game.hasPlayer(target=>{
- return player.canCompare(target,true);
+ twzhenhu: {
+ audio: 2,
+ trigger: { player: 'useCardToPlayer' },
+ filter: function (event, player) {
+ if (!event.isFirstTarget || !get.tag(event.card, 'damage')) return false;
+ return !player.hasSkillTag('noCompareSource') && game.hasPlayer(target => {
+ return player.canCompare(target, true);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twzhenhu'),[1,3],function(card,player,target){
- return player.canCompare(target,true);
- }).set('ai',function(target){
- var player=_status.event.player,targets=_status.event.getTrigger().targets;
- var num=0;
- if(player.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1);
- if(player.hasSkill('twchuanshu_effect')) num+=3;
- var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
- if(hs.length==0) return -1;
- var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
- if(Math.min(13,get.number(hs[0])+num)<=get.number(ts[0])) return -1;
- return get.effect(target,{name:'guohe_copy2'},player,player)/2+(targets.includes(target)?get.damageEffect(target,player,player):0);
+ player.chooseTarget(get.prompt2('twzhenhu'), [1, 3], function (card, player, target) {
+ return player.canCompare(target, true);
+ }).set('ai', function (target) {
+ var player = _status.event.player, targets = _status.event.getTrigger().targets;
+ var num = 0;
+ if (player.hasSkill('twlvren')) num += 2 * (ui.selected.targets.length + 1);
+ if (player.hasSkill('twchuanshu_effect')) num += 3;
+ var hs = player.getCards('h').sort((a, b) => get.number(b) - get.number(a));
+ if (hs.length == 0) return -1;
+ var ts = target.getCards('h').sort((a, b) => get.number(b) - get.number(a));
+ if (Math.min(13, get.number(hs[0]) + num) <= get.number(ts[0])) return -1;
+ return get.effect(target, { name: 'guohe_copy2' }, player, player) / 2 + (targets.includes(target) ? get.damageEffect(target, player, player) : 0);
});
'step 1'
- if(result.bool){
- var targets=result.targets.sortBySeat();
- event.targets=targets;
- player.logSkill('twzhenhu',targets);
+ if (result.bool) {
+ var targets = result.targets.sortBySeat();
+ event.targets = targets;
+ player.logSkill('twzhenhu', targets);
player.draw();
}
else event.finish();
'step 2'
- player.chooseToCompare(targets,function(card){
+ player.chooseToCompare(targets, function (card) {
return get.number(card);
}).setContent('chooseToCompareMeanwhile');
'step 3'
- if(result.winner&&result.winner==player){
+ if (result.winner && result.winner == player) {
event.targets.remove(result.winner);
- player.line(event.targets,trigger.card.nature);
+ player.line(event.targets, trigger.card.nature);
player.addTempSkill('twzhenhu_add');
- if(!trigger.card.storage) trigger.card.storage={};
- trigger.card.storage.twzhenhu=event.targets;
+ if (!trigger.card.storage) trigger.card.storage = {};
+ trigger.card.storage.twzhenhu = event.targets;
}
else player.loseHp();
},
- subSkill:{
- add:{
- charlotte:true,
- onremove:true,
- forced:true,
- popup:false,
- trigger:{global:'damageBegin1'},
- filter:function(event,player){
- if(!event.card||!event.card.storage) return false;
- var targets=event.card.storage.twzhenhu;
- return targets&&targets.includes(event.player);
+ subSkill: {
+ add: {
+ charlotte: true,
+ onremove: true,
+ forced: true,
+ popup: false,
+ trigger: { global: 'damageBegin1' },
+ filter: function (event, player) {
+ if (!event.card || !event.card.storage) return false;
+ var targets = event.card.storage.twzhenhu;
+ return targets && targets.includes(event.player);
},
- content:function(){
+ content: function () {
trigger.num++;
},
},
},
},
- twlvren:{
- audio:2,
- trigger:{source:'damageBegin3'},
- filter:function(event,player){
- return event.player!=player&&event.player.isIn()&&!event.player.hasMark('twlvren');
+ twlvren: {
+ audio: 2,
+ trigger: { source: 'damageBegin3' },
+ filter: function (event, player) {
+ return event.player != player && event.player.isIn() && !event.player.hasMark('twlvren');
},
- logTarget:'player',
- forced:true,
- locked:false,
- group:['twlvren_more','twlvren_add'],
- content:function(){
- trigger.player.addMark('twlvren',1);
+ logTarget: 'player',
+ forced: true,
+ locked: false,
+ group: ['twlvren_more', 'twlvren_add'],
+ content: function () {
+ trigger.player.addMark('twlvren', 1);
},
- ai:{
- effect:{
- player:function(card,player,target){
- if(target&&target.hasMark('twlvren')) return 0.33;
+ ai: {
+ effect: {
+ player: function (card, player, target) {
+ if (target && target.hasMark('twlvren')) return 0.33;
}
}
},
- marktext:'刃',
- intro:{name2:'刃',content:'mark'},
- subSkill:{
- more:{
- audio:'twlvren',
- trigger:{player:'useCard2'},
- filter:function(event,player){
- var card=event.card,info=get.info(card);
- if(info.allowMultiple==false) return false;
- if(event.targets&&!info.multitarget){
- return get.tag(card,'damage')&&event.targets&&game.hasPlayer(function(target){
- return target.hasMark('twlvren')&&!event.targets.includes(target)&&lib.filter.targetEnabled2(card,player,target);
+ marktext: '刃',
+ intro: { name2: '刃', content: 'mark' },
+ subSkill: {
+ more: {
+ audio: 'twlvren',
+ trigger: { player: 'useCard2' },
+ filter: function (event, player) {
+ var card = event.card, info = get.info(card);
+ if (info.allowMultiple == false) return false;
+ if (event.targets && !info.multitarget) {
+ return get.tag(card, 'damage') && event.targets && game.hasPlayer(function (target) {
+ return target.hasMark('twlvren') && !event.targets.includes(target) && lib.filter.targetEnabled2(card, player, target);
});
}
return false;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twlvren'),'为'+get.translation(trigger.card)+'额外指定一个有“刃”的角色为目标',function(card,player,target){
- var evt=_status.event.getTrigger();
- return target.hasMark('twlvren')&&!evt.targets.includes(target)&&lib.filter.targetEnabled2(evt.card,player,target);
- }).set('ai',function(target){
- return get.effect(target,_status.event.getTrigger().card,_status.event.player);
+ player.chooseTarget(get.prompt('twlvren'), '为' + get.translation(trigger.card) + '额外指定一个有“刃”的角色为目标', function (card, player, target) {
+ var evt = _status.event.getTrigger();
+ return target.hasMark('twlvren') && !evt.targets.includes(target) && lib.filter.targetEnabled2(evt.card, player, target);
+ }).set('ai', function (target) {
+ return get.effect(target, _status.event.getTrigger().card, _status.event.player);
});
'step 1'
- if(result.bool){
- var targets=result.targets;
- player.logSkill('twlvren',targets);
- player.line(targets,trigger.card.nature);
+ if (result.bool) {
+ var targets = result.targets;
+ player.logSkill('twlvren', targets);
+ player.line(targets, trigger.card.nature);
trigger.targets.addArray(targets);
- for(var i of targets) i.removeMark('twlvren',i.countMark('twlvren'),false);
+ for (var i of targets) i.removeMark('twlvren', i.countMark('twlvren'), false);
}
},
},
- add:{
- audio:'twlvren',
- trigger:{player:'compare',target:'compare'},
- filter:function(event,player){
- if(player!=event.target&&event.iwhile) return false;
+ add: {
+ audio: 'twlvren',
+ trigger: { player: 'compare', target: 'compare' },
+ filter: function (event, player) {
+ if (player != event.target && event.iwhile) return false;
return true;
},
- forced:true,
- locked:false,
- content:function(){
- var num=2*trigger.lose_list.length;
- if(player==trigger.player){
- trigger.num1+=num;
- if(trigger.num1>13) trigger.num1=13;
+ forced: true,
+ locked: false,
+ content: function () {
+ var num = 2 * trigger.lose_list.length;
+ if (player == trigger.player) {
+ trigger.num1 += num;
+ if (trigger.num1 > 13) trigger.num1 = 13;
}
- else{
- trigger.num2+=num;
- if(trigger.num2>13) trigger.num2=13;
+ else {
+ trigger.num2 += num;
+ if (trigger.num2 > 13) trigger.num2 = 13;
}
- game.log(player,'的拼点牌点数+',num);
+ game.log(player, '的拼点牌点数+', num);
},
},
},
},
//童渊
- twchaofeng:{
- audio:2,
- enable:['chooseToUse','chooseToRespond'],
- hiddenCard:function(player,name){
- if(!['sha','shan'].includes(name)) return false;
- return player.hasCard(function(card){
- const name2=get.name(card);
- return (name2=='sha'||name2=='shan')&&name!=name2;
- },'hs');
+ twchaofeng: {
+ audio: 2,
+ enable: ['chooseToUse', 'chooseToRespond'],
+ hiddenCard: function (player, name) {
+ if (!['sha', 'shan'].includes(name)) return false;
+ return player.hasCard(function (card) {
+ const name2 = get.name(card);
+ return (name2 == 'sha' || name2 == 'shan') && name != name2;
+ }, 'hs');
},
- filter:function(event,player){
- const names=[];
- if(event.filterCard({name:'sha'},player,event)) names.push('shan');
- if(event.filterCard({name:'shan'},player,event)) names.push('sha');
- return names.length>0&&player.hasCard(function(card){
+ filter: function (event, player) {
+ const names = [];
+ if (event.filterCard({ name: 'sha' }, player, event)) names.push('shan');
+ if (event.filterCard({ name: 'shan' }, player, event)) names.push('sha');
+ return names.length > 0 && player.hasCard(function (card) {
return names.includes(get.name(card));
- },'hs');
+ }, 'hs');
//return false;
},
- group:'twchaofeng_compare',
- chooseButton:{
- dialog:function(event,player){
- var list=[];
- if(event.filterCard({name:'sha'},player,event)){
- list.push(['基本','','sha']);
- for(var j of lib.inpile_nature) list.push(['基本','','sha',j]);
+ group: 'twchaofeng_compare',
+ chooseButton: {
+ dialog: function (event, player) {
+ var list = [];
+ if (event.filterCard({ name: 'sha' }, player, event)) {
+ list.push(['基本', '', 'sha']);
+ for (var j of lib.inpile_nature) list.push(['基本', '', 'sha', j]);
}
- if(event.filterCard({name:'shan'},player,event)){
- list.push(['基本','','shan']);
+ if (event.filterCard({ name: 'shan' }, player, event)) {
+ list.push(['基本', '', 'shan']);
}
- var dialog=ui.create.dialog('朝凤',[list,'vcard'],'hidden');
- dialog.direct=true;
+ var dialog = ui.create.dialog('朝凤', [list, 'vcard'], 'hidden');
+ dialog.direct = true;
return dialog;
},
- check:function(button){
- var player=_status.event.player;
- var card={name:button.link[2],nature:button.link[3]};
- if(_status.event.getParent().type!='phase'||game.hasPlayer(function(current){
- return player.canUse(card,current)&&get.effect(current,card,player,player)>0;
- })){
- switch (button.link[2]){
- case 'shan':return 5;
+ check: function (button) {
+ var player = _status.event.player;
+ var card = { name: button.link[2], nature: button.link[3] };
+ if (_status.event.getParent().type != 'phase' || game.hasPlayer(function (current) {
+ return player.canUse(card, current) && get.effect(current, card, player, player) > 0;
+ })) {
+ switch (button.link[2]) {
+ case 'shan': return 5;
case 'sha':
- if(button.link[3]=='fire') return 2.95;
- else if(button.link[3]=='thunder'||button.link[3]=='ice') return 2.92;
+ if (button.link[3] == 'fire') return 2.95;
+ else if (button.link[3] == 'thunder' || button.link[3] == 'ice') return 2.92;
else return 2.9;
}
}
return 0;
},
- backup:function(links,player){
+ backup: function (links, player) {
return {
- audio:'twchaofeng',
- name:links[0][2],
- filterCard:function(card,player,target){
- if(lib.skill.twchaofeng_backup.name=='sha') return get.name(card)=='shan';
- else return get.name(card)=='sha';
+ audio: 'twchaofeng',
+ name: links[0][2],
+ filterCard: function (card, player, target) {
+ if (lib.skill.twchaofeng_backup.name == 'sha') return get.name(card) == 'shan';
+ else return get.name(card) == 'sha';
},
- selectCard:1,
- check:function(card,player,target){
- return 6-get.value(card);
+ selectCard: 1,
+ check: function (card, player, target) {
+ return 6 - get.value(card);
},
- viewAs:{name:links[0][2],nature:links[0][3]},
- position:'hs',
- popname:true,
+ viewAs: { name: links[0][2], nature: links[0][3] },
+ position: 'hs',
+ popname: true,
}
},
- prompt:function(links,player){
- var view,use;
- if(links[0][2]=='sha'){
- use='【闪】';
- view=get.translation(links[0][3]||'')+'【'+get.translation(links[0][2])+'】';
+ prompt: function (links, player) {
+ var view, use;
+ if (links[0][2] == 'sha') {
+ use = '【闪】';
+ view = get.translation(links[0][3] || '') + '【' + get.translation(links[0][2]) + '】';
}
- else{
- use='【杀】';
- view='【闪】';
+ else {
+ use = '【杀】';
+ view = '【闪】';
}
- return '将一张'+use+'当做'+view+(_status.event.name=='chooseToUse'?'使用':'打出');
+ return '将一张' + use + '当做' + view + (_status.event.name == 'chooseToUse' ? '使用' : '打出');
},
},
- ai:{
- skillTagFilter:function(player,tag){
+ ai: {
+ skillTagFilter: function (player, tag) {
var name;
- switch (tag){
- case 'respondSha':name='shan'; break;
- case 'respondShan':name='sha'; break;
+ switch (tag) {
+ case 'respondSha': name = 'shan'; break;
+ case 'respondShan': name = 'sha'; break;
}
- if(!player.countCards('hs',name)) return false;
+ if (!player.countCards('hs', name)) return false;
},
- order:function(item,player){
- if(player&&_status.event.type=='phase'){
- var max=0;
- if(player.countCards('hs','shan')>0&&lib.inpile_nature.some(i=>player.getUseValue({name:'sha',nature:i})>0)){
- var temp=get.order({name:'sha'});
- if(temp>max) max=temp;
+ order: function (item, player) {
+ if (player && _status.event.type == 'phase') {
+ var max = 0;
+ if (player.countCards('hs', 'shan') > 0 && lib.inpile_nature.some(i => player.getUseValue({ name: 'sha', nature: i }) > 0)) {
+ var temp = get.order({ name: 'sha' });
+ if (temp > max) max = temp;
}
- if(max>0) max+=0.3;
+ if (max > 0) max += 0.3;
return max;
}
return 4;
},
- result:{
- player:1,
+ result: {
+ player: 1,
},
- respondSha:true,
- respondShan:true,
- fireAttack:true,
+ respondSha: true,
+ respondShan: true,
+ fireAttack: true,
},
- subSkill:{
- compare:{
- audio:'twchaofeng',
- trigger:{player:'phaseUseBegin'},
- direct:true,
- content:function(){
+ subSkill: {
+ compare: {
+ audio: 'twchaofeng',
+ trigger: { player: 'phaseUseBegin' },
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twchaofeng'),'选择至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】',[1,3],(card,player,target)=>{
+ player.chooseTarget(get.prompt('twchaofeng'), '选择至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】', [1, 3], (card, player, target) => {
return player.canCompare(target);
- }).set('ai',function(target){
- var player=_status.event.player,targets=_status.event.getTrigger().targets;
- var num=0,card={name:'sha',nature:'fire',isCard:true};
- if(target.hasSkill('twlvren')) num+=2*(ui.selected.targets.length+1);
- if(target.hasSkill('twchuanshu_effect')) num+=3;
- var hs=player.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
- var ts=target.getCards('h').sort((a,b)=>get.number(b)-get.number(a));
- if(get.number(hs[0])<=Math.min(13,get.number(ts[0])+num)){
- return 6+get.effect(player,card,target,target);
+ }).set('ai', function (target) {
+ var player = _status.event.player, targets = _status.event.getTrigger().targets;
+ var num = 0, card = { name: 'sha', nature: 'fire', isCard: true };
+ if (target.hasSkill('twlvren')) num += 2 * (ui.selected.targets.length + 1);
+ if (target.hasSkill('twchuanshu_effect')) num += 3;
+ var hs = player.getCards('h').sort((a, b) => get.number(b) - get.number(a));
+ var ts = target.getCards('h').sort((a, b) => get.number(b) - get.number(a));
+ if (get.number(hs[0]) <= Math.min(13, get.number(ts[0]) + num)) {
+ return 6 + get.effect(player, card, target, target);
}
- return get.effect(target,{name:'guohe_copy2'},player,player)/2+get.effect(target,card,player,player);
+ return get.effect(target, { name: 'guohe_copy2' }, player, player) / 2 + get.effect(target, card, player, player);
});
'step 1'
- if(result.bool){
- event.targets=result.targets;
- player.logSkill('twchaofeng_compare',event.targets);
+ if (result.bool) {
+ event.targets = result.targets;
+ player.logSkill('twchaofeng_compare', event.targets);
player.chooseToCompare(event.targets).setContent('chooseToCompareMeanwhile');
}
'step 2'
- if(result.winner){
- var targets=[player].addArray(event.targets).sortBySeat(player);
+ if (result.winner) {
+ var targets = [player].addArray(event.targets).sortBySeat(player);
targets.remove(result.winner);
- var card={name:'sha',nature:'fire',isCard:true};
- var targetsx=targets.filter(function(target){
- return result.winner.canUse(card,target,false);
+ var card = { name: 'sha', nature: 'fire', isCard: true };
+ var targetsx = targets.filter(function (target) {
+ return result.winner.canUse(card, target, false);
});
- if(targetsx.length) result.winner.useCard(card,targetsx,'noai').set('addCount',false);
+ if (targetsx.length) result.winner.useCard(card, targetsx, 'noai').set('addCount', false);
}
}
}
}
},
- twchuanshu:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- limited:true,
- skillAnimation:true,
- animationColor:'qun',
- direct:true,
- content:function(){
+ twchuanshu: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'qun',
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twchuanshu')).set('ai',target=>get.attitude(_status.event.player,target));
+ player.chooseTarget(get.prompt2('twchuanshu')).set('ai', target => get.attitude(_status.event.player, target));
'step 1'
- if(result.bool){
+ if (result.bool) {
player.awakenSkill('twchuanshu');
- var target=result.targets[0];
- player.logSkill('twchuanshu',target);
- target.addMark('twchuanshu_mark',1,false);
+ var target = result.targets[0];
+ player.logSkill('twchuanshu', target);
+ target.addMark('twchuanshu_mark', 1, false);
target.addSkill('twchuanshu_effect');
- target.markAuto('twchuanshu_effect',[player]);
+ target.markAuto('twchuanshu_effect', [player]);
player.addSkill('twchuanshu_clear');
- player.markAuto('twchuanshu_clear',[target]);
+ player.markAuto('twchuanshu_clear', [target]);
}
},
- subSkill:{
- mark:{
- charlotte:true,
+ subSkill: {
+ mark: {
+ charlotte: true,
},
- effect:{
- audio:'twchuanshu',
- trigger:{
- player:'compare',
- target:'compare',
+ effect: {
+ audio: 'twchuanshu',
+ trigger: {
+ player: 'compare',
+ target: 'compare',
},
- direct:true,
- forced:true,
- charlotte:true,
- nopop:true,
- mark:true,
- intro:{
- content:function(storage,player){
- var shisyou=player.getStorage('twchuanshu_effect').filter(i=>i.isIn());
- var str='拼点牌点数+3;'
- if(player.hasMark('twchuanshu_mark')){
- str+='使用的下一张【杀】对除'+get.translation(shisyou)+'外的角色造成伤害时,此伤害+'+player.countMark('twchuanshu_mark')+';';
- if(!shisyou.includes(player)){
- str+='使用的下一张【杀】结算结束后,'+get.translation(shisyou)+'摸等同于伤害值的牌;';
+ direct: true,
+ forced: true,
+ charlotte: true,
+ nopop: true,
+ mark: true,
+ intro: {
+ content: function (storage, player) {
+ var shisyou = player.getStorage('twchuanshu_effect').filter(i => i.isIn());
+ var str = '拼点牌点数+3;'
+ if (player.hasMark('twchuanshu_mark')) {
+ str += '使用的下一张【杀】对除' + get.translation(shisyou) + '外的角色造成伤害时,此伤害+' + player.countMark('twchuanshu_mark') + ';';
+ if (!shisyou.includes(player)) {
+ str += '使用的下一张【杀】结算结束后,' + get.translation(shisyou) + '摸等同于伤害值的牌;';
}
}
- str=str.slice(0,-1)+'。';
+ str = str.slice(0, -1) + '。';
return str;
}
},
- filter:function(event,player,name){
- if(event.player==player&&event.iwhile>0) return false;
- return (player==event.player?event.num1:event.num2)<13;
+ filter: function (event, player, name) {
+ if (event.player == player && event.iwhile > 0) return false;
+ return (player == event.player ? event.num1 : event.num2) < 13;
},
- content:function(){
- game.log(player,'的拼点牌点数+3');
- if(player==trigger.player) trigger.num1=Math.min(13,trigger.num1+3);
- else trigger.num2=Math.min(13,trigger.num2+3);
+ content: function () {
+ game.log(player, '的拼点牌点数+3');
+ if (player == trigger.player) trigger.num1 = Math.min(13, trigger.num1 + 3);
+ else trigger.num2 = Math.min(13, trigger.num2 + 3);
},
- group:'twchuanshu_damage',
+ group: 'twchuanshu_damage',
},
- damage:{
- charlotte:true,
- trigger:{player:['useCard','useCardAfter'],source:'damageBegin1'},
- filter:function(event,player,name){
- if(name=='useCard') return (event.card.name=='sha'&&player.hasMark('twchuanshu_mark'));
- if(name=='damageBegin1') return event.card&&event.card.twchuanshu_mark&&!player.getStorage('twchuanshu_effect').includes(event.player);
- return event.card.twchuanshu_mark&&player.hasHistory('sourceDamage',function(evt){
- return evt.card==event.card;
- })&&player.getStorage('twchuanshu_effect').filter(function(target){
- return target.isIn()&&target!=player;
+ damage: {
+ charlotte: true,
+ trigger: { player: ['useCard', 'useCardAfter'], source: 'damageBegin1' },
+ filter: function (event, player, name) {
+ if (name == 'useCard') return (event.card.name == 'sha' && player.hasMark('twchuanshu_mark'));
+ if (name == 'damageBegin1') return event.card && event.card.twchuanshu_mark && !player.getStorage('twchuanshu_effect').includes(event.player);
+ return event.card.twchuanshu_mark && player.hasHistory('sourceDamage', function (evt) {
+ return evt.card == event.card;
+ }) && player.getStorage('twchuanshu_effect').filter(function (target) {
+ return target.isIn() && target != player;
}).length;
},
- forced:true,
- content:function(){
- var name=event.triggername;
- if(name=='useCard'){
- var num=player.countMark('twchuanshu_mark');
- trigger.card.twchuanshu_mark=num;
- player.removeMark('twchuanshu_mark',num,false);
+ forced: true,
+ content: function () {
+ var name = event.triggername;
+ if (name == 'useCard') {
+ var num = player.countMark('twchuanshu_mark');
+ trigger.card.twchuanshu_mark = num;
+ player.removeMark('twchuanshu_mark', num, false);
}
- else if(name=='damageBegin1') trigger.num++;
- else{
- var num1=trigger.card.twchuanshu_mark;
- var num2=0;
- player.getHistory('sourceDamage',function(evt){
- if(evt.card==trigger.card) num2+=evt.num;
+ else if (name == 'damageBegin1') trigger.num++;
+ else {
+ var num1 = trigger.card.twchuanshu_mark;
+ var num2 = 0;
+ player.getHistory('sourceDamage', function (evt) {
+ if (evt.card == trigger.card) num2 += evt.num;
});
- var targets=player.getStorage('twchuanshu_effect').filter(function(target){
- return target.isIn()&&target!=player;
+ var targets = player.getStorage('twchuanshu_effect').filter(function (target) {
+ return target.isIn() && target != player;
});
- if(targets.length==1) targets[0].draw(num1*num2);
- else game.asyncDraw(targets,num1*num2);
+ if (targets.length == 1) targets[0].draw(num1 * num2);
+ else game.asyncDraw(targets, num1 * num2);
}
},
},
- clear:{
- charlotte:true,
- onremove:true,
- trigger:{player:'phaseBegin'},
- filter:function(event,player){
+ clear: {
+ charlotte: true,
+ onremove: true,
+ trigger: { player: 'phaseBegin' },
+ filter: function (event, player) {
return player.getStorage('twchuanshu_clear').length;
},
- forced:true,
- silent:true,
- content:function(){
+ forced: true,
+ silent: true,
+ content: function () {
'step 0'
- var targets=player.getStorage('twchuanshu_clear');
- for(var target of targets){
- target.unmarkAuto('twchuanshu_effect',[player]);
- if(!target.getStorage('twchuanshu_effect').length) target.removeSkill('twchuanshu_effect');
+ var targets = player.getStorage('twchuanshu_clear');
+ for (var target of targets) {
+ target.unmarkAuto('twchuanshu_effect', [player]);
+ if (!target.getStorage('twchuanshu_effect').length) target.removeSkill('twchuanshu_effect');
}
'step 1'
player.removeSkill('twchuanshu_clear');
@@ -9741,104 +9741,104 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//徐庶
- twjiange:{
- audio:2,
- enable:['chooseToUse','chooseToRespond'],
- filterCard:function(card,player){
- return get.type(card)!='basic';
+ twjiange: {
+ audio: 2,
+ enable: ['chooseToUse', 'chooseToRespond'],
+ filterCard: function (card, player) {
+ return get.type(card) != 'basic';
},
- usable:1,
- locked:false,
- viewAs:{name:'sha',storage:{twjiange:true}},
- viewAsFilter:function(player){
- if(!player.countCards('hes',function(card){
- return get.type(card)!='basic';
+ usable: 1,
+ locked: false,
+ viewAs: { name: 'sha', storage: { twjiange: true } },
+ viewAsFilter: function (player) {
+ if (!player.countCards('hes', function (card) {
+ return get.type(card) != 'basic';
})) return false;
},
- position:'hes',
- selectCard:function(){
- return _status.event.skill=='twjiange'?1:Infinity;
+ position: 'hes',
+ selectCard: function () {
+ return _status.event.skill == 'twjiange' ? 1 : Infinity;
},
- precontent:function(){
- if(player!=_status.currentPhase){
- player.when({player:['useCard','respond']})
- .filter(evt=>evt.skill=='twjiange')
- .then(()=>player.draw());
+ precontent: function () {
+ if (player != _status.currentPhase) {
+ player.when({ player: ['useCard', 'respond'] })
+ .filter(evt => evt.skill == 'twjiange')
+ .then(() => player.draw());
}
- event.getParent().addCount=false;
+ event.getParent().addCount = false;
},
- prompt:'将一张非基本牌当杀使用或打出',
- check:function(card){
- var val=get.value(card);
- if(_status.event.name=='chooseToRespond') return 1/Math.max(0.1,val);
- return 6-val;
+ prompt: '将一张非基本牌当杀使用或打出',
+ check: function (card) {
+ var val = get.value(card);
+ if (_status.event.name == 'chooseToRespond') return 1 / Math.max(0.1, val);
+ return 6 - val;
},
- ai:{
- order:function(item,player){
- var target=_status.currentPhase;
- if(!target||target!=player) return 7;
+ ai: {
+ order: function (item, player) {
+ var target = _status.currentPhase;
+ if (!target || target != player) return 7;
return 1;
},
- respondSha:true,
- skillTagFilter:function(player){
- if(!player.countCards('hes',function(card){
- return get.type(card)!='basic';
+ respondSha: true,
+ skillTagFilter: function (player) {
+ if (!player.countCards('hes', function (card) {
+ return get.type(card) != 'basic';
})) return false;
},
},
- mod:{
- targetInRange:function(card){
- if(card.storage&&card.storage.twjiange) return true;
+ mod: {
+ targetInRange: function (card) {
+ if (card.storage && card.storage.twjiange) return true;
},
- cardUsable:function(card,player,num){
- if(card.storage&&card.storage.twjiange) return Infinity;
+ cardUsable: function (card, player, num) {
+ if (card.storage && card.storage.twjiange) return Infinity;
},
}
},
- twxiawang:{
- audio:2,
- trigger:{global:'damageEnd'},
- filter:function(event,player){
- if(!event.source||get.distance(player,event.player)>1||!player.canUse('sha',event.source,false,false)) return false;
- return player.countCards('h')>0;
+ twxiawang: {
+ audio: 2,
+ trigger: { global: 'damageEnd' },
+ filter: function (event, player) {
+ if (!event.source || get.distance(player, event.player) > 1 || !player.canUse('sha', event.source, false, false)) return false;
+ return player.countCards('h') > 0;
},
- direct:true,
- content:function(){
- player.chooseToUse(function(card,player,event){
- if(get.name(card)!='sha') return false;
- return lib.filter.filterCard.apply(this,arguments);
- },'侠望:是否对'+get.translation(trigger.source)+'使用一张杀?').set('logSkill','twxiawang').set('complexSelect',true).set('filterTarget',function(card,player,target){
- if(target!=_status.event.sourcex&&!ui.selected.targets.includes(_status.event.sourcex)) return false;
- return lib.filter.filterTarget.apply(this,arguments);
- }).set('sourcex',trigger.source);
+ direct: true,
+ content: function () {
+ player.chooseToUse(function (card, player, event) {
+ if (get.name(card) != 'sha') return false;
+ return lib.filter.filterCard.apply(this, arguments);
+ }, '侠望:是否对' + get.translation(trigger.source) + '使用一张杀?').set('logSkill', 'twxiawang').set('complexSelect', true).set('filterTarget', function (card, player, target) {
+ if (target != _status.event.sourcex && !ui.selected.targets.includes(_status.event.sourcex)) return false;
+ return lib.filter.filterTarget.apply(this, arguments);
+ }).set('sourcex', trigger.source);
player.addTempSkill('twxiawang_damage');
},
- subSkill:{
- damage:{
- trigger:{player:'useCardAfter'},
- forced:true,
- popup:false,
- charlotte:true,
- filter:function(event,player){
- if(event.card.name!='sha') return false;
- if(event.getParent(2).name!='twxiawang') return false;
- if(!player.hasHistory('sourceDamage',evt=>evt.card==event.card)) return false;
- for(var phase of lib.phaseName){
- var evt=event.getParent(phase);
- if(evt&&evt.name==phase) return true;
+ subSkill: {
+ damage: {
+ trigger: { player: 'useCardAfter' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ filter: function (event, player) {
+ if (event.card.name != 'sha') return false;
+ if (event.getParent(2).name != 'twxiawang') return false;
+ if (!player.hasHistory('sourceDamage', evt => evt.card == event.card)) return false;
+ for (var phase of lib.phaseName) {
+ var evt = event.getParent(phase);
+ if (evt && evt.name == phase) return true;
}
return false;
},
- content:function(){
+ content: function () {
player.popup()
player.removeSkill('twjiange_damage');
- for(var phase of lib.phaseName){
- var evt=event.getParent(phase);
- if(evt&&evt.name==phase){
- var name=['准备','判定','摸牌','出牌','弃牌','结束'][lib.phaseName.indexOf(phase)];
- game.log(player,'令',_status.currentPhase,'结束了'+name+'阶段');
- player.line(_status.currentPhase,'thunder');
- evt.skipped=true;
+ for (var phase of lib.phaseName) {
+ var evt = event.getParent(phase);
+ if (evt && evt.name == phase) {
+ var name = ['准备', '判定', '摸牌', '出牌', '弃牌', '结束'][lib.phaseName.indexOf(phase)];
+ game.log(player, '令', _status.currentPhase, '结束了' + name + '阶段');
+ player.line(_status.currentPhase, 'thunder');
+ evt.skipped = true;
}
}
}
@@ -9846,517 +9846,517 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//好萌
- twgongge:{
- audio:3,
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- if(!event.isFirstTarget||!event.targets) return false;
- return get.tag(event.card,'damage');
+ twgongge: {
+ audio: 3,
+ trigger: { player: 'useCardToPlayered' },
+ filter: function (event, player) {
+ if (!event.isFirstTarget || !event.targets) return false;
+ return get.tag(event.card, 'damage');
},
- direct:true,
- usable:1,
- content:function(){
+ direct: true,
+ usable: 1,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twgongge'),function(card,player,target){
- var trigger=_status.event.getTrigger();
+ player.chooseTarget(get.prompt2('twgongge'), function (card, player, target) {
+ var trigger = _status.event.getTrigger();
return trigger.targets.includes(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- var trigger=_status.event.getTrigger();
- var att=get.attitude(player,target);
- var damageNum=trigger.getParent().baseDamage;
- var map=trigger.getParent().customArgs,id=target.playerid;
- if(map[id]){
- if(typeof map[id].baseDamage=='number') damageNum=map[id].baseDamage;
- if(typeof map[id].extraDamage=='number') damageNum+=map[id].extraDamage;
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ var trigger = _status.event.getTrigger();
+ var att = get.attitude(player, target);
+ var damageNum = trigger.getParent().baseDamage;
+ var map = trigger.getParent().customArgs, id = target.playerid;
+ if (map[id]) {
+ if (typeof map[id].baseDamage == 'number') damageNum = map[id].baseDamage;
+ if (typeof map[id].extraDamage == 'number') damageNum += map[id].extraDamage;
}
- if(target.hasSkillTag('filterDamage',null,{
- player:trigger.player,
- card:trigger.card,
- })) damageNum=1;
- var num=target.getSkills(null,false,false).filter(function(skill){
- var info=get.info(skill);
- return info&&!info.charlotte;
- }).length+1;
- var list=[0,0,0];
- var player=_status.event.player;
- list[0]=num;
- list[1]=(get.effect(target,{name:'guohe_copy2'},player,player)>0?((target.hp-damageNumget.damageEffect(target,player,player)?(Math.min(num-1,target.getDamagedHp())):(num-1))*2;
- return Math.max.apply(Math,list);
- }).set('yimie',function(trigger,player,target,damageNum){
- var hit=true;
- var att=get.attitude(player,target);
- if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false;
- if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){
- var list=[];
- for(var i of player.getCards('h')) list.push(get.suit(i));
+ if (target.hasSkillTag('filterDamage', null, {
+ player: trigger.player,
+ card: trigger.card,
+ })) damageNum = 1;
+ var num = target.getSkills(null, false, false).filter(function (skill) {
+ var info = get.info(skill);
+ return info && !info.charlotte;
+ }).length + 1;
+ var list = [0, 0, 0];
+ var player = _status.event.player;
+ list[0] = num;
+ list[1] = (get.effect(target, { name: 'guohe_copy2' }, player, player) > 0 ? ((target.hp - damageNum < player.hp) ? num : (num - Math.min(player.getCards('he'), num - 1))) : 0);
+ if (_status.event.yimie(trigger, player, target, damageNum)) list[2] = (get.recoverEffect(target, player, player) > get.damageEffect(target, player, player) ? (Math.min(num - 1, target.getDamagedHp())) : (num - 1)) * 2;
+ return Math.max.apply(Math, list);
+ }).set('yimie', function (trigger, player, target, damageNum) {
+ var hit = true;
+ var att = get.attitude(player, target);
+ if (get.type(trigger.card) == 'trick' && trigger.player.countCards('hs', { name: 'wuxie' })) hit = false;
+ if (trigger.card.name == 'huogong' && trigger.player.countCards('h', function (card) {
+ var list = [];
+ for (var i of player.getCards('h')) list.push(get.suit(i));
return !list.includes(get.suit(card));
- })) hit=false;
+ })) hit = false;
var key;
- switch (trigger.card.name){
- case 'sha':case 'wanjian':key=['shan']; break;
- case 'juedou':case 'nanman':case 'jiedao':key=['sha']; break;
- default:key=[]; break;
+ switch (trigger.card.name) {
+ case 'sha': case 'wanjian': key = ['shan']; break;
+ case 'juedou': case 'nanman': case 'jiedao': key = ['sha']; break;
+ default: key = []; break;
}
- if(get.type(trigger.card)=='trick') key.push('wuxie');
+ if (get.type(trigger.card) == 'trick') key.push('wuxie');
key.push('caochuan');
- var bool1=((get.recoverEffect(target,player,player)>0)?1:-1);
- var bool2=(((att>0&&!hit)||(target.countCards('hs',{name:key})&&!trigger.getParent().directHit.includes(target)))?1:-1);
- if(att<=0&&target.hp-damageNum>0) return false;
- return bool1=bool2&&att!=0;
+ var bool1 = ((get.recoverEffect(target, player, player) > 0) ? 1 : -1);
+ var bool2 = (((att > 0 && !hit) || (target.countCards('hs', { name: key }) && !trigger.getParent().directHit.includes(target))) ? 1 : -1);
+ if (att <= 0 && target.hp - damageNum > 0) return false;
+ return bool1 = bool2 && att != 0;
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twgongge',target);
- var num=target.getSkills(null,false,false).filter(function(skill){
- var info=get.info(skill);
- return info&&!info.charlotte;
- }).length+1;
- event.num=num;
- var list=[];
- var choiceList=[
- '摸'+get.cnNumber(num)+'张牌,若'+get.translation(target)+'响应此牌,则你跳过下个摸牌阶段',
- '弃置'+get.translation(target)+get.cnNumber(num)+'张牌,此牌结算完毕后,若'+get.translation(target)+'的体力值不小于你,你交给'+get.translation(target)+get.cnNumber(num-1)+'张牌',
- '令此牌对'+get.translation(target)+'造成的伤害+'+(num-1)+',此伤害结算完成后,其回复等量的体力值'
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twgongge', target);
+ var num = target.getSkills(null, false, false).filter(function (skill) {
+ var info = get.info(skill);
+ return info && !info.charlotte;
+ }).length + 1;
+ event.num = num;
+ var list = [];
+ var choiceList = [
+ '摸' + get.cnNumber(num) + '张牌,若' + get.translation(target) + '响应此牌,则你跳过下个摸牌阶段',
+ '弃置' + get.translation(target) + get.cnNumber(num) + '张牌,此牌结算完毕后,若' + get.translation(target) + '的体力值不小于你,你交给' + get.translation(target) + get.cnNumber(num - 1) + '张牌',
+ '令此牌对' + get.translation(target) + '造成的伤害+' + (num - 1) + ',此伤害结算完成后,其回复等量的体力值'
];
list.push('摸牌');
- if(target.countDiscardableCards(player,'he')) list.push('拆牌');
- else choiceList[1]=''+choiceList[1]+'';
+ if (target.countDiscardableCards(player, 'he')) list.push('拆牌');
+ else choiceList[1] = '' + choiceList[1] + '';
list.push('加伤');
- player.chooseControl(list).set('prompt','攻阁:请选择一项('+get.translation(target)+'对应X值:'+(num-1)+')').set('ai',()=>_status.event.choice).set('choice',function(){
- var att=get.attitude(player,target);
- var damageNum=trigger.getParent().baseDamage;
- var map=trigger.getParent().customArgs,id=target.playerid;
- if(map[id]){
- if(typeof map[id].baseDamage=='number') damageNum=map[id].baseDamage;
- if(typeof map[id].extraDamage=='number') damageNum+=map[id].extraDamage;
+ player.chooseControl(list).set('prompt', '攻阁:请选择一项(' + get.translation(target) + '对应X值:' + (num - 1) + ')').set('ai', () => _status.event.choice).set('choice', function () {
+ var att = get.attitude(player, target);
+ var damageNum = trigger.getParent().baseDamage;
+ var map = trigger.getParent().customArgs, id = target.playerid;
+ if (map[id]) {
+ if (typeof map[id].baseDamage == 'number') damageNum = map[id].baseDamage;
+ if (typeof map[id].extraDamage == 'number') damageNum += map[id].extraDamage;
}
- if(target.hasSkillTag('filterDamage',null,{
- player:trigger.player,
- card:trigger.card,
- })) damageNum=1;
- var yimie=function(){
- var hit=true;
- if(get.type(trigger.card)=='trick'&&trigger.player.countCards('hs',{name:'wuxie'})) hit=false;
- if(trigger.card.name=='huogong'&&trigger.player.countCards('h',function(card){
- var list=[];
- for(var i of player.getCards('h')) list.push(get.suit(i));
+ if (target.hasSkillTag('filterDamage', null, {
+ player: trigger.player,
+ card: trigger.card,
+ })) damageNum = 1;
+ var yimie = function () {
+ var hit = true;
+ if (get.type(trigger.card) == 'trick' && trigger.player.countCards('hs', { name: 'wuxie' })) hit = false;
+ if (trigger.card.name == 'huogong' && trigger.player.countCards('h', function (card) {
+ var list = [];
+ for (var i of player.getCards('h')) list.push(get.suit(i));
return !list.includes(get.suit(card));
- })) hit=false;
+ })) hit = false;
var key;
- switch (trigger.card.name){
- case 'sha':case 'wanjian':key=['shan']; break;
- case 'juedou':case 'nanman':case 'jiedao':key=['sha']; break;
- default:key=[]; break;
+ switch (trigger.card.name) {
+ case 'sha': case 'wanjian': key = ['shan']; break;
+ case 'juedou': case 'nanman': case 'jiedao': key = ['sha']; break;
+ default: key = []; break;
}
key.push('caochuan');
- var bool1=((get.recoverEffect(target,player,player)>0)?1:-1);
- var bool2=(((att>0&&!hit)||(target.countCards('hs',{name:key})&&!trigger.getParent().directHit.includes(target)))?1:-1);
- if(att<=0&&target.hp-damageNum>0) return false;
- return bool1=bool2&&att!=0;
+ var bool1 = ((get.recoverEffect(target, player, player) > 0) ? 1 : -1);
+ var bool2 = (((att > 0 && !hit) || (target.countCards('hs', { name: key }) && !trigger.getParent().directHit.includes(target))) ? 1 : -1);
+ if (att <= 0 && target.hp - damageNum > 0) return false;
+ return bool1 = bool2 && att != 0;
};
- if(yimie()) return '加伤';
- if(list.includes('拆牌')&&get.effect(target,{name:'guohe_copy2'},player,player)>0&&target.hp-damageNum 0 && target.hp - damageNum < player.hp) return '拆牌';
return '摸牌';
- }()).set('choiceList',choiceList);
+ }()).set('choiceList', choiceList);
}
- else{
+ else {
player.storage.counttrigger.twgongge--;
event.finish();
}
'step 2'
- game.log(player,'选择了','#y'+result.control);
- switch(result.control){
+ game.log(player, '选择了', '#y' + result.control);
+ switch (result.control) {
case '摸牌':
player.draw(num);
player.addTempSkill('twgongge_buff1');
- var evt={
- card:trigger.card,
- target:target,
+ var evt = {
+ card: trigger.card,
+ target: target,
};
- player.storage.twgongge_buff1=evt;
+ player.storage.twgongge_buff1 = evt;
break;
case '拆牌':
- player.discardPlayerCard(num,target,'he',true);
+ player.discardPlayerCard(num, target, 'he', true);
player.addTempSkill('twgongge_buff2');
- var evt={
- card:trigger.card,
- target:target,
- num:num-1,
+ var evt = {
+ card: trigger.card,
+ target: target,
+ num: num - 1,
};
- player.storage.twgongge_buff2=evt;
+ player.storage.twgongge_buff2 = evt;
break;
case '加伤':
player.addTempSkill('twgongge_buff3');
- var evt={
- card:trigger.card,
- target:target,
- num:num-1,
+ var evt = {
+ card: trigger.card,
+ target: target,
+ num: num - 1,
};
- player.storage.twgongge_buff3=evt;
+ player.storage.twgongge_buff3 = evt;
break;
}
},
- subSkill:{
+ subSkill: {
//摸牌后续
- buff1:{
- charlotte:true,
- onremove:true,
- trigger:{global:['useCard','respond']},
- filter:function(event,player){
- if(player.skipList.includes('phaseDraw')) return false;
- if(!Array.isArray(event.respondTo)||player!=event.respondTo[0]) return false;
- var evt=player.storage.twgongge_buff1;
- if(evt.target==event.player&&evt.card==event.respondTo[1]) return true;
+ buff1: {
+ charlotte: true,
+ onremove: true,
+ trigger: { global: ['useCard', 'respond'] },
+ filter: function (event, player) {
+ if (player.skipList.includes('phaseDraw')) return false;
+ if (!Array.isArray(event.respondTo) || player != event.respondTo[0]) return false;
+ var evt = player.storage.twgongge_buff1;
+ if (evt.target == event.player && evt.card == event.respondTo[1]) return true;
return false;
},
- direct:true,
- popup:false,
- content:function(){
+ direct: true,
+ popup: false,
+ content: function () {
player.skip('phaseDraw');
- game.log(player,'跳过了下个','#g摸牌阶段');
- player.addTempSkill('twgongge_buff1_mark','phaseDrawSkipped');
+ game.log(player, '跳过了下个', '#g摸牌阶段');
+ player.addTempSkill('twgongge_buff1_mark', 'phaseDrawSkipped');
},
},
//拆牌后续
- buff2:{
- charlotte:true,
- onremove:true,
- trigger:{player:'useCardAfter'},
- filter:function(event,player){
- if(!player.countCards('he')) return false;
- var evt=player.storage.twgongge_buff2;
- if(evt.card==event.card&&evt.target.isIn()&&evt.target.hp>=player.hp) return true;
+ buff2: {
+ charlotte: true,
+ onremove: true,
+ trigger: { player: 'useCardAfter' },
+ filter: function (event, player) {
+ if (!player.countCards('he')) return false;
+ var evt = player.storage.twgongge_buff2;
+ if (evt.card == event.card && evt.target.isIn() && evt.target.hp >= player.hp) return true;
return false;
},
- direct:true,
- popup:false,
- content:function(){
+ direct: true,
+ popup: false,
+ content: function () {
'step 0'
- var evt=player.storage.twgongge_buff2;
- var target=evt.target,num=evt.num;
- event.target=target;
- if(player.countCards('he')<=num) event._result={bool:true,cards:player.getCards('he')};
- else player.chooseCard('he',num,'攻阁:交给'+get.translation(target)+get.cnNumber(num)+'张牌',true);
+ var evt = player.storage.twgongge_buff2;
+ var target = evt.target, num = evt.num;
+ event.target = target;
+ if (player.countCards('he') <= num) event._result = { bool: true, cards: player.getCards('he') };
+ else player.chooseCard('he', num, '攻阁:交给' + get.translation(target) + get.cnNumber(num) + '张牌', true);
'step 1'
- if(result.bool) player.give(result.cards,target);
+ if (result.bool) player.give(result.cards, target);
},
},
//加伤后续
- buff3:{
- charlotte:true,
- onremove:true,
- trigger:{source:'damageBegin1',player:'useCardAfter'},
- filter:function(event,player){
- if(!event.card) return false;
- var evt=player.storage.twgongge_buff3;
- if(evt.card==event.card&&evt.target.isIn()&&(event.name=='useCard'||event.player==evt.target)) return true;
+ buff3: {
+ charlotte: true,
+ onremove: true,
+ trigger: { source: 'damageBegin1', player: 'useCardAfter' },
+ filter: function (event, player) {
+ if (!event.card) return false;
+ var evt = player.storage.twgongge_buff3;
+ if (evt.card == event.card && evt.target.isIn() && (event.name == 'useCard' || event.player == evt.target)) return true;
return false;
},
- direct:true,
- popup:false,
- content:function(){
- var evt=player.storage.twgongge_buff3;
- if(trigger.name=='damage') trigger.num+=evt.num;
- else if(evt.target.isIn()) evt.target.recover(evt.num);
+ direct: true,
+ popup: false,
+ content: function () {
+ var evt = player.storage.twgongge_buff3;
+ if (trigger.name == 'damage') trigger.num += evt.num;
+ else if (evt.target.isIn()) evt.target.recover(evt.num);
},
},
- buff1_mark:{
- mark:true,
- intro:{
- content:'跳过下一个摸牌阶段',
+ buff1_mark: {
+ mark: true,
+ intro: {
+ content: '跳过下一个摸牌阶段',
},
}
},
},
//魏续
- twsuizheng:{
- audio:3,
- trigger:{global:'phaseBefore',player:'enterGame'},
- filter:function(event,player){
- return game.hasPlayer(current=>current!=player)&&(event.name!='phase'||game.phaseNumber==0);
+ twsuizheng: {
+ audio: 3,
+ trigger: { global: 'phaseBefore', player: 'enterGame' },
+ filter: function (event, player) {
+ return game.hasPlayer(current => current != player) && (event.name != 'phase' || game.phaseNumber == 0);
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
'step 0'
- player.chooseTarget('请选择【随征】的目标',lib.translate.twsuizheng_info,lib.filter.notMe,true).set('ai',function(target){
- var player=_status.event.player;
- return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random());
+ player.chooseTarget('请选择【随征】的目标', lib.translate.twsuizheng_info, lib.filter.notMe, true).set('ai', function (target) {
+ var player = _status.event.player;
+ return Math.max(1 + get.attitude(player, target) * get.threaten(target), Math.random());
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
+ if (result.bool) {
+ var target = result.targets[0];
player.line(target);
- game.log(player,'选择了',target,'作为','“随征”角色');
- player.markAuto('twsuizheng',[target]);
+ game.log(player, '选择了', target, '作为', '“随征”角色');
+ player.markAuto('twsuizheng', [target]);
player.addSkill('twsuizheng_draw');
player.addSkill('twsuizheng_xianfu');
}
},
- ai:{expose:0.3},
- intro:{content:'已选择$为“随征”角色'},
- subSkill:{
- draw:{
- charlotte:true,
- audio:'twsuizheng',
- trigger:{global:'damageSource'},
- filter:function(event,player){
+ ai: { expose: 0.3 },
+ intro: { content: '已选择$为“随征”角色' },
+ subSkill: {
+ draw: {
+ charlotte: true,
+ audio: 'twsuizheng',
+ trigger: { global: 'damageSource' },
+ filter: function (event, player) {
return player.getStorage('twsuizheng').includes(event.source);
},
- forced:true,
- logTarget:'source',
- content:function(){
+ forced: true,
+ logTarget: 'source',
+ content: function () {
player.draw();
},
},
- xianfu:{
- audio:'twsuizheng',
- trigger:{global:'damageEnd'},
- filter:function(event,player){
- return player.getStorage('twsuizheng').includes(event.player)&&event.player.isIn();
+ xianfu: {
+ audio: 'twsuizheng',
+ trigger: { global: 'damageEnd' },
+ filter: function (event, player) {
+ return player.getStorage('twsuizheng').includes(event.player) && event.player.isIn();
},
- forced:true,
- charlotte:true,
- logTarget:'player',
- content:function(){
+ forced: true,
+ charlotte: true,
+ logTarget: 'player',
+ content: function () {
'step 0'
- player.chooseToDiscard(2,'随征:弃置两张基本牌','若你弃牌,你令'+get.translation(trigger.player)+'回复1点体力;或点击“取消”失去1点体力,令'+get.translation(trigger.player)+'获得一张【杀】或【决斗】',{type:'basic'}).set('ai',function(card){
- if(_status.event.refuse) return -1;
- return 6-get.value(card);
- }).set('refuse',get.attitude(player,trigger.player)<=0||get.effect(player,{name:'losehp'})>=0);
+ player.chooseToDiscard(2, '随征:弃置两张基本牌', '若你弃牌,你令' + get.translation(trigger.player) + '回复1点体力;或点击“取消”失去1点体力,令' + get.translation(trigger.player) + '获得一张【杀】或【决斗】', { type: 'basic' }).set('ai', function (card) {
+ if (_status.event.refuse) return -1;
+ return 6 - get.value(card);
+ }).set('refuse', get.attitude(player, trigger.player) <= 0 || get.effect(player, { name: 'losehp' }) >= 0);
'step 1'
- if(result.bool) trigger.player.recover();
+ if (result.bool) trigger.player.recover();
else {
player.loseHp();
- var card=get.cardPile(function(card){
- return card.name=='sha'||card.name=='juedou';
+ var card = get.cardPile(function (card) {
+ return card.name == 'sha' || card.name == 'juedou';
});
- if(card) trigger.player.gain(card,'gain2');
+ if (card) trigger.player.gain(card, 'gain2');
}
},
},
},
},
- twtuidao:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- filter:function(event,player){
- var targets=player.getStorage('twsuizheng');
- if(!targets.length) return false;
- return targets.some(target=>target.hp<=2||!target.isIn());
+ twtuidao: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ filter: function (event, player) {
+ var targets = player.getStorage('twsuizheng');
+ if (!targets.length) return false;
+ return targets.some(target => target.hp <= 2 || !target.isIn());
},
- check:function(event,player){
- var targets=player.getStorage('twsuizheng');
- var val=0;
- for(var target of targets){
- if(target.hp<=2&&target.isIn()) val-=get.attitude(player,target);
- else if(!target.isIn()) val+=6;
+ check: function (event, player) {
+ var targets = player.getStorage('twsuizheng');
+ var val = 0;
+ for (var target of targets) {
+ if (target.hp <= 2 && target.isIn()) val -= get.attitude(player, target);
+ else if (!target.isIn()) val += 6;
}
- return val>0;
+ return val > 0;
},
- limited:true,
- skillAnimation:true,
- animationColor:'thunder',
- content:function(){
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'thunder',
+ content: function () {
'step 0'
player.awakenSkill('twtuidao');
- var list1=['equip3','equip4'].map(i=>get.translation(i)),list2=['basic','trick','equip'].map(i=>get.translation(i));
- var targets=player.getStorage('twsuizheng'),str=get.translation(targets);
- if(targets.length) str='与'+str;
- player.chooseButton(2,true,[
- '颓盗:废除你'+str+'的一个坐骑栏废除并选择一个类别',
+ var list1 = ['equip3', 'equip4'].map(i => get.translation(i)), list2 = ['basic', 'trick', 'equip'].map(i => get.translation(i));
+ var targets = player.getStorage('twsuizheng'), str = get.translation(targets);
+ if (targets.length) str = '与' + str;
+ player.chooseButton(2, true, [
+ '颓盗:废除你' + str + '的一个坐骑栏废除并选择一个类别',
'坐骑栏',
- [list1,'tdnodes'],
+ [list1, 'tdnodes'],
'类别',
- [list2,'tdnodes'],
- ]).set('filterButton',function(button){
- var list=_status.event.list,link=button.link;
- if(ui.selected.buttons.length){
- if(list.includes(ui.selected.buttons[0].link)&&list.includes(link)) return false;
- if(!list.includes(ui.selected.buttons[0].link)&&!list.includes(link)) return false;
+ [list2, 'tdnodes'],
+ ]).set('filterButton', function (button) {
+ var list = _status.event.list, link = button.link;
+ if (ui.selected.buttons.length) {
+ if (list.includes(ui.selected.buttons[0].link) && list.includes(link)) return false;
+ if (!list.includes(ui.selected.buttons[0].link) && !list.includes(link)) return false;
}
return true;
- }).set('ai',function(button){
- var player=_status.event.player;
- var list=_status.event.list,link=button.link;
- if(list.includes(link)){
- if(player.hasDisabledSlot(4)) return '攻击马';
- if(player.hasDisabledSlot(3)) return '防御马';
+ }).set('ai', function (button) {
+ var player = _status.event.player;
+ var list = _status.event.list, link = button.link;
+ if (list.includes(link)) {
+ if (player.hasDisabledSlot(4)) return '攻击马';
+ if (player.hasDisabledSlot(3)) return '防御马';
return '攻击马';
}
- if(!list.includes(link)){
- var player=_status.event.player;
- var targets=player.getStorage('twsuizheng');
- for(var target of targets){
- if(target.isIn()){
- var listx=[0,0,0],list2=['basic','trick','equip'].map(i=>get.translation(i));
- for(var i of target.getCards('he')) listx[list2.indexOf(get.translation(get.type2(i)))]++;
- return list2[listx.indexOf(Math.max.apply(Math,listx))];
+ if (!list.includes(link)) {
+ var player = _status.event.player;
+ var targets = player.getStorage('twsuizheng');
+ for (var target of targets) {
+ if (target.isIn()) {
+ var listx = [0, 0, 0], list2 = ['basic', 'trick', 'equip'].map(i => get.translation(i));
+ for (var i of target.getCards('he')) listx[list2.indexOf(get.translation(get.type2(i)))]++;
+ return list2[listx.indexOf(Math.max.apply(Math, listx))];
}
}
- return 1+Math.random();
+ return 1 + Math.random();
}
- }).set('list',list1);
+ }).set('list', list1);
'step 1'
- if(result.links[0].indexOf('马')==-1) result.links.reverse();
- var subtype=result.links[0]=='防御马'?'equip3':'equip4',type={基本:'basic',锦囊:'trick',装备:'equip'}[result.links[1]];
+ if (result.links[0].indexOf('马') == -1) result.links.reverse();
+ var subtype = result.links[0] == '防御马' ? 'equip3' : 'equip4', type = { 基本: 'basic', 锦囊: 'trick', 装备: 'equip' }[result.links[1]];
player.disableEquip(subtype);
- var targets=player.getStorage('twsuizheng')
- for(var target of targets){
- if(target&&target.isIn()){
+ var targets = player.getStorage('twsuizheng')
+ for (var target of targets) {
+ if (target && target.isIn()) {
target.disableEquip(subtype);
- var cards=target.getCards('he',card=>get.type2(card)==type);
- player.gain(cards,target,'give');
- event.gainners=cards;
+ var cards = target.getCards('he', card => get.type2(card) == type);
+ player.gain(cards, target, 'give');
+ event.gainners = cards;
}
- else{
- var cards=[];
- for(var i=1; i<=2; i++){
- var card=get.cardPile2(function(card){
- return !cards.includes(card)&&get.type2(card)==type;
+ else {
+ var cards = [];
+ for (var i = 1; i <= 2; i++) {
+ var card = get.cardPile2(function (card) {
+ return !cards.includes(card) && get.type2(card) == type;
});
- if(card) cards.push(card);
+ if (card) cards.push(card);
else break;
}
- player.gain(cards,'gain2');
- event.gainners=cards;
+ player.gain(cards, 'gain2');
+ event.gainners = cards;
}
}
'step 2'
- player.chooseTarget('请重新选择【随征】目标',true,function(card,player,target){
+ player.chooseTarget('请重新选择【随征】目标', true, function (card, player, target) {
return !player.getStorage('twsuizheng').includes(target);
- }).set('ai',function(target){
- var player=_status.event.player;
- return Math.max(1+get.attitude(player,target)*get.threaten(target),Math.random());
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return Math.max(1 + get.attitude(player, target) * get.threaten(target), Math.random());
});
'step 3'
- if(result.bool){
- var target=result.targets[0];
+ if (result.bool) {
+ var target = result.targets[0];
player.line(target);
- game.log(player,'选择了',target,'作为','“随征”角色');
+ game.log(player, '选择了', target, '作为', '“随征”角色');
delete player.storage.twsuizheng
- player.markAuto('twsuizheng',[target]);
+ player.markAuto('twsuizheng', [target]);
}
},
- ai:{combo:'twsuizheng'},
+ ai: { combo: 'twsuizheng' },
},
//曹休
- twqianju:{
- audio:2,
- trigger:{source:'damageSource'},
- filter:function(event,player){
- return get.distance(player,event.player)<=1&&player.countCards('e')<5;
+ twqianju: {
+ audio: 2,
+ trigger: { source: 'damageSource' },
+ filter: function (event, player) {
+ return get.distance(player, event.player) <= 1 && player.countCards('e') < 5;
},
- forced:true,
- usable:1,
- content:function(){
- var card=get.cardPile(function(card){
- return get.type(card)=='equip'&&player.canEquip(card);
+ forced: true,
+ usable: 1,
+ content: function () {
+ var card = get.cardPile(function (card) {
+ return get.type(card) == 'equip' && player.canEquip(card);
});
- if(card){
+ if (card) {
player.$gain2(card);
game.delayx();
player.equip(card);
}
},
- mod:{
- globalFrom:function(from,to,distance){
- return distance-from.countCards('e');
+ mod: {
+ globalFrom: function (from, to, distance) {
+ return distance - from.countCards('e');
},
},
},
- twqingxi:{
- audio:'xinqingxi',
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- return event.card.name=='sha'&&player.getHistory('useCard',evt=>evt.card.name=='sha').indexOf(event.getParent())==0;
+ twqingxi: {
+ audio: 'xinqingxi',
+ trigger: { player: 'useCardToPlayered' },
+ filter: function (event, player) {
+ return event.card.name == 'sha' && player.getHistory('useCard', evt => evt.card.name == 'sha').indexOf(event.getParent()) == 0;
},
- check:function(event,player){
+ check: function (event, player) {
return true;
},
- logTarget:'target',
- content:function(){
+ logTarget: 'target',
+ content: function () {
'step 0'
- var target=trigger.target;
- event.target=target;
- if(!target.countCards('e')) event._result={index:0};
- else target.chooseControl().set('ai',function(){
- if(_status.event.goon||player.hp>2) return 0;
+ var target = trigger.target;
+ event.target = target;
+ if (!target.countCards('e')) event._result = { index: 0 };
+ else target.chooseControl().set('ai', function () {
+ if (_status.event.goon || player.hp > 2) return 0;
return 1;
- }).set('choiceList',[
- '令'+get.translation(player)+'摸'+get.cnNumber(Math.max(1,player.countCards('e')))+'张牌,且此【杀】不可被响应',
- '弃置装备区中的所有牌并弃置'+get.translation(player)+'装备区等量的牌,此【杀】造成的伤害+1'
- ]).set('goon',get.attitude(target,player)>0);
+ }).set('choiceList', [
+ '令' + get.translation(player) + '摸' + get.cnNumber(Math.max(1, player.countCards('e'))) + '张牌,且此【杀】不可被响应',
+ '弃置装备区中的所有牌并弃置' + get.translation(player) + '装备区等量的牌,此【杀】造成的伤害+1'
+ ]).set('goon', get.attitude(target, player) > 0);
'step 1'
- if(result.index==0){
- player.draw(Math.max(1,player.countCards('e')));
+ if (result.index == 0) {
+ player.draw(Math.max(1, player.countCards('e')));
trigger.getParent().directHit.add(target);
- game.log(trigger.card,'不可被',target,'响应');
+ game.log(trigger.card, '不可被', target, '响应');
event.finish();
}
- else{
- var num=target.countCards('e');
+ else {
+ var num = target.countCards('e');
target.discard(target.getCards('e'));
- target.discardPlayerCard(player,'e',num,true);
+ target.discardPlayerCard(player, 'e', num, true);
}
'step 2'
- var map=trigger.customArgs;
- var id=target.playerid;
- if(!map[id]) map[id]={};
- if(!map[id].extraDamage) map[id].extraDamage=0;
+ var map = trigger.customArgs;
+ var id = target.playerid;
+ if (!map[id]) map[id] = {};
+ if (!map[id].extraDamage) map[id].extraDamage = 0;
map[id].extraDamage++;
- game.log(trigger.card,'对',target,'造成的伤害+1');
+ game.log(trigger.card, '对', target, '造成的伤害+1');
game.delayx();
},
},
//孙翊
- twzaoli:{
- audio:'zaoli',
- trigger:{player:'phaseUseBegin'},
- init:function(player){
- if(player.isPhaseUsing()){
- var hs=player.getCards('h');
- player.getHistory('gain',function(evt){
+ twzaoli: {
+ audio: 'zaoli',
+ trigger: { player: 'phaseUseBegin' },
+ init: function (player) {
+ if (player.isPhaseUsing()) {
+ var hs = player.getCards('h');
+ player.getHistory('gain', function (evt) {
hs.removeArray(evt.cards);
});
- if(hs.length) player.addGaintag(hs,'twzaoli');
+ if (hs.length) player.addGaintag(hs, 'twzaoli');
}
},
- filter:function(event,player){
+ filter: function (event, player) {
return player.countCards('he');
},
- forced:true,
- group:'twzaoli_mark',
- content:function(){
+ forced: true,
+ group: 'twzaoli_mark',
+ content: function () {
'step 0'
- if(player.countCards('h',card=>get.type(card)!='equip')){
- player.chooseCard('h',[1,Infinity],true,'躁厉:请选择至少一张非装备手牌,你弃置这些牌和所有装备牌',(card,player)=>{
- return get.type(card)!='equip'&&lib.filter.cardDiscardable(card,player,'twzaoli');
- }).set('ai',function(card){
- if(!card.hasGaintag('twzaoli_temp')) return 5-get.value(card);
+ if (player.countCards('h', card => get.type(card) != 'equip')) {
+ player.chooseCard('h', [1, Infinity], true, '躁厉:请选择至少一张非装备手牌,你弃置这些牌和所有装备牌', (card, player) => {
+ return get.type(card) != 'equip' && lib.filter.cardDiscardable(card, player, 'twzaoli');
+ }).set('ai', function (card) {
+ if (!card.hasGaintag('twzaoli_temp')) return 5 - get.value(card);
return 1;
});
}
'step 1'
- var cards=player.getCards('he',{type:'equip'});
- var subtype=[];
- event.subtype=subtype.addArray(cards.map(card=>get.subtype(card)));
- cards.addArray(result.cards||[]);
- if(cards.length) player.discard(cards);
- event.cards=cards;
+ var cards = player.getCards('he', { type: 'equip' });
+ var subtype = [];
+ event.subtype = subtype.addArray(cards.map(card => get.subtype(card)));
+ cards.addArray(result.cards || []);
+ if (cards.length) player.discard(cards);
+ event.cards = cards;
'step 2'
player.draw(cards.length);
'step 3'
- var num=0;
- if(event.subtype.length){
- for(var i of event.subtype){
- var card=get.cardPile2(function(card){
- return get.type(card)=='equip'&&get.subtype(card)==i;
+ var num = 0;
+ if (event.subtype.length) {
+ for (var i of event.subtype) {
+ var card = get.cardPile2(function (card) {
+ return get.type(card) == 'equip' && get.subtype(card) == i;
});
- if(card){
+ if (card) {
num++;
player.$gain2(card);
game.delayx();
@@ -10364,35 +10364,35 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
}
- if(num<=2) event.finish();
+ if (num <= 2) event.finish();
'step 4'
player.loseHp();
},
- onremove:function(player){
+ onremove: function (player) {
player.removeGaintag('twzaoli');
},
- mod:{
- cardEnabled2:function(card,player){
- if(player.isPhaseUsing()&&get.itemtype(card)=='card'&&card.hasGaintag('twzaoli')) return false;
+ mod: {
+ cardEnabled2: function (card, player) {
+ if (player.isPhaseUsing() && get.itemtype(card) == 'card' && card.hasGaintag('twzaoli')) return false;
},
},
- subSkill:{
- mark:{
- trigger:{player:['phaseUseBegin','phaseUseAfter','phaseAfter']},
- filter:function(event,player){
+ subSkill: {
+ mark: {
+ trigger: { player: ['phaseUseBegin', 'phaseUseAfter', 'phaseAfter'] },
+ filter: function (event, player) {
return player.countCards('h');
},
- direct:true,
- firstDo:true,
- content:function(){
- if(event.triggername=='phaseUseBegin'){
- var hs=player.getCards('h');
- player.getHistory('gain',function(evt){
+ direct: true,
+ firstDo: true,
+ content: function () {
+ if (event.triggername == 'phaseUseBegin') {
+ var hs = player.getCards('h');
+ player.getHistory('gain', function (evt) {
hs.removeArray(evt.cards);
});
- if(hs.length) player.addGaintag(hs,'twzaoli');
+ if (hs.length) player.addGaintag(hs, 'twzaoli');
}
- else{
+ else {
player.removeGaintag('twzaoli');
}
},
@@ -10400,165 +10400,165 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//邓芝
- twjimeng:{
- audio:'jimeng',
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current.countGainableCards(player,'he')>0;
+ twjimeng: {
+ audio: 'jimeng',
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current.countGainableCards(player, 'he') > 0;
})
},
- filterTarget:function(card,player,target){
- return target!=player&&target.countGainableCards(player,'hej')>0;
+ filterTarget: function (card, player, target) {
+ return target != player && target.countGainableCards(player, 'hej') > 0;
},
- content:function(){
+ content: function () {
'step 0'
- player.gainPlayerCard(target,'hej',true);
+ player.gainPlayerCard(target, 'hej', true);
'step 1'
- var hs=player.getCards('he');
- if(hs.length){
- if(hs.length==1) event._result={bool:true,cards:hs};
- else player.chooseCard(true,'交给'+get.translation(target)+'一张牌','he',true);
+ var hs = player.getCards('he');
+ if (hs.length) {
+ if (hs.length == 1) event._result = { bool: true, cards: hs };
+ else player.chooseCard(true, '交给' + get.translation(target) + '一张牌', 'he', true);
}
else event.finish();
'step 2'
- player.give(result.cards,target);
+ player.give(result.cards, target);
'step 3'
- if(target.hp>=player.hp) player.draw();
+ if (target.hp >= player.hp) player.draw();
},
- ai:{
- order:8,
- result:{
- player:function(player,target){
- if(target.hp>=player.hp) return 1;
+ ai: {
+ order: 8,
+ result: {
+ player: function (player, target) {
+ if (target.hp >= player.hp) return 1;
return 0;
},
- target:function(player,target){
- return get.effect(target,{name:'shunshou'},player,target)/10;
+ target: function (player, target) {
+ return get.effect(target, { name: 'shunshou' }, player, target) / 10;
}
}
}
},
//杨仪
- twgongsun:{
- audio:'gongsun',
- trigger:{player:'phaseUseBegin'},
- forced:true,
- direct:true,
- filter:function(event,player){
- return game.hasPlayer(current=>player.inRange(current));
+ twgongsun: {
+ audio: 'gongsun',
+ trigger: { player: 'phaseUseBegin' },
+ forced: true,
+ direct: true,
+ filter: function (event, player) {
+ return game.hasPlayer(current => player.inRange(current));
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget('共损:请选择一名攻击范围内的角色',lib.translate.twgongsun_info,true,function(card,player,target){
- return player!=target&&player.inRange(target);
- }).set('ai',function(target){
- return -get.attitude(_status.event.player,target)*(1+target.countCards('h'));
+ player.chooseTarget('共损:请选择一名攻击范围内的角色', lib.translate.twgongsun_info, true, function (card, player, target) {
+ return player != target && player.inRange(target);
+ }).set('ai', function (target) {
+ return -get.attitude(_status.event.player, target) * (1 + target.countCards('h'));
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twgongsun',target);
- player.addTempSkill('twgongsun_shadow',{player:['phaseBegin','die']});
- player.chooseControl(lib.suit).set('prompt','共损:请选择一个花色').set('ai',function(button){
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twgongsun', target);
+ player.addTempSkill('twgongsun_shadow', { player: ['phaseBegin', 'die'] });
+ player.chooseControl(lib.suit).set('prompt', '共损:请选择一个花色').set('ai', function (button) {
return lib.suit.randomGet();
});
}
else event.finish();
'step 2'
- var suit=result.control;
- player.popup(suit+2,'soil');
- game.log(player,'选择了',suit+2);
- player.storage.twgongsun_shadow.push([target,suit]);
+ var suit = result.control;
+ player.popup(suit + 2, 'soil');
+ game.log(player, '选择了', suit + 2);
+ player.storage.twgongsun_shadow.push([target, suit]);
player.markSkill('twgongsun_shadow');
},
},
- twgongsun_shadow:{
- global:'twgongsun_shadow2',
- init:function(player,skill){
- if(!player.storage[skill]) player.storage[skill]=[];
+ twgongsun_shadow: {
+ global: 'twgongsun_shadow2',
+ init: function (player, skill) {
+ if (!player.storage[skill]) player.storage[skill] = [];
},
- marktext:'损',
- onremove:true,
- intro:{
- content:function(shadow){
- var str='';
- for(var i=0;i0) str+='
'
- str+=get.translation(shadow[i][0]);
- str+=':';
- str+=get.translation(shadow[i][1]);
+ marktext: '损',
+ onremove: true,
+ intro: {
+ content: function (shadow) {
+ var str = '';
+ for (var i = 0; i < shadow.length; i++) {
+ if (i > 0) str += '
'
+ str += get.translation(shadow[i][0]);
+ str += ':';
+ str += get.translation(shadow[i][1]);
}
return str;
},
},
- mod:{
- cardEnabled:function(card,player){
- var list=player.storage.twgongsun_shadow;
- for(var i=0;iMath.random()<=0.5?0:1);
+ ]).set('ai', () => Math.random() <= 0.5 ? 0 : 1);
'step 1'
- player.addSkill('twzhengjian_eff'+result.index);
- game.log(player,'获得了','#g【征建】','的','#y效果'+get.cnNumber(result.index+1,true));
+ player.addSkill('twzhengjian_eff' + result.index);
+ game.log(player, '获得了', '#g【征建】', '的', '#y效果' + get.cnNumber(result.index + 1, true));
game.delayx();
},
- onremove:true,
- subSkill:{
- eff0:{
- audio:'twzhengjian',
- trigger:{global:'phaseUseEnd'},
- forced:true,
- charlotte:true,
- marktext:'建',
- mark:true,
- filter:function(event,player){
- if(event.player==player||event._twzhengjian||!event.player.isIn()) return false;
- if(event.player.hasHistory('useCard',function(evt){
- return evt.getParent('phaseUse')==event&&get.type(evt.card)!='basic';
+ onremove: true,
+ subSkill: {
+ eff0: {
+ audio: 'twzhengjian',
+ trigger: { global: 'phaseUseEnd' },
+ forced: true,
+ charlotte: true,
+ marktext: '建',
+ mark: true,
+ filter: function (event, player) {
+ if (event.player == player || event._twzhengjian || !event.player.isIn()) return false;
+ if (event.player.hasHistory('useCard', function (evt) {
+ return evt.getParent('phaseUse') == event && get.type(evt.card) != 'basic';
})) return false;
- return player.storage.twzhengjian||event.player.countCards('he')>0;
+ return player.storage.twzhengjian || event.player.countCards('he') > 0;
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
- trigger._twzhengjian=true;
- var target=trigger.player;
- event.target=target;
- if(player.storage.twzhengjian){
- player.chooseBool('征建:是否对'+get.translation(target)+'造成1点伤害?').set('ai',()=>_status.event.goon).set('goon',get.damageEffect(target,player,_status.event.player)>0);
+ trigger._twzhengjian = true;
+ var target = trigger.player;
+ event.target = target;
+ if (player.storage.twzhengjian) {
+ player.chooseBool('征建:是否对' + get.translation(target) + '造成1点伤害?').set('ai', () => _status.event.goon).set('goon', get.damageEffect(target, player, _status.event.player) > 0);
}
- else{
- target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌');
+ else {
+ target.chooseCard('he', true, '交给' + get.translation(player) + '一张牌');
}
'step 1'
- if(result.bool){
- if(result.cards&&result.cards.length){
- target.give(result.cards,player).type='twzhengjian';
+ if (result.bool) {
+ if (result.cards && result.cards.length) {
+ target.give(result.cards, player).type = 'twzhengjian';
}
else target.damage();
}
- player.chooseBool('是否变更【征建】的效果?').set('ai',()=>Math.random()>0.5);
+ player.chooseBool('是否变更【征建】的效果?').set('ai', () => Math.random() > 0.5);
'step 2'
- if(result.bool){
+ if (result.bool) {
player.removeSkill('twzhengjian_eff0');
player.addSkill('twzhengjian_eff1');
- game.log(player,'将','#g【征建】','的效果变更为','#y效果二');
+ game.log(player, '将', '#g【征建】', '的效果变更为', '#y效果二');
}
},
- intro:{
- content:function(storage,player){
- if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果二。';
+ intro: {
+ content: function (storage, player) {
+ if (player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果二。';
return '其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。';
},
},
},
- eff1:{
- audio:'twzhengjian',
- trigger:{global:'phaseUseEnd'},
- forced:true,
- charlotte:true,
- marktext:'征',
- mark:true,
- filter:function(event,player){
- if(event.player==player||event._twzhengjian||!event.player.isIn()) return false;
- if(event.player.hasHistory('gain',function(evt){
- return evt.getParent('phaseUse')==event;
+ eff1: {
+ audio: 'twzhengjian',
+ trigger: { global: 'phaseUseEnd' },
+ forced: true,
+ charlotte: true,
+ marktext: '征',
+ mark: true,
+ filter: function (event, player) {
+ if (event.player == player || event._twzhengjian || !event.player.isIn()) return false;
+ if (event.player.hasHistory('gain', function (evt) {
+ return evt.getParent('phaseUse') == event;
})) return false;
- return player.storage.twzhengjian||event.player.countCards('he')>0;
+ return player.storage.twzhengjian || event.player.countCards('he') > 0;
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
- trigger._twzhengjian=true;
- var target=trigger.player;
- event.target=target;
- if(player.storage.twzhengjian){
- player.chooseBool('征建:是否对'+get.translation(target)+'造成1点伤害?').set('ai',()=>_status.event.goon).set('goon',get.damageEffect(target,player,_status.event.player)>0);
+ trigger._twzhengjian = true;
+ var target = trigger.player;
+ event.target = target;
+ if (player.storage.twzhengjian) {
+ player.chooseBool('征建:是否对' + get.translation(target) + '造成1点伤害?').set('ai', () => _status.event.goon).set('goon', get.damageEffect(target, player, _status.event.player) > 0);
}
- else{
- target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌');
+ else {
+ target.chooseCard('he', true, '交给' + get.translation(player) + '一张牌');
}
'step 1'
- if(result.bool){
- if(result.cards&&result.cards.length){
- target.give(result.cards,player).type='twzhengjian';
+ if (result.bool) {
+ if (result.cards && result.cards.length) {
+ target.give(result.cards, player).type = 'twzhengjian';
}
else target.damage();
}
- player.chooseBool('是否变更【征建】的效果?').set('ai',()=>Math.random()>0.5);
+ player.chooseBool('是否变更【征建】的效果?').set('ai', () => Math.random() > 0.5);
'step 2'
- if(result.bool){
+ if (result.bool) {
player.removeSkill('twzhengjian_eff1');
player.addSkill('twzhengjian_eff0');
- game.log(player,'将','#g【征建】','的效果变更为','#y效果一');
+ game.log(player, '将', '#g【征建】', '的效果变更为', '#y效果一');
}
},
- intro:{
- content:function(storage,player){
- if(player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果一。';
+ intro: {
+ content: function (storage, player) {
+ if (player.storage.twzhengjian) return '其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则你可对其造成1点伤害,然后你可失去此效果并获得〖征建〗的效果一。';
return '其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。';
},
},
},
},
},
- twzhongchi:{
- audio:2,
- trigger:{
- player:'gainAfter',
- global:'loseAsyncAfter',
+ twzhongchi: {
+ audio: 2,
+ trigger: {
+ player: 'gainAfter',
+ global: 'loseAsyncAfter',
},
- forced:true,
- skillAnimation:true,
- animationColor:'wood',
- filter:function(event,player){
- if(player.storage.twzhengjian||!player.hasSkill('twzhengjian',null,null,false)||!event.getg(player).length) return false;
- var num1=game.countPlayer2();
- var list=[];
- player.getAllHistory('gain',function(evt){
- if(evt.type=='twzhengjian') list.add(evt.source);
+ forced: true,
+ skillAnimation: true,
+ animationColor: 'wood',
+ filter: function (event, player) {
+ if (player.storage.twzhengjian || !player.hasSkill('twzhengjian', null, null, false) || !event.getg(player).length) return false;
+ var num1 = game.countPlayer2();
+ var list = [];
+ player.getAllHistory('gain', function (evt) {
+ if (evt.type == 'twzhengjian') list.add(evt.source);
});
- return list.length>=Math.ceil(num1/2);
+ return list.length >= Math.ceil(num1 / 2);
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twzhongchi');
'step 1'
player.recover(2);
player.addSkill('twzhongchi_effect');
- player.storage.twzhengjian=true;
+ player.storage.twzhengjian = true;
'step 2'
game.delayx();
},
- subSkill:{
- effect:{
- mark:true,
- marktext:'斥',
- intro:{content:'受到渠道为【杀】的伤害+1'},
- trigger:{player:'damageBegin1'},
- forced:true,
- filter:function(event,player){
- return event.card&&event.card.name=='sha';
+ subSkill: {
+ effect: {
+ mark: true,
+ marktext: '斥',
+ intro: { content: '受到渠道为【杀】的伤害+1' },
+ trigger: { player: 'damageBegin1' },
+ forced: true,
+ filter: function (event, player) {
+ return event.card && event.card.name == 'sha';
},
- content:function(){
+ content: function () {
trigger.num++;
},
},
},
},
//田豫
- twzhenxi:{
- audio:2,
- trigger:{player:'useCardToPlayered'},
- direct:true,
- filter:function(event,player){
- var target=event.target;
- return event.card.name=='sha'&&(target.countCards('h')>0||target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canEquip(card);
+ twzhenxi: {
+ audio: 2,
+ trigger: { player: 'useCardToPlayered' },
+ direct: true,
+ filter: function (event, player) {
+ var target = event.target;
+ return event.card.name == 'sha' && (target.countCards('h') > 0 || target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canEquip(card);
})
- },'e')||target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canAddJudge(card);
+ }, 'e') || target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canAddJudge(card);
})
- },'j'));
+ }, 'j'));
},
- usable:1,
- content:function(){
+ usable: 1,
+ content: function () {
'step 0'
- var target=trigger.target;
- event.target=target;
- var str=get.translation(target);
- var list=[
- '弃置'+str+'的'+get.cnNumber(get.distance(player,target))+'张手牌',
- '将'+str+'装备区或判定区内的一张牌移动到另一名角色的对应区域内',
+ var target = trigger.target;
+ event.target = target;
+ var str = get.translation(target);
+ var list = [
+ '弃置' + str + '的' + get.cnNumber(get.distance(player, target)) + '张手牌',
+ '将' + str + '装备区或判定区内的一张牌移动到另一名角色的对应区域内',
];
- var choices=[];
- if(target.countCards('h')>0) choices.push('选项一');
- else list[0]=''+list[0]+'';
- if(target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canEquip(card);
+ var choices = [];
+ if (target.countCards('h') > 0) choices.push('选项一');
+ else list[0] = '' + list[0] + '';
+ if (target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canEquip(card);
})
- },'e')||target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canAddJudge(card);
+ }, 'e') || target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canAddJudge(card);
})
- },'j')) choices.push('选项二');
- else list[1]=''+list[1]+'';
- if(choices.length==2&&(target.hp>player.hp||target.isMaxHp())) choices.push('全部执行');
+ }, 'j')) choices.push('选项二');
+ else list[1] = '' + list[1] + '';
+ if (choices.length == 2 && (target.hp > player.hp || target.isMaxHp())) choices.push('全部执行');
choices.push('cancel2');
- player.chooseControl(choices).set('choiceList',list).set('prompt',get.prompt('twzhenxi',target)).set('ai',function(){
- var player=_status.event.player,target=_status.event.getTrigger().target;
- var eff1=0,eff2=0;
- var choices=_status.event.controls.slice(0);
- if(choices.includes('选项一')){
- eff1=-get.distance(player,target)*get.attitude(player,target);
+ player.chooseControl(choices).set('choiceList', list).set('prompt', get.prompt('twzhenxi', target)).set('ai', function () {
+ var player = _status.event.player, target = _status.event.getTrigger().target;
+ var eff1 = 0, eff2 = 0;
+ var choices = _status.event.controls.slice(0);
+ if (choices.includes('选项一')) {
+ eff1 = -get.distance(player, target) * get.attitude(player, target);
}
- if(choices.includes('选项二')){
- var equip=0,judge=0,att=get.attitude(player,target);
- var es=target.getCards('e'),js=target.getCards('j');
- for(var i of es){
- var val=get.value(i);
- if(att>0){
- if(val<=Math.min(0,equip)&&game.hasPlayer(function(current){
- return current!=target&¤t.canEquip(i)&&get.effect(current,i,player,player)>0;
- })) equip=val;
+ if (choices.includes('选项二')) {
+ var equip = 0, judge = 0, att = get.attitude(player, target);
+ var es = target.getCards('e'), js = target.getCards('j');
+ for (var i of es) {
+ var val = get.value(i);
+ if (att > 0) {
+ if (val <= Math.min(0, equip) && game.hasPlayer(function (current) {
+ return current != target && current.canEquip(i) && get.effect(current, i, player, player) > 0;
+ })) equip = val;
}
- else{
- if(val>Math.max(0,equip)&&game.hasPlayer(function(current){
- return current!=target&¤t.canEquip(i)&&get.effect(current,i,player,player)>0;
- })) equip=val;
+ else {
+ if (val > Math.max(0, equip) && game.hasPlayer(function (current) {
+ return current != target && current.canEquip(i) && get.effect(current, i, player, player) > 0;
+ })) equip = val;
}
}
- for(var i of js){
- var card={name:i.viewAs||i.name};
- var effect=get.effect(target,card,player,player);
- if(effect<0){
- game.countPlayer(function(current){
- if(current!=target&¤t.canAddJudge(i)){
- var eff=get.effect(current,card,player,player);
- judge=Math.max(eff,judge);
+ for (var i of js) {
+ var card = { name: i.viewAs || i.name };
+ var effect = get.effect(target, card, player, player);
+ if (effect < 0) {
+ game.countPlayer(function (current) {
+ if (current != target && current.canAddJudge(i)) {
+ var eff = get.effect(current, card, player, player);
+ judge = Math.max(eff, judge);
}
});
}
}
- eff2=Math.max(-equip*att,judge);
+ eff2 = Math.max(-equip * att, judge);
}
- if(eff1>0){
- if(eff2>0){
- if(choices.includes('全部执行')) return '全部执行';
- else if(eff2>=eff1) return '选项二';
+ if (eff1 > 0) {
+ if (eff2 > 0) {
+ if (choices.includes('全部执行')) return '全部执行';
+ else if (eff2 >= eff1) return '选项二';
}
return '选项一';
}
- else if(eff2>0) return '选项二';
+ else if (eff2 > 0) return '选项二';
return 'cancel2';
});
'step 1'
- if(result.control=='cancel2'){
+ if (result.control == 'cancel2') {
event.finish();
return;
}
- player.logSkill('twzhenxi',target);
- event.control=result.control;
- if(event.control!='选项二') player.discardPlayerCard(target,true,'h',get.distance(player,target));
- if(event.control=='选项一') event.finish();
+ player.logSkill('twzhenxi', target);
+ event.control = result.control;
+ if (event.control != '选项二') player.discardPlayerCard(target, true, 'h', get.distance(player, target));
+ if (event.control == '选项一') event.finish();
'step 2'
- if(event.control!='选项一'&&(target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canEquip(card);
+ if (event.control != '选项一' && (target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canEquip(card);
})
- },'e')||target.hasCard(function(card){
- return game.hasPlayer(function(current){
- return current!=target&¤t.canAddJudge(card);
+ }, 'e') || target.hasCard(function (card) {
+ return game.hasPlayer(function (current) {
+ return current != target && current.canAddJudge(card);
})
- },'j'))){
- player.chooseTarget(true,'将'+get.translation(target)+'区域内的一张牌移动给另一名角色',function(card,player,target){
- var source=_status.event.preTarget;
- if(source==target) return false;
- return source.hasCard(function(card){
+ }, 'j'))) {
+ player.chooseTarget(true, '将' + get.translation(target) + '区域内的一张牌移动给另一名角色', function (card, player, target) {
+ var source = _status.event.preTarget;
+ if (source == target) return false;
+ return source.hasCard(function (card) {
return target.canEquip(card);
- },'e')||source.hasCard(function(card){
+ }, 'e') || source.hasCard(function (card) {
return target.canAddJudge(card);
- },'j');
- }).set('preTarget',target).set('ai',function(target){
- var player=_status.event.player,source=_status.event.preTarget;
- var att=get.attitude(player,source);
- var es=source.getCards('e',function(card){
+ }, 'j');
+ }).set('preTarget', target).set('ai', function (target) {
+ var player = _status.event.player, source = _status.event.preTarget;
+ var att = get.attitude(player, source);
+ var es = source.getCards('e', function (card) {
return target.canEquip(card);
- }),js=source.getCards('j',function(card){
+ }), js = source.getCards('j', function (card) {
return target.canAddJudge(card);
});
- var eff=0;
- for(var i of es){
- var val=get.value(i,source);
- if(att>0?val<=0:val>0){
- eff=Math.max(eff,get.effect(target,i,player,player));
+ var eff = 0;
+ for (var i of es) {
+ var val = get.value(i, source);
+ if (att > 0 ? val <= 0 : val > 0) {
+ eff = Math.max(eff, get.effect(target, i, player, player));
}
}
- for(var i of js){
- var card={name:i.viewAs||i.name};
- if(get.effect(source,card,player,player)<0){
- eff=Math.max(eff,get.effect(target,card,player,player));
+ for (var i of js) {
+ var card = { name: i.viewAs || i.name };
+ if (get.effect(source, card, player, player) < 0) {
+ eff = Math.max(eff, get.effect(target, card, player, player));
}
}
return eff;
@@ -10875,188 +10875,188 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event.finish();
'step 3'
- if(result.bool){
- var target2=result.targets[0];
- event.target2=target2;
- player.choosePlayerCard('ej',true,function(button){
- var player=_status.event.player;
- var targets0=_status.event.targets0;
- var targets1=_status.event.targets1;
- if(get.attitude(player,targets0)>0&&get.attitude(player,targets1)<0){
- if(get.position(button.link)=='j') return 12;
- if(get.value(button.link,targets0)<0&&get.effect(targets1,button.link,player,targets1)>0) return 10;
+ if (result.bool) {
+ var target2 = result.targets[0];
+ event.target2 = target2;
+ player.choosePlayerCard('ej', true, function (button) {
+ var player = _status.event.player;
+ var targets0 = _status.event.targets0;
+ var targets1 = _status.event.targets1;
+ if (get.attitude(player, targets0) > 0 && get.attitude(player, targets1) < 0) {
+ if (get.position(button.link) == 'j') return 12;
+ if (get.value(button.link, targets0) < 0 && get.effect(targets1, button.link, player, targets1) > 0) return 10;
return 0;
}
- else{
- if(get.position(button.link)=='j') return -10;
- return get.value(button.link)*get.effect(targets1,button.link,player,targets1);
+ else {
+ if (get.position(button.link) == 'j') return -10;
+ return get.value(button.link) * get.effect(targets1, button.link, player, targets1);
}
- },target).set('targets0',target).set('targets1',target2).set('filterButton',function(button){
- var targets1=_status.event.targets1;
- if(get.position(button.link)=='j'){
+ }, target).set('targets0', target).set('targets1', target2).set('filterButton', function (button) {
+ var targets1 = _status.event.targets1;
+ if (get.position(button.link) == 'j') {
return targets1.canAddJudge(button.link);
}
- else{
+ else {
return targets1.canEquip(button.link);
}
- }).set('ai',function(button){
- var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets0;
- var att=get.attitude(player,source);
- var card=button.link;
- if(get.position(card)=='e'){
- var val=get.value(card);
- if(att>0?val>0:val<=0) return 0;
- return get.effect(target,card,player,player);
+ }).set('ai', function (button) {
+ var player = _status.event.player, target = _status.event.targets1, source = _status.event.targets0;
+ var att = get.attitude(player, source);
+ var card = button.link;
+ if (get.position(card) == 'e') {
+ var val = get.value(card);
+ if (att > 0 ? val > 0 : val <= 0) return 0;
+ return get.effect(target, card, player, player);
}
- var cardx={name:card.viewAs||card.name};
- if(get.effect(source,cardx,player,player)>=0) return 0;
- return get.effect(target,cardx,player,player)
+ var cardx = { name: card.viewAs || card.name };
+ if (get.effect(source, cardx, player, player) >= 0) return 0;
+ return get.effect(target, cardx, player, player)
});
}
- else{
+ else {
event.finish();
}
'step 4'
- if(result.bool&&result.links.length){
- var link=result.links[0];
- if(get.position(link)=='e'){
+ if (result.bool && result.links.length) {
+ var link = result.links[0];
+ if (get.position(link) == 'e') {
event.target2.equip(link);
}
- else if(link.viewAs){
- event.target2.addJudge({name:link.viewAs},[link]);
+ else if (link.viewAs) {
+ event.target2.addJudge({ name: link.viewAs }, [link]);
}
- else{
+ else {
event.target2.addJudge(link);
}
- target.$give(link,event.target2,false);
- game.log(target,'的',link,'被移动给了',event.target2);
+ target.$give(link, event.target2, false);
+ game.log(target, '的', link, '被移动给了', event.target2);
game.delay();
}
},
- ai:{
- unequip_ai:true,
- skillTagFilter:function(player,tag,arg){
- if(!arg||!arg.name||arg.name!='sha') return false;
- if(player.storage.counttrigger&&player.storage.counttrigger.twzhenxi) return false;
- if(!arg.target) return false;
- var card=arg.target.getEquip(2);
- return card&&get.value(card)>0&&game.hasPlayer(function(current){
- return current!=arg.target&¤t.canEquip(card)&&get.effect(current,card,player,player)>0;
+ ai: {
+ unequip_ai: true,
+ skillTagFilter: function (player, tag, arg) {
+ if (!arg || !arg.name || arg.name != 'sha') return false;
+ if (player.storage.counttrigger && player.storage.counttrigger.twzhenxi) return false;
+ if (!arg.target) return false;
+ var card = arg.target.getEquip(2);
+ return card && get.value(card) > 0 && game.hasPlayer(function (current) {
+ return current != arg.target && current.canEquip(card) && get.effect(current, card, player, player) > 0;
})
},
},
},
- twyangshi:{
- audio:2,
- trigger:{player:'damageEnd'},
- forced:true,
- content:function(){
- if(game.hasPlayer(function(current){
- return current!=player&&!player.inRange(current);
- })){
+ twyangshi: {
+ audio: 2,
+ trigger: { player: 'damageEnd' },
+ forced: true,
+ content: function () {
+ if (game.hasPlayer(function (current) {
+ return current != player && !player.inRange(current);
+ })) {
player.addSkill('twyangshi_distance');
- player.addMark('twyangshi_distance',1,false);
+ player.addMark('twyangshi_distance', 1, false);
}
- else{
- var card=get.cardPile2(function(card){
- return card.name=='sha';
+ else {
+ var card = get.cardPile2(function (card) {
+ return card.name == 'sha';
});
- if(card) player.gain(card,'gain2');
+ if (card) player.gain(card, 'gain2');
else game.log('但是牌堆里已经没有杀了!');
}
},
- subSkill:{
- distance:{
- charlotte:true,
- onremove:true,
- mod:{
- attackRange:function(player,num){
- return num+player.countMark('twyangshi_distance');
+ subSkill: {
+ distance: {
+ charlotte: true,
+ onremove: true,
+ mod: {
+ attackRange: function (player, num) {
+ return num + player.countMark('twyangshi_distance');
},
},
- intro:{
- content:'攻击范围+#',
+ intro: {
+ content: '攻击范围+#',
},
},
},
},
//全琮
- zhenshan:{
- audio:2,
- enable:['chooseToUse','chooseToRespond'],
- filter:function(event,player){
- if(event.type=='wuxie'||player.hasSkill('zhenshan_used')) return false;
- var nh=player.countCards('h');
- if(!game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h')0;
- })){
- if(card.name=='sha'){
- var eff=player.getUseValue(card);
- if(eff>0) return 2.9+eff/10;
+ check: function (button) {
+ var player = _status.event.player;
+ var card = { name: button.link[2], nature: button.link[3] };
+ if (card.name == 'jiu') return 0;
+ if (game.hasPlayer(function (current) {
+ return get.effect(current, card, player, player) > 0;
+ })) {
+ if (card.name == 'sha') {
+ var eff = player.getUseValue(card);
+ if (eff > 0) return 2.9 + eff / 10;
return 0;
}
- else if(card.name=='tao'||card.name=='shan'){
+ else if (card.name == 'tao' || card.name == 'shan') {
return 4;
}
}
return 0;
},
- backup:function(links,player){
+ backup: function (links, player) {
return {
- filterCard:function(){return false},
- viewAs:{
- name:links[0][2],
- nature:links[0][3],
- isCard:true,
+ filterCard: function () { return false },
+ viewAs: {
+ name: links[0][2],
+ nature: links[0][3],
+ isCard: true,
},
- selectCard:-1,
- precontent:function(){
+ selectCard: -1,
+ precontent: function () {
'step 0'
- player.chooseTarget('选择一名手牌数小于你的角色交换手牌',function(card,player,target){
- return target!=player&&target.countCards('h')0&¤t.countCards('h') 0 && current.countCards('h') < nh;
+ })) {
+ if (event.type == 'dying') {
+ if (event.filterCard({ name: 'tao' }, player, event)) {
return 0.5;
}
}
- else{
- if(event.filterCard({name:'tao'},player,event)||event.filterCard({name:'shan'},player,event)){
+ else {
+ if (event.filterCard({ name: 'tao' }, player, event) || event.filterCard({ name: 'shan' }, player, event)) {
return 4;
}
- if(event.filterCard({name:'sha'},player,event)){
+ if (event.filterCard({ name: 'sha' }, player, event)) {
return 2.9;
}
}
}
return 0;
},
- save:true,
- respondSha:true,
- respondShan:true,
- skillTagFilter:function(player,tag,arg){
- if(player.hasSkill('zhenshan_used')) return false;
- var nh=player.countCards('h');
- return game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h')0&&(event.card.name=='sha'||get.type(event.card,false)=='trick'&&get.tag(event.card,'damage')>0);
+ twfenghan: {
+ audio: 2,
+ trigger: { player: 'useCardToPlayered' },
+ direct: true,
+ usable: 1,
+ filter: function (event, player) {
+ return event.isFirstTarget && event.targets.length > 0 && (event.card.name == 'sha' || get.type(event.card, false) == 'trick' && get.tag(event.card, 'damage') > 0);
},
- content:function(){
+ content: function () {
'step 0'
- var num=trigger.targets.length;
- player.chooseTarget([1,num],get.prompt('twfenghan'),'令至多'+get.cnNumber(num)+'名角色各摸一张牌').set('ai',function(target){
- return Math.sqrt(5-Math.min(4,target.countCards('h')))*get.attitude(_status.event.player,target)*(target.hasSkillTag('nogain')?0.1:1);
+ var num = trigger.targets.length;
+ player.chooseTarget([1, num], get.prompt('twfenghan'), '令至多' + get.cnNumber(num) + '名角色各摸一张牌').set('ai', function (target) {
+ return Math.sqrt(5 - Math.min(4, target.countCards('h'))) * get.attitude(_status.event.player, target) * (target.hasSkillTag('nogain') ? 0.1 : 1);
});
'step 1'
- if(result.bool){
- var targets=result.targets.sortBySeat();
- player.logSkill('twfenghan',targets);
- if(targets.length>1) game.asyncDraw(targets);
- else{
+ if (result.bool) {
+ var targets = result.targets.sortBySeat();
+ player.logSkill('twfenghan', targets);
+ if (targets.length > 1) game.asyncDraw(targets);
+ else {
targets[0].draw();
event.finish();
}
}
- else{
+ else {
player.storage.counttrigger.twfenghan--;
event.finish();
}
@@ -11153,728 +11153,728 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
},
},
- twcongji:{
- audio:2,
- trigger:{
- player:'loseAfter',
- global:'loseAsyncAfter',
+ twcongji: {
+ audio: 2,
+ trigger: {
+ player: 'loseAfter',
+ global: 'loseAsyncAfter',
},
- direct:true,
- filter:function(event,player){
- if(player==_status.currentPhase||event.type!='discard'||event.getlx===false||!game.hasPlayer((current)=>current!=player)) return false;
- var evt=event.getl(player);
- for(var i of evt.cards2){
- if(get.color(i,player)=='red'&&get.position(i,true)=='d') return true;
+ direct: true,
+ filter: function (event, player) {
+ if (player == _status.currentPhase || event.type != 'discard' || event.getlx === false || !game.hasPlayer((current) => current != player)) return false;
+ var evt = event.getl(player);
+ for (var i of evt.cards2) {
+ if (get.color(i, player) == 'red' && get.position(i, true) == 'd') return true;
}
return false;
},
- content:function(){
+ content: function () {
'step 0'
- var cards=[],cards2=trigger.getl(player).cards2;
- for(var i of cards2){
- if(get.color(i,player)=='red'&&get.position(i,true)=='d') cards.push(i);
+ var cards = [], cards2 = trigger.getl(player).cards2;
+ for (var i of cards2) {
+ if (get.color(i, player) == 'red' && get.position(i, true) == 'd') cards.push(i);
}
- player.chooseButton(['从击:选择任意张牌交给其他角色',cards],[1,cards.length]).set('goon',game.hasPlayer(function(current){
- return current!=player&&get.attitude(player,current)>0;
- })).set('ai',function(button){
- if(_status.event.goon) return get.value(button.link);
- return button.link.name=='du'?1:0;
+ player.chooseButton(['从击:选择任意张牌交给其他角色', cards], [1, cards.length]).set('goon', game.hasPlayer(function (current) {
+ return current != player && get.attitude(player, current) > 0;
+ })).set('ai', function (button) {
+ if (_status.event.goon) return get.value(button.link);
+ return button.link.name == 'du' ? 1 : 0;
});
'step 1'
- if(result.bool){
- event.cards=result.links;
- player.chooseTarget('选择一名角色获得以下牌:',get.translation(cards),true,lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player,cards=_status.event.getParent().cards;
- if(cards[0].name=='du') return -get.attitude(player,target);
- var att=get.attitude(player,target);
- if(att<=0) return 0;
- if(target.hasSkillTag('nogain')) att/=10;
- if(target.hasJudge('lebu')) att/=4;
- return get.value(cards,target)*att;
+ if (result.bool) {
+ event.cards = result.links;
+ player.chooseTarget('选择一名角色获得以下牌:', get.translation(cards), true, lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player, cards = _status.event.getParent().cards;
+ if (cards[0].name == 'du') return -get.attitude(player, target);
+ var att = get.attitude(player, target);
+ if (att <= 0) return 0;
+ if (target.hasSkillTag('nogain')) att /= 10;
+ if (target.hasJudge('lebu')) att /= 4;
+ return get.value(cards, target) * att;
});
}
else event.finish();
'step 2'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twcongji',target);
- target.gain(cards,'gain2');
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twcongji', target);
+ target.gain(cards, 'gain2');
}
},
},
//王粲
- twdianyi:{
- audio:2,
- trigger:{player:'phaseEnd'},
- forced:true,
- filter:function(event,player){
- if(!player.getHistory('sourceDamage').length) return player.countCards('h')!=4;
- return player.countCards('h')>0;
+ twdianyi: {
+ audio: 2,
+ trigger: { player: 'phaseEnd' },
+ forced: true,
+ filter: function (event, player) {
+ if (!player.getHistory('sourceDamage').length) return player.countCards('h') != 4;
+ return player.countCards('h') > 0;
},
- content:function(){
- var num=player.countCards('h');
- if(player.getHistory('sourceDamage').length) player.chooseToDiscard('h',true,num);
- else if(num>4) player.chooseToDiscard('h',true,num-4);
+ content: function () {
+ var num = player.countCards('h');
+ if (player.getHistory('sourceDamage').length) player.chooseToDiscard('h', true, num);
+ else if (num > 4) player.chooseToDiscard('h', true, num - 4);
else player.drawTo(4);
},
},
- twyingji:{
- audio:2,
- enable:['chooseToUse','chooseToRespond'],
- hiddenCard:function(player,name){
- return player!=_status.currentPhase&&lib.inpile.includes(name)&&player.countCards('h')==0;
+ twyingji: {
+ audio: 2,
+ enable: ['chooseToUse', 'chooseToRespond'],
+ hiddenCard: function (player, name) {
+ return player != _status.currentPhase && lib.inpile.includes(name) && player.countCards('h') == 0;
},
- filter:function(event,player){
- if(player==_status.currentPhase||player.countCards('h')>0) return false;
- for(var i of lib.inpile){
- if(i=='wuxie') continue;
- var type=get.type(i);
- if((type=='basic'||type=='trick')&&event.filterCard({name:i},player,event)) return true;
- if(i=='sha'){
- for(var j of lib.inpile_nature){
- if(event.filterCard({name:i,nature:j},player,event)) return true;
+ filter: function (event, player) {
+ if (player == _status.currentPhase || player.countCards('h') > 0) return false;
+ for (var i of lib.inpile) {
+ if (i == 'wuxie') continue;
+ var type = get.type(i);
+ if ((type == 'basic' || type == 'trick') && event.filterCard({ name: i }, player, event)) return true;
+ if (i == 'sha') {
+ for (var j of lib.inpile_nature) {
+ if (event.filterCard({ name: i, nature: j }, player, event)) return true;
}
}
}
return false;
},
- chooseButton:{
- dialog:function(event,player){
- var list=[];
- for(var i of lib.inpile){
- if(i=='wuxie') continue;
- var type=get.type(i);
- if(type=='basic'||type=='trick'){
- var card={name:i,isCard:true};
- if(event.filterCard(card,player,event)) list.push([type,'',i]);
- if(i=='sha'){
- for(var j of lib.inpile_nature){
- card.nature=j;
- if(event.filterCard(card,player,event)) list.push(['基本','','sha',j]);
+ chooseButton: {
+ dialog: function (event, player) {
+ var list = [];
+ for (var i of lib.inpile) {
+ if (i == 'wuxie') continue;
+ var type = get.type(i);
+ if (type == 'basic' || type == 'trick') {
+ var card = { name: i, isCard: true };
+ if (event.filterCard(card, player, event)) list.push([type, '', i]);
+ if (i == 'sha') {
+ for (var j of lib.inpile_nature) {
+ card.nature = j;
+ if (event.filterCard(card, player, event)) list.push(['基本', '', 'sha', j]);
}
}
}
}
- return ui.create.dialog('应机',[list,'vcard']);
+ return ui.create.dialog('应机', [list, 'vcard']);
},
- check:function(button){
- var player=_status.event.player;
- var card={name:button.link[2],nature:button.link[3]};
- var val=_status.event.getParent().type=='phase'?player.getUseValue(card):1;
+ check: function (button) {
+ var player = _status.event.player;
+ var card = { name: button.link[2], nature: button.link[3] };
+ var val = _status.event.getParent().type == 'phase' ? player.getUseValue(card) : 1;
return val;
},
- backup:function(links,player){
+ backup: function (links, player) {
return {
- viewAs:{
- name:links[0][2],
- nature:links[0][3],
- isCard:true,
+ viewAs: {
+ name: links[0][2],
+ nature: links[0][3],
+ isCard: true,
},
- filterCard:()=>false,
- selectCard:-1,
- precontent:function(){
+ filterCard: () => false,
+ selectCard: -1,
+ precontent: function () {
player.logSkill('twyingji');
player.draw('nodelay');
delete event.result.skill;
},
}
},
- prompt:function(links){
- return '将一张手牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+'使用';
+ prompt: function (links) {
+ return '将一张手牌当做' + (get.translation(links[0][3]) || '') + get.translation(links[0][2]) + '使用';
},
},
- ai:{
- fireAttack:true,
- respondShan:true,
- respondSha:true,
- skillTagFilter:function(player){
- if(player==_status.currentPhase||player.countCards('h')>0) return false;
+ ai: {
+ fireAttack: true,
+ respondShan: true,
+ respondSha: true,
+ skillTagFilter: function (player) {
+ if (player == _status.currentPhase || player.countCards('h') > 0) return false;
},
- order:10,
- result:{
- player:function(player){
- if(_status.event.dying) return get.attitude(player,_status.event.dying)>0;
+ order: 10,
+ result: {
+ player: function (player) {
+ if (_status.event.dying) return get.attitude(player, _status.event.dying) > 0;
return 1;
},
},
},
- group:['twyingji_wuxie'],
+ group: ['twyingji_wuxie'],
},
- twyingji_wuxie:{
- enable:'chooseToUse',
- viewAs:{
- name:'wuxie',
- isCard:true,
+ twyingji_wuxie: {
+ enable: 'chooseToUse',
+ viewAs: {
+ name: 'wuxie',
+ isCard: true,
},
- viewAsFilter:function(player){
- return player!=_status.currentPhase&&player.countCards('h')==0;
+ viewAsFilter: function (player) {
+ return player != _status.currentPhase && player.countCards('h') == 0;
},
- filterCard:()=>false,
- prompt:'视为使用【无懈可击】并摸一张牌',
- selectCard:[0,1],
- check:()=>1,
- precontent:function(){
+ filterCard: () => false,
+ prompt: '视为使用【无懈可击】并摸一张牌',
+ selectCard: [0, 1],
+ check: () => 1,
+ precontent: function () {
player.logSkill('twyingji');
player.draw('nodelay');
delete event.result.skill;
},
- ai:{
- order:4,
+ ai: {
+ order: 4,
},
},
- twshanghe:{
- trigger:{player:'dying'},
- limited:true,
- audio:2,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current!=player&¤t.countCards('he')>0;
+ twshanghe: {
+ trigger: { player: 'dying' },
+ limited: true,
+ audio: 2,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current != player && current.countCards('he') > 0;
})
},
- prompt:'是否发动【觞贺】?',
- skillAnimation:true,
- animationColor:'soil',
- logTarget:(event,player)=>game.filterPlayer((current)=>current!=player),
- content:function(){
+ prompt: '是否发动【觞贺】?',
+ skillAnimation: true,
+ animationColor: 'soil',
+ logTarget: (event, player) => game.filterPlayer((current) => current != player),
+ content: function () {
"step 0"
player.awakenSkill('twshanghe');
- event.targets=game.filterPlayer((current)=>current!=player);
- event.num=0;
- event.jiu=false;
+ event.targets = game.filterPlayer((current) => current != player);
+ event.num = 0;
+ event.jiu = false;
"step 1"
- event.current=targets[num];
- if(!event.current.countCards('he')) event.goto(3);
- else event.current.chooseCard('交给'+get.translation(player)+'一张牌','he',true).set('ai',function(card){
- var evt=_status.event.getParent();
- return 100-get.value(card);
+ event.current = targets[num];
+ if (!event.current.countCards('he')) event.goto(3);
+ else event.current.chooseCard('交给' + get.translation(player) + '一张牌', 'he', true).set('ai', function (card) {
+ var evt = _status.event.getParent();
+ return 100 - get.value(card);
});
"step 2"
- if(result.bool&&result.cards&&result.cards.length){
- event.current.give(result.cards,player);
- if(!event.jiu&&get.name(result.cards[0],player)=='jiu') event.jiu=true;
+ if (result.bool && result.cards && result.cards.length) {
+ event.current.give(result.cards, player);
+ if (!event.jiu && get.name(result.cards[0], player) == 'jiu') event.jiu = true;
}
"step 3"
event.num++;
- if(event.num1) game.delayx();
- if(game.hasPlayer(function(current){
- return targets.includes(current)&¤t.hasHistory('gain',function(evt){
- return evt.getParent(2)==event&&get.type(evt.cards[0],current)!='basic';
+ if (targets.length > 1) game.delayx();
+ if (game.hasPlayer(function (current) {
+ return targets.includes(current) && current.hasHistory('gain', function (evt) {
+ return evt.getParent(2) == event && get.type(evt.cards[0], current) != 'basic';
})
})) player.draw();
},
- group:'twkaiji_count',
- subSkill:{
- count:{
- trigger:{global:'dying'},
- forced:true,
- firstDo:true,
- silent:true,
- popup:false,
- charlotte:true,
- filter:function(event,player){
+ group: 'twkaiji_count',
+ subSkill: {
+ count: {
+ trigger: { global: 'dying' },
+ forced: true,
+ firstDo: true,
+ silent: true,
+ popup: false,
+ charlotte: true,
+ filter: function (event, player) {
return !player.getStorage('twkaiji').includes(event.player);
},
- content:function(){
- player.markAuto('twkaiji',[trigger.player]);
+ content: function () {
+ player.markAuto('twkaiji', [trigger.player]);
},
},
},
},
- twshepan:{
- audio:2,
- trigger:{target:'useCardToTargeted'},
- usable:1,
- direct:true,
- filter:function(event,player){
- return player!=event.player;
+ twshepan: {
+ audio: 2,
+ trigger: { target: 'useCardToTargeted' },
+ usable: 1,
+ direct: true,
+ filter: function (event, player) {
+ return player != event.player;
},
- content:function(){
+ content: function () {
'step 0'
- var target=trigger.player;
- event.target=target;
- var choiceList=[
+ var target = trigger.player;
+ event.target = target;
+ var choiceList = [
'摸一张牌',
- '将'+get.translation(target)+'区域内的一张牌置于牌堆顶',
+ '将' + get.translation(target) + '区域内的一张牌置于牌堆顶',
];
- var choices=['选项一'];
- if(target.countCards('hej')>0) choices.push('选项二');
- else choiceList[1]=''+choiceList[1]+'';
+ var choices = ['选项一'];
+ if (target.countCards('hej') > 0) choices.push('选项二');
+ else choiceList[1] = '' + choiceList[1] + '';
choices.push('cancel2');
- player.chooseControl(choices).set('choiceList',choiceList).set('choice',function(){
- if(choices.length>2&&get.effect(target,{name:'guohe_copy'},player,player)>0) return 1;
+ player.chooseControl(choices).set('choiceList', choiceList).set('choice', function () {
+ if (choices.length > 2 && get.effect(target, { name: 'guohe_copy' }, player, player) > 0) return 1;
return 0;
}())
'step 1'
- if(result.control!='cancel2'){
- player.logSkill('twshepan',target);
- if(result.index==1) player.choosePlayerCard(target,'hej',true);
- else{
+ if (result.control != 'cancel2') {
+ player.logSkill('twshepan', target);
+ if (result.index == 1) player.choosePlayerCard(target, 'hej', true);
+ else {
player.draw();
event.goto(3);
}
}
- else{
+ else {
player.storage.counttrigger.twshepan--;
event.finish();
}
'step 2'
- var card=result.cards[0];
- target.$throw(get.position(card)=='h'?1:card,1000);
- target.lose(card,ui.cardPile,'insert');
+ var card = result.cards[0];
+ target.$throw(get.position(card) == 'h' ? 1 : card, 1000);
+ target.lose(card, ui.cardPile, 'insert');
'step 3'
game.delayx();
- if(target.isIn()&&player.countCards('h')==target.countCards('h')){
+ if (target.isIn() && player.countCards('h') == target.countCards('h')) {
player.storage.counttrigger.twshepan--;
- player.chooseBool('是否令'+get.translation(trigger.card)+'对自己无效?').set('ai',function(){
- var evt=_status.event.getTrigger();
- return get.effect(evt.target,evt.card,evt.player,evt.target)<0;
+ player.chooseBool('是否令' + get.translation(trigger.card) + '对自己无效?').set('ai', function () {
+ var evt = _status.event.getTrigger();
+ return get.effect(evt.target, evt.card, evt.player, evt.target) < 0;
});
}
else event.finish();
'step 4'
- if(result.bool) trigger.excluded.add(player);
+ if (result.bool) trigger.excluded.add(player);
},
},
//曹肇
- twfuzuan:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current.getSkills(null,false,false).filter(function(i){
- var info=get.info(i);
- return info&&info.zhuanhuanji;
- }).length>0;
+ twfuzuan: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current.getSkills(null, false, false).filter(function (i) {
+ var info = get.info(i);
+ return info && info.zhuanhuanji;
+ }).length > 0;
});
},
- filterTarget:function(card,player,target){
- return target.getSkills(null,false,false).filter(function(i){
- var info=get.info(i);
- return info&&info.zhuanhuanji;
- }).length>0;
+ filterTarget: function (card, player, target) {
+ return target.getSkills(null, false, false).filter(function (i) {
+ var info = get.info(i);
+ return info && info.zhuanhuanji;
+ }).length > 0;
},
- content:function(){
+ content: function () {
'step 0'
- var list=target.getSkills(null,false,false).filter(function(i){
- var info=get.info(i);
- return info&&info.zhuanhuanji;
+ var list = target.getSkills(null, false, false).filter(function (i) {
+ var info = get.info(i);
+ return info && info.zhuanhuanji;
});
- if(list.length==1){
- event._result={control:list[0]};
+ if (list.length == 1) {
+ event._result = { control: list[0] };
}
- else player.chooseControl(list).set('prompt','选择变更'+get.translation(target)+'一个技能的状态').set('choice',list.includes('twfeifu')?'twfeifu':0).set('ai',()=>_status.event.choice);
+ else player.chooseControl(list).set('prompt', '选择变更' + get.translation(target) + '一个技能的状态').set('choice', list.includes('twfeifu') ? 'twfeifu' : 0).set('ai', () => _status.event.choice);
'step 1'
- var skill=result.control;
+ var skill = result.control;
target.changeZhuanhuanji(skill);
- target.popup(skill,'wood');
- game.log(target,'的','#g【'+get.translation(skill)+'】','发生了状态变更');
+ target.popup(skill, 'wood');
+ game.log(target, '的', '#g【' + get.translation(skill) + '】', '发生了状态变更');
game.delayx();
},
- ai:{
- order:8,
- result:{
- target:function(player,target){
- if(!target.hasSkill('twfeifu')) return 0;
- return target.storage.twfeifu?-1:1;
+ ai: {
+ order: 8,
+ result: {
+ target: function (player, target) {
+ if (!target.hasSkill('twfeifu')) return 0;
+ return target.storage.twfeifu ? -1 : 1;
},
},
},
- group:'twfuzuan_damage',
- subSkill:{
- damage:{
- audio:'twfuzuan',
- trigger:{
- player:'damageEnd',
- source:'damageSource',
+ group: 'twfuzuan_damage',
+ subSkill: {
+ damage: {
+ audio: 'twfuzuan',
+ trigger: {
+ player: 'damageEnd',
+ source: 'damageSource',
},
- direct:true,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current.getSkills(null,false,false).filter(function(i){
- var info=get.info(i);
- return info&&info.zhuanhuanji;
- }).length>0;
+ direct: true,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current.getSkills(null, false, false).filter(function (i) {
+ var info = get.info(i);
+ return info && info.zhuanhuanji;
+ }).length > 0;
});
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget(lib.skill.twfuzuan.filterTarget,get.prompt('twfuzuan'),'变更一名角色的一个转换技的状态').set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,'twfuzuan',player,player);
+ player.chooseTarget(lib.skill.twfuzuan.filterTarget, get.prompt('twfuzuan'), '变更一名角色的一个转换技的状态').set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, 'twfuzuan', player, player);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twfuzuan',target);
- var next=game.createEvent('twfuzuan');
- next.player=player;
- next.target=target;
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twfuzuan', target);
+ var next = game.createEvent('twfuzuan');
+ next.player = player;
+ next.target = target;
next.setContent(lib.skill.twfuzuan.content);
}
},
},
},
},
- twchongqi:{
- audio:2,
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
+ twchongqi: {
+ audio: 2,
+ trigger: {
+ global: 'phaseBefore',
+ player: 'enterGame',
},
- forced:true,
- filter:function(event,player){
- return event.name!='phase'||game.phaseNumber==0;
+ forced: true,
+ filter: function (event, player) {
+ return event.name != 'phase' || game.phaseNumber == 0;
},
- logTarget:()=>game.filterPlayer().sortBySeat(),
- content:function(){
+ logTarget: () => game.filterPlayer().sortBySeat(),
+ content: function () {
'step 0'
- game.filterPlayer().sortBySeat().forEach(function(current){
+ game.filterPlayer().sortBySeat().forEach(function (current) {
current.addSkills('twfeifu');
});
//game.log(player,'令所有其他角色获得了技能','#g【非服】')
game.delayx();
'step 1'
- player.chooseTarget('是否减1点体力上限,并令一名其他角色获得技能【复纂】?',lib.filter.notMe).set('ai',function(target){
- var player=_status.event.player;
- if(player.hasUnknown()&&!target.isZhu) return 0;
- if(player.getEnemies().includes(target)) return 0;
- return get.attitude(player,target);
+ player.chooseTarget('是否减1点体力上限,并令一名其他角色获得技能【复纂】?', lib.filter.notMe).set('ai', function (target) {
+ var player = _status.event.player;
+ if (player.hasUnknown() && !target.isZhu) return 0;
+ if (player.getEnemies().includes(target)) return 0;
+ return get.attitude(player, target);
});
'step 2'
- if(result.bool){
+ if (result.bool) {
player.loseMaxHp();
- var target=result.targets[0];
- player.line(target,'fire');
+ var target = result.targets[0];
+ player.line(target, 'fire');
target.addSkills('twfuzuan');
game.delayx();
}
},
- derivation:'twfeifu',
+ derivation: 'twfeifu',
},
- twfeifu:{
- audio:2,
- trigger:{
- player:'useCardToPlayered',
- target:'useCardToTargeted',
+ twfeifu: {
+ audio: 2,
+ trigger: {
+ player: 'useCardToPlayered',
+ target: 'useCardToTargeted',
},
- zhuanhuanji:true,
- forced:true,
- mark:true,
- marktext:'☯',
- intro:{
- content:function(storage,player){
- return (storage?'当你使用【杀】指定唯一目标后':'当你成为【杀】的唯一目标后')+'目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。';
+ zhuanhuanji: true,
+ forced: true,
+ mark: true,
+ marktext: '☯',
+ intro: {
+ content: function (storage, player) {
+ return (storage ? '当你使用【杀】指定唯一目标后' : '当你成为【杀】的唯一目标后') + '目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。';
},
},
- filter:function(event,player,name){
- return event.card.name=='sha'&&event.targets.length==1
- &&event.player.isIn()&&event.target.countCards('he')>0&&
- (name=='useCardToPlayered')==Boolean(player.storage.twfeifu);
+ filter: function (event, player, name) {
+ return event.card.name == 'sha' && event.targets.length == 1
+ && event.player.isIn() && event.target.countCards('he') > 0 &&
+ (name == 'useCardToPlayered') == Boolean(player.storage.twfeifu);
},
- logTarget:function(event,player){
- return player.storage.twfeifu?event.target:event.player;
+ logTarget: function (event, player) {
+ return player.storage.twfeifu ? event.target : event.player;
},
- content:function(){
+ content: function () {
'step 0'
player.changeZhuanhuanji('twfeifu');
- trigger.target.chooseCard('he',true,'非服:交给'+get.translation(trigger.player)+'一张牌','若选择装备牌,则其可以使用此牌');
+ trigger.target.chooseCard('he', true, '非服:交给' + get.translation(trigger.player) + '一张牌', '若选择装备牌,则其可以使用此牌');
'step 1'
- if(result.bool){
- var card=result.cards[0];
- event.card=card;
- trigger.target.give(card,trigger.player);
+ if (result.bool) {
+ var card = result.cards[0];
+ event.card = card;
+ trigger.target.give(card, trigger.player);
}
else event.finish();
'step 2'
- var target=trigger.player;
- if(target.getCards('h').includes(card)&&get.type(card,target)=='equip'&&target.hasUseTarget(card)) target.chooseUseTarget(card,'nopopup');
+ var target = trigger.player;
+ if (target.getCards('h').includes(card) && get.type(card, target) == 'equip' && target.hasUseTarget(card)) target.chooseUseTarget(card, 'nopopup');
},
},
//Powered by @污言噫对
- twjingce:{
- marktext:"策",
- intro:{
- name:"策",
- content:"mark",
+ twjingce: {
+ marktext: "策",
+ intro: {
+ name: "策",
+ content: "mark",
},
- audio:2,
- trigger:{player:"useCardAfter"},
- filter:function(event,player){
- var evt=event.getParent('phaseUse');
- if(!evt||evt.player!=player) return false;
- var history=player.getHistory('useCard',function(evtx){
- return evtx.getParent('phaseUse')==evt;
+ audio: 2,
+ trigger: { player: "useCardAfter" },
+ filter: function (event, player) {
+ var evt = event.getParent('phaseUse');
+ if (!evt || evt.player != player) return false;
+ var history = player.getHistory('useCard', function (evtx) {
+ return evtx.getParent('phaseUse') == evt;
});
- return history&&history.indexOf(event)==player.hp-1;
+ return history && history.indexOf(event) == player.hp - 1;
},
- frequent:true,
- content:function(){
+ frequent: true,
+ content: function () {
'step 0'
player.draw(2);
'step 1'
- if(player.getHistory('sourceDamage').length||player.getHistory('gain',function(evt){
- return evt.getParent('phaseUse')==trigger.getParent('phaseUse')&&evt.getParent().name=='draw';
- }).length>1) player.addMark('twjingce',1);
+ if (player.getHistory('sourceDamage').length || player.getHistory('gain', function (evt) {
+ return evt.getParent('phaseUse') == trigger.getParent('phaseUse') && evt.getParent().name == 'draw';
+ }).length > 1) player.addMark('twjingce', 1);
},
},
- yuzhang:{
- audio:2,
- trigger:{
- player:"damageEnd",
+ yuzhang: {
+ audio: 2,
+ trigger: {
+ player: "damageEnd",
},
- filter:function(event,player){
- return event.source&&player.hasMark('twjingce');
+ filter: function (event, player) {
+ return event.source && player.hasMark('twjingce');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- var choiceList=['令'+get.translation(trigger.source)+'本回合不能再使用或打出牌'];
- if (trigger.source.countCards('he')) choiceList.push('令'+get.translation(trigger.source)+'弃置两张牌');
- player.chooseControl('cancel2').set('prompt2',get.prompt2('yuzhang')).set('choiceList',choiceList).set('ai',function(){
- var player=_status.event.player,source=_status.event.source;
- if(get.attitude(player,source)>=0) return 'cancel2';
- if(source.hasSkillTag('noh')||source.hasSkillTag('noe')||source.countCards('h')>=4) return 0;
- if(source.hp>1&&source.countCards('he')>1) return 1;
- return [0,1].randomGet();
- }).set('source',trigger.source);
+ var choiceList = ['令' + get.translation(trigger.source) + '本回合不能再使用或打出牌'];
+ if (trigger.source.countCards('he')) choiceList.push('令' + get.translation(trigger.source) + '弃置两张牌');
+ player.chooseControl('cancel2').set('prompt2', get.prompt2('yuzhang')).set('choiceList', choiceList).set('ai', function () {
+ var player = _status.event.player, source = _status.event.source;
+ if (get.attitude(player, source) >= 0) return 'cancel2';
+ if (source.hasSkillTag('noh') || source.hasSkillTag('noe') || source.countCards('h') >= 4) return 0;
+ if (source.hp > 1 && source.countCards('he') > 1) return 1;
+ return [0, 1].randomGet();
+ }).set('source', trigger.source);
'step 1'
- if(result.control!='cancel2'){
- player.logSkill('yuzhang',trigger.source);
- player.removeMark('twjingce',1);
- if(result.index==0) trigger.source.addTempSkill('yuzhang_dontuse');
- else trigger.source.chooseToDiscard('he',2,true);
+ if (result.control != 'cancel2') {
+ player.logSkill('yuzhang', trigger.source);
+ player.removeMark('twjingce', 1);
+ if (result.index == 0) trigger.source.addTempSkill('yuzhang_dontuse');
+ else trigger.source.chooseToDiscard('he', 2, true);
}
},
- group:"yuzhang_skip",
- subSkill:{
- skip:{
- audio:'yuzhang',
- trigger:{
- player:['phaseZhunbeiBefore',"phaseJudgeBefore","phaseDrawBefore","phaseUseBefore","phaseDiscardBefore",'phaseJieshuBefore'],
+ group: "yuzhang_skip",
+ subSkill: {
+ skip: {
+ audio: 'yuzhang',
+ trigger: {
+ player: ['phaseZhunbeiBefore', "phaseJudgeBefore", "phaseDrawBefore", "phaseUseBefore", "phaseDiscardBefore", 'phaseJieshuBefore'],
},
- filter:function(event,player){
+ filter: function (event, player) {
return player.hasMark('twjingce');
},
- prompt2:function(event,player){
- var str='弃置一枚“策”并跳过';
- var list=lib.skill.yuzhang.subSkill.skip.trigger.player.slice();
- list=list.map(i=>i.slice(0,-6));
- str+=['准备','判定','摸牌','出牌','弃牌','结束'][list.indexOf(event.name)];
- str+='阶段';
+ prompt2: function (event, player) {
+ var str = '弃置一枚“策”并跳过';
+ var list = lib.skill.yuzhang.subSkill.skip.trigger.player.slice();
+ list = list.map(i => i.slice(0, -6));
+ str += ['准备', '判定', '摸牌', '出牌', '弃牌', '结束'][list.indexOf(event.name)];
+ str += '阶段';
return str;
},
- check:function(event,player){
- if(event.name=='phaseDiscard') return player.needsToDiscard();
- if(event.name=='phaseJudge') return player.countCards('j');
+ check: function (event, player) {
+ if (event.name == 'phaseDiscard') return player.needsToDiscard();
+ if (event.name == 'phaseJudge') return player.countCards('j');
return false;
},
- content:function(){
- player.removeMark('twjingce',1);
+ content: function () {
+ player.removeMark('twjingce', 1);
trigger.cancel();
},
},
- dontuse:{
- charlotte:true,
- mark:true,
- mod:{
- cardEnabled2:function(card){
+ dontuse: {
+ charlotte: true,
+ mark: true,
+ mod: {
+ cardEnabled2: function (card) {
return false;
},
},
- intro:{
- content:"不能使用或打出牌",
+ intro: {
+ content: "不能使用或打出牌",
},
},
},
},
- twlihuo:{
- trigger:{player:'useCard1'},
- filter:function(event,player){
- if(event.card.name=='sha'&&!game.hasNature(event.card)) return true;
+ twlihuo: {
+ trigger: { player: 'useCard1' },
+ filter: function (event, player) {
+ if (event.card.name == 'sha' && !game.hasNature(event.card)) return true;
return false;
},
- audio:'lihuo',
- prompt2:function(event){
- return '将'+get.translation(event.card)+'改为火属性';
+ audio: 'lihuo',
+ prompt2: function (event) {
+ return '将' + get.translation(event.card) + '改为火属性';
},
- audioname:['re_chengpu'],
- check:function(event,player){
- return game.hasPlayer(function(current){
- return !event.targets.includes(current)&&player.canUse(event.card,current)&&get.effect(current,{name:'sha',nature:'fire',cards:event.cards.slice(0)},player,player)>0;
+ audioname: ['re_chengpu'],
+ check: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return !event.targets.includes(current) && player.canUse(event.card, current) && get.effect(current, { name: 'sha', nature: 'fire', cards: event.cards.slice(0) }, player, player) > 0;
});
},
- content:function(){
- game.setNature(trigger.card,'fire');
- trigger.card.twlihuo_buffed=true;
+ content: function () {
+ game.setNature(trigger.card, 'fire');
+ trigger.card.twlihuo_buffed = true;
},
- group:['twlihuo2','twlihuo3'],
- ai:{
- fireAttack:true,
+ group: ['twlihuo2', 'twlihuo3'],
+ ai: {
+ fireAttack: true,
},
},
- twlihuo2:{
- trigger:{player:'useCard2'},
- filter:function(event,player){
- if(event.card.name!='sha'||!game.hasNature(event.card,'fire')) return false;
- return game.hasPlayer(function(current){
- return !event.targets.includes(current)&&player.canUse(event.card,current);
+ twlihuo2: {
+ trigger: { player: 'useCard2' },
+ filter: function (event, player) {
+ if (event.card.name != 'sha' || !game.hasNature(event.card, 'fire')) return false;
+ return game.hasPlayer(function (current) {
+ return !event.targets.includes(current) && player.canUse(event.card, current);
});
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twlihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){
- return !_status.event.sourcex.includes(target)&&player.canUse(_status.event.card,target);
- }).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,_status.event.card,player,player);
+ player.chooseTarget(get.prompt('twlihuo'), '为' + get.translation(trigger.card) + '增加一个目标', function (card, player, target) {
+ return !_status.event.sourcex.includes(target) && player.canUse(_status.event.card, target);
+ }).set('sourcex', trigger.targets).set('card', trigger.card).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, _status.event.card, player, player);
});
'step 1'
- if(result.bool){
- if(!event.isMine()&&!_status.connectMode) game.delayx();
- event.target=result.targets[0];
+ if (result.bool) {
+ if (!event.isMine() && !_status.connectMode) game.delayx();
+ event.target = result.targets[0];
}
- else{
+ else {
event.finish();
}
'step 2'
- player.logSkill('twlihuo',event.target);
+ player.logSkill('twlihuo', event.target);
trigger.targets.push(event.target);
},
},
- twlihuo3:{
- trigger:{player:'useCardAfter'},
- filter:function(event,player){
- return event.card.twlihuo_buffed=true&&player.getHistory('sourceDamage',function(evt){
- return evt.card==event.card&&evt._dyinged;
- }).length>0;
+ twlihuo3: {
+ trigger: { player: 'useCardAfter' },
+ filter: function (event, player) {
+ return event.card.twlihuo_buffed = true && player.getHistory('sourceDamage', function (evt) {
+ return evt.card == event.card && evt._dyinged;
+ }).length > 0;
},
- forced:true,
- audio:'lihuo',
- audioname:['re_chengpu'],
- content:function(){
+ forced: true,
+ audio: 'lihuo',
+ audioname: ['re_chengpu'],
+ content: function () {
player.loseHp();
}
},
- twchunlao:{
- audio:'chunlao',
- trigger:{player:'phaseZhunbeiBegin'},
- direct:true,
- filter:function(event,player){
- return game.hasPlayer(function(current){
- return current.countCards('hej')>0;
- })&&!game.hasPlayer(function(current){
- return current.getExpansions('twchunlao').length>0;
+ twchunlao: {
+ audio: 'chunlao',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ direct: true,
+ filter: function (event, player) {
+ return game.hasPlayer(function (current) {
+ return current.countCards('hej') > 0;
+ }) && !game.hasPlayer(function (current) {
+ return current.getExpansions('twchunlao').length > 0;
});
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twchunlao'),'将一名角色区域内的一张牌作为“醇”置于其武将牌上',function(card,player,target){
- return target.countCards('hej')>0;
- }).set('ai',function(target){
- return (get.attitude(_status.event.player,target))*(player==target?1:2);
+ player.chooseTarget(get.prompt('twchunlao'), '将一名角色区域内的一张牌作为“醇”置于其武将牌上', function (card, player, target) {
+ return target.countCards('hej') > 0;
+ }).set('ai', function (target) {
+ return (get.attitude(_status.event.player, target)) * (player == target ? 1 : 2);
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('twchunlao',target);
- player.choosePlayerCard(target,'hej',true);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twchunlao', target);
+ player.choosePlayerCard(target, 'hej', true);
}
else event.finish();
'step 2'
- if(result.bool){
- target.addToExpansion(result.cards,target,'give').gaintag.add('twchunlao');
+ if (result.bool) {
+ target.addToExpansion(result.cards, target, 'give').gaintag.add('twchunlao');
}
},
- intro:{
- content:'expansion',
- markcount:'expansion',
+ intro: {
+ content: 'expansion',
+ markcount: 'expansion',
},
- group:['twchunlao_sha','twchunlao_dying'],
- subSkill:{
- sha:{
- trigger:{global:'useCard'},
- direct:true,
- filter:function(event,player){
- return event.card.name=='sha'&&event.player.countCards('he')>0&&event.player.getExpansions('twchunlao').length>0;
+ group: ['twchunlao_sha', 'twchunlao_dying'],
+ subSkill: {
+ sha: {
+ trigger: { global: 'useCard' },
+ direct: true,
+ filter: function (event, player) {
+ return event.card.name == 'sha' && event.player.countCards('he') > 0 && event.player.getExpansions('twchunlao').length > 0;
},
- content:function(){
+ content: function () {
'step 0'
- event.target=trigger.player;
- event.target.chooseCard('he','醇醪:是否交给'+get.translation(player)+'一张牌,令'+get.translation(trigger.card)+'的伤害值基数+1?').set('ai',function(card){
- if(!_status.event.goon) return 3.5-get.value(card);
- return 7-get.value(card);
- }).set('goon',function(){
- if(get.attitude(target,player)<0) return false;
- var d1=true;
- if(trigger.player.hasSkill('jueqing')||trigger.player.hasSkill('gangzhi')) d1=false;
- for(var target of trigger.targets){
- if(!target.mayHaveShan(player,'use',target.getCards('h',i=>{
+ event.target = trigger.player;
+ event.target.chooseCard('he', '醇醪:是否交给' + get.translation(player) + '一张牌,令' + get.translation(trigger.card) + '的伤害值基数+1?').set('ai', function (card) {
+ if (!_status.event.goon) return 3.5 - get.value(card);
+ return 7 - get.value(card);
+ }).set('goon', function () {
+ if (get.attitude(target, player) < 0) return false;
+ var d1 = true;
+ if (trigger.player.hasSkill('jueqing') || trigger.player.hasSkill('gangzhi')) d1 = false;
+ for (var target of trigger.targets) {
+ if (!target.mayHaveShan(player, 'use', target.getCards('h', i => {
return i.hasGaintag('sha_notshan');
- }))||trigger.player.hasSkillTag('directHit_ai',true,{
- target:target,
- card:trigger.card,
- },true)){
- if(!target.hasSkill('gangzhi')) d1=false;
- if(!target.hasSkillTag('filterDamage',null,{
- player:trigger.player,
- card:trigger.card,
- })&&get.attitude(player,target)<0) return true;
+ })) || trigger.player.hasSkillTag('directHit_ai', true, {
+ target: target,
+ card: trigger.card,
+ }, true)) {
+ if (!target.hasSkill('gangzhi')) d1 = false;
+ if (!target.hasSkillTag('filterDamage', null, {
+ player: trigger.player,
+ card: trigger.card,
+ }) && get.attitude(player, target) < 0) return true;
}
}
return d1;
}());
- if(!event.target.isUnderControl(true)&&!event.target.isOnline()) game.delayx();
+ if (!event.target.isUnderControl(true) && !event.target.isOnline()) game.delayx();
'step 1'
- if(result.bool){
- target.logSkill('twchunlao',player);
- if(!target.hasSkill('twchunlao')) game.trySkillAudio('twchunlao',player);
- if(player!=target) target.give(result.cards,player,'giveAuto');
+ if (result.bool) {
+ target.logSkill('twchunlao', player);
+ if (!target.hasSkill('twchunlao')) game.trySkillAudio('twchunlao', player);
+ if (player != target) target.give(result.cards, player, 'giveAuto');
trigger.baseDamage++;
}
},
},
- dying:{
- audio:'chunlao',
- trigger:{global:'dying'},
- logTarget:'player',
- filter:function(event,player){
- return event.player.getExpansions('twchunlao').length>0;
+ dying: {
+ audio: 'chunlao',
+ trigger: { global: 'dying' },
+ logTarget: 'player',
+ filter: function (event, player) {
+ return event.player.getExpansions('twchunlao').length > 0;
},
- prompt2:(event,player)=>('移去'+get.translation(event.player)+'武将牌上的“醇”并摸一张牌,然后令其回复1点体力'),
- check:function(event,player){
- return get.attitude(player,event.player)>0;
+ prompt2: (event, player) => ('移去' + get.translation(event.player) + '武将牌上的“醇”并摸一张牌,然后令其回复1点体力'),
+ check: function (event, player) {
+ return get.attitude(player, event.player) > 0;
},
- content:function(){
- var target=trigger.player,cards=target.getExpansions('twchunlao');
- if(cards.length) target.loseToDiscardpile(cards);
+ content: function () {
+ var target = trigger.player, cards = target.getExpansions('twchunlao');
+ if (cards.length) target.loseToDiscardpile(cards);
player.draw();
target.recover();
},
@@ -11882,104 +11882,104 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//张曼成
- twfengji:{
- audio:2,
- mahouSkill:true,
- trigger:{player:'phaseUseBegin'},
- filter:function(event,player){
- return !player.getExpansions('twfengji').length&&!player.hasSkill('twfengji_mahou')&&player.countCards('he');
+ twfengji: {
+ audio: 2,
+ mahouSkill: true,
+ trigger: { player: 'phaseUseBegin' },
+ filter: function (event, player) {
+ return !player.getExpansions('twfengji').length && !player.hasSkill('twfengji_mahou') && player.countCards('he');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseCard('he',get.prompt2('twfengji')).set('ai',function(card){
- var name=card.name,num=0;
- for(var i=0;i0){
+ player.addToExpansion(result.cards, player, 'giveAuto').gaintag.add('twfengji');
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
+ var player = _status.event.player;
+ var safe = Math.min(player.getHandcardLimit(), player.countCards('h', 'shan'));
+ if (safe < Math.min(3, game.countPlayer())) {
+ var next = player.next;
+ while (next != player && get.attitude(next, player) > 0) {
safe++;
- next=next.next;
+ next = next.next;
}
}
- return Math.max(2,Math.min(safe,3,game.countPlayer()))-1;
+ return Math.max(2, Math.min(safe, 3, game.countPlayer())) - 1;
});
}
else event.finish();
'step 2'
- player.storage.twfengji_mahou=[result.index+1,result.index+1];
- player.addTempSkill('twfengji_mahou',{player:'die'});
+ player.storage.twfengji_mahou = [result.index + 1, result.index + 1];
+ player.addTempSkill('twfengji_mahou', { player: 'die' });
},
- marktext:'示',
- onremove:function(player,skill){
- var cards=player.getExpansions(skill);
- if(cards.length) player.loseToDiscardpile(cards);
+ marktext: '示',
+ onremove: function (player, skill) {
+ var cards = player.getExpansions(skill);
+ if (cards.length) player.loseToDiscardpile(cards);
},
- intro:{
- content:'expansion',
- markcount:'expansion',
+ intro: {
+ content: 'expansion',
+ markcount: 'expansion',
},
- subSkill:{
- mahou:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
- var list=player.storage.twfengji_mahou;
+ subSkill: {
+ mahou: {
+ trigger: { global: 'phaseEnd' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
+ var list = player.storage.twfengji_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的“蜂集”魔法生效');
+ if (list[1] == 0) {
+ game.log(player, '的“蜂集”魔法生效');
player.logSkill('twfengji');
- var cards=player.getExpansions('twfengji');
- if(cards.length){
- var cards2=[],num=list[0];
- for(var card of cards){
- for(var i=0;i0;
+ trigger: { player: 'damageBegin3' },
+ filter: function (event, player) {
+ return player.getExpansions('twfengji').length > 0;
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
trigger.num++;
- var cards=player.getExpansions('twfengji');
- if(cards.length) player.loseToDiscardpile(cards);
+ var cards = player.getExpansions('twfengji');
+ if (cards.length) player.loseToDiscardpile(cards);
},
- ai:{
- halfneg:true,
- combo:'twfengji',
+ ai: {
+ halfneg: true,
+ combo: 'twfengji',
},
},
- twbudao:{
- audio:2,
- trigger:{player:'phaseZhunbeiBegin'},
- derivation:['twzhouhu','twharvestinori','twzuhuo','twzhouzu','twhuangjin','twguimen','twdidao'],
- limited:true,
- skillAnimation:true,
- animationColor:'metal',
- check:function(event,player){
- return !player.hasUnknown()||!player.hasFriend();
+ twbudao: {
+ audio: 2,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ derivation: ['twzhouhu', 'twharvestinori', 'twzuhuo', 'twzhouzu', 'twhuangjin', 'twguimen', 'twdidao'],
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'metal',
+ check: function (event, player) {
+ return !player.hasUnknown() || !player.hasFriend();
},
- skillValue:{
- twzhouhu:(target)=>Math.random()<0.6?0.1:1,
- twzuhuo:(target,player)=>get.damageEffect(target,player,player)>0?0.1:1,
- twharvestinori:(target)=>0.9+Math.random()/5,
- twhuangjin:(target)=>Math.random()/5,
- twguimen:(target)=>Math.sqrt(Math.min(3,target.countCards('he',{suit:'spade'})))*0.09,
- twzhouzu:(target)=>{
- var rand=Math.random();
- if(rand<0.8) return 1-Math.sqrt(0.8-rand);
+ skillValue: {
+ twzhouhu: (target) => Math.random() < 0.6 ? 0.1 : 1,
+ twzuhuo: (target, player) => get.damageEffect(target, player, player) > 0 ? 0.1 : 1,
+ twharvestinori: (target) => 0.9 + Math.random() / 5,
+ twhuangjin: (target) => Math.random() / 5,
+ twguimen: (target) => Math.sqrt(Math.min(3, target.countCards('he', { suit: 'spade' }))) * 0.09,
+ twzhouzu: (target) => {
+ var rand = Math.random();
+ if (rand < 0.8) return 1 - Math.sqrt(0.8 - rand);
return 1;
},
- twdidao:(target,player)=>{
- if([target,player].some(current=>current.getSkills().some(skill=>{
- var info=get.info(skill);
- if(!info||!info.ai||!info.ai.rejudge) return false;
+ twdidao: (target, player) => {
+ if ([target, player].some(current => current.getSkills().some(skill => {
+ var info = get.info(skill);
+ if (!info || !info.ai || !info.ai.rejudge) return false;
return true;
- }))){
+ }))) {
return 0.05;
}
- return 0.85+Math.random()/5;
+ return 0.85 + Math.random() / 5;
}
},
- content:function(){
+ content: function () {
'step 0'
player.awakenSkill('twbudao');
player.loseMaxHp();
player.recover();
- var skills=lib.skill.twbudao.derivation,map=lib.skill.twbudao.skillValue;
- skills=skills.randomGets(3);
- var target=game.filterPlayer().sort((a,b)=>get.attitude(player,b)-get.attitude(player,a))[0];
- if(player.identity=='nei'||get.attitude(player,target)<6) target=player;
- player.chooseControl(skills).set('choiceList',skills.map(function(i){
- return '【'+get.translation(lib.translate[i+'_ab']||get.translation(i).slice(0,2))+'】
'+get.skillInfoTranslation(i,player)+'
';
- })).set('displayIndex',false).set('prompt','布道:选择获得一个技能').set('ai',()=>{
+ var skills = lib.skill.twbudao.derivation, map = lib.skill.twbudao.skillValue;
+ skills = skills.randomGets(3);
+ var target = game.filterPlayer().sort((a, b) => get.attitude(player, b) - get.attitude(player, a))[0];
+ if (player.identity == 'nei' || get.attitude(player, target) < 6) target = player;
+ player.chooseControl(skills).set('choiceList', skills.map(function (i) {
+ return '【' + get.translation(lib.translate[i + '_ab'] || get.translation(i).slice(0, 2)) + '】
' + get.skillInfoTranslation(i, player) + '
';
+ })).set('displayIndex', false).set('prompt', '布道:选择获得一个技能').set('ai', () => {
return _status.event.choice;
- }).set('choice',skills.sort((a,b)=>(map[b](target,player)||0.5)-(map[a](target,player)||0.5))[0]);
+ }).set('choice', skills.sort((a, b) => (map[b](target, player) || 0.5) - (map[a](target, player) || 0.5))[0]);
'step 1'
- var skill=result.control;
+ var skill = result.control;
player.addSkills(skill);
- event.twbudao_skill=skill;
- player.chooseTarget(lib.filter.notMe,'是否令一名其他角色也获得【'+get.translation(skill)+'】?').set('ai',function(target){
- var player=_status.event.player;
- if(player.identity=='nei') return 0;
- return get.attitude(player,target);
+ event.twbudao_skill = skill;
+ player.chooseTarget(lib.filter.notMe, '是否令一名其他角色也获得【' + get.translation(skill) + '】?').set('ai', function (target) {
+ var player = _status.event.player;
+ if (player.identity == 'nei') return 0;
+ return get.attitude(player, target);
});
'step 2'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.line(target,'green');
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.line(target, 'green');
target.addSkills(event.twbudao_skill);
- var cards=target.getCards('he');
- if(!cards.length) event.finish();
- else if(cards.length==1) event._result={bool:true,cards:cards};
- else target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌作为学费');
+ var cards = target.getCards('he');
+ if (!cards.length) event.finish();
+ else if (cards.length == 1) event._result = { bool: true, cards: cards };
+ else target.chooseCard('he', true, '交给' + get.translation(player) + '一张牌作为学费');
}
else event.finish();
'step 3'
- if(result.bool) target.give(result.cards,player);
+ if (result.bool) target.give(result.cards, player);
},
},
- twzhouhu:{
- audio:2,
- mahouSkill:true,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return !player.hasSkill('twzhouhu_mahou')&&player.countCards('h',lib.skill.twzhouhu.filterCard)>0;
+ twzhouhu: {
+ audio: 2,
+ mahouSkill: true,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return !player.hasSkill('twzhouhu_mahou') && player.countCards('h', lib.skill.twzhouhu.filterCard) > 0;
},
- filterCard:{color:'red'},
- check:function(card){
- if(_status.event.player.isHealthy()) return 0;
- return 7-get.value(card);
+ filterCard: { color: 'red' },
+ check: function (card) {
+ if (_status.event.player.isHealthy()) return 0;
+ return 7 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){
- var player=_status.event.player;
- var safe=1;
- if(safe0){
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
+ var player = _status.event.player;
+ var safe = 1;
+ if (safe < Math.min(3, game.countPlayer(), player.getDamagedHp())) {
+ var next = player.next;
+ while (next != player && get.attitude(next, player) > 0) {
safe++;
- next=next.next;
+ next = next.next;
}
}
- return Math.max(1,Math.min(safe,3,game.countPlayer(),player.getDamagedHp()))-1;
+ return Math.max(1, Math.min(safe, 3, game.countPlayer(), player.getDamagedHp())) - 1;
});
'step 1'
- player.storage.twzhouhu_mahou=[result.index+1,result.index+1];
- player.addTempSkill('twzhouhu_mahou',{player:'die'});
+ player.storage.twzhouhu_mahou = [result.index + 1, result.index + 1];
+ player.addTempSkill('twzhouhu_mahou', { player: 'die' });
},
- ai:{
- order:2,
- result:{
- player:1,
+ ai: {
+ order: 2,
+ result: {
+ player: 1,
},
},
- subSkill:{
- mahou:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
- var list=player.storage.twzhouhu_mahou;
+ subSkill: {
+ mahou: {
+ trigger: { global: 'phaseEnd' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
+ var list = player.storage.twzhouhu_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的“咒护”魔法生效');
+ if (list[1] == 0) {
+ game.log(player, '的“咒护”魔法生效');
player.logSkill('twzhouhu');
- var num=list[0];
+ var num = list[0];
player.recover(num);
player.removeSkill('twzhouhu_mahou');
}
- else{
- game.log(player,'的“咒护”魔法剩余','#g'+(list[1])+'回合');
+ else {
+ game.log(player, '的“咒护”魔法剩余', '#g' + (list[1]) + '回合');
player.markSkill('twzhouhu_mahou');
}
},
- mark:true,
- onremove:true,
- marktext:'♗',
- intro:{
- name:'施法:咒护',
- markcount:function(storage){
- if(storage) return storage[1];
+ mark: true,
+ onremove: true,
+ marktext: '♗',
+ intro: {
+ name: '施法:咒护',
+ markcount: function (storage) {
+ if (storage) return storage[1];
return 0;
},
- content:function(storage){
- if(storage){
- return '经过'+storage[1]+'个“回合结束时”后,回复'+storage[0]+'点体力';
+ content: function (storage) {
+ if (storage) {
+ return '经过' + storage[1] + '个“回合结束时”后,回复' + storage[0] + '点体力';
}
return '未指定施法效果';
},
@@ -12161,75 +12161,75 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
- twharvestinori:{
- audio:2,
- mahouSkill:true,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return !player.hasSkill('twharvestinori_mahou')&&player.countCards('h',lib.skill.twharvestinori.filterCard)>0;
+ twharvestinori: {
+ audio: 2,
+ mahouSkill: true,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return !player.hasSkill('twharvestinori_mahou') && player.countCards('h', lib.skill.twharvestinori.filterCard) > 0;
},
- filterCard:{color:'black'},
- check:function(card){
- return 8-get.value(card);
+ filterCard: { color: 'black' },
+ check: function (card) {
+ return 8 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){
- var player=_status.event.player;
- var safe=player.hp;
- if(safe0){
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
+ var player = _status.event.player;
+ var safe = player.hp;
+ if (safe < Math.min(3, game.countPlayer())) {
+ var next = player.next;
+ while (next != player && get.attitude(next, player) > 0) {
safe++;
- next=next.next;
+ next = next.next;
}
}
- return Math.max(1,Math.min(safe,3,game.countPlayer()))-1;
+ return Math.max(1, Math.min(safe, 3, game.countPlayer())) - 1;
});
'step 1'
- player.storage.twharvestinori_mahou=[result.index+1,result.index+1];
- player.addTempSkill('twharvestinori_mahou',{player:'die'});
+ player.storage.twharvestinori_mahou = [result.index + 1, result.index + 1];
+ player.addTempSkill('twharvestinori_mahou', { player: 'die' });
},
- ai:{
- order:8,
- result:{
- player:1,
+ ai: {
+ order: 8,
+ result: {
+ player: 1,
},
},
- subSkill:{
- mahou:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
- var list=player.storage.twharvestinori_mahou;
+ subSkill: {
+ mahou: {
+ trigger: { global: 'phaseEnd' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
+ var list = player.storage.twharvestinori_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的“丰祈”魔法生效');
+ if (list[1] == 0) {
+ game.log(player, '的“丰祈”魔法生效');
player.logSkill('twharvestinori');
- var num=list[0]*2;
+ var num = list[0] * 2;
player.draw(num);
player.removeSkill('twharvestinori_mahou');
}
- else{
- game.log(player,'的“丰祈”魔法剩余','#g'+(list[1])+'回合');
+ else {
+ game.log(player, '的“丰祈”魔法剩余', '#g' + (list[1]) + '回合');
player.markSkill('twharvestinori_mahou');
}
},
- mark:true,
- onremove:true,
- marktext:'♗',
- intro:{
- name:'施法:丰祈',
- markcount:function(storage){
- if(storage) return storage[1];
+ mark: true,
+ onremove: true,
+ marktext: '♗',
+ intro: {
+ name: '施法:丰祈',
+ markcount: function (storage) {
+ if (storage) return storage[1];
return 0;
},
- content:function(storage){
- if(storage){
- return '经过'+storage[1]+'个“回合结束时”后,摸'+storage[0]*2+'张牌';
+ content: function (storage) {
+ if (storage) {
+ return '经过' + storage[1] + '个“回合结束时”后,摸' + storage[0] * 2 + '张牌';
}
return '未指定施法效果';
},
@@ -12237,498 +12237,498 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
- twzuhuo:{
- audio:2,
- mahouSkill:true,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return !player.hasSkill('twzuhuo_mahou')&&player.countCards('he',lib.skill.twzuhuo.filterCard)>0;
+ twzuhuo: {
+ audio: 2,
+ mahouSkill: true,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return !player.hasSkill('twzuhuo_mahou') && player.countCards('he', lib.skill.twzuhuo.filterCard) > 0;
},
- filterCard:function(card){
- return get.type(card)!='basic';
+ filterCard: function (card) {
+ return get.type(card) != 'basic';
},
- position:'he',
- check:function(card){
- return 7-get.value(card);
+ position: 'he',
+ check: function (card) {
+ return 7 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){
- var player=_status.event.player;
- var safe=Math.min(player.getHandcardLimit(),player.countCards('h','shan'));
- if(safe0){
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
+ var player = _status.event.player;
+ var safe = Math.min(player.getHandcardLimit(), player.countCards('h', 'shan'));
+ if (safe < Math.min(3, game.countPlayer())) {
+ var next = player.next;
+ while (next != player && get.attitude(next, player) > 0) {
safe++;
- next=next.next;
+ next = next.next;
}
}
- return Math.max(2,Math.min(safe,3,game.countPlayer()))-1;
+ return Math.max(2, Math.min(safe, 3, game.countPlayer())) - 1;
});
'step 1'
- player.storage.twzuhuo_mahou=[result.index+1,result.index+1];
- player.addTempSkill('twzuhuo_mahou',{player:'die'});
+ player.storage.twzuhuo_mahou = [result.index + 1, result.index + 1];
+ player.addTempSkill('twzuhuo_mahou', { player: 'die' });
},
- ai:{
- order:2,
- result:{
- player:1,
+ ai: {
+ order: 2,
+ result: {
+ player: 1,
},
},
- subSkill:{
- mahou:{
- trigger:{global:'phaseEnd'},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
- var list=player.storage.twzuhuo_mahou;
+ subSkill: {
+ mahou: {
+ trigger: { global: 'phaseEnd' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
+ var list = player.storage.twzuhuo_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的“阻祸”魔法生效');
+ if (list[1] == 0) {
+ game.log(player, '的“阻祸”魔法生效');
player.logSkill('twzuhuo');
- var num=list[0];
+ var num = list[0];
player.addSkill('twzuhuo_effect');
- player.addMark('twzuhuo_effect',num,false);
+ player.addMark('twzuhuo_effect', num, false);
player.removeSkill('twzuhuo_mahou');
}
- else{
- game.log(player,'的“阻祸”魔法剩余','#g'+(list[1])+'回合');
+ else {
+ game.log(player, '的“阻祸”魔法剩余', '#g' + (list[1]) + '回合');
player.markSkill('twzuhuo_mahou');
}
},
- mark:true,
- onremove:true,
- marktext:'♗',
- intro:{
- name:'施法:阻祸',
- markcount:function(storage){
- if(storage) return storage[1];
+ mark: true,
+ onremove: true,
+ marktext: '♗',
+ intro: {
+ name: '施法:阻祸',
+ markcount: function (storage) {
+ if (storage) return storage[1];
return 0;
},
- content:function(storage){
- if(storage){
- return '经过'+storage[1]+'个“回合结束时”后,获得'+storage[0]+'层“防止一次伤害”的效果';
+ content: function (storage) {
+ if (storage) {
+ return '经过' + storage[1] + '个“回合结束时”后,获得' + storage[0] + '层“防止一次伤害”的效果';
}
return '未指定施法效果';
},
},
},
- effect:{
- charlotte:true,
- onremove:true,
- trigger:{player:'damageBegin2'},
- forced:true,
- filter:function(event,player){
+ effect: {
+ charlotte: true,
+ onremove: true,
+ trigger: { player: 'damageBegin2' },
+ forced: true,
+ filter: function (event, player) {
return player.hasMark('twzuhuo_effect');
},
- content:function(){
+ content: function () {
trigger.cancel();
- player.removeMark('twzuhuo_effect',1,false);
- if(!player.countMark('twzuhuo_effect')) player.removeSkill('twzuhuo_effect');
+ player.removeMark('twzuhuo_effect', 1, false);
+ if (!player.countMark('twzuhuo_effect')) player.removeSkill('twzuhuo_effect');
},
- marktext:'阻︎',
- intro:{
- onremove:true,
- content:'防止接下来的#次伤害',
+ marktext: '阻︎',
+ intro: {
+ onremove: true,
+ content: '防止接下来的#次伤害',
},
},
},
},
- twzhouzu:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- mahouSkill:true,
- filter:function(event,player){
+ twzhouzu: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ mahouSkill: true,
+ filter: function (event, player) {
return !player.hasSkill('twzhouzu_mahou');
},
- filterTarget:function(card,player,target){
- return player!=target;
+ filterTarget: function (card, player, target) {
+ return player != target;
},
- line:false,
- delay:false,
- content:function(){
+ line: false,
+ delay: false,
+ content: function () {
'step 0'
- player.chooseControl('1回合','2回合','3回合').set('prompt','请选择施法时长').set('ai',function(){
- var player=_status.event.player;
- var safe=1;
- if(safe0){
+ player.chooseControl('1回合', '2回合', '3回合').set('prompt', '请选择施法时长').set('ai', function () {
+ var player = _status.event.player;
+ var safe = 1;
+ if (safe < Math.min(3, game.countPlayer())) {
+ var next = player.next;
+ while (next != player && get.attitude(next, player) > 0) {
safe++;
- next=next.next;
+ next = next.next;
}
}
- return Math.max(2,Math.min(safe,3,game.countPlayer()))-1;
+ return Math.max(2, Math.min(safe, 3, game.countPlayer())) - 1;
});
'step 1'
- player.storage.twzhouzu_mahou=[result.index+1,result.index+1,target];
- player.addTempSkill('twzhouzu_mahou',{player:'die'});
+ player.storage.twzhouzu_mahou = [result.index + 1, result.index + 1, target];
+ player.addTempSkill('twzhouzu_mahou', { player: 'die' });
},
- subSkill:{
- mahou:{
- trigger:{
- global:'phaseEnd',
+ subSkill: {
+ mahou: {
+ trigger: {
+ global: 'phaseEnd',
},
- forced:true,
- popup:false,
- charlotte:true,
- content:function(){
- var list=player.storage.twzhouzu_mahou;
+ forced: true,
+ popup: false,
+ charlotte: true,
+ content: function () {
+ var list = player.storage.twzhouzu_mahou;
list[1]--;
- if(list[1]==0){
- game.log(player,'的“咒诅”魔法生效');
- var num=list[0],target=list[2];
- player.logSkill('twzhouzu',target);
- target.chooseToDiscard(get.translation(player)+'对你的“咒诅”魔法生效,请弃置'+get.cnNumber(list[0])+'张牌',list[0],true);
+ if (list[1] == 0) {
+ game.log(player, '的“咒诅”魔法生效');
+ var num = list[0], target = list[2];
+ player.logSkill('twzhouzu', target);
+ target.chooseToDiscard(get.translation(player) + '对你的“咒诅”魔法生效,请弃置' + get.cnNumber(list[0]) + '张牌', list[0], true);
target.damage('thunder');
player.removeSkill('twzhouzu_mahou');
}
- else{
- game.log(player,'的“咒阻”魔法剩余','#g'+(list[1])+'回合');
+ else {
+ game.log(player, '的“咒阻”魔法剩余', '#g' + (list[1]) + '回合');
player.markSkill('twzhouzu_mahou');
}
},
- mark:true,
- onremove:true,
- marktext:'♗',
- intro:{
- name:'施法:咒诅',
- markcount:function(storage){
- if(storage) return storage[1];
+ mark: true,
+ onremove: true,
+ marktext: '♗',
+ intro: {
+ name: '施法:咒诅',
+ markcount: function (storage) {
+ if (storage) return storage[1];
return 0;
},
- content:function(storage){
- if(storage){
- return '经过'+storage[1]+'个“回合结束时”后,你令'+get.translation(storage[2])+'弃置'+get.cnNumber(storage[0])+'张牌,然后你对其造成1点雷电伤害';
+ content: function (storage) {
+ if (storage) {
+ return '经过' + storage[1] + '个“回合结束时”后,你令' + get.translation(storage[2]) + '弃置' + get.cnNumber(storage[0]) + '张牌,然后你对其造成1点雷电伤害';
}
return '未指定施法效果';
},
}
},
},
- ai:{
- order:1,
- result:{
- target:-5,
+ ai: {
+ order: 1,
+ result: {
+ target: -5,
},
}
},
- twhuangjin:{
- audio:2,
- trigger:{target:'useCardToTarget'},
- forced:true,
- logTarget:'player',
- filter:function(event,player){
- return event.card.name=='sha'&&typeof get.number(event.card)=='number';
+ twhuangjin: {
+ audio: 2,
+ trigger: { target: 'useCardToTarget' },
+ forced: true,
+ logTarget: 'player',
+ filter: function (event, player) {
+ return event.card.name == 'sha' && typeof get.number(event.card) == 'number';
},
- content:function(){
+ content: function () {
'step 0'
- player.judge(function(result){
- var evt=_status.event.getTrigger();
- if(Math.abs(get.number(result)-get.number(evt.card))<=1) return 2;
+ player.judge(function (result) {
+ var evt = _status.event.getTrigger();
+ if (Math.abs(get.number(result) - get.number(evt.card)) <= 1) return 2;
return -1;
- }).judge2=function(result){
+ }).judge2 = function (result) {
return result.bool;
};
'step 1'
- if(result.bool){
+ if (result.bool) {
trigger.getParent().excluded.add(player);
}
},
- ai:{
- effect:{
- target:function(card,player,target,current,isLink){
- if(card.name=='sha'&&!isLink) return 0.8;
+ ai: {
+ effect: {
+ target: function (card, player, target, current, isLink) {
+ if (card.name == 'sha' && !isLink) return 0.8;
},
},
},
},
- twguimen:{
- audio:2,
- trigger:{
- player:'loseAfter',
- global:'loseAsyncAfter',
+ twguimen: {
+ audio: 2,
+ trigger: {
+ player: 'loseAfter',
+ global: 'loseAsyncAfter',
},
- direct:true,
- filter:function(event,player){
- if(event.type!='discard') return false;
- var evt=event.getl(player);
- for(var card of evt.cards2){
- if(get.suit(card,player)=='spade') return true;
+ direct: true,
+ filter: function (event, player) {
+ if (event.type != 'discard') return false;
+ var evt = event.getl(player);
+ for (var card of evt.cards2) {
+ if (get.suit(card, player) == 'spade') return true;
}
return false;
},
- forced:true,
- content:function(){
+ forced: true,
+ content: function () {
'step 0'
- var cards=[];
- var evt=trigger.getl(player);
- for(var card of evt.cards2){
- if(get.suit(card,player)=='spade') cards.push(card);
+ var cards = [];
+ var evt = trigger.getl(player);
+ for (var card of evt.cards2) {
+ if (get.suit(card, player) == 'spade') cards.push(card);
}
- if(!cards.length) event.finish();
- else event.cards=cards;
+ if (!cards.length) event.finish();
+ else event.cards = cards;
'step 1'
- if(event.cards.length==1){
- event._result={bool:true,links:event.cards};
+ if (event.cards.length == 1) {
+ event._result = { bool: true, links: event.cards };
}
- else{
- player.chooseButton(['鬼门:选择一张♠牌,为其进行判定',event.cards],true);
+ else {
+ player.chooseButton(['鬼门:选择一张♠牌,为其进行判定', event.cards], true);
}
'step 2'
- if(result.bool&&result.links){
- event.judgingSpade=result.links[0];
+ if (result.bool && result.links) {
+ event.judgingSpade = result.links[0];
event.cards.remove(event.judgingSpade);
- game.log(player,'选择','#y'+get.translation(event.judgingSpade),'进行判定');
- player.judge(function(result){
- var card=_status.event.getParent().judgingSpade;
- if(Math.abs(get.number(result)-get.number(card))<=1) return 4;
+ game.log(player, '选择', '#y' + get.translation(event.judgingSpade), '进行判定');
+ player.judge(function (result) {
+ var card = _status.event.getParent().judgingSpade;
+ if (Math.abs(get.number(result) - get.number(card)) <= 1) return 4;
return -1;
- }).judge2=function(result){
+ }).judge2 = function (result) {
return result.bool;
};
} else event.finish();
'step 3'
- if(result.bool&&game.hasPlayer(current=>current!=player)){
- player.chooseTarget('选择一名其他角色,对其造成2点雷电伤害',lib.filter.notMe,true).set('ai',target=>get.damageEffect(target,player,player,'thunder'));
+ if (result.bool && game.hasPlayer(current => current != player)) {
+ player.chooseTarget('选择一名其他角色,对其造成2点雷电伤害', lib.filter.notMe, true).set('ai', target => get.damageEffect(target, player, player, 'thunder'));
}
'step 4'
- if(result.bool){
- player.line(result.targets[0],'thunder');
- result.targets[0].damage(2,'thunder');
+ if (result.bool) {
+ player.line(result.targets[0], 'thunder');
+ result.targets[0].damage(2, 'thunder');
}
- if(event.cards.length) event.goto(1);
+ if (event.cards.length) event.goto(1);
}
},
- twdidao:{
- audio:2,
- trigger:{global:'judge'},
- filter:function(event,player){
+ twdidao: {
+ audio: 2,
+ trigger: { global: 'judge' },
+ filter: function (event, player) {
return player.countCards('hes');
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为' +
- get.translation(trigger.player.judging[0])+','+get.prompt('twdidao'),'hes',function(card){
- var player=_status.event.player;
- var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
- if(mod2!='unchanged') return mod2;
- var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
- if(mod!='unchanged') return mod;
+ player.chooseCard(get.translation(trigger.player) + '的' + (trigger.judgestr || '') + '判定为' +
+ get.translation(trigger.player.judging[0]) + ',' + get.prompt('twdidao'), 'hes', function (card) {
+ var player = _status.event.player;
+ var mod2 = game.checkMod(card, player, 'unchanged', 'cardEnabled2', player);
+ if (mod2 != 'unchanged') return mod2;
+ var mod = game.checkMod(card, player, 'unchanged', 'cardRespondable', player);
+ if (mod != 'unchanged') return mod;
return true;
- }).set('ai',function(card){
- var trigger=_status.event.getTrigger();
- var player=_status.event.player;
- var judging=_status.event.judging;
- var result=trigger.judge(card)-trigger.judge(judging);
- var attitude=get.attitude(player,trigger.player);
- if(attitude==0||result==0){
- if(trigger.player!=player) return 0;
- var checkx=get.color(card,player)==get.color(judging);
- if(checkx>0) return checkx;
+ }).set('ai', function (card) {
+ var trigger = _status.event.getTrigger();
+ var player = _status.event.player;
+ var judging = _status.event.judging;
+ var result = trigger.judge(card) - trigger.judge(judging);
+ var attitude = get.attitude(player, trigger.player);
+ if (attitude == 0 || result == 0) {
+ if (trigger.player != player) return 0;
+ var checkx = get.color(card, player) == get.color(judging);
+ if (checkx > 0) return checkx;
return 0;
}
- return result*(attitude>0?1:-1);
- }).set('judging',trigger.player.judging[0]);
+ return result * (attitude > 0 ? 1 : -1);
+ }).set('judging', trigger.player.judging[0]);
'step 1'
- if(result.bool){
- player.respond(result.cards,'highlight','twdidao','noOrdering');
+ if (result.bool) {
+ player.respond(result.cards, 'highlight', 'twdidao', 'noOrdering');
}
- else{
+ else {
event.finish();
}
'step 2'
- if(result.bool){
+ if (result.bool) {
player.$gain2(trigger.player.judging[0]);
player.gain(trigger.player.judging[0]);
- var card=result.cards[0];
- if(get.color(card,player)==get.color(trigger.player.judging[0])) player.draw('nodelay');
- trigger.player.judging[0]=result.cards[0];
+ var card = result.cards[0];
+ if (get.color(card, player) == get.color(trigger.player.judging[0])) player.draw('nodelay');
+ trigger.player.judging[0] = result.cards[0];
trigger.orderingCards.addArray(result.cards);
- game.log(trigger.player,'的判定牌改为',result.cards[0]);
+ game.log(trigger.player, '的判定牌改为', result.cards[0]);
}
'step 3'
game.delay(2);
},
- ai:{
- rejudge:true,
- tag:{
- rejudge:1
+ ai: {
+ rejudge: true,
+ tag: {
+ rejudge: 1
}
}
},
//群曹操
- twlingfa:{
- audio:2,
- trigger:{global:'roundStart'},
- direct:true,
- content:function(){
+ twlingfa: {
+ audio: 2,
+ trigger: { global: 'roundStart' },
+ direct: true,
+ content: function () {
'step 0'
- if(game.roundNumber<3||!player.hasSkill('twlingfa')){
+ if (game.roundNumber < 3 || !player.hasSkill('twlingfa')) {
var str;
- switch(game.roundNumber){
- case 1:str='获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。';break;
- case 2:str='获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。';break;
- default:str='失去【令法】并获得【治暗】';break;
+ switch (game.roundNumber) {
+ case 1: str = '获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。'; break;
+ case 2: str = '获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。'; break;
+ default: str = '失去【令法】并获得【治暗】'; break;
}
- player.chooseBool(get.prompt('twlingfa'),str);
+ player.chooseBool(get.prompt('twlingfa'), str);
}
- else event._result={bool:true};
+ else event._result = { bool: true };
'step 1'
- if(result.bool){
- switch(game.roundNumber){
+ if (result.bool) {
+ switch (game.roundNumber) {
case 1:
- player.logSkill('twlingfa',game.filterPlayer((current)=>current!=player).sortBySeat());
- player.addTempSkill('twlingfa_sha','roundStart');
+ player.logSkill('twlingfa', game.filterPlayer((current) => current != player).sortBySeat());
+ player.addTempSkill('twlingfa_sha', 'roundStart');
break;
case 2:
- player.logSkill('twlingfa',game.filterPlayer((current)=>current!=player).sortBySeat());
- player.addTempSkill('twlingfa_tao','roundStart');
+ player.logSkill('twlingfa', game.filterPlayer((current) => current != player).sortBySeat());
+ player.addTempSkill('twlingfa_tao', 'roundStart');
break;
default:
player.logSkill('twlingfa');
- player.addSkills(['twzhian'],['twlingfa']);
+ player.addSkills(['twzhian'], ['twlingfa']);
break;
}
}
},
- subSkill:{
- sha:{
- audio:'twlingfa',
- trigger:{global:'useCard'},
- charlotte:true,
- forced:true,
- filter:function(event,player){
- return player!=event.player&&event.card.name=='sha'&&event.player.countCards('he')>0;
+ subSkill: {
+ sha: {
+ audio: 'twlingfa',
+ trigger: { global: 'useCard' },
+ charlotte: true,
+ forced: true,
+ filter: function (event, player) {
+ return player != event.player && event.card.name == 'sha' && event.player.countCards('he') > 0;
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
game.delayx();
- trigger.player.chooseToDiscard('he','令法:弃置一张牌,或受到来自'+get.translation(player)+'的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){
- if(!_status.event.goon) return 0;
- return 8-get.value(card);
+ trigger.player.chooseToDiscard('he', '令法:弃置一张牌,或受到来自' + get.translation(player) + '的1点伤害').set('goon', get.damageEffect(trigger.player, player, trigger.player) < 0).set('ai', function (card) {
+ if (!_status.event.goon) return 0;
+ return 8 - get.value(card);
});
'step 1'
- if(!result.bool){
+ if (!result.bool) {
trigger.player.damage();
}
},
- mark:true,
- marktext:'杀',
- intro:{content:'其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。'},
+ mark: true,
+ marktext: '杀',
+ intro: { content: '其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。' },
},
- tao:{
- audio:'twlingfa',
- trigger:{global:'useCard'},
- charlotte:true,
- forced:true,
- filter:function(event,player){
- return player!=event.player&&event.card.name=='tao'&&event.player.countCards('he')>0;
+ tao: {
+ audio: 'twlingfa',
+ trigger: { global: 'useCard' },
+ charlotte: true,
+ forced: true,
+ filter: function (event, player) {
+ return player != event.player && event.card.name == 'tao' && event.player.countCards('he') > 0;
},
- logTarget:'player',
- content:function(){
+ logTarget: 'player',
+ content: function () {
'step 0'
game.delayx();
- trigger.player.chooseCard('he','令法:交给'+get.translation(player)+'一张牌,否则受到来自其的1点伤害').set('goon',get.damageEffect(trigger.player,player,trigger.player)<0).set('ai',function(card){
- if(!_status.event.goon) return 0;
- return 8-get.value(card);
+ trigger.player.chooseCard('he', '令法:交给' + get.translation(player) + '一张牌,否则受到来自其的1点伤害').set('goon', get.damageEffect(trigger.player, player, trigger.player) < 0).set('ai', function (card) {
+ if (!_status.event.goon) return 0;
+ return 8 - get.value(card);
});
'step 1'
- if(!result.bool){
+ if (!result.bool) {
trigger.player.damage();
}
- else trigger.player.give(result.cards,player);
+ else trigger.player.give(result.cards, player);
},
- mark:true,
- marktext:'桃',
- intro:{content:'其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。'},
+ mark: true,
+ marktext: '桃',
+ intro: { content: '其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。' },
},
},
- derivation:'twzhian',
+ derivation: 'twzhian',
},
- twzhian:{
- audio:2,
- init:function(player){
+ twzhian: {
+ audio: 2,
+ init: function (player) {
game.addGlobalSkill('twzhian_ai');
},
- onremove:function(player){
- if(!game.hasPlayer((current)=>current.hasSkill('twzhian'),true)) game.removeGlobalSkill('twzhian_ai');
+ onremove: function (player) {
+ if (!game.hasPlayer((current) => current.hasSkill('twzhian'), true)) game.removeGlobalSkill('twzhian_ai');
},
- usable:1,
- trigger:{global:'useCardAfter'},
- direct:true,
- filter:function(event,player){
- var type=get.type(event.card);
- if(type!='delay'&&type!='equip') return false;
- if(event.cards.length!=1) return false;
- var position=get.position(event.cards[0]);
- if(position=='e'||position=='j') return true;
+ usable: 1,
+ trigger: { global: 'useCardAfter' },
+ direct: true,
+ filter: function (event, player) {
+ var type = get.type(event.card);
+ if (type != 'delay' && type != 'equip') return false;
+ if (event.cards.length != 1) return false;
+ var position = get.position(event.cards[0]);
+ if (position == 'e' || position == 'j') return true;
return event.player.isIn();
},
- content:function(){
+ content: function () {
'step 0'
- var str=get.translation(trigger.cards[0]),owner=get.owner(trigger.cards[0]);
- var choiceList=[
- '弃置'+(owner?(get.translation(owner)+'区域内的'):'')+str,
- '弃置一张手牌并获得'+str,
- '对'+get.translation(trigger.player)+'造成1点伤害',
+ var str = get.translation(trigger.cards[0]), owner = get.owner(trigger.cards[0]);
+ var choiceList = [
+ '弃置' + (owner ? (get.translation(owner) + '区域内的') : '') + str,
+ '弃置一张手牌并获得' + str,
+ '对' + get.translation(trigger.player) + '造成1点伤害',
];
- var choices=[];
- if(owner&&lib.filter.canBeDiscarded(card,player,owner)) choices.push('选项一');
- else choiceList[0]=''+choiceList[0]+'';
- if(owner&&player.hasCard(function(card){
- return lib.filter.cardDiscardable(card,player,'twzhian');
- },'h')&&lib.filter.canBeGained(card,player,owner)) choices.push('选项二');
- else choiceList[1]=''+choiceList[1]+'';
- if(trigger.player.isIn()) choices.push('选项三');
- else choiceList[2]=''+choiceList[2]+'';
- player.chooseControl(choices,'cancel2').set('choiceList',choiceList).set('prompt',get.prompt('twzhian')).set('ai',function(){
- var player=_status.event.player,choices=_status.event.controls.slice(0);
- var card=_status.event.getTrigger().cards[0],owner=get.owner(card);
- var getEffect=function(choice){
- if(choice=='cancel2') return 0.1;
- if(choice=='选项三'){
- return get.damageEffect(_status.event.getTrigger().player,player,player);
+ var choices = [];
+ if (owner && lib.filter.canBeDiscarded(card, player, owner)) choices.push('选项一');
+ else choiceList[0] = '' + choiceList[0] + '';
+ if (owner && player.hasCard(function (card) {
+ return lib.filter.cardDiscardable(card, player, 'twzhian');
+ }, 'h') && lib.filter.canBeGained(card, player, owner)) choices.push('选项二');
+ else choiceList[1] = '' + choiceList[1] + '';
+ if (trigger.player.isIn()) choices.push('选项三');
+ else choiceList[2] = '' + choiceList[2] + '';
+ player.chooseControl(choices, 'cancel2').set('choiceList', choiceList).set('prompt', get.prompt('twzhian')).set('ai', function () {
+ var player = _status.event.player, choices = _status.event.controls.slice(0);
+ var card = _status.event.getTrigger().cards[0], owner = get.owner(card);
+ var getEffect = function (choice) {
+ if (choice == 'cancel2') return 0.1;
+ if (choice == '选项三') {
+ return get.damageEffect(_status.event.getTrigger().player, player, player);
}
var result;
- if(get.position(card)=='j'){
- result=-get.effect(player,{
- name:card.viewAs||card.name,
- cards:[card],
- },player,player)*get.sgn(get.attitude(player,owner));
+ if (get.position(card) == 'j') {
+ result = -get.effect(player, {
+ name: card.viewAs || card.name,
+ cards: [card],
+ }, player, player) * get.sgn(get.attitude(player, owner));
}
- else result=-(get.value(card,owner)-0.01)*get.sgn(get.attitude(player,owner));
- if(choice=='选项一') return result;
- if(player.hasCard(function(cardx){
- return lib.filter.cardDiscardable(cardx,player,'twzhian')&&get.value(cardx,player)current.hasSkill('twzhian'),true);
+ subSkill: {
+ ai: {
+ trigger: { player: 'dieAfter' },
+ filter: function (event, player) {
+ return !game.hasPlayer((current) => current.hasSkill('twzhian'), true);
},
- silent:true,
- forceDie:true,
- content:function(){
+ silent: true,
+ forceDie: true,
+ content: function () {
game.removeGlobalSkill('twzhian_ai');
},
- ai:{
- effect:{
- player:function(card,player,target){
- if(get.type(card)!=='delay'&&get.type(card)!=='equip') return 1;
- let za=game.findPlayer((cur)=>cur.hasSkill('twzhian')&&(!cur.storage.counttrigger||!cur.storage.counttrigger.twzhian)&&get.attitude(player,cur)<=0);
- if(za) return [0.5,-0.8];
+ ai: {
+ effect: {
+ player: function (card, player, target) {
+ if (get.type(card) !== 'delay' && get.type(card) !== 'equip') return 1;
+ let za = game.findPlayer((cur) => cur.hasSkill('twzhian') && (!cur.storage.counttrigger || !cur.storage.counttrigger.twzhian) && get.attitude(player, cur) <= 0);
+ if (za) return [0.5, -0.8];
}
}
}
}
}
},
- twyujue:{
- audio:2,
- global:'twyujue_give',
- trigger:{
- player:'gainAfter',
- global:'loseAsyncAfter',
+ twyujue: {
+ audio: 2,
+ global: 'twyujue_give',
+ trigger: {
+ player: 'gainAfter',
+ global: 'loseAsyncAfter',
},
- direct:true,
- filter:function(event,player){
- if(player==_status.currentPhase) return false;
- var cards=event.getg(player);
- if(!cards.length) return false;
- return game.hasPlayer(function(current){
- if(current==player) return false;
- var evt=event.getl(current);
- if(!evt||!evt.cards2||!evt.cards2.filter((card)=>cards.includes(card)).length) return false;
- return (!current.hasSkill('twyujue_effect0'))||(!current.hasSkill('twyujue_effect1'));
+ direct: true,
+ filter: function (event, player) {
+ if (player == _status.currentPhase) return false;
+ var cards = event.getg(player);
+ if (!cards.length) return false;
+ return game.hasPlayer(function (current) {
+ if (current == player) return false;
+ var evt = event.getl(current);
+ if (!evt || !evt.cards2 || !evt.cards2.filter((card) => cards.includes(card)).length) return false;
+ return (!current.hasSkill('twyujue_effect0')) || (!current.hasSkill('twyujue_effect1'));
})
},
- content:function(){
+ content: function () {
'step 0'
- var cards=trigger.getg(player);
- var list=game.filterPlayer(function(current){
- if(current==player) return false;
- var evt=trigger.getl(current);
- if(!evt||!evt.cards2||!evt.cards2.filter((card)=>cards.includes(card)).length) return false;
- return (!current.hasSkill('twyujue_effect0'))||(!current.hasSkill('twyujue_effect1'));
+ var cards = trigger.getg(player);
+ var list = game.filterPlayer(function (current) {
+ if (current == player) return false;
+ var evt = trigger.getl(current);
+ if (!evt || !evt.cards2 || !evt.cards2.filter((card) => cards.includes(card)).length) return false;
+ return (!current.hasSkill('twyujue_effect0')) || (!current.hasSkill('twyujue_effect1'));
}).sortBySeat();
- event.targets=list;
+ event.targets = list;
'step 1'
- var target=event.targets.shift();
- if(target.isIn()){
- event.target=target;
- var num=2;
- if(target.hasSkill('twyujue_effect0')) num--;
- if(target.hasSkill('twyujue_effect1')) num--;
- var cards=trigger.getg(player);
- num=Math.min(num,trigger.getl(target).cards2.filter(i=>cards.includes(i)).length);
- if(num>0) event.count=num;
- else if(targets.length>0) event.redo();
+ var target = event.targets.shift();
+ if (target.isIn()) {
+ event.target = target;
+ var num = 2;
+ if (target.hasSkill('twyujue_effect0')) num--;
+ if (target.hasSkill('twyujue_effect1')) num--;
+ var cards = trigger.getg(player);
+ num = Math.min(num, trigger.getl(target).cards2.filter(i => cards.includes(i)).length);
+ if (num > 0) event.count = num;
+ else if (targets.length > 0) event.redo();
else event.finish();
}
- else if(targets.length>0) event.redo();
+ else if (targets.length > 0) event.redo();
else event.finish();
'step 2'
event.count--;
- player.chooseBool(get.prompt('twyujue',target),'可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。').set('ai',function(){
- var evt=_status.event.getParent();
- return get.attitude(evt.player,evt.target)>0;
+ player.chooseBool(get.prompt('twyujue', target), '可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。').set('ai', function () {
+ var evt = _status.event.getParent();
+ return get.attitude(evt.player, evt.target) > 0;
});
'step 3'
- if(result.bool){
- player.logSkill('twyujue',target);
- var list=[0,1];
- if(target.hasSkill('twyujue_effect0')) list.remove(0);
- if(target.hasSkill('twyujue_effect1')) list.remove(1);
- if(!list.length) event.goto(6);
- else if(list.length==1) event._result={index:list[0]};
- else target.chooseControl().set('choiceList',['弃置攻击范围内一名角色的一张牌','下一次使用牌时,从牌堆中获得一张同类别的牌']).set('ai',function(){
- var player=_status.event.player;
- if(game.hasPlayer(function(current){
- return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0;
+ if (result.bool) {
+ player.logSkill('twyujue', target);
+ var list = [0, 1];
+ if (target.hasSkill('twyujue_effect0')) list.remove(0);
+ if (target.hasSkill('twyujue_effect1')) list.remove(1);
+ if (!list.length) event.goto(6);
+ else if (list.length == 1) event._result = { index: list[0] };
+ else target.chooseControl().set('choiceList', ['弃置攻击范围内一名角色的一张牌', '下一次使用牌时,从牌堆中获得一张同类别的牌']).set('ai', function () {
+ var player = _status.event.player;
+ if (game.hasPlayer(function (current) {
+ return player.inRange(current) && current.countDiscardableCards(player, 'he') > 0 && get.effect(current, { name: 'guohe_copy2' }, player, player) > 0;
})) return 0;
return 1;
});
}
else event.goto(6);
'step 4'
- target.addTempSkill('twyujue_effect'+result.index);
- if(result.index==0){
- if(game.hasPlayer(function(current){
- return target.inRange(current)&¤t.countDiscardableCards(target,'he')>0;
- })){
- target.chooseTarget('弃置攻击范围内一名角色的一张牌',true,function(card,player,target){
- return player.inRange(target)&&target.countDiscardableCards(player,'he')>0;
- }).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'guohe_copy2'},player,player)
+ target.addTempSkill('twyujue_effect' + result.index);
+ if (result.index == 0) {
+ if (game.hasPlayer(function (current) {
+ return target.inRange(current) && current.countDiscardableCards(target, 'he') > 0;
+ })) {
+ target.chooseTarget('弃置攻击范围内一名角色的一张牌', true, function (card, player, target) {
+ return player.inRange(target) && target.countDiscardableCards(player, 'he') > 0;
+ }).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'guohe_copy2' }, player, player)
});
}
else event.goto(6);
}
else event.goto(6);
'step 5'
- if(result.bool){
- var target2=result.targets[0];
- target.line(target2,'green');
- target.discardPlayerCard(target2,'he',true);
+ if (result.bool) {
+ var target2 = result.targets[0];
+ target.line(target2, 'green');
+ target.discardPlayerCard(target2, 'he', true);
}
'step 6'
game.delayx();
- if(event.count>0) event.goto(2);
- else if(targets.length) event.goto(1);
+ if (event.count > 0) event.goto(2);
+ else if (targets.length) event.goto(1);
},
- subSkill:{
- clear:{
- onremove:true,
+ subSkill: {
+ clear: {
+ onremove: true,
},
- effect0:{charlotte:true},
- effect1:{
- charlotte:true,
- trigger:{player:'useCard'},
- usable:1,
- forced:true,
- popup:false,
- content:function(){
+ effect0: { charlotte: true },
+ effect1: {
+ charlotte: true,
+ trigger: { player: 'useCard' },
+ usable: 1,
+ forced: true,
+ popup: false,
+ content: function () {
player.unmarkSkill('twyujue_effect1');
- var type2=get.type2(trigger.card,false);
- var card=get.cardPile2(function(card){
- return get.type2(card,false)==type2;
+ var type2 = get.type2(trigger.card, false);
+ var card = get.cardPile2(function (card) {
+ return get.type2(card, false) == type2;
});
- if(card) trigger.player.gain(card,'gain2');
+ if (card) trigger.player.gain(card, 'gain2');
},
- mark:true,
- marktext:'爵',
- intro:{content:'使用下一张牌时,从牌堆中获得一张类型相同的牌'},
+ mark: true,
+ marktext: '爵',
+ intro: { content: '使用下一张牌时,从牌堆中获得一张类型相同的牌' },
},
},
},
- twyujue_give:{
- audio:2,
- enable:'phaseUse',
- filter:function(event,player){
- if(!player.countCards('he')) return false;
- var targets=game.filterPlayer(function(current){
- return current!=player&¤t.hasSkill('twyujue');
+ twyujue_give: {
+ audio: 2,
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ if (!player.countCards('he')) return false;
+ var targets = game.filterPlayer(function (current) {
+ return current != player && current.hasSkill('twyujue');
});
- if(!targets.length) return false;
- for(var target of targets){
- var num=2;
- if(player.group=='qun'&&target.hasZhuSkill('twfengqi',player)) num=4;
- if(target.countMark('twyujue_clear')=Math.max(1,ui.selected.cards.length);
+ filterCard: true,
+ filterTarget: function (card, player, target) {
+ if (!target.hasSkill('twyujue')) return false;
+ var num = 2;
+ if (player.group == 'qun' && target.hasZhuSkill('twfengqi', player)) num = 4;
+ return (num - target.countMark('twyujue_clear')) >= Math.max(1, ui.selected.cards.length);
},
- selectTarget:function(){
- var player=_status.event.player;
- var targets=game.filterPlayer(function(current){
- return current!=player&¤t.hasSkill('twyujue');
+ selectTarget: function () {
+ var player = _status.event.player;
+ var targets = game.filterPlayer(function (current) {
+ return current != player && current.hasSkill('twyujue');
});
- return targets.length>1?1:-1;
+ return targets.length > 1 ? 1 : -1;
},
- complexSelect:true,
- prompt:function(){
- var player=_status.event.player;
- var targets=game.filterPlayer(function(current){
- return current!=player&¤t.hasSkill('twyujue');
+ complexSelect: true,
+ prompt: function () {
+ var player = _status.event.player;
+ var targets = game.filterPlayer(function (current) {
+ return current != player && current.hasSkill('twyujue');
});
- return '将任意张牌交给'+get.translation(targets)+(targets.length>1?'中的一人':'');
+ return '将任意张牌交给' + get.translation(targets) + (targets.length > 1 ? '中的一人' : '');
},
- position:'he',
- discard:false,
- lose:false,
- delay:false,
- check:function(card){
- if(ui.selected.cards.length) return 0;
- var player=_status.event.player;
- if(game.hasPlayer(function(current){
- return lib.skill.twyujue_give.filterTarget(null,player,current)&&get.attitude(player,current)>0;
- })){
- var val=get.value(card);
- if(val<=0&&get.position(card)=='e') return 100-val;
- if(!player.hasSkill('twyujue_effect1')&&player.hasCard(function(cardx){
- return cardx!=card&&player.getUseValue(cardx,null,true)>0;
- },'hs')) return 6-get.value(card);
- if(!player.hasSkill('twyujue_effect0')&&game.hasPlayer(function(current){
- return player.inRange(current)&¤t.countDiscardableCards(player,'he')>0&&get.effect(current,{name:'guohe_copy2'},player,player)>0;
- })) return 5.5-get.value(card);
+ position: 'he',
+ discard: false,
+ lose: false,
+ delay: false,
+ check: function (card) {
+ if (ui.selected.cards.length) return 0;
+ var player = _status.event.player;
+ if (game.hasPlayer(function (current) {
+ return lib.skill.twyujue_give.filterTarget(null, player, current) && get.attitude(player, current) > 0;
+ })) {
+ var val = get.value(card);
+ if (val <= 0 && get.position(card) == 'e') return 100 - val;
+ if (!player.hasSkill('twyujue_effect1') && player.hasCard(function (cardx) {
+ return cardx != card && player.getUseValue(cardx, null, true) > 0;
+ }, 'hs')) return 6 - get.value(card);
+ if (!player.hasSkill('twyujue_effect0') && game.hasPlayer(function (current) {
+ return player.inRange(current) && current.countDiscardableCards(player, 'he') > 0 && get.effect(current, { name: 'guohe_copy2' }, player, player) > 0;
+ })) return 5.5 - get.value(card);
}
return 0;
},
- content:function(){
- game.trySkillAudio('twyujue',target);
- player.give(cards,target);
+ content: function () {
+ game.trySkillAudio('twyujue', target);
+ player.give(cards, target);
target.addTempSkill('twyujue_clear');
- target.addMark('twyujue_clear',cards.length,false);
+ target.addMark('twyujue_clear', cards.length, false);
},
- ai:{
- order:10,
- result:{target:1},
+ ai: {
+ order: 10,
+ result: { target: 1 },
},
},
- twgezhi:{
- audio:2,
- trigger:{player:'useCard'},
- direct:true,
- filter:function(event,player){
- if(!player.countCards('h')) return false;
- var evt=event.getParent('phaseUse');
- if(!evt||evt.player!=player) return false;
- var type=get.type2(event.card,false);
- return !player.hasHistory('useCard',function(evtx){
- return evtx!=event&&get.type2(evtx.card,false)==type&&evtx.getParent('phaseUse')==evt;
- },event);
+ twgezhi: {
+ audio: 2,
+ trigger: { player: 'useCard' },
+ direct: true,
+ filter: function (event, player) {
+ if (!player.countCards('h')) return false;
+ var evt = event.getParent('phaseUse');
+ if (!evt || evt.player != player) return false;
+ var type = get.type2(event.card, false);
+ return !player.hasHistory('useCard', function (evtx) {
+ return evtx != event && get.type2(evtx.card, false) == type && evtx.getParent('phaseUse') == evt;
+ }, event);
},
- content:function(){
+ content: function () {
'step 0'
- if(!event.isMine()&&!event.isOnline()) game.delayx();
- player.chooseCard('是否发动【革制】重铸一张牌?',lib.filter.cardRecastable).set('ai',function(card){
- return 5.5-get.value(card);
+ if (!event.isMine() && !event.isOnline()) game.delayx();
+ player.chooseCard('是否发动【革制】重铸一张牌?', lib.filter.cardRecastable).set('ai', function (card) {
+ return 5.5 - get.value(card);
});
'step 1'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twgezhi');
player.recast(result.cards);
}
},
- group:'twgezhi_buff',
- subSkill:{
- buff:{
- audio:'twgezhi',
- trigger:{player:'phaseUseEnd'},
- direct:true,
- filter:function(event,player){
- return player.getHistory('lose',function(evt){
- return evt.getParent(3).name=='twgezhi'&&evt.getParent('phaseUse')==event;
- }).length>1;
+ group: 'twgezhi_buff',
+ subSkill: {
+ buff: {
+ audio: 'twgezhi',
+ trigger: { player: 'phaseUseEnd' },
+ direct: true,
+ filter: function (event, player) {
+ return player.getHistory('lose', function (evt) {
+ return evt.getParent(3).name == 'twgezhi' && evt.getParent('phaseUse') == event;
+ }).length > 1;
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('twgezhi'),'你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',function(card,player,target){
- return !target.hasSkill('twgezhi_选项一')||!target.hasSkill('twgezhi_选项二')||!target.hasSkill('twgezhi_选项三');
- }).set('ai',function(target){
- return get.attitude(_status.event.player,target);
+ player.chooseTarget(get.prompt('twgezhi'), '你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。', function (card, player, target) {
+ return !target.hasSkill('twgezhi_选项一') || !target.hasSkill('twgezhi_选项二') || !target.hasSkill('twgezhi_选项三');
+ }).set('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('twgezhi',target);
- var list=[];
- for(var i=1;i<=3;i++){
- var str='选项'+get.cnNumber(i,true);
- if(!target.hasSkill('twgezhi_'+str)) list.push(str);
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('twgezhi', target);
+ var list = [];
+ for (var i = 1; i <= 3; i++) {
+ var str = '选项' + get.cnNumber(i, true);
+ if (!target.hasSkill('twgezhi_' + str)) list.push(str);
}
- if(list.length==1) event._result={control:list[0]};
- else target.chooseControl(list).set('choiceList',['令自己的攻击范围+2','令自己的手牌上限+2','令自己的体力上限+1']).set('ai',function(){
- var player=_status.event.player,controls=_status.event.controls;
- if(controls.includes('选项一')&&game.hasPlayer(function(current){
- return (get.realAttitude||get.attitude)(player,current)<0&&get.distance(player,current,'attack')>1;
+ if (list.length == 1) event._result = { control: list[0] };
+ else target.chooseControl(list).set('choiceList', ['令自己的攻击范围+2', '令自己的手牌上限+2', '令自己的体力上限+1']).set('ai', function () {
+ var player = _status.event.player, controls = _status.event.controls;
+ if (controls.includes('选项一') && game.hasPlayer(function (current) {
+ return (get.realAttitude || get.attitude)(player, current) < 0 && get.distance(player, current, 'attack') > 1;
})) return '选项一';
- if(controls.includes('选项二')&&player.needsToDiscard()) return '选项二';
- if(controls.includes('选项三')) return '选项三';
+ if (controls.includes('选项二') && player.needsToDiscard()) return '选项二';
+ if (controls.includes('选项三')) return '选项三';
return controls.randomGet();
});
}
- else{
- event._triggered=null;
+ else {
+ event._triggered = null;
event.finish();
}
'step 2'
- target.addSkill('twgezhi_'+result.control);
- if(result.control=='选项三') target.gainMaxHp();
+ target.addSkill('twgezhi_' + result.control);
+ if (result.control == '选项三') target.gainMaxHp();
'step 3'
game.delayx();
},
},
- 选项一:{
- charlotte:true,
- mod:{
- attackFrom:function(from,to,distance){
- return distance-2;
+ 选项一: {
+ charlotte: true,
+ mod: {
+ attackFrom: function (from, to, distance) {
+ return distance - 2;
},
},
- mark:true,
- marktext:' +2 ',
- intro:{content:'攻击范围+2'},
+ mark: true,
+ marktext: ' +2 ',
+ intro: { content: '攻击范围+2' },
},
- 选项二:{
- charlotte:true,
- mod:{
- maxHandcard:function(player,num){
- return num+2;
+ 选项二: {
+ charlotte: true,
+ mod: {
+ maxHandcard: function (player, num) {
+ return num + 2;
},
},
- mark:true,
- marktext:' +2 ',
- intro:{content:'手牌上限+2'},
+ mark: true,
+ marktext: ' +2 ',
+ intro: { content: '手牌上限+2' },
},
- 选项三:{
- charlotte:true,
- mark:true,
- marktext:' +1 ',
- intro:{content:'体力上限+1'},
+ 选项三: {
+ charlotte: true,
+ mark: true,
+ marktext: ' +1 ',
+ intro: { content: '体力上限+1' },
},
},
},
- twfengqi:{
- audio:2,
- zhuSkill:true,
- trigger:{player:'twgezhi_buffAfter'},
- direct:true,
- filter:function(event,player){
- if(!event.target||!event.target.isIn()||!player.hasZhuSkill('twfengqi',event.target)) return false;
- var target=event.target;
- return target.getStockSkills(true,true).some(skill=>{
- if(target.hasSkill(skill)) return false;
- var info=get.info(skill);
- return info&&info.zhuSkill;
+ twfengqi: {
+ audio: 2,
+ zhuSkill: true,
+ trigger: { player: 'twgezhi_buffAfter' },
+ direct: true,
+ filter: function (event, player) {
+ if (!event.target || !event.target.isIn() || !player.hasZhuSkill('twfengqi', event.target)) return false;
+ var target = event.target;
+ return target.getStockSkills(true, true).some(skill => {
+ if (target.hasSkill(skill)) return false;
+ var info = get.info(skill);
+ return info && info.zhuSkill;
});
},
- skillAnimation:true,
- animationColor:'thunder',
- content:function(){
+ skillAnimation: true,
+ animationColor: 'thunder',
+ content: function () {
'step 0'
- event.target=trigger.target;
- event.target.chooseBool(get.prompt('twfengqi'),'获得武将牌上的所有主公技');
+ event.target = trigger.target;
+ event.target.chooseBool(get.prompt('twfengqi'), '获得武将牌上的所有主公技');
'step 1'
- if(result.bool){
- target.logSkill('twfengqi',player);
- var skills=target.getStockSkills(true,true).filter(skill=>{
- if(target.hasSkill(skill)) return false;
- var info=get.info(skill);
- return info&&info.zhuSkill;
+ if (result.bool) {
+ target.logSkill('twfengqi', player);
+ var skills = target.getStockSkills(true, true).filter(skill => {
+ if (target.hasSkill(skill)) return false;
+ var info = get.info(skill);
+ return info && info.zhuSkill;
});
target.addSkills(skills);
//for(var i of skills) target.addSkillLog(i);
}
},
},
- twsidai:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- locked:false,
- limited:true,
- skillAnimation:true,
- animationColor:'fire',
- filter:function(event,player){
- var cards=player.getCards('h',{type:'basic'});
- if(!cards.length) return false;
- for(var i of cards){
- if(!game.checkMod(i,player,'unchanged','cardEnabled2',player)) return false;
+ twsidai: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ locked: false,
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'fire',
+ filter: function (event, player) {
+ var cards = player.getCards('h', { type: 'basic' });
+ if (!cards.length) return false;
+ for (var i of cards) {
+ if (!game.checkMod(i, player, 'unchanged', 'cardEnabled2', player)) return false;
}
- return event.filterCard(get.autoViewAs({name:'sha',storage:{twsidai:true}},cards),player,event);
+ return event.filterCard(get.autoViewAs({ name: 'sha', storage: { twsidai: true } }, cards), player, event);
},
- viewAs:{name:'sha',storage:{twsidai:true}},
- filterCard:{type:'basic'},
- selectCard:-1,
- check:()=>1,
- onuse:function(result,player){
+ viewAs: { name: 'sha', storage: { twsidai: true } },
+ filterCard: { type: 'basic' },
+ selectCard: -1,
+ check: () => 1,
+ onuse: function (result, player) {
player.awakenSkill('twsidai');
player.addTempSkill('twsidai_effect');
},
- ai:{
- order:2.9,
- result:{
- target:function(player,target){
- var cards=ui.selected.cards.slice(0);
- var names=[];
- for(var i of cards) names.add(i.name);
- if(names.length=0) return -20;
- return lib.card.sha.ai.result.target.apply(this,arguments);
+ ai: {
+ order: 2.9,
+ result: {
+ target: function (player, target) {
+ var cards = ui.selected.cards.slice(0);
+ var names = [];
+ for (var i of cards) names.add(i.name);
+ if (names.length < player.hp) return 0;
+ if (player.hasUnknown() && (player.identity != 'fan' || !target.isZhu)) return 0;
+ if (get.attitude(player, target) >= 0) return -20;
+ return lib.card.sha.ai.result.target.apply(this, arguments);
},
},
},
- mod:{
- cardUsable:function(card){
- if(card.storage&&card.storage.twsidai) return Infinity;
+ mod: {
+ cardUsable: function (card) {
+ if (card.storage && card.storage.twsidai) return Infinity;
},
- targetInRange:function(card){
- if(card.storage&&card.storage.twsidai) return true;
+ targetInRange: function (card) {
+ if (card.storage && card.storage.twsidai) return true;
},
},
- subSkill:{
- effect:{
- charlotte:true,
- trigger:{source:'damageBegin1'},
- filter:function(event,player){
- if(!event.card||!event.card.storage||!event.card.storage.twsidai||event.getParent().type!='card') return false;
- for(var i of event.cards){
- if(i.name=='jiu') return true;
+ subSkill: {
+ effect: {
+ charlotte: true,
+ trigger: { source: 'damageBegin1' },
+ filter: function (event, player) {
+ if (!event.card || !event.card.storage || !event.card.storage.twsidai || event.getParent().type != 'card') return false;
+ for (var i of event.cards) {
+ if (i.name == 'jiu') return true;
}
return false;
},
- forced:true,
- popup:false,
- content:function(){
- trigger.num*=2;
- game.log(trigger.card,'的伤害值','#y×2');
+ forced: true,
+ popup: false,
+ content: function () {
+ trigger.num *= 2;
+ game.log(trigger.card, '的伤害值', '#y×2');
},
- group:['twsidai_tao','twsidai_shan'],
+ group: ['twsidai_tao', 'twsidai_shan'],
},
- tao:{
- trigger:{source:'damageSource'},
- filter:function(event,player){
- if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.player.isIn()) return false;
- for(var i of event.cards){
- if(i.name=='tao') return true;
+ tao: {
+ trigger: { source: 'damageSource' },
+ filter: function (event, player) {
+ if (!event.card || !event.card.storage || !event.card.storage.twsidai || !event.player.isIn()) return false;
+ for (var i of event.cards) {
+ if (i.name == 'tao') return true;
}
return false;
},
- forced:true,
- popup:false,
- content:function(){
+ forced: true,
+ popup: false,
+ content: function () {
trigger.player.loseMaxHp();
},
},
- shan:{
- trigger:{player:'useCardToPlayered'},
- filter:function(event,player){
- if(!event.card||!event.card.storage||!event.card.storage.twsidai||!event.target.isIn()) return false;
- for(var i of event.cards){
- if(i.name=='shan') return true;
+ shan: {
+ trigger: { player: 'useCardToPlayered' },
+ filter: function (event, player) {
+ if (!event.card || !event.card.storage || !event.card.storage.twsidai || !event.target.isIn()) return false;
+ for (var i of event.cards) {
+ if (i.name == 'shan') return true;
}
return false;
},
- forced:true,
- popup:false,
- content:function(){
+ forced: true,
+ popup: false,
+ content: function () {
'step 0'
- trigger.target.chooseToDiscard('h',{type:'basic'},'弃置一张基本牌,否则不能响应'+get.translation(trigger.card)).set('ai',function(card){
- var player=_status.event.player;
- if(player.hasCard('hs',function(cardx){
- return cardx!=card&&get.name(cardx,player)=='shan';
- })) return 12-get.value(card);
+ trigger.target.chooseToDiscard('h', { type: 'basic' }, '弃置一张基本牌,否则不能响应' + get.translation(trigger.card)).set('ai', function (card) {
+ var player = _status.event.player;
+ if (player.hasCard('hs', function (cardx) {
+ return cardx != card && get.name(cardx, player) == 'shan';
+ })) return 12 - get.value(card);
return 0;
});
'step 1'
- if(!result.bool) trigger.directHit.add(trigger.target);
+ if (!result.bool) trigger.directHit.add(trigger.target);
},
},
},
},
- twjieyu:{
- audio:2,
- trigger:{player:['phaseJieshuBegin','damageEnd']},
- round:1,
- filter:function(event,player){
- if(event.name!='phaseJieshu'){
- var history=player.getHistory('damage');
- for(var i of history){
- if(i==event) break;
+ twjieyu: {
+ audio: 2,
+ trigger: { player: ['phaseJieshuBegin', 'damageEnd'] },
+ round: 1,
+ filter: function (event, player) {
+ if (event.name != 'phaseJieshu') {
+ var history = player.getHistory('damage');
+ for (var i of history) {
+ if (i == event) break;
return false;
}
- var all=player.actionHistory;
- for(var i=all.length-2;i>=0;i--){
- if(all[i].damage.length) return false;
- if(all[i].isRound) break;
+ var all = player.actionHistory;
+ for (var i = all.length - 2; i >= 0; i--) {
+ if (all[i].damage.length) return false;
+ if (all[i].isRound) break;
}
}
- return player.countCards('h')>0&&!player.hasCard(function(card){
- return !lib.filter.cardDiscardable(card,player,'twjieyu');
- },'h')
+ return player.countCards('h') > 0 && !player.hasCard(function (card) {
+ return !lib.filter.cardDiscardable(card, player, 'twjieyu');
+ }, 'h')
},
- check:function(event,player){
- var cards=[],names=[];
- for(var i=0;ieffect1;
+ check: function (event, player) {
+ var effect1 = get.effect(event.target, event.card, player, player);
+ var effect2 = 0, targets = lib.skill.twhengjiang.logTarget(event, player);
+ for (var i of targets) effect2 += get.effect(i, event.card, player, player);
+ return effect2 > effect1;
},
- content:function(){
- var targets=lib.skill.twhengjiang.logTarget(trigger,player);
- trigger.targets.length=0;
+ content: function () {
+ var targets = lib.skill.twhengjiang.logTarget(trigger, player);
+ trigger.targets.length = 0;
trigger.targets.addArray(targets);
- trigger.getParent().triggeredTargets1.length=0;
- trigger.getParent().twhengjiang_buffed=true;
- player.addTempSkill('twhengjiang2','phaseUseAfter');
+ trigger.getParent().triggeredTargets1.length = 0;
+ trigger.getParent().twhengjiang_buffed = true;
+ player.addTempSkill('twhengjiang2', 'phaseUseAfter');
},
},
- twhengjiang2:{
- charlotte:true,
- trigger:{player:'useCardAfter'},
- forced:true,
- popup:false,
- filter:function(event,player){
- return event.twhengjiang_buffed&&game.hasPlayer2(function(current){
- return current!=player&&(current.hasHistory('useCard',function(evt){
- return evt.respondTo&&evt.respondTo[1]==event.card;
- })||current.hasHistory('respond',function(evt){
- return evt.respondTo&&evt.respondTo[1]==event.card;
+ twhengjiang2: {
+ charlotte: true,
+ trigger: { player: 'useCardAfter' },
+ forced: true,
+ popup: false,
+ filter: function (event, player) {
+ return event.twhengjiang_buffed && game.hasPlayer2(function (current) {
+ return current != player && (current.hasHistory('useCard', function (evt) {
+ return evt.respondTo && evt.respondTo[1] == event.card;
+ }) || current.hasHistory('respond', function (evt) {
+ return evt.respondTo && evt.respondTo[1] == event.card;
}))
});
},
- content:function(){
- player.draw(game.countPlayer2(function(current){
- return current!=player&&(current.hasHistory('useCard',function(evt){
- return evt.respondTo&&evt.respondTo[1]==trigger.card;
- })||current.hasHistory('respond',function(evt){
- return evt.respondTo&&evt.respondTo[1]==trigger.card;
+ content: function () {
+ player.draw(game.countPlayer2(function (current) {
+ return current != player && (current.hasHistory('useCard', function (evt) {
+ return evt.respondTo && evt.respondTo[1] == trigger.card;
+ }) || current.hasHistory('respond', function (evt) {
+ return evt.respondTo && evt.respondTo[1] == trigger.card;
}))
}));
},
},
- twyuanhu:{
- audio:'yuanhu',
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.hasCard({type:'equip'},'eh');
+ twyuanhu: {
+ audio: 'yuanhu',
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.hasCard({ type: 'equip' }, 'eh');
},
- filterCard:{type:'equip'},
- filterTarget:function(card,player,target){
- var card=ui.selected.cards[0];
+ filterCard: { type: 'equip' },
+ filterTarget: function (card, player, target) {
+ var card = ui.selected.cards[0];
return target.canEquip(card);
},
- discard:false,
- lose:false,
- prepare:'give',
- position:'he',
- check:function(card){
- if(get.position(card)=='h') return 9-get.value(card);
- return 7-get.value(card);
+ discard: false,
+ lose: false,
+ prepare: 'give',
+ position: 'he',
+ check: function (card) {
+ if (get.position(card) == 'h') return 9 - get.value(card);
+ return 7 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
target.equip(cards[0]);
'step 1'
event.goto(3);
- switch(get.subtype(cards[0])){
+ switch (get.subtype(cards[0])) {
case 'equip1':
- if(game.hasPlayer(function(current){
- return current!=target&&get.distance(target,current)==1&¤t.countCards('hej')>0;
- })){
- player.chooseTarget(true,'弃置一名距离'+get.translation(target)+'为1的角色区域内的一张牌',function(card,player,target){
- var current=_status.event.current;
- return current!=target&&get.distance(current,target)==1&¤t.countCards('hej')>0;
- }).set('current',target).set('ai',function(target){
- var player=_status.event.player;
- return get.effect(target,{name:'guohe_copy'},player,player);
+ if (game.hasPlayer(function (current) {
+ return current != target && get.distance(target, current) == 1 && current.countCards('hej') > 0;
+ })) {
+ player.chooseTarget(true, '弃置一名距离' + get.translation(target) + '为1的角色区域内的一张牌', function (card, player, target) {
+ var current = _status.event.current;
+ return current != target && get.distance(current, target) == 1 && current.countCards('hej') > 0;
+ }).set('current', target).set('ai', function (target) {
+ var player = _status.event.player;
+ return get.effect(target, { name: 'guohe_copy' }, player, player);
});
event.goto(2);
}
@@ -13379,1683 +13379,1683 @@ game.import('character',function(lib,game,ui,get,ai,_status){
break;
}
'step 2'
- var target=result.targets[0];
+ var target = result.targets[0];
player.line(target);
- player.discardPlayerCard(target,true,'hej');
+ player.discardPlayerCard(target, true, 'hej');
'step 3'
- if(target.hp<=player.hp||target.countCards('h')<=player.countCards('h')){
+ if (target.hp <= player.hp || target.countCards('h') <= player.countCards('h')) {
player.draw();
player.addTempSkill('twyuanhu_end');
}
},
- ai:{
- order:10,
- result:{
- player:function(player,target){
- if(get.attitude(player,target)==0) return 0;
- if(!ui.selected.cards.length) return;
- var eff=get.effect(target,ui.selected.cards[0],player,player),sub=get.subtype(ui.selected.cards[0],false);
- if(target==player) eff+=4;
- else{
- var hp=player.hp,hs=player.countCards('h',(card)=>card!=ui.selected.cards[0]);
- var tp=target.hp,ts=target.countCards('h');
- if(sub=='equip2') ts++;
- if(tp card != ui.selected.cards[0]);
+ var tp = target.hp, ts = target.countCards('h');
+ if (sub == 'equip2') ts++;
+ if (tp < target.maxHp && (sub == 'equip3' || sub == 'equip4' || sub == 'equip5')) tp++;
+ if (tp <= hp || ts <= hs) eff += 2;
}
- if(sub=='equip1'){
- var list=game.filterPlayer(function(current){
- return current!=target&&get.distance(target,current)==1&¤t.countCards('hej')<0;
- }).map(function(i){
- return get.effect(i,{name:'guohe_copy'},player,player);
- }).sort((a,b)=>b-a);
- if(list.length) eff+=list[0];
+ if (sub == 'equip1') {
+ var list = game.filterPlayer(function (current) {
+ return current != target && get.distance(target, current) == 1 && current.countCards('hej') < 0;
+ }).map(function (i) {
+ return get.effect(i, { name: 'guohe_copy' }, player, player);
+ }).sort((a, b) => b - a);
+ if (list.length) eff += list[0];
}
return eff;
},
- target:function(player,target){
- if(!ui.selected.cards.length) return 0;
- var sub=get.subtype(ui.selected.cards[0],false);
- var eff=get.effect(target,ui.selected.cards[0],player,target);
- if(sub=='equip2') eff+=(get.effect(target,{name:'draw'},target,target));
- if(target.isDamaged()&&(sub=='equip3'||sub=='equip4'||sub=='equip5')) eff+=get.recoverEffect(target,player,player);
+ target: function (player, target) {
+ if (!ui.selected.cards.length) return 0;
+ var sub = get.subtype(ui.selected.cards[0], false);
+ var eff = get.effect(target, ui.selected.cards[0], player, target);
+ if (sub == 'equip2') eff += (get.effect(target, { name: 'draw' }, target, target));
+ if (target.isDamaged() && (sub == 'equip3' || sub == 'equip4' || sub == 'equip5')) eff += get.recoverEffect(target, player, player);
return eff;
},
},
},
- subSkill:{
- end:{
- trigger:{player:'phaseJieshuBegin'},
- direct:true,
- charlotte:true,
- filter:function(event,player){
- return player.hasSkill('twyuanhu')&&player.hasCard({type:'equip'},'eh');
+ subSkill: {
+ end: {
+ trigger: { player: 'phaseJieshuBegin' },
+ direct: true,
+ charlotte: true,
+ filter: function (event, player) {
+ return player.hasSkill('twyuanhu') && player.hasCard({ type: 'equip' }, 'eh');
},
- content:function(){
+ content: function () {
'step 0'
player.chooseCardTarget({
- prompt:get.prompt('twyuanhu'),
- prompt2:'将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌或宝物牌,其回复1点体力。然后若其体力值或手牌数不大于你,则你摸一张牌。',
- filterCard:lib.skill.twyuanhu.filterCard,
- filterTarget:lib.skill.twyuanhu.filterTarget,
- position:'he',
- ai1:lib.skill.twyuanhu.check,
- ai2:function(target){
- var player=_status.event.player;
- return get.effect(target,'twyuanhu',player,player);
+ prompt: get.prompt('twyuanhu'),
+ prompt2: '将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌或宝物牌,其回复1点体力。然后若其体力值或手牌数不大于你,则你摸一张牌。',
+ filterCard: lib.skill.twyuanhu.filterCard,
+ filterTarget: lib.skill.twyuanhu.filterTarget,
+ position: 'he',
+ ai1: lib.skill.twyuanhu.check,
+ ai2: function (target) {
+ var player = _status.event.player;
+ return get.effect(target, 'twyuanhu', player, player);
},
});
'step 1'
- if(result.bool){
- result.skill='twyuanhu';
- player.useResult(result,event);
+ if (result.bool) {
+ result.skill = 'twyuanhu';
+ player.useResult(result, event);
}
},
},
},
},
- twjuezhu:{
- audio:2,
- limited:true,
- trigger:{player:'phaseZhunbeiBegin'},
- direct:true,
- filter:function(event,player){
- return player.hasEnabledSlot(3)||player.hasEnabledSlot(4);
+ twjuezhu: {
+ audio: 2,
+ limited: true,
+ trigger: { player: 'phaseZhunbeiBegin' },
+ direct: true,
+ filter: function (event, player) {
+ return player.hasEnabledSlot(3) || player.hasEnabledSlot(4);
},
- skillAnimation:true,
- animationColor:'water',
- content:function(){
+ skillAnimation: true,
+ animationColor: 'water',
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt2('twjuezhu'),[1,2],function(card,player,target){
- return !ui.selected.targets.length&&!target.hasSkill('feiying');
- }).set('promptbar','none').set('ai',function(target){
- if(player.hasUnknown()) return false;
- return get.attitude(player,target);
+ player.chooseTarget(get.prompt2('twjuezhu'), [1, 2], function (card, player, target) {
+ return !ui.selected.targets.length && !target.hasSkill('feiying');
+ }).set('promptbar', 'none').set('ai', function (target) {
+ if (player.hasUnknown()) return false;
+ return get.attitude(player, target);
});
'step 1'
- if(result.bool){
- event.target=result.targets[0];
- var list=[];
- if(player.hasEnabledSlot(3)) list.push('equip3');
- if(player.hasEnabledSlot(4)) list.push('equip4');
- if(list.length==1) event._result={control:list[0]};
- else player.chooseControl(list).set('prompt','选择废除一个坐骑栏');
+ if (result.bool) {
+ event.target = result.targets[0];
+ var list = [];
+ if (player.hasEnabledSlot(3)) list.push('equip3');
+ if (player.hasEnabledSlot(4)) list.push('equip4');
+ if (list.length == 1) event._result = { control: list[0] };
+ else player.chooseControl(list).set('prompt', '选择废除一个坐骑栏');
}
else event.finish();
'step 2'
- player.logSkill('twjuezhu',target);
+ player.logSkill('twjuezhu', target);
player.awakenSkill('twjuezhu');
player.disableEquip(result.control);
target.disableJudge();
- player.markAuto('twjuezhu_restore',[[target,result.control]]);
+ player.markAuto('twjuezhu_restore', [[target, result.control]]);
player.addSkill('twjuezhu_restore');
target.addSkills('feiying');
},
- subSkill:{
- restore:{
- trigger:{global:'die'},
- forced:true,
- charlotte:true,
- filter:function(event,player){
- for(var i of player.getStorage('twjuezhu_restore')){
- if(i[0]==event.player&&player.hasDisabledSlot(i[1])) return true;
+ subSkill: {
+ restore: {
+ trigger: { global: 'die' },
+ forced: true,
+ charlotte: true,
+ filter: function (event, player) {
+ for (var i of player.getStorage('twjuezhu_restore')) {
+ if (i[0] == event.player && player.hasDisabledSlot(i[1])) return true;
}
return false;
},
- content:function(){
- var list=[];
- for(var i of player.getStorage('twjuezhu_restore')){
- if(i[0]==trigger.player&&player.hasDisabledSlot(i[1])) list.push(i[1]);
+ content: function () {
+ var list = [];
+ for (var i of player.getStorage('twjuezhu_restore')) {
+ if (i[0] == trigger.player && player.hasDisabledSlot(i[1])) list.push(i[1]);
}
player.enableEquip(list);
},
},
},
- derivation:'feiying',
+ derivation: 'feiying',
},
- twfengpo:{
- audio:'fengpo',
- trigger:{player:'useCardToPlayered'},
- logTarget:'target',
- filter:function(event,player){
- return (event.card.name=='sha'||event.card.name=='juedou')&&event.targets.length==1&&event.target.countCards('h')>0;
+ twfengpo: {
+ audio: 'fengpo',
+ trigger: { player: 'useCardToPlayered' },
+ logTarget: 'target',
+ filter: function (event, player) {
+ return (event.card.name == 'sha' || event.card.name == 'juedou') && event.targets.length == 1 && event.target.countCards('h') > 0;
},
- onremove:true,
- content:function(){
+ onremove: true,
+ content: function () {
'step 0'
- event.target=trigger.target;
+ event.target = trigger.target;
player.viewHandcards(trigger.target);
'step 1'
- var num=target.countCards('h',player.storage.twfengpo?{color:'red'}:{suit:'diamond'});
- if(!num){
+ var num = target.countCards('h', player.storage.twfengpo ? { color: 'red' } : { suit: 'diamond' });
+ if (!num) {
event.finish();
return;
}
- event.num=num;
- player.chooseControl().set('choiceList',[
- '摸'+num+'张牌',
- '令'+get.translation(trigger.card)+'的伤害值基数+'+num,
+ event.num = num;
+ player.chooseControl().set('choiceList', [
+ '摸' + num + '张牌',
+ '令' + get.translation(trigger.card) + '的伤害值基数+' + num,
]);
'step 2'
- if(result.index==0) player.draw(num);
- else trigger.getParent().baseDamage+=num;
+ if (result.index == 0) player.draw(num);
+ else trigger.getParent().baseDamage += num;
},
- group:'twfengpo_kill',
- subSkill:{
- kill:{
- audio:'fengpo',
- trigger:{source:'die'},
- forced:true,
- filter:(event,player)=>!player.storage.twfengpo,
- skillAnimation:true,
- animationColor:'fire',
- content:function(){
- player.storage.twfengpo=true;
+ group: 'twfengpo_kill',
+ subSkill: {
+ kill: {
+ audio: 'fengpo',
+ trigger: { source: 'die' },
+ forced: true,
+ filter: (event, player) => !player.storage.twfengpo,
+ skillAnimation: true,
+ animationColor: 'fire',
+ content: function () {
+ player.storage.twfengpo = true;
player.popup('凤魄');
- game.log(player,'恢复了技能','#g【凤魄】');
+ game.log(player, '恢复了技能', '#g【凤魄】');
},
},
},
},
- twmouzhu:{
- audio:'mouzhu',
- enable:'phaseUse',
- usable:1,
- filterTarget:lib.filter.notMe,
- contentBefore:function(){
- var target=targets[0],evt=event.getParent();
- evt._target=target;
- var list=game.filterPlayer(function(current){
- return current!=player&¤t!=target&¤t.hp<=player.hp;
+ twmouzhu: {
+ audio: 'mouzhu',
+ enable: 'phaseUse',
+ usable: 1,
+ filterTarget: lib.filter.notMe,
+ contentBefore: function () {
+ var target = targets[0], evt = event.getParent();
+ evt._target = target;
+ var list = game.filterPlayer(function (current) {
+ return current != player && current != target && current.hp <= player.hp;
});
- if(!list.length){
+ if (!list.length) {
player.loseHp();
evt.finish();
}
- else{
- evt.targets=list.sortBySeat();
+ else {
+ evt.targets = list.sortBySeat();
player.line(list);
}
},
- content:function(){
+ content: function () {
'step 0'
- target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?').set('ai',function(card){
- if(_status.event.goon) return 7-get.value(card);
+ target.chooseCard('he', '是否交给' + get.translation(player) + '一张牌?').set('ai', function (card) {
+ if (_status.event.goon) return 7 - get.value(card);
return 0;
- }).set('goon',get.attitude(target,player)>0);
+ }).set('goon', get.attitude(target, player) > 0);
'step 1'
- if(result.bool){
- target.give(result.cards,player);
+ if (result.bool) {
+ target.give(result.cards, player);
}
- else{
- game.log(target,'拒绝给牌');
+ else {
+ game.log(target, '拒绝给牌');
}
},
- contentAfter:function(){
+ contentAfter: function () {
'step 0'
- var num=0,par=event.getParent();
- player.getHistory('gain',function(evt){
- if(evt.getParent(2)==par) num+=evt.cards.length;
+ var num = 0, par = event.getParent();
+ player.getHistory('gain', function (evt) {
+ if (evt.getParent(2) == par) num += evt.cards.length;
});
- if(!num){
+ if (!num) {
player.loseHp();
- for(var i of targets) i.loseHp();
+ for (var i of targets) i.loseHp();
event.finish();
}
- else{
- var target=event.getParent()._target;
- event.target=target;
- event.num=num;
- var bool1=player.canUse('sha',target,false),bool2=player.canUse('juedou',target,false);
- if(bool1&&bool2) target.chooseControl('sha','juedou').set('prompt','谋诛:视为被'+get.translation(player)+'使用一张…').set('prompt2','(伤害值基数:'+num+')').set('ai',function(){
- var target=_status.event.player,player=_status.event.getParent().player;
- if(target.hasShan()||get.effect(target,{name:'sha'},player,target)>0) return 'sha';
- if(get.effect(target,{name:'juedou'},player,target)>0) return 'juedou';
+ else {
+ var target = event.getParent()._target;
+ event.target = target;
+ event.num = num;
+ var bool1 = player.canUse('sha', target, false), bool2 = player.canUse('juedou', target, false);
+ if (bool1 && bool2) target.chooseControl('sha', 'juedou').set('prompt', '谋诛:视为被' + get.translation(player) + '使用一张…').set('prompt2', '(伤害值基数:' + num + ')').set('ai', function () {
+ var target = _status.event.player, player = _status.event.getParent().player;
+ if (target.hasShan() || get.effect(target, { name: 'sha' }, player, target) > 0) return 'sha';
+ if (get.effect(target, { name: 'juedou' }, player, target) > 0) return 'juedou';
return 'sha';
});
- else if(bool1) event._result={control:'sha'};
- else if(bool2) event._result={control:'juedou'};
+ else if (bool1) event._result = { control: 'sha' };
+ else if (bool2) event._result = { control: 'juedou' };
else event.finish();
}
'step 1'
- if(result.control&&lib.card[result.control]) player.useCard({
- name:result.control,
- isCard:true,
- },false,target).baseDamage=num;
+ if (result.control && lib.card[result.control]) player.useCard({
+ name: result.control,
+ isCard: true,
+ }, false, target).baseDamage = num;
},
- ai:{
- order:9,
- result:{
- target:function(player,target){
- if(get.attitude(player,target)>=0) return 0;
- var list=game.filterPlayer(function(current){
- return current!=player&¤t!=target&¤t.hp<=player.hp;
+ ai: {
+ order: 9,
+ result: {
+ target: function (player, target) {
+ if (get.attitude(player, target) >= 0) return 0;
+ var list = game.filterPlayer(function (current) {
+ return current != player && current != target && current.hp <= player.hp;
});
- if(!list.length) return 0;
- return -Math.min(-get.effect(target,{name:'sha'},player,target),-get.effect(target,{name:'juedou'},player,target))*list.reduce(function(num,current){
- return num+(2+get.sgn(get.attitude(current,player)));
- },0);
+ if (!list.length) return 0;
+ return -Math.min(-get.effect(target, { name: 'sha' }, player, target), -get.effect(target, { name: 'juedou' }, player, target)) * list.reduce(function (num, current) {
+ return num + (2 + get.sgn(get.attitude(current, player)));
+ }, 0);
},
},
},
},
- twyanhuo:{
- audio:'yanhuo',
- trigger:{player:'die'},
- direct:true,
- forceDie:true,
- skillAnimation:true,
- animationColor:'thunder',
- filter:function(event,player){
- return player.countCards('he')>0&&game.hasPlayer(function(current){
- return current!=player&¤t.countCards('h')>0;
+ twyanhuo: {
+ audio: 'yanhuo',
+ trigger: { player: 'die' },
+ direct: true,
+ forceDie: true,
+ skillAnimation: true,
+ animationColor: 'thunder',
+ filter: function (event, player) {
+ return player.countCards('he') > 0 && game.hasPlayer(function (current) {
+ return current != player && current.countCards('h') > 0;
});
},
- content:function(){
+ content: function () {
'step 0'
- var num=player.countCards('he'),str=get.cnNumber(num);
- event.num1=num;
- event.num2=1;
- var list=['令一名其他角色弃置'+str+'张牌'];
- if(num>1){
- list.push('令至多'+str+'名其他角色各弃置一张牌');
+ var num = player.countCards('he'), str = get.cnNumber(num);
+ event.num1 = num;
+ event.num2 = 1;
+ var list = ['令一名其他角色弃置' + str + '张牌'];
+ if (num > 1) {
+ list.push('令至多' + str + '名其他角色各弃置一张牌');
}
- player.chooseControl('cancel2').set('choiceList',list).set('prompt',get.prompt('twyanhuo')).set('forceDie',true);
+ player.chooseControl('cancel2').set('choiceList', list).set('prompt', get.prompt('twyanhuo')).set('forceDie', true);
'step 1'
- if(result.control!='cancel2'){
- if(result.index==0){
- event.num2=event.num1;
- event.num1=1;
+ if (result.control != 'cancel2') {
+ if (result.index == 0) {
+ event.num2 = event.num1;
+ event.num1 = 1;
}
- player.chooseTarget([1,event.num1],true,'请选择【延祸】的目标',function(card,player,target){
- return target!=player&&target.countCards('he')>0;
- }).set('forceDie',true).set('ai',function(target){
- return -get.attitude(_status.event.player,target)
+ player.chooseTarget([1, event.num1], true, '请选择【延祸】的目标', function (card, player, target) {
+ return target != player && target.countCards('he') > 0;
+ }).set('forceDie', true).set('ai', function (target) {
+ return -get.attitude(_status.event.player, target)
});
}
else event.finish();
'step 2'
- if(result.bool){
- var targets=result.targets.sortBySeat();
- player.logSkill('twyanhuo',targets);
- for(var i of targets) i.chooseToDiscard(true,'he',event.num2);
+ if (result.bool) {
+ var targets = result.targets.sortBySeat();
+ player.logSkill('twyanhuo', targets);
+ for (var i of targets) i.chooseToDiscard(true, 'he', event.num2);
}
},
},
- twshenxing:{
- mod:{
- globalFrom:function(player,target,distance){
- var es=player.getCards('e',function(card){
+ twshenxing: {
+ mod: {
+ globalFrom: function (player, target, distance) {
+ var es = player.getCards('e', function (card) {
return !ui.selected.cards.includes(card);
});
- for(var i of es){
- var type=get.subtype(i);
- if(type=='equip3'||type=='equip4'||type=='equip6') return distance;
+ for (var i of es) {
+ var type = get.subtype(i);
+ if (type == 'equip3' || type == 'equip4' || type == 'equip6') return distance;
}
- return distance-1;
+ return distance - 1;
},
- maxHandcard:function(player,distance){
- var es=player.getCards('e',function(card){
+ maxHandcard: function (player, distance) {
+ var es = player.getCards('e', function (card) {
return !ui.selected.cards.includes(card);
});
- for(var i of es){
- var type=get.subtype(i);
- if(type=='equip3'||type=='equip4'||type=='equip6') return distance;
+ for (var i of es) {
+ var type = get.subtype(i);
+ if (type == 'equip3' || type == 'equip4' || type == 'equip6') return distance;
}
- return distance+1;
+ return distance + 1;
},
},
},
- twdaoji:{
- audio:'daoji',
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.hasCard(lib.skill.twdaoji.filterCard,'he');
+ twdaoji: {
+ audio: 'daoji',
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.hasCard(lib.skill.twdaoji.filterCard, 'he');
},
- filterCard:function(card){
- return get.type(card)!='basic';
+ filterCard: function (card) {
+ return get.type(card) != 'basic';
},
- position:'he',
- filterTarget:function(card,player,target){
- return target!=player&&player.inRange(target)&&target.hasCard((card)=>lib.filter.canBeGained(card,target,player),'he');
+ position: 'he',
+ filterTarget: function (card, player, target) {
+ return target != player && player.inRange(target) && target.hasCard((card) => lib.filter.canBeGained(card, target, player), 'he');
},
- check:function(card){
- return 8-get.value(card);
+ check: function (card) {
+ return 8 - get.value(card);
},
- content:function(){
+ content: function () {
'step 0'
- player.gainPlayerCard(target,'he',true);
+ player.gainPlayerCard(target, 'he', true);
'step 1'
- if(result.bool&&result.cards&&result.cards.length==1){
- var card=result.cards[0];
- if(player.getCards('h').includes(card)){
- var type=get.type(card);
- if(type=='basic') player.draw();
- else if(type=='equip'){
- if(player.hasUseTarget(card)) player.chooseUseTarget(card,'nopopup',true);
+ if (result.bool && result.cards && result.cards.length == 1) {
+ var card = result.cards[0];
+ if (player.getCards('h').includes(card)) {
+ var type = get.type(card);
+ if (type == 'basic') player.draw();
+ else if (type == 'equip') {
+ if (player.hasUseTarget(card)) player.chooseUseTarget(card, 'nopopup', true);
target.damage('nocard');
}
}
}
},
- ai:{
- order:6,
- result:{
- target:function(player,target){
- var eff=get.effect(target,{name:'shunshou_copy2'},player,target);
- if(target.countCards('e')>0) eff+=get.damageEffect(target,player,target);
+ ai: {
+ order: 6,
+ result: {
+ target: function (player, target) {
+ var eff = get.effect(target, { name: 'shunshou_copy2' }, player, target);
+ if (target.countCards('e') > 0) eff += get.damageEffect(target, player, target);
return eff;
},
},
},
},
- xinzhenjun:{
- audio:2,
- trigger:{
- player:'phaseUseBegin'
+ xinzhenjun: {
+ audio: 2,
+ trigger: {
+ player: 'phaseUseBegin'
},
- direct:true,
- filter:function(event,player){
- return player.countCards('he')>0;
+ direct: true,
+ filter: function (event, player) {
+ return player.countCards('he') > 0;
},
- content:function(){
+ content: function () {
'step 0'
player.chooseCardTarget({
- filterCard:true,
- filterTarget:lib.filter.notMe,
- position:'he',
- prompt:get.prompt2('xinzhenjun'),
- ai1:function(card){
- var player=_status.event.player;
- if(card.name=='sha'&&get.color(card)=='red'){
- for(var i=0;i0&¤t.hasValueTarget(card)) return 7;
+ filterCard: true,
+ filterTarget: lib.filter.notMe,
+ position: 'he',
+ prompt: get.prompt2('xinzhenjun'),
+ ai1: function (card) {
+ var player = _status.event.player;
+ if (card.name == 'sha' && get.color(card) == 'red') {
+ for (var i = 0; i < game.players.length; i++) {
+ var current = game.players[i];
+ if (current != player && get.attitude(player, current) > 0 && current.hasValueTarget(card)) return 7;
}
return 0;
}
- return 7-get.value(card);
+ return 7 - get.value(card);
},
- ai2:function(target){
- var player=_status.event.player;
- var card=ui.selected.cards[0];
- var att=get.attitude(player,target);
- if(get.value(card)<0) return -att*2;
- if(target.countCards('h',{name:'sha',color:'red'})||target.hasSkill('wusheng')||target.hasSkill('new_rewusheng')||target.hasSkill('wushen')||(card.name=='sha'&&get.color(card)=='red'&&target.hasValueTarget(card))) return att*2;
- var eff=0;
- game.countPlayer(function(current){
- if(target!=current&&get.distance(target,current,'attack')>1) return;
- var eff2=get.damageEffect(current,player,player);
- if(eff2>eff) eff=eff2;
+ ai2: function (target) {
+ var player = _status.event.player;
+ var card = ui.selected.cards[0];
+ var att = get.attitude(player, target);
+ if (get.value(card) < 0) return -att * 2;
+ if (target.countCards('h', { name: 'sha', color: 'red' }) || target.hasSkill('wusheng') || target.hasSkill('new_rewusheng') || target.hasSkill('wushen') || (card.name == 'sha' && get.color(card) == 'red' && target.hasValueTarget(card))) return att * 2;
+ var eff = 0;
+ game.countPlayer(function (current) {
+ if (target != current && get.distance(target, current, 'attack') > 1) return;
+ var eff2 = get.damageEffect(current, player, player);
+ if (eff2 > eff) eff = eff2;
});
- if(att>0&&eff>0) eff+=2*att;
+ if (att > 0 && eff > 0) eff += 2 * att;
return eff;
},
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- event.target=target;
- player.logSkill('xinzhenjun',target);
- player.give(result.cards,target)
+ if (result.bool) {
+ var target = result.targets[0];
+ event.target = target;
+ player.logSkill('xinzhenjun', target);
+ player.give(result.cards, target)
}
else event.finish();
'step 2'
target.chooseToUse({
- filterCard:function(card){
- return get.name(card)=='sha'&&get.color(card)!='black'&&lib.filter.cardEnabled.apply(this,arguments);
+ filterCard: function (card) {
+ return get.name(card) == 'sha' && get.color(card) != 'black' && lib.filter.cardEnabled.apply(this, arguments);
},
- prompt:'请使用一张不为黑色的【杀】,否则'+get.translation(player)+'可以对你或你攻击范围内的一名其他角色造成1点伤害',
+ prompt: '请使用一张不为黑色的【杀】,否则' + get.translation(player) + '可以对你或你攻击范围内的一名其他角色造成1点伤害',
});
'step 3'
- if(result.bool){
- var num=1;
- game.countPlayer2(function(current){
- current.getHistory('damage',function(evt){
- if(evt.getParent(evt.notLink()?4:8)==event) num+=evt.num;
+ if (result.bool) {
+ var num = 1;
+ game.countPlayer2(function (current) {
+ current.getHistory('damage', function (evt) {
+ if (evt.getParent(evt.notLink() ? 4 : 8) == event) num += evt.num;
});
});
player.draw(num);
event.finish();
}
- else{
- player.chooseTarget('是否对'+get.translation(target)+'或其攻击范围内的一名角色造成1点伤害?',function(card,player,target){
- return target==_status.event.targetx||_status.event.targetx.inRange(target);
- }).set('targetx',event.target).ai=function(target){
- var player=_status.event.player;
- return get.damageEffect(target,player,player)
+ else {
+ player.chooseTarget('是否对' + get.translation(target) + '或其攻击范围内的一名角色造成1点伤害?', function (card, player, target) {
+ return target == _status.event.targetx || _status.event.targetx.inRange(target);
+ }).set('targetx', event.target).ai = function (target) {
+ var player = _status.event.player;
+ return get.damageEffect(target, player, player)
};
}
'step 4'
- if(result.bool){
+ if (result.bool) {
player.line(result.targets);
result.targets[0].damage('nocard');
}
},
},
- twmoukui:{
- audio:'moukui',
- trigger:{player:'useCardToPlayered'},
- direct:true,
- preHidden:true,
- filter:function(event,player){
- return event.card&&event.card.name=='sha';
+ twmoukui: {
+ audio: 'moukui',
+ trigger: { player: 'useCardToPlayered' },
+ direct: true,
+ preHidden: true,
+ filter: function (event, player) {
+ return event.card && event.card.name == 'sha';
},
- content:function(){
+ content: function () {
'step 0'
- var list=['选项一'];
- if(trigger.target.countDiscardableCards(player,'he')>0) list.push('选项二');
+ var list = ['选项一'];
+ if (trigger.target.countDiscardableCards(player, 'he') > 0) list.push('选项二');
list.push('背水!');
list.push('cancel2');
- player.chooseControl(list).set('choiceList',[
+ player.chooseControl(list).set('choiceList', [
'摸一张牌',
- '弃置'+get.translation(trigger.target)+'的一张牌',
+ '弃置' + get.translation(trigger.target) + '的一张牌',
'背水!依次执行以上两项。然后若此【杀】未令其进入濒死状态,则其弃置你的一张牌。',
- ]).set('prompt',get.prompt('twmoukui',trigger.target)).setHiddenSkill('twmoukui');
+ ]).set('prompt', get.prompt('twmoukui', trigger.target)).setHiddenSkill('twmoukui');
'step 1'
- if(result.control!='cancel2'){
- var target=trigger.target;
- player.logSkill('twmoukui',target);
- if(result.control=='选项一'||result.control=='背水!') player.draw();
- if(result.control=='选项二'||result.control=='背水!') player.discardPlayerCard(target,true,'he');
- if(result.control=='背水!'){
+ if (result.control != 'cancel2') {
+ var target = trigger.target;
+ player.logSkill('twmoukui', target);
+ if (result.control == '选项一' || result.control == '背水!') player.draw();
+ if (result.control == '选项二' || result.control == '背水!') player.discardPlayerCard(target, true, 'he');
+ if (result.control == '背水!') {
player.addTempSkill('twmoukui_effect');
- var evt=trigger.getParent();
- if(!evt.twmoukui_effect) evt.twmoukui_effect=[];
+ var evt = trigger.getParent();
+ if (!evt.twmoukui_effect) evt.twmoukui_effect = [];
evt.twmoukui_effect.add(target);
}
}
},
- subSkill:{
- effect:{
- trigger:{player:'useCardAfter'},
- charlotte:true,
- forced:true,
- filter:function(event,player){
- return event.twmoukui_effect&&event.twmoukui_effect.filter(function(current){
- return current.isIn()&&!current.hasHistory('damage',function(evt){
- return evt._dyinged&&evt.card==event.card;
+ subSkill: {
+ effect: {
+ trigger: { player: 'useCardAfter' },
+ charlotte: true,
+ forced: true,
+ filter: function (event, player) {
+ return event.twmoukui_effect && event.twmoukui_effect.filter(function (current) {
+ return current.isIn() && !current.hasHistory('damage', function (evt) {
+ return evt._dyinged && evt.card == event.card;
});
- }).length>0;
+ }).length > 0;
},
- content:function(){
- var list=trigger.twmoukui_effect.filter(function(current){
- return current.isIn()&&!current.hasHistory('damage',function(evt){
- return evt._dyinged&&evt.card==event.card;
+ content: function () {
+ var list = trigger.twmoukui_effect.filter(function (current) {
+ return current.isIn() && !current.hasHistory('damage', function (evt) {
+ return evt._dyinged && evt.card == event.card;
});
}).sortBySeat();
- for(var i of list){
- i.discardPlayerCard(player,true,'he').boolline=true;
+ for (var i of list) {
+ i.discardPlayerCard(player, true, 'he').boolline = true;
}
},
},
},
},
- twfuhan:{
- audio:'fuhan',
- trigger:{player:'phaseZhunbeiBegin'},
- unique:true,
- limited:true,
- skillAnimation:true,
- animationColor:'orange',
- forceunique:true,
- filter:function(event,player){
- return player.countMark('fanghun')>0;
+ twfuhan: {
+ audio: 'fuhan',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ unique: true,
+ limited: true,
+ skillAnimation: true,
+ animationColor: 'orange',
+ forceunique: true,
+ filter: function (event, player) {
+ return player.countMark('fanghun') > 0;
},
- prompt:function(event,player){
- var num=Math.max(2,player.storage.fanghun);
- num=Math.min(num,8);
- return get.prompt('twfuhan')+'(体力上限:'+num+')';
+ prompt: function (event, player) {
+ var num = Math.max(2, player.storage.fanghun);
+ num = Math.min(num, 8);
+ return get.prompt('twfuhan') + '(体力上限:' + num + ')';
},
- check:function(event,player){
- if(player.storage.fanghun>=Math.min(4,player.maxHp)) return true;
- if(player.hp<=2&&player.storage.fanghun>=3) return true;
+ check: function (event, player) {
+ if (player.storage.fanghun >= Math.min(4, player.maxHp)) return true;
+ if (player.hp <= 2 && player.storage.fanghun >= 3) return true;
return false;
},
- content:function(){
+ content: function () {
'step 0'
- var num=Math.max(2,player.storage.fanghun);
- num=Math.min(num,8);
- event.num=num;
- player.removeMark('fanghun',player.storage.fanghun);
+ var num = Math.max(2, player.storage.fanghun);
+ num = Math.min(num, 8);
+ event.num = num;
+ player.removeMark('fanghun', player.storage.fanghun);
player.awakenSkill('twfuhan');
- if(_status.characterlist){
- list=[];
- for(var i=0;i<_status.characterlist.length;i++){
- var name=_status.characterlist[i];
- if(lib.character[name][1]=='shu') list.push(name);
+ if (_status.characterlist) {
+ list = [];
+ for (var i = 0; i < _status.characterlist.length; i++) {
+ var name = _status.characterlist[i];
+ if (lib.character[name][1] == 'shu') list.push(name);
}
}
- else if(_status.connectMode){
- list=get.charactersOL(function(i){
- return lib.character[i][1]!='shu';
+ else if (_status.connectMode) {
+ list = get.charactersOL(function (i) {
+ return lib.character[i][1] != 'shu';
});
}
- else{
- list=get.gainableCharacters(function(info){
- return info[1]=='shu';
+ else {
+ list = get.gainableCharacters(function (info) {
+ return info[1] == 'shu';
});
}
- var players=game.players.concat(game.dead);
- for(var i=0;i0) player.gainMaxHp(num);
+ var num = event.num - player.maxHp;
+ if (num > 0) player.gainMaxHp(num);
else player.loseMaxHp(-num);
player.recover();
'step 3'
- var card=get.cardPile('meiyingqiang','field');
- if(card){
- player.gain(card,'gain2','log');
+ var card = get.cardPile('meiyingqiang', 'field');
+ if (card) {
+ player.gain(card, 'gain2', 'log');
}
},
},
- twqueshi:{
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
+ twqueshi: {
+ trigger: {
+ global: 'phaseBefore',
+ player: 'enterGame',
},
- forced:true,
- locked:false,
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&player.hasEquipableSlot(1);
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ return (event.name != 'phase' || game.phaseNumber == 0) && player.hasEquipableSlot(1);
},
- content:function(){
- if(!lib.inpile.includes('meiyingqiang')){
+ content: function () {
+ if (!lib.inpile.includes('meiyingqiang')) {
lib.inpile.push('meiyingqiang');
- player.equip(game.createCard('meiyingqiang','diamond',12));
+ player.equip(game.createCard('meiyingqiang', 'diamond', 12));
}
- else{
- var card=get.cardPile(function(card){
- return card.name=='meiyingqiang'&&!player.getEquips(1).includes(card);
- },'field');
- if(card) player.equip(card);
+ else {
+ var card = get.cardPile(function (card) {
+ return card.name == 'meiyingqiang' && !player.getEquips(1).includes(card);
+ }, 'field');
+ if (card) player.equip(card);
}
},
},
- meiyingqiang:{
- equipSkill:true,
- trigger:{
- player:['loseAfter'],
- global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ meiyingqiang: {
+ equipSkill: true,
+ trigger: {
+ player: ['loseAfter'],
+ global: ['equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
},
- filter:function(event,player){
- if(player==_status.currentPhase) return false;
- var evt=event.getl(player);
- if(!evt||!evt.cards2||!evt.cards2.length) return false;
- var list=player.getHistory('lose',function(evt){
- return evt.cards2&&evt.cards2.length;
+ filter: function (event, player) {
+ if (player == _status.currentPhase) return false;
+ var evt = event.getl(player);
+ if (!evt || !evt.cards2 || !evt.cards2.length) return false;
+ var list = player.getHistory('lose', function (evt) {
+ return evt.cards2 && evt.cards2.length;
});
- if(event.name=='lose'){
- if(list.indexOf(event)!=0) return false;
+ if (event.name == 'lose') {
+ if (list.indexOf(event) != 0) return false;
}
- else{
- if(!player.hasHistory('lose',function(evt){
- return evt.getParent()==event&&list.indexOf(evt)==0;
+ else {
+ if (!player.hasHistory('lose', function (evt) {
+ return evt.getParent() == event && list.indexOf(evt) == 0;
})) return false;
}
- return _status.connectMode||!lib.config.skip_shan||player.hasSha();
+ return _status.connectMode || !lib.config.skip_shan || player.hasSha();
},
- direct:true,
- content:function(){
- if(trigger.delay===false) game.delayx();
- player.chooseToUse('梅影枪:是否使用一张【杀】?',function(card){
- if(get.name(card)!='sha') return false;
- return lib.filter.cardEnabled.apply(this,arguments);
- }).set('addCount',false).logSkill='meiyingqiang';
+ direct: true,
+ content: function () {
+ if (trigger.delay === false) game.delayx();
+ player.chooseToUse('梅影枪:是否使用一张【杀】?', function (card) {
+ if (get.name(card) != 'sha') return false;
+ return lib.filter.cardEnabled.apply(this, arguments);
+ }).set('addCount', false).logSkill = 'meiyingqiang';
},
},
- cuijin:{
- trigger:{global:'useCard'},
- direct:true,
- filter:function(event,player){
- return event.card.name=='sha'&&(event.player==player||player.inRange(event.player))&&player.countCards('he')>0;
+ cuijin: {
+ trigger: { global: 'useCard' },
+ direct: true,
+ filter: function (event, player) {
+ return event.card.name == 'sha' && (event.player == player || player.inRange(event.player)) && player.countCards('he') > 0;
},
- checkx(event,player){
- let d1=true,e=false;
- if(event.player.hasSkill('jueqing')||event.player.hasSkill('gangzhi')) d1=false;
- for(let tar of event.targets){
- if(!tar.mayHaveShan(player,'use',tar.getCards('h',i=>{
+ checkx(event, player) {
+ let d1 = true, e = false;
+ if (event.player.hasSkill('jueqing') || event.player.hasSkill('gangzhi')) d1 = false;
+ for (let tar of event.targets) {
+ if (!tar.mayHaveShan(player, 'use', tar.getCards('h', i => {
return i.hasGaintag('sha_notshan');
- }))||event.player.hasSkillTag('directHit_ai',true,{
- target:tar,
- card:event.card,
- },true)){
- if(!tar.hasSkill('gangzhi')) d1=false;
- if(!tar.hasSkillTag('filterDamage',null,{
- player:event.player,
- card:event.card,
- })){
- let att=get.attitude(_status.event.player,tar);
- if(att>0) return false;
- if(att<0) e=true;
+ })) || event.player.hasSkillTag('directHit_ai', true, {
+ target: tar,
+ card: event.card,
+ }, true)) {
+ if (!tar.hasSkill('gangzhi')) d1 = false;
+ if (!tar.hasSkillTag('filterDamage', null, {
+ player: event.player,
+ card: event.card,
+ })) {
+ let att = get.attitude(_status.event.player, tar);
+ if (att > 0) return false;
+ if (att < 0) e = true;
}
}
}
- if(e) return true;
- if(d1) return get.damageEffect(event.player,player,_status.event.player)>0;
+ if (e) return true;
+ if (d1) return get.damageEffect(event.player, player, _status.event.player) > 0;
return false;
},
- content:function(){
+ content: function () {
'step 0'
- if(player!=game.me&&!player.isOnline()) game.delayx();
- var target=trigger.player;
- event.target=target;
- player.chooseToDiscard('he',get.prompt('cuijin',target),'弃置一张牌并令'+get.translation(trigger.player)+'使用的【杀】伤害+1,但若其未造成伤害,则你对其造成1点伤害。').set('ai',function(card){
- if(_status.event.goon) return 7-get.value(card);
+ if (player != game.me && !player.isOnline()) game.delayx();
+ var target = trigger.player;
+ event.target = target;
+ player.chooseToDiscard('he', get.prompt('cuijin', target), '弃置一张牌并令' + get.translation(trigger.player) + '使用的【杀】伤害+1,但若其未造成伤害,则你对其造成1点伤害。').set('ai', function (card) {
+ if (_status.event.goon) return 7 - get.value(card);
return 0;
- }).set('goon',lib.skill.cuijin.checkx(trigger,player)).logSkill=['cuijin',target];
+ }).set('goon', lib.skill.cuijin.checkx(trigger, player)).logSkill = ['cuijin', target];
'step 1'
- if(result.bool){
- if(typeof trigger.baseDamage!='number') trigger.baseDamage=1;
+ if (result.bool) {
+ if (typeof trigger.baseDamage != 'number') trigger.baseDamage = 1;
trigger.baseDamage++;
player.addTempSkill('cuijin_damage');
- player.markAuto('cuijin_damage',[trigger.card]);
+ player.markAuto('cuijin_damage', [trigger.card]);
}
},
- subSkill:{
- damage:{
- trigger:{global:'useCardAfter'},
- forced:true,
- popup:false,
- charlotte:true,
- onremove:true,
- filter:function(event,player){
+ subSkill: {
+ damage: {
+ trigger: { global: 'useCardAfter' },
+ forced: true,
+ popup: false,
+ charlotte: true,
+ onremove: true,
+ filter: function (event, player) {
return player.storage.cuijin_damage.includes(event.card);
},
- content:function(){
+ content: function () {
player.storage.cuijin_damage.remove(trigger.card);
- if(!player.storage.cuijin_damage.length) player.removeSkill('cuijin_damage');
- if(trigger.player.isIn()&&!game.hasPlayer2(function(current){
- return current.hasHistory('damage',function(evt){
- return evt.card==trigger.card;
+ if (!player.storage.cuijin_damage.length) player.removeSkill('cuijin_damage');
+ if (trigger.player.isIn() && !game.hasPlayer2(function (current) {
+ return current.hasHistory('damage', function (evt) {
+ return evt.card == trigger.card;
});
- })){
- player.line(trigger.player,'green');
+ })) {
+ player.line(trigger.player, 'green');
trigger.player.damage();
}
},
},
},
},
- jintao:{
- mod:{
- cardUsable:function(card,player,num){
- if(card.name=='sha') return num+1;
+ jintao: {
+ mod: {
+ cardUsable: function (card, player, num) {
+ if (card.name == 'sha') return num + 1;
},
- targetInRange:function(card){
- if(card.name=='sha') return true;
+ targetInRange: function (card) {
+ if (card.name == 'sha') return true;
},
},
- audio:2,
- trigger:{player:'useCard'},
- forced:true,
- filter:function(event,player){
- if(event.card.name!='sha') return false;
- var evt=event.getParent('phaseUse');
- if(!evt||evt.player!=player) return false;
- var index=player.getHistory('useCard',function(evtx){
- return evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt;
+ audio: 2,
+ trigger: { player: 'useCard' },
+ forced: true,
+ filter: function (event, player) {
+ if (event.card.name != 'sha') return false;
+ var evt = event.getParent('phaseUse');
+ if (!evt || evt.player != player) return false;
+ var index = player.getHistory('useCard', function (evtx) {
+ return evtx.card.name == 'sha' && evtx.getParent('phaseUse') == evt;
}).indexOf(event);
- return index==0||index==1;
+ return index == 0 || index == 1;
},
- content:function(){
- var evt=trigger.getParent('phaseUse');
- var index=player.getHistory('useCard',function(evtx){
- return evtx.card.name=='sha'&&evtx.getParent('phaseUse')==evt;
+ content: function () {
+ var evt = trigger.getParent('phaseUse');
+ var index = player.getHistory('useCard', function (evtx) {
+ return evtx.card.name == 'sha' && evtx.getParent('phaseUse') == evt;
}).indexOf(trigger);
- if(index==0){
- game.log(trigger.card,'伤害+1');
- if(typeof trigger.baseDamage!='number') trigger.baseDamage=1;
+ if (index == 0) {
+ game.log(trigger.card, '伤害+1');
+ if (typeof trigger.baseDamage != 'number') trigger.baseDamage = 1;
trigger.baseDamage++;
}
- else{
- game.log(trigger.card,'不可被响应');
+ else {
+ game.log(trigger.card, '不可被响应');
trigger.directHit.addArray(game.players);
}
},
},
- equan:{
- audio:2,
- trigger:{global:'damageEnd'},
- forced:true,
- filter:function(event,player){
- return player==_status.currentPhase&&event.player.isIn();
+ equan: {
+ audio: 2,
+ trigger: { global: 'damageEnd' },
+ forced: true,
+ filter: function (event, player) {
+ return player == _status.currentPhase && event.player.isIn();
},
- logTarget:'player',
- content:function(){
- trigger.player.addMark('equan',trigger.num,false);
+ logTarget: 'player',
+ content: function () {
+ trigger.player.addMark('equan', trigger.num, false);
},
- group:['equan_block','equan_lose'],
- marktext:'毒',
- intro:{
- name:'恶泉(毒)',
- name2:'毒',
+ group: ['equan_block', 'equan_lose'],
+ marktext: '毒',
+ intro: {
+ name: '恶泉(毒)',
+ name2: '毒',
},
- subSkill:{
- lose:{
- audio:'equan',
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
- filter:function(){
- return game.hasPlayer(function(current){
+ subSkill: {
+ lose: {
+ audio: 'equan',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ forced: true,
+ filter: function () {
+ return game.hasPlayer(function (current) {
return current.hasMark('equan');
});
},
- logTarget:function(){
- return game.filterPlayer(function(current){
+ logTarget: function () {
+ return game.filterPlayer(function (current) {
return current.hasMark('equan');
});
},
- content:function(){
- game.countPlayer(function(current){
- var num=current.countMark('equan');
- if(num){
- current.removeMark('equan',num);
+ content: function () {
+ game.countPlayer(function (current) {
+ var num = current.countMark('equan');
+ if (num) {
+ current.removeMark('equan', num);
current.loseHp(num);
}
});
},
},
- block:{
- trigger:{global:'dyingBegin'},
- forced:true,
- logTarget:'player',
- filter:function(event,player){
- var evt=event.getParent(2);
- return evt.name=='equan_lose'&&evt.player==player;
+ block: {
+ trigger: { global: 'dyingBegin' },
+ forced: true,
+ logTarget: 'player',
+ filter: function (event, player) {
+ var evt = event.getParent(2);
+ return evt.name == 'equan_lose' && evt.player == player;
},
- content:function(){
+ content: function () {
trigger.player.addTempSkill('baiban');
},
},
},
},
- manji:{
- audio:2,
- trigger:{global:'loseHpAfter'},
- forced:true,
- filter:function(event,player){
- return player!=event.player&&(player.hp>=event.player.hp||player.isDamaged());
+ manji: {
+ audio: 2,
+ trigger: { global: 'loseHpAfter' },
+ forced: true,
+ filter: function (event, player) {
+ return player != event.player && (player.hp >= event.player.hp || player.isDamaged());
},
- logTarget:'player',
- content:function(){
- if(player.hp<=trigger.player.hp) player.recover();
- if(player.hp>=trigger.player.hp) player.draw();
+ logTarget: 'player',
+ content: function () {
+ if (player.hp <= trigger.player.hp) player.recover();
+ if (player.hp >= trigger.player.hp) player.draw();
},
},
- beini:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filterTarget:lib.filter.notMe,
- content:function(){
+ beini: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filterTarget: lib.filter.notMe,
+ content: function () {
'step 0'
- var str=get.translation(target);
- player.chooseControl().set('choiceList',[
- '摸两张牌,然后令'+str+'视为对自己使用【杀】',
- '令'+str+'摸两张牌,然后视为对其使用【杀】',
- ]).set('ai',function(){
- var evt=_status.event.getParent(),player=evt.player,target=evt.target;
- var card={name:'sha',isCard:true},att=get.attitude(player,target)>0;
- if(!target.canUse(card,player,false)||get.effect(player,card,target,player)>=0) return 0;
- if(att&&(!player.canUse(card,target,false)||get.effect(target,card,player,player)>=0)) return 1;
- if(target.hasSkill('nogain')&&player.canUse(card,target,false)&&get.effect(target,card,player,player)>0) return 1;
- if(player.hasShan()) return 0;
- if(att&&target.hasShan()) return 1;
+ var str = get.translation(target);
+ player.chooseControl().set('choiceList', [
+ '摸两张牌,然后令' + str + '视为对自己使用【杀】',
+ '令' + str + '摸两张牌,然后视为对其使用【杀】',
+ ]).set('ai', function () {
+ var evt = _status.event.getParent(), player = evt.player, target = evt.target;
+ var card = { name: 'sha', isCard: true }, att = get.attitude(player, target) > 0;
+ if (!target.canUse(card, player, false) || get.effect(player, card, target, player) >= 0) return 0;
+ if (att && (!player.canUse(card, target, false) || get.effect(target, card, player, player) >= 0)) return 1;
+ if (target.hasSkill('nogain') && player.canUse(card, target, false) && get.effect(target, card, player, player) > 0) return 1;
+ if (player.hasShan()) return 0;
+ if (att && target.hasShan()) return 1;
return 0;
});
'step 1'
- var list=[player,target];
- if(result.index==1) list.reverse();
- event.list=list;
+ var list = [player, target];
+ if (result.index == 1) list.reverse();
+ event.list = list;
list[0].draw(2);
'step 2'
- var list=event.list;
- if(list[1].isIn()&&list[0].isIn()&&list[1].canUse('sha',list[0],false)) list[1].useCard({name:'sha',isCard:true},list[0],false,'noai');
+ var list = event.list;
+ if (list[1].isIn() && list[0].isIn() && list[1].canUse('sha', list[0], false)) list[1].useCard({ name: 'sha', isCard: true }, list[0], false, 'noai');
},
- ai:{
- order:5,
- expose:0,
- result:{
- player:function(player,target){
- var card={name:'sha',isCard:true},att=get.attitude(player,target)>0;
- if(!target.canUse(card,player,false)||get.effect(player,card,target,player)>=0) return 2;
- if(att&&(!player.canUse(card,target,false)||get.effect(target,card,player,player)>=0)) return 2;
- if(target.hasSkill('nogain')&&player.canUse(card,target,false)) return get.effect(target,card,player,player)
- if(player.hasShan()) return 1;
- if(att&&target.hasShan()) return 1;
+ ai: {
+ order: 5,
+ expose: 0,
+ result: {
+ player: function (player, target) {
+ var card = { name: 'sha', isCard: true }, att = get.attitude(player, target) > 0;
+ if (!target.canUse(card, player, false) || get.effect(player, card, target, player) >= 0) return 2;
+ if (att && (!player.canUse(card, target, false) || get.effect(target, card, player, player) >= 0)) return 2;
+ if (target.hasSkill('nogain') && player.canUse(card, target, false)) return get.effect(target, card, player, player)
+ if (player.hasShan()) return 1;
+ if (att && target.hasShan()) return 1;
return 0;
},
},
},
},
- dingfa:{
- audio:2,
- trigger:{player:'phaseDiscardAfter'},
- direct:true,
- filter:function(event,player){
- var num=0;
- player.getHistory('lose',function(evt){
- num+=evt.cards2.length;
+ dingfa: {
+ audio: 2,
+ trigger: { player: 'phaseDiscardAfter' },
+ direct: true,
+ filter: function (event, player) {
+ var num = 0;
+ player.getHistory('lose', function (evt) {
+ num += evt.cards2.length;
});
- return num>=player.hp;
+ return num >= player.hp;
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseTarget(get.prompt('dingfa'),'操作提示:选择自己以回复体力,或选择其他角色以造成伤害',function(card,player,target){
- return target==player?player.isDamaged():true;
- }).set('ai',function(target){
- return target!=player?get.damageEffect(target,player,player):get.recoverEffect(player,player,player)
+ player.chooseTarget(get.prompt('dingfa'), '操作提示:选择自己以回复体力,或选择其他角色以造成伤害', function (card, player, target) {
+ return target == player ? player.isDamaged() : true;
+ }).set('ai', function (target) {
+ return target != player ? get.damageEffect(target, player, player) : get.recoverEffect(player, player, player)
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('dingfa',target);
- if(target==player) player.recover();
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('dingfa', target);
+ if (target == player) player.recover();
else target.damage();
}
},
},
- dz_mantianguohai:{
- mod:{
- ignoredHandcard:function(card,player){
- if(get.name(card)=='dz_mantianguohai') return true;
+ dz_mantianguohai: {
+ mod: {
+ ignoredHandcard: function (card, player) {
+ if (get.name(card) == 'dz_mantianguohai') return true;
},
- cardDiscardable:function(card,player,name){
- if(name=='cardsDiscard'&&get.name(card)=='dz_mantianguohai') return false;
+ cardDiscardable: function (card, player, name) {
+ if (name == 'cardsDiscard' && get.name(card) == 'dz_mantianguohai') return false;
},
},
},
- twmiaolve:{
- audio:2,
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
+ twmiaolve: {
+ audio: 2,
+ trigger: {
+ global: 'phaseBefore',
+ player: 'enterGame',
},
- filter:function(event,player){
- return event.name!='phase'||game.phaseNumber==0;
+ filter: function (event, player) {
+ return event.name != 'phase' || game.phaseNumber == 0;
},
- forced:true,
- locked:false,
- content:function(){
- if(!lib.inpile.includes('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai');
- if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0);
- var list=_status.dz_mantianguohai_suits.randomRemove(2).map(function(i){
- return game.createCard2('dz_mantianguohai',i,5);
+ forced: true,
+ locked: false,
+ content: function () {
+ if (!lib.inpile.includes('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai');
+ if (!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits = lib.suit.slice(0);
+ var list = _status.dz_mantianguohai_suits.randomRemove(2).map(function (i) {
+ return game.createCard2('dz_mantianguohai', i, 5);
});
- if(list.length) player.gain(list,'gain2','log');
+ if (list.length) player.gain(list, 'gain2', 'log');
},
- group:'twmiaolve_damage',
- subSkill:{
- damage:{
- trigger:{player:'damageEnd'},
- direct:true,
- content:function(){
+ group: 'twmiaolve_damage',
+ subSkill: {
+ damage: {
+ trigger: { player: 'damageEnd' },
+ direct: true,
+ content: function () {
'step 0'
- event.count=trigger.num;
+ event.count = trigger.num;
'step 1'
event.count--;
- var list=['dz_mantianguohai'];
+ var list = ['dz_mantianguohai'];
list.addArray(get.zhinangs());
- player.chooseButton([get.prompt('twmiaolve'),[list,'vcard']]).set('ai',function(button){
- if(button.link[2]=='dz_mantianguohai'&&player.countCards('hs','dz_mantianguohai')<2) return 10;
- return get.value({name:button.link[2]});
+ player.chooseButton([get.prompt('twmiaolve'), [list, 'vcard']]).set('ai', function (button) {
+ if (button.link[2] == 'dz_mantianguohai' && player.countCards('hs', 'dz_mantianguohai') < 2) return 10;
+ return get.value({ name: button.link[2] });
});
'step 2'
- if(result.bool){
+ if (result.bool) {
player.logSkill('twmiaolve');
- var name=result.links[0][2];
- if(name=='dz_mantianguohai'){
- if(!lib.inpile.includes('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai');
- if(!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits=lib.suit.slice(0);
- if(_status.dz_mantianguohai_suits.length) player.gain(game.createCard2('dz_mantianguohai',_status.dz_mantianguohai_suits.randomRemove(),5),'gain2');
- else{
- var card=get.cardPile(function(card){
- return card.name==name;
+ var name = result.links[0][2];
+ if (name == 'dz_mantianguohai') {
+ if (!lib.inpile.includes('dz_mantianguohai')) lib.inpile.add('dz_mantianguohai');
+ if (!_status.dz_mantianguohai_suits) _status.dz_mantianguohai_suits = lib.suit.slice(0);
+ if (_status.dz_mantianguohai_suits.length) player.gain(game.createCard2('dz_mantianguohai', _status.dz_mantianguohai_suits.randomRemove(), 5), 'gain2');
+ else {
+ var card = get.cardPile(function (card) {
+ return card.name == name;
});
- if(card) player.gain(card,'gain2');
+ if (card) player.gain(card, 'gain2');
}
player.draw();
}
- else{
- var card=get.cardPile(function(card){
- return card.name==name;
+ else {
+ var card = get.cardPile(function (card) {
+ return card.name == name;
});
- if(card) player.gain(card,'gain2');
+ if (card) player.gain(card, 'gain2');
}
- if(event.count>0&&player.hasSkill('twmiaolve')) event.goto(1);
+ if (event.count > 0 && player.hasSkill('twmiaolve')) event.goto(1);
}
},
},
},
},
- twyingjia:{
- audio:2,
- trigger:{global:'phaseEnd'},
- direct:true,
- filter:function(event,player){
- if(!player.countCards('he')) return false;
- var history=player.getHistory('useCard'),map={};
- for(var i of history){
- if(get.type2(i.card)=='trick'){
- if(!map[i.card.name]) map[i.card.name]=true;
+ twyingjia: {
+ audio: 2,
+ trigger: { global: 'phaseEnd' },
+ direct: true,
+ filter: function (event, player) {
+ if (!player.countCards('he')) return false;
+ var history = player.getHistory('useCard'), map = {};
+ for (var i of history) {
+ if (get.type2(i.card) == 'trick') {
+ if (!map[i.card.name]) map[i.card.name] = true;
else return true;
}
}
return false;
},
- content:function(){
+ content: function () {
'step 0'
player.chooseCardTarget({
- prompt:get.prompt('twyingjia'),
- prompt2:'弃置一张牌并令一名角色进行一个额外回合',
- filterCard:lib.filter.cardDiscardable,
- filterTarget:true,
- ai1:function(card){
- return 8-get.value(card);
+ prompt: get.prompt('twyingjia'),
+ prompt2: '弃置一张牌并令一名角色进行一个额外回合',
+ filterCard: lib.filter.cardDiscardable,
+ filterTarget: true,
+ ai1: function (card) {
+ return 8 - get.value(card);
},
- ai2:function(target){
- if(target.hasJudge('lebu')) return -1;
- var player=_status.event.player;
- if(get.attitude(player,target)>4){
- return get.threaten(target)/Math.sqrt(target.hp+1)/Math.sqrt(target.countCards('h')+1);
+ ai2: function (target) {
+ if (target.hasJudge('lebu')) return -1;
+ var player = _status.event.player;
+ if (get.attitude(player, target) > 4) {
+ return get.threaten(target) / Math.sqrt(target.hp + 1) / Math.sqrt(target.countCards('h') + 1);
}
return -1;
},
});
'step 1'
- if(result.bool){
- var target=result.targets[0];
- player.logSkill('twyingjia',target);
+ if (result.bool) {
+ var target = result.targets[0];
+ player.logSkill('twyingjia', target);
player.discard(result.cards);
target.insertPhase();
}
},
},
- gx_lingbaoxianhu:{
- trigger:{
- source:'damageSource',
- global:'dieAfter',
+ gx_lingbaoxianhu: {
+ trigger: {
+ source: 'damageSource',
+ global: 'dieAfter',
},
- forced:true,
- equipSkill:true,
- filter:function(event,player){
- if(event.name=='damage') return event.num>1;
+ forced: true,
+ equipSkill: true,
+ filter: function (event, player) {
+ if (event.name == 'damage') return event.num > 1;
return true;
},
- content:function(){
+ content: function () {
player.gainMaxHp();
player.recover();
},
},
- gx_taijifuchen:{
- trigger:{player:'useCardToPlayered'},
- forced:true,
- equipSkill:true,
- filter:function(event,player){
- return event.card&&event.card.name=='sha';
+ gx_taijifuchen: {
+ trigger: { player: 'useCardToPlayered' },
+ forced: true,
+ equipSkill: true,
+ filter: function (event, player) {
+ return event.card && event.card.name == 'sha';
},
- logTarget:'target',
- content:function(){
+ logTarget: 'target',
+ content: function () {
'step 0'
- var suit=get.suit(trigger.card);
- var num=trigger.target.countCards('h','shan');
- var next=trigger.target.chooseToDiscard('弃置一张牌,或不能响应'+get.translation(trigger.card),'he').set('ai',function(card){
- var num=_status.event.num;
- if(num==0) return 0;
- if(card.name=='shan') return num>1?2:0;
- return (get.suit(card)!=_status.event.suit?9:6)-get.value(card);
- }).set('num',num);
- if(lib.suit.includes(suit)){
- next.set('prompt2','若弃置的是'+get.translation(suit)+'牌,则改为'+get.translation(player)+'获得之');
- next.set('suit',suit);
+ var suit = get.suit(trigger.card);
+ var num = trigger.target.countCards('h', 'shan');
+ var next = trigger.target.chooseToDiscard('弃置一张牌,或不能响应' + get.translation(trigger.card), 'he').set('ai', function (card) {
+ var num = _status.event.num;
+ if (num == 0) return 0;
+ if (card.name == 'shan') return num > 1 ? 2 : 0;
+ return (get.suit(card) != _status.event.suit ? 9 : 6) - get.value(card);
+ }).set('num', num);
+ if (lib.suit.includes(suit)) {
+ next.set('prompt2', '若弃置的是' + get.translation(suit) + '牌,则改为' + get.translation(player) + '获得之');
+ next.set('suit', suit);
}
'step 1'
- if(result.bool){
- var card=result.cards[0];
- if(get.suit(card,trigger.target)==get.suit(trigger.card,false)&&get.position(card)=='d') player.gain(card,'gain2');
+ if (result.bool) {
+ var card = result.cards[0];
+ if (get.suit(card, trigger.target) == get.suit(trigger.card, false) && get.position(card) == 'd') player.gain(card, 'gain2');
}
else trigger.directHit.add(trigger.target);
},
},
- gx_chongyingshenfu:{
- trigger:{player:'damageEnd'},
- forced:true,
- equipSkill:true,
- filter:function(event,player){
- if(!event.card||!event.card.name||player.getStorage('gx_chongyingshenfu_effect').includes(event.card.name)) return false;
- if(player.hasSkillTag('unequip2')) return false;
- if(event.source.hasSkillTag('unequip',false,{
- name:event.card.name,
- target:player,
- card:event.card,
+ gx_chongyingshenfu: {
+ trigger: { player: 'damageEnd' },
+ forced: true,
+ equipSkill: true,
+ filter: function (event, player) {
+ if (!event.card || !event.card.name || player.getStorage('gx_chongyingshenfu_effect').includes(event.card.name)) return false;
+ if (player.hasSkillTag('unequip2')) return false;
+ if (event.source.hasSkillTag('unequip', false, {
+ name: event.card.name,
+ target: player,
+ card: event.card,
})) return false;
return true;
},
- content:function(){
- player.markAuto('gx_chongyingshenfu_effect',[trigger.card.name]);
+ content: function () {
+ player.markAuto('gx_chongyingshenfu_effect', [trigger.card.name]);
},
- group:'gx_chongyingshenfu_effect',
- subSkill:{
- effect:{
- trigger:{player:'damageBegin4'},
- forced:true,
- equipSkill:true,
- filter:function(event,player){
- if(!event.card||!event.card.name||!player.storage.gx_chongyingshenfu_effect||!player.getStorage('gx_chongyingshenfu_effect').includes(event.card.name)) return false;
- if(player.hasSkillTag('unequip2')) return false;
- if(event.source.hasSkillTag('unequip',false,{
- name:event.card.name,
- target:player,
- card:event.card,
+ group: 'gx_chongyingshenfu_effect',
+ subSkill: {
+ effect: {
+ trigger: { player: 'damageBegin4' },
+ forced: true,
+ equipSkill: true,
+ filter: function (event, player) {
+ if (!event.card || !event.card.name || !player.storage.gx_chongyingshenfu_effect || !player.getStorage('gx_chongyingshenfu_effect').includes(event.card.name)) return false;
+ if (player.hasSkillTag('unequip2')) return false;
+ if (event.source.hasSkillTag('unequip', false, {
+ name: event.card.name,
+ target: player,
+ card: event.card,
})) return false;
return true;
},
- content:function(){
+ content: function () {
trigger.num--;
},
- ai:{
- effect:{
- target:function(card,player,target){
- if(typeof card=='object'&&target.storage.gx_chongyingshenfu_effect&&target.getStorage('gx_chongyingshenfu_effect').includes(card.name)&&!target.hasSkillTag('unequip2')&&
- (get.itemtype(player)!=='player'||!player.hasSkillTag('jueqing',false,target)&&!player.hasSkillTag('unequip',false,{
- name:card.name,
- target:target,
- card:card,
- }))){
- if(player&&player.hasSkillTag('damageBonus',true,{
- target:target,
- card:card
+ ai: {
+ effect: {
+ target: function (card, player, target) {
+ if (typeof card == 'object' && target.storage.gx_chongyingshenfu_effect && target.getStorage('gx_chongyingshenfu_effect').includes(card.name) && !target.hasSkillTag('unequip2') &&
+ (get.itemtype(player) !== 'player' || !player.hasSkillTag('jueqing', false, target) && !player.hasSkillTag('unequip', false, {
+ name: card.name,
+ target: target,
+ card: card,
+ }))) {
+ if (player && player.hasSkillTag('damageBonus', true, {
+ target: target,
+ card: card
})) return 0.5;
return 'zeroplayertarget';
}
}
}
},
- onremove:true,
- intro:{
- content:'受到$造成的伤害-1',
+ onremove: true,
+ intro: {
+ content: '受到$造成的伤害-1',
},
},
},
},
- twdanfa:{
- audio:2,
- trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
- filter:function(event,player){
- return player.countCards('he')>0;
+ twdanfa: {
+ audio: 2,
+ trigger: { player: ['phaseZhunbeiBegin', 'phaseJieshuBegin'] },
+ filter: function (event, player) {
+ return player.countCards('he') > 0;
},
- direct:true,
- content:function(){
+ direct: true,
+ content: function () {
'step 0'
- player.chooseCard('he',get.prompt('twdanfa'),'将一张牌作为“丹”置于武将牌上').set('ai',function(card){
- if(player.storage.twdanfa){
- var suit=get.suit(card);
- for(var i of player.storage.twdanfa){
- if(get.suit(i,false)==suit) return 4-get.value(card);
+ player.chooseCard('he', get.prompt('twdanfa'), '将一张牌作为“丹”置于武将牌上').set('ai', function (card) {
+ if (player.storage.twdanfa) {
+ var suit = get.suit(card);
+ for (var i of player.storage.twdanfa) {
+ if (get.suit(i, false) == suit) return 4 - get.value(card);
}
}
- return 5.5-get.value(card);
+ return 5.5 - get.value(card);
});
'step 1'
- if(result.bool){
- var card=result.cards[0];
+ if (result.bool) {
+ var card = result.cards[0];
player.logSkill('twdanfa');
- game.log(player,'将',card,'放在了武将牌上');
- player.$give(card,player,false);
- player.lose(card,ui.special,'toStorage');
- player.markAuto('twdanfa',result.cards);
+ game.log(player, '将', card, '放在了武将牌上');
+ player.$give(card, player, false);
+ player.lose(card, ui.special, 'toStorage');
+ player.markAuto('twdanfa', result.cards);
}
else event.finish();
'step 2'
game.delayx();
},
- mark:true,
- intro:{
- content:'cards',
- onunmark:'throw',
+ mark: true,
+ intro: {
+ content: 'cards',
+ onunmark: 'throw',
},
- group:'twdanfa_draw',
- subSkill:{
- draw:{
- audio:'twdanfa',
- trigger:{player:'useCard'},
- forced:true,
- locked:false,
- filter:function(event,player){
- if(!player.storage.twdanfa||!player.storage.twdanfa.length) return false;
- var suit=get.suit(event.card,false);
- if(suit=='none'||player.storage.twdanfa_count&&player.storage.twdanfa_count.includes(suit)) return false;
- for(var i of player.storage.twdanfa){
- if(get.suit(i,false)==suit) return true;
+ group: 'twdanfa_draw',
+ subSkill: {
+ draw: {
+ audio: 'twdanfa',
+ trigger: { player: 'useCard' },
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ if (!player.storage.twdanfa || !player.storage.twdanfa.length) return false;
+ var suit = get.suit(event.card, false);
+ if (suit == 'none' || player.storage.twdanfa_count && player.storage.twdanfa_count.includes(suit)) return false;
+ for (var i of player.storage.twdanfa) {
+ if (get.suit(i, false) == suit) return true;
}
return false;
},
- content:function(){
+ content: function () {
player.draw();
player.addTempSkill('twdanfa_count');
- if(!player.storage.twdanfa_count) player.storage.twdanfa_count=[];
- player.storage.twdanfa_count.push(get.suit(trigger.card,false));
+ if (!player.storage.twdanfa_count) player.storage.twdanfa_count = [];
+ player.storage.twdanfa_count.push(get.suit(trigger.card, false));
},
},
- count:{onremove:true},
+ count: { onremove: true },
},
},
- twlingbao:{
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- var list=player.getStorage('twdanfa');
- if(list.length<2) return false;
- var suit=get.suit(list[0],false);
- for(var i=1;ifalse;
- obj.selectCard=-1;
+ select: 2,
+ backup: function (links) {
+ var obj = get.copy(lib.skill['twlingbao_' + get.color(links)]);
+ obj.cards = links;
+ obj.audio = 'twlingbao';
+ obj.filterCard = () => false;
+ obj.selectCard = -1;
return obj;
},
- prompt:function(links){
- return lib.skill['twlingbao_'+get.color(links)].prompt;
+ prompt: function (links) {
+ return lib.skill['twlingbao_' + get.color(links)].prompt;
},
- check:function(button){
- var storage=_status.event.player.storage.twdanfa.slice(0);
+ check: function (button) {
+ var storage = _status.event.player.storage.twdanfa.slice(0);
storage.remove(button.link);
- if(storage.filter(function(card){
- return card.suit==button.link.suit;
- }).length) return 1+Math.random();
+ if (storage.filter(function (card) {
+ return card.suit == button.link.suit;
+ }).length) return 1 + Math.random();
return 0;
},
},
- subSkill:{
- red:{
- filterTarget:function(card,player,target){
+ subSkill: {
+ red: {
+ filterTarget: function (card, player, target) {
return target.isDamaged();
},
- delay:false,
- prompt:'令一名角色回复1点体力',
- content:function(){
+ delay: false,
+ prompt: '令一名角色回复1点体力',
+ content: function () {
'step 0'
- var cards=lib.skill.twlingbao_backup.cards;
- player.$throw(cards,1000);
- player.unmarkAuto('twdanfa',cards);
- game.log(player,'将',cards,'置入了弃牌堆');
+ var cards = lib.skill.twlingbao_backup.cards;
+ player.$throw(cards, 1000);
+ player.unmarkAuto('twdanfa', cards);
+ game.log(player, '将', cards, '置入了弃牌堆');
game.delayx();
game.cardsDiscard(cards);
'step 1'
target.recover();
},
- ai:{
- tag:{
- recover:1,
+ ai: {
+ tag: {
+ recover: 1,
},
- result:{
- target:1.5,
+ result: {
+ target: 1.5,
},
},
},
- black:{
- filterTarget:function(card,player,target){
- return target.countDiscardableCards(player,'hej')>0;
+ black: {
+ filterTarget: function (card, player, target) {
+ return target.countDiscardableCards(player, 'hej') > 0;
},
- delay:false,
- prompt:'弃置一名角色区域内至多两张区域不同的牌',
- content:function(){
+ delay: false,
+ prompt: '弃置一名角色区域内至多两张区域不同的牌',
+ content: function () {
'step 0'
- var cards=lib.skill.twlingbao_backup.cards;
- player.$throw(cards,1000);
- player.unmarkAuto('twdanfa',cards);
- game.log(player,'将',cards,'置入了弃牌堆');
+ var cards = lib.skill.twlingbao_backup.cards;
+ player.$throw(cards, 1000);
+ player.unmarkAuto('twdanfa', cards);
+ game.log(player, '将', cards, '置入了弃牌堆');
game.delayx();
game.cardsDiscard(cards);
'step 1'
- var num=0;
- if(target.countDiscardableCards(player,'h')) num++;
- if(target.countDiscardableCards(player,'e')) num++;
- if(target.countDiscardableCards(player,'j')) num++;
- if(num){
- player.discardPlayerCard(target,[1,Math.max(2,num)],'hej',true).set('filterButton',function(button){
- for(var i=0;i0&&target.countCards('e',function(card){
- return get.value(card,target)<=0;
- })>0&&target.countCards('j',function(card){
- return get.effect(target,card,target,target)<0;
- })>8) return 3;
- if(target.countCards('h')>0&&target.countCards('e',function(card){
- return get.value(card,target)>0;
- })>0) return -2;
+ result: {
+ target: function (player, target) {
+ if (get.attitude(player, target) > 0 && target.countCards('e', function (card) {
+ return get.value(card, target) <= 0;
+ }) > 0 && target.countCards('j', function (card) {
+ return get.effect(target, card, target, target) < 0;
+ }) > 8) return 3;
+ if (target.countCards('h') > 0 && target.countCards('e', function (card) {
+ return get.value(card, target) > 0;
+ }) > 0) return -2;
return 0;
},
},
},
},
- none:{
- selectTarget:2,
- filterTarget:function(card,player,target){
- if(!ui.selected.targets.length) return true;
- return target.countCards('he')>0;
+ none: {
+ selectTarget: 2,
+ filterTarget: function (card, player, target) {
+ if (!ui.selected.targets.length) return true;
+ return target.countCards('he') > 0;
},
- complexSelect:true,
- targetprompt:['摸牌','弃牌'],
- delay:false,
- prompt:'令一名角色摸一张牌并令另一名角色弃置一张牌',
- multitarget:true,
- multiline:true,
- content:function(){
+ complexSelect: true,
+ targetprompt: ['摸牌', '弃牌'],
+ delay: false,
+ prompt: '令一名角色摸一张牌并令另一名角色弃置一张牌',
+ multitarget: true,
+ multiline: true,
+ content: function () {
'step 0'
- var cards=lib.skill.twlingbao_backup.cards;
- player.$throw(cards,1000);
- player.unmarkAuto('twdanfa',cards);
- game.log(player,'将',cards,'置入了弃牌堆');
+ var cards = lib.skill.twlingbao_backup.cards;
+ player.$throw(cards, 1000);
+ player.unmarkAuto('twdanfa', cards);
+ game.log(player, '将', cards, '置入了弃牌堆');
game.delayx();
game.cardsDiscard(cards);
'step 1'
targets[0].draw();
- targets[1].chooseToDiscard('he',true);
+ targets[1].chooseToDiscard('he', true);
},
- ai:{
- result:{
- target:function(player,target){
- if(!ui.selected.targets.length) return 1;
- if(target.countCards('e',function(card){
- return get.value(card,target)<=0;
- })>0) return 1;
+ ai: {
+ result: {
+ target: function (player, target) {
+ if (!ui.selected.targets.length) return 1;
+ if (target.countCards('e', function (card) {
+ return get.value(card, target) <= 0;
+ }) > 0) return 1;
return -1;
},
},
},
},
- backup:{audio:'twlingbao'},
+ backup: { audio: 'twlingbao' },
},
- ai:{
- order:1,
- result:{player:1},
+ ai: {
+ order: 1,
+ result: { player: 1 },
},
},
- twsidao:{
- audio:2,
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
+ twsidao: {
+ audio: 2,
+ trigger: {
+ global: 'phaseBefore',
+ player: 'enterGame',
},
- forced:true,
- locked:false,
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&!player.storage.twsidao;
+ forced: true,
+ locked: false,
+ filter: function (event, player) {
+ return (event.name != 'phase' || game.phaseNumber == 0) && !player.storage.twsidao;
},
- content:function(){
+ content: function () {
'step 0'
- player.chooseButton(['请选择你的初始法宝',[['gx_lingbaoxianhu','gx_taijifuchen','gx_chongyingshenfu'],'vcard']],true).set('ai',function(button){
- return button.link[2]=='gx_chongyingshenfu'?2:1;
+ player.chooseButton(['请选择你的初始法宝', [['gx_lingbaoxianhu', 'gx_taijifuchen', 'gx_chongyingshenfu'], 'vcard']], true).set('ai', function (button) {
+ return button.link[2] == 'gx_chongyingshenfu' ? 2 : 1;
});
'step 1'
- if(result.bool){
- var card=game.createCard2(result.links[0][2]);
+ if (result.bool) {
+ var card = game.createCard2(result.links[0][2]);
lib.inpile.add(result.links[0][2]);
- player.storage.twsidao=card;
- player.chooseUseTarget(card,'nopopup',true);
+ player.storage.twsidao = card;
+ player.chooseUseTarget(card, 'nopopup', true);
}
},
- group:'twsidao_equip',
- subSkill:{
- equip:{
- audio:'twsidao',
- trigger:{player:'phaseZhunbeiBegin'},
- forced:true,
- filter:function(event,player){
- var card=player.storage.twsidao;
- return card&&card.isInPile()&&player.hasUseTarget(card);
+ group: 'twsidao_equip',
+ subSkill: {
+ equip: {
+ audio: 'twsidao',
+ trigger: { player: 'phaseZhunbeiBegin' },
+ forced: true,
+ filter: function (event, player) {
+ var card = player.storage.twsidao;
+ return card && card.isInPile() && player.hasUseTarget(card);
},
- content:function(){
- player.chooseUseTarget(player.storage.twsidao,'nopopup',true);
+ content: function () {
+ player.chooseUseTarget(player.storage.twsidao, 'nopopup', true);
},
},
},
},
- twrangyi:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filter:function(event,player){
- return player.countCards('h')>0;
+ twrangyi: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (event, player) {
+ return player.countCards('h') > 0;
},
- filterTarget:lib.filter.notMe,
- delay:0,
- content:function(){
+ filterTarget: lib.filter.notMe,
+ delay: 0,
+ content: function () {
'step 0'
- event.cards=player.getCards('h');
- player.give(event.cards,target).gaintag.add('twrangyi');
+ event.cards = player.getCards('h');
+ player.give(event.cards, target).gaintag.add('twrangyi');
target.addTempSkill('twrangyi2');
'step 1'
target.chooseToUse({
- prompt:'请使用得到的一张牌,或者受到来自'+get.translation(player)+'的1点伤害',
- filterCard:function(card,player){
- if(get.itemtype(card)!='card'||!card.hasGaintag('twrangyi')) return false;
- return lib.filter.filterCard(card,player,event);
+ prompt: '请使用得到的一张牌,或者受到来自' + get.translation(player) + '的1点伤害',
+ filterCard: function (card, player) {
+ if (get.itemtype(card) != 'card' || !card.hasGaintag('twrangyi')) return false;
+ return lib.filter.filterCard(card, player, event);
},
- cards:cards,
+ cards: cards,
});
'step 2'
target.removeSkill('twrangyi2');
- if(!result.bool) target.damage('nocard');
+ if (!result.bool) target.damage('nocard');
},
- ai:{
- order:1,
- result:{
- target:function(player,target){
- var hs=player.getCards('h');
- for(var i=0;i0;
+ }) > 0;
},
- content:function(){
- var cards=player.getCards('h',function(card){
+ content: function () {
+ var cards = player.getCards('h', function (card) {
return card.hasGaintag('twrangyi');
});
game.delayx();
- player.give(cards,trigger.getParent(2).player);
+ player.give(cards, trigger.getParent(2).player);
},
- onremove:function(player){
+ onremove: function (player) {
player.removeGaintag('twrangyi');
},
},
- twbaimei:{
- audio:2,
- trigger:{
- player:"damageBegin4",
+ twbaimei: {
+ audio: 2,
+ trigger: {
+ player: "damageBegin4",
},
- forced:true,
- filter:function(event,player){
- if(player.countCards('h')) return false;
- if(event.hasNature()) return true;
- return get.type(event.card,'trick')=='trick';
+ forced: true,
+ filter: function (event, player) {
+ if (player.countCards('h')) return false;
+ if (event.hasNature()) return true;
+ return get.type(event.card, 'trick') == 'trick';
},
- content:function(){
+ content: function () {
trigger.cancel();
},
- ai:{
- effect:{
- target:function(card,player,target,current){
- if(target.countCards('h')) return;
- if(get.tag(card,'natureDamage')) return 'zeroplayertarget';
- if(get.type(card)=='trick'&&get.tag(card,'damage')){
+ ai: {
+ effect: {
+ target: function (card, player, target, current) {
+ if (target.countCards('h')) return;
+ if (get.tag(card, 'natureDamage')) return 'zeroplayertarget';
+ if (get.type(card) == 'trick' && get.tag(card, 'damage')) {
return 'zeroplayertarget';
}
},
},
},
},
- twhuzhu:{
- audio:2,
- enable:'phaseUse',
- usable:1,
- filter:function(e,player){
- return player.countCards('e')>0;
+ twhuzhu: {
+ audio: 2,
+ enable: 'phaseUse',
+ usable: 1,
+ filter: function (e, player) {
+ return player.countCards('e') > 0;
},
- filterTarget:function(card,player,target){
- return target!=player&&target.countCards('h')>0
+ filterTarget: function (card, player, target) {
+ return target != player && target.countCards('h') > 0
},
- content:function(){
+ content: function () {
'step 0'
- target.chooseCard('交给'+get.translation(player)+'一张手牌','h',true);
+ target.chooseCard('交给' + get.translation(player) + '一张手牌', 'h', true);
'step 1'
- target.give(result.cards,player);
+ target.give(result.cards, player);
'step 2'
- if(player.countGainableCards(player,'e')) target.gainPlayerCard(player,'e',true);
+ if (player.countGainableCards(player, 'e')) target.gainPlayerCard(player, 'e', true);
'step 3'
- if(target.isDamaged()&&target.hp<=player.hp){
- player.chooseBool('是否令'+get.translation(target)+'回复1点体力?').set('ai',function(){
- return get.recoverEffect(target,player,player);
+ if (target.isDamaged() && target.hp <= player.hp) {
+ player.chooseBool('是否令' + get.translation(target) + '回复1点体力?').set('ai', function () {
+ return get.recoverEffect(target, player, player);
});
}
'step 4'
- if(result.bool) target.recover();
+ if (result.bool) target.recover();
},
- ai:{
- order:8,
- result:{
- target:function(player,target){
- var eff=(target.isDamaged()&&target.hp<=player.hp)?get.recoverEffect(target,player,target):0;
- if(eff<=0&&!player.countGainableCards(target,'e')) return -1;
+ ai: {
+ order: 8,
+ result: {
+ target: function (player, target) {
+ var eff = (target.isDamaged() && target.hp <= player.hp) ? get.recoverEffect(target, player, target) : 0;
+ if (eff <= 0 && !player.countGainableCards(target, 'e')) return -1;
return eff;
},
},
},
},
- twliancai:{
- audio:2,
- trigger:{player:['turnOverEnd','phaseJieshuBegin']},
- filter:function(card,player,target){
- return target=='phaseJieshuBegin'||player.countCards('h')0;
+ filterTarget: function (card, player, target) {
+ return target != player && target.countGainableCards(player, 'e') > 0;
},
- check:function(card,player){
- if(card.name=='turnOver') return true;
- if(player.isTurnedOver()) return true;
- if(player.hp-player.countCards('h')>1) return true;
- return game.hasPlayer(function(current){
- return lib.skill.twliancai.filterTarget(null,player,current)&&lib.skill.twliancai.filterAI(current);
+ check: function (card, player) {
+ if (card.name == 'turnOver') return true;
+ if (player.isTurnedOver()) return true;
+ if (player.hp - player.countCards('h') > 1) return true;
+ return game.hasPlayer(function (current) {
+ return lib.skill.twliancai.filterTarget(null, player, current) && lib.skill.twliancai.filterAI(current);
});
},
- filterAI:function(target){
- var player=_status.event.player;
- var att=get.attitude(player,target);
- if(target.isDamaged()&&target.countCards('e','baiyin')&&att>0) return 2*att;
+ filterAI: function (target) {
+ var player = _status.event.player;
+ var att = get.attitude(player, target);
+ if (target.isDamaged() && target.countCards('e', 'baiyin') && att > 0) return 2 * att;
return -att;
},
- prompt2:function(card,player,target){
- return card.name=='phaseJieshu'?'将武将牌翻面,然后获得一名其他角色装备区内的一张牌':'将手牌摸至与体力值相同';
+ prompt2: function (card, player, target) {
+ return card.name == 'phaseJieshu' ? '将武将牌翻面,然后获得一名其他角色装备区内的一张牌' : '将手牌摸至与体力值相同';
},
- content:function(){
+ content: function () {
'step 0'
- if(event.triggername=='phaseJieshuBegin') player.turnOver();
- else{
- player.draw(player.hp-player.countCards('h'));
+ if (event.triggername == 'phaseJieshuBegin') player.turnOver();
+ else {
+ player.draw(player.hp - player.countCards('h'));
event.finish();
}
'step 1'
- player.chooseTarget('获得一名角色装备区内的一张牌',lib.skill.twliancai.filterTarget).ai=lib.skill.twliancai.filterAI;
+ player.chooseTarget('获得一名角色装备区内的一张牌', lib.skill.twliancai.filterTarget).ai = lib.skill.twliancai.filterAI;
'step 2'
- if(result.bool){
- player.line(result.targets,'thunder');
- player.gainPlayerCard('e',true,result.targets[0]);
+ if (result.bool) {
+ player.line(result.targets, 'thunder');
+ player.gainPlayerCard('e', true, result.targets[0]);
}
},
},
- twqijia:{
+ twqijia: {
//group:'twqijia_alka',
- audio:2,
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('e',function(card){
+ audio: 2,
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ return player.countCards('e', function (card) {
return !player.getStorage('twqijia_alka').includes(get.subtype(card));
});
},
- filterTarget:function(card,player,target){
- return target!=player&&player.canUse({name:'sha'},target);
+ filterTarget: function (card, player, target) {
+ return target != player && player.canUse({ name: 'sha' }, target);
},
- position:'e',
- filterCard:function(card,player){
+ position: 'e',
+ filterCard: function (card, player) {
return !player.getStorage('twqijia_alka').includes(get.subtype(card));
},
- content:function(){
+ content: function () {
'step 0'
player.addTempSkill('twqijia_alka');
player.storage.twqijia_alka.push(get.subtype(cards[0]));
- player.useCard({name:'sha'},target,false);
+ player.useCard({ name: 'sha' }, target, false);
},
- subSkill:{
- alka:{
- charlotte:true,
- onremove:function(player){
+ subSkill: {
+ alka: {
+ charlotte: true,
+ onremove: function (player) {
delete player.storage.twqijia_alka;
delete player.storage.twzhuchen;
player.unmarkSkill('twzhuchen');
},
- init:function(player,skill){
- if(!player.storage[skill]) player.storage[skill]=[];
- if(!player.storage.twzhuchen) player.storage.twzhuchen=[];
+ init: function (player, skill) {
+ if (!player.storage[skill]) player.storage[skill] = [];
+ if (!player.storage.twzhuchen) player.storage.twzhuchen = [];
},
- mod:{
- globalFrom:function(from,to,distance){
- if(from.storage.twzhuchen&&from.storage.twzhuchen.includes(to)) return -Infinity;
+ mod: {
+ globalFrom: function (from, to, distance) {
+ if (from.storage.twzhuchen && from.storage.twzhuchen.includes(to)) return -Infinity;
}
},
},
},
- check:function(card){
- return 7-get.value(card);
+ check: function (card) {
+ return 7 - get.value(card);
},
- ai:{
- order:function(){
- return get.order({name:'sha'})-0.2;
+ ai: {
+ order: function () {
+ return get.order({ name: 'sha' }) - 0.2;
},
- result:{
- target:function(player,target){
- return get.effect(target,{name:'sha'},player,player);
+ result: {
+ target: function (player, target) {
+ return get.effect(target, { name: 'sha' }, player, player);
},
},
},
},
- twzhuchen:{
- enable:'phaseUse',
- filter:function(event,player){
- return player.countCards('h',lib.skill.twzhuchen.filterCard)>0;
+ twzhuchen: {
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ return player.countCards('h', lib.skill.twzhuchen.filterCard) > 0;
},
- filterCard:function(card,player){
- var name=get.name(card,player);
- return name=='tao'||name=='jiu';
+ filterCard: function (card, player) {
+ var name = get.name(card, player);
+ return name == 'tao' || name == 'jiu';
},
- filterTarget:lib.filter.notMe,
- content:function(){
+ filterTarget: lib.filter.notMe,
+ content: function () {
player.addTempSkill('twqijia_alka');
player.storage.twzhuchen.add(target);
player.markSkill('twzhuchen');
},
- intro:{
- content:function(content,player){
- return '至'+get.translation(content)+'的距离视为1';
+ intro: {
+ content: function (content, player) {
+ return '至' + get.translation(content) + '的距离视为1';
},
},
},
- twxiaolian:{
- audio:2,
- trigger:{global:'useCardToTarget'},
- logTarget:'target',
- filter:function(event,player){
- return event.card&&event.card.name=='sha'&&event.player!=player&&
- event.targets.length==1&&event.targets[0]!=player;
+ twxiaolian: {
+ audio: 2,
+ trigger: { global: 'useCardToTarget' },
+ logTarget: 'target',
+ filter: function (event, player) {
+ return event.card && event.card.name == 'sha' && event.player != player &&
+ event.targets.length == 1 && event.targets[0] != player;
},
- check:function(event,player){
- return get.effect(event.targets[0],event.card,event.player,player)<=get.effect(player,event.card,event.player,player);
+ check: function (event, player) {
+ return get.effect(event.targets[0], event.card, event.player, player) <= get.effect(player, event.card, event.player, player);
},
- content:function(){
- trigger.getParent().twxiaolian=trigger.targets[0];
- trigger.targets.length=0;
- trigger.getParent().triggeredTargets2.length=0;
+ content: function () {
+ trigger.getParent().twxiaolian = trigger.targets[0];
+ trigger.targets.length = 0;
+ trigger.getParent().triggeredTargets2.length = 0;
trigger.targets.push(player);
},
- group:'twxiaolian_damage',
- subSkill:{
- distance:{
- sub:true,
- charlotte:true,
- init:function(player,skill){
- if(!player.storage[skill]) player.storage[skill]=[];
+ group: 'twxiaolian_damage',
+ subSkill: {
+ distance: {
+ sub: true,
+ charlotte: true,
+ init: function (player, skill) {
+ if (!player.storage[skill]) player.storage[skill] = [];
},
- mark:true,
- marktext:'马',
- intro:{
- content:'cards',
- onunmark:'throw',
+ mark: true,
+ marktext: '马',
+ intro: {
+ content: 'cards',
+ onunmark: 'throw',
},
- mod:{
- globalTo:function(from,to,distance){
- if(from!=to&&to.storage.twxiaolian_distance) return distance+to.storage.twxiaolian_distance.length;
+ mod: {
+ globalTo: function (from, to, distance) {
+ if (from != to && to.storage.twxiaolian_distance) return distance + to.storage.twxiaolian_distance.length;
},
},
},
- damage:{
- sub:true,
- trigger:{player:'damageEnd'},
- direct:true,
- filter:function(event,player){
- return event.getParent(2).twxiaolian!=undefined;
+ damage: {
+ sub: true,
+ trigger: { player: 'damageEnd' },
+ direct: true,
+ filter: function (event, player) {
+ return event.getParent(2).twxiaolian != undefined;
},
- content:function(){
+ content: function () {
'step 0'
- var target=trigger.getParent(2).twxiaolian;
- event.target=target;
- player.chooseCard('是否将一张牌当做【马】置于'+get.translation(target)+'的武将牌旁?','he').ai=function(card){
- if(get.attitude(_status.event.player,_status.event.getParent('twxiaolian_damage').target)>2) return 7-get.value(card);
+ var target = trigger.getParent(2).twxiaolian;
+ event.target = target;
+ player.chooseCard('是否将一张牌当做【马】置于' + get.translation(target) + '的武将牌旁?', 'he').ai = function (card) {
+ if (get.attitude(_status.event.player, _status.event.getParent('twxiaolian_damage').target) > 2) return 7 - get.value(card);
return 0;
};
'step 1'
- if(result.bool){
- player.logSkill('twxiaolian',target);
- player.lose(result.cards,ui.special,'toStorage');
+ if (result.bool) {
+ player.logSkill('twxiaolian', target);
+ player.lose(result.cards, ui.special, 'toStorage');
target.addSkill('twxiaolian_distance');
target.storage.twxiaolian_distance.addArray(result.cards);
target.markSkill('twxiaolian_distance');
@@ -15064,224 +15064,224 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
- twtijin:{
- audio:2,
- trigger:{global:'useCardToPlayer'},
- filter:function(event,player){
- return event.card&&event.card.name=='sha'&&event.player!=player&&event.target!=player&&
- event.targets.length==1&&event.player.inRange(player);
+ twtijin: {
+ audio: 2,
+ trigger: { global: 'useCardToPlayer' },
+ filter: function (event, player) {
+ return event.card && event.card.name == 'sha' && event.player != player && event.target != player &&
+ event.targets.length == 1 && event.player.inRange(player);
},
- logTarget:'target',
- check:function(event,player){
- return get.effect(event.targets[0],event.card,event.player,player)<=get.effect(player,event.card,event.player,player);
+ logTarget: 'target',
+ check: function (event, player) {
+ return get.effect(event.targets[0], event.card, event.player, player) <= get.effect(player, event.card, event.player, player);
},
- content:function(){
+ content: function () {
'step 0'
- trigger.targets.length=0;
- trigger.getParent().triggeredTargets1.length=0;
+ trigger.targets.length = 0;
+ trigger.getParent().triggeredTargets1.length = 0;
trigger.targets.push(player);
- var next=game.createEvent('twtijin_discard',null,trigger.getParent(2));
- next.player=player;
- next.target=trigger.player;
- next.setContent(function(){
- if(target.isDead()||!target.countCards('he')) return;
- player.line(target,'green');
- player.discardPlayerCard(target,true,'he');
+ var next = game.createEvent('twtijin_discard', null, trigger.getParent(2));
+ next.player = player;
+ next.target = trigger.player;
+ next.setContent(function () {
+ if (target.isDead() || !target.countCards('he')) return;
+ player.line(target, 'green');
+ player.discardPlayerCard(target, true, 'he');
});
},
},
- twyanqin:{
- forbid:['guozhan'],
- audio:2,
- trigger:{player:'phaseBegin'},
- direct:true,
- content:function(){
+ twyanqin: {
+ forbid: ['guozhan'],
+ audio: 2,
+ trigger: { player: 'phaseBegin' },
+ direct: true,
+ content: function () {
'step 0'
- var list=[];
- if(player.group!='wei') list.push('wei2');
- if(player.group!='shu') list.push('shu2');
+ var list = [];
+ if (player.group != 'wei') list.push('wei2');
+ if (player.group != 'shu') list.push('shu2');
list.push('cancel2');
- player.chooseControl(list).set('ai',function(){
+ player.chooseControl(list).set('ai', function () {
return list.randomGet();
- }).set('prompt',get.prompt2('twyanqin'));
+ }).set('prompt', get.prompt2('twyanqin'));
'step 1'
- if(result.control!='cancel2'){
+ if (result.control != 'cancel2') {
player.logSkill('twyanqin');
- var group=result.control.slice(0,3);
+ var group = result.control.slice(0, 3);
player.changeGroup(group);
}
},
},
- twbaobian:{
- audio:2,
- trigger:{source:'damageBegin2'},
- filter:function(event,player){
- var card=event.card;
- if(!card||(card.name!='sha'&&card.name!='juedou')) return false;
- return event.player.group==player.group||event.player.countCards('h')>event.player.hp
+ twbaobian: {
+ audio: 2,
+ trigger: { source: 'damageBegin2' },
+ filter: function (event, player) {
+ var card = event.card;
+ if (!card || (card.name != 'sha' && card.name != 'juedou')) return false;
+ return event.player.group == player.group || event.player.countCards('h') > event.player.hp
},
- check:function(event,player){
- var att=get.attitude(player,event.player);
- if(event.player.group==player.group) return att>0;
- return att<0;
+ check: function (event, player) {
+ var att = get.attitude(player, event.player);
+ if (event.player.group == player.group) return att > 0;
+ return att < 0;
},
- logTarget:'player',
- content:function(){
- var target=trigger.player;
- if(target.group==player.group){
+ logTarget: 'player',
+ content: function () {
+ var target = trigger.player;
+ if (target.group == player.group) {
trigger.cancel();
- var num=target.maxHp-target.countCards('h');
- if(num) target.draw(num);
+ var num = target.maxHp - target.countCards('h');
+ if (num) target.draw(num);
}
- else{
- player.discardPlayerCard(target,'h',true,target.countCards('h')-target.hp)
+ else {
+ player.discardPlayerCard(target, 'h', true, target.countCards('h') - target.hp)
}
},
},
- chijie:{
- audio:true,
- forbid:['guozhan'],
- trigger:{
- global:'phaseBefore',
- player:'enterGame',
+ chijie: {
+ audio: true,
+ forbid: ['guozhan'],
+ trigger: {
+ global: 'phaseBefore',
+ player: 'enterGame',
},
- direct:true,
- filter:function(event,player){
- return (event.name!='phase'||game.phaseNumber==0)&&game.hasPlayer(function(current){
- return current.group!=player.group&&lib.group.includes(current.group);
+ direct: true,
+ filter: function (event, player) {
+ return (event.name != 'phase' || game.phaseNumber == 0) && game.hasPlayer(function (current) {
+ return current.group != player.group && lib.group.includes(current.group);
});
},
- content:function(){
+ content: function () {
'step 0'
- var list=lib.group.filter(function(group){
- return group!=player.group&&game.hasPlayer(function(current){
- return current.group==group;
+ var list = lib.group.filter(function (group) {
+ return group != player.group && game.hasPlayer(function (current) {
+ return current.group == group;
});
});
list.push('cancel2');
- player.chooseControl(list).set('prompt',get.prompt('chijie')).set('prompt2','将自己的势力变更为场上存在的一个势力').set('ai',function(){
+ player.chooseControl(list).set('prompt', get.prompt('chijie')).set('prompt2', '将自己的势力变更为场上存在的一个势力').set('ai', function () {
return list.randomGet();
});
'step 1'
- if(result.control!='cancel2'){
+ if (result.control != 'cancel2') {
player.logSkill('chijie');
player.changeGroup(result.control);
}
},
},
- waishi:{
- audio:2,
- enable:'phaseUse',
- filter:function(event,player){
- let used=player.getStat('skill').waishi;
- if(used&&used>player.countMark('waishi_remover')) return false;
- return player.countCards('he')>0&&game.hasPlayer(target=>target!=player&&target.countCards('h')>0);
+ waishi: {
+ audio: 2,
+ enable: 'phaseUse',
+ filter: function (event, player) {
+ let used = player.getStat('skill').waishi;
+ if (used && used > player.countMark('waishi_remover')) return false;
+ return player.countCards('he') > 0 && game.hasPlayer(target => target != player && target.countCards('h') > 0);
},
- filterTarget:function(card,player,target){
- return target!=player&&target.countCards('h')>=ui.selected.cards.length;
+ filterTarget: function (card, player, target) {
+ return target != player && target.countCards('h') >= ui.selected.cards.length;
},
- filterCard:true,
- position:'he',
- check:function(card){
- if(!game.hasPlayer(function(current){
- return current!=_status.event.player&¤t.countCards('h')>ui.selected.cards.length;
+ filterCard: true,
+ position: 'he',
+ check: function (card) {
+ if (!game.hasPlayer(function (current) {
+ return current != _status.event.player && current.countCards('h') > ui.selected.cards.length;
})) return 0;
- return 6-get.value(card);
+ return 6 - get.value(card);
},
- selectCard:function(){
- if(!ui.selected.targets.length) return [1,game.countGroup()];
- return [1,Math.min(ui.selected.targets[0].countCards('h'),game.countGroup())];
+ selectCard: function () {
+ if (!ui.selected.targets.length) return [1, game.countGroup()];
+ return [1, Math.min(ui.selected.targets[0].countCards('h'), game.countGroup())];
},
- discard:false,
- lose:false,
- delay:0,
- content:function(){
+ discard: false,
+ lose: false,
+ delay: 0,
+ content: function () {
'step 0'
- player.choosePlayerCard(target,true,'h',cards.length);
+ player.choosePlayerCard(target, true, 'h', cards.length);
'step 1'
- player.swapHandcards(target,cards,result.cards);
+ player.swapHandcards(target, cards, result.cards);
game.delayex();
'step 2'
- if(target.countCards('h')>player.countCards('h')||player.group==target.group) player.draw();
+ if (target.countCards('h') > player.countCards('h') || player.group == target.group) player.draw();
},
- ai:{
- order:7,
- result:{
- player:function(player,target){
- if(player.countCards('h'){
- return current.group!=player.group&&lib.group.includes(current.group);
+ var controls = ['选项二'];
+ if (game.hasPlayer(current => {
+ return current.group != player.group && lib.group.includes(current.group);
})) controls.unshift('选项一');
- if(game.hasPlayer(current=>current!=player)) controls.push('选项三');
- player.chooseControl(controls,'cancel2').set('prompt',get.prompt('renshe')).set('choiceList',choiceList).set('ai',function(){
- if(game.hasPlayer(function(current){
- return get.attitude(player,current)>0||current.hasSkillTag('nogain');
+ if (game.hasPlayer(current => current != player)) controls.push('选项三');
+ player.chooseControl(controls, 'cancel2').set('prompt', get.prompt('renshe')).set('choiceList', choiceList).set('ai', function () {
+ if (game.hasPlayer(function (current) {
+ return get.attitude(player, current) > 0 || current.hasSkillTag('nogain');
})) return '选项三'
return '选项二';
});
'step 1'
- if(result.control=='cancel2') event.finish();
- else{
+ if (result.control == 'cancel2') event.finish();
+ else {
player.logSkill('renshe');
- switch(result.control){
+ switch (result.control) {
case '选项一':
event.goto(3);
break;
case '选项二':
- player.addMark('waishi_remover',1,false);
- player.addTempSkill('waishi_remover',{player:'phaseUseAfter'});
+ player.addMark('waishi_remover', 1, false);
+ player.addTempSkill('waishi_remover', { player: 'phaseUseAfter' });
event.finish();
break;
case '选项三':
- player.chooseTarget('请选择一名角色,与其各摸一张牌',lib.filter.notMe,true).set('ai',function(target){
- if(target.hasSkillTag('nogain')) return 0.1;
- return get.attitude(_status.event.player,target);
+ player.chooseTarget('请选择一名角色,与其各摸一张牌', lib.filter.notMe, true).set('ai', function (target) {
+ if (target.hasSkillTag('nogain')) return 0.1;
+ return get.attitude(_status.event.player, target);
})
}
}
'step 2'
- if(result.bool){
- var target=result.targets[0];
- player.line(target,'green');
- game.asyncDraw([player,target].sortBySeat());
+ if (result.bool) {
+ var target = result.targets[0];
+ player.line(target, 'green');
+ game.asyncDraw([player, target].sortBySeat());
}
game.delayex();
event.finish();
'step 3'
- var list=lib.group.filter(function(group){
- return group!=player.group&&game.hasPlayer(function(current){
- return current.group==group;
+ var list = lib.group.filter(function (group) {
+ return group != player.group && game.hasPlayer(function (current) {
+ return current.group == group;
});
});
- player.chooseControl(list).set('prompt',get.prompt('chijie')).set('prompt2','将自己的势力变更为场上存在的一个势力').set('ai',function(){
+ player.chooseControl(list).set('prompt', get.prompt('chijie')).set('prompt2', '将自己的势力变更为场上存在的一个势力').set('ai', function () {
return list.randomGet();
});
'step 4'
@@ -15289,776 +15289,776 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
//英文版特典武将凯撒
- zhengfu:{
- trigger:{
- player:"useCardToPlayered",
+ zhengfu: {
+ trigger: {
+ player: "useCardToPlayered",
},
- check:function (event,player){
- return get.attitude(player,event.target)<0;
+ check: function (event, player) {
+ return get.attitude(player, event.target) < 0;
},
- filter:function(event,player){
- return event.card.name=='sha';
+ filter: function (event, player) {
+ return event.card.name == 'sha';
},
- logTarget:"target",
- line:false,
- content:function(){
+ logTarget: "target",
+ line: false,
+ content: function () {
'step 0'
- player.line(trigger.target,{color:[220, 90, 139]});
- player.chooseControl(['basic','trick','equip']).set('ai',function(){
- var player=_status.event.target;
- if(!player.countCards('h','sha')&&player.countCards('h','shan')) return 'trick';
+ player.line(trigger.target, { color: [220, 90, 139] });
+ player.chooseControl(['basic', 'trick', 'equip']).set('ai', function () {
+ var player = _status.event.target;
+ if (!player.countCards('h', 'sha') && player.countCards('h', 'shan')) return 'trick';
return 'basic';
- }).set('prompt','请选择一种牌的类别').set('target',trigger.target);
+ }).set('prompt', '请选择一种牌的类别').set('target', trigger.target);
'step 1'
- trigger.target.chooseCard('he','交给'+get.translation(player)+'一张'+get.translation(result.control)+'牌,否则此【杀】不可被闪避',function(card){
- return get.type2(card)==_status.event.control;
- }).set('ai',function(card){
- var num=_status.event.num;
- if(num==0) return 0;
- if(card.name=='shan') return num>1?2:0;
- return 8-get.value(card);
- }).set('num',trigger.target.countCards('h','shan')).set('control',result.control);
+ trigger.target.chooseCard('he', '交给' + get.translation(player) + '一张' + get.translation(result.control) + '牌,否则此【杀】不可被闪避', function (card) {
+ return get.type2(card) == _status.event.control;
+ }).set('ai', function (card) {
+ var num = _status.event.num;
+ if (num == 0) return 0;
+ if (card.name == 'shan') return num > 1 ? 2 : 0;
+ return 8 - get.value(card);
+ }).set('num', trigger.target.countCards('h', 'shan')).set('control', result.control);
'step 2'
- if(result.bool){
- var cards=result.cards;
- trigger.target.give(cards,player);
+ if (result.bool) {
+ var cards = result.cards;
+ trigger.target.give(cards, player);
}
- else{
+ else {
trigger.getParent().directHit.add(trigger.target);
game.delay();
}
}
}
},
- perfectPair:{
- tw_liufuren:['yuanshao'],
- tw_xiahoushang:['caopi'],
+ perfectPair: {
+ tw_liufuren: ['yuanshao'],
+ tw_xiahoushang: ['caopi'],
},
- characterReplace:{
- tw_caocao:['tw_caocao','jsrg_caocao','yj_caocao'],
- mateng:['tw_mateng','mateng'],
- xiahouen:['tw_xiahouen','jsrg_xiahouen'],
- jiangji:['tw_jiangji','jiangji'],
- baoxin:['tw_baoxin','baoxin'],
- yanxiang:['yanxiang','tw_yanxiang'],
- liwei:['liwei','tw_liwei'],
+ characterReplace: {
+ tw_caocao: ['tw_caocao', 'jsrg_caocao', 'yj_caocao'],
+ mateng: ['tw_mateng', 'mateng'],
+ xiahouen: ['tw_xiahouen', 'jsrg_xiahouen'],
+ jiangji: ['tw_jiangji', 'jiangji'],
+ baoxin: ['tw_baoxin', 'baoxin'],
+ yanxiang: ['yanxiang', 'tw_yanxiang'],
+ liwei: ['liwei', 'tw_liwei'],
},
- dynamicTranslate:{
- twfeifu:function(player){
- var str='锁定技,转换技。';
- if(!player.storage.twfeifu) str+='';
- str+='阴:当你成为【杀】的唯一目标后;';
- if(!player.storage.twfeifu) str+='';
- if(player.storage.twfeifu) str+='';
- str+='阳:当你使用【杀】指定唯一目标后;';
- if(player.storage.twfeifu) str+='';
- str+='目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。';
+ dynamicTranslate: {
+ twfeifu: function (player) {
+ var str = '锁定技,转换技。';
+ if (!player.storage.twfeifu) str += '';
+ str += '阴:当你成为【杀】的唯一目标后;';
+ if (!player.storage.twfeifu) str += '';
+ if (player.storage.twfeifu) str += '';
+ str += '阳:当你使用【杀】指定唯一目标后;';
+ if (player.storage.twfeifu) str += '';
+ str += '目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。';
return str;
},
- twfengpo:function(player){
- if(player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。';
+ twfengpo: function (player) {
+ if (player.storage.twfengpo) return '当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的红色牌数)。';
return '①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。';
},
- twjiexun:function(player){
- return lib.translate[player.hasSkill('funan_jiexun')?'twjiexunx_info':'twjiexun_info'];
+ twjiexun: function (player) {
+ return lib.translate[player.hasSkill('funan_jiexun') ? 'twjiexunx_info' : 'twjiexun_info'];
},
twzhenliang: function (player) {
- if(player.storage.twzhenliang) return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
+ if (player.storage.twzhenliang) return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
return '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。';
},
- twdengjian:function(player){
- let str='①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。';
- if(player.hasSkill('twdengjian_ban')) str=''+str+'';
- str+='②你使用“剑法”牌不计入次数限制。';
+ twdengjian: function (player) {
+ let str = '①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。';
+ if (player.hasSkill('twdengjian_ban')) str = '' + str + '';
+ str += '②你使用“剑法”牌不计入次数限制。';
return str;
},
},
- translate:{
- tw_beimihu:'TW卑弥呼',
- tw_beimihu_prefix:'TW',
- nashime:'难升米',
- tw_xiahouba:'TW夏侯霸',
- tw_xiahouba_prefix:'TW',
- tw_zumao:'TW祖茂',
- tw_zumao_prefix:'TW',
- tw_caoang:'TW曹昂',
- tw_caoang_prefix:'TW',
- tw_dingfeng:'TW丁奉',
- tw_dingfeng_prefix:'TW',
- tw_caohong:'TW将曹洪',
- tw_caohong_prefix:'TW将',
- tw_maliang:'TW马良',
- tw_maliang_prefix:'TW',
+ translate: {
+ tw_beimihu: 'TW卑弥呼',
+ tw_beimihu_prefix: 'TW',
+ nashime: '难升米',
+ tw_xiahouba: 'TW夏侯霸',
+ tw_xiahouba_prefix: 'TW',
+ tw_zumao: 'TW祖茂',
+ tw_zumao_prefix: 'TW',
+ tw_caoang: 'TW曹昂',
+ tw_caoang_prefix: 'TW',
+ tw_dingfeng: 'TW丁奉',
+ tw_dingfeng_prefix: 'TW',
+ tw_caohong: 'TW将曹洪',
+ tw_caohong_prefix: 'TW将',
+ tw_maliang: 'TW马良',
+ tw_maliang_prefix: 'TW',
- twyanqin:'姻亲',
- twyanqin_info:'准备阶段,你可以将势力变更为魏或蜀。',
- twbaobian:'豹变',
- twbaobian_info:'当你使用【杀】或【决斗】造成伤害时,若目标角色的势力与你相同,则你可以防止此伤害,然后其将手牌数补充至与体力值相同。若不同且其手牌数大于体力值,则你可以将其手牌弃置至与其体力值相同。',
- twtijin:'替巾',
- twtijin_info:'当你攻击范围内的一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,此【杀】结算完成后,你弃置该角色的一张牌。',
- twxiaolian:'孝廉',
- twxiaolian_info:'当一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,当你受到此【杀】的伤害后,你可以将一张牌置于此【杀】原目标的武将牌旁,称为“马”,且令其获得如下效果:其他角色计算至其的距离+X(X为其武将牌旁的“马”数)。',
- twqijia:'弃甲',
- twqijia_info:'出牌阶段,你可以弃置一张装备区内的牌(每种类型的装备牌限一次),然后视为对攻击范围内的一名其他角色使用了一张【杀】。',
- twzhuchen:'诛綝',
- twzhuchen_info:'出牌阶段,你可以弃置一张【桃】或【酒】并选择一名其他角色。你与其的距离视为1直到此阶段结束。',
- twhuzhu:'护主',
- twhuzhu_info:'出牌阶段限一次,若你的装备区内有牌,则你可以令一名其他角色交给你一张手牌,然后获得你装备区内的一张牌。若其体力值不大于你,则你可以令其回复1点体力。',
- twliancai:'敛财',
- twliancai_info:'结束阶段,你可以将武将牌翻面,然后获得一名其他角色装备区内的一张牌。当你的武将牌翻面时,你可以将手牌补至与体力值相同。',
- twrangyi:'攘夷',
- twrangyi2:'攘夷',
- twrangyi_info:'出牌阶段限一次,你可以将所有手牌交给一名其他角色,然后令其选择一项:1.使用其中的一张牌,并于此牌被使用时将其余的牌交还给你。2.受到来自你的1点伤害。',
- twbaimei:'白眉',
- twbaimei_info:'锁定技,若你没有手牌,则防止你受到的所有属性伤害和锦囊牌造成的伤害。',
- chijie:'持节',
- chijie_info:' 游戏开始时,你可以选择一个现存势力,你的势力视为该势力。',
- waishi:'外使',
- waishi_info:' 出牌阶段限一次,你可以用至多X张牌交换一名其他角色等量的手牌(X为现存势力数),然后若其与你势力相同或手牌多于你,你摸一张牌。',
- renshe:'忍涉',
- renshe_info:'当你受到伤害后,你可以选择一项:将势力改为现存的另一个势力;或可以额外发动一次“外使”直到你的下个出牌阶段结束;或与另一名其他角色各摸一张牌。',
- tw_gexuan:'TW葛玄',
- tw_gexuan_prefix:'TW',
- twdanfa:'丹法',
- twdanfa_info:'准备阶段或结束阶段开始时,你可将一张牌置于武将牌上,称为“丹”。每回合每种花色限一次,当你使用牌时,若“丹”中有与此牌花色相同的牌,则你摸一张牌。',
- twlingbao:'灵宝',
- twlingbao_info:'出牌阶段限一次,你可以将两张花色不同的“丹”置入弃牌堆。若这两张牌:均为红色,你令一名其他角色回复1点体力;均为黑色,你弃置一名其他角色区域内至多两张区域不同牌;颜色不同,则你令一名角色摸一张牌,并令另一名角色弃置一张牌。',
- twsidao:'司道',
- twsidao_info:'游戏开始时,你选择一张“法宝”置入装备区。准备阶段,若你以此法选择的法宝在牌堆/弃牌堆中,则你使用之。',
- gx_lingbaoxianhu:'灵宝仙壶',
- gx_lingbaoxianhu_info:'锁定技,当你造成点数大于1的伤害后,或有角色死亡后,你加1点体力上限并回复1点体力。',
- gx_taijifuchen:'太极拂尘',
- gx_taijifuchen_info:'锁定技,当你使用【杀】指定目标后,你令目标角色选择一项:①弃置一张牌,若此牌和【杀】花色相同,则你获得之。②其不可响应此【杀】。',
- gx_chongyingshenfu:'冲应神符',
- gx_chongyingshenfu_info:'锁定技。①当你受到牌造成的伤害后,你记录此牌的名称。②当你受到〖冲应神符①〗记录过的牌造成的伤害时,你令此牌伤害-1。',
- tw_dongzhao:'TW董昭',
- tw_dongzhao_prefix:'TW',
- twmiaolve:'妙略',
- twmiaolve_info:'游戏开始时,你获得两张【瞒天过海】。当你受到1点伤害后,你可选择:①获得一张【瞒天过海】并摸一张牌。②获得一张智囊。',
- twyingjia:'迎驾',
- twyingjia_info:'一名角色的回合结束时,若你本回合内使用过两张或更多的同名锦囊牌,则你可弃置一张手牌并令一名角色进行一个额外回合。',
- dz_mantianguohai:'瞒天过海',
- dz_mantianguohai_info:'此牌不计入拥有者的手牌上限。出牌阶段,对一至两名区域内有牌的其他角色使用。你获得目标角色一张牌,然后依次交给每名目标角色各一张牌。',
- jiachong:'TW贾充',
- jiachong_prefix:'TW',
- beini:'悖逆',
- beini_info:'出牌阶段限一次,你可以选择一名体力值不小于你的角色,令你或其摸两张牌,然后未摸牌的角色视为对摸牌的角色使用一张【杀】。',
- dingfa:'定法',
- dingfa_info:'弃牌阶段结束时,若本回合你失去的牌数不小于你的体力值,你可以选择一项:1、回复1点体力;2、对一名其他角色造成1点伤害。',
- duosidawang:'朵思大王',
- equan:'恶泉',
- equan_info:'锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有技能失效直到回合结束。',
- manji:'蛮汲',
- manji_info:'锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。',
- wuban:'TW吴班',
- wuban_prefix:'TW',
- jintao:'进讨',
- jintao_info:'锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。',
- yuejiu:'TW乐就',
- yuejiu_prefix:'TW',
- cuijin:'催进',
- cuijin_info:'当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌并获得如下效果:此【杀】的伤害值基数+1,且当此【杀】结算结束后,若未造成过伤害,则你对使用者造成1点伤害。',
- tw_zhaoxiang:'TW赵襄',
- tw_zhaoxiang_prefix:'TW',
- twfuhan:'扶汉',
- twfuhan_info:'限定技。准备阶段开始时时,你可以移去所有"梅影"标记,然后从五张未登场的蜀势力武将牌中选择一名获得其所有技能,将体力上限数调整为以此技能移去所有“梅影”标记的数量(最少为2,最多为8)并回复1点体力,然后从牌堆/弃牌堆/场上获得【梅影枪】。',
- twqueshi:'鹊拾',
- twqueshi_info:'游戏开始时,你将【梅影枪】置于你的装备区。',
- meiyingqiang:'梅影枪',
- meiyingqiang_info:'当你于其他角色的回合内第一次失去牌时,你可以使用一张【杀】。',
- tw_fuwan:'TW伏完',
- tw_fuwan_prefix:'TW',
- twmoukui:'谋溃',
- twmoukui_info:'当你使用【杀】指定目标后,你可以选择一项:①摸一张牌;②弃置该角色的一张牌;③背水:若此【杀】未因造成伤害而令该角色进入过濒死状态,则该角色弃置你的一张牌。',
- tw_yujin:'SP于禁',
- tw_yujin_prefix:'SP',
- xinzhenjun:'镇军',
- xinzhenjun_info:'出牌阶段开始时,你可以将一张牌交给一名其他角色,令其选择是否使用一张不为黑色的【杀】。若其选择是,则你于此【杀】结算完成后摸1+X张牌(X为此【杀】造成的伤害总点数)。若其选择否,则你对其或其攻击范围内的一名其他角色造成1点伤害。',
- tw_hucheer:'TW胡车儿',
- tw_hucheer_prefix:'TW',
- twshenxing:'神行',
- twshenxing_info:'锁定技。若你的装备区内没有坐骑牌,则你至其他角色的距离-1且手牌上限+1。',
- twdaoji:'盗戟',
- twdaoji_info:'出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法得到的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。',
- tw_hejin:'TW何进',
- tw_hejin_prefix:'TW',
- twmouzhu:'谋诛',
- twmouzhu_info:'出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于你的其他角色依次选择是否交给你一张牌。若你以此法得到的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择由你视为对其使用一张伤害值基数为X的【杀】或【决斗】。',
- twyanhuo:'延祸',
- twyanhuo_info:'当你死亡时,你可以选择一项:①令一名其他角色弃置X张牌。②令X名其他角色依次弃置一张牌。(X为你的牌数)',
- tw_mayunlu:'TW马云禄',
- tw_mayunlu_prefix:'TW',
- twfengpo:'凤魄',
- twfengpo_info:'①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。',
- tw_re_caohong:'TW曹洪',
- tw_re_caohong_prefix:'TW',
- twyuanhu:'援护',
- twyuanhu_info:'出牌阶段限一次。你可将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌或宝物牌,其回复1点体力。然后若其体力值或手牌数不大于你,则你摸一张牌,且你可以于本回合的结束阶段发动一次〖援护〗。',
- twjuezhu:'决助',
- twjuezhu_info:'限定技。准备阶段,你可废除一个坐骑栏,令一名角色获得〖飞影〗并废除判定区。该角色死亡后,你恢复以此法废除的装备栏。',
- tw_zangba:'TW臧霸',
- tw_zangba_prefix:'TW',
- twhanyu:'捍御',
- twhanyu_info:'锁定技。游戏开始时,你获得牌堆中的基本牌,锦囊牌,装备牌各一张。',
- twhengjiang:'横江',
- twhengjiang_info:'出牌阶段限一次,当你使用基本牌或普通锦囊牌指定唯一目标后,你可将此牌的目标改为攻击范围内的所有合法目标,然后你于此牌结算结束后摸X张牌(X为因响应此牌而使用或打出过牌的角色数)。',
- tw_huojun:'TW霍峻',
- tw_huojun_prefix:'TW',
- twsidai:'伺怠',
- twsidai_info:'限定技。出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用(无距离和次数限制)。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限;包含【酒】,则当目标角色受到此牌的伤害时,此伤害×2。',
- twjieyu:'竭御',
- twjieyu_info:'每轮限一次。结束阶段开始时,或当你于一轮内第一次受到伤害后,你可以弃置所有手牌,然后从弃牌堆中获得不同牌名的基本牌各一张。',
- tw_liuhong:'TW刘宏',
- tw_liuhong_prefix:'TW',
- twyujue:'鬻爵',
- twyujue_give:'鬻爵',
- twyujue_info:'①其他角色的出牌阶段内,可以交给你任意张牌(每阶段上限为两张)。②当你于回合外获得其他角色的一张牌后,你可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。',
- twgezhi:'革制',
- twgezhi_info:'①当你于出牌阶段内首次使用某种类别的牌时,你可以重铸一张手牌。②出牌阶段结束时,若你本阶段内因〖革制①〗失去过至少两张牌,则你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',
- twfengqi:'烽起',
- twfengqi_info:'主公技,锁定技。①其他群势力角色发动〖鬻爵①〗时,将每阶段上限改为四张。②以其他角色为目标的〖革制②〗结算结束后,目标角色可以获得其武将牌上的主公技。',
- tw_caocao:'TW曹操',
- tw_caocao_prefix:'TW',
- twlingfa:'令法',
- twlingfa_info:'①第一轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。②第二轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。③第三轮游戏开始时,你失去〖令法〗并获得〖治暗〗。',
- twzhian:'治暗',
- twzhian_info:'每回合限一次。一名角色使用装备牌或延时锦囊牌后,你可选择:⒈弃置位于场上的此牌。⒉弃置一张手牌并获得位于场上的此牌。⒊对其造成1点伤害。',
- tw_zhangmancheng:'TW张曼成',
- tw_zhangmancheng_prefix:'TW',
- twfengji:'蜂集',
- twfengji_info:'出牌阶段开始时,若你没有“示”,则你可以将一张牌作为“示”置于武将牌上并施法:从牌堆中获得X张与“示”牌名相同的牌,然后移去“示”。',
- twyiju:'蚁聚',
- twyiju_info:'非锁定技。若你的武将牌上有“示”,则:①你使用【杀】的次数上限和攻击范围的基数改为你的体力值。②当你受到伤害时,你移去“示”,且令此伤害+1。',
- twbudao:'布道',
- twbudao_info:'限定技。准备阶段,你可减1点体力上限,回复1点体力并选择获得一个〖布道〗技能池里的技能(三选一)。然后你可以令一名其他角色也获得此技能并交给你一张牌。',
- twzhouhu:'咒护',
- twzhouhu_info:'出牌阶段限一次。你可以弃置一张红色手牌并施法:回复X点体力。',
- twharvestinori:'丰祈',
- twharvestinori_info:'出牌阶段限一次。你可以弃置一张黑色手牌并施法:摸2X张牌。',
- twzuhuo:'阻祸',
- twzuhuo_info:'出牌阶段限一次。你可以弃置一张非基本牌并施法:防止你受到的下X次伤害。',
- twzhouzu:'咒诅',
- twzhouzu_info:'出牌阶段限一次。你可以对一名其他角色施法:其弃置X张牌,然后你对其造成1点雷电伤害。',
- twhuangjin:'黄巾',
- twhuangjin_info:'锁定技。当你一名角色使用【杀】指定你为目标时,若此【杀】有点数,你判定,若点数与此【杀】点数差值不大于1,则此【杀】对你无效。',
- twguimen:'鬼门',
- twguimen_info:'锁定技。当你弃置牌时,若其中有♠牌,你为每一张♠牌判定,若此牌点数与结果之差不大于1,你对一名其他角色造成2点雷电伤害。',
- twdidao:'地道',
- twdidao_info:'一名角色的判定牌生效前,你可以打出一张牌作为判定牌并获得原判定牌。若你以此法打出的牌与原判定牌颜色相同,你摸一张牌。',
- tw_chengpu:'TW程普',
- tw_chengpu_prefix:'TW',
- twlihuo:'疠火',
- twlihuo2:'疠火',
- twlihuo3:'疠火',
- twlihuo_info:'①当你声明使用普【杀】后,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。',
- twchunlao:'醇醪',
- twchunlao_info:'①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则其可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。',
- tw_guohuai:'TW郭淮',
- tw_guohuai_prefix:'TW',
- twjingce:"精策",
- twjingce_info:"当你于出牌阶段使用第X张牌结算完毕后,你可以摸两张牌(X为你的体力值)。若此阶段你此前已摸过牌或本回合造成过伤害,你获得一枚“策”标记。",
- yuzhang:"御嶂",
- yuzhang_info:"你可以弃置一枚“策”标记,然后跳过一个阶段。当你受到伤害后,你可弃置一枚“策”标记,然后选择一项:⒈令伤害来源弃置两张牌;⒉令伤害来源本回合不能再使用或打出牌。",
- tw_caozhao:'曹肇',
- twfuzuan:'复纂',
- twfuzuan_info:'出牌阶段限一次/当你受到伤害后/当你对其他角色造成伤害后,你可选择一名拥有转换技的角色,变更其的一个转换技的的状态。',
- twchongqi:'宠齐',
- twchongqi_info:'锁定技。游戏开始时,你令所有角色获得〖非服〗。然后你可减1点体力上限,令一名其他角色获得〖复纂〗。',
- twfeifu:'非服',
- twfeifu_info:'锁定技,转换技。阴:当你成为【杀】的唯一目标后;阳:当你使用【杀】指定唯一目标后;目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。',
- tw_wangchang:'TW王昶',
- tw_wangchang_prefix:'TW',
- twkaiji:'开济',
- twkaiji_info:'准备阶段,你可令至多X名角色各摸一张牌(X为本局游戏内进入过濒死状态的角色数+1)。若有角色以此法获得了非基本牌,则你摸一张牌。',
- twshepan:'慑叛',
- twshepan_info:'每回合限一次。当你成为其他角色使用牌的目标后,你可选择一项:⒈摸一张牌。⒉将其区域内的一张牌置于牌堆顶。然后若你的手牌数与其相等,则你将此技能的发动次数归零,且可以令此牌对你无效。',
- tw_wangcan:'TW王粲',
- tw_wangcan_prefix:'TW',
- twdianyi:'典仪',
- twdianyi_info:'锁定技。你的回合结束时,若你本回合内:造成过伤害,你弃置所有手牌;未造成过伤害,你将手牌数调整至四张。',
- twyingji:'应机',
- twyingji_wuxie:'应机',
- twyingji_info:'当你于回合外需要使用或打出一张基本牌或普通锦囊牌时,若你没有手牌,则你可摸一张牌,然后视为使用或打出此牌。',
- twshanghe:'觞贺',
- twshanghe_info:'限定技。当你进入濒死状态时,你可令所有其他角色依次交给你一张牌;若这些牌中没有【酒】,则你将体力回复至1点。',
- tw_wujing:'TW吴景',
- tw_wujing_prefix:'TW',
- twfenghan:'锋捍',
- twfenghan_info:'每回合限一次。当你使用【杀】或伤害类锦囊牌指定第一个目标后,你可令至多X名角色各摸一张牌(X为此牌的目标数)。',
- twcongji:'从击',
- twcongji_info:'当你的红色牌于回合外因弃置而进入弃牌堆后,你可令一名其他角色获得这些牌。',
- old_quancong:'TW全琮',
- old_quancong_prefix:'TW',
- zhenshan:'振赡',
- zhenshan_info:'每回合限一次,当你需要使用或打出一张基本牌时,你可以与一名手牌数少于你的角色交换手牌,视为使用或打出此牌。',
- tw_tianyu:'TW田豫',
- tw_tianyu_prefix:'TW',
- gz_tw_tianyu:'田豫',
- twzhenxi:'震袭',
- twzhenxi_info:'每回合限一次。当你使用【杀】指定目标后,你可选择一项:⒈弃置其X张手牌(X为你至其的距离);⒉将其装备区或判定区内的一张牌移动到另一名角色的装备区或判定区内。若其体力值大于你或其体力值为全场最高,则你可以改为依次执行以上两项。',
- twyangshi:'扬师',
- twyangshi_info:'锁定技。当你受到伤害后,若场上有不在你攻击范围内的其他角色,则你令攻击范围+1;若没有,则你从牌堆中获得一张【杀】。',
- tw_puyangxing:'濮阳兴',
- twzhengjian:'征建',
- twzhengjian_info:'游戏开始时,你可选择获得一项效果:⒈其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。⒉其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。',
- twzhongchi:'众斥',
- twzhongchi_info:'锁定技,限定技。当你因〖征建〗而得到牌后,若已经有至少X名角色因〖征建〗而交给你过牌(X为游戏人数的一半且向上取整),则你回复2点体力,且于本局游戏内受到渠道为【杀】的伤害+1,且你将〖征建〗中的“其须交给你一张牌”改为“你可对其造成1点伤害”。',
- tw_bingyuan:'邴原',
- twbingde:'秉德',
- twbingde_info:'出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。',
- twqingtao:'清滔',
- twqingtao_info:'①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
- tw_jiangji:'TW蒋济',
- tw_jiangji_prefix:'TW',
- twjichou:'急筹',
- twjichou_info:'①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
- twjilun:'机论',
- twjilun_info:'当你受到伤害后,你可以摸X张牌(X为〖急筹①〗记录数且至少为1,至多为5),或视为使用一张〖急筹①〗记录过且未被〖机论〗记录过的普通锦囊牌并记录此牌。',
- tw_niufudongxie:'牛辅董翓',
- baonvezhi_faq:'关于暴虐值',
- baonvezhi_faq_info:'
当你造成或受到伤害后,你获得等量的暴虐值;暴虐值的上限为5。',
- twjuntun:'军屯',
- twjuntun_info:'①游戏开始时或当其他角色死亡后,你可令一名角色获得〖凶军〗。②当其他角色造成伤害后,若其拥有〖凶军〗,你获得等同于此次伤害值的暴虐值。',
- twxiongxi:'凶袭',
- twxiongxi_info:'出牌阶段限一次。你可以弃置X张牌对一名其他角色造成1点伤害(X为你的暴虐值与暴虐值上限之差)。',
- twxiafeng:'黠凤',
- twxiafeng_info:'出牌阶段开始时,你可消耗至多3点暴虐值并获得如下效果直到回合结束:你使用的前X张牌没有距离和次数限制且不可被响应,你的手牌上限+X(X为你以此法消耗的暴虐值)。',
- tw_bn_1:'一点',
- tw_bn_2:'两点',
- tw_bn_3:'三点',
- tw_bn_1_bg:'一',
- tw_bn_2_bg:'二',
- tw_bn_3_bg:'三',
- twxiongjun:'凶军',
- twxiongjun_info:'锁定技,每回合限一次。当你造成伤害后,所有拥有〖凶军〗的角色摸一张牌。',
- tw_jianshuo:'蹇硕',
- twkunsi:'困兕',
- twkunsi_info:'出牌阶段,你可以视为对一名未以此法选择过的其他角色使用一张【杀】。若此【杀】未造成伤害,其获得〖令戮〗直到你下回合开始,且当你成为其〖令戮〗的目标后,其可令你于〖令戮〗失败时进行两次结算。',
- twlinglu:'令戮',
- twlinglu_info:'强令:①任务:执行角色于其下回合结束前造成的伤害不小于2点。②成功:其摸两张牌。③失败:其失去1点体力。',
- tw_mateng:'TW马腾',
- tw_mateng_prefix:'TW',
- twxiongzheng:'雄争',
- twxiongzheng_info:'一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。',
- twluannian:'乱年',
- twluannian_info:'主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。',
- tw_baoxin:'TW鲍信',
- tw_baoxin_prefix:'TW',
- twmutao:'募讨',
- twmutao_info:'出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。',
- twyimou:'毅谋',
- twyimou_info:'当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色并摸两张牌;3.背水:将所有手牌交给其(若受伤角色为你则跳过此步骤),然后依次执行上述所有选项。',
- tw_liufuren:'刘夫人',
- twzhuidu:'追妒',
- twzhuidu_info:'出牌阶段限一次。你可以选择一名已受伤的其他角色并选择一项:1.对其造成1点伤害;2.弃置其装备区里的一张牌;3.背水:若该角色为女性,弃置一张牌,然后依次执行上述所有选项。',
- twshigong:'示恭',
- twshigong_info:'限定技。当你于回合外进入濒死状态时,你可以令当前回合角色选择一项:1.加1点体力上限并回复1点体力,摸一张牌,然后令你将体力回复至体力上限;2.弃置X张手牌,然后令你将体力回复至1点(X为其体力值)。',
- tw_wangling:'TW王淩',
- tw_wangling_prefix:'TW',
- twmibei:'秘备',
- twmibei_info:'使命技。①使命:使用每种类型且牌名不同的牌各两张。②成功:当你使用牌后,若你于本次事件完成了〖秘备①〗的使命,你获得〖谋立〗。③失败:出牌阶段结束时,若你本回合未使用过牌,你本回合手牌上限-1并重置〖秘备〗。',
- twxingqi:'星启',
- twxingqi_info:'觉醒技。准备阶段,若场上的牌数大于你的体力值,你回复1点体力,然后若〖秘备〗:未完成,你从牌堆中获得每种类型的牌各一张;已完成,本局游戏你使用牌无距离限制。',
- twmouli:'谋立',
- twmouli_backup:'谋立',
- twmouli_info:'每回合限一次。你可以使用牌堆中的一张基本牌。',
- tw_zhugeguo:'TW诸葛果',
- tw_zhugeguo_prefix:'TW',
- twqirang:'祈禳',
- twqirang_info:'当有装备牌进入你的装备区时,你可以从牌堆中获得一张锦囊牌,你本阶段使用此牌无距离限制且不可被响应,且当你使用此牌时,你可以为这张牌增加或减少一个目标。',
- twyuhua:'羽化',
- twyuhua_info:'锁定技。①你的非基本牌不计入手牌上限。②当你于回合外失去牌后,若其中有非基本牌,你可以卜算X,然后你可以摸X张牌(X为其中非基本牌数且至多为5)。',
- tw_fanchou:'TW樊稠',
- tw_fanchou_prefix:'TW',
- twxingluan:'兴乱',
- twxingluan_info:'结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法得到过牌且得到的牌数不少于你的角色失去1点体力。',
- tw_xujing:'TW许靖',
- tw_xujing_prefix:'TW',
- twboming:'博名',
- twboming_info:'①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合得到的牌数之和大于1,你摸两张牌。',
- twejian:'恶荐',
- twejian_info:'当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。',
- tw_zhangfei:'TW张飞',
- tw_zhangfei_prefix:'TW',
- twxuhe:'虚吓',
- twxuhe_info:'当你使用的【杀】被【闪】抵消时,你可以令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。',
- tw_xuezong:'TW薛综',
- tw_xuezong_prefix:'TW',
- twjiexun:'诫训',
- twjiexun_info:'结束阶段,你可以选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌。若其以此法弃置了所有牌,你选择一项:1.摸X张牌,然后将X归零;2.修改〖复难〗和〖诫训〗(X为此前〖诫训〗的发动次数)。',
- twfunanx:'复难·改',
- twjiexunx:'诫训·改',
- twfunanx_info:'当其他角色使用或打出牌响应你使用的牌时,你可获得其使用或打出的牌。',
- twjiexunx_info:'结束阶段,你可选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌(X为此前〖诫训〗的发动次数)。',
- tw_zhangning:'TW张宁',
- tw_zhangning_prefix:'TW',
- twxingzhui:'星坠',
- twxingzhui_info:'出牌阶段限一次。你可以失去1点体力并施法:亮出牌堆顶2X张牌,若其中有黑色牌,则你可令一名其他角色获得这些黑色牌。若黑色牌的数量不小于X,则你对其造成X点雷电伤害。',
- twjuchen:'聚尘',
- twjuchen_info:'结束阶段,若你的手牌数和体力值均不为全场最多,则你可以令所有角色弃置一张牌,然后你获得其中的红色牌。',
- tw_yufuluo:'于夫罗',
- twjiekuang:'竭匡',
- twjiekuang_info:'每回合限一次。当一名体力值小于你的角色成为其他角色使用基本牌或普通锦囊牌的唯一目标后,若没有角色处于濒死状态,你可以失去1点体力或减1点体力上限,将此牌的目标转移给你。然后此牌结算结束后,若此牌未造成伤害且此牌的使用者是你使用此牌名的牌的合法目标,你视为对此牌的使用者使用一张同名牌。',
- twneirao:'内扰',
- twneirao_info:'觉醒技。准备阶段,若你的体力值与体力上限之和不大于9,你失去〖竭匡〗,弃置所有牌并从牌堆或弃牌堆中获得等量的【杀】,然后获得〖乱掠〗。',
- twluanlve:'乱掠',
- twluanlve_info:'①出牌阶段,你可以将X张【杀】当做【顺手牵羊】对一名本阶段未成为过【顺手牵羊】的目标的角色使用(X为你以此法使用【顺手牵羊】的次数)。②当你使用牌时,若此牌为【顺手牵羊】,你令此牌不能被响应。',
- tw_fengxí:'冯习',
- twqingkou:'轻寇',
- twqingkou_info:'准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若伤害来源包括你,你跳过本回合的判定阶段和弃牌阶段。',
- tw_zhangji:'张既',
- twdingzhen:'定镇',//丁真
- twdingzhen_info:'一轮游戏开始时,你可以选择任意名你至其距离不大于X的角色(X为你的体力值),这些角色选择一项:1.弃置一张【杀】;2.本轮其于回合内使用的第一张牌不能指定你为目标。',
- twyouye:'攸业',
- twyouye_info:'锁定技。①其他角色的结束阶段,若其本回合未对你造成过伤害且“蓄”数小于5,你将牌堆顶的牌置于武将牌上,称为“蓄”。②当你造成或受到伤害后,若你有“蓄”,你将所有“蓄”分配给任意角色(若当前回合角色存活,则你至少为当前回合角色分配一张)。',
- tw_xunchen:'TW荀谌',
- tw_xunchen_prefix:'TW',
- twweipo:'危迫',
- twweipo_info:'出牌阶段限一次。你可以令一名角色弃置一张牌,然后令其获得一张【兵临城下】或一张由你选择的智囊牌。',
- twmouzhi:'谋识',
- twmouzhi_info:'锁定技。当你受到伤害时,若伤害渠道对应的牌和你上次受到的伤害渠道对应的牌颜色相同,则你防止此伤害。',
- tw_jiangqing:'TW蒋钦',
- tw_jiangqing_prefix:'TW',
- twshangyi:'尚义',
- twshangyi_info:'出牌阶段限一次。你可以弃置一张牌并选择一名有手牌的其他角色,你令其观看你的手牌,然后你观看其手牌并选择一项:1.弃置其中一张牌;2.与其交换一张手牌。若你以此法弃置了其的黑色牌,或你与其交换的两张牌均为红色,你摸一张牌。',
- twxiangyu:'翔羽',
- twxiangyu_info:'锁定技。①你于回合内的攻击范围+X(X为本回合失去过牌的角色数且至多为5)。②当你使用【杀】指定目标后,若你至目标角色的距离小于你的攻击范围,你令此目标角色抵消此【杀】所需使用的【闪】数+1。',
- twgyshenxing:'慎行',
- twgyshenxing_info:'出牌阶段,你可以弃置X张牌,然后摸一张牌并获得1枚“慎”标记(X为你的“慎”数且至多为2)。',
- tw_guyong:'TW顾雍',
- tw_guyong_prefix:'TW',
- twbingyi:'秉壹',
- twbingyi_info:'结束阶段,你可以展示所有手牌,若这些牌的颜色均相同或类别均相同,你可以令至多Y名角色各摸一张牌(Y为你的手牌数)。若你以此法展示的牌数大于1且这些牌的颜色均相同且类别均相同,你移去所有“慎”。',
- twyilie:'毅烈',
- twyilie_info:'出牌阶段开始时,你可以选择一项:1.本阶段内使用【杀】的次数上限+1;2.本回合内使用【杀】指定处于连环状态的目标后,或使用【杀】被【闪】抵消时,摸一张牌;3.背水:失去1点体力,然后依次执行上述所有选项。',
- tw_chendong:'TW陈武董袭',
- tw_chendong_prefix:'TW',
- twfenming:'奋命',
- twfenming_info:'准备阶段,你可以选择一名其他角色并选择一项:1.令其弃置一张牌;2.令其横置;3.背水:横置,然后依次执行上述所有选项。',
- tw_handang:'TW韩当',
- tw_handang_prefix:'TW',
- twgongji:'弓骑',
- twgongji2:'弓骑',
- twgongji_info:'①你的攻击范围无限。②出牌阶段限一次,你可以弃置一张牌,然后你使用与此牌花色相同的【杀】无任何次数限制直到回合结束。若你以此法弃置的牌为装备牌,则你可以弃置一名其他角色的一张牌。',
- twjiefan:'解烦',
- twjiefan_info:'限定技。出牌阶段,你可以选择一名角色,令攻击范围内含有其的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。然后当其第一次进入濒死状态后,你重置〖解烦〗。',
- tw_jiling:'TW纪灵',
- tw_jiling_prefix:'TW',
- twshuangren:'双刃',
- twshuangren_info:'①出牌阶段开始时,你可以与一名角色拼点。若你:赢,你可以视为对至多两名至其的距离不大于1的角色依次使用一张【杀】;没赢,其可以视为对你使用一张【杀】。②出牌阶段结束时,若你本回合未发动过〖双刃①〗且未造成过渠道为【杀】的伤害,你可以弃置一张牌发动〖双刃①〗。',
- tw_re_fazheng:'TW法正',
- tw_re_fazheng_prefix:'TW',
- twxuanhuo:'眩惑',
- twxuanhuo_info:'摸牌阶段结束时,你可以交给一名其他角色两张牌,然后其选择一项:1.视为对你选择的另一名其他角色使用一张【杀】或【决斗】,2.令你获得其两张牌。',
- twenyuan:'恩怨',
- twenyuan1:'恩怨',
- twenyuan2:'恩怨',
- twenyuan_info:'①当你获得一名其他角色的至少两张牌后,你可以令其摸一张牌,若其手牌区或装备区没有牌,则你可以改为令其回复1点体力。②当你受到1点伤害后,你可令伤害来源选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。',
- tw_madai:'TW马岱',
- tw_madai_prefix:'TW',
- twqianxi:'潜袭',
- twqianxi2:'潜袭',
- twqianxi3:'潜袭',
- twqianxi2_bg:'潜',
- twqianxi3_bg:'袭',
- twqianxi_info:'准备阶段,你可以摸一张牌并弃置一张牌,令一名距离为1的角色本回合不能使用或打出与你弃置的牌颜色相同的手牌。然后本回合的结束阶段,若你本回合对其造成过渠道为【杀】的伤害,你令其不能使用或打出与你以此法弃置的牌颜色不同的牌直到其下回合结束。',
- tw_niujin:'TW牛金',
- tw_niujin_prefix:'TW',
- twcuorui:'挫锐',
- twcuorui_info:'限定技。准备阶段,你可以将手牌摸至X张(X为场上角色手牌数最多的角色的手牌数,且至多摸5张)。然后若你的判定区:未废除,你废除判定区;已废除,你可以对一名其他角色造成1点伤害。',
- twliewei:'裂围',
- twliewei_info:'锁定技。当你杀死一名角色后,你选择一项:1.摸两张牌;2.若你拥有〖挫锐〗且〖挫锐〗已发动过,重置〖挫锐〗。',
- tw_guanqiujian:'TW毌丘俭',
- tw_guanqiujian_prefix:'TW',
- twzhengrong:'征荣',
- twzhengrong_tag:'荣',
- twzhengrong_info:'当你于出牌阶段使用牌结算结束后,若此牌为你于本局游戏你的出牌阶段内使用的第偶数张指定了其他角色为目标的牌,或你于出牌阶段第一次造成伤害后,你可以将一名其他角色的一张牌置于你的武将牌上,称为“荣”。',
- twhongju:'鸿举',
- twhongju_info:'觉醒技。准备阶段,若你的“荣”数不小于3,你摸等同于“荣”数的牌,且可以用任意手牌交换等量的“荣”,获得〖清侧〗,然后可以减1点体力上限并获得〖扫讨〗。',
- twqingce:'清侧',
- twqingce_backup:'清侧',
- twqingce_info:'出牌阶段,你可以将一张“荣”置入弃牌堆并选择一名区域内有牌的角色,你弃置其区域里的一张牌。',
- twsaotao:'扫讨',
- twsaotao_info:'锁定技。你使用【杀】和普通锦囊牌不能被响应。',
- tw_daxiaoqiao:'TW大乔小乔',
- tw_daxiaoqiao_prefix:'TW',
- twxingwu:'星舞',
- twxingwu_info:'弃牌阶段开始时,你可以将一张牌置于武将牌上,称为“星舞”。然后你可移去三张“星舞”,弃置一名其他角色装备区里的所有牌,然后对其造成2点伤害(若其性别包含女性则改为1点伤害)。',
- twpingting:'娉婷',
- twpingting_info:'锁定技。①一轮游戏开始时或其他角色于你的回合内进入濒死状态时,你摸一张牌并将一张牌置于武将牌上,称为“星舞”。②若你有“星舞”,你视为拥有〖天香〗和〖流离〗。',
- tw_furong:'TW傅肜',
- tw_furong_prefix:'TW',
- twxuewei:'血卫',
- twxuewei_info:'每轮限一次。一名其他角色A的出牌阶段开始时,你可以选择另一名其他角色B,然后你令A选择一项:1.本回合不能对B使用【杀】且手牌上限-2;2.你视为对A使用一张【决斗】。',
- twliechi:'烈斥',
- twliechi_info:'当你受到伤害后,若伤害来源的体力值不小于你,你可以选择一项:1.令其将手牌数弃置至与你的手牌数相同;2.弃置其一张牌;3.背水:若你本回合进入过濒死状态,弃置一张装备牌,然后依次执行上述所有选项。',
- tw_yl_luzhi:'TW卢植',
- tw_yl_luzhi_prefix:'TW',
- twmingren:'明任',
- twmingren_info:'①游戏开始时,你摸一张牌,然后将一张手牌置于武将牌上,称为“任”。②出牌阶段开始时或出牌阶段结束时,你可以用一张牌替换“任”。',
- twzhenliang:'贞良',
- twzhenliang_info:'转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。',
- tw_zhangnan:'张南',
- twfenwu:'奋武',
- twfenwu_info:'结束阶段,你可以失去1点体力并视为使用一张无距离限制的【杀】。若本回合你使用过的基本牌种数大于1,此【杀】伤害基数+1。',
- tw_huchuquan:'呼厨泉',
- twfupan:'复叛',
- twfupan_info:'当你造成或受到伤害后,你可以摸X张牌并将一张牌交给一名其他角色(X为伤害值)。若你此前:未以此法交给过该角色牌,你摸两张牌;以此法交给过该角色牌,你可{对其造成1点伤害,然后你不能再以此法交给其牌}。',
- tw_liuzhang:'TW刘璋',
- tw_liuzhang_prefix:'TW',
- twyaohu:'邀虎',
- twyaohu_info:'每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。',
- tw_liwei:'TW李遗',
- tw_liwei_prefix:'TW',
- twjiaohua:'教化',
- twjiaohua_info:'当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。',
- tw_yanxiang:'TW阎象',
- tw_yanxiang_prefix:'TW',
- twkujian:'苦谏',
- twkujianx:'谏',
- twkujian_info:'出牌阶段限一次。你可以将至多三张手牌交给一名其他角色,称为“谏”,你获得以下效果:当其他角色使用或打出牌后,若其中有“谏”,你与其各摸一张牌;当其他角色不因使用或打出而失去牌后,若其中有“谏”,你与其各弃置一张牌。',
- twruilian:'睿敛',
- twruilian2:'睿敛',
- twruilian_info:'一轮游戏开始时,你可以选择一名角色。其下回合结束时,若其本回弃置过至少两张其的牌,你可以选择其本回合弃置过的一种类别,你与其各从弃牌堆中获得一张此类别的牌。',
- tw_xiahouen:'夏侯恩',
- twfujian:'负剑',
- twfujian_info:'锁定技。①游戏开始时或准备阶段,若你的装备区里没有武器牌,你随机将牌堆中的一张武器牌置入装备区。②当你于回合外失去武器牌后,你失去1点体力。',
- twjianwei:'剑威',
- twjianwei_info:'①若你的装备区里有武器牌,你使用【杀】无视防具且拼点牌点数+X(X为你的攻击范围)。②{其他角色的准备阶段,其可以与你拼点}/{准备阶段,你可以与攻击范围内的一名角色拼点}。若你赢,你获得其每个区域内的各一张牌;若其赢,其获得你装备区里的武器牌。',
- tw_xiahoushang:'夏侯尚',
- twtanfeng:'探锋',
- twtanfeng_info:'准备阶段,你可以弃置一名其他角色区域内的一张牌,然后其选择一项:1.受到你造成的1点火焰伤害,然后令你跳过本回合的一个阶段(准备阶段和结束阶段除外);2.将一张牌当做【杀】对你使用(有距离限制)。',
- tw_zongyu:'TW宗预',
- tw_zongyu_prefix:'TW',
- twzhibian:'直辩',
- twzhibian_info:'出牌阶段开始时,你可以与一名其他角色拼点。若你赢,你可以选择一项:{1.将其区域里的一张牌移动到你的对应区域;2.回复1点体力;3.背水:弃置一张非基本牌,然后依次执行上述所有选项};若你没赢,你失去1点体力。',
- twyuyan:'御严',
- twyuyan_info:'锁定技。当你成为体力值大于你的角色使用的【杀】的目标时,你令使用者选择一项:1.交给你一张点数大于此【杀】的牌(若此【杀】无点数则改为非基本牌)。2.取消此目标。',
- tw_zhouchu:'TW周处',
- tw_zhouchu_prefix:'TW',
- twguoyi:'果毅',
- twguoyi_info:'当你不因〖果毅〗使用【杀】或普通锦囊牌指定一名其他角色为目标后,若其体力值或手牌数最大,或你的手牌数不大于X(X为你已损失的体力值+1),你可令其选择一项:1.本回合不能使用或打出手牌;2.弃置X张牌。若条件均满足,或其于本回合两个选项均已选择过,则你于此牌结算结束后依次视为对此牌的所有目标使用一张名称和属性相同的牌。',
- twchuhai:'除害',
- twchuhai_info:'使命技。①使命:令至少两名其他角色进入濒死状态。②成功:一名角色的回合结束时,若你于本回合完成了〖除害①〗的使命,你废除判定区,然后每名其他角色依次交给你一张牌。③当你获得其他角色的牌后,你须将其中的一张牌置入弃牌堆。',
- tw_qiaogong:'TW桥公',
- tw_qiaogong_prefix:'TW',
- twyizhu:'遗珠',
- twyizhu_info:'①结束阶段,你摸两张牌,然后将两张牌随机插入牌堆前2X张牌的位置中,称为“遗珠”(X为角色数,选择牌的牌名对其他角色可见)。②当有其他角色使用“遗珠”指定唯一目标时,你可以选择一项:1.增加一个目标;2.取消此目标,增加一个目标。然后移除此牌对应的“遗珠”记录并摸一张牌。',
- twluanchou:'鸾俦',
- twluanchou_info:'出牌阶段限一次。你可以令两名角色获得〖共患〗直到你下次发动此技能。',
- twgonghuan:'共患',
- twgonghuan_info:'每回合限一次。当其他角色受到伤害时,若其拥有〖共患〗且其体力值不大于你,你可以将此伤害转移给你(不触发〖共患〗)。',
- tw_qiaorui:'TW桥蕤',
- tw_qiaorui_prefix:'TW',
- wangxing:'妄行',
- twxiawei:'狭威',
- twxiawei_info:'①游戏开始时,你将牌堆中的两张基本牌置于武将牌上,称为“威”。②回合开始时,你将所有“威”置入弃牌堆。③你可以将“威”如手牌般使用或打出。④妄行:准备阶段,你可以将牌堆顶的X+1张牌置于武将牌上,称为“威”。',
- twqiongji:'穷技',
- twqiongji_info:'锁定技。①每回合限一次。当你使用或打出“威”后,你摸一张牌。②当你受到伤害时,若你没有“威”,此伤害+1。',
- tw_bianfuren:'TW卞夫人',
- tw_bianfuren_prefix:'TW',
- twwanwei:'挽危',
- twwanwei_info:'每回合限一次。当一名体力值最小的角色受到伤害时:若该角色不为你,你可以防止此伤害,然后失去1点体力;若该角色为你,或你的体力上限最大,你可以于当前回合的结束阶段获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之。',
- twyuejian:'约俭',
- twyuejian_info:'出牌阶段限一次。你可以将X张牌置于牌堆顶或牌堆底(X为你的手牌数减你的手牌上限且至少为1)。若你以此法失去的牌数:不小于3,你的体力上限+1;不小于2,你回复1点体力;不小于1,你的手牌上限+1。',
- tw_chenzhen:'TW陈震',
- tw_chenzhen_prefix:'TW',
- twmuyue:'睦约',
- twmuyue_info:'出牌阶段限一次。你可以弃置一张牌并选择一个基本牌或普通锦囊牌的牌名,然后令一名角色从牌堆中获得一张此牌名的牌。若你以此法弃置的牌的牌名与你选择的牌名相同,你下次发动〖睦约〗无需弃牌。',
- twchayi:'察异',
- twchayi_info:'结束阶段,你可以选择一名其他角色,令其选择一项:1.展示所有手牌;2.下次使用牌时弃置一张牌。该角色的下个回合结束时,若其手牌数与其上一次成为〖察异〗目标后的手牌数不相同,其执行另一项。',
- tw_feiyi:'TW费祎',
- tw_feiyi_prefix:'TW',
- twshengxi:'生息',
- twshengxi_info:'①准备阶段,你可以获得一张【调剂盐梅】。②结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊并摸一张牌。',
- twkuanji:'宽济',
- twkuanji_info:'每回合限一次。当你的牌不因使用而进入弃牌堆后,你可以令一名其他角色获得其中的一张牌。',
- xia_wangyue:'王越',
- twyulong:'驭龙',
- twyulong_info:'当你使用【杀】指定第一个目标后,你可以与一名目标角色拼点。若你赢,且你此次的拼点牌为:黑色,此【杀】伤害+1;红色,此【杀】不可被响应。当此【杀】造成伤害后,若你赢,你令此【杀】不计入次数。',
- twjianming:'剑鸣',
- twjianming_info:'锁定技。每回合每种花色限一次,当你使用或打出【杀】时,你摸一张牌。',
- xia_liyàn:'李彦',
- twzhenhu:'震虎',
- twzhenhu_info:'当你使用伤害牌指定第一个目标时,你可以摸一张牌并与至多三名其他角色共同拼点。若你赢,此牌对所有本次拼点没赢的角色造成的伤害+1;若你没赢,你失去1点体力。',
- twlvren:'履刃',
- twlvren_info:'①当你对其他角色造成伤害时,你令其获得1枚“刃”标记。②当你使用伤害牌时,你可以额外指定一名有“刃”的角色并移去其所有“刃”。③你的拼点牌点数+2X(X为参与此次拼点的角色数)。',
- xia_tongyuan:'侠童渊',
- xia_tongyuan_prefix:'侠',
- twchaofeng:'朝凤',
- twchaofeng_backup:'朝凤',
- twchaofeng_info:'①你可以将一张【杀】当做【闪】、【闪】当做任意一种【杀】使用或打出。②出牌阶段开始时,你可以与至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】。',
- twchuanshu:'传术',
- twchuanshu_info:'限定技。准备阶段,你可以选择一名角色。直到你的下回合开始,其获得以下效果:1.当其拼点牌亮出时,此牌点数+3;2.其使用的下一张【杀】对除你外的角色造成伤害时,此伤害+1;3.若其不为你,其使用的下一张【杀】结算结束后,你摸等同于其因此【杀】造成的伤害值数的牌。',
- xia_xushu:'侠徐庶',
- xia_xushu_prefix:'侠',
- twjiange:'剑歌',
- twjiange_info:'每回合限一次。你可以将一张非基本牌当做【杀】使用或打出(无距离和次数限制,且不计入次数)。若此时不为你的回合,你摸一张牌。',
- twxiawang:'侠望',
- twxiawang_info:'当一名角色受到伤害后,若你至其的距离不大于1,你可以对伤害来源使用一张【杀】。当此【杀】结算结束后,若你造成过渠道为此牌的伤害,结束当前阶段。',
- tw_haomeng:'TW郝萌',
- tw_haomeng_prefix:'TW',
- twgongge:'攻阁',
- twgongge_info:'摧坚:你可以选择一项:1.摸X+1张牌。其响应此牌后,跳过你的下一个摸牌阶段;2.弃置其X+1张牌。此牌结算结束后,若其体力值不小于你,你交给其X张牌;3.此牌对其造成的伤害+X。此牌结算结束后,其回复X点体力。',
- tw_weixu:'魏续',
- twsuizheng:'随征',
- twsuizheng_info:'锁定技。游戏开始时,你选择一名其他角色,称为“随征”角色。你获得以下效果:当“随征”角色造成伤害后,你摸一张牌;当“随征”角色受到伤害后,你选择一项:1.失去1点体力,令其从牌堆或弃牌堆中获得一张【杀】或【决斗】;2.弃置两张基本牌,令其回复1点体力。',
- twtuidao:'颓盗',
- twtuidao_info:'限定技。准备阶段,若“随征”角色的体力值不大于2或“随征”角色已死亡,你可以废除你与其的一个坐骑栏并选择一个类别,然后若“随征”角色存活,你获得其所有此类别的牌,否则你从牌堆中获得两张此类别的牌。然后你将“随征”角色改为另一名角色。',
- tw_caoxiu:'TW曹休',
- tw_caoxiu_prefix:'TW',
- twqianju:'千驹',
- twqianju_info:'锁定技。①你计算与其他角色的距离-X(X为你装备区的牌数)。②每回合限一次。当你对距离为1以内的角色造成伤害后,若你的装备区存在空置装备栏,你从牌堆或弃牌堆中将一张你空置装备栏对应副类别的装备牌置于你的装备区。',
- twqingxi:'倾袭',
- twqingxi_info:'当你使用张【杀】指定目标后,若此牌为你于本回合使用的第一张【杀】,你可以令目标角色选择一项:1.令你摸Y张牌,此【杀】不可被其响应(Y为你装备区的牌数且至少为1);2.若其装备区里有牌,弃置装备区里的所有牌,然后弃置你装备区里的等量张牌,令此【杀】对其造成的伤害+1。',
- tw_sunyi:'TW孙翊',
- tw_sunyi_prefix:'TW',
- twzaoli:'躁厉',
- twzaoli_info:'锁定技。①出牌阶段,你只能使用或打出你本回合得到的手牌。②出牌阶段开始时,你须弃置你区域内的所有装备牌并弃置任意张非装备手牌,你摸等量的牌,从牌堆中将你此次弃置的装备牌对应副类别的装备牌置入装备区。若你以此法置入了超过两张装备牌,你失去1点体力。',
- tw_yangyi:'TW杨仪',
- tw_yangyi_prefix:'TW',
- twgongsun:'共损',
- twgongsun_shadow:'共损',
- twgongsun_info:'锁定技。出牌阶段开始时,你选择攻击范围内的一名其他角色并选择一种花色,直至你的下个回合开始前或你死亡时,你与其均无法使用、打出或弃置该花色的手牌。',
- tw_dengzhi:'TW邓芝',
- tw_dengzhi_prefix:'TW',
- twjimeng:'急盟',
- twjimeng_info:'出牌阶段限一次。你可以获得一名其他角色区域内的一张牌,然后交给其一张牌。若其体力值不小于你,你摸一张牌。',
- xia_lusu:'侠鲁肃',
- xia_lusu_prefix:'侠',
- twkaizeng:'慨赠',
- twkaizeng_info:'其他角色的出牌阶段限一次。其可以选择一种基本牌的牌名或非基本牌的类型,然后令你选择是否交给其任意张手牌。若你以此法:交给其至少两张牌,你摸一张牌;交给其的牌中包含其选择的牌名或类型的牌,你获得一张与此牌名或类型不同的牌。',
- twyangming:'扬名',
- twyangming_info:'出牌阶段结束时,你可以摸X张牌,且令本回合的手牌上限+X(X为你本阶段使用过的牌的类型数)。',
- xia_dianwei:'侠典韦',
- xia_dianwei_prefix:'侠',
- twliexi:'烈袭',
- twliexi_info:'准备阶段,你可以弃置任意张牌并选择一名其他角色。若你以此法弃置的牌数大于其体力值,你对其造成1点伤害;否则其对你造成1点伤害。然后若你弃置的牌中有武器牌,你对其造成1点伤害。',
- twshezhong:'慑众',
- twshezhong_info:'结束阶段,若你:本回合对其他角色造成过伤害,你可以令至多X名其他角色下个摸牌阶段的额定摸牌数-1(X为你本回合造成的伤害值);本回合受到过伤害,你可以将手牌摸至与其中一名伤害来源的体力值相同(至多摸至5)。',
- xia_zhaoe:'赵娥',
- twyanshi:'言誓',
- twyanshi_info:'①游戏开始时,你选择一名其他角色,称为“言誓”角色。②当你或“言誓”角色受到二者之外角色造成的伤害后,伤害来源获得1枚“誓”标记。③你对有“誓”的角色使用牌无距离限制。④当你对有“誓”的角色造成伤害时,此伤害+1,且当你对这些角色造成伤害后,你摸等同于伤害值的牌并移去其所有“誓”。',
- twrenchou:'刃仇',
- twrenchou_info:'锁定技。当你或“言誓”角色死亡时,若二者中的另一名角色A存活,A对杀死你或其的角色造成X点伤害(X为A的体力值)。',
- xia_xiahouzie:'夏侯紫萼',
- twxuechang:'血偿',
- twxuechang_info:'出牌阶段限一次。你可以与一名其他角色拼点。若你:赢,你获得其一张牌,若此牌为装备牌,你视为对其使用一张【杀】;没赢,其对你造成1点伤害,且你下次对其造成的伤害+1。',
- twduoren:'夺刃',
- twduoren_info:'①当你杀死角色后,你可以减1点体力上限,然后获得其所有的非主公技和非隐匿技。②当你令其他角色进入濒死状态时,你失去因〖夺刃①〗获得的技能。',
- tw_yangang:'严纲',
- twzhiqu:'直取',
- twzhiqu_info:'结束阶段,你可以选择一名其他角色并依次使用牌堆顶X张牌中的【杀】。搏击:依次使用牌堆顶X张牌中的锦囊牌(X为你距离不大于1内的角色数,且你或其以外的角色不是你以此法使用牌的合法目标)。',
- twxianfeng:'先锋',
- twxianfeng_info:'当你于出牌阶段使用【杀】或伤害类锦囊牌对其他角色造成伤害后,你可以令受伤角色选择一项:1.其摸一张牌,然后直到你下个回合开始时,你至其他角色的距离-1;2.你摸一张牌,然后直到你下个回合开始时,其至你的距离-1。',
- tw_gongsunfan:'公孙范',
- twhuiyuan:'回援',
- twhuiyuan_info:'当你于出牌阶段使用牌结算结束后,若你未于此阶段获得过此类型的牌,你可以展示一名角色的一张手牌,若此牌与你使用的牌类型相同,你获得此牌,否则你弃置此牌,然后其摸一张牌。游击:对其造成1点伤害。',
- twshoushou:'收绶',
- twshoushou_info:'①当你获得其他角色的牌时,若你在任意角色的攻击范围内,其他角色至你的距离+1。②当你造成或受到伤害后,若你不在任意其他角色的攻击范围内,其他角色至你的距离-1。',
- twshijun:'师君',
- twshijun_info:'主公技,其他群势力角色出牌阶段限一次,若你没有“米”,其可以摸一张牌,然后将一张牌置于你的武将牌上,称为“米”。',
- twjuxiang:'踞襄',
- twjuxiang_info:'主公技,其他群势力角色出牌阶段限一次,其可以选择其装备区的一张牌移动到你的装备区中,若你对应的装备栏已被废除,则改为交给你此装备牌,然后恢复你的对应装备栏。',
- tw_ol_sunjian:'TW孙坚',
- tw_ol_sunjian_prefix:'TW',
- twpolu:'破虏',
- twpolu_info:'主公技,当吴势力角色杀死一名角色或死亡后,你可以令任意名角色各摸X张牌(X为你此前发动过此技能的次数+1)。',
- tw_menghuo:'TW孟获',
- tw_menghuo_prefix:'TW',
- twqiushou:'酋首',
- twqiushou_info:'主公技,锁定技,当一张【南蛮入侵】结算结束后,若此牌造成的伤害大于3点或有角色因此死亡,所有蜀势力和群势力角色各摸一张牌。',
- twzhuiting:'坠廷',
- twzhuiting_info:'主公技,当一张锦囊牌即将对你生效时,其他魏势力角色和群势力角色可将一张与此牌颜色相同的牌当作【无懈可击】使用。',
- twniju:'逆拒',
- twniju_info:'主公技。当你的拼点牌亮出后,你可以令本次拼点事件中的一张拼点牌的点数+X或-X。然后当本次拼点事件结束后,若有两张拼点牌的点数相等,你摸X张牌(X为场上群势力角色数)。',
- ol_liuyu:'TW刘虞',
- ol_liuyu_prefix:'TW',
- twchongwang:'崇望',
- twchongwang_info:'主公技,其他群势力角色的出牌阶段开始时,其可以交给你一张牌,然后你与其使用【杀】或伤害性锦囊牌指定目标时不能指定对方为目标直至你的下回合结束(每名角色限发动一次)。',
- tw_zhangzhao:'张昭',
- twlijian:'力荐',
- twlijian_info:'昂扬技。其他角色的弃牌阶段结束时,你可以令其获得任意本阶段进入弃牌堆的牌(可不选),然后你获得其余的牌,若其得到的牌数大于你,你可以对其造成1点伤害。
激昂:八张牌进入弃牌堆。',
- twchungang:'纯刚',
- twchungang_info:'锁定技。一名其他角色于摸牌阶段外得到超过一张牌时,你令其弃置一张牌。',
- tw_zhanghong:'张纮',
- twquanqian:'劝迁',
- twquanqian_info:'昂扬技。出牌阶段限一次,你可以将至多四张花色各不相同的手牌交给一名其他角色,然后若你交出的牌数大于1,则你从牌堆中获得一张装备牌,然后选择一项:①将手牌数摸至与其相同;②观看其手牌并获得其一种花色的所有牌。
激昂:你弃置六张手牌。',
- twrouke:'柔克',
- twrouke_info:'锁定技。当你于摸牌阶段外得到超过一张牌时,你摸一张牌。',
- kaisa:"凯撒",
- zhengfu:"征服",
- zhengfu_info:"当你使用【杀】指定目标时,你可以选择一种牌的类别,然后除非目标角色交给你一种该类别的牌,否则其不能闪避此【杀】。",
- xia_xiahoudun:'侠夏侯惇',
- xia_xiahoudun_prefix:'侠',
- twdanlie:'胆烈',
- twdanlie_info:'①出牌阶段限一次。你可以与至多三名其他角色共同拼点。若你赢,你对没赢的角色依次造成1点伤害;若你没赢,你失去1点体力。②你的拼点牌点数+X(X为你已损失的体力值)。',
- xia_zhangwei:'张葳',
- twhuzhong:'护众',
- twhuzhong_info:'当你于出牌阶段使用无属性【杀】指定唯一目标角色时,你可以摸一张牌并选择一项:①为此牌额外选择一个目标;②弃置其一张手牌,此牌结算完毕后,若此牌造成过伤害,则你摸一张牌且本阶段可以额外使用一张【杀】。',
- twfenwang:'焚亡',
- twfenwang_info:'锁定技。①当你受到属性伤害时,你须弃置一张牌或令此伤害+1。②当你对其他角色造成非属性伤害时,若你的手牌数大于等于其,则此伤害+1。',
- xia_xiahousone:'夏侯子萼',
- twchengxi:'承袭',
- twchengxi_info:'出牌阶段每名角色限一次,你可以摸一张牌并与一名其他角色拼点。若你赢,你使用的下一张基本牌或非延时锦囊牌结算完毕后,你视为对原目标使用一张无次数限制的同名牌;若你没赢,其视为对你使用一张无距离限制的【杀】。',
- xia_liubei:'侠刘备',
- xia_liubei_prefix:'侠',
- twshenyi:'伸义',
- twshenyi_info:'每回合限一次,当你或你攻击范围内的一名角色于一回合内首次受到伤害后,你可以声明一种基本牌或锦囊牌(每种牌名限一次),然后从牌堆中将一张同名牌(若没有同名牌则改为同类型的牌)称为“侠义”置于武将牌上。若受伤角色不为你,则你可以将任意张手牌交给其,且当其失去一张你以此法交给其的牌后,你摸一张牌。',
- twxinghan:'兴汉',
- twxinghan_info:'①你的回合外或你处于濒死状态时,你可以如手牌般使用或打出“侠义”牌。②准备阶段,若“侠义”牌数大于存活角色数,则你可以依次使用其中所有可以使用的牌。然后你获得如下效果:回合结束时,你弃置所有手牌并失去X点体力(X为你的体力值-1且X至少为1)。',
- twxinghan_tag:'侠义',
- xia_guanyu:'侠关羽',
- xia_guanyu_prefix:'侠',
- twzhongyi:'忠义',
- twzhongyi_info:'锁定技。①你使用【杀】无距离限制。②当你使用【杀】结算完毕后,你选择一项:⒈摸X张牌;⒉回复X点体力;⒊背水:失去Y点体力,依次执行以上两项(X为此牌造成的伤害值,Y为你本局游戏此前选择此项的次数+1)。',
- twchue:'除恶',
- twchue_info:'①当你使用【杀】指定唯一目标时,你可以失去1点体力,为此牌额外指定Z个目标。②当你受到伤害或失去体力后,你摸一张牌并获得1个“勇”标记。③回合结束时,若你本回合发动过〖除恶②〗,则你可以失去Z个“勇”标记,视为使用一张伤害+1且可以额外指定Z个目标的【杀】。(Z为你的体力值)',
- xia_shitao:'石韬',
- twjieqiu:'劫囚',
- twjieqiu_info:'出牌阶段限一次,你可以选择一名装备区没有废除栏的其他角色,废除其所有装备栏,然后其摸X张牌(X为其废除装备栏前的装备区牌数),直到其恢复所有装备栏前:其弃牌阶段结束时,其恢复等同于其弃置牌数的装备栏;其回合结束时,若其仍有已废除的装备栏,则你执行一个额外回合(每轮限一次)。',
- twenchou:'恩仇',
- twenchou_info:'出牌阶段限一次,你可以观看一名存在废除装备栏的其他角色的手牌并获得其中一张牌,然后你恢复其一个装备栏。',
- xia_shie:'史阿',
- twdengjian:'登剑',
- twdengjianx:'剑法',
- twdengjian_info:'①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。',
- twxinshou:'心授',
- twxinshou_info:'①当你于出牌阶段使用【杀】时,若此【杀】与你本回合使用的所有其他【杀】的颜色均不相同,则你可以选择执行以下一项本回合未执行过的项:⒈摸一张牌;⒉交给一名其他角色一张牌。②当你使用【杀】时,若〖心授①〗的两项本回合均已被你选择过,则你可以令〖登剑①〗失效并令一名其他角色获得〖登剑〗,你的下个回合开始时,其失去〖登剑〗,若其这期间使用【杀】造成过伤害,则你结束〖登剑①〗的失效状态。',
- xia_yuzhenzi:'玉真子',
- twhuajing:'化境',
- twhuajing_info:'①游戏开始时,你获得6个效果各不相同的无效果“武”标记。②一名拥有“武”标记的角色的攻击范围+X(X为其拥有的“武”标记数)。③出牌阶段限一次,你可以展示至多四张手牌,然后根据这些牌含有的花色数于本回合获得等量你拥有的“武”标记的效果。④拥有“武”标记效果的角色的武器牌失效(武器牌不提供攻击范围且武器技能失效)。',
- twhuajing_jian:'剑',
- twhuajing_jian_info:'当你使用【杀】指定目标后,你随机弃置目标角色两张牌。',
- twhuajing_dao:'刀',
- twhuajing_dao_info:'当你使用【杀】对没有手牌的目标角色造成伤害时,此伤害+1。',
- twhuajing_fu:'斧',
- twhuajing_fu_info:'当你使用的【杀】被【闪】响应后,你对目标角色造成1点伤害。',
- twhuajing_qiang:'枪',
- twhuajing_qiang_info:'当你使用黑色【杀】结算完毕后,你从牌堆或弃牌堆中获得一张【闪】。',
- twhuajing_ji:'戟',
- twhuajing_ji_info:'当你使用【杀】造成伤害时,你摸一张牌。',
- twhuajing_gong:'弓',
- twhuajing_gong_info:'当你使用【杀】造成伤害后,你随机弃置受伤角色装备区里的一张牌。',
- twtianshou:'天授',
- twtianshou_info:'锁定技,回合结束时,若你本回合使用【杀】造成过伤害,且你拥有本回合获得过效果的“武”标记,则你须将其中一个“武”标记交给一名其他角色并令其获得此标记的效果直到其回合结束,然后你摸一张牌。',
+ twyanqin: '姻亲',
+ twyanqin_info: '准备阶段,你可以将势力变更为魏或蜀。',
+ twbaobian: '豹变',
+ twbaobian_info: '当你使用【杀】或【决斗】造成伤害时,若目标角色的势力与你相同,则你可以防止此伤害,然后其将手牌数补充至与体力值相同。若不同且其手牌数大于体力值,则你可以将其手牌弃置至与其体力值相同。',
+ twtijin: '替巾',
+ twtijin_info: '当你攻击范围内的一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,此【杀】结算完成后,你弃置该角色的一张牌。',
+ twxiaolian: '孝廉',
+ twxiaolian_info: '当一名其他角色使用【杀】指定另一名其他角色为目标时,你可以将此【杀】的目标改为你。若如此做,当你受到此【杀】的伤害后,你可以将一张牌置于此【杀】原目标的武将牌旁,称为“马”,且令其获得如下效果:其他角色计算至其的距离+X(X为其武将牌旁的“马”数)。',
+ twqijia: '弃甲',
+ twqijia_info: '出牌阶段,你可以弃置一张装备区内的牌(每种类型的装备牌限一次),然后视为对攻击范围内的一名其他角色使用了一张【杀】。',
+ twzhuchen: '诛綝',
+ twzhuchen_info: '出牌阶段,你可以弃置一张【桃】或【酒】并选择一名其他角色。你与其的距离视为1直到此阶段结束。',
+ twhuzhu: '护主',
+ twhuzhu_info: '出牌阶段限一次,若你的装备区内有牌,则你可以令一名其他角色交给你一张手牌,然后获得你装备区内的一张牌。若其体力值不大于你,则你可以令其回复1点体力。',
+ twliancai: '敛财',
+ twliancai_info: '结束阶段,你可以将武将牌翻面,然后获得一名其他角色装备区内的一张牌。当你的武将牌翻面时,你可以将手牌补至与体力值相同。',
+ twrangyi: '攘夷',
+ twrangyi2: '攘夷',
+ twrangyi_info: '出牌阶段限一次,你可以将所有手牌交给一名其他角色,然后令其选择一项:1.使用其中的一张牌,并于此牌被使用时将其余的牌交还给你。2.受到来自你的1点伤害。',
+ twbaimei: '白眉',
+ twbaimei_info: '锁定技,若你没有手牌,则防止你受到的所有属性伤害和锦囊牌造成的伤害。',
+ chijie: '持节',
+ chijie_info: ' 游戏开始时,你可以选择一个现存势力,你的势力视为该势力。',
+ waishi: '外使',
+ waishi_info: ' 出牌阶段限一次,你可以用至多X张牌交换一名其他角色等量的手牌(X为现存势力数),然后若其与你势力相同或手牌多于你,你摸一张牌。',
+ renshe: '忍涉',
+ renshe_info: '当你受到伤害后,你可以选择一项:将势力改为现存的另一个势力;或可以额外发动一次“外使”直到你的下个出牌阶段结束;或与另一名其他角色各摸一张牌。',
+ tw_gexuan: 'TW葛玄',
+ tw_gexuan_prefix: 'TW',
+ twdanfa: '丹法',
+ twdanfa_info: '准备阶段或结束阶段开始时,你可将一张牌置于武将牌上,称为“丹”。每回合每种花色限一次,当你使用牌时,若“丹”中有与此牌花色相同的牌,则你摸一张牌。',
+ twlingbao: '灵宝',
+ twlingbao_info: '出牌阶段限一次,你可以将两张花色不同的“丹”置入弃牌堆。若这两张牌:均为红色,你令一名其他角色回复1点体力;均为黑色,你弃置一名其他角色区域内至多两张区域不同牌;颜色不同,则你令一名角色摸一张牌,并令另一名角色弃置一张牌。',
+ twsidao: '司道',
+ twsidao_info: '游戏开始时,你选择一张“法宝”置入装备区。准备阶段,若你以此法选择的法宝在牌堆/弃牌堆中,则你使用之。',
+ gx_lingbaoxianhu: '灵宝仙壶',
+ gx_lingbaoxianhu_info: '锁定技,当你造成点数大于1的伤害后,或有角色死亡后,你加1点体力上限并回复1点体力。',
+ gx_taijifuchen: '太极拂尘',
+ gx_taijifuchen_info: '锁定技,当你使用【杀】指定目标后,你令目标角色选择一项:①弃置一张牌,若此牌和【杀】花色相同,则你获得之。②其不可响应此【杀】。',
+ gx_chongyingshenfu: '冲应神符',
+ gx_chongyingshenfu_info: '锁定技。①当你受到牌造成的伤害后,你记录此牌的名称。②当你受到〖冲应神符①〗记录过的牌造成的伤害时,你令此牌伤害-1。',
+ tw_dongzhao: 'TW董昭',
+ tw_dongzhao_prefix: 'TW',
+ twmiaolve: '妙略',
+ twmiaolve_info: '游戏开始时,你获得两张【瞒天过海】。当你受到1点伤害后,你可选择:①获得一张【瞒天过海】并摸一张牌。②获得一张智囊。',
+ twyingjia: '迎驾',
+ twyingjia_info: '一名角色的回合结束时,若你本回合内使用过两张或更多的同名锦囊牌,则你可弃置一张手牌并令一名角色进行一个额外回合。',
+ dz_mantianguohai: '瞒天过海',
+ dz_mantianguohai_info: '此牌不计入拥有者的手牌上限。出牌阶段,对一至两名区域内有牌的其他角色使用。你获得目标角色一张牌,然后依次交给每名目标角色各一张牌。',
+ jiachong: 'TW贾充',
+ jiachong_prefix: 'TW',
+ beini: '悖逆',
+ beini_info: '出牌阶段限一次,你可以选择一名体力值不小于你的角色,令你或其摸两张牌,然后未摸牌的角色视为对摸牌的角色使用一张【杀】。',
+ dingfa: '定法',
+ dingfa_info: '弃牌阶段结束时,若本回合你失去的牌数不小于你的体力值,你可以选择一项:1、回复1点体力;2、对一名其他角色造成1点伤害。',
+ duosidawang: '朵思大王',
+ equan: '恶泉',
+ equan_info: '锁定技。①当有角色于你的回合内受到伤害后,其获得X枚“毒”(X为伤害值)。②准备阶段,你令所有拥有“毒”标记的角色移去所有“毒”标记并失去等量的体力。③当有角色因〖恶泉②〗进入濒死状态时,你令其所有技能失效直到回合结束。',
+ manji: '蛮汲',
+ manji_info: '锁定技。其他角色失去体力后,若你的体力值:不大于该角色,你回复1点体力;不小于该角色,你摸一张牌。',
+ wuban: 'TW吴班',
+ wuban_prefix: 'TW',
+ jintao: '进讨',
+ jintao_info: '锁定技,你使用【杀】无距离限制且次数上限+1。你于出牌阶段内使用的第一张【杀】伤害+1,第二张【杀】不可被响应。',
+ yuejiu: 'TW乐就',
+ yuejiu_prefix: 'TW',
+ cuijin: '催进',
+ cuijin_info: '当你或你攻击范围内的角色使用【杀】时,你可以弃置一张牌并获得如下效果:此【杀】的伤害值基数+1,且当此【杀】结算结束后,若未造成过伤害,则你对使用者造成1点伤害。',
+ tw_zhaoxiang: 'TW赵襄',
+ tw_zhaoxiang_prefix: 'TW',
+ twfuhan: '扶汉',
+ twfuhan_info: '限定技。准备阶段开始时时,你可以移去所有"梅影"标记,然后从五张未登场的蜀势力武将牌中选择一名获得其所有技能,将体力上限数调整为以此技能移去所有“梅影”标记的数量(最少为2,最多为8)并回复1点体力,然后从牌堆/弃牌堆/场上获得【梅影枪】。',
+ twqueshi: '鹊拾',
+ twqueshi_info: '游戏开始时,你将【梅影枪】置于你的装备区。',
+ meiyingqiang: '梅影枪',
+ meiyingqiang_info: '当你于其他角色的回合内第一次失去牌时,你可以使用一张【杀】。',
+ tw_fuwan: 'TW伏完',
+ tw_fuwan_prefix: 'TW',
+ twmoukui: '谋溃',
+ twmoukui_info: '当你使用【杀】指定目标后,你可以选择一项:①摸一张牌;②弃置该角色的一张牌;③背水:若此【杀】未因造成伤害而令该角色进入过濒死状态,则该角色弃置你的一张牌。',
+ tw_yujin: 'SP于禁',
+ tw_yujin_prefix: 'SP',
+ xinzhenjun: '镇军',
+ xinzhenjun_info: '出牌阶段开始时,你可以将一张牌交给一名其他角色,令其选择是否使用一张不为黑色的【杀】。若其选择是,则你于此【杀】结算完成后摸1+X张牌(X为此【杀】造成的伤害总点数)。若其选择否,则你对其或其攻击范围内的一名其他角色造成1点伤害。',
+ tw_hucheer: 'TW胡车儿',
+ tw_hucheer_prefix: 'TW',
+ twshenxing: '神行',
+ twshenxing_info: '锁定技。若你的装备区内没有坐骑牌,则你至其他角色的距离-1且手牌上限+1。',
+ twdaoji: '盗戟',
+ twdaoji_info: '出牌阶段限一次,你可以弃置一张非基本牌并选择一名攻击范围内的角色,获得其一张牌。若你以此法得到的牌为:基本牌,你摸一张牌;装备牌,你使用此牌并对其造成1点伤害。',
+ tw_hejin: 'TW何进',
+ tw_hejin_prefix: 'TW',
+ twmouzhu: '谋诛',
+ twmouzhu_info: '出牌阶段限一次,你可以选择一名其他角色A。你令除A外所有体力值小于等于你的其他角色依次选择是否交给你一张牌。若你以此法得到的牌数X:等于0,你和所有进行选择的角色依次失去1点体力。大于0,你令A选择由你视为对其使用一张伤害值基数为X的【杀】或【决斗】。',
+ twyanhuo: '延祸',
+ twyanhuo_info: '当你死亡时,你可以选择一项:①令一名其他角色弃置X张牌。②令X名其他角色依次弃置一张牌。(X为你的牌数)',
+ tw_mayunlu: 'TW马云禄',
+ tw_mayunlu_prefix: 'TW',
+ twfengpo: '凤魄',
+ twfengpo_info: '①当你使用【杀】或【决斗】指定唯一目标后,你可观看目标角色的手牌并选择一项:⒈摸X张牌。⒉令此牌的伤害值基数+X(X为其手牌中的♦数)。②当你杀死一名角色后,你将〖凤魄①〗中的“♦数”改为“红色牌数”。',
+ tw_re_caohong: 'TW曹洪',
+ tw_re_caohong_prefix: 'TW',
+ twyuanhu: '援护',
+ twyuanhu_info: '出牌阶段限一次。你可将一张装备牌置入一名角色的装备区内。若此牌为:武器牌,你弃置与其距离为1的另一名角色区域的一张牌;防具牌,其摸一张牌;坐骑牌或宝物牌,其回复1点体力。然后若其体力值或手牌数不大于你,则你摸一张牌,且你可以于本回合的结束阶段发动一次〖援护〗。',
+ twjuezhu: '决助',
+ twjuezhu_info: '限定技。准备阶段,你可废除一个坐骑栏,令一名角色获得〖飞影〗并废除判定区。该角色死亡后,你恢复以此法废除的装备栏。',
+ tw_zangba: 'TW臧霸',
+ tw_zangba_prefix: 'TW',
+ twhanyu: '捍御',
+ twhanyu_info: '锁定技。游戏开始时,你获得牌堆中的基本牌,锦囊牌,装备牌各一张。',
+ twhengjiang: '横江',
+ twhengjiang_info: '出牌阶段限一次,当你使用基本牌或普通锦囊牌指定唯一目标后,你可将此牌的目标改为攻击范围内的所有合法目标,然后你于此牌结算结束后摸X张牌(X为因响应此牌而使用或打出过牌的角色数)。',
+ tw_huojun: 'TW霍峻',
+ tw_huojun_prefix: 'TW',
+ twsidai: '伺怠',
+ twsidai_info: '限定技。出牌阶段,你可以将手牌区内的所有基本牌当做【杀】使用(无距离和次数限制)。若此牌对应的实体牌中:包含【闪】,则目标角色成为此牌的目标后,需弃置一张基本牌,否则不可响应此牌;包含【桃】,则当目标角色受到此牌的伤害后,其减1点体力上限;包含【酒】,则当目标角色受到此牌的伤害时,此伤害×2。',
+ twjieyu: '竭御',
+ twjieyu_info: '每轮限一次。结束阶段开始时,或当你于一轮内第一次受到伤害后,你可以弃置所有手牌,然后从弃牌堆中获得不同牌名的基本牌各一张。',
+ tw_liuhong: 'TW刘宏',
+ tw_liuhong_prefix: 'TW',
+ twyujue: '鬻爵',
+ twyujue_give: '鬻爵',
+ twyujue_info: '①其他角色的出牌阶段内,可以交给你任意张牌(每阶段上限为两张)。②当你于回合外获得其他角色的一张牌后,你可令其选择本回合内未选择过的一项:⒈弃置攻击范围内一名角色的一张牌。⒉下一次使用牌时,从牌堆中获得一张同类别的牌。',
+ twgezhi: '革制',
+ twgezhi_info: '①当你于出牌阶段内首次使用某种类别的牌时,你可以重铸一张手牌。②出牌阶段结束时,若你本阶段内因〖革制①〗失去过至少两张牌,则你可以令一名角色选择获得一个其未获得过的效果:⒈攻击范围+2;⒉手牌上限+2;⒊加1点体力上限。',
+ twfengqi: '烽起',
+ twfengqi_info: '主公技,锁定技。①其他群势力角色发动〖鬻爵①〗时,将每阶段上限改为四张。②以其他角色为目标的〖革制②〗结算结束后,目标角色可以获得其武将牌上的主公技。',
+ tw_caocao: 'TW曹操',
+ tw_caocao_prefix: 'TW',
+ twlingfa: '令法',
+ twlingfa_info: '①第一轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【杀】时,若其有牌,则其需弃置一张牌,否则受到你造成的1点伤害。②第二轮游戏开始时,你可选择获得如下效果直到本轮结束:其他角色使用【桃】结算结束后,若其有牌,则其需交给你一张牌,否则受到你造成的1点伤害。③第三轮游戏开始时,你失去〖令法〗并获得〖治暗〗。',
+ twzhian: '治暗',
+ twzhian_info: '每回合限一次。一名角色使用装备牌或延时锦囊牌后,你可选择:⒈弃置位于场上的此牌。⒉弃置一张手牌并获得位于场上的此牌。⒊对其造成1点伤害。',
+ tw_zhangmancheng: 'TW张曼成',
+ tw_zhangmancheng_prefix: 'TW',
+ twfengji: '蜂集',
+ twfengji_info: '出牌阶段开始时,若你没有“示”,则你可以将一张牌作为“示”置于武将牌上并施法:从牌堆中获得X张与“示”牌名相同的牌,然后移去“示”。',
+ twyiju: '蚁聚',
+ twyiju_info: '非锁定技。若你的武将牌上有“示”,则:①你使用【杀】的次数上限和攻击范围的基数改为你的体力值。②当你受到伤害时,你移去“示”,且令此伤害+1。',
+ twbudao: '布道',
+ twbudao_info: '限定技。准备阶段,你可减1点体力上限,回复1点体力并选择获得一个〖布道〗技能池里的技能(三选一)。然后你可以令一名其他角色也获得此技能并交给你一张牌。',
+ twzhouhu: '咒护',
+ twzhouhu_info: '出牌阶段限一次。你可以弃置一张红色手牌并施法:回复X点体力。',
+ twharvestinori: '丰祈',
+ twharvestinori_info: '出牌阶段限一次。你可以弃置一张黑色手牌并施法:摸2X张牌。',
+ twzuhuo: '阻祸',
+ twzuhuo_info: '出牌阶段限一次。你可以弃置一张非基本牌并施法:防止你受到的下X次伤害。',
+ twzhouzu: '咒诅',
+ twzhouzu_info: '出牌阶段限一次。你可以对一名其他角色施法:其弃置X张牌,然后你对其造成1点雷电伤害。',
+ twhuangjin: '黄巾',
+ twhuangjin_info: '锁定技。当你一名角色使用【杀】指定你为目标时,若此【杀】有点数,你判定,若点数与此【杀】点数差值不大于1,则此【杀】对你无效。',
+ twguimen: '鬼门',
+ twguimen_info: '锁定技。当你弃置牌时,若其中有♠牌,你为每一张♠牌判定,若此牌点数与结果之差不大于1,你对一名其他角色造成2点雷电伤害。',
+ twdidao: '地道',
+ twdidao_info: '一名角色的判定牌生效前,你可以打出一张牌作为判定牌并获得原判定牌。若你以此法打出的牌与原判定牌颜色相同,你摸一张牌。',
+ tw_chengpu: 'TW程普',
+ tw_chengpu_prefix: 'TW',
+ twlihuo: '疠火',
+ twlihuo2: '疠火',
+ twlihuo3: '疠火',
+ twlihuo_info: '①当你声明使用普【杀】后,你可以将此【杀】改为火【杀】。此牌使用结算结束后,若有角色因此【杀】造成的伤害进入过濒死状态,则你失去1点体力。②当你使用火【杀】选择目标后,你可为此牌增加一个目标。',
+ twchunlao: '醇醪',
+ twchunlao_info: '①准备阶段,若场上没有“醇”,则你可将一名角色区域内的一张牌置于其武将牌上,称为“醇”。②一名角色使用【杀】时,若其有“醇”,则其可以交给你一张牌,令此【杀】的伤害值基数+1。③一名角色进入濒死状态时,若其有“醇”,则你可以移去“醇”并摸一张牌,然后令其回复1点体力。',
+ tw_guohuai: 'TW郭淮',
+ tw_guohuai_prefix: 'TW',
+ twjingce: "精策",
+ twjingce_info: "当你于出牌阶段使用第X张牌结算完毕后,你可以摸两张牌(X为你的体力值)。若此阶段你此前已摸过牌或本回合造成过伤害,你获得一枚“策”标记。",
+ yuzhang: "御嶂",
+ yuzhang_info: "你可以弃置一枚“策”标记,然后跳过一个阶段。当你受到伤害后,你可弃置一枚“策”标记,然后选择一项:⒈令伤害来源弃置两张牌;⒉令伤害来源本回合不能再使用或打出牌。",
+ tw_caozhao: '曹肇',
+ twfuzuan: '复纂',
+ twfuzuan_info: '出牌阶段限一次/当你受到伤害后/当你对其他角色造成伤害后,你可选择一名拥有转换技的角色,变更其的一个转换技的的状态。',
+ twchongqi: '宠齐',
+ twchongqi_info: '锁定技。游戏开始时,你令所有角色获得〖非服〗。然后你可减1点体力上限,令一名其他角色获得〖复纂〗。',
+ twfeifu: '非服',
+ twfeifu_info: '锁定技,转换技。阴:当你成为【杀】的唯一目标后;阳:当你使用【杀】指定唯一目标后;目标角色须交给使用者一张牌。若此牌为装备牌,则使用者可使用此牌。',
+ tw_wangchang: 'TW王昶',
+ tw_wangchang_prefix: 'TW',
+ twkaiji: '开济',
+ twkaiji_info: '准备阶段,你可令至多X名角色各摸一张牌(X为本局游戏内进入过濒死状态的角色数+1)。若有角色以此法获得了非基本牌,则你摸一张牌。',
+ twshepan: '慑叛',
+ twshepan_info: '每回合限一次。当你成为其他角色使用牌的目标后,你可选择一项:⒈摸一张牌。⒉将其区域内的一张牌置于牌堆顶。然后若你的手牌数与其相等,则你将此技能的发动次数归零,且可以令此牌对你无效。',
+ tw_wangcan: 'TW王粲',
+ tw_wangcan_prefix: 'TW',
+ twdianyi: '典仪',
+ twdianyi_info: '锁定技。你的回合结束时,若你本回合内:造成过伤害,你弃置所有手牌;未造成过伤害,你将手牌数调整至四张。',
+ twyingji: '应机',
+ twyingji_wuxie: '应机',
+ twyingji_info: '当你于回合外需要使用或打出一张基本牌或普通锦囊牌时,若你没有手牌,则你可摸一张牌,然后视为使用或打出此牌。',
+ twshanghe: '觞贺',
+ twshanghe_info: '限定技。当你进入濒死状态时,你可令所有其他角色依次交给你一张牌;若这些牌中没有【酒】,则你将体力回复至1点。',
+ tw_wujing: 'TW吴景',
+ tw_wujing_prefix: 'TW',
+ twfenghan: '锋捍',
+ twfenghan_info: '每回合限一次。当你使用【杀】或伤害类锦囊牌指定第一个目标后,你可令至多X名角色各摸一张牌(X为此牌的目标数)。',
+ twcongji: '从击',
+ twcongji_info: '当你的红色牌于回合外因弃置而进入弃牌堆后,你可令一名其他角色获得这些牌。',
+ old_quancong: 'TW全琮',
+ old_quancong_prefix: 'TW',
+ zhenshan: '振赡',
+ zhenshan_info: '每回合限一次,当你需要使用或打出一张基本牌时,你可以与一名手牌数少于你的角色交换手牌,视为使用或打出此牌。',
+ tw_tianyu: 'TW田豫',
+ tw_tianyu_prefix: 'TW',
+ gz_tw_tianyu: '田豫',
+ twzhenxi: '震袭',
+ twzhenxi_info: '每回合限一次。当你使用【杀】指定目标后,你可选择一项:⒈弃置其X张手牌(X为你至其的距离);⒉将其装备区或判定区内的一张牌移动到另一名角色的装备区或判定区内。若其体力值大于你或其体力值为全场最高,则你可以改为依次执行以上两项。',
+ twyangshi: '扬师',
+ twyangshi_info: '锁定技。当你受到伤害后,若场上有不在你攻击范围内的其他角色,则你令攻击范围+1;若没有,则你从牌堆中获得一张【杀】。',
+ tw_puyangxing: '濮阳兴',
+ twzhengjian: '征建',
+ twzhengjian_info: '游戏开始时,你可选择获得一项效果:⒈其他角色的出牌阶段结束时,若其本阶段内未使用过非基本牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果二。⒉其他角色的出牌阶段结束时,若其本阶段内未得到过牌,则其须交给你一张牌,然后你可失去此效果并获得〖征建〗的效果一。',
+ twzhongchi: '众斥',
+ twzhongchi_info: '锁定技,限定技。当你因〖征建〗而得到牌后,若已经有至少X名角色因〖征建〗而交给你过牌(X为游戏人数的一半且向上取整),则你回复2点体力,且于本局游戏内受到渠道为【杀】的伤害+1,且你将〖征建〗中的“其须交给你一张牌”改为“你可对其造成1点伤害”。',
+ tw_bingyuan: '邴原',
+ twbingde: '秉德',
+ twbingde_info: '出牌阶段限一次。你可以选择一个本阶段未选择过的花色并弃置一张牌,你摸等同于本阶段你使用此花色的牌数,然后若你以此法弃置的牌的花色与你选择的花色相同,你令你〖秉德〗于此阶段发动的次数上限+1。',
+ twqingtao: '清滔',
+ twqingtao_info: '①摸牌阶段结束时,你可以重铸一张牌。若此牌为【酒】或非基本牌,你摸一张牌。②结束阶段,若你本回合未发动〖清滔①〗,你可以发动〖清滔①〗。',
+ tw_jiangji: 'TW蒋济',
+ tw_jiangji_prefix: 'TW',
+ twjichou: '急筹',
+ twjichou_info: '①每回合限一次。你可以视为使用一张未被〖急筹①〗记录过的普通锦囊牌并记录此牌。②你无法响应或{使用对应实体牌包含你的手牌的}〖急筹①〗记录过的锦囊牌。③出牌阶段限一次。你可将手牌中的一张〖急筹①〗记录过的锦囊牌交给其他角色。',
+ twjilun: '机论',
+ twjilun_info: '当你受到伤害后,你可以摸X张牌(X为〖急筹①〗记录数且至少为1,至多为5),或视为使用一张〖急筹①〗记录过且未被〖机论〗记录过的普通锦囊牌并记录此牌。',
+ tw_niufudongxie: '牛辅董翓',
+ baonvezhi_faq: '关于暴虐值',
+ baonvezhi_faq_info: '
当你造成或受到伤害后,你获得等量的暴虐值;暴虐值的上限为5。',
+ twjuntun: '军屯',
+ twjuntun_info: '①游戏开始时或当其他角色死亡后,你可令一名角色获得〖凶军〗。②当其他角色造成伤害后,若其拥有〖凶军〗,你获得等同于此次伤害值的暴虐值。',
+ twxiongxi: '凶袭',
+ twxiongxi_info: '出牌阶段限一次。你可以弃置X张牌对一名其他角色造成1点伤害(X为你的暴虐值与暴虐值上限之差)。',
+ twxiafeng: '黠凤',
+ twxiafeng_info: '出牌阶段开始时,你可消耗至多3点暴虐值并获得如下效果直到回合结束:你使用的前X张牌没有距离和次数限制且不可被响应,你的手牌上限+X(X为你以此法消耗的暴虐值)。',
+ tw_bn_1: '一点',
+ tw_bn_2: '两点',
+ tw_bn_3: '三点',
+ tw_bn_1_bg: '一',
+ tw_bn_2_bg: '二',
+ tw_bn_3_bg: '三',
+ twxiongjun: '凶军',
+ twxiongjun_info: '锁定技,每回合限一次。当你造成伤害后,所有拥有〖凶军〗的角色摸一张牌。',
+ tw_jianshuo: '蹇硕',
+ twkunsi: '困兕',
+ twkunsi_info: '出牌阶段,你可以视为对一名未以此法选择过的其他角色使用一张【杀】。若此【杀】未造成伤害,其获得〖令戮〗直到你下回合开始,且当你成为其〖令戮〗的目标后,其可令你于〖令戮〗失败时进行两次结算。',
+ twlinglu: '令戮',
+ twlinglu_info: '强令:①任务:执行角色于其下回合结束前造成的伤害不小于2点。②成功:其摸两张牌。③失败:其失去1点体力。',
+ tw_mateng: 'TW马腾',
+ tw_mateng_prefix: 'TW',
+ twxiongzheng: '雄争',
+ twxiongzheng_info: '一轮游戏开始时,①若你上一轮发动过〖雄争〗且选择过“雄争”角色,你可以选择一项:1.视为对任意名上一轮内未对“雄争”角色造成过伤害的角色依次使用一张【杀】;2.令任意名上一轮对“雄争”角色造成过伤害的角色摸两张牌。②你可以选择一名未以此法选择过的角色,称为“雄争”角色。',
+ twluannian: '乱年',
+ twluannian_info: '主公技。其他群势力角色的出牌阶段限一次。其可以弃置X张牌并对“雄争”角色造成1点伤害(X为所有角色于本轮发动〖乱年〗的次数+1)。',
+ tw_baoxin: 'TW鲍信',
+ tw_baoxin_prefix: 'TW',
+ twmutao: '募讨',
+ twmutao_info: '出牌阶段限一次。你可以选择一名角色,令其将手牌中所有的【杀】依次交给其下家开始的每一名角色。然后其对最后一名以此法获得【杀】的角色A造成X点伤害(X为A手牌中【杀】的数量且至多为2)。',
+ twyimou: '毅谋',
+ twyimou_info: '当一名角色受到伤害后,若其存活且你至其的距离不大于1,你可以选择一项:1.令其从牌堆中获得一张【杀】;2.令其将一张手牌交给另一名角色并摸两张牌;3.背水:将所有手牌交给其(若受伤角色为你则跳过此步骤),然后依次执行上述所有选项。',
+ tw_liufuren: '刘夫人',
+ twzhuidu: '追妒',
+ twzhuidu_info: '出牌阶段限一次。你可以选择一名已受伤的其他角色并选择一项:1.对其造成1点伤害;2.弃置其装备区里的一张牌;3.背水:若该角色为女性,弃置一张牌,然后依次执行上述所有选项。',
+ twshigong: '示恭',
+ twshigong_info: '限定技。当你于回合外进入濒死状态时,你可以令当前回合角色选择一项:1.加1点体力上限并回复1点体力,摸一张牌,然后令你将体力回复至体力上限;2.弃置X张手牌,然后令你将体力回复至1点(X为其体力值)。',
+ tw_wangling: 'TW王淩',
+ tw_wangling_prefix: 'TW',
+ twmibei: '秘备',
+ twmibei_info: '使命技。①使命:使用每种类型且牌名不同的牌各两张。②成功:当你使用牌后,若你于本次事件完成了〖秘备①〗的使命,你获得〖谋立〗。③失败:出牌阶段结束时,若你本回合未使用过牌,你本回合手牌上限-1并重置〖秘备〗。',
+ twxingqi: '星启',
+ twxingqi_info: '觉醒技。准备阶段,若场上的牌数大于你的体力值,你回复1点体力,然后若〖秘备〗:未完成,你从牌堆中获得每种类型的牌各一张;已完成,本局游戏你使用牌无距离限制。',
+ twmouli: '谋立',
+ twmouli_backup: '谋立',
+ twmouli_info: '每回合限一次。你可以使用牌堆中的一张基本牌。',
+ tw_zhugeguo: 'TW诸葛果',
+ tw_zhugeguo_prefix: 'TW',
+ twqirang: '祈禳',
+ twqirang_info: '当有装备牌进入你的装备区时,你可以从牌堆中获得一张锦囊牌,你本阶段使用此牌无距离限制且不可被响应,且当你使用此牌时,你可以为这张牌增加或减少一个目标。',
+ twyuhua: '羽化',
+ twyuhua_info: '锁定技。①你的非基本牌不计入手牌上限。②当你于回合外失去牌后,若其中有非基本牌,你可以卜算X,然后你可以摸X张牌(X为其中非基本牌数且至多为5)。',
+ tw_fanchou: 'TW樊稠',
+ tw_fanchou_prefix: 'TW',
+ twxingluan: '兴乱',
+ twxingluan_info: '结束阶段,你可以亮出牌堆顶的六张牌,然后你可以选择一种类型的牌并分配给任意角色(每名角色至多三张)。然后所有以此法得到过牌且得到的牌数不少于你的角色失去1点体力。',
+ tw_xujing: 'TW许靖',
+ tw_xujing_prefix: 'TW',
+ twboming: '博名',
+ twboming_info: '①出牌阶段限两次。你可以将一张牌交给一名其他角色。②结束阶段,若所有其他角色于此回合得到的牌数之和大于1,你摸两张牌。',
+ twejian: '恶荐',
+ twejian_info: '当其他角色得到你的牌后,若其有其他与此牌类型相同的牌,你可以令其选择一项:1.受到你造成的1点伤害;2.弃置这些牌。',
+ tw_zhangfei: 'TW张飞',
+ tw_zhangfei_prefix: 'TW',
+ twxuhe: '虚吓',
+ twxuhe_info: '当你使用的【杀】被【闪】抵消时,你可以令其选择一项:1.受到你造成的1点伤害;2.本回合你使用的下一张牌对其造成伤害时,此伤害+2。',
+ tw_xuezong: 'TW薛综',
+ tw_xuezong_prefix: 'TW',
+ twjiexun: '诫训',
+ twjiexun_info: '结束阶段,你可以选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌。若其以此法弃置了所有牌,你选择一项:1.摸X张牌,然后将X归零;2.修改〖复难〗和〖诫训〗(X为此前〖诫训〗的发动次数)。',
+ twfunanx: '复难·改',
+ twjiexunx: '诫训·改',
+ twfunanx_info: '当其他角色使用或打出牌响应你使用的牌时,你可获得其使用或打出的牌。',
+ twjiexunx_info: '结束阶段,你可选择一个花色并令一名其他角色摸等同于场上此花色牌数张牌,然后其弃置X张牌(X为此前〖诫训〗的发动次数)。',
+ tw_zhangning: 'TW张宁',
+ tw_zhangning_prefix: 'TW',
+ twxingzhui: '星坠',
+ twxingzhui_info: '出牌阶段限一次。你可以失去1点体力并施法:亮出牌堆顶2X张牌,若其中有黑色牌,则你可令一名其他角色获得这些黑色牌。若黑色牌的数量不小于X,则你对其造成X点雷电伤害。',
+ twjuchen: '聚尘',
+ twjuchen_info: '结束阶段,若你的手牌数和体力值均不为全场最多,则你可以令所有角色弃置一张牌,然后你获得其中的红色牌。',
+ tw_yufuluo: '于夫罗',
+ twjiekuang: '竭匡',
+ twjiekuang_info: '每回合限一次。当一名体力值小于你的角色成为其他角色使用基本牌或普通锦囊牌的唯一目标后,若没有角色处于濒死状态,你可以失去1点体力或减1点体力上限,将此牌的目标转移给你。然后此牌结算结束后,若此牌未造成伤害且此牌的使用者是你使用此牌名的牌的合法目标,你视为对此牌的使用者使用一张同名牌。',
+ twneirao: '内扰',
+ twneirao_info: '觉醒技。准备阶段,若你的体力值与体力上限之和不大于9,你失去〖竭匡〗,弃置所有牌并从牌堆或弃牌堆中获得等量的【杀】,然后获得〖乱掠〗。',
+ twluanlve: '乱掠',
+ twluanlve_info: '①出牌阶段,你可以将X张【杀】当做【顺手牵羊】对一名本阶段未成为过【顺手牵羊】的目标的角色使用(X为你以此法使用【顺手牵羊】的次数)。②当你使用牌时,若此牌为【顺手牵羊】,你令此牌不能被响应。',
+ tw_fengxí: '冯习',
+ twqingkou: '轻寇',
+ twqingkou_info: '准备阶段,你可以视为对一名其他角色使用一张【决斗】。然后此牌的伤害来源摸一张牌,若伤害来源包括你,你跳过本回合的判定阶段和弃牌阶段。',
+ tw_zhangji: '张既',
+ twdingzhen: '定镇',//丁真
+ twdingzhen_info: '一轮游戏开始时,你可以选择任意名你至其距离不大于X的角色(X为你的体力值),这些角色选择一项:1.弃置一张【杀】;2.本轮其于回合内使用的第一张牌不能指定你为目标。',
+ twyouye: '攸业',
+ twyouye_info: '锁定技。①其他角色的结束阶段,若其本回合未对你造成过伤害且“蓄”数小于5,你将牌堆顶的牌置于武将牌上,称为“蓄”。②当你造成或受到伤害后,若你有“蓄”,你将所有“蓄”分配给任意角色(若当前回合角色存活,则你至少为当前回合角色分配一张)。',
+ tw_xunchen: 'TW荀谌',
+ tw_xunchen_prefix: 'TW',
+ twweipo: '危迫',
+ twweipo_info: '出牌阶段限一次。你可以令一名角色弃置一张牌,然后令其获得一张【兵临城下】或一张由你选择的智囊牌。',
+ twmouzhi: '谋识',
+ twmouzhi_info: '锁定技。当你受到伤害时,若伤害渠道对应的牌和你上次受到的伤害渠道对应的牌颜色相同,则你防止此伤害。',
+ tw_jiangqing: 'TW蒋钦',
+ tw_jiangqing_prefix: 'TW',
+ twshangyi: '尚义',
+ twshangyi_info: '出牌阶段限一次。你可以弃置一张牌并选择一名有手牌的其他角色,你令其观看你的手牌,然后你观看其手牌并选择一项:1.弃置其中一张牌;2.与其交换一张手牌。若你以此法弃置了其的黑色牌,或你与其交换的两张牌均为红色,你摸一张牌。',
+ twxiangyu: '翔羽',
+ twxiangyu_info: '锁定技。①你于回合内的攻击范围+X(X为本回合失去过牌的角色数且至多为5)。②当你使用【杀】指定目标后,若你至目标角色的距离小于你的攻击范围,你令此目标角色抵消此【杀】所需使用的【闪】数+1。',
+ twgyshenxing: '慎行',
+ twgyshenxing_info: '出牌阶段,你可以弃置X张牌,然后摸一张牌并获得1枚“慎”标记(X为你的“慎”数且至多为2)。',
+ tw_guyong: 'TW顾雍',
+ tw_guyong_prefix: 'TW',
+ twbingyi: '秉壹',
+ twbingyi_info: '结束阶段,你可以展示所有手牌,若这些牌的颜色均相同或类别均相同,你可以令至多Y名角色各摸一张牌(Y为你的手牌数)。若你以此法展示的牌数大于1且这些牌的颜色均相同且类别均相同,你移去所有“慎”。',
+ twyilie: '毅烈',
+ twyilie_info: '出牌阶段开始时,你可以选择一项:1.本阶段内使用【杀】的次数上限+1;2.本回合内使用【杀】指定处于连环状态的目标后,或使用【杀】被【闪】抵消时,摸一张牌;3.背水:失去1点体力,然后依次执行上述所有选项。',
+ tw_chendong: 'TW陈武董袭',
+ tw_chendong_prefix: 'TW',
+ twfenming: '奋命',
+ twfenming_info: '准备阶段,你可以选择一名其他角色并选择一项:1.令其弃置一张牌;2.令其横置;3.背水:横置,然后依次执行上述所有选项。',
+ tw_handang: 'TW韩当',
+ tw_handang_prefix: 'TW',
+ twgongji: '弓骑',
+ twgongji2: '弓骑',
+ twgongji_info: '①你的攻击范围无限。②出牌阶段限一次,你可以弃置一张牌,然后你使用与此牌花色相同的【杀】无任何次数限制直到回合结束。若你以此法弃置的牌为装备牌,则你可以弃置一名其他角色的一张牌。',
+ twjiefan: '解烦',
+ twjiefan_info: '限定技。出牌阶段,你可以选择一名角色,令攻击范围内含有其的所有角色依次选择一项:1.弃置一张武器牌;2.令其摸一张牌。然后当其第一次进入濒死状态后,你重置〖解烦〗。',
+ tw_jiling: 'TW纪灵',
+ tw_jiling_prefix: 'TW',
+ twshuangren: '双刃',
+ twshuangren_info: '①出牌阶段开始时,你可以与一名角色拼点。若你:赢,你可以视为对至多两名至其的距离不大于1的角色依次使用一张【杀】;没赢,其可以视为对你使用一张【杀】。②出牌阶段结束时,若你本回合未发动过〖双刃①〗且未造成过渠道为【杀】的伤害,你可以弃置一张牌发动〖双刃①〗。',
+ tw_re_fazheng: 'TW法正',
+ tw_re_fazheng_prefix: 'TW',
+ twxuanhuo: '眩惑',
+ twxuanhuo_info: '摸牌阶段结束时,你可以交给一名其他角色两张牌,然后其选择一项:1.视为对你选择的另一名其他角色使用一张【杀】或【决斗】,2.令你获得其两张牌。',
+ twenyuan: '恩怨',
+ twenyuan1: '恩怨',
+ twenyuan2: '恩怨',
+ twenyuan_info: '①当你获得一名其他角色的至少两张牌后,你可以令其摸一张牌,若其手牌区或装备区没有牌,则你可以改为令其回复1点体力。②当你受到1点伤害后,你可令伤害来源选择一项:1.失去1点体力;2.交给你一张手牌,若此牌的花色不为♥,你摸一张牌。',
+ tw_madai: 'TW马岱',
+ tw_madai_prefix: 'TW',
+ twqianxi: '潜袭',
+ twqianxi2: '潜袭',
+ twqianxi3: '潜袭',
+ twqianxi2_bg: '潜',
+ twqianxi3_bg: '袭',
+ twqianxi_info: '准备阶段,你可以摸一张牌并弃置一张牌,令一名距离为1的角色本回合不能使用或打出与你弃置的牌颜色相同的手牌。然后本回合的结束阶段,若你本回合对其造成过渠道为【杀】的伤害,你令其不能使用或打出与你以此法弃置的牌颜色不同的牌直到其下回合结束。',
+ tw_niujin: 'TW牛金',
+ tw_niujin_prefix: 'TW',
+ twcuorui: '挫锐',
+ twcuorui_info: '限定技。准备阶段,你可以将手牌摸至X张(X为场上角色手牌数最多的角色的手牌数,且至多摸5张)。然后若你的判定区:未废除,你废除判定区;已废除,你可以对一名其他角色造成1点伤害。',
+ twliewei: '裂围',
+ twliewei_info: '锁定技。当你杀死一名角色后,你选择一项:1.摸两张牌;2.若你拥有〖挫锐〗且〖挫锐〗已发动过,重置〖挫锐〗。',
+ tw_guanqiujian: 'TW毌丘俭',
+ tw_guanqiujian_prefix: 'TW',
+ twzhengrong: '征荣',
+ twzhengrong_tag: '荣',
+ twzhengrong_info: '当你于出牌阶段使用牌结算结束后,若此牌为你于本局游戏你的出牌阶段内使用的第偶数张指定了其他角色为目标的牌,或你于出牌阶段第一次造成伤害后,你可以将一名其他角色的一张牌置于你的武将牌上,称为“荣”。',
+ twhongju: '鸿举',
+ twhongju_info: '觉醒技。准备阶段,若你的“荣”数不小于3,你摸等同于“荣”数的牌,且可以用任意手牌交换等量的“荣”,获得〖清侧〗,然后可以减1点体力上限并获得〖扫讨〗。',
+ twqingce: '清侧',
+ twqingce_backup: '清侧',
+ twqingce_info: '出牌阶段,你可以将一张“荣”置入弃牌堆并选择一名区域内有牌的角色,你弃置其区域里的一张牌。',
+ twsaotao: '扫讨',
+ twsaotao_info: '锁定技。你使用【杀】和普通锦囊牌不能被响应。',
+ tw_daxiaoqiao: 'TW大乔小乔',
+ tw_daxiaoqiao_prefix: 'TW',
+ twxingwu: '星舞',
+ twxingwu_info: '弃牌阶段开始时,你可以将一张牌置于武将牌上,称为“星舞”。然后你可移去三张“星舞”,弃置一名其他角色装备区里的所有牌,然后对其造成2点伤害(若其性别包含女性则改为1点伤害)。',
+ twpingting: '娉婷',
+ twpingting_info: '锁定技。①一轮游戏开始时或其他角色于你的回合内进入濒死状态时,你摸一张牌并将一张牌置于武将牌上,称为“星舞”。②若你有“星舞”,你视为拥有〖天香〗和〖流离〗。',
+ tw_furong: 'TW傅肜',
+ tw_furong_prefix: 'TW',
+ twxuewei: '血卫',
+ twxuewei_info: '每轮限一次。一名其他角色A的出牌阶段开始时,你可以选择另一名其他角色B,然后你令A选择一项:1.本回合不能对B使用【杀】且手牌上限-2;2.你视为对A使用一张【决斗】。',
+ twliechi: '烈斥',
+ twliechi_info: '当你受到伤害后,若伤害来源的体力值不小于你,你可以选择一项:1.令其将手牌数弃置至与你的手牌数相同;2.弃置其一张牌;3.背水:若你本回合进入过濒死状态,弃置一张装备牌,然后依次执行上述所有选项。',
+ tw_yl_luzhi: 'TW卢植',
+ tw_yl_luzhi_prefix: 'TW',
+ twmingren: '明任',
+ twmingren_info: '①游戏开始时,你摸一张牌,然后将一张手牌置于武将牌上,称为“任”。②出牌阶段开始时或出牌阶段结束时,你可以用一张牌替换“任”。',
+ twzhenliang: '贞良',
+ twzhenliang_info: '转换技。阴:出牌阶段限一次。你可以弃置一张牌并对攻击范围内的一名角色造成1点伤害。阳:当你或你攻击范围内的一名角色于你的回合外受到伤害时,你可以弃置一张牌令此伤害-1。然后若你以此法弃置的牌颜色与“任”的颜色相同,你摸一张牌。',
+ tw_zhangnan: '张南',
+ twfenwu: '奋武',
+ twfenwu_info: '结束阶段,你可以失去1点体力并视为使用一张无距离限制的【杀】。若本回合你使用过的基本牌种数大于1,此【杀】伤害基数+1。',
+ tw_huchuquan: '呼厨泉',
+ twfupan: '复叛',
+ twfupan_info: '当你造成或受到伤害后,你可以摸X张牌并将一张牌交给一名其他角色(X为伤害值)。若你此前:未以此法交给过该角色牌,你摸两张牌;以此法交给过该角色牌,你可{对其造成1点伤害,然后你不能再以此法交给其牌}。',
+ tw_liuzhang: 'TW刘璋',
+ tw_liuzhang_prefix: 'TW',
+ twyaohu: '邀虎',
+ twyaohu_info: '每轮限一次。回合开始时,你须选择场上的一个势力。该势力的角色的出牌阶段开始时,其获得你的一张“生”,然后其须选择一项:1.对你指定的另一名的其他角色使用一张【杀】(无距离限制);2.本回合其使用伤害牌指定你为目标时须交给你两张牌,否则取消此目标。',
+ tw_liwei: 'TW李遗',
+ tw_liwei_prefix: 'TW',
+ twjiaohua: '教化',
+ twjiaohua_info: '当你或体力值最小的其他角色因摸牌而得到牌后,你可以令该角色从牌堆或弃牌堆中获得一张本次未获得的类别的牌(每种类别每回合限一次)。',
+ tw_yanxiang: 'TW阎象',
+ tw_yanxiang_prefix: 'TW',
+ twkujian: '苦谏',
+ twkujianx: '谏',
+ twkujian_info: '出牌阶段限一次。你可以将至多三张手牌交给一名其他角色,称为“谏”,你获得以下效果:当其他角色使用或打出牌后,若其中有“谏”,你与其各摸一张牌;当其他角色不因使用或打出而失去牌后,若其中有“谏”,你与其各弃置一张牌。',
+ twruilian: '睿敛',
+ twruilian2: '睿敛',
+ twruilian_info: '一轮游戏开始时,你可以选择一名角色。其下回合结束时,若其本回弃置过至少两张其的牌,你可以选择其本回合弃置过的一种类别,你与其各从弃牌堆中获得一张此类别的牌。',
+ tw_xiahouen: '夏侯恩',
+ twfujian: '负剑',
+ twfujian_info: '锁定技。①游戏开始时或准备阶段,若你的装备区里没有武器牌,你随机将牌堆中的一张武器牌置入装备区。②当你于回合外失去武器牌后,你失去1点体力。',
+ twjianwei: '剑威',
+ twjianwei_info: '①若你的装备区里有武器牌,你使用【杀】无视防具且拼点牌点数+X(X为你的攻击范围)。②{其他角色的准备阶段,其可以与你拼点}/{准备阶段,你可以与攻击范围内的一名角色拼点}。若你赢,你获得其每个区域内的各一张牌;若其赢,其获得你装备区里的武器牌。',
+ tw_xiahoushang: '夏侯尚',
+ twtanfeng: '探锋',
+ twtanfeng_info: '准备阶段,你可以弃置一名其他角色区域内的一张牌,然后其选择一项:1.受到你造成的1点火焰伤害,然后令你跳过本回合的一个阶段(准备阶段和结束阶段除外);2.将一张牌当做【杀】对你使用(有距离限制)。',
+ tw_zongyu: 'TW宗预',
+ tw_zongyu_prefix: 'TW',
+ twzhibian: '直辩',
+ twzhibian_info: '出牌阶段开始时,你可以与一名其他角色拼点。若你赢,你可以选择一项:{1.将其区域里的一张牌移动到你的对应区域;2.回复1点体力;3.背水:弃置一张非基本牌,然后依次执行上述所有选项};若你没赢,你失去1点体力。',
+ twyuyan: '御严',
+ twyuyan_info: '锁定技。当你成为体力值大于你的角色使用的【杀】的目标时,你令使用者选择一项:1.交给你一张点数大于此【杀】的牌(若此【杀】无点数则改为非基本牌)。2.取消此目标。',
+ tw_zhouchu: 'TW周处',
+ tw_zhouchu_prefix: 'TW',
+ twguoyi: '果毅',
+ twguoyi_info: '当你不因〖果毅〗使用【杀】或普通锦囊牌指定一名其他角色为目标后,若其体力值或手牌数最大,或你的手牌数不大于X(X为你已损失的体力值+1),你可令其选择一项:1.本回合不能使用或打出手牌;2.弃置X张牌。若条件均满足,或其于本回合两个选项均已选择过,则你于此牌结算结束后依次视为对此牌的所有目标使用一张名称和属性相同的牌。',
+ twchuhai: '除害',
+ twchuhai_info: '使命技。①使命:令至少两名其他角色进入濒死状态。②成功:一名角色的回合结束时,若你于本回合完成了〖除害①〗的使命,你废除判定区,然后每名其他角色依次交给你一张牌。③当你获得其他角色的牌后,你须将其中的一张牌置入弃牌堆。',
+ tw_qiaogong: 'TW桥公',
+ tw_qiaogong_prefix: 'TW',
+ twyizhu: '遗珠',
+ twyizhu_info: '①结束阶段,你摸两张牌,然后将两张牌随机插入牌堆前2X张牌的位置中,称为“遗珠”(X为角色数,选择牌的牌名对其他角色可见)。②当有其他角色使用“遗珠”指定唯一目标时,你可以选择一项:1.增加一个目标;2.取消此目标,增加一个目标。然后移除此牌对应的“遗珠”记录并摸一张牌。',
+ twluanchou: '鸾俦',
+ twluanchou_info: '出牌阶段限一次。你可以令两名角色获得〖共患〗直到你下次发动此技能。',
+ twgonghuan: '共患',
+ twgonghuan_info: '每回合限一次。当其他角色受到伤害时,若其拥有〖共患〗且其体力值不大于你,你可以将此伤害转移给你(不触发〖共患〗)。',
+ tw_qiaorui: 'TW桥蕤',
+ tw_qiaorui_prefix: 'TW',
+ wangxing: '妄行',
+ twxiawei: '狭威',
+ twxiawei_info: '①游戏开始时,你将牌堆中的两张基本牌置于武将牌上,称为“威”。②回合开始时,你将所有“威”置入弃牌堆。③你可以将“威”如手牌般使用或打出。④妄行:准备阶段,你可以将牌堆顶的X+1张牌置于武将牌上,称为“威”。',
+ twqiongji: '穷技',
+ twqiongji_info: '锁定技。①每回合限一次。当你使用或打出“威”后,你摸一张牌。②当你受到伤害时,若你没有“威”,此伤害+1。',
+ tw_bianfuren: 'TW卞夫人',
+ tw_bianfuren_prefix: 'TW',
+ twwanwei: '挽危',
+ twwanwei_info: '每回合限一次。当一名体力值最小的角色受到伤害时:若该角色不为你,你可以防止此伤害,然后失去1点体力;若该角色为你,或你的体力上限最大,你可以于当前回合的结束阶段获得牌堆顶的牌并展示牌堆底的牌,若展示的牌能被使用,你使用之。',
+ twyuejian: '约俭',
+ twyuejian_info: '出牌阶段限一次。你可以将X张牌置于牌堆顶或牌堆底(X为你的手牌数减你的手牌上限且至少为1)。若你以此法失去的牌数:不小于3,你的体力上限+1;不小于2,你回复1点体力;不小于1,你的手牌上限+1。',
+ tw_chenzhen: 'TW陈震',
+ tw_chenzhen_prefix: 'TW',
+ twmuyue: '睦约',
+ twmuyue_info: '出牌阶段限一次。你可以弃置一张牌并选择一个基本牌或普通锦囊牌的牌名,然后令一名角色从牌堆中获得一张此牌名的牌。若你以此法弃置的牌的牌名与你选择的牌名相同,你下次发动〖睦约〗无需弃牌。',
+ twchayi: '察异',
+ twchayi_info: '结束阶段,你可以选择一名其他角色,令其选择一项:1.展示所有手牌;2.下次使用牌时弃置一张牌。该角色的下个回合结束时,若其手牌数与其上一次成为〖察异〗目标后的手牌数不相同,其执行另一项。',
+ tw_feiyi: 'TW费祎',
+ tw_feiyi_prefix: 'TW',
+ twshengxi: '生息',
+ twshengxi_info: '①准备阶段,你可以获得一张【调剂盐梅】。②结束阶段,若你本回合使用过牌且未造成伤害,则你可以获得一张智囊并摸一张牌。',
+ twkuanji: '宽济',
+ twkuanji_info: '每回合限一次。当你的牌不因使用而进入弃牌堆后,你可以令一名其他角色获得其中的一张牌。',
+ xia_wangyue: '王越',
+ twyulong: '驭龙',
+ twyulong_info: '当你使用【杀】指定第一个目标后,你可以与一名目标角色拼点。若你赢,且你此次的拼点牌为:黑色,此【杀】伤害+1;红色,此【杀】不可被响应。当此【杀】造成伤害后,若你赢,你令此【杀】不计入次数。',
+ twjianming: '剑鸣',
+ twjianming_info: '锁定技。每回合每种花色限一次,当你使用或打出【杀】时,你摸一张牌。',
+ xia_liyàn: '李彦',
+ twzhenhu: '震虎',
+ twzhenhu_info: '当你使用伤害牌指定第一个目标时,你可以摸一张牌并与至多三名其他角色共同拼点。若你赢,此牌对所有本次拼点没赢的角色造成的伤害+1;若你没赢,你失去1点体力。',
+ twlvren: '履刃',
+ twlvren_info: '①当你对其他角色造成伤害时,你令其获得1枚“刃”标记。②当你使用伤害牌时,你可以额外指定一名有“刃”的角色并移去其所有“刃”。③你的拼点牌点数+2X(X为参与此次拼点的角色数)。',
+ xia_tongyuan: '侠童渊',
+ xia_tongyuan_prefix: '侠',
+ twchaofeng: '朝凤',
+ twchaofeng_backup: '朝凤',
+ twchaofeng_info: '①你可以将一张【杀】当做【闪】、【闪】当做任意一种【杀】使用或打出。②出牌阶段开始时,你可以与至多三名角色共同拼点。赢的角色视为对所有没赢的角色使用一张火【杀】。',
+ twchuanshu: '传术',
+ twchuanshu_info: '限定技。准备阶段,你可以选择一名角色。直到你的下回合开始,其获得以下效果:1.当其拼点牌亮出时,此牌点数+3;2.其使用的下一张【杀】对除你外的角色造成伤害时,此伤害+1;3.若其不为你,其使用的下一张【杀】结算结束后,你摸等同于其因此【杀】造成的伤害值数的牌。',
+ xia_xushu: '侠徐庶',
+ xia_xushu_prefix: '侠',
+ twjiange: '剑歌',
+ twjiange_info: '每回合限一次。你可以将一张非基本牌当做【杀】使用或打出(无距离和次数限制,且不计入次数)。若此时不为你的回合,你摸一张牌。',
+ twxiawang: '侠望',
+ twxiawang_info: '当一名角色受到伤害后,若你至其的距离不大于1,你可以对伤害来源使用一张【杀】。当此【杀】结算结束后,若你造成过渠道为此牌的伤害,结束当前阶段。',
+ tw_haomeng: 'TW郝萌',
+ tw_haomeng_prefix: 'TW',
+ twgongge: '攻阁',
+ twgongge_info: '摧坚:你可以选择一项:1.摸X+1张牌。其响应此牌后,跳过你的下一个摸牌阶段;2.弃置其X+1张牌。此牌结算结束后,若其体力值不小于你,你交给其X张牌;3.此牌对其造成的伤害+X。此牌结算结束后,其回复X点体力。',
+ tw_weixu: '魏续',
+ twsuizheng: '随征',
+ twsuizheng_info: '锁定技。游戏开始时,你选择一名其他角色,称为“随征”角色。你获得以下效果:当“随征”角色造成伤害后,你摸一张牌;当“随征”角色受到伤害后,你选择一项:1.失去1点体力,令其从牌堆或弃牌堆中获得一张【杀】或【决斗】;2.弃置两张基本牌,令其回复1点体力。',
+ twtuidao: '颓盗',
+ twtuidao_info: '限定技。准备阶段,若“随征”角色的体力值不大于2或“随征”角色已死亡,你可以废除你与其的一个坐骑栏并选择一个类别,然后若“随征”角色存活,你获得其所有此类别的牌,否则你从牌堆中获得两张此类别的牌。然后你将“随征”角色改为另一名角色。',
+ tw_caoxiu: 'TW曹休',
+ tw_caoxiu_prefix: 'TW',
+ twqianju: '千驹',
+ twqianju_info: '锁定技。①你计算与其他角色的距离-X(X为你装备区的牌数)。②每回合限一次。当你对距离为1以内的角色造成伤害后,若你的装备区存在空置装备栏,你从牌堆或弃牌堆中将一张你空置装备栏对应副类别的装备牌置于你的装备区。',
+ twqingxi: '倾袭',
+ twqingxi_info: '当你使用张【杀】指定目标后,若此牌为你于本回合使用的第一张【杀】,你可以令目标角色选择一项:1.令你摸Y张牌,此【杀】不可被其响应(Y为你装备区的牌数且至少为1);2.若其装备区里有牌,弃置装备区里的所有牌,然后弃置你装备区里的等量张牌,令此【杀】对其造成的伤害+1。',
+ tw_sunyi: 'TW孙翊',
+ tw_sunyi_prefix: 'TW',
+ twzaoli: '躁厉',
+ twzaoli_info: '锁定技。①出牌阶段,你只能使用或打出你本回合得到的手牌。②出牌阶段开始时,你须弃置你区域内的所有装备牌并弃置任意张非装备手牌,你摸等量的牌,从牌堆中将你此次弃置的装备牌对应副类别的装备牌置入装备区。若你以此法置入了超过两张装备牌,你失去1点体力。',
+ tw_yangyi: 'TW杨仪',
+ tw_yangyi_prefix: 'TW',
+ twgongsun: '共损',
+ twgongsun_shadow: '共损',
+ twgongsun_info: '锁定技。出牌阶段开始时,你选择攻击范围内的一名其他角色并选择一种花色,直至你的下个回合开始前或你死亡时,你与其均无法使用、打出或弃置该花色的手牌。',
+ tw_dengzhi: 'TW邓芝',
+ tw_dengzhi_prefix: 'TW',
+ twjimeng: '急盟',
+ twjimeng_info: '出牌阶段限一次。你可以获得一名其他角色区域内的一张牌,然后交给其一张牌。若其体力值不小于你,你摸一张牌。',
+ xia_lusu: '侠鲁肃',
+ xia_lusu_prefix: '侠',
+ twkaizeng: '慨赠',
+ twkaizeng_info: '其他角色的出牌阶段限一次。其可以选择一种基本牌的牌名或非基本牌的类型,然后令你选择是否交给其任意张手牌。若你以此法:交给其至少两张牌,你摸一张牌;交给其的牌中包含其选择的牌名或类型的牌,你获得一张与此牌名或类型不同的牌。',
+ twyangming: '扬名',
+ twyangming_info: '出牌阶段结束时,你可以摸X张牌,且令本回合的手牌上限+X(X为你本阶段使用过的牌的类型数)。',
+ xia_dianwei: '侠典韦',
+ xia_dianwei_prefix: '侠',
+ twliexi: '烈袭',
+ twliexi_info: '准备阶段,你可以弃置任意张牌并选择一名其他角色。若你以此法弃置的牌数大于其体力值,你对其造成1点伤害;否则其对你造成1点伤害。然后若你弃置的牌中有武器牌,你对其造成1点伤害。',
+ twshezhong: '慑众',
+ twshezhong_info: '结束阶段,若你:本回合对其他角色造成过伤害,你可以令至多X名其他角色下个摸牌阶段的额定摸牌数-1(X为你本回合造成的伤害值);本回合受到过伤害,你可以将手牌摸至与其中一名伤害来源的体力值相同(至多摸至5)。',
+ xia_zhaoe: '赵娥',
+ twyanshi: '言誓',
+ twyanshi_info: '①游戏开始时,你选择一名其他角色,称为“言誓”角色。②当你或“言誓”角色受到二者之外角色造成的伤害后,伤害来源获得1枚“誓”标记。③你对有“誓”的角色使用牌无距离限制。④当你对有“誓”的角色造成伤害时,此伤害+1,且当你对这些角色造成伤害后,你摸等同于伤害值的牌并移去其所有“誓”。',
+ twrenchou: '刃仇',
+ twrenchou_info: '锁定技。当你或“言誓”角色死亡时,若二者中的另一名角色A存活,A对杀死你或其的角色造成X点伤害(X为A的体力值)。',
+ xia_xiahouzie: '夏侯紫萼',
+ twxuechang: '血偿',
+ twxuechang_info: '出牌阶段限一次。你可以与一名其他角色拼点。若你:赢,你获得其一张牌,若此牌为装备牌,你视为对其使用一张【杀】;没赢,其对你造成1点伤害,且你下次对其造成的伤害+1。',
+ twduoren: '夺刃',
+ twduoren_info: '①当你杀死角色后,你可以减1点体力上限,然后获得其所有的非主公技和非隐匿技。②当你令其他角色进入濒死状态时,你失去因〖夺刃①〗获得的技能。',
+ tw_yangang: '严纲',
+ twzhiqu: '直取',
+ twzhiqu_info: '结束阶段,你可以选择一名其他角色并依次使用牌堆顶X张牌中的【杀】。搏击:依次使用牌堆顶X张牌中的锦囊牌(X为你距离不大于1内的角色数,且你或其以外的角色不是你以此法使用牌的合法目标)。',
+ twxianfeng: '先锋',
+ twxianfeng_info: '当你于出牌阶段使用【杀】或伤害类锦囊牌对其他角色造成伤害后,你可以令受伤角色选择一项:1.其摸一张牌,然后直到你下个回合开始时,你至其他角色的距离-1;2.你摸一张牌,然后直到你下个回合开始时,其至你的距离-1。',
+ tw_gongsunfan: '公孙范',
+ twhuiyuan: '回援',
+ twhuiyuan_info: '当你于出牌阶段使用牌结算结束后,若你未于此阶段获得过此类型的牌,你可以展示一名角色的一张手牌,若此牌与你使用的牌类型相同,你获得此牌,否则你弃置此牌,然后其摸一张牌。游击:对其造成1点伤害。',
+ twshoushou: '收绶',
+ twshoushou_info: '①当你获得其他角色的牌时,若你在任意角色的攻击范围内,其他角色至你的距离+1。②当你造成或受到伤害后,若你不在任意其他角色的攻击范围内,其他角色至你的距离-1。',
+ twshijun: '师君',
+ twshijun_info: '主公技,其他群势力角色出牌阶段限一次,若你没有“米”,其可以摸一张牌,然后将一张牌置于你的武将牌上,称为“米”。',
+ twjuxiang: '踞襄',
+ twjuxiang_info: '主公技,其他群势力角色出牌阶段限一次,其可以选择其装备区的一张牌移动到你的装备区中,若你对应的装备栏已被废除,则改为交给你此装备牌,然后恢复你的对应装备栏。',
+ tw_ol_sunjian: 'TW孙坚',
+ tw_ol_sunjian_prefix: 'TW',
+ twpolu: '破虏',
+ twpolu_info: '主公技,当吴势力角色杀死一名角色或死亡后,你可以令任意名角色各摸X张牌(X为你此前发动过此技能的次数+1)。',
+ tw_menghuo: 'TW孟获',
+ tw_menghuo_prefix: 'TW',
+ twqiushou: '酋首',
+ twqiushou_info: '主公技,锁定技,当一张【南蛮入侵】结算结束后,若此牌造成的伤害大于3点或有角色因此死亡,所有蜀势力和群势力角色各摸一张牌。',
+ twzhuiting: '坠廷',
+ twzhuiting_info: '主公技,当一张锦囊牌即将对你生效时,其他魏势力角色和群势力角色可将一张与此牌颜色相同的牌当作【无懈可击】使用。',
+ twniju: '逆拒',
+ twniju_info: '主公技。当你的拼点牌亮出后,你可以令本次拼点事件中的一张拼点牌的点数+X或-X。然后当本次拼点事件结束后,若有两张拼点牌的点数相等,你摸X张牌(X为场上群势力角色数)。',
+ ol_liuyu: 'TW刘虞',
+ ol_liuyu_prefix: 'TW',
+ twchongwang: '崇望',
+ twchongwang_info: '主公技,其他群势力角色的出牌阶段开始时,其可以交给你一张牌,然后你与其使用【杀】或伤害性锦囊牌指定目标时不能指定对方为目标直至你的下回合结束(每名角色限发动一次)。',
+ tw_zhangzhao: '张昭',
+ twlijian: '力荐',
+ twlijian_info: '昂扬技。其他角色的弃牌阶段结束时,你可以令其获得任意本阶段进入弃牌堆的牌(可不选),然后你获得其余的牌,若其得到的牌数大于你,你可以对其造成1点伤害。
激昂:八张牌进入弃牌堆。',
+ twchungang: '纯刚',
+ twchungang_info: '锁定技。一名其他角色于摸牌阶段外得到超过一张牌时,你令其弃置一张牌。',
+ tw_zhanghong: '张纮',
+ twquanqian: '劝迁',
+ twquanqian_info: '昂扬技。出牌阶段限一次,你可以将至多四张花色各不相同的手牌交给一名其他角色,然后若你交出的牌数大于1,则你从牌堆中获得一张装备牌,然后选择一项:①将手牌数摸至与其相同;②观看其手牌并获得其一种花色的所有牌。
激昂:你弃置六张手牌。',
+ twrouke: '柔克',
+ twrouke_info: '锁定技。当你于摸牌阶段外得到超过一张牌时,你摸一张牌。',
+ kaisa: "凯撒",
+ zhengfu: "征服",
+ zhengfu_info: "当你使用【杀】指定目标时,你可以选择一种牌的类别,然后除非目标角色交给你一种该类别的牌,否则其不能闪避此【杀】。",
+ xia_xiahoudun: '侠夏侯惇',
+ xia_xiahoudun_prefix: '侠',
+ twdanlie: '胆烈',
+ twdanlie_info: '①出牌阶段限一次。你可以与至多三名其他角色共同拼点。若你赢,你对没赢的角色依次造成1点伤害;若你没赢,你失去1点体力。②你的拼点牌点数+X(X为你已损失的体力值)。',
+ xia_zhangwei: '张葳',
+ twhuzhong: '护众',
+ twhuzhong_info: '当你于出牌阶段使用无属性【杀】指定唯一目标角色时,你可以摸一张牌并选择一项:①为此牌额外选择一个目标;②弃置其一张手牌,此牌结算完毕后,若此牌造成过伤害,则你摸一张牌且本阶段可以额外使用一张【杀】。',
+ twfenwang: '焚亡',
+ twfenwang_info: '锁定技。①当你受到属性伤害时,你须弃置一张牌或令此伤害+1。②当你对其他角色造成非属性伤害时,若你的手牌数大于等于其,则此伤害+1。',
+ xia_xiahousone: '夏侯子萼',
+ twchengxi: '承袭',
+ twchengxi_info: '出牌阶段每名角色限一次,你可以摸一张牌并与一名其他角色拼点。若你赢,你使用的下一张基本牌或非延时锦囊牌结算完毕后,你视为对原目标使用一张无次数限制的同名牌;若你没赢,其视为对你使用一张无距离限制的【杀】。',
+ xia_liubei: '侠刘备',
+ xia_liubei_prefix: '侠',
+ twshenyi: '伸义',
+ twshenyi_info: '每回合限一次,当你或你攻击范围内的一名角色于一回合内首次受到伤害后,你可以声明一种基本牌或锦囊牌(每种牌名限一次),然后从牌堆中将一张同名牌(若没有同名牌则改为同类型的牌)称为“侠义”置于武将牌上。若受伤角色不为你,则你可以将任意张手牌交给其,且当其失去一张你以此法交给其的牌后,你摸一张牌。',
+ twxinghan: '兴汉',
+ twxinghan_info: '①你的回合外或你处于濒死状态时,你可以如手牌般使用或打出“侠义”牌。②准备阶段,若“侠义”牌数大于存活角色数,则你可以依次使用其中所有可以使用的牌。然后你获得如下效果:回合结束时,你弃置所有手牌并失去X点体力(X为你的体力值-1且X至少为1)。',
+ twxinghan_tag: '侠义',
+ xia_guanyu: '侠关羽',
+ xia_guanyu_prefix: '侠',
+ twzhongyi: '忠义',
+ twzhongyi_info: '锁定技。①你使用【杀】无距离限制。②当你使用【杀】结算完毕后,你选择一项:⒈摸X张牌;⒉回复X点体力;⒊背水:失去Y点体力,依次执行以上两项(X为此牌造成的伤害值,Y为你本局游戏此前选择此项的次数+1)。',
+ twchue: '除恶',
+ twchue_info: '①当你使用【杀】指定唯一目标时,你可以失去1点体力,为此牌额外指定Z个目标。②当你受到伤害或失去体力后,你摸一张牌并获得1个“勇”标记。③回合结束时,若你本回合发动过〖除恶②〗,则你可以失去Z个“勇”标记,视为使用一张伤害+1且可以额外指定Z个目标的【杀】。(Z为你的体力值)',
+ xia_shitao: '石韬',
+ twjieqiu: '劫囚',
+ twjieqiu_info: '出牌阶段限一次,你可以选择一名装备区没有废除栏的其他角色,废除其所有装备栏,然后其摸X张牌(X为其废除装备栏前的装备区牌数),直到其恢复所有装备栏前:其弃牌阶段结束时,其恢复等同于其弃置牌数的装备栏;其回合结束时,若其仍有已废除的装备栏,则你执行一个额外回合(每轮限一次)。',
+ twenchou: '恩仇',
+ twenchou_info: '出牌阶段限一次,你可以观看一名存在废除装备栏的其他角色的手牌并获得其中一张牌,然后你恢复其一个装备栏。',
+ xia_shie: '史阿',
+ twdengjian: '登剑',
+ twdengjianx: '剑法',
+ twdengjian_info: '①其他角色的弃牌阶段结束时,你可以弃置一张牌并随机获得本回合所有造成伤害的牌对应的实体牌的其中一张与你本轮以此法获得的牌的颜色均不同的【杀】,称为“剑法”。②你使用“剑法”牌不计入次数限制。',
+ twxinshou: '心授',
+ twxinshou_info: '①当你于出牌阶段使用【杀】时,若此【杀】与你本回合使用的所有其他【杀】的颜色均不相同,则你可以选择执行以下一项本回合未执行过的项:⒈摸一张牌;⒉交给一名其他角色一张牌。②当你使用【杀】时,若〖心授①〗的两项本回合均已被你选择过,则你可以令〖登剑①〗失效并令一名其他角色获得〖登剑〗,你的下个回合开始时,其失去〖登剑〗,若其这期间使用【杀】造成过伤害,则你结束〖登剑①〗的失效状态。',
+ xia_yuzhenzi: '玉真子',
+ twhuajing: '化境',
+ twhuajing_info: '①游戏开始时,你获得6个效果各不相同的无效果“武”标记。②一名拥有“武”标记的角色的攻击范围+X(X为其拥有的“武”标记数)。③出牌阶段限一次,你可以展示至多四张手牌,然后根据这些牌含有的花色数于本回合获得等量你拥有的“武”标记的效果。④拥有“武”标记效果的角色的武器牌失效(武器牌不提供攻击范围且武器技能失效)。',
+ twhuajing_jian: '剑',
+ twhuajing_jian_info: '当你使用【杀】指定目标后,你随机弃置目标角色两张牌。',
+ twhuajing_dao: '刀',
+ twhuajing_dao_info: '当你使用【杀】对没有手牌的目标角色造成伤害时,此伤害+1。',
+ twhuajing_fu: '斧',
+ twhuajing_fu_info: '当你使用的【杀】被【闪】响应后,你对目标角色造成1点伤害。',
+ twhuajing_qiang: '枪',
+ twhuajing_qiang_info: '当你使用黑色【杀】结算完毕后,你从牌堆或弃牌堆中获得一张【闪】。',
+ twhuajing_ji: '戟',
+ twhuajing_ji_info: '当你使用【杀】造成伤害时,你摸一张牌。',
+ twhuajing_gong: '弓',
+ twhuajing_gong_info: '当你使用【杀】造成伤害后,你随机弃置受伤角色装备区里的一张牌。',
+ twtianshou: '天授',
+ twtianshou_info: '锁定技,回合结束时,若你本回合使用【杀】造成过伤害,且你拥有本回合获得过效果的“武”标记,则你须将其中一个“武”标记交给一名其他角色并令其获得此标记的效果直到其回合结束,然后你摸一张牌。',
- tw_mobile:'海外服·稀有专属',
- tw_yunchouzhi:'运筹帷幄·智',
- tw_yunchouxin:'运筹帷幄·信',
- tw_yunchouren:'运筹帷幄·仁',
- tw_yunchouyong:'运筹帷幄·勇',
- tw_yunchouyan:'运筹帷幄·严',
- tw_zhu:'海外服·主公',
- tw_sp:'海外服·SP',
- tw_swordsman:'海外服·武侠篇',
- tw_mobile2:'海外服·异构',
- tw_yijiang:'一将成名TW',
- tw_english:'英文版',
+ tw_mobile: '海外服·稀有专属',
+ tw_yunchouzhi: '运筹帷幄·智',
+ tw_yunchouxin: '运筹帷幄·信',
+ tw_yunchouren: '运筹帷幄·仁',
+ tw_yunchouyong: '运筹帷幄·勇',
+ tw_yunchouyan: '运筹帷幄·严',
+ tw_zhu: '海外服·主公',
+ tw_sp: '海外服·SP',
+ tw_swordsman: '海外服·武侠篇',
+ tw_mobile2: '海外服·异构',
+ tw_yijiang: '一将成名TW',
+ tw_english: '英文版',
},
- pinyins:{
- 凯撒:['Caesar'],
- 难升米:['Nashime']
+ pinyins: {
+ 凯撒: ['Caesar'],
+ 难升米: ['Nashime']
}
};
});
From 4dfddbbc7026b2e2dbe06502ea2b8793a723192c Mon Sep 17 00:00:00 2001
From: Jikun <929970065@qq.com>
Date: Fri, 23 Feb 2024 03:09:55 +0800
Subject: [PATCH 2/3] Revert "fix: change skill name addskils to addskills"
This reverts commit 21700e296cc060bfa48d6ec6c56496f8055ce1e2.
---
character/sp.js | 35817 +++++++++++++++++++++++-----------------------
character/tw.js | 21244 +++++++++++++--------------
2 files changed, 28531 insertions(+), 28530 deletions(-)
diff --git a/character/sp.js b/character/sp.js
index af480abd8..23cf7522d 100755
--- a/character/sp.js
+++ b/character/sp.js
@@ -1,1094 +1,1094 @@
import { game } from '../noname.js';
-game.import('character', function (lib, game, ui, get, ai, _status) {
+game.import('character',function(lib,game,ui,get,ai,_status){
return {
- name: 'sp',
- connect: true,
- characterSort: {
- sp: {
- sp_tianji: ["sunhao", "liuxie", "caoang", "hetaihou", "sunluyu", 'ol_wangrong', "zuofen", "ol_bianfuren", "qinghegongzhu", "tengfanglan", "ruiji", 'caoxiancaohua'],
- sp_sibi: ["yangxiu", "chenlin", "chengyu", "shixie", "fuwan", "wangyun", "zhugejin", "simalang", "maliang", "buzhi", "dongyun", "kanze", "sunqian", "xizhicai", "sunshao", 'duxi', "jianggan", 'ol_dengzhi', 'ol_yangyi', 'ol_dongzhao', 'ol_chendeng', 'jin_yanghu', 'wangyan', 'xiahouxuan', 'quhuang', 'zhanghua', 'wangguan', 'sunhong', 'caoxi'],
- sp_tianzhu: ['liyi', 'zhangyan', 'niujin', 'hejin', 'hansui', "wutugu", "yanbaihu", "shamoke", "zhugedan", 'huangzu', 'gaogan', "tadun", "fanjiangzhangda", "ahuinan", "dongtuna", 'ol_wenqin'],
- sp_nvshi: ['ol_dingshangwan', "lingju", "guanyinping", "zhangxingcai", "mayunlu", "dongbai", "zhaoxiang", 'ol_zhangchangpu', "daxiaoqiao", "jin_guohuai"],
- sp_shaowei: ["simahui", "zhangbao", "zhanglu", "zhugeguo", "xujing", "zhangling", 'huangchengyan', 'zhangzhi', 'lushi'],
- sp_huben: ['duanjiong', 'ol_mengda', "caohong", "xiahouba", "zhugeke", "zumao", "wenpin", "litong", "mazhong", "heqi", "quyi", "luzhi", "zangba", "yuejin", "dingfeng", "wuyan", "ol_zhuling", "tianyu", "huojun", 'zhaoyǎn', 'dengzhong', 'ol_furong', 'macheng', 'ol_zhangyì', 'ol_zhujun', 'maxiumatie', 'luoxian', 'ol_huban', 'haopu', 'ol_qianzhao'],
- sp_liesi: ['lvboshe', 'mizhu', 'weizi', 'ol_liuba', 'zhangshiping'],
- sp_default: ["sp_diaochan", "sp_zhaoyun", "sp_sunshangxiang", "sp_caoren", "sp_jiangwei", "sp_machao", "sp_caiwenji", "jsp_guanyu", "jsp_huangyueying", "sp_pangde", "sp_jiaxu", "yuanshu", 'sp_zhangliao', 'sp_ol_zhanghe', 'sp_menghuo'],
- sp_qifu: ['ol_feiyi', "caoying", 'panshu', "caochun", "yuantanyuanshang", 'caoshuang', 'wolongfengchu', 'guansuo', 'baosanniang', 'fengfangnv', 'jin_zhouchu'],
- sp_wanglang: ['ol_wanglang', 'ol_puyuan', 'ol_zhouqun'],
- sp_zhongdan: ["cuiyan", "huangfusong"],
- sp_guozhan2: ["sp_dongzhuo", "liqueguosi", "zhangren"],
- sp_others: ["hanba", "caiyang"],
- sp_waitforsort: ['ol_luyusheng', 'ol_pengyang', 'ol_tw_zhangji', 'ol_liwan', 'ol_liuyan', 'caoyu', 'tianchou', 'ol_hujinding'],
+ name:'sp',
+ connect:true,
+ characterSort:{
+ sp:{
+ sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ol_bianfuren","qinghegongzhu","tengfanglan","ruiji",'caoxiancaohua'],
+ sp_sibi:["yangxiu","chenlin","chengyu","shixie","fuwan","wangyun","zhugejin","simalang","maliang","buzhi","dongyun","kanze","sunqian","xizhicai","sunshao",'duxi',"jianggan",'ol_dengzhi','ol_yangyi','ol_dongzhao','ol_chendeng','jin_yanghu','wangyan','xiahouxuan','quhuang','zhanghua','wangguan','sunhong','caoxi'],
+ sp_tianzhu:['liyi','zhangyan','niujin','hejin','hansui',"wutugu","yanbaihu","shamoke","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda","ahuinan","dongtuna",'ol_wenqin'],
+ sp_nvshi:['ol_dingshangwan',"lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu',"daxiaoqiao","jin_guohuai"],
+ sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','zhangzhi','lushi'],
+ sp_huben:['duanjiong','ol_mengda',"caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie','luoxian','ol_huban','haopu','ol_qianzhao'],
+ sp_liesi:['lvboshe','mizhu','weizi','ol_liuba','zhangshiping'],
+ sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
+ sp_qifu:['ol_feiyi',"caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
+ sp_wanglang:['ol_wanglang','ol_puyuan','ol_zhouqun'],
+ sp_zhongdan:["cuiyan","huangfusong"],
+ sp_guozhan2:["sp_dongzhuo","liqueguosi","zhangren"],
+ sp_others:["hanba","caiyang"],
+ sp_waitforsort:['ol_luyusheng','ol_pengyang','ol_tw_zhangji','ol_liwan','ol_liuyan','caoyu','tianchou','ol_hujinding'],
},
},
- characterFilter: {
- tianyu: function (mode) {
- return mode != 'chess' && mode != 'tafang' && mode != 'stone';
+ characterFilter:{
+ tianyu:function(mode){
+ return mode!='chess'&&mode!='tafang'&&mode!='stone';
},
- ol_dongzhao: function (mode) {
- return mode == 'identity' && ['normal', 'zhong'].includes(_status.mode);
+ ol_dongzhao:function(mode){
+ return mode=='identity'&&['normal','zhong'].includes(_status.mode);
},
},
- character: {
- ol_hujinding: ['female', 'shu', 3, ['olqingyuan', 'olchongshen']],
- tianchou: ['male', 'qun', 4, ['olshandao']],
- liyi: ['male', 'wu', 4, ['olchanshuang', 'olzhanjin']],
- caoyu: ['male', 'wei', 3, ['olgongjie', 'olxiangxv', 'olxiangzuo']],
- ol_liwan: ['female', 'wei', 3, ['ollianju', 'olsilv']],
- ol_dingshangwan: ['female', 'wei', 3, ['olfudao', 'olfengyan']],
- zhangyan: ['male', 'qun', 4, ['olsuji', 'ollangdao']],
- ol_tw_zhangji: ['male', 'wei', 3, ['skill_zhangji_A', 'skill_zhangji_B'], ['unseen']],
- ol_feiyi: ['male', 'shu', 3, ['yanru', 'hezhong']],
- lvboshe: ['male', 'qun', 4, ['olfushi', 'oldongdao']],
- ol_luyusheng: ['female', 'wu', 3, ['olcangxin', 'olrunwei']],
- caoxi: ['male', 'wei', 3, ['olgangshu', 'oljianxuan']],
- ol_pengyang: ['male', 'shu', 3, ['olqifan', 'oltuishi', 'nzry_cunmu']],
- ol_qianzhao: ['male', 'wei', 4, ['olweifu', 'olkuansai']],
- niujin: ['male', 'wei', 4, ['olcuorui', 'liewei']],
- hejin: ['male', 'qun', 4, ['mouzhu', 'olyanhuo']],
- hansui: ['male', 'qun', 4, ['olniluan', 'olxiaoxi']],
- duanjiong: ['male', 'qun', 4, ['olsaogu']],
- ol_zhouqun: ['male', 'shu', 4, ['oltianhou', 'olchenshuo']],
- ol_wenqin: ['male', 'wei', 4, ['olguangao', 'olhuiqi']],
- haopu: ['male', 'shu', 4, ['olzhenying']],
- ol_mengda: ['male', 'shu', 4, ['olgoude']],
- ol_wanglang: ['male', 'wei', 3, ['gushe', 'oljici']],
- ol_liuyan: ['male', 'qun', '4/6', ['olpianan', 'olyinji', 'olkuisi']],
- lushi: ['female', 'qun', 3, ['olzhuyan', 'olleijie']],
- zhangshiping: ['male', 'shu', 3, ['olhongji', 'olxinggu']],
- sunhong: ['male', 'wu', 3, ['olxianbi', 'olzenrun']],
- luoxian: ['male', 'shu', 4, ['oldaili']],
- ol_huban: ['male', 'wei', 4, ['olhuiyun']],
- wangguan: ['male', 'wei', 3, ['olmiuyan', 'olshilu']],
- ol_zhangyì: ['male', 'shu', 4, ['oldianjun', 'olkangrui']],
- ol_zhujun: ['male', 'qun', 4, ['olcuipo']],
- maxiumatie: ['male', 'qun', 4, ['mashu', 'rekenshang']],
- dongtuna: ['male', 'qun', 4, ['oljianman']],
- zhanghua: ['male', 'jin', 3, ['olbihun', 'oljianhe', 'olchuanwu']],
- quhuang: ['male', 'wu', 3, ['olqiejian', 'olnishou']],
- macheng: ['male', 'shu', 4, ['mashu', 'olchenglie']],
- zhangzhi: ['male', 'qun', 3, ['olbixin', 'olximo']],
- ol_liuba: ['male', 'shu', 3, ['oltongduo', 'olzhubi']],
- ol_furong: ['male', 'shu', 4, ['olxiaosi']],
- ahuinan: ['male', 'qun', 4, ['jueman']],
- jin_guohuai: ['female', 'jin', 3, ['zhefu', 'yidu']],
- xiahouxuan: ['male', 'wei', 3, ['olhuanfu', 'olqingyi', 'olzeyue']],
- dengzhong: ['male', 'wei', 4, ['dzkanpo', 'dzgengzhan']],
- wangyan: ['male', 'jin', 3, ['yangkuang', 'cihuang', 'sanku']],
- huojun: ['male', 'shu', 4, ['qiongshou', 'fenrui']],
- caoxiancaohua: ['female', 'qun', 3, ['huamu', 'qianmeng', 'liangyuan', 'jisi']],
- jin_zhouchu: ['male', 'jin', 4, ['shanduan', 'yilie']],
- zhaoyǎn: ['male', 'wei', 4, ['tongxie']],
- ol_puyuan: ['male', 'shu', 4, ['olshengong', 'olqisi']],
- ruiji: ['female', 'wu', 3, ['qiaoli', 'qingliang']],
- weizi: ['male', 'qun', 3, ['yuanzi', 'liejie']],
- tengfanglan: ['female', 'wu', 3, ['luochong', 'aichen']],
- sp_menghuo: ['male', 'qun', 4, ['spmanwang']],
- jin_yanghu: ['male', 'jin', 4, ['huaiyuan', 'chongxin', 'dezhang']],
- qinghegongzhu: ['female', 'wei', 3, ['zengou', 'qhzhangji']],
- fanjiangzhangda: ['male', 'wu', 4, ['yuanchou', 'juesheng']],
- tianyu: ['male', 'wei', 4, ['saodi', 'zhuitao']],
- ol_chendeng: ['male', 'qun', 4, ['olfengji']],
- ol_zhuling: ['male', 'wei', 4, ['jixian']],
- wuyan: ['male', 'wu', 4, ['lanjiang']],
- sp_ol_zhanghe: ['male', 'qun', 4, ['spolzhouxuan']],
- ol_dongzhao: ['male', 'wei', 3, ['olxianlve', 'olzaowang']],
- fengfangnv: ['female', 'qun', 3, ['zhuangshu', 'chuiti']],
- ol_yangyi: ['male', 'shu', 3, ['oljuanxia', 'oldingcuo']],
- zuofen: ['female', 'jin', 3, ['zhaosong', 'lisi']],
- ol_wangrong: ['female', 'qun', 3, ['olfengzi', 'oljizhan', 'olfusong']],
- ol_dengzhi: ['male', 'shu', 3, ['olxiuhao', 'olsujian']],
- ol_bianfuren: ['female', 'wei', 3, ['fuwei', 'yuejian']],
- duxi: ['male', 'wei', 3, ['quxi', 'bixiong']],
- gaogan: ['male', 'qun', 4, ['juguan']],
- huangchengyan: ['male', 'qun', 3, ['guanxu', 'yashi']],
- huangzu: ['male', 'qun', 4, ['wangong']],
- panshu: ['female', 'wu', 3, ['weiyi', 'jinzhi']],
- wolongfengchu: ['male', 'shu', 4, ['youlong', 'luanfeng']],
- sp_zhangliao: ['male', 'qun', 4, ['mubing', 'ziqu', 'diaoling']],
- caoshuang: ['male', 'wei', 4, ['retuogu', 'shanzhuan']],
- ol_zhangchangpu: ['female', 'wei', 3, ['yanjiao', 'olxingshen']],
- zhangling: ['male', 'qun', 3, ['zlhuji', 'zlshoufu']],
- caiyang: ['male', 'qun', 1, ['yinka', 'zhuixi'], ['forbidai', 'unseen']],
- sunshao: ['male', 'wu', 3, ['bizheng', 'yidian']],
+ character:{
+ ol_hujinding:['female','shu',3,['olqingyuan','olchongshen']],
+ tianchou:['male','qun',4,['olshandao']],
+ liyi:['male','wu',4,['olchanshuang','olzhanjin']],
+ caoyu:['male','wei',3,['olgongjie','olxiangxv','olxiangzuo']],
+ ol_liwan:['female','wei',3,['ollianju','olsilv']],
+ ol_dingshangwan:['female','wei',3,['olfudao','olfengyan']],
+ zhangyan:['male','qun',4,['olsuji','ollangdao']],
+ ol_tw_zhangji:['male','wei',3,['skill_zhangji_A','skill_zhangji_B'],['unseen']],
+ ol_feiyi:['male','shu',3,['yanru','hezhong']],
+ lvboshe:['male','qun',4,['olfushi','oldongdao']],
+ ol_luyusheng:['female','wu',3,['olcangxin','olrunwei']],
+ caoxi:['male','wei',3,['olgangshu','oljianxuan']],
+ ol_pengyang:['male','shu',3,['olqifan','oltuishi','nzry_cunmu']],
+ ol_qianzhao:['male','wei',4,['olweifu','olkuansai']],
+ niujin:['male','wei',4,['olcuorui','liewei']],
+ hejin:['male','qun',4,['mouzhu','olyanhuo']],
+ hansui:['male','qun',4,['olniluan','olxiaoxi']],
+ duanjiong:['male','qun',4,['olsaogu']],
+ ol_zhouqun:['male','shu',4,['oltianhou','olchenshuo']],
+ ol_wenqin:['male','wei',4,['olguangao','olhuiqi']],
+ haopu:['male','shu',4,['olzhenying']],
+ ol_mengda:['male','shu',4,['olgoude']],
+ ol_wanglang:['male','wei',3,['gushe','oljici']],
+ ol_liuyan:['male','qun','4/6',['olpianan','olyinji','olkuisi']],
+ lushi:['female','qun',3,['olzhuyan','olleijie']],
+ zhangshiping:['male','shu',3,['olhongji','olxinggu']],
+ sunhong:['male','wu',3,['olxianbi','olzenrun']],
+ luoxian:['male','shu',4,['oldaili']],
+ ol_huban:['male','wei',4,['olhuiyun']],
+ wangguan:['male','wei',3,['olmiuyan','olshilu']],
+ ol_zhangyì:['male','shu',4,['oldianjun','olkangrui']],
+ ol_zhujun:['male','qun',4,['olcuipo']],
+ maxiumatie:['male','qun',4,['mashu','rekenshang']],
+ dongtuna:['male','qun',4,['oljianman']],
+ zhanghua:['male','jin',3,['olbihun','oljianhe','olchuanwu']],
+ quhuang:['male','wu',3,['olqiejian','olnishou']],
+ macheng:['male','shu',4,['mashu','olchenglie']],
+ zhangzhi:['male','qun',3,['olbixin','olximo']],
+ ol_liuba:['male','shu',3,['oltongduo','olzhubi']],
+ ol_furong:['male','shu',4,['olxiaosi']],
+ ahuinan:['male','qun',4,['jueman']],
+ jin_guohuai:['female','jin',3,['zhefu','yidu']],
+ xiahouxuan:['male','wei',3,['olhuanfu','olqingyi','olzeyue']],
+ dengzhong:['male','wei',4,['dzkanpo','dzgengzhan']],
+ wangyan:['male','jin',3,['yangkuang','cihuang','sanku']],
+ huojun:['male','shu',4,['qiongshou','fenrui']],
+ caoxiancaohua:['female','qun',3,['huamu','qianmeng','liangyuan','jisi']],
+ jin_zhouchu:['male','jin',4,['shanduan','yilie']],
+ zhaoyǎn:['male','wei',4,['tongxie']],
+ ol_puyuan:['male','shu',4,['olshengong','olqisi']],
+ ruiji:['female','wu',3,['qiaoli','qingliang']],
+ weizi:['male','qun',3,['yuanzi','liejie']],
+ tengfanglan:['female','wu',3,['luochong','aichen']],
+ sp_menghuo:['male','qun',4,['spmanwang']],
+ jin_yanghu:['male','jin',4,['huaiyuan','chongxin','dezhang']],
+ qinghegongzhu:['female','wei',3,['zengou','qhzhangji']],
+ fanjiangzhangda:['male','wu',4,['yuanchou','juesheng']],
+ tianyu:['male','wei',4,['saodi','zhuitao']],
+ ol_chendeng:['male','qun',4,['olfengji']],
+ ol_zhuling:['male','wei',4,['jixian']],
+ wuyan:['male','wu',4,['lanjiang']],
+ sp_ol_zhanghe:['male','qun',4,['spolzhouxuan']],
+ ol_dongzhao:['male','wei',3,['olxianlve','olzaowang']],
+ fengfangnv:['female','qun',3,['zhuangshu','chuiti']],
+ ol_yangyi:['male','shu',3,['oljuanxia','oldingcuo']],
+ zuofen:['female','jin',3,['zhaosong','lisi']],
+ ol_wangrong:['female','qun',3,['olfengzi','oljizhan','olfusong']],
+ ol_dengzhi:['male','shu',3,['olxiuhao','olsujian']],
+ ol_bianfuren:['female','wei',3,['fuwei','yuejian']],
+ duxi:['male','wei',3,['quxi','bixiong']],
+ gaogan:['male','qun',4,['juguan']],
+ huangchengyan:['male','qun',3,['guanxu','yashi']],
+ huangzu:['male','qun',4,['wangong']],
+ panshu:['female','wu',3,['weiyi','jinzhi']],
+ wolongfengchu:['male','shu',4,['youlong','luanfeng']],
+ sp_zhangliao:['male','qun',4,['mubing','ziqu','diaoling']],
+ caoshuang:['male','wei',4,['retuogu','shanzhuan']],
+ ol_zhangchangpu:['female','wei',3,['yanjiao','olxingshen']],
+ zhangling:['male','qun',3,['zlhuji','zlshoufu']],
+ caiyang:['male','qun',1,['yinka','zhuixi'],['forbidai','unseen']],
+ sunshao:['male','wu',3,['bizheng','yidian']],
- huangfusong: ['male', 'qun', 4, ['fenyue']],
- yuantanyuanshang: ['male', 'qun', 4, ['neifa']],
- xujing: ['male', 'shu', 3, ['yuxu', 'xjshijian']],
+ huangfusong:['male','qun',4,['fenyue']],
+ yuantanyuanshang:['male','qun',4,['neifa']],
+ xujing:['male','shu',3,['yuxu','xjshijian']],
- jianggan: ["male", "wei", 3, ["weicheng", "daoshu"]],
+ jianggan:["male","wei",3,["weicheng","daoshu"]],
- caoying: ["female", "wei", 4, ["xinfu_lingren", "xinfu_fujian"], []],
- simahui: ["male", "qun", 3, ["jianjie", "xinfu_chenghao", "xinfu_yinshi"], []],
- baosanniang: ["female", "shu", 4, ["olwuniang", "olxushen"], []],
+ caoying:["female","wei",4,["xinfu_lingren","xinfu_fujian"],[]],
+ simahui:["male","qun",3,["jianjie","xinfu_chenghao","xinfu_yinshi"],[]],
+ baosanniang:["female","shu",4,["olwuniang","olxushen"],[]],
- yangxiu: ['male', 'wei', 3, ['jilei', 'danlao']],
- chenlin: ['male', 'wei', 3, ['bifa', 'songci']],
- caohong: ['male', 'wei', 4, ['yuanhu']],
- xiahouba: ['male', 'shu', 4, ['baobian']],
- yuanshu: ['male', 'qun', 4, ['yongsi', 'weidi']],
- sp_diaochan: ['female', 'qun', 3, ['lihun', 'rebiyue']],
- sp_zhaoyun: ['male', 'qun', 3, ['ollongdan', 'chongzhen']],
- liuxie: ['male', 'qun', 3, ['tianming', 'mizhao', 'twzhuiting'], ['zhu']],
- zhugejin: ['male', 'wu', 3, ['olhuanshi', 'olhongyuan', 'olmingzhe']],
- zhugeke: ['male', 'wu', 3, ['aocai', 'duwu']],
- guanyinping: ['female', 'shu', 3, ['huxiao', 'xueji', 'wuji']],
- simalang: ['male', 'wei', 3, ['junbing', 'quji']],
- zhangxingcai: ['female', 'shu', 3, ['shenxian', 'qiangwu']],
- fuwan: ['male', 'qun', 4, ['dcmoukui']],
- sp_sunshangxiang: ['female', 'shu', 3, ['liangzhu', 'fanxiang']],
- caoang: ['male', 'wei', 4, ['kaikang']],
- sp_caoren: ['male', 'wei', 4, ['weikui', 'lizhan']],
- zhangbao: ['male', 'qun', 3, ['rezhoufu', 'reyingbing']],
- maliang: ['male', 'shu', 3, ['zishu', 'yingyuan']],
- zhugedan: ['male', 'wei', 4, ['gongao', 'juyi']],
- sp_jiangwei: ['male', 'wei', 4, ['kunfen', 'fengliang']],
- sp_machao: ['male', 'qun', 4, ['olzhuiji', 'ol_shichou']],
- sunhao: ['male', 'wu', 5, ['recanshi', 'rechouhai', 'guiming'], ['zhu']],
- shixie: ['male', 'qun', 3, ['olbiluan', 'relixia']],
- mayunlu: ['female', 'shu', 4, ['fengpo', 'mashu']],
- zhanglu: ['male', 'qun', 3, ['yishe', 'bushi', 'midao', 'twshijun'], ['zhu']],
- wutugu: ['male', 'qun', 15, ['ranshang', 'hanyong']],
- sp_caiwenji: ['female', 'wei', 3, ['chenqing', 'mozhi']],
- zhugeguo: ['female', 'shu', 3, ['qirang', 'yuhua']],
+ yangxiu:['male','wei',3,['jilei','danlao']],
+ chenlin:['male','wei',3,['bifa','songci']],
+ caohong:['male','wei',4,['yuanhu']],
+ xiahouba:['male','shu',4,['baobian']],
+ yuanshu:['male','qun',4,['yongsi','weidi']],
+ sp_diaochan:['female','qun',3,['lihun','rebiyue']],
+ sp_zhaoyun:['male','qun',3,['ollongdan','chongzhen']],
+ liuxie:['male','qun',3,['tianming','mizhao','twzhuiting'],['zhu']],
+ zhugejin:['male','wu',3,['olhuanshi','olhongyuan','olmingzhe']],
+ zhugeke:['male','wu',3,['aocai','duwu']],
+ guanyinping:['female','shu',3,['huxiao','xueji','wuji']],
+ simalang:['male','wei',3,['junbing','quji']],
+ zhangxingcai:['female','shu',3,['shenxian','qiangwu']],
+ fuwan:['male','qun',4,['dcmoukui']],
+ sp_sunshangxiang:['female','shu',3,['liangzhu','fanxiang']],
+ caoang:['male','wei',4,['kaikang']],
+ sp_caoren:['male','wei',4,['weikui','lizhan']],
+ zhangbao:['male','qun',3,['rezhoufu','reyingbing']],
+ maliang:['male','shu',3,['zishu','yingyuan']],
+ zhugedan:['male','wei',4,['gongao','juyi']],
+ sp_jiangwei:['male','wei',4,['kunfen','fengliang']],
+ sp_machao:['male','qun',4,['olzhuiji','ol_shichou']],
+ sunhao:['male','wu',5,['recanshi','rechouhai','guiming'],['zhu']],
+ shixie:['male','qun',3,['olbiluan','relixia']],
+ mayunlu:['female','shu',4,['fengpo','mashu']],
+ zhanglu:['male','qun',3,['yishe','bushi','midao','twshijun'],['zhu']],
+ wutugu:['male','qun',15,['ranshang','hanyong']],
+ sp_caiwenji:['female','wei',3,['chenqing','mozhi']],
+ zhugeguo:['female','shu',3,['qirang','yuhua']],
- lingju: ['female', 'qun', 3, ['jieyuan', 'fenxin']],
+ lingju:['female','qun',3,['jieyuan','fenxin']],
- cuiyan: ['male', 'wei', 3, ['yawang', 'xunzhi']],
- jsp_guanyu: ['male', 'wei', 4, ['new_rewusheng', 'danji']],
- jsp_huangyueying: ['female', 'qun', 3, ['jiqiao', 'linglong']],
- sunluyu: ['female', 'wu', 3, ['new_meibu', 'new_mumu']],
- hanba: ['female', 'qun', 4, ['fentian', 'zhiri']],
- zumao: ['male', 'wu', 4, ['yinbing', 'juedi']],
- wenpin: ['male', 'wei', 4, ['zhenwei']],
- daxiaoqiao: ['female', 'wu', 3, ['new_xingwu', 'new_luoyan']],
+ cuiyan:['male','wei',3,['yawang','xunzhi']],
+ jsp_guanyu:['male','wei',4,['new_rewusheng','danji']],
+ jsp_huangyueying:['female','qun',3,['jiqiao','linglong']],
+ sunluyu:['female','wu',3,['new_meibu','new_mumu']],
+ hanba:['female','qun',4,['fentian','zhiri']],
+ zumao:['male','wu',4,['yinbing','juedi']],
+ wenpin:['male','wei',4,['zhenwei']],
+ daxiaoqiao:['female','wu',3,['new_xingwu','new_luoyan']],
- guansuo: ['male', 'shu', 4, ['zhengnan', 'xiefang']],
- tadun: ['male', 'qun', 4, ['reluanzhan']],
- yanbaihu: ['male', 'qun', 4, ['zhidao', 'jili']],
- chengyu: ['male', 'wei', 3, ['shefu', 'benyu']],
+ guansuo:['male','shu',4,['zhengnan','xiefang']],
+ tadun:['male','qun',4,['reluanzhan']],
+ yanbaihu:['male','qun',4,['zhidao','jili']],
+ chengyu:['male','wei',3,['shefu','benyu']],
- sp_pangde: ['male', 'wei', 4, ['mashu', 'juesi']],
- sp_jiaxu: ['male', 'wei', 3, ['zhenlue', 'jianshu', 'yongdi']],
+ sp_pangde:['male','wei',4,['mashu','juesi']],
+ sp_jiaxu:['male','wei',3,['zhenlue','jianshu','yongdi']],
- litong: ['male', 'wei', 4, ['tuifeng']],
- mizhu: ['male', 'shu', 3, ['ziyuan', 'jugu']],
- buzhi: ['male', 'wu', 3, ['hongde', 'dingpan']],
+ litong:['male','wei',4,['tuifeng']],
+ mizhu:['male','shu',3,['ziyuan','jugu']],
+ buzhi:['male','wu',3,['hongde','dingpan']],
- caochun: ['male', 'wei', 4, ['xinshanjia']],
+ caochun:['male','wei',4,['xinshanjia']],
- dongbai: ['female', 'qun', 3, ['lianzhu', 'xiehui']],
+ dongbai:['female','qun',3,['lianzhu','xiehui']],
- zhaoxiang: ['female', 'shu', 4, ['fanghun', 'fuhan']],
- mazhong: ['male', 'shu', 4, ['fuman']],
- dongyun: ['male', 'shu', 3, ['bingzheng', 'sheyan']],
- kanze: ['male', 'wu', 3, ['xiashu', 'kuanshi']],
- heqi: ['male', 'wu', 4, ['olqizhou', 'olshanxi']],
+ zhaoxiang:['female','shu',4,['fanghun','fuhan']],
+ mazhong:['male','shu',4,['fuman']],
+ dongyun:['male','shu',3,['bingzheng','sheyan']],
+ kanze:['male','wu',3,['xiashu','kuanshi']],
+ heqi:['male','wu',4,['olqizhou','olshanxi']],
//mifuren:['female','shu',3,['guixiu','cunsi']],
- yuejin: ['male', 'wei', 4, ['xiaoguo']],
- sp_dongzhuo: ['male', 'qun', 5, ['hengzheng']],
- hetaihou: ['female', 'qun', 3, ['zhendu', 'qiluan']],
- dingfeng: ['male', 'wu', 4, ['reduanbing', 'refenxun']],
- shamoke: ['male', 'shu', 4, ['gzjili']],
+ yuejin:['male','wei',4,['xiaoguo']],
+ sp_dongzhuo:['male','qun',5,['hengzheng']],
+ hetaihou:['female','qun',3,['zhendu','qiluan']],
+ dingfeng:['male','wu',4,['reduanbing','refenxun']],
+ shamoke:['male','shu',4,['gzjili']],
//liqueguosi:['male','qun',4,['xiongsuan']],
//cuimao:['male','wei',3,['zhengbi','fengying']],
- zangba: ['male', 'wei', 4, ['rehengjiang']],
- zhangren: ['male', 'qun', 4, ['chuanxin', 'zfengshi']],
+ zangba:['male','wei',4,['rehengjiang']],
+ zhangren:['male','qun',4,['chuanxin','zfengshi']],
- wangyun: ['male', 'qun', 4, ['xinlianji', 'xinmoucheng'], ['clan:太原王氏']],
- sunqian: ['male', 'shu', 3, ['qianya', 'shuimeng']],
- xizhicai: ['male', 'wei', 3, ['tiandu', 'xianfu', 'chouce']],
- quyi: ['male', 'qun', 4, ['fuqi', 'jiaozi']],
+ wangyun:['male','qun',4,['xinlianji','xinmoucheng'],['clan:太原王氏']],
+ sunqian:['male','shu',3,['qianya','shuimeng']],
+ xizhicai:['male','wei',3,['tiandu','xianfu','chouce']],
+ quyi:['male','qun',4,['fuqi','jiaozi']],
- luzhi: ['male', 'wei', 3, ['qingzhong', 'weijing']]
+ luzhi:['male','wei',3,['qingzhong','weijing']]
},
- characterIntro: {
- tianchou: '田畴(169年或170年-214年或216年),字子泰,东汉右北平郡无终人,东汉末年隐士。田畴好文习武。汉初平年间,其受刘虞派遣去长安,呈送指控公孙赞奏章,献帝大悦,封为骑都尉,田畴不受。携诏返回时,刘虞已被公孙所杀,田畴到刘墓祭拜,被公孙所提,不久释放。田畴回故乡后率家族及随从数百人隐居徐无山,致力农桑,数年间增至5000家。制定法条,兴建学校,一时民风良好,乌桓、鲜卑纷纷与其结交。汉建安二十年(207年),曹操北征乌桓,田畴请为向导。上徐无山、出卢龙、过平冈、登白狼堆、至柳城,曹军大胜,封田畴为亭侯,坚辞不受。曹念田功,四次封赏,终不受,乃拜为议郎。建安二十一年(216年),田畴去世。',
- liyi: '李异(生卒年不详),三国时期东吴将领。建安末,与谢旌率水陆三千,击破刘备军将领詹晏、陈凤。刘备领兵攻孙权时,李异与陆逊等人屯巫、秭归,为蜀将所破。黄武元年(222年),陆逊破刘备于猇亭,李异追踪蜀军,屯驻南山。清代学者赵一清认为此李异与刘璋部将李异为同一人。',
- caoyu: '曹宇(?-278年),字彭祖,沛国谯县(今安徽亳州)人。三国时期魏国宗室,魏武帝曹操与环夫人之子,邓哀王曹冲同母兄弟。太和六年,封为燕王。魏明帝病危,欲以大将军辅政,不果。其子常道乡公曹奂,是魏国末代皇帝,史称魏元帝。晋朝建立后,降封燕公。咸宁四年(278年),曹宇去世。',
- zhangyan: '张燕,本姓褚,生卒年不详,常山真定(今河北正定南)人,东汉末年黑山军首领。张燕剽捍,敏捷过人,军中称为“飞燕”。官渡之战时投降曹操,被任命为平北将军,封安国亭侯。死后其子张方袭爵。',
- lushi: '卢氏,五斗米教主张衡妻,张鲁母,擅长驻颜之术,常年令自己保持少女的容颜。常拜访刘焉,与其交好。',
- lvboshe: '吕伯奢,东汉成皋(今河南荥阳)人,曹操父亲曹嵩的故友。曹操与陈宫在逃离董卓避祸,返回乡里的途中借宿于吕伯奢家,未伤其人,有贼八人欲捉曹操,曹操杀之,明罗贯中在历史小说《三国演义》中将这段历史进行了丑化加工,也成为小说中曹操名言“宁教我负天下人,休教天下人负我”的出处。',
- caoxi: '曹羲(?-249年),字昭叔。曹真之子,曹爽之弟。为人有学识,明律法。司马懿曾组织朝议改革九品中正制废除九品而留中正,曹羲认为此举并无区别,最终都是决定于人的人治。曹爽掌权后,受封中领军,掌握禁兵,封安乡侯。曹爽及诸兄弟轻视司马懿,恣意妄为,经常外出狩猎,曹羲屡次劝谏,不被采纳。249年,司马懿发动高平陵政变,被夷三族。',
- duanjiong: '段颎(?-179年),字纪明,武威姑臧(今甘肃省武威市)人。东汉名将,西域都护段会宗从曾孙,与皇甫规(字威明)、张奂(字然明)并称“凉州三明”。段颎少时学习骑射,有文武智略,最初被举为孝廉,为宪陵园丞、阳陵令,有治理之才。汉桓帝时入军旅,先破鲜卑,后讨平东郭窦、公孙举起事,以功封列侯。延熹二年(159年)起戍边征战十余年,百战羌人,至永康元年(167年)平定西羌,建宁二年(169年)平定东羌,前后斩东西羌六万余级。累功封新丰县侯。建宁三年(170年),段颎被征入朝,历任侍中、执金吾、河南尹、司隶校尉等职,他党附宦官、捕杀太学生,因而得保富贵,两度出任太尉。光和二年(179年),权宦王甫罪行被揭发,段颎受牵连下狱,其后在狱中饮鸩而死。',
- haopu: '郝普,字子太,义阳(治所在今湖北枣阳东南)人。刘备入川后,郝普为零陵太守。建安二十年(215年),吴将吕蒙进攻荆州三郡,唯有郝普坚守待援。但援兵久久不至,其挚友邓玄之又被吕蒙所骗,郝普也因此上当,投降吴国。湘水划界后,郝普回归刘备。建安二十四年(219年),吕蒙再次袭击荆州,击败关羽,郝普再次投降,最终归顺吴国并官至廷尉。郝普与隐蕃亲善,隐蕃蓄谋叛变事情败露,他受到牵连,因此自杀。在刘备集团的5个荆州郡守中,郝普是唯一一个抵抗过东吴的荆州郡守。',
- ol_zhanghe: '字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。',
- zhangshiping: '张世平是东汉末期的中山商人,曾与苏双同路,资助刘备组织武装、建立政权。于《三国演义》第一回出场,刘关张桃园三结义时资助刘备良马五十匹,金银五百两,镔铁一千斤。刘备所使用的“双股剑”、关羽所使用的“青龙偃月刀(又名‘冷艳锯’)”、张飞所使用的“丈八点钢矛(又名‘丈八蛇矛’)”皆由这一千斤上好镔铁打造而成。',
- luoxian: '罗宪(218年—270年),字令则,荆州襄阳(今湖北襄阳)人。西晋开国将领,巴东太守(郡府在永安白帝城)。于蜀汉灭亡后降魏,成功抵御孙吴的入侵,守住入魏国的要冲永安。后仕晋官至冠军将军、假节,封西鄂县侯。泰始六年(270年)去世,谥烈侯。',
- sunhong: '孙弘(?—252年),三国时期吴国大臣,扬州会稽(今浙江省绍兴市)人。官至吴国中书令、少傅。鲁王孙霸与太子孙和各植党羽,孙弘即依附孙霸。孙权病笃,而太子年少,于是以孙弘领少傅。孙权临终,召他与诸葛恪、孙峻等嘱以后事,孙弘与诸葛恪同为顾命大臣。孙权死后,孙弘因素来与诸葛恪不和,怕为所治,故而隐瞒了孙权的死讯,欲矫诏除掉诸葛恪,被孙峻告发。后诸葛恪请孙弘议事,于座中将其诛杀。',
- wangguan: '《三国演义》中虚构人物,历史上不曾记载。在114回出场,曾为邓艾手下参谋,献反间计与邓艾,被姜维识破,兵败自投江而死。',
- maxiumatie: '马休(?-212年),马铁(?-212年)。两人均为扶风茂陵(今陕西兴平)人,马腾之子,马超之弟。马腾遭韩遂进攻,乃携马休、马铁等入京受职。马休被封为奉车都尉,马铁被封为骑都尉。后在邺城居住。因兄马超反,两人被曹操夷灭。',
- dongtuna: '董荼那,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第二洞元帅;与阿会喃等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同阿会喃共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
- zhanghua: '张华(232年-300年),字茂先。范阳郡方城县(今河北固安)人。西晋时期政治家、文学家、藏书家,西汉留侯张良的十六世孙。张华出身范阳张氏,自少贫苦,因才学过人而受同乡名臣卢钦、刘放、阮籍等人的赞赏。在曹魏时,他历任太常博士、河南尹丞、佐著作郎、中书郎等职。西晋建立后,拜黄门侍郎,封关内侯,逐渐受到晋武帝的重用。后拜中书令,加散骑常侍,与大将杜预坚决支持武帝伐吴,于战时任度支尚书。吴国灭亡后,以功进封广武县侯。其后遭到排挤,出镇幽州,政绩卓然。之后返朝任太常,终武帝之世未得参与政事。晋惠帝继位后,累官至司空,封壮武郡公,被皇后贾南风委以朝政。张华尽忠辅佐,使天下仍然保持相对安宁。永康元年(300年),♯♯司马伦发动政变,张华惨遭杀害,年六十九。太安二年(303年),获得♯♯,追复官爵。张华工于诗赋,词藻华丽,又雅爱书籍,精于目录学,编纂有中国第一部博物学著作《博物志》;还曾与荀勖等人依照刘向《别录》整理典籍。《宣和书谱》载有其草书《得书帖》及行书《闻时帖》。《隋书·经籍志》有《张华集》十卷,今已佚。明人张溥辑有《张茂先集》。',
- quhuang: '屈晃(?—251),祖籍汝南(今河南省汝南县),汉末避乱南下,三国吴时居章安(今属椒江区)。初为郡吏,在职清廉,颇有政声。赤乌初年,擢为尚书仆射。',
- macheng: '马承,蜀汉骠骑将军马超之子。仕蜀汉,马超死后继承其斄乡侯爵位。',
- zhangzhi: '张芝(?—192年),字伯英,敦煌郡渊泉县(今甘肃省瓜州县)人。东汉书法家、“草书之祖”,大司农张奂的儿子。出身名门,拒绝朝廷征召,潜心研习书法。擅长草书中的章草,将古代当时字字区别、笔画分离的草法,改为上下牵连富于变化的新写法,富有独创性,在当时影响很大。李志敏评价:“张芝创造了草书问世以来的第一座高峰,精熟神妙,兼善章今”。 没有真迹传世,仅存《八月帖》等刻帖。汉献帝初平三年,去世于家中,著有《笔心论》,与钟繇、王羲之和王献之并称“书中四贤”。',
- ahuinan: '阿会喃,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第三洞元帅;与董荼那等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同董荼那共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
- xiahouxuan: '夏侯玄(209年~254年),字泰初(《三国志》等作太初),沛国谯县(今安徽省亳州市)人。三国时期曹魏大臣、思想家、文学家,征南大将军夏侯尚之子,大将军曹爽的表弟。夏侯玄少年有名望,仪表出众,时人称为“朗朗如日月之入怀”。魏文帝黄初六年(225年),袭封昌陵乡侯。魏明帝时,历任散骑黄门侍郎、羽林监。少帝曹芳继位后,拜散骑常侍、中护军,保卫皇宫。后任征西将军,任内与曹爽策划骆谷之役,大失人心。高平陵政变后,被夺去兵权,改任大鸿胪、太常卿。嘉平六年(254年),中书令李丰与外戚张缉密谋杀死大将军司马师,改以夏侯玄执政。事泄被杀,夷灭三族,夏侯玄死时年仅四十六岁。著有文集三卷,如今已佚。政治上,提出了“审官择人”、“除重官”、“改服制”等制度,被太傅司马懿评价“皆大善”。博学多识,才华出众,精通玄学,成为“四聪”之一,与何晏等人开创了魏晋玄学的先河,是早期的玄学领袖人物。',
- dengzhong: '邓忠(不详-264年),三国时期曹魏名将邓艾之子。景元五年(264年),钟会谋反事败,士兵哗变,钟会被杀,邓艾部将想追还邓艾父子,但卫瓘却派田续追邓艾,于绵竹西相遇,将邓艾和邓忠等人杀死。直至泰始九年(273年)才恢复名节。',
- wangyan: '王衍(256年~311年),字夷甫,琅邪郡临沂县(今山东省临沂市)人。西晋末年重臣,玄学清谈领袖,曹魏幽州刺史王雄之孙、平北将军王乂之子、司徒王戎堂弟。王衍出身琅琊王氏。外表清明俊秀,风姿安详文雅,笃好老庄学说,颇有时名。步入仕途后,历任黄门侍郎、中领军、尚书令、尚书仆射等职。光熙元年(307年),升任司空。次年,又任司徒。王衍位高权重,却不思为国,为保全自己,还让弟弟王澄、族弟王敦分任荆州、青州刺史,遭时人鄙夷。王弥进攻洛阳时,王衍率军抵抗。其后转任太尉兼尚书令,又兼领太傅军司。永嘉五年(311年),东海王司马越去世,王衍奉其灵柩返回东海,途中为羯人石勒所俘获。王衍在与石勒交谈时,仍推脱责任,并劝其称帝,石勒大怒,将其与西晋旧臣一同活埋,时年五十六岁。王衍工书法,尤擅行书,《宣和书谱》有其作品《尊夫人帖》。',
- caoxiancaohua: '请分别查询参考「曹宪」和「曹华」的部武将介绍。',
- zhaoyǎn: '赵俨(171~245年),字伯然,颍川阳翟(今河南禹州市)。东汉末年颍川“四大名士”之一,三国时期魏国名臣。熟读经史,精明强干。建安二年,投靠大将军曹操之后,起家朗陵县令,历任司空府掾、司空主薄、都督护军、扶风太守等职。魏文帝曹丕继位后,历任魏国侍中、驸马都尉、河东太守、典农中郎将、度支尚书,封宜土亭侯。魏明帝曹睿时期,历任大司农、骠骑将军、大司空等职。正始六年,去世,时年七十五,谥号为穆。',
- ruiji: '芮姬,芮玄之女,太子孙登妃,黄武五年卒。',
- weizi: '卫兹(?-190年),字子许,(《三国演义》中其名为卫弘,当为误记),陈留襄邑(今河南睢县)人。曾举孝廉,先后被车骑将军何苗、司徒杨赐等召辟。中平六年(189年)十二月,曹操在陈留己吾募兵,而卫兹以家财资助曹操,使曹操顺利募得五千士兵。此后,卫兹与曹操共同讨伐董卓。初平元年(190年),卫兹在跟随曹操讨伐董卓途中,于荥阳汴水遭遇董卓军徐荣,力战终日,失利身亡。',
- tengfanglan: '滕芳兰,生卒年不详,北海剧县(今山东省寿光市)人,太常滕胤的族女,滕牧的女儿,吴末帝孙皓的皇后。永安元年(258年),孙皓为乌程侯时被聘为妃。元兴元年(264年),孙皓登基后被立为皇后。孙吴灭亡后,随孙皓迁居洛阳。',
- qinghegongzhu: '清河长公主,沛国谯县人,曹操长女(按其与曹操长子曹昂同出于刘夫人,而刘夫人又早死,故其年龄应长于曹丕等其他曹操诸子女,又按长公主亦有年最长之意,故应为曹操之长女)。母刘夫人,得到曹操喜爱。清河公主后来下嫁夏侯楙。曹操初欲嫁丁仪,曹丕劝其嫁与夏侯楙。后与小叔子设计欲谋害丈夫,未果。',
- fanjiangzhangda: '范强,在明朝小说《三国演义》里叫做范疆。二人均为张飞手下部将。蜀汉章武元年,刘备伐吴,张飞率军从阆中前往江州,出发前,范强和张达杀死张飞,带着张飞的首级投奔了东吴。',
- tianyu: '田豫(171年~252年),字国让,渔阳雍奴(今天津市武清区)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。后来田豫常年镇守曹魏北疆,从征代郡乌桓、斩骨进、破轲比能,多有功勋;也曾参与对孙吴的作战,在成山斩杀周贺,于新城击败孙权。官至太中大夫,封长乐亭侯。有一子田彭祖。',
- wuyan: '吴国及西晋初年将领。初任通江县吏,后得到大司马陆抗的提拔重用,逐渐升至建平太守。',
- fengfangnv: '冯方之女,司隶人,袁术妻妾。在史书中被记载为天姿国色的美人。钱大昭在《三国志辨疑》中认为冯方当为冯芳误字,冯方女实为是西园八校尉之一的冯芳的女儿。然而,在曹丕《典论》、《九州春秋》等书籍都有提及她,皆作冯方女字样,并无一书写作冯芳女或是明提是冯芳之女。最关键的一点是,冯芳是荆州西陵县人,她女儿不可能是司隶籍,冯芳也没担任过任何与司隶有关的官职。同时期名字为“○女”的并不少见,如施绩女儿施淑女,曹植女儿曹行女,夏侯令女等。',
- zuofen: '左芬(约253年-300年4月23日),出土墓志作左棻,字兰芝,齐国临淄(今山东临淄)人,西晋诗人。少好学,善属文。为晋武帝贵人。今存诗、赋、颂、赞、诔等20余篇,大都为应诏而作,《离思赋》最著名。原有集,已失传。',
- duxi: '杜袭(生卒年不详),字子绪,颍川郡定陵县(今河南省襄城县)人。三国时期魏国重臣,东汉末年颍川“四大名士”之一,济阴太守杜根的孙子。建安初年,投奔司空曹操,历任西鄂县令、议郎、丞相军咨祭酒、魏王侍中、丞相长史、驸马都尉。魏文帝时期,出任督军粮御史、尚书,累封武平亭侯。魏明帝时期,担任大将军曹真和司马懿的军师,抵御蜀国进攻,拜太中大夫,受封平阳乡侯。卒于任上,获赠少府,谥号为定。',
- gaogan: '高干(?~206年),字元才,陈留郡圉县(今河南杞县圉镇)人。东汉末年并州割据将领,蜀郡太守高躬之子、大将军袁绍外甥。出身陈留高氏,才志弘邈,文武秀出。早年联合荀谌游说韩馥让出冀州牧。袁绍平定河北后,以为并州牧。官渡之战时,在西线配合作战。因曹操早有准备,没有实质进展。袁绍死后,袁谭、袁尚与曹操大战于黎阳郡时,联合郭援攻打平阳郡,为马腾为首关中将领所败,郭援为庞德所斩。袁尚败走中山郡后,出降于曹操,仍为并州刺史。建安十年,兴兵反曹,固守壶关,成功抵挡乐进进攻。得知曹操亲征后,留下别将守城,亲往匈奴呼厨泉求救,没有成功。引兵攻略河东郡,屡为钟繇、张既所败。建安十一年,投奔荆州刘表。途经上洛时,为上洛都尉捕斩之。',
- huangchengyan: '黄承彦,生卒年不详,汉末三国时期沔阳名士,诸葛亮岳父,黄月英之父。南郡大士蔡讽的女婿,与襄阳名士上层社会圈子:庞统(凤雏)、庞德公、司马徽、徐庶等人交好。《襄阳记》:黄承彦者,高爽开列,为沔阳名士,谓诸葛孔明曰:“闻君择妇,身有丑女,黄头黑色,而才堪配。”孔明许,即载送之。时人以为笑乐,乡里为之谚曰:“莫作孔明择妇,正得阿承丑女。”',
- panshu: '潘淑(?-252年),会稽句章(今浙江省宁波市)人,是吴大帝孙权的皇后,吴少帝孙亮的母亲。和孙权是中国历代帝后中年龄差距较大的一对。潘淑少时与姐姐俱没入织室,容媚有宠,拜为夫人,生有一子孙亮。赤乌十三年(250年),孙权立孙亮为皇太子,翌年(251年)立潘淑为皇后。神凤元年(252年)暴崩,合葬蒋陵。世称潘淑为江东绝色,有神女之称。',
- zongyu: '宗预(?-264年),字德艳 ,荆州南阳郡安众县(今河南省南阳市)人。三国时期蜀汉官员、将领。曾随张飞入蜀助平益州,又受辟为丞相诸葛亮手下主簿,升任参军、右中郎将。诸葛亮逝世后,宗预受命出使孙吴,得到孙权的赞赏。迁后将军,出督永安,又升任征西大将军,并受封关内侯。公元258年(景耀元年),因病回成都,受任镇军大将军。蜀汉灭亡后,宗预随后主刘禅徙往洛阳,在中途病逝。宗预为人坦率耿直,多次出使孙吴并深得孙权的敬重,为吴、汉两国同盟的巩固作出了一定的贡献。',
- mengda: '孟达(?-228),字子度,本字子敬,因刘备的叔父名叫刘子敬,为避讳而改字。扶风郡郿人,三国时期人物。本为刘璋属下,后降刘备。关羽围樊城、襄阳时因不发兵救关羽而触怒刘备,于是投奔曹魏。此后,劝降刘封,未果。在魏官至散骑常侍、建武将军,封平阳亭侯。此后又欲反曹魏而归蜀汉,事败而死。',
- wolongfengchu: '沙比武将,懒得复制粘贴,自己去看诸葛亮和庞统的介绍吧。',
- caoshuang: '曹爽(?-249年2月9日),字昭伯,沛国谯县(今安徽亳州市)人。三国时期魏国权臣,大司马曹真长子。曹爽体态肥胖,凭借宗室身份,出入宫廷,交好太子曹叡。魏明帝即位,起家员外散骑侍郎,累迁城门校尉、散骑常侍,转武卫将军。太和五年(231年),袭封邵陵侯。景初三年(239年),魏明帝曹叡病危,拜大将军、假黄钺,与司马懿并为托孤大臣。少帝曹芳即位,加侍中,改封武安侯。势倾四海,声震天下。任用私人,专权乱政,侵吞公产。伐蜀失败,虚耗国力。起居逾制,软禁郭太后。正始十年,太傅司马懿发动高平陵政变,掌握魏国大权。曹爽失去大将军职务,以谋反之罪处死,夷灭三族。',
- zhangling: '张道陵(34年2月22日—156年),字辅汉,原名陵,道教正一道实际创立者,汉朝东汉时期丰邑(今江苏徐州丰县)人。太上老君降临蜀地,“授以三天正法,命为天师”,张道陵整合当时的:黄老派、方仙道、文始派等先秦修道团体,创立道教称正一盟威之道。后世尊称为“老祖天师”、“正一真人”、“三天扶教大法师”、高明上帝、张天师。著作《老子想尔注》,弟子有3000多人,设立24治,奠基天师道。张道陵、葛玄、许逊、萨守坚合称四大天师。张道陵创建道教的背景:当时在巴蜀一带,原有巴人信奉原始巫教,大规模的淫祀而害民。而这些祀奉鬼妖(学名为:妖邪)的法教巫师聚众敛财,无恶不作。张天师携王长、赵升二位弟子和黄帝九鼎丹经,来到北邙山修行,平定了那些祸害百姓的巫妖之教。川渝一带流传的张天师以太上老君剑印符箓大破鬼兵的故事就是以此为原型的。',
- caiyang: '蔡阳(?-201年),又作蔡扬,东汉丞相曹操部下武将,汝南太守。于建安六年(201)奉曹操之命攻击与刘备联合的汝南贼龚都等人,兵败被刘备所杀。明代小说《三国演义》改编为“云长擂鼓斩蔡阳”。',
- pujing: '湖北省当阳境内有一座山,名叫玉泉山。东汉建安末年,山上住着一个老和尚,法名普净,普净原来是沂水关镇国寺方丈,后因云游天下,来到此处,风这地方山明水秀,就于山中结草为庵,每天坐禅参道,身边只有一个小和尚,外出化一些斋饭,供养师父。在《三国演义》中,当关羽通过汜水关时,正是由于普净提醒,关羽才揭穿了卞喜的阴谋,并杀死了卞喜。关羽死后,其怨魂亦在普净的指点下醒悟,放下了心中的仇恨,专心致力于造福一方百姓。',
- huban: '为《三国演义》所杜撰的人物,正史无记载,荥阳太守王植麾下从事、桓帝时议郎胡华之子。关羽过五关斩六将时其中一关就是王植所镇守,胡班奉命放火夜袭关公,因敬服公之气概,并得其父托公所带家书,班看毕,叹曰:“险些误杀忠良!”故将之放走。胡班到荆州来投降关公,公念其旧日相救之情,甚爱之;令随费诗入川,见汉中王受爵。费诗辞别关公,带了胡班,自回蜀中去了。',
- chunyuqiong: '淳于琼(?-200年),字仲简,颍川(治今河南禹州)人。东汉时期官吏,于汉灵帝中平五年(188)被任命为西园八校尉之一的右校尉,与蹇硕、袁绍、鲍鸿、曹操、赵融、冯芳、夏牟同列。为袁绍大将,与张郃、高览等人齐名。在官渡之战时镇守乌巢,遭到曹操的偷袭而惨败,自己也被曹操处斩。',
- lvkuanglvxiang: '吕旷(生卒年不详),与吕翔同是袁绍属下,袁绍去世后,为袁尚守东平,后来投降曹操,并被封为列侯。在《三国演义》中,在曹操准备往南准备攻击前,两人跟著大将曹仁和将军李典准备要攻击刘备。但吕旷被赵云刺下马身亡,而吕翔也死于张飞矛下,可以算是出师未捷身先死',
- caobuxing: '曹不兴,亦名弗兴,三国时著名画家。孙吴吴兴(今浙江湖州)人,生卒年不详。他在黄武年间(222—229年)享有很大的声誉。被称为“佛画之祖”。与东晋顾恺之、南朝宋陆探微、南朝梁张僧繇并称“六朝四大家”。又与赵达的算术、严武的弈棋、皇象的草书等号称“吴中八绝”。曹不兴善画龙、虎、马及人物,有“落墨为蝇”等传奇故事,其佛画成就对后世影响很大,相传其所画龙头令谢赫叹服不已。画迹今已不存,据《贞观公私画史》载,作品有《青溪龙》、《赤盘龙》、《南海监牧进十种马图》、《夷事夷兽样》、《桃源图》等,惜早已散佚。但之后的著名画家卫协直接师承其法。',
- gaolan: '高览,生卒年不详,一名高奂,本属袁绍部将,后官渡之战淳于琼被曹操击破,与张郃一同投降曹操,被封为偏将军,东莱侯。《三国演义》里,曾与许褚、徐晃大战不分胜负。201年刘备败走荆州时,高览奉命追杀,三合斩刘辟,而后被冲阵而来的赵云刺死。',
- xunchen: '荀谌,字友若,荀彧之兄(一说荀彧之弟),荀绲之子,颍川人。曾任军阀袁绍的幕僚。帮助袁绍游说韩馥,夺取了冀州。',
- sunshao: '孙邵(163年-225年),字长绪,青州北海国人(今山东潍坊市昌乐县西)。原为北海相孔融的功曹,被孔融称赞为可任朝廷要职的人才,后随刘繇到达江东,继而辅佐孙权。孙权称吴王后,孙邵成为吴国首任丞相,数年后病逝。由于孙邵和当时吴国史官的关系并不是很好,因此在史书中并没有详细的记载。',
- yuantanyuanshang: '袁谭、袁尚分别是袁绍的长子和第三子。袁绍坐拥青州、冀州、幽州、并州,本是北方最强诸侯,却于官渡大败,惭恨而终。虽然袁绍生前偏爱小儿子袁尚,却并未在继承人上有明确表态,这也导致本应以嫡长子身份继承的袁谭因郭图、审配伪立遗令未能如愿。曹操击败袁绍后,进而渡过黄河追击袁家残余势力,袁谭告急,但袁尚仅给他少量兵力。曹操得郭嘉之计退兵坐观其变,恰使两人此前的种种矛盾彻底爆发,袁谭不敌便引狼入室,派辛毗作为使者向曹操求援,让袁尚不得不北逃投奔乌桓。但袁谭也在之后背叛曹操兵败被杀。没多久,乌桓也被平定,袁熙、袁尚二人投奔公孙康后被斩首送还曹操。',
- xujing: '许靖(?—222年),字文休。汝南郡平舆县(今河南省平舆县)人。汉末至三国蜀汉时期重臣、名士、评论家。许靖因与从弟许邵俱以品评人物而闻名于世。后被刘翊推举为孝廉,任尚书郎。曾先后投奔孔伷、陈祎、许贡、王朗等人,于孙策攻王朗前与家属俱避难交州,受到交趾太守士燮礼待。其后受益州牧刘璋邀请,相继为巴郡、广汉、蜀郡太守。于刘备包围成都时欲越墙叛逃,为刘璋所获。刘备定蜀后欲将其弃用,在法正的建议下方以其为左将军长史。建安二十三年(218年),刘备称汉中王,任命许靖为汉中王傅。章武元年(221年),刘备称帝,任命许靖为司徒,位列三公。章武二年(222年),去世。有文集二卷。',
- hejin: '何进(?~189年),字遂高,南阳郡宛县(今河南南阳市宛城区)人。东汉时期外戚大臣,灵思皇后之兄。初以妹妹有宠,拜为郎中,出任虎贲中郎将、颍川太守,迁侍中、将作大匠、河南尹。黄巾起义时,拜为大将军,总镇京师,发现并镇压马元义的密谋,封为慎侯。为张大威望,在京师讲武结营,置西园八校尉。汉灵帝驾崩后,粉碎了中常侍蹇硕拥立皇子刘协的图谋,听从袁绍之言,博征智谋之士,内借元舅之资,外据辅政之权,独揽朝中大权。中平六年(189),不纳陈琳和曹操劝谏,阴结军阀董卓,联合袁绍谋诛宦竖。事情败露后,为中常侍张让等人损害,其后代是魏晋高门士族南阳何氏。',
- hansui: '韩遂(?-215年),字文约。凉州金城郡人。东汉末年军阀、将领,汉末群雄之一。原名韩约,后改名遂。韩遂最初闻名于西州,被羌胡叛军劫持并推举为首领,以诛宦官为名举兵造反,聚众十万,先后败皇甫嵩、张温、董卓、孙坚等名将,使得天下骚动。后受朝廷招安,拥兵割据一方长达三十余年。韩遂曾与马腾结为异姓兄弟,后二人关系破裂。袁绍、曹操相争之际,马腾、韩遂被钟繇说服,依附于曹操。马腾入京后,留其子马超统领部队。马超推举韩遂为都督起兵反叛曹操,为曹操所败,韩遂逃奔凉州,后又为夏侯渊所败,病死(一说被杀),享年七十余岁。',
- niujin: '牛金(生卒年不详),初为曹仁部曲将,周瑜军数万人来攻,前锋数千人始至,曹仁登城望,乃募得三百人,遣牛金迎战。但对方兵力较多,牛金遂被围困。曹仁亲自杀入阵中救出牛金。司马懿使牛金轻骑饵诱蜀军,刚交战诸葛亮就退兵,追至祁山。蜀将马岱入寇,司马懿遣将军牛金击退,斩千余级。公孙渊反,司马懿帅牛金、胡遵等步骑四万发自洛阳,后平定辽东。牛金官至后将军。',
- jianggan: "蒋干,字子翼,汉末三国时期的人物,九江(治今安徽寿县)人。历史上的蒋干是当时的名士、辩论家。而罗贯中在历史小说《三国演义》中则将蒋干刻画成了被周瑜所愚弄的小丑形象。",
+ characterIntro:{
+ tianchou:'田畴(169年或170年-214年或216年),字子泰,东汉右北平郡无终人,东汉末年隐士。田畴好文习武。汉初平年间,其受刘虞派遣去长安,呈送指控公孙赞奏章,献帝大悦,封为骑都尉,田畴不受。携诏返回时,刘虞已被公孙所杀,田畴到刘墓祭拜,被公孙所提,不久释放。田畴回故乡后率家族及随从数百人隐居徐无山,致力农桑,数年间增至5000家。制定法条,兴建学校,一时民风良好,乌桓、鲜卑纷纷与其结交。汉建安二十年(207年),曹操北征乌桓,田畴请为向导。上徐无山、出卢龙、过平冈、登白狼堆、至柳城,曹军大胜,封田畴为亭侯,坚辞不受。曹念田功,四次封赏,终不受,乃拜为议郎。建安二十一年(216年),田畴去世。',
+ liyi:'李异(生卒年不详),三国时期东吴将领。建安末,与谢旌率水陆三千,击破刘备军将领詹晏、陈凤。刘备领兵攻孙权时,李异与陆逊等人屯巫、秭归,为蜀将所破。黄武元年(222年),陆逊破刘备于猇亭,李异追踪蜀军,屯驻南山。清代学者赵一清认为此李异与刘璋部将李异为同一人。',
+ caoyu:'曹宇(?-278年),字彭祖,沛国谯县(今安徽亳州)人。三国时期魏国宗室,魏武帝曹操与环夫人之子,邓哀王曹冲同母兄弟。太和六年,封为燕王。魏明帝病危,欲以大将军辅政,不果。其子常道乡公曹奂,是魏国末代皇帝,史称魏元帝。晋朝建立后,降封燕公。咸宁四年(278年),曹宇去世。',
+ zhangyan:'张燕,本姓褚,生卒年不详,常山真定(今河北正定南)人,东汉末年黑山军首领。张燕剽捍,敏捷过人,军中称为“飞燕”。官渡之战时投降曹操,被任命为平北将军,封安国亭侯。死后其子张方袭爵。',
+ lushi:'卢氏,五斗米教主张衡妻,张鲁母,擅长驻颜之术,常年令自己保持少女的容颜。常拜访刘焉,与其交好。',
+ lvboshe:'吕伯奢,东汉成皋(今河南荥阳)人,曹操父亲曹嵩的故友。曹操与陈宫在逃离董卓避祸,返回乡里的途中借宿于吕伯奢家,未伤其人,有贼八人欲捉曹操,曹操杀之,明罗贯中在历史小说《三国演义》中将这段历史进行了丑化加工,也成为小说中曹操名言“宁教我负天下人,休教天下人负我”的出处。',
+ caoxi:'曹羲(?-249年),字昭叔。曹真之子,曹爽之弟。为人有学识,明律法。司马懿曾组织朝议改革九品中正制废除九品而留中正,曹羲认为此举并无区别,最终都是决定于人的人治。曹爽掌权后,受封中领军,掌握禁兵,封安乡侯。曹爽及诸兄弟轻视司马懿,恣意妄为,经常外出狩猎,曹羲屡次劝谏,不被采纳。249年,司马懿发动高平陵政变,被夷三族。',
+ duanjiong:'段颎(?-179年),字纪明,武威姑臧(今甘肃省武威市)人。东汉名将,西域都护段会宗从曾孙,与皇甫规(字威明)、张奂(字然明)并称“凉州三明”。段颎少时学习骑射,有文武智略,最初被举为孝廉,为宪陵园丞、阳陵令,有治理之才。汉桓帝时入军旅,先破鲜卑,后讨平东郭窦、公孙举起事,以功封列侯。延熹二年(159年)起戍边征战十余年,百战羌人,至永康元年(167年)平定西羌,建宁二年(169年)平定东羌,前后斩东西羌六万余级。累功封新丰县侯。建宁三年(170年),段颎被征入朝,历任侍中、执金吾、河南尹、司隶校尉等职,他党附宦官、捕杀太学生,因而得保富贵,两度出任太尉。光和二年(179年),权宦王甫罪行被揭发,段颎受牵连下狱,其后在狱中饮鸩而死。',
+ haopu:'郝普,字子太,义阳(治所在今湖北枣阳东南)人。刘备入川后,郝普为零陵太守。建安二十年(215年),吴将吕蒙进攻荆州三郡,唯有郝普坚守待援。但援兵久久不至,其挚友邓玄之又被吕蒙所骗,郝普也因此上当,投降吴国。湘水划界后,郝普回归刘备。建安二十四年(219年),吕蒙再次袭击荆州,击败关羽,郝普再次投降,最终归顺吴国并官至廷尉。郝普与隐蕃亲善,隐蕃蓄谋叛变事情败露,他受到牵连,因此自杀。在刘备集团的5个荆州郡守中,郝普是唯一一个抵抗过东吴的荆州郡守。',
+ ol_zhanghe:'字儁乂,河间鄚人。三国时期魏国名将。官渡之战时,本为袁绍部将的张郃投降了曹操,并在曹操帐下多立功勋,于曹魏建立后加封为征西车骑将军。诸葛亮六出祁山之间,张郃多次抵御蜀军的进攻,于公元231年在木门道被诸葛亮设伏射死。后谥曰壮侯。为曹魏“五子良将”之一。',
+ zhangshiping:'张世平是东汉末期的中山商人,曾与苏双同路,资助刘备组织武装、建立政权。于《三国演义》第一回出场,刘关张桃园三结义时资助刘备良马五十匹,金银五百两,镔铁一千斤。刘备所使用的“双股剑”、关羽所使用的“青龙偃月刀(又名‘冷艳锯’)”、张飞所使用的“丈八点钢矛(又名‘丈八蛇矛’)”皆由这一千斤上好镔铁打造而成。',
+ luoxian:'罗宪(218年—270年),字令则,荆州襄阳(今湖北襄阳)人。西晋开国将领,巴东太守(郡府在永安白帝城)。于蜀汉灭亡后降魏,成功抵御孙吴的入侵,守住入魏国的要冲永安。后仕晋官至冠军将军、假节,封西鄂县侯。泰始六年(270年)去世,谥烈侯。',
+ sunhong:'孙弘(?—252年),三国时期吴国大臣,扬州会稽(今浙江省绍兴市)人。官至吴国中书令、少傅。鲁王孙霸与太子孙和各植党羽,孙弘即依附孙霸。孙权病笃,而太子年少,于是以孙弘领少傅。孙权临终,召他与诸葛恪、孙峻等嘱以后事,孙弘与诸葛恪同为顾命大臣。孙权死后,孙弘因素来与诸葛恪不和,怕为所治,故而隐瞒了孙权的死讯,欲矫诏除掉诸葛恪,被孙峻告发。后诸葛恪请孙弘议事,于座中将其诛杀。',
+ wangguan:'《三国演义》中虚构人物,历史上不曾记载。在114回出场,曾为邓艾手下参谋,献反间计与邓艾,被姜维识破,兵败自投江而死。',
+ maxiumatie:'马休(?-212年),马铁(?-212年)。两人均为扶风茂陵(今陕西兴平)人,马腾之子,马超之弟。马腾遭韩遂进攻,乃携马休、马铁等入京受职。马休被封为奉车都尉,马铁被封为骑都尉。后在邺城居住。因兄马超反,两人被曹操夷灭。',
+ dongtuna:'董荼那,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第二洞元帅;与阿会喃等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同阿会喃共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
+ zhanghua:'张华(232年-300年),字茂先。范阳郡方城县(今河北固安)人。西晋时期政治家、文学家、藏书家,西汉留侯张良的十六世孙。张华出身范阳张氏,自少贫苦,因才学过人而受同乡名臣卢钦、刘放、阮籍等人的赞赏。在曹魏时,他历任太常博士、河南尹丞、佐著作郎、中书郎等职。西晋建立后,拜黄门侍郎,封关内侯,逐渐受到晋武帝的重用。后拜中书令,加散骑常侍,与大将杜预坚决支持武帝伐吴,于战时任度支尚书。吴国灭亡后,以功进封广武县侯。其后遭到排挤,出镇幽州,政绩卓然。之后返朝任太常,终武帝之世未得参与政事。晋惠帝继位后,累官至司空,封壮武郡公,被皇后贾南风委以朝政。张华尽忠辅佐,使天下仍然保持相对安宁。永康元年(300年),♯♯司马伦发动政变,张华惨遭杀害,年六十九。太安二年(303年),获得♯♯,追复官爵。张华工于诗赋,词藻华丽,又雅爱书籍,精于目录学,编纂有中国第一部博物学著作《博物志》;还曾与荀勖等人依照刘向《别录》整理典籍。《宣和书谱》载有其草书《得书帖》及行书《闻时帖》。《隋书·经籍志》有《张华集》十卷,今已佚。明人张溥辑有《张茂先集》。',
+ quhuang:'屈晃(?—251),祖籍汝南(今河南省汝南县),汉末避乱南下,三国吴时居章安(今属椒江区)。初为郡吏,在职清廉,颇有政声。赤乌初年,擢为尚书仆射。',
+ macheng:'马承,蜀汉骠骑将军马超之子。仕蜀汉,马超死后继承其斄乡侯爵位。',
+ zhangzhi:'张芝(?—192年),字伯英,敦煌郡渊泉县(今甘肃省瓜州县)人。东汉书法家、“草书之祖”,大司农张奂的儿子。出身名门,拒绝朝廷征召,潜心研习书法。擅长草书中的章草,将古代当时字字区别、笔画分离的草法,改为上下牵连富于变化的新写法,富有独创性,在当时影响很大。李志敏评价:“张芝创造了草书问世以来的第一座高峰,精熟神妙,兼善章今”。 没有真迹传世,仅存《八月帖》等刻帖。汉献帝初平三年,去世于家中,著有《笔心论》,与钟繇、王羲之和王献之并称“书中四贤”。',
+ ahuinan:'阿会喃,小说《三国演义》及其衍生作品中的角色,南蛮王孟获属下大将,第三洞元帅;与董荼那等人一起担任孟获的援军出征,但是被俘虏,又被诸葛亮释放,再次出战时,被唾骂不知羞耻,面红耳赤的退军。后同董荼那共同绑架孟获献于蜀军,却被诸葛亮在其二人与孟获的重要性间权衡后出卖了他们,放走了孟获,使其为孟获所杀。',
+ xiahouxuan:'夏侯玄(209年~254年),字泰初(《三国志》等作太初),沛国谯县(今安徽省亳州市)人。三国时期曹魏大臣、思想家、文学家,征南大将军夏侯尚之子,大将军曹爽的表弟。夏侯玄少年有名望,仪表出众,时人称为“朗朗如日月之入怀”。魏文帝黄初六年(225年),袭封昌陵乡侯。魏明帝时,历任散骑黄门侍郎、羽林监。少帝曹芳继位后,拜散骑常侍、中护军,保卫皇宫。后任征西将军,任内与曹爽策划骆谷之役,大失人心。高平陵政变后,被夺去兵权,改任大鸿胪、太常卿。嘉平六年(254年),中书令李丰与外戚张缉密谋杀死大将军司马师,改以夏侯玄执政。事泄被杀,夷灭三族,夏侯玄死时年仅四十六岁。著有文集三卷,如今已佚。政治上,提出了“审官择人”、“除重官”、“改服制”等制度,被太傅司马懿评价“皆大善”。博学多识,才华出众,精通玄学,成为“四聪”之一,与何晏等人开创了魏晋玄学的先河,是早期的玄学领袖人物。',
+ dengzhong:'邓忠(不详-264年),三国时期曹魏名将邓艾之子。景元五年(264年),钟会谋反事败,士兵哗变,钟会被杀,邓艾部将想追还邓艾父子,但卫瓘却派田续追邓艾,于绵竹西相遇,将邓艾和邓忠等人杀死。直至泰始九年(273年)才恢复名节。',
+ wangyan:'王衍(256年~311年),字夷甫,琅邪郡临沂县(今山东省临沂市)人。西晋末年重臣,玄学清谈领袖,曹魏幽州刺史王雄之孙、平北将军王乂之子、司徒王戎堂弟。王衍出身琅琊王氏。外表清明俊秀,风姿安详文雅,笃好老庄学说,颇有时名。步入仕途后,历任黄门侍郎、中领军、尚书令、尚书仆射等职。光熙元年(307年),升任司空。次年,又任司徒。王衍位高权重,却不思为国,为保全自己,还让弟弟王澄、族弟王敦分任荆州、青州刺史,遭时人鄙夷。王弥进攻洛阳时,王衍率军抵抗。其后转任太尉兼尚书令,又兼领太傅军司。永嘉五年(311年),东海王司马越去世,王衍奉其灵柩返回东海,途中为羯人石勒所俘获。王衍在与石勒交谈时,仍推脱责任,并劝其称帝,石勒大怒,将其与西晋旧臣一同活埋,时年五十六岁。王衍工书法,尤擅行书,《宣和书谱》有其作品《尊夫人帖》。',
+ caoxiancaohua:'请分别查询参考「曹宪」和「曹华」的部武将介绍。',
+ zhaoyǎn:'赵俨(171~245年),字伯然,颍川阳翟(今河南禹州市)。东汉末年颍川“四大名士”之一,三国时期魏国名臣。熟读经史,精明强干。建安二年,投靠大将军曹操之后,起家朗陵县令,历任司空府掾、司空主薄、都督护军、扶风太守等职。魏文帝曹丕继位后,历任魏国侍中、驸马都尉、河东太守、典农中郎将、度支尚书,封宜土亭侯。魏明帝曹睿时期,历任大司农、骠骑将军、大司空等职。正始六年,去世,时年七十五,谥号为穆。',
+ ruiji:'芮姬,芮玄之女,太子孙登妃,黄武五年卒。',
+ weizi:'卫兹(?-190年),字子许,(《三国演义》中其名为卫弘,当为误记),陈留襄邑(今河南睢县)人。曾举孝廉,先后被车骑将军何苗、司徒杨赐等召辟。中平六年(189年)十二月,曹操在陈留己吾募兵,而卫兹以家财资助曹操,使曹操顺利募得五千士兵。此后,卫兹与曹操共同讨伐董卓。初平元年(190年),卫兹在跟随曹操讨伐董卓途中,于荥阳汴水遭遇董卓军徐荣,力战终日,失利身亡。',
+ tengfanglan:'滕芳兰,生卒年不详,北海剧县(今山东省寿光市)人,太常滕胤的族女,滕牧的女儿,吴末帝孙皓的皇后。永安元年(258年),孙皓为乌程侯时被聘为妃。元兴元年(264年),孙皓登基后被立为皇后。孙吴灭亡后,随孙皓迁居洛阳。',
+ qinghegongzhu:'清河长公主,沛国谯县人,曹操长女(按其与曹操长子曹昂同出于刘夫人,而刘夫人又早死,故其年龄应长于曹丕等其他曹操诸子女,又按长公主亦有年最长之意,故应为曹操之长女)。母刘夫人,得到曹操喜爱。清河公主后来下嫁夏侯楙。曹操初欲嫁丁仪,曹丕劝其嫁与夏侯楙。后与小叔子设计欲谋害丈夫,未果。',
+ fanjiangzhangda:'范强,在明朝小说《三国演义》里叫做范疆。二人均为张飞手下部将。蜀汉章武元年,刘备伐吴,张飞率军从阆中前往江州,出发前,范强和张达杀死张飞,带着张飞的首级投奔了东吴。',
+ tianyu:'田豫(171年~252年),字国让,渔阳雍奴(今天津市武清区)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。后来田豫常年镇守曹魏北疆,从征代郡乌桓、斩骨进、破轲比能,多有功勋;也曾参与对孙吴的作战,在成山斩杀周贺,于新城击败孙权。官至太中大夫,封长乐亭侯。有一子田彭祖。',
+ wuyan:'吴国及西晋初年将领。初任通江县吏,后得到大司马陆抗的提拔重用,逐渐升至建平太守。',
+ fengfangnv:'冯方之女,司隶人,袁术妻妾。在史书中被记载为天姿国色的美人。钱大昭在《三国志辨疑》中认为冯方当为冯芳误字,冯方女实为是西园八校尉之一的冯芳的女儿。然而,在曹丕《典论》、《九州春秋》等书籍都有提及她,皆作冯方女字样,并无一书写作冯芳女或是明提是冯芳之女。最关键的一点是,冯芳是荆州西陵县人,她女儿不可能是司隶籍,冯芳也没担任过任何与司隶有关的官职。同时期名字为“○女”的并不少见,如施绩女儿施淑女,曹植女儿曹行女,夏侯令女等。',
+ zuofen:'左芬(约253年-300年4月23日),出土墓志作左棻,字兰芝,齐国临淄(今山东临淄)人,西晋诗人。少好学,善属文。为晋武帝贵人。今存诗、赋、颂、赞、诔等20余篇,大都为应诏而作,《离思赋》最著名。原有集,已失传。',
+ duxi:'杜袭(生卒年不详),字子绪,颍川郡定陵县(今河南省襄城县)人。三国时期魏国重臣,东汉末年颍川“四大名士”之一,济阴太守杜根的孙子。建安初年,投奔司空曹操,历任西鄂县令、议郎、丞相军咨祭酒、魏王侍中、丞相长史、驸马都尉。魏文帝时期,出任督军粮御史、尚书,累封武平亭侯。魏明帝时期,担任大将军曹真和司马懿的军师,抵御蜀国进攻,拜太中大夫,受封平阳乡侯。卒于任上,获赠少府,谥号为定。',
+ gaogan:'高干(?~206年),字元才,陈留郡圉县(今河南杞县圉镇)人。东汉末年并州割据将领,蜀郡太守高躬之子、大将军袁绍外甥。出身陈留高氏,才志弘邈,文武秀出。早年联合荀谌游说韩馥让出冀州牧。袁绍平定河北后,以为并州牧。官渡之战时,在西线配合作战。因曹操早有准备,没有实质进展。袁绍死后,袁谭、袁尚与曹操大战于黎阳郡时,联合郭援攻打平阳郡,为马腾为首关中将领所败,郭援为庞德所斩。袁尚败走中山郡后,出降于曹操,仍为并州刺史。建安十年,兴兵反曹,固守壶关,成功抵挡乐进进攻。得知曹操亲征后,留下别将守城,亲往匈奴呼厨泉求救,没有成功。引兵攻略河东郡,屡为钟繇、张既所败。建安十一年,投奔荆州刘表。途经上洛时,为上洛都尉捕斩之。',
+ huangchengyan:'黄承彦,生卒年不详,汉末三国时期沔阳名士,诸葛亮岳父,黄月英之父。南郡大士蔡讽的女婿,与襄阳名士上层社会圈子:庞统(凤雏)、庞德公、司马徽、徐庶等人交好。《襄阳记》:黄承彦者,高爽开列,为沔阳名士,谓诸葛孔明曰:“闻君择妇,身有丑女,黄头黑色,而才堪配。”孔明许,即载送之。时人以为笑乐,乡里为之谚曰:“莫作孔明择妇,正得阿承丑女。”',
+ panshu:'潘淑(?-252年),会稽句章(今浙江省宁波市)人,是吴大帝孙权的皇后,吴少帝孙亮的母亲。和孙权是中国历代帝后中年龄差距较大的一对。潘淑少时与姐姐俱没入织室,容媚有宠,拜为夫人,生有一子孙亮。赤乌十三年(250年),孙权立孙亮为皇太子,翌年(251年)立潘淑为皇后。神凤元年(252年)暴崩,合葬蒋陵。世称潘淑为江东绝色,有神女之称。',
+ zongyu:'宗预(?-264年),字德艳 ,荆州南阳郡安众县(今河南省南阳市)人。三国时期蜀汉官员、将领。曾随张飞入蜀助平益州,又受辟为丞相诸葛亮手下主簿,升任参军、右中郎将。诸葛亮逝世后,宗预受命出使孙吴,得到孙权的赞赏。迁后将军,出督永安,又升任征西大将军,并受封关内侯。公元258年(景耀元年),因病回成都,受任镇军大将军。蜀汉灭亡后,宗预随后主刘禅徙往洛阳,在中途病逝。宗预为人坦率耿直,多次出使孙吴并深得孙权的敬重,为吴、汉两国同盟的巩固作出了一定的贡献。',
+ mengda:'孟达(?-228),字子度,本字子敬,因刘备的叔父名叫刘子敬,为避讳而改字。扶风郡郿人,三国时期人物。本为刘璋属下,后降刘备。关羽围樊城、襄阳时因不发兵救关羽而触怒刘备,于是投奔曹魏。此后,劝降刘封,未果。在魏官至散骑常侍、建武将军,封平阳亭侯。此后又欲反曹魏而归蜀汉,事败而死。',
+ wolongfengchu:'沙比武将,懒得复制粘贴,自己去看诸葛亮和庞统的介绍吧。',
+ caoshuang:'曹爽(?-249年2月9日),字昭伯,沛国谯县(今安徽亳州市)人。三国时期魏国权臣,大司马曹真长子。曹爽体态肥胖,凭借宗室身份,出入宫廷,交好太子曹叡。魏明帝即位,起家员外散骑侍郎,累迁城门校尉、散骑常侍,转武卫将军。太和五年(231年),袭封邵陵侯。景初三年(239年),魏明帝曹叡病危,拜大将军、假黄钺,与司马懿并为托孤大臣。少帝曹芳即位,加侍中,改封武安侯。势倾四海,声震天下。任用私人,专权乱政,侵吞公产。伐蜀失败,虚耗国力。起居逾制,软禁郭太后。正始十年,太傅司马懿发动高平陵政变,掌握魏国大权。曹爽失去大将军职务,以谋反之罪处死,夷灭三族。',
+ zhangling:'张道陵(34年2月22日—156年),字辅汉,原名陵,道教正一道实际创立者,汉朝东汉时期丰邑(今江苏徐州丰县)人。太上老君降临蜀地,“授以三天正法,命为天师”,张道陵整合当时的:黄老派、方仙道、文始派等先秦修道团体,创立道教称正一盟威之道。后世尊称为“老祖天师”、“正一真人”、“三天扶教大法师”、高明上帝、张天师。著作《老子想尔注》,弟子有3000多人,设立24治,奠基天师道。张道陵、葛玄、许逊、萨守坚合称四大天师。张道陵创建道教的背景:当时在巴蜀一带,原有巴人信奉原始巫教,大规模的淫祀而害民。而这些祀奉鬼妖(学名为:妖邪)的法教巫师聚众敛财,无恶不作。张天师携王长、赵升二位弟子和黄帝九鼎丹经,来到北邙山修行,平定了那些祸害百姓的巫妖之教。川渝一带流传的张天师以太上老君剑印符箓大破鬼兵的故事就是以此为原型的。',
+ caiyang:'蔡阳(?-201年),又作蔡扬,东汉丞相曹操部下武将,汝南太守。于建安六年(201)奉曹操之命攻击与刘备联合的汝南贼龚都等人,兵败被刘备所杀。明代小说《三国演义》改编为“云长擂鼓斩蔡阳”。',
+ pujing:'湖北省当阳境内有一座山,名叫玉泉山。东汉建安末年,山上住着一个老和尚,法名普净,普净原来是沂水关镇国寺方丈,后因云游天下,来到此处,风这地方山明水秀,就于山中结草为庵,每天坐禅参道,身边只有一个小和尚,外出化一些斋饭,供养师父。在《三国演义》中,当关羽通过汜水关时,正是由于普净提醒,关羽才揭穿了卞喜的阴谋,并杀死了卞喜。关羽死后,其怨魂亦在普净的指点下醒悟,放下了心中的仇恨,专心致力于造福一方百姓。',
+ huban:'为《三国演义》所杜撰的人物,正史无记载,荥阳太守王植麾下从事、桓帝时议郎胡华之子。关羽过五关斩六将时其中一关就是王植所镇守,胡班奉命放火夜袭关公,因敬服公之气概,并得其父托公所带家书,班看毕,叹曰:“险些误杀忠良!”故将之放走。胡班到荆州来投降关公,公念其旧日相救之情,甚爱之;令随费诗入川,见汉中王受爵。费诗辞别关公,带了胡班,自回蜀中去了。',
+ chunyuqiong:'淳于琼(?-200年),字仲简,颍川(治今河南禹州)人。东汉时期官吏,于汉灵帝中平五年(188)被任命为西园八校尉之一的右校尉,与蹇硕、袁绍、鲍鸿、曹操、赵融、冯芳、夏牟同列。为袁绍大将,与张郃、高览等人齐名。在官渡之战时镇守乌巢,遭到曹操的偷袭而惨败,自己也被曹操处斩。',
+ lvkuanglvxiang:'吕旷(生卒年不详),与吕翔同是袁绍属下,袁绍去世后,为袁尚守东平,后来投降曹操,并被封为列侯。在《三国演义》中,在曹操准备往南准备攻击前,两人跟著大将曹仁和将军李典准备要攻击刘备。但吕旷被赵云刺下马身亡,而吕翔也死于张飞矛下,可以算是出师未捷身先死',
+ caobuxing:'曹不兴,亦名弗兴,三国时著名画家。孙吴吴兴(今浙江湖州)人,生卒年不详。他在黄武年间(222—229年)享有很大的声誉。被称为“佛画之祖”。与东晋顾恺之、南朝宋陆探微、南朝梁张僧繇并称“六朝四大家”。又与赵达的算术、严武的弈棋、皇象的草书等号称“吴中八绝”。曹不兴善画龙、虎、马及人物,有“落墨为蝇”等传奇故事,其佛画成就对后世影响很大,相传其所画龙头令谢赫叹服不已。画迹今已不存,据《贞观公私画史》载,作品有《青溪龙》、《赤盘龙》、《南海监牧进十种马图》、《夷事夷兽样》、《桃源图》等,惜早已散佚。但之后的著名画家卫协直接师承其法。',
+ gaolan:'高览,生卒年不详,一名高奂,本属袁绍部将,后官渡之战淳于琼被曹操击破,与张郃一同投降曹操,被封为偏将军,东莱侯。《三国演义》里,曾与许褚、徐晃大战不分胜负。201年刘备败走荆州时,高览奉命追杀,三合斩刘辟,而后被冲阵而来的赵云刺死。',
+ xunchen:'荀谌,字友若,荀彧之兄(一说荀彧之弟),荀绲之子,颍川人。曾任军阀袁绍的幕僚。帮助袁绍游说韩馥,夺取了冀州。',
+ sunshao:'孙邵(163年-225年),字长绪,青州北海国人(今山东潍坊市昌乐县西)。原为北海相孔融的功曹,被孔融称赞为可任朝廷要职的人才,后随刘繇到达江东,继而辅佐孙权。孙权称吴王后,孙邵成为吴国首任丞相,数年后病逝。由于孙邵和当时吴国史官的关系并不是很好,因此在史书中并没有详细的记载。',
+ yuantanyuanshang:'袁谭、袁尚分别是袁绍的长子和第三子。袁绍坐拥青州、冀州、幽州、并州,本是北方最强诸侯,却于官渡大败,惭恨而终。虽然袁绍生前偏爱小儿子袁尚,却并未在继承人上有明确表态,这也导致本应以嫡长子身份继承的袁谭因郭图、审配伪立遗令未能如愿。曹操击败袁绍后,进而渡过黄河追击袁家残余势力,袁谭告急,但袁尚仅给他少量兵力。曹操得郭嘉之计退兵坐观其变,恰使两人此前的种种矛盾彻底爆发,袁谭不敌便引狼入室,派辛毗作为使者向曹操求援,让袁尚不得不北逃投奔乌桓。但袁谭也在之后背叛曹操兵败被杀。没多久,乌桓也被平定,袁熙、袁尚二人投奔公孙康后被斩首送还曹操。',
+ xujing:'许靖(?—222年),字文休。汝南郡平舆县(今河南省平舆县)人。汉末至三国蜀汉时期重臣、名士、评论家。许靖因与从弟许邵俱以品评人物而闻名于世。后被刘翊推举为孝廉,任尚书郎。曾先后投奔孔伷、陈祎、许贡、王朗等人,于孙策攻王朗前与家属俱避难交州,受到交趾太守士燮礼待。其后受益州牧刘璋邀请,相继为巴郡、广汉、蜀郡太守。于刘备包围成都时欲越墙叛逃,为刘璋所获。刘备定蜀后欲将其弃用,在法正的建议下方以其为左将军长史。建安二十三年(218年),刘备称汉中王,任命许靖为汉中王傅。章武元年(221年),刘备称帝,任命许靖为司徒,位列三公。章武二年(222年),去世。有文集二卷。',
+ hejin:'何进(?~189年),字遂高,南阳郡宛县(今河南南阳市宛城区)人。东汉时期外戚大臣,灵思皇后之兄。初以妹妹有宠,拜为郎中,出任虎贲中郎将、颍川太守,迁侍中、将作大匠、河南尹。黄巾起义时,拜为大将军,总镇京师,发现并镇压马元义的密谋,封为慎侯。为张大威望,在京师讲武结营,置西园八校尉。汉灵帝驾崩后,粉碎了中常侍蹇硕拥立皇子刘协的图谋,听从袁绍之言,博征智谋之士,内借元舅之资,外据辅政之权,独揽朝中大权。中平六年(189),不纳陈琳和曹操劝谏,阴结军阀董卓,联合袁绍谋诛宦竖。事情败露后,为中常侍张让等人损害,其后代是魏晋高门士族南阳何氏。',
+ hansui:'韩遂(?-215年),字文约。凉州金城郡人。东汉末年军阀、将领,汉末群雄之一。原名韩约,后改名遂。韩遂最初闻名于西州,被羌胡叛军劫持并推举为首领,以诛宦官为名举兵造反,聚众十万,先后败皇甫嵩、张温、董卓、孙坚等名将,使得天下骚动。后受朝廷招安,拥兵割据一方长达三十余年。韩遂曾与马腾结为异姓兄弟,后二人关系破裂。袁绍、曹操相争之际,马腾、韩遂被钟繇说服,依附于曹操。马腾入京后,留其子马超统领部队。马超推举韩遂为都督起兵反叛曹操,为曹操所败,韩遂逃奔凉州,后又为夏侯渊所败,病死(一说被杀),享年七十余岁。',
+ niujin:'牛金(生卒年不详),初为曹仁部曲将,周瑜军数万人来攻,前锋数千人始至,曹仁登城望,乃募得三百人,遣牛金迎战。但对方兵力较多,牛金遂被围困。曹仁亲自杀入阵中救出牛金。司马懿使牛金轻骑饵诱蜀军,刚交战诸葛亮就退兵,追至祁山。蜀将马岱入寇,司马懿遣将军牛金击退,斩千余级。公孙渊反,司马懿帅牛金、胡遵等步骑四万发自洛阳,后平定辽东。牛金官至后将军。',
+ jianggan:"蒋干,字子翼,汉末三国时期的人物,九江(治今安徽寿县)人。历史上的蒋干是当时的名士、辩论家。而罗贯中在历史小说《三国演义》中则将蒋干刻画成了被周瑜所愚弄的小丑形象。",
- caoying: "曹婴是在电影《三国志之见龙卸甲》中登场的虚拟人物,由李美琪饰演。曹婴是曹操的孙女,弓马娴熟,文武双全,深得曹操的用兵之道及心术。于凤鸣山一战中担任魏军大都督阻止诸葛亮北伐并因罗平安的告密而全歼关兴、张苞、赵云率领的蜀军部队。",
- simahui: "司马徽(约145—208年),字德操,颍川阳翟(今河南禹州)人。东汉末年名士,精通道学、奇门、兵法、经学。有“水镜先生”之称。 司马徽为人清雅,学识广博,有知人之明,并向刘备推荐了诸葛亮、庞统等人,受到世人的敬重。",
- baosanniang: "鲍三娘是中国民间传说中的人物,事迹多见于《花关索传》。相传她是鲍家庄鲍员外的小女儿。后来与关索成亲,关羽自传授其武艺,因此也造就了鲍三娘的文武双全。荆州失守之后鲍三娘就跟随关索一同投奔蜀汉,并随诸葛亮征讨南蛮。平定了南蛮之后,夫妻二人就此一直替诸葛亮镇守着南中,他们也的确留下了许多脍炙人口的行侠仗义故事,在民间广为流传。",
+ caoying:"曹婴是在电影《三国志之见龙卸甲》中登场的虚拟人物,由李美琪饰演。曹婴是曹操的孙女,弓马娴熟,文武双全,深得曹操的用兵之道及心术。于凤鸣山一战中担任魏军大都督阻止诸葛亮北伐并因罗平安的告密而全歼关兴、张苞、赵云率领的蜀军部队。",
+ simahui:"司马徽(约145—208年),字德操,颍川阳翟(今河南禹州)人。东汉末年名士,精通道学、奇门、兵法、经学。有“水镜先生”之称。 司马徽为人清雅,学识广博,有知人之明,并向刘备推荐了诸葛亮、庞统等人,受到世人的敬重。",
+ baosanniang:"鲍三娘是中国民间传说中的人物,事迹多见于《花关索传》。相传她是鲍家庄鲍员外的小女儿。后来与关索成亲,关羽自传授其武艺,因此也造就了鲍三娘的文武双全。荆州失守之后鲍三娘就跟随关索一同投奔蜀汉,并随诸葛亮征讨南蛮。平定了南蛮之后,夫妻二人就此一直替诸葛亮镇守着南中,他们也的确留下了许多脍炙人口的行侠仗义故事,在民间广为流传。",
- pangdegong: "庞德公,字尚长,荆州襄阳人,东汉末年名士、隐士。 庞德公与当时徐庶、司马徽、诸葛亮、庞统等人交往密切。庞德公曾称诸葛亮为\"卧龙\",庞统为\"凤雏\",司马徽为\"水镜\",被誉为知人。对诸葛亮、庞统等人早年影响较大,并得到诸葛亮的敬重。庞德公最后隐居于鹿门山,采药而终。",
- zhaotongzhaoguang: "赵统,赵云长子,生卒年不详。常山真定(今为河北正定)人,陈寿在正史《三国志》中记载赵云去世后,赵统袭爵永昌亭侯,官至蜀汉虎贲中郎督,加行领军。赵广(?—263年),三国时期蜀汉牙门将,赵云的次子,赵统之弟。随姜维前往沓中,官拜牙门将。曹魏司马氏派五路大军伐蜀时,随大将军姜维与魏兵战于疆川口,姜维败绩还守剑阁,赵广于沓中战死。",
- majun: "马钧,字德衡,扶风(今陕西扶风)人,生活在汉朝末期,是中国古代科技史上最负盛名的机械发明家之一。马钧年幼时家境贫寒,自己又有口吃的毛病,所以不擅言谈却精于巧思,后来在魏国担任给事中的官职。马钧最突出的表现有还原指南车;改进当时操作笨重的织绫机;发明一种由低处向高地引水的龙骨水车;制作出一种轮转式发石机,能连续发射石块,远至数百步;把木制原动轮装于木偶下面,叫做“水转百戏”。此后,马钧还改制了诸葛连弩,对科学发展和技术进步做出了贡献。",
- simazhao: "司马昭(211年—265年9月6日),字子上(小说《三国演义》为子尚),河内温县(今属河南)人。三国时期曹魏权臣,西晋王朝的奠基人之一。为晋宣帝司马懿与宣穆皇后张春华次子、晋景帝司马师之弟、晋武帝司马炎之父。 司马昭早年随父抗击蜀汉,多有战功。累官洛阳典农中郎将,封新城乡侯。正元二年(255年),继兄司马师为大将军,专揽国政。甘露五年(260年),魏帝曹髦被弑杀,司马昭立曹奂为帝。景元四年(263年),分兵遣钟会、邓艾、诸葛绪三路灭亡蜀汉,受封晋公。次年,进爵晋王。 咸熙二年(265年),司马昭病逝,年五十四,葬于崇阳陵。数月后,其子司马炎代魏称帝,建立晋朝,追尊司马昭为文帝,庙号太祖。",
- wangyuanji: "王元姬(217年—268年4月20日),东海郯县(今山东郯城西北)人。三国时期曹魏经学家王朗之孙女、王肃之女,晋文帝司马昭妻子,晋武帝司马炎与齐王司马攸的生母。 王元姬幼时便通《诗经》、《论语》,嫁司马昭后竭尽妇道、谦虚谨慎。其人颇有远见,曾预言钟会谋反之事。泰始元年(265年),司马炎建立西晋,尊王元姬为皇太后,宫号曰崇化宫。王元姬身处太后之位,提倡节俭,身体力行,作为众妃子的表率。在其治理之下,后宫井井有条,众人和睦相处。 泰始四年(268年),王元姬崩逝,终年五十二岁。谥号文明皇后,与司马昭合葬于崇阳陵。",
+ pangdegong:"庞德公,字尚长,荆州襄阳人,东汉末年名士、隐士。 庞德公与当时徐庶、司马徽、诸葛亮、庞统等人交往密切。庞德公曾称诸葛亮为\"卧龙\",庞统为\"凤雏\",司马徽为\"水镜\",被誉为知人。对诸葛亮、庞统等人早年影响较大,并得到诸葛亮的敬重。庞德公最后隐居于鹿门山,采药而终。",
+ zhaotongzhaoguang:"赵统,赵云长子,生卒年不详。常山真定(今为河北正定)人,陈寿在正史《三国志》中记载赵云去世后,赵统袭爵永昌亭侯,官至蜀汉虎贲中郎督,加行领军。赵广(?—263年),三国时期蜀汉牙门将,赵云的次子,赵统之弟。随姜维前往沓中,官拜牙门将。曹魏司马氏派五路大军伐蜀时,随大将军姜维与魏兵战于疆川口,姜维败绩还守剑阁,赵广于沓中战死。",
+ majun:"马钧,字德衡,扶风(今陕西扶风)人,生活在汉朝末期,是中国古代科技史上最负盛名的机械发明家之一。马钧年幼时家境贫寒,自己又有口吃的毛病,所以不擅言谈却精于巧思,后来在魏国担任给事中的官职。马钧最突出的表现有还原指南车;改进当时操作笨重的织绫机;发明一种由低处向高地引水的龙骨水车;制作出一种轮转式发石机,能连续发射石块,远至数百步;把木制原动轮装于木偶下面,叫做“水转百戏”。此后,马钧还改制了诸葛连弩,对科学发展和技术进步做出了贡献。",
+ simazhao:"司马昭(211年—265年9月6日),字子上(小说《三国演义》为子尚),河内温县(今属河南)人。三国时期曹魏权臣,西晋王朝的奠基人之一。为晋宣帝司马懿与宣穆皇后张春华次子、晋景帝司马师之弟、晋武帝司马炎之父。 司马昭早年随父抗击蜀汉,多有战功。累官洛阳典农中郎将,封新城乡侯。正元二年(255年),继兄司马师为大将军,专揽国政。甘露五年(260年),魏帝曹髦被弑杀,司马昭立曹奂为帝。景元四年(263年),分兵遣钟会、邓艾、诸葛绪三路灭亡蜀汉,受封晋公。次年,进爵晋王。 咸熙二年(265年),司马昭病逝,年五十四,葬于崇阳陵。数月后,其子司马炎代魏称帝,建立晋朝,追尊司马昭为文帝,庙号太祖。",
+ wangyuanji:"王元姬(217年—268年4月20日),东海郯县(今山东郯城西北)人。三国时期曹魏经学家王朗之孙女、王肃之女,晋文帝司马昭妻子,晋武帝司马炎与齐王司马攸的生母。 王元姬幼时便通《诗经》、《论语》,嫁司马昭后竭尽妇道、谦虚谨慎。其人颇有远见,曾预言钟会谋反之事。泰始元年(265年),司马炎建立西晋,尊王元姬为皇太后,宫号曰崇化宫。王元姬身处太后之位,提倡节俭,身体力行,作为众妃子的表率。在其治理之下,后宫井井有条,众人和睦相处。 泰始四年(268年),王元姬崩逝,终年五十二岁。谥号文明皇后,与司马昭合葬于崇阳陵。",
- liuye: '刘晔(?-234年),字子扬,淮南成德人,是光武帝刘秀之子阜陵王刘延的后代,三国时期魏国著名的战略家。刘晔年少知名,人称有佐世之才,是曹操手下举足轻重的谋士,他屡献妙计,对天下形势的发展往往一语中的。刘晔历仕数朝,是曹魏的三朝元老。',
- luzhi: '鲁芝(190年—273年),字世英。扶风郡郿县(今陕西眉县)人。魏晋时期名臣。官至光禄大夫,位特进,封阴平侯。泰始九年(273年)卒,时年八十四。谥号“贞”。',
- xizhicai: '戏志才(生卒年不详),或志才为字,名不详(一说名忠),东汉颍川郡(今河南禹州)人。经张邈推荐,成为曹操手下谋士。为人多谋略,曹操十分器重,不幸早卒。三国演义中并无此人,三国志中只有寥寥数语。由荀彧推荐给曹操,被称为有“负俗之讥”。死后,荀彧又举荐了郭嘉。
陈寿《三国志》记载:太祖与荀彧书曰:自志才亡后,莫可与计事者。汝、颍固多奇士,谁可以继之?彧荐嘉。',
- sunqian: '孙乾(?—约215年),字公祐。北海郡(治今山东昌乐西)人。东汉末年刘备的幕僚。最初被大儒郑玄推荐于州里。刘备领徐州,以孙乾为从事。自徐州跟随刘备,多次作为刘备的使臣。刘备定益州后,拜孙乾为秉忠将军,其待遇仅次于麋竺,与简雍相同。不久后便病逝。',
- miheng: '祢衡(173年-198年),字正平,平原郡(今山东德州临邑德平镇)人。个性恃才傲物.和孔融交好。孔融著有《荐祢衡表》,向曹操推荐祢衡,但是祢衡称病不肯去,曹操封他为鼓手,想要羞辱祢衡,却反而被祢衡裸身击鼓而羞辱。后来祢衡骂曹操,曹操就把他遣送给刘表,祢衡对刘表也很轻慢,刘表又把他送去给江夏太守黄祖,最后因为和黄祖言语冲突而被杀,时年二十六岁。黄祖对杀害祢衡一事感到十分后悔,便将其加以厚葬。',
- quyi: '麴义(又作曲义、鞠义),生卒年不详,是东汉末年军阀袁绍部下的将领,能征善战,屡建战功,早年在凉州,精通羌人战法,率领着袁绍的精锐部队。后来由于自恃功高而骄纵不轨,被袁绍所杀。',
- taoqian: '陶谦(132年-194年),字恭祖。丹阳郡(治今安徽宣城)人。汉末群雄之一。陶谦最初为诸生,在州郡任职,被举茂才,历任舒、卢二县令、幽州刺史、议郎,性格刚直,有大志。后随左车骑将军皇甫嵩对抗北宫伯玉,任扬武校尉,之后又随张温征韩遂、边章。中平五年(188年),徐州黄巾起,陶谦被朝廷任为徐州刺史,击破徐州黄巾,并推行屯田,恢复生产。尔后听从王朗、赵昱建议遣使进京朝贡,获拜安东将军、徐州牧,封溧阳侯。晚年因战事上为曹操大败,徐州大半几乎遭兵祸所害,以致过度忧劳而逝,终年六十三岁。',
- wangyun: '王允(137~192年),字子师,太原郡祁县(今山西祁县)人。东汉末年时期大臣。出身太原王氏,世代官宦。举孝廉出身,司徒高第征为侍御史。出任豫州刺史,勤政爱民。斗争中常侍张让失败后,去官隐居。中平六年,大将军何进掌权之后,辟为从事中郎,迁河南尹。董卓拥立汉献帝即位后,代替杨彪,拜太仆、尚书令、司徒,密谋刺死董卓,联合吕布共同执政,日益骄傲自满。初平三年(192年),董卓余党李傕、郭汜、樊稠等攻破长安。王允兵败处死,时年五十六岁。',
- bianfuren: '武宣皇后卞氏(159年12月30日-230年7月9日),琅邪开阳(今山东临沂)人,魏武帝曹操的正妻(继室),魏文帝曹丕、任城威王曹彰、陈思王曹植、萧怀王曹熊的母亲。原本是倡家,即汉代专门从事音乐歌舞的乐人家庭,后来与曹操成婚,建安初年,原配丁夫人被废,卞夫人成为曹操的正妻。曹丕继位后尊其为皇太后,曹叡继位后尊其为太皇太后。卞后在太和四年去世,与魏武帝曹操合葬高陵。',
- shamoke: '沙摩柯(?-222年),东汉末三国时期五溪蛮首领。汉章武元年(221年)初,为报关羽被东吴杀害之仇,刘备亲自领兵攻孙权,以金锦爵赏诱沙摩柯助战。章武二年(222年),吴大都督陆逊以火攻破刘备,率诸军齐击,汉军四十多个营寨被攻破,沙摩柯在大乱中匹马奔逃,被乱军杀死。',
- lvfan: '吕范(?-228年),字子衡。汝南郡细阳县(今安徽太和)人。汉末至三国时期吴国重臣。吕范年轻为汝南县吏,后避难寿春,结识孙策。此后随孙策、孙权征伐四方,对稳固孙氏在江东的统治做出了杰出的贡献,孙权将其比之于东汉开国元勋吴汉。吴国建立后,吕范累官至前将军、假节、扬州牧,封南昌侯。黄武七年(228年),吕范被拜为大司马,未得授官,便已病逝。孙权悲痛不已,遣使赠其大司马印绶。孙权还都建业后,以太牢礼祭祀吕范。',
- liqueguosi: "请分别参考武将【李傕】和【郭汜】各自的介绍。",
- maojie: "毛玠(?—216年),字孝先,陈留平丘(今河南封丘)人。东汉末年大臣。年少时为县吏,以清廉公正著称。因战乱而打算到荆州避乱,但中途知道刘表政令不严明,因而改往鲁阳。后来投靠曹操,提出“奉天子以令不臣,脩耕植,畜军资”的战略规划,得到曹操的欣赏。
毛玠与崔琰主持选举,所举用的都是清廉正直之士。而毛玠为人廉洁,激起天下廉洁之风,一改朝中奢华风气。曹操大为赞赏,曹丕也亲自去拜访他。
曹操获封魏公后,毛玠改任尚书仆射,再典选举。又密谏曹操应该立嫡长子曹丕为魏国太子。崔琰被杀后,毛玠十分不快。后来有人诬告毛玠,曹操大怒,将毛玠收于狱中。及后在桓阶、和洽营救下,只被免职,不久逝世于家中。曹操在他死后赐他棺材和钱帛。",
+ liuye:'刘晔(?-234年),字子扬,淮南成德人,是光武帝刘秀之子阜陵王刘延的后代,三国时期魏国著名的战略家。刘晔年少知名,人称有佐世之才,是曹操手下举足轻重的谋士,他屡献妙计,对天下形势的发展往往一语中的。刘晔历仕数朝,是曹魏的三朝元老。',
+ luzhi:'鲁芝(190年—273年),字世英。扶风郡郿县(今陕西眉县)人。魏晋时期名臣。官至光禄大夫,位特进,封阴平侯。泰始九年(273年)卒,时年八十四。谥号“贞”。',
+ xizhicai:'戏志才(生卒年不详),或志才为字,名不详(一说名忠),东汉颍川郡(今河南禹州)人。经张邈推荐,成为曹操手下谋士。为人多谋略,曹操十分器重,不幸早卒。三国演义中并无此人,三国志中只有寥寥数语。由荀彧推荐给曹操,被称为有“负俗之讥”。死后,荀彧又举荐了郭嘉。
陈寿《三国志》记载:太祖与荀彧书曰:自志才亡后,莫可与计事者。汝、颍固多奇士,谁可以继之?彧荐嘉。',
+ sunqian:'孙乾(?—约215年),字公祐。北海郡(治今山东昌乐西)人。东汉末年刘备的幕僚。最初被大儒郑玄推荐于州里。刘备领徐州,以孙乾为从事。自徐州跟随刘备,多次作为刘备的使臣。刘备定益州后,拜孙乾为秉忠将军,其待遇仅次于麋竺,与简雍相同。不久后便病逝。',
+ miheng:'祢衡(173年-198年),字正平,平原郡(今山东德州临邑德平镇)人。个性恃才傲物.和孔融交好。孔融著有《荐祢衡表》,向曹操推荐祢衡,但是祢衡称病不肯去,曹操封他为鼓手,想要羞辱祢衡,却反而被祢衡裸身击鼓而羞辱。后来祢衡骂曹操,曹操就把他遣送给刘表,祢衡对刘表也很轻慢,刘表又把他送去给江夏太守黄祖,最后因为和黄祖言语冲突而被杀,时年二十六岁。黄祖对杀害祢衡一事感到十分后悔,便将其加以厚葬。',
+ quyi:'麴义(又作曲义、鞠义),生卒年不详,是东汉末年军阀袁绍部下的将领,能征善战,屡建战功,早年在凉州,精通羌人战法,率领着袁绍的精锐部队。后来由于自恃功高而骄纵不轨,被袁绍所杀。',
+ taoqian:'陶谦(132年-194年),字恭祖。丹阳郡(治今安徽宣城)人。汉末群雄之一。陶谦最初为诸生,在州郡任职,被举茂才,历任舒、卢二县令、幽州刺史、议郎,性格刚直,有大志。后随左车骑将军皇甫嵩对抗北宫伯玉,任扬武校尉,之后又随张温征韩遂、边章。中平五年(188年),徐州黄巾起,陶谦被朝廷任为徐州刺史,击破徐州黄巾,并推行屯田,恢复生产。尔后听从王朗、赵昱建议遣使进京朝贡,获拜安东将军、徐州牧,封溧阳侯。晚年因战事上为曹操大败,徐州大半几乎遭兵祸所害,以致过度忧劳而逝,终年六十三岁。',
+ wangyun:'王允(137~192年),字子师,太原郡祁县(今山西祁县)人。东汉末年时期大臣。出身太原王氏,世代官宦。举孝廉出身,司徒高第征为侍御史。出任豫州刺史,勤政爱民。斗争中常侍张让失败后,去官隐居。中平六年,大将军何进掌权之后,辟为从事中郎,迁河南尹。董卓拥立汉献帝即位后,代替杨彪,拜太仆、尚书令、司徒,密谋刺死董卓,联合吕布共同执政,日益骄傲自满。初平三年(192年),董卓余党李傕、郭汜、樊稠等攻破长安。王允兵败处死,时年五十六岁。',
+ bianfuren:'武宣皇后卞氏(159年12月30日-230年7月9日),琅邪开阳(今山东临沂)人,魏武帝曹操的正妻(继室),魏文帝曹丕、任城威王曹彰、陈思王曹植、萧怀王曹熊的母亲。原本是倡家,即汉代专门从事音乐歌舞的乐人家庭,后来与曹操成婚,建安初年,原配丁夫人被废,卞夫人成为曹操的正妻。曹丕继位后尊其为皇太后,曹叡继位后尊其为太皇太后。卞后在太和四年去世,与魏武帝曹操合葬高陵。',
+ shamoke:'沙摩柯(?-222年),东汉末三国时期五溪蛮首领。汉章武元年(221年)初,为报关羽被东吴杀害之仇,刘备亲自领兵攻孙权,以金锦爵赏诱沙摩柯助战。章武二年(222年),吴大都督陆逊以火攻破刘备,率诸军齐击,汉军四十多个营寨被攻破,沙摩柯在大乱中匹马奔逃,被乱军杀死。',
+ lvfan:'吕范(?-228年),字子衡。汝南郡细阳县(今安徽太和)人。汉末至三国时期吴国重臣。吕范年轻为汝南县吏,后避难寿春,结识孙策。此后随孙策、孙权征伐四方,对稳固孙氏在江东的统治做出了杰出的贡献,孙权将其比之于东汉开国元勋吴汉。吴国建立后,吕范累官至前将军、假节、扬州牧,封南昌侯。黄武七年(228年),吕范被拜为大司马,未得授官,便已病逝。孙权悲痛不已,遣使赠其大司马印绶。孙权还都建业后,以太牢礼祭祀吕范。',
+ liqueguosi:"请分别参考武将【李傕】和【郭汜】各自的介绍。",
+ maojie:"毛玠(?—216年),字孝先,陈留平丘(今河南封丘)人。东汉末年大臣。年少时为县吏,以清廉公正著称。因战乱而打算到荆州避乱,但中途知道刘表政令不严明,因而改往鲁阳。后来投靠曹操,提出“奉天子以令不臣,脩耕植,畜军资”的战略规划,得到曹操的欣赏。
毛玠与崔琰主持选举,所举用的都是清廉正直之士。而毛玠为人廉洁,激起天下廉洁之风,一改朝中奢华风气。曹操大为赞赏,曹丕也亲自去拜访他。
曹操获封魏公后,毛玠改任尚书仆射,再典选举。又密谏曹操应该立嫡长子曹丕为魏国太子。崔琰被杀后,毛玠十分不快。后来有人诬告毛玠,曹操大怒,将毛玠收于狱中。及后在桓阶、和洽营救下,只被免职,不久逝世于家中。曹操在他死后赐他棺材和钱帛。",
- huangfusong: '字义真。安定郡朝那县(今宁夏彭阳)人。于黄巾起义时,以中郎将身份讨伐黄巾,用火攻大破张梁、张宝。后接替董卓进攻张梁,连胜七阵。掘张角墓,拜左车骑将军、冀州牧,因拒绝贿赂宦官而被免职。 董卓死,王允命其与吕布等共至郿坞抄籍董卓家产、人口,皇甫嵩将坞中所藏良家子女,尽行释放。',
- zangba: '其父臧戒,有二子臧艾与臧舜。年少时曾召集数人将获罪的父亲救出,此后四处流亡。后来成为陶谦麾下的骑都尉,负责募兵抵抗黄巾军。与孙观、尹礼等人拥兵驻屯于开阳,自成一股独立势力,后跟随吕布。吕布战败后,投降了曹操。后与袁绍、孙权等的战役里战功赫赫,官至镇东将军。',
- zhangren: '刘璋的属下,以忠勇著称。刘备入蜀时,张任曾劝刘璋提防刘备,但刘璋没有听从。魏延舞剑想趁机除掉刘璋时,张任出面对舞,解救刘璋。后在刘备进攻时于落凤坡射死了庞统。',
- jiling: '东汉末年袁术帐下将领,勇猛非常,曾奉命率军攻打小沛的刘备,在吕布辕门射戟的调停下撤兵。',
- zoushi: '军阀张济之妻,张绣之婶。张绣降曹后,邹氏遂被曹操霸占。贾诩献计趁机诛杀曹操,险些得手。曹操在损失爱将典韦、侄子曹安民和长子曹昂后方才逃出生天。',
- ganfuren: '刘备起兵后,于沛城娶甘氏为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月,刘备病死于白帝城,追谥甘夫人为“昭烈皇后”。',
- jiangfei: '请分别查阅【蒋琬】和【费袆】各自的介绍。',
- mifuren: '刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。',
- chendong: '陈武,东吴将领,孙策攻打刘繇,陈武前来相助,孙策非常喜爱陈武,拜为校尉,使作先锋。陈武以十数骑兵力杀敌五十余人。后于赤壁等战役屡立功勋。董袭献上严虎的人头来降孙策。赤壁之战,董袭受周瑜命,分兵去汉阳,合肥会战时接应太史慈,逍遥津支援孙权。濡须口之战时,董袭在船上督战,船覆董袭坚守殉职。',
- jiangqing: '擅长弓术。与周泰原为活跃于长江一带的江贼,孙策脱离袁术下江东自立门户时,和周泰一起率众投靠。 孙策攻刘繇,并引出城中麾下的陈横、薛礼、张英三名将领,陈横后被蒋钦一箭射杀,后与韩当等将乘舟过江,乱箭射杀敌军。曾在赤壁之战与周泰,还有擅使长枪的韩当率领水军在三江口踏江破敌。',
- kongrong: '字文举,鲁国人,东汉文学家,“建安七子”之首。献帝即位后任北军中侯、虎贲中郎将、北海相,时称孔北海后因触怒曹操,为曹操所杀。能诗善文。',
- mateng: '字寿成,扶风茂陵人,东汉末年征西将军,割据西凉一带的军阀,伏波将军马援的后代,官至卫尉,封爵槐里乡侯。因其子马超谋反,而被杀,夷灭三族。',
- tianfeng: '字元皓。东汉末年大军阀袁绍部下重要谋士。为人刚直不阿,曾多次向袁绍进言而不被采纳。后因谏阻袁绍征伐曹操而被袁绍下令监禁,并于官渡之战后,被袁绍杀害。',
- caochun: '字子和,沛国谯(今安徽亳州)人。东汉末年曹操麾下将领,曹仁之弟。曹纯是曹操部下精锐部队“虎豹骑”的统领者之一,因在平定北方的战役中颇有功绩,被加封为高陵亭侯。死后谥曰威侯。曹纯擅战,甚得人心,为人重纲纪,不失理智,好学问,敬爱学士,闻名天下。',
- hanba: '中国古代神话传说中引起旱灾的怪物。《诗·大雅·云汉》:“旱魃为虐,如惔如焚。”',
- cuiyan: '字季珪,清河东武城(今河北省清河县)人。东汉末年名士,司空崔林的从兄,曹操帐下谋士。崔琰相貌俊美,很有威望,曹操对他也很敬畏。建安二十一年(216年),崔琰在给杨训的书信中写道“时乎时乎,会当有变时”,曹操认为此句有不逊之意,因而将崔琰下狱,不久崔琰即被曹操赐死。',
- lifeng: '南阳(治今河南南阳)人,三国时期蜀汉大臣李严之子。230年,李严迁为骠骑将军,率军前往汉中,诸葛亮上表推举李丰为江州都督督军,以代替李严管理后方事务。李严去世后,李丰在蜀汉官至朱提太守。',
- sunru: '孙茹,孙坚之妹,其名载于《江浙通志》中。儿子徐琨亦为孙吴早期名将,当初母子二人随军跟从孙策渡长江时,因为暂时没足够的船,孙策感到苦恼打算暂时驻军江边。孙茹夫人献计以芦苇为筏,孙策大喜。吴军遂以神不知鬼不觉的速度过长江击破刘繇部将张英,立下平江东第一功。',
- lingcao: '东汉末年将领,吴郡余杭(今浙江余杭)人,凌统之父。早年跟随孙策转战江东。孙权统军后,凌操随其征伐黄祖,被甘宁射杀。《吴书》载:甘宁以善射,将兵在后,射杀校尉凌操',
- zhugeguo: '诸葛果,为《历代神仙通鉴》中诸葛亮女儿的名字,《历代神仙通鉴》记录从上古到明代的神仙历史,因此诸葛果不见于任何史书。成都西南有朝真观,即乘烟观。相传,诸葛果在这里修行后成仙升天。',
- zhuling: '朱灵(生卒年不详),字文博,冀州清河国人,三国时期曹魏名将。官至后将军,封为高唐侯,谥号威侯。初为袁绍部将,后归顺曹操,随曹操征伐四方,屡建战功。',
- re_yuanshu: '字公路,汝南汝阳人,袁绍之弟。初为虎贲中郎将。董卓进京后以袁术为后将军,袁术因畏祸而出奔南阳。初平元年与袁绍、曹操等同时起兵,共讨董卓。后与袁绍对立,被袁绍、曹操击败,率馀众奔九江,割据扬州。建安二年称帝,建号仲氏。',
- fuwan: '伏完(?-209),琅邪东武(今属山东)人,东汉末大臣,汉献帝伏皇后之父。历官辅国将军、中散大夫、屯骑校尉。',
- liuxie: '字伯和,又字合。汉族,祖籍沛县,生于洛阳。汉灵帝第三子,被董卓迎立为帝。董卓被王允和吕布诛杀后,董卓部将李傕等攻入长安,再次挟持了他,后来逃出长安。公元196年,曹操控制了刘协,并迁都许昌,“挟天子以令诸侯”。公元220年,曹操病死,刘协被曹丕控制,随后被迫禅让于曹丕。',
- yuanshu: '字公路,汝南汝阳人,袁绍之弟。初为虎贲中郎将。董卓进京后以袁术为后将军,袁术因畏祸而出奔南阳。初平元年与袁绍、曹操等同时起兵,共讨董卓。后与袁绍对立,被袁绍、曹操击败,率馀众奔九江,割据扬州。建安二年称帝,建号仲氏。',
- gongsunzan: '字伯珪,汉族,号“白马义从”。辽西令支人。东汉末年献帝年间占据幽州一带的军阀,汉末群雄之一。出身贵族,因母地位卑贱,只当了郡中小吏。他貌美,声音洪亮,机智善辩。后随卢植于缑氏山中读书,粗通经传。',
- caohong: '字子廉,沛国谯(今安徽亳县)人,曹操从弟,曾献马并救护曹操。后多随军征伐,平兖州、征刘表、讨祝臂。曹丕即位时封曹洪为骠骑将军。曹叡即位,拜曹洪为后将军,更封乐城侯,后复拜为骠骑将军。曹洪逝世,追谥曰恭侯。',
- guanyinping: '河东解县(今山西运城)人,美髯公关羽之女。因在关羽的四个子女中排行第三,故又被称作“关三小姐”、“关氏三姐”或“关羽三小姐”。传说她是赵云的弟子、并随同诸葛亮平定南蛮。',
- xiahouba: '夏侯渊次子。本为曹魏武将,后因司马懿诛曹爽一族,夏侯霸身为曹氏宗室而心怀不安,遂投降蜀汉。后随蜀将姜维北伐,官至车骑将军。',
- daxiaoqiao: '大乔,庐江皖县人,为乔公长女,孙策之妻,容貌国色流离。小乔为大乔之妹,周瑜之妻,资貌绝伦。两人合称“二乔”。',
- yuejin: '字文谦,魏“五子良将”之一。容貌短小,以胆烈跟从曹操,南征北讨,战功无数。从击袁绍于官渡,奋勇力战,斩袁绍部将淳于琼。又从击袁绍子谭、尚于黎阳,斩其大将严敬。从平荆州,留屯襄阳,进击关羽、苏非等人,击退其众,南郡诸郡的山谷蛮夷都前往乐进处投降。后来从曹操征孙权,假进节。曹操回师后,留乐进与张辽、李典屯于合肥。又以乐进数有军功,迁右将军。建安二十三年逝世,谥曰威侯。',
- caoang: '字子修,曹操的长子,由于性情谦和且聪慧所以深得曹操喜爱。曹操征讨张绣时,羞辱张绣之婶邹氏,被张绣突然袭击。曹昂为保护曹操撤退,与典韦一起战死在宛城。',
- zhugejin: '字子瑜,吴国大臣,诸葛亮之兄,诸葛恪之父。经鲁肃推荐,为东吴效力。胸怀宽广,温厚诚信,得到孙权的深深信赖,努力缓和蜀汉与东吴的关系。建安二十五年(220年)吕蒙病逝,诸葛瑾代吕蒙领南郡太守,驻守公安。孙权称帝后,诸葛瑾官至大将军,领豫州牧。',
- zhangxingcai: '蜀名将张飞与夏侯氏所生之女,刘禅的妻子,史上称为“敬哀皇后”。',
- zumao: '字大荣,吴郡富春人,使用双刀。孙坚在汜水关被华雄击败,祖茂为保护主公而主动提出与孙坚交换头盔,孙坚因此得脱。祖茂将孙坚的赤帻挂在柱子上,准备以此引诱华雄,趁机偷袭,却反被华雄所杀。',
- dingfeng: '吴国将领。年少时以骁勇为小将,经常奋勇杀敌,屡立功勋,此后又于东兴之战中“雪中奋短兵”,大破侵犯东吴的魏军。吴景帝孙休在位时,丁奉设计除掉了东吴的权臣孙綝,被拜为大将军,后为右大司马、左军师。',
- panfeng: '冀州牧韩馥部下的上将。当十八路诸侯讨伐董卓之时,他奉韩馥之命前往汜水关前挑战董卓部下大将华雄,不敌被斩。',
- maliang: '字季常,因眉毛中有白毛,人称白眉马良,马谡的兄长。马良在兄弟五人中名声最佳,因此有“马氏五常,白眉最良”的说法。',
- zhugedan: '字公休,曹魏后期的重要将领,诸葛亮的族弟。曾与司马师一同平定毌丘俭、文钦的叛乱。之后因与被诛的夏侯玄、邓飏交厚,且见到王淩、毌丘俭等人的覆灭而心不自安,于甘露二年起兵,并得到东吴的支援,但于次年被镇压,被大将军司马胡奋所斩。',
- hetaihou: '大将军何进的妹妹,汉灵帝刘宏第二任皇后,汉少帝刘辩的生母。何氏出身于屠户家庭,后选入掖庭,得到汉灵帝临幸,生下皇子刘辩,并受封贵人。光和三年(180年),立为皇后。中平六年(189年),汉灵帝去世,刘辩继位,尊何氏为皇太后。董卓进京,废黜刘辩,不久毒杀刘辩及何氏。',
- sunluyu: '又名小虎,孙权与步练师之女。吴后期,孙鲁班诬陷孙鲁育参与谋反,于是孙峻杀害了孙鲁育。',
- wenpin: '本为刘表大将,刘表死后,跟随刘琮投降曹操。后曹操令其镇守江夏,多次阻止了关羽和孙权的进攻,为曹操倚为屏障的大将之一。',
- zhanglu: '汉宁太守,继父祖之后传播五斗米教。刘璋杀张鲁之母,二人因此结仇,多次交战。刘备攻益州时,刘璋向张鲁求援。张鲁派马超前往,但马超投降刘备。张鲁后见曹操自封魏王,想要自立为汉宁王,为谋士阎圃劝免。后曹操讨汉中,张鲁败,众人劝其烧粮仓,张鲁认为这是国家之物,未听从,为曹操所称赞。后投降曹操,任镇南将军。',
- mayunlu: '马腾之女,马超之妹,赵云之妻。父亲令其自幼习武,枪术非凡,寻常男子也是难以匹敌。',
- tadun: '东汉末年辽西乌桓(亦称乌丸)的首领,乌桓大人丘力居的从子,总摄三王部。曾出兵协助袁绍,击破公孙瓒。此后受袁绍假传朝廷诏命,与三王难楼、苏仆延、乌延等人同受单于称号及印绶。后难楼、苏仆延率其部众奉立楼班为单于,蹋顿于是退位为王。袁绍死后,收到被曹操击败的袁尚的求助,纠集逃亡至乌桓的幽州、冀州官吏百姓,企图夺回河北。东汉建安十二年,曹操亲征乌桓。八月,乌桓、袁氏部队于柳城白狼山为曹军所败,蹋顿在此战中被曹操的先锋张辽所斩杀。 ',
- yanbaihu: '吴郡乌程县人,原名“严虎”,别号“白虎”,东汉末年盘据吴郡一带山贼出身的地方豪帅。献帝初拥兵万人自固。孙策受袁术使渡江,攻破白虎等。白虎奔余杭,投靠许昭。建安二年,再度被孙策击败,至此不知亡佚何处。',
- simalang: '字伯达,“司马八达”之一。曹操任司空后,司马朗被辟为司空属官,又历任成皋令、堂阳长、元城令、丞相主簿、兖州刺史等职,所在皆有政绩,深受百姓爱戴。后司马朗与夏侯惇、臧霸等征讨吴国,到达居巢。军队中流行瘟疫,司马朗亲自去视察,派送医药,因此染病去世。',
- wangji: '字伯舆,东莱曲城人。三国时期魏国将领。王基文武兼备,才高于世,德溥于时,深得司马懿、司马师、司马昭的器重,尤其在南征毋丘俭,文钦之乱,东征诸葛诞之叛大规模军事活动中,王基与司马师、司马昭结下了深厚的军友情谊。魏景元二年王基去世,追赠司空,谥号为景侯。',
- buzhi: '吴重臣,最初避难江东,于孙权统事后,被召为主记。后游历吴地,又任海盐县长,还任东曹掾,出领鄱阳太守。建安十五年,转交州刺史、立武中郎将,率军接管往交州,追拜使持节、征南中郎将。次年,以平定交州功,加平戎将军,封广信侯。后迁右将军、左护军,改封临湘侯。孙权称帝后,拜骠骑将军,领冀州牧,后因冀州分与蜀汉而解牧职。又都督西陵。赤乌九年,代陆逊为丞相。',
- litong: '字文达,小字万亿。江夏平春(今河南信阳)人,汝南太守。早年以游侠闻名于江汝,在率众补充曹操兵源有功拜为阳安都尉,其间不因私而忘公,不因其妻子的求请而过问执法者。后来在曹操讨伐马超时出阵挑战,死于马超枪下。',
- mizhu: '原为徐州富商,后被徐州牧陶谦辟为别驾从事。陶谦病死后,奉其遗命迎接刘备。与其弟麋芳拒绝曹操的任命而跟随刘备,在刘备最潦倒之时给予刘备很大的帮助,使他重新振作。214年(建安十九年),刘备入主益州后,拜麋竺为安汉将军,地位在诸葛亮之上,为刘备手下众臣之最。吕蒙袭取荆州,麋芳举城投降,导致关羽兵败身亡,麋竺面缚请罪,刘备劝慰麋竺,对他待遇如初。',
- dongbai: '东汉末年县君,陇西临洮(今甘肃省岷县)人,董卓之孙女。董卓当权时,遍封其宗族,其中孙女董白尚未及笄,被封为渭阳君。',
- zhaoxiang: '赵云与马云騄之女,赵统赵广之妹,关平之妻。',
- heqi: '早年在平定山越的战争中立有大功,又讨平叛乱无数,身经百战,所向披靡,深受孙权器重。后来在与魏国的多次边境争斗中也屡立战功,官至后将军,并领徐州牧。',
- dongyun: '大汉重臣,掌军中郎将董和之子。东汉末年,其父董和事刘璋为益州太守,刘备立太子时,允被选为洗马,后为黄门侍郎,延熙六年(公元243年)加辅国将军,延熙七年(公元244年)以侍中守尚书令,任大将军费祎的副手。',
- mazhong: '本名狐笃,字德信,巴西阆中人,初次出场时随丞相诸葛亮南征孟获,诸葛亮遣马忠与赵云两路夹攻,大败蛮将阿会喃。孟获派弟孟优赴汉军处假投降,欲内应外合,诸葛亮将计就计,埋伏擒获孟获和诸洞酋长,马忠亦于此战立下战功。后诸葛亮北伐时亦数次出阵,立下汗马功劳。',
- kanze: '孙权谋士,在孙权广纳贤才之时与严畯等来到江东,甚为孙权礼遇。第一个识破周瑜打黄盖是苦肉计,后欣然向曹操献诈降书,被曹操识破后面不改色,哈哈大笑,一番妙言让曹操相信了诈降书,是苦肉计中的关键人物。后劝孙权不要设局请关羽。在刘备御驾亲征东吴时,向孙权举荐陆逊为都督,间接上挽救了东吴的命运。',
- lingju: '相传为吕布与貂蝉的女儿,被汉献帝掳走并训练为死士,被秘密送入宫中接近曹操,成为其“忘年红颜知己”。外表是柔弱的女子,实际上身怀致命的杀人绝技,等待时机给予曹操致命一击。',
- yangxiu: '字德祖,今陕西华阴人,是东汉末年的文学家。杨修学问渊博,极聪慧,任丞相府主簿。史载,“是时,军国多事,修总知外内,事皆称意”。',
- chenlin: '陈琳(?-217年),字孔璋,广陵射阳(今江苏宝应)人。东汉末年著名文学家,“建安七子”之一。',
- zhugeke: '字元逊,琅邪阳都(今山东沂南)人。三国时期吴臣,蜀丞相诸葛亮之侄,吴大将军诸葛瑾长子,从小就以神童著称,深受孙权赏识。',
- zhangbao: '东汉末年黄巾起义的首领之一,张角之弟,张梁之兄。中平元年(184)随兄张角起义,号称“地公将军”。',
- chengyu: '字仲德,本名程立,因梦中於泰山捧日,更名程昱。荀彧投曹操时向其举荐程昱。他参与了攻打吕布、袁绍、刘备、孙权的大部份战事,一直出谋献策,表现出众。',
- sunhao: '孙权之孙,孙和之子,东吴的末代君主。在位初期虽施行过明政,但不久即沉溺酒色,专于杀戮,变得昏庸暴虐,嗜用挖眼、剥皮等酷刑。280年,吴国被西晋所灭,孙皓投降西晋,被封为归命侯。',
- wutugu: '南蛮乌戈国主,身长丈二(约合现在2.77米),不食五谷,以生蛇恶兽为饭。身有鳞甲,刀箭不能侵。兀突骨乘骑巨象,头戴日月狼须帽,身披金珠缨络,两肋下露出生鳞甲,眼目中微有光芒。',
- shixie: '割据交州(今越南)一带的军阀,年少时师事刘陶,经逐渐升迁任交趾太守。后被朝廷加职绥南中郎将,迁安远将军,封龙度亭侯。在步骘接管交州时积极配合,归附孙权,被孙权加为左将军;此后又因诱降益州豪族雍闿而迁任卫将军,进封龙编侯。任交趾太守四十年。',
- guansuo: '关羽的三子。自荆州失陷后,逃难在鲍家庄养病,伤势痊愈之后入蜀,逢丞相诸葛亮南征,拜之为前部先锋,一同南征。',
- wanglang: '字景兴,汉末三国经学家,曹魏初期重臣。曾任会稽太守举兵抵抗孙策,后为曹操所征,被拜为谏议大夫等职。曹丕建立魏国后任命为司空。小说《三国演义》中他在阵前与诸葛亮饶舌比拼,最终被诸葛亮言词所驳倒,一时气愤坠马身亡。',
- zhangliang: '东汉末年黄巾起义首领之一,张角的三弟。中平元年(184)随兄起义,号称“人公将军”。遭到朝廷所派左中郎将皇甫嵩进攻时,他率军在广宗(今河北威县)进行反击。后因警戒疏忽,遭到汉军夜袭,兵败身亡。',
+ huangfusong:'字义真。安定郡朝那县(今宁夏彭阳)人。于黄巾起义时,以中郎将身份讨伐黄巾,用火攻大破张梁、张宝。后接替董卓进攻张梁,连胜七阵。掘张角墓,拜左车骑将军、冀州牧,因拒绝贿赂宦官而被免职。 董卓死,王允命其与吕布等共至郿坞抄籍董卓家产、人口,皇甫嵩将坞中所藏良家子女,尽行释放。',
+ zangba:'其父臧戒,有二子臧艾与臧舜。年少时曾召集数人将获罪的父亲救出,此后四处流亡。后来成为陶谦麾下的骑都尉,负责募兵抵抗黄巾军。与孙观、尹礼等人拥兵驻屯于开阳,自成一股独立势力,后跟随吕布。吕布战败后,投降了曹操。后与袁绍、孙权等的战役里战功赫赫,官至镇东将军。',
+ zhangren:'刘璋的属下,以忠勇著称。刘备入蜀时,张任曾劝刘璋提防刘备,但刘璋没有听从。魏延舞剑想趁机除掉刘璋时,张任出面对舞,解救刘璋。后在刘备进攻时于落凤坡射死了庞统。',
+ jiling:'东汉末年袁术帐下将领,勇猛非常,曾奉命率军攻打小沛的刘备,在吕布辕门射戟的调停下撤兵。',
+ zoushi:'军阀张济之妻,张绣之婶。张绣降曹后,邹氏遂被曹操霸占。贾诩献计趁机诛杀曹操,险些得手。曹操在损失爱将典韦、侄子曹安民和长子曹昂后方才逃出生天。',
+ ganfuren:'刘备起兵后,于沛城娶甘氏为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月,刘备病死于白帝城,追谥甘夫人为“昭烈皇后”。',
+ jiangfei:'请分别查阅【蒋琬】和【费袆】各自的介绍。',
+ mifuren:'刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。',
+ chendong:'陈武,东吴将领,孙策攻打刘繇,陈武前来相助,孙策非常喜爱陈武,拜为校尉,使作先锋。陈武以十数骑兵力杀敌五十余人。后于赤壁等战役屡立功勋。董袭献上严虎的人头来降孙策。赤壁之战,董袭受周瑜命,分兵去汉阳,合肥会战时接应太史慈,逍遥津支援孙权。濡须口之战时,董袭在船上督战,船覆董袭坚守殉职。',
+ jiangqing:'擅长弓术。与周泰原为活跃于长江一带的江贼,孙策脱离袁术下江东自立门户时,和周泰一起率众投靠。 孙策攻刘繇,并引出城中麾下的陈横、薛礼、张英三名将领,陈横后被蒋钦一箭射杀,后与韩当等将乘舟过江,乱箭射杀敌军。曾在赤壁之战与周泰,还有擅使长枪的韩当率领水军在三江口踏江破敌。',
+ kongrong:'字文举,鲁国人,东汉文学家,“建安七子”之首。献帝即位后任北军中侯、虎贲中郎将、北海相,时称孔北海后因触怒曹操,为曹操所杀。能诗善文。',
+ mateng:'字寿成,扶风茂陵人,东汉末年征西将军,割据西凉一带的军阀,伏波将军马援的后代,官至卫尉,封爵槐里乡侯。因其子马超谋反,而被杀,夷灭三族。',
+ tianfeng:'字元皓。东汉末年大军阀袁绍部下重要谋士。为人刚直不阿,曾多次向袁绍进言而不被采纳。后因谏阻袁绍征伐曹操而被袁绍下令监禁,并于官渡之战后,被袁绍杀害。',
+ caochun:'字子和,沛国谯(今安徽亳州)人。东汉末年曹操麾下将领,曹仁之弟。曹纯是曹操部下精锐部队“虎豹骑”的统领者之一,因在平定北方的战役中颇有功绩,被加封为高陵亭侯。死后谥曰威侯。曹纯擅战,甚得人心,为人重纲纪,不失理智,好学问,敬爱学士,闻名天下。',
+ hanba:'中国古代神话传说中引起旱灾的怪物。《诗·大雅·云汉》:“旱魃为虐,如惔如焚。”',
+ cuiyan:'字季珪,清河东武城(今河北省清河县)人。东汉末年名士,司空崔林的从兄,曹操帐下谋士。崔琰相貌俊美,很有威望,曹操对他也很敬畏。建安二十一年(216年),崔琰在给杨训的书信中写道“时乎时乎,会当有变时”,曹操认为此句有不逊之意,因而将崔琰下狱,不久崔琰即被曹操赐死。',
+ lifeng:'南阳(治今河南南阳)人,三国时期蜀汉大臣李严之子。230年,李严迁为骠骑将军,率军前往汉中,诸葛亮上表推举李丰为江州都督督军,以代替李严管理后方事务。李严去世后,李丰在蜀汉官至朱提太守。',
+ sunru:'孙茹,孙坚之妹,其名载于《江浙通志》中。儿子徐琨亦为孙吴早期名将,当初母子二人随军跟从孙策渡长江时,因为暂时没足够的船,孙策感到苦恼打算暂时驻军江边。孙茹夫人献计以芦苇为筏,孙策大喜。吴军遂以神不知鬼不觉的速度过长江击破刘繇部将张英,立下平江东第一功。',
+ lingcao:'东汉末年将领,吴郡余杭(今浙江余杭)人,凌统之父。早年跟随孙策转战江东。孙权统军后,凌操随其征伐黄祖,被甘宁射杀。《吴书》载:甘宁以善射,将兵在后,射杀校尉凌操',
+ zhugeguo:'诸葛果,为《历代神仙通鉴》中诸葛亮女儿的名字,《历代神仙通鉴》记录从上古到明代的神仙历史,因此诸葛果不见于任何史书。成都西南有朝真观,即乘烟观。相传,诸葛果在这里修行后成仙升天。',
+ zhuling:'朱灵(生卒年不详),字文博,冀州清河国人,三国时期曹魏名将。官至后将军,封为高唐侯,谥号威侯。初为袁绍部将,后归顺曹操,随曹操征伐四方,屡建战功。',
+ re_yuanshu:'字公路,汝南汝阳人,袁绍之弟。初为虎贲中郎将。董卓进京后以袁术为后将军,袁术因畏祸而出奔南阳。初平元年与袁绍、曹操等同时起兵,共讨董卓。后与袁绍对立,被袁绍、曹操击败,率馀众奔九江,割据扬州。建安二年称帝,建号仲氏。',
+ fuwan:'伏完(?-209),琅邪东武(今属山东)人,东汉末大臣,汉献帝伏皇后之父。历官辅国将军、中散大夫、屯骑校尉。',
+ liuxie:'字伯和,又字合。汉族,祖籍沛县,生于洛阳。汉灵帝第三子,被董卓迎立为帝。董卓被王允和吕布诛杀后,董卓部将李傕等攻入长安,再次挟持了他,后来逃出长安。公元196年,曹操控制了刘协,并迁都许昌,“挟天子以令诸侯”。公元220年,曹操病死,刘协被曹丕控制,随后被迫禅让于曹丕。',
+ yuanshu:'字公路,汝南汝阳人,袁绍之弟。初为虎贲中郎将。董卓进京后以袁术为后将军,袁术因畏祸而出奔南阳。初平元年与袁绍、曹操等同时起兵,共讨董卓。后与袁绍对立,被袁绍、曹操击败,率馀众奔九江,割据扬州。建安二年称帝,建号仲氏。',
+ gongsunzan:'字伯珪,汉族,号“白马义从”。辽西令支人。东汉末年献帝年间占据幽州一带的军阀,汉末群雄之一。出身贵族,因母地位卑贱,只当了郡中小吏。他貌美,声音洪亮,机智善辩。后随卢植于缑氏山中读书,粗通经传。',
+ caohong:'字子廉,沛国谯(今安徽亳县)人,曹操从弟,曾献马并救护曹操。后多随军征伐,平兖州、征刘表、讨祝臂。曹丕即位时封曹洪为骠骑将军。曹叡即位,拜曹洪为后将军,更封乐城侯,后复拜为骠骑将军。曹洪逝世,追谥曰恭侯。',
+ guanyinping:'河东解县(今山西运城)人,美髯公关羽之女。因在关羽的四个子女中排行第三,故又被称作“关三小姐”、“关氏三姐”或“关羽三小姐”。传说她是赵云的弟子、并随同诸葛亮平定南蛮。',
+ xiahouba:'夏侯渊次子。本为曹魏武将,后因司马懿诛曹爽一族,夏侯霸身为曹氏宗室而心怀不安,遂投降蜀汉。后随蜀将姜维北伐,官至车骑将军。',
+ daxiaoqiao:'大乔,庐江皖县人,为乔公长女,孙策之妻,容貌国色流离。小乔为大乔之妹,周瑜之妻,资貌绝伦。两人合称“二乔”。',
+ yuejin:'字文谦,魏“五子良将”之一。容貌短小,以胆烈跟从曹操,南征北讨,战功无数。从击袁绍于官渡,奋勇力战,斩袁绍部将淳于琼。又从击袁绍子谭、尚于黎阳,斩其大将严敬。从平荆州,留屯襄阳,进击关羽、苏非等人,击退其众,南郡诸郡的山谷蛮夷都前往乐进处投降。后来从曹操征孙权,假进节。曹操回师后,留乐进与张辽、李典屯于合肥。又以乐进数有军功,迁右将军。建安二十三年逝世,谥曰威侯。',
+ caoang:'字子修,曹操的长子,由于性情谦和且聪慧所以深得曹操喜爱。曹操征讨张绣时,羞辱张绣之婶邹氏,被张绣突然袭击。曹昂为保护曹操撤退,与典韦一起战死在宛城。',
+ zhugejin:'字子瑜,吴国大臣,诸葛亮之兄,诸葛恪之父。经鲁肃推荐,为东吴效力。胸怀宽广,温厚诚信,得到孙权的深深信赖,努力缓和蜀汉与东吴的关系。建安二十五年(220年)吕蒙病逝,诸葛瑾代吕蒙领南郡太守,驻守公安。孙权称帝后,诸葛瑾官至大将军,领豫州牧。',
+ zhangxingcai:'蜀名将张飞与夏侯氏所生之女,刘禅的妻子,史上称为“敬哀皇后”。',
+ zumao:'字大荣,吴郡富春人,使用双刀。孙坚在汜水关被华雄击败,祖茂为保护主公而主动提出与孙坚交换头盔,孙坚因此得脱。祖茂将孙坚的赤帻挂在柱子上,准备以此引诱华雄,趁机偷袭,却反被华雄所杀。',
+ dingfeng:'吴国将领。年少时以骁勇为小将,经常奋勇杀敌,屡立功勋,此后又于东兴之战中“雪中奋短兵”,大破侵犯东吴的魏军。吴景帝孙休在位时,丁奉设计除掉了东吴的权臣孙綝,被拜为大将军,后为右大司马、左军师。',
+ panfeng:'冀州牧韩馥部下的上将。当十八路诸侯讨伐董卓之时,他奉韩馥之命前往汜水关前挑战董卓部下大将华雄,不敌被斩。',
+ maliang:'字季常,因眉毛中有白毛,人称白眉马良,马谡的兄长。马良在兄弟五人中名声最佳,因此有“马氏五常,白眉最良”的说法。',
+ zhugedan:'字公休,曹魏后期的重要将领,诸葛亮的族弟。曾与司马师一同平定毌丘俭、文钦的叛乱。之后因与被诛的夏侯玄、邓飏交厚,且见到王淩、毌丘俭等人的覆灭而心不自安,于甘露二年起兵,并得到东吴的支援,但于次年被镇压,被大将军司马胡奋所斩。',
+ hetaihou:'大将军何进的妹妹,汉灵帝刘宏第二任皇后,汉少帝刘辩的生母。何氏出身于屠户家庭,后选入掖庭,得到汉灵帝临幸,生下皇子刘辩,并受封贵人。光和三年(180年),立为皇后。中平六年(189年),汉灵帝去世,刘辩继位,尊何氏为皇太后。董卓进京,废黜刘辩,不久毒杀刘辩及何氏。',
+ sunluyu:'又名小虎,孙权与步练师之女。吴后期,孙鲁班诬陷孙鲁育参与谋反,于是孙峻杀害了孙鲁育。',
+ wenpin:'本为刘表大将,刘表死后,跟随刘琮投降曹操。后曹操令其镇守江夏,多次阻止了关羽和孙权的进攻,为曹操倚为屏障的大将之一。',
+ zhanglu:'汉宁太守,继父祖之后传播五斗米教。刘璋杀张鲁之母,二人因此结仇,多次交战。刘备攻益州时,刘璋向张鲁求援。张鲁派马超前往,但马超投降刘备。张鲁后见曹操自封魏王,想要自立为汉宁王,为谋士阎圃劝免。后曹操讨汉中,张鲁败,众人劝其烧粮仓,张鲁认为这是国家之物,未听从,为曹操所称赞。后投降曹操,任镇南将军。',
+ mayunlu:'马腾之女,马超之妹,赵云之妻。父亲令其自幼习武,枪术非凡,寻常男子也是难以匹敌。',
+ tadun:'东汉末年辽西乌桓(亦称乌丸)的首领,乌桓大人丘力居的从子,总摄三王部。曾出兵协助袁绍,击破公孙瓒。此后受袁绍假传朝廷诏命,与三王难楼、苏仆延、乌延等人同受单于称号及印绶。后难楼、苏仆延率其部众奉立楼班为单于,蹋顿于是退位为王。袁绍死后,收到被曹操击败的袁尚的求助,纠集逃亡至乌桓的幽州、冀州官吏百姓,企图夺回河北。东汉建安十二年,曹操亲征乌桓。八月,乌桓、袁氏部队于柳城白狼山为曹军所败,蹋顿在此战中被曹操的先锋张辽所斩杀。 ',
+ yanbaihu:'吴郡乌程县人,原名“严虎”,别号“白虎”,东汉末年盘据吴郡一带山贼出身的地方豪帅。献帝初拥兵万人自固。孙策受袁术使渡江,攻破白虎等。白虎奔余杭,投靠许昭。建安二年,再度被孙策击败,至此不知亡佚何处。',
+ simalang:'字伯达,“司马八达”之一。曹操任司空后,司马朗被辟为司空属官,又历任成皋令、堂阳长、元城令、丞相主簿、兖州刺史等职,所在皆有政绩,深受百姓爱戴。后司马朗与夏侯惇、臧霸等征讨吴国,到达居巢。军队中流行瘟疫,司马朗亲自去视察,派送医药,因此染病去世。',
+ wangji:'字伯舆,东莱曲城人。三国时期魏国将领。王基文武兼备,才高于世,德溥于时,深得司马懿、司马师、司马昭的器重,尤其在南征毋丘俭,文钦之乱,东征诸葛诞之叛大规模军事活动中,王基与司马师、司马昭结下了深厚的军友情谊。魏景元二年王基去世,追赠司空,谥号为景侯。',
+ buzhi:'吴重臣,最初避难江东,于孙权统事后,被召为主记。后游历吴地,又任海盐县长,还任东曹掾,出领鄱阳太守。建安十五年,转交州刺史、立武中郎将,率军接管往交州,追拜使持节、征南中郎将。次年,以平定交州功,加平戎将军,封广信侯。后迁右将军、左护军,改封临湘侯。孙权称帝后,拜骠骑将军,领冀州牧,后因冀州分与蜀汉而解牧职。又都督西陵。赤乌九年,代陆逊为丞相。',
+ litong:'字文达,小字万亿。江夏平春(今河南信阳)人,汝南太守。早年以游侠闻名于江汝,在率众补充曹操兵源有功拜为阳安都尉,其间不因私而忘公,不因其妻子的求请而过问执法者。后来在曹操讨伐马超时出阵挑战,死于马超枪下。',
+ mizhu:'原为徐州富商,后被徐州牧陶谦辟为别驾从事。陶谦病死后,奉其遗命迎接刘备。与其弟麋芳拒绝曹操的任命而跟随刘备,在刘备最潦倒之时给予刘备很大的帮助,使他重新振作。214年(建安十九年),刘备入主益州后,拜麋竺为安汉将军,地位在诸葛亮之上,为刘备手下众臣之最。吕蒙袭取荆州,麋芳举城投降,导致关羽兵败身亡,麋竺面缚请罪,刘备劝慰麋竺,对他待遇如初。',
+ dongbai:'东汉末年县君,陇西临洮(今甘肃省岷县)人,董卓之孙女。董卓当权时,遍封其宗族,其中孙女董白尚未及笄,被封为渭阳君。',
+ zhaoxiang:'赵云与马云騄之女,赵统赵广之妹,关平之妻。',
+ heqi:'早年在平定山越的战争中立有大功,又讨平叛乱无数,身经百战,所向披靡,深受孙权器重。后来在与魏国的多次边境争斗中也屡立战功,官至后将军,并领徐州牧。',
+ dongyun:'大汉重臣,掌军中郎将董和之子。东汉末年,其父董和事刘璋为益州太守,刘备立太子时,允被选为洗马,后为黄门侍郎,延熙六年(公元243年)加辅国将军,延熙七年(公元244年)以侍中守尚书令,任大将军费祎的副手。',
+ mazhong:'本名狐笃,字德信,巴西阆中人,初次出场时随丞相诸葛亮南征孟获,诸葛亮遣马忠与赵云两路夹攻,大败蛮将阿会喃。孟获派弟孟优赴汉军处假投降,欲内应外合,诸葛亮将计就计,埋伏擒获孟获和诸洞酋长,马忠亦于此战立下战功。后诸葛亮北伐时亦数次出阵,立下汗马功劳。',
+ kanze:'孙权谋士,在孙权广纳贤才之时与严畯等来到江东,甚为孙权礼遇。第一个识破周瑜打黄盖是苦肉计,后欣然向曹操献诈降书,被曹操识破后面不改色,哈哈大笑,一番妙言让曹操相信了诈降书,是苦肉计中的关键人物。后劝孙权不要设局请关羽。在刘备御驾亲征东吴时,向孙权举荐陆逊为都督,间接上挽救了东吴的命运。',
+ lingju:'相传为吕布与貂蝉的女儿,被汉献帝掳走并训练为死士,被秘密送入宫中接近曹操,成为其“忘年红颜知己”。外表是柔弱的女子,实际上身怀致命的杀人绝技,等待时机给予曹操致命一击。',
+ yangxiu:'字德祖,今陕西华阴人,是东汉末年的文学家。杨修学问渊博,极聪慧,任丞相府主簿。史载,“是时,军国多事,修总知外内,事皆称意”。',
+ chenlin:'陈琳(?-217年),字孔璋,广陵射阳(今江苏宝应)人。东汉末年著名文学家,“建安七子”之一。',
+ zhugeke:'字元逊,琅邪阳都(今山东沂南)人。三国时期吴臣,蜀丞相诸葛亮之侄,吴大将军诸葛瑾长子,从小就以神童著称,深受孙权赏识。',
+ zhangbao:'东汉末年黄巾起义的首领之一,张角之弟,张梁之兄。中平元年(184)随兄张角起义,号称“地公将军”。',
+ chengyu:'字仲德,本名程立,因梦中於泰山捧日,更名程昱。荀彧投曹操时向其举荐程昱。他参与了攻打吕布、袁绍、刘备、孙权的大部份战事,一直出谋献策,表现出众。',
+ sunhao:'孙权之孙,孙和之子,东吴的末代君主。在位初期虽施行过明政,但不久即沉溺酒色,专于杀戮,变得昏庸暴虐,嗜用挖眼、剥皮等酷刑。280年,吴国被西晋所灭,孙皓投降西晋,被封为归命侯。',
+ wutugu:'南蛮乌戈国主,身长丈二(约合现在2.77米),不食五谷,以生蛇恶兽为饭。身有鳞甲,刀箭不能侵。兀突骨乘骑巨象,头戴日月狼须帽,身披金珠缨络,两肋下露出生鳞甲,眼目中微有光芒。',
+ shixie:'割据交州(今越南)一带的军阀,年少时师事刘陶,经逐渐升迁任交趾太守。后被朝廷加职绥南中郎将,迁安远将军,封龙度亭侯。在步骘接管交州时积极配合,归附孙权,被孙权加为左将军;此后又因诱降益州豪族雍闿而迁任卫将军,进封龙编侯。任交趾太守四十年。',
+ guansuo:'关羽的三子。自荆州失陷后,逃难在鲍家庄养病,伤势痊愈之后入蜀,逢丞相诸葛亮南征,拜之为前部先锋,一同南征。',
+ wanglang:'字景兴,汉末三国经学家,曹魏初期重臣。曾任会稽太守举兵抵抗孙策,后为曹操所征,被拜为谏议大夫等职。曹丕建立魏国后任命为司空。小说《三国演义》中他在阵前与诸葛亮饶舌比拼,最终被诸葛亮言词所驳倒,一时气愤坠马身亡。',
+ zhangliang:'东汉末年黄巾起义首领之一,张角的三弟。中平元年(184)随兄起义,号称“人公将军”。遭到朝廷所派左中郎将皇甫嵩进攻时,他率军在广宗(今河北威县)进行反击。后因警戒疏忽,遭到汉军夜袭,兵败身亡。',
},
- characterTitle: {},
- perfectPair: {
- yuejin: ['re_lidian'],
- zhugejin: ['zhugeke', 'sunquan'],
- guanyinping: ['guanyu'],
- zhangxingcai: ['liushan'],
- fuwan: ['fuhuanghou'],
- sunshangxiang: ['liubei'],
- caoang: ['caocao'],
- zhangbao: ['zhangliang', 'zhangjiao'],
- zhangliang: ['zhangjiao'],
- maliang: ['masu'],
- lingcao: ['lingtong'],
- lingju: ['diaochan', 'lvbu'],
- jiangqing: ['zhoutai'],
- dingfeng: ['xusheng', 'zhugeke'],
- caohong: ['caoren'],
- daxiaoqiao: ['zhouyu', 'sunce'],
- cuiyan: ['caocao'],
- guansuo: ['guanyu'],
- mateng: ['machao', 'madai', 'mayunlu'],
- chengpu: ['zhouyu'],
- hanba: ['swd_muyun'],
- dongbai: ['dongzhuo'],
- cuimao: ['caopi'],
- simazhao: ['wangyuanji'],
+ characterTitle:{},
+ perfectPair:{
+ yuejin:['re_lidian'],
+ zhugejin:['zhugeke','sunquan'],
+ guanyinping:['guanyu'],
+ zhangxingcai:['liushan'],
+ fuwan:['fuhuanghou'],
+ sunshangxiang:['liubei'],
+ caoang:['caocao'],
+ zhangbao:['zhangliang','zhangjiao'],
+ zhangliang:['zhangjiao'],
+ maliang:['masu'],
+ lingcao:['lingtong'],
+ lingju:['diaochan','lvbu'],
+ jiangqing:['zhoutai'],
+ dingfeng:['xusheng','zhugeke'],
+ caohong:['caoren'],
+ daxiaoqiao:['zhouyu','sunce'],
+ cuiyan:['caocao'],
+ guansuo:['guanyu'],
+ mateng:['machao','madai','mayunlu'],
+ chengpu:['zhouyu'],
+ hanba:['swd_muyun'],
+ dongbai:['dongzhuo'],
+ cuimao:['caopi'],
+ simazhao:['wangyuanji'],
},
- card: {
+ card:{
//蒲元衍生
- sanlve: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip5",
- ai: {
- basic: {
- equipValue: 5,
+ sanlve:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip5",
+ ai:{
+ basic:{
+ equipValue:5,
},
},
- skills: ["sanlve_skill"],
- fullskin: true,
+ skills:["sanlve_skill"],
+ fullskin:true,
},
- zhaogujing: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip5",
- ai: {
- basic: {
- equipValue: 6.5,
+ zhaogujing:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip5",
+ ai:{
+ basic:{
+ equipValue:6.5,
},
},
- skills: ["zhaogujing_skill"],
- fullskin: true,
+ skills:["zhaogujing_skill"],
+ fullskin:true,
},
- shufazijinguan: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip5",
- modeimage: 'boss',
- ai: {
- basic: {
- equipValue: 8,
+ shufazijinguan:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip5",
+ modeimage:'boss',
+ ai:{
+ basic:{
+ equipValue:8,
},
},
- skills: ["shufazijinguan_skill"],
- fullskin: true,
+ skills:["shufazijinguan_skill"],
+ fullskin:true,
},
- xuwangzhimian: {
- derivation: 'ol_puyuan',
- type: 'equip',
- fullskin: true,
- subtype: 'equip5',
- modeimage: 'boss',
- skills: ['xuwangzhimian'],
- ai: {
- equipValue: 7,
+ xuwangzhimian:{
+ derivation:'ol_puyuan',
+ type:'equip',
+ fullskin:true,
+ subtype:'equip5',
+ modeimage:'boss',
+ skills:['xuwangzhimian'],
+ ai:{
+ equipValue:7,
}
},
- hongmianbaihuapao: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip2",
- modeimage: 'boss',
- ai: {
- basic: {
- equipValue: 4,
+ hongmianbaihuapao:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip2",
+ modeimage:'boss',
+ ai:{
+ basic:{
+ equipValue:4,
},
},
- skills: ["hongmianbaihuapao_skill"],
- fullskin: true,
+ skills:["hongmianbaihuapao_skill"],
+ fullskin:true,
},
- guofengyupao: {
- derivation: 'ol_puyuan',
- type: 'equip',
- fullskin: true,
- modeimage: 'boss',
- subtype: 'equip2',
- skills: ['guofengyupao'],
- ai: {
- equipValue: 7
+ guofengyupao:{
+ derivation:'ol_puyuan',
+ type:'equip',
+ fullskin:true,
+ modeimage:'boss',
+ subtype:'equip2',
+ skills:['guofengyupao'],
+ ai:{
+ equipValue:7
}
},
- qimenbagua: {
- derivation: 'ol_puyuan',
- type: 'equip',
- fullskin: true,
- modeimage: 'boss',
- subtype: 'equip2',
- skills: ['qimenbagua'],
- ai: {
- equipValue: 7.5
+ qimenbagua:{
+ derivation:'ol_puyuan',
+ type:'equip',
+ fullskin:true,
+ modeimage:'boss',
+ subtype:'equip2',
+ skills:['qimenbagua'],
+ ai:{
+ equipValue:7.5
}
},
- linglongshimandai: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip2",
- modeimage: 'boss',
- ai: {
- basic: {
- equipValue: 5,
+ linglongshimandai:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip2",
+ modeimage:'boss',
+ ai:{
+ basic:{
+ equipValue:5,
},
},
- skills: ["linglongshimandai_skill"],
- fullskin: true,
+ skills:["linglongshimandai_skill"],
+ fullskin:true,
},
- chixueqingfeng: {
- derivation: 'ol_puyuan',
- type: 'equip',
- fullskin: true,
- modeimage: 'boss',
- subtype: 'equip1',
- distance: { attackFrom: -1 },
- skills: ['chixueqingfeng'],
- ai: {
- equipValue: 6.7
+ chixueqingfeng:{
+ derivation:'ol_puyuan',
+ type:'equip',
+ fullskin:true,
+ modeimage:'boss',
+ subtype:'equip1',
+ distance:{attackFrom:-1},
+ skills:['chixueqingfeng'],
+ ai:{
+ equipValue:6.7
}
},
- guilongzhanyuedao: {
- derivation: 'ol_puyuan',
- type: 'equip',
- fullskin: true,
- modeimage: 'boss',
- subtype: 'equip1',
- distance: { attackFrom: -2 },
- skills: ['guilongzhanyuedao'],
- nomod: true,
- nopower: true,
- unique: true,
- ai: {
- equipValue: 4
+ guilongzhanyuedao:{
+ derivation:'ol_puyuan',
+ type:'equip',
+ fullskin:true,
+ modeimage:'boss',
+ subtype:'equip1',
+ distance:{attackFrom:-2},
+ skills:['guilongzhanyuedao'],
+ nomod:true,
+ nopower:true,
+ unique:true,
+ ai:{
+ equipValue:4
}
},
- wushuangfangtianji: {
- derivation: 'ol_puyuan',
- type: "equip",
- modeimage: 'boss',
- subtype: "equip1",
- distance: {
- attackFrom: -3,
+ wushuangfangtianji:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ modeimage:'boss',
+ subtype:"equip1",
+ distance:{
+ attackFrom:-3,
},
- ai: {
- basic: {
- equipValue: 3,
+ ai:{
+ basic:{
+ equipValue:3,
},
},
- skills: ["wushuangfangtianji_skill"],
- fullskin: true,
+ skills:["wushuangfangtianji_skill"],
+ fullskin:true,
},
- bintieshuangji: {
- derivation: 'ol_puyuan',
- type: "equip",
- subtype: "equip1",
- distance: {
- attackFrom: -2,
+ bintieshuangji:{
+ derivation:'ol_puyuan',
+ type:"equip",
+ subtype:"equip1",
+ distance:{
+ attackFrom:-2,
},
- ai: {
- basic: {
- equipValue: 4.5,
+ ai:{
+ basic:{
+ equipValue:4.5,
},
},
- skills: ["bintieshuangji_skill"],
- fullskin: true,
+ skills:["bintieshuangji_skill"],
+ fullskin:true,
},
//王允
- wy_meirenji: {
- fullskin: true,
- vanish: true,
- derivation: 'wangyun',
- type: 'trick',
- enable: true,
- filterTarget: function (card, player, target) {
- return target.countCards('h') && target != player && target.hasSex('male');
+ wy_meirenji:{
+ fullskin:true,
+ vanish:true,
+ derivation:'wangyun',
+ type:'trick',
+ enable:true,
+ filterTarget:function(card,player,target){
+ return target.countCards('h')&&target!=player&&target.hasSex('male');
},
- content: function () {
+ content:function(){
'step 0'
- event.list = game.filterPlayer(function (current) {
- return current != player && current != target && current.hasSex('female');
+ event.list=game.filterPlayer(function(current){
+ return current!=player&¤t!=target&¤t.hasSex('female');
}).sortBySeat();
'step 1'
- if (target.countCards('h') && event.list.length) {
- event.current = event.list.shift();
- event.current.gainPlayerCard(target, true, 'h');
- target.line2([event.current, player]);
+ if(target.countCards('h')&&event.list.length){
+ event.current=event.list.shift();
+ event.current.gainPlayerCard(target,true,'h');
+ target.line2([event.current,player]);
}
- else {
+ else{
event.goto(4);
}
'step 2'
- event.current.chooseCard('h', true, '将一张手牌交给' + get.translation(player));
+ event.current.chooseCard('h',true,'将一张手牌交给'+get.translation(player));
'step 3'
- if (result.bool) {
- event.current.give(result.cards, player);
+ if(result.bool){
+ event.current.give(result.cards,player);
}
event.goto(1);
'step 4'
- var n1 = target.countCards('h');
- var n2 = player.countCards('h');
- if (n1 > n2) {
+ var n1=target.countCards('h');
+ var n2=player.countCards('h');
+ if(n1>n2){
target.damage(player);
player.line(target);
}
- else if (n1 < n2) {
+ else if(n1= 3) return 0;
- if (!target.hasSkillTag('maixie_hp')) {
+ result:{
+ target:function(player,target){
+ var num=Math.min(5,target.maxHp-target.hp);
+ if(target.hp==1){
+ if(num>=3) return 0;
+ if(!target.hasSkillTag('maixie_hp')){
return -3;
}
return -1;
}
- if (num == 2) return 0;
- return -2 + num + (Math.pow(target.hp, 0.2) - 1);
+ if(num==2) return 0;
+ return -2+num+(Math.pow(target.hp,0.2)-1);
}
}
}
},
- zhuangshu_basic: {
- fullskin: true,
- vanish: true,
- derivation: 'fengfangnv',
- type: 'equip',
- suit: 'spade',
- subtype: 'equip5',
- skills: ['zhuangshu_basic'],
- forceDie: true,
- onLose: function () {
- if ((!event.getParent(2) || event.getParent(2).name != 'swapEquip') && (event.getParent().type != 'equip' || event.getParent().swapEquip)) {
+ zhuangshu_basic:{
+ fullskin:true,
+ vanish:true,
+ derivation:'fengfangnv',
+ type:'equip',
+ suit:'spade',
+ subtype:'equip5',
+ skills:['zhuangshu_basic'],
+ forceDie:true,
+ onLose:function(){
+ if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
- card.destroyed = true;
- game.log(card, '被销毁了');
+ card.destroyed=true;
+ game.log(card,'被销毁了');
}
},
- equipDelay: false,
- loseDelay: false,
- ai: {
- equipValue: 5,
- basic: {
- equipValue: 5
+ equipDelay:false,
+ loseDelay:false,
+ ai:{
+ equipValue:5,
+ basic:{
+ equipValue:5
}
}
},
- zhuangshu_trick: {
- fullskin: true,
- vanish: true,
- derivation: 'fengfangnv',
- type: 'equip',
- suit: 'club',
- subtype: 'equip5',
- forceDie: true,
- skills: ['zhuangshu_trick'],
- onLose: function () {
- if ((!event.getParent(2) || event.getParent(2).name != 'swapEquip') && (event.getParent().type != 'equip' || event.getParent().swapEquip)) {
+ zhuangshu_trick:{
+ fullskin:true,
+ vanish:true,
+ derivation:'fengfangnv',
+ type:'equip',
+ suit:'club',
+ subtype:'equip5',
+ forceDie:true,
+ skills:['zhuangshu_trick'],
+ onLose:function(){
+ if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
- card.destroyed = true;
- game.log(card, '被销毁了');
+ card.destroyed=true;
+ game.log(card,'被销毁了');
}
},
- equipDelay: false,
- loseDelay: false,
+ equipDelay:false,
+ loseDelay:false,
},
- zhuangshu_equip: {
- fullskin: true,
- vanish: true,
- derivation: 'fengfangnv',
- type: 'equip',
- suit: 'heart',
- subtype: 'equip5',
- skills: ['zhuangshu_equip'],
- forceDie: true,
- inherit: 'zhuangshu_basic',
- onLose: function () {
- if ((!event.getParent(2) || event.getParent(2).name != 'swapEquip') && (event.getParent().type != 'equip' || event.getParent().swapEquip)) {
+ zhuangshu_equip:{
+ fullskin:true,
+ vanish:true,
+ derivation:'fengfangnv',
+ type:'equip',
+ suit:'heart',
+ subtype:'equip5',
+ skills:['zhuangshu_equip'],
+ forceDie:true,
+ inherit:'zhuangshu_basic',
+ onLose:function(){
+ if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
- card.destroyed = true;
- game.log(card, '被销毁了');
+ card.destroyed=true;
+ game.log(card,'被销毁了');
}
},
- equipDelay: false,
- loseDelay: false,
+ equipDelay:false,
+ loseDelay:false,
},
},
- skill: {
+ skill:{
//胡金定
- olqingyuan: {
- audio: 2,
- trigger: {
- global: ['phaseBefore', 'gainAfter', 'loseAsyncAfter'],
- player: ['enterGame', 'damageEnd'],
+ olqingyuan:{
+ audio:2,
+ trigger:{
+ global:['phaseBefore','gainAfter','loseAsyncAfter'],
+ player:['enterGame','damageEnd'],
},
- filter(event, player) {
- const storage = player.getStorage('olqingyuan');
- if (event.name == 'gain' || event.name == 'loseAsync') {
- if (player.hasSkill('olqingyuan_used')) return false;
- return storage.some(target => event.getg(target).length) && storage.some(target => target.hasCard(card => lib.filter.canBeGained(card, target, player), 'he'));
+ filter(event,player){
+ const storage=player.getStorage('olqingyuan');
+ if(event.name=='gain'||event.name=='loseAsync'){
+ if(player.hasSkill('olqingyuan_used')) return false;
+ return storage.some(target=>event.getg(target).length)&&storage.some(target=>target.hasCard(card=>lib.filter.canBeGained(card,target,player),'he'));
}
- if (!game.hasPlayer(target => !storage.includes(target) && target != player)) return false;
- if (event.name == 'damage' && player.getAllHistory('damage').indexOf(event) != 0) return false;
- return event.name != 'phase' || game.phaseNumber == 0;
+ if(!game.hasPlayer(target=>!storage.includes(target)&&target!=player)) return false;
+ if(event.name=='damage'&&player.getAllHistory('damage').indexOf(event)!=0) return false;
+ return event.name!='phase'||game.phaseNumber==0;
},
- forced: true,
- async content(event, trigger, player) {
- if (trigger.name == 'gain' || trigger.name == 'loseAsync') {
- const target = player.getStorage('olqingyuan').filter(target => target.hasCard(card => lib.filter.canBeGained(card, target, player), 'he')).randomGet();
+ forced:true,
+ async content(event,trigger,player){
+ if(trigger.name=='gain'||trigger.name=='loseAsync'){
+ const target=player.getStorage('olqingyuan').filter(target=>target.hasCard(card=>lib.filter.canBeGained(card,target,player),'he')).randomGet();
player.line(target);
player.addTempSkill('olqingyuan_used');
- player.gain(target.getCards('he', card => {
- return lib.filter.canBeGained(card, target, player);
- }).randomGet(), target, 'giveAuto');
+ player.gain(target.getCards('he',card=>{
+ return lib.filter.canBeGained(card,target,player);
+ }).randomGet(),target,'giveAuto');
}
- else {
- const { result: { bool, targets } } = await player.chooseTarget((card, player, target) => {
- return target != player && !player.getStorage('olqingyuan').includes(target);
- }, true).set('prompt2', '每回合限一次,当你以此法选择的角色获得牌后,你随机获得其中一名角色的一张牌')
- .set('prompt', '请选择【轻缘】的目标').set('ai', target => {
- const player = get.event('player');
- return get.effect(target, new lib.element.VCard({ name: 'shunshou_copy2' }), player, player);
- });
- if (bool) {
- const target = targets[0];
+ else{
+ const {result:{bool,targets}}=await player.chooseTarget((card,player,target)=>{
+ return target!=player&&!player.getStorage('olqingyuan').includes(target);
+ },true).set('prompt2','每回合限一次,当你以此法选择的角色获得牌后,你随机获得其中一名角色的一张牌')
+ .set('prompt','请选择【轻缘】的目标').set('ai',target=>{
+ const player=get.event('player');
+ return get.effect(target,new lib.element.VCard({name:'shunshou_copy2'}),player,player);
+ });
+ if(bool){
+ const target=targets[0];
player.line(target);
- game.log(player, '选择了', target);
- player.markAuto('olqingyuan', [target]);
+ game.log(player,'选择了',target);
+ player.markAuto('olqingyuan',[target]);
}
}
},
- subSkill: { used: { charlotte: true } },
- intro: { content: '已选择$为目标' },
- ai: {
- expose: 0.3,
+ subSkill:{used:{charlotte:true}},
+ intro:{content:'已选择$为目标'},
+ ai:{
+ expose:0.3,
},
},
- olchongshen: {
- audio: 2,
- locked: false,
- enable: 'chooseToUse',
- filterCard(card) {
- return get.itemtype(card) == 'card' && card.hasGaintag('olchongshen');
+ olchongshen:{
+ audio:2,
+ locked:false,
+ enable:'chooseToUse',
+ filterCard(card){
+ return get.itemtype(card)=='card'&&card.hasGaintag('olchongshen');
},
- position: 'h',
- viewAs: { name: 'shan' },
- viewAsFilter(player) {
- if (!player.countCards('h', card => card.hasGaintag('olchongshen'))) return false;
+ position:'h',
+ viewAs:{name:'shan'},
+ viewAsFilter(player){
+ if(!player.countCards('h',card=>card.hasGaintag('olchongshen'))) return false;
},
- prompt: '将本轮得到的牌当作【闪】使用',
- check(card) {
- return 7 - get.value(card);
+ prompt:'将本轮得到的牌当作【闪】使用',
+ check(card){
+ return 7-get.value(card);
},
- ai: {
- order: 2,
- respondShan: true,
- skillTagFilter(player, tag, arg) {
- if (arg == 'respond' || !player.countCards('h', card => _status.connectMode || card.hasGaintag('olchongshen'))) return false;
+ ai:{
+ order:2,
+ respondShan:true,
+ skillTagFilter(player,tag,arg){
+ if(arg=='respond'||!player.countCards('h',card=>_status.connectMode||card.hasGaintag('olchongshen'))) return false;
},
- effect: {
- target(card, player, target, current) {
- if (get.tag(card, 'respondShan') && current < 0) return 0.6;
+ effect:{
+ target(card,player,target,current){
+ if(get.tag(card,'respondShan')&¤t<0) return 0.6;
},
},
},
- group: 'olchongshen_mark',
- mod: {
- aiValue(player, card, num) {
- if (get.name(card) != 'shan' && (get.itemtype(card) == 'card' && !card.hasGaintag('olchongshen'))) return;
- let cards = player.getCards('hs', card => get.name(card) == 'shan' || card.hasGaintag('olchongshen'));
- cards.sort((a, b) => (get.name(b) == 'shan' ? 1 : 2) - (get.name(a) == 'shan' ? 1 : 2));
- const geti = () => {
- if (cards.includes(card)) return cards.indexOf(card);
+ group:'olchongshen_mark',
+ mod:{
+ aiValue(player,card,num){
+ if(get.name(card)!='shan'&&(get.itemtype(card)=='card'&&!card.hasGaintag('olchongshen'))) return;
+ let cards=player.getCards('hs',card=>get.name(card)=='shan'||card.hasGaintag('olchongshen'));
+ cards.sort((a,b)=>(get.name(b)=='shan'?1:2)-(get.name(a)=='shan'?1:2));
+ const geti=()=>{
+ if(cards.includes(card)) return cards.indexOf(card);
return cards.length;
};
- if (get.name(card) == 'shan') return Math.min(num, [6, 4, 3][Math.min(geti(), 2)]) * 0.6;
- return Math.max(num, [6.5, 4, 3][Math.min(geti(), 2)]);
+ if(get.name(card)=='shan') return Math.min(num,[6,4,3][Math.min(geti(),2)])*0.6;
+ return Math.max(num,[6.5,4,3][Math.min(geti(),2)]);
},
- aiUseful() {
- return lib.skill.olchongshen.mod.aiValue.apply(this, arguments);
+ aiUseful(){
+ return lib.skill.olchongshen.mod.aiValue.apply(this,arguments);
},
- ignoredHandcard(card, player) {
- if (card.hasGaintag('olchongshen')) return true;
+ ignoredHandcard(card,player){
+ if(card.hasGaintag('olchongshen')) return true;
},
- cardDiscardable(card, player, name) {
- if (name == 'phaseDiscard' && card.hasGaintag('olchongshen')) return false;
+ cardDiscardable(card,player,name){
+ if(name=='phaseDiscard'&&card.hasGaintag('olchongshen')) return false;
},
},
- init(player) {
- if (game.phaseNumber > 0) {
- const hs = player.getCards('h'), history = player.getAllHistory();
- let cards = [];
- for (let i = history.length - 1; i >= 0; i--) {
- for (const evt of history[i].gain) {
+ init(player){
+ if(game.phaseNumber>0){
+ const hs=player.getCards('h'),history=player.getAllHistory();
+ let cards=[];
+ for(let i=history.length-1;i>=0;i--){
+ for(const evt of history[i].gain){
cards.addArray(evt.cards);
}
- if (history[i].isRound) break;
+ if(history[i].isRound) break;
}
- cards = cards.filter(i => hs.includes(i));
- if (cards.length) player.addGaintag(cards, 'olchongshen');
+ cards=cards.filter(i=>hs.includes(i));
+ if(cards.length) player.addGaintag(cards,'olchongshen');
}
},
- onremove(player) {
+ onremove(player){
player.removeGaintag('olchongshen');
},
- subSkill: {
- mark: {
- charlotte: true,
- trigger: { player: 'gainBegin', global: 'roundStart' },
- filter(event, player) {
- return event.name == 'gain' || game.roundNumber > 1;
+ subSkill:{
+ mark:{
+ charlotte:true,
+ trigger:{player:'gainBegin',global:'roundStart'},
+ filter(event,player){
+ return event.name=='gain'||game.roundNumber>1;
},
- forced: true,
- popup: false,
- content() {
- if (trigger.name == 'gain') trigger.gaintag.add('olchongshen');
+ forced:true,
+ popup:false,
+ content(){
+ if(trigger.name=='gain') trigger.gaintag.add('olchongshen');
else player.removeGaintag('olchongshen');
},
},
},
},
//田畴
- olshandao: {
- audio: 2,
- enable: 'phaseUse',
- filter(event, player) {
- return game.hasPlayer(target => lib.skill.olshandao.filterTarget(null, player, target));
+ olshandao:{
+ audio:2,
+ enable:'phaseUse',
+ filter(event,player){
+ return game.hasPlayer(target=>lib.skill.olshandao.filterTarget(null,player,target));
},
- filterTarget(card, player, target) {
+ filterTarget(card,player,target){
return target.countCards('he');
},
- usable: 1,
- selectTarget: [1, Infinity],
- multitarget: true,
- multiline: true,
- async content(event, trigger, player) {
- const wugu = new lib.element.VCard({ name: 'wugu' });
- const wanjian = new lib.element.VCard({ name: 'wanjian' });
- const targets = game.filterPlayer(target => {
- if (target == player) return false;
- return !event.targets.includes(target) && player.canUse(wanjian, target, false);
- }), targetx = event.targets.sortBySeat();
- let dialog = ['将这些角色的各一张牌置于牌堆顶,然后视为对这些角色使用【五谷丰登】'];
- for (const target of targetx) {
- const name = (target == player ? '你' : get.translation(target));
- if (target.countCards('h')) {
- dialog.add('' + name + '的手牌区
');
- if (player.hasSkillTag('viewHandcard', null, target, true) || player == target) dialog.push(target.getCards('h'));
- else dialog.push([target.getCards('h'), 'blank']);
+ usable:1,
+ selectTarget:[1,Infinity],
+ multitarget:true,
+ multiline:true,
+ async content(event,trigger,player){
+ const wugu=new lib.element.VCard({name:'wugu'});
+ const wanjian=new lib.element.VCard({name:'wanjian'});
+ const targets=game.filterPlayer(target=>{
+ if(target==player) return false;
+ return !event.targets.includes(target)&&player.canUse(wanjian,target,false);
+ }),targetx=event.targets.sortBySeat();
+ let dialog=['将这些角色的各一张牌置于牌堆顶,然后视为对这些角色使用【五谷丰登】'];
+ for(const target of targetx){
+ const name=(target==player?'你':get.translation(target));
+ if(target.countCards('h')){
+ dialog.add(''+name+'的手牌区
');
+ if(player.hasSkillTag('viewHandcard',null,target,true)||player==target) dialog.push(target.getCards('h'));
+ else dialog.push([target.getCards('h'),'blank']);
}
- if (target.countCards('e')) dialog.addArray(['' + name + '的装备区
', target.getCards('e')]);
+ if(target.countCards('e')) dialog.addArray([''+name+'的装备区
',target.getCards('e')]);
}
- const { result: { bool, links } } = await player.chooseButton(dialog, event.targets.length, true).set('filterButton', button => {
- return !ui.selected.buttons.some(but => get.owner(but.link) == get.owner(button.link));
- }).set('ai', button => 1 / (get.value(button.link, get.owner(button.link)) || 0.5));
- if (bool) {
- const cards = links.sort((a, b) => targetx.indexOf(get.owner(a)) - targetx.indexOf(get.owner(b)));
- for (const card of cards) {
- const target = get.owner(card);
- target.$throw(1, 1000);
- await target.lose([card], ui.cardPile, 'insert');
+ const {result:{bool,links}}=await player.chooseButton(dialog,event.targets.length,true).set('filterButton',button=>{
+ return !ui.selected.buttons.some(but=>get.owner(but.link)==get.owner(button.link));
+ }).set('ai',button=>1/(get.value(button.link,get.owner(button.link))||0.5));
+ if(bool){
+ const cards=links.sort((a,b)=>targetx.indexOf(get.owner(a))-targetx.indexOf(get.owner(b)));
+ for(const card of cards){
+ const target=get.owner(card);
+ target.$throw(1,1000);
+ await target.lose([card],ui.cardPile,'insert');
}
- const targety = targetx.filter(target => player.canUse(wugu, target, false));
- if (targety.length) await player.useCard(wugu, targety, false);
- if (targets.length) await player.useCard(wanjian, targets, false);
+ const targety=targetx.filter(target=>player.canUse(wugu,target,false));
+ if(targety.length) await player.useCard(wugu,targety,false);
+ if(targets.length) await player.useCard(wanjian,targets,false);
}
},
- ai: {
- order: 9,
- result: { target: 1 },
+ ai:{
+ order:9,
+ result:{target:1},
},
},
//李异
- olchanshuang: {
- audio: 2,
- enable: 'phaseUse',
- filterTarget: lib.filter.notMe,
- usable: 1,
- content: function* (event, map) {
- const player = map.player, target = event.target;
- const choiceList = [
+ olchanshuang:{
+ audio:2,
+ enable:'phaseUse',
+ filterTarget:lib.filter.notMe,
+ usable:1,
+ content:function*(event,map){
+ const player=map.player,target=event.target;
+ const choiceList=[
'重铸一张牌',
'使用一张【杀】',
'弃置两张牌',
- ], list = ['重铸', '出杀', '弃牌', '无法选择'];
- let result = [];
- for (let current of [player, target]) {
- let list1 = list.slice(), choiceList1 = choiceList.slice();
- list1 = list1.filter(control => {
- if (control == '无法选择') return false;
- if (control == '重铸') return current.countCards('he', card => current.canRecast(card));
- if (control == '出杀') return current.countCards('he', card => card.name == 'sha' && current.hasUseTarget(card));
- if (control == '弃牌') return current.countCards('he', card => lib.filter.cardDiscardable(card, current)) > 1;
+ ],list=['重铸','出杀','弃牌','无法选择'];
+ let result=[];
+ for(let current of [player,target]){
+ let list1=list.slice(),choiceList1=choiceList.slice();
+ list1=list1.filter(control=>{
+ if(control=='无法选择') return false;
+ if(control=='重铸') return current.countCards('he',card=>current.canRecast(card));
+ if(control=='出杀') return current.countCards('he',card=>card.name=='sha'&¤t.hasUseTarget(card));
+ if(control=='弃牌') return current.countCards('he',card=>lib.filter.cardDiscardable(card,current))>1;
});
- choiceList1 = choiceList.filter(control => {
- if (choiceList.indexOf(control) == 0) return current.countCards('he', card => current.canRecast(card));
- if (choiceList.indexOf(control) == 1) return current.countCards('he', card => card.name == 'sha' && current.hasUseTarget(card));
- if (choiceList.indexOf(control) == 2) return current.countCards('he', card => lib.filter.cardDiscardable(card, current)) > 1;
+ choiceList1=choiceList.filter(control=>{
+ if(choiceList.indexOf(control)==0) return current.countCards('he',card=>current.canRecast(card));
+ if(choiceList.indexOf(control)==1) return current.countCards('he',card=>card.name=='sha'&¤t.hasUseTarget(card));
+ if(choiceList.indexOf(control)==2) return current.countCards('he',card=>lib.filter.cardDiscardable(card,current))>1;
});
- if (list1.length) {
- if (list1.length == 1) result.push(list.indexOf(list1[0]));
- else {
- let result1 = yield current.chooseControl(list1).set('ai', () => {
- const current = _status.event.player;
- const controls = _status.event.controls.slice();
- if (controls.includes('出杀') && current.countCards('hs', card => card.name == 'sha' && current.hasValueTarget(card))) return '出杀';
- if (controls.includes('重铸')) return '重铸';
+ if(list1.length){
+ if(list1.length==1) result.push(list.indexOf(list1[0]));
+ else{
+ let result1=yield current.chooseControl(list1).set('ai',()=>{
+ const current=_status.event.player;
+ const controls=_status.event.controls.slice();
+ if(controls.includes('出杀')&¤t.countCards('hs',card=>card.name=='sha'&¤t.hasValueTarget(card))) return '出杀';
+ if(controls.includes('重铸')) return '重铸';
return '弃牌';
- }).set('choiceList', choiceList1);
- if (result1.control) result.push(list.indexOf(result1.control));
+ }).set('choiceList',choiceList1);
+ if(result1.control) result.push(list.indexOf(result1.control));
}
}
else result.push(3);
}
player.popup(list[result[0]]);
target.popup(list[result[1]]);
- for (let current of [player, target]) {
- switch (list[result[current == player ? 0 : 1]]) {
+ for(let current of [player,target]){
+ switch(list[result[current==player?0:1]]){
case '重铸':
- let result2 = yield current.chooseCard('he', '请重铸一张牌', (card, player) => player.canRecast(card), true);
- if (result2.bool) current.recast(result2.cards);
+ let result2=yield current.chooseCard('he','请重铸一张牌',(card,player)=>player.canRecast(card),true);
+ if(result2.bool) current.recast(result2.cards);
break;
case '出杀':
current.chooseToUse({
- prompt: '请使用一张【杀】',
- filterCard: function (card, player) {
- if (card.name != 'sha') return false;
- return lib.filter.filterCard.apply(this, arguments);
+ prompt:'请使用一张【杀】',
+ filterCard:function(card,player){
+ if(card.name!='sha') return false;
+ return lib.filter.filterCard.apply(this,arguments);
},
- forced: true,
- ai1: function (card) {
+ forced:true,
+ ai1:function(card){
return _status.event.player.getUseValue(card);
},
});
break;
case '弃牌':
- current.chooseToDiscard('he', 2, true);
+ current.chooseToDiscard('he',2,true);
break;
}
}
},
- ai: {
- order: function (item, player) {
- return get.order({ name: 'sha' }, player) - 0.1;
+ ai:{
+ order:function(item,player){
+ return get.order({name:'sha'},player)-0.1;
},
- result: {
- target: function (player, target) {
- const att = get.attitude(player, target);
- if (target.countCards('hs', card => {
- return card.name == 'sha' && game.hasPlayer(current => {
- return target.canUse(card, current) && get.effect(current, card, target, target) > 0 && get.effect(current, card, target, player) > 0;
+ result:{
+ target:function(player,target){
+ const att=get.attitude(player,target);
+ if(target.countCards('hs',card=>{
+ return card.name=='sha'&&game.hasPlayer(current=>{
+ return target.canUse(card,current)&&get.effect(current,card,target,target)>0&&get.effect(current,card,target,player)>0;
});
})) return 3;
- if (att > 0) return 2;
- if (!target.countCards('h')) return get.sgn(att) + (att == 0 ? 1 : 0);
+ if(att>0) return 2;
+ if(!target.countCards('h')) return get.sgn(att)+(att==0?1:0);
return 0;
},
},
},
- group: 'olchanshuang_end',
- subSkill: {
- end: {
- audio: 'olchanshuang',
- trigger: { player: 'phaseJieshuBegin' },
- filter: function (event, player) {
- return player.getHistory('lose', evt => {
- if (evt.type == 'discard') {
- var evtx = evt.getl(player);
- return evtx && evtx.cards2.length == 2;
+ group:'olchanshuang_end',
+ subSkill:{
+ end:{
+ audio:'olchanshuang',
+ trigger:{player:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return player.getHistory('lose',evt=>{
+ if(evt.type=='discard'){
+ var evtx=evt.getl(player);
+ return evtx&&evtx.cards2.length==2;
}
- return evt.getParent(2).name == 'recast';
- }).length || player.getHistory('useCard', evt => evt.card.name == 'sha').length;
+ return evt.getParent(2).name=='recast';
+ }).length||player.getHistory('useCard',evt=>evt.card.name=='sha').length;
},
- forced: true,
- locked: false,
- content: function* (event, map) {
- let num = 0, player = map.player;
- if (player.getHistory('lose', evt => evt.getParent(2).name == 'recast').length) num++;
- if (player.getHistory('useCard', evt => evt.card.name == 'sha').length) num++;
- if (player.getHistory('lose', evt => {
- if (evt.type == 'discard') {
- var evtx = evt.getl(player);
- return evtx && evtx.cards2.length == 2;
+ forced:true,
+ locked:false,
+ content:function*(event,map){
+ let num=0,player=map.player;
+ if(player.getHistory('lose',evt=>evt.getParent(2).name=='recast').length) num++;
+ if(player.getHistory('useCard',evt=>evt.card.name=='sha').length) num++;
+ if(player.getHistory('lose',evt=>{
+ if(evt.type=='discard'){
+ var evtx=evt.getl(player);
+ return evtx&&evtx.cards2.length==2;
}
}).length) num++;
- if (num && player.countCards('he', card => player.canRecast(card))) {
- let result = yield player.chooseCard('he', '请重铸一张牌', (card, player) => player.canRecast(card), true);
- if (result.bool) yield player.recast(result.cards);
+ if(num&&player.countCards('he',card=>player.canRecast(card))){
+ let result=yield player.chooseCard('he','请重铸一张牌',(card,player)=>player.canRecast(card),true);
+ if(result.bool) yield player.recast(result.cards);
}
- if (num > 1 && player.countCards('he', card => card.name == 'sha' && player.hasUseTarget(card))) {
+ if(num>1&&player.countCards('he',card=>card.name=='sha'&&player.hasUseTarget(card))){
yield player.chooseToUse({
- prompt: '请使用一张【杀】',
- filterCard: function (card, player) {
- if (card.name != 'sha') return false;
- return lib.filter.filterCard.apply(this, arguments);
+ prompt:'请使用一张【杀】',
+ filterCard:function(card,player){
+ if(card.name!='sha') return false;
+ return lib.filter.filterCard.apply(this,arguments);
},
- forced: true,
- ai1: function (card) {
+ forced:true,
+ ai1:function(card){
return _status.event.player.getUseValue(card);
},
});
}
- if (num > 2 && player.countCards('he', card => lib.filter.cardDiscardable(card, player))) yield player.chooseToDiscard('he', 2, true);
+ if(num>2&&player.countCards('he',card=>lib.filter.cardDiscardable(card,player))) yield player.chooseToDiscard('he',2,true);
},
},
},
},
- olzhanjin: {
- audio: 2,
- locked: true,
- group: 'olzhanjin_guanshi',
- subSkill: {
- guanshi: {
- audio: 'olzhanjin',
- nobracket: true,
- equipSkill: true,
- trigger: { player: ['shaMiss', 'eventNeutralized'] },
- filter: function (event, player) {
- if (!player.hasEmptySlot(1) || !lib.card.guanshi || player.hasSkillTag('unequip_equip1')) return false;
- if (event.type != 'card' || event.card.name != 'sha' || !event.target.isIn()) return false;
- return player.countCards('he') >= 2;
+ olzhanjin:{
+ audio:2,
+ locked:true,
+ group:'olzhanjin_guanshi',
+ subSkill:{
+ guanshi:{
+ audio:'olzhanjin',
+ nobracket:true,
+ equipSkill:true,
+ trigger:{player:['shaMiss','eventNeutralized']},
+ filter:function(event,player){
+ if(!player.hasEmptySlot(1)||!lib.card.guanshi||player.hasSkillTag('unequip_equip1')) return false;
+ if(event.type!='card'||event.card.name!='sha'||!event.target.isIn()) return false;
+ return player.countCards('he')>=2;
},
- direct: true,
- locked: false,
- content: function () {
+ direct:true,
+ locked:false,
+ content:function(){
"step 0"
- player.chooseToDiscard(get.prompt('olzhanjin_guanshi'), '弃置两张牌,令' + get.translation(trigger.card) + '强制命中', 2, 'he').set('ai', function (card) {
- var evt = _status.event.getTrigger();
- if (get.attitude(evt.player, evt.target) < 0) {
- if (player.needsToDiscard()) return 15 - get.value(card);
- if (evt.baseDamage + evt.extraDamage >= Math.min(2, evt.target.hp)) return 8 - get.value(card);
- return 5 - get.value(card);
+ player.chooseToDiscard(get.prompt('olzhanjin_guanshi'),'弃置两张牌,令'+get.translation(trigger.card)+'强制命中',2,'he').set('ai',function(card){
+ var evt=_status.event.getTrigger();
+ if(get.attitude(evt.player,evt.target)<0){
+ if(player.needsToDiscard()) return 15-get.value(card);
+ if(evt.baseDamage+evt.extraDamage>=Math.min(2,evt.target.hp)) return 8-get.value(card);
+ return 5-get.value(card);
}
return -1;
- }).set('complexCard', true).logSkill = 'olzhanjin_guanshi';
+ }).set('complexCard',true).logSkill='olzhanjin_guanshi';
'step 1'
- if (result.bool) {
- if (event.triggername == 'shaMiss') {
+ if(result.bool){
+ if(event.triggername=='shaMiss'){
trigger.untrigger();
trigger.trigger('shaHit');
- trigger._result.bool = false;
- trigger._result.result = null;
+ trigger._result.bool=false;
+ trigger._result.result=null;
}
else trigger.unneutralize();
}
},
- mod: {
- attackRange: function (player, num) {
- if (lib.card.guanshi && player.hasEmptySlot(1)) return num - lib.card.guanshi.distance.attackFrom;
+ mod:{
+ attackRange:function(player,num){
+ if(lib.card.guanshi&&player.hasEmptySlot(1)) return num-lib.card.guanshi.distance.attackFrom;
},
},
- ai: {
- directHit_ai: true,
- skillTagFilter: function (player, tag, arg) {
- if (player._olzhanjin_guanshi_temp || !player.hasEmptySlot(1) || !lib.card.guanshi || player.hasSkillTag('unequip_equip1')) return;
- player._guanshi_temp = true;
- var bool = (get.attitude(player, arg.target) < 0 && arg.card && arg.card.name == 'sha' && player.countCards('he', card => {
- return card != arg.card && (!arg.card.cards || !arg.card.cards.includes(card)) && get.value(card) < 5;
- }) > 1);
+ ai:{
+ directHit_ai:true,
+ skillTagFilter:function(player,tag,arg){
+ if(player._olzhanjin_guanshi_temp||!player.hasEmptySlot(1)||!lib.card.guanshi||player.hasSkillTag('unequip_equip1')) return;
+ player._guanshi_temp=true;
+ var bool=(get.attitude(player,arg.target)<0&&arg.card&&arg.card.name=='sha'&&player.countCards('he',card=>{
+ return card!=arg.card&&(!arg.card.cards||!arg.card.cards.includes(card))&&get.value(card)<5;
+ })>1);
delete player._olzhanjin_guanshi_temp;
return bool;
},
- effect: {
- target: function (card, player, target) {
- if (player.hasSkillTag('unequip_equip1')) return;
- if (player == target && get.subtype(card) == 'equip1') {
- if (get.equipValue(card) <= get.equipValue({ name: 'guanshi' })) return 0;
+ effect:{
+ target:function(card,player,target){
+ if(player.hasSkillTag('unequip_equip1')) return;
+ if(player==target&&get.subtype(card)=='equip1'){
+ if(get.equipValue(card)<=get.equipValue({name:'guanshi'})) return 0;
}
},
},
@@ -1097,698 +1097,699 @@ game.import('character', function (lib, game, ui, get, ai, _status) {
},
},
//曹宇
- olgongjie: {
- audio: 2,
- trigger: { global: 'phaseBegin' },
- filter(event, player) {
- if (!player.countCards('he')) return false;
- return !game.hasPlayer(current => {
- var history = current.actionHistory;
- for (var num = history.length - 1; num >= 0; num--) {
- if (history[num].isRound) break;
- if (history[num].isSkipped) continue;
+ olgongjie:{
+ audio:2,
+ trigger:{global:'phaseBegin'},
+ filter(event,player){
+ if(!player.countCards('he')) return false;
+ return !game.hasPlayer(current=>{
+ var history=current.actionHistory;
+ for(var num=history.length-1;num>=0;num--){
+ if(history[num].isRound) break;
+ if(history[num].isSkipped) continue;
return true;
}
return false;
});
},
- direct: true,
- async content(event, trigger, player) {
- var num = player.countCards('he'), draws = [];
- var { result: { bool, targets } } = await player.chooseTarget(get.prompt2('olgongjie'), [1, num], lib.filter.notMe).set('ai', target => get.attitude(_status.event.player, target));
- if (!bool) return;
- targets = targets.sortBySeat();
- player.logSkill('olgongjie', targets);
- for (var target of targets) {
- var { result: { bool, cards } } = await target.gainPlayerCard(player, true, 'he');
- if (bool) draws.add(get.suit(cards[0], player));
+ direct:true,
+ async content(event,trigger,player){
+ var num=player.countCards('he'),draws=[];
+ var {result:{bool,targets}}=await player.chooseTarget(get.prompt2('olgongjie'),[1,num],lib.filter.notMe).set('ai',target=>get.attitude(_status.event.player,target));
+ if(!bool) return;
+ targets=targets.sortBySeat();
+ player.logSkill('olgongjie',targets);
+ for(var target of targets){
+ var {result:{bool,cards}}=await target.gainPlayerCard(player,true,'he');
+ if(bool) draws.add(get.suit(cards[0],player));
}
player.draw(draws.length);
},
},
- olxiangxv: {
- audio: 2,
- trigger: {
- player: 'loseAfter',
- global: ['gainAfter', 'equipAfter', 'addJudgeAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
+ olxiangxv:{
+ audio:2,
+ trigger:{
+ player:'loseAfter',
+ global:['gainAfter','equipAfter','addJudgeAfter','loseAsyncAfter','addToExpansionAfter'],
},
- filter(event, player) {
- if (!_status.currentPhase || !_status.currentPhase.isIn()) return false;
- if (!player.isMinHandcard()) return false;
- var evt = event.getl(player);
- if (evt && evt.player == player && evt.hs && evt.hs.length > 0) return true;
- if (event.getg) return game.hasPlayer(current => {
- var cards = event.getg(current);
- if (!cards.length) return false;
- return current.countCards('h') >= player.countCards('h') && current.countCards('h') - cards.length < player.countCards('h');
+ filter(event,player){
+ if(!_status.currentPhase||!_status.currentPhase.isIn()) return false;
+ if(!player.isMinHandcard()) return false;
+ var evt=event.getl(player);
+ if(evt&&evt.player==player&&evt.hs&&evt.hs.length>0) return true;
+ if(event.getg) return game.hasPlayer(current=>{
+ var cards=event.getg(current);
+ if(!cards.length) return false;
+ return current.countCards('h')>=player.countCards('h')&¤t.countCards('h')-cards.length get.name(card) == 'sha');
- cardx.sort((a, b) => target.getUseValue(b) - target.getUseValue(a));
- cardx = cardx.slice(Math.min(cardx.length, target.getCardUsable('sha')), cardx.length);
+ check(event,player){
+ var target=_status.currentPhase;
+ var cards=target.getCards('h');
+ if(target.isPhaseUsing()){
+ var cardx=cards.filter(card=>get.name(card)=='sha');
+ cardx.sort((a,b)=>target.getUseValue(b)-target.getUseValue(a));
+ cardx=cardx.slice(Math.min(cardx.length,target.getCardUsable('sha')),cardx.length);
cards.removeArray(cardx);
}
- return cards.length - player.countCards('h') > 0;
+ return cards.length-player.countCards('h')>0;
},
- usable: 1,
- logTarget: () => _status.currentPhase,
- async content(event, trigger, player) {
- player.when({ global: 'phaseEnd' }).then(() => {
- if (target && target.isIn()) {
- var num = target.countCards('h') - player.countCards('h');
- if (num) {
- if (num > 0) {
- if (player.countCards('h') < 5) player.draw(Math.min(5 - player.countCards('h'), num));
+ usable:1,
+ logTarget:()=>_status.currentPhase,
+ async content(event,trigger,player){
+ player.when({global:'phaseEnd'}).then(()=>{
+ if(target&&target.isIn()){
+ var num=target.countCards('h')-player.countCards('h');
+ if(num){
+ if(num>0){
+ if(player.countCards('h')<5) player.draw(Math.min(5-player.countCards('h'),num));
}
- else player.chooseToDiscard(-num, 'h', true);
+ else player.chooseToDiscard(-num,'h',true);
}
}
- }).vars({ target: _status.currentPhase });
+ }).vars({target:_status.currentPhase});
},
},
- olxiangzuo: {
- audio: 2,
- trigger: { player: 'dying' },
- filter(event, player) {
- if (!_status.currentPhase || !_status.currentPhase.isIn()) return false;
+ olxiangzuo:{
+ audio:2,
+ trigger:{player:'dying'},
+ filter(event,player){
+ if(!_status.currentPhase||!_status.currentPhase.isIn()) return false;
return player.countCards('he');
},
- direct: true,
- limited: true,
- skillAnimation: true,
- animationColor: 'water',
- async content(event, trigger, player) {
- var target = _status.currentPhase, num = player.countCards('he');
- var { result: { bool, cards } } = await player.chooseToGive(get.prompt2('olxiangzuo', target), [1, num], 'he').set('ai', card => {
- var player = _status.event.player, target = _status.event.target;
- if (player.getHistory('useSkill', evt => {
- return (evt.skill == 'olgongjie' || evt.skill == 'olxiangxv') && evt.targets.includes(target);
- }).length) {
- if (get.attitude(player, target) > 0) return 1;
- if (player.canSaveCard(card, player)) return 0;
- if (ui.selected.cards.length + player.hp == player.maxHp) return 0;
- return 20 - get.value(card);
+ direct:true,
+ limited:true,
+ skillAnimation:true,
+ animationColor:'water',
+ async content(event,trigger,player){
+ var target=_status.currentPhase,num=player.countCards('he');
+ var {result:{bool,cards}}=await player.chooseToGive(get.prompt2('olxiangzuo',target),[1,num],'he').set('ai',card=>{
+ var player=_status.event.player,target=_status.event.target;
+ if(player.getHistory('useSkill',evt=>{
+ return (evt.skill=='olgongjie'||evt.skill=='olxiangxv')&&evt.targets.includes(target);
+ }).length){
+ if(get.attitude(player,target)>0) return 1;
+ if(player.canSaveCard(card,player)) return 0;
+ if(ui.selected.cards.length+player.hp==player.maxHp) return 0;
+ return 20-get.value(card);
}
- else {
- if (get.attitude(player, target) > 0 && !player.countCards('he', cardx => player.canSaveCard(cardx, player))) return 1;
+ else{
+ if(get.attitude(player,target)>0&&!player.countCards('he',cardx=>player.canSaveCard(cardx,player))) return 1;
return 0;
}
- }).set('target', target).set('complexCard', true).set('logSkill', ['olxiangzuo', target]);
- if (!bool) return;
+ }).set('target',target).set('complexCard',true).set('logSkill',['olxiangzuo',target]);
+ if(!bool) return;
player.awakenSkill('olxiangzuo');
- if (player.getHistory('useSkill', evt => {
- return (evt.skill == 'olgongjie' || evt.skill == 'olxiangxv') && evt.targets.includes(target);
+ if(player.getHistory('useSkill',evt=>{
+ return (evt.skill=='olgongjie'||evt.skill=='olxiangxv')&&evt.targets.includes(target);
}).length) player.recover(cards.length);
},
},
//OL飞扬
- olfeiyang: {
- trigger: { player: 'phaseZhunbeiBegin' },
- filter: function (event, player) {
- return player.countCards('he', card => {
- if (_status.connectMode && get.position(card) == 'h') return true;
- return lib.filter.cardDiscardable(card, player);
- }) >= 3 && player.countCards('j');
+ olfeiyang:{
+ trigger:{player:'phaseZhunbeiBegin'},
+ filter:function(event,player){
+ return player.countCards('he',card=>{
+ if(_status.connectMode&&get.position(card)=='h') return true;
+ return lib.filter.cardDiscardable(card,player);
+ })>=3&&player.countCards('j');
},
- direct: true,
+ direct:true,
//limited:true,
//skillAnimation:true,
//animationColor:'orange',
- content: function () {
+ content:function(){
'step 0'
- player.chooseToDiscard(get.prompt2('olfeiyang'), 'he', 3).set('ai', function (card) {
- var player = _status.event.player;
- if (player.hasCard(function (card) {
- return get.effect(player, {
- name: card.viewAs || card.name,
- cards: [card],
- }, player, player) < 0;
- }, 'j')) return 6 - get.value(card);
+ player.chooseToDiscard(get.prompt2('olfeiyang'),'he',3).set('ai',function(card){
+ var player=_status.event.player;
+ if(player.hasCard(function(card){
+ return get.effect(player,{
+ name:card.viewAs||card.name,
+ cards:[card],
+ },player,player)<0;
+ },'j')) return 6-get.value(card);
return 0;
- }).set('logSkill', 'olfeiyang');
+ }).set('logSkill','olfeiyang');
'step 1'
- if (result.bool) {
+ if(result.bool){
//player.awakenSkill('olfeiyang');
- player.discardPlayerCard(player, 'j', true);
+ player.discardPlayerCard(player,'j',true);
}
},
},
//李婉
- ollianju: {
- audio: 2,
- trigger: { player: 'phaseJieshuBegin' },
- filter: function (event, player) {
- var history = player.getHistory('useCard');
- if (!history.length) return false;
- var evt = history[history.length - 1];
- return evt.cards && evt.cards.filterInD('d').length;
+ ollianju:{
+ audio:2,
+ trigger:{player:'phaseJieshuBegin'},
+ filter:function(event,player){
+ var history=player.getHistory('useCard');
+ if(!history.length) return false;
+ var evt=history[history.length-1];
+ return evt.cards&&evt.cards.filterInD('d').length;
},
- direct: true,
- content: function () {
+ direct:true,
+ content:function(){
'step 0'
- var history = player.getHistory('useCard');
- var evt = history[history.length - 1];
- event.evt = evt;
- player.chooseTarget(get.prompt('ollianju'), '令一名角色获得' + get.translation(evt.cards.filterInD('d')) + '并记录' + get.translation(evt.card.name), lib.filter.notMe).set('ai', target => {
- var player = _status.event.player, att = get.attitude(player, target);
- var cards = _status.event.cards;
- if (cards.filter(card => get.name(card, false) == 'du').length >= Math.ceil(cards.length / 2)) att *= -1;
- if (target.skipList.includes('phaseUse') || target.hasJudge('lebu')) return att / 20;
+ var history=player.getHistory('useCard');
+ var evt=history[history.length-1];
+ event.evt=evt;
+ player.chooseTarget(get.prompt('ollianju'),'令一名角色获得'+get.translation(evt.cards.filterInD('d'))+'并记录'+get.translation(evt.card.name),lib.filter.notMe).set('ai',target=>{
+ var player=_status.event.player,att=get.attitude(player,target);
+ var cards=_status.event.cards;
+ if(cards.filter(card=>get.name(card,false)=='du').length>=Math.ceil(cards.length/2)) att*=-1;
+ if(target.skipList.includes('phaseUse')||target.hasJudge('lebu')) return att/20;
return att;
- }).set('cards', evt.cards.filterInD('d'));
+ }).set('cards',evt.cards.filterInD('d'));
'step 1'
- if (result.bool) {
- var evt = event.evt;
- var target = result.targets[0];
- player.logSkill('oliandui', target);
- target.gain(evt.cards.filterInD('d'), 'gain2');
+ if(result.bool){
+ var evt=event.evt;
+ var target=result.targets[0];
+ player.logSkill('oliandui',target);
+ target.gain(evt.cards.filterInD('d'),'gain2');
player.addSkill('ollianju_effect');
- player.storage.ollianju = evt.card.name;
+ player.storage.ollianju=evt.card.name;
player.markSkill('ollianju');
- if (!player.storage.ollianju_effect[target.playerid]) player.storage.ollianju_effect[target.playerid] = [];
+ if(!player.storage.ollianju_effect[target.playerid]) player.storage.ollianju_effect[target.playerid]=[];
player.storage.ollianju_effect[target.playerid].add(evt.card.name);
}
},
- onunmark: true,
- intro: {
- content: function (storage, player) {
- var str = '当前最后一次记录牌名:' + get.translation(storage);
- if (player.storage.ollianju_effect) {
- for (var i in player.storage.ollianju_effect) {
- var target = game.findPlayer(target => target.playerid == i);
- if (!i) continue;
- str += '
';
- str += get.translation(target) + '的下个结束阶段,其可令你获得其本回合使用的最后一张牌对应的所有位于弃牌堆的实体牌';
- str += ',然后若此牌名为' + get.translation(player.storage.ollianju_effect[i]) + ',则你失去1点体力,否则你可以视为使用' + get.translation(player.storage.ollianju_effect[i]);
+ onunmark:true,
+ intro:{
+ content:function(storage,player){
+ var str='当前最后一次记录牌名:'+get.translation(storage);
+ if(player.storage.ollianju_effect){
+ for(var i in player.storage.ollianju_effect){
+ var target=game.findPlayer(target=>target.playerid==i);
+ if(!i) continue;
+ str+='
';
+ str+=get.translation(target)+'的下个结束阶段,其可令你获得其本回合使用的最后一张牌对应的所有位于弃牌堆的实体牌';
+ str+=',然后若此牌名为'+get.translation(player.storage.ollianju_effect[i])+',则你失去1点体力,否则你可以视为使用'+get.translation(player.storage.ollianju_effect[i]);
}
}
return str;
},
},
- subSkill: {
- effect: {
- init: function (player) {
- if (!player.storage.ollianju_effect) player.storage.ollianju_effect = {};
+ subSkill:{
+ effect:{
+ init:function(player){
+ if(!player.storage.ollianju_effect) player.storage.ollianju_effect={};
},
- charlotte: true,
- trigger: { global: ['phaseJieshuBegin', 'die'] },
- filter: function (event, player) {
+ charlotte:true,
+ trigger:{global:['phaseJieshuBegin','die']},
+ filter:function(event,player){
return player.storage.ollianju_effect[event.player.playerid];
},
- direct: true,
- content: function () {
+ direct:true,
+ content:function(){
'step 0'
- if (trigger.name == 'phaseJieshu') event.list = player.storage.ollianju_effect[trigger.player.playerid];
+ if(trigger.name=='phaseJieshu') event.list=player.storage.ollianju_effect[trigger.player.playerid];
delete player.storage.ollianju_effect[trigger.player.playerid];
- var history = trigger.player.getHistory('useCard');
- var evt = history[history.length - 1];
- event.evt = evt;
- if (trigger.name == 'die' || !history.length || !evt.cards || !evt.cards.filterInD('d').length) event.finish();
+ var history=trigger.player.getHistory('useCard');
+ var evt=history[history.length-1];
+ event.evt=evt;
+ if(trigger.name=='die'||!history.length||!evt.cards||!evt.cards.filterInD('d').length) event.finish();
'step 1'
- var evt = event.evt;
- trigger.player.chooseBool(get.prompt('ollianju', player), '令' + get.translation(player) + '获得' + get.translation(evt.cards.filterInD('d')) + (event.list.includes(evt.card.name) ? ',然后' + get.translation(player) + '失去1点体力' : '')).set('choice', get.attitude(trigger.player, player) > 0 && (!event.list.includes(evt.card.name) || player.getHp() > 1));
+ var evt=event.evt;
+ trigger.player.chooseBool(get.prompt('ollianju',player),'令'+get.translation(player)+'获得'+get.translation(evt.cards.filterInD('d'))+(event.list.includes(evt.card.name)?',然后'+get.translation(player)+'失去1点体力':'')).set('choice',get.attitude(trigger.player,player)>0&&(!event.list.includes(evt.card.name)||player.getHp()>1));
'step 2'
- if (result.bool) {
- var evt = event.evt, cards = evt.cards.filterInD('d');
+ if(result.bool){
+ var evt=event.evt,cards=evt.cards.filterInD('d');
trigger.player.line(player);
- player.gain(cards, 'gain2');
- if (event.list.includes(evt.card.name)) player.loseHp();
- else {
- var card = {
- name: evt.card.name,
- isCard: true,
+ player.gain(cards,'gain2');
+ if(event.list.includes(evt.card.name)) player.loseHp();
+ else{
+ var card={
+ name:evt.card.name,
+ isCard:true,
};
- if (player.hasUseTarget(card)) player.chooseUseTarget(card, false);
+ if(player.hasUseTarget(card)) player.chooseUseTarget(card,false);
}
}
},
},
},
},
- olsilv: {
- audio: 2,
- trigger: {
- player: ['loseAfter', 'gainAfter'],
- global: ['equipAfter', 'addJudgeAfter', 'gainAfter', 'loseAsyncAfter', 'addToExpansionAfter'],
+ olsilv:{
+ audio:2,
+ trigger:{
+ player:['loseAfter','gainAfter'],
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
- filter: function (event, player) {
- var name = player.storage.ollianju;
- if (!name) return false;
- if (event.getg) return event.getg(player).some(card => card.name == name) && !player.hasSkill('olsilv_gain');
- return event.getl(player).cards2.some(card => card.name == name) && !player.hasSkill('olsilv_lose');
+ filter:function(event,player){
+ var name=player.storage.ollianju;
+ if(!name) return false;
+ if(event.getg) return event.getg(player).some(card=>card.name==name)&&!player.hasSkill('olsilv_gain');
+ return event.getl(player).cards2.some(card=>card.name==name)&&!player.hasSkill('olsilv_lose');
},
- forced: true,
- content: function () {
+ forced:true,
+ content:function(){
'step 0'
- player.addTempSkill('olsilv_' + (trigger.getg ? 'gain' : 'lose'));
- if (!trigger.visible) {
- var cards, name = player.storage.ollianju;
- if (trigger.getg) cards = trigger.getg(player).filter(card => card.name == name);
- else cards = trigger.getl(player).cards2.filter(card => card.name == name);
- if (cards.length) player.showCards(cards, get.translation(player) + '发动了【思闾】');
+ player.addTempSkill('olsilv_'+(trigger.getg?'gain':'lose'));
+ if(!trigger.visible){
+ var cards,name=player.storage.ollianju;
+ if(trigger.getg) cards=trigger.getg(player).filter(card=>card.name==name);
+ else cards=trigger.getl(player).cards2.filter(card=>card.name==name);
+ if(cards.length) player.showCards(cards,get.translation(player)+'发动了【思闾】');
}
'step 1'
player.draw();
},
- ai: { combo: 'ollianju' },
- subSkill: {
- gain: { charlotte: true },
- lose: { charlotte: true },
+ ai:{combo:'ollianju'},
+ subSkill:{
+ gain:{charlotte:true},
+ lose:{charlotte:true},
},
},
//丁尚涴
- olfudao: {
- audio: 2,
- trigger: {
- global: 'phaseBefore',
- player: 'enterGame',
+ olfudao:{
+ audio:2,
+ trigger:{
+ global:'phaseBefore',
+ player:'enterGame',
},
- filter: function (event, player) {
- return event.name != 'phase' || game.phaseNumber == 0;
+ filter:function(event,player){
+ return event.name!='phase'||game.phaseNumber==0;
},
- forced: true,
- locked: false,
- content: function () {
+ forced:true,
+ locked:false,
+ content:function(){
'step 0'
player.draw(3);
'step 1'
- var num = player.countCards('h');
- if (num > 0) {
+ var num=player.countCards('h');
+ if(num>0){
player.chooseCardTarget({
- prompt: '抚悼:将至多三张手张牌交给一名其他角色',
- selectCard: [1, 3],
- filterCard: true,
- filterTarget: lib.filter.notMe,
- position: 'h',
- ai1: function (card) {
- if (card.name == 'du') return 10;
- else if (ui.selected.cards.length && ui.selected.cards[0].name == 'du') return 0;
- var player = _status.event.player;
- if (ui.selected.cards.length > 4 || !game.hasPlayer(function (current) {
- return get.attitude(player, current) > 0 && !current.hasSkillTag('nogain');
+ prompt:'抚悼:将至多三张手张牌交给一名其他角色',
+ selectCard:[1,3],
+ filterCard:true,
+ filterTarget:lib.filter.notMe,
+ position:'h',
+ ai1:function(card){
+ if(card.name=='du') return 10;
+ else if(ui.selected.cards.length&&ui.selected.cards[0].name=='du') return 0;
+ var player=_status.event.player;
+ if(ui.selected.cards.length>4||!game.hasPlayer(function(current){
+ return get.attitude(player,current)>0&&!current.hasSkillTag('nogain');
})) return 0;
- return 1 / Math.max(0.1, get.value(card));
+ return 1/Math.max(0.1,get.value(card));
},
- ai2: function (target) {
- var player = _status.event.player, att = get.attitude(player, target);
- if (ui.selected.cards[0].name == 'du') return -att;
- if (target.hasSkillTag('nogain')) att /= 6;
+ ai2:function(target){
+ var player=_status.event.player,att=get.attitude(player,target);
+ if(ui.selected.cards[0].name=='du') return -att;
+ if(target.hasSkillTag('nogain')) att/=6;
return att;
},
});
}
else event.goto(3);
'step 2'
- if (result.bool) {
- player.give(result.cards, result.targets[0]);
+ if(result.bool){
+ player.give(result.cards,result.targets[0]);
}
'step 3'
- var num = player.countCards('h');
- if (num > 0) player.chooseToDiscard('h', [1, num], '抚悼:弃置任意张手牌,然后记录手牌数');
+ var num=player.countCards('h');
+ if(num>0) player.chooseToDiscard('h',[1,num],'抚悼:弃置任意张手牌,然后记录手牌数');
'step 4'
- player.storage.olfudao = player.countCards('h');
+ player.storage.olfudao=player.countCards('h');
player.markSkill('olfudao');
},
- intro: {
- content: '一名角色的回合结束时,若其手牌数等于#,你可以与其各摸一张牌。',
+ intro:{
+ content:'一名角色的回合结束时,若其手牌数等于#,你可以与其各摸一张牌。',
},
- group: 'olfudao_qiaoshi',
- subSkill: {
- qiaoshi: {
- audio: 'olfudao',
- trigger: { global: 'phaseEnd' },
- filter: function (event, player) {
- if (typeof player.storage.olfudao != 'number') return false;
- return event.player.countCards('h') == player.storage.olfudao && event.player.isIn();
+ group:'olfudao_qiaoshi',
+ subSkill:{
+ qiaoshi:{
+ audio:'olfudao',
+ trigger:{global:'phaseEnd'},
+ filter:function(event,player){
+ if(typeof player.storage.olfudao!='number') return false;
+ return event.player.countCards('h')==player.storage.olfudao&&event.player.isIn();
},
- check: function (event, player) {
- return get.attitude(player, event.player) >= 0;
+ check:function(event,player){
+ return get.attitude(player,event.player)>=0;
},
- logTarget: 'player',
- prompt2: function (event, player) {
- return '与' + get.translation(event.player) + '各摸一张牌';
+ logTarget:'player',
+ prompt2:function(event,player){
+ return '与'+get.translation(event.player)+'各摸一张牌';
},
- content: function () {
- game.asyncDraw([trigger.player, player]);
+ content:function(){
+ game.asyncDraw([trigger.player,player]);
},
},
},
},
- olfengyan: {
- audio: 2,
- trigger: { player: ['damageEnd', 'useCard', 'respond'] },
- filter: function (event, player) {
- if (event.name == 'damage') return event.source && event.source.isIn() && event.source != player;
- return Array.isArray(event.respondTo) && event.respondTo[0] != player;
+ olfengyan:{
+ audio:2,
+ trigger:{player:['damageEnd','useCard','respond']},
+ filter:function(event,player){
+ if(event.name=='damage') return event.source&&event.source.isIn()&&event.source!=player;
+ return Array.isArray(event.respondTo)&&event.respondTo[0]!=player;
},
- logTarget: function (event, player) {
- if (event.name == 'damage') return event.source;
+ logTarget:function(event,player){
+ if(event.name=='damage') return event.source;
return event.respondTo[0];
},
- forced: true,
- content: function () {
+ forced:true,
+ content:function(){
'step 0'
- var target = lib.skill.olfengyan.logTarget(trigger, player);
- var str = get.translation(target); event.target = target;
- player.chooseControl().set('choiceList', [
- '摸一张牌,然后交给' + str + '一张牌',
- '令' + str + '摸一张牌,然后' + str + '弃置两张牌',
- ]).set('ai', () => _status.event.att > 0 ? 0 : 1).set('att', get.attitude(player, target));
+ var target=lib.skill.olfengyan.logTarget(trigger,player);
+ var str=get.translation(target);event.target=target;
+ player.chooseControl().set('choiceList',[
+ '摸一张牌,然后交给'+str+'一张牌',
+ '令'+str+'摸一张牌,然后'+str+'弃置两张牌',
+ ]).set('ai',()=>_status.event.att>0?0:1).set('att',get.attitude(player,target));
'step 1'
- if (result.index == 0) {
+ if(result.index==0){
player.draw();
- player.chooseToGive(target, 'he', true);
+ player.chooseToGive(target,'he',true);
}
- else {
+ else{
target.draw();
- target.chooseToDiscard(2, 'he', true);
+ target.chooseToDiscard(2,'he',true);
}
},
},
//张燕
- olsuji: {
- audio: 2,
- trigger: { global: 'phaseUseBegin' },
- filter: function (event, player) {
- if (!event.player.isDamaged()) return false;
- return _status.connectMode && player.countCards('hes') || !_status.connectMode && player.hasCard(card => {
- return get.color(card) == 'black';
- }, 'hes');
+ olsuji:{
+ audio:2,
+ trigger:{global:'phaseUseBegin'},
+ filter:function(event,player){
+ if(!event.player.isDamaged()) return false;
+ return _status.connectMode&&player.countCards('hes')||!_status.connectMode&&player.hasCard(card=>{
+ return get.color(card)=='black';
+ },'hes');
},
- direct: true,
- content: [
- (event, map) => {
- var player = map.player, trigger = map.trigger;
- var next = player.chooseToUse();
- next.set('openskilldialog', `###${get.prompt('olsuji')}###将一张黑色牌当【杀】使用${player == trigger.player ? '' : `。若${get.translation(trigger.player)}受到了此【杀】的伤害,你获得其一张牌。`
- }`);
- next.set('norestore', true);
- next.set('_backupevent', 'olsuji_backup');
- next.set('addCount', false);
- next.set('logSkill', 'olsuji');
- next.set('custom', {
- add: {},
- replace: { window: function () { } }
+ direct:true,
+ content:[
+ (event,map)=>{
+ var player=map.player,trigger=map.trigger;
+ var next=player.chooseToUse();
+ next.set('openskilldialog',`###${get.prompt('olsuji')}###将一张黑色牌当【杀】使用${
+ player==trigger.player?'':`。若${get.translation(trigger.player)}受到了此【杀】的伤害,你获得其一张牌。`
+ }`);
+ next.set('norestore',true);
+ next.set('_backupevent','olsuji_backup');
+ next.set('addCount',false);
+ next.set('logSkill','olsuji');
+ next.set('custom',{
+ add:{},
+ replace:{window:function(){}}
});
next.backup('olsuji_backup');
},
- (event, map) => {
- if (map.result.bool) {
- var player = map.player, trigger = map.trigger;
- if (trigger.player.isIn() && trigger.player.hasHistory('damage', evt => {
- return evt.card && evt.card.storage && evt.card.storage.olsuji;
- }) && trigger.player.countGainableCards(player, 'he')) player.gainPlayerCard(trigger.player, 'he', true);
+ (event,map)=>{
+ if(map.result.bool){
+ var player=map.player,trigger=map.trigger;
+ if(trigger.player.isIn()&&trigger.player.hasHistory('damage',evt=>{
+ return evt.card&&evt.card.storage&&evt.card.storage.olsuji;
+ })&&trigger.player.countGainableCards(player,'he')) player.gainPlayerCard(trigger.player,'he',true);
}
},
],
- subSkill: {
- backup: {
- filterCard: function (card) {
- return get.itemtype(card) == 'card' && get.color(card) == 'black';
+ subSkill:{
+ backup:{
+ filterCard:function(card){
+ return get.itemtype(card)=='card'&&get.color(card)=='black';
},
- viewAs: {
- name: 'sha',
- storage: { olsuji: true },
+ viewAs:{
+ name:'sha',
+ storage:{olsuji:true},
},
- selectCard: 1,
- position: 'hes',
- ai1: function (card) {
- return 5 - get.value(card);
+ selectCard:1,
+ position:'hes',
+ ai1:function(card){
+ return 5-get.value(card);
},
- precontent: function () {
+ precontent:function(){
delete event.result.skill;
},
},
},
},
- ollangdao: {
- audio: 2,
- trigger: { player: 'useCardToPlayer' },
- filter: function (event, player) {
- if (event.card.name != 'sha') return false;
- return event.isFirstTarget && event.targets.length == 1 && player.getStorage('ollangdao').length < 3;
+ ollangdao:{
+ audio:2,
+ trigger:{player:'useCardToPlayer'},
+ filter:function(event,player){
+ if(event.card.name!='sha') return false;
+ return event.isFirstTarget&&event.targets.length==1&&player.getStorage('ollangdao').length<3;
},
- logTarget: 'target',
- onremove: true,
- check: function (event, player) {
- if (get.attitude(player, event.target) > 0) {
- if (player.getStorage('ollangdao').includes(1) && game.hasPlayer(current => {
- return player.canUse(event.card, current) && get.effect(current, event.card, player, player) > 0;
- })) return event.getRand() < 0.5;
+ logTarget:'target',
+ onremove:true,
+ check:function(event,player){
+ if(get.attitude(player,event.target)>0){
+ if(player.getStorage('ollangdao').includes(1)&&game.hasPlayer(current=>{
+ return player.canUse(event.card,current)&&get.effect(current,event.card,player,player)>0;
+ })) return event.getRand()<0.5;
return false;
}
- return event.target.getHp() <= 2 || player.getDamagedHp() > 1 || !player.hasCard({ color: 'black' }, 'hes');
+ return event.target.getHp()<=2||player.getDamagedHp()>1||!player.hasCard({color:'black'},'hes');
},
- content: function* (event, map) {
- var player = map.player, trigger = map.trigger, result = map.result;
- var target = trigger.target;
- var send = function (card, list) {
- var next = game.createEvent('ollangdao_choose', false);
+ content:function*(event,map){
+ var player=map.player,trigger=map.trigger,result=map.result;
+ var target=trigger.target;
+ var send=function(card,list){
+ var next=game.createEvent('ollangdao_choose',false);
next.setContent(lib.skill.ollangdao.contentx);
- next.set('card', card);
- next.set('list', list);
+ next.set('card',card);
+ next.set('list',list);
game.resume();
};
- var sendback = function (result, player) {
- if (!result) result = {};
- if (typeof result.index !== 'number' || result.index < 0) {
- result.index = [0, 1, 2].find(i => !event.player.getStorage('ollangdao').includes(i));
+ var sendback=function(result,player){
+ if(!result) result={};
+ if(typeof result.index!=='number'||result.index<0){
+ result.index=[0,1,2].find(i=>!event.player.getStorage('ollangdao').includes(i));
}
- results.push([player, result]);
+ results.push([player,result]);
};
- var ai_targets = [];
- var results = [];
- var players = [player, target];
- var withme = false, withol = false, withai = false;
- for (var i = 0; i < players.length; i++) {
- if (_status.connectMode) players[i].showTimer();
- var card = trigger.card, list = player.getStorage('ollangdao');
- if (players[i].isOnline()) {
- withol = true;
- players[i].send(send, card, list);
+ var ai_targets=[];
+ var results=[];
+ var players=[player,target];
+ var withme=false,withol=false,withai=false;
+ for(var i=0;i {
- return !trigger.targets.includes(current) && player.canUse(trigger.card, current) && get.effect(current, trigger.card, player, target) < 0;
- })) list.removeArray([0, 2]);
- if (player.getStorage('ollangdao').includes(2)) list.remove(0);
+ if(ai_targets.length){
+ for(var i=0;i{
+ return !trigger.targets.includes(current)&&player.canUse(trigger.card,current)&&get.effect(current,trigger.card,player,target)<0;
+ })) list.removeArray([0,2]);
+ if(player.getStorage('ollangdao').includes(2)) list.remove(0);
}
- else {
- if (!game.hasPlayer(current => {
- return !trigger.targets.includes(current) && player.canUse(trigger.card, current) && get.effect(current, trigger.card, player, target) > 0;
+ else{
+ if(!game.hasPlayer(current=>{
+ return !trigger.targets.includes(current)&&player.canUse(trigger.card,current)&&get.effect(current,trigger.card,player,target)>0;
})) list.remove(1);
- if (!list.includes(1)) list.remove(0);
+ if(!list.includes(1)) list.remove(0);
}
- if (list.length) index = list.randomGet();
- sendback({ index: index }, target);
- ai_targets.splice(i--, 1);
+ if(list.length) index=list.randomGet();
+ sendback({index:index},target);
+ ai_targets.splice(i--,1);
}
}
- if (ai_targets.length) {
+ if(ai_targets.length){
ai_targets.randomSort();
- setTimeout(function () {
- event.interval = setInterval(function () {
- var target = ai_targets.shift();
- var list = [0, 1, 2].removeArray(player.getStorage('ollangdao'));
- var index = list[0];
- if (get.attitude(target, player) < 0) {
- if (!game.hasPlayer(current => {
- return !trigger.targets.includes(current) && player.canUse(trigger.card, current) && get.effect(current, trigger.card, player, target) < 0;
- })) list.removeArray([0, 2]);
- if (player.getStorage('ollangdao').includes(2)) list.remove(0);
+ setTimeout(function(){
+ event.interval=setInterval(function(){
+ var target=ai_targets.shift();
+ var list=[0,1,2].removeArray(player.getStorage('ollangdao'));
+ var index=list[0];
+ if(get.attitude(target,player)<0){
+ if(!game.hasPlayer(current=>{
+ return !trigger.targets.includes(current)&&player.canUse(trigger.card,current)&&get.effect(current,trigger.card,player,target)<0;
+ })) list.removeArray([0,2]);
+ if(player.getStorage('ollangdao').includes(2)) list.remove(0);
}
- else {
- if (!game.hasPlayer(current => {
- return !trigger.targets.includes(current) && player.canUse(trigger.card, current) && get.effect(current, trigger.card, player, target) > 0;
+ else{
+ if(!game.hasPlayer(current=>{
+ return !trigger.targets.includes(current)&&player.canUse(trigger.card,current)&&get.effect(current,trigger.card,player,target)>0;
})) list.remove(1);
- if (!list.includes(1)) list.remove(0);
+ if(!list.includes(1)) list.remove(0);
}
- if (list.length) index = list.randomGet();
- sendback({ index: index }, target);
- if (!ai_targets.length) {
+ if(list.length) index=list.randomGet();
+ sendback({index:index},target);
+ if(!ai_targets.length){
clearInterval(event.interval);
- if (withai) game.resume();
+ if(withai) game.resume();
}
- }, _status.connectMode ? 750 : 75);
- }, 500);
+ },_status.connectMode?750:75);
+ },500);
}
}
- if (withme) {
- result = yield next;
- if (_status.connectMode) {
- game.me.unwait(result, game.me);
+ if(withme){
+ result=yield next;
+ if(_status.connectMode){
+ game.me.unwait(result,game.me);
}
- else {
- if (!result) result = {};
- if (typeof result.index !== 'number' || result.index < 0) {
- result.index = [0, 1, 2].find(i => !event.player.getStorage('ollangdao').includes(i));
+ else{
+ if(!result) result={};
+ if(typeof result.index!=='number'||result.index<0){
+ result.index=[0,1,2].find(i=>!event.player.getStorage('ollangdao').includes(i));
}
- results.push([player, result]);
+ results.push([player,result]);
}
}
- if (withol && !event.resultOL) {
+ if(withol&&!event.resultOL){
game.pause();
yield null;
}
- if (ai_targets.length > 0) {
- withai = true;
+ if(ai_targets.length>0){
+ withai=true;
game.pause();
yield null;
}
- if (_status.connectMode) {
- for (var i of [player, target]) i.hideTimer();
+ if(_status.connectMode){
+ for(var i of [player,target]) i.hideTimer();
}
- var chosenCount = [0, 0, 0];
- results.sort((a, b) => lib.sort.seat(a[0], b[0]));
+ var chosenCount=[0,0,0];
+ results.sort((a,b)=>lib.sort.seat(a[0],b[0]));
player.when('useCardAfter')
.assign({
- card: trigger.card
+ card:trigger.card
})
- .then(() => {
- var card = get.info(event.name).card;
- var dieEvts = game.getGlobalHistory('everything', evt => evt.name == 'die');
- if (trigger.card == card && !game.hasPlayer2(current => {
- for (var evt of dieEvts) {
- if (evt.player != current) continue;
- var evtx = evt.getParent(2);
- if (evtx.name != 'damage') continue;
- if (evtx.card && evtx.card == card) return true;
+ .then(()=>{
+ var card=get.info(event.name).card;
+ var dieEvts=game.getGlobalHistory('everything',evt=>evt.name=='die');
+ if(trigger.card==card&&!game.hasPlayer2(current=>{
+ for(var evt of dieEvts){
+ if(evt.player!=current) continue;
+ var evtx=evt.getParent(2);
+ if(evtx.name!='damage') continue;
+ if(evtx.card&&evtx.card==card) return true;
}
return false;
- }, true)) {
- var toRemove = card.storage.ollangdao_remove;
- var list = [0, 1, 2].filter(i => (toRemove >> i) & 1);
- if (!list.length) return;
- player.markAuto('ollangdao', list);
- game.log(player, '移去了', '#g【狼蹈】', '的', '#y选项' + list.map(i => {
- return get.cnNumber(i + 1, true);
+ },true)){
+ var toRemove=card.storage.ollangdao_remove;
+ var list=[0,1,2].filter(i=>(toRemove>>i)&1);
+ if(!list.length) return;
+ player.markAuto('ollangdao',list);
+ game.log(player,'移去了','#g【狼蹈】','的','#y选项'+list.map(i=>{
+ return get.cnNumber(i+1,true);
}).join('、'));
}
});
- if (!trigger.card.storage) trigger.card.storage = {};
- if (!trigger.card.storage.ollangdao_remove) trigger.card.storage.ollangdao_remove = 0;
- var config = [['伤害+1', 'fire'], ['目标+1', 'wood'], ['不能响应', 'water']];
- for (var res of results) {
- var target = res[0], result = res[1];
- if (!target || !result) continue;
- var ind = result.index;
- var conf = config[ind];
- trigger.card.storage.ollangdao_remove |= 1 << ind;
- target.popup(conf[0], conf[1]);
- game.log(target, '选择令', trigger.card, `#g${conf[0]}`);
+ if(!trigger.card.storage) trigger.card.storage={};
+ if(!trigger.card.storage.ollangdao_remove) trigger.card.storage.ollangdao_remove=0;
+ var config=[['伤害+1','fire'],['目标+1','wood'],['不能响应','water']];
+ for(var res of results){
+ var target=res[0],result=res[1];
+ if(!target||!result) continue;
+ var ind=result.index;
+ var conf=config[ind];
+ trigger.card.storage.ollangdao_remove|=1< {
- return !_status.event.targets.includes(target) && player.canUse(_status.event.card, target);
- }).set('targets', trigger.targets).set('ai', target => {
- var player = _status.event.player;
- return get.effect(target, _status.event.card, player, player);
- }).set('card', trigger.card);
- if (result.bool) {
- if (!event.isMine() && !event.isOnline()) game.delayex();
- var targets = result.targets;
+ result=yield player.chooseTarget(`狼蹈:为${get.translation(trigger.card)}额外指定至多${get.cnNumber(extraTargetNum)}个目标`,(card,player,target)=>{
+ return !_status.event.targets.includes(target)&&player.canUse(_status.event.card,target);
+ }).set('targets',trigger.targets).set('ai',target=>{
+ var player=_status.event.player;
+ return get.effect(target,_status.event.card,player,player);
+ }).set('card',trigger.card);
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayex();
+ var targets=result.targets;
player.line(targets);
trigger.targets.addArray(targets);
- game.log(targets, '也成为了', trigger.card, '的目标');
+ game.log(targets,'也成为了',trigger.card,'的目标');
}
},
- contentx: function () {
+ contentx:function(){
'step 0'
- var name = get.translation(card);
- var choices = [], choiceList = [
+ var name=get.translation(card);
+ var choices=[],choiceList=[
`令${name}伤害基数+1`,
`令${name}可以多选择一个目标`,
`令${name}不可被响应`
];
- [0, 1, 2].forEach((item, index) => {
- if (event.list.includes(item)) {
- choiceList[index] = `${choiceList[index]}`
+ [0,1,2].forEach((item,index)=>{
+ if(event.list.includes(item)){
+ choiceList[index]=`${choiceList[index]}`
}
- else choices.push(`选项${get.cnNumber(index + 1, true)}`);
+ else choices.push(`选项${get.cnNumber(index+1,true)}`);
});
- game.me.chooseControl(choices).set('prompt', '狼蹈:请选择一项').set('choiceList', choiceList).set('ai', () => {
+ game.me.chooseControl(choices).set('prompt','狼蹈:请选择一项').set('choiceList',choiceList).set('ai',()=>{
return _status.event.controls.randomGet();
});
'step 1'
- event.result = { index: ['选项一', '选项二', '选项三'].indexOf(result.control) };
+ event.result={index:['选项一','选项二','选项三'].indexOf(result.control)};
},
- intro: {
- content: (storage, player) => `已移除选项${storage.map(i => get.cnNumber(i + 1, true)).join('、')}`,
+ intro:{
+ content:(storage,player)=>`已移除选项${storage.map(i=>get.cnNumber(i+1,true)).join('、')}`,
},
},
//张既
- skill_zhangji_A: {
- audio: 2,
- trigger: { player: 'useCardToPlayered' },
- filter: function (event, player) {
- if (player.countMark('skill_zhangji_A_count') >= player.hp) return false;
- return event.target != player && event.target.countCards('h') && player.isPhaseUsing();
+ skill_zhangji_A:{
+ audio:2,
+ trigger:{player:'useCardToPlayered'},
+ filter:function(event,player){
+ if(player.countMark('skill_zhangji_A_count')>=player.hp) return false;
+ return event.target!=player&&event.target.countCards('h')&&player.isPhaseUsing();
},
- check: function (event, player) {
- return get.attitude(player, event.target) < 0;
+ check:function(event,player){
+ return get.attitude(player,event.target)<0;
},
- logTarget: 'target',
- content: function () {
+ logTarget:'target',
+ content:function(){
'step 0'
- player.addTempSkill('skill_zhangji_A_count', 'phaseUseAfter');
- player.addMark('skill_zhangji_A_count', 1, false);
+ player.addTempSkill('skill_zhangji_A_count','phaseUseAfter');
+ player.addMark('skill_zhangji_A_count',1,false);
player.viewHandcards(trigger.target);
- var list = [], choiceList = [
- '弃置' + get.translation(trigger.target) + '的一张牌,然后若弃置的牌的是能造成火焰伤害的牌,你摸一张牌',
- '重铸' + get.translation(trigger.target) + '手牌中的所有【杀】和【决斗】',
- '你与' + get.translation(trigger.target) + '互相对对方造成1点伤害',
+ var list=[],choiceList=[
+ '弃置'+get.translation(trigger.target)+'的一张牌,然后若弃置的牌的是能造成火焰伤害的牌,你摸一张牌',
+ '重铸'+get.translation(trigger.target)+'手牌中的所有【杀】和【决斗】',
+ '你与'+get.translation(trigger.target)+'互相对对方造成1点伤害',
];
list.push('选项一');
- if (trigger.target.countCards('h', { name: ['sha', 'juedou'] })) list.push('选项二');
- else choiceList[1] = '' + choiceList[1] + '';
- if (!trigger.target.countCards('h', { name: 'shan' })) list.push('选项三');
- else choiceList[2] = '' + choiceList[2] + '';
- player.chooseControl(list).set('prompt', get.prompt('tspowei', target)).set('choiceList', choiceList).set('ai', function () {
- var player = _status.event.player, target = _status.event.target;
- if (list.includes('选项三') && player.hp + player.countCards('hs', { name: 'tao' }) > 2) return '选项三';
- if (list.includes('选项二') && target.countCards('h', { name: ['sha', 'juedou'] }) > 1) return '选项二';
+ if(trigger.target.countCards('h',{name:['sha','juedou']})) list.push('选项二');
+ else choiceList[1]=''+choiceList[1]+'';
+ if(!trigger.target.countCards('h',{name:'shan'})) list.push('选项三');
+ else choiceList[2]=''+choiceList[2]+'';
+ player.chooseControl(list).set('prompt',get.prompt('tspowei',target)).set('choiceList',choiceList).set('ai',function(){
+ var player=_status.event.player,target=_status.event.target;
+ if(list.includes('选项三')&&player.hp+player.countCards('hs',{name:'tao'})>2) return '选项三';
+ if(list.includes('选项二')&&target.countCards('h',{name:['sha','juedou']})>1) return'选项二';
return '选项一';
- }).set('target', trigger.target);
+ }).set('target',trigger.target);
'step 1'
- game.log(player, '选择了', '#y' + result.control);
- switch (result.control) {
+ game.log(player,'选择了','#y'+result.control);
+ switch(result.control){
case '选项一':
- player.discardPlayerCard('he', trigger.target, 'visible', true);
+ player.discardPlayerCard('he',trigger.target,'visible',true);
break;
case '选项二':
- var cards = trigger.target.getCards('h', { name: ['sha', 'juedou'] }).filter(card => trigger.target.canRecast(card));
+ var cards=trigger.target.getCards('h',{name:['sha','juedou']}).filter(card=>trigger.target.canRecast(card));
trigger.target.recast(cards);
event.finish();
break;
@@ -1799,150 +1800,150 @@ game.import('character', function (lib, game, ui, get, ai, _status) {
break;
}
'step 2'
- if (result.bool && get.tag(result.cards[0], 'fireDamage')) player.draw();
+ if(result.bool&&get.tag(result.cards[0],'fireDamage')) player.draw();
},
- subSkill: {
- count: {
- charlotte: true,
- onremove: true,
+ subSkill:{
+ count:{
+ charlotte:true,
+ onremove:true,
},
},
},
- skill_zhangji_B: {
- getNum: function (name) {
- var num = 0;
- if (name == 'litong') num = 1;
- else switch (game.getRarity(name)) {
- case 'junk': num = 1; break;
- case 'rare': num = 2; break;
- case 'epic': num = 3; break;
- case 'legend': num = 4; break;
+ skill_zhangji_B:{
+ getNum:function(name){
+ var num=0;
+ if(name=='litong') num=1;
+ else switch(game.getRarity(name)){
+ case 'junk':num=1;break;
+ case 'rare':num=2;break;
+ case 'epic':num=3;break;
+ case 'legend':num=4;break;
}
return num;
},
- getCharacter: function (list) {
- var listx = [], num = 0;
- for (var name of list) {
- var numx = lib.skill.skill_zhangji_B.getNum(name);
- if (numx > num) {
- num = numx;
- listx = [name];
+ getCharacter:function(list){
+ var listx=[],num=0;
+ for(var name of list){
+ var numx=lib.skill.skill_zhangji_B.getNum(name);
+ if(numx>num){
+ num=numx;
+ listx=[name];
}
- else if (numx == num) listx.push(name);
+ else if(numx==num) listx.push(name);
}
return listx;
},
- group: 'skill_zhangji_B_jieming',
- audio: 2,
- trigger: { player: 'dying' },
- skillAnimation: true,
- animationColor: 'water',
- direct: true,
- content: function () {
+ group:'skill_zhangji_B_jieming',
+ audio:2,
+ trigger:{player:'dying'},
+ skillAnimation:true,
+ animationColor:'water',
+ direct:true,
+ content:function(){
'step 0'
- if (!_status.characterlist) lib.skill.pingjian.initList();
- player.chooseTarget(get.prompt('skill_zhangji_B'), '令一名其他角色选择是否更换武将牌', lib.filter.notMe).set('ai', function (target) {
- var att = get.attitude(_status.event.player, target);
- var num = lib.skill.skill_zhangji_B.getNum(target.name);
- if (target.name2 != undefined) num = Math.min(num, lib.skill.skill_zhangji_B.getNum(target.name2));
- return att * (4 - num);
+ if(!_status.characterlist) lib.skill.pingjian.initList();
+ player.chooseTarget(get.prompt('skill_zhangji_B'),'令一名其他角色选择是否更换武将牌',lib.filter.notMe).set('ai',function(target){
+ var att=get.attitude(_status.event.player,target);
+ var num=lib.skill.skill_zhangji_B.getNum(target.name);
+ if(target.name2!=undefined) num=Math.min(num,lib.skill.skill_zhangji_B.getNum(target.name2));
+ return att*(4-num);
});
'step 1'
- if (result.bool) {
- var target = result.targets[0];
- event.target = target;
- player.logSkill('skill_zhangji_B', target);
- var list = [];
- for (var i = 0; i < _status.characterlist.length; i++) {
- if (lib.character[_status.characterlist[i]][1] == 'wei') list.push(_status.characterlist[i]);
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('skill_zhangji_B',target);
+ var list=[];
+ for(var i=0;i<_status.characterlist.length;i++){
+ if(lib.character[_status.characterlist[i]][1]=='wei') list.push(_status.characterlist[i]);
}
- list = list.randomGets(5);
- var bolDialog = ['请选择替换的武将', [list, 'character']];
- target.chooseButton(bolDialog).set('ai', function (button) {
- var target = _status.event.player;
- var num = lib.skill.skill_zhangji_B.getNum(target.name);
- if (target.name2 != undefined) num = Math.min(num, lib.skill.skill_zhangji_B.getNum(target.name2));
- return lib.skill.skill_zhangji_B.getNum(button.link) - num;
+ list=list.randomGets(5);
+ var bolDialog=['请选择替换的武将',[list,'character']];
+ target.chooseButton(bolDialog).set('ai',function(button){
+ var target=_status.event.player;
+ var num=lib.skill.skill_zhangji_B.getNum(target.name);
+ if(target.name2!=undefined) num=Math.min(num,lib.skill.skill_zhangji_B.getNum(target.name2));
+ return lib.skill.skill_zhangji_B.getNum(button.link)-num;
});
}
else event.finish();
'step 2'
- if (result.bool) {
- event.character = result.links[0];
- if (target.name2 != undefined) target.chooseControl(target.name1, target.name2).set('prompt', '请选择要更换的武将牌').set('ai', function () {
- return lib.skill.skill_zhangji_B.getNum(target.name) < lib.skill.skill_zhangji_B.getNum(target.name2) ? target.name : target.name2;
+ if(result.bool){
+ event.character=result.links[0];
+ if(target.name2!=undefined) target.chooseControl(target.name1,target.name2).set('prompt','请选择要更换的武将牌').set('ai',function(){
+ return lib.skill.skill_zhangji_B.getNum(target.name) 2) return Math.min(5, target.maxHp) - target.countCards('h');
- return att / 3;
+ player.chooseTarget(get.prompt('skill_zhangji_B'),'令一名手牌数小于其体力上限的角色摸三张牌,然后其将手牌数调整至其体力上限值',function(card,player,target){
+ return target.countCards('h')2) return Math.min(5,target.maxHp)-target.countCards('h');
+ return att/3;
});
'step 2'
- if (result.bool) {
- var target = result.targets[0];
- event.target = target;
- player.logSkill('skill_zhangji_B_jieming', target);
+ if(result.bool){
+ var target=result.targets[0];
+ event.target=target;
+ player.logSkill('skill_zhangji_B_jieming',target);
target.draw(3);
}
else event.finish();
'step 3'
- if (target.countCards('h') > target.maxHp) target.chooseToDiscard('h', target.countCards('h') - target.maxHp, true);
- if (event.count > 0 && game.hasPlayer(function (current) {
- return current.countCards('h') < current.maxHp;
- }) && player.hasSkill('skill_zhangji_B')) event.goto(1);
+ if(target.countCards('h')>target.maxHp) target.chooseToDiscard('h',target.countCards('h')-target.maxHp,true);
+ if(event.count>0&&game.hasPlayer(function(current){
+ return current.countCards('h') 1) {
- if (player.hasSkillTag('jueqing', false, target)) return [1, -2];
- var max = 0;
- var players = game.filterPlayer();
- for (var i = 0; i < players.length; i++) {
- if (get.attitude(target, players[i]) > 0) {
- max = Math.max(Math.min(5, players[i].hp) - players[i].countCards('h'), max);
+ ai:{
+ maixie:true,
+ maixie_hp:true,
+ effect:{
+ target:function(card,player,target,current){
+ if(get.tag(card,'damage')&&target.hp>1){
+ if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
+ var max=0;
+ var players=game.filterPlayer();
+ for(var i=0;i0){
+ max=Math.max(Math.min(5,players[i].hp)-players[i].countCards('h'),max);
}
}
- switch (max) {
- case 0: return 2;
- case 1: return 1.5;
- case 2: return [1, 2];
- default: return [0, max];
+ switch(max){
+ case 0:return 2;
+ case 1:return 1.5;
+ case 2:return [1,2];
+ default:return [0,max];
}
}
- if ((card.name == 'tao' || card.name == 'caoyao') &&
- target.hp > 1 && target.countCards('h') <= target.hp) return [0, 0];
+ if((card.name=='tao'||card.name=='caoyao')&&
+ target.hp>1&&target.countCards('h')<=target.hp) return [0,0];
}
},
},
@@ -1950,192 +1951,192 @@ game.import('character', function (lib, game, ui, get, ai, _status) {
},
},
//费祎
- yanru: {
- audio: 2,
- enable: 'phaseUse',
- filter: function (event, player) {
- if (!player.countCards('h')) return false;
- var num = player.countCards('h') % 2;
- return !player.hasSkill('yanru_' + num);
+ yanru:{
+ audio:2,
+ enable:'phaseUse',
+ filter:function(event,player){
+ if(!player.countCards('h')) return false;
+ var num=player.countCards('h')%2;
+ return !player.hasSkill('yanru_'+num);
},
- filterCard: function (card, player) {
- if (player.countCards('h') && player.countCards('h') % 2 == 0) return lib.filter.cardDiscardable(card, player);
+ filterCard:function(card,player){
+ if(player.countCards('h')&&player.countCards('h')%2==0) return lib.filter.cardDiscardable(card,player);
return false;
},
- selectCard: function () {
- var player = _status.event.player;
- if (player.countCards('h') && player.countCards('h') % 2 == 0) return [player.countCards('h') / 2, Infinity];
+ selectCard:function(){
+ var player=_status.event.player;
+ if(player.countCards('h')&&player.countCards('h')%2==0) return [player.countCards('h')/2,Infinity];
return -1;
},
- prompt: function () {
- var player = _status.event.player;
+ prompt:function(){
+ var player=_status.event.player;
return [
- (player.countCards('h') ? '弃置至少一半的手牌,然后' : '') + '摸三张牌',
+ (player.countCards('h')?'弃置至少一半的手牌,然后':'')+'摸三张牌',
'摸三张牌,然后弃置至少一半的手牌',
- ][player.countCards('h') % 2];
+ ][player.countCards('h')%2];
},
- check: function (card) {
- var player = _status.event.player;
- if (player.hasSkill('hezhong')) {
- if (player.countCards('h') - ui.selected.cards.length > 1) return 1 / (get.value(card) || 0.5);
+ check:function(card){
+ var player=_status.event.player;
+ if(player.hasSkill('hezhong')){
+ if(player.countCards('h')-ui.selected.cards.length>1) return 1/(get.value(card)||0.5);
return 0;
}
- if (ui.selected.cards.length < player.countCards('h') / 2) return 5 - get.value(card);
+ if(ui.selected.cards.length {
- var player = _status.event.player;
- if (player.hasSkill('hezhong') && player.countCards('h') - ui.selected.cards.length > 1) return 1 / (get.value(card) || 0.5);
- if (!player.hasSkill('hezhong') && ui.selected.cards.length < Math.floor(player.countCards('h') / 2)) return 1 / (get.value(card) || 0.5);
+ player.chooseToDiscard('h','宴如:弃置至少一半手牌',[Math.floor(player.countCards('h')/2),Infinity],true).set('ai',card=>{
+ var player=_status.event.player;
+ if(player.hasSkill('hezhong')&&player.countCards('h')-ui.selected.cards.length>1) return 1/(get.value(card)||0.5);
+ if(!player.hasSkill('hezhong')&&ui.selected.cards.length {
- var player = _status.event.player;
- var num = _status.event.player;
- if (player.getCards('h').reduce(function (num, card) {
- return num + (get.number(card, player) || 0);
- }, 0) > num * 2) return 0;
+ if(player.hasSkill('hezhong_0')) event._result={index:1};
+ else if(player.hasSkill('hezhong_1')) event._result={index:0};
+ else{
+ player.chooseControl().set('choiceList',[
+ '本回合使用点数大于'+num+'的普通锦囊牌额外结算一次',
+ '本回合使用点数小于'+num+'的普通锦囊牌额外结算一次',
+ ]).set('ai',()=>{
+ var player=_status.event.player;
+ var num=_status.event.player;
+ if(player.getCards('h').reduce(function(num,card){
+ return num+(get.number(card,player)||0);
+ },0)>num*2) return 0;
return 1;
- }).set('num', num);
+ }).set('num',num);
}
'step 3'
- var skill = 'hezhong_' + result.index;
+ var skill='hezhong_'+result.index;
player.addTempSkill(skill);
- player.markAuto(skill, [num]);
+ player.markAuto(skill,[num]);
},
- subSkill: {
- '0': {
- charlotte: true,
- onremove: true,
- marktext: '>',
- intro: {
- markcount: (list) => {
- var list2 = [1, 11, 12, 13];
- return list.reduce((str, num) => {
- if (list2.includes(num)) return str + ['A', 'J', 'Q', 'K'][list2.indexOf(num)];
- return str + parseFloat(num);
- }, '');
+ subSkill:{
+ '0':{
+ charlotte:true,
+ onremove:true,
+ marktext:'>',
+ intro:{
+ markcount:(list)=>{
+ var list2=[1,11,12,13];
+ return list.reduce((str,num)=>{
+ if(list2.includes(num)) return str+['A','J','Q','K'][list2.indexOf(num)];
+ return str+parseFloat(num);
+ },'');
},
- content: '使用的下一张点数大于$的普通锦囊牌额外结算一次',
+ content:'使用的下一张点数大于$的普通锦囊牌额外结算一次',
},
- audio: 'hezhong',
- trigger: { player: 'useCard' },
- filter: function (event, player) {
- if (get.type(event.card) != 'trick') return false;
- if (!event.targets.length) return false;
- var num = get.number(event.card, player);
- return typeof num == 'number' && player.getStorage('hezhong_0').some(numx => num > numx);
+ audio:'hezhong',
+ trigger:{player:'useCard'},
+ filter:function(event,player){
+ if(get.type(event.card)!='trick') return false;
+ if(!event.targets.length) return false;
+ var num=get.number(event.card,player);
+ return typeof num=='number'&&player.getStorage('hezhong_0').some(numx=>num>numx);
},
- forced: true,
- usable: 1,
- content: function () {
+ forced:true,
+ usable:1,
+ content:function(){
player.unmarkSkill('hezhong_0');
trigger.effectCount++;
- game.log(trigger.card, '额外结算一次');
+ game.log(trigger.card,'额外结算一次');
},
- ai: {
- effect: {
- player: function (card, player, target) {
- if (card.name == 'tiesuo' && (!player.storage.counttrigger || !player.storage.counttrigger.hezhong_0)) return 'zerotarget';
+ ai:{
+ effect:{
+ player:function(card,player,target){
+ if(card.name=='tiesuo'&&(!player.storage.counttrigger||!player.storage.counttrigger.hezhong_0)) return 'zerotarget';
},
},
},
},
- '1': {
- charlotte: true,
- onremove: true,
- marktext: '<',
- intro: {
- markcount: (list) => {
- var list2 = [1, 11, 12, 13];
- return list.reduce((str, num) => {
- if (list2.includes(num)) return str + ['A', 'J', 'Q', 'K'][list2.indexOf(num)];
- return str + parseFloat(num);
- }, '');
+ '1':{
+ charlotte:true,
+ onremove:true,
+ marktext:'<',
+ intro:{
+ markcount:(list)=>{
+ var list2=[1,11,12,13];
+ return list.reduce((str,num)=>{
+ if(list2.includes(num)) return str+['A','J','Q','K'][list2.indexOf(num)];
+ return str+parseFloat(num);
+ },'');
},
- content: '使用的下一张点数小于$的普通锦囊牌额外结算一次',
+ content:'使用的下一张点数小于$的普通锦囊牌额外结算一次',
},
- audio: 'hezhong',
- trigger: { player: 'useCard' },
- filter: function (event, player) {
- if (get.type(event.card) != 'trick') return false;
- if (!event.targets.length) return false;
- var num = get.number(event.card, player);
- return typeof num == 'number' && player.getStorage('hezhong_1').some(numx => num < numx);
+ audio:'hezhong',
+ trigger:{player:'useCard'},
+ filter:function(event,player){
+ if(get.type(event.card)!='trick') return false;
+ if(!event.targets.length) return false;
+ var num=get.number(event.card,player);
+ return typeof num=='number'&&player.getStorage('hezhong_1').some(numx=>num将任意“缚豕”牌置入弃牌堆并摸等量的牌,视为使用一张【杀】并执行等量项 ',
player.getExpansions('olfushi'),
- [['额外目标', '伤害-1', '伤害+1'], 'tdnodes'],
+ [['额外目标','伤害-1','伤害+1'],'tdnodes'],
'hidden'
);
},
- filter: function (button) {
- const cards = ui.selected.buttons.filter(button => typeof button.link == 'object');
- if (cards.length >= 3 && typeof button.link == 'string') return false;
+ filter:function(button){
+ const cards=ui.selected.buttons.filter(button=>typeof button.link=='object');
+ if(cards.length>=3&&typeof button.link=='string') return false;
return true;
},
- select: [2, Infinity],
- filterOk: () => {
- if (!ui.selected.buttons.length) return false;
- const controls = ui.selected.buttons.filter(button => typeof button.link == 'string');
- const cards = ui.selected.buttons.filter(button => typeof button.link == 'object');
- if (cards.length >= 3) {
- const dialog = get.event().dialog;
- if (dialog && dialog.buttons) {
- dialog.buttons.forEach(button => {
- if (typeof button.link != 'string') return;
+ select:[2,Infinity],
+ filterOk:()=>{
+ if(!ui.selected.buttons.length) return false;
+ const controls=ui.selected.buttons.filter(button=>typeof button.link=='string');
+ const cards=ui.selected.buttons.filter(button=>typeof button.link=='object');
+ if(cards.length>=3){
+ const dialog=get.event().dialog;
+ if(dialog&&dialog.buttons){
+ dialog.buttons.forEach(button=>{
+ if(typeof button.link!='string') return;
button.classList.remove('selectable');
button.classList.remove('selected');
ui.selected.buttons.remove(button);
@@ -2202,270 +2203,270 @@ game.import('character', function (lib, game, ui, get, ai, _status) {
}
return true;
}
- return cards.length == controls.length;
+ return cards.length==controls.length;
},
- check: function (button) {
- const player = get.player();
- const card = new lib.element.VCard({ name: 'sha', isCard: true });
- const targets = game.filterPlayer(target => {
- return player.canUse(card, target);
+ check:function(button){
+ const player=get.player();
+ const card=new lib.element.VCard({name:'sha',isCard:true});
+ const targets=game.filterPlayer(target=>{
+ return player.canUse(card,target);
});
- const num0 = targets.filter(target => get.effect(target, card, player, player) > 0).length;
- if (num0 <= 0) return 0;
- const num1 = Math.max(0, num0 - 1);
- const num2 = targets.length - num1;
- const num3 = player.getExpansions('olfushi').length;
+ const num0=targets.filter(target=>get.effect(target,card,player,player)>0).length;
+ if(num0<=0) return 0;
+ const num1=Math.max(0,num0-1);
+ const num2=targets.length-num1;
+ const num3=player.getExpansions('olfushi').length;
let list;
- if ((num1 > 0 && num2 > 0) || (num1 == 0 && num2 == 0)) {
- switch (num3) {
+ if((num1>0&&num2>0)||(num1==0&&num2==0)){
+ switch(num3){
case 1:
- list = [['额外目标', '伤害+1'].randomGet()];
+ list=[['额外目标','伤害+1'].randomGet()];
break;
case 2:
- list = [['额外目标', '伤害+1'].randomGet(), '伤害-1'];
+ list=[['额外目标','伤害+1'].randomGet(),'伤害-1'];
break;
default:
- list = ['额外目标', '伤害-1', '伤害+1'];
+ list=['额外目标','伤害-1','伤害+1'];
break;
}
}
- else if (num2 == 0) {
- switch (num3) {
+ else if(num2==0){
+ switch(num3){
case 1:
- list = ['伤害+1'];
+ list=['伤害+1'];
break;
case 2:
- list = ['额外目标', '伤害+1'];
+ list=['额外目标','伤害+1'];
break;
default:
- list = ['额外目标', '伤害-1', '伤害+1'];
+ list=['额外目标','伤害-1','伤害+1'];
break;
}
}
- else if (num1 == 0) {
- switch (num3) {
+ else if(num1==0){
+ switch(num3){
case 1:
- list = ['伤害+1'];
+ list=['伤害+1'];
break;
default:
- list = ['伤害-1', '伤害+1'];
+ list=['伤害-1','伤害+1'];
break;
}
}
- if (typeof button.link == 'string') {
- if (list.includes(button.link)) return 114514;
+ if(typeof button.link=='string'){
+ if(list.includes(button.link)) return 114514;
return -1;
}
- else {
- const cards = ui.selected.buttons.filter(button => typeof button.link == 'object');
- if (list.length == 3 && (player.getHp() <= 2 || cards.length < num3 - 1) || cards.length < list.length) return 1 / (get.value(button.link) || 0.5);
+ else{
+ const cards=ui.selected.buttons.filter(button=>typeof button.link=='object');
+ if(list.length==3&&(player.getHp()<=2||cards.length