This commit is contained in:
Spmario233 2022-12-05 00:16:32 +08:00
parent cb6b81e7b5
commit 6d06ef09de
84 changed files with 2782 additions and 484 deletions

BIN
audio/die/dc_caiyang.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/die/dengzhong.mp3 Normal file

Binary file not shown.

BIN
audio/die/dukui.mp3 Normal file

Binary file not shown.

BIN
audio/die/liuhui.mp3 Normal file

Binary file not shown.

BIN
audio/die/ol_dianwei.mp3 Normal file

Binary file not shown.

BIN
audio/die/wangyan.mp3 Normal file

Binary file not shown.

BIN
audio/die/xiahouxuan.mp3 Normal file

Binary file not shown.

BIN
audio/die/zhangfen.mp3 Normal file

Binary file not shown.

BIN
audio/skill/cihuang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/cihuang2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchaixie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchaixie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfanyin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfanyin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcgeyuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcgeyuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcgusuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcgusuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjiaofeng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjiaofeng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjieshu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjieshu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcliehou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcliehou2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcpeiqi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcpeiqi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshuhe1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshuhe2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcwanglu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcwanglu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxianzhu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxianzhu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxunji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxunji2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dzgengzhan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dzgengzhan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dzkanpo1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dzkanpo2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olhuanfu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olhuanfu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olningwu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olningwu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olqingyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olqingyi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzeyue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/olzeyue2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/sanku1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sanku2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yangkuang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yangkuang2.mp3 Normal file

Binary file not shown.

View File

@ -16,7 +16,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(evt.jinchan){
var type=get.type(evt.card,'trick');
if(type=='basic'||type=='trick'){
evt.cancel();
evt.neutralize();
}
}
player.draw(2);
@ -544,18 +544,25 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
},
g_jinchan2:{
trigger:{player:'discardAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
forced:true,
cardSkill:true,
filter:function(event,player){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='jinchan') return true;
if(event.type!='discard') return false;
var evt=event.getl(player);
if(!evt||!evt.cards2||!evt.cards2.length) return false;
for(var i of evt.cards2){
if(i.name=='jinchan') return true;
}
return false;
},
content:function(){
var num=0;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='jinchan') num++;
var num=0,cards=trigger.getl(player).cards2;
for(var i=0;i<cards.length;i++){
if(cards[i].name=='jinchan') num++;
}
if(num){
player.draw(num);
@ -614,7 +621,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
jinchan:'金蝉脱壳',
g_jinchan2:'金蝉脱壳',
g_jinchan2_info:'当你因弃置而失去【金蝉脱壳】时,你摸一张牌',
jinchan_info:'当你成为其他角色使用牌的目标时,若你的手牌里只有【金蝉脱壳】,使目标锦囊牌或基本牌对你无效,你摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
jinchan_info:'其他角色使用的基本牌或普通牌对你生效时,若你的所有手牌均为【金蝉脱壳】,则你可以使用此牌。你令此牌对你无效并摸两张牌。当你因弃置而失去【金蝉脱壳】时,你摸一张牌。',
fulei:'浮雷',
fulei_info:'出牌阶段对你使用。你将【浮雷】置入判定区。若判定结果为♠则目标角色受到X点雷电伤害X为此牌判定结果为♠的次数。判定完成后将此牌移动到下家的判定区里。',
qibaodao:'七宝刀',

View File

@ -1585,21 +1585,24 @@ game.import('card',function(lib,game,ui,get,ai,_status){
complexSelect:true,
complexTarget:true,
multicheck:function(){
var card={name:'sha',isCard:true};
return game.hasPlayer(function(current){
if(current.getEquip(1)){
return game.hasPlayer(function(current2){
return current.inRange(current2)&&current.canUse('sha',current2,false);
return current.inRange(current2)&&lib.filter.targetEnabled(card,current,current2);
})
}
});
},
filterTarget:function(card,player,target){
var card={name:'sha',isCard:true};
return player!=target&&target.getEquip(1)&&game.hasPlayer(function(current){
return target!=current&&target.inRange(current)&&target.canUse('sha',current,false);
return target!=current&&target.inRange(current)&&lib.filter.targetEnabled(card,target,current);
});
},
filterAddedTarget:function(card,player,target,preTarget){
return target!=preTarget&&preTarget.inRange(target)&&preTarget.canUse('sha',target,false);
var card={name:'sha',isCard:true};
return target!=preTarget&&preTarget.inRange(target)&&lib.filter.targetEnabled(card,preTarget,target);
},
content:function(){
"step 0"
@ -2108,7 +2111,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger:{
player:['damage','damageCancelled','damageZero'],
source:['damage','damageCancelled','damageZero'],
target:['shaMiss','useCardToExcluded','useCardToEnd'],
target:['shaMiss','useCardToExcluded','useCardToEnd','eventNeutralized'],
global:['useCardEnd'],
},
charlotte:true,
@ -2128,15 +2131,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
qinglong_skill:{
equipSkill:true,
trigger:{player:'shaMiss'},
trigger:{player:['shaMiss','eventNeutralized']},
direct:true,
filter:function(event,player){
if(get.mode()=='guozhan') return false;
return player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h'));
if(get.mode()=='guozhan'||!event.card||event.card.name!='sha') return false;
return event.target.isIn&&player.canUse('sha',event.target,false)&&(player.hasSha()||_status.connectMode&&player.countCards('h'));
},
content:function(){
"step 0"
player.chooseToUse(get.prompt('qinglong'),function(card,player,event){
player.chooseToUse(get.prompt('qinglong',trigger.target),function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},trigger.target,-1).set('addCount',false).logSkill='qinglong_skill';
@ -2168,10 +2171,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
guanshi_skill:{
equipSkill:true,
trigger:{player:'shaMiss'},
trigger:{
player:['shaMiss','eventNeutralized'],
},
direct:true,
audio:true,
filter:function(event,player){
if(event.type!='card'||event.card.name!='sha') return false;
return player.countCards('he',function(card){
return card!=player.getEquip('guanshi');
})>=2&&event.target.isAlive();
@ -2194,10 +2200,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
});
"step 1"
if(result.bool){
trigger.untrigger();
trigger.trigger('shaHit');
trigger._result.bool=false;
trigger._result.result=null;
if(event.triggername=='shaMiss'){
trigger.untrigger();
trigger.trigger('shaHit');
trigger._result.bool=false;
trigger._result.result=null;
}
else{
trigger.unneutralize();
}
}
},
ai:{
@ -2570,7 +2581,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger.cancelled=true;
}
else{
trigger.cancel();
trigger.neutralize();
if(event.guowuxie==true){
if(trigger.target.identity!='ye'&&trigger.target.identity!='unknown'){
trigger.getParent().excluded.addArray(game.filterPlayer(function(current){

View File

@ -299,7 +299,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
notarget:true,
content:function(){
var evt2=event.getParent(3)._trigger;
evt2.cancel();
evt2.neutralize();
var evt=evt2.getParent();
var next=game.createEvent('caochuan_gain');
_status.event.next.remove(next);

View File

@ -86,6 +86,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kyouko:['female','key',3,['kyouko_rongzhu','kyouko_gongmian']],
key_kyou:['female','key',3,['kyou_zhidian','kyou_duanfa']],
key_seira:['female','key',3,['seira_xinghui','seira_yuanying']],
key_kiyu:['female','key',3,['kiyu_yuling','kiyu_xianyu']],
ns_huangchengyan:['male','shu',3,['nslongyue','nszhenyin']],
ns_sunchensunjun:['male','wu',5,['nsxianhai','nsxingchu']],
@ -202,7 +203,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou",
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira'],
diy_yijiang3:['ns_ruanji','ns_zanghong','ns_limi','ns_zhonglimu','prp_zhugeliang','key_seira','key_kiyu'],
diy_tieba:["ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua","ns_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
@ -305,6 +306,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_tenzen:'#b皋耳击',
key_kotarou:'#bb1154486224',
key_seira:'#b阿开木木W🍀',
key_kiyu:'#b无面◎隐者',
ns_huangchengyan:'#g竹邀月',
ns_sunchensunjun:'#gVenusjeu',
@ -527,6 +529,117 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_lucia:['key_shizuru'],
},
skill:{
//天宫希优
kiyu_yuling:{
mod:{
targetEnabled:function(card){
var info=get.info(card);
if(!info||(info.type!='trick'&&info.type!='delay')) return;
if(info.range) return false;
},
},
trigger:{target:'useCardToTargeted'},
forced:true,
charlotte:true,
filter:function(event,player){
return event.card.name=='sha'&&event.player.countCards('he')>0;
},
logTarget:'player',
content:function(){
trigger.player.chooseToDiscard('he',true,get.distance(trigger.player,player));
},
ai:{
threaten:0.7,
effect:{
target:function(card,player,target,current){
if(card.name=='sha') return 0.7;
},
},
},
},
kiyu_xianyu:{
trigger:{global:'phaseUseBegin'},
charlotte:true,
round:1,
filter:function(event,player){
return event.player.countCards('h')>0;
},
logTarget:'player',
check:function(event,player){
var target=event.player;
var next=target.next;
if(target.getSeatNum()>next.getSeatNum()) return true;
if(target.countCards('h')<4&&target.countCards('h',function(card){
return target.hasUseTarget(card,null,true);
})<2) return false;
return true;
},
content:function(){
'step 0'
var target=trigger.player,cards=target.getCards('h');
var next=player.chooseToMove('先预:预测'+get.translation(target)+'使用牌的顺序',true);
next.set('list',[
[get.translation(target)+'的手牌',cards]
]);
next.set('processAI',function(list){
var cards=list[0][1].slice(0);
var target=_status.event.getTrigger().player;
cards.sort(function(a,b){
return get.order(b,target)-get.order(a,target);
});
return [cards];
});
'step 1'
if(result.bool){
var list=result.moved[0];
player.storage.kiyu_xianyu_lastrun=list;
player.addTempSkill('kiyu_xianyu_lastrun',list);
}
},
subSkill:{
lastrun:{
trigger:{global:'phaseUseAfter'},
forced:true,
charlotte:true,
onremove:true,
content:function(){
var num=0,index=-1,target=trigger.player;
var cards=player.getStorage('kiyu_xianyu_lastrun');
var history=target.getHistory('useCard',function(event){
return event.getParent('phaseUse')==trigger;
});
for(var evt of history){
var goon=false;
for(var card of evt.cards){
var index2=cards.indexOf(card);
if(index2>index){
goon=true;
index=index2;
}
}
if(goon) num++;
}
if(num>0){
num=Math.min(3,num);
player.draw(num);
if(target.isIn()){
target.addTempSkill('kiyu_xianyu_effect');
target.addMark('kiyu_xianyu_effect',num,false);
}
}
},
},
effect:{
charlotte:true,
onremove:true,
mod:{
maxHandcard:function(player,num){
return num+player.countMark('kiyu_xianyu_effect');
},
},
},
},
},
//樱庭星罗
seira_xinghui:{
trigger:{player:'phaseZhunbeiBegin'},
@ -6255,9 +6368,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
kyoko_juwu:{
trigger:{global:['loseAfter','cardsDiscardAfter']},
trigger:{global:['loseAfter','cardsDiscardAfter','loseAsyncAfter']},
direct:true,
filter:function(event,player){
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
return player!=event.player&&player!=_status.currentPhase&&event.cards&&event.cards.filter(function(card){
return get.position(card,true)=='d'&&get.type(card,false)=='equip';
}).length>0;
@ -7120,6 +7234,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tomoya_shangxian:{
trigger:{player:'phaseUseBegin'},
mark:true,
locked:true,
intro:{
content:function(s){
return '计算与其他角色的距离时始终从'+(s?'逆':'顺')+'时针计算'
@ -8835,14 +8950,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
filter:function(event,player){
if(player!=_status.currentPhase) return false;
if(event.name=='lose'&&event.position!=ui.discardPile) return false;
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
var list=[];
for(var i=0;i<event.cards.length;i++){
var card=event.cards[i];
list.add(card.suit);
}
game.getGlobalHistory('cardMove',function(evt){
if(evt==event||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false;
if(evt==event||evt.getParent()==event||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false;
if(evt.name=='lose'&&evt.position!=ui.discardPile) return false;
for(var i=0;i<evt.cards.length;i++){
var card=evt.cards[i];
@ -8861,7 +8976,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
list2.add(suit);
}
game.getGlobalHistory('cardMove',function(evt){
if(evt==trigger||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false;
if(evt==trigger||evt.getParent()==trigger||(evt.name!='lose'&&evt.name!='cardsDiscard')) return false;
if(evt.name=='lose'&&evt.position!=ui.discardPile) return false;
for(var i=0;i<evt.cards.length;i++){
var card=evt.cards[i];
@ -9830,18 +9945,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
noname_duocai:{
trigger:{
global:"loseAfter",
global:["loseAfter","loseAsyncAfter"],
},
filter:function(event,player){
if(event.type!='discard'||event.player==player) return false;
return event.cards&&event.cards.filterInD('d').length>0&&!player.hasSkill('noname_duocai2');
if(event.type!='discard'||event.getlx===false) return false;
var evt=event.getl(player);
var cards=event.cards.slice(0);
if(evt&&evt.cards) cards.removeArray(evt.cards);
return cards.filterInD('d').length>0&&!player.hasSkill('noname_duocai2');
},
direct:true,
charlotte:true,
content:function(){
"step 0"
if(trigger.delay==false&&player!=game.me&&!player.isOnline()) game.delay();
var cards=trigger.cards.filterInD('d');
var evt=trigger.getl(player);
var cards=trigger.cards.slice(0);
cards.removeArray(evt.cards);
player.chooseButton([get.prompt('noname_duocai'),cards],[1,cards.length]);
"step 1"
if(result.bool){
@ -16665,6 +16785,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
seira_yuanying_info:'出牌阶段限一次,你可选择两名角色。这两名角色成为“姻缘者”且获得〖姻缘〗直到你下次发动〖缘映〗。',
seira_yinyuan:'姻缘',
seira_yinyuan_info:'你的手牌对其他“姻缘者”可见。出牌阶段限一次你可以获得一名其他“姻缘者”区域内的一张牌然后其回复1点体力。',
key_kiyu:'露娜Q',
kiyu_yuling:'玉灵',
kiyu_yuling_info:'锁定技。你不是有距离限制的锦囊牌的合法目标你成为【杀】的目标后使用者需弃置X张牌X为其至你的距离。',
kiyu_xianyu:'先预',
kiyu_xianyu_info:'每轮限一次。一名角色的出牌阶段开始时你可观看其手牌并预测其使用这些牌的顺序。此出牌阶段结束时你摸X张牌且其本回合的手牌上限+XX为你的预测与其实际使用顺序的吻合数且至多为3。',
noname:"小无",
noname_zhuyuan:"祝愿",

View File

@ -1028,11 +1028,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
tianren:{
audio:2,
trigger:{global:['loseAfter','cardsDiscardAfter']},
trigger:{global:['loseAfter','cardsDiscardAfter','loseAsyncAfter']},
forced:true,
filter:function(event,player){
if(event.name=='lose'){
if(event.position!=ui.discardPile) return false;
if(event.name.indexOf('lose')==0){
if(event.getlx===false||event.position!=ui.discardPile) return false;
}
else{
var evt=event.getParent();
@ -1643,17 +1643,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
dinghan:{
audio:2,
trigger:{target:'useCardToTarget'},
trigger:{
target:'useCardToTarget',
player:'addJudgeBefore',
},
forced:true,
locked:false,
filter:function(event,player){
return get.type2(event.card)=='trick'&&!player.getStorage('dinghan').contains(event.card.name);
if(event.name=='useCardToTarget'&&get.type(event.card,null,false)!='trick') return false;
return !player.getStorage('dinghan').contains(event.card.name);
},
content:function(){
player.markAuto('dinghan',[trigger.card.name]);
trigger.targets.remove(player);
trigger.getParent().triggeredTargets2.remove(player);
trigger.untrigger();
player.markAuto('dinghan',[trigger.card.name]);if(trigger.name=='addJudge'){
trigger.cancel();
var owner=get.owner(trigger.card);
if(owner&&owner.getCards('hej').contains(trigger.card)) owner.lose(trigger.card,ui.discardPile);
else game.cardsDiscard(trigger.card);
game.log(trigger.card,'进入了弃牌堆');
}
else{
trigger.targets.remove(player);
trigger.getParent().triggeredTargets2.remove(player);
trigger.untrigger();
}
},
onremove:true,
intro:{content:'已记录牌名:$'},
@ -3584,15 +3596,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
renjie2:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
forced:true,
filter:function(event,player){
if(event.type!='discard'||!event.cards2) return false;
var evt=event.getParent('phaseDiscard');
return evt&&evt.name=='phaseDiscard'&&evt.player==player;
if(event.type!='discard'||event.getlx===false) return false;
var evt=event.getParent('phaseDiscard'),evt2=event.getl(player);
return evt&&evt2&&evt.name=='phaseDiscard'&&evt.player==player&&evt2.cards2&&evt2.cards2.length>0;
},
content:function(){
player.addMark('renjie',trigger.cards2.length);
player.addMark('renjie',trigger.getl(player).cards2.length);
}
},
sbaiyin:{
@ -5520,8 +5535,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
};
};
if(event.list1.length&&event.list2.length){
target.discard(event.list2).delay=false;
player.discard(event.list1);
game.loseAsync({
lose_list:[
[player,event.list1],
[target,event.list2]
],
}).setContent('discardMultiple');
}
else if(event.list2.length){
target.discard(event.list2);
@ -6164,7 +6183,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lingce:'灵策',
lingce_info:'锁定技。当有【奇正相生】或智囊或〖定汉①〗记录过的锦囊牌被使用时若此牌不为转化牌且对应实体牌数量为1则你摸一张牌。',
dinghan:'定汉',
dinghan_info:'①当你成为未记录过的锦囊牌的目标时,你记录此牌名并取消之。②准备阶段,你可在〖定汉①〗的记录中添加或减少一种锦囊牌的牌名。',
dinghan_info:'①当你成为未记录过的普通锦囊牌的目标时,或有未记录过的延时锦囊牌进入你的判定区时,你记录此牌名并取消之。②准备阶段,你可在〖定汉①〗的记录中添加或减少一种锦囊牌的牌名。',
shen_sunce:'神孙策',
yingba:'英霸',
yingba_info:'①出牌阶段限一次你可令一名体力上限大于1的其他角色减少1点体力上限并获得“平定”标记然后你减少1点体力上限。②你对拥有“平定”标记的角色使用牌没有距离限制。',

View File

@ -15,7 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong','sp_zhujun','liuba'],
mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"],
mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"],
mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
@ -26,6 +26,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
re_dianwei:["male","wei",4,["reqiangxi"]],
xin_mamidi:['male','qun',3,['chengye','buxu']],
ruanhui:['female','wei',3,['mingcha','jingzhong']],
xin_quancong:['male','wu',4,['sbyaoming']],
@ -642,7 +643,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return false;
},
trigger:{global:['useCardAfter','loseAfter','cardsDiscardAfter']},
trigger:{global:['useCardAfter','loseAfter','cardsDiscardAfter','loseAsyncAfter']},
forced:true,
filter:function(event,player){
if(player==event.player) return false;
@ -651,13 +652,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=event.cards.filterInD();
if(!cards.length) return false;
}
else if(event.name=='lose'){
if(event.position!=ui.discardPile) return false;
var cards=event.cards2.filter(function(card){
if(get.position(card,true)!='d') return false;
else if(event.name.indexOf('lose')==0){
if(event.getlx===false||event.position!=ui.discardPile) return false;
var cards=(event.cards2||event.cards).filter(function(card){
if(card.original=='j'||get.position(card,true)!='d') return false;
var type=get.type(card,false);
return type=='delay'||type=='equip';
});
cards.removeArray(event.getl(player).cards);
if(!cards.length) return false;
}
else{
@ -685,12 +687,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='useCard'){
cards=trigger.cards.filterInD();
}
else if(trigger.name=='lose'){
cards=trigger.cards2.filter(function(card){
else if(trigger.name.indexOf('lose')==0){
cards=(trigger.cards2|trigger.cards).filter(function(card){
if(get.position(card,true)!='d') return false;
var type=get.type(card,false);
return type=='delay'||type=='equip';
});
cards.removeArray(trigger.getl(player).cards);
}
else{
cards=trigger.cards.filter(function(card){
@ -3479,7 +3482,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
enable:['chooseToUse','chooseToRespond'],
filter:function(event,player){
return player.getStorage('jibing').length>0&&(event.filterCard({name:'sha'},player,event)||event.filterCard({name:'shan'},player,event));
return player.getExpansions('jibing').length>0&&(event.filterCard({name:'sha'},player,event)||event.filterCard({name:'shan'},player,event));
},
chooseButton:{
dialog:function(event,player){
@ -3507,7 +3510,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dialog.content.appendChild(table);
}
else dialog._cardName=event.filterCard({name:'sha'},player,event)?'sha':'shan';
dialog.add(player.storage.jibing);
dialog.add(player.getExpansions('jibing'));
return dialog;
},
filter:function(button){
@ -3540,17 +3543,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return {
audio:'jibing',
filterCard:function(){return false},
selectCard:-1,
card:card,
viewAs:get.autoViewAs({name:name},card),
card:card,
precontent:function(){
var card=lib.skill.jibing_backup.card;
player.unmarkAuto('jibing',[card]);
event.result.card={name:event.result.card.name};
event.result.cards=[card];
filterCard:function(card){
return card==lib.skill.jibing_backup.card;
},
selectCard:-1,
position:'s',
viewAs:{name:name},
card:card,
}
},
prompt:function(links,player){
@ -3561,7 +3560,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
respondSha:true,
respondShan:true,
skillTagFilter:function(player,tag,arg){
return player.getStorage('jibing').length>0;
return player.getExpansions('jibing').length>0;
},
order:function(item,player){
if(player.hasSkill('binghuo')) return 6;
@ -3583,16 +3582,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
trigger.changeToZero();
var cards=get.cards(2);
game.cardsGotoOrdering(cards);
player.markAuto('jibing',cards);
player.$gain2(cards,false);
game.log(player,'将',cards,'置于了武将牌上');
game.delayx();
player.addToExpansion(cards,'gain2').gaintag.add('jibing');
},
},
backup:{audio:'jibing'},
},
intro:{content:'cards',onunmark:'throw'},
intro:{content:'expansion',markcount:'expansion'},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
},
wangjing:{
audio:2,
@ -5968,12 +5967,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
discard:{
trigger:{
global:['loseAfter','cardsDiscardAfter'],
global:['loseAfter','cardsDiscardAfter','loseAsyncAfter'],
},
forced:true,
locked:false,
filter:function(event,player){
return player.storage.yizhu&&player.storage.yizhu.length&&(event.name!='lose'||event.position==ui.discardPile)&&event.cards.filter(function(i){
return player.storage.yizhu&&player.storage.yizhu.length&&(event.name=='cardsDiscard'||(event.position==ui.discardPile&&event.getlx!==false))&&event.cards.filter(function(i){
return player.storage.yizhu.contains(i);
}).length>0;
},
@ -6591,7 +6590,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
card=game.createCard2('binglinchengxiax',info[0],info[1]);
}
}
if(!card) card=get.cardPile(name);
if(!card) card=get.cardPile2(name);
if(card) player.gain(card,'gain2');
player.removeSkill('mjweipo_effect');
},
@ -6844,14 +6843,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mjkuanji:{
audio:'fyjianyu',
usable:1,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
direct:true,
filter:function(event,player){
return event.type=='discard'&&event.cards2.filterInD('d').length>0;
if(event.type!='discard') return false;
var evt=event.getl(player);
return evt.cards2.filterInD('d').length>0;
},
content:function(){
'step 0'
player.chooseButton(['宽济:是否将一张牌交给一名其他角色?',trigger.cards2.filterInD('d')]).set('ai',function(button){
var cards=trigger.getl(player).cards2;
player.chooseButton(['宽济:是否将一张牌交给一名其他角色?',cards.filterInD('d')]).set('ai',function(button){
var player=_status.event.player;
if(game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0;
@ -7496,7 +7501,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
guying:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
forced:true,
usable:1,
filter:function(event,player){
@ -7504,9 +7512,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=event.getParent();
if(evt.name!='useCard'&&evt.name!='respond') return false;
}
var target=_status.currentPhase;
if(!event.cards2||event.cards2.length!=1||!target||target==player||!target.isIn()) return false;
return get.position(event.cards2[0])=='d'||target.countCards('he')<0;
var target=_status.currentPhase,evt=event.getl(player);
if(!evt.cards2||evt.cards2.length!=1||!target||target==player||!target.isIn()) return false;
return get.position(evt.cards2[0])=='d'||target.countCards('he')<0;
},
logTarget:function(){
return _status.currentPhase;
@ -7515,7 +7523,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
if(trigger.delay===false) game.delayx();
event.target=_status.currentPhase;
event.card=trigger.cards2[0];
event.card=trigger.getl(player).cards2[0];
'step 1'
player.addMark('guying',1,false);
event.addIndex=0;
@ -10649,11 +10657,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
jinglve3:{
audio:'jinglve',
trigger:{global:['loseAfter','useCard','phaseAfter','cardsDiscardAfter']},
trigger:{global:['loseAfter','useCard','phaseAfter','cardsDiscardAfter','loseAsyncAfter']},
filter:function(event,player){
if(event.player&&event.player!=player.storage.jinglve2) return false;
if(event.name=='phase') return event.player.getCards('hej').contains(player.storage.jinglve3);
if(!event.cards.contains(player.storage.jinglve3)) return false;
if(event.name=='lose'&&event.getlx===false) return false;
else if(event.name=='loseAsync'&&event.position==ui.discardPile){
var evt=event.getl(player.storage.jinglve2);
if(!evt.cards.contains(player.storage.jinglve3)) return false;
}
return event.name=='useCard'||get.position(player.storage.jinglve3,true)=='d'||event.position==ui.discardPile;
},
forced:true,
@ -11302,7 +11315,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{source:'damage'},
forced:true,
popup:false,
locked:false,
//locked:false,
audio:'jiuchi',
filter:function(event,player){
return event.card&&event.card.name=='sha'&&event.getParent(2).jiu==true&&!player.hasSkill('rejiuchi_air');
@ -13562,12 +13575,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
rebiaozhao2:{
trigger:{
global:["loseAfter","cardsDiscardAfter"],
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter"],
},
forced:true,
audio:"biaozhao",
filter:function(event,player){
if(event.name=='lose'&&(event.position!=ui.discardPile||event.getParent(2).name=='rebiaozhao3')) return false;
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile||event.getParent(2).name=='rebiaozhao3')) return false;
var cards=player.getExpansions('rebiaozhao');
if(!cards.length) return false;
var num=get.number(cards[0]);
@ -14503,6 +14516,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:"xinfu_qianchong",
trigger:{
player:["useCard","respond","loseAfter"],
global:'loseAsyncAfter',
},
frequent:true,
filter:function(event,player){
@ -14513,11 +14527,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<es.length;i++){
if(get.color(es[i])!='red') return false;
}
if(event.name!='lose') return get.color(event.card)=='red';
if(event.name.indexOf('lose')!=0) return get.color(event.card)=='red';
if(event.type!='discard') return false;
if(event.cards2){
for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i])=='red') return true;
var evt=event.getl(player);
if(evt.cards2){
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i])=='red') return true;
}
}
return false;
@ -14525,10 +14540,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
event.count=1;
if(trigger.name=='lose'){
if(trigger.name.indexOf('lose')==0){
event.count=0;
for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards2[i])=='red') event.count++;
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i])=='red') event.count++;
}
}
"step 1"
@ -17408,6 +17424,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
buxu:'补叙',
buxu_backup:'补叙',
buxu_info:'出牌阶段若你的“六经”中有空缺的位置则你可以弃置X+1张牌并选择一种空缺的“六经”。系统从牌堆或弃牌堆中检索一张对应的牌然后你将此牌置于你武将牌上填补“六经”的对应位置。',
re_dianwei:"手杀典韦",
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',

View File

@ -653,17 +653,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nsyice:{
trigger:{
player:'loseAfter',
global:'cardsDiscardAfter',
global:['cardsDiscardAfter','loseAsyncAfter'],
},
filter:function(event,player){
if(event.name=='lose'){
if(event.name!='cardsDiscard'){
if(event.type!='discard') return false;
var evt=event.getl(player);
return evt.cards2&&evt.cards2.filterInD('d').length>0;
}
else{
var evt=event.getParent();
if(evt.name!='orderingDiscard'||!evt.relatedEvent||evt.relatedEvent.player!=player||!['useCard','respond'].contains(evt.relatedEvent.name)) return false;
return event.cards.filterInD('d').length>0;
}
return (event.cards2||event.cards).filterInD('d').length>0;
},
forced:true,
content:function(){
@ -671,12 +673,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var evt=trigger.getParent().relatedEvent;
if((trigger.name=='discard'&&!trigger.delay)||evt&&evt.name=='respond') game.delayx();
'step 1'
var cards=(trigger.cards2||trigger.cards).filterInD('d');
player.$gain2(cards);
var cards;
if(trigger.getl) cards=trigger.getl(player).cards2.filterInD('d');
else cards=trigger.cards.filterInD('d');
if(cards.length==1) event._result={bool:true,links:cards};
else{
var dialog=['遗策:选择要放置的卡牌','<div class="text center">(从左到右为从旧到新,后选择的后置入)</div>',cards];
var cards2=player.getStorage('nsyice');
var cards2=player.getExpansions('nsyice');
cards2.reverse();
if(cards2.length){
dialog.push('<div class="text center">原有“策”</div>');
dialog.push(cards2);
@ -686,11 +690,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).set('cards',cards);
}
'step 2'
game.cardsGotoSpecial(result.links);
player.markAuto('nsyice',result.links);
game.delayx();
player.addToExpansion(result.links,'gain2').gaintag.add('nsyice');
'step 3'
var storage=player.storage.nsyice;
var storage=player.getExpansions('nsyice');
var bool=false;
for(var i=0;i<storage.length;i++){
for(var j=storage.length-1;j>i;j--){
@ -702,9 +704,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(bool) break;
}
if(bool){
event.cards=storage.slice(0);
event.cards=storage.splice(i,j-i+1);
player.unmarkAuto('nsyice',event.cards);
}
else event.finish();
'step 4'
@ -716,10 +716,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 5'
player.chooseButton(['将一张牌置于牌堆顶,将另一张牌置于牌堆底',cards],true);
'step 6'
ui.cardPile.insertBefore(result.links[0].fix(),ui.cardPile.firstChild);
cards.remove(result.links[0]);
ui.cardPile.appendChild(cards[0].fix());
game.updateRoundNumber();
player.lose(event.cards,ui.cardPile).set('topper',result.links[0]).insert_index=function(event,card){
if(card==event.topper) return ui.cardPile.firstChild;
return null;
};
if(_status.dying.length) event.finish();
'step 7'
player.chooseTarget('对一名角色造成1点伤害',true).set('ai',function(target){
@ -733,8 +733,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.damage('nocard');
}
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
marktext:'策',
intro:{content:'cards'},
intro:{
content:'expansion',
markcount:'expansion',
},
},
//用间篇
yjxuepin:{
@ -891,10 +898,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger.player.skip('phaseJudge');
}
else{
player.lose(card,ui.special,'toStorage');
trigger.player.addToExpansion(card,player,'giveAuto').gaintag.add('spmingjian_charlotte');
trigger.player.addSkill('spmingjian_charlotte');
trigger.player.storage.spmingjian_charlotte.add(card);
trigger.player.markSkill('spmingjian_charlotte');
}
},
ai:{
@ -912,14 +917,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='phase') player.removeSkill(event.name);
else trigger.noJudgeTrigger=true;
},
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[];
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
marktext:'鉴',
intro:{
name:'明鉴',
content:'cards',
onunmark:'throw',
content:'expansion',
markcount:'expansion',
},
},
spshude:{
@ -1051,7 +1057,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
sphantong:{
trigger:{player:'loseEnd'},
trigger:{
player:'loseEnd',
},
frequent:true,
filter:function(event,player){
return event.type=='discard'&&event.getParent(3).name=='phaseDiscard'&&event.cards.filterInD('d').length>0;
@ -1157,36 +1165,39 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
player.logSkill('spyicong');
if(!player.storage.spyicong) player.storage.spyicong=[];
player.storage.spyicong.addArray(result.cards);
player.$giveAuto(result.cards.length,player,false);
game.log(player,'扣置了'+get.cnNumber(player.lose(result.cards,'toStorage',ui.special).cards.length)+'张【扈】');
player.markSkill('spyicong');
player.addToExpansion(result.cards,player,'give').gaintag.add('spyicong');
}
},
mod:{
globalTo:function(from,to,num){
if(to.storage.spyicong&&to.storage.spyicong.length) return num+to.storage.spyicong.length;
return num+to.getExpansions('spyicong').length;
},
},
marktext:'扈',
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
intro:{
name:'义从',
content:'cardCount',
onunmark:'throw',
content:function(storage,player){
return '共有'+get.cnNumber(player.getExpansions('spyicong').length)+'张“扈”';
},
markcount:'expansion',
},
},
sptuji:{
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
return player.storage.spyicong&&player.storage.spyicong.length>0;
return player.getExpansions('spyicong').length>0;
},
content:function(){
var num=player.storage.spyicong.length;
var cards=player.getExpansions('spyicong');
var num=cards.length;
player.addMark('sptuji2',num,false);
player.addTempSkill('sptuji2');
player.unmarkSkill('spyicong');
player.loseToDiscardpile(cards);
if(num<=1) player.draw();
},
},
@ -1285,13 +1296,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delete player.storage.xinfu_yanyu2;
},
trigger:{
global:["loseAfter","cardsDiscardAfter"],
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter"],
},
direct:true,
filter:function (event,player){
if(player.storage.xinfu_yanyu2>=3) return false;
//var evt=event.getParent();
//if(evt&&(evt.name=='useCard'||evt.name=='respond')) return false;
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
var type=player.storage.xinfu_yanyu;
var cards=event.cards;
for(var i=0;i<cards.length;i++){
@ -1584,13 +1594,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
player.awakenSkill('zuixiang');
event.cards=player.showCards(get.cards(3)).cards;
player.markAuto('zuixiang2',event.cards);
game.cardsGotoSpecial(event.cards);
player.addToExpansion(event.cards,'gain2').gaintag.add('zuixiang2');
'step 1'
if(lib.skill.zuixiang.filterSame(cards)){
player.gain(cards,'gain2').type='xinmanjuan';
delete player.storage.zuixiang2;
player.unmarkSkill('zuixiang2');
}
else{
trigger._zuixiang=true;
@ -1608,15 +1615,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
zuixiang2:{
intro:{
content:'cards',
onunmark:'throw',
content:'expansion',
markcount:'expansion',
},
mod:{
cardEnabled:function(card,player){
var type=get.type2(card);
var list=player.getStorage('zuixiang2');
var list=player.getExpansions('zuixiang2');
for(var i of list){
if(get.type2(i)==type) return false;
if(get.type2(i,false)==type) return false;
}
},
cardRespondable:function(){
@ -1631,10 +1638,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target:'useCardToBefore',
},
forced:true,
charlotte:true,
filter:function(event,player){
if(event.name=='phaseZhunbei') return !event._zuixiang;
var type=get.type2(event.card);
var list=player.getStorage('zuixiang2');
var list=player.getExpansions('zuixiang2');
for(var i of list){
if(get.type2(i)==type) return true;
}
@ -1648,14 +1656,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return;
}
var cards=get.cards(3);
player.markAuto('zuixiang2',cards);
player.showCards(player.storage.zuixiang2);
game.cardsGotoSpecial(cards);
player.addToExpansion('gain2',cards).gaintag.add('zuixiang2');
'step 1'
var cards=player.getStorage('zuixiang2');
var cards=player.getExpansions('zuixiang2');
player.showCards(cards);
if(lib.skill.zuixiang.filterSame(cards)){
player.gain(cards,'gain2','log').type='xinmanjuan';
delete player.storage.zuixiang2;
player.removeSkill('zuixiang2');
}
},
@ -1663,7 +1669,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
effect:{
target:function(card,player,target){
var type=get.type2(card);
var list=target.getStorage('zuixiang2');
var list=target.getExpansions('zuixiang2');
for(var i of list){
if(get.type2(i)==type) return 'zeroplayertarget';
}
@ -1783,36 +1789,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return player.storage.yinling&&player.storage.yinling.length>=3;
return player.getExpansions('yinling').length>=3;
},
content:function(){
'step 0'
if(player.storage.yinling.length>3){
player.chooseButton(3,[get.prompt('junwei'),'hidden',player.storage.yinling]).set('ai',function(button){
var cards=player.getExpansions('yinling');
if(cards.length>3){
player.chooseButton(3,[get.prompt('junwei'),'hidden',cards]).set('ai',function(button){
return 1;
});
}
else{
player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',player.storage.yinling]).set('dialogselectx',true).set('choice',true);
event.cards=player.storage.yinling.slice(0);
player.chooseBool().set('createDialog',[get.prompt('junwei'),'hidden',cards]).set('dialogselectx',true).set('choice',true);
event.cards=cards.slice(0);
}
'step 1'
if(result.bool){
player.logSkill('junwei');
var cards=event.cards||result.links;
for(var i=0;i<cards.length;i++){
player.storage.yinling.remove(cards[i]);
}
game.cardsDiscard(cards);
player.$throw(cards);
player.syncStorage('yinling');
if(player.storage.yinling.length==0){
player.unmarkSkill('yinling');
}
else{
player.markSkill('yinling');
}
game.delay();
player.loseToDiscardpile(cards);
player.chooseTarget(true,function(card,player,target){
return player!=target;
}).set('ai',function(target){
@ -1882,63 +1877,58 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 6'
if(result.bool){
var card=result.links[0];
if(event.target.storage.junwei2){
event.target.storage.junwei2.push(card);
event.target.markSkill('junwei2');
}
else{
event.target.storage.junwei2=[card];
}
event.target.lose(card,ui.special,'toStorage');
event.target.addSkill('junwei2');
event.target.syncStorage('junwei2');
target.addToExpansion(card,target,'give').gaintag.add('junwei2');
target.addSkill('junwei2');
}
}
},
junwei2:{
mark:true,
intro:{
content:'cards',
onunmark:function(storage,player){
if(storage&&storage.length){
player.$throw(storage,1000);
game.cardsDiscard(storage);
game.log(storage,'被置入了弃牌堆');
storage.length=0;
}
},
content:'expansion',
markcount:'expansion',
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
trigger:{player:'phaseJieshuBegin'},
forced:true,
charlotte:true,
content:function(){
'step 0'
if(player.storage.junwei2.length){
var card=player.storage.junwei2.shift();
var cards=player.getExpansions('junwei2').filter(function(card){
return player.canEquip(card,true);
});
if(cards.length){
player.$give(card,player,false);
game.delay(0.5);
player.equip(card);
event.redo();
}
'step 1'
player.removeSkill('junwei2');
delete player.storage.junwei2;
}
},
yinling:{
enable:'phaseUse',
filterCard:{color:'black'},
position:'he',
marktext:'锦',
intro:{
content:'cards',
onunmark:'throw'
content:'expansion',
markcount:'expansion'
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
filter:function(event,player){
return player.countCards('he',{color:'black'})>0&&player.storage.yinling.length<4;
return player.countCards('he',{color:'black'})>0&&player.getExpansions('yinling').length<4;
},
filterTarget:function(card,player,target){
return target.countCards('he')>0&&target!=player;
},
init:function(player){
player.storage.yinling=[];
},
check:function(card){
return 6-get.value(card);
},
@ -1947,11 +1937,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.choosePlayerCard('hej',target,true);
'step 1'
if(result.bool&&result.links&&result.links.length){
target.$give(result.links,player,false);
target.lose(result.links,ui.special,'toStorage');
player.storage.yinling.push(result.links[0]);
player.markSkill('yinling');
player.syncStorage('yinling');
player.addToExpansion(result.links,target,'give').gaintag.add('yinling');
}
},
ai:{

View File

@ -101,6 +101,7 @@ window.noname_character_rank={
'shen_xunyu',
'shen_guojia',
'yangyan',
'liuhui',
'key_kamome',
'key_yukine',
'key_inari',
@ -109,6 +110,7 @@ window.noname_character_rank={
'key_yukito',
'key_yuuki',
'db_key_liyingxia',
'key_kiyu',
],
a:[
'diy_zaozhirenjun',
@ -273,6 +275,7 @@ window.noname_character_rank={
'ns_limi',
'jin_zhouchu',
'huojun',
'xiahouxuan',
'key_misuzu',
'key_sunohara',
'key_umi',
@ -528,6 +531,7 @@ window.noname_character_rank={
'dc_wangchang',
'fengfang',
'prp_zhugeliang',
'dukui',
],
bp:[
'chess_diaochan',
@ -812,6 +816,9 @@ window.noname_character_rank={
're_liufeng',
'huzhao',
'guanhai',
'zhangfen',
'ol_dianwei',
'wangyan',
],
b:[
'diy_feishi',
@ -1051,6 +1058,8 @@ window.noname_character_rank={
'zhangxun',
'xiahoulingnv',
're_sp_taishici',
'dc_lvkuanglvxiang',
'dengzhong',
],
bm:[
'diy_xizhenxihong',
@ -1214,6 +1223,7 @@ window.noname_character_rank={
'ruanhui',
'xin_mamidi',
'xin_quancong',
'dc_caiyang',
],
c:[
'xiahoudun',
@ -1430,6 +1440,7 @@ window.noname_character_rank={
'key_erika',
'key_satomi',
'key_seira',
'key_kiyu',
'noname',
],
epic:[
@ -1612,6 +1623,8 @@ window.noname_character_rank={
'ol_xunyu',
'ns_zhonglimu',
'dc_sunru',
'zhangfen',
'xiahouxuan',
'prp_zhugeliang',
'key_kano',
'key_haruko',
@ -2027,6 +2040,8 @@ window.noname_character_rank={
'huzhao',
're_liufeng',
'guanhai',
'dukui',
'ol_dianwei',
],
junk:[
'sunshao',

View File

@ -6,7 +6,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh:{
refresh_standard:["re_caocao","re_simayi","re_guojia","re_zhangliao","re_xuzhu","re_xiahoudun","re_zhangfei","re_zhaoyun","re_guanyu","re_machao","re_zhouyu","re_lvmeng","re_ganning","re_luxun","re_daqiao","re_huanggai","re_lvbu","re_huatuo","re_liubei","re_diaochan","re_huangyueying","re_sunquan","re_sunshangxiang","re_zhenji","re_zhugeliang","re_huaxiong",'re_gongsunzan'],
refresh_feng:['caoren','ol_xiahouyuan','re_huangzhong','ol_weiyan','ol_xiaoqiao','zhoutai','re_zhangjiao','xin_yuji'],
refresh_huo:["ol_sp_zhugeliang","ol_xunyu","re_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"],
refresh_huo:["ol_sp_zhugeliang","ol_xunyu","ol_dianwei","re_yanwen","ol_pangtong","ol_yuanshao","ol_pangde","re_taishici"],
refresh_lin:['re_menghuo','ol_sunjian','re_caopi','ol_xuhuang','ol_dongzhuo','ol_zhurong','re_jiaxu','ol_lusu'],
refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu'],
@ -20,6 +20,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
connect:true,
character:{
ol_dianwei:['male','wei',4,['olqiangxi','olningwu']],
re_sp_taishici:['male','qun',4,['rejixu']],
re_liufeng:['male','shu',4,['rexiansi']],
ol_xunyu:['male','wei',3,['quhu','oljieming']],
@ -33,7 +34,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_guohuanghou:['female','wei',3,['rejiaozhao','redanxin']],
re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']],
ol_lusu:['male','wu',3,['olhaoshi','oldimeng']],
re_jiaxu:['male','qun',3,['rewansha','luanwu','reweimu']],
re_jiaxu:['male','qun',3,['rewansha','reluanwu','reweimu']],
re_guyong:['male','wu',3,['reshenxing','rebingyi']],
xin_zhonghui:['male','wei',4,['xinquanji','xinzili']],
re_caifuren:['female','qun',3,['reqieting','rexianzhou']],
@ -119,7 +120,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_pangde:['male','qun',4,['mashu','rejianchu']],
ol_xuhuang:['male','wei',4,['olduanliang','oljiezi']],
ol_sp_zhugeliang:["male","shu",3,["bazhen","rehuoji","rekanpo","cangzhuo"],[]],
re_dianwei:["male","wei",4,["reqiangxi"],[]],
re_yanwen:["male","qun",4,["reshuangxiong"],[]],
ol_yuanshao:['male','qun',4,['olluanji','olxueyi'],['zhu']],
re_menghuo:['male','shu',4,['huoshou','rezaiqi']],
@ -149,6 +149,72 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//典韦
olqiangxi:{
audio:'qiangxi',
audioname:['ol_dianwei','boss_lvbu3'],
enable:'phaseUse',
usable:2,
filter:function(event,player){
if(player.hp<1&&!player.hasCard((card)=>lib.skill.olqiangxi.filterCard(card),'he')) return false;
return game.hasPlayer((current)=>lib.skill.olqiangxi.filterTarget(null,player,current));
},
filterCard:function(card){
return get.subtype(card)=='equip1';
},
position:'he',
filterTarget:function(card,player,target){
if(target==player) return false;
var stat=player.getStat()._olqiangxi;
return !stat||!stat.contains(target);
},
selectCard:function(){
if(_status.event.player.hp<1) return 1;
return [0,1];
},
content:function(){
var stat=player.getStat();
if(!stat._olqiangxi) stat._olqiangxi=[];
stat._olqiangxi.push(target);
if(!cards.length) player.damage('nosource','nocard');
target.damage('nocard');
},
ai:{
damage:true,
order:8,
result:{
player:function(player,target){
if(ui.selected.cards.length) return 0;
if(player.hp>=target.hp) return -0.9;
if(player.hp<=2) return -10;
return get.damageEffect(player,player,player);
},
target:function(player,target){
if(!ui.selected.cards.length){
if(player.hp<2) return 0;
if(player.hp==2&&target.hp>=2) return 0;
if(target.hp>player.hp) return 0;
}
return get.damageEffect(target,player,target);
}
},
threaten:1.5,
},
},
olningwu:{
audio:2,
trigger:{global:'damageEnd'},
filter:function(event,player){
if(player!=event.player&&player!=event.source) return false;
return event.player.getHistory('damage').indexOf(event)==1;
},
logTarget:'player',
forced:true,
content:function(){
player.draw();
player.discardPlayerCard(trigger.player,true,'ej');
},
},
//群太史慈
rejixu:{
audio:2,
@ -2271,11 +2337,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//虞翻
xinzongxuan:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
filter:function(event,player){
if(event.type!='discard') return false;
for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards2[i])=='d'){
var evt=event.getl(player);
if(!evt||!evt.cards2) return false;
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i])=='d'){
return true;
}
}
@ -2286,8 +2357,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(!game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain');
})) return false;
for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards2[i],true)=='d'&&get.type2(trigger.cards2[i],false)=='trick'){
var cards=trigger.getl(player).cards2;
for(var i=0;i<cards.length;i++){
if(get.position(cards[i],true)=='d'&&get.type2(cards[i],false)=='trick'){
return true;
}
}
@ -2295,10 +2367,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
"step 0"
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards2[i]);
var cards=[],cards2=trigger.getl(player).cards2;
for(var i=0;i<cards2.length;i++){
if(get.position(cards2[i],true)=='d'){
cards.push(cards2[i]);
}
}
var next=player.chooseToMove('纵玄:将任意张牌置于牌堆顶',true);
@ -2832,7 +2904,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
reluanwu:{
audio:2,
audio:'luanwu',
audioname:['re_jiaxu'],
unique:true,
enable:'phaseUse',
limited:true,
@ -2842,19 +2915,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return target!=player;
},
selectTarget:-1,
multitarget:true,
multiline:true,
contentBefore:function(){
player.awakenSkill('luanwu');
},
content:function(){
"step 0"
player.awakenSkill('reluanwu');
event.current=player.next;
event.currented=[];
event.num1=0;
event.num2=0;
"step 1"
event.currented.push(event.current);
event.current.animate('target');
event.current.chooseToUse('乱武:使用一张杀或失去一点体力',function(card){
target.chooseToUse('乱武:使用一张杀或失去一点体力',function(card){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments)
},function(card,player,target){
@ -2869,20 +2936,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return lib.filter.filterTarget.apply(this,arguments)
}).set('ai2',function(){
return get.effect_use.apply(this,arguments)+0.01;
});
"step 2"
return get.effect_use.apply(this,arguments)-_status.event.effect;
}).set('effect',get.effect(target,{name:'losehp'},target,target));
"step 1"
if(result.bool==false){
event.num1++;
event.current.loseHp();
target.loseHp();
}
else event.num2++;
event.current=event.current.next;
if(event.current!=player&&!event.currented.contains(event.current)){
game.delay(0.5);
event.goto(1);
}
else player.draw(Math.max(event.num1,event.num2));
},
contentAfter:function(){
player.chooseUseTarget('sha','是否使用一张【杀】?',false,'nodistance');
},
ai:{
order:1,
@ -2929,11 +2991,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
trigger.cancel();
var num=trigger.num;
player.draw(2*num);
},
ai:{
effect:{
target:function(card,player,target){
if(target==_status.currentPhase&&get.tag(card,'damage')) return 'zerotarget';
if(target==_status.currentPhase&&get.tag(card,'damage')) return [0,1];
},
},
},
@ -4084,7 +4148,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gzpaiyi:{
audio:2,
enable:'phaseUse',
usable:2,
usable:1,
filter:function(event,player){
return player.getExpansions('gzquanji').length>0;
},
@ -4121,7 +4185,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.loseToDiscardpile(card);
"step 1"
var num=player.getExpansions('gzquanji').length;
if(num>0) target.draw(num);
if(num>0) target.draw(Math.min(7,num));
"step 2"
if(target.countCards('h')>player.countCards('h')){
target.damage();
@ -5176,8 +5240,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
inherit:'tuntian',
filter:function(event,player){
if(player==_status.currentPhase){
return event.name=='lose'&&event.type=='discard'&&event.cards2.filter(function(card){
return get.name(card,event.hs.contains(card)?player:false)=='sha';
if(event.type!='discard') return false;
var evt=event.getl(player);
return evt&&evt.cards2&&evt.cards2.filter(function(i){
return get.name(i,evt.hs.contains(i)?player:false)==true;
}).length>0;
};
if(event.name=='gain'&&event.player==player) return false;
@ -6623,12 +6689,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{
discard:{
audio:'reluoying',
trigger:{global:'loseAfter'},
trigger:{global:['loseAfter','loseAsyncAfter']},
filter:function(event,player){
if(event.type!='discard') return false;
if(event.player==player) return false;
for(var i=0;i<event.cards2.length;i++){
if(get.suit(event.cards2[i],event.player)=='club'&&get.position(event.cards2[i],true)=='d'){
if(event.type!='discard'||event.getlx===false) return false;
var cards=event.cards.slice(0);
var evt=event.getl(player);
if(evt&&evt.cards) cards.removeArray(evt.cards);
for(var i=0;i<cards.length;i++){
if(cards[i].original!='j'&&get.suit(cards[i],event.player)=='club'&&get.position(cards[i],true)=='d'){
return true;
}
}
@ -6639,10 +6707,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.suit(trigger.cards2[i],trigger.player)=='club'&&get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards2[i]);
var cards=[],cards2=trigger.cards.slice(0),evt=trigger.getl(player);
if(evt&&evt.cards) cards2.removeArray(evt.cards);
for(var i=0;i<cards2.length;i++){
if(cards2[i].original!='j'&&get.suit(cards2[i],trigger.player)=='club'&&get.position(cards2[i],true)=='d'){
cards.push(cards2[i]);
}
}
if(cards.length){
@ -12063,7 +12132,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_huaxiong:"界华雄",
"ol_sp_zhugeliang":"界卧龙",
"re_dianwei":"界典韦",
"re_yanwen":"界颜良文丑",
xin_yuanshao:"手杀袁绍",
re_zhangjiao:'界张角',
@ -12526,9 +12594,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rewansha:'完杀',
rewansha_info:'锁定技。①你的回合内,不处于濒死状态的角色不能使用【桃】。②当有角色于你的回合内进入濒死状态时,你令其以外的所有其他角色的非锁定技失效直到此濒死状态结算结束。',
reluanwu:'乱武',
reluanwu_info:'限定技出牌阶段你可令所有其他角色依次选择一项①对距离最近或之一的角色使用一张【杀】②失去1点体力。然后你摸X张牌X为选择①和②的角色数中的最大值)。',
reluanwu_info:'限定技出牌阶段你可令所有其他角色依次选择一项①对距离最近或之一的角色使用一张【杀】②失去1点体力。结算完成后,你可视为使用一张【杀】(无距离限制)。',
reweimu:'帷幕',
reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时,防止此伤害。',
reweimu_info:'锁定技。①你不能成为黑色锦囊牌的目标。②当你于回合内受到伤害时,防止此伤害并摸2X张牌X为伤害值。',
ol_lusu:'界鲁肃',
olhaoshi:'好施',
olhaoshi_info:'摸牌阶段开始时你可以多摸两张牌。然后摸牌阶段结束时若你的手牌数大于5则你将手牌数的一半向下取整交给一名手牌最少其他角色并获得如下效果直到你下回合开始当你成为【杀】或普通锦囊牌的目标后其可以交给你一张手 牌。',
@ -12628,6 +12696,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_sp_taishici_ab:'太史慈',
rejixu:"击虚",
rejixu_info:"出牌阶段限一次。若你有手牌则你可以选择至多X名角色令这些角色猜测你的手牌区中是否有【杀】。若你有【杀】则你本阶段使用【杀】的次数上限+Y且当你于本阶段内使用【杀】指定目标后你可以令这Y名角色也成为此【杀】的目标没有【杀】则你弃置这Y名角色的各一张牌。然后你摸Y张牌X为你的体力值Y为这些角色中猜错的角色数。",
ol_dianwei:'界典韦',
olqiangxi:'强袭',
olqiangxi_info:'出牌阶段限两次。你可以弃置一张武器牌或受到1点无来源伤害然后对一名本回合内未成为过〖强袭〗目标的其他角色造成1点伤害。',
olningwu:'狞恶',
olningwu_info:'锁定技。当一名角色A于一回合内第二次受到伤害后若A或伤害来源为你则你摸一张牌然后弃置其装备区或判定区内的一张牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -69,7 +69,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"yl_yuanshu":["male","qun",4,["drlt_yongsi","drlt_weidi"],["zhu"]],
"zhangxiu":["male","qun",4,["drlt_xiongluan","drlt_congjian"],[]],
"chendao":["male","shu",4,["drlt_wanglie"],[]],
zhoufei:["female","wu",3,["liangyin","kongsheng"],[]],
zhoufei:["female","wu",3,["olliangyin","olkongsheng"]],
},
perfectPair:{
jiaxu:['liqueguosi'],
@ -141,6 +141,250 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"chendao":"陈到,字叔至,生卒年不详,豫州汝南(今河南驻马店平舆县)人。三国时期蜀汉将领,刘备帐下白毦兵统领,名位常亚于赵云,以忠勇著称。蜀汉建兴年间,任征西将军、永安都督,封亭侯。在任期间去世。",
},
skill:{
//周妃
olliangyin:{
audio:'liangyin',
trigger:{
global:["loseAfter","addToExpansionAfter","cardsGotoSpecialAfter",'loseAsyncAfter'],
},
filter:function(event,player,name){
if(event.name=='lose'||event.name=='loseAsync') return event.getlx!==false&&event.toStorage==true;
if(event.name=='cardGotoSpecial') return !event.notrigger;
return true;
},
direct:true,
usable:1,
content:function(){
'step 0'
player.chooseTarget(get.prompt('olliangyin'),'选择一名其他角色,你与其各摸一张牌',lib.filter.notMe).set('ai',function(target){
var player=_status.event.player,num=player.getExpansions('olkongsheng').length-1;
var att=get.attitude(player,target);
if(att<=0) return 0;
if(target.countCards('h')==num&&target.isDamaged()&&get.recoverEffect(target,player,player)>0) return 3*att;
return att;
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('olliangyin',target);
game.asyncDraw([player,target].sortBySeat());
}
else event.finish();
'step 2'
game.delayx();
var num=player.getExpansions('olkongsheng').length;
var check=function(player){
if(!player.isIn()||player.isHealthy()) return false;
return player.countCards('h')==num;
}
if(check(player)||check(target)){
var choiceList=[
'令自己回复1点体力',
'令'+get.translation(target)+'回复1点体力',
];
var choices=[];
if(check(player)) choices.push('选项一');
else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
if(check(target)) choices.push('选项二');
else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
choices.push('cancel2');
player.chooseControl(choices).set('choiceList',choiceList).set('prompt','良姻:是否令一名角色回复体力?').set('ai',function(){
var player=_status.event.player,target=_status.event.getParent().target;
var list=_status.event.controls.slice(0),eff1=0,eff2=0;
if(list.contains('选项一')) eff1=get.recoverEffect(player,player,player);
if(list.contains('选项二')) eff2=get.recoverEffect(target,player,player);
if(eff1>Math.max(0,eff2)) return '选项一';
if(eff2>0) return '选项二';
return 'cancel2';
});
}
else event.finish();
'step 3'
if(result.control=='选项一') player.recover();
else if(result.control=='选项二') target.recover();
},
group:'olliangyin_gain',
subSkill:{
gain:{
audio:'liangyin',
trigger:{
global:['loseAfter','equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
direct:true,
filter:function(event,player){
var evt=event.getl(player);
return evt&&(evt.xs.length>0||evt.ss.length>0);
},
usable:1,
content:function(){
'step 0'
if(!player.countCards('he')||!game.hasPlayer(function(current){
return current!=player&&current.countCards('he')>0;
})) event.finish();
else player.chooseCardTarget({
prompt:get.prompt('olliangyin'),
prompt2:'弃置一张牌,并令一名其他角色也弃置一张牌',
position:'he',
filterCard:lib.filter.cardDiscardable,
filterTarget:function(card,player,target){
return target!=player&&target.countCards('he')>0;
},
ai1:function(card){
var player=_status.event.player;
var num=player.getExpansions('olkongsheng').length,hs=player.countCards('h');
if(get.position(card)!='e') hs--;
if(hs==num&&player.isDamaged()&&get.recoverEffect(player,player,player)>0) return 9-get.value(card);
return 5-get.value(card);
},
ai2:function(target){
var player=_status.event.player;
var has=target.hasCard(function(card){
return get.value(card,target)<=0;
},'e'),att=get.attitude(player,target);
if(!has) att=-att;
return att*has?2:1;
},
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('olliangyin_gain',target);
player.discard(result.cards);
target.chooseToDiscard('he',true);
}
else event.finish();
'step 2'
game.delayx();
var num=player.getExpansions('olkongsheng').length;
var check=function(player){
if(!player.isIn()||player.isHealthy()) return false;
return player.countCards('h')==num;
}
if(check(player)||check(target)){
var choiceList=[
'令自己回复1点体力',
'令'+get.translation(target)+'回复1点体力',
];
var choices=[];
if(check(player)) choices.push('选项一');
else choiceList[0]='<span style="opacity:0.5">'+choiceList[0]+'</span>';
if(check(target)) choices.push('选项二');
else choiceList[1]='<span style="opacity:0.5">'+choiceList[1]+'</span>';
choices.push('cancel2');
player.chooseControl(choices).set('choiceList',choiceList).set('prompt','良姻:是否令一名角色回复体力?').set('ai',function(){
var player=_status.event.player,target=_status.event.getParent().target;
var list=_status.event.controls.slice(0),eff1=0,eff2=0;
if(list.contains('选项一')) eff1=get.recoverEffect(player,player,player);
if(list.contains('选项二')) eff2=get.recoverEffect(target,player,player);
if(eff1>Math.max(0,eff2)) return '选项一';
if(eff2>0) return '选项二';
return 'cancel2';
});
}
else event.finish();
'step 3'
if(result.control=='选项一') player.recover();
else if(result.control=='选项二') target.recover();
},
},
},
},
olkongsheng:{
audio:'kongsheng',
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
return player.countCards('he')>0;
},
content:function(){
'step 0'
player.chooseCard('he',[1,player.countCards('he')],get.prompt('olkongsheng'),'将任意张牌作为“箜”置于武将牌上').set('ai',function(card){
var player=_status.event.player,num=player.getExpansions('olkongsheng')+ui.selected.cards.length;
if(ui.selected.cards.length>0&&game.hasPlayer(function(current){
if(current.isHealthy()||get.recoverEffect(current,player,player)<=0) return false;
var num2=current.countCards('h',function(card){
if(current!=player) return true;
return !ui.selected.cards.contains(card);
})+1;
return num==num2;
})) return 0;
if(get.type(card,null,false)=='equip'){
for(var i of ui.selected.cards){
if(get.type(i,null,false)=='equip') return 0;
}
return 5-get.value(card);
}
if(!player.hasValueTarget(card)) return 1;
return 0;
});
'step 1'
if(result.bool){
player.logSkill('olkongsheng');
player.addToExpansion(result.cards,player,'give').gaintag.add('olkongsheng');
}
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
},
intro:{
content:'expansion',
markcount:'expansion',
},
group:'olkongsheng_kessoku',
subSkill:{
kessoku:{
trigger:{player:'phaseJieshuBegin'},
forced:true,
locked:false,
filter:function(event,player){
return player.getExpansions('olkongsheng').filter(function(card){
return get.type(card,false)!='equip';
}).length>0;
},
content:function(){
'step 0'
var cards=player.getExpansions('olkongsheng').filter(function(card){
return get.type(card,false)!='equip';
});
if(cards.length) player.gain(cards,'gain2');
'step 1'
var cards=player.getExpansions('olkongsheng');
if(cards.length>0){
player.chooseTarget(true,'令一名角色使用以下装备牌',get.translation(cards)).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,{name:'losehp'},player,player);
});
}
else event.finish();
'step 2'
var target=result.targets[0];
event.target=target;
player.line(target,'green');
'step 3'
var cards=player.getExpansions('olkongsheng').filter(function(i){
return target.hasUseTarget(i);
});
if(cards.length==1){
event._result={bool:true,links:cards}
}
else if(cards.length) target.chooseButton(true,['选择要使用的装备牌',cards]).set('ai',function(button){
return get.order(button.link);
});
else event.goto(5);
'step 4'
if(result.bool){
target.chooseUseTarget(result.links[0],true);
event.goto(3);
}
'step 5'
target.loseHp();
},
},
},
},
//新毌丘俭
zhengrong:{
trigger:{player:'useCardToPlayered'},
@ -1275,7 +1519,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
prompt2:'当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌',
filter:function(event,player){
return event.card.name=='sha'&&event.player.countGainableCards(player,'he')>0&&player.storage.nzry_juzhan==true;
return event.card.name=='sha'&&player.storage.nzry_juzhan==true&&event.target.countGainableCards(player,'he')>0;
},
check:function(event,player){
return event.player.countCards('he')>0&&event.targets&&event.targets.length==1;
@ -5473,9 +5717,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return get.damageEffect(target,player);
}
}
},
threaten:1.3,
},
threaten:1.3
},
xinqiangxi:{
audio:'qiangxi',
@ -7300,7 +7544,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiaoqiao:['ol_xiaoqiao','re_xiaoqiao','xiaoqiao'],
yuji:['xin_yuji','re_yuji','yuji'],
zhangjiao:['re_zhangjiao','sp_zhangjiao','zhangjiao'],
dianwei:['dianwei','re_dianwei'],
dianwei:['ol_dianwei','re_dianwei','dianwei'],
xunyu:['ol_xunyu','re_xunyu','xunyu'],
sp_zhugeliang:['ol_sp_zhugeliang','re_sp_zhugeliang','sp_zhugeliang'],
pangtong:['ol_pangtong','re_pangtong','pangtong'],
@ -7721,6 +7965,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"guhuo_phase_info":"",
xinhongyan:'红颜',
xinhongyan_info:'锁定技,你的♠牌和♠判定牌的花色视为♥。一名角色的判定结果生效前,若判定结果为♥,则你将其改为一种花色。',
olliangyin:'良姻',
olliangyin_info:'当有牌发生移动后,若此移动事件是本回合内你拥有〖良姻〗期间的首个有牌移出游戏/移入游戏的事件,则你可以选择一名其他角色。你与其各摸一张牌/弃置一张牌然后你可以选择你或其中的一名手牌数为X的角色该角色回复1点体力X为你的“箜”数',
olkongsheng:'箜声',
olkongsheng_info:'①准备阶段开始时你可以将任意张牌置于你的武将牌上称为“箜”。②结束阶段开始时若你有不为装备牌的“箜”则你获得“箜”中的非装备牌然后令一名角色依次使用“箜”中的装备牌并失去1点体力。',
shenhua_feng:'神话再临·风',
shenhua_huo:'神话再临·火',

View File

@ -6,11 +6,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
characterSort:{
sp:{
sp_tianji:["sunhao","liuxie","caoang","hetaihou","sunluyu",'ol_wangrong',"zuofen","ganfuren","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','zhaoyǎn'],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao"],
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'],
sp_tianzhu:["wutugu","yanbaihu","shamoke","panfeng","zhugedan",'huangzu','gaogan',"tadun","fanjiangzhangda"],
sp_nvshi:["lingju","guanyinping","zhangxingcai","mayunlu","dongbai","zhaoxiang",'ol_zhangchangpu','ol_xinxianying',"daxiaoqiao","jin_guohuai"],
sp_shaowei:["simahui","zhangbao","zhanglu","zhugeguo","xujing","zhangling",'huangchengyan','ol_puyuan'],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","fanjiangzhangda","huojun"],
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong'],
sp_liesi:['mizhu','weizi'],
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:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
@ -28,6 +28,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
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']],
@ -174,6 +178,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//kaisa:["male","western",4,["zhengfu"]],
},
characterIntro:{
xiahouxuan:'夏侯玄209年254年字泰初《三国志》等作太初沛国谯县今安徽省亳州市人。三国时期曹魏大臣、思想家、文学家征南大将军夏侯尚之子大将军曹爽的表弟。夏侯玄少年有名望仪表出众时人称为“朗朗如日月之入怀”。魏文帝黄初六年225年袭封昌陵乡侯。魏明帝时历任散骑黄门侍郎、羽林监。少帝曹芳继位后拜散骑常侍、中护军保卫皇宫。后任征西将军任内与曹爽策划骆谷之役大失人心。高平陵政变后被夺去兵权改任大鸿胪、太常卿。嘉平六年254年中书令李丰与外戚张缉密谋杀死大将军司马师改以夏侯玄执政。事泄被杀夷灭三族夏侯玄死时年仅四十六岁。著有文集三卷如今已佚。政治上提出了“审官择人”、“除重官”、“改服制”等制度被太傅司马懿评价“皆大善”。博学多识才华出众精通玄学成为“四聪”之一与何晏等人开创了魏晋玄学的先河是早期的玄学领袖人物。',
dengzhong:'邓忠不详264年三国时期曹魏名将邓艾之子。景元五年264年钟会谋反事败士兵哗变钟会被杀邓艾部将想追还邓艾父子但卫瓘却派田续追邓艾于绵竹西相遇将邓艾和邓忠等人杀死。直至泰始九年273年才恢复名节。',
wangyan:'王衍256年311年字夷甫琅邪郡临沂县今山东省临沂市人。西晋末年重臣玄学清谈领袖曹魏幽州刺史王雄之孙、平北将军王乂之子、司徒王戎堂弟。王衍出身琅琊王氏。外表清明俊秀风姿安详文雅笃好老庄学说颇有时名。步入仕途后历任黄门侍郎、中领军、尚书令、尚书仆射等职。光熙元年307年升任司空。次年又任司徒。王衍位高权重却不思为国为保全自己还让弟弟王澄、族弟王敦分任荆州、青州刺史遭时人鄙夷。王弥进攻洛阳时王衍率军抵抗。其后转任太尉兼尚书令又兼领太傅军司。永嘉五年311年东海王司马越去世王衍奉其灵柩返回东海途中为羯人石勒所俘获。王衍在与石勒交谈时仍推脱责任并劝其称帝石勒大怒将其与西晋旧臣一同活埋时年五十六岁。王衍工书法尤擅行书《宣和书谱》有其作品《尊夫人帖》。',
caoxiancaohua:'此处为「曹宪」的相关介绍。关于「曹华」的部分请参考原本的介绍。<br>曹宪生卒年不详沛国谯县今安徽省亳州市人。东汉末年历史人物汉献帝刘协嫔妃魏武帝曹操女儿。建安十八年嫁给汉献帝刘协受封为贵人。黄初元年220年兄弟曹丕称帝后汉献帝成为山阳公不知所终。',
zhaoyǎn:'赵俨171~245年字伯然颍川阳翟今河南禹州市。东汉末年颍川“四大名士”之一三国时期魏国名臣。熟读经史精明强干。建安二年投靠大将军曹操之后起家朗陵县令历任司空府掾、司空主薄、都督护军、扶风太守等职。魏文帝曹丕继位后历任魏国侍中、驸马都尉、河东太守、典农中郎将、度支尚书封宜土亭侯。魏明帝曹睿时期历任大司农、骠骑将军、大司空等职。正始六年去世时年七十五谥号为穆。',
ruiji:'芮姬,芮玄之女,太子孙登妃,黄武五年卒。',
@ -650,6 +657,556 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//夏侯玄
olhuanfu:{
audio:2,
trigger:{
player:'useCardToPlayered',
target:'useCardToTargeted',
},
filter:function(event,player){
if(event.card.name!='sha') return false;
if(player==event.player&&!event.isFirstTarget) return false;
if(event.olhuanfu_map&&event.olhuanfu_map[player.playerid]) return false;
return player.maxHp>0&&player.countCards('he')>0;
},
shaRelated:true,
direct:true,
content:function(){
'step 0'
player.chooseToDiscard('he',[1,player.maxHp],get.prompt('olhuanfu'),'通过弃牌,预测'+(player==trigger.player?'你':get.translation(trigger.player))+'使用的'+get.translation(trigger.card)+'能造成多少伤害。如果弃置的牌数等于总伤害,则你摸两倍的牌。').set('predict',function(){
var target=trigger.target;
if(player==target){
if(trigger.targets.length>1||player.hasShan()||get.effect(player,trigger.card,trigger.player,player)==0) return 0;
}
else{
var target=trigger.target;
if(trigger.targets.length>1||target.mayHaveShan()) return 0;
}
var num=trigger.getParent().baseDamage;
var map=trigger.getParent().customArgs,id=target.playerid;
if(map[id]){
if(typeof map[id].baseDamage=='number') num=map[id].baseDamage;
if(typeof map[id].extraDamage=='number') num+=map[id].extraDamage;
}
if(target.hasSkillTag('filterDamage',null,{
player:trigger.player,
card:trigger.card,
})) num=1;
return num;
}()).set('ai',function(card){
var num=_status.event.predict,player=_status.event.player;
if(ui.selected.cards.length>=num) return 0;
if(player.countCards('he',function(card){
return get.value(card)<6+num;
})<num) return 0;
return 6+num-get.value(card);
}).logSkill='olhuanfu';
'step 1'
if(result.bool){
player.addTempSkill('olhuanfu_lottery');
var evt=trigger.getParent();
if(!evt.olhuanfu_map) evt.olhuanfu_map={};
evt.olhuanfu_map[player.playerid]=result.cards.length;
}
},
ai:{
effect:{
target:function(card,player,target,current){
if(card.name=='sha'&&target.hp>0&&current<0&&target.countCards('he')>0) return 0.7;
},
},
},
subSkill:{
lottery:{
trigger:{global:'useCardAfter'},
forced:true,
charlotte:true,
filter:function(event,player){
var map=event.olhuanfu_map;
if(!map||!map[player.playerid]) return false;
var num=0;
event.player.getHistory('sourceDamage',function(evt){
if(evt.card==event.card&&evt.getParent().type=='card') num+=evt.num;
});
return num==map[player.playerid];
},
content:function(){
player.draw(2*trigger.olhuanfu_map[player.playerid]);
},
},
},
},
olqingyi:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'olqingyi');
},'he')&&game.hasPlayer(current=>lib.skill.olqingyi.filterTarget(null,player,current));
},
selectTarget:[1,2],
filterTarget:function(card,player,target){
return target!=player&&target.countCards('he')>0;
},
multitarget:true,
multiline:true,
content:function(){
'step 0'
var list=[player];
list.addArray(targets);
list.sortBySeat();
event.list=list;
for(var target of event.list){
if(!target.hasCard(function(card){
return lib.filter.cardDiscardable(card,target,'olqingyi');
},'he')){
event.finish();
break;
}
}
'step 1'
player.chooseCardOL(event.list,'he',true,'清议:选择弃置一张牌',function(card,player){
return lib.filter.cardDiscardable(card,player,'olqingyi');
}).set('ai',get.unuseful);
'step 2'
var lose_list=[],cards=[];
for(var i=0;i<result.length;i++){
var current=event.list[i],card=result[i].cards[0];
lose_list.push([current,result[i].cards]);
card.classList.remove('glow');
cards.push(card);
}
var type=get.type2(cards[0]);
for(var i=1;i<cards.length;i++){
if(get.type2(cards[i])!=type) event.finish();
}
game.loseAsync({
lose_list:lose_list,
}).setContent('discardMultiple');
'step 3'
event.goto(1);
for(var target of event.list){
if(!target.hasCard(function(card){
return lib.filter.cardDiscardable(card,target,'olqingyi');
},'he')){
event.finish();
break;
}
}
},
ai:{
threaten:1.2,
order:9,
result:{
target:-1,
},
},
group:'olqingyi_gain',
subSkill:{
gain:{
audio:'olqingyi',
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
var history=player.getHistory('useSkill',(evt)=>evt.skill=='olqingyi');
if(!history.length) return false;
var color=false;
for(var evt of history){
var list=[player];
list.addArray(evt.targets);
for(var target of list){
target.getHistory('lose',function(evtx){
if(color===true||evtx.getParent(2).name!='olqingyi') return false;
for(var card of evtx.cards){
if(color===true||get.position(card,true)!='d') continue;
var color2=get.color(card,false);
if(!color) color=color2;
else if(color!=color2) color=true;
}
});
if(color===true) return true;
}
}
return false;
},
content:function(){
'step 0'
var history=player.getHistory('useSkill',(evt)=>evt.skill=='olqingyi'),cards=[];
for(var evt of history){
var list=[player];
list.addArray(evt.targets);
for(var target of list){
target.getHistory('lose',function(evtx){
if(evtx.getParent(2).name!='olqingyi') return false;
for(var card of evtx.cards){
if(get.position(card,true)=='d') cards.add(card);
}
});
}
}
player.chooseButton(['清议:选择获得两张异色牌',cards],2).set('filterButton',function(button){
if(!ui.selected.buttons.length) return true;
return get.color(button.link,false)!=get.color(ui.selected.buttons[0].link,false);
}).set('ai',function(button){
return get.value(button.link,_status.event.player);
});
'step 1'
if(result.bool){
player.logSkill('olqingyi_gain');
player.gain(result.links,'gain2');
}
},
},
},
},
olzeyue:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
limited:true,
skillAnimation:true,
animationColor:'water',
direct:true,
filter:function(event,player){
var sources=[],history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
if(i<history.length-1&&history[i].isMe) break;
for(var evt of history[i].damage){
if(evt.source&&evt.source!=player&&evt.source.isIn()) sources.add(evt.source);
}
}
for(var source of sources){
var skills=source.getStockSkills('一!','五!');
for(var skill of skills){
var info=get.info(skill);
if(info&&!info.charlotte&&!get.is.locked(skill,source)&&source.hasSkill(skill,null,null,false)) return true;
}
}
return false;
},
content:function(){
'step 0'
var sources=[],history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
if(i<history.length-1&&history[i].isMe) break;
for(var evt of history[i].damage){
if(evt.source&&evt.source!=player&&evt.source.isIn()) sources.add(evt.source);
}
}
sources=sources.filter(function(source){
var skills=source.getStockSkills('一!','五!');
for(var skill of skills){
var info=get.info(skill);
if(info&&!info.charlotte&&!get.is.locked(skill,source)&&source.hasSkill(skill,null,null,false)) return true;
}
return false;
});
player.chooseTarget(get.prompt('olzeyue'),'令一名可选角色的一个非锁定技失效',function(card,player,target){
return _status.event.sources.contains(target);
}).set('sources',sources).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target);
if(att>=0) return 0;
return get.threaten(target,player);
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('olzeyue',target);
player.awakenSkill('olzeyue');
event.target=target;
var skills=target.getStockSkills('一!','五!');
skills=skills.filter(function(skill){
var info=get.info(skill);
if(info&&!info.charlotte&&!get.is.locked(skill,target)&&target.hasSkill(skill,null,null,false)) return true;
});
if(skills.length==1) event._result={control:skills[0]};
else player.chooseControl(skills).set('prompt','令'+get.translation(target)+'的一个技能失效');
}
else event.finish();
'step 2'
var skill=result.control;
target.disableSkill('olzeyue_'+player.playerid,skill);
target.storage['olzeyue_'+player.playerid]=true;
player.addSkill('olzeyue_round');
player.markAuto('olzeyue_round',[target]);
if(!player.storage.olzeyue_map) player.storage.olzeyue_map={};
player.storage.olzeyue_map[target.playerid]=0;
game.log(target,'的技能','#g【'+get.translation(skill)+'】','被失效了');
},
ai:{threaten:3},
subSkill:{
round:{
trigger:{global:'roundStart'},
forced:true,
charlotte:true,
popup:false,
filter:function(event,player){
var storage=player.getStorage('olzeyue_round');
for(var source of storage){
if(source.isIn()&&source.canUse('sha',player,false)) return true;
}
return false;
},
content:function(){
'step 0'
event.targets=player.storage.olzeyue_round.slice(0).sortBySeat();
event.target=event.targets.shift();
'step 1'
var map=player.storage.olzeyue_map;
if(target.storage['olzeyue_'+player.playerid]) map[target.playerid]++;
event.num=map[target.playerid]-1;
if(event.num<=0) event.finish();
'step 2'
event.num--;
target.useCard(player,{name:'sha',isCard:true},false,'olzeyue_round');
'step 3'
var key='olzeyue_'+player.playerid;
if(target.storage[key]&&player.hasHistory('damage',function(evt){
return evt.card.name=='sha'&&evt.getParent().type=='card'&&evt.getParent(3)==event;
})){
for(var skill in target.disabledSkills){
if(target.disabledSkills[skill].contains(key)) game.log(target,'恢复了技能','#g【'+get.translation(skill)+'】');
}
delete target.storage[key];
target.enableSkill(key);
}
if(event.num>0&&player.isIn()&&target.isIn()&&target.canUse('sha',player,false)){
event.goto(2);
}
else if(event.targets.length>0){
event.target=event.targets.shift();
event.goto(1);
}
},
},
},
},
//邓忠
dzkanpo:{
audio:2,
trigger:{source:'damageSource'},
filter:function(event,player){
return event.getParent().type=='card'&&event.card&&event.card.name=='sha'&&event.player.countCards('he')>0;
},
logTarget:'player',
content:function(){
var suit=get.suit(trigger.card);
var next=player.gainPlayerCard(trigger.player,'h','visible');
next.set('suit',suit);
next.set('filterButton',function(button){
var evt=_status.event;
return get.suit(button.link,evt.target)==evt.suit;
});
},
group:'dzkanpo_sha',
subSkill:{
sha:{
enable:'chooseToUse',
usable:1,
viewAs:{name:'sha'},
viewAsFilter:function(player){
return player.countCards('hs')>0;
},
filterCard:true,
position:'hs',
prompt:'将一张手牌当做【杀】使用',
check:function(card){
return 6-get.value(card);
},
ai:{
respondSha:true,
skillTagFilter:function(player){
if(player.getStat('skill').dzkanpo_sha) return false;
if(!player.countCards('hs')) return false;
},
},
},
},
},
dzgengzhan:{
audio:2,
trigger:{
global:['loseAfter','loseAsyncAfter'],
},
usable:1,
filter:function(event,player){
if(event.type!='discard'||event.getlx===false||player==_status.currentPhase||!event.isPhaseUsing()) return false;
for(var card of event.cards){
if(get.position(card,true)=='d'&&get.name(card,event.hs&&event.hs.contains(card)?event.player:false)=='sha') return true;
}
},
direct:true,
content:function(){
'step 0'
var cards=trigger.cards.filter(function(card){
return (get.position(card,true)=='d'&&get.name(card,trigger.hs&&trigger.hs.contains(card)?trigger.player:false)=='sha')
});
player.chooseButton(['是否发动【更战】获得一张杀?',cards]).set('ai',function(button){
return get.value(button.link,_status.event.player);
});
'step 1'
if(result.bool){
player.logSkill('dzgengzhan');
player.gain(result.links,'gain2');
}
else player.storage.counttrigger.dzgengzhan--;
},
group:'dzgengzhan_add',
subSkill:{
add:{
audio:'dzgengzhan',
trigger:{global:'phaseJieshuBegin'},
forced:true,
locked:false,
filter:function(event,player){
return player!=event.player&&!event.player.hasHistory('useCard',function(evt){
return evt.card.name=='sha';
});
},
logTarget:'player',
content:function(){
player.addTempSkill('dzgengzhan_effect',{player:'phaseUseAfter'});
player.addMark('dzgengzhan_effect',1,false);
game.delayx();
},
},
effect:{
onremove:true,
charlotte:true,
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.countMark('dzgengzhan_effect');
},
},
intro:{content:'使用杀的次数上限+#'},
},
},
},
//王衍
yangkuang:{
audio:2,
trigger:{player:'recoverEnd'},
filter:function(event,player){
return player.isHealthy();
},
logTarget:function(event,player){
return _status.currentPhase||player;
},
check:function(event,player){
var target=(_status.currentPhase||player);
if(get.attitude(player,target)>0) return true;
if(player.countCards('h')>target.countCards('h')) return true;
if(!target.getCardUsable('sha')) return true;
return false;
},
content:function(){
'step 0'
player.chooseUseTarget('jiu',true);
'step 1'
var target=_status.currentPhase;
if(target) target.draw('nodelay');
player.draw();
},
},
cihuang:{
audio:2,
trigger:{
global:['eventNeutralized','shaMiss'],
},
direct:true,
filter:function(event,player){
if(event.player!=_status.currentPhase||event.targets.length!=1||event.type!='card') return false;
return lib.skill.cihuang.getList(player,event.player,true);
},
getList:function(player,target,bool){
var natures=lib.inpile_nature.slice(0);
var tricks=[];
for(var name of lib.inpile){
var info=lib.card[name];
if(!info||info.type!='trick'||info.notarget||((info.selectTarget&&info.selectTarget!=1)&&(info.selectTarget!=-1||!info.toself))) continue;
tricks.push(name);
}
var history=player.actionHistory;
for(var i=history.length-1;i>=0;i--){
var info=history[i];
for(var evt of info.useCard){
var name=evt.card.name;
if(name=='sha'){
if(evt.card.nature) natures.remove(evt.card.nature);
}
else tricks.remove(name);
};
if(info.isRound) break;
}
var vcards=[];
for(var i of natures){
if(player.canUse({
name:'sha',
nature:i,
isCard:true,
},target)){
if(bool) return true;
else vcards.push(['基本','','sha',i]);
}
}
for(var i of tricks){
if(player.canUse({
name:i,
isCard:true,
},target)){
if(bool) return true;
else vcards.push(['锦囊','',i]);
}
}
if(bool) return false;
return vcards;
},
content:function(){
'step 0'
var target=trigger.player;
var list=lib.skill.cihuang.getList(player,target);
player.chooseButton([get.prompt('cihuang',target),'<div class="text center">视为对'+get.translation(target)+'使用以下的一张牌</div>',[list,'vcard']]).set('ai',function(button){
var card={
name:button.link[2],
nature:button.link[3],
isCard:true,
storage:{cihuang:true},
},player=_status.event.player,target=_status.event.getTrigger().player;
return get.effect(target,card,player,player);
});
'step 1'
if(result.bool){
player.useCard({
name:result.links[0][2],
nature:result.links[0][3],
isCard:true,
storage:{cihuang:true},
},false,trigger.player,'cihuang').oncard=function(card,player){
_status.event.directHit.addArray(game.filterPlayer());
};
}
},
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
return arg&&arg.card&&arg.card.storage&&arg.card.storage.cihuang;
},
},
},
sanku:{
audio:2,
trigger:{player:'dying'},
forced:true,
content:function(){
'step 0'
player.loseMaxHp();
'step 1'
var num=player.maxHp-player.hp;
if(num>0) player.recover(num);
},
ai:{halfneg:true},
},
//霍峻
qiongshou:{
audio:2,
@ -734,7 +1291,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player!=target&&player.countCards('e')>target.countCards('e');
}).set('ai',function(target){
var player=_status.event.player;
var num=player.countCards('h')-target.countCards('h');
var num=player.countCards('e')-target.countCards('e');
if(get.attitude(player,target)>=0) return 0;
if(num>=Math.min(2,player.hp,target.hp)) return get.damageEffect(target,player,player);
return 0;
@ -1455,7 +2012,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('tongxie'),'选择至多两名其他角色作为“同协角色”',lib.filter.notMe,[1,2]).set('ai',function(target){
player.chooseTarget(get.prompt('tongxie'),'选择至多两名其他角色作为“同协角色”',lib.filter.notMe,[0,2]).set('ai',function(target){
return get.attitude(_status.event.player,target);
});
'step 1'
@ -1803,15 +2360,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var subtype=get.subtype(cards[0]);
if(subtype!='equip1'&&subtype!='equip2') subtype='others';
var card_map={
equip1:['wushuangfangtianji','guilongzhanyuedao','chixueqingfeng','bintieshuangji','wutiesuolian','wuxinghelingshan'],
equip2:['linglongshimandai','hongmianbaihuapao','qimenbagua','guofengyupao','huxinjing','heiguangkai'],
others:['shufazijinguan','xuwangzhimian','tianjitu','taigongyinfu','sanlve','zhaogujing'],
equip1:[
['diamond',13,'bintieshuangji'],
['diamond',1,'wuxinghelingshan'],
['spade',13,'wutiesuolian'],
['diamond',12,'wushuangfangtianji'],
['spade',6,'chixueqingfeng'],
['spade',5,'guilongzhanyuedao'],
],
equip2:[
['club',1,'huxinjing'],
['club',2,'heiguangkai'],
['spade',2,'linglongshimandai'],
['club',1,'hongmianbaihuapao'],
['spade',2,'qimenbagua'],
['spade',9,'guofengyupao'],
],
others:[
['diamond',1,'zhaogujing'],
['spade',5,'sanlve'],
['club',12,'tianjitu'],
['spade',2,'taigongyinfu'],
['diamond',1,'shufazijinguan'],
['club',4,'xuwangzhimian'],
],
};
if(!_status.olshengong_map) _status.olshengong_map={};
if(!_status.olshengong_maken) _status.olshengong_maken={};
var list=card_map[subtype];
for(var i=0;i<list.length;i++){
var name=list[i];
var name=list[i][2];
if(!lib.card[name]||_status.olshengong_map[name]){
list.splice(i--,1);
}
@ -1825,7 +2403,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card;
if(_status.olshengong_maken[name]) card=_status.olshengong_maken[name];
else{
card=game.createCard2(name);
card=game.createCard2(name,result.links[0][0],result.links[0][1]);
_status.olshengong_maken[name]=card;
}
event.card=card;
@ -1919,6 +2497,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.isEmpty(2)||player.isEmpty(5)||player.isEmpty(1)) return true;
return false;
},
prompt2:'摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
content:function(){
'step 0'
player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){
@ -3886,24 +4465,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chuiti:{
audio:2,
usable:1,
trigger:{global:'loseAfter'},
trigger:{
global:['loseAfter','loseAsyncAfter'],
},
direct:true,
filter:function(event,player){
if(event.type!='discard') return false;
if(player!=event.player){
var card=event.player.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
}
for(var i of event.cards2){
if(get.position(i,true)=='d'&&player.hasUseTarget(i)) return true;
}
return false;
if(event.type!='discard'||event.getlx===false) return false;
return game.hasPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
}
var evt=event.getl(current);
if(!evt||!evt.cards2) return false;
for(var i of evt.cards2){
if(get.position(i,true)=='d'&&player.hasUseTarget(i)) return true;
}
return false;
});
},
content:function(){
'step 0'
player.chooseButton(['垂涕:是否使用其中的一张牌?',trigger.cards2.filter(function(i){
return (get.position(i,true)=='d'&&player.hasUseTarget(i));
})]).set('ai',function(button){
var cards=[];
game.countPlayer(function(current){
if(player!=current){
var card=current.getEquip(5);
if(!card||card.name.indexOf('zhuangshu_')!=0) return false;
}
var evt=trigger.getl(current);
for(var i of evt.cards2){
if(get.position(i,true)=='d'&&player.hasUseTarget(i)) cards.push(i);
}
return false;
});
player.chooseButton(['垂涕:是否使用其中的一张牌?',cards]).set('ai',function(button){
return _status.event.player.getUseValue(button.link);
});
'step 1'
@ -4906,14 +5501,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
bixiong:{
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
forced:true,
filter:function(event,player){
return event.type=='discard'&&event.getParent('phaseDiscard').player==player&&event.hs&&event.hs.length>0;
if(event.type!='discard'||event.getlx===false||event.getParent('phaseDiscard').player!=player) return false;
var evt=event.getl(player);
return evt&&evt.hs&&evt.hs.length>0;
},
content:function(){
var cards=[];
for(var i of trigger.hs) cards.add(get.suit(i,player));
var cards=[],hs=trigger.getl(player).hs;
for(var i of hs) cards.add(get.suit(i,player));
player.addTempSkill('bixiong2',{player:'phaseBegin'});
player.markAuto('bixiong2',cards);
},
@ -5785,10 +6385,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
var suit=get.suit(trigger.card);
var number=get.number(trigger.card);
var card=get.cardPile2(function(card){
return card.suit==suit&&card.number==number;
});
if(card) player.gain(card,'gain2');
var cards=[];
for(var i=0;i<ui.cardPile.childNodes.length;i++){
var card=ui.cardPile.childNodes[i];
if(card.suit==suit&&card.number==number) cards.push(card);
}
if(cards.length) player.gain(cards,'gain2');
},
},
//新丁奉
@ -6633,15 +7235,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
trigger:{
player:['damageEnd','loseAfter'],
global:'loseAsyncAfter',
},
forced:true,
filter:function(event,player){
var storage=player.getExpansions('zlshoufu2');
if(!storage.length) return false;
if(event.name=='damage') return true;
if(event.type!='discard'||event.getParent('phaseDiscard').player!=player) return false;
var num=0;
for(var i of event.cards2){
if(event.type!='discard'||event.getlx===false||event.getParent('phaseDiscard').player!=player) return false;
var num=0,evt=event.getl(player);
if(!evt||!evt.cards2) return false;
for(var i of evt.cards2){
if(storage.filter(function(magic){
return get.type2(magic)==get.type2(i,event.hs.contains(i)?player:false);
}).length) num++;
@ -15095,11 +15699,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
lirang:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
filter:function(event,player){
if(event.type!='discard') return false;
for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards2[i])=='d'){
if(event.type!='discard'||event.getlx===false) return false;
var evt=event.getl(player);
if(!evt||!evt.cards2) return false;
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i])=='d'){
return true;
}
}
@ -15113,10 +15722,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.delay==false) game.delay();
event.cards=[];
event.logged=false;
for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards2[i],true)=='d'){
event.cards.push(trigger.cards2[i]);
//ui.special.appendChild(trigger.cards[i]);
var cards2=trigger.getl(player).cards2;
for(var i=0;i<cards2.length;i++){
if(get.position(cards2[i],true)=='d'){
event.cards.push(cards2[i]);
}
}
"step 1"
@ -15244,12 +15853,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
shenxian:{
audio:2,
trigger:{global:'loseAfter'},
trigger:{global:['loseAfter','loseAsyncAfter']},
filter:function(event,player){
if(event.type!='discard'||event.player==player||_status.currentPhase==player) return false;
if(event.type!='discard'||_status.currentPhase==player||event.getlx===false) return false;
if(event.name=='lose'&&event.player==player) return false;
if(player.hasSkill('shenxian2')) return false;
for(var i=0;i<event.cards2.length;i++){
if(get.type(event.cards2[i],null,event.hs.contains(event.cards2[i])?event.player:false)=='basic'){
var cards=event.cards.slice(0);
var evt=event.getl(player);
if(evt&&evt.cards) cards.removeArray(evt.cards);
for(var i=0;i<cards.length;i++){
if(get.type(cards[i],null,event.hs&&event.hs.contains(cards[i])?event.player:false)=='basic'&&cards[i].original!='j'){
return true;
}
}
@ -16516,15 +17129,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
mingzhe:{
audio:2,
trigger:{player:['useCard','respond','loseAfter']},
trigger:{
player:['useCard','respond','loseAfter'],
global:'loseAsyncAfter',
},
frequent:true,
filter:function(event,player){
if(player==_status.currentPhase) return false;
if(event.name!='lose') return get.color(event.card)=='red';
if(event.name.indexOf('lose')!=0) return get.color(event.card)=='red';
if(event.type!='discard') return false;
if(event.cards2){
for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i],player)=='red') return true;
var evt=event.getl(player);
if(evt&&evt.cards2){
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],player)=='red') return true;
}
}
return false;
@ -16532,10 +17149,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
event.count=1;
if(trigger.name=='lose'){
if(trigger.name.indexOf('lose')==0){
event.count=0;
for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards2[i],player)=='red') event.count++;
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],player)=='red') event.count++;
}
}
"step 1"
@ -18201,25 +18819,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{
player:["loseAfter","enterGame"],
global:"phaseBefore",
global:['loseAsyncAfter',"phaseBefore"],
},
filter:function (event,player){
if(event.name!='lose') return (event.name!='phase'||game.phaseNumber==0);
if(event.type!='discard') return false;
for(var i=0;i<event.cards2.length;i++){
if(!player.hasMark('xinfu_falu_'+get.suit(event.cards2[i]))) return true;
if(event.name.indexOf('lose')!=0) return (event.name!='phase'||game.phaseNumber==0);
if(event.type!='discard'||event.getlx===false) return false;
var evt=event.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(!player.hasMark('xinfu_falu_'+get.suit(evt.cards2[i]))) return true;
}
return false;
},
content:function (){
if(trigger.name!='lose'){
if(trigger.name.indexOf('lose')!==0){
for(var i=0;i<lib.suit.length;i++){
if(!player.hasMark('xinfu_falu_'+lib.suit[i])) player.addMark('xinfu_falu_'+lib.suit[i]);
}
return;
}
for(var i=0;i<trigger.cards2.length;i++){
var suit=get.suit(trigger.cards2[i]);
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
var suit=get.suit(evt.cards2[i]);
if(!player.hasMark('xinfu_falu_'+suit)) player.addMark('xinfu_falu_'+suit);
}
},
@ -19334,8 +19954,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zyqiao_info:'每回合限两次。当你成为其他角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。',
zyqiao_info_guozhan:'每回合限两次。当你成为其他势力的角色使用牌的目标后,你可以弃置其一张牌,然后你弃置一张牌。',
chengshang:'承赏',
chengshang_info:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得一张与此牌花色点数相同的牌。',
chengshang_info_guozhan:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得一张与此牌花色点数相同的牌。',
chengshang_info:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。',
chengshang_info_guozhan:'当你于出牌阶段内使用的牌结算完成后,若此牌未造成过伤害且此牌的目标包含其他角色且你本阶段内未因〖承赏〗获得过牌,则你可以从牌堆中获得所有与此牌花色点数相同的牌。',
sp_fuwan:'SP伏完',
spfengyin:'奉印',
spfengyin_info:'其他角色的回合开始时,若其体力值不少于你,你可以交给其一张【杀】,令其跳过出牌阶段和弃牌阶段。',
@ -19524,7 +20144,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olzhuiji_info:'锁定技。①你至体力值不大于你的角色的距离为1。②当你使用【杀】指定距离为1的角色为目标后你令其选择一项⒈弃置一张牌。⒉重铸装备区内的所有牌。',
zhaoyǎn:'赵俨',
tongxie:'同协',
tongxie_info:'出牌阶段开始时,你可以选择至多两名其他角色你与这些角色均称为“同协角色”。这些角色中手牌数唯一最少的角色摸一张牌且你获得如下效果直到你下回合开始①当有“同协角色”对唯一目标角色使用的【杀】结算结束后其他“同协角色”可以依次对目标角色使用一张【杀】无距离和次数限制且不能再触发此效果。②当有“同协角色”受到伤害时其他“同协角色”本回合内失去过体力的角色除外可以防止此伤害失去1点体力。',
tongxie_info:'出牌阶段开始时,你可以选择包括你在内的至多三名角色你与这些角色均称为“同协角色”。这些角色中手牌数唯一最少的角色摸一张牌且你获得如下效果直到你下回合开始①当有“同协角色”对唯一目标角色使用的【杀】结算结束后其他“同协角色”可以依次对目标角色使用一张【杀】无距离和次数限制且不能再触发此效果。②当有“同协角色”受到伤害时其他“同协角色”本回合内失去过体力的角色除外可以防止此伤害失去1点体力。',
jin_zhouchu:'周处',
shanduan:'善断',
shanduan_info:'①回合开始时你生成数组R=[1,2,3,4]。②摸牌阶段开始时你从数组R中选择并移除一个数字A。你本阶段的额定摸牌数改为A。③出牌阶段开始时你从数组R中选择并移除两个数字B和C。你将你本阶段内的攻击范围基数最小值和使用【杀】的次数上限基础值改为B和C。④弃牌阶段开始时你从数组R中选择并移除一个数字D。你令你本回合的手牌上限基数改为D。⑤当你于回合外受到伤害后你令下回合生成的R中最小的一个数字+1。',
@ -19544,6 +20164,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiongshou_info:'锁定技。①游戏开始时,你废除所有装备栏并摸四张牌。②你的手牌上限+4。',
fenrui:'奋锐',
fenrui_info:'结束阶段你可以弃置一张牌并恢复一个装备栏。系统检索一张对应的装备牌你使用之。然后你可以选择一名装备区内牌数小于你的其他角色对其造成X点伤害X为你与其装备区内的牌数之差且每局限一次。',
wangyan:'王衍',
yangkuang:'阳狂',
yangkuang_info:'当你回复体力后,若你的体力值等于体力上限,则你可以视为使用一张【酒】,然后当前回合角色摸一张牌,你摸一张牌。',
cihuang:'雌黄',
cihuang_info:'当有牌被抵消后若此牌的目标数为1且此牌的使用者A为当前回合角色则你可以视为对A使用一张你本轮内未使用过的属性【杀】或单目标锦囊牌不可被响应。',
sanku:'三窟',
sanku_info:'锁定技。当你进入濒死状态时你减1点体力上限然后将体力回复至体力上限。',
dengzhong:'邓忠',
dzkanpo:'勘破',
dzkanpo_info:'①当你因执行【杀】的效果而造成伤害后,你可以观看目标角色的手牌,然后获得其中一张与此【杀】花色相同的牌。②每回合限一次,你可以将一张手牌当做【杀】使用。',
dzgengzhan:'更战',
dzgengzhan_info:'①其他角色的出牌阶段限一次,当有【杀】因弃置而进入弃牌堆后,你可以获得这些【杀】。②其他角色的结束阶段,若其本回合内未使用过【杀】,则你下个出牌阶段使用【杀】的次数上限+1。',
xiahouxuan:'夏侯玄',
olhuanfu:'宦浮',
olhuanfu_info:'当你使用【杀】指定第一个目标后或成为【杀】的目标后你可以弃置X张牌X∈[1, 你的体力上限]。此【杀】结算结束后若此【杀】累计因执行效果而造成的伤害值等于X则你摸2X张牌。',
olqingyi:'清议',
olqingyi_info:'①出牌阶段限一次,你可以选择至多两名有牌的其他角色。你和这些角色同时弃置一张牌,然后若这些牌类型均相同,则你重复此流程。②结束阶段开始时,若你本回合内发动〖清议①〗弃置的牌包含两种颜色,则你获得每种颜色的牌各一张。',
olzeyue:'迮阅',
olzeyue_info:'限定技。准备阶段你可以选择一名于你的上个回合结束后对你造成过伤害的角色A及其武将牌上的一个非锁定技B令A的B失效。然后每轮游戏开始时A依次视为对你使用X张【杀】X为B失效状态下经过的完整轮数。当你因这些【杀】受到伤害后你令A恢复技能B。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

File diff suppressed because it is too large Load Diff

View File

@ -752,16 +752,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'loseAfter'},
direct:true,
filter:function(event,player){
if(player==_status.currentPhase||event.type!='discard'||event.position!=ui.discardPile||!game.hasPlayer((current)=>current!=player)) return false;
for(var i of event.cards2){
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(){
'step 0'
var cards=[];
for(var i of trigger.cards2){
var cards=[],cards2=trigger.getl(player);
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){

View File

@ -378,9 +378,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//顾雍
olbingyi:{
audio:'bingyi',
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
filter:function(event,player){
return event.type=='discard'&&event.cards2.length>0&&player.countCards('h')>0&&!player.hasSkill('olbingyi_blocker',null,null,false);
return event.type=='discard'&&event.getl(player).cards2.length>0&&player.countCards('h')>0&&!player.hasSkill('olbingyi_blocker',null,null,false);
},
prompt2:function(event,player){
var str='展示所有手牌,然后',hs=player.getCards('h');
@ -3342,6 +3345,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.translation(name);
}(target),capt);
if(event.togain.length) event.goto(5);
else{
for(var i=0;i<ui.dialogs.length;i++){
if(ui.dialogs[i].videoId==event.dialogID){
var dialog=ui.dialogs[i];
dialog.close();
_status.dieClose.remove(dialog);
break;
}
}
if(event.togain.length){
game.cardsDiscard(event.togain);
}
game.broadcast(function(id){
var dialog=get.idDialog(id);
if(dialog){
dialog.close();
_status.dieClose.remove(dialog);
}
},event.dialogID);
game.addVideo('cardDialog',null,event.dialogID);
event.finish();
}
}
},
fuzhu:{
@ -5887,12 +5912,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
shenduan:{
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
filter:function(event,player){
if(event.type!='discard') return;
for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i],event.hs.contains(event.cards2[i])?event.player:false)=='black'&&get.type(event.cards2[i])=='basic'&&
get.position(event.cards2[i],event.hs.contains(event.cards2[i])?event.player:false)=='d'){
if(event.type!='discard'||event.getlx===false) return;
var evt=event.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false)=='black'&&get.type(evt.cards2[i])=='basic'&&
get.position(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false)=='d'){
return true;
}
}
@ -5903,10 +5932,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards2[i],trigger.hs.contains(trigger.cards2[i])?trigger.player:false)=='black'&&get.type(trigger.cards2[i],trigger.hs.contains(trigger.cards2[i])?trigger.player:false)=='basic'&&
get.position(trigger.cards2[i])=='d'){
cards.push(trigger.cards2[i]);
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false)=='black'&&get.type(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false)=='basic'&&
get.position(evt.cards2[i])=='d'){
cards.push(evt.cards2[i]);
}
}
if(!cards.length){
@ -5966,12 +5996,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
reshenduan:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
global:'loseAsyncAfter',
player:'loseAfter',
},
filter:function(event,player){
if(event.type!='discard') return;
for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i],player)=='black'&&['basic','equip'].contains(get.type(event.cards2[i],event.hs.contains(event.cards2[i])?event.player:false))&&
get.position(event.cards2[i])=='d'){
if(event.type!='discard'||event.getlx===false) return;
var evt=event.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],player)=='black'&&['basic','equip'].contains(get.type(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false))&&
get.position(evt.cards2[i])=='d'){
return true;
}
}
@ -5981,10 +6015,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards2[i],player)=='black'&&['basic','equip'].contains(get.type(trigger.cards2[i],trigger.hs.contains(trigger.cards2[i])?trigger.player:false))&&
get.position(trigger.cards2[i])=='d'){
cards.push(trigger.cards2[i]);
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.color(evt.cards2[i],player)=='black'&&['basic','equip'].contains(get.type(evt.cards2[i],evt.hs.contains(evt.cards2[i])?evt.player:false))&&
get.position(evt.cards2[i])=='d'){
cards.push(evt.cards2[i]);
}
}
if(!cards.length){
@ -10269,11 +10304,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
zongxuan:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
filter:function(event,player){
if(event.type!='discard') return false;
for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards2[i])=='d'){
if(event.type!='discard'||event.getlx===false) return;
var evt=event.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i])=='d'){
return true;
}
}
@ -10283,8 +10322,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.getParent(3).name!='phaseDiscard'||!game.hasPlayer(function(current){
return current.isDamaged()&&get.recoverEffect(current,player,player)>0;
}))
for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards2[i],true)=='d'&&get.type(trigger.cards2[i],false)=='equip'){
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i],true)=='d'&&get.type(evt.cards2[i],false)=='equip'){
return true;
}
}
@ -10293,9 +10333,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards2[i]);
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i],true)=='d'){
cards.push(evt.cards2[i]);
}
}
var next=player.chooseToMove('纵玄:将任意张牌置于牌堆顶',true);
@ -10707,25 +10748,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{global:'loseAfter'},
filter:function(event,player){
if(event.type!='discard') return false;
if(event.player==player) return false;
for(var i=0;i<event.cards2.length;i++){
if(get.suit(event.cards2[i],event.player)=='club'&&get.position(event.cards2[i],true)=='d'){
if(event.type!='discard'||event.getlx===false) return false;
var cards=event.cards.slice(0);
var evt=event.getl(player);
if(evt&&evt.cards) cards.removeArray(evt.cards);
for(var i=0;i<cards.length;i++){
if(cards[i].original!='j'&&get.suit(cards[i],event.player)=='club'&&get.position(cards[i],true)=='d'){
return true;
}
}
return false;
},
direct:true,
//frequent:'check',
content:function(){
"step 0"
if(trigger.delay==false) game.delay();
"step 1"
var cards=[];
for(var i=0;i<trigger.cards2.length;i++){
if(get.suit(trigger.cards2[i],trigger.player)=='club'&&get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards2[i]);
var cards=[],cards2=trigger.cards.slice(0),evt=trigger.getl(player);
if(evt&&evt.cards) cards2.removeArray(evt.cards);
for(var i=0;i<cards2.length;i++){
if(cards2[i].original!='j'&&get.suit(cards2[i],trigger.player)=='club'&&get.position(cards2[i],true)=='d'){
cards.push(cards2[i]);
}
}
if(cards.length){

View File

@ -5,7 +5,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
character:{
wangxiang:['male','jin',3,['bingxin']],
jin_guohuai:['female','jin',3,['zhefu','yidu']],
jin_jiachong:['male','jin',3,['xiongshu','jianhui']],
xuangongzhu:['female','jin',3,['gaoling','qimei','ybzhuiji'],['hiddenSkill']],
xinchang:['male','jin',3,['canmou','congjian']],
@ -33,7 +32,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yingbian_pack1:['jin_simayi','jin_zhangchunhua','ol_lisu','simazhou','cheliji','ol_huaxin'],
yingbian_pack2:['jin_simashi','jin_xiahouhui','zhanghuyuechen','shibao','jin_yanghuiyu'],
yingbian_pack3:['jin_simazhao','jin_wangyuanji','duyu','weiguan','xuangongzhu'],
yingbian_pack4:['zhongyan','xinchang','jin_jiachong','jin_guohuai','wangxiang'],
yingbian_pack4:['zhongyan','xinchang','jin_jiachong','wangxiang'],
yingbian_pack5:['yangyan','yangzhi'],
},
},
@ -730,10 +729,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'weishu_discard',
subSkill:{
discard:{
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
forced:true,
filter:function(event,player){
return event.type=='discard'&&event.getParent(3).name!='weishu_discard'&&event.getParent('phaseDiscard').player!=player&&event.cards2.length>0&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0));
return event.type=='discard'&&event.getParent(3).name!='weishu_discard'&&event.getParent('phaseDiscard').player!=player&&event.getl(player).cards2.length>0&&game.hasPlayer((target)=>(target!=player&&target.countDiscardableCards(player,'he')>0));
},
content:function(){
'step 0'
@ -871,6 +873,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).setHiddenSkill('ybzhuiji');
'step 1'
if(result.control!='cancel2'){
player.logSkill('ybzhuiji');
if(result.index==0) player.draw(2);
else player.recover();
player.addTempSkill('ybzhuiji_'+result.index,'phaseUseAfter');
@ -2682,17 +2685,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
jyishi:{
audio:2,
trigger:{global:'loseAfter'},
trigger:{
global:['loseAfter','loseAsyncAfter'],
},
usable:1,
direct:true,
preHidden:true,
filter:function(event,player){
return (event.type=='discard'&&event.hs&&event.hs.filterInD('d').length&&event.player.isAlive()&&
event.player!=player&&event.player.isPhaseUsing()&&!player.hasSkill('jyishi2'));
var target=_status.currentPhase;
if(!target||!target.isIn()||event.type!='discard'||event.getlx===false||!target.isPhaseUsing()) return false;
var evt=event.getl(player);
for(var i of evt.hs){
if(get.position(i,true)=='d') return true;
}
return false;
},
content:function(){
'step 0'
event.cards=trigger.hs.filterInD('d');
var str='是否发动【宜室】令'+get.translation(trigger.player)+'获得一张牌';
event.target=_status.currentPhase;
event.cards=trigger.getl(event.target).hs.filterInD('d');
var str='是否发动【宜室】令'+get.translation(event.target)+'获得一张牌';
if(event.cards.length>1) str+=',然后获得其余的牌';
str+='';
player.chooseButton([str,event.cards]).set('ai',function(button){
@ -2703,22 +2715,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(cards.length==1) return -get.value(card);
cards.remove(card);
return (get.value(cards)-get.value(card)-2);
}).set('source',trigger.player).setHiddenSkill(event.name);
}).set('source',event.target).setHiddenSkill(event.name);
'step 1'
if(result.bool){
player.addTempSkill('jyishi2');
player.logSkill('jyishi',trigger.player);
player.logSkill('jyishi',target);
if(cards.length>1){
trigger.player.$gain2(result.links[0]);
trigger.player.gain(result.links[0],'log');
target.$gain2(result.links[0]);
target.gain(result.links[0],'log');
}
else trigger.player.gain(result.links[0],'gain2');
cards.remove(result.links[0]);
if(cards.length) player.gain(cards,'gain2');
}
else player.storage.counttrigger.jyishi--;
},
},
jyishi2:{},
jyishi2:{charlotte:true},
shiduo:{
audio:2,
enable:'phaseUse',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.116.3',
'v1.9.117',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -185,6 +185,15 @@ window.noname_asset_list=[
'audio/die/re_liufeng.mp3',
'audio/die/re_sp_taishici.mp3',
'audio/die/xiahoulingnv.mp3',
'audio/die/dc_caiyang.mp3',
'audio/die/dc_lvkuanglvxiang.mp3',
'audio/die/dengzhong.mp3',
'audio/die/dukui.mp3',
'audio/die/liuhui.mp3',
'audio/die/ol_dianwei.mp3',
'audio/die/wangyan.mp3',
'audio/die/xiahouxuan.mp3',
'audio/die/zhangfen.mp3',
'audio/die/baosanniang.mp3',
'audio/die/beimihu.mp3',
@ -1005,7 +1014,6 @@ window.noname_asset_list=[
'audio/effect/tie.mp3',
'audio/effect/tori_no_uta.mp3',
'audio/effect/win.mp3',
'audio/skill/dcliuzhuan1.mp3',
'audio/skill/dcliuzhuan2.mp3',
@ -1041,6 +1049,50 @@ window.noname_asset_list=[
'audio/skill/xianwang2.mp3',
'audio/skill/xiongrao1.mp3',
'audio/skill/xiongrao2.mp3',
'audio/skill/cihuang1.mp3',
'audio/skill/cihuang2.mp3',
'audio/skill/dcchaixie1.mp3',
'audio/skill/dcchaixie2.mp3',
'audio/skill/dcfanyin1.mp3',
'audio/skill/dcfanyin2.mp3',
'audio/skill/dcgeyuan1.mp3',
'audio/skill/dcgeyuan2.mp3',
'audio/skill/dcgusuan1.mp3',
'audio/skill/dcgusuan2.mp3',
'audio/skill/dcjiaofeng1.mp3',
'audio/skill/dcjiaofeng2.mp3',
'audio/skill/dcjieshu1.mp3',
'audio/skill/dcjieshu2.mp3',
'audio/skill/dcliehou1.mp3',
'audio/skill/dcliehou2.mp3',
'audio/skill/dcpeiqi1.mp3',
'audio/skill/dcpeiqi2.mp3',
'audio/skill/dcshuhe1.mp3',
'audio/skill/dcshuhe2.mp3',
'audio/skill/dcwanglu1.mp3',
'audio/skill/dcwanglu2.mp3',
'audio/skill/dcxianzhu1.mp3',
'audio/skill/dcxianzhu2.mp3',
'audio/skill/dcxunji1.mp3',
'audio/skill/dcxunji2.mp3',
'audio/skill/dzgengzhan1.mp3',
'audio/skill/dzgengzhan2.mp3',
'audio/skill/dzkanpo1.mp3',
'audio/skill/dzkanpo2.mp3',
'audio/skill/olhuanfu1.mp3',
'audio/skill/olhuanfu2.mp3',
'audio/skill/olningwu1.mp3',
'audio/skill/olningwu2.mp3',
'audio/skill/olqingyi1.mp3',
'audio/skill/olqingyi2.mp3',
'audio/skill/olzeyue1.mp3',
'audio/skill/olzeyue2.mp3',
'audio/skill/qiangxi_ol_dianwei1.mp3',
'audio/skill/qiangxi_ol_dianwei2.mp3',
'audio/skill/sanku1.mp3',
'audio/skill/sanku2.mp3',
'audio/skill/yangkuang1.mp3',
'audio/skill/yangkuang2.mp3',
'audio/skill/aichen1.mp3',
'audio/skill/aichen2.mp3',
@ -4680,6 +4732,7 @@ window.noname_asset_list=[
'image/card/lukai_diamond.png',
'image/card/lukai_heart.png',
'image/card/lukai_spade.png',
'image/card/dagongche.png',
'image/card/bagua.png',
'image/card/baihupifeng.png',
@ -5708,6 +5761,16 @@ window.noname_asset_list=[
'image/character/lukai.jpg',
'image/character/prp_zhugeliang.jpg',
'image/character/xiahoulingnv.jpg',
'audio/skill/dc_caiyang.jpg',
'audio/skill/dc_lvkuanglvxiang.jpg',
'audio/skill/dengzhong.jpg',
'audio/skill/dukui.jpg',
'audio/skill/key_kiyu.jpg',
'audio/skill/liuhui.jpg',
'audio/skill/ol_dianwei.jpg',
'audio/skill/wangyan.jpg',
'audio/skill/xiahouxuan.jpg',
'audio/skill/zhangfen.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -10653,7 +10653,6 @@
},event.chooseTime);
}
if(event.isMine()){
ui.arena.classList.add('choose-to-move');
delete ui.selected.guanxing_button;
var list=event.list,filterMove=event.filterMove,filterOk=event.filterOk;
_status.imchoosing=true;
@ -10682,7 +10681,10 @@
event.dialog.classList.add('scroll1');
event.dialog.classList.add('scroll2');
event.dialog.classList.add('fullwidth');
event.dialog.classList.add('fullheight');
if(list.length>1){
ui.arena.classList.add('choose-to-move');
event.dialog.classList.add('fullheight');
}
event.moved=[];
var buttonss=[];
@ -13072,6 +13074,73 @@
}
if(event.dialog&&event.dialog.close) event.dialog.close();
},
discardMultiple:function(){
'step 0'
event.type='discard';
if(!event.position) event.position=ui.discardPile;
var cards=[];
event.cards=cards;
for(var i=0;i<event.lose_list.length;i++){
var next=event.lose_list[i][0].lose(event.lose_list[i][1],event.position);
game.log(event.lose_list[i][0],'弃置了',event.lose_list[i][1]);
next.type=='discard';
cards.addArray(event.lose_list[i][1]);
next.getlx=false;
}
var evt=event;
if(evt.animate!=false){
evt.discardid=lib.status.videoId++;
game.broadcastAll(function(list,id){
for(var i of list){
i[0].$throw(i[1],null,'nobroadcast');
}
var cardnodes=[];
cardnodes._discardtime=get.time();
for(var ix of list){
var card=ix[1];
for(var i=0;i<cards.length;i++){
if(cards[i].clone){
cardnodes.push(cards[i].clone);
}
}
}
ui.todiscard[id]=cardnodes;
},event.lose_list,evt.discardid);
if(lib.config.sync_speed&&cards[0]&&cards[0].clone){
if(evt.delay!=false){
var waitingForTransition=get.time();
evt.waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete evt.waitingForTransition;
});
}
else if(evt.getParent().discardTransition){
delete evt.getParent().discardTransition;
var waitingForTransition=get.time();
evt.getParent().waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete evt.getParent().waitingForTransition;
});
}
}
}
'step 1'
if(event.delay!=false){
if(event.waitingForTransition){
_status.waitingForTransition=event.waitingForTransition;
game.pause();
}
else{
game.delayx();
}
}
},
chooseToCompareLose:function(){
for(var i=0;i<event.lose_list.length;i++){
var next=event.lose_list[i][0].lose(event.lose_list[i][1],ui.ordering);
@ -14707,7 +14776,7 @@
else{
game.log(player,'展示了',cards);
}
game.delayx(2);
game.delayx(event.delay_time||2.5);
game.addVideo('showCards',player,[event.str,get.cardsInfo(cards)]);
"step 1"
game.broadcast('closeDialog',event.dialogid);
@ -16148,7 +16217,7 @@
lose:function(){
"step 0"
var evt=event.getParent();
if((evt.name!='discard'&&event.type!='discard')&&(evt.name!='loseToDiscardpile'&&event.type!='loseToDiscardpile')){
if((evt.name!='discard'||event.type!='discard')&&(evt.name!='loseToDiscardpile'||event.type!='loseToDiscardpile')){
event.delay=false;
return;
}
@ -19599,13 +19668,17 @@
var player=_status.event.player;
var event=_status.event.getParent();
var getn=function(card){
if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13*(event.small?-1:1);
return get.number(card)*(event.small?-1:1);
if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13*(Boolean(event.small)?-1:1);
return get.number(card)*(Boolean(event.small)?-1:1);
}
if(source&&source!=player&&get.attitude(player,source)>1){
return -getn(card)-get.value(card)/2+addi;
if(source&&source!=player){
if((get.attitude(player,source)>1)==Boolean(event.small)) return -getn(card)-get.value(card)/2+addi;
return getn(card)-get.value(card)/2+addi;
}
else{
if(Boolean(event.small)) return -getn(card)-get.value(card)/2+addi;
return getn(card)-get.value(card)/2+addi;
}
return getn(card)-get.value(card)/2+addi;
}
next.setContent('chooseToCompareMultiple');
}
@ -19619,21 +19692,21 @@
}
var player=get.owner(card);
var getn=function(card){
if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13*(event.small?-1:1);
return get.number(card)*(event.small?-1:1);
if(player.hasSkill('tianbian')&&get.suit(card)=='heart') return 13;
return get.number(card);
}
var event=_status.event.getParent();
var to=(player==event.player?event.target:event.player);
var addi=(get.value(card)>=8&&get.type(card)!='equip')?-6:0;
if(card.name=='du') addi-=5;
if(player==event.player){
if(get.attitude(player,to)>0&&event.small){
if(Boolean(event.small)){
return -getn(card)-get.value(card)/2+addi;
}
return getn(card)-get.value(card)/2+addi;
}
else{
if(get.attitude(player,to)>0){
if((get.attitude(player,to)<=0)==Boolean(event.small)){
return -getn(card)-get.value(card)/2+addi;
}
return getn(card)-get.value(card)/2+addi;
@ -20873,7 +20946,7 @@
map.cards2.addArray(evt.cards2);
}
});
if(map.cards.length>0||map.ss.length>0||map.xs.length>0) return map;
return map;
};
next.gaintag=[];
return next;
@ -20940,7 +21013,7 @@
map.cards2.addArray(evt.cards2);
}
});
if(map.cards.length>0||map.ss.length>0||map.xs.length>0) return map;
return map;
};
next.gaintag=[];
return next;
@ -20999,6 +21072,16 @@
next.setContent('lose');
next.getl=function(player){
if(this.getlx!==false&&this.player==player) return this;
return {
player:player,
hs:[],
es:[],
js:[],
ss:[],
xs:[],
cards:[],
cards2:[],
};
};
return next;
},
@ -21389,16 +21472,24 @@
map.cards2.addArray(evt.cards2);
}
});
if(map.cards.length>0||map.ss.length>0||map.xs.length>0) return map;
return map;
};
return next;
},
addJudge:function(card,cards){
var next=game.createEvent('addJudge');
next.card=card;
next.cards=cards;
if(next.cards==undefined) next.cards=[card];
if(get.itemtype(next.cards)=='card') next.cards=[next.cards];
if(get.itemtype(card)=='card'){
next.card=card;
next.cards=[card];
}
else{
next.cards=cards;
if(get.itemtype(next.cards)=='card') next.cards=[next.cards];
if(typeof card=='string'){
card={name:card};
}
next.card=get.autoViewAs(card,next.cards)
}
next.player=this;
next.setContent('addJudge');
next.getl=function(player){
@ -21424,7 +21515,7 @@
map.cards2.addArray(evt.cards2);
}
});
if(map.cards.length>0||map.ss.length>0||map.xs.length>0) return map;
return map;
};
return next;
},
@ -22552,7 +22643,37 @@
this.disabledSkills[skills]=[];
var info=get.info(skills);
if(info.ondisable&&info.onremove){
info.onremove(this);
if(typeof info.onremove=='function'){
info.onremove(this,skill);
}
else if(typeof info.onremove=='string'){
if(info.onremove=='storage'){
delete this.storage[skill];
}
else{
var cards=this.storage[skill];
if(get.itemtype(cards)=='card'){
cards=[cards];
}
if(get.itemtype(cards)=='cards'){
if(this.onremove=='discard'){
this.$throw(cards);
}
if(this.onremove=='discard'||this.onremove=='lose'){
game.cardsDiscard(cards);
delete this.storage[skill];
}
}
}
}
else if(Array.isArray(info.onremove)){
for(var i=0;i<info.onremove.length;i++){
delete this.storage[info.onremove[i]];
}
}
else if(info.onremove===true){
delete this.storage[skill];
}
}
}
this.disabledSkills[skills].add(skill);
@ -25765,6 +25886,18 @@
this.trigger(this.name+'Cancelled');
if(this.player&&lib.phaseName.contains(this.name)) this.player.getHistory('skipped').add(this.name)}
},
neutralize:function(){
this.untrigger.call(this,arguments);
this.finish();
this._neutralized=true;
this.trigger('eventNeutralized');
},
unneutralize:function(){
this.untrigger.call(this,arguments);
delete this._neutralized;
delete this.finished;
if(this.type=='card'&&this.card&&this.name=='sha') this.directHit=true;
},
goto:function(step){
this.step=step-1;
},
@ -27888,7 +28021,7 @@
}
},
_discard:{
trigger:{global:['discardAfter','loseToDiscardpileAfter']},
trigger:{global:['discardAfter','loseToDiscardpileAfter','loseAsyncAfter']},
forced:true,
popup:false,
priority:-100,
@ -29266,7 +29399,7 @@
map.cards2.addArray(evt.cards2);
}
});
if(map.cards.length>0||map.ss.length>0||map.xs.length>0) return map;
return map;
};
if(arg&&get.is.object(arg)){
for(var i in arg) next[i]=arg[i];
@ -51045,8 +51178,8 @@
isCard:true,
cardid:card.cardid,
wunature:card.wunature,
storage:card.storage,
cards:card.cards,
storage:get.copy(card.storage),
cards:get.copy(card.cards),
};
if(get.itemtype(cards)=='cards'&&!card.cards) next.cards=cards.slice(0);
else if(get.itemtype(card)=='card') next.cards=[card];
@ -53490,7 +53623,9 @@
if(!simple||get.is.phoneLayout()){
var es=node.getCards('e');
for(var i=0;i<es.length;i++){
uiintro.add('<div><div class="skill">'+es[i].outerHTML+'</div><div>'+lib.translate[es[i].name+'_info']+'</div></div>');
var cardinfo=lib.card[es[i].name];
if(cardinfo&&cardinfo.cardPrompt) uiintro.add('<div><div class="skill">'+es[i].outerHTML+'</div><div>'+cardinfo.cardPrompt(es[i])+'</div></div>');
else uiintro.add('<div><div class="skill">'+es[i].outerHTML+'</div><div>'+lib.translate[es[i].name+'_info']+'</div></div>');
uiintro.content.lastChild.querySelector('.skill>.card').style.transform='';
}
var js=node.getCards('j');

View File

@ -1,45 +1,46 @@
window.noname_update={
version:'1.9.116.3',
update:'1.9.116.2',
version:'1.9.117',
update:'1.9.116.3',
changeLog:[
'OL霍峻十周年管亥',
'国战模式晋武将更新与技能调整',
'其他技能调整和bug修复',
'露娜Q',
'OL界典韦、邓忠、王衍、夏侯玄',
'十周年刘徽、蔡阳、吕旷吕翔、杜夔、张奋',
'其他技能调整和bug修复', 'players://["dc_caiyang","dc_lvkuanglvxiang","dengzhong","dukui","key_kiyu","liuhui","ol_dianwei","wangyan","xiahouxuan","zhangfen"]',
],
files:[
'card/extra.js',
//'card/extra.js',
//'card/gujian.js',
'card/guozhan.js',
//'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
//'card/standard.js',
'card/sp.js',
'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
//'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
//'character/diy.js',
//'character/extra.js',
'card/zhulu.js',
'character/diy.js',
'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
'character/offline.js',
//'character/old.js',
//'character/ow.js',
'character/rank.js',
'character/refresh.js',
//'character/sb.js',
//'character/shenhua.js',
'character/shenhua.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
//'character/tw.js',
'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
@ -55,7 +56,7 @@ window.noname_update={
//'layout/mobile/layout.css',
//'layout/newlayout/global.css',
//'layout/nova/layout.css',
//'mode/boss.js',
'mode/boss.js',
//'mode/brawl.js',
//'mode/chess.js',
//'mode/connect.js',

BIN
image/card/dagongche.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

BIN
image/character/dukui.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

BIN
image/character/liuhui.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
image/character/wangyan.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@ -2169,14 +2169,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
iwasawa_crowbow:{
equipSkill:true,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
direct:true,
filter:function(event,player){
return event.hs&&event.hs.length>1&&player.isPhaseUsing();
var evt=event.getl(player);
return evt&&evt.hs&&evt.hs.length>1&&player.isPhaseUsing();
},
content:function(){
'step 0'
event.num=trigger.hs.length;
var evt=trigger.getl(player);
event.num=evt.hs.length;
player.chooseTarget(get.prompt('iwasawa_crowbow'),'弃置一名其他角色的'+get.cnNumber(event.num)+'张牌',function(card,player,target){
return player!=target&&target.countDiscardableCards(player,'he')>0;
}).set('ai',function(target){
@ -2778,7 +2783,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
//孟婆:
"boss_shiyou":{
audio:true,
trigger:{global:'loseEnd'},
trigger:{global:'loseAfter'},
filter:function(event,player){
var evt=event.getParent(3);
return event.type=='discard'&&evt.name=='phaseDiscard'&&evt.player==event.player&&evt.player!=player&&event.cards2&&event.cards2.filterInD('d').length>0;

View File

@ -532,7 +532,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_wuguotai:['female','wu',3,['gzbuyi','ganlu'],['gzskin']],
gz_lukang:['male','wu',3,['keshou','zhuwei'],['gzskin']],
gz_yuanshu:['male','qun',4,['gzweidi','gzyongsi'],['gzskin']],
gz_zhangxiu:['male','qun',4,['gzfudi','congjian'],['gzskin']],
gz_zhangxiu:['male','qun',4,['gzfudi','gzcongjian'],['gzskin']],
gz_jun_caocao:['male','wei',4,['jianan','huibian','gzzongyu','wuziliangjiangdao'],[]],
gz_jin_zhangchunhua:['female','jin',3,['gzhuishi','gzqingleng']],
@ -5379,7 +5379,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'step 0'
var target=trigger.player;
event.target=target;
if(player.countDiscardableCards(target,'e')){
if(!player.countDiscardableCards(target,'e')){
player.draw();
event.finish();
return;
@ -6270,7 +6270,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
},
congjian:{
gzcongjian:{
trigger:{
player:'damageBegin3',
source:'damageBegin1',
@ -8824,6 +8824,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
},
gzsanyao:{
audio:'sanyao',
inherit:'sanyao',
filterTarget:function(card,player,target){
return target.hp>player.hp||target.countCards('h')>player.countCards('h');
},
},
gzzhiman:{
audio:'zhiman',
inherit:'zhiman',
@ -10185,6 +10192,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
target.chooseBool(get.prompt('gzyicheng'),'摸一张牌,然后弃置一张牌').set('frequentSkill','gzyicheng');
'step 1'
if(result.bool){
player.logSkill('gzyicheng',target);
target.draw();
target.chooseToDiscard('he',true);
}
@ -10257,7 +10265,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(get.type(card)!='equip') return true;
return target.isEmpty(get.subtype(card));
},
prompt:get.prompt2('huyuan'),
prompt:get.prompt2('gzhuyuan'),
ai1:function(card){
var player=_status.event.player;
if(get.type(card)!='equip') return 0;
@ -10267,11 +10275,11 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var player=_status.event.player,card=ui.selected.cards[0];
return get.effect(target,card,player,player);
},
}).setHiddenSkill('huyuan');
}).setHiddenSkill('gzhuyuan');
'step 1'
if(result.bool){
var target=result.targets[0],card=result.cards[0];
player.logSkill('huyuan',target);
player.logSkill('gzhuyuan',target);
if(get.type(card)=='equip'){
player.$give(card,target,false);
game.delayx();
@ -10809,7 +10817,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return event.name=='addJudge'||(event.card.name!='chiling'&&get.effect(event.target,event.card,event.player,player)<0);
},
filter:function(event,player){
return get.type(event.card,'trick')=='trick'&&get.color(event.card)=='black';
if(event.name=='addJudge') return get.color(event.card)=='black';
return get.type(event.card,null,false)=='trick'&&get.color(event.card)=='black';
},
content:function(){
if(trigger.name=='addJudge'){
@ -10842,7 +10851,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return event.name=='addJudge'||get.effect(event.target,event.card,event.player,player)<0;
},
filter:function(event,player){
return event.card.name=='shunshou'||event.card.name=='lebu';
return event.card.name==(event.name=='addJudge'?'lebu':'shunshou');
},
content:function(){
if(trigger.name=='addJudge'){
@ -12543,8 +12552,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_zhangxiu:'张绣',
gzfudi:'附敌',
gzfudi_info:'当你受到伤害后,你可以交给伤害来源一张手牌。若如此做,你对其势力中体力值最大且不小于你的一名角色造成一点伤害。',
congjian:'从谏',
congjian_info:'锁定技,当你于回合外造成伤害,或于回合内受到伤害时,此伤害+1。',
gzcongjian:'从谏',
gzcongjian_info:'锁定技,当你于回合外造成伤害,或于回合内受到伤害时,此伤害+1。',
gz_jun_caocao:'君曹操',
jianan:'建安',
jianan_info:'君主技,只要此武将处于明置状态,你便拥有“五子良将纛”。',
@ -12655,6 +12664,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
qianhuan:'千幻',
qianhuan_bg:'幻',
qianhuan_info:'当与你势力相同的一名角色受到伤害后,你可以将一张与你武将牌上花色均不同的牌置于你的武将牌上。当一名与你势力相同的角色成为基本牌或锦囊牌的唯一目标时,你可以移去一张“千幻”牌,取消之。',
gzsanyao_info:'出牌阶段限一次。你可以弃置一张牌对一名手牌数或体力值大于你的角色造成1点伤害。',
gzzhiman:'制蛮',
gzzhiman_info:'当你对其他角色造成伤害时,你可以防止此伤害。若如此做,你获得其装备区或判定区里的一张牌。然后若该角色与你势力相同,该角色可以变更副将。',
@ -12774,9 +12784,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzduanchang:'断肠',
gzduanchang_info:'锁定技,当你死亡时,你令杀死你的角色失去一张武将牌上的所有技能。',
gzweimu:'帷幕',
gzweimu_info:'锁定技,当你成为黑色锦囊牌的目标时,取消之。',
gzweimu_info:'锁定技,当你成为黑色普通锦囊牌的目标时,或有黑色延时锦囊牌进入你的判定区时,取消之。',
gzqianxun:'谦逊',
gzqianxun_info:'锁定技,当你成为【顺手牵羊】或【乐不思蜀】的目标时,取消之。',
gzqianxun_info:'锁定技,当你成为【顺手牵羊】的目标时,或有【乐不思蜀】进入你的判定区时,取消之。',
gzkongcheng:'空城',
gzkongcheng_info:'锁定技,当你成为【杀】或【决斗】的目标时,若你没有手牌,则取消之',
gzxiaoji:'枭姬',
@ -12823,7 +12833,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzzhaosong:'诏颂',
gzzhaosong_info:'每局游戏每项限一次。①一名角色进入濒死状态时你可以令其回复至2点体力并摸一张牌。②出牌阶段你可观看一名其他角色的所有暗置武将牌和手牌然后可以获得其区域内的一张牌。③一名角色使用【杀】选择唯一目标后你可以为此【杀】增加两个目标。',
gzlisi:'离思',
gzlisi:'一名己方角色死亡后,你可以选择〖诏颂〗中的一个已发动过的选项,令其视为未发动过。',
gzlisi_info:'一名己方角色死亡后,你可以选择〖诏颂〗中的一个已发动过的选项,令其视为未发动过。',
gzcaiyuan:'才媛',
gzcaiyuan_info:'锁定技。结束阶段开始时若你的手牌数大于本回合开始时的手牌数则你摸两张牌或回复1点体力。',
gzwanyi:'婉嫕',