v1.9.122.2

v1.9.122.2
This commit is contained in:
Spmario233 2023-06-05 20:41:27 +08:00 committed by GitHub
commit 73272251af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 1398 additions and 179 deletions

View File

@ -75,6 +75,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
db_key_liyingxia:['female','shu',3,['liyingxia_sanli','liyingxia_zhenjun','liyingxia_wumai'],['doublegroup:shu:key']],
key_erika:['female','key','3/3/2',['erika_shisong','erika_yousheng']],
key_satomi:['female','key',3,['satomi_luodao','satomi_daohai']],
key_iriya:['female','key',3,['iriya_yinji','iriya_haozhi'],['unseen']],
key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']],
key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']],
@ -572,9 +573,309 @@ game.import('character',function(lib,game,ui,get,ai,_status){
iriya_haozhi:{
enable:'phaseUse',
filterCard:true,
selectCard:[1,Infinity],
selectCard:[2,Infinity],
promptfunc:()=>'出牌阶段,你可以按照斗地主牌型弃置至少两张牌,且其他角色可以依次对其进行一轮响应。最后一名进行响应的角色可以根据对应牌型执行对应效果。',
position:'he',
getType:function(cards,player){
var numbers=cards.map(card=>get.number(card,player));
var nums=cards.map(card=>{
var num=get.number(card,player);
if(num<=2) return num+13;
return num;
}).sort((a,b)=>(a-b)),len=nums.length;
if(len==1) return ['单张',nums[0],1];
if(len==2) return nums[1]==nums[0]?['对子',nums[0],1]:null;
var map={};
for(var i=0;i<len;i++){
var count=get.numOf(nums,nums[i]);
if(!map[count]) map[count]=[];
map[count].push(nums[i]);
i+=(count-1);
}
if(len==3){
if(map[3]) return ['三张',nums[0],1];
return null;
}
if(map[len]){
return ['炸弹',nums[0],length];
}
if(map[1]){
if(map[1].length==len&&len>4){
for(var i=0;i<map[1].length-1;i++){
if(map[1][i+1]-map[1][i]!=1) return null;
if(map[1][i+1]==15) return null;
}
return ['单顺',nums[0],len];
}
else if(map[1].length==2&&map[4]&&len==6){
return ['四带二',map[4][0],1]
}
else if(map[3]&&map[1].length==map[3].length&&len==map[1].length*4){
if(map[3].length==1) return ['三带一',map[3][0],1];
for(var i=0;i<map[3].length-1;i++){
if(map[3][i+1]-map[3][i]!=1) return null;
}
return ['单带飞机',map[3][0],map[3].length];
}
return null;
}
if(map[2]){
if(map[2].length*2==len&&len>5){
for(var i=0;i<map[2].length-1;i++){
if(map[2][i+1]-map[2][i]!=1) return null;
if(map[2][i+1]==15) return null;
}
return ['双顺',nums[0],len];
}
else if(map[4]&&len==6){
return ['四带二',map[4][0],1]
}
else if(map[3]&&map[2].length==map[3].length&&len==map[2].length*5){
if(map[3].length==1) return ['三带二',map[3][0],1];
for(var i=0;i<map[3].length-1;i++){
if(map[3][i+1]-map[3][i]!=1) return null;
if(map[3][i+1]==15) return null;
}
return ['双带飞机',map[3][0],map[3].length];
}
return null;
}
if(map[3]){
if(map[3].length*3==len&&len>5){
for(var i=0;i<map[3].length-1;i++){
if(map[3][i+1]-map[3][i]!=1) return null;
if(map[3][i+1]==15) return null;
}
return ['三顺',nums[0],len];
}
return null;
}
return null;
},
filterOk:function(){
return Array.isArray(lib.skill.iriya_haozhi.getType(ui.selected.cards,_status.event.player));
},
content:function(){
'step 0'
var players=game.filterPlayer().sortBySeat(player.getNext());
event.players=players;
event.current=player;
event.current_type=lib.skill.iriya_haozhi.getType(cards,player);
event.current_cards=cards.slice(0);
if(!event.current_type) event.finish();
'step 1'
var target=event.players.shift();
if((target!=player||event.current!=player)&&target.isIn()&&target.countCards('h')>=Math.min(cards.length,4)){
event.target=target;
target.addTempSkill('iriya_haozhi_temp',{global:['discardBefore','chooseToDiscardEnd','phaseAfter']});
var trans=get.translation(event.current);
var cardsn=function(cards,player){
var getn=(card,player)=>{
var num=get.number(card,player);
if(num<=2) return num+13;
return num;
};
cards.sort(function(a,b){
var numa=getn(a,player),numb=getn(b,player);
if(numa!=numb) return numa-numb;
return lib.suit.indexOf(get.suit(a,player)-get.suit(b,player));
});
var str='';
for(var i of cards){
str+=',';
str+=get.strNumber(get.number(i,player));
str+=get.translation(get.suit(i,player));
}
return str.slice(1);
}(event.current_cards,event.current);
var next=target.chooseToDiscard(
'是否响应'+trans+'的'+get.translation(event.current_type[0])+'',
trans+'的牌组为'+cardsn+'。您此时可以点击“整理手牌”,将手牌按点数排序。',[2,Infinity],'he');
next.set('type',event.current_type);
next.set('filterOk',function(){
var type=lib.skill.iriya_haozhi.getType(ui.selected.cards,_status.event.player);
if(!type) return false;
var ptype=_status.event.type;
if(type[0]=='炸弹'){
if(ptype[0]=='炸弹'){
if(type[2]>ptype[2]) return true;
return type[1]>ptype[1]&&type[2]==ptype[2];
}
return true;
}
return type[0]==ptype[0]&&type[2]==ptype[2]&&type[1]>ptype[1];
});
}
else if(event.players.length>0) event.redo();
else event.goto(3);
'step 2'
if(result.bool){
event.current=target;
event.current_type=lib.skill.iriya_haozhi.getType(result.cards.slice(0),target);
if(!event.current_type) event.finish();
}
if(event.players.length>0) event.goto(1);
'step 3'
var current=event.current,type=0;
if(!current.isIn()) return;
switch(event.current_type[0]){
case '对子':
type=1;break;
case '三张': case '三带一': case '三带二':
type=2;break;
case '单顺':
type=3;break;
case '双顺':
type=4;break;
case '三顺': case '单带飞机': case '双带飞机':
type=5;break;
case '炸弹': case'四带二':
type=6;break;
}
if(type==2){
current.addSkill('iriya_haozhi_extra');
current.addMark('iriya_haozhi_extra',1,false);
}
else if(type>0){
var next=game.createEvent('iriya_haozhi_effect',false);
next.player=current;
next.setContent(lib.skill.iriya_haozhi['content'+type]);
}
},
content1:function(){
'step 0'
player.chooseTarget([1,2],'是否令至多两名角色各摸一张牌?');
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.line(targets);
game.asyncDraw(targets);
game.delayex();
}
},
content3:function(){
'step 0'
player.chooseTarget([1,2],'是否对至多两名其他角色造成1点伤害',lib.filter.notMe);
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.line(targets);
event.targets=targets;
}
'step 2'
var target=targets.shift();
target.damage();
game.delayex();
if(targets.length>0) event.redo();
},
content4:function(){
'step 0'
player.chooseTarget([1,2],'是否弃置至多两名其他角色的各一张牌并造成1点伤害',lib.filter.notMe);
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.line(targets);
event.targets=targets;
}
'step 2'
var target=targets.shift();
player.discardPlayerCard(target,true,'he');
target.damage();
game.delayex();
if(targets.length>0) event.redo();
},
content5:function(){
'step 0'
player.chooseTarget([1,2],'是否令至多两名其他角色翻面弃置其的各一张牌并造成1点伤害',lib.filter.notMe);
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.line(targets);
event.targets=targets;
}
'step 2'
var target=targets.shift();
target.turnOver();
player.discardPlayerCard(target,true,'e',5);
player.discardPlayerCard(target,true,'h');
target.damage();
game.delayex();
if(targets.length>0) event.redo();
},
content6:function(){
'step 0'
player.chooseTarget([1,2],'是否令至多两名其他角色翻面弃置其装备区内的所有牌和一张手牌并造成1点伤害',lib.filter.notMe);
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
player.line(targets);
event.targets=targets;
}
'step 2'
var target=targets.shift();
target.turnOver();
player.discardPlayerCard(target,true,'he');
target.damage();
game.delayex();
if(targets.length>0) event.redo();
},
ai:{sortCardByNum:true},
subSkill:{
extra:{
charlotte:true,
mod:{
targetInRange:()=>true,
cardUsable:()=>Infinity,
},
trigger:{player:'useCard2'},
forced:true,
onremove:true,
content:function(){
'step 0'
var num=player.countMark('iriya_haozhi_extra');
player.removeSkill('iriya_haozhi_extra');
var card=trigger.card;
if(trigger.addCount!==false){
trigger.addCount=false;
var stat=player.getStat().card;
if(stat[card.name]&&stat[card.name]>0) stat[card.name]--;
}
var info=get.info(card);
if(info.allowMultiple==false) event.finish();
if(trigger.targets&&!info.multitarget){
if(game.hasPlayer(function(current){
return !trigger.targets.contains(current)&&lib.filter.targetEnabled2(card,player,current);
})){
var prompt2='为'+get.translation(card)+'增加'+(num>1?'至多':'')+get.cnNumber(num)+'个目标'
player.chooseTarget(get.prompt('iriya_haozhi_extra'),[1,num],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('iriya_haozhi_extra',event.targets);
trigger.targets.addArray(event.targets);
}
},
intro:{content:'使用下一张牌无距离和次数限制,且可以增加#个目标'},
},
temp:{
ai:{sortCardByNum:true},
charlotte:true,
}
},
},
//远野美凪&远野小满
@ -8498,8 +8799,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
discard:false,
line:true,
direct:true,
clearTime:true,
log:false,
delay:false,
lose:false,
prepare:function(cards,player,targets){
@ -17562,6 +17862,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
saya_nodis:'破围',
//〖破围〗不会因为〖铁骑〗无效
inari_baiwei:'摆尾',
inari_baiwei_draw:'摆尾',
inari_baiwei_info:'你可以将一张♦牌当做任意基本牌使用或打出。此牌结算完成后,你摸一张牌。',
//你不能以此法使用【毒】
inari_baiwei_backup:'摆尾',
@ -17848,13 +18149,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
iriya_yinji:'殷极',
iriya_yinji_info:'锁定技。出牌阶段开始时你将手牌摸至17张。你不能直接使用以此法获得的牌。',
iriya_haozhi:'豪掷',
iriya_haozhi_info:'出牌阶段,你可以弃置至少两张牌,然后摸一张牌。根据你以此法弃置的牌,你执行对应的效果。<br>'
+'对子:你额外摸一张牌;'
+'三带:'
+'单顺:'
+'双顺:'
+'飞机:'
+'炸弹',
iriya_haozhi_info:'出牌阶段,你可以按照斗地主牌型弃置至少两张牌,且其他角色可以依次对其进行一轮响应。最后一名进行响应的角色可以根据对应牌型执行对应效果。'
+'对子:其可以令至多两名角色各摸一张牌。'
+'三带:其使用的下一张牌可以多指定一个目标且无距离和次数限制。'
+'单顺:其可以对至多2名其他角色造成1点伤害。'
+'双顺:其可以弃置至多2名其他角色的一张牌并对其造成1点伤害。'
+'三顺/飞机:其可以令至多2名其他角色翻面弃置其的一张牌并对其造成1点伤害。'
+'炸弹/四带二其可以令至多2名其他角色翻面弃置这些角色装备区内的所有牌和一张手牌对这些角色造成1点伤害。',
key_kud:'库特莉亚芙卡',
kud_qiaoshou:'巧手',

View File

@ -3274,6 +3274,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
globalTo:function(from,to,distance){
if(to.countMark('spshidi')%2==1) return distance+1;
},
aiOrder:function(player,card,num){
if(from.countMark('spshidi')%2==0&&card.name=='sha'&&get.color(card)=='black') return num+0.1;
},
},
mark:true,
marktext:'☯',
@ -6016,7 +6019,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xingbu:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
prompt2:'展示牌堆顶的三张牌,并根据其中红色牌的数量,令一名其他角色获得一种效果',
prompt2:'展示牌堆顶的三张牌,并可以根据其中红色牌的数量,令一名其他角色获得一种效果',
check:function(event,player){
return game.hasPlayer(function(current){
return current!=player&&get.attitude(player,current)>0;
@ -6037,7 +6040,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
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){
player.chooseTarget('是否选择一名其他角色获得星卜效果('+get.cnNumber(num)+'张)',lib.filter.notMe).set('ai',function(target){
var player=_status.event.player,num=_status.event.getParent().num;
var att=get.attitude(player,target);
if(num<3) att*=(-1);
@ -11215,17 +11218,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{target:'useCardToTarget'},
direct:true,
filter:function(event,player){
return event.card.name=='sha';
return event.card.name=='sha'&&game.hasPlayer(function(current){
return current!=player&&!event.targets.contains(current)&&lib.filter.targetEnabled(event.card,event.player,current);
});
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('xinqiuyuan'),function(card,player,target){
return target!=player&&!_status.event.targets.contains(target)&&_status.event.playerx.canUse('sha',target,false);
var evt=_status.event.getTrigger();
return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled(evt.card,evt.player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,trigger.player,player)+0.1;
}).set('targets',trigger.targets).set('playerx',trigger.player);
});
"step 1"
if(result.bool){
var target=result.targets[0];
@ -17940,6 +17946,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"shuijing_card_info":"将一名角色装备区内的防具牌移动到另一名角色对应区域。若场上有存活的司马徽则改为将1名角色装备区内的1件装备移动到另1角色对应区域。","xinfu_pingcai":"评才",
"xinfu_pingcai_info":"出牌阶段限一次,你可以挑选一个宝物并擦拭掉其上面的灰尘。然后,你可以根据宝物类型执行对应的效果。",
"xinfu_pdgyingshi":"隐世",
"xinfu_pdgyingshi2":"隐世",
"xinfu_pdgyingshi_info":"锁定技,你始终跳过准备阶段,判定阶段,结束阶段。你不能被选择为延时锦囊牌的目标。",
"pcaudio_wolong_card":"卧龙",
"pcaudio_wolong_card_info":"",
@ -18472,7 +18479,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhiming:'知命',
zhiming_info:'准备阶段开始时或弃牌阶段结束时,你摸一张牌,然后可以将一张牌置于牌堆顶。',
xingbu:'星卜',
xingbu_info:'结束阶段,你可以展示牌堆顶的三张牌,然后根据X值X为这三张牌中红色牌的数量令一名其他角色获得对应的效果直到其下回合结束①三张其摸牌阶段多摸两张牌使用【杀】的次数上限+1。②两张其使用【杀】的次数上限-1跳过弃牌阶段。③小于两张其于准备阶段开始时弃置一张手牌。',
xingbu_info:'结束阶段,你可以展示牌堆顶的三张牌,然后你可以根据X值X为这三张牌中红色牌的数量令一名其他角色获得对应的效果直到其下回合结束①三张其摸牌阶段多摸两张牌使用【杀】的次数上限+1。②两张其使用【杀】的次数上限-1跳过弃牌阶段。③小于两张其于准备阶段开始时弃置一张手牌。',
yuanqing:'渊清',
yuanqing_info:'锁定技,出牌阶段结束时,你随机将弃牌堆中你本阶段使用过的牌类型的各一张牌置于仁库中。',
shuchen:'疏陈',

View File

@ -21,7 +21,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jsrg_hejin:['male','qun',4,['jsrgzhaobing','jsrgzhuhuan','jsrgyanhuo']],
jsrg_sunjian:['male','qun',4,['jsrgpingtao','jsrgjuelie']],
jsrg_huangfusong:['male','qun',4,['jsrgguanhuo','jsrgjuxia']],
jsrg_xushao:['male','qun',3,['jsrgyingmen','jsrgpingjian'],['unseen']],
jsrg_xushao:['male','qun',3,['sbyingmen','sbpingjian']],
jsrg_dongbai:['female','qun',3,['jsrgshichong','jsrglianzhu']],
jsrg_qiaoxuan:['male','qun',3,['jsrgjuezhi','jsrgjizhao']],
jsrg_yangbiao:['male','qun','3/4',['jsrgzhaohan','jsrgrangjie','jsrgyizheng']],
@ -149,8 +149,202 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
},
characterFilter:{
jsrg_xushao:function(mode){
return mode!='guozhan';
},
},
skill:{
//江山如故·起
sbyingmen:{
forbid:['guozhan'],
trigger:{
global:'phaseBefore',
player:'enterGame',
},
forced:true,
filter:function(event,player){
return event.name!='phase'||game.phaseNumber==0;
},
content:function(){
if(!_status.characterlist) lib.skill.pingjian.initList();
var characters=_status.characterlist.randomRemove(4);
lib.skill.sbyingmen.addVisitors(characters,player);
game.delayx();
},
group:'sbyingmen_reload',
subSkill:{
reload:{
trigger:{player:'phaseBegin'},
forced:true,
locked:false,
filter:function(event,player){
return player.getStorage('sbyingmen').length<4;
},
content:function(){
if(!_status.characterlist) lib.skill.pingjian.initList();
var characters=_status.characterlist.randomRemove(4-player.getStorage('sbyingmen').length);
lib.skill.sbyingmen.addVisitors(characters,player);
game.delayx();
},
},
},
getSkills:function(characters,player){
var skills=[];
for(var name of characters){
if(Array.isArray(lib.character[name])){
for(var skill of lib.character[name][3]){
var list=get.skillCategoriesOf(skill,player);
list.remove('锁定技');
if(list.length>0) continue;
var info=get.info(skill);
if(info&&(!info.unique||info.gainable)) skills.add(skill);
}
}
}
return skills;
},
addVisitors:function(characters,player){
player.addSkillBlocker('sbyingmen');
game.log(player,'将','#y'+get.translation(characters),'加入了','#g“访客”')
lib.skill.rehuashen.drawCharacter(player,characters);
player.markAuto('sbyingmen',characters)
var storage=player.getStorage('sbyingmen');
var skills=lib.skill.sbyingmen.getSkills(storage,player);
player.addInvisibleSkill(skills);
},
removeVisitors:function(characters,player){
var skills=lib.skill.sbyingmen.getSkills(characters,player);
var characters2=player.getStorage('sbyingmen').slice(0);
characters2.removeArray(characters);
skills.removeArray(lib.skill.sbyingmen.getSkills(characters2,player));
player.unmarkAuto('sbyingmen',characters);
_status.characterlist.addArray(characters);
player.removeInvisibleSkill(skills);
},
onremove:function(player,skill){
lib.skill.sbyingmen.removeVisitors(player.getSkills('sbyingmen'),player);
player.removeSkillBlocker('sbyingmen');
},
skillBlocker:function(skill,player){
if(!player.invisibleSkills.contains(skill)||skill=='sbpingjian'||skill=='sbpingjian') return false;
return !player.hasSkill('sbpingjian');
},
marktext:'客',
intro:{
name:'访客',
mark:function(dialog,storage,player){
if(!storage||!storage.length) return '当前没有“访客”';
dialog.addSmall([storage,'character']);
var skills=lib.skill.sbyingmen.getSkills(storage,player);
if(skills.length) dialog.addText('<li>当前可用技能:'+get.translation(skills),false);
},
},
},
sbpingjian:{
trigger:{player:['useSkillAfter','logSkill']},
forced:true,
filter:function(event,player){
var skill=event.sourceSkill||event.skill;
return player.invisibleSkills.contains(skill)&&lib.skill.sbyingmen.getSkills(player.getStorage('sbyingmen'),player).contains(skill);
},
content:function(){
'step 0'
var visitors=player.getStorage('sbyingmen').slice(0);
var drawers=visitors.filter(function(name){
return Array.isArray(lib.character[name])&&lib.character[name][3].contains(trigger.sourceSkill);
});
event.drawers=drawers;
if(visitors.length==1) event._result={bool:true,links:visitors};
else{
var dialog=['评鉴:请选择移去一张“访客”'];
if(drawers.length) dialog.push('<div class="text center">如果移去'+get.translation(drawers)+',则你摸一张牌</div>');
dialog.push([visitors,'character']);
player.chooseButton(dialog,true);
}
'step 1'
if(result.bool){
lib.skill.sbyingmen.removeVisitors(result.links,player);
game.log(player,'移去了','#y'+get.translation(result.links[0]));
if(event.drawers.contains(result.links[0])) player.draw();
}
},
group:'sbpingjian_trigger',
subSkill:{
trigger:{
trigger:{player:'triggerInvisible'},
forced:true,
forceDie:true,
popup:false,
priority:10,
filter:function(event,player){
if(event.revealed) return false;
var skills=lib.skill.sbyingmen.getSkills(player.getStorage('sbyingmen'),player);
game.expandSkills(skills);
return skills.contains(event.skill);
},
content:function(){
"step 0"
if(get.info(trigger.skill).silent){
event.finish();
}
else{
var info=get.info(trigger.skill);
var event=trigger,trigger=event._trigger;
var str;
var check=info.check;
if(info.prompt) str=info.prompt;
else{
if(typeof info.logTarget=='string'){
str=get.prompt(event.skill,trigger[info.logTarget],player);
}
else if(typeof info.logTarget=='function'){
var logTarget=info.logTarget(trigger,player);
if(get.itemtype(logTarget).indexOf('player')==0) str=get.prompt(event.skill,logTarget,player);
}
else{
str=get.prompt(event.skill,null,player);
}
}
if(typeof str=='function'){str=str(trigger,player)}
var next=player.chooseBool('评鉴:'+str);
next.set('yes',!info.check||info.check(trigger,player));
next.set('hsskill',event.skill);
next.set('forceDie',true);
next.set('ai',function(){
return _status.event.yes;
});
if(typeof info.prompt2=='function'){
next.set('prompt2',info.prompt2(trigger,player));
}
else if(typeof info.prompt2=='string'){
next.set('prompt2',info.prompt2);
}
else if(info.prompt2!=false){
if(lib.dynamicTranslate[event.skill]) next.set('prompt2',lib.dynamicTranslate[event.skill](player,event.skill));
else if(lib.translate[event.skill+'_info']) next.set('prompt2',lib.translate[event.skill+'_info']);
}
if(trigger.skillwarn){
if(next.prompt2){
next.set('prompt2','<span class="thundertext">'+trigger.skillwarn+'。</span>'+next.prompt2);
}
else{
next.set('prompt2',trigger.skillwarn);
}
}
}
"step 1"
if(result.bool){
trigger.revealed=true;
}
else{
trigger.untrigger();
trigger.cancelled=true;
}
}
},
},
},
jsrgchaozheng:{
audio:2,
trigger:{player:'phaseZhunbeiBegin'},
@ -1800,7 +1994,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var targets=game.filterPlayer(current=>{
return !current.hasMark('jsrgzhenglve_mark');
});
if(!targets.length) event._result={bool:true};
if(!targets.length) event.finish();
else if(targets.length<=num) event._result={bool:true,targets:targets};
else player.chooseTarget('令'+get.cnNumber(num)+'名角色获得“猎”标记',true,num,(card,player,target)=>{
return !target.hasMark('jsrgzhenglve_mark');
@ -8286,12 +8480,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jsrgxundao_info:'当你的判定牌生效前,你可以令至多两名角色依次弃置一张牌,然后你选择一张以此法弃置且位于弃牌堆中的牌代替此判定牌。',
jsrglinghua:'灵化',
jsrglinghua_info:'①准备阶段你可以进行目标角色为你的【闪电】的特殊的使用流程。若你未因此受到伤害你可以令一名角色回复1点体力。②结束阶段你可以进行目标角色为你且判定效果反转的【闪电】的特殊的使用流程。若你未因此受到伤害你可以对一名角色造成1点雷电伤害。',
sbyingmen:'盈门',
sbyingmen_info:'锁定技。①游戏开始时你将武将牌堆中随机四张武将牌置于你的武将牌上称为“访客”。②回合开始时若你的“访客”数小于4你随机从武将牌堆中将“访客”补至四张。',
sbpingjian:'评鉴',
sbpingjian_info:'你可以于满足你“访客”上的一个无技能标签或仅有锁定技标签的技能条件的时机发动此技能。你发动的技能结算结束后,若此技能位于你的“访客”中,则你选择移去一张“访客”。若移去的是本次发动技能的“访客”,你摸一张牌。',
offline_star:'桌游志·SP',
offline_sticker:'桌游志·贴纸',
offline_luanwu:'文和乱武',
offline_yongjian:'用间篇',
offline_jiangshanruguqi:'江山如故·起',
offline_feihongyingxue:'飞鸿映雪',
offline_piracyE:'官盗E系列·战役篇',
offline_piracyS:'官盗S系列',
offline_piracyK:'官盗K系列',

View File

@ -43,6 +43,7 @@ window.noname_character_rank={
'noname',
'sb_machao',
'dc_zhouxuān',
'key_iriya',
],
ap:[
'gjqt_aruan',
@ -296,6 +297,7 @@ window.noname_character_rank={
'zhanghua',
'zerong',
'wangguan',
'duanqiaoxiao',
'key_misuzu',
'key_sunohara',
'key_umi',
@ -908,6 +910,8 @@ window.noname_character_rank={
'xia_zhaoe',
'zhangkai',
'sunhong',
'zhangjinyun',
'dc_mengda',
],
b:[
'diy_feishi',
@ -1619,6 +1623,7 @@ window.noname_character_rank={
'tw_jiangji',
'tw_niufudongxie',
'tw_shen_lvmeng',
'zhangjinyun',
'key_tomoya',
'key_masato',
'key_shiorimiyuki',
@ -1843,6 +1848,7 @@ window.noname_character_rank={
'mengjie',
'dc_ruiji',
'xia_zhaoe',
'duanqiaoxiao',
'key_kano',
'key_haruko',
'key_akiko',
@ -1876,6 +1882,7 @@ window.noname_character_rank={
'key_yukito',
'key_kotomi',
'db_key_liyingxia',
'key_iriya',
],
rare:[
'pal_shenqishuang',

View File

@ -3912,8 +3912,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lose:false,
delay:false,
line:true,
direct:true,
clearTime:true,
prepare:function(cards,player,targets){
targets[0].logSkill('xinhuangtian');
},
@ -4554,7 +4552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
threaten:0.8,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(get.tag(card,'damage')&&!target.storage.xinzili){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
if(target.hp>=4) return [0.5,get.tag(card,'damage')*2];
@ -5338,14 +5336,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
if(event.card.name!='sha'||event.card.nature!='fire') return false;
return game.hasPlayer(function(current){
return !event.targets.contains(current)&&player.canUse(event.card,current);
return !event.targets.contains(current)&&lib.filter.targetEnabled(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt('ollihuo'),'为'+get.translation(trigger.card)+'增加一个目标',function(card,player,target){
return !_status.event.sourcex.contains(target)&&player.canUse(_status.event.card,target);
return !_status.event.sourcex.contains(target)&&lib.filter.targetInRange(_status.event.card,player,target)&&lib.filter.targetEnabled(_status.event.card,player,target);
}).set('sourcex',trigger.targets).set('card',trigger.card).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,_status.event.card,player,player);
@ -6003,17 +6001,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{target:'useCardToTarget'},
direct:true,
filter:function(event,player){
return event.card.name=='sha';
return event.card.name=='sha'&&game.hasPlayer(function(current){
return current!=player&&!event.targets.contains(current)&&lib.filter.targetEnabled(event.card,event.player,current);
});
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('reqiuyuan'),function(card,player,target){
return target!=player&&!_status.event.targets.contains(target)&&_status.event.playerx.canUse('sha',target,false);
var evt=_status.event.getTrigger();
return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled(evt.card,evt.player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
return get.effect(target,trigger.card,trigger.player,player)+0.1;
}).set('targets',trigger.targets).set('playerx',trigger.player);
});
"step 1"
if(result.bool){
var target=result.targets[0];
@ -13533,7 +13534,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
trigger:{source:'damageEnd'},
locked:true,
direct:true,
forced:true,
filter:function(event,player){
if(event.name=='chooseToUse') return player.hasCard(card=>get.suit(card)=='spade','hs');
return event.card&&event.card.name=='sha'&&event.getParent(2).jiu==true&&!player.hasSkill('oljiuchi_air');

View File

@ -3886,8 +3886,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterTarget:function(card,player,target){
return target.hasZhuSkill('zhiba',player)&&player.canCompare(target);
},
direct:true,
clearTime:true,
log:false,
prepare:function(cards,player,targets){
targets[0].logSkill('zhiba');
},
@ -7356,8 +7355,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lose:false,
delay:false,
line:true,
direct:true,
clearTime:true,
prepare:function(cards,player,targets){
targets[0].logSkill('huangtian');
},

View File

@ -13,6 +13,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_huben:["caohong","xiahouba","zhugeke","zumao","wenpin","litong","mazhong","heqi","quyi","luzhi","zangba","yuejin","dingfeng","wuyan","ol_zhuling","tianyu","huojun",'zhaoyǎn','dengzhong','ol_furong','macheng','ol_zhangyì','ol_zhujun','maxiumatie'],
sp_liesi:['mizhu','weizi','ol_liuba'],
sp_default:["sp_diaochan","sp_zhaoyun","sp_sunshangxiang","sp_caoren","sp_jiangwei","sp_machao","sp_caiwenji","jsp_guanyu","jsp_huangyueying","sp_pangde","sp_jiaxu","yuanshu",'sp_zhangliao','sp_ol_zhanghe','sp_menghuo'],
sp_waitforsort:['sunhong','luoxian','ol_huban','wangguan'],
sp_qifu:["caoying",'panshu',"caochun","yuantanyuanshang",'caoshuang','wolongfengchu','guansuo','baosanniang','fengfangnv','jin_zhouchu'],
sp_wanglang:['wanglang'],
sp_tongque:["sp_fuwan","sp_fuhuanghou","sp_jiben"],
@ -803,6 +804,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
})%2==0;
},
group:'oldaili_record',
check:function(event,player){
if(get.distance(event.player,player,'absolute')==1&&!player.isTurnedOver()) return false;
return true;
},
content:function(){
player.turnOver();
player.draw(3,'visible').gaintag=['oldaili_tag'];
@ -823,6 +828,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return lib.skill.oldaili.mod.aiValue.apply(this,arguments);
},
},
mark:true,
marktext:'砺',
intro:{
markcount:function(storage,player){
return player.countCards('h',card=>card.hasGaintag('oldaili_tag'));
},
mark:function(dialog,content,player){
var cards=player.getCards('h',card=>card.hasGaintag('oldaili_tag'));
if(cards.length){
dialog.addAuto(cards);
}
else return '无展示牌';
},
},
subSkill:{
record:{
trigger:{player:'showCardsEnd'},
@ -835,7 +854,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cards.forEach(card=>card.addGaintag('oldaili_tag'));
},trigger.cards);
}
}
},
}
},
//胡班
@ -22869,6 +22888,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_guozhan:"国战",
sp_guozhan2:"国战移植",
sp_others:"其他",
sp_waitforsort:'等待分包',
sp_single:'新1v1',
},
};

View File

@ -4,6 +4,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'sp2',
connect:true,
character:{
duanqiaoxiao:['female','wei',3,['dccaizhuang','dchuayi']],
zhangjinyun:['female','shu',3,['dchuizhi','dcjijiao']],
dc_mengda:['male','wei',4,['dclibang','dcwujie']],
dc_zhangmancheng:['male','qun',4,['dclvecheng','dczhongji'],['unseen']],
huanfan:['male','wei',3,['dcjianzheng','dcfumou'],['unseen']],
mengyou:['male','qun',5,['hmmanyi','dcmanzhi'],['unseen']],
chentai:['male','wei',4,['dcjiuxian','dcchenyong'],['unseen']],
@ -229,7 +233,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_sbfm:["lisu","xinpi","zhangwen"],
sp_guandu:["sp_zhanghe","xunchen","sp_shenpei","gaolan","lvkuanglvxiang","chunyuqiong","sp_xuyou","xinping","hanmeng"],
sp_qihuan:['zhaozhong','re_hejin','fengfang','mushun','dc_fuwan'],
sp_binglin:['re_niujin',"sp_mifangfushiren",'licaiwei','dc_zhaoyan','shiyi','sunlang','sunhuan'],
sp_binglin:['re_niujin',"sp_mifangfushiren",'licaiwei','dc_zhaoyan','shiyi','sunlang','sunhuan','dc_mengda'],
sp_danqi:['dufuren','qinyilu','bianxi','dc_huban','dc_hujinding','dc_zhaoyǎn','wangwei','liyixiejing','guānning'],
sp_fenghuo:['re_nanhualaoxian','tongyuan','zhangning','re_pangdegong'],
sp_baigei:['re_panfeng','xingdaorong','caoxing','re_chunyuqiong','xiahoujie','dc_caiyang','zhoushan'],
@ -256,13 +260,565 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'],
sp2_yinyu:['zhouyi','luyi'],
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji'],
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao'],
sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'],
sp2_yuxiu:['dongguiren','dc_tengfanglan'],
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun'],
sp_decade:['caobuxing','re_maliang','xin_baosanniang','dongxie','liuhui'],
}
},
skill:{
//段巧笑
dccaizhuang:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'dccaizhuang');
},'he');
},
complexCard:true,
selectCard:[1,4],
position:'he',
filterCard:function(card,player){
var suit=get.suit(card);
if(!lib.suit.contains(suit)) return false;
if(ui.selected.cards.length){
if(ui.selected.cards.some(i=>{
return get.suit(i)==suit;
})) return false;
}
return true;
},
check:function(card){
var player=_status.event.player;
var suit=get.suit(card);
if(get.position(card)!='h'&&player.countCards('h',{suit:suit})==1) return 0.1;
if(!player.hasCard(cardx=>cardx!=card&&get.suit(cardx)==suit)) return 7.5-get.value(card);
return 6-get.value(card);
},
content:function(){
'step 0'
var suits=[];
player.countCards('h',card=>{
if(suits.length>=4) return;
var suit=get.suit(card);
if(!lib.suit.contains(suit)) return;
suits.add(suit);
});
if(suits.length>=cards.length) event.finish();
'step 1'
player.draw();
event.goto(0);
},
ai:{
order:2,
result:{
player:function(player){
var suits=lib.suit.filter(suit=>{
return player.countCards('h',{suit:suit})>1;
});
var suits2=[],cards=player.getCards('h');
for(var card of cards){
var suitx=get.suit(card);
if(suits2.contains(suitx)) continue;
if(!player.hasCard(cardx=>cardx!=card&&get.suit(cardx)==suitx)&&get.value(card)<7.5||get.value(card)<6) suits2.add(suitx);
}
if(suits2.length<=suits.length) return 0;
return 1;
}
}
}
},
dchuayi:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
frequent:true,
content:function(){
'step 0'
player.judge(()=>1).judge2=(result)=>result.bool;
'step 1'
var color=result.color;
if(color=='red'||color=='black') player.addTempSkill('dchuayi_'+color,{player:'phaseBegin'});
},
subSkill:{
red:{
trigger:{global:'phaseEnd'},
charlotte:true,
forced:true,
filter:function(event,player){
return event.player!=player;
},
content:function(){
player.draw();
},
mark:true,
intro:{
name:'华衣·红',
content:'其他角色的回合结束时,你摸一张牌'
},
},
black:{
trigger:{player:'damageEnd'},
charlotte:true,
forced:true,
content:function(){
player.draw(2);
},
mark:true,
intro:{
name:'华衣·黑',
content:'当你受到伤害后,摸两张牌'
},
ai:{
maixie:true,
maixie_hp:true,
effect:{
target:function(card,player,target){
if(get.tag(card,'damage')){
if(player.hasSkillTag('jueqing',false,target)) return [1,-2];
if(!target.hasFriend()) return;
var num=1;
if(get.attitude(player,target)>0){
if(player.needsToDiscard()){
num=0.5;
}
else{
num=0.3;
}
}
if(target.hp>=4) return [1,num*2];
if(target.hp==3) return [1,num*1.5];
if(target.hp==2) return [1,num*0.5];
}
}
}
}
}
}
},
//张瑾云
dchuizhi:{
audio:2,
trigger:{player:'phaseDrawEnd'},
direct:true,
content:function(){
'step 0'
player.chooseToDiscard(get.prompt('dchuizhi'),'你可以选择弃置任意张手牌并点击“确定”,将手牌摸至与全场手牌数最多的角色数相同。',[0,Infinity]).set('logSkill','dchuizhi').set('ai',card=>{
if(_status.event.isMax){
if(ui.selected.cards.length) return -get.value(card);
return 0;
}
return 6-get.value(card);
}).set('isMax',player.isMaxHandcard());
'step 1'
if(result.bool){
var num=0,targets=game.filterPlayer();
for(var current of targets){
if(current.isMaxHandcard()){
num=current.countCards('h');
break;
}
}
num=Math.max(1,Math.min(5,num-player.countCards('h')));
player.draw(num);
}
}
},
dcjijiao:{
audio:2,
enable:'phaseUse',
limited:true,
skillAnimation:true,
animationColor:'orange',
init:function(player){
player.addSkill('dcjijiao_machi');
},
onremove:function(player){
player.removeSkill('dcjijiao_machi');
},
onChooseToUse:function(event){
if(event.dcjijiao==undefined&&!game.online){
var bool=lib.skill.dcjijiao.getCards(event.player,true);
event.set('dcjijiao',bool);
}
},
filter:function(event,player){
return event.dcjijiao;
},
filterTarget:true,
getCards:function(player,bool){
var cards=Array.from(ui.discardPile.childNodes);
var gains=cards.slice(0);
var history=game.getAllGlobalHistory('cardMove',function(evt){
if(evt.name=='lose') return evt.position==ui.discardPile;
return evt.name=='cardsDiscard';
});
for(var i=history.length-1;i>=0;i--){
var evt=history[i];
var cards2=evt.cards.filter(function(card){
return cards.contains(card);
});
if(cards2.length){
if(!lib.skill.dcjijiao.isUse(evt,player)){
gains.removeArray(cards2);
}
cards.removeArray(cards2);
}
if(!cards.length) break;
}
if(bool) return gains.some(card=>get.type2(card,false)=='trick');
return gains.filter(card=>get.type2(card,false)=='trick');
},
isUse:function(event,player){
if(event.name!='cardsDiscard') return (event.type=='discard'&&event.player==player);
var evtx=event.getParent();
if(evtx.name!='orderingDiscard') return false;
var evt2=(evtx.relatedEvent||evtx.getParent());
return (evt2.name=='useCard'&&evt2.player==player);
},
content:function(){
player.awakenSkill('dcjijiao');
var cards=lib.skill.dcjijiao.getCards(player);
if(cards.length){
target.gain(cards,'gain2').gaintag.add('dcjijiao');
target.addSkill('dcjijiao_nowuxie');
}
},
ai:{
order:1,
result:{
target:function(player,target){
if(game.roundNumber==1&&ui.cardPile.childNodes.length>game.countPlayer()*5&&!game.hasPlayer(current=>current.hp<=2)&&!player.hasSkill('dcjijiao_risutoa')) return 0;
return 5;
}
}
},
subSkill:{
machi:{
charlotte:true,
forced:true,
popup:false,
trigger:{
global:['washCard','die'],
},
filter:function(event,player){
return player.hasSkill('dcjijiao',null,false,false);
},
content:function(){
player.addSkill('dcjijiao_risutoa');
}
},
risutoa:{
charlotte:true,
forced:true,
popup:false,
trigger:{global:'phaseAfter'},
content:function(){
if(player.awakenedSkills.contains('dcjijiao')){
player.restoreSkill('dcjijiao');
game.log(player,'重置了','#g【继椒】');
//player.removeSkill('dcjijiao_machi');
}
player.removeSkill('dcjijiao_risutoa');
}
},
nowuxie:{
trigger:{player:'useCard1'},
forced:true,
charlotte:true,
firstDo:true,
popup:false,
filter:function(event,player){
if(get.type(event.card)!='trick') return false;
return player.hasHistory('lose',function(evt){
if(evt.getParent()!=event) return false;
for(var i in evt.gaintag_map){
if(evt.gaintag_map[i].contains('dcjijiao')) return true;
}
return false;
});
},
content:function(){
trigger.nowuxie=true;
},
onremove:function(player){
player.removeGaintag('dcjijiao');
},
}
}
},
//孟达
dclibang:{
audio:2,
enable:'phaseUse',
usable:1,
filterCard:true,
position:'he',
filter:function(event,player){
return player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'dclibang');
},'he')&&game.countPlayer(current=>current!=player)>=2;
},
filterTarget:function(card,player,target){
return target!=player;
},
selectTarget:2,
multiline:true,
multitarget:true,
content:function(){
'step 0'
event.num=0;
event.cardsx=[];
event.targets.sortBySeat();
'step 1'
var current=targets[event.num];
if(current.countCards('he')) player.gainPlayerCard(current,'he',true,'visibleMove');
event.num++;
'step 2'
if(result.bool){
var card=result.cards[0];
event.cardsx.push(card);
}
if(event.num<targets.length) event.goto(1);
'step 3'
player.judge().set('callback',lib.skill.dclibang.contentx);
},
contentx:function(){
'step 0'
var card=event.judgeResult.card;
var color=event.judgeResult.color;
var player=event.getParent(2).player;
var cards=event.getParent(2).cardsx;
for(var cardx of cards){
if(get.color(cardx)==color){
if(get.position(card,true)=='o') player.gain(card,'gain2');
return;
}
}
event.goto(3);
'step 1'
var targets=event.getParent(2).targets.filter(target=>{
return player.canUse('sha',target);
});
if(!targets.length) event.finish();
else player.chooseTarget('利傍:视为对其中一名角色使用一张【杀】',true,(card,player,target)=>{
return _status.event.targets.contains(target);
}).set('targets',targets).set('ai',target=>{
return get.effect(target,{name:'sha'},player,player);
});
'step 2'
if(result.bool){
player.useCard({name:'sha',isCard:true},result.targets[0]);
}
event.finish();
'step 3'
player.chooseCardTarget({
filterCard:function(card){
return get.itemtype(card)=='card';
},
filterTarget:function(card,player,target){
return _status.event.targets.contains(target);
},
selectCard:2,
targets:event.getParent(2).targets,
position:'he',
prompt:'交给其中一名角色两张牌或失去1点体力',
ai1:function(card){
return 1;
},
ai2:function(target){
var player=_status.event.player,card=ui.selected.cards[0];
if(val>0) return get.attitude(player,target)*2;
return (get.value(card,target)-2)*get.attitude(player,target);
},
});
'step 4'
if(result.bool){
player.give(result.cards,result.targets[0]);
}
else player.loseHp();
},
ai:{
order:8,
result:{
target:function(player,target){
if(get.attitude(player,target)>0&&ui.selected.targets.length) return 0.1;
return -1;
}
}
}
},
dcwujie:{
audio:2,
forced:true,
trigger:{
global:['discardBegin','drawBegin'],
},
forced:true,
forceDie:true,
group:'dcwujie_inf',
logTarget:'player',
filter:function(event,player){
return event.getParent().name=='die'&&event.getParent().source==event.player&&event.player!=player;
},
content:function(){
trigger.cancel();
},
subSkill:{
inf:{
trigger:{player:'useCard1'},
forced:true,
popup:false,
firstDo:true,
filter:function(event,player){
if(get.color(event.card)=='none'&&event.addCount!==false) return true;
return false;
},
content:function(){
trigger.addCount=false;
var stat=player.getStat().card,name=trigger.card.name;
if(typeof stat[name]=='number') stat[name]--;
},
}
},
mod:{
targetInRange:function(card,player){
if(get.color(card)=='none') return true;
},
cardUsable:function(card){
if(get.color(card)=='none') return Infinity;
},
}
},
//张曼成
dclvecheng:{
audio:2,
enable:'phaseUse',
usable:1,
filterTarget:lib.filter.notMe,
content:function(){
player.addTempSkill('dclvecheng_xiongluan');
player.markAuto('dclvecheng_xiongluan',[target]);
},
ai:{
threaten:2.1,
order:9,
expose:0.2,
result:{
target:function(player,target){
if(player.getStorage('dclvecheng_xiongluan').contains(target)) return 0;
if(target.getEquip('bagua')||target.getEquip('rewrite_bagua')) return -0.6;
var hs=player.countCards('h',card=>{
return get.name(card)=='sha'&&get.effect(target,card,player,player)!=0;
});
var ts=target.hp;
if(hs>=ts&&ts>1) return -2;
return -1;
}
}
},
subSkill:{
xiongluan:{
trigger:{player:'phaseEnd'},
charlotte:true,
forced:true,
popup:false,
onremove:true,
filter:function(event,player){
return player.getStorage('dclvecheng_xiongluan').some(i=>i.isIn());
},
content:function(){
'step 0'
event.targets=player.getStorage('dclvecheng_xiongluan').slice();
event.targets.sortBySeat();
'step 1'
if(!event.targets.length){
event.finish();
return;
}
var target=event.targets.shift();
event.target=target;
target.showHandcards();
var cards=target.getCards('h','sha');
if(!cards.length) event.redo();
else event.forced=false;
'step 2'
var forced=event.forced;
var prompt2=forced?'掠城:选择对'+get.translation(player)+'使用的【杀】':'掠城:是否依次对'+get.translation(player)+'使用所有的【杀】?';
target.chooseToUse(forced,function(card,player,event){
if(get.itemtype(card)!='card'||get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},prompt2).set('targetRequired',true).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',player);
'step 3'
if(result.bool){
if(target.countCards('h','sha')){
event.forced=true;
event.goto(2);
return;
}
}
event.forced=false;
event.goto(1);
},
intro:{
content:'可以对$随意大喊大叫'
},
mod:{
cardUsableTarget:function(card,player,target){
if(card.name=='sha'&&player.getStorage('dclvecheng_xiongluan').contains(target)) return true;
},
}
}
}
},
dczhongji:{
audio:2,
trigger:{player:'useCard'},
filter:function(event,player){
var suit=get.suit(event.card);
return !lib.suit.contains(suit)||!player.countCards('h',{suit:suit});
},
check:function(event,player){
var num=Math.min(20,player.maxHp-player.countCards('h'));
if(num<=0) return false;
var numx=player.getHistory('useSkill',evt=>{
return evt.skill=='dczhongji';
}).length+1;
if(numx>num) return false;
if(_status.currentPhase!=player) return true;
if(player.hasCard(card=>{
var suit=get.suit(card);
return player.hasValueTarget(card)&&!player.hasCard(cardx=>{
return cardx!=card&&get.suit(cardx)==suit;
});
})) return false;
return true;
},
prompt2:function(event,player){
var num=Math.min(20,player.maxHp-player.countCards('h'));
var str=num>0?'摸'+get.cnNumber(num)+'张牌,然后':'';
return str+'弃置'+get.cnNumber(1+player.getHistory('useSkill',evt=>{
return evt.skill=='dczhongji';
}).length)+'张牌';
},
content:function(){
'step 0'
var num=Math.min(20,player.maxHp-player.countCards('h'));
if(num>0) player.draw(num);
'step 1'
var num=player.getHistory('useSkill',evt=>{
return evt.skill=='dczhongji';
}).length;
player.chooseToDiscard('螽集:请弃置'+get.cnNumber(num)+'张牌','he',true,num).set('ai',get.unuseful);
},
ai:{
threaten:3.2,
}
},
//桓范
dcjianzheng:{
audio:2,
@ -3514,7 +4070,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
intro:{
name:'内伐 - 非基本牌',
name:'内伐 - 锦囊牌',
content:'本回合内不能使用基本牌且使用普通锦囊牌选择目标时可以多选择或者取消1个目标。'
},
filter:function(event,player){
@ -3524,7 +4080,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(info.allowMultiple==false) return false;
if(event.targets&&!info.multitarget){
if(game.hasPlayer(function(current){
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current)&&lib.filter.targetInRange(event.card,player,current);
return !event.targets.contains(current)&&lib.filter.targetEnabled2(event.card,player,current);
})){
return true;
}
@ -3537,7 +4093,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseTarget(get.prompt('dcneifa'),function(card,player,target){
var player=_status.event.player;
if(_status.event.targets.contains(target)) return true;
return lib.filter.targetEnabled2(_status.event.card,player,target)&&lib.filter.targetInRange(_status.event.card,player,target);
return 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;
@ -5137,11 +5693,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
intro:{
content:'limited'
},
direct:true,
content:function(){
'step 0'
player.awakenSkill('dcyongdi');
player.logSkill('dcyongdi',target);
//player.logSkill('dcyongdi',target);
if(!game.hasPlayer(current=>current.maxHp<target.maxHp)){
target.gainMaxHp();
}
@ -12381,6 +12936,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{
mark:{
mark:'character',
charlotte:true,
intro:{
content:'已获得〖怨语〗效果',
onunmark:true,
@ -12809,7 +13365,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var getNum=function(current){
var history=current.actionHistory;
var num=0;
for(var i=history.length-1;i>=0;i--){
for(var i=history.length-2;i>=0;i--){
for(var j=0;j<history[i].useCard.length;j++){
if(get.type2(history[i].useCard[j].card,false)=='trick') num++;
}
@ -15614,8 +16170,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true,
filter:function(event,player){
if(player==event.player||!event.player.isIn()) return false;
if(!player.hasHistory('useSkill',function(evt){
return evt.skil=='huguan'&&evt.targets.contains(event.player);
if(!player.hasAllHistory('useSkill',function(evt){
return evt.skill=='huguan'&&evt.targets.contains(event.player);
})) return false;
var suits=[];
event.player.getHistory('lose',function(evt){
@ -27624,6 +28180,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zerong:'笮[zé]融—195年丹杨治今安徽宣城东汉末年豪强生性残暴却笃信佛教为佛教在中国的发展做出了很大贡献。东汉末年投奔徐州刺史陶谦督管下邳、彭城、广陵三郡运粮。将其中大量物资占为己有累积财力遂在徐州一带大规模崇佛修建豪华佛寺铸造金铜大佛衣以锦彩并举行浴佛节招揽信徒万余人。其崇佛活动奠定了中国大型佛事活动的基础。后又投奔赵昱、薛礼、朱皓并将他们杀害扬州牧刘繇因此兴兵讨伐笮融。笮融兵败后逃入深山由于当地山民同样对他恨之入骨便联手搜捕、杀死笮融并将他的首级献给刘繇。',
zhoushan:'周善,《三国演义》中人物,不见于正史记载。为吴侯孙权的家将,此人最有胆量,自幼穿房入户,多随孙策。权为骗其妹回吴,遣善将五百人,扮为商人,分作五船;更诈修国书,以备盘诘;船内暗藏兵器。周善领命,往荆州。正骗得孙夫人带刘禅上船,赵云前来抢走禅,周善在后梢挟住舵,只顾放船下水。正僵持时张飞赶到,周善见张飞上船,提刀来迎,被张飞手起一剑砍倒,提头掷于孙夫人前。',
zhangkai:'张闿[kǎi],陶谦的手下都尉。奉命截杀曹操之父曹嵩,杀死曹嵩,夺去财宝逃往淮南投奔袁术,并担任刺杀陈王刘宠和陈国相骆俊的任务。',
huanfan:'桓范249年字元则沛郡龙亢县今安徽省怀远县龙亢镇人。三国时期曹魏大臣、文学家、画家。建安末年担任丞相府掾联合王象等共同撰写《皇览》。延康元年担任羽林左监。魏明帝时历任中领军、尚书出任征虏将军、东中郎将、兖州刺史等。正始年间授大司农为大将军曹爽出谋划策号称“智囊 ”。高平陵政变249年发生后力劝曹爽挟带皇帝曹芳进入许昌没有得到采纳最终被太傅司马懿诛杀。桓范颇有文才著有《世要论》《桓范新书》。善于画画唐朝张彦远《历代名画记》目为中品。',
mengyou:'孟优,《三国演义》里的人物,南蛮王孟获之弟。与诸葛亮的南征军交战,向败战的兄长推荐朵思大王,劝兄长借助朵思之力与蜀汉军对抗。后来与兄长一起发誓归顺蜀汉。',
sunyu:'孙瑜177年215年字仲异吴郡富春今浙江富阳孙坚之弟孙静的次子孙权的堂兄。官至奋威将军、丹杨太守。孙瑜初以恭义校尉的身份统领士兵曾跟随周瑜、孙权等人征战擅于安抚部下、招降纳顺。孙瑜爱读古籍又请学者马普来为将领官员的子弟讲学于是东吴开始设立学官。215年孙瑜去世时年三十九岁。',
xizheng:'郤正278年本名郤纂字令先司州河南郡偃师县今河南省偃师市三国蜀汉至西晋时期学者、官员。少好学广读古籍。弱冠即善写文章为蜀汉朝廷征为秘书吏官至秘书令。公元263年景耀六年曹魏攻伐蜀汉后主刘禅投降郤正为之撰写投降书。后随刘禅前往洛阳受封关内侯又得到晋武帝司马炎赏识任巴西郡太守公元278年咸宁四年去世。郤正为人不重名利曾作《释讥》表明自己淡泊之心境又醉心于文学共作诗歌、论著、辞赋等近百篇但多散佚于后世。',
liuchongluojun:'刘宠(?~197年汉明帝刘庄玄孙陈敬王刘羡曾孙陈顷王刘崇之孙陈孝王刘承之子陈国第六位国君也是东汉陈国的最后一位国君。骆俊?-197字孝远东汉末年扬州会稽郡乌伤县今浙江义乌人。宗室陈王刘宠的国相在任期间励精图治深得民众爱戴。刘宠勇猛过人善使弓弩箭法高超。在其父刘承死后继承陈王爵位。中平年间黄巾军起义郡县官兵都弃城逃走刘宠于是征兵自守卫。当时天下饥荒诸王侯都已不再享有租赋反屡遭抢掠有的甚至流离在外死于荒野。只有陈国仍很富强邻郡百姓纷纷前去投靠陈国拥有部众达十余万人。初平元年190年各州郡起兵讨伐董卓刘宠率军屯驻阳夏自称辅汉大将军。建安二年197年袁术向陈国求取粮草遭陈国国相骆俊拒绝袁术大为生气便派刺客张闿假装路过陈国乘机杀死骆俊和刘宠。',
yuechen:'乐綝195~257年字号不详阳平郡卫国县今河南省清丰县人。三国时期曹魏将领右将军乐进的儿子。果毅坚毅袭封广昌亭侯累迁扬州刺史。甘露二年为叛乱的征东大将军诸葛诞所杀追赠卫尉。',
zhangjinyun:'张瑾云张星彩的妹妹刘禅的第二任皇后238年正月立为皇后。景耀六年263年蜀汉灭亡刘禅被俘此后受封为安乐公。张皇后也随之成为安乐公夫人咸熙元年264年随刘禅到洛阳。',
duanqiaoxiao:'段巧笑,三国时代魏国魏文帝时的宫人,甚受到魏文帝的宠爱。传说她以原有的化妆品中的米粉和胡粉,再加入葵花子汁,发明了女性化妆用的脂粉。',
},
characterTitle:{
// wulan:'#b对决限定武将',
@ -27793,6 +28357,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
duanwei:['duanwei','junk_duanwei'],
xushao:['xushao','jsrg_xushao'],
huban:['dc_huban','ol_huban'],
mengda:['dc_mengda','pe_mengda'],
},
translate:{
lijue:"李傕",
@ -28423,7 +28988,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huguan:'护关',
huguan_info:'一名角色于出牌阶段内使用第一张牌时,若此牌为红色,则你可以声明一种花色。该花色的牌不计入其本回合的手牌上限。',
yaopei:'摇佩',
yaopei_info:'其他角色的弃牌阶段结束时,若你本回合对其发动过〖护关〗则你可以弃置一张与其于此阶段弃置的牌花色均不相同的牌。然后你选择一项①其摸两张牌你回复1点体力。②其回复1点体力你摸两张牌。',
yaopei_info:'其他角色的弃牌阶段结束时,若你本局游戏内对其发动过〖护关〗则你可以弃置一张与其于此阶段弃置的牌花色均不相同的牌。然后你选择一项①其摸两张牌你回复1点体力。②其回复1点体力你摸两张牌。',
mingluan:'鸣鸾',
mingluan_info:'其他角色的结束阶段开始时若有角色于本回合内回复过体力则你可以弃置任意张牌然后摸X张牌X为当前角色的手牌数且至多摸至5张。',
re_pangdegong:'庞德公',
@ -28913,7 +29478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcmoukui_info:'当你使用【杀】指定第一个目标后你可以选择任意项1.摸一张牌2.弃置其中一个目标角色一张牌。若你均选择,当此【杀】被无效后或被抵消后,该角色弃置你一张牌。',
yuantanyuanxiyuanshang:'袁谭袁尚袁熙',
dcneifa:'内伐',
dcneifa_info:'出牌阶段开始时,你可以摸三张牌,然后弃置一张牌。若你弃置的牌类型为:基本牌,本阶段你不能使用锦囊牌,且【杀】的使用次数上限+X且可以额外指定一名目标(无距离限制)锦囊牌本阶段你不能使用基本牌且使用普通锦囊牌选择目标时可以增加或减少一个目标X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5。',
dcneifa_info:'出牌阶段开始时,你可以摸三张牌,然后弃置一张牌。若你弃置的牌类型为:基本牌,本阶段你不能使用锦囊牌,且【杀】的使用次数上限+X且可以额外指定一名目标锦囊牌本阶段你不能使用基本牌且使用普通锦囊牌选择目标时可以增加或减少一个目标X为你发动〖内伐〗弃牌后手牌中因〖内伐〗而不能使用的牌的数量且最多为5。你以此法选择的额外目标均无距离限制)。',
dc_tengfanglan:'滕芳兰',
dcluochong:'落宠',
dcluochong_info:'一轮游戏开始时,你可以弃置任意名角色区域里的共计至多[4]张牌,然后若你以此法弃置了一名角色的至少三张牌,则你方括号内的数字-1。',
@ -29046,8 +29611,27 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcporui_info:'每轮限一次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】然后你交给其X张手牌X为你的体力值。',
dcgonghu:'共护',
dcgonghu_info:'锁定技。①当你于回合外失去基本牌后你于〖破锐〗后增加“若其没有因此受到伤害你回复1点体力”。②当你于回合外造成或受到伤害后你删除〖破锐〗中的“然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
dc_zhangmancheng:'张曼成',
dclvecheng:'掠城',
dclvecheng_info:'出牌阶段限一次。你可以选择一名其他角色,你于本回合对其使用【杀】无次数限制。然后回合结束时,其展示所有手牌,若其中有【杀】,其可以选择对你依次使用其中所有的【杀】。',
dczhongji:'螽集',
dczhongji_info:'当你使用牌时若此牌无花色或你手牌区里没有与此牌花色相同的手牌你可以将手牌摸至体力上限并弃置X张牌X为本回合发动〖螽集〗的次数。',
zhangjinyun:'张瑾云',
dchuizhi:'蕙质',
dchuizhi_info:'摸牌阶段结束时,你可以选择是否弃置任意张手牌,然后将手牌摸至与全场手牌数最多的角色相同(至少摸一张,至多摸五张)。',
dcjijiao:'继椒',
dcjijiao_info:'限定技。出牌阶段,你可以令一名角色获得所有弃牌堆中你于本局游戏内使用或弃置过的普通锦囊牌,且这些牌不能被【无懈可击】响应。一名角色的回合结束后,若本回合牌堆洗过牌或有角色死亡,你重置〖继椒〗。',
duanqiaoxiao:'段巧笑',
dccaizhuang:'彩妆',
dccaizhuang_info:'出牌阶段限一次。你可以弃置任意张花色各不相同的牌。然后若你手牌中的花色数小于你以此法弃置的牌数,你摸一张牌并重复此流程。',
dchuayi:'华衣',
dchuayi_info:'结束阶段,你可以判定,然后你获得如下效果直到你下回合开始时:红色,其他角色回合结束时,你摸一张牌;黑色,当你受到伤害后,你摸两张牌。',
dc_mengda:'孟达',
dclibang:'利傍',
dclibang_info:'出牌阶段限一次。你可以弃置一张牌正面向上获得两名其他角色的各一张牌。然后你判定若结果与这两张牌的颜色均不同你交给其中一名角色两张牌或失去1点体力否则你获得判定牌并视为对其中一名角色使用一张【杀】。',
dcwujie:'无节',
dcwujie_info:'锁定技。①你使用无色牌无任何次数限制且无距离限制。②当其他角色执行杀死你的奖惩而摸牌或弃牌时,取消之。',
sp_whlw:"文和乱武",
sp_zlzy:"逐鹿中原",
sp_longzhou:"同舟共济",

View File

@ -705,6 +705,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refuseInfo:['不给','拒绝'],
subSkill:{
want:{
audio:'twkaizeng',
forceaudio:true,
enable:'phaseUse',
usable:1,
charlotte:true,
@ -761,8 +763,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return {
audio:'twkaizeng',
type:result.control,
direct:true,
clearTime:true,
log:false,
delay:false,
filterTarget:function(card,player,target){
return target.hasSkill('twkaizeng');
@ -799,7 +800,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.give(cards,player);
}
else{
var refuseInfo=lib.skill.twkaizeng.refuseInfo;
var refuseInfo=lib.skill.twkaizeng.refuseInfo.slice();
if(get.attitude(target,player)<0) refuseInfo.push('没门');
target.chat(refuseInfo.randomGet());
event.finish();
@ -1778,17 +1779,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
enable:'phaseUse',
usable:1,
forceaudio:true,
filter:function(event,player){
var num=1;
game.countPlayer2(current=>{
onChooseToUse:function(event){
if(!game.online){
var num=1;
game.countPlayer2(current=>{
var history=current.actionHistory;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='twluannian_global') num++;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='twluannian_global') num++;
}
if(history[i].isRound) break;
}
}
});
return player.group=='qun'&&player.countCards('he')>=num&&game.hasPlayer(function(current){
});
event.set('twluannian_num',num);
}
},
filter:function(event,player){
if(!event.twluannian_num) return false;
return player.group=='qun'&&player.countCards('he')>=event.twluannian_num&&game.hasPlayer(function(current){
var target=current.storage.twxiongzheng_target;
return target&&target.isIn()&&current!=player&&current.hasZhuSkill('twluannian',player)
})
@ -1797,31 +1805,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
position:'he',
prompt:function(){
var player=_status.event.player;
var num=1;
game.countPlayer2(current=>{
var history=current.actionHistory;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='twluannian_global') num++;
}
}
});
var num=_status.event.twluannian_num
var list=game.filterPlayer(function(current){
return current.hasZhuSkill('twluannian',player);
}).map(i=>i.storage.twxiongzheng_target).sortBySeat();
return '弃置'+get.cnNumber(num)+'张牌,对'+get.translation(list)+(list.length>1?'中的一人':'')+'造成1点伤害';
},
selectCard:function(){
var num=1;
game.countPlayer2(current=>{
var history=current.actionHistory;
for(var i=history.length-1;i>=0;i--){
for(var evt of history[i].useSkill){
if(evt.skill=='twluannian_global') num++;
}
}
});
return num;
return _status.event.twluannian_num;
},
complexSelect:true,
complexCard:true,
@ -10262,12 +10253,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
usable:1,
mahouSkill:true,
filter:function(event,player){
return !player.hasSkill('twzhouzu_mahou')
return !player.hasSkill('twzhouzu_mahou');
},
filterTarget:function(card,player,target){
return player!=target;
},
direct:true,
line:false,
delay:false,
content:function(){

View File

@ -1388,6 +1388,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target.addSkill('xinzhaofu_effect');
target.markAuto('xinzhaofu_effect',[player]);
},
ai:{
order:9,
result:{
target:function(player,target){
var targets=game.filterPlayer(function(current){
return current.group=='wu'&&get.attitude(player,current)>0;
});
if(targets.length){
for(var targetx of targets){
if(!targetx.inRange(target)) return -1;
}
return -0.5;
}
return 0;
}
}
},
subSkill:{
effect:{
charlotte:true,
@ -4340,7 +4357,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return current.hasSkill('wengua');
});
},
direct:true,
log:false,
delay:false,
filterCard:true,
discard:false,
@ -10914,10 +10931,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
oldqiuyuan:{
audio:'qiuyuan',
inherit:'qiuyuan',
filter:function(event,player){
return event.card.name=='sha'&&game.hasPlayer(function(current){
return current!=player&&!event.targets.contains(current)&&current.countCards('h')>0&&lib.filter.targetEnabled(event.card,event.player,current);
});
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('oldqiuyuan'),function(card,player,target){
return target!=player&&!_status.event.targets.contains(target)&&_status.event.playerx.canUse('sha',target,false)&&target.countCards('h');
var evt=_status.event.getTrigger();
return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled(evt.card,evt.player,target)&&target.countCards('h')>0;
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
@ -10954,12 +10977,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{target:'useCardToTarget'},
direct:true,
filter:function(event,player){
return event.card.name=='sha';
return event.card.name=='sha'&&game.hasPlayer(function(current){
return current!=player&&!event.targets.contains(current)&&lib.filter.targetEnabled(event.card,event.player,current);
});
},
content:function(){
"step 0"
player.chooseTarget(get.prompt2('qiuyuan'),function(card,player,target){
return target!=player&&!_status.event.targets.contains(target)&&_status.event.playerx.canUse('sha',target,false);
var evt=_status.event.getTrigger();
return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled(evt.card,evt.player,target);
}).set('ai',function(target){
var trigger=_status.event.getTrigger();
var player=_status.event.player;
@ -13047,7 +13073,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return false;
},
forceaudio:true,
direct:true,
prompt:'弃置一名有【逆】的角色的两张【逆】,然后视为对包含其在内的角色使用【杀】。',
delay:false,
log:false,

View File

@ -819,29 +819,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'qimei',
charlotte:true,
forced:true,
popup:false,
trigger:{global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','loseAfter','gainAfter','addToExpansionAfter']},
logTarget:function(event,player){
return player.storage.qimei_draw;
},
usable:1,
filter:function(event,player){
var target=player.storage.qimei_draw;
if(!target||!target.isIn()) return false;
if(event.name!='gain'||(event.player!=player&&event.player!=target)){
var evt1=event.getl(player);
if(!evt1||!evt1.hs||!evt1.hs.length){
var evt2=event.getl(target);
if(!evt2||!evt2.hs||!evt2.hs.length) return false;
}
}
return player.countCards('h')==target.countCards('h');
if(player.countCards('h')!=target.countCards('h')) return false;
var hasChange=function(event,player){
var gain=0,lose=0;
if(event.getg) gain=event.getg(player).length;
if(event.getl) lose=event.getl(player).hs.length;
return gain!=lose;
};
return hasChange(event,player)||hasChange(event,target);
},
content:function(){
'step 0'
if(trigger.delay===false) game.delayx();
var evt1=trigger.getl(player);
if((trigger.name=='gain'&&player==trigger.player)||(evt1&&evt1.hs&&evt1.hs.length)) player.storage.qimei_draw.draw();
var evt2=trigger.getl(player.storage.qimei_draw);
if((trigger.name=='gain'&&player==player.storage.qimei_draw)||evt2&&evt2.hs&&evt2.hs.length) player.draw();
'step 1'
var target=player.storage.qimei_draw;
player.logSkill('qimei_draw',target);
var drawer=[];
var hasChange=function(event,player){
var gain=0,lose=0;
if(event.getg) gain=event.getg(player).length;
if(event.getl) lose=event.getl(player).hs.length;
return gain!=lose;
};
if(hasChange(trigger,player)) drawer.push(target);
if(hasChange(trigger,target)) drawer.push(player);
if(drawer.length==1) drawer[0].draw();
else{
game.asyncDraw(drawer.sortBySeat());
game.delayex();
}
},
group:'qimei_hp',
onremove:true,
@ -2633,8 +2645,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lose:false,
delay:false,
line:true,
direct:true,
clearTime:true,
log:false,
prepare:function(cards,player,targets){
targets[0].logSkill('ruilve');
},

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.122',
'v1.9.122.2',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -5939,6 +5939,7 @@ window.noname_asset_list=[
'image/character/dc_liuyu.jpg',
'image/character/dc_luotong.jpg',
'image/character/dc_lvkuanglvxiang.jpg',
'image/character/dc_mengda.jpg',
'image/character/dc_ruiji.jpg',
'image/character/dc_sp_jiaxu.jpg',
'image/character/dc_sunru.jpg',
@ -5989,6 +5990,7 @@ window.noname_asset_list=[
'image/character/dongyun.jpg',
'image/character/dongzhao.jpg',
'image/character/dongzhuo.jpg',
'image/character/duanqiaoxiao.jpg',
'image/character/duanwei.jpg',
'image/character/dufuren.jpg',
'image/character/duji.jpg',
@ -6364,6 +6366,21 @@ window.noname_asset_list=[
'image/character/jsp_huangyueying.jpg',
'image/character/jsp_liubei.jpg',
'image/character/jsp_zhaoyun.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/jun_caocao.jpg',
'image/character/jun_liubei.jpg',
'image/character/jun_sunquan.jpg',
@ -6395,6 +6412,7 @@ window.noname_asset_list=[
'image/character/key_hiroto.jpg',
'image/character/key_hisako.jpg',
'image/character/key_inari.jpg',
'image/character/key_iriya.jpg',
'image/character/key_iwasawa.jpg',
'image/character/key_jojiro.jpg',
'image/character/key_kagari.jpg',
@ -6506,6 +6524,7 @@ window.noname_asset_list=[
'image/character/lukai.jpg',
'image/character/lukang.jpg',
'image/character/luotong.jpg',
'image/character/luoxian.jpg',
'image/character/lusu.jpg',
'image/character/luxun.jpg',
'image/character/luyi.jpg',
@ -6638,6 +6657,7 @@ window.noname_asset_list=[
'image/character/ol_huangzhong.jpg',
'image/character/ol_huaxin.jpg',
'image/character/ol_huaxiong.jpg',
'image/character/ol_huban.jpg',
'image/character/ol_jiangwei.jpg',
'image/character/ol_liaohua.jpg',
'image/character/ol_lisu.jpg',
@ -6984,6 +7004,7 @@ window.noname_asset_list=[
'image/character/re_zhuhuan.jpg',
'image/character/re_zhuran.jpg',
'image/character/re_zhurong.jpg',
'image/character/re_zhuzhi.jpg',
'image/character/re_zoushi.jpg',
'image/character/re_zuoci.jpg',
'image/character/ruanhui.jpg',
@ -6991,6 +7012,8 @@ window.noname_asset_list=[
'image/character/ruiji.jpg',
'image/character/sb_caocao.jpg',
'image/character/sb_caoren.jpg',
'image/character/sb_chengong.jpg',
'image/character/sb_diaochan.jpg',
'image/character/sb_fazheng.jpg',
'image/character/sb_ganning.jpg',
'image/character/sb_huanggai.jpg',
@ -7000,10 +7023,12 @@ window.noname_asset_list=[
'image/character/sb_liubei.jpg',
'image/character/sb_lvmeng.jpg',
'image/character/sb_machao.jpg',
'image/character/sb_pangtong.jpg',
'image/character/sb_sunquan.jpg',
'image/character/sb_sunshangxiang.jpg',
'image/character/sb_xiahoushi.jpg',
'image/character/sb_xuhuang.jpg',
'image/character/sb_yuanshao.jpg',
'image/character/sb_yujin.jpg',
'image/character/sb_zhangfei.jpg',
'image/character/sb_zhangjiao.jpg',
@ -7119,11 +7144,13 @@ window.noname_asset_list=[
'image/character/sp_zhugeliang.jpg',
'image/character/sp_zhujun.jpg',
'image/character/sp_zongyu.jpg',
'image/character/std_panfeng.jpg',
'image/character/sunce.jpg',
'image/character/sunchen.jpg',
'image/character/sundeng.jpg',
'image/character/sunhanhua.jpg',
'image/character/sunhao.jpg',
'image/character/sunhong.jpg',
'image/character/sunjian.jpg',
'image/character/sunlang.jpg',
'image/character/sunliang.jpg',
@ -7439,6 +7466,7 @@ window.noname_asset_list=[
'image/character/yanfuren.jpg',
'image/character/yangbiao.jpg',
'image/character/yangfu.jpg',
'image/character/yanghong.jpg',
'image/character/yanghuiyu.jpg',
'image/character/yangwan.jpg',
'image/character/yangxiu.jpg',
@ -7543,6 +7571,7 @@ window.noname_asset_list=[
'image/character/zhanghuyuechen.jpg',
'image/character/zhangji.jpg',
'image/character/zhangjiao.jpg',
'image/character/zhangjinyun.jpg',
'image/character/zhangkai.jpg',
'image/character/zhangliang.jpg',
'image/character/zhangliao.jpg',
@ -7605,31 +7634,6 @@ 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',

View File

@ -12058,7 +12058,9 @@
if(!fullskills.contains(event.skill)){
var info=get.info(event.skill);
var hidden=player.hiddenSkills.slice(0);
var invisible=player.invisibleSkills.slice(0);
game.expandSkills(hidden);
game.expandSkills(invisible);
if(hidden.contains(event.skill)){
if(!info.silent&&player.hasSkillTag('nomingzhi',false,null,true)){
event.finish();
@ -12070,6 +12072,9 @@
event.skillHidden=true;
}
}
else if(invisible.contains(event.skill)){
event.trigger('triggerInvisible');
}
else{
var keep=false;
for(var i in player.additionalSkills){
@ -12677,7 +12682,7 @@
if(game.modeSwapPlayer&&!_status.auto&&player.isUnderControl()&&!lib.filter.wuxieSwap(event)){
game.modeSwapPlayer(player);
}
var skills=player.getSkills(true);
var skills=player.getSkills('invisible').concat(lib.skill.global);
game.expandSkills(skills);
for(var i=0;i<skills.length;i++){
var info=lib.skill[skills[i]];
@ -12932,7 +12937,7 @@
delete event.dialog;
return;
}
var skills=player.getSkills(true);
var skills=player.getSkills('invisible').concat(lib.skill.global);
game.expandSkills(skills);
for(var i=0;i<skills.length;i++){
var info=lib.skill[skills[i]];
@ -15799,7 +15804,7 @@
player.markSkill(roundname);
}
var name=event.skill;
var players=player.getSkills(null,false,false);
var players=player.getSkills(false,false,false);
var equips=player.getSkills('e');
var global=lib.skill.global.slice(0);
var logInfo={
@ -15808,14 +15813,14 @@
event:_status.event,
};
if(info.sourceSkill){
logInfo.sourceSkill=name;
if(global.contains(name)){
logInfo.sourceSkill=info.sourceSkill;
if(global.contains(info.sourceSkill)){
logInfo.type='global';
}
else if(players.contains(name)){
else if(players.contains(info.sourceSkill)){
logInfo.type='player';
}
else if(equips.contains(name)){
else if(equips.contains(info.sourceSkill)){
logInfo.type='equip';
}
}
@ -17989,7 +17994,7 @@
hasUsableCard:function(name){
var player=this;
if(player.countCards('hs',name)) return true;
var skills=player.getSkills(true).concat(lib.skill.global);
var skills=player.getSkills('invisible').concat(lib.skill.global);
game.expandSkills(skills);
for(var i=0;i<skills.length;i++){
var ifo=get.info(skills[i]);
@ -19540,6 +19545,7 @@
skills.add(i);
}
if(arg2) skills.addArray(this.hiddenSkills);
if(arg2===false||arg2=='invisible') skills.addArray(this.invisibleSkills);
if(arg3!==false) skills.addArray(es);
for(var i in this.forbiddenSkills){
skills.remove(i);
@ -22294,7 +22300,7 @@
}
if(info){
var player=this;
var players=player.getSkills(null,false,false);
var players=player.getSkills(false,false,false);
var equips=player.getSkills('e');
var global=lib.skill.global.slice(0);
var logInfo={
@ -22303,14 +22309,14 @@
event:_status.event,
};
if(info.sourceSkill){
logInfo.sourceSkill=name;
if(global.contains(name)){
logInfo.sourceSkill=info.sourceSkill;
if(global.contains(info.sourceSkill)){
logInfo.type='global';
}
else if(players.contains(name)){
else if(players.contains(info.sourceSkill)){
logInfo.type='player';
}
else if(equips.contains(name)){
else if(equips.contains(info.sourceSkill)){
logInfo.type='equip';
}
}
@ -23011,6 +23017,41 @@
this.popup(skill);
game.log(this,'获得了技能','#g【'+get.translation(skill)+'】');
},
addInvisibleSkill:function(skill){
if(Array.isArray(skill)){
for(var i=0;i<skill.length;i++){
this.addInvisibleSkill(skill[i]);
}
}
else{
if(this.invisibleSkills.contains(skill)) return;
var info=lib.skill[skill];
if(!info) return;
this.invisibleSkills.add(skill);
this.addSkillTrigger(skill);
if(this.awakenedSkills.contains(skill)){
this.awakenSkill(skill);
return;
}
}
},
removeInvisibleSkill:function(skill){
if(!skill) return;
if(Array.isArray(skill)){
for(var i=0;i<skill.length;i++){
this.removeSkill(skill[i]);
}
}
else{
var info=lib.skill[skill];
if(info&&info.fixed&&arguments[1]!==true) return skill;
game.broadcastAll(function(player,skill){
player.invisibleSkills.remove(skill);
},this,skill);
if(!player.hasSkill(skill,true)) player.removeSkill(skill);
}
return skill;
},
addSkill:function(skill,checkConflict,nobroadcast,addToSkills){
if(Array.isArray(skill)){
for(var i=0;i<skill.length;i++){
@ -23328,6 +23369,7 @@
game.broadcastAll(function(player,skill){
player.skills.remove(skill);
player.hiddenSkills.remove(skill);
player.invisibleSkills.remove(skill);
delete player.tempSkills[skill];
for(var i in player.additionalSkills){
player.additionalSkills[i].remove(skill);
@ -24227,7 +24269,7 @@
},
hasWuxie:function(){
if(this.countCards('hs','wuxie')) return true;
var skills=this.getSkills(true).concat(lib.skill.global);
var skills=this.getSkills('invisible').concat(lib.skill.global);
game.expandSkills(skills);
for(var i=0;i<skills.length;i++){
var ifo=get.info(skills[i]);
@ -26864,7 +26906,7 @@
}
if(lib.config.compatiblemode){
(function(){
var skills=player.getSkills(true).concat(lib.skill.global);
var skills=player.getSkills('invisible').concat(lib.skill.global);
game.expandSkills(skills);
for(var i=0;i<skills.length;i++){
var info=get.info(skills[i]);
@ -27416,7 +27458,7 @@
}
}
}
var fullskills=game.expandSkills(player.getSkills().concat(lib.skill.global));
var fullskills=game.expandSkills(player.getSkills(false).concat(lib.skill.global));
var info=get.info(skill);
if((info.noHidden||get.mode()!='guozhan')&&!fullskills.contains(skill)){
return false;
@ -32988,21 +33030,43 @@
}
},
exit:function(){
if(lib.device=='ios'){
game.saveConfig('mode');
if(_status){
if(_status.reloading) return;
_status.reloading=true;
//安卓 / ios
if(lib.device) {
if(lib.device=='ios'){
game.saveConfig('mode');
if(_status){
if(_status.reloading)return;
_status.reloading=true;
}
if(_status.video&&!_status.replayvideo) {
localStorage.removeItem(lib.configprefix + 'playbackmode');
}
window.location.reload();
}
if(_status.video&&!_status.replayvideo){
localStorage.removeItem(lib.configprefix+'playbackmode');
else{
if(navigator.app&&navigator.app.exitApp){
navigator.app.exitApp();
}
}
window.location.reload();
}
else{
if(navigator.app&&navigator.app.exitApp){
navigator.app.exitApp();
//electron
else if(typeof process=='function'){
var versions=window.process.versions;
var electronVersion=parseFloat(versions.electron);
var remote;
if(electronVersion>=14){
remote=require('@electron/remote');
}else{
remote=require('electron').remote;
}
var thisWindow=remote.getCurrentWindow();
thisWindow.destroy();
window.process.exit();
}
//网页版
else{
window.onbeforeunload = null;
window.close();
}
},
open:function(url){
@ -35162,7 +35226,7 @@
skills2=player.getSkills(false,true,false);
}
else{
skills2=player.getSkills(true,true,false);
skills2=player.getSkills('invisible',true,false);
}
skills2=game.filterSkills(skills2.concat(lib.skill.global),player,player.getSkills('e').concat(lib.skill.global));
event._skillChoice=[];
@ -35175,7 +35239,7 @@
else if(info.enable=='phaseUse') enable=(event.type=='phase');
else if(typeof info.enable=='string') enable=(info.enable==event.name);
if(enable){
if(!game.expandSkills(player.getSkills().concat(lib.skill.global)).contains(skills2[i])&&(info.noHidden||get.mode()!='guozhan'||player.hasSkillTag('nomingzhi',false,null,true))) enable=false;
if(!game.expandSkills(player.getSkills(false).concat(lib.skill.global)).contains(skills2[i])&&(info.noHidden||get.mode()!='guozhan'||player.hasSkillTag('nomingzhi',false,null,true))) enable=false;
if(info.filter&&!info.filter(event,player)) enable=false;
if(info.viewAs&&typeof info.viewAs!='function'&&event.filterCard&&!event.filterCard(info.viewAs,player,event)) enable=false;
if(info.viewAs&&typeof info.viewAs!='function'&&info.viewAsFilter&&info.viewAsFilter(player)==false) enable=false;
@ -35201,7 +35265,7 @@
}
}
var equipskills=[];
var ownedskills=player.getSkills(true,false);
var ownedskills=player.getSkills('invisible',false);
game.expandSkills(ownedskills);
for(var i=0;i<skills.length;i++){
if(!ownedskills.contains(skills[i])){
@ -46563,7 +46627,15 @@
for(var i=0;i<hs.length;i++){
hs[i].goto(ui.special);
}
hs.sort(function(b,a){
if(game.me.hasSkillTag('sortCardByNum')){
var getn=function(card){
var num=get.number(card,game.me);
if(num<3) return 13+num;
return num;
}
hs.sort((a,b)=>(getn(b)-getn(a)));
}
else hs.sort(function(b,a){
if(a.name!=b.name) return lib.sort.card(a.name,b.name);
else if(a.suit!=b.suit) return lib.suit.indexOf(a)-lib.suit.indexOf(b);
else return a.number-b.number;
@ -47224,6 +47296,7 @@
node.phaseNumber=0;
node.skipList=[];
node.skills=[];
node.invisibleSkills=[];
node.initedSkills=[];
node.additionalSkills={};
node.disabledSkills={};
@ -52711,6 +52784,7 @@
skills[i]={
skills:lib.playerOL[i].skills,
hiddenSkills:lib.playerOL[i].hiddenSkills,
invisibleSkills:lib.playerOL[i].invisibleSkills,
additionalSkills:lib.playerOL[i].additionalSkills,
disabledSkills:lib.playerOL[i].disabledSkills,
tempSkills:lib.playerOL[i].tempSkills,

View File

@ -1,12 +1,10 @@
window.noname_update={
version:'1.9.122.1',
update:'1.9.122',
version:'1.9.122.2',
update:'1.9.122.1',
changeLog:[
'增大GPL协议的醒目性',
'整合@copcap 编写的代码',
'线下武将包《江山如故·起》(暂时不含许劭)',
'OL罗宪、胡班、孙弘十周年界朱治、杨弘',
'谋陈宫、貂蝉、庞统、袁绍;线下标潘凤',
'整合@copcap @shijian @disgrace2013的Pull Request',
'《江山如故·起》许劭及其配套机制',
'十周年孟达、段巧笑、张瑾云',
'其他技能调整和bug修复',
],
files:[
@ -26,30 +24,30 @@ window.noname_update={
//'card/zhenfa.js',
//'card/zhulu.js',
//'character/clan.js',
//'character/diy.js',
'character/diy.js',
//'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
//'character/mobile.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
'character/offline.js',
//'character/old.js',
//'character/ow.js',
//'character/rank.js',
//'character/refresh.js',
'character/rank.js',
'character/refresh.js',
//'character/sb.js',
//'character/shenhua.js',
//'character/sp.js',
//'character/sp2.js',
'character/shenhua.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
//'character/tw.js',
'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
//'character/yijiang.js',
//'character/yingbian.js',
'character/yijiang.js',
'character/yingbian.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'font/suits.ttf',
@ -67,7 +65,7 @@ window.noname_update={
//'mode/doudizhu.js',
//'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -239,6 +239,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
game.gameDraw(game.zhu,function(player){
if(_status.mode=='dianjiang') return 4;
if(_status.mode=='normal') return player==game.zhu?3:4;
if(_status.mode=='changban') return player==game.fan?5:4;
if(player.hasSkill('cuorui')){
player.logSkill('cuorui');
@ -834,7 +835,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},source,name,color);
game.log(source,'出场');
var num=source.maxHp;
var num=_status.mode == 'normal' ? 4 : source.maxHp;
if(player.hasSkill('cuorui')){
player.logSkill('cuorui');
num=2+_status.characterChoice[player.identity].length;