This commit is contained in:
Spmario233 2021-10-18 18:34:20 +08:00
parent fbd3fb9bf1
commit b757ac0563
95 changed files with 1706 additions and 433 deletions

BIN
audio/die/db_wenyang.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_panjun.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_pengyang.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_wenqin.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_xf_sufei.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_xiahouba.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_xuyou.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_zhonghui.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_zhuling.mp3 Normal file

Binary file not shown.

BIN
audio/die/qiaozhou.mp3 Normal file

Binary file not shown.

BIN
audio/die/shen_xunyu.mp3 Normal file

Binary file not shown.

BIN
audio/die/xin_sunluban.mp3 Normal file

Binary file not shown.

BIN
audio/skill/daming1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/daming2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dbchoujue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dbchoujue2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dbquedi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dbquedi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dbzhuifeng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dbzhuifeng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dinghan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dinghan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzbaolie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzbaolie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzchenglve1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzchenglve2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzcongcha1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzcongcha2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzfangyuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzfangyuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzjinfa1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzjinfa2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzjuejue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzjuejue2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzlianpian1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzlianpian2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzpaiyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzpaiyi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzquanji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzquanji2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzshicai1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/gzshicai2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/lingce1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/lingce2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/shuchen1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/shuchen2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/tianzuo1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/tianzuo2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xiaoni1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xiaoni2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/xingbu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xingbu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xinjiaojin1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xinjiaojin2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xinzenhui1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/xinzenhui2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuanqing1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuanqing2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/zhiming1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/zhiming2.mp3 Normal file

Binary file not shown.

View File

@ -1242,16 +1242,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
var js=target.getCards('j');
if(js.length){
var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
//if(jj.name=='shunshou') return 3;
if(js.length==1&&get.effect(target,jj,target,player)>=0){
return -1.5;
}
return 3;
}
return -1.5;
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
@ -1260,17 +1255,90 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 0;
}
if(get.attitude(player,target)>1){
var js=target.getCards('j');
if(js.length){
var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
//if(jj.name=='shunshou') return 1;
if(js.length==1&&get.effect(target,jj,target,player)>=0){
return 0;
}
return 1;
}
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
tag:{
loseCard:1,
gain:1,
}
}
},
shunshou_copy:{
ai:{
basic:{
order:7.5,
useful:4,
value:9
},
result:{
target:function(player,target){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})){
return 0;
}
if(get.attitude(player,target)>1){
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
tag:{
loseCard:1,
gain:1,
}
}
},
shunshou_copy2:{
ai:{
basic:{
order:7.5,
useful:4,
value:9
},
result:{
target:function(player,target){
if(get.attitude(player,target)<=0) return (target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})>0)?-1.5:1.5;
return (target.countCards('e',function(card){
return get.value(card,target)<=0;
})>0)?1.5:-1.5;
},
player:function(player,target){
if(get.attitude(player,target)<0&&!target.countCards('he',function(card){
return get.value(card,target)>0&&card!=target.getEquip('jinhe');
})){
return 0;
}
if(get.attitude(player,target)>1){
return (target.countCards('ej',function(card){
if(get.position(card)=='e') return get.value(card,target)<=0;
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0)?1.5:-1.5;
}
return 1;
}
},
@ -1335,19 +1403,95 @@ game.import('card',function(lib,game,ui,get,ai,_status){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
var js=target.getCards('j');
if(js.length){
var jj=js[0].viewAs?{name:js[0].viewAs}:js[0];
if(jj.name=='guohe'||js.length>1||get.effect(target,jj,target,player)<0){
return 3;
}
}
if(target.countCards('j',function(card){
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
if(target.hp==2) return 0.01;
return 0;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5;
return -1.5;
},
},
tag:{
loseCard:1,
discard:1
}
}
},
guohe_copy:{
ai:{
basic:{
order:9,
useful:5,
value:5,
},
result:{
target:function(player,target){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.countCards('j',function(card){
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
var noh=(nh==0||target.hasSkillTag('noh'));
if(noh&&(noe||noe2)) return 0;
if(att<=0&&!target.countCards('he')) return 1.5;
return -1.5;
},
},
tag:{
loseCard:1,
discard:1
}
}
},
guohe_copy2:{
ai:{
basic:{
order:9,
useful:5,
value:5,
},
result:{
target:function(player,target){
var att=get.attitude(player,target);
var nh=target.countCards('h');
if(att>0){
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
@ -2631,7 +2775,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
juedou_info:'出牌阶段对一名其他角色使用。由其开始其与你轮流打出一张【杀】直到其中一方未打出【杀】为止。未打出【杀】的一方受到另一方对其造成的1点伤害。',
shunshou_info:'出牌阶段对距离为1且区域里有牌的一名其他角色使用。你获得其区域里的一张牌。',
guohe_info:'出牌阶段,对区域里有牌的一名其他角色使用。你弃置其区域里的一张牌。',
jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。<br><span class="text" style="font-family: yuanli">这是一种十分含蓄的计谋。</span>',
jiedao_info:'出牌阶段,对装备区里有武器牌且有使用【杀】的目标的一名其他角色使用。令其对你指定的一名角色使用一张【杀】,否则将其装备区里的武器牌交给你。',
jiedao_append:'<span class="text" style="font-family: yuanli">这是一种十分含蓄的计谋。</span>',
wuxie_info:'一张锦囊牌生效前,对此牌使用。抵消此牌对一名角色产生的效果,或抵消另一张【无懈可击】产生的效果。',
lebu_info:'出牌阶段,对一名其他角色使用。若判定结果不为红桃,跳过其出牌阶段。',
shandian_info:'出牌阶段对自己使用。若判定结果为黑桃2~9则目标角色受到3点雷电伤害。若判定不为黑桃2~9将之移动到下家的判定区里。',

View File

@ -340,6 +340,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:true,
filterTarget:true,
selectTarget:[1,3],
derivation:'key_kano',
content:function(){
'step 0'
target.draw();

View File

@ -14,7 +14,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_lei:['shen_ganning','shen_zhangliao'],
extra_key:['key_kagari','key_shiki','key_hina'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'],
extra_mobilezhi:['shen_guojia'],
extra_mobilezhi:['shen_guojia','shen_xunyu'],
extra_mobilexin:['shen_taishici'],
extra_offline:['shen_diaochan','boss_zhaoyun'],
},
@ -24,6 +24,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']],
key_hina:['female','shen',3,['hina_shenxian','hina_mashu','hina_tieji'],['key','hiddenSkill']],
shen_xunyu:['male','shen',3,['tianzuo','lingce','dinghan'],['wei']],
shen_taishici:['male','shen',4,['dulie','tspowei','dangmo'],['wu']],
shen_guojia:['male','shen',3,['reshuishi','stianyi','resghuishi'],['wei']],
shen_diaochan:['female','shen',3,['meihun','huoxin'],['qun']],
@ -224,33 +225,157 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.turnOver();
},
},
tianzuo:{
audio:2,
trigger:{
global:'gameStart',
player:'enterGame',
},
forced:true,
locked:false,
filter:function(event,player){
return !lib.inpile.contains('qizhengxiangsheng');
},
content:function(){
game.addGlobalSkill('tianzuo_global');
for(var i=2;i<10;i++){
var card=game.createCard2('qizhengxiangsheng',i%2?'club':'spade',i);
ui.cardPile.insertBefore(card,ui.cardPile.childNodes[get.rand(0,ui.cardPile.childNodes.length)]);
}
game.broadcastAll(function(){lib.inpile.add('qizhengxiangsheng')});
game.updateRoundNumber();
},
group:'tianzuo_rewrite',
subSkill:{
global:{
trigger:{player:'useCardToPlayered'},
forced:true,
popup:false,
filter:function(event,player){
return event.card.name=='qizhengxiangsheng';
},
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
var e1=1.5*get.sgn(get.damageEffect(target,player,target));
var e2=0;
if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
var es=target.getGainableCards(player,'e');
if(es.length) e2=Math.min(e2,function(){
var max=0;
for(var i of es) max=Math.max(max,get.value(i,target))
return -max/4;
}());
if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
if(e1<e2) return '奇兵';
return '正兵';
}()).set('ai',function(){
return _status.event.choice;
});
'step 1'
var map=trigger.getParent().customArgs,id=target.playerid;
if(!map[id]) map[id]={};
map[id].qizheng_name=result.control;
},
},
rewrite:{
audio:'tianzuo',
trigger:{global:'useCardToTargeted'},
filter:function(event,player){
return event.card.name=='qizhengxiangsheng';
},
logTarget:'target',
prompt2:'观看其手牌并修改“奇正相生”标记',
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
if(player!=target&&target.countCards('h')>0) player.viewHandcards(target);
player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
var shas=target.getCards('h','sha'),shans=target.getCards('h','shan');
var e1=1.5*get.sgn(get.damageEffect(target,player,target));
var e2=0;
if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
var es=target.getGainableCards(player,'e');
if(es.length) e2=Math.min(e2,function(){
var max=0;
for(var i of es) max=Math.max(max,get.value(i,target))
return -max/4;
}());
if(get.attitude(player,target)>0){
if(shas.length>=Math.max(1,shans.length)) return '奇兵';
if(shans.length>shas.length) return '正兵';
return e1>e2?'奇兵':'正兵';
}
if(shas.length) e1=-0.5;
if(shans.length) e2=-0.7;
if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
var rand=Math.random();
if(e1<e2) return rand<0.1?'奇兵':'正兵';
return rand<0.1?'正兵':'奇兵';
}());
'step 1'
var map=trigger.getParent().customArgs,id=target.playerid;
if(!map[id]) map[id]={};
map[id].qizheng_name=result.control;
map[id].qizheng_aibuff=get.attitude(player,target)>0;
},
},
},
},
lingce:{
audio:2,
trigger:{global:'useCard'},
forced:true,
filter:function(event,player){
return event.card.name=='qizhengxiangsheng'||get.zhinangs().contains(event.card.name);
},
content:function(){player.draw()},
},
dinghan:{
audio:2,
trigger:{target:'useCardToTarget'},
forced:true,
filter:function(event,player){
return get.tag(event.card,'damage')>0&&!player.getStorage('dinghan_clear').contains(event.card.name);
},
content:function(){
player.markAuto('dinghan_clear',[trigger.card.name]);
player.addTempSkill('dinghan_clear','roundStart');
trigger.targets.remove(player);
trigger.getParent().triggeredTargets2.remove(player);
trigger.untrigger();
},
subSkill:{
clear:{onremove:true},
}
},
dulie:{
audio:2,
trigger:{
global:'gameDrawAfter',
player:'enterGame',
},
locked:true,
direct:true,
forced:true,
filter:function(event,player){
return game.players.length>1&&!game.hasPlayer(function(current){
return current.hasMark('dulie');
return game.players.length>1&&game.hasPlayer(function(current){
return current!=player&&!current.hasMark('dulie');
});
},
logTarget:function(event,player){
return game.filterPlayer(function(current){
return current!=player&&!current.hasMark('dulie');
});
},
content:function(){
'step 0'
var num=Math.floor(game.players.length/2);
player.chooseTarget(num,true,'请选择【笃烈】的目标','令'+get.cnNumber(num)+'名角色获得“围”标记',lib.filter.notMe).set('ai',function(target){
var player=_status.event.player;
return Math.max(1,get.attitude(player,target))/Math.max(1,get.distance(player,target));
});
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.logSkill('dulie',targets);
for(var i of targets) i.addMark('dulie',1);
game.delayx();
}
var targets=game.filterPlayer(function(current){
return current!=player&&!current.hasMark('dulie');
}).sortBySeat();
for(var i of targets) i.addMark('dulie',1);
game.delayx();
},
mod:{
targetInRange:function(card,player,target){
@ -349,10 +474,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0'
game.log(player,'使命失败');
player.awakenSkill('tspowei');
if(player.hp<1) player.recover(1-player.hp);
'step 1'
var num=player.countCards('e');
if(num>0) player.chooseToDiscard('e',true,num);
'step 1'
if(player.hp<1) player.recover(1-player.hp);
},
},
},
@ -373,6 +498,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
player.draw();
player.addTempSkill('shenzhu_less');
player.addMark('shenzhu_less',1,false);
},
subSkill:{
less:{
onremove:true,
charlotte:true,
intro:{content:'手牌上限-#'},
mod:{
maxHandcard:function(player,num){
return num-player.countMark('shenzhu_less');
},
},
},
},
},
dangmo:{
@ -2085,12 +2224,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
player.chooseCard('是否弃置一枚“忍”,并发动〖鬼才〗?','he',function(card){
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).ai=function(card){
var trigger=_status.event.parent._trigger;
var player=_status.event.player;
@ -2310,10 +2449,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
trigger.directHit.addArray(game.players);
if(trigger.addCount!==false){
trigger.addCount=false;
if(player.stat[player.stat.length-1].card.sha>0){
player.stat[player.stat.length-1].card.sha--;
}
trigger.addCount=false;
if(player.stat[player.stat.length-1].card.sha>0){
player.stat[player.stat.length-1].card.sha--;
}
}
},
ai:{
@ -2357,7 +2496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sub:true,
},
},
group:["wuhun2","wuhun4","wuhun5"],
group:["wuhun2","wuhun4","wuhun5"],
},
wuhun2:{
trigger:{
@ -3119,18 +3258,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i<list.length;i++){
var name=list[i];
if(player.countCards('hes',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max){
max=temp;
name2=map[name];
}
}
}
if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
return 0;
if(player.countCards('hes',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max){
max=temp;
name2=map[name];
}
}
}
if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
return 0;
}
return 1;
},
@ -3195,15 +3334,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i<list.length;i++){
var name=list[i];
if(player.countCards('hes',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max) max=temp;
}
}
max/=1.1;
return max;
if(player.countCards('hes',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max) max=temp;
}
}
max/=1.1;
return max;
}
return 2;
},
@ -3274,18 +3413,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i<list.length;i++){
var name=list[i];
if(player.countCards('hs',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max){
max=temp;
name2=map[name];
}
}
}
if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
return 0;
if(player.countCards('hs',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max){
max=temp;
name2=map[name];
}
}
}
if(name2==get.suit(card,player)) return (name2=='diamond'?(5-get.value(card)):20-get.value(card));
return 0;
}
return 1;
},
@ -3327,15 +3466,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var map={sha:'diamond',tao:'heart'}
for(var i=0;i<list.length;i++){
var name=list[i];
if(player.countCards('hs',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max) max=temp;
}
}
max/=1.1;
return max;
if(player.countCards('hs',function(card){
return (name!='sha'||get.value(card)<5)&&get.suit(card,player)==map[name];
})>0&&player.getUseValue({name:name,nature:name=='sha'?'fire':null})>0){
var temp=get.order({name:name,nature:name=='sha'?'fire':null});
if(temp>max) max=temp;
}
}
max/=1.1;
return max;
}
return 2;
},
@ -4170,6 +4309,104 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
card:{
qizhengxiangsheng:{
enable:true,
type:'trick',
fullskin:true,
derivation:'shen_xunyu',
filterTarget:lib.filter.notMe,
content:function(){
'step 0'
if(!event.qizheng_name){
if(player.isAlive()) player.chooseControl('奇兵','正兵').set('prompt','请选择'+get.translation(target)+'的标记').set('choice',function(){
var e1=1.5*get.sgn(get.damageEffect(target,player,target));
var e2=0;
if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
var es=target.getGainableCards(player,'e');
if(es.length) e2=Math.min(e2,function(){
var max=0;
for(var i of es) max=Math.max(max,get.value(i,target))
return -max/4;
}());
if(Math.abs(e1-e2)<=0.3) return Math.random()<0.5?'奇兵':'正兵';
if(e1<e2) return '奇兵';
return '正兵';
}()).set('ai',function(){
return _status.event.choice;
});
else event.finish();
}
'step 1'
if(!event.qizheng_name&&result&&result.control) event.qizheng_name=result.control;
if(event.directHit) event._result={bool:false};
else target.chooseToRespond('请打出一张杀或闪响应奇正相生',function(card,player){
var name=get.name(card);
return name=='sha'||name=='shan';
}).set('ai',function(card){
if(_status.event.choice=='all'){
var rand=get.rand('qizhengxiangsheng');
if(rand>0.5) return 0;
return 1+Math.random();
}
if(get.name(card)==_status.event.choice) return get.order(card);
return 0;
}).set('choice',function(){
if(target.hasSkillTag('useShan')) return 'shan';
if(typeof event.qizheng_aibuff=='boolean'){
var shas=target.getCards('h','sha'),shans=target.getCards('h','shan');
if(event.qizheng_aibuff){
if(shas.length>=Math.max(1,shans.length)) return 'shan';
if(shans.length>shas.length) return 'sha';
return false;
}
if(!shas.length||!shans.length) return false;
}
var e1=1.5*get.sgn(get.damageEffect(target,player,target));
var e2=0;
if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
var es=target.getGainableCards(player,'e');
if(es.length) e2=Math.min(e2,function(){
var max=0;
for(var i of es) max=Math.max(max,get.value(i,target))
return -max/4;
}());
if(e1-e2>=0.3) return 'shan';
if(e2-e1>=0.3) return 'sha';
return 'all';
}());
'step 2'
var name=result.bool?result.card.name:null,require=event.qizheng_name;
if(require=='奇兵'&&name!='sha') target.damage();
else if(require=='正兵'&&name!='shan'&&target.countGainableCards(player,'he')>0) player.gainPlayerCard(target,true,'he');
},
ai:{
order:5,
tag:{
damage:0.5,
gain:0.5,
loseCard:1,
respondShan:1,
respondSha:1,
},
result:{
target:function(player,target){
var e1=1.5*get.sgn(get.damageEffect(target,player,target));
var e2=0;
if(target.countGainableCards(player,'h')>0&&!target.hasSkillTag('noh')) e2=-1;
var es=target.getGainableCards(player,'e');
if(es.length) e2=Math.min(e2,function(){
var max=0;
for(var i of es) max=Math.max(max,get.value(i,target))
return -max/4;
}());
if(game.hasPlayer(function(current){
return current.hasSkill('tianzuo')&&get.attitude(current,player)<=0;
})) return Math.max(e1,e2);
return Math.min(e1,e2);
},
},
},
},
hina_shenji:{
type:'equip',
subtype:'equip5',
@ -4364,17 +4601,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sghuishi_info:'限定技出牌阶段你可以选择一名其他角色若其有未发动过的觉醒技则你令其发动这些觉醒技时无视原有条件否则其摸四张牌。然后你减2点体力上限。',
shen_taishici:'神太史慈',
dulie:'笃烈',
dulie_info:'锁定技。①游戏开始时,你令X名其他角色获得“围”X为游戏人数的一半且向下取整。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红色,则取消此目标。',
dulie_info:'锁定技。①游戏开始时,你令所有其他角色获得“围”。②你对没有“围”的角色使用【杀】无距离限制。③当你成为【杀】的目标时,若使用者没有“围”,则你进行判定。若结果为红色,则取消此目标。',
tspowei:'破围',
tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你弃置装备区的所有牌,然后将体力值回复至1点。',
tspowei_info:'使命技。①当你因使用【杀】而对有“围”的角色造成伤害时,你防止此伤害并移去该角色的“围”。②使命:当你使用【杀】结算完成后,若场上没有“围”,则你获得技能〖神著〗。③失败:当你进入濒死状态时,你将体力值回复至1点,然后弃置装备区的所有牌。',
shenzhu:'神著',
shenzhu_info:'你使用【杀】无次数限制。当你使用有对应实体牌的非转化【杀】结算结束后,你摸一张牌。',
shenzhu_info:'你使用【杀】无次数限制。当你使用有对应实体牌的非转化【杀】结算结束后,你摸一张牌,且本回合的手牌上限-1。',
dangmo:'荡魔',
dangmo_info:'当你于出牌阶段内使用第一张【杀】选择目标后你可以为此牌增加至多Y-1个目标Y为你的体力值。',
reshuishi:'慧识',
reshuishi_info:'出牌阶段限一次若你的体力上限小于10你可进行判定牌不置入弃牌堆的判定。若判定结果与本次发动技能时的其他判定结果的花色均不相同且你的体力上限小于10则你加1点体力上限并重复此流程。然后你将所有位于处理区的判定牌交给一名角色。若其手牌数为全场最多则你减1点体力上限。',
resghuishi:'辉逝',
resghuishi_info:'限定技出牌阶段你可选择一名角色。若你的体力上限不小于存活人数且其有未发动的觉醒技则你令其中一个技能无视发动条件否则其摸四张牌。然后你减2点体力上限。',
qizhengxiangsheng:'奇正相生',
qizhengxiangsheng_info:'出牌阶段对一名其他角色使用。你将目标角色标记为“奇兵”或“正兵”对其他角色不可见。然后目标角色可以打出一张【杀】或【闪】。若其是“奇兵”且未打出【杀】则你对其造成1点伤害若其是“正兵”且未打出【闪】则你获得其一张牌。',
shen_xunyu:'神荀彧',
tianzuo:'天佐',
tianzuo_info:'①游戏开始时你将8张【奇正相生】加入牌堆。②当一名角色成为【奇正相生】的目标后你可观看其手牌然后可以更改其标记。',
lingce:'灵策',
lingce_info:'锁定技。当有【奇正相生】或智囊被使用时,你摸一张牌。',
dinghan:'定汉',
dinghan_info:'锁定技,每种牌名每轮限一次。当你成为伤害类卡牌的目标时,取消之。',
key_kagari:'篝',
kagari_zongsi:'纵丝',

View File

@ -6,23 +6,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
connect:true,
characterSort:{
mobile:{
mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun"],
mobile_default:["miheng","taoqian","lingcao","sunru","lifeng","zhuling","liuye","zhaotongzhaoguang","majun","simazhao","wangyuanji","pangdegong","shenpei","hujinding","zhangyì","jiakui","yangbiao","chendeng","dongcheng","yangyi","dengzhi","zhengxuan","sp_sufei","furong","dingyuan","simashi","yanghuiyu","hucheer","gongsunkang","nanhualaoxian","zhouqun","qiaozhou"],
mobile_yijiang:["yj_zhanghe","yj_zhangliao","yj_xuhuang","yj_ganning"],
mobile_shijizhi:["sp_wangcan","sp_chenzhen","sp_sunshao","sp_xunchen","luotong","sp_duyu","sp_bianfuren","feiyi"],
mobile_shijixin:['wujing','sp_mifuren','sp_xinpi','wangling','wangfuzhaolei','zhouchu','sp_kongrong','sp_yanghu'],
mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'],
mobile_shijiyong:['db_wenyang'],
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"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin"],
mobile_yijiang2:["old_bulianshi","xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui"],
mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"],
mobile_yijiang67:["re_jikang"],
mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"],
},
},
character:{
xin_caozhen:['male','wei',4,['disordersidi']],
xin_sunluban:['female','wu',3,['xinzenhui','xinjiaojin']],
qiaozhou:['male','shu',3,['zhiming','xingbu']],
db_wenyang:['male','wei',4,['dbquedi','dbzhuifeng','dbchongjian','dbchoujue'],['doublegroup:wei:wu']],
xin_guyong:['male','wu',3,['xinshenxing','xinbingyi']],
re_zhonghui:['male','wei',4,['requanji','zili']],
xin_caifuren:['female','qun',3,['xinqieting','xianzhou']],
@ -33,12 +38,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangzhongjing:['male','qun',3,['jishi','liaoyi','binglun']],
xin_zhoucang:['male','shu',4,['mobilezhongyong']],
sp_xujing:['male','shu',3,['boming','ejian']],
sp_huaxin:['male','wei',3,['hxrenshi','debao','buqi']],
sp_huaxin:['male','wei',3,['yuanqing','shuchen']],
xiangchong:['male','shu',4,['guying','muzhen']],
caizhenji:['female','wei',3,['sheyi','tianyin']],
ol_yujin:['male','wei',4,['rejieyue']],
sp_kongrong:['male','qun',3,['xinlirang','xinmingshi']],
zhouchu:['male','wu',4,['xianghai','chuhai']],
zhouchu:['male','wu',4,['xianghai','rechuhai']],
wangfuzhaolei:['male','shu',4,['xunyi']],
wangling:['male','wei',4,['xingqi','xinzifu','mibei']],
zhouqun:['male','shu',3,['tiansuan']],
@ -131,6 +136,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_sunben:['male','wu',4,['jiang','rehunzi','zhiba'],['zhu']],
},
characterIntro:{
qiaozhou:'谯周201年270年字允南巴西郡西充国县今四川西充县槐树镇人。三国时期蜀汉大臣、学者、儒学家、史学家。幼年丧父少读典籍精研六经颇晓天文成为蜀地大儒之一门下有陈寿、罗宪等学生。诸葛亮担任益州牧时授劝学从事。诸葛亮死后不顾朝令前往奔丧。后主刘禅册立太子时授太子仆迁太子家令、光禄大夫。反对姜维北伐著《仇国论》力陈北伐之失。炎兴元年263年邓艾攻打成都时期力劝刘禅投降“有全国之功”投降魏国后受封阳城亭侯迁骑都尉。泰始六年270年授散骑常侍同年去世时年七十岁。',
gongsunkang:'公孙康生卒年不详辽东襄平今辽宁辽阳人。东汉末年辽东地区割据军阀辽东太守公孙度长子一作庶子、车骑将军公孙恭之兄。公孙康在其父死后继任辽东太守。建安十二年207年擒斩图谋不轨的袁尚、袁熙兄弟将其首级献予曹操被拜为左将军封襄平侯。建安十四年209年公孙康大破高句丽陷其国都并讨伐韩濊设置带方郡。死后因二子年幼由公孙恭继任。曹丕称帝后被追赠为大司马。',
qiaogong:'桥公,亦作“乔公”,名字不详,是中国汉末三国时期的长者,江东二乔的父亲,三国时期庐江郡皖县(今安徽潜山)人,中国长篇古典名著《三国演义》中称之为“乔国老”。',
liuzhang:'刘璋(生卒年不详),字季玉,江夏竟陵(今湖北省天门市)人。东汉末年宗室、军阀,益州牧刘焉幼子,在父亲刘焉死后继任益州牧。刘璋为人懦弱多疑。汉中张鲁骄纵,不听刘璋号令,于是刘璋杀张鲁母弟,双方成为仇敌,刘璋派庞羲攻击张鲁,战败。后益州内乱,平定后,又有曹操将前来袭击的消息。在内外交逼之下,刘璋听信手下张松、法正之言,迎接刘备入益州,想借刘备之力,抵抗曹操。不料此举乃引狼入室,刘备反手攻击刘璋,又有法正为内应,进至成都。成都吏民都想抵抗刘备,但刘璋为百姓计而开城出降,群下莫不流涕。刘备占据成都后,刘璋以振威将军的身份被迁往荆州居住,关羽失荆州后,刘璋归属东吴,被孙权任命为益州牧,不久后去世,卒年不详。',
@ -564,6 +570,708 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//曹真
disordersidi:{
trigger:{player:'useCardAfter'},
direct:true,
filter:function(event,player){
return get.type(event.card,false)!='delay'&&event.targets.length==1&&game.hasPlayer(function(current){
return player!=current&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(current));
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('disordersidi'),'选择两名角色a,b建立二元序偶<a,b>,或仅选择一名角色,建立二元序偶<a,a>',[1,2],function(card,player,target){
if(ui.selected.targets.length) return true;
return target!=player&&(!player.storage.disordersidi||!player.storage.disordersidi.contains(target));
}).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['第一元素','第二元素']).set('ai',function(target){
var player=_status.event.player;
if(!ui.selected.targets.length){
if(target.getEnemies().length==1) return 2+Math.random();
return 1+Math.random();
}
var targetx=ui.selected.targets[0];
if(targetx.getEnemies().contains(target)&&targetx.inRange(target)) return Math.random()-0.5;
return 0;
}).animate=false;
'step 1'
if(result.bool&&result.targets.length){
var targets=result.targets;
player.logSkill('disordersidi',targets[0]);
if(targets.length==1) targets.push(targets[0]);
if(!player.storage.disordersidi) player.storage.disordersidi=[];
if(!player.storage.disordersidi2) player.storage.disordersidi2=[];
player.storage.disordersidi.push(targets[0]);
player.storage.disordersidi2.push(targets[1]);
player.markSkill('disordersidi');
game.delayx();
}
},
intro:{
content:function(storage,player){
if((player==game.me||player.iscardUnderControl())&&!game.observe){
var str='R={ ';
for(var i=0;i<storage.length;i++){
str+=('<'+get.translation(storage[i])+', '+get.translation(player.storage.disordersidi2[i])+'>');
if(i<storage.length-1) str+=', ';
}
str+=' }'
return str;
}
return get.translation(storage);
},
},
onremove:function(player){
delete player.storage.disordersidi;
delete player.storage.disordersidi2;
},
group:['disordersidi_clear','disordersidi_exec'],
subSkill:{
clear:{
trigger:{global:['useCardAfter','die']},
forced:true,
popup:false,
locked:false,
filter:function(event,player){
return (!event.card||get.type(event.card,false)!='delay')&&player.storage.disordersidi&&player.storage.disordersidi.contains(event.player);
},
content:function(){
player.storage.disordersidi2.splice(player.storage.disordersidi.indexOf(trigger.player),1);
player.unmarkAuto('disordersidi',[trigger.player]);
},
},
exec:{
trigger:{global:'useCardToPlayered'},
forced:true,
locked:false,
filter:function(event,player){
if(get.type(event.card,false)=='delay'||!player.storage.disordersidi) return false;
var index=player.storage.disordersidi.indexOf(event.player);
return index!=-1&&player.storage.disordersidi2[index]==event.target;
},
logTarget:'player',
content:function(){
'step 0'
player.storage.disordersidi2.splice(player.storage.disordersidi.indexOf(trigger.player),1);
player.unmarkAuto('disordersidi',[trigger.player])
if(trigger.target==player){
player.draw();
event.finish();
return;
}
var target=trigger.player;
event.target=target;
player.chooseControl('cancel2').set('choiceList',[
'取消'+get.translation(trigger.card)+'的所有目标并对'+get.translation(target)+'造成1点伤害',
'摸两张牌',
]).set('ai',function(){
var player=_status.event.player,evt=_status.event.getTrigger();
if(get.damageEffect(evt.player,player,player)>0&&get.effect(evt.target,evt.card,evt.player,player)<0) return 0;
return 1;
});
'step 1'
if(result.index==0){
trigger.cancel();
trigger.targets.length=0;
trigger.getParent().triggeredTargets1.length=0;
target.damage();
}
else if(result.index==1) player.draw(2);
},
},
}
},
//孙鲁班
xinzenhui:{
audio:2,
trigger:{player:'useCardToPlayer'},
filter:function(event,player){
if(event.targets.length!=1) return false;
var card=event.card;
if(card.name!='sha'&&(get.type(card,null,false)!='trick'||get.color(card,false)!='black')) return false;
if(!player.isPhaseUsing()||player.hasSkill('xinzenhui2')) return false;
return game.hasPlayer(function(current){
return current!=player&&current!=event.target&&lib.filter.targetEnabled2(card,player,current)&&lib.filter.targetInRange(card,player,current);
});
},
direct:true,
content:function(){
"step 0"
player.chooseTarget(get.prompt2('xinzenhui'),function(card,player,target){
if(player==target) return false;
var evt=_status.event.getTrigger();
return !evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return Math.max((target.countGainableCards(player,'he')?get.effect(target,{name:'shunshou_copy2'},player,player):0),get.effect(target,trigger.card,player,player));
});
"step 1"
if(result.bool){
player.addTempSkill('xinzenhui2','phaseUseAfter');
var target=result.targets[0],str=get.translation(target);
event.target=target;
player.logSkill('xinzenhui',target);
if(!target.countGainableCards(player,'he')) event._result={index:0};
else player.chooseControl().set('choiceList',[
'令'+str+'也成为'+get.translation(trigger.card)+'的目标',
'获得'+str+'的一张牌,然后其成为'+get.translation(trigger.card)+'的使用者',
]).set('ai',function(){
var trigger=_status.event.getTrigger();
var player=_status.event.player,target=_status.event.getParent().target;
return (target.countGainableCards(player,'he')?get.effect(target,{name:'shunshou_copy2'},player,player):0)>get.effect(target,trigger.card,player,player)?1:0;
})
}
else event.finish();
"step 2"
if(result.index==1){
trigger.untrigger();
trigger.getParent().player=event.target;
game.log(event.target,'成为了',trigger.card,'的使用者');
player.gainPlayerCard(target,true,'he');
}
else{
game.log(event.target,'成为了',trigger.card,'的额外目标');
trigger.getParent().targets.push(event.target);
}
}
},
xinzenhui2:{},
xinjiaojin:{
audio:2,
trigger:{player:'damageBegin4'},
filter:function(event,player){
return player.countCards('he',{type:'equip'})&&event.source&&event.source.sex=='male';
},
direct:true,
content:function(){
"step 0"
var next=player.chooseToDiscard('he','骄矜:是否弃置一张装备牌防止伤害?',function(card,player){
return get.type(card)=='equip';
});
next.set('ai',function(card){
var player=_status.event.player;
if(player.hp==1||_status.event.getTrigger().num>1){
return 9-get.value(card);
}
if(player.hp==2){
return 8-get.value(card);
}
return 7-get.value(card);
});
next.logSkill='xinjiaojin';
"step 1"
if(result.bool){
game.delay(0.5);
trigger.cancel();
}
}
},
//周处
rechuhai:{
audio:'chuhai',
inherit:'chuhai',
dutySkill:true,
locked:true,
group:['rechuhai_add','rechuhai_achieve','rechuhai_fail'],
derivation:'zhangming',
prompt:'与一名其他角色进行拼点',
subSkill:{
add:{
trigger:{player:'compare'},
forced:true,
popup:false,
filter:function(event,player){
return event.getParent().name=='rechuhai'&&event.num1<13&&player.countCards('e')<4;
},
content:function(){
var num=4-player.countCards('e');
game.log(player,'的拼点牌点数+',num);
trigger.num1=Math.min(13,trigger.num1+num);
}
},
achieve:{
audio:'rechuhai',
trigger:{player:'equipAfter'},
forced:true,
skillAnimation:true,
animationColor:'wood',
filter:function(event,player){
return player.countCards('e')>2;
},
content:function(){
player.awakenSkill('rechuhai');
game.log(player,'成功完成使命');
if(player.isDamaged()) player.recover(player.maxHp-player.hp);
player.removeSkill('xianghai');
player.addSkill('zhangming');
},
},
fail:{
trigger:{player:'compareAfter'},
forced:true,
filter:function(event,player){
return event.getParent().name=='rechuhai'&&event.num1<13&&!event.result.bool;
},
content:function(){
player.awakenSkill('rechuhai');
game.log(player,'使命失败');
},
},
},
},
zhangming:{
audio:2,
mod:{
ignoredHandcard:function(card,player){
if(get.suit(card)=='club'){
return true;
}
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&get.suit(card)=='club') return false;
}
},
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return get.suit(event.card)=='club'&&get.type(event.card)=='trick';
},
content:function(){
trigger.directHit.addArray(game.filterPlayer(function(current){
return current!=player;
}));
},
},
//新华歆
yuanqing:{
audio:2,
trigger:{player:'phaseUseEnd'},
forced:true,
filter:function(event,player){
return player.hasHistory('useCard',function(evt){
return evt.getParent('phaseUse')==event;
});
},
content:function(){
var map={},cards=[];
player.getHistory('useCard',function(evt){
if(evt.getParent('phaseUse')==trigger){
var type=get.type2(evt.card,false);
if(!map[type]) map[type]=[];
}
});
for(var i=0;i<ui.discardPile.childNodes.length;i++){
var card=ui.discardPile.childNodes[i],type=get.type2(card,false);
if(map[type]) map[type].push(card);
}
for(var i in map){
if(map[i].length) cards.push(map[i].randomGet());
}
if(cards.length){
player.$gain2(cards,false);
game.cardsGotoSpecial(cards,'toRenku');
game.log(player,'将',cards,'置入了仁库');
game.delayx();
}
},
init:function(player){
player.storage.renku=true;
},
},
shuchen:{
audio:2,
init:function(player){
player.storage.renku=true;
},
trigger:{global:'dying'},
forced:true,
filter:function(event,player){
return _status.renku.length>4;
},
logTarget:'player',
content:function(){
player.gain(_status.renku,'gain2','fromRenku');
_status.renku.length=0;
game.updateRenku();
trigger.player.recover();
},
},
//谯周
zhiming:{
audio:2,
trigger:{player:['phaseZhunbeiBegin','phaseDiscardEnd']},
frequent:true,
content:function(){
'step 0'
player.draw();
'step 1'
if(player.countCards('he')>0){
var next=player.chooseCard('he','是否将一张牌置于牌堆顶?');
if(trigger.name=='phaseZhunbei'){
next.set('ai',function(card){
var player=_status.event.player,js=player.getCards('j');
if(js.length){
var judge=get.judge(js[0]);
if(judge&&judge(card)>=0) return 20-get.value(card);
}
return 0;
});
}
else if(!player.hasSkill('xingbu')||!game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0;
})){
next.set('ai',function(card){
var player=_status.event.player,js=player.next.getCards('j');
if(js.length){
var judge=get.judge(js[0]);
if(judge&&(judge(card)+0.01)*get.attitude(player,player.next)>0) return 20-get.value(card);
}
return 0;
});
}
else next.ai=(()=>-1);
}
else event.finish();
'step 2'
if(result.bool){
player.$throw(get.position(result.cards[0])=='e'?result.cards[0]:1,1000);
game.log(player,'将',get.position(result.cards[0])=='e'?result.cards[0]:'#y一张手牌','置于了牌堆顶');
player.lose(result.cards,ui.cardPile,'insert');
}
else event.finish();
'step 3'
game.updateRoundNumber();
game.delayx();
},
ai:{guanxing:true},
},
xingbu:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
prompt2:'展示牌堆顶的三张牌,并根据其中红色牌的数量,令一名其他角色获得一种效果',
check:function(event,player){
return game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0;
});
},
content:function(){
'step 0'
var cards=get.cards(3);
event.cards=cards;
game.cardsGotoOrdering(cards);
player.showCards(cards,get.translation(player)+'发动了【星卜】');
'step 1'
var num=0;
for(var i of cards){
if(get.color(i,false)=='red') num++;
}
player.chooseTarget('选择一名其他角色获得星卜效果('+get.cnNumber(num)+'张)',lib.filter.notMe,true).set('ai',function(target){
var player=_status.event.player,num=_status.event.getParent().num;
var att=get.attitude(player,target);
if(num<2) att*=(-1);
if(target.hasJudge('lebu')) att/=4;
return att;
});
if(num==0) num=1;
event.num=num;
'step 2'
if(result.bool){
var skill='xingbu_effect'+num,target=result.targets[0];
player.line(target,'green');
game.log(player,'选择了',target);
target.addTempSkill(skill,{player:'phaseEnd'});
target.addMark(skill,1,false);
game.delayx();
}
},
subSkill:{
effect1:{
charlotte:true,
onremove:true,
intro:{content:'使用杀的次数上限-#'},
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num-player.countMark('xingbu_effect1');
},
},
},
effect2:{
charlotte:true,
onremove:true,
intro:{content:'出牌阶段使用第一张牌后弃置#张牌,然后摸两倍的牌'},
trigger:{player:'useCardAfter'},
forced:true,
filter:function(event,player){
var evt=event.getParent('phaseUse');
if(!evt||evt.player!=player) return false;
return player.getHistory('useCard',function(evtx){
return evtx.getParent('phaseUse')==evt;
}).indexOf(event)==0;
},
content:function(){
player.chooseToDiscard('he',player.countMark('xingbu_effect2'),true);
player.draw(player.countMark('xingbu_effect2')*2);
},
},
effect3:{
charlotte:true,
onremove:true,
intro:{content:'摸牌阶段多摸2*#张牌,使用【杀】的次数上限+#,跳过弃牌阶段。'},
trigger:{player:['phaseDrawBegin2','phaseDiscardBefore']},
forced:true,
filter:function(event,player){
return event.name=='phaseDiscard'||!event.numFixed;
},
content:function(){
if(trigger.name=='phaseDraw') trigger.num+=(player.countMark('xingbu_effect3')*2);
else trigger.cancel();
},
mod:{
cardUsable:function(card,player,num){
if(card.name=='sha') return num+player.countMark('xingbu_effect3');
},
},
},
},
},
//文鸯
dbquedi:{
audio:2,
trigger:{player:'useCardToPlayered'},
direct:true,
usable:1,
filter:function(event,player){
return (event.card.name=='sha'||event.card.name=='juedou')&&(event.target.countGainableCards(player,'h')>0||player.hasCard(function(i){
return _status.connectMode||get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
},'h'));
},
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
var list=[];
if(target.countGainableCards(player,'h')>0) list.push('选项一');
if(player.hasCard(function(i){
return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
},'h')) list.push('选项二');
list.push('背水!');
list.push('cancel2');
player.chooseControl(list).set('choiceList',[
'获得'+get.translation(target)+'的一张手牌',
'弃置一张基本牌并令'+get.translation(trigger.card)+'伤害+1',
'背水减1点体力上限并执行所有选项',
]).set('prompt',get.prompt('dbquedi',target)).set('ai',function(){
var evt=_status.event.getTrigger(),player=evt.player,target=evt.target,card=evt.card;
if(get.attitude(player,target)>0) return 'cancel2';
var bool1=target.countGainableCards(player,'h')>0;
var bool2=player.hasCard(function(i){
return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi')&&get.value(card,player)<5;
},'h')&&!target.hasSkillTag('filterDamage',null,{
player:player,
card:card,
});
if(bool1&&bool2&&(target.hp<=2||(player.isDamaged()&&player.maxHp>3))) return '背水!';
if(bool1) return '选项一';
if(bool2) return '选项二';
return 'cancel2';
});
'step 1'
if(result.control!='cancel2'){
player.logSkill('dbquedi',target);
event.control=result.control;
if(event.control=='背水!') player.loseMaxHp();
}
else{
player.storage.counttrigger.dbquedi--;
event.finish();
}
'step 2'
if((event.control=='选项一'||event.control=='背水!')&&target.countGainableCards(player,'h')>0) player.gainPlayerCard(target,true,'h');
'step 3'
if((event.control=='选项二'||event.control=='背水!')&&player.hasCard(function(i){
return get.type(i,player)=='basic'&&lib.filter.cardDiscardable(i,player,'dbquedi');
},'h')){
player.chooseToDiscard('h','弃置一张基本牌',{type:'basic'},true);
}
else event.finish();
'step 4'
if(result.bool) trigger.getParent().baseDamage++;
},
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(!arg||!arg.card||!arg.target||(arg.card.name!='sha'&&arg.card.name!='juedou')) return false;
if(player.storage.counttrigger&&player.storage.counttrigger.dbquedi&&player.storage.counttrigger.dbquedi>0) return false;
if(arg.target.countCards('h')==1&&(arg.card.name!='sha'||!arg.target.getEquip('bagua')||player.hasSkillTag('unequip',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
})||player.hasSkillTag('unequip_ai',false,{
name:arg.card?arg.card.name:null,
target:arg.target,
card:arg.card
}))) return true;
return false;
},
},
},
dbzhuifeng:{
audio:2,
groupSkill:true,
enable:'chooseToUse',
filter:function(event,player){
return player.group=='wei'&&player.hp>0&&
(event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'juedou',isCard:true},player,event));
},
chooseButton:{
dialog:function(){
return ui.create.dialog('椎锋',[['sha','juedou'],'vcard']);
},
filter:function(button,player){
var evt=_status.event.getParent();
return evt.filterCard({name:button.link[2],isCard:true},player,evt);
},
check:function(card){
return _status.event.player.getUseValue({name:card.link[2]})*(card.link[2]=='juedou')?2:1;
},
backup:function(links){
return {
viewAs:{name:links[0][2],isCard:true},
filterCard:()=>false,
selectCard:-1,
precontent:function(){
player.logSkill('dbzhuifeng');
delete event.result.skill;
player.loseHp();
},
}
},
prompt:function(links){
return '请选择【'+get.translation(links[0][2])+'】的目标';
},
},
ai:{
respondSha:true,
skillTagFilter:function(player,tag,arg){
return player.group=='wei'&&player.hp>0&&arg=='use';
},
order:function(){
var player=_status.event.player;
if(player.hasValueTarget({name:'juedou'})) return get.order({name:'juedou'})-0.5;
return get.order({name:'sha'})-0.5;
},
result:{
player:function(player){
if(player.hp>1) return 1;
return -1;
},
},
},
},
dbchongjian:{
audio:2,
groupSkill:true,
hiddenCard:function(player,name){
if(player.group=='wu'&&(name=='sha'||name=='jiu')&&player.hasCard(function(card){
return get.type(card)=='equip';
},'hes')) return true;
return false;
},
enable:'chooseToUse',
filter:function(event,player){
return player.group=='wu'&&player.hasCard(function(card){
return get.type(card)=='equip';
},'hes')&&(event.filterCard({name:'sha',isCard:true},player,event)||event.filterCard({name:'jiu',isCard:true},player,event));
},
chooseButton:{
dialog:function(){
return ui.create.dialog('冲坚',[['sha','jiu'],'vcard']);
},
filter:function(button,player){
var evt=_status.event.getParent();
return evt.filterCard({name:button.link[2],isCard:true},player,evt);
},
check:function(button){
if(_status.event.getParent().type!='phase') return 1;
var player=_status.event.player;
if(button.link[2]=='jiu'&&(player.hasCard(function(card){
return get.name(card)=='sha';
},'hs')||player.countCards('hes',function(card){
if(get.type(card)!='equip') return false;
if(get.position(card)=='e'){
if(player.hasSkillTag('noe')) return (10-get.value(card))>0;
var sub=get.subtype(card);
if(player.hasCard(function(card){
return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
},'hs')) return (10-get.value(card))>0;
}
return (5-get.value(card))>0;
})>1)) return player.getUseValue({name:'jiu'})*4;
return player.getUseValue({name:button.link[2]});
},
backup:function(links,player){
return {
audio:'dbchongjian',
viewAs:{name:links[0][2],isCard:true},
filterCard:{type:'equip'},
position:'hes',
popname:true,
check:function(card){
var player=_status.event.player;
if(get.position(card)=='e'){
if(player.hasSkillTag('noe')) return 10-get.value(card);
var sub=get.subtype(card);
if(player.hasCard(function(card){
return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
},'hs')) return 10-get.value(card);
}
return 5-get.value(card);
},
}
},
prompt:function(links){
return '将一张装备牌当做【'+get.translation(links[0][2])+'】使用';
},
},
ai:{
respondSha:true,
skillTagFilter:function(player,tag,arg){
return player.group=='wu'&&arg=='use'&&player.hasCard(function(card){
return get.type(card)=='equip';
},'hes');
},
order:function(item,player){
if(_status.event.type!='phase') return 1;
var player=_status.event.player;
if(player.hasCard(function(card){
if(get.value(card,player)<0) return true;
var sub=get.subtype(card);
return player.hasCard(function(card){
return get.subtype(card)==sub&&player.canUse(card,player)&&get.effect(player,card,player,player)>0;
},'hs')>0;
},'e')) return 10;
if(player.countCards('hs','sha')||player.countCards('he',function(card){
return get.type(card)=='equip'&&get.value(card,player)<5;
})>1) return get.order({name:'jiu'})-0.1;
return get.order({name:'sha'})-0.1;
},
result:{player:1},
},
},
dbchoujue:{
audio:2,
trigger:{source:'dieAfter'},
forced:true,
content:function(){
player.gainMaxHp();
player.draw(2);
player.addSkill('counttrigger');
if(!player.storage.counttrigger) player.storage.counttrigger={};
if(!player.storage.counttrigger.dbquedi) player.storage.counttrigger.dbquedi=0;
player.storage.counttrigger.dbquedi--;
},
},
//顾雍
xinshenxing:{
audio:2,
@ -1660,7 +2368,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
return event.fromRenku==true;
return event.fromRenku==true&&!event.outRange;
},
content:function(){
player.draw();
@ -1788,6 +2496,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true,
popup:false,
onremove:true,
charlotte:true,
content:function(){
if(player.isDamaged()){
player.logSkill('binglun_recover');
@ -11521,6 +12230,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
_doublegroup_choice:{
trigger:{
global:'gameStart',
player:'enterGame',
},
forced:true,
charlotte:true,
firstDo:true,
popup:false,
filter:function(event,player){
return get.mode()!='guozhan'&&get.is.double(player.name1)&&!player._groupChosen;
},
content:function(){
'step 0'
player._groupChosen=true;
player.chooseControl(get.is.double(player.name1,true)).set('prompt','请选择你的势力');
'step 1'
player.changeGroup(result.control);
},
},
},
dynamicTranslate:{
yizan_use:function(player){
@ -12108,7 +12837,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mjmouzhi_info:'锁定技,当你受到伤害时,若伤害渠道对应的牌和你上次受到的伤害颜色相同,则你防止此伤害。',
zhangzhongjing:'张机',
jishi:'济世',
jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌离开仁库时,你摸一张牌。',
jishi_info:'锁定技。①当你使用的牌结算完成后,若你未因此牌造成过伤害,则你将此牌对应的所有实体牌置于仁库中。②当有牌不因溢出而离开仁库时,你摸一张牌。',
liaoyi:'疗疫',
liaoyi_info:'其他角色的回合开始时若其①手牌数小于体力值且仁库内牌数大于等于X则你可令其从仁库中获得X张牌②手牌数大于体力值则你可以令其将X张牌置于仁库中X为其手牌数与体力值之差且至多为4。',
binglun:'病论',
@ -12166,6 +12895,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinshenxing_info:'出牌阶段限X次X为你的体力值你可以弃置两张牌然后摸一张牌。若这两张牌颜色不同则改为摸两张牌。',
xinbingyi:'秉壹',
xinbingyi_info:'结束阶段你可展示所有手牌。若这些牌的颜色或类型均相同则你可以令至多X名角色各摸一张牌X为你的手牌数。',
db_wenyang:'文鸯',
dbquedi:'却敌',
dbquedi_info:'每回合限一次。当你使用【杀】或【决斗】指定唯一目标后,你可选择:①获得目标角色的一张手牌。②弃置一张基本牌,并令此牌的伤害值基数+1。③背水减1点体力上限然后依次执行上述所有选项。',
dbzhuifeng:'椎锋',
dbzhuifeng_backup:'椎锋',
dbzhuifeng_info:'魏势力技。当你需要使用【杀】或【决斗】时你可以失去1点体力然后视为使用此牌。',
dbchongjian:'冲坚',
dbchongjian_backup:'冲坚',
dbchongjian_info:'吴势力技。你可以将一张装备牌当做【杀】或【酒】使用。',
dbchoujue:'仇决',
dbchoujue_info:'锁定技。当你杀死其他角色后你加1点体力上限并摸两张牌然后本回合发动【却敌】的次数上限+1。',
qiaozhou:'谯周',
zhiming:'知命',
zhiming_info:'准备阶段开始时或弃牌阶段结束时,你摸一张牌,然后可以将一张牌置于牌堆顶。',
xingbu:'星卜',
xingbu_info:'结束阶段你可以展示牌堆顶的三张牌然后根据X值X为这三张牌中红色牌的数量令一名其他角色获得对应的效果直到其下回合结束①三张其摸牌阶段多摸两张牌使用【杀】的次数上限+1跳过弃牌阶段。②两张其于出牌阶段使用的第一张牌结算结束后弃置一张牌并摸两张牌。③小于两张其使用【杀】的次数上限-1。',
yuanqing:'渊清',
yuanqing_info:'锁定技,出牌阶段结束时,你随机将弃牌堆中你本阶段使用过的牌类型的各一张牌置于仁库中。',
shuchen:'疏陈',
shuchen_info:'锁定技当有角色进入濒死状态时若仁库中的牌数大于四则你获得仁库中的所有牌然后其回复1点体力。',
rechuhai:'除害',
rechuhai_info:'使命技。①出牌阶段限一次,你可以摸一张牌,然后和一名其他角色拼点。若你赢,则你观看其手牌,并从牌堆/弃牌堆中获得其手牌中包含的类型的牌各一张,且当你于此阶段内对其造成伤害后,你将牌堆/弃牌堆中的一张装备牌置于你的一个空置装备栏内。②当你因发动〖除害①〗而展示拼点牌时,你令此牌的点数+XX=(4-你装备区的牌数)。③使命当有装备牌进入你的装备区后若你的装备区内有至少三张牌则你将体力值回复至上限失去〖乡害〗并获得〖彰名〗。④失败当你因发动〖除害①〗发起的拼点没赢时若你的最终点数不大于Q点则你触发使命失败分支。',
zhangming:'彰名',
zhangming_info:'锁定技。你的♣牌不计入手牌上限。当你使用♣普通锦囊牌时,你令所有其他角色不能响应此牌。',
xin_sunluban:'手杀孙鲁班',
xinzenhui:'谮毁',
xinzenhui_info:'出牌阶段限一次。当你使用【杀】或黑色普通锦囊牌指定目标时,你可选择另一名能成为此牌目标的其他角色并选择一项:①令其也成为此牌的目标。②获得其一张牌,然后将此牌的使用者改为该角色。',
xinjiaojin:'骄矜',
xinjiaojin_info:'当你受到男性角色造成的伤害时,你可以弃置一张装备牌,令此伤害-1。',
xin_caozhen:'手杀曹真',
disordersidi:'司敌',
disordersidi_info:'①当你使用的不为延时锦囊牌的牌结算结束后你可选择一名R内不存在以a为第一序偶的二元序偶的角色a并选择一名角色b在关系R内建立二元序偶<a,b>b对其他角色不可见。②一名角色a使用的不为延时锦囊牌的牌结算结束后你清除R内以其为第一元素的二元序偶。③一名角色a使用不为延时锦囊牌的牌指定b为唯一目标时若aRb成立则你从R内移除<a,b>若b为你你摸一张牌若b不为你你可选择⒈取消此牌的目标并对a造成1点伤害。⒉摸两张牌。',
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',
@ -12178,6 +12939,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijiren:'始计篇·仁',
mobile_shijizhi:'始计篇·智',
mobile_shijixin:'始计篇·信',
mobile_shijiyong:'始计篇·勇',
}
};
});

View File

@ -254,6 +254,7 @@ window.noname_character_rank={
'panshu',
'caochun',
'xin_caifuren',
'shen_xunyu',
'key_misuzu',
'key_sunohara',
'key_umi',
@ -479,7 +480,7 @@ window.noname_character_rank={
're_dongcheng',
'ol_yujin',
'ol_huaxin',
'zhangzhongjing',
'qiaozhou',
],
bp:[
'chess_diaochan',
@ -700,6 +701,8 @@ window.noname_character_rank={
'wuban',
'tw_zhaoxiang',
'ol_lusu',
'zhangzhongjing',
'db_wenyang',
],
b:[
'diy_feishi',
@ -891,6 +894,7 @@ window.noname_character_rank={
'xin_guyong',
'duosidawang',
're_jiaxu',
'xin_caozhen',
],
bm:[
'diy_xizhenxihong',
@ -1042,6 +1046,7 @@ window.noname_character_rank={
'sp_zhangwen',
're_zoushi',
'yuejiu',
'xin_sunluban',
],
c:[
'xiahoudun',
@ -1216,6 +1221,7 @@ window.noname_character_rank={
'yangwan',
'shen_guojia',
'shen_taishici',
'shen_xunyu',
'tw_gexuan',
'key_tomoya',
'key_masato',
@ -1396,6 +1402,8 @@ window.noname_character_rank={
'longyufei',
're_guyong',
're_panshu',
'db_wenyang',
'qiaozhou',
'key_kano',
'key_haruko',
'key_akiko',
@ -1731,6 +1739,7 @@ window.noname_character_rank={
'xin_zhonghui',
'jiachong',
'ol_lusu',
'xin_sunluban',
],
junk:[
'sunshao',

View File

@ -182,6 +182,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
selectTarget:targets.length==1?-1:1,
selectCard:num,
prompt:'将'+get.cnNumber(num)+'张手牌交给一名手牌数最少的其他角色',
forced:true,
ai1:function(card){
var goon=false,player=_status.event.player;
for(var i of _status.event.targets){
@ -1568,7 +1569,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
//国钟会
gzquanji:{
audio:'quanji',
audio:2,
trigger:{
player:'damageEnd',
source:'damageSource',
@ -1610,7 +1611,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
gzpaiyi:{
audio:'paiyi',
audio:2,
enable:'phaseUse',
filter:function(event,player){
return player.getStorage('gzquanji').length>0&&!player.hasSkill('gzquanji2');
@ -1621,7 +1622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
backup:function(links,player){
return {
audio:'paiyi',
audio:'gzpaiyi',
filterTarget:true,
filterCard:function(){return false},
selectCard:-1,
@ -1664,7 +1665,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.delayx();
"step 1"
var num=player.getStorage('gzquanji').length;
if(num) target.draw(num);
if(num) target.draw(Math.min(7,num));
"step 2"
if(target.countCards('h')>player.countCards('h')){
target.damage();
@ -8426,7 +8427,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.storage.refanjian=cards[0];
target.gain(cards[0],player,'give');
"step 1"
target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
var suit=get.suit(target.storage.refanjian);
if(!target.countCards('h')) event._result={control:'refanjian_hp'};
else target.chooseControl('refanjian_card','refanjian_hp').ai=function(event,player){
var cards=player.getCards('he',{suit:get.suit(player.storage.refanjian)});
if(cards.length==1) return 0;
if(cards.length>=2){
@ -8451,7 +8454,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish();
}
"step 3"
target.discard(target.getCards('he',{suit:get.suit(target.storage.refanjian)}))
var suit=get.suit(target.storage.refanjian);
target.discard(target.getCards('he',function(i){
return get.suit(i)==suit&&lib.filter.cardDiscardable(i,target,'refanjian');
}));
delete target.storage.refanjian;
},
ai:{
@ -10390,7 +10396,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
gzquanji_info:'当你受到伤害后或当你使用牌指定唯一目标并对其造成伤害后,你可以摸一张牌,然后你将一张牌置于武将牌上,称为“权”;你的手牌上限+XX为“权”的数量。',
gzpaiyi:'排异',
gzpaiyi_backup:'排异',
gzpaiyi_info:'出牌阶段你可以将移去一张“权”然后选择一名角色并令其摸X张牌X为“权”的数量若其手牌数不小于你则你对其造成1点伤害且本技能于此回合内失效。',
gzpaiyi_info:'出牌阶段你可以将移去一张“权”然后选择一名角色并令其摸X张牌X为“权”的数量且至多为7若其手牌数不小于你则你对其造成1点伤害且本技能于此回合内失效。',
ol_zhurong:'界祝融',
changbiao:'长标',
changbiao_info:'出牌阶段限一次你可以将任意张手牌当做【杀】使用无距离限制。若你因此【杀】对目标角色造成过伤害则你于出牌阶段结束时摸X张牌X为此【杀】对应的实体牌数量。',

View File

@ -83,6 +83,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yuanshu:['jiling'],
zhangxiu:['jiaxu'],
wangping:['jiangfei'],
jiangwei:['xiahouba'],
},
characterFilter:{
zuoci:function(mode){
@ -759,6 +760,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
"step 0"
player.storage.drlt_poshi=true;
player.awakenSkill('drlt_poshi');
player.loseMaxHp();
"step 1"
var num=player.maxHp-player.countCards('h');

View File

@ -548,24 +548,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='die'){
var gain=trigger.player.countMark('quxi_gain'),lose=trigger.player.countMark('quxi_lose');
player.chooseTarget('是否令一名角色获得'+get.translation(trigger.player)+'的“'+(gain&&lose?'丰”和“歉':(gain?'丰':'歉'))+'”标记?',function(card,player,target){
return target!=player&&!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose');
return !target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose');
}).set('goon',gain-lose).set('ai',function(target){
var evt=_status.event;
return evt.goon*get.attitude(evt.player,target);
});
}
else player.chooseTarget(2,'是否转移“丰”或“歉”标记?',function(card,player,target){
if(player==target) return false;
if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
return target.countMark('quxi_gain')>0||target.countMark('quxi_lose')>0;
}).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
var player=_status.event.player;
if(!ui.selected.targets.length){
return -get.attitude(player,target)*(target.countMark('quxi_gain')-target.countMark('quxi_lose'));
}
var targetx=ui.selected.targets[0];
return get.attitude(player,target)*(targetx.countMark('quxi_gain')-targetx.countMark('quxi_lose'));
});
else event.goto(2);
'step 1'
if(result.bool){
var targets=result.targets;
@ -582,6 +571,59 @@ game.import('character',function(lib,game,ui,get,ai,_status){
targets[1].addMark('quxi_lose',lose);
}
game.delayx();
event.finish();
}
'step 2'
if(game.hasPlayer(function(target){
return target.countMark('quxi_gain')>0;
})) player.chooseTarget(2,'是否转移“丰”标记?',function(card,player,target){
if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
return target.countMark('quxi_gain')>0;
}).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
var player=_status.event.player;
if(!ui.selected.targets.length){
return -get.attitude(player,target);
}
return get.attitude(player,target);
});
else event.goto(4);
'step 3'
if(result.bool){
var targets=result.targets;
player.logSkill('quxi_effect',targets,false);
player.line2(targets);
var gain=targets[0].countMark('quxi_gain');
if(gain){
targets[0].removeMark('quxi_gain',gain);
targets[1].addMark('quxi_gain',gain);
}
game.delayx();
}
'step 4'
if(game.hasPlayer(function(target){
return target.countMark('quxi_lose')>0;
})) player.chooseTarget(2,'是否转移“歉”标记?',function(card,player,target){
if(ui.selected.targets.length) return (!target.hasMark('quxi_gain')&&!target.hasMark('quxi_lose'));
return target.countMark('quxi_lose')>0;
}).set('complexTarget',true).set('complexSelect',true).set('targetprompt',['移走标记','获得标记']).set('ai',function(target){
var player=_status.event.player;
if(!ui.selected.targets.length){
return get.attitude(player,target);
}
return -get.attitude(player,target);
});
else event.finish();
'step 5'
if(result.bool){
var targets=result.targets;
player.logSkill('quxi_effect',targets,false);
player.line2(targets);
var gain=targets[0].countMark('quxi_lose');
if(gain){
targets[0].removeMark('quxi_lose',gain);
targets[1].addMark('quxi_lose',gain);
}
game.delayx();
}
},
},
@ -2400,17 +2442,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mod:{
cardEnabled:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
return get.type2(magic)==get.type(card);
return get.type2(magic)==get.type2(card);
}).length) return false;
},
cardRespondable:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
return get.type2(magic)==get.type(card);
return get.type2(magic)==get.type2(card);
}).length) return false;
},
cardSavable:function(card,player){
if(player.getStorage('zlshoufu2').filter(function(magic){
return get.type2(magic)==get.type(card);
return get.type2(magic)==get.type2(card);
}).length) return false;
},
},

View File

@ -261,32 +261,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhiren:{
audio:2,
trigger:{player:'useCard'},
direct:true,
filter:function(event,player){
return (player==_status.currentPhase||player.hasSkill('yaner_zhiren'))&&get.color(event.card)=='red'&&player.getHistory('useCard',function(evt){
return get.color(evt.card)=='red'
return (player==_status.currentPhase||player.hasSkill('yaner_zhiren'))&&event.card.isCard&&player.getHistory('useCard',function(evt){
return evt.card.isCard;
}).indexOf(event)==0;
},
frequent:true,
locked:false,
content:function(){
'step 0'
event.num=get.translation(trigger.card.name).length;
event.logged=false;
player.chooseBool('织纴:是否卜算'+event.num+'');
'step 1'
if(result.bool){
player.logSkill('zhiren');
event.logged=true;
player.chooseToGuanxing(num);
}
player.chooseToGuanxing(event.num);
if(event.num<2) event.finish();
'step 2'
'step 1'
if(!game.hasPlayer(function(current){
return current.countDiscardableCards(player,'e')>0;
})){
event.forcejudge=true;
event.goto(4);
event.goto(3);
}
else player.chooseTarget('织纴:是否弃置一名其他角色装备区内的一张牌?',function(card,player,target){
else player.chooseTarget('织纴:是否弃置一名角色装备区内的一张牌?',function(card,player,target){
return target.countDiscardableCards(player,'e')>0;
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('e'),val=0;
@ -296,27 +289,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return eff;
});
'step 3'
'step 2'
if(result.bool){
var target=result.targets[0];
if(!event.logged){
event.logged=true;
player.logSkill('zhiren',target);
player.addExpose(0.15);
}
else player.line(target,'green');
player.addExpose(0.15);
player.line(target,'green');
player.discardPlayerCard(target,'e',true);
}
else event.goto(6);
if(event.num<3) event.finish();
'step 4'
'step 3'
if(!game.hasPlayer(function(current){
return current.countDiscardableCards(player,'j')>0;
})){
if(event.num<3) event.finish();
else event.goto(6);
else event.goto(5);
}
else if(!event.forcejudge) player.chooseTarget('织纴:弃置一名其他角色判定区内的一张牌',true,function(card,player,target){
else player.chooseTarget('织纴:是否弃置一名角色判定区内的一张牌',function(card,player,target){
return target.countDiscardableCards(player,'j')>0;
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0;
@ -326,51 +315,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return eff;
});
else player.chooseTarget('织纴:是否弃置一名其他角色判定区内的一张牌?',function(card,player,target){
return target.countDiscardableCards(player,'j')>0;
}).set('ai',function(target){
var player=_status.event.player,att=get.attitude(player,target),es=target.getCards('j'),val=0;
for(var i of es){
var eff=-(get.effect(target,i,target,player))
if(eff>val) val=eff;
}
return eff;
});
'step 5'
'step 4'
if(result.bool){
var target=result.targets[0];
if(!event.logged){
event.logged=true;
player.logSkill('zhiren',target);
player.addExpose(0.15);
}
else player.line(target,'green');
player.addExpose(0.15);
player.line(target,'green');
player.discardPlayerCard(target,'j',true);
}
if(event.num<3) event.finish();
'step 6'
if(player.isDamaged()) player.chooseBool('织纴是否回复1点体力');
else if(event.num<4) event.finish();
else event.goto(8);
'step 7'
if(result.bool){
if(!event.logged){
event.logged=true;
player.logSkill('zhiren');
}
player.recover();
}
'step 5'
player.recover();
if(event.num<4) event.finish();
'step 8'
player.chooseBool('织纴:是否摸三张牌?');
'step 9'
if(result.bool){
if(!event.logged){
event.logged=true;
player.logSkill('zhiren');
}
player.draw(3);
}
'step 6'
player.draw(3);
},
mod:{
aiOrder:function(player,card,num){
if(player==_status.currentPhase&&!player.getHistory('useCard',function(evt){
return evt.card.isCard;
}).length) return num+Math.pow(get.translation(card.name).length,2);
},
},
},
yaner:{
@ -380,7 +344,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
filter:function(event,player){
var current=_status.currentPhase;
if(!current||current==player||!current.isPhaseUsing()) return false;
if(!current||current==player||!current.isIn()||!current.isPhaseUsing()) return false;
var evt=event.getl(current);
return evt&&evt.hs&&evt.hs.length&&current.countCards('h')==0;
},
@ -2633,7 +2597,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att>2){
return Math.min(5,target.maxHp)-target.countCards('h');
return 5-target.countCards('h');
}
return att/3;
});
@ -9617,7 +9581,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '转换技,出牌阶段限一次,<span class="bluetext">阴:你可以将至多两张手牌交给一名其他角色。</span>阳你可以获得一名其他角色的至多两张手牌。若以此法移动的牌包含【酒】或♥牌则你可令得到此牌的角色执行一项①回复1点体力。②复原武将牌。';
},
zhiren:function(player){
return '当你于'+(player.hasSkill('yaner_zhiren')?'一':'你的')+'回合内使用第一张红色牌时你可依次执行以下选项中的前X项①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。X为此牌的名称的字数';
return '当你于'+(player.hasSkill('yaner_zhiren')?'一':'你的')+'回合内使用第一张非转化牌时你可依次执行以下选项中的前X项①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。X为此牌的名称的字数';
},
cuijian:function(player){
return '出牌阶段限一次,你可以选择一名有手牌的其他角色。若其手牌中:有【闪】,其将装备区内的防具牌和所有【闪】交给你,然后你交给其'+(player.hasMark('tongyuan_tao')?'一张':'等量的')+'牌;没有【闪】,你'+(player.hasMark('tongyuan_wuxie')?'摸一张':'弃置一张手')+'牌。';
@ -9631,7 +9595,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangji:['zhangji','ns_zhangji'],
zhangchangpu:['ol_zhangchangpu','zhangchangpu'],
huangfusong:['huangfusong','old_huangfusong'],
wenyang:['wenyang','diy_wenyang'],
wenyang:['wenyang','db_wenyang','diy_wenyang'],
dingyuan:['ol_dingyuan','dingyuan'],
quyi:['quyi','re_quyi'],
hansui:['xin_hansui','re_hansui'],
@ -10149,7 +10113,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reqingcheng_info:'出牌阶段限一次,你可以与一名手牌数小于你的男性角色交换手牌。',
re_panshu:'潘淑',
zhiren:'织纴',
zhiren_info:'当你于你的回合内使用第一张红色牌时你可依次执行以下选项中的前X项①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。X为此牌的名称的字数',
zhiren_info:'当你于你的回合内使用第一张非转化牌时你可依次执行以下选项中的前X项①卜算X。②弃置场上的一张装备牌和延时锦囊牌。③回复1点体力。④摸三张牌。X为此牌的名称的字数',
yaner:'燕尔',
yaner_info:'每回合限一次。当有其他角色于其出牌阶段内失去手牌后若其没有手牌则你可以与其各摸两张牌。若其以此法摸得的两张牌类型相同则其回复1点体力。若你以此法摸得的两张牌类型相同则你将〖织纴〗中的“你的回合内”改为“一回合内”。',
caoanmin:'曹安民',

View File

@ -880,8 +880,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
expose:0.5,
},
},
xinfu_gongqing_gz_panjun:{audio:2},
"xinfu_gongqing":{
audio:true,
audioname2:{gz_panjun:'xinfu_gongqing_gz_panjun'},
trigger:{
player:["damageBegin3","damageBegin4"],
},

View File

@ -191,7 +191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
liuchen:['liushan'],
yujin:['xiahoudun'],
fazheng:['liubei'],
zhonghui:['jiangwei','dengai'],
zhonghui:['jiangwei'],
},
skill:{
rejingce:{
@ -9081,24 +9081,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0"
player.chooseTarget(get.prompt2('chanhui'),function(card,player,target){
if(player==target) return false;
var trigger=_status.event;
return player.canUse(trigger.card,target)&&trigger.targets.contains(target)==false;
var evt=_status.event.getTrigger();
return !evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,player,player)+0.01;
}).set('targets',trigger.targets).set('card',trigger.card);
});
"step 1"
if(result.bool){
game.delay(0,200);
event.target=result.targets[0];
}
else{
event.finish();
}
"step 2"
game.delay();
player.addSkill('chanhui2');
player.addTempSkill('chanhui2');
player.logSkill('chanhui',event.target);
event.target.chooseCard('交给'+get.translation(player)+'一张手牌,或成为'+
get.translation(trigger.card)+'的额外目标').set('ai',function(card){
@ -9199,15 +9197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
chanhui2:{
trigger:{player:'phaseJieshuBegin'},
forced:true,
popup:false,
audio:false,
content:function(){
player.removeSkill('chanhui2');
}
},
chanhui2:{},
quanji:{
audio:2,
trigger:{player:'damageEnd'},
@ -12154,7 +12144,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hanhaoshihuan:['re_hanhaoshihuan','hanhaoshihuan'],
caozhen:['re_caozhen','caozhen','old_caozhen'],
wuyi:['re_wuyi','wuyi'],
sunluban:['re_sunluban','sunluban'],
sunluban:['re_sunluban','xin_sunluban','sunluban'],
zhuhuan:['zhuhuan','old_zhuhuan'],
caoxiu:['re_caoxiu','caoxiu','old_caoxiu'],
//xiahoushi:['xiahoushi','sp_xiahoushi'],

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.110.9.2.3',
'v1.9.110.9.3',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -778,6 +778,18 @@ window.noname_asset_list=[
'audio/die/re_panshu.mp3',
'audio/die/xin_zhonghui.mp3',
'audio/die/zhanghu.mp3',
'audio/die/db_wenyang.mp3',
'audio/die/gz_panjun.mp3',
'audio/die/gz_pengyang.mp3',
'audio/die/gz_wenqin.mp3',
'audio/die/gz_xf_sufei.mp3',
'audio/die/gz_xiahouba.mp3',
'audio/die/gz_xuyou.mp3',
'audio/die/gz_zhonghui.mp3',
'audio/die/gz_zhuling.mp3',
'audio/die/qiaozhou.mp3',
'audio/die/shen_xunyu.mp3',
'audio/die/xin_sunluban.mp3',
'audio/skill/decadezishou1.mp3',
'audio/skill/decadezishou2.mp3',
@ -3492,6 +3504,58 @@ window.noname_asset_list=[
'audio/skill/yaner2.mp3',
'audio/skill/zhiren1.mp3',
'audio/skill/zhiren2.mp3',
'audio/skill/daming1.mp3',
'audio/skill/daming2.mp3',
'audio/skill/dbchongjian1.mp3',
'audio/skill/dbchongjian2.mp3',
'audio/skill/dbchoujue1.mp3',
'audio/skill/dbchoujue2.mp3',
'audio/skill/dbquedi1.mp3',
'audio/skill/dbquedi2.mp3',
'audio/skill/dbzhuifeng1.mp3',
'audio/skill/dbzhuifeng2.mp3',
'audio/skill/dinghan1.mp3',
'audio/skill/dinghan2.mp3',
'audio/skill/gzbaolie1.mp3',
'audio/skill/gzbaolie2.mp3',
'audio/skill/gzchenglve1.mp3',
'audio/skill/gzchenglve2.mp3',
'audio/skill/gzcongcha1.mp3',
'audio/skill/gzcongcha2.mp3',
'audio/skill/gzfangyuan1.mp3',
'audio/skill/gzfangyuan2.mp3',
'audio/skill/gzjinfa1.mp3',
'audio/skill/gzjinfa2.mp3',
'audio/skill/gzjuejue1.mp3',
'audio/skill/gzjuejue2.mp3',
'audio/skill/gzlianpian1.mp3',
'audio/skill/gzlianpian2.mp3',
'audio/skill/gzpaiyi1.mp3',
'audio/skill/gzpaiyi2.mp3',
'audio/skill/gzquanji1.mp3',
'audio/skill/gzquanji2.mp3',
'audio/skill/gzshicai1.mp3',
'audio/skill/gzshicai2.mp3',
'audio/skill/lingce1.mp3',
'audio/skill/lingce2.mp3',
'audio/skill/shuchen1.mp3',
'audio/skill/shuchen2.mp3',
'audio/skill/tianzuo1.mp3',
'audio/skill/tianzuo2.mp3',
'audio/skill/xiaoni1.mp3',
'audio/skill/xiaoni2.mp3',
'audio/skill/xinfu_gongqing_gz_panjun1.mp3',
'audio/skill/xinfu_gongqing_gz_panjun2.mp3',
'audio/skill/xingbu1.mp3',
'audio/skill/xingbu2.mp3',
'audio/skill/xinjiaojin1.mp3',
'audio/skill/xinjiaojin2.mp3',
'audio/skill/xinzenhui1.mp3',
'audio/skill/xinzenhui2.mp3',
'audio/skill/yuanqing1.mp3',
'audio/skill/yuanqing2.mp3',
'audio/skill/zhiming1.mp3',
'audio/skill/zhiming2.mp3',
'audio/voice/male/0.mp3',
'audio/voice/male/1.mp3',
@ -3984,6 +4048,8 @@ window.noname_asset_list=[
'image/card/binglinchengxia.png',
'image/card/luojingxiashi.png',
'image/card/toushiche.png',
'image/card/kano_paibingbuzhen.png',
'image/card/qizhengxiangsheng.png',
'image/character/shenpei.jpg',
'image/character/re_menghuo.jpg',
@ -4423,6 +4489,18 @@ window.noname_asset_list=[
'image/character/re_jiaxu.jpg',
'image/character/tw_zhaoxiang.jpg',
'image/character/yuejiu.jpg',
'image/character/db_wenyang.jpg',
'image/character/gz_panjun.jpg',
'image/character/gz_pengyang.jpg',
'image/character/gz_wenqin.jpg',
'image/character/gz_xf_sufei.jpg',
'image/character/gz_xuyou.jpg',
'image/character/gz_zhonghui.jpg',
'image/character/gz_zhuling.jpg',
'image/character/qiaozhou.jpg',
'image/character/shen_xunyu.jpg',
'image/character/xin_caozhen.jpg',
'image/character/xin_sunluban.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -10348,6 +10348,18 @@
pss_scissor_info:'石头剪刀布时的一种手势。克制布,但被石头克制。',
pss_stone_info:'石头剪刀布时的一种手势。克制剪刀,但被布克制。',
renku:'仁库',
group_wei:"魏势力",
group_shu:"蜀势力",
group_wu:"吴势力",
group_qun:"群势力",
group_key:"键势力",
group_jin:"晋势力",
group_wei_bg:"魏",
group_shu_bg:"蜀",
group_wu_bg:"吴",
group_qun_bg:"群",
group_key_bg:"键",
group_jin_bg:"晋",
},
element:{
content:{
@ -10665,7 +10677,7 @@
if(_status.renku.length>6){
var cards=_status.renku.splice(0,_status.renku.length-6);
game.log(cards,'从仁库进入了弃牌堆');
game.cardsDiscard(cards).fromRenku=true;
game.cardsDiscard(cards).set('outRange',true).fromRenku=true;
}
game.updateRenku();
}
@ -15492,7 +15504,7 @@
if(_status.renku.length>6){
var cards=_status.renku.splice(0,_status.renku.length-6);
game.log(cards,'从仁库进入了弃牌堆');
game.cardsDiscard(cards).fromRenku=true;
game.cardsDiscard(cards).set('outRange',true).fromRenku=true;
}
game.updateRenku();
}
@ -16476,9 +16488,11 @@
canSave:function(target){
var player=this;
if(player.hasSkillTag('save',true,target,true)) return true;
var name={},hs=player.getCards('hs');
for(var i of hs) name[get.name(i)]=true;
for(var i in lib.card){
if(lib.inpile.contains(i)||player.countCards('hs',i)){
if(lib.card[i].savable&&lib.filter.cardSavable({name:i},player,target)&&(_status.connectMode||player.hasUsableCard(i))) return true;
if(lib.card[i].savable&&(lib.inpile.contains(i)||name[i])){
if(lib.filter.cardSavable({name:i},player,target)&&(_status.connectMode||player.hasUsableCard(i))) return true;
}
}
return false;
@ -24755,7 +24769,12 @@
getTrigger:function(){
return this.getParent()._trigger;
},
getRand:function(){
getRand:function(name){
if(name){
if(!this._rand_map) this._rand_map={};
if(!this._rand_map[name]) this._rand_map[name]=Math.random();
return this._rand_map[name];
}
if(!this._rand) this._rand=Math.random();
return this._rand;
},
@ -25565,6 +25584,12 @@
subtype:"equip5",
},
disable_judge:{},
group_wei:{fullskin:true},
group_shu:{fullskin:true},
group_wu:{fullskin:true},
group_qun:{fullskin:true},
group_key:{fullskin:true},
group_jin:{fullskin:true},
},
filter:{
all:function(){
@ -43029,7 +43054,7 @@
var bool1=false;
var bool2=false;
var bool3=(get.mode()=='guozhan'&&_status.forceKey!=true&&get.config('onlyguozhan'));
var bool4=(get.mode()!='guozhan');
var bool4=false;
for(var i in lib.character){
if(lib.character[i][1]=='shen'){
bool1=true;
@ -43042,7 +43067,7 @@
}
if(bool1) groups.add('shen');
if(bool2&&!bool3) groups.add('key');
if(bool4&&get.mode()=='guozhan') groups.add('double');
if(bool4) groups.add('double');
var natures=['water','soil','wood','metal'];
var span=document.createElement('span');
newlined.appendChild(span);
@ -49247,7 +49272,7 @@
return false;
},
double:function(name,array){
if(!lib.character[name]||!lib.character[name][4]||name.indexOf('gz_')!=0) return false;
if(!lib.character[name]||!lib.character[name][4]||name.indexOf('gz_')!=0&&name.indexOf('db_')!=0) return false;
for(var i of lib.character[name][4]){
if(i.indexOf('doublegroup:')==0){
if(!array) return true;

View File

@ -1,9 +1,9 @@
window.noname_update={
version:'1.9.110.9.2.3',
update:'1.9.110.9.2.2',
version:'1.9.110.9.3',
update:'1.9.110.9.2.3',
changeLog:[
'界鲁肃、界贾诩',
'海外服赵襄',
'神荀彧、文鸯、手杀孙鲁班、手杀曹真',
'国战双势力修正',
'bug修复',
],
files:[
@ -20,8 +20,8 @@ window.noname_update={
//'card/yingbian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
//'character/diy.js',
//'character/extra.js',
'character/diy.js',
'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
@ -35,13 +35,13 @@ window.noname_update={
'character/refresh.js',
'character/shenhua.js',
'character/sp.js',
//'character/sp2.js',
'character/sp2.js',
'character/tw.js',
'character/standard.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
'character/yingbian.js',
'character/xinghuoliaoyuan.js',
//'character/yingbian.js',
'character/yijiang.js',
//'character/yxs.js',
//'extension/boss/extension.js',
@ -49,14 +49,15 @@ window.noname_update={
//'layout/newlayout/global.css',
//'layout/default/menu.css',
//'layout/nova/layout.css',
'layout/mobile/equip.css',
//'mode/boss.js',
//'mode/brawl.js',
'mode/chess.js',
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
'mode/guozhan.js',
//'mode/identity.js',
'mode/single.js',
'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

View File

@ -79,11 +79,11 @@
display:none;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
/*#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
#arena.chess .player.unseen .equips>.card{
background:none;
/*border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;*/
border-image:linear-gradient(to right, transparent,rgba(0,0,0,0.4) 10%,rgba(0, 0, 0,0.4) 70%,transparent) 100% 0 0;
}
#arena:not(.chess).textequip .player[data-position='0'].unseen .equips>.card,
.player:not([data-position='0']).unseen .equips>.card,
@ -94,7 +94,7 @@
.player:not([data-position='0']).unseen .equips>.card:first-child,
#arena.chess .player.unseen .equips>.card:first-child{
border-image:linear-gradient(transparent,transparent);
}
}*/
.player:not([data-position='0']) .equips>.card.selected,
#arena.chess .player .equips>.card.selected{
background:linear-gradient(to right,rgba(0, 133, 255,0.3),transparent),

View File

@ -253,7 +253,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
aozhanRank:{
'8':[],
'8':['gz_panjun'],
'7':[],
'6':[],
'5':[
@ -298,7 +298,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'gz_lingtong','gz_sunshangxiang','gz_sunce',
'gz_re_yuanshao','gz_yuanshu','gz_hetaihou',
'gz_jin_simashi','gz_sp_duyu','gz_shibao',
'gz_gongsunyuan',
'gz_gongsunyuan','gz_panjun',
],
'6':[
'gz_zhenji','gz_guojia','gz_yujin',
@ -344,7 +344,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'gz_menghuo','gz_ganfuren','gz_guanyu',
'gz_lukang','gz_jiangqing','gz_chendong',
'gz_zoushi','gz_panfeng','gz_tianfeng',
'gz_panjun','gz_sufei',
'gz_sufei',
],
},
characterSort:{
@ -356,7 +356,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
guozhan_quan:["gz_cuimao","gz_yujin","gz_wangping","gz_fazheng","gz_wuguotai","gz_lukang","gz_yuanshu","gz_zhangxiu"],
guozhan_jun:["gz_jun_caocao","gz_jun_sunquan","gz_jun_liubei","gz_jun_zhangjiao"],
guozhan_jin:['gz_jin_simayi','gz_jin_simazhao','gz_jin_simashi','gz_jin_zhangchunhua','gz_jin_wangyuanji','gz_jin_xiahouhui','gz_duyu','gz_zhanghuyuechen','gz_jin_yanghuiyu','gz_simazhou','gz_shibao','gz_weiguan','gz_zhongyan'],
guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_wenpin'],
guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_zhuling'],
guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'],
guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan'],
guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi'],
@ -380,7 +380,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_shibing1key:['male','key',0,[],['unseen']],
gz_shibing2key:['female','key',0,[],['unseen']],
gz_zhonghui:['male','ye',4,['gzquanji','gzpaiyi']],
gz_zhonghui:['male','ye',4,['gzquanji','gzpaiyi'],['gzskin']],
gz_simazhao:['male','ye',3,['gzzhaoxin','gzsuzhi']],
gz_gongsunyuan:['male','ye',4,['gzhuaiyi','gzzisui']],
gz_tangzi:['male','wu',4,['gzxingzhao'],['doublegroup:wu:wei','gzskin']],
@ -393,16 +393,16 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_re_xushu:['male','shu',4,['gzzhuhai','gzpozhen','gzjiancai'],['gzskin']],
gz_wujing:['male','wu',4,['donggui','fengyang'],['gzskin']],
gz_yanbaihu:['male','qun',4,['gzzhidao','gzyjili'],['gzskin']],
gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun']],
gz_xuyou:['male','wei',3,['gzchenglve','gzshicai'],['doublegroup:wei:qun','gzskin']],
gz_xiahouba:['male','shu',4,['gzbaolie'],['doublegroup:shu:wei','gzskin']],
gz_panjun:['male','wu',3,['gzguanwei','xinfu_gongqing'],['doublegroup:wu:shu']],
gz_panjun:['male','wu',3,['gzcongcha','xinfu_gongqing'],['doublegroup:wu:shu','gzskin']],
gz_huangzu:['male','qun',4,['gzwangong']],
gz_zhugeke:['male','wu',3,['aocai','gzduwu']],
gz_wenqin:['male','wei',4,['gzyaoqi'],['doublegroup:wei:wu']],
gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun']],
gz_wenqin:['male','wei',4,['gzjinfa'],['doublegroup:wei:wu','gzskin']],
gz_xf_sufei:['male','wu',4,['gzlianpian'],['doublegroup:wu:qun','gzskin']],
gz_liuba:['male','shu',3,['chouduo','guiyin']],
gz_pengyang:['male','shu',3,['jianni','xiaoba'],['doublegroup:shu:qun']],
gz_wenpin:['male','wei',4,['gzzhenwei','gzyulin']],
gz_pengyang:['male','shu',3,['daming','xiaoni'],['doublegroup:shu:qun','gzskin']],
gz_zhuling:['male','wei',4,['gzjuejue','gzfangyuan'],['gzskin']],
gz_caocao:['male','wei',4,['jianxiong']],
gz_simayi:['male','wei',3,['fankui','guicai']],
@ -677,8 +677,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
}
},
//文聘
gzzhenwei:{
//朱灵
gzjuejue:{
audio:2,
trigger:{player:'phaseDiscardBegin'},
check:function(event,player){
return player.hp>2&&player.needsToDiscard()>0&&game.countPlayer(function(current){
@ -686,7 +687,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
})>game.countPlayer()/2;
},
content:function(){
player.addTempSkill('gzzhenwei_effect');
player.addTempSkill('gzjuejue_effect');
player.loseHp();
},
subSkill:{
@ -710,11 +711,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.targets=game.filterPlayer(function(current){
return current!=player;
}).sortBySeat();
player.line(event.targets,'green');
'step 1'
var target=targets.shift();
event.target=target;
if(target.isIn()){
player.line(target,'green');
target.animate('target');
target.chooseCard('h',num,'将'+get.cnNumber(num)+'张牌置入弃牌堆或受到1点伤害').set('ai',function(card){
var evt=_status.event.getParent();
if(get.damageEffect(evt.target,evt.player,evt.target)>=0) return 0;
@ -743,7 +745,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
},
gzyulin:{
gzfangyuan:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
zhenfa:'siege',
direct:true,
@ -758,9 +761,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var list=game.filterPlayer(function(current){
return player.sieged(current)&&player.canUse('sha',current,false);
});
if(player.hasSkill('gzyulin')){
if(player.hasSkill('gzfangyuan')){
if(list.length==1) event._result={bool:true,targets:list};
else player.chooseTarget('鱼鳞:视为对一名围攻你的角色使用【杀】',function(card,player,target){
else player.chooseTarget('方圆:视为对一名围攻你的角色使用【杀】',function(card,player,target){
return _status.event.list.contains(target);
},true).set('list',list).set('ai',function(target){
var player=_status.event.player;
@ -768,7 +771,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
});
}
else{
player.chooseTarget(get.prompt('gzyulin'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){
player.chooseTarget(get.prompt('gzfangyuan'),'视为对一名围攻你的角色使用【杀】',function(card,player,target){
return _status.event.list.contains(target);
}).set('list',list).set('ai',function(target){
var player=_status.event.player;
@ -777,10 +780,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
'step 1'
if(result.bool){
player.useCard({name:'sha',isCard:true},result.targets[0],'gzyulin',false);
player.useCard({name:'sha',isCard:true},result.targets[0],'gzfangyuan',false);
}
},
global:'gzyulin_siege',
global:'gzfangyuan_siege',
subSkill:{
siege:{
mod:{
@ -792,12 +795,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(siege.length){
siege.push(player);
num+=siege.filter(function(source){
return source.hasSkill('gzyulin');
return source.hasSkill('gzfangyuan');
}).length;
}
if(player.sieged()){
if(next.hasSkill('gzyulin')) num--;
if(prev.hasSkill('gzyulin')) num--;
if(next.hasSkill('gzfangyuan')) num--;
if(prev.hasSkill('gzfangyuan')) num--;
}
return num;
},
@ -806,14 +809,15 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//彭羕
jianni:{
daming:{
audio:2,
trigger:{global:'phaseUseBegin'},
direct:true,
filter:function(event,player){
if(!player.isFriendOf(event.player)||!game.hasPlayer(function(current){
return !current.isLinked();
})) return false;
if(_status.connectMode&&player.hasSkill('jianni')) return player.countCards('h')>0;
if(_status.connectMode&&player.hasSkill('daming')) return player.countCards('h')>0;
return player.countCards('h',function(card){
return get.type2(card,player)=='trick';
});
@ -821,10 +825,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
player.chooseCardTarget({
prompt:get.prompt('jianni'),
prompt:get.prompt('daming'),
prompt2:'弃置一张锦囊牌并选择要横置的角色',
filterCard:function(card,player){
return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'jianni');
return get.type2(card,player)=='trick'&&lib.filter.cardDiscardable(card,player,'daming');
},
filterTarget:function(card,player,target){
return !target.isLinked();
@ -853,7 +857,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('jianni',target);
player.logSkill('daming',target);
player.discard(result.cards);
}
else event.finish();
@ -925,11 +929,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else player.useCard({name:'tao',isCard:true},trigger.player);
},
},
xiaoba:{
trigger:{global:'useCard'},
xiaoni:{
audio:2,
trigger:{
player:'useCard',
target:'useCardToTargeted',
},
forced:true,
filter:function(event,player){
if(player!=event.player&&!event.targets.contains(player)) return false;
var type=get.type2(event.card);
if(type!='basic'&&type!='trick') return false;
var list=game.filterPlayer(function(current){
@ -944,9 +951,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
check:()=>false,
content:function(){
trigger.directHit.addArray(game.players);
if(trigger.name=='useCard') trigger.directHit.addArray(game.players);
else trigger.directHit.add(player);
},
global:'xiaoba_ai',
global:'xiaoni_ai',
ai:{
halfneg:true,
directHit_ai:true,
@ -980,14 +988,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var type=get.type2(arg.card);
if(type!='basic'&&type!='trick') return false;
var player;
if(arg.target&&arg.target.hasSkill('xiaoba')) player=arg.target;
else{
var list=ui.selected.targets.filter(function(target){
return target.hasSkill('xiaoba');
});
if(list.length) player=list[0];
else return false;
}
if(arg.target&&arg.target.hasSkill('xiaoni')) player=arg.target;
else return false;
var list=game.filterPlayer(function(current){
return current!=player&&current.isFriendOf(player);
});
@ -1010,6 +1012,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//刘巴
chouduo:{
audio:2,
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
@ -1035,6 +1038,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
guiyin:{
audio:2,
enable:'phaseUse',
limited:true,
delay:false,
@ -1115,6 +1119,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//苏飞
gzlianpian:{
audio:2,
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
@ -1287,7 +1292,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//文钦
gzyaoqi:{
gzjinfa:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
@ -1309,7 +1315,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return 5-get.value(card);
}).set('goon',target.canUse('sha',player,false)&&get.effect(player,{name:'sha'},target,target)>0);
'step 1'
if(!result.bool) player.gainPlayerCard(target,'he',true);
if(!result.bool){
player.gainPlayerCard(target,'he',true);
event.finish();
}
else player.gain(result.cards,target,'give');
'step 2'
if(result.bool&&result.cards&&result.cards.length&&
@ -1595,8 +1604,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
//潘濬
gzguanwei:{
audio:'xinfu_guanwei',
gzcongcha:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
direct:true,
filter:function(event,player){
@ -1604,9 +1613,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return current!=player&&current.isUnseen();
})
},
prompt2:'选择一名武将牌均暗置的其他角色',
content:function(){
'step 0'
player.chooseTarget(get.prompt2('gzguanwei'),function(card,player,target){
player.chooseTarget(get.prompt2('gzcongcha'),function(card,player,target){
return target!=player&&target.isUnseen();
}).set('ai',function(target){
if(get.attitude(_status.event.player,target)>0) return Math.random()+Math.sqrt(target.hp);
@ -1615,15 +1625,33 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('gzguanwei',target);
player.storage.gzguanwei2=target;
player.addTempSkill('gzguanwei2',{player:'phaseBegin'});
target.addSkill('gzguanwei_ai');
player.logSkill('gzcongcha',target);
player.storage.gzcongcha2=target;
player.addTempSkill('gzcongcha2',{player:'phaseBegin'});
target.addSkill('gzcongcha_ai');
game.delayx();
}
},
subfrequent:['draw'],
group:'gzcongcha_draw',
subSkill:{
draw:{
audio:'gzcongcha',
trigger:{player:'phaseDrawBegin2'},
frequent:true,
filter:function(event,player){
return !event.numFixed&&!game.hasPlayer(function(current){
return current.isUnseen();
});
},
prompt:'是否发动【聪察】多摸两张牌?',
content:function(){
trigger.num+=2;
},
},
},
},
gzguanwei_ai:{
gzcongcha_ai:{
charlotte:true,
ai:{
mingzhi_yes:true,
@ -1633,30 +1661,30 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var group=lib.character[player.name1][1];
if(tag=='mingzhi_yes'){
if(group!='ye'&&player.wontYe(group)&&game.hasPlayer(function(current){
return current.storage.gzguanwei2==player&&current.identity==group;
return current.storage.gzcongcha2==player&&current.identity==group;
})) return true;
return false;
}
if(group=='ye'&&!player.wontYe(group)) return true;
return game.hasPlayer(function(current){
return current.storage.gzguanwei2==player&&current.identity!=group;
return current.storage.gzcongcha2==player&&current.identity!=group;
})
},
},
},
gzguanwei2:{
gzcongcha2:{
trigger:{global:'showCharacterAfter'},
forced:true,
charlotte:true,
onremove:true,
filter:function(event,player){
return event.player==player.storage.gzguanwei2;
return event.player==player.storage.gzcongcha2;
},
logTarget:'player',
content:function(){
'step 0'
player.removeSkill('gzguanwei2');
trigger.player.removeSkill('gzguanwei_ai');
player.removeSkill('gzcongcha2');
trigger.player.removeSkill('gzcongcha_ai');
if(player.isFriendOf(trigger.player)) game.asyncDraw([player,trigger.player].sortBySeat(_status.currentPhase),2);
else trigger.player.loseHp();
'step 1'
@ -1776,6 +1804,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//夏侯霸
gzbaolie:{
audio:2,
mod:{
targetInRange:function(card,player,target){
if(card.name=='sha'&&target.hp>=player.hp) return true;
@ -1784,7 +1813,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(card.name=='sha'&&target.hp>=player.hp) return true;
},
},
audio:'baobian',
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
@ -1826,55 +1854,42 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
//许攸
gzchenglve:{
audio:'nzry_chenglve',
trigger:{global:'useCardToPlayered'},
audio:2,
trigger:{global:'useCardAfter'},
filter:function(event,player){
return event.isFirstTarget&&event.targets.length>1
&&event.player.isIn()&&event.player.isFriendOf(player);
return event.targets.length>1&&event.player.isIn()&&event.player.isFriendOf(player);
},
logTarget:'player',
check:function(event,player){
return get.attitude(player,event.player)>0;
},
content:function(){
trigger.getParent().gzchenglve_buffed=true;
'step 0'
trigger.player.draw();
player.addTempSkill('gzchenglve_effect');
},
subSkill:{
effect:{
trigger:{global:'useCardAfter'},
forced:true,
charlotte:true,
popup:false,
filter:function(event,player){
return event.gzchenglve_buffed==true&&player.getHistory('damage',function(evt){
return evt.card==event.card;
}).length>0&&game.hasPlayer(function(current){
return current.isFriendOf(player)&&!current.hasMark('yinyang_mark');
})
},
content:function(){
'step 0'
player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,target){
return target.isFriendOf(player)&&!target.hasMark('yinyang_mark');
}).set('ai',function(target){
return get.attitude(_status.event.player,target)*Math.sqrt(1+target.needsToDiscard());
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('gzchenglve_effect',target);
target.addMark('yinyang_mark',1,false);
game.delayx();
}
},
},
if(player.hasHistory('damage',function(evt){
return evt.card==trigger.card;
})&&game.hasPlayer(function(current){
return current.isFriendOf(player)&&!current.hasMark('yinyang_mark');
})){
player.chooseTarget('是否令一名己方角色获得“阴阳鱼”标记?',function(card,player,target){
return target.isFriendOf(player)&&!target.hasMark('yinyang_mark');
}).set('ai',function(target){
return get.attitude(_status.event.player,target)*Math.sqrt(1+target.needsToDiscard());
});
}
else event.finish();
'step 1'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
target.addMark('yinyang_mark',1,false);
game.delayx();
}
},
},
gzshicai:{
audio:'nzry_shicai',
trigger:{player:'damage'},
audio:2,
trigger:{player:'damageEnd'},
forced:true,
filter:function(event,player){
return event.num==1||player.countCards('h')>0;
@ -10472,19 +10487,19 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzweimeng_info:'出牌阶段限一次你可以获得一名其他角色的至多X张手牌然后交给其等量的牌X为你的体力值。',
gzweimeng_zongheng:'危盟·纵横',
gzweimeng_zongheng_info:'出牌阶段限一次,你可以获得一名其他角色的一张手牌,然后交给其一张牌。',
gzzhenwei:'镇卫',
gzzhenwei_info:'①弃牌阶段开始时你可失去1点体力。然后若你于此阶段内弃置过你的牌则你令其他角色各选择一项1.将X张手牌置入弃牌堆X为你于此阶段内弃置过的牌数2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。 ',
gzyulin:'鱼鳞',
gzyulin_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1②是被围攻角色则结束阶段开始时你视为对一名围攻角色使用【杀】。',
jianni:'谏逆',
jianni_info:'一名己方角色A的出牌阶段开始时你可弃置一张锦囊牌横置一名角色并摸X张牌X为拥有横置角色的势力数。然后你选择一项①视为对A使用一张【桃】②令A视为对由你选择的另一名角色使用一张雷【杀】。',
xiaoba:'嚣跋',
xiaoba_info:'锁定技,当你使用或被使用基本牌或普通锦囊牌时,若有其他与你势力相同的角色且这些角色的手牌数均不大于你,则此牌不可被响应。',
gzjuejue:'决绝',
gzjuejue_info:'①弃牌阶段开始时你可失去1点体力。然后若你于此阶段内弃置过你的牌则你令其他角色各选择一项1.将X张手牌置入弃牌堆X为你于此阶段内弃置过的牌数2.受到你造成的1点伤害。②你杀死与你势力相同的角色不执行奖惩。 ',
gzfangyuan:'方圆',
gzfangyuan_info:'阵法技,若你在一个围攻关系中:①是围攻角色,则所有围攻角色的手牌上限+1且被围攻角色手牌上限-1②是被围攻角色则结束阶段开始时你视为对一名围攻角色使用【杀】。',
daming:'达命',
daming_info:'一名己方角色A的出牌阶段开始时你可弃置一张锦囊牌横置一名角色并摸X张牌X为拥有横置角色的势力数。然后你选择一项①视为对A使用一张【桃】②令A视为对由你选择的另一名角色使用一张雷【杀】。',
xiaoni:'嚣逆',
xiaoni_info:'锁定技,当你使用牌时,或成为其他角色使用牌的目标后,若场上存在其他己方角色且这些角色的手牌数均不大于你,则目标角色/你不可响应此牌。',
chouduo:'筹度',
chouduo_info:'己方角色的结束阶段开始时其可以摸X张牌X为其本回合弃牌阶段弃置的牌数且至多为3。 ',
guiyin:'归隐',
guiyin_info:'限定技,出牌阶段,你可令所有己方角色将体力值回满,然后移除此武将牌。',
gzlianpian:'翩',
gzlianpian:'翩',
gzlianpian_info:'①结束阶段开始时若你于此回合内弃置过所有角色的牌数之和大于你的体力值你可令一名与你势力相同的角色将手牌补至X张X为其体力上限。②其他角色的结束阶段开始时若其于此回合内弃置过所有角色的牌数之和大于你的体力值其可选择1.弃置你的一张牌2.令你回复1点体力。',
yusui:'玉碎',
yusui_info:'当你成为其他势力的角色使用黑色牌的目标后你可以失去1点体力然后选择一项①令其弃置X张手牌X为其体力上限②令其失去Y点体力Y为其的体力值减去你的体力值不为正时不可选择',
@ -10492,21 +10507,21 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
boyan_info:'出牌阶段限一次,你可令一名其他角色将手牌摸至体力上限(至多摸五张),然后其本回合不能使用或打出手牌。',
boyan_zongheng:'驳言·纵横',
boyan_zongheng_info:'出牌阶段限一次,你可令一名其他角色本回合不能使用或打出手牌。',
gzyaoqi:'邀旗',
gzyaoqi_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌。②你获得其一张牌。若你以此法获得了♠牌,则其视为对你使用一张【杀】。',
gzjinfa:'矜伐',
gzjinfa_info:'出牌阶段限一次,你可弃置一张牌并令一名其他角色选择一项:①交给你一张装备牌若你以此法获得了♠牌,则其视为对你使用一张【杀】。②你获得其一张牌。',
gzduwu:'黩武',
gzduwu_info:'限定技出牌阶段你可以选择一个“军令”。你令攻击范围内所有的非己方角色选择是否执行。若有角色选择否则你对其造成1点伤害且你摸一张牌。若有角色于此技能结算过程中进入濒死状态且存活则你失去1点体力。',
gzwangong:'挽弓',
gzwangong_info:'其他角色的准备阶段开始时,你可将装备区内的一张牌当做【杀】对其使用且可重复此流程。若你的体力值大于该角色,则此【杀】不可被响应。若该角色于此技能的结算流程中死亡,则你可以变更副将(不展示)。',
gzguanwei:'观微',
gzguanwei2:'观微',
gzguanwei_info:'准备阶段开始时你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后若其与你势力相同则你与其各摸两张牌与你势力不同则其失去1点体力。',
gzcongcha:'聪察',
gzcongcha2:'聪察',
gzcongcha_info:'①准备阶段开始时你可以选择一名未确定势力的其他角色。当其于你的下回合开始前首次明置武将牌后若其与你势力相同则你与其各摸两张牌与你势力不同则其失去1点体力。②摸牌阶段开始时,若场上所有角色均有明置的武将牌,则你可以令额定摸牌数+2。',
gzchenglve:'成略',
gzchenglve_info:'己方角色使用牌指定第一个目标若此牌的目标数大于1则你可以令其摸一张牌。此牌结算结束后,若你受到过渠道为此牌的伤害,则你可以令一名没有“阴阳鱼”的己方角色获得一枚“阴阳鱼”。',
gzchenglve_info:'己方角色使用牌结算结束若此牌的目标数大于1则你可以令其摸一张牌。若你受到过渠道为此牌的伤害则你可以令一名没有“阴阳鱼”的己方角色获得一枚“阴阳鱼”。',
gzbaolie:'豹烈',
gzbaolie_info:'锁定技,出牌阶段开始时,你令所有攻击范围内包含你的非己方角色依次选择:①对你使用一张【杀】;②令你弃置其一张牌。锁定技,你对体力值不小于你的角色使用【杀】没有距离和次数限制。',
gzshicai:'恃才',
gzshicai_info:'锁定技,当你受到的伤害点数确定时若伤害值为1你摸两张牌大于1你弃置所有手牌。',
gzshicai_info:'锁定技,当你受到的伤害若伤害值为1你摸两张牌大于1你弃置所有手牌。',
gzxingzhao:'兴棹',
gzxingzhao_info:'锁定技①摸牌阶段开始时若X不小于1则你可以发动〖恂恂〗的效果。②当你受到伤害后或使用装备牌时若X不小于2且你的手牌数不为全场最多则你摸一张牌。③若X不小于3则你的手牌上限+4。④当你失去装备区的牌后若X不小于4则你摸一张牌。X为场上有受伤角色的势力数',
gzxingzhao_old_info:'锁定技①摸牌阶段开始时若X不小于1则你可以发动〖恂恂〗的效果。②当你受到伤害后若X不小于2且你和伤害来源的手牌数不相等则你于伤害来源中手牌数较少的角色摸一张牌。③若X不小于3则你的手牌上限+4。④当你失去装备区的牌后若X不小于4则你摸一张牌。X为场上有受伤角色的势力数',

View File

@ -2,26 +2,6 @@
game.import('mode',function(lib,game,ui,get,ai,_status){
return {
name:'identity',
card:{
group_wei:{
fullskin:true,
},
group_shu:{
fullskin:true,
},
group_wu:{
fullskin:true,
},
group_qun:{
fullskin:true,
},
group_key:{
fullskin:true,
},
group_jin:{
fullskin:true,
},
},
start:function(){
"step 0"
if(!lib.config.new_tutorial){
@ -722,7 +702,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
for(var i in libCharacter){
if(lib.filter.characterDisabled(i,libCharacter)) continue;
if(i.indexOf('lingju')!=-1) continue;
if(i.indexOf('lingju')!=-1||get.is.double(i)) continue;
var group=lib.character[i][1];
if(group=='shen') continue;
if(!map[group]){
@ -896,7 +876,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
var list=[];
for(var i in lib.character){
if(lib.filter.characterDisabled(i)) continue;
if(i.indexOf('lingju')!=-1) continue;
if(i.indexOf('lingju')!=-1||get.is.double(i)) continue;
var group=lib.character[i][1];
if(group=='shen') continue;
if(!map[group]){
@ -1096,25 +1076,30 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(typeof lib.config.test_game=='string'&&player==game.me.next){
player.init(lib.config.test_game);
}
if(get.config('choose_group')&&player.group=='shen'&&!player.isUnseen(0)){
var list=lib.group.slice(0);
list.remove('shen');
if(list.length) player.group=function(){
if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){
if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi'].contains(game.zhu.name)) return game.zhu.group;
if(game.zhu.name=='yl_yuanshu'){
if(player.identity=='zhong') list.remove('qun');
else return 'qun';
}
if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].contains(game.zhu.name)){
if(player.identity!='zhong') list.remove(game.zhu.group);
else return game.zhu.group;
}
}
return list.randomGet();
}();
}
if(get.is.double(player.name1)){
player._groupChosen=true;
player.group=get.is.double(player.name1,true).randomGet();
player.node.name.dataset.nature=get.groupnature(player.group);
}
else if(get.config('choose_group')&&player.group=='shen'&&!player.isUnseen(0)){
var list=lib.group.slice(0);
list.remove('shen');
if(list.length) player.group=function(){
if(_status.mode!='zhong'&&game.zhu&&game.zhu.group){
if(['re_zhangjiao','liubei','re_liubei','caocao','re_caocao','sunquan','re_sunquan','zhangjiao','sp_zhangjiao','caopi','re_caopi','liuchen','caorui','sunliang','sunxiu','sunce','re_sunben','ol_liushan','re_liushan','key_akane','dongzhuo','re_dongzhuo','ol_dongzhuo','jin_simashi'].contains(game.zhu.name)) return game.zhu.group;
if(game.zhu.name=='yl_yuanshu'){
if(player.identity=='zhong') list.remove('qun');
else return 'qun';
}
if(['sunhao','xin_yuanshao','re_yuanshao','re_sunce','ol_yuanshao','yuanshu','jin_simazhao','liubian'].contains(game.zhu.name)){
if(player.identity!='zhong') list.remove(game.zhu.group);
else return game.zhu.group;
}
}
return list.randomGet();
}();
}
player.node.name.dataset.nature=get.groupnature(player.group);
}
next.setContent(function(){
"step 0"
@ -1665,44 +1650,35 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ui.cheat2.close();
delete ui.cheat2;
}
var chooseGroup=false;
if(event.chosen.length){
if(lib.character[event.chosen[0]][1]=='shen'&&!lib.character[event.chosen[0]][4].contains('hiddenSkill')){
chooseGroup=true;
}
event.choosed=event.chosen;
}
else if(event.modchosen){
if(event.modchosen[0]=='random') event.modchosen[0]=result.buttons[0].link;
else event.modchosen[1]=result.buttons[0].link;
event.choosed=event.modchosen;
}
else if(result.buttons.length==2){
event.choosed=[result.buttons[0].link,result.buttons[1].link];
game.addRecentCharacter(result.buttons[0].link,result.buttons[1].link);
if(lib.character[event.choosed[0]][1]=='shen'&&!lib.character[event.choosed[0]][4].contains('hiddenSkill')){
chooseGroup=true;
}
}
else{
event.choosed=[result.buttons[0].link];
if(lib.character[event.choosed[0]][1]=='shen'&&!lib.character[event.choosed[0]][4].contains('hiddenSkill')){
chooseGroup=true;
}
game.addRecentCharacter(result.buttons[0].link);
}
if(get.config('choose_group')&&chooseGroup){
var list=lib.group.slice(0);
list.remove('shen');
game.me.chooseControl(list).prompt='请选择神武将的势力';
var name=event.choosed[0];
if(get.is.double(name)){
game.me._groupChosen=true;
game.me.chooseControl(get.is.double(name,true)).set('prompt','请选择你的势力');
}
else if(lib.character[name][1]=='shen'&&!lib.character[name][4].contains('hiddenSkill')&&get.config('choose_group')){
var list=lib.group.slice(0);
list.remove('shen');
game.me.chooseControl(list).set('prompt','请选择神武将的势力');
}
"step 2"
event.group=result.control||false;
if(event.chosen.length){
game.me.init(event.chosen[0],event.chosen[1]);
}
else if(event.modchosen){
game.me.init(event.modchosen[0],event.modchosen[1]);
}
else if(event.choosed.length==2){
if(event.choosed.length==2){
game.me.init(event.choosed[0],event.choosed[1]);
}
else{
@ -1976,6 +1952,17 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return Math.random();
});
}
else if(get.is.double(game.zhu.name1)){
game.zhu._groupChosen=true;
var list=get.is.double(game.zhu.name1,true);
for(var i=0;i<list.length;i++){
if(!lib.group.contains(list[i])) list.splice(i--,1);
else list[i]=['','','group_'+list[i]];
}
game.zhu.chooseButton(['请选择你的势力',[list,'vcard']],true).set('ai',function(){
return Math.random();
});
}
else event.goto(3);
"step 2"
var name=result.links[0][2].slice(6);
@ -2044,7 +2031,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else{
result[i]=result[i].links;
}
if(lib.character[result[i][0]]&&lib.character[result[i][0]][1]=='shen'&&!lib.character[result[i][0]][4].contains('hiddenSkill')) shen.push(lib.playerOL[i]);
if(get.is.double(result[i][0])||
lib.character[result[i][0]]&&lib.character[result[i][0]][1]=='shen'&&!lib.character[result[i][0]][4].contains('hiddenSkill')) shen.push(lib.playerOL[i]);
}
event.result2=result;
if(shen.length){
@ -2054,14 +2042,23 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else list[i]=['','','group_'+list[i]];
}
for(var i=0;i<shen.length;i++){
shen[i]=[shen[i],['请选择神武将的势力',[list,'vcard']],1,true];
if(get.is.double(result[shen[i].playerid][0])){
shen[i]._groupChosen=true;
shen[i]=[shen[i],['请选择你的势力',[get.is.double(result[shen[i].playerid][0],true).map(function(i){
return ['','','group_'+i];
}),'vcard']],1,true];
}
else shen[i]=[shen[i],['请选择神武将的势力',[list,'vcard']],1,true];
}
game.me.chooseButtonOL(shen,function(player,result){
if(player==game.me) player.changeGroup(result.links[0][2].slice(6),false,false);
}).set('switchToAuto',function(){
_status.event.result='ai';
}).set('processAI',function(){
return 'ai';
return {
bool:true,
links:[_status.event.dialog.buttons.randomGet().link],
}
});
}
else event._result={};
@ -2126,18 +2123,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
},
translate:{
group_wei:"魏势力",
group_shu:"蜀势力",
group_wu:"吴势力",
group_qun:"群势力",
group_key:"键势力",
group_jin:"晋势力",
group_wei_bg:"魏",
group_shu_bg:"蜀",
group_wu_bg:"吴",
group_qun_bg:"群",
group_key_bg:"键",
group_jin_bg:"晋",
zhu:"主",
zhong:"忠",
mingzhong:"忠",