get.name(i,player)));
+ 'step 1'
+ if(target.countCards('h')>player.countCards('h')){
+ player.addTempSkill('dcminze_ban','phaseUseAfter');
+ }
+ },
+ ai:{
+ order:6.5,
+ expose:0.2,
+ },
+ subSkill:{
+ targeted:{onremove:true,charlotte:true},
+ ban:{charlotte:true},
+ given:{
+ charlotte:true,
+ onremove:true,
+ intro:{
+ content:'本回合以此法交出的牌名:$',
+ },
+ },
+ draw:{
+ trigger:{player:'phaseJieshuBegin'},
+ filter:function(event,player){
+ return player.getStorage('dcminze_given').length;
+ },
+ forced:true,
+ locked:false,
+ content:function(){
+ var num=Math.min(5,player.getStorage('dcminze_given').length)-player.countCards('h');
+ if(num>0) player.draw(num);
+ }
+ }
+ }
+ },
+ dcjini:{
+ audio:2,
+ trigger:{player:'damageEnd'},
+ direct:true,
+ filter:function(event,player){
+ return player.maxHp-player.countMark('dcjini_counted')>0;
+ },
+ content:function(){
+ 'step 0'
+ player.chooseCard(get.prompt2('dcjini'),[1,player.maxHp-player.countMark('dcjini_counted')],(card,player,target)=>{
+ var mod=game.checkMod(card,player,'unchanged','cardChongzhuable',player);
+ return mod=='unchanged';
+ }).set('ai',card=>{
+ return 6-get.value(card);
+ });
+ 'step 1'
+ if(result.bool){
+ var cards=result.cards;
+ player.logSkill('dcjini');
+ player.addTempSkill('dcjini_counted');
+ player.addMark('dcjini_counted',cards.length,false);
+ player.loseToDiscardpile(cards);
+ player.draw(cards.length);
+ }
+ else event.finish();
+ 'step 2'
+ if(trigger.source&&trigger.source.isIn()&&Array.isArray(result)){
+ for(var i of result){
+ if(get.name(i,player)=='sha'&&get.owner(i)==player&&get.position(i)=='h'){
+ player.chooseToUse(function(card,player,event){
+ if(get.name(card)!='sha') return false;
+ return lib.filter.filterCard.apply(this,arguments);
+ },'击逆:是否对'+get.translation(trigger.source)+'使用一张不可被响应的杀?').set('logSkill','twxiawang').set('complexSelect',true).set('filterTarget',function(card,player,target){
+ if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
+ return lib.filter.targetEnabled.apply(this,arguments);
+ }).set('sourcex',trigger.source).set('oncard',()=>{
+ _status.event.directHit.addArray(game.players);
+ });
+ break;
+ }
+ }
+ }
+ },
+ subSkill:{
+ counted:{
+ onremove:true,
+ charlotte:true
+ }
+ }
+ },
+ //乐綝
+ dcporui:{
+ audio:2,
+ trigger:{global:'phaseJieshuBegin'},
+ filter:function(event,player){
+ if(player==event.player) return false;
+ if(player.hasSkill('dcporui_round')) return false;
+ return game.hasPlayer(current=>{
+ if(current==player||current==event.player) return false;
+ return current.getHistory('lose').length>0;
+ })&&(_status.connectMode||player.hasCard({type:'basic'},'h'));
+ },
+ direct:true,
+ content:function(){
+ 'step 0'
+ player.chooseCardTarget({
+ prompt:get.prompt('dcporui'),
+ //prompt2:'弃置一张基本牌并选择一名本回合失去过牌的非当前回合的其他角色,你视为对其依次使用'+get.cnNumber(Math.max(0,player.hp)+1)+'张【杀】',
+ prompt2:get.skillInfoTranslation('dcporui',player),
+ filterCard:function(card,player){
+ if(get.type(card)!='basic') return false;
+ return lib.filter.cardDiscardable.apply(this,arguments);
+ },
+ selectCard:1,
+ targets:game.filterPlayer(current=>{
+ if(current==player||current==trigger.player) return false;
+ return current.getHistory('lose').length>0;
+ }),
+ filterTarget:function(card,player,target){
+ return _status.event.targets.contains(target);
+ },
+ ai1:function(card){
+ return 7-get.value(card);
+ },
+ ai2:function(target){
+ return get.effect(target,{name:'sha'},_status.event.player,_status.event.player);
+ }
+ });
+ 'step 1'
+ if(result.bool){
+ var target=result.targets[0],cards=result.cards;
+ event.target=target;
+ player.logSkill('dcporui',target);
+ player.discard(cards);
+ event.num2=Math.max(0,player.hp);
+ event.num=event.num2+1;
+ player.addTempSkill('dcporui_round','roundStart');
+ }
+ else event.finish();
+ 'step 2'
+ var card={name:'sha',isCard:true,storage:{dcporui:true}};
+ if(player.canUse(card,target,false)&&target.isIn()){
+ player.useCard(card,target);
+ event.num--;
+ }
+ else event.goto(4);
+ 'step 3'
+ if(event.num>0) event.goto(2);
+ 'step 4'
+ if(!player.hasMark('dcgonghu_damage')){
+ var cards=player.getCards('h');
+ if(cards.length==0) event._result={bool:false};
+ else if(cards.length<=event.num2) event._result={bool:true,cards:cards};
+ else player.chooseCard('破锐:交给'+get.translation(target)+get.cnNumber(event.num2)+'张手牌',true,event.num2);
+ }
+ else event.goto(6)
+ 'step 5'
+ if(result.bool){
+ player.give(result.cards,target);
+ }
+ 'step 6'
+ if(player.hasMark('dcgonghu_basic')){
+ if(!target.hasHistory('damage',evt=>{
+ return evt.card&&evt.card.storage&&evt.card.storage.dcporui&&evt.getParent('dcporui')==event;
+ })){
+ player.recover();
+ }
+ }
+ },
+ subSkill:{
+ round:{charlotte:true}
+ },
+ ai:{
+ expose:0.4,
+ threaten:4.8
+ }
+ },
+ dcgonghu:{
+ audio:2,
+ trigger:{
+ player:['loseAfter','damageEnd'],
+ source:'damageSource',
+ global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
+ },
+ forced:true,
+ filter:function(event,player){
+ if(event.name=='damage'){
+ if(player.hasMark('dcgonghu_damage')) return false;
+ return _status.currentPhase&&_status.currentPhase!=player;
+ }
+ if(player.hasMark('dcgonghu_basic')) return false;
+ var evt=event.getl(player);
+ return evt&&evt.cards2&&evt.cards2.some(i=>get.type2(i,player)=='basic');
+ },
+ group:['dcgonghu_basic','dcgonghu_trick'],
+ content:function(){
+ player.addMark('dcgonghu_'+(trigger.name=='damage'?'damage':'basic'),1,false);
+ game.log(player,'修改了技能','#g【破锐】');
+ },
+ subSkill:{
+ trick:{
+ audio:'dcgonghu',
+ trigger:{player:'useCard2'},
+ direct:true,
+ locked:true,
+ filter:function(event,player){
+ if(!player.hasMark('dcgonghu_basic')||!player.hasMark('dcgonghu_damage')) return false;
+ var card=event.card;
+ if(get.color(card,false)!='red'||get.type(card,null,true)!='trick') return false;
+ var info=get.info(card);
+ if(info.allowMultiple==false) return false;
+ if(event.targets&&!info.multitarget){
+ if(game.hasPlayer(function(current){
+ return !event.targets.contains(current)&&lib.filter.targetEnabled2(card,player,current);
+ })){
+ return true;
+ }
+ }
+ return false;
+ },
+ content:function(){
+ 'step 0'
+ var prompt2='为'+get.translation(trigger.card)+'增加一个目标'
+ player.chooseTarget(get.prompt('dcgonghu_trick'),function(card,player,target){
+ var player=_status.event.player;
+ return !_status.event.targets.contains(target)&&lib.filter.targetEnabled2(_status.event.card,player,target);
+ }).set('prompt2',prompt2).set('ai',function(target){
+ var trigger=_status.event.getTrigger();
+ var player=_status.event.player;
+ return get.effect(target,trigger.card,player,player);
+ }).set('card',trigger.card).set('targets',trigger.targets);
+ 'step 1'
+ if(result.bool){
+ if(!event.isMine()&&!event.isOnline()) game.delayx();
+ event.targets=result.targets;
+ }
+ else{
+ event.finish();
+ }
+ 'step 2'
+ if(event.targets){
+ player.logSkill('dcgonghu_trick',event.targets);
+ trigger.targets.addArray(event.targets);
+ }
+ },
+ },
+ basic:{
+ audio:'dcgonghu',
+ trigger:{player:'useCard'},
+ forced:true,
+ filter:function(event,player){
+ if(!player.hasMark('dcgonghu_basic')||!player.hasMark('dcgonghu_damage')) return false;
+ var card=event.card;
+ return (get.color(card,false)=='red'&&get.type(card,null,false)=='basic');
+ },
+ content:function(){
+ trigger.directHit.addArray(game.filterPlayer());
+ game.log(trigger.card,'不可被响应');
+ },
+ },
+ }
+ },
//张闿
dcxiangshu:{
audio:2,
@@ -375,7 +1473,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 0;
}).set('color',function(){
var cardsR=cards.filter(i=>get.color(i)=='red');
- if(cardsR.length==cards.length||cardsR.length==0) return 1;
+ if(cardsR.length==cards.length||cardsR.length==0||cards.length<=game.roundNumber) return 1;
if(cardsR.length<=game.roundNumber) return 'red';
if(cards.length-cardsR.length<=game.roundNumber) return 'black';
return 1;
@@ -410,7 +1508,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
position:'hes',
filter:function(event,player){
- if(event.name=='chooseToUse') return player.countCards('hes',{subtype:['equip1','equip2']})>0||_status.connectMode;
+ if(event.name=='chooseToUse') return player.countCards('hes',{subtype:['equip1','equip2']})>0;
return event.player!=player;
},
content:function(){
@@ -1110,15 +2208,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.line(target);
var cards=player.getExpansions('dcfozong');
if(!cards.length) event._result={bool:false};
- else target.chooseButton(['###佛宗###获得一张牌并令'+get.translation(player)+'回复1点体力,或点击“取消”令其失去1点体力',cards]).set('ai',button=>{
- if(_status.event.refuse) return get.value(button.link)-6;
+ else target.chooseButton(['###佛宗###获得一张牌并令'+get.translation(player)+'回复1点体力,或点击“取消”令其失去1点体力
',cards]).set('ai',button=>{
+ if(_status.event.refuse) return get.value(button.link)-7.5;
return get.value(button.link);
}).set('refuse',get.attitude(target,player)<1&&get.effect(player,{name:'losehp'},player,target)>0);
'step 4'
if(result.bool){
var card=result.links[0];
target.gain(card,'give',player);
- target.recover();
+ player.recover(target);
}
else player.loseHp();
'step 5'
@@ -1329,8 +2427,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return name=='sha'||name=='shan';
},
filter:function(event,player){
- if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase||player.getStorage('dcgue').contains(_status.currentPhase)) return false;
- if(!player.countCards('h')) return false;
+ //if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase||player.getStorage('dcgue').contains(_status.currentPhase)) return false;
+ if(event.dcgue||event.type=='wuxie'||player==_status.currentPhase) return false;
+ if(!player.countCards('h')||player.hasSkill('dcgue_blocker',null,null,false)) return false;
for(var name of ['sha','shan']){
if(event.filterCard({name:name,isCard:true},player,event)) return true;
}
@@ -1361,15 +2460,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
precontent:function(){
'step 0'
player.logSkill('dcgue');
+ player.addTempSkill('dcgue_blocker');
player.showHandcards();
+ delete event.result.skill;
'step 1'
if(player.countCards('h',{name:['sha','shan']})>1){
var evt=event.getParent();
evt.set('dcgue',true);
evt.goto(0);
+ delete evt.openskilldialog;
return;
}
- else player.markAuto('dcgue',[_status.currentPhase]);
+ //else player.markAuto('dcgue',[_status.currentPhase]);
game.delayx();
},
}
@@ -1378,13 +2480,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return '展示所有手牌'+(player.countCards('h',{name:['sha','shan']})<=1?',然后视为使用【'+get.translation(links[0][2])+'】':'');
}
},
- intro:{content:'已于$的回合发动过技能'},
+ subSkill:{blocker:{charlotte:true}},
+ //intro:{content:'已于$的回合发动过技能'},
ai:{
order:1,
respondSha:true,
respondShan:true,
skillTagFilter:function(player,tag,arg){
- if(player.getStorage('dcgue').contains(_status.currentPhase)) return false;
+ //if(player.getStorage('dcgue').contains(_status.currentPhase)) return false;
if(player.countCards('h',{name:['sha','shan']})>1) return false;
},
result:{
@@ -2805,7 +3908,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
trigger:{global:'useCardAfter'},
filter:function(event,player){
- return event.player!=player&&event.card.name=='sha'&&!event.targets.contains(player)&&event.targets.every(current=>player.inRange(current))&&player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h');
+ return event.player!=player&&event.card.name=='sha'&&event.targets.length&&!event.targets.contains(player)&&
+ event.targets.every(current=>player.inRange(current)&¤t.isIn())&&player.hasCard(card=>card.hasGaintag('dcaishou_tag'),'h');
},
direct:true,
content:function(){
@@ -2826,13 +3930,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
selectTarget:-1,
ai1:function(card){
- var player=_status.event.player,target=_status.event.getParent().player;
+ var player=_status.event.player;
if(player.isHealthy()&&player.hasSkill('dcaishou')&&player.countCards('h',card=>card.hasGaintag('dcaishou_tag')==1)) return 0;
var eff=0;
for(var target of _status.event.targets){
eff+=get.effect(target,get.autoViewAs({name:'sha'},[card]),player,player);
}
- if(eff>0) return 7-get.value(card);
+ if(eff>0) return 6.5+eff/10-get.value(card);
+ return 0;
},
ai2:()=>1,
});
@@ -2889,11 +3994,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.list=list;
event.current=event.list.shift();
event.getParent()._dcjianji_discarded.remove(player);
+ event.targets=event.getParent()._dcjianji_discarded;
}
else event.finish();
'step 1'
- event.current.chooseTarget('间计:是否视为对除'+get.translation(player)+'外的弃置过牌的一名角色使用一张杀?',function(card,player,event){
- return player.canUse('sha',target,false);
+ var targets=event.targets.slice();
+ targets.remove(event.current);
+ if(!targets.length) event._result={bool:false};
+ else event.current.chooseTarget('间计:是否视为对除'+get.translation(player)+'外的弃置过牌的一名角色使用一张杀?',(card,player,target)=>{
+ return _status.event.targets.contains(target)&&player.canUse('sha',target,false);
+ }).set('targets',event.targets).set('ai',target=>{
+ var player=_status.event.player;
+ return get.effect(target,{name:'sha'},player,player);
});
'step 2'
if(result.bool){
@@ -2906,25 +4018,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
ai:{
- order:6,
+ order:7,
result:{
target:function(player,target){
- return ui.selected.targets.reduce((p,c)=>p+get.effect(c,{name:'guohe_copy2'},player,c)/2,0)+get.effect(target,{name:'guohe_copy2'},player,target)/2;
+ var eff=get.effect(target,{name:'guohe_copy2'},player,target)/2;
+ if(ui.selected.targets.length&&eff<0){
+ var len=target.countCards('h');
+ if(ui.selected.targets.every(i=>{
+ return i.countCards('h'){
+ return get.effect(i,{name:'sha'},target,player)>0;
+ })) return 0.1;
+ }
+ return ui.selected.targets.reduce((p,c)=>p+get.effect(c,{name:'guohe_copy2'},player,c)/2,0)+eff;
}
}
},
},
dcyuanmo:{
audio:2,
- trigger:{player:'damageEnd'},
+ trigger:{player:['damageEnd','phaseZhunbeiBegin']},
direct:true,
group:'dcyuanmo_add',
- init:function(player){player.storage.dcyuanmo=0},
+ init:function(player){player.storage.dcyuanmo_range=0},
change:function(player,num){
- if(typeof player.storage.dcyuanmo!=='number') player.storage.dcyuanmo=0;
+ player.addSkill('dcyuanmo_range');
+ if(typeof player.storage.dcyuanmo_range!=='number') player.storage.dcyuanmo_range=0;
if(!num) return;
- player.storage.dcyuanmo+=num;
- player.markSkill('dcyuanmo');
+ player.storage.dcyuanmo_range+=num;
+ if(player.storage.dcyuanmo_range!=0) player.markSkill('dcyuanmo_range');
+ else player.unmarkSkill('dcyuanmo_range');
game.log(player,'的攻击范围',(num>0?'+':'')+num);
},
content:function(){
@@ -2934,18 +4057,25 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseControl('cancel2').set('prompt',get.prompt('dcyuanmo')).set('choiceList',choiceList).set('ai',()=>{
return _status.event.choice;
}).set('choice',function(){
+ if(trigger.name=='phaseZhunbei'&&player.getAttackRange()==1&&!player.hasCard(card=>{
+ if(get.subtype(card)!='equip1'&&!player.hasUseTarget(card)) return false;
+ var num=1;
+ var info=get.info(card,false);
+ if(info&&info.distance&&typeof info.distance.attackFrom=='number') num-=info.distance.attackFrom;
+ return num>1;
+ },'hs')) return '选项一';
var targets=event.targets.slice(),targetsx=[];
- var _tmp=player.storage.dcyuanmo;
- player.storage.dcyuanmo++;
+ var _tmp=player.storage.dcyuanmo_range;
+ player.storage.dcyuanmo_range++;
try{
targetsx=game.filterPlayer(current=>player.inRange(current));
}
- catch(e){player.storage.dcyuanmo=_tmp};
- player.storage.dcyuanmo=_tmp;
+ catch(e){player.storage.dcyuanmo_range=_tmp};
+ player.storage.dcyuanmo_range=_tmp;
targetsx.removeArray(targets);
return targetsx.reduce((p,c)=>{
return p+Math.max(0,get.effect(c,{name:'shunshou_copy2'},player,player));
- },0)>get.effect(player,{name:'wuzhong'},player,player)?'选项一':'选项二';
+ },0)>get.effect(player,{name:'wuzhong'},player,player)/1.5?'选项一':'选项二';
}());
'step 1'
if(result.control=='cancel2'){
@@ -2981,21 +4111,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
- intro:{
- content:function(storage,player){
- var num=player.storage.dcyuanmo;
- return '攻击范围'+(num>=0?'+':'')+num;
- }
- },
- mod:{
- attackRange:function(player,num){
- return num+player.countMark('dcyuanmo');
- },
- },
subSkill:{
add:{
audio:'dcyuanmo',
- trigger:{player:'phaseZhunbeiBegin'},
+ trigger:{player:'phaseJieshuBegin'},
filter:function(event,player){
return !game.hasPlayer(current=>player.inRange(current));
},
@@ -3004,7 +4123,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
lib.skill.dcyuanmo.change(player,1);
},
- }
+ },
+ range:{
+ charlotte:true,
+ intro:{
+ content:function(storage,player){
+ var num=player.storage.dcyuanmo_range;
+ return '攻击范围'+(num>=0?'+':'')+num;
+ }
+ },
+ mod:{
+ attackRange:function(player,num){
+ return num+player.countMark('dcyuanmo_range');
+ },
+ },
+ }
},
},
//向朗
@@ -4752,7 +5885,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
popup:false,
content:function(){
player.storage.dcfengying=[];
- for(var card of ui.discardPile.childNodes){
+ for(var i=0;iget.skillInfoTranslation(i)).join('');
var choices=[];
if(controls.contains('dctongguan_wuyong')&&/你对\S{1,15}造成\S{1,10}伤害/.test(str)) choices.push('dctongguan_wuyong');
- if(controls.contains('dctongguan_gangying')&&/回复\S{1,5}体力/.test(str)) choices.push('dctongguan_gangying');
+ if(controls.contains('dctongguan_gangying')&&/回复\S{1,5}体力/.test(str)&&_status.event.player.getFriends().length) choices.push('dctongguan_gangying');
if(controls.contains('dctongguan_duomou')&&/你(可|可以)?摸\S{1,3}张牌/.test(str)) choices.push('dctongguan_duomou');
if(controls.contains('dctongguan_guojue')&&/(当【过河拆桥】使用|((弃置|获得)\S{1,5}其他角色\S{1,7}牌|))/.test(str)) choices.push('dctongguan_guojue');
if(controls.contains('dctongguan_renzhi')&&/交给\S{0,5}其他角色/.test(str)&&_status.event.player.getFriends().length) choices.push('dctongguan_renzhi');
@@ -5495,7 +6629,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
})) guojue=true;
if(!renzhi&¤t.hasHistory('gain',evt=>{
- debugger
if(evt.giver!=target||evt.getParent().name=='_yongjian_zengyu') return false;
return evt.cards.length;
})) renzhi=true;
@@ -6121,6 +7254,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.loseToDiscardpile(result.links);
target.draw();
}
+ },
+ ai:{
+ expose:0.1,
+ result:{
+ target:function(player,target){
+ if(target.hasCard(card=>get.value(card)>=6,'e')&&get.attitude(player,target)<0) return -1;
+ return 1;
+ }
+ }
}
},
//王烈
@@ -6173,7 +7315,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
player.logSkill('dcchongwang',trigger.player);
if(result.links[0]=='gain'){
- trigger.player.gain(trigger.cards.filterInD(),'gain2');
+ player.addTempSkill('dcchongwang_gain');
+ trigger._dcchongwang=true;
}
else{
trigger.targets.length=0;
@@ -6186,6 +7329,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
threaten:3.5,
directHit_ai:true,
},
+ subSkill:{
+ gain:{
+ trigger:{global:'useCardAfter'},
+ charlotte:true,
+ filter:function(event,player){
+ return event._dcchongwang;
+ },
+ content:function(){
+ trigger.player.gain(trigger.cards.filterInD(),'gain2');
+ }
+ }
+ }
},
dchuagui:{
audio:2,
@@ -6268,7 +7423,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att=get.attitude(target,player),hs=target.getCards('he');
hs.sort((b,a)=>get.value(b,target)-get.value(a,target));
var choice='仅展示牌',card=hs[0];
- if(att<-2&&get.value(card,target)<=5) choice='交出牌';
+ if(att<-2&&Math.random()>((get.value(card,target)-3)/5)) choice='交出牌';
sendback([choice,card],target);
if(!event.ai_targets.length){
clearInterval(event.interval);
@@ -6347,12 +7502,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of list){
cards.push(i[1][1]);
targets.push(i[0]);
- i[0].$give(i[1][1],player);
+ //i[0].$give(i[1][1],player);
}
player.line(targets);
player.gain(cards,'give');
- 'step 8'
- game.delayx();
+ //step 8
+ //game.delayx();
},
contentx:function(){
'step 0'
@@ -7905,26 +9060,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var list=lib.skill.dchuishu.getList(player);
- var min=list[0];
- for(var i of list){
- if(i>min) min=i;
- }
- var exps=['摸牌数[','弃牌数[','目标牌数['];
- var choices=[];
- for(var i=0;i0
});
if(player==target&&bool) player.draw(2);
@@ -25508,9 +26671,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}).length>0;
},
content:function(){
- player.discard(player.getCards('h',function(card){
+ var cards=player.getCards('h',function(card){
return card.hasGaintag('xinfu_bijing');
- }));
+ });
+ player.loseToDiscardpile(cards);
+ player.draw(cards.length);
},
sub:true,
},
@@ -25524,7 +26689,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
- player.chooseCard(get.prompt2('xinfu_bijing'),'h').set('ai',function(card){
+ player.chooseCard(get.prompt2('xinfu_bijing'),'h',[1,2]).set('ai',function(card){
if(card.name=='shan') return 6;
return 6-get.value(card);
});
@@ -25872,7 +27037,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
"xinfu_xingzhao":{
audio:true,
- group:["xz_xunxun","xinfu_xingzhao2"],
+ group:["xz_xunxun","xinfu_xingzhao2","xinfu_xingzhao3"],
mark:true,
intro:{
content:function(storage,player){
@@ -25889,6 +27054,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(num>=3){
str+=';始终跳过弃牌阶段';
}
+ if(num>=4){
+ str+=';造成的伤害+1';
+ }
return str;
},
},
@@ -25924,6 +27092,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
game.log(player,'跳过了弃牌阶段');
},
},
+ xinfu_xingzhao3:{
+ audio:'xinfu_xingzhao',
+ trigger:{
+ source:'damageBegin1',
+ },
+ forced:true,
+ filter:function(event,player){
+ var num=game.countPlayer(function(current){
+ return current.isDamaged();
+ });
+ return num>=4;
+ },
+ content:function(){
+ trigger.num++;
+ },
+ },
"xinfu_dianhu":{
audio:2,
trigger:{
@@ -26553,6 +27737,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcluochong:function(player){
return '一轮游戏开始时,你可以弃置任意名角色区域里的共计至多['+(4-player.countMark('dcluochong'))+']张牌,然后若你以此法弃置了一名角色的至少三张牌,则你方括号内的数字-1。';
},
+ dcporui:function(player){
+ return '每轮限一次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':',然后你交给其X张手牌')+'(X为你的体力值)。'+(player.hasMark('dcgonghu_basic')?'若其没有因此受到伤害,你回复1点体力。':'');
+ }
},
perfectPair:{},
characterReplace:{
@@ -26560,7 +27747,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fanchou:['fanchou','tw_fanchou','ns_fanchou'],
zhangji:['zhangji','ns_zhangji'],
zhangchangpu:['zhangchangpu','sp_zhangchangpu','ol_zhangchangpu'],
- huangfusong:['huangfusong','sp_huangfusong','old_huangfusong'],
+ huangfusong:['huangfusong','sp_huangfusong','jsrg_huangfusong','old_huangfusong'],
wenyang:['wenyang','db_wenyang','diy_wenyang'],
dingyuan:['ol_dingyuan','dingyuan'],
quyi:['quyi','re_quyi'],
@@ -26569,22 +27756,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jin_yanghuiyu:['jin_yanghuiyu','yanghuiyu'],
chunyuqiong:['chunyuqiong','re_chunyuqiong'],
taoqian:['taoqian','re_taoqian'],
- sp_liubei:['sp_liubei','jsp_liubei'],
+ sp_liubei:['sp_liubei','jsrg_liubei','jsp_liubei'],
dongcheng:['re_dongcheng','dongcheng'],
hucheer:['tw_hucheer','re_hucheer','hucheer'],
- dongbai:['re_dongbai','dongbai'],
+ dongbai:['re_dongbai','dongbai','jsrg_dongbai'],
gexuan:['gexuan','tw_gexuan'],
panshu:['panshu','re_panshu'],
- nanhualaoxian:['re_nanhualaoxian','nanhualaoxian'],
+ nanhualaoxian:['re_nanhualaoxian','nanhualaoxian','jsrg_nanhualaoxian'],
kanze:['re_kanze','kanze'],
yangwan:['yangwan','sp_yangwan'],
chendeng:['ol_chendeng','re_chendeng','chendeng'],
pangdegong:['re_pangdegong','pangdegong'],
- zhujun:['sp_zhujun','ol_zhujun','zhujun'],
+ zhujun:['sp_zhujun','ol_zhujun','zhujun','jsrg_zhujun'],
sunyi:['re_sunyi','tw_sunyi','sunyi'],
- tw_liuhong:['tw_liuhong','liuhong'],
+ tw_liuhong:['tw_liuhong','liuhong','jsrg_liuhong'],
miheng:['miheng','re_miheng'],
- re_hejin:['re_hejin','tw_hejin'],
+ re_hejin:['re_hejin','tw_hejin','jsrg_hejin'],
fengfangnv:['re_fengfangnv','fengfangnv'],
luotong:['luotong','dc_luotong'],
mamidi:['mamidi','xin_mamidi'],
@@ -26604,6 +27791,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jiling:['dc_jiling','jiling'],
qiaorui:['qiaorui','tw_qiaorui'],
duanwei:['duanwei','junk_duanwei'],
+ xushao:['xushao','jsrg_xushao'],
+ huban:['dc_huban','ol_huban'],
},
translate:{
lijue:"李傕",
@@ -26642,7 +27831,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_tunan":"图南",
"xinfu_tunan_info":"出牌阶段限一次,你可以展示牌堆顶的一张牌并选择一名其他角色,然后该角色选择一项:使用此牌(无距离限制);或将此牌当普通【杀】使用。",
"xinfu_bijing":"闭境",
- "xinfu_bijing_info":"结束阶段,你可以选择一张手牌并标记为“闭境”。若你于回合外失去“闭境”牌,则当前回合角色的弃牌阶段开始时,其需弃置两张牌。你的准备阶段,弃置手牌中的“闭境”牌。",
+ "xinfu_bijing_info":"①结束阶段,你可以选择至多两张手牌并标记为“闭境”。②其他角色的弃牌阶段开始时,若你于本回合内失去过“闭境”,其弃置两张牌。③准备阶段,你重铸所有“闭境”牌。",
"xinfu_zhenxing":"镇行",
"xinfu_zhenxing_info":"结束阶段开始时或当你受到伤害后,你可以观看牌堆顶的至多三张牌,然后你获得其中与其余牌花色均不相同的一张牌。",
"xinfu_qianxin":"遣信",
@@ -26660,9 +27849,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xz_xunxun":"恂恂",
"xz_xunxun_info":"摸牌阶段,你可以观看牌堆顶的四张牌,然后将其中的两张牌置于牌堆顶,并将其余的牌以任意顺序置于牌堆底。",
"xinfu_xingzhao":"兴棹",
- "xinfu_xingzhao_info":"锁定技,若X≥1,你视为拥有技能〖恂恂〗。若X≥2,当你使用装备牌时,你摸一张牌。若X≥3,弃牌阶段开始时,你跳过此阶段。(X为场上已受伤的角色数)",
+ "xinfu_xingzhao_info":"锁定技。若X≥1,你视为拥有技能〖恂恂〗。若X≥2,当你使用装备牌时,你摸一张牌。若X≥3,弃牌阶段开始时,你跳过此阶段。若X≥4,当你造成伤害时,此伤害+1。(X为场上已受伤的角色数)",
"xinfu_xingzhao2":"兴棹",
"xinfu_xingzhao2_info":"",
+ xinfu_xingzhao3:'兴棹',
"xinfu_dianhu":"点虎",
"xinfu_dianhu_info":"锁定技,游戏开始时,你选择一名其他角色。当其受到来自你的伤害后或回复体力后,你摸一张牌。",
"xinfu_dianhu2":"点虎",
@@ -27127,7 +28317,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhtongyuan_info:'锁定技。①当你使用红色锦囊牌后,你于〖摧坚〗后增加“若其手牌中没有【闪】,则你摸两张牌”;②当你使用或打出红色基本牌后,你删除〖摧坚〗中的“,然后你交给其等量的牌”。③当你使用红色的普通锦囊牌/基本牌时,若你已发动过〖摧坚①〗和〖摧坚②〗,则此牌不可被响应/可额外增加一个目标。',
dufuren:'杜夫人',
yise:'异色',
- yise_info:'其他角色得到你的牌后,若这些牌中:有红色牌,你可令其回复1点体力;有黑色牌,其下次受到【杀】造成的伤害时,此伤害+1。',
+ yise_info:'其他角色得到你的牌后,若这些牌中:有红色牌,你可令其回复1点体力;有黑色牌,其下次受到因执行【杀】的效果造成的伤害时,此伤害+1。',
shunshi:'顺世',
shunshi_info:'准备阶段开始时,或当你受到伤害后,你可将一张牌交给一名不为伤害来源的其他角色并获得如下效果直到你的回合结束:摸牌阶段的额定摸牌数+1,使用【杀】的次数上限+1,手牌上限+1。',
lvlingqi:'吕玲绮',
@@ -27254,7 +28444,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_zhangbao:'张宝',
xinzhoufu:'咒缚',
xinzhoufu2:'咒缚',
- xinzhoufu_info:'①出牌阶段限一次,你可以将一张手牌置于一名其他角色的武将牌上并称为“咒”。②一名有“咒”的角色判定时,你令其以“咒”作为判定牌。',
+ xinzhoufu_info:'出牌阶段限一次。你可以将一张手牌置于一名其他角色的武将牌上并称为“咒”,且当其判定时,将其“咒”作为判定牌。',
xinyingbing:'影兵',
xinyingbing_info:'锁定技。每回合每名角色限一次,当你使用牌指定有“咒”的角色为目标后,你摸两张牌。',
re_miheng:'祢衡',
@@ -27497,7 +28687,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dchuishu:'慧淑',
dchuishu_info:'摸牌阶段结束时,你可以摸[3]张牌。若如此做:你弃置[1]张手牌,且当你于本回合内弃置第[2]+1张牌后,你从弃牌堆中随机获得等量的锦囊牌。',
dcyishu:'易数',
- dcyishu_info:'锁定技。当你不因出牌阶段而失去牌后,你令〖慧淑〗的中括号内最大的一个数字-1,然后令〖慧淑〗的中括号内最小的一个数字+2。',
+ dcyishu_info:'锁定技。当你不因出牌阶段而失去牌后,你令A={〖慧淑〗的中括号内最小的数字},B={〖慧淑〗的中括号内最大的数字}。然后你令A中的一个数字+2,且B中的一个数字-1。',
dcligong:'离宫',
dcligong_info:'觉醒技。准备阶段,若〖慧淑〗的中括号内有不小于5的数字,则你加1点体力上限,回复1点体力并失去〖易数〗。系统随机检索四张吴势力的女性武将牌,然后你选择一项:⒈摸三张牌。⒉失去〖慧淑〗,然后获得这些武将牌上的任意两个非Charlotte技能。',
yinfuren:'尹夫人',
@@ -27554,7 +28744,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcshizhao_info:'锁定技。每回合限一次,当你于回合外失去手牌后,若你没有手牌,且你:有“劲”,则你移去一枚“劲”并摸两张牌;没有“劲”,则你本回合下一次受到的伤害+1。',
wanglie:'王烈',
dcchongwang:'崇望',
- dcchongwang_info:'其他角色使用基本牌或普通锦囊牌时,若你是本局游戏内上一张被使用的牌的使用者,则你可以选择一项:⒈令其收回此牌对应的所有实体牌;⒉取消此牌的所有目标。',
+ dcchongwang_info:'其他角色使用基本牌或普通锦囊牌时,若你是本局游戏内上一张被使用的牌的使用者,则你可以选择一项:⒈令其于此牌结算结束后收回此牌对应的所有实体牌;⒉取消此牌的所有目标。',
dchuagui:'化归',
dchuagui_info:'出牌阶段开始时,你可以选择至多X名有牌的其他角色(X为场上每个阵营中最大阵营的人数,且你的选择结果不展示)。这些角色同时选择一项:⒈交给你一张牌,⒉展示一张牌。若这些角色均选择选项二,则你获得所有展示牌。',
gongsundu:'公孙度',
@@ -27700,7 +28890,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcjianji:'间计',
dcjianji_info:'出牌阶段限一次。你可以令至多X名座位连续的角色依次弃置一张牌。然后其中手牌数最多的角色可以视为对一名其他以此法弃置过牌的角色使用一张【杀】(X为你的攻击范围)。',
dcyuanmo:'远谟',
- dcyuanmo_info:'①当你受到伤害后,你可以选择一项:1.攻击范围+1,然后若你攻击范围内的角色数因此增加,你可以获得任意名本次进入你攻击范围的角色各一张牌;2.攻击范围-1,然后摸两张牌。②准备阶段,若你的攻击范围内没有角色,你可以令你的攻击范围+1。',
+ dcyuanmo_info:'①准备阶段或当你受到伤害后,你可以选择一项:1.攻击范围+1,然后若你攻击范围内的角色数因此增加,你可以获得任意名本次进入你攻击范围的角色各一张牌;2.攻击范围-1,然后摸两张牌。②结束阶段,若你的攻击范围内没有角色,你可以令你的攻击范围+1。',
qiaorui:'桥蕤',
dcaishou:'隘守',
dcaishou_tag:'隘',
@@ -27818,6 +29008,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangkai:'张闿',
dcxiangshu:'相鼠',
dcxiangshu_info:'其他角色的出牌阶段开始时,若其手牌数不小于其体力值,你可以选择一个不大于5的非负整数,然后你弃置一张牌或声明此数字。若如此做,此阶段结束时,若其手牌数与你选择的数字:差值不大于1,你获得其一张牌;相等,你对其造成1点伤害。',
+ huanfan:'桓范',
+ dcjianzheng:'谏诤',
+ dcjianzheng_info:'出牌阶段限一次。你可以观看一名其他角色的手牌,然后若其中有你可以使用的手牌,你获得并使用其中一张。若你未以此法使用牌,你令你与其横置,然后其观看你的手牌。',
+ dcfumou:'腹谋',
+ dcfumou_info:'当你受到1点伤害后,你可以令至多X名角色依次选择一项:1.移动场上的一张牌;2.弃置所有手牌并摸两张牌;3.弃置装备区里的所有牌并回复1点体力(X为你已损失的体力值)。',
+ mengyou:'孟优',
+ dcmanzhi:'蛮智',
+ dcmanzhi_info:'①准备阶段,你可以选择一名其他角色并选择一项:1.令其交给你两张牌,然后其视为使用一张无距离限制的【杀】;2.获得其区域内至多两张牌,然后交给其等量的牌并摸一张牌。②结束阶段,若你的体力值与本回合准备阶段时的体力值相等,你可以执行你未于本回合执行过的〖蛮智①〗的分支。',
+ chentai:'陈泰',
+ dcjiuxian:'救陷',
+ dcjiuxian_info:'出牌阶段限一次。你可以重铸一半数量的手牌(向上取整),然后视为使用一张【决斗】。当此牌对目标角色造成伤害后,你可以令其攻击范围内的一名其他角色回复1点体力。',
+ dcchenyong:'沉勇',
+ dcchenyong_info:'结束阶段,你可以摸X张牌(X为本回合你使用过的牌的类型数)。',
+ dc_sunchen:'孙綝',
+ dczigu:'自固',
+ dczigu_info:'出牌阶段限一次。你可以弃置一张牌,然后获得场上的一张装备牌。若你没有因此获得其他角色的牌,你摸一张牌。',
+ dczuowei:'作威',
+ dczuowei_info:'当你于回合内使用牌时,你可以根据你的手牌数执行对应效果:大于X,令此牌不可被响应;等于X,对一名其他角色造成1点伤害;小于X,摸两张牌并令此技能于本回合失效(X为你装备区里牌的数量且至少为1)。',
+ sunyu:'孙瑜',
+ dcquanshou:'劝守',
+ dcquanshou_info:'一名角色的回合开始时,若其手牌数小于其体力上限,你可以令其选择一项:1.将手牌摸至体力上限,然后本回合使用【杀】的次数上限-1(至多摸五张);2.其本回合使用牌被抵消后,你摸一张牌。',
+ dcshexue:'设学',
+ dcshexue_info:'①出牌阶段开始时,你可以将一张牌当做于上回合的角色于其出牌阶段内使用的最后一张基本牌或普通锦囊牌使用。②出牌阶段结束时,你可以令下回合的角色于其出牌阶段开始时可以将一张牌当做你于此阶段内使用的最后一张基本牌或普通锦囊牌使用。',
+ xizheng:'郤正',
+ dcdanyi:'耽意',
+ dcdanyi_info:'当你使用牌指定第一个目标后,若此牌的目标与你使用的上一张牌目标相同,你可以摸X张牌(X为此牌目标数)。',
+ dcwencan:'文灿',
+ dcwencan_info:'出牌阶段限一次。你可以选择至多两名体力值不同且均与你的体力值不同的角色,这些角色依次选择一项:1.弃置两张花色不同的牌;2.本回合你对其使用牌无次数限制。',
+ liuchongluojun:'刘宠骆俊',
+ dcminze:'悯泽',
+ dcminze_info:'①出牌阶段每名角色限一次。你可以将至多两张牌名不同的牌交给一名手牌数小于你的角色,若其因此手牌数大于你,〖悯泽①〗于此阶段失效。②结束阶段,你将手牌摸至X张(X为你本回合因〖悯泽①〗失去过的牌的牌名数且至多为5)',
+ dcjini:'击逆',
+ dcjini_info:'当你受到伤害后,你可以重铸至多Y张手牌(Y为你的体力上限减本回合你以此法重铸过的牌数)。若你以此法获得了【杀】,你可以对伤害来源使用一张无视距离且不可被响应的【杀】。',
+ yuechen:'乐綝',
+ dcporui:'破锐',
+ dcporui_info:'每轮限一次。其他角色的结束阶段,你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色,你视为对其依次使用X+1张【杀】,然后你交给其X张手牌(X为你的体力值)。',
+ dcgonghu:'共护',
+ dcgonghu_info:'锁定技。①当你于回合外失去基本牌后,你于〖破锐〗后增加“若其没有因此受到伤害,你回复1点体力”。②当你于回合外造成或受到伤害后,你删除〖破锐〗中的“,然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
+
sp_whlw:"文和乱武",
sp_zlzy:"逐鹿中原",
@@ -27855,6 +29084,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_yanhan:'荟萃·匡鼎炎汉',
sp_jishi:'荟萃·悬壶济世',
sp_raoting:'荟萃·绕庭之鸦',
+ sp_yijun:'荟萃·异军突起',
sp2_yuxiu:'限定·钟灵毓秀',
sp_decade:'其他新服武将',
},
diff --git a/character/standard.js b/character/standard.js
index 3f4306833..9aded0138 100755
--- a/character/standard.js
+++ b/character/standard.js
@@ -8,9 +8,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
standard_2008:["caocao","simayi","xiahoudun","zhangliao","xuzhu","guojia","zhenji","liubei","guanyu","zhangfei","zhugeliang","zhaoyun","machao","huangyueying","sunquan","ganning","lvmeng","huanggai","zhouyu","daqiao","luxun","sunshangxiang","huatuo","lvbu","diaochan","re_lidian"],
standard_2013:["huaxiong","re_yuanshu","re_xushu"],
standard_2019:["gongsunzan","xf_yiji"],
+ standard_2023:["std_panfeng"],
},
},
character:{
+ std_panfeng:['male','qun',4,['stdkuangfu']],
re_lidian:['male','wei',3,['xunxun','xinwangxi']],
re_xushu:['male','shu',4,['zhuhai','qianxin']],
caocao:['male','wei',4,['jianxiong','hujia'],['zhu']],
@@ -92,6 +94,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guanyu:['zhangfei','liaohua'],
},
skill:{
+ stdkuangfu:{
+ audio:'xinkuangfu',
+ trigger:{source:'damageSource'},
+ forced:true,
+ usable:1,
+ filter:function(event,player){
+ return player.isPhaseUsing()&&event.card&&event.card.name=='sha'&&event.player!=player&&event.player.isIn();
+ },
+ content:function(){
+ if(trigger.player.hp0) return [1,0.5-1.5*num];
+ if(num>0) return [1,0,0,0.5-1.5*num];
}
}
}
@@ -697,7 +702,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
twkaizeng:{
audio:2,
global:'twkaizeng_want',
- askInfo:['好哥哥给点XXX','有XXX吗','想要XXX','能给些XXX吗','手头正缺XXX'],
refuseInfo:['不给','拒绝'],
subSkill:{
want:{
@@ -6793,12 +6797,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card=lib.skill.twmuyue_backup.card;
event.card=card;
player.removeSkill('twmuyue_effect');
- var card=get.cardPile2(function(cardx){
+ var cardx=get.cardPile2(function(cardx){
return cardx.name==card[2];
});
player.line(target,'green');
- if(card) target.gain(card,'gain2');
- else {
+ if(cardx) target.gain(cardx,'gain2');
+ else{
player.chat('无牌可得了吗?!');
game.log('但是牌堆中已经没有','#g【'+get.translation(card[2])+'】','了!');
}
@@ -7632,7 +7636,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var num=player.countMark('twchuanshu_mark');
trigger.baseDamage+=num;
trigger._twchuanshu=num;
- player.removeMark('twchuanshu_mark',num);
+ player.removeMark('twchuanshu_mark',num,false);
}
else{
var num1=trigger._twchuanshu;
@@ -7658,6 +7662,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.logSkill('twchuanshu_clear',targets.filter(i=>i.isIn()));
for(var target of targets){
target.unmarkAuto('twchuanshu_effect',[player]);
+ if(target.getStorage('twchuanshu_effect').length==0) target.removeSkill('twchuanshu_effect');
}
}
}
@@ -10444,7 +10449,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var attitude=get.attitude(player,trigger.player);
if(attitude==0||result==0){
if(trigger.player!=player) return 0;
- var checkx=get.color(card,true)==get.color(judging);
+ var checkx=get.color(card,player)==get.color(judging);
if(checkx>0) return checkx;
return 0;
};
@@ -10462,7 +10467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.$gain2(trigger.player.judging[0]);
player.gain(trigger.player.judging[0]);
var card=result.cards[0];
- if(get.color(card)==get.color(trigger.player.judging[0])) player.draw('nodelay');
+ if(get.color(card,player)==get.color(trigger.player.judging[0])) player.draw('nodelay');
trigger.player.judging[0]=result.cards[0];
trigger.orderingCards.addArray(result.cards);
game.log(trigger.player,'的判定牌改为',result.cards[0]);
@@ -13125,7 +13130,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tw_xiahoushang:['caopi'],
},
characterReplace:{
- tw_caocao:['tw_caocao','yj_caocao'],
+ tw_caocao:['tw_caocao','jsrg_caocao','yj_caocao'],
mateng:['tw_mateng','mateng'],
},
dynamicTranslate:{
diff --git a/character/xinghuoliaoyuan.js b/character/xinghuoliaoyuan.js
index 6099653c6..c78b8a349 100755
--- a/character/xinghuoliaoyuan.js
+++ b/character/xinghuoliaoyuan.js
@@ -1257,7 +1257,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:["useCardAfter","respond"],
},
filter:function (event,player){
- if(get.itemtype(event.cards)!='cards'||player==_status.currentPhase) return false;
+ if(get.itemtype(event.cards)!='cards') return false;
for(var i=0;iplayer.countCards('h');
+ if(target==player) return false;
+ return target.countCards('h')>player.countCards('h')||Math.max(0,target.hp)>Math.max(0,player.hp);
}).set('ai',function(target){
var att=get.attitude(_status.event.player,target);
if(att<3) return 0;
@@ -1483,6 +1484,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_taishici:['re_sp_taishici','sp_taishici'],
mazhong:['mazhong','re_mazhong'],
wenpin:['re_wenpin','wenpin'],
+ liuyan:['jsrg_liuyan','liuyan'],
},
translate:{
xinghuoliaoyuan:'星火燎原',
@@ -1553,7 +1555,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_guanchao":"观潮",
"xinfu_guanchao_info":"出牌阶段开始时,你可以选择获得一项效果直到回合结束:1.当你使用牌时,若你此阶段使用过的所有牌的点数为递增,你摸一张牌;2.当你使用牌时,若你此阶段使用过的所有牌的点数为递减,你摸一张牌。",
"xinfu_xunxian":"逊贤",
- "xinfu_xunxian_info":"每名其他角色的回合限一次,当你使用或打出的牌结算完成后,你可以将其对应的所有实体牌交给一名手牌数大于你的角色。",
+ "xinfu_xunxian_info":"每回合限一次。当你使用或打出的牌结算完成后,你可以将其对应的所有实体牌交给一名手牌数或体力值大于你的角色。",
"xinfu_kannan":"戡难",
"xinfu_kannan_info":"出牌阶段限X次,你可以与一名本回合内未成为过〖戡难〗目标的角色拼点。若你赢,你使用的下一张【杀】的伤害值基数+1,且你本回合内不能再发动〖戡难〗。若你没赢,其使用的下一张【杀】的伤害值基数+1。(X为你的体力值)。",
"kannan_eff":"戡难",
diff --git a/character/yijiang.js b/character/yijiang.js
index c530d133a..0a6eac2b8 100755
--- a/character/yijiang.js
+++ b/character/yijiang.js
@@ -4595,10 +4595,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
popup:false,
onremove:true,
filter:function(event,player){
- return typeof player.storage.fumian_draw=='number';
- },
- filter:function(event,player){
- return !event.numFixed;
+ return !event.numFixed&&typeof player.storage.fumian_draw=='number';
},
content:function(){
trigger.num+=player.storage.fumian_draw;
@@ -13027,7 +13024,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiansix:{},
xiansi2:{
enable:'chooseToUse',
- audio:true,
+ audio:2,
audioname:['re_liufeng'],
viewAs:{name:'sha',isCard:true},
filter:function(event,player){
@@ -13095,7 +13092,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
"step 3"
if(event.directresult||result.bool){
- player.logSkill('xiansi2',event.target);
+ player.logSkill('xiansi2_log',event.target);
+ game.trySkillAudio('xiansi2',event.target,true);
var links=event.directresult||result.links;
target.loseToDiscardpile(links);
}
@@ -13104,7 +13102,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
order:function(){
return get.order({name:'sha'})+0.05;
},
- }
+ },
+ subSkill:{log:{}}
},
shibei:{
trigger:{player:'damageEnd'},
@@ -13532,7 +13531,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangyi:['re_zhangyi','zhangyi'],
quancong:['old_quancong','re_quancong','xin_quancong','quancong'],
sunxiu:['re_sunxiu','xin_sunxiu','sunxiu'],
- zhuzhi:['zhuzhi','xin_zhuzhi','old_zhuzhi'],
+ zhuzhi:['re_zhuzhi','zhuzhi','xin_zhuzhi','old_zhuzhi'],
liuyu:['dc_liuyu','liuyu','ol_liuyu'],
zhangrang:['zhangrang','ol_zhangrang','junk_zhangrang'],
jikang:['re_jikang','jikang'],
@@ -13814,9 +13813,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinsidi2:'司敌',
xinsidi_info:'其他角色出牌阶段开始时,你可以弃置一张与你装备区里的牌颜色相同的非基本牌,然后该角色于此阶段内不能使用和打出与此牌颜色相同的牌。此阶段结束时,若其此阶段没有使用【杀】,视为你对其使用了【杀】。',
dangxian:'当先',
- dangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。',
+ dangxian_info:'锁定技,回合开始时,你执行一个额外的出牌阶段。',
xindangxian:'当先',
- xindangxian_info:'锁定技,准备阶段,你执行一个额外的出牌阶段。此阶段开始时,你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。',
+ xindangxian_info:'锁定技,回合开始时,你执行一个额外的出牌阶段。此阶段开始时,你失去1点体力并从牌堆/弃牌堆中获得一张【杀】(若你已发动过〖伏枥〗,则可以不发动此效果)。',
longyin:'龙吟',
longyin_info:'当一名角色于其出牌阶段内使用【杀】时,你可弃置一张牌令此【杀】不计入出牌阶段使用次数,若此【杀】为红色,你摸一张牌。',
zhongyong:'忠勇',
@@ -14059,7 +14058,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zili_info:'觉醒技,准备阶段开始时,若“权”的数量不小于3,你减1点体力上限,然后选择一项:1、回复1点体力;2、摸两张牌。然后你获得技能“排异”。',
quanji_info:'当你受到1点伤害后,你可以摸一张牌,然后将一张手牌置于武将牌上,称为“权”;你的手牌上限+X(X为“权”的数量)。',
xianzhou_info:'限定技。出牌阶段,你可以将装备区内的所有牌交给一名其他角色,然后该角色选择一项:令你回复X点体力;或对其攻击范围内的X名角色各造成1点伤害(X为你以此法交给该角色的牌的数量)。',
- qieting_info:'其他角色的结束阶段,若其未于此回合内使用过指定其他角色为目标的牌,你可以选择一项:将其装备区里的一张牌移动至你装备区里的相应位置;或摸一张牌。',
+ qieting_info:'其他角色的回合结束时,若其未于此回合内使用过指定其他角色为目标的牌,你可以选择一项:将其装备区里的一张牌移动至你装备区里的相应位置;或摸一张牌。',
zhuikong_info:'其他角色的准备阶段,若你已受伤,你可以与该角色拼点。若你赢,该角色本回合使用的牌不能指定除该角色外的角色为目标。若你没赢,其本回合至你的距离视为1。',
oldzhuikong_info:'其他角色的准备阶段,若你已受伤,你可以与该角色拼点。若你赢,该角色跳过本回合的出牌阶段。若你没赢,其本回合至你的距离视为1。',
qiuyuan_info:'当你成为【杀】的目标时,你可以令一名其他角色选择一项:①、交给你一张【闪】;②、成为此【杀】的额外目标。',
diff --git a/game/asset.js b/game/asset.js
index 10f5c1788..90a47be14 100644
--- a/game/asset.js
+++ b/game/asset.js
@@ -1,5 +1,5 @@
window.noname_asset_list=[
- 'v1.9.121',
+ 'v1.9.122',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@@ -7605,6 +7605,31 @@ window.noname_asset_list=[
'image/character/zumao.jpg',
'image/character/zuoci.jpg',
'image/character/zuofen.jpg',
+ 'image/character/jsrg_caocao.jpg',
+ 'image/character/jsrg_dongbai.jpg',
+ 'image/character/jsrg_hejin.jpg',
+ 'image/character/jsrg_huangfusong.jpg',
+ 'image/character/jsrg_kongrong.jpg',
+ 'image/character/jsrg_liubei.jpg',
+ 'image/character/jsrg_liuhong.jpg',
+ 'image/character/jsrg_liuyan.jpg',
+ 'image/character/jsrg_nanhualaoxian.jpg',
+ 'image/character/jsrg_qiaoxuan.jpg',
+ 'image/character/jsrg_sunjian.jpg',
+ 'image/character/jsrg_wangyun.jpg',
+ 'image/character/jsrg_xushao.jpg',
+ 'image/character/jsrg_yangbiao.jpg',
+ 'image/character/jsrg_zhujun.jpg',
+ 'image/character/luoxian.jpg',
+ 'image/character/ol_huban.jpg',
+ 'image/character/re_zhuzhi.jpg',
+ 'image/character/sb_chengong.jpg',
+ 'image/character/sb_diaochan.jpg',
+ 'image/character/sb_pangtong.jpg',
+ 'image/character/sb_yuanshao.jpg',
+ 'image/character/std_panfeng.jpg',
+ 'image/character/sunhong.jpg',
+ 'image/character/yanghong.jpg',
'image/emotion/shibing_emotion/1.gif',
'image/emotion/shibing_emotion/2.gif',
diff --git a/game/game.js b/game/game.js
index f58e20a24..7b7071de9 100644
--- a/game/game.js
+++ b/game/game.js
@@ -2,7 +2,7 @@
(function(){
if(!localStorage.getItem('noname_alerted')){
localStorage.setItem('noname_alerted',true);
- alert('无名杀官方发布地址仅有GitHub仓库!\n其他所有的所谓“无名杀”社群(包括但不限于绝大多数“官方”QQ群、QQ频道等)均为粉丝自发组织,与无名杀官方无关!');
+ alert('无名杀官方发布地址仅有GitHub仓库!\n其他所有的所谓“无名杀”社群(包括但不限于绝大多数“官方”QQ群、QQ频道等)均为玩家自发组织,与无名杀官方无关!');
}
var _status={
paused:false,
@@ -536,6 +536,10 @@
},
unfrequent:true,
},
+ fuck_sojson:{
+ name:'检测加密扩展',
+ init:false,
+ },
errstop:{
name:'出错时停止游戏',
init:false,
@@ -6692,7 +6696,7 @@
globalId:0,
},
help:{
- '关于游戏':'关于无名杀
- 无名杀官方发布地址仅有GitHub仓库!
点击前往Github仓库
- 其他所有的所谓“无名杀”社群(包括但不限于绝大多数“官方”QQ群、QQ频道等)均为粉丝自发组织,与无名杀官方无关!',
+ '关于游戏':'
关于无名杀
- 无名杀官方发布地址仅有GitHub仓库!
点击前往Github仓库
- 无名杀基于GPLv3开源协议。
点击查看GPLv3协议
- 其他所有的所谓“无名杀”社群(包括但不限于绝大多数“官方”QQ群、QQ频道等)均为粉丝自发组织,与无名杀官方无关!',
'游戏操作':'
- 长按/鼠标悬停/右键单击显示信息。
- 触屏模式中,双指点击切换暂停;下划显示菜单,上划切换托管。
- 键盘快捷键
'+
' - 编辑牌堆
在卡牌包中修改牌堆后,将自动创建一个临时牌堆,在所有模式中共用,当保存当前牌堆后,临时牌堆被清除。每个模式可设置不同的已保存牌堆,设置的牌堆优先级大于临时牌堆。
',
'游戏命令':'变量名
- 场上角色
game.players - 阵亡角色
game.dead'+
@@ -7986,9 +7990,22 @@
},onerror);
},onerror);
};
+ game.readFileAsText=function(filename,callback,onerror){
+ window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
+ entry.getFile(filename,{},function(fileEntry){
+ fileEntry.file(function(fileToLoad){
+ var fileReader = new FileReader();
+ fileReader.onload = function(e){
+ callback(e.target.result);
+ };
+ fileReader.readAsText(fileToLoad, "UTF-8");
+ },onerror);
+ },onerror);
+ },onerror);
+ };
game.writeFile=function(data,path,name,callback){
- game.ensureDirectory(path,function(){});
- if(Object.prototype.toString.call(data)=='[object File]'){
+ game.ensureDirectory(path,function(){
+ if(Object.prototype.toString.call(data)=='[object File]'){
var fileReader = new FileReader();
fileReader.onload = function(e){
game.writeFile(e.target.result,path,name,callback);
@@ -8005,6 +8022,7 @@
});
});
}
+ });
};
game.removeFile=function(dir,callback){
window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
@@ -8174,8 +8192,18 @@
}
});
};
+ game.readFileAsText=function(filename,callback,onerror){
+ lib.node.fs.readFile(__dirname+'/'+filename,'utf-8',function(err,data){
+ if(err){
+ onerror(err);
+ }
+ else{
+ callback(data);
+ }
+ });
+ };
game.writeFile=function(data,path,name,callback){
- game.ensureDirectory(path,function(){});
+ game.ensureDirectory(path,function(){
if(Object.prototype.toString.call(data)=='[object File]'){
var fileReader = new FileReader();
fileReader.onload = function(e){
@@ -8189,6 +8217,7 @@
lib.node.fs.writeFile(__dirname+'/'+path+'/'+name,zip.files.i.asNodeBuffer(),null,callback);
});
}
+ });
};
game.removeFile=function(filename,callback){
lib.node.fs.unlink(__dirname+'/'+filename,callback||function(){});
@@ -9270,15 +9299,29 @@
}
}
else{
- var script=document.createElement('script');
+ var script_src;
if(!file){
- script.src = path;
+ script_src = path;
}
else{
- script.src = path+'/'+file+".js";
+ script_src = path+'/'+file+".js";
}
if(path.indexOf('http')==0){
- script.src+='?rand='+get.id();
+ script_src+='?rand='+get.id();
+ }
+ else{
+ if(game.readFile&&lib.config.fuck_sojson&&script_src.includes('extension')!=-1&&script_src.indexOf(lib.assetURL)==0){
+ var path_to_read=script_src.slice(lib.assetURL.length);
+ game.readFileAsText(path_to_read,function(result){
+ if(result.includes('sojson')||result.includes('jsjiami')||result.includes('var _0x')) alert('检测到您安装了使用免费版sojson进行加密的扩展。请谨慎使用这些扩展,避免游戏数据遭到破坏。\n扩展文件:'+path_to_read);
+ },function(){
+
+ });
+ }
+ }
+ var script=document.createElement('script');
+ script.src=script_src;
+ if(path.indexOf('http')==0){
script.addEventListener('load',function(){
script.remove();
});
@@ -10440,6 +10483,103 @@
emptyEvent:function(){
event.trigger(event.name);
},
+ chooseToDebate:function(){
+ 'step 0'
+ event.targets=event.list.filter(function(i){
+ return i.countCards('h')>0;
+ });
+ if(!event.targets.length) event.result={bool:false};
+ else{
+ var next=player.chooseCardOL(event.targets,get.translation(player)+'发起了议事,请选择展示的手牌',true).set('type','debate').set('source',player).set('ai',event.ai||function(card){
+ return Math.random();
+ }).set('aiCard',event.aiCard||function(target){
+ var hs=target.getCards('h');
+ return {bool:true,cards:[hs.randomGet()]};
+ });
+ next._args.remove('glow_result');
+ }
+ 'step 1'
+ var red=[],black=[];
+ event.videoId=lib.status.videoId++;
+ for(var i=0;i红色,展示了',red.map(function(i){
+ return i[1];
+ }));
+ }
+ else game.log('#b无人','意见为红色');
+ if(black.length){
+ game.log(black.map(function(i){
+ return i[0];
+ }),'意见为','#g黑色',',展示了',black.map(function(i){
+ return i[1];
+ }));
+ }
+ else game.log('#b无人','意见为','#g黑色');
+ game.broadcastAll(function(name,id,redArgs,blackArgs){
+ var dialog=ui.create.dialog(name+'发起了议事','hidden','forcebutton');
+ dialog.videoId=id;
+ dialog.classList.add('scroll1');
+ dialog.classList.add('scroll2');
+ dialog.classList.add('fullwidth');
+ dialog.buttonss=[];
+
+ var list=['意见为红色的角色','意见为黑色的角色']
+ for(var i=0;i'+list[i]+'');
+ var buttons=ui.create.div('.buttons',dialog.content);
+ dialog.buttonss.push(buttons);
+ buttons.classList.add('popup');
+ buttons.classList.add('guanxing');
+ }
+ var func=function(target){
+ if(target._tempTranslate) return target._tempTranslate;
+ var name=target.name;
+ if(lib.translate[name+'_ab']) return lib.translate[name+'_ab'];
+ return get.translation(name);
+ };
+ for(var i=0;ievent.black.length) opinion='red';
+ else if(event.red.length红色':'#g黑色');
+ else game.log(player,'本次发起的议事无结果');
+ event.result={
+ bool:true,
+ opinion:opinion,
+ red:event.red,
+ black:event.black,
+ targets:event.targets
+ }
+ 'step 3'
+ if(event.callback){
+ var next=game.createEvent('debateCallback',false);
+ next.player=player;
+ next.debateResult=get.copy(event.result);
+ next.setContent(event.callback);
+ }
+ },
delay:function(){
game[event.name].apply(game,event._args)
},
@@ -13182,6 +13322,7 @@
if(shown.length>0) player.$give(shown,i[0]);
if(hidden.length>0) player.$giveAuto(hidden,i[0]);
}
+ break;
default:
event.finish();
}
@@ -14284,7 +14425,7 @@
else if(event.prompt){
event.dialog=ui.create.dialog(event.prompt);
if(event.prompt2){
- event.dialog.addText(event.prompt2,event.prompt2.length<=20||event.centerprompt2);
+ event.dialog.addText(event.prompt2,Boolean(event.prompt2.length<=20||event.centerprompt2));
}
}
}
@@ -17450,6 +17591,21 @@
},
player:{
//新函数
+ chooseToDebate:function(){
+ var next=game.createEvent('chooseToDebate');
+ next.player=this;
+ next._args=[];
+ for(var i=0;i',importExtension);
+ ui.create.div('.config','修改下载地址',page,function(){
+ alert('您可以在“设置→通用→获取扩展地址”中,修改下载扩展时所采用的地址。')
+ })
var extensionURL;
var source=lib.config.extension_sources,index=lib.config.extension_source;
@@ -46644,6 +46811,14 @@
node.removeEventListener('click',ui.click.resume);
},500);
}
+ if(!localStorage.getItem('gplv3_alerted')){
+ if(confirm('无名杀是一款基于GPLv3协议的开源软件!\n你可以在遵守GPLv3协议的基础上任意使用,修改并转发《无名杀》,以及所有基于《无名杀》开发的拓展。\n点击“确定”即代表您认可并接受GPLv3协议↓️\nhttps://www.gnu.org/licenses/gpl-3.0.html')){
+ localStorage.setItem('gplv3_alerted',true);
+ }
+ else{
+ game.exit();
+ }
+ }
},
system:function(str,func,right,before){
var parent=right?ui.system2:ui.system1;
@@ -50717,7 +50892,7 @@
}
},
auto:function(){
- if(ui.auto.classList.contains('hidden')&&arguments[0]!=='forced') return;
+ if(!ui||!ui.auto||ui.auto.classList.contains('hidden')&&arguments[0]!=='forced') return;
if(_status.paused2) return;
ui.click.shortcut(false);
if(!_status.auto){
@@ -51563,6 +51738,29 @@
},
};
var get={
+ skillCategoriesOf:function(skill,player){
+ var list=[],info=get.info(skill);
+ if(!info) return list;
+ if(get.is.locked(skill,player)) list.add('锁定技');
+ if(info.zhuSkill) list.add('主公技');
+ if(info.limited) list.add('限定技');
+ if(info.juexingji||info.limited) list.add('觉醒技');
+ if(info.limited) list.add('限定技');
+ if(info.zhuanhuanji) list.add('转换技');
+ if(info.hiddenSkill) list.add('隐匿技');
+ if(info.clanSkill) list.add('宗族技');
+ if(info.groupSkill) list.add('势力技');
+ if(info.dutySkill) list.add('使命技');
+ if(info.chargeSkill) list.add('蓄力技');
+ if(info.zhenfa) list.add('阵法技');
+ if(info.mainSkill) list.add('主将技');
+ if(info.viceSkill) list.add('副将技');
+ if(info.lordSkill) list.add('君主技');
+ if(info.chargingSkill) list.add('蓄能技');
+ if(info.charlotte) list.add('Charlotte');
+ if(info.categories) list.addArray(info.categories(skill,player));
+ return list;
+ },
numOf:function(obj,item){
var num=0;
for(var i=0;i0&&target.hujia>0) return 0;
+ if(eff>0&&target.hujia>0) return eff/1.3;
return eff;
},
recoverEffect:function(target,player,viewer){
diff --git a/game/source.js b/game/source.js
index e78e78db9..44783112a 100644
--- a/game/source.js
+++ b/game/source.js
@@ -1,4 +1,5 @@
window.noname_source_list=[
+ 'LICENSE',
'card/extra.js',
'card/gujian.js',
'card/guozhan.js',
diff --git a/game/update.js b/game/update.js
index 41f9cab8d..7e533c0ad 100644
--- a/game/update.js
+++ b/game/update.js
@@ -1,14 +1,17 @@
window.noname_update={
- version:'1.9.121',
- update:'1.9.120.3.1',
+ version:'1.9.122',
+ update:'1.9.121',
changeLog:[
- '族吴匡、界颜良文丑、王匡',
- '谢灵毓、笮融、张闿',
- '削弱版段煨、李典',
+ '增大GPL协议的醒目性',
+ '整合@copcap 编写的代码',
+ '线下武将包《江山如故·起》(暂时不含许劭)',
+ 'OL罗宪、胡班、孙弘;十周年界朱治、杨弘',
+ '谋陈宫、貂蝉、庞统、袁绍;线下标潘凤',
'其他技能调整和bug修复',
],
files:[
- 'card/extra.js',
+ 'LICENSE',
+ //'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
//'card/gwent.js',
@@ -24,7 +27,7 @@ window.noname_update={
//'card/zhulu.js',
'character/clan.js',
'character/diy.js',
- //'character/extra.js',
+ 'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
@@ -44,9 +47,9 @@ window.noname_update={
'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
- //'character/xinghuoliaoyuan.js',
+ 'character/xinghuoliaoyuan.js',
'character/yijiang.js',
- 'character/yingbian.js',
+ //'character/yingbian.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'font/suits.ttf',
@@ -62,7 +65,7 @@ window.noname_update={
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
- //'mode/guozhan.js',
+ 'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',
diff --git a/image/character/jsrg_caocao.jpg b/image/character/jsrg_caocao.jpg
new file mode 100644
index 000000000..f4159c400
Binary files /dev/null and b/image/character/jsrg_caocao.jpg differ
diff --git a/image/character/jsrg_dongbai.jpg b/image/character/jsrg_dongbai.jpg
new file mode 100644
index 000000000..944d99895
Binary files /dev/null and b/image/character/jsrg_dongbai.jpg differ
diff --git a/image/character/jsrg_hejin.jpg b/image/character/jsrg_hejin.jpg
new file mode 100644
index 000000000..c4c947c05
Binary files /dev/null and b/image/character/jsrg_hejin.jpg differ
diff --git a/image/character/jsrg_huangfusong.jpg b/image/character/jsrg_huangfusong.jpg
new file mode 100644
index 000000000..4510678e7
Binary files /dev/null and b/image/character/jsrg_huangfusong.jpg differ
diff --git a/image/character/jsrg_kongrong.jpg b/image/character/jsrg_kongrong.jpg
new file mode 100644
index 000000000..f770f1473
Binary files /dev/null and b/image/character/jsrg_kongrong.jpg differ
diff --git a/image/character/jsrg_liubei.jpg b/image/character/jsrg_liubei.jpg
new file mode 100644
index 000000000..b51bfd049
Binary files /dev/null and b/image/character/jsrg_liubei.jpg differ
diff --git a/image/character/jsrg_liuhong.jpg b/image/character/jsrg_liuhong.jpg
new file mode 100644
index 000000000..7d479a79a
Binary files /dev/null and b/image/character/jsrg_liuhong.jpg differ
diff --git a/image/character/jsrg_liuyan.jpg b/image/character/jsrg_liuyan.jpg
new file mode 100644
index 000000000..f6438a7b2
Binary files /dev/null and b/image/character/jsrg_liuyan.jpg differ
diff --git a/image/character/jsrg_nanhualaoxian.jpg b/image/character/jsrg_nanhualaoxian.jpg
new file mode 100644
index 000000000..6d0065663
Binary files /dev/null and b/image/character/jsrg_nanhualaoxian.jpg differ
diff --git a/image/character/jsrg_qiaoxuan.jpg b/image/character/jsrg_qiaoxuan.jpg
new file mode 100644
index 000000000..ba6f81084
Binary files /dev/null and b/image/character/jsrg_qiaoxuan.jpg differ
diff --git a/image/character/jsrg_sunjian.jpg b/image/character/jsrg_sunjian.jpg
new file mode 100644
index 000000000..7df76c833
Binary files /dev/null and b/image/character/jsrg_sunjian.jpg differ
diff --git a/image/character/jsrg_wangyun.jpg b/image/character/jsrg_wangyun.jpg
new file mode 100644
index 000000000..8c4cc2881
Binary files /dev/null and b/image/character/jsrg_wangyun.jpg differ
diff --git a/image/character/jsrg_xushao.jpg b/image/character/jsrg_xushao.jpg
new file mode 100644
index 000000000..193aeec15
Binary files /dev/null and b/image/character/jsrg_xushao.jpg differ
diff --git a/image/character/jsrg_yangbiao.jpg b/image/character/jsrg_yangbiao.jpg
new file mode 100644
index 000000000..08ece597d
Binary files /dev/null and b/image/character/jsrg_yangbiao.jpg differ
diff --git a/image/character/jsrg_zhujun.jpg b/image/character/jsrg_zhujun.jpg
new file mode 100644
index 000000000..3db4a336f
Binary files /dev/null and b/image/character/jsrg_zhujun.jpg differ
diff --git a/image/character/luoxian.jpg b/image/character/luoxian.jpg
new file mode 100644
index 000000000..21f83c887
Binary files /dev/null and b/image/character/luoxian.jpg differ
diff --git a/image/character/ol_huban.jpg b/image/character/ol_huban.jpg
new file mode 100644
index 000000000..c99a249b7
Binary files /dev/null and b/image/character/ol_huban.jpg differ
diff --git a/image/character/re_zhuzhi.jpg b/image/character/re_zhuzhi.jpg
new file mode 100644
index 000000000..feebc82c1
Binary files /dev/null and b/image/character/re_zhuzhi.jpg differ
diff --git a/image/character/sb_chengong.jpg b/image/character/sb_chengong.jpg
new file mode 100644
index 000000000..d2f2d3842
Binary files /dev/null and b/image/character/sb_chengong.jpg differ
diff --git a/image/character/sb_diaochan.jpg b/image/character/sb_diaochan.jpg
new file mode 100644
index 000000000..0649c6ba0
Binary files /dev/null and b/image/character/sb_diaochan.jpg differ
diff --git a/image/character/sb_pangtong.jpg b/image/character/sb_pangtong.jpg
new file mode 100644
index 000000000..8857b54db
Binary files /dev/null and b/image/character/sb_pangtong.jpg differ
diff --git a/image/character/sb_yuanshao.jpg b/image/character/sb_yuanshao.jpg
new file mode 100644
index 000000000..1f8dc1e3b
Binary files /dev/null and b/image/character/sb_yuanshao.jpg differ
diff --git a/image/character/std_panfeng.jpg b/image/character/std_panfeng.jpg
new file mode 100644
index 000000000..5c70f8904
Binary files /dev/null and b/image/character/std_panfeng.jpg differ
diff --git a/image/character/sunhong.jpg b/image/character/sunhong.jpg
new file mode 100644
index 000000000..bb1decb27
Binary files /dev/null and b/image/character/sunhong.jpg differ
diff --git a/image/character/yanghong.jpg b/image/character/yanghong.jpg
new file mode 100644
index 000000000..cbbe0f6aa
Binary files /dev/null and b/image/character/yanghong.jpg differ
diff --git a/mode/guozhan.js b/mode/guozhan.js
index bde4521f0..d541135b7 100644
--- a/mode/guozhan.js
+++ b/mode/guozhan.js
@@ -1250,7 +1250,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gzzhenxi:{
audio:'twzhenxi',
trigger:{player:'useCardToPlayered'},
- logTarget:'target',
filter:function(event,player){
if(event.card.name!='sha') return false;
if(event.target.countCards('he')||player.hasCard(function(card){
@@ -1266,49 +1265,55 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
direct:true,
content:function(){
'step 0'
+ var target=trigger.target;
+ event.target=target;
var list=[],choiceList=[
- '弃置'+get.translation(trigger.target)+'一张牌',
- '将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(trigger.target)+'使用',
+ '弃置'+get.translation(target)+'一张牌',
+ '将一张♦非锦囊牌当做【乐不思蜀】或♣非锦囊牌当做【兵粮寸断】对'+get.translation(target)+'使用',
'背水!若其有暗置的武将牌且你的武将牌均明置,你依次执行上述两项'
];
- if(trigger.target.countDiscardableCards(player,'he')) list.push('选项一');
+ if(target.countDiscardableCards(player,'he')) list.push('选项一');
else choiceList[0]=''+choiceList[0]+'';
if(player.countCards('he',function(card){
- return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target);
+ return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target);
})||(player.countCards('he',function(card){
- return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target);
+ return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target);
}))) list.push('选项二');
else choiceList[1]=''+choiceList[1]+'';
- if(trigger.target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!');
+ if(target.isUnseen(2)&&!player.isUnseen(2)) list.push('背水!');
else choiceList[2]=''+choiceList[2]+'';
- player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',trigger.target)).set('choiceList',choiceList).set('ai',function(){
+ player.chooseControl(list,'cancel2').set('prompt',get.prompt('gzzhenxi',target)).set('choiceList',choiceList).set('ai',function(){
var player=_status.event.player,trigger=_status.event.getTrigger(),list=_status.event.list;
if(get.attitude(player,trigger.target)>0) return 'cancel2';
if(list.contains('背水!')) return '背水!';
if(list.contains('选项二')) return '选项二';
return '选项一';
- }).set('list',list);
+ }).set('list',list).set('hiddenSkill','gzzhenxi');
'step 1'
if(result.control=='cancel2'){
event.finish();
return;
}
- if(result.control!='选项二'&&trigger.target.countDiscardableCards(player,'he')) player.discardPlayerCard(trigger.target,'he',true);
- if(result.control!='选项一'&&player.countCards('he',function(card){
- return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),trigger.target);
- })||(player.countCards('he',function(card){
- return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),trigger.target,false);
- }))){
+ player.logSkill('gzzhenxi',target);
+ event.choice=result.control;
+ if(event.choice!='选项二'&&target.countDiscardableCards(player,'he')) player.discardPlayerCard(target,'he',true);
+ 'step 2'
+ if(event.choice!='选项一'&&!player.isUnseen(2)&&target.isUnseen(2)&&
+ player.hasCard(function(card){
+ return get.suit(card)=='diamond'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'lebu'},[card]),target);
+ },'he')||(player.hasCard(function(card){
+ return get.suit(card)=='club'&&get.type2(card)!='trick'&&player.canUse(get.autoViewAs({name:'bingliang'},[card]),target,false);
+ },'he'))){
var next=game.createEvent('gzzhenxi_use');
next.player=player;
- next.target=trigger.target;
+ next.target=target;
next.setContent(lib.skill.gzzhenxi.contentx);
}
},
ai:{unequip_ai:true},
contentx:function(){
'step 0'
- player.chooseCardTarget({
+ player.chooseCard({
position:'hes',
forced:true,
prompt:'震袭',
@@ -1316,15 +1321,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
filterCard:function(card,player){
if(get.itemtype(card)!='card'||get.type2(card)=='trick'||!['diamond','club'].contains(get.suit(card))) return false;
var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'};
- if(!player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().player,false)) return false;
- return lib.filter.filterCard.apply(this,arguments);
- },
- filterTarget:function(card,player,target){
- var source=_status.event.target;
- if(target!=source&&!ui.selected.targets.contains(source)) return false;
- var cardx={name:get.suit(card)=='diamond'?'lebu':'bingliang'};
- card=get.autoViewAs(cardx,[card]);
- return lib.filter.filterTarget.apply(this,arguments);
+ return player.canUse(get.autoViewAs(cardx,[card]),_status.event.getParent().target,false);
},
});
'step 1'
@@ -1428,9 +1425,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return get.attitude(player,event.player)<0;
},
usable:1,
+ logTarget:'player',
content:function(){
'step 0'
- if(trigger.player.hasSex('female')&&trigger.player.countCards('e')) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){
+ var target=trigger.player;
+ event.target=target;
+ if(target.hasSex('female')&&target.countCards('e')>0) player.chooseToDiscard('he','追妒:是否弃置一张牌并令其执行两项?').set('ai',function(card){
return 8-get.value(card);
});
else event.goto(2);
@@ -1440,8 +1440,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
event.goto(3);
}
'step 2'
- if(trigger.player.countCards('e')>0){
- trigger.player.chooseControl().set('prompt','追妒:请选择一项').set('choiceList',[
+ if(target.countCards('e')>0){
+ target.chooseControl().set('prompt','追妒:请选择一项').set('choiceList',[
'令'+get.translation(trigger.player)+'此次对你造成的伤害+1',
'弃置装备区里的所有牌',
]).set('ai',function(){
@@ -1449,13 +1449,13 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(player.hp<=2) return 1;
if(get.value(cards)<=7) return 1;
return 0;
- }).set('list',list);
+ });
}
else event._result={control:'选项一'};
'step 3'
- player.line(trigger.player);
+ player.line(target);
if(result.control!='选项二') trigger.num++;
- if(result.control!='选项一') trigger.player.chooseToDiscard(trigger.player.countCards('e'),true,'e');
+ if(result.control!='选项一') target.chooseToDiscard(target.countCards('e'),true,'e');
},
},
gzshigong:{
@@ -7309,6 +7309,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
forceunique:true,
group:'wuziliangjiangdao',
derivation:'wuziliangjiangdao',
+ lordSkill:true,
global:'g_jianan',
},
g_jianan:{
@@ -10042,6 +10043,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
jiahe:{
unique:true,
forceunique:true,
+ lordSkill:true,
audio:2,
derivation:'yuanjiangfenghuotu',
mark:true,
@@ -10848,6 +10850,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
derivation:'huangjintianbingfu',
unique:true,
forceunique:true,
+ lordSkill:true,
trigger:{player:'phaseZhunbeiBegin'},
forced:true,
filter:function(event,player){
@@ -11097,6 +11100,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
group:'wuhujiangdaqi',
derivation:'wuhujiangdaqi',
mark:true,
+ lordSkill:true,
},
wuhujiangdaqi:{
unique:true,