Add files via upload

This commit is contained in:
Spmario233 2020-02-14 13:33:43 +08:00 committed by GitHub
parent 3a1bdcbf2b
commit 2efebc60d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 1227 additions and 962 deletions

BIN
audio/skill/reluanji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/reluanji2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -142,7 +142,10 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(game.hasPlayer(function(current){ if(game.hasPlayer(function(current){
return (get.attitude(target,current)<0&& return (get.attitude(target,current)<0&&
target.canUse(card,current,true,true)&& target.canUse(card,current,true,true)&&
!current.getEquip('baiyin')&& !current.hasSkillTag('filterDamage',null,{
player:player,
card:card,
})&&
get.effect(current,card,target)>0); get.effect(current,card,target)>0);
})){ })){
return 1; return 1;
@ -835,12 +838,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
name:card?card.name:null, name:card?card.name:null,
target:player, target:player,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:player,
card:card
})) return; })) return;
if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget'; if(card.name=='nanman'||card.name=='wanjian') return 'zerotarget';
if(card.name=='sha'){ if(card.name=='sha'){
var equip1=player.getEquip(1); var equip1=player.getEquip(1);
if(equip1&&equip1.name=='zhuque') return 1.9; if(equip1&&equip1.name=='zhuque') return 1.9;
if(equip1&&equip1.name=='qinggang') return 1;
if(!card.nature) return 'zerotarget'; if(!card.nature) return 'zerotarget';
} }
} }
@ -914,8 +920,27 @@ game.import('card',function(lib,game,ui,get,ai,_status){
//priority:-10, //priority:-10,
content:function(){ content:function(){
trigger.num=1; trigger.num=1;
},
ai:{
filterDamage:true,
skillTagFilter:function(player,tag,arg){
if(player.hasSkillTag('unequip2')) return false;
if(arg&&arg.player){
if(arg.player.hasSkillTag('unequip',false,{
name:arg.card?arg.card.name:null,
target:player,
card:arg.card,
})) return false;
if(arg.player.hasSkillTag('unequip_ai',false,{
name:arg.card?arg.card.name:null,
target:player,
card:arg.card,
})) return false;
if(arg.player.hasSkillTag('jueqing',false,player)) return false;
} }
}, },
},
},
zhuque_skill:{ zhuque_skill:{
equipSkill:true, equipSkill:true,
trigger:{player:'useCard1'}, trigger:{player:'useCard1'},

View File

@ -1060,10 +1060,14 @@ game.import('card',function(lib,game,ui,get,ai,_status){
nothunder:true, nothunder:true,
effect:{ effect:{
target:function(card,player,target,current){ target:function(card,player,target,current){
if(card.name=='sha'&&player.getEquip('qinggang')||target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:target,
card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:target,
card:card card:card
})) return; })) return;
if(get.tag(card,'natureDamage')) return 'zerotarget'; if(get.tag(card,'natureDamage')) return 'zerotarget';

View File

@ -163,12 +163,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}, },
result:{ result:{
target:function(player,target){ target:function(player,target){
if(player.hasSkill('jiu')&&!target.getEquip('baiyin')){ if(player.hasSkill('jiu')&&!target.hasSkillTag('filterDamage',null,{
player:player,
card:{name:'sha'},
})){
if(get.attitude(player,target)>0){ if(get.attitude(player,target)>0){
return -6; return -7;
} }
else{ else{
return -3; return -4;
} }
} }
return -1.5; return -1.5;
@ -234,8 +237,11 @@ game.import('card',function(lib,game,ui,get,ai,_status){
type:'basic', type:'basic',
cardcolor:'red', cardcolor:'red',
notarget:true, notarget:true,
nodelay:true,
content:function(){ content:function(){
event.result='shaned'; event.result='shaned';
event.getParent().delayx=false;
game.delay(0.5);
}, },
ai:{ ai:{
basic:{ basic:{
@ -1441,39 +1447,36 @@ game.import('card',function(lib,game,ui,get,ai,_status){
equipSkill:true, equipSkill:true,
trigger:{player:'useCard'}, trigger:{player:'useCard'},
forced:true, forced:true,
audio:'qinglong_skill',
filter:function(event,player){ filter:function(event,player){
return get.mode()=='guozhan'&&event.card.name=='sha'; return get.mode()=='guozhan'&&event.card.name=='sha';
}, },
content:function(){ content:function(){
var players=trigger.targets; if(!_status.qinglong_guozhan) _status.qinglong_guozhan=[];
for(var i=0;i<players.length;i++){ _status.qinglong_guozhan=[];
players[i].addTempSkill('qinglong_guozhan_mingzhi'); _status.qinglong_guozhan.add(trigger);
players[i].storage.qinglong_guozhan_mingzhi.add(trigger.card); game.countPlayer2(function(current){
} current.addTempSkill('qinglong_guozhan_mingzhi');
});
var next=game.createEvent('qinglong_guozhan');
event.next.remove(next);
trigger.after.add(next);
next.setContent(function(){
_status.qinglong_guozhan.remove(event.parent);
});
} }
}, },
qinglong_guozhan_mingzhi:{ qinglong_guozhan_mingzhi:{
equipSkill:true,
vanish:true,
silent:true,
onremove:true,
trigger:{global:'useCardAfter'},
filter:function(event,player){
return player.storage.qinglong_guozhan_mingzhi.contains(event.card);
},
init:function(player){
if(!player.storage.qinglong_guozhan_mingzhi){
player.storage.qinglong_guozhan_mingzhi=[];
}
},
content:function(){
player.storage.qinglong_guozhan_mingzhi.remove(trigger.card);
if(!player.storage.qinglong_guozhan_mingzhi.length){
player.removeSkill('qinglong_guozhan_mingzhi');
}
},
ai:{ ai:{
nomingzhi:true nomingzhi:true,
skillTagFilter:function(player){
if(_status.qinglong_guozhan){
for(var i=0;i<_status.qinglong_guozhan.length;i++){
if(_status.qinglong_guozhan[i].targets.contains(player)) return true;
}
}
return false;
},
} }
}, },
hanbing_skill:{ hanbing_skill:{
@ -1496,7 +1499,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target.hp==1) return false; if(target.hp==1) return false;
if(event.num>1||player.hasSkill('tianxianjiu')|| if(event.num>1||player.hasSkill('tianxianjiu')||
player.hasSkill('luoyi2')||player.hasSkill('reluoyi2')) return false; player.hasSkill('luoyi2')||player.hasSkill('reluoyi2')) return false;
if(target.countCards('he')<2) return -1; if(target.countCards('he')<2) return false;
var num=0; var num=0;
var cards=target.getCards('he'); var cards=target.getCards('he');
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
@ -1542,11 +1545,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
ai:{ ai:{
effect:{ effect:{
target:function(card,player,target){ target:function(card,player,target){
if(player.getEquip('qinggang')&&card.name=='sha'||target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:player,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:player,
card:card
})) return; })) return;
if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget'; if(card.name=='sha'&&get.color(card)=='black') return 'zerotarget';
} }
@ -1612,13 +1619,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger.target.addTempSkill('qinggang2'); trigger.target.addTempSkill('qinggang2');
trigger.target.storage.qinggang2.add(trigger.card); trigger.target.storage.qinggang2.add(trigger.card);
}, },
/*ai:{ ai:{
unequip:true, unequip_ai:true,
skillTagFilter:function(player,tag,arg){ skillTagFilter:function(player,tag,arg){
if(arg&&arg.name=='sha') return true; if(arg&&arg.name=='sha') return true;
return false; return false;
} }
}*/ }
}, },
qinggang2:{ qinggang2:{
firstDo:true, firstDo:true,
@ -1855,6 +1862,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
trigger:{player:['chooseToRespondBegin','chooseToUseBegin']}, trigger:{player:['chooseToRespondBegin','chooseToUseBegin']},
filter:function(event,player){ filter:function(event,player){
if(event.responded) return false; if(event.responded) return false;
if(event.bagua_skill) return false;
if(!event.filterCard({name:'shan'},player,event)) return false; if(!event.filterCard({name:'shan'},player,event)) return false;
if(event.name=='chooseToRespond'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false; if(event.name=='chooseToRespond'&&!lib.filter.cardRespondable({name:'shan'},player,event)) return false;
if(player.hasSkillTag('unequip2')) return false; if(player.hasSkillTag('unequip2')) return false;
@ -1880,6 +1888,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
"step 0" "step 0"
event.bagua_skill=true;
player.judge('bagua',function(card){return (get.color(card)=='red')?1.5:-0.5}); player.judge('bagua',function(card){return (get.color(card)=='red')?1.5:-0.5});
"step 1" "step 1"
if(result.judge>0){ if(result.judge>0){
@ -1892,11 +1901,15 @@ game.import('card',function(lib,game,ui,get,ai,_status){
respondShan:true, respondShan:true,
effect:{ effect:{
target:function(card,player,target,effect){ target:function(card,player,target,effect){
if(player.getEquip('qinggang')&&card.name=='sha'||target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:player,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:player,
card:card
})) return; })) return;
if(get.tag(card,'respondShan')) return 0.5; if(get.tag(card,'respondShan')) return 0.5;
} }
@ -2249,6 +2262,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
cixiong_skill:'雌雄双股剑', cixiong_skill:'雌雄双股剑',
qinggang_skill:'青釭剑', qinggang_skill:'青釭剑',
qinglong_skill:'青龙偃月刀', qinglong_skill:'青龙偃月刀',
qinglong_guozhan:'青龙偃月刀',
zhangba_skill:'丈八蛇矛', zhangba_skill:'丈八蛇矛',
guanshi_skill:'贯石斧', guanshi_skill:'贯石斧',
fangtian_skill:'方天画戟', fangtian_skill:'方天画戟',

View File

@ -15,6 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kagari:['female','shen',3,['kagari_zongsi'],['key']], key_kagari:['female','shen',3,['kagari_zongsi'],['key']],
key_rei:['male','key',4,['xiandeng','shulv','xisheng']], key_rei:['male','key',4,['xiandeng','shulv','xisheng']],
key_komari:['female','key',3,['komari_tiankou','komari_xueshang']], key_komari:['female','key',3,['komari_tiankou','komari_xueshang']],
key_yukine:['female','key',3,['yukine_wenzhou']],
// diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']], // diy_caocao:['male','wei',4,['xicai','diyjianxiong','hujia']],
// diy_hanlong:['male','wei',4,['siji','ciqiu']], // diy_hanlong:['male','wei',4,['siji','ciqiu']],
diy_feishi:['male','shu',3,['shuaiyan','moshou']], diy_feishi:['male','shu',3,['shuaiyan','moshou']],
@ -91,7 +92,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy:{ diy:{
diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua"], diy_tieba:["diy_wenyang","ns_zuoci","ns_lvzhi","ns_wangyun","ns_nanhua","ns_nanhua_left","ns_nanhua_right","ns_huamulan","ns_huangzu","ns_jinke","ns_yanliang","ns_wenchou","ns_caocao","ns_caocaosp","ns_zhugeliang","ns_wangyue","ns_yuji","ns_xinxianying","ns_guanlu","ns_simazhao","ns_sunjian","ns_duangui","ns_zhangbao","ns_masu","ns_zhangxiu","ns_lvmeng","ns_shenpei","ns_yujisp","ns_yangyi","ns_liuzhang","ns_xinnanhua"],
diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"], diy_default:["diy_feishi","diy_liuyan","diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji","diy_liufu","diy_xizhenxihong","diy_liuzan","diy_zaozhirenjun","diy_yangyi","diy_tianyu"],
diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari"], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_kagari","key_umi","key_rei","key_komari","key_yukine"],
}, },
}, },
characterIntro:{ characterIntro:{
@ -105,6 +106,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。',
}, },
characterTitle:{ characterTitle:{
key_yukine:'#gClannad',
key_komari:'#bLittle Busters!', key_komari:'#bLittle Busters!',
key_umi:'#bSummer Pockets', key_umi:'#bSummer Pockets',
key_rei:'#gHarmonia', key_rei:'#gHarmonia',
@ -148,6 +150,82 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yuji:['zuoci'] yuji:['zuoci']
}, },
skill:{ skill:{
yukine_wenzhou:{
trigger:{global:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return event.player.countCards('he')>0;
},
content:function(){
"step 0"
event.forceDie=true;
var ask=trigger.player.chooseCard('he',get.prompt('yukine_wenzhou'));
if(player==trigger.player){
ask.set('prompt2','选择一张牌,然后从牌堆中获得一张与此牌类型相同的牌。本回合内使用与此牌类型相同的牌时不可被其他角色响应。');
}
else ask.set('prompt2','将一张牌交给'+get.translation(player)+'然后其可以选择:交给你一张牌;或令你从牌堆中获得一张与此牌类型相同的牌,且你本回合内使用与此牌类型相同的牌时不可被响应。');
ask.set('ai',function(card){
if(get.attitude(_status.event.player,_status.event.getParent().player)>0) return 10-get.value(card);
return -1;
});
"step 1"
if(result.bool){
player.logSkill('yukine_wenzhou',trigger.player);
event.type=get.type(result.cards[0],'trick');
if(trigger.player!=player) trigger.player.give(result.cards,player,'giveAuto');
}
else event.finish();
"step 2"
if(player==trigger.player||player.countCards('he')==0){
event._result={index:1};
}
else{
player.chooseControl().set('choiceList',[
'将一张牌交给'+get.translation(trigger.player),
'令'+get.translation(trigger.player)+'从牌堆中获得一张'+get.translation(event.type)+'牌,且其本回合内使用与此牌名称相同的牌时不可被响应',
]).set('forceDie',true).set('ai',function(){
if(get.attitude(_status.event.player,_status.event.getTrigger().player)>0) return 1;
return 0;
});
}
"step 3"
if(result.index==1){
var magic=get.cardPile2(function(card){
return get.type(card,'trick')==event.type;
});
if(magic){
trigger.player.addTempSkill('yukine_magic','phaseUseEnd');
trigger.player.storage.yukine_magic.add(magic.name);
trigger.player.gain(magic,'draw');
}
event.finish();
}
else player.chooseCard('he',true,'选择要交给'+get.translation(trigger.player)+'的牌').set('ai',function(card){
return -get.value(card,_status.event.getTrigger().player);
});
"step 4"
if(result.bool) player.give(result.cards,trigger.player,'giveAuto');
},
},
yukine_magic:{
trigger:{player:'useCard'},
forced:true,
popup:false,
charlotte:true,
filter:function(event,player){
return player.storage.yukine_magic&&player.storage.yukine_magic.contains(event.card.name);
},
content:function(){
trigger.directHit.addArray(game.filterPlayer(function(current){
if(player!=current) return true;
return !player.hasSkill('yukine_wenzhou');
}));
},
onremove:true,
init:function(player,skill){
if(!player.storage[skill]) player.storage[skill]=[];
},
},
komari_tiankou:{ komari_tiankou:{
trigger:{ trigger:{
player:'useCard2', player:'useCard2',
@ -287,6 +365,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 0' 'step 0'
player.loseHp(); player.loseHp();
'step 1' 'step 1'
player.draw(2);
player.insertPhase(); player.insertPhase();
player.storage.umi_shiroha=trigger.player; player.storage.umi_shiroha=trigger.player;
player.addTempSkill('umi_shiroha'); player.addTempSkill('umi_shiroha');
@ -338,30 +417,37 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.skills=skills; event.skills=skills;
event.chosen=[]; event.chosen=[];
'step 2' 'step 2'
var next=player.chooseButton(['是否获得一名已死亡角色的一个技能?',[event.chara,'player']]); var next=player.chooseTarget('是否获得一名已死亡角色的一个技能?');
next.set('chara',event.chara); next.set('chara',event.chara);
next.set('skills',event.skills); next.set('skills',event.skills);
next.set('chosen',event.chosen); next.set('chosen',event.chosen);
next.set('filterButton',function(button){ next.set('filterTarget',function(card,player,target){
if(target.isAlive()) return false;
var evt=_status.event; var evt=_status.event;
if(!evt.chosen.length) return true; if(!evt.chosen.length) return true;
var skills=evt.skills[evt.chara.indexOf(button.link)]; var skills=evt.skills[evt.chara.indexOf(target)];
if(skills.length==1&&skills[0]==evt.chosen[0]) return false; if(skills.length==1&&skills[0]==evt.chosen[0]) return false;
return true; return true;
}); });
next.set('deadTarget',true);
next.set('ai',function(){return Math.random()}); next.set('ai',function(){return Math.random()});
'step 3' 'step 3'
if(!result.bool) event.finish(); if(!result.bool) event.finish();
else{ else{
event.temp=result.links[0]; event.temp=result.targets[0];
var list=event.skills[event.chara.indexOf(result.links[0])]; var list=event.skills[event.chara.indexOf(result.targets[0])];
result.links[0].line(player,{color:[251, 193, 217]}) result.targets[0].line(player,{color:[251, 193, 217]})
list.removeArray(event.chosen); list.removeArray(event.chosen);
player.chooseControl(list).set('prompt','选择获得一个技能'); player.chooseControl(list).set('prompt','选择获得一个技能');
} }
'step 4' 'step 4'
player.addSkill(result.control,get.groupnature(event.temp.group)||'key'); player.addSkill(result.control,get.groupnature(event.temp.group)||'key');
player.addSkill(result.control); player.addSkill(result.control);
var info=get.info(result.control);
if(info.zhuSkill){
if(!player.storage.zhuSkill_umi_qihuan) player.storage.zhuSkill_umi_qihuan=[];
player.storage.zhuSkill_umi_qihuan.push(result.control);
}
event.chosen.push(result.control); event.chosen.push(result.control);
if(event.chosen.length<2) event.goto(2); if(event.chosen.length<2) event.goto(2);
}, },
@ -5481,6 +5567,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_umi2:'鹰原羽未', key_umi2:'鹰原羽未',
key_rei:'零', key_rei:'零',
key_komari:'神北小毬', key_komari:'神北小毬',
key_yukine:'宫泽有纪宁',
lucia_duqu:'毒躯', lucia_duqu:'毒躯',
lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。<br>②当你因【毒】失去体力时,你改为回复等量的体力。<br>③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。<br>②当你因【毒】失去体力时,你改为回复等量的体力。<br>③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。',
lucia_zhenren:'振刃', lucia_zhenren:'振刃',
@ -5502,7 +5589,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
umi_chaofan:'炒饭', umi_chaofan:'炒饭',
umi_chaofan_info:'出牌阶段限一次你可以弃置两张花色不同的手牌并选择一名其他角色。你摸一张牌若你的体力值大于2目标角色回复1点体力等于2目标角色摸两张牌小于2目标角色受到1点无来源且对应渠道为这两张牌的火焰伤害。', umi_chaofan_info:'出牌阶段限一次你可以弃置两张花色不同的手牌并选择一名其他角色。你摸一张牌若你的体力值大于2目标角色回复1点体力等于2目标角色摸两张牌小于2目标角色受到1点无来源且对应渠道为这两张牌的火焰伤害。',
umi_lunhui:'轮回', umi_lunhui:'轮回',
umi_lunhui_info:'一名其他角色的回合结束时若你的手牌数小于体力值则你可以失去1点体力。若如此做进行一个额外回合且你于此回合内计算与此角色的距离视为1。', umi_lunhui_info:'一名其他角色的回合结束时若你的手牌数小于体力值则你可以失去1点体力。若如此做摸两张牌并进行一个额外回合且你于此回合内计算与此角色的距离视为1。',
umi_shiroha:'轮回 - 延时效果', umi_shiroha:'轮回 - 延时效果',
umi_qihuan:'七幻', umi_qihuan:'七幻',
umi_qihuan_info:'限定技当你处于濒死状态时你可以移去此武将牌。若如此做你回复X点体力X为场上势力数。然后你可获得场上已死亡角色武将牌上的至多两个技能。', umi_qihuan_info:'限定技当你处于濒死状态时你可以移去此武将牌。若如此做你回复X点体力X为场上势力数。然后你可获得场上已死亡角色武将牌上的至多两个技能。',
@ -5510,6 +5597,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
komari_tiankou_info:'锁定技,当你使用红色的非伤害性基本牌/锦囊牌选择目标时或成为其他角色使用的这些牌的目标时你选择一项1.摸一张牌2.为此牌增加一个目标', komari_tiankou_info:'锁定技,当你使用红色的非伤害性基本牌/锦囊牌选择目标时或成为其他角色使用的这些牌的目标时你选择一项1.摸一张牌2.为此牌增加一个目标',
komari_xueshang:'血殇', komari_xueshang:'血殇',
komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成<span class=yellowtext>1</span>点伤害,然后对所有其他角色依次造成<span class=firetext>1</span>点伤害。当有角色因此法进入濒死状态时你加1点体力上限并回复1点体力然后失去此技能并终止此技能的所有后续结算。', komari_xueshang_info:'锁定技,蓄力技,当有角色死亡时,你对自己造成<span class=yellowtext>1</span>点伤害,然后对所有其他角色依次造成<span class=firetext>1</span>点伤害。当有角色因此法进入濒死状态时你加1点体力上限并回复1点体力然后失去此技能并终止此技能的所有后续结算。',
yukine_wenzhou:'问咒',
yukine_wenzhou_info:'一名角色的出牌阶段开始时,其可以交给你一张牌。若如此做,你选择一项:交给其一张牌,或令其从牌堆中获得一张与此牌类型相同的牌,且其于此阶段内使用与此牌牌名相同的牌时无法被响应。',
ns_chuanshu:'传术', ns_chuanshu:'传术',
ns_chuanshu_info:'<span class=yellowtext>限定技</span> 当一名其他角色进入濒死状态时你可以令其选择获得技能【雷击】或【鬼道】其回复体力至1并摸两张牌。当该被【传术】的角色造成或受到一次伤害后你摸一张牌。其阵亡后你重置技能【传术】', ns_chuanshu_info:'<span class=yellowtext>限定技</span> 当一名其他角色进入濒死状态时你可以令其选择获得技能【雷击】或【鬼道】其回复体力至1并摸两张牌。当该被【传术】的角色造成或受到一次伤害后你摸一张牌。其阵亡后你重置技能【传术】',

View File

@ -435,7 +435,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
lianpo:{ lianpo:{
audio:true, audio:true,
trigger:{player:'phaseAfter'}, trigger:{global:'phaseAfter'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
return player.getStat('kill')>0; return player.getStat('kill')>0;
@ -598,14 +598,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
renjie2:{ renjie2:{
audio:true, audio:true,
trigger:{player:'discardAfter'}, trigger:{player:'loseAfter'},
forced:true, forced:true,
filter:function(event){ filter:function(event){
if(event.type!='discard'||!event.cards2) return false;
var evt=event.getParent('phaseDiscard'); var evt=event.getParent('phaseDiscard');
return evt&&evt.name=='phaseDiscard' return evt&&evt.name=='phaseDiscard'
}, },
content:function(){ content:function(){
player.addMark('renjie',trigger.cards.length); player.addMark('renjie',trigger.cards2.length);
} }
}, },
sbaiyin:{ sbaiyin:{
@ -638,7 +639,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
"step 0" "step 0"
player.chooseCard('是否弃置一枚“忍”,并发动【鬼才】?','he').ai=function(card){ player.chooseCard('是否弃置一枚“忍”,并发动〖鬼才〗?','he',function(card){
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).ai=function(card){
var trigger=_status.event.parent._trigger; var trigger=_status.event.parent._trigger;
var player=_status.event.player; var player=_status.event.player;
var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]); var result=trigger.judge(card)-trigger.judge(trigger.player.judging[0]);

View File

@ -781,13 +781,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
oldxuanfeng:{ oldxuanfeng:{
audio:'xuanfeng', audio:'xuanfeng',
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ return event.es&&event.es.length>0;
if(event.cards[i].original=='e') return true;
}
return false;
}, },
content:function(){ content:function(){
"step 0" "step 0"

View File

@ -798,7 +798,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0" "step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('xinguidao'),'he',function(card){ get.translation(trigger.player.judging[0])+''+get.prompt('xinguidao'),'he',function(card){
return get.color(card)=='black'; if(get.color(card)!='black') return false;
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('ai',function(card){ }).set('ai',function(card){
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;
@ -1302,6 +1308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}); });
"step 1" "step 1"
if(result.bool){ if(result.bool){
result.targets.sortBySeat();
player.logSkill('new_retuxi',result.targets); player.logSkill('new_retuxi',result.targets);
player.gainMultiple(result.targets); player.gainMultiple(result.targets);
trigger.num-=result.targets.length; trigger.num-=result.targets.length;
@ -2676,7 +2683,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
"step 0" "step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('reguicai'),'he').set('ai',function(card){ get.translation(trigger.player.judging[0])+''+get.prompt('reguicai'),'he',function(card){
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('ai',function(card){
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;
var judging=_status.event.judging; var judging=_status.event.judging;
@ -3056,21 +3070,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
relianying:{ relianying:{
audio:2, audio:2,
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
if(player.countCards('h')) return false; if(player.countCards('h')) return false;
for(var i=0;i<event.cards.length;i++){ return event.hs&&event.hs.length;
if(event.cards[i].original=='h') return true;
}
return false;
}, },
content:function(){ content:function(){
"step 0" "step 0"
var num=0; var num=trigger.hs.length;
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].original=='h') num++;
}
player.chooseTarget('选择发动连营的目标',[1,num]).ai=function(target){ player.chooseTarget('选择发动连营的目标',[1,num]).ai=function(target){
var player=_status.event.player; var player=_status.event.player;
if(player==target) return get.attitude(player,target)+10; if(player==target) return get.attitude(player,target)+10;

View File

@ -348,43 +348,36 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
"xinfu_zuilun":{ "xinfu_zuilun":{
group:["xinfu_zuilun_count"],
subSkill:{
count:{
sub:true,
silent:true,
popup:false,
trigger:{
player:"discardAfter",
},
filter:function (event,player){
return _status.currentPhase==player;
},
content:function (){
player.addTempSkill('xinfu_zuilun_discarded');
},
forced:true,
},
discarded:{
sub:true,
},
},
audio:2, audio:2,
trigger:{ trigger:{
player:"phaseJieshuBegin", player:"phaseJieshuBegin",
}, },
check:function (event,player){ check:function (event,player){
var num=0; var num=0;
if(player.hasSkill('xinfu_zuilun_discarded')) num++; if(player.getHistory('lose',function(evt){
return evt.type=='discard';
}).length) num++;
if(!player.isMinHandcard()) num++; if(!player.isMinHandcard()) num++;
if(!player.getStat('damage')) num++; if(!player.getStat('damage')) num++;
if(num==3) return player.hp>=2; if(num==3) return player.hp>=2;
return true;
},
prompt:function (event,player){
var num=3;
if(player.getHistory('lose',function(evt){
return evt.type=='discard';
}).length) num--;
if(!player.isMinHandcard()) num--;
if(!player.getStat('damage')) num--;
return get.prompt('xinfu_zuilun')+'(可获得'+get.cnNumber(num)+'张牌)'
}, },
content:function (){ content:function (){
'step 0' 'step 0'
event.num=0; event.num=0;
event.cards=get.cards(3); event.cards=get.cards(3);
if(player.hasSkill('xinfu_zuilun_discarded')) event.num++; if(player.getHistory('lose',function(evt){
return evt.type=='discard';
}).length) event.num++;
if(!player.isMinHandcard()) event.num++; if(!player.isMinHandcard()) event.num++;
if(!player.getStat('damage')) event.num++; if(!player.getStat('damage')) event.num++;
'step 1' 'step 1'
@ -1172,6 +1165,21 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
"nzry_binglve":{audio:2}, "nzry_binglve":{audio:2},
nzry_huaiju_ai:{
charlotte:true,
ai:{
filterDamage:true,
skillTagFilter:function(player,tag,arg){
if(!player.hasMark('nzry_huaiju')) return false;
if(!game.hasPlayer(function(current){
return current.hasSkill('tachibana_effect');
})) return false;
if(arg&&arg.player){
if(arg.player.hasSkillTag('jueqing',false,player)) return false;
}
},
},
},
"nzry_huaiju":{ "nzry_huaiju":{
marktext:"橘", marktext:"橘",
intro:{ intro:{
@ -1187,6 +1195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
content:function(){ content:function(){
player.addMark('nzry_huaiju',3); player.addMark('nzry_huaiju',3);
player.addSkill('nzry_huaiju_ai');
}, },
group:['tachibana_effect'], group:['tachibana_effect'],
}, },
@ -1246,6 +1255,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.loseHp(); player.loseHp();
}; };
target.addMark('nzry_huaiju',1); target.addMark('nzry_huaiju',1);
target.addSkill('nzry_huaiju_ai');
}, },
}, },
"nzry_zhenglun":{ "nzry_zhenglun":{
@ -1271,36 +1281,54 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
direct:true, direct:true,
filter:function (event,player){ filter:function (event,player){
return event.num>0; var cards=[];
player.getHistory('lose',function(evt){
if(evt.type=='discard'&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards2);
});
return cards.length>0;
}, },
content:function (){ content:function (){
'step 0' 'step 0'
event.str1='令至多'+trigger.num+'名角色摸一张牌'; var cards=[];
event.str2='对任意名体力值之和为'+trigger.num+'的角色造成一点伤害'; player.getHistory('lose',function(evt){
if(evt.type=='discard'&&evt.getParent('phaseDiscard')==trigger) cards.addArray(evt.cards2);
});
event.num=cards.length;
event.str1='令至多'+event.num+'名角色摸一张牌';
event.str2='对任意名体力值之和为'+event.num+'的角色造成一点伤害';
player.chooseControl('cancel2').set('ai',function(){ player.chooseControl('cancel2').set('ai',function(){
if(game.countPlayer(function(current){return get.attitude(player,current)<0&&current.hp==trigger.num})>0&&trigger.num<=3) return 1; if(game.countPlayer(function(current){return get.attitude(player,current)<0&&current.hp==event.num})>0&&event.num<=3) return 1;
return 0; return 0;
}).set('choiceList',[event.str1,event.str2]).set('prompt','是否发动【溃诛】?'); }).set('choiceList',[event.str1,event.str2]).set('prompt','是否发动【溃诛】?');
'step 1' 'step 1'
if(result.control=='cancel2') event.finish(); if(result.control=='cancel2') event.finish();
event.control=[event.str1,event.str2][result.index]; event.control=[event.str1,event.str2][result.index];
'step 2' 'step 2'
var str='请选择【溃诛】的目标'; var str='请选择〖溃诛〗的目标';
if(event.bool==false) str='所选目标体力之和不足'+trigger.num+',请重选'; if(event.bool==false) str='<br>所选目标体力之和不足'+event.num+',请重选';
if(event.control==event.str2){ if(event.control==event.str2){
player.chooseTarget(str,[1,Infinity],function(card,player,target){ player.chooseTarget(str,function(card,player,target){
var targets=ui.selected.targets; var targets=ui.selected.targets;
var num=0; var num=0;
for(var i=0;i<targets.length;i++){ for(var i=0;i<targets.length;i++){
num+=targets[i].hp; num+=targets[i].hp;
}; };
return num+target.hp<=trigger.num; return num+target.hp<=_status.event.num;
}).set('ai',function(target){ }).set('ai',function(target){
if(ui.selected.targets[0]!=undefined) return -1; if(ui.selected.targets[0]!=undefined) return -1;
return get.attitude(player,target)<0; return get.attitude(player,target)<0;
}).promptbar='none'; }).set('promptbar','none').set('num',event.num).set('selectTarget',function(){
}else{ var targets=ui.selected.targets;
player.chooseTarget('请选择【溃诛】的目标',[1,trigger.num]).ai=function(target){ var num=0;
for(var i=0;i<targets.length;i++){
num+=targets[i].hp;
}
if(num==_status.event.num) return ui.selected.targets.length;
return ui.selected.targets.length+1;
});
}
else{
player.chooseTarget('请选择〖溃诛〗的目标',[1,event.num]).ai=function(target){
return get.attitude(player,target); return get.attitude(player,target);
}; };
}; };
@ -1311,21 +1339,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.line(targets); player.line(targets);
player.logSkill('nzry_kuizhu',targets); player.logSkill('nzry_kuizhu',targets);
game.asyncDraw(targets); game.asyncDraw(targets);
}else{ }
else{
var num=0; var num=0;
for(var i=0;i<targets.length;i++){ for(var i=0;i<targets.length;i++){
num+=targets[i].hp; num+=targets[i].hp;
}; };
if(num<trigger.num){ if(num<event.num){
event.bool=false; event.bool=false;
event.goto(2); event.goto(2);
}else{ }
else{
player.line(targets); player.line(targets);
player.logSkill('nzry_kuizhu'); player.logSkill('nzry_kuizhu');
for(var i=0;i<targets.length;i++){ for(var i=0;i<targets.length;i++){
targets[i].damage(); targets[i].damage();
}; };
if(targets.length>=2) player.damage(); if(targets.length>=2) player.loseHp();
}; };
}; };
}; };
@ -1333,53 +1363,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
"nzry_zhizheng":{ "nzry_zhizheng":{
audio:2, audio:2,
group:["nzry_zhizheng_1","nzry_zhizheng_2"],
trigger:{
player:'useCardAfter'
},
filter:function (event,player){
return player.isPhaseUsing();
},
forced:true,
popup:false,
content:function(){
player.storage.nzry_zhizheng++;
},
subSkill:{
others:{
sub:true,
mod:{ mod:{
targetEnabled:function(card,player,target){ playerEnabled:function(card,player,target){
if(player.hasSkill('nzry_zhizheng')&&player.isPhaseUsing()&&get.distance(target,player,'attack')>1) return false; var info=get.info(card);
if(target!=player&&(!info||!info.singleCard||!ui.selected.targets.length)&&player.isPhaseUsing()&&get.distance(target,player,'attack')>1) return false;
}, },
}, },
},
"1":{
trigger:{
player:['phaseUseBefore','phaseUseAfter']
},
forced:true,
popup:false,
content:function(){
if(event.triggername=='phaseUseBefore') game.countPlayer(function(current){
if(current!=player){
current.addTempSkill('nzry_zhizheng_others','phaseUseAfter');
}
});
player.storage.nzry_zhizheng=0;
},
},
"2":{
trigger:{ trigger:{
player:'phaseUseEnd' player:'phaseUseEnd'
}, },
direct:true, forced:true,
filter:function (event,player){ filter:function (event,player){
return player.storage.nzry_zhizheng<game.countPlayer(function(current){return get.distance(current,player,'attack')>1}); return player.getHistory('useCard',function(evt){
return evt.getParent('phaseUse')==event;
})<game.countPlayer(function(current){return get.distance(current,player,'attack')>1})&&game.hasPlayer(function(target){
return get.distance(target,player,'attack')>1&&target.countDiscardableCards(player,'he');
});
}, },
content:function(){ content:function(){
'step 0' 'step 0'
player.chooseTarget(get.prompt('nzry_zhizheng'),"弃置一名攻击范围内不包含你的角色的一张牌",function(card,player,target){ player.chooseTarget("请选择〖掣政〗的目标","弃置一名攻击范围内不包含你的角色的一张牌",true,function(card,player,target){
return get.distance(target,player,'attack')>1&&target.countDiscardableCards(player,'he'); return get.distance(target,player,'attack')>1&&target.countDiscardableCards(player,'he');
}).ai=function(target){ }).ai=function(target){
return -get.attitude(player,target); return -get.attitude(player,target);
@ -1387,13 +1390,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(result.bool){ if(result.bool){
player.line(result.targets); player.line(result.targets);
player.logSkill('nzry_zhizheng');
player.discardPlayerCard(result.targets[0],'he',1,true); player.discardPlayerCard(result.targets[0],'he',1,true);
}; };
}, },
}, },
},
},
"nzry_lijun":{ "nzry_lijun":{
unique:true, unique:true,
global:'nzry_lijun1', global:'nzry_lijun1',
@ -2858,14 +2858,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tuntian:{ tuntian:{
audio:2, audio:2,
audioname:['gz_dengai'], audioname:['gz_dengai'],
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
if(player==_status.currentPhase) return false; if(player==_status.currentPhase) return false;
for(var i=0;i<event.cards.length;i++){ return event.cards2&&event.cards2.length>0;
if(event.cards[i].original&&event.cards[i].original!='j') return true;
}
return false;
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -3263,82 +3260,47 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guzheng:{ guzheng:{
audio:2, audio:2,
audioname:['re_zhangzhang'], audioname:['re_zhangzhang'],
// unique:true,
// gainable:true,
group:["guzheng_count"],
subSkill:{
count:{
trigger:{global:['loseEnd','cardsDiscardAfter']},
forced:true,
silent:true,
popup:false,
filter:function(event,player){
if(event.guzhenged) return false;
if(!event.cards||!event.cards.length) return false;
var evt=event.getParent('phaseDiscard');
return evt&&evt.name=='phaseDiscard'&&evt.player!=player;
},
content:function(){
var evt=event.getParent('phaseDiscard');
trigger.guzhenged=true;
if(!evt.guzhengcards) evt.guzhengcards=[];
evt.guzhengcards.addArray(trigger.cards);
},
sub:true,
},
},
trigger:{global:'phaseDiscardAfter'}, trigger:{global:'phaseDiscardAfter'},
filter:function(event,player){ filter:function(event,player){
if(event.player!=player&&event.player.isIn()&& if(event.player!=player&&event.player.isIn()){
event.guzhengcards&&event.guzhengcards.length){ return event.player.getHistory('lose',function(evt){
for(var i=0;i<event.guzhengcards.length;i++){ return evt.type=='discard'&&evt.getParent('phaseDiscard')==event&&evt.hs.filterInD('d').length>0;
if(get.position(event.guzhengcards[i],true)=='d'){ }).length>0;
return true;
}
} }
return false; return false;
}
}, },
checkx:function(event,player){ checkx:function(event,player,cards,cards2){
var du=false; if(cards.length>2||get.attitude(player,event.player)>0) return true;
var num=0; for(var i=0;i<cards2.length;i++){
for(var i=0;i<event.guzhengcards.length;i++){ if(get.value(cards2[i],event.player)<0) return true;
if(get.position(event.guzhengcards[i],true)=='d'){
num++;
if(event.guzhengcards[i].name=='du'){
du=true;
} }
}
}
if(get.attitude(player,event.player)>0){
if(du&&num<=3){
return false; return false;
}
return true;
}
if(du) return true;
return num>2;
}, },
direct:true, direct:true,
content:function(){ content:function(){
"step 0" "step 0"
event.cards=trigger.guzhengcards.slice(0); var cards=[];
for(var i=0;i<event.cards.length;i++){ var cards2=[];
if(get.position(event.cards[i],true)!='d'){ game.getGlobalHistory('cardMove',function(evt){
event.cards.splice(i,1);i--; if(evt.name=='cardsDiscard'&&evt.getParent('phaseDiscard')==trigger) cards.addArray(evt.cards.filterInD('d'));
} });
} game.countPlayer2(function(current){
if(event.cards.length==0){ current.getHistory('lose',function(evt){
event.finish(); if(evt.type!='discard'||evt.getParent('phaseDiscard')!=trigger) return;
return; cards.addArray(evt.cards.filterInD('d'));
} if(current==trigger.player) cards2.addArray(evt.hs.filterInD('d'));
var check=lib.skill.guzheng.checkx(trigger,player); })
player.chooseCardButton(event.cards,'固政:选择令'+get.translation(trigger.player)+'收回的牌').set('ai',function(button){ });
event.cards=cards;
var check=lib.skill.guzheng.checkx(trigger,player,cards,cards2);
player.chooseCardButton(cards,'固政:选择令'+get.translation(trigger.player)+'收回的牌').set('ai',function(button){
if(_status.event.check){ if(_status.event.check){
return 20-get.value(button.link); return 20-get.value(button.link,_status.event.getTrigger().player);
} }
return 0; return 0;
}).set('check',check); }).set('check',check).set('cards',cards2).set('filterButton',function(button){
return _status.event.cards.contains(button.link);
});
"step 1" "step 1"
if(result.bool){ if(result.bool){
game.delay(0.5); game.delay(0.5);
@ -5421,7 +5383,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
content:function(){ content:function(){
"step 0"; "step 0";
player.chooseTarget(get.prompt2('releiji')).ai=function(target){ player.chooseTarget(get.prompt2('releiji'),function(card,player,target){
return target!=player;
}).ai=function(target){
if(target.hasSkill('hongyan')) return 0; if(target.hasSkill('hongyan')) return 0;
return get.damageEffect(target,_status.event.player,_status.event.player,'thunder'); return get.damageEffect(target,_status.event.player,_status.event.player,'thunder');
}; };
@ -6200,16 +6164,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
fenji:{ fenji:{
audio:2, audio:2,
trigger:{ trigger:{
global:["gainAfter","discardAfter"], global:["gainAfter","loseAfter"],
}, },
filter:function (event){ filter:function (event){
var player=event[event.name=='gain'?'source':'player']; var evt=event;
if(!player||_status.currentPhase==player||player.isDead()) return false; if(event.name=='lose'){
if(event[event.name=='gain'?'bySelf':'notBySelf']!=true) return false; if(event.type!='discard') return false;
for(var i=0;i<event.cards.length;i++){ evt=event.getParent();
if(event.cards[i].original=='h') return true;
} }
return false; var player=evt[event.name=='gain'?'source':'player'];
if(!player||_status.currentPhase==player||player.isDead()) return false;
if(evt[event.name=='gain'?'bySelf':'notBySelf']!=true) return false;
if(evt.name=='lose') return evt.hs.length>0;
return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.length>0;
}, },
check:function(event,player){ check:function(event,player){
return get.attitude(player,event[event.name=='gain'?'source':'player'])>2; return get.attitude(player,event[event.name=='gain'?'source':'player'])>2;
@ -6286,7 +6253,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0" "step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('guidao'),'he',function(card){ get.translation(trigger.player.judging[0])+''+get.prompt('guidao'),'he',function(card){
return get.color(card)=='black'; if(get.color(card)!='black') return false;
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('ai',function(card){ }).set('ai',function(card){
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;

View File

@ -685,6 +685,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cardEnabled:function(card,player){ cardEnabled:function(card,player){
if(['trick','equip'].contains(get.type(card,'trick'))) return false; if(['trick','equip'].contains(get.type(card,'trick'))) return false;
}, },
cardSavable:function(card,player){
if(['trick','equip'].contains(get.type(card,'trick'))) return false;
},
cardUsable:function(card,player,num){ cardUsable:function(card,player,num){
if(card.name=='sha'){ if(card.name=='sha'){
return num+player.countMark('neifa_basic')*Math.min(5,player.countCards('h',function(cardx){ return num+player.countMark('neifa_basic')*Math.min(5,player.countCards('h',function(cardx){
@ -732,6 +735,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cardEnabled:function(card,player){ cardEnabled:function(card,player){
if(get.type(card)=='basic') return false; if(get.type(card)=='basic') return false;
}, },
cardSavable:function(card,player){
if(get.type(card)=='basic') return false;
},
}, },
intro:{ intro:{
name:'内伐 - 非基本牌', name:'内伐 - 非基本牌',
@ -854,7 +860,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var next=player.chooseToDiscard(); var next=player.chooseToDiscard();
if(event.triggername=='damageBegin1'){ if(event.triggername=='damageBegin1'){
event.target=trigger.player; event.target=trigger.player;
next.set('goon',get.attitude(player,event.target)<0&&!event.target.getEquip('baiyin')), next.set('goon',get.attitude(player,event.target)<0&&!event.target.hasSkillTag('filterDamage',null,{
player:player,
card:trigger.card,
})),
next.set('prompt2','弃置一张手牌,令对其造成的伤害+1'); next.set('prompt2','弃置一张手牌,令对其造成的伤害+1');
} }
else{ else{
@ -920,7 +929,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseToDiscard('是否弃置一张手牌,令'+get.translation(trigger.card)+'对'+get.translation(trigger.target)+'的伤害+1','h').set('logSkill',['hmxili',trigger.target]).set('goon',function(){ player.chooseToDiscard('是否弃置一张手牌,令'+get.translation(trigger.card)+'对'+get.translation(trigger.target)+'的伤害+1','h').set('logSkill',['hmxili',trigger.target]).set('goon',function(){
var target=trigger.target; var target=trigger.target;
if(get.attitude(player,target)>=0) return false; if(get.attitude(player,target)>=0) return false;
if(target.getEquip('baiyin')||target.mayHaveShan()) return false; if(trigger.target.hasSkillTag('filterDamage',null,{
player:trigger.player,
card:trigger.card,
})||target.mayHaveShan()) return false;
return true; return true;
}()).ai=function(card){ }()).ai=function(card){
if(_status.event.goon) return 5-get.value(card); if(_status.event.goon) return 5-get.value(card);
@ -1169,6 +1181,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
prepare:'give', prepare:'give',
discard:false, discard:false,
lose:false,
content:function(){ content:function(){
target.equip(cards[0]); target.equip(cards[0]);
}, },
@ -1228,7 +1241,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'pyzhuren_destroy', group:'pyzhuren_destroy',
}, },
pyzhuren_destroy:{ pyzhuren_destroy:{
trigger:{global:['loseEnd','cardsDiscardAfter']}, trigger:{global:['loseAfter','cardsDiscardAfter']},
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
var cs=event.cards; var cs=event.cards;
@ -1291,7 +1304,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(_status.event.goon) return 6-get.value(card); if(_status.event.goon) return 6-get.value(card);
return -1; return -1;
}; };
next.set('goon',get.attitude(player,trigger.player)<0&&!trigger.player.getEquip('baiyin')) next.set('goon',get.attitude(player,trigger.player)<0&&!trigger.player.hasSkillTag('filterDamage',null,{
player:player,
card:trigger.card,
}));
next.logSkill=[event.name,trigger.player]; next.logSkill=[event.name,trigger.player];
'step 1' 'step 1'
if(result.bool) trigger.num++; if(result.bool) trigger.num++;
@ -2329,14 +2345,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//蒋干 //蒋干
weicheng:{ weicheng:{
audio:2, audio:2,
trigger:{global:'gainEnd'}, trigger:{global:'gainAfter'},
//forced:true, //forced:true,
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
if(event.source==player&&event.player!=player&&player.hp>player.countCards('h')){ if(event.source==player&&event.player!=player&&player.hp>player.countCards('h')){
for(var i=0;i<event.cards.length;i++){ return event.relatedLose&&event.relatedLose.hs&&event.relatedLose.length>0;
if(event.cards[i].original=='h') return true;
}
} }
return false; return false;
}, },
@ -2406,7 +2420,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
direct:true, direct:true,
check:function(trigger,player){ check:function(trigger,player){
if(get.attitude(player,trigger.player)>=-1) return false; if(get.attitude(player,trigger.player)>=-1) return false;
return !trigger.player.getEquip('baiyin')&&!trigger.player.getEquip('rewrite_baiyin'); return !trigger.player.hasSkillTag('filterDamage',null,{
player:player,
card:trigger.card,
});
}, },
content:function (){ content:function (){
"step 0" "step 0"
@ -2468,7 +2485,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
"biaozhao2":{ "biaozhao2":{
trigger:{ trigger:{
global:["loseEnd","cardsDiscardEnd"], global:["loseAfter","cardsDiscardAfter"],
}, },
charlotte:true, charlotte:true,
forced:true, forced:true,
@ -2884,7 +2901,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){ content:function (){
"step 0" "step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('huanshi_three'),'he').set('ai',function(card){ get.translation(trigger.player.judging[0])+''+get.prompt('huanshi_three'),'he',function(card){
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('ai',function(card){
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;
var judging=_status.event.judging; var judging=_status.event.judging;
@ -3356,20 +3380,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player:"loseEnd", player:"loseEnd",
}, },
filter:function(event,player){ filter:function(event,player){
var cs=event.cards; return event.es.length>0;
for(var i=0;i<cs.length;i++){
if(get.type(cs[i])=='equip'&&cs[i].original=='e') return true;
}
return false;
}, },
content:function (){ content:function (){
var cs=trigger.cards; lib.skill.xinshanjia.sync(player);
var num=0;
for(var i=0;i<cs.length;i++){
if(get.type(cs[i])=='equip'&&cs[i].original=='e') num++;
}
player.storage.xinshanjia+=num;
player.markSkill('xinshanjia');
}, },
}, },
}, },
@ -3381,13 +3395,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:"本局游戏内已失去过#张装备区内的牌", content:"本局游戏内已失去过#张装备区内的牌",
}, },
frequent:true, frequent:true,
init:function (player,skill){ sync:function(player){
if(!player.storage[skill]) player.storage[skill]=0; var history=player.actionHistory;
var num=0;
for(var i=0;i<history.length;i++){
for(var j=0;j<history[i].lose.length;j++){
num+=history[i].lose[j].es.length;
}
}
player.storage.xinshanjia=num;
if(num>0) player.markSkill('xinshanjia');
}, },
content:function (){ content:function (){
'step 0' 'step 0'
player.draw(3); player.draw(3);
'step 1' 'step 1'
lib.skill.xinshanjia.sync(player);
var num=3-player.storage.xinshanjia; var num=3-player.storage.xinshanjia;
if(num>0){ if(num>0){
player.chooseToDiscard('he',true,num); player.chooseToDiscard('he',true,num);
@ -3980,6 +4003,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
baijia:{ baijia:{
audio:2, audio:2,
unique:true, unique:true,
derivation:'bmcanshi',
juexingji:true, juexingji:true,
ai:{ ai:{
combo:'guju' combo:'guju'
@ -5268,11 +5292,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseDiscardEnd'}, trigger:{player:'phaseDiscardEnd'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
if(event.cards){ var cards=[];
if(event.cards.length<2) return false; player.getHistory('lose',function(evt){
if(evt.type=='discard'&&evt.getParent('phaseDiscard')==event) cards.addArray(evt.cards2);
});
if(cards){
if(cards.length<2) return false;
var suits=[]; var suits=[];
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<cards.length;i++){
var suit=get.suit(event.cards[i]); var suit=get.suit(cards[i]);
if(suits.contains(suit)){ if(suits.contains(suit)){
return false; return false;
} }
@ -6168,7 +6196,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
qizhou:{ qizhou:{
trigger:{player:['phaseBefore','equipAfter','loseAfter']}, trigger:{player:['phaseBefore','equipEnd','loseEnd']},
forced:true, forced:true,
popup:false, popup:false,
derivation:['mashu','reyingzi','duanbing','fenwei'], derivation:['mashu','reyingzi','duanbing','fenwei'],
@ -7261,11 +7289,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
hongde:{ hongde:{
audio:2, audio:2,
trigger:{player:['gainEnd','loseEnd']}, trigger:{player:['gainAfter','loseAfter']},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
if(event.name=='lose'&&event.type=='gain'&&event.getParent().player==player) return false; if(event.name=='lose'&&event.type=='gain'&&event.getParent().player==player) return false;
return event.cards&&event.cards.length>1; if(event.name=='gain') return event.cards&&event.cards.length>1;
return event.cards2&&event.cards2.length>1;
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -10510,27 +10539,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var result=trigger.judge(card)-trigger.judge(judging); var result=trigger.judge(card)-trigger.judge(judging);
var attitude=get.attitude(player,trigger.player); var attitude=get.attitude(player,trigger.player);
return result*attitude; return result*attitude;
}).set('judging',trigger.player.judging[0]); }).set('judging',trigger.player.judging[0]).set('filterButton',function(button){
var player=_status.event.player;
var card=button.link;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
});
"step 1" "step 1"
if(result.bool){ if(result.bool){
player.logSkill('midao',trigger.player); event.forceDie=true;
var card=result.links[0]; player.respond(result.links,'midao','highlight','noOrdering');
player.storage.yishe.remove(card); result.cards=result.links;
player.syncStorage('yishe');
if(player.storage.yishe.length==0){
player.recover();
player.unmarkSkill('yishe');
} }
else{ else{
player.markSkill('yishe'); event.finish();
} }
"step 2"
player.$throw(card); if(result.bool){
game.broadcastAll(function(card){ var card=result.cards[0];
if(card.clone){ player.storage.yishe.remove(card);
card.clone.classList.add('thrownhighlight');
}
},card);
if(trigger.player.judging[0].clone){ if(trigger.player.judging[0].clone){
trigger.player.judging[0].clone.classList.remove('thrownhighlight'); trigger.player.judging[0].clone.classList.remove('thrownhighlight');
game.broadcast(function(card){ game.broadcast(function(card){
@ -10540,9 +10570,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},trigger.player.judging[0]); },trigger.player.judging[0]);
game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone])); game.addVideo('deletenode',player,get.cardsInfo([trigger.player.judging[0].clone]));
} }
trigger.player.judging[0]=card; game.cardsDiscard(trigger.player.judging[0]);
trigger.orderingCards.addArray(result.links); trigger.player.judging[0]=result.cards[0];
game.log(player,'的判定牌改为',card); trigger.orderingCards.addArray(result.cards);
game.log(trigger.player,'的判定牌改为',card);
game.delay(2); game.delay(2);
} }
}, },
@ -10901,13 +10932,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
global:'die', global:'die',
}, },
silent:true, silent:true,
firstDo:true,
filter:function(event,player){ filter:function(event,player){
if(event.name=='gain'){ if(event.name=='lose') return event.hs.length>0;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='h') return true;
}
return false;
}
return true; return true;
}, },
content:function(){ content:function(){
@ -11054,7 +11081,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:'manjuan', audio:'manjuan',
forced:true, forced:true,
priority:15, priority:15,
trigger:{player:'gainEnd'}, trigger:{player:'gainAfter'},
filter:function(event,player){ filter:function(event,player){
return event.type!='xinmanjuan'; return event.type!='xinmanjuan';
}, },
@ -11093,12 +11120,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
manjuan:{ manjuan:{
audio:true, audio:true,
trigger:{global:'discardAfter'}, trigger:{global:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
if(event.type!='discard') return false;
if(event.player==player) return false; if(event.player==player) return false;
if(!player.countCards('he')) return false; if(!player.countCards('he')) return false;
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards[i])=='d'){ if(get.position(event.cards2[i],true)=='d'){
return true; return true;
} }
} }
@ -11113,10 +11141,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 1" "step 1"
var cards=[]; var cards=[];
var suits=['club','spade','heart','diamond'] var suits=['club','spade','heart','diamond']
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards[i])=='d'){ if(get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards[i]); cards.push(trigger.cards2[i],true);
suits.remove(get.suit(trigger.cards[i])); suits.remove(get.suit(trigger.cards2[i]));
} }
} }
if(cards.length){ if(cards.length){
@ -11844,10 +11872,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
lirang:{ lirang:{
audio:2, audio:2,
trigger:{player:'discardAfter'}, trigger:{player:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return false;
if(get.position(event.cards[i])=='d'){ for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards2[i])=='d'){
return true; return true;
} }
} }
@ -11859,9 +11888,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"step 0" "step 0"
if(trigger.delay==false) game.delay(); if(trigger.delay==false) game.delay();
event.cards=[]; event.cards=[];
for(var i=0;i<trigger.cards.length;i++){ event.logged=false;
if(get.position(trigger.cards[i])=='d'){ for(var i=0;i<trigger.cards2.length;i++){
event.cards.push(trigger.cards[i]); if(get.position(trigger.cards2[i],true)=='d'){
event.cards.push(trigger.cards2[i]);
//ui.special.appendChild(trigger.cards[i]); //ui.special.appendChild(trigger.cards[i]);
} }
} }
@ -11990,12 +12020,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
shenxian:{ shenxian:{
audio:2, audio:2,
trigger:{global:'discardAfter'}, trigger:{global:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
if(event.player==player||_status.currentPhase==player) return false; if(event.type!='discard'||event.player==player||_status.currentPhase==player) return false;
if(player.hasSkill('shenxian2')) return false; if(player.hasSkill('shenxian2')) return false;
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<event.cards2.length;i++){
if(get.type(event.cards[i])=='basic'){ if(get.type(event.cards2[i])=='basic'){
return true; return true;
} }
} }
@ -12023,6 +12053,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.judge(); player.judge();
"step 1" "step 1"
player.storage.qiangwu=result.number; player.storage.qiangwu=result.number;
player.addTempSkill('qiangwu3','phaseUseEnd');
}, },
ai:{ ai:{
result:{ result:{
@ -12030,6 +12061,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
order:11 order:11
}, },
},
qiangwu3:{
mod:{ mod:{
targetInRange:function(card,player){ targetInRange:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&card.number<player.storage.qiangwu) return true; if(_status.currentPhase==player&&card.name=='sha'&&card.number<player.storage.qiangwu) return true;
@ -12038,17 +12071,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(_status.currentPhase==player&&card.name=='sha'&&card.number>player.storage.qiangwu) return Infinity; if(_status.currentPhase==player&&card.name=='sha'&&card.number>player.storage.qiangwu) return Infinity;
} }
}, },
group:['qiangwu2','qiangwu3'] trigger:{player:'useCard1'},
},
qiangwu2:{
trigger:{player:'phaseUseBegin'},
silent:true,
content:function(){
delete player.storage.qiangwu;
}
},
qiangwu3:{
trigger:{player:'useCard'},
filter:function(event,player){ filter:function(event,player){
if(_status.currentPhase==player&&event.card.name=='sha'&& if(_status.currentPhase==player&&event.card.name=='sha'&&
event.card.number>player.storage.qiangwu) return true; event.card.number>player.storage.qiangwu) return true;
@ -12056,6 +12079,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
forced:true, forced:true,
popup:false, popup:false,
firstDo:true,
content:function(){ content:function(){
if(player.stat[player.stat.length-1].card.sha>0){ if(player.stat[player.stat.length-1].card.sha>0){
player.stat[player.stat.length-1].card.sha--; player.stat[player.stat.length-1].card.sha--;
@ -12165,7 +12189,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audioname:['liushan'] audioname:['liushan']
}, },
shoucheng:{ shoucheng:{
trigger:{global:'loseEnd'}, trigger:{global:'loseAfter'},
audio:2, audio:2,
check:function(event,player){ check:function(event,player){
return get.attitude(player,event.player)>0; return get.attitude(player,event.player)>0;
@ -12173,10 +12197,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(event.player.isDead()||event.player.countCards('h')) return false; if(event.player.isDead()||event.player.countCards('h')) return false;
if(_status.currentPhase==event.player) return false; if(_status.currentPhase==event.player) return false;
for(var i=0;i<event.cards.length;i++){ return event.hs&&event.hs.length>0;
if(event.cards[i].original=='h') return true;
}
return false;
}, },
logTarget:'player', logTarget:'player',
content:function(){ content:function(){
@ -12505,15 +12526,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
sijian:{ sijian:{
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
direct:true, direct:true,
audio:2, audio:2,
filter:function(event,player){ filter:function(event,player){
if(player.countCards('h')) return false; if(player.countCards('h')) return false;
for(var i=0;i<event.cards.length;i++){ return event.hs&&event.hs.length>0;
if(event.cards[i].original=='h') return true;
}
return false;
}, },
content:function(){ content:function(){
"step 0" "step 0"
@ -13141,6 +13159,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else{ else{
return get.color(card)=='black'?0:-10+result; return get.color(card)=='black'?0:-10+result;
} }
}).set('filterButton',function(button){
var player=_status.event.target;
var card=button.link;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('judge',judge).set('attitude',attitude); }).set('judge',judge).set('attitude',attitude);
"step 1" "step 1"
if(result.bool){ if(result.bool){
@ -13177,14 +13203,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mingzhe:{ mingzhe:{
audio:2, audio:2,
trigger:{player:['useCardAfter','respondAfter','discardAfter']}, trigger:{player:['useCard','respond','loseAfter']},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
if(player==_status.currentPhase) return false; if(player==_status.currentPhase) return false;
if(event.cards){ if(event.name!='lose') return get.color(event.card)=='red';
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return false;
if(get.color(event.cards[i])=='red'&& if(event.cards2){
event.cards[i].original!='j') return true; for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i])=='red') return true;
} }
} }
return false; return false;
@ -13192,10 +13219,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
"step 0" "step 0"
event.count=1; event.count=1;
if(trigger.name=='discard'){ if(trigger.name=='lose'){
event.count=0; event.count=0;
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards[i])=='red'&&trigger.cards[i].original!='j') event.count++; if(get.color(trigger.cards2[i])=='red') event.count++;
} }
} }
"step 1" "step 1"

View File

@ -210,7 +210,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
"step 0" "step 0"
player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+ player.chooseCard(get.translation(trigger.player)+'的'+(trigger.judgestr||'')+'判定为'+
get.translation(trigger.player.judging[0])+''+get.prompt('guicai'),'h').set('ai',function(card){ get.translation(trigger.player.judging[0])+''+get.prompt('guicai'),'h',function(card){
var player=_status.event.player;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
if(mod!='unchanged') return mod;
return true;
}).set('ai',function(card){
var trigger=_status.event.getTrigger(); var trigger=_status.event.getTrigger();
var player=_status.event.player; var player=_status.event.player;
var judging=_status.event.judging; var judging=_status.event.judging;
@ -1969,14 +1976,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
lianying:{ lianying:{
audio:2, audio:2,
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
if(player.countCards('h')) return false; if(player.countCards('h')) return false;
for(var i=0;i<event.cards.length;i++){ return event.hs&&event.hs.length>0;
if(event.cards[i].original=='h') return true;
}
return false;
}, },
content:function(){ content:function(){
player.draw(); player.draw();
@ -1999,20 +2003,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xiaoji:{ xiaoji:{
audio:2, audio:2,
audioname:['sp_sunshangxiang','re_sunshangxiang'], audioname:['sp_sunshangxiang','re_sunshangxiang'],
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ return event.es&&event.es.length>0;
if(event.cards[i].original=='e') return true;
}
return false;
}, },
content:function(){ content:function(){
var num=0; "step 0"
for(var i=0;i<trigger.cards.length;i++){ event.count=trigger.es.length;
if(trigger.cards[i].original=='e') num+=2; "step 1"
event.count--;
player.draw(2);
"step 2"
if(event.count>0){
player.chooseBool(get.prompt2('xiaoji')).set('frequentSkill','xiaoji').ai=lib.filter.all;
}
"step 3"
if(result.bool){
player.logSkill('xiaoji');
event.goto(1);
} }
player.draw(num);
}, },
ai:{ ai:{
noe:true, noe:true,

View File

@ -368,9 +368,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'使用'+get.translation(cards)+'。(没有距离限制)', '使用'+get.translation(cards)+'。(没有距离限制)',
'将'+get.translation(cards)+'当做【杀】使用。', '将'+get.translation(cards)+'当做【杀】使用。',
]).set('ai',function(){ ]).set('ai',function(){
var list=[0,1]; return _status.event.choice;
return list.randomGet(); }).set('choice',target.getUseValue(card,false)>target.getUseValue({name:'sha',cards:cards})?0:1);
});
} }
else if(bool1){ else if(bool1){
event.directindex=0; event.directindex=0;
@ -407,19 +406,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{ subSkill:{
lose:{ lose:{
trigger:{ trigger:{
player:"loseEnd", global:"phaseDiscardBegin",
}, },
audio:'xinfu_bijing',
filter:function (event,player){ filter:function (event,player){
if(!player.storage.xinfu_bijing) return false; if(!player.storage.xinfu_bijing) return false;
if(_status.currentPhase==player) return false; if(event.player==player) return false;
return event.cards.contains(player.storage.xinfu_bijing); return player.getHistory('lose',function(evt){
return evt.cards.contains(player.storage.xinfu_bijing);
}).length>0&&event.player.countCards('he')>0;
}, },
forced:true, forced:true,
silent:true, logTarget:'player',
popup:false,
content:function (){ content:function (){
_status.currentPhase.storage.bijing=player; trigger.player.chooseToDiscard(2,true,'he');
_status.currentPhase.addTempSkill('xinfu_bijing_effect');
}, },
sub:true, sub:true,
}, },
@ -430,7 +430,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
filter:function (event,player){ filter:function (event,player){
if(!player.storage.xinfu_bijing)return false; if(!player.storage.xinfu_bijing)return false;
return get.owner(player.storage.xinfu_bijing)==player; return player.getCards('h').contains(player.storage.xinfu_bijing);
}, },
content:function (){ content:function (){
player.discard(player.storage.xinfu_bijing); player.discard(player.storage.xinfu_bijing);
@ -438,20 +438,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
sub:true, sub:true,
}, },
effect:{
trigger:{
player:"phaseDiscardBegin",
},
forced:true,
silent:true,
popup:false,
content:function (){
player.storage.bijing.logSkill('xinfu_bijing');
player.storage.bijing.line(player,'green');
player.chooseToDiscard(2,'he',true);
},
sub:true,
},
}, },
trigger:{ trigger:{
player:"phaseJieshuBegin", player:"phaseJieshuBegin",
@ -1878,25 +1864,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forced:true, forced:true,
audio:2, audio:2,
trigger:{ trigger:{
player:["discardAfter","enterGame"], player:["loseAfter","enterGame"],
global:"gameDrawAfter", global:"gameDrawAfter",
}, },
filter:function (event,player){ filter:function (event,player){
if(event.name!='discard') return true; if(event.name!='lose') return true;
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return false;
if(!player.hasMark('xinfu_falu_'+get.suit(event.cards[i]))) return true; for(var i=0;i<event.cards2.length;i++){
if(!player.hasMark('xinfu_falu_'+get.suit(event.cards2[i]))) return true;
} }
return false; return false;
}, },
content:function (){ content:function (){
if(trigger.name!='discard'){ if(trigger.name!='lose'){
for(var i=0;i<lib.suit.length;i++){ for(var i=0;i<lib.suit.length;i++){
if(!player.hasMark('xinfu_falu_'+lib.suit[i])) player.addMark('xinfu_falu_'+lib.suit[i]); if(!player.hasMark('xinfu_falu_'+lib.suit[i])) player.addMark('xinfu_falu_'+lib.suit[i]);
} }
return; return;
} }
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
var suit=get.suit(trigger.cards[i]); var suit=get.suit(trigger.cards2[i]);
if(!player.hasMark('xinfu_falu_'+suit)) player.addMark('xinfu_falu_'+suit); if(!player.hasMark('xinfu_falu_'+suit)) player.addMark('xinfu_falu_'+suit);
} }
}, },
@ -2061,8 +2048,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player.hasMark('xinfu_falu_heart'); return player.hasMark('xinfu_falu_heart');
}, },
check:function (event,player){ check:function (event,player){
if(get.attitude(player,event.player>0)) return false; if(get.attitude(player,event.player)>=0) return false;
if(event.player.getEquip('baiyin')||event.player.getEquip('rewrite_baiyin')) return false; if(event.player.hasSkillTag('filterDamage',null,{
player:player,
card:event.card,
})) return false;
return player.hasMark('xinfu_falu_spade')||get.color(ui.cardPile.firstChild)=='black'; return player.hasMark('xinfu_falu_spade')||get.color(ui.cardPile.firstChild)=='black';
}, },
prompt2:function(event){ prompt2:function(event){
@ -2134,9 +2124,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var sha=false; var sha=false;
var jiu=false; var jiu=false;
for(var i=0;i<hs.length;i++){ for(var i=0;i<hs.length;i++){
if(game.hasPlayer(function(current){ if(trigger.player.hasValueTarget(hs[i])){
return trigger.player.canUse(hs[i],current)&&get.effect(current,hs[i],trigger.player,trigger.player)>0;
})){
if(hs[i].name=='sha'&&!sha){ if(hs[i].name=='sha'&&!sha){
sha=true; sha=true;
map.basic+=2; map.basic+=2;
@ -2164,7 +2152,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delete player.storage.xinfu_yanyu2; delete player.storage.xinfu_yanyu2;
}, },
trigger:{ trigger:{
global:["loseEnd","cardsDiscardEnd"], global:["loseAfter","cardsDiscardAfter"],
}, },
direct:true, direct:true,
filter:function (event,player){ filter:function (event,player){
@ -2206,9 +2194,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var att=get.attitude(_status.event.player,target); var att=get.attitude(_status.event.player,target);
var card=_status.event.card; var card=_status.event.card;
var val=get.value(card); var val=get.value(card);
if(target==_status.currentPhase&&game.hasPlayer(function(current){ if(target==_status.currentPhase&&target.hasValueTarget(card)) att=att*2;
return target.canUse(card,current)&&get.effect(current,card,target,target)>0;
})) att=att*2;
return att*val; return att*val;
}).set('card',event.togain); }).set('card',event.togain);
} }
@ -2449,7 +2435,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var raweffect=function(player,target){ var raweffect=function(player,target){
if(player.countCards('h','sha')){ if(player.countCards('h','sha')){
return get.effect(target,{name:'sha'},player,target); return get.effect(target,{name:'sha'},player,target);
}else{ }
else{
var att=get.attitude(player,target); var att=get.attitude(player,target);
var nh=target.countCards('h'); var nh=target.countCards('h');
if(att>0){ if(att>0){
@ -2697,15 +2684,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"qinguo_lose":{ "qinguo_lose":{
audio:2, audio:2,
trigger:{ trigger:{
player:"loseEnd", player:"loseAfter",
}, },
filter:function (event,player){ filter:function (event,player){
if(event.getParent().name=='equip') return false; if(event.getParent().name=='equip') return false;
if(player.hp!=player.countCards('e')||!player.isDamaged()) return false; if(player.hp!=player.countCards('e')||!player.isDamaged()) return false;
for(var i=0;i<event.cards.length;i++){ return event.es&&event.es.length>0;
if(event.cards[i].original=='e') return true;
}
return false;
}, },
frequent:true, frequent:true,
content:function (){ content:function (){
@ -3143,19 +3127,29 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_gongqing":{ "xinfu_gongqing":{
audio:true, audio:true,
trigger:{ trigger:{
player:"damageBegin4", player:["damageBegin3","damageBegin4"],
}, },
forced:true, forced:true,
filter:function (event,player){ filter:function (event,player,name){
if(!event.source) return false; if(!event.source) return false;
var range=event.source.getAttackRange(); var range=event.source.getAttackRange();
if(range==3) return false; if(range==3) return false;
if(range<3&&event.num<=1) return false; if(range<3) return name='damageBegin4'&&event.num>1;
return true; return name='damageBegin3';
}, },
//priority:-9.5, //priority:-9.5,
content:function (){ content:function (){
trigger.num=trigger.source.getAttackRange()<3?1:trigger.num+1; trigger.num=event.triggername=='damageBegin4'?1:trigger.num+1;
},
ai:{
filterDamage:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.player){
if(arg.player.hasSkillTag('jueqing',false,player)) return false;
if(arg.player.getAttackRange()<3) return true;
}
return false;
}
}, },
}, },
"xinfu_andong":{ "xinfu_andong":{
@ -3558,7 +3552,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return get.order({name:'sha'})+0.4; return get.order({name:'sha'})+0.4;
}, },
result:{ result:{
target:function (card,player,target){ target:function (player,target){
if(player.hasCard(function(card){ if(player.hasCard(function(card){
if(get.position(card)!="h") return false; if(get.position(card)!="h") return false;
var val=get.value(card); var val=get.value(card);
@ -4382,47 +4376,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},'h'); },'h');
}, },
respondSha:true, respondSha:true,
basic:{
useful:[5,1],
value:[5,1],
},
order:function (){
if(_status.event.player.hasSkillTag('presha',true,null,true)) return 10.1;
return 3.1;
},
result:{
target:function (player,target){
if(player.hasSkill('jiu')&&!target.getEquip('baiyin')){
if(get.attitude(player,target)>0){
return -6;
}
else{
return -3;
}
}
return -1.5;
},
},
tag:{
respond:1,
respondShan:1,
damage:function (card){
if(card.nature=='poison') return;
return 1;
},
natureDamage:function (card){
if(card.nature) return 1;
},
fireDamage:function (card,nature){
if(card.nature=='fire') return 1;
},
thunderDamage:function (card,nature){
if(card.nature=='thunder') return 1;
},
poisonDamage:function (card,nature){
if(card.nature=='poison') return 1;
},
},
}, },
}, },
"yizan_use":{ "yizan_use":{
@ -4823,7 +4776,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"xinfu_jiyuan":{ "xinfu_jiyuan":{
trigger:{ trigger:{
global:"dying", global:"dying",
source:"gainEnd", source:"gainAfter",
}, },
//priority:6, //priority:6,
audio:2, audio:2,
@ -4894,17 +4847,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function (event,player){ filter:function (event,player){
return player.storage.xinfu_zhaoxin.length<3&&player.countCards('h')>0; return player.storage.xinfu_zhaoxin.length<3&&player.countCards('h')>0;
}, },
visible:true,
filterCard:true, filterCard:true,
selectCard:function (){ selectCard:function (){
var player=_status.event.player; var player=_status.event.player;
return [1,3-player.storage.xinfu_zhaoxin.length]; return [1,3-player.storage.xinfu_zhaoxin.length];
}, },
discard:false, discard:false,
lose:false, //lose:false,
delay:0, delay:0,
content:function (){ content:function (){
'step 0' 'step 0'
player.lose(cards,ui.special,'toStorage') //player.lose(cards,ui.special,'toStorage')
player.$give(cards,player,false); player.$give(cards,player,false);
player.storage.xinfu_zhaoxin=player.storage.xinfu_zhaoxin.concat(cards); player.storage.xinfu_zhaoxin=player.storage.xinfu_zhaoxin.concat(cards);
player.markSkill('xinfu_zhaoxin'); player.markSkill('xinfu_zhaoxin');
@ -5057,7 +5011,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"qc_mingzhe":{ "qc_mingzhe":{
audio:"xinfu_qianchong", audio:"xinfu_qianchong",
trigger:{ trigger:{
player:["useCardAfter","respondAfter","discardAfter"], player:["useCard","respond","loseAfter"],
}, },
frequent:true, frequent:true,
filter:function (event,player){ filter:function (event,player){
@ -5068,10 +5022,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<es.length;i++){ for(var i=0;i<es.length;i++){
if(get.color(es[i])!='red') return false; if(get.color(es[i])!='red') return false;
} }
if(event.cards){ if(event.name!='lose') return get.color(event.card)=='red';
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return false;
if(get.color(event.cards[i])=='red'&& if(event.cards2){
event.cards[i].original!='j') return true; for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i])=='red') return true;
} }
} }
return false; return false;
@ -5079,10 +5034,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function (){ content:function (){
"step 0" "step 0"
event.count=1; event.count=1;
if(trigger.name=='discard'){ if(trigger.name=='lose'){
event.count=0; event.count=0;
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards[i])=='red'&&trigger.cards[i].original!='j') event.count++; if(get.color(trigger.cards2[i])=='red') event.count++;
} }
} }
"step 1" "step 1"
@ -5090,8 +5045,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.count--; event.count--;
"step 2" "step 2"
if(event.count){ if(event.count){
if(lib.config.autoskilllist.contains('mingzhe')) player.chooseBool(get.prompt2('mingzhe')); player.chooseBool(get.prompt2('mingzhe')).set('frequentSkill',event.name);
else event._result={bool:true};
} }
else event.finish(); else event.finish();
"step 3" "step 3"
@ -5186,16 +5140,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
target:player, target:player,
card:event.card card:event.card
})) return false; })) return false;
return (event.card.name=='sha'&&['spade','club','heart'].contains(get.suit(event.card))) return (event.card.name=='sha'&&(get.suit(event.card)=='heart'||get.color(event.card)=='black'))
}, },
ai:{ ai:{
effect:{ effect:{
target:function (card,player,target){ target:function (card,player,target){
if(player.getEquip('qinggang')&&card.name=='sha'||target.hasSkillTag('unequip2')) return; if(target.hasSkillTag('unequip2')) return;
if(player.hasSkillTag('unequip',false,{ if(player.hasSkillTag('unequip',false,{
name:card?card.name:null, name:card?card.name:null,
target:player, target:player,
card:card card:card
})||player.hasSkillTag('unequip_ai',false,{
name:card?card.name:null,
target:player,
card:card
})) return; })) return;
if(card.name=='sha'&&['spade','club','heart'].contains(get.suit(card))) return 'zerotarget'; if(card.name=='sha'&&['spade','club','heart'].contains(get.suit(card))) return 'zerotarget';
}, },

View File

@ -532,9 +532,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(card.name=='sha'&&get.color(card)=='red'){ if(card.name=='sha'&&get.color(card)=='red'){
for(var i=0;i<game.players.length;i++){ for(var i=0;i<game.players.length;i++){
var current=game.players[i]; var current=game.players[i];
if(current!=player&&get.attitude(player,current)>0&&game.hasPlayer(function(target){ if(current!=player&&get.attitude(player,current)>0&&current.hasValueTarget(card)) return 7;
return target!=current&&current.canUse(card,target)&&get.effect(target,card,current,current)>0
})) return 7;
} }
return 0; return 0;
} }
@ -545,9 +543,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var card=ui.selected.cards[0]; var card=ui.selected.cards[0];
var att=get.attitude(player,target); var att=get.attitude(player,target);
if(get.value(card)<0) return -att*2; if(get.value(card)<0) return -att*2;
if(target.countCards('h',{name:'sha',color:'red'})||target.hasSkill('wusheng')||target.hasSkill('new_rewusheng')||target.hasSkill('wushen')||(card.name=='sha'&&get.color(card)=='red'&&game.hasPlayer(function(target2){ if(target.countCards('h',{name:'sha',color:'red'})||target.hasSkill('wusheng')||target.hasSkill('new_rewusheng')||target.hasSkill('wushen')||(card.name=='sha'&&get.color(card)=='red'&&target.hasValueTarget(card))) return att*2;
return target2!=target&&target.canUse({name:'sha'},target2)&&get.effect(target2,{name:'sha'},target,target)>0
}))) return att*2;
var eff=0; var eff=0;
game.countPlayer(function(current){ game.countPlayer(function(current){
if(target!=current&&get.distance(target,current,'attack')>1) return; if(target!=current&&get.distance(target,current,'attack')>1) return;
@ -569,13 +565,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2' 'step 2'
target.chooseToUse({ target.chooseToUse({
filterCard:function(card){ filterCard:function(card){
return card.name=='sha'&&get.color(card)!='black'; return card.name=='sha'&&get.color(card)!='black'&&lib.filter.cardEnabled.apply(this,arguments);
}, },
prompt:'请使用一张不为黑色的【杀】,否则'+get.translation(player)+'可以对你或你攻击范围内的一名其他角色造成1点伤害', prompt:'请使用一张不为黑色的【杀】,否则'+get.translation(player)+'可以对你或你攻击范围内的一名其他角色造成1点伤害',
}); });
'step 3' 'step 3'
if(result.bool){ if(result.bool){
player.draw(); var num=1;
game.countPlayer2(function(current){
current.getHistory('damage',function(evt){
if(evt.getParent(evt.notLink()?4:8)==event) num+=evt.num;
});
});
player.draw(num);
event.finish(); event.finish();
} }
else{ else{
@ -592,7 +594,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
result.targets[0].damage('nocard'); result.targets[0].damage('nocard');
} }
}, },
group:['xinzhenjun_damage'], //group:['xinzhenjun_damage'],
subSkill:{ subSkill:{
damage:{ damage:{
trigger:{global:'damage'}, trigger:{global:'damage'},
@ -862,57 +864,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
var players=game.filterPlayer(); if(player.countCards('h',button.link[2])>0) return 0;
if(player.countCards('h',button.link)) return 0; if(button.link[2]=='wugu') return;
if(button.link[2]=='wuzhong'){ var effect=player.getUseValue(button.link[2]);
if(player.countCards('h')<player.hp){ if(effect>0) return effect;
return 3+Math.random();
}
return 0; return 0;
}
if(button.link[2]=='tao'){
return 3+Math.random();
}
if(button.link[2]=='sha'){
return 2+Math.random();
}
if(button.link[2]=='juedou'){
return 2+Math.random();
}
if(button.link[2]=='guohe'){
return 2+Math.random();
}
if(button.link[2]=='shunshou'){
for(var i=0;i<players.length;i++){
if(player.canUse('shunshou',players[i])&&get.attitude(player,players[i])<0){
return 2+Math.random();
}
}
return 0;
}
if(button.link[2]=='tiesuo'){
return 1+Math.random();
}
if(button.link[2]=='jiu'){
if(get.effect(player,{name:'jiu'})>0){
return 1+Math.random();
}
return 0;
}
if(button.link[2]=='nanman'||button.link[2]=='wanjian'||button.link[2]=='taoyuan'||button.link[2]=='wugu'){
var eff=0;
for(var i=0;i<players.length;i++){
if(players[i]!=player){
eff+=get.effect(players[i],{name:button.link[2]},player,player);
}
}
if(eff>0){
return eff+Math.random();
}
return 0;
}
return Math.random();
}, },
backup:function(links,player){ backup:function(links,player){
return { return {
@ -1053,6 +1009,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
viewAs:{name:'wuxie'}, viewAs:{name:'wuxie'},
check:function(card){ check:function(card){
var player=_status.event.player; var player=_status.event.player;
if(player.isPhaseUsing()) return 0;
if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0; if(!player.storage.xintaoluan2) player.storage.xintaoluan2=0;
var allshown=true,players=game.filterPlayer(); var allshown=true,players=game.filterPlayer();
for(var i=0;i<players.length;i++){ for(var i=0;i<players.length;i++){
@ -3510,57 +3467,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
check:function(button){ check:function(button){
var player=_status.event.player; var player=_status.event.player;
var players=game.filterPlayer(); if(player.countCards('h',button.link[2])>0) return 0;
if(player.countCards('h',button.link)) return 0; if(button.link[2]=='wugu') return 0;
if(button.link[2]=='wuzhong'){ var effect=player.getUseValue(button.link[2]);
if(player.countCards('h')<player.hp){ if(effect>0) return effect;
return 3+Math.random();
}
return 0; return 0;
}
if(button.link[2]=='tao'){
return 3+Math.random();
}
if(button.link[2]=='sha'){
return 2+Math.random();
}
if(button.link[2]=='juedou'){
return 2+Math.random();
}
if(button.link[2]=='guohe'){
return 2+Math.random();
}
if(button.link[2]=='shunshou'){
for(var i=0;i<players.length;i++){
if(player.canUse('shunshou',players[i])&&get.attitude(player,players[i])<0){
return 2+Math.random();
}
}
return 0;
}
if(button.link[2]=='tiesuo'){
return 1+Math.random();
}
if(button.link[2]=='jiu'){
if(get.effect(player,{name:'jiu'})>0){
return 1+Math.random();
}
return 0;
}
if(button.link[2]=='nanman'||button.link[2]=='wanjian'||button.link[2]=='taoyuan'||button.link[2]=='wugu'){
var eff=0;
for(var i=0;i<players.length;i++){
if(players[i]!=player){
eff+=get.effect(players[i],{name:button.link[2]},player,player);
}
}
if(eff>0){
return 1+Math.random();
}
return 0;
}
return Math.random();
}, },
backup:function(links,player){ backup:function(links,player){
return { return {
@ -4918,12 +4829,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(arg.target!=player.storage.xinxianzhen) return false; if(arg.target!=player.storage.xinxianzhen) return false;
}, },
effect:{ effect:{
player:function(card,player,target){ player:function(card,player,target,current){
if(target==player.storage.xinxianzhen&&['sha','guohe','shunshou','huogong','juedou'].contains(card.name)){ if(!player.storage.xinxianzhen) return;
if(game.hasPlayer(function(current){ if(target!=player.storage.xinxianzhen&&['sha','guohe','shunshou','huogong','juedou'].contains(card.name)){
return current!=target&&player.canUse(card,current)&&get.effect(current,card,player,player)>0; if(get.effect(player.storage.xinxianzhen,card,player,player)>0){
})){ return [1,2];
return [1,1];
} }
} }
} }
@ -5218,11 +5128,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
shenduan:{ shenduan:{
trigger:{player:'discardAfter'}, trigger:{player:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return;
if(get.color(event.cards[i])=='black'&&get.type(event.cards[i])=='basic'&& for(var i=0;i<event.cards2.length;i++){
get.position(event.cards[i])=='d'){ if(get.color(event.cards2[i])=='black'&&get.type(event.cards2[i])=='basic'&&
get.position(event.cards2[i])=='d'){
return true; return true;
} }
} }
@ -5232,10 +5143,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
'step 0' 'step 0'
var cards=[]; var cards=[];
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.color(trigger.cards[i])=='black'&&get.type(trigger.cards[i])=='basic'&& if(get.color(trigger.cards2[i])=='black'&&get.type(trigger.cards2[i])=='basic'&&
get.position(trigger.cards[i])=='d'){ get.position(trigger.cards2[i])=='d'){
cards.push(trigger.cards[i]); cards.push(trigger.cards2[i]);
} }
} }
if(!cards.length){ if(!cards.length){
@ -5247,11 +5158,15 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1' 'step 1'
if(event.cards.length){ if(event.cards.length){
player.chooseTarget(get.prompt('shenduan'),'将'+get.translation(event.cards)+(event.cards.length>1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){ player.chooseTarget(get.prompt('shenduan'),'将'+get.translation(event.cards)+(event.cards.length>1?'中的一张牌':'')+'当做【兵粮寸断】对一名其他角色使用',function(card,player,target){
return player.canUse({name:'bingliang'},target,false); var cs=_status.event.cards;
for(var i=0;i<cs.length;i++){
if(player.canUse({name:'bingliang',cards:[cs[i]]},target,false)) return true;
}
return false;
}).set('ai',function(target){ }).set('ai',function(target){
var player=_status.event.player; var player=_status.event.player;
return get.effect(target,{name:'bingliang'},player,player); return get.effect(target,{name:'bingliang'},player,player);
}); }).set('cards',cards);
} }
else{ else{
event.finish(); event.finish();
@ -5264,7 +5179,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
else{ else{
delete event.directCard; delete event.directCard;
player.chooseCardButton('选择一张牌当作兵断寸断使用',event.cards,true); player.chooseCardButton('选择一张牌当作兵断寸断使用',event.cards,true).set('filterButton',function(button){
return player.canUse({name:'bingliang',cards:[button.link]},_status.event.target,false);
}).set('target',event.current);
} }
} }
else{ else{
@ -5281,9 +5198,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
if(card){ if(card){
event.cards.remove(card); event.cards.remove(card);
event.current.addJudge('bingliang',[card]); player.line(event.current);
player.useCard({name:'bingliang'},event.current,[card],'shenduan').animate=false;
event.goto(1); event.goto(1);
player.logSkill('shenduan',event.current);
} }
} }
}, },
@ -5299,7 +5216,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var nh=trigger.player.countCards('h'); var nh=trigger.player.countCards('h');
var eff=get.effect(trigger.player,{name:'sha'},player,player); var eff=get.effect(trigger.player,{name:'sha'},player,player);
if(!player.canUse({name:'sha'},trigger.player)) eff=0; if(!player.canUse({name:'sha'},trigger.player)) eff=0;
player.chooseCardButton(get.prompt('yonglve',trigger.player),trigger.player.getCards('j')).set('ai',function(button){ player.discardPlayerCard(get.prompt('yonglve',trigger.player),trigger.player,'j').set('ai',function(button){
var name=button.link.viewAs||button.link.name; var name=button.link.viewAs||button.link.name;
var att=_status.event.att; var att=_status.event.att;
var nh=_status.event.nh; var nh=_status.event.nh;
@ -5312,25 +5229,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(name=='bingliang'&&nh<trigger.player.hp) return 1; if(name=='bingliang'&&nh<trigger.player.hp) return 1;
} }
return 0; return 0;
}).set('att',att).set('nh',nh).set('eff',eff); }).set('att',att).set('nh',nh).set('eff',eff).set('logSkill',['yonglve',trigger.player]);
'step 1' 'step 1'
if(result.bool){ if(result.bool){
trigger.player.discard(result.links); if(player.canUse({name:'sha'},trigger.player)){
if(player.canUse({name:'sha'},trigger.player)) player.useCard({name:'sha'},trigger.player,'yonglve'); event.related=player.useCard({name:'sha'},trigger.player);
player.storage.yonglve=false; }
} }
else{ else{
event.finish(); event.finish();
} }
'step 2' 'step 2'
if(player.storage.yonglve){ if(!event.related||!game.hasPlayer2(function(current){
player.storage.yonglve=false; return current.getHistory('damage',function(evt){
} return evt.getParent(2)==event.related;
else{ }).length>0;
})){
player.draw(); player.draw();
} }
}, },
group:'yonglve2' //group:'yonglve2'
}, },
yonglve2:{ yonglve2:{
trigger:{source:'damage'}, trigger:{source:'damage'},
@ -5516,68 +5434,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
xinzhongyong:{ xinzhongyong:{
trigger:{player:'shaAfter'}, trigger:{player:'useCardAfter'},
audio:'zhongyong', audio:'zhongyong',
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
return get.itemtype(event.cards)=='cards'||(event.responded&&get.itemtype(event.responded.cards)=='cards'); return event.card.name=='sha';
}, },
content:function(){ content:function(){
"step 0" "step 0"
event.cards1=trigger.cards.slice(0); event.sha=trigger.cards.slice(0).filterInD();
if(trigger.responded&&trigger.responded.cards&&trigger.responded.cards.length){ event.shan=[];
event.cards2=trigger.responded.cards.slice(0); game.countPlayer2(function(current){
} current.getHistory('useCard',function(evt){
if(evt.card.name=='shan'&&evt.getParent(3)==trigger) event.shan.addArray(evt.cards);
});
});
event.shan.filterInD('d');
if(!event.sha.length&&!event.shan.length) event.finish();
player.chooseTarget(get.prompt2('zhongyong'),function(card,player,target){ player.chooseTarget(get.prompt2('zhongyong'),function(card,player,target){
return target!=_status.event.source&&target!=player; return !_status.event.source.contains(target)&&target!=player;
}).set('ai',function(target){ }).set('ai',function(target){
return get.attitude(_status.event.player,target); return get.attitude(_status.event.player,target);
}).set('source',trigger.target); }).set('source',trigger.targets);
"step 1" "step 1"
if(result.bool){ if(result.bool){
event.target=result.targets[0]; var target=result.targets[0];
if(!event.cards2){ event.target=target;
player.logSkill('xinzhongyong',event.target); player.logSkill('xinzhongyong',target);
event.sha=false; if(event.sha.length&&event.shan.length){
event.target.gain(event.cards1,'gain2'); player.chooseControl().set('choiceList',[
for(var i=0;i<event.cards1.length;i++){ '将'+get.translation(event.sha)+'交给'+get.translation(target),
if(get.color(event.cards1[i])=='red') event.sha=true;break; '将'+get.translation(event.shan)+'交给'+get.translation(target),
} ]).set('ai',function(){
event.goto(3); return _status.event.choice;
} }).set('choice',function(){
else{ if(get.color(event.sha)!='black') return 0;
var sha=false; return 1;
for(var i=0;i<event.cards1.length;i++){ }());
if(get.color(event.cards1[i])=='red') sha=true;break;
}
player.chooseControl('杀','闪',function(event,player){
if(_status.event.choosesha) return '杀';
return '闪';
}).set('prompt','选择交给'+get.translation(result.targets)+'的牌').set('choosesha',sha);
} }
else event._result={index:event.sha.length?0:1};
} }
else{ else{
event.finish(); event.finish();
} }
"step 2" "step 2"
player.logSkill('xinzhongyong',event.target); var cards=result.index==0?event.sha:event.shan;
event.sha=false; event.useSha=false;
if(result.control=='杀'){ target.gain(cards,'gain2');
event.target.gain(event.cards1,'gain2'); for(var i=0;i<cards.length;i++){
for(var i=0;i<event.cards1.length;i++){ if(get.color(cards[i])=='red'){
if(get.color(event.cards1[i])=='red') event.sha=true;break; event.useSha=true;break;
}
}
else{
event.target.gain(event.cards2,'gain2');
for(var i=0;i<event.cards2.length;i++){
if(get.color(event.cards2[i])=='red') event.sha=true;break;
} }
} }
"step 3" "step 3"
if(event.sha){ if(event.useSha){
event.target.chooseToUse('是否使用一张杀?',{name:'sha'}).set('filterTarget',function(card,player,target){ event.target.chooseToUse('是否使用一张杀?',{name:'sha'}).set('filterTarget',function(card,player,target){
return target!=_status.event.sourcex&&get.distance(_status.event.sourcex,target,'attack')<=1&&player.canUse('sha',target,false); return target!=_status.event.sourcex&&get.distance(_status.event.sourcex,target,'attack')<=1&&lib.filter.targetEnabled.apply(this,arguments);
}).set('sourcex',player); }).set('sourcex',player);
} }
} }
@ -6677,7 +6589,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
taoxi:{ taoxi:{
audio:2, audio:2,
trigger:{player:'useCardToBegin'}, trigger:{player:'useCardToPlayered'},
filter:function(event,player){ filter:function(event,player){
return _status.currentPhase==player&&event.targets.length==1&& return _status.currentPhase==player&&event.targets.length==1&&
event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target; event.target.countCards('h')>0&&!player.hasSkill('taoxi4')&&player!=event.target;
@ -7396,7 +7308,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
juece:{ juece:{
audio:2, audio:2,
trigger:{global:'loseEnd'}, trigger:{global:'loseAfter'},
check:function(event,player){ check:function(event,player){
return get.damageEffect(event.player,player,player)>0; return get.damageEffect(event.player,player,player)>0;
}, },
@ -7404,10 +7316,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.player.countCards('h')) return false; if(event.player.countCards('h')) return false;
if(_status.currentPhase!=player) return false; if(_status.currentPhase!=player) return false;
if(event.player==player) return false; if(event.player==player) return false;
for(var i=0;i<event.cards.length;i++){ return event.hs&&event.hs.length>0;
if(event.cards[i].original=='h') return true;
}
return false;
}, },
content:function(){ content:function(){
player.line(trigger.player,'green'); player.line(trigger.player,'green');
@ -7563,12 +7472,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
cardEnabled2:function(card,player){ cardEnabled2:function(card,player){
if(get.color(card)==player.storage.qianxi2) return false; if(get.color(card)==player.storage.qianxi2&&get.position(card)=='h') return false;
}, },
}, },
intro:{ intro:{
content:function(color){ content:function(color){
return '不能使用或打出'+get.translation(color)+'的牌'; return '不能使用或打出'+get.translation(color)+'的牌';
} }
} }
}, },
@ -8912,10 +8821,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
zongxuan:{ zongxuan:{
audio:2, audio:2,
trigger:{player:'discardAfter'}, trigger:{player:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ if(event.type!='discard') return false;
if(get.position(event.cards[i])=='d'){ for(var i=0;i<event.cards2.length;i++){
if(get.position(event.cards2[i])=='d'){
return true; return true;
} }
} }
@ -8926,9 +8836,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){ content:function(){
"step 0" "step 0"
var cards=[]; var cards=[];
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.position(trigger.cards[i])=='d'){ if(get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards[i]); cards.push(trigger.cards2[i]);
} }
} }
player.chooseCardButton(cards,[1,cards.length],'纵玄:将弃置的牌按任意顺序置于牌堆顶(先选择的在上)').set('ai',function(){ player.chooseCardButton(cards,[1,cards.length],'纵玄:将弃置的牌按任意顺序置于牌堆顶(先选择的在上)').set('ai',function(){
@ -9298,7 +9208,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
shangshi:{ shangshi:{
audio:2, audio:2,
trigger:{player:['loseEnd','changeHp']}, trigger:{player:['loseAfter','changeHp']},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
return player.countCards('h')<player.getDamagedHp(); return player.countCards('h')<player.getDamagedHp();
@ -9323,11 +9233,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
subSkill:{ subSkill:{
discard:{ discard:{
audio:2, audio:2,
trigger:{global:'discardAfter'}, trigger:{global:'loseAfter'},
filter:function(event,player){ filter:function(event,player){
if(event.type!='discard') return false;
if(event.player==player) return false; if(event.player==player) return false;
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<event.cards2.length;i++){
if(get.suit(event.cards[i])=='club'&&get.position(event.cards[i])=='d'){ if(get.suit(event.cards2[i])=='club'&&get.position(event.cards2[i],true)=='d'){
return true; return true;
} }
} }
@ -9335,9 +9246,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
frequent:'check', frequent:'check',
check:function(event,player){ check:function(event,player){
for(var i=0;i<event.cards.length;i++){ for(var i=0;i<event.cards2.length;i++){
if(get.suit(event.cards[i])=='club'&&get.position(event.cards[i])=='d'){ if(get.suit(event.cards2[i])=='club'&&get.position(event.cards2[i],true)=='d'){
if(event.cards[i].name=='du') return false; if(event.cards2[i].name=='du') return false;
} }
} }
return true; return true;
@ -9347,32 +9258,32 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.delay==false) game.delay(); if(trigger.delay==false) game.delay();
"step 1" "step 1"
var cards=[]; var cards=[];
for(var i=0;i<trigger.cards.length;i++){ for(var i=0;i<trigger.cards2.length;i++){
if(get.suit(trigger.cards[i])=='club'&&get.position(trigger.cards[i])=='d'){ if(get.suit(trigger.cards2[i])=='club'&&get.position(trigger.cards2[i],true)=='d'){
cards.push(trigger.cards[i]); cards.push(trigger.cards2[i]);
} }
} }
if(cards.length){ if(cards.length){
player.gain(cards,'log'); player.gain(cards,'log','gain2');
player.$gain2(cards);
} }
}, },
}, },
judge:{ judge:{
audio:2, audio:2,
trigger:{global:'judgeAfter'}, trigger:{global:'cardsDiscardAfter'},
frequent:'check', frequent:'check',
check:function(event,player){ check:function(event,player){
return event.result.card.name!='du'; return event.cards[0].name!='du';
}, },
filter:function(event,player){ filter:function(event,player){
if(event.player==player) return false; var evt=event.getParent().relatedEvent;
if(get.position(event.result.card)!='d') return false; if(!evt||evt.name!='judge') return;
return (get.suit(event.result.card)=='club'); if(evt.player==player) return false;
if(get.position(event.cards[0],true)!='d') return false;
return (get.suit(event.cards[0])=='club');
}, },
content:function(){ content:function(){
player.gain(trigger.result.card,'log'); player.gain(trigger.cards,'gain2','log');
player.$gain2(trigger.result.card);
} }
} }
} }
@ -9736,22 +9647,22 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xuanfeng:{ xuanfeng:{
audio:2, audio:2,
audioname:['boss_lvbu3'], audioname:['boss_lvbu3'],
trigger:{player:['loseEnd','phaseDiscardEnd']}, trigger:{player:['loseAfter','phaseDiscardEnd']},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
if(event.name=='phaseDiscard'){ if(event.name=='phaseDiscard'){
return event.cards&&event.cards.length>1 var cards=[];
player.getHistory('lose',function(evt){
if(evt&&evt.getParent('phaseDiscard')==event&&evt.hs) cards.addArray(evt.hs);
});
return cards.length>1;
} }
else{ else return event.es&&event.es.length>0;
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].original=='e') return true;
}
}
return false;
}, },
content:function(){ content:function(){
"step 0" "step 0"
event.count=2; event.count=2;
event.logged=false;
"step 1" "step 1"
player.chooseTarget(get.prompt('xuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){ player.chooseTarget(get.prompt('xuanfeng'),'弃置一名其他角色的一张牌',function(card,player,target){
if(player==target) return false; if(player==target) return false;
@ -9761,8 +9672,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}); });
"step 2" "step 2"
if(result.bool){ if(result.bool){
if(!event.logged){
player.logSkill('xuanfeng',result.targets); player.logSkill('xuanfeng',result.targets);
player.line(result.targets,'green'); event.logged=true;
}
else player.line(result.targets[0],'green');
player.discardPlayerCard(result.targets[0],'he',true); player.discardPlayerCard(result.targets[0],'he',true);
event.count--; event.count--;
} }
@ -10987,7 +10901,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rezhenjun:"镇军", rezhenjun:"镇军",
rezhenjun_info:"准备阶段你可以弃置一名手牌数多于体力值的角色的X张牌X为其手牌数和体力值之差且至少为1然后选择一项1.你弃置X张牌2.其摸X张牌。X为其弃置的牌中非装备牌的数量", rezhenjun_info:"准备阶段你可以弃置一名手牌数多于体力值的角色的X张牌X为其手牌数和体力值之差且至少为1然后选择一项1.你弃置X张牌2.其摸X张牌。X为其弃置的牌中非装备牌的数量",
xinzhenjun:'镇军', xinzhenjun:'镇军',
xinzhenjun_info:'出牌阶段开始时,你可以将一张牌交给一名其他角色,令其选择是否使用一张不为黑色的【杀】。若其选择是,则你于此【杀】结算完成后摸一张牌且当此【杀】造成伤害时你摸X张牌(X为伤害点数)。若其选择否则你对其或其攻击范围内的一名其他角色造成1点伤害。', xinzhenjun_info:'出牌阶段开始时,你可以将一张牌交给一名其他角色,令其选择是否使用一张不为黑色的【杀】。若其选择是,则你于此【杀】结算完成后摸1+X张牌(X为此【杀】造成的伤害总点数)。若其选择否则你对其或其攻击范围内的一名其他角色造成1点伤害。',
fenli:'奋励', fenli:'奋励',
fenli_info:'若你的手牌数为全场最多,你可以跳过摸牌阶段;若你的体力值为全场最多,你可以跳过出牌阶段;若你的装备区里有牌且数量为全场最多,你可以跳过弃牌阶段。', fenli_info:'若你的手牌数为全场最多,你可以跳过摸牌阶段;若你的体力值为全场最多,你可以跳过出牌阶段;若你的装备区里有牌且数量为全场最多,你可以跳过弃牌阶段。',
pingkou:'平寇', pingkou:'平寇',

View File

@ -466,10 +466,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
zbudao:{ zbudao:{
trigger:{player:'phaseDrawBegin'}, trigger:{player:'phaseDrawBegin'},
check:function(event,player){ //check:function(event,player){
if(player.hasFriend()) return true; // if(player.hasFriend()) return true;
return false; // return false;
}, //},
content:function(){ content:function(){
trigger.num++; trigger.num++;
player.addTempSkill('zbudao2','phaseDrawAfter'); player.addTempSkill('zbudao2','phaseDrawAfter');
@ -508,8 +508,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
return att-4; return att-4;
}, },
forced:true, //forced:true,
prompt:'请选择要送人的卡牌' prompt:'将获得的一张牌交给一名其他角色,或点取消'
}); });
"step 1" "step 1"
if(result.bool){ if(result.bool){
@ -1951,17 +1951,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
} }
}, },
fengyan:{ fengyan:{
trigger:{global:'judgeAfter'}, trigger:{global:'cardsDiscardAfter'},
frequent:true, frequent:true,
filter:function(event,player){ filter:function(event,player){
if(event.player==player) return false; var evt=event.getParent().relatedEvent;
if(event.player.sex!='male') return false; if(!evt||evt.name!='judge') return;
if(get.position(event.result.card)!='o') return false; if(evt.player.sex!='male') return false;
return (get.color(event.result.card)=='red'); if(get.position(event.cards[0],true)!='d') return false;
return (get.color(event.cards[0])=='red');
}, },
content:function(){ content:function(){
player.gain(trigger.result.card); player.gain(trigger.cards,'gain2');
player.$gain2(trigger.result.card);
} }
}, },
fengyi:{ fengyi:{
@ -3106,7 +3106,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
nichang2:'霓裳', nichang2:'霓裳',
nichang_info:'摸牌时,你可以选择不摸牌,并在结束阶段展示手牌,每少一种花色摸一张牌', nichang_info:'摸牌时,你可以选择不摸牌,并在结束阶段展示手牌,每少一种花色摸一张牌',
fengyan:'丰艳', fengyan:'丰艳',
fengyan_info:'你可以获得其他男性角色的红色判定牌', fengyan_info:'你可以获得其他男性角色的红色判定牌',
zhulu:'逐鹿', zhulu:'逐鹿',
zhulu_info:'回合外,当有普通锦囊牌结算完毕后,你可以立即弃掉一张相同花色手牌或装备区的牌,获得这张锦囊牌。', zhulu_info:'回合外,当有普通锦囊牌结算完毕后,你可以立即弃掉一张相同花色手牌或装备区的牌,获得这张锦囊牌。',
jieyong:'节用', jieyong:'节用',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[ window.noname_asset_list=[
'1.9.97.7.1', '1.9.97.8',
'audio/background/aozhan_chaoming.mp3', 'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3', 'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3', 'audio/background/aozhan_rewrite.mp3',
@ -2258,6 +2258,8 @@ window.noname_asset_list=[
'audio/skill/zhangwu2.mp3', 'audio/skill/zhangwu2.mp3',
'audio/skill/zhiheng_gz_jun_sunquan1.mp3', 'audio/skill/zhiheng_gz_jun_sunquan1.mp3',
'audio/skill/zhiheng_gz_jun_sunquan2.mp3', 'audio/skill/zhiheng_gz_jun_sunquan2.mp3',
'audio/skill/reluanji1.mp3',
'audio/skill/reluanji2.mp3',
'font/huangcao.ttf', 'font/huangcao.ttf',
'font/shousha.ttf', 'font/shousha.ttf',
@ -2712,6 +2714,7 @@ window.noname_asset_list=[
'image/character/re_xugong.jpg', 'image/character/re_xugong.jpg',
'image/character/yuantanyuanshang.jpg', 'image/character/yuantanyuanshang.jpg',
'image/character/old_majun.jpg', 'image/character/old_majun.jpg',
'image/character/key_yukine.jpg',
'image/character/baiwuchang.jpg', 'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg', 'image/character/baosanniang.jpg',

View File

@ -17,13 +17,20 @@
skillaudio:[], skillaudio:[],
dieClose:[], dieClose:[],
dragline:[], dragline:[],
dying:[] dying:[],
globalHistory:[{
cardMove:[],
}],
}; };
var lib={ var lib={
configprefix:'noname_0.9_', configprefix:'noname_0.9_',
versionOL:27, versionOL:27,
updateURLS:{
coding:'https://nakamurayuri.coding.net/p/noname/d/noname/git/raw',
github:'https://raw.githubusercontent.com/libccy/noname',
},
updateURL:'https://raw.githubusercontent.com/libccy/noname', updateURL:'https://raw.githubusercontent.com/libccy/noname',
mirrorURL:'https://gitlab.com/isgs/noname/raw', mirrorURL:'https://nakamurayuri.coding.net/p/noname/d/noname/git/raw',
hallURL:'noname.pub', hallURL:'noname.pub',
assetURL:'', assetURL:'',
changeLog:[], changeLog:[],
@ -501,6 +508,19 @@
init:false, init:false,
unfrequent:true unfrequent:true
}, },
update_link:{
name:'更新地址',
init:'coding',
unfrequent:true,
item:{
coding:'Coding',
github:'GitHub',
},
onclick:function(item){
game.saveConfig('update_link',item);
lib.updateURL=lib.updateURLS[item]||lib.updateURLS.coding;
},
},
update:function(config,map){ update:function(config,map){
if('ontouchstart' in document){ if('ontouchstart' in document){
map.touchscreen.show(); map.touchscreen.show();
@ -3418,6 +3438,10 @@
name:'装备配音', name:'装备配音',
init:false, init:false,
}, },
repeat_audio:{
name:'播放重复语音',
init:false,
},
volumn_audio:{ volumn_audio:{
name:'音效音量', name:'音效音量',
init:8, init:8,
@ -5813,6 +5837,11 @@
brawl:{ brawl:{
name:'乱斗', name:'乱斗',
config:{ config:{
huanhuazhizhan:{
name:'幻化之战',
init:true,
frequent:true
},
duzhansanguo:{ duzhansanguo:{
name:'毒战三国', name:'毒战三国',
init:true, init:true,
@ -5843,6 +5872,11 @@
init:true, init:true,
frequent:true frequent:true
}, },
baiyidujiang:{
name:'白衣渡江',
init:true,
frequent:true
},
scene:{ scene:{
name:'创建场景', name:'创建场景',
init:true, init:true,
@ -5923,6 +5957,7 @@
}, },
onclick:function(num){ onclick:function(num){
game.saveConfig('battle_number',num,this._link.config.mode); game.saveConfig('battle_number',num,this._link.config.mode);
if(_status.connectMode) return;
if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return; if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return;
if(_status.event.getParent().changeDialog){ if(_status.event.getParent().changeDialog){
_status.event.getParent().changeDialog(); _status.event.getParent().changeDialog();
@ -5957,6 +5992,7 @@
init:true, init:true,
onclick:function(bool){ onclick:function(bool){
game.saveConfig('free_choose',bool,this._link.config.mode); game.saveConfig('free_choose',bool,this._link.config.mode);
if(_status.connectMode) return;
if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return; if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return;
if(!ui.cheat2&&get.config('free_choose')) ui.create.cheat2(); if(!ui.cheat2&&get.config('free_choose')) ui.create.cheat2();
else if(ui.cheat2&&!get.config('free_choose')){ else if(ui.cheat2&&!get.config('free_choose')){
@ -5970,6 +6006,7 @@
init:true, init:true,
onclick:function(bool){ onclick:function(bool){
game.saveConfig('change_choice',bool,this._link.config.mode); game.saveConfig('change_choice',bool,this._link.config.mode);
if(_status.connectMode) return;
if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return; if(!_status.event.getParent().showConfig&&!_status.event.showConfig) return;
if(!ui.cheat&&get.config('change_choice')) ui.create.cheat(); if(!ui.cheat&&get.config('change_choice')) ui.create.cheat();
else if(ui.cheat&&!get.config('change_choice')){ else if(ui.cheat&&!get.config('change_choice')){
@ -6491,10 +6528,11 @@
return this.childNodes[row].childNodes[col]; return this.childNodes[row].childNodes[col];
} }
}; };
Array.prototype.filterInD=function(){ Array.prototype.filterInD=function(pos){
if(!pos) pos='o';
var list=[]; var list=[];
for(var i=0;i<this.length;i++){ for(var i=0;i<this.length;i++){
if(get.position(this[i],true)=='o') list.push(this[i]); if(get.position(this[i],true)==pos) list.push(this[i]);
} }
return list; return list;
}; };
@ -9869,6 +9907,7 @@
} }
}, },
cardsDiscard:function(){ cardsDiscard:function(){
game.getGlobalHistory().cardMove.push(event);
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
cards[i].discard(); cards[i].discard();
} }
@ -9881,6 +9920,7 @@
if(cards.length) game.cardsDiscard(cards); if(cards.length) game.cardsDiscard(cards);
}, },
cardsGotoOrdering:function(){ cardsGotoOrdering:function(){
game.getGlobalHistory().cardMove.push(event);
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
cards[i].goto(ui.ordering); cards[i].goto(ui.ordering);
} }
@ -9888,13 +9928,16 @@
if(!evt.orderingCards) evt.orderingCards=[]; if(!evt.orderingCards) evt.orderingCards=[];
if(!event.noOrdering&&!event.cardsOrdered){ if(!event.noOrdering&&!event.cardsOrdered){
event.cardsOrdered=true; event.cardsOrdered=true;
var next=game.createEvent('orderingDiscard',false,evt.getParent()); var next=game.createEvent('orderingDiscard',false);
event.next.remove(next)
evt.after.push(next)
next.relatedEvent=evt; next.relatedEvent=evt;
next.setContent('orderingDiscard'); next.setContent('orderingDiscard');
} }
if(!event.noOrdering) evt.orderingCards.addArray(cards); if(!event.noOrdering) evt.orderingCards.addArray(cards);
}, },
cardsGotoSpecial:function(){ cardsGotoSpecial:function(){
game.getGlobalHistory().cardMove.push(event);
for(var i=0;i<cards.length;i++){ for(var i=0;i<cards.length;i++){
cards[i].goto(ui.special); cards[i].goto(ui.special);
} }
@ -10084,6 +10127,9 @@
} }
} }
player.ai.tempIgnore=[]; player.ai.tempIgnore=[];
_status.globalHistory.push({
cardMove:[],
});
game.countPlayer2(function(current){ game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[]}); current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[]});
current.stat.push({card:{},skill:{}}); current.stat.push({card:{},skill:{}});
@ -13020,9 +13066,13 @@
player.line(target,'green'); player.line(target,'green');
} }
if(!event.chooseonly){ if(!event.chooseonly){
if(event.delay!==false){
var next=player.gain(event.cards,target,event.visibleMove?'give':'giveAuto','bySelf'); var next=player.gain(event.cards,target,event.visibleMove?'give':'giveAuto','bySelf');
if(event.delay===false){ }
next.set('delay',false); else{
var next=player.gain(event.cards,target,'bySelf');
target[event.visibleMove?'$give':'$giveAuto'](cards,player);
if(event.visibleMove) next.visible=true;
} }
} }
else target[event.visibleMove?'$give':'$giveAuto'](cards,player); else target[event.visibleMove?'$give':'$giveAuto'](cards,player);
@ -13963,55 +14013,9 @@
discard:function(){ discard:function(){
"step 0" "step 0"
game.log(player,'弃置了',cards); game.log(player,'弃置了',cards);
player.lose(cards,event.position,'visible'); player.lose(cards,event.position,'visible').type='discard';
if(event.animate!=false){
event.discardid=lib.status.videoId++;
game.broadcastAll(function(player,cards,id){
player.$throw(cards,null,'nobroadcast');
var cardnodes=[];
cardnodes._discardtime=get.time();
for(var i=0;i<cards.length;i++){
if(cards[i].clone){
cardnodes.push(cards[i].clone);
}
}
ui.todiscard[id]=cardnodes;
},player,cards,event.discardid);
if(lib.config.sync_speed&&cards[0]&&cards[0].clone){
if(event.delay!=false){
var waitingForTransition=get.time();
event.waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete event.waitingForTransition;
});
}
else if(event.getParent().discardTransition){
delete event.getParent().discardTransition;
var waitingForTransition=get.time();
event.getParent().waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete event.getParent().waitingForTransition;
});
}
}
}
event.trigger('discard');
"step 1" "step 1"
if(event.delay!=false){ event.trigger('discard');
if(event.waitingForTransition){
_status.waitingForTransition=event.waitingForTransition;
game.pause();
}
else{
game.delayx();
}
}
}, },
respond:function(){ respond:function(){
'step 0' 'step 0'
@ -14122,45 +14126,19 @@
'step 0' 'step 0'
event.delayed=false; event.delayed=false;
event.num=0; event.num=0;
event.cardlist=[];
event.cards=[]; event.cards=[];
'step 1' 'step 1'
player.gainPlayerCard(targets[num],event.position,true).set('boolline',false).set('chooseonly',true); player.gainPlayerCard(targets[num],event.position,true).set('boolline',false).set('delay',num==targets.length-1);
'step 2' 'step 2'
var current=targets[num];
var card=null;
if(result.bool){ if(result.bool){
card=result.cards[0]; event.cards.addArray(result.cards);
if(num==targets.length-1) event.delayed=true;
} }
if(card){
event.cards.add(card);
current.lose(card,ui.special).set('type','gain');
}
event.cardlist[num]=card||null;
event.num++; event.num++;
if(event.num<targets.length){ if(event.num<targets.length){
event.goto(1); event.goto(1);
} }
else{
event.num=0;
}
'step 3' 'step 3'
var current=targets[num];
var card=event.cardlist[num];
if(card&&event.cards.contains(card)){
if(current==game.me||current.isOnline()||(player==game.me&&!event.delayed)){
player.gain(card,current,'bySelf');
event.delayed=true;
}
else{
player.gain(card,current,'bySelf').set('delay',false);
}
}
event.num++;
if(event.num<targets.length){
event.redo();
}
'step 4'
if(!event.delayed) game.delay(); if(!event.delayed) game.delay();
}, },
gain:function(){ gain:function(){
@ -14169,7 +14147,8 @@
var owner=event.source||get.owner(cards[0]); var owner=event.source||get.owner(cards[0]);
if(owner){ if(owner){
var next=owner.lose(cards,ui.special).set('type','gain').set('forceDie',true); var next=owner.lose(cards,ui.special).set('type','gain').set('forceDie',true);
if(event.animate=='give') next.visible=true; if(event.animate=='give'||event.visible==true) next.visible=true;
event.relatedLose=next;
} }
} }
else{ else{
@ -14320,6 +14299,46 @@
}, },
lose:function(){ lose:function(){
"step 0" "step 0"
var evt=event.getParent();
if(evt.name!='discard'&&event.type!='discard') return;
if(evt.animate!=false){
evt.discardid=lib.status.videoId++;
game.broadcastAll(function(player,cards,id){
player.$throw(cards,null,'nobroadcast');
var cardnodes=[];
cardnodes._discardtime=get.time();
for(var i=0;i<cards.length;i++){
if(cards[i].clone){
cardnodes.push(cards[i].clone);
}
}
ui.todiscard[id]=cardnodes;
},player,cards,evt.discardid);
if(lib.config.sync_speed&&cards[0]&&cards[0].clone){
if(evt.delay!=false){
var waitingForTransition=get.time();
evt.waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete evt.waitingForTransition;
});
}
else if(evt.getParent().discardTransition){
delete evt.getParent().discardTransition;
var waitingForTransition=get.time();
evt.getParent().waitingForTransition=waitingForTransition;
cards[0].clone.listenTransition(function(){
if(_status.waitingForTransition==waitingForTransition&&_status.paused){
game.resume();
}
delete evt.getParent().waitingForTransition;
});
}
}
}
"step 1"
var hs=[],es=[],js=[]; var hs=[],es=[],js=[];
var hej=player.getCards('hej'); var hej=player.getCards('hej');
event.stockcards=cards.slice(0); event.stockcards=cards.slice(0);
@ -14397,14 +14416,17 @@
} }
if(!event.noOrdering) evt.orderingCards.addArray(cards); if(!event.noOrdering) evt.orderingCards.addArray(cards);
} }
"step 1" event.hs=hs;
event.es=es;
event.js=js;
"step 2"
if(num<cards.length){ if(num<cards.length){
if(cards[num].original=='e'){ if(cards[num].original=='e'){
event.loseEquip=true; event.loseEquip=true;
player.removeEquipTrigger(cards[num]); player.removeEquipTrigger(cards[num]);
var info=get.info(cards[num]); var info=get.info(cards[num]);
if(info.onLose&&(!info.filterLose||info.filterLose(cards[num],player))){ if(info.onLose&&(!info.filterLose||info.filterLose(cards[num],player))){
event.goto(2); event.goto(3);
return; return;
} }
} }
@ -14415,9 +14437,9 @@
if(event.loseEquip){ if(event.loseEquip){
player.addEquipTrigger(); player.addEquipTrigger();
} }
event.finish(); event.goto(4);
} }
"step 2" "step 3"
var info=get.info(cards[num]); var info=get.info(cards[num]);
if(info.loseDelay!=false&&(player.isAlive()||info.forceDie)){ if(info.loseDelay!=false&&(player.isAlive()||info.forceDie)){
player.popup(cards[num].name); player.popup(cards[num].name);
@ -14440,7 +14462,19 @@
next.card=cards[num]; next.card=cards[num];
} }
event.num++; event.num++;
event.goto(1); event.goto(2);
"step 4"
var evt=event.getParent();
if(evt.name!='discard'&&event.type!='discard') return;
if(evt.delay!=false){
if(evt.waitingForTransition){
_status.waitingForTransition=evt.waitingForTransition;
game.pause();
}
else{
game.delayx();
}
}
}, },
damage:function(){ damage:function(){
"step 0" "step 0"
@ -19077,6 +19111,8 @@
if(get.itemtype(this.storage[name])=='cards'){ if(get.itemtype(this.storage[name])=='cards'){
this.$throw(this.storage[name]); this.$throw(this.storage[name]);
game.cardsDiscard(this.storage[name]); game.cardsDiscard(this.storage[name]);
game.log(this.storage[name],'进入了弃牌堆');
this.storage[name].length=0;
} }
} }
else if(typeof info.intro.onunmark=='function'){ else if(typeof info.intro.onunmark=='function'){
@ -19274,20 +19310,43 @@
return player.canUse(card,current,distance,includecard); return player.canUse(card,current,distance,includecard);
}); });
}, },
hasValueTarget:function(){
return this.getUseValue.apply(this,arguments)>0;
},
getUseValue:function(card,distance,includecard){ getUseValue:function(card,distance,includecard){
if(typeof(card)=='string'){ if(typeof(card)=='string'){
card={name:card}; card={name:card};
} }
var player=this; var player=this;
var targets=game.filterPlayer(); var targets=game.filterPlayer();
var value=[];
var min=0; var min=0;
var info=get.info(card);
if(!info||info.notarget) return 0;
var range;
var select=get.copy(info.selectTarget);
if(select==undefined){
if(info.filterTarget==undefined) return true;
range=[1,1];
}
else if(typeof select=='number') range=[select,select];
else if(get.itemtype(select)=='select') range=select;
else if(typeof select=='function') range=select(card,player);
game.checkMod(card,player,range,'selectTarget',player);
if(!range) return 0;
for(var i=0;i<targets.length;i++){ for(var i=0;i<targets.length;i++){
if(player.canUse(card,targets[i],distance,includecard)){ if(player.canUse(card,targets[i],distance,includecard)){
var eff=get.effect(targets[i],card,player,player); var eff=get.effect(targets[i],card,player,player);
if(eff>min){ value.push(eff);
min=eff;
} }
} }
value.sort(function(a,b){
return b-a;
});
for(var i=0;i<value.length;i++){
if(i==range[1]||range[1]!=-1&&value[i]<=0) break;
min+=value[i];
} }
return min; return min;
}, },
@ -19794,8 +19853,9 @@
}, },
addTempSkill:function(skill,expire,checkConflict){ addTempSkill:function(skill,expire,checkConflict){
if(this.hasSkill(skill)&&this.tempSkills[skill]==undefined) return; if(this.hasSkill(skill)&&this.tempSkills[skill]==undefined) return;
var noremove=this.skills.contains(skill);
this.addSkill(skill,checkConflict,true); this.addSkill(skill,checkConflict,true);
this.skills.remove(skill); if(!noremove) this.skills.remove(skill);
if(!expire){ if(!expire){
expire='phaseAfter'; expire='phaseAfter';
@ -22983,7 +23043,12 @@
list2:[], list2:[],
}; };
listAdded={}; listAdded={};
var notemp=player.skills.slice(0);
for(var j in player.additionalSkills){
if(j.indexOf('hidden:')!=0) notemp.addArray(player.additionalSkills[j]);
}
for(var j in player.tempSkills){ for(var j in player.tempSkills){
if(notemp.contains(j)) return;
var expire=player.tempSkills[j]; var expire=player.tempSkills[j];
if(expire===name|| if(expire===name||
(Array.isArray(expire)&&expire.contains(name))|| (Array.isArray(expire)&&expire.contains(name))||
@ -23006,8 +23071,9 @@
var skills=player.getSkills(true).concat(lib.skill.global); var skills=player.getSkills(true).concat(lib.skill.global);
game.expandSkills(skills); game.expandSkills(skills);
for(var i=0;i<skills.length;i++){ for(var i=0;i<skills.length;i++){
var trigger=get.info(skills[i]).trigger; var info=get.info(skills[i]);
if(trigger){ if(info&&info.trigger){
var trigger=info.trigger;
var add=false; var add=false;
if(player===event.player&&trigger.player){ if(player===event.player&&trigger.player){
if(typeof trigger.player==='string'){ if(typeof trigger.player==='string'){
@ -23570,6 +23636,7 @@
cardEnabled:function(card,player,event){ cardEnabled:function(card,player,event){
card=get.autoViewAs(card,null,player); card=get.autoViewAs(card,null,player);
if(player==undefined) player=_status.event.player; if(player==undefined) player=_status.event.player;
if(!player) return false;
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player); var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2; if(mod2!='unchanged') return mod2;
if(event==='forceEnable'){ if(event==='forceEnable'){
@ -25586,6 +25653,17 @@
phaseName:['phaseZhunbei','phaseJudge','phaseDraw','phaseUse','phaseDiscard','phaseJieshu'], phaseName:['phaseZhunbei','phaseJudge','phaseDraw','phaseUse','phaseDiscard','phaseJieshu'],
}; };
var game={ var game={
getGlobalHistory:function(key,filter){
if(!key) return _status.globalHistory[_status.globalHistory.length-1];
if(!filter) return _status.globalHistory[_status.globalHistory.length-1][key];
else{
var history=game.getGlobalHistory(key).slice(0);
for(var i=0;i<history.length;i++){
if(!filter(history[i])) history.splice(i--,1);
}
return history;
}
},
cardsDiscard:function(cards){ cardsDiscard:function(cards){
var type=get.itemtype(cards); var type=get.itemtype(cards);
if(type!='cards'&&type!='card') return; if(type!='cards'&&type!='card') return;
@ -26149,7 +26227,7 @@
} }
if(_status.video) break; if(_status.video) break;
} }
if(_status.skillaudio.contains(str)) return; if(!lib.config.repeat_audio&&_status.skillaudio.contains(str)) return;
_status.skillaudio.add(str); _status.skillaudio.add(str);
game.addVideo('playAudio',null,str); game.addVideo('playAudio',null,str);
setTimeout(function(){ setTimeout(function(){
@ -26239,7 +26317,7 @@
}, },
playSkillAudio:function(name,index){ playSkillAudio:function(name,index){
if(_status.video&&arguments[1]!='video') return; if(_status.video&&arguments[1]!='video') return;
if(_status.skillaudio.contains(name)) return; if(!lib.config.repeat_audio&&_status.skillaudio.contains(name)) return;
game.addVideo('playSkillAudio',null,name); game.addVideo('playSkillAudio',null,name);
if(name.indexOf('|')<name.lastIndexOf('|')){ if(name.indexOf('|')<name.lastIndexOf('|')){
name=name.slice(name.lastIndexOf('|')+1); name=name.slice(name.lastIndexOf('|')+1);
@ -29950,6 +30028,8 @@
var ok=true,auto=true; var ok=true,auto=true;
var player=event.player; var player=event.player;
var auto_confirm=lib.config.auto_confirm; var auto_confirm=lib.config.auto_confirm;
var players=game.players.slice(0);
if(event.deadTarget) players.addArray(game.dead);
if(!event.filterButton&&!event.filterCard&&!event.filterTarget&&(!event.skill||!event._backup)){ if(!event.filterButton&&!event.filterCard&&!event.filterTarget&&(!event.skill||!event._backup)){
if(event.choosing){ if(event.choosing){
_status.imchoosing=true; _status.imchoosing=true;
@ -30022,9 +30102,9 @@
for(var i=0;i<event._cardChoice.length;i++){ for(var i=0;i<event._cardChoice.length;i++){
if(!lib.card[event._cardChoice[i].name].complexTarget){ if(!lib.card[event._cardChoice[i].name].complexTarget){
var targets=[]; var targets=[];
for(var j=0;j<game.players.length;j++){ for(var j=0;j<players.length;j++){
if(event.filterTarget(event._cardChoice[i],player,game.players[j])){ if(event.filterTarget(event._cardChoice[i],player,players[j])){
targets.push(game.players[j]); targets.push(players[j]);
} }
} }
event._targetChoice.set(event._cardChoice[i],targets); event._targetChoice.set(event._cardChoice[i],targets);
@ -30108,63 +30188,63 @@
range=get.select(event.selectTarget); range=get.select(event.selectTarget);
var selectableTargets=false; var selectableTargets=false;
if(range[0]!=range[1]||range[0]>1) auto=false; if(range[0]!=range[1]||range[0]>1) auto=false;
for(i=0;i<game.players.length;i++){ for(i=0;i<players.length;i++){
var nochess=true; var nochess=true;
if(game.chess&&!event.chessForceAll&&player&&get.distance(player,game.players[i],'pure')>7){ if(game.chess&&!event.chessForceAll&&player&&get.distance(player,players[i],'pure')>7){
nochess=false; nochess=false;
} }
else if(game.players[i].isOut()){ else if(players[i].isOut()){
nochess=false; nochess=false;
} }
else if(event._targetChoice&&event._targetChoice.has(card)){ else if(event._targetChoice&&event._targetChoice.has(card)){
var targetChoice=event._targetChoice.get(card); var targetChoice=event._targetChoice.get(card);
if(!Array.isArray(targetChoice)||!targetChoice.contains(game.players[i])){ if(!Array.isArray(targetChoice)||!targetChoice.contains(players[i])){
nochess=false; nochess=false;
} }
} }
else if(!event.filterTarget(card,player,game.players[i])){ else if(!event.filterTarget(card,player,players[i])){
nochess=false; nochess=false;
} }
if(nochess){ if(nochess){
if(ui.selected.targets.length<range[1]){ if(ui.selected.targets.length<range[1]){
game.players[i].classList.add('selectable'); players[i].classList.add('selectable');
if(Array.isArray(event._targetChoice)){ if(Array.isArray(event._targetChoice)){
event._targetChoice.push(game.players[i]); event._targetChoice.push(players[i]);
} }
} }
else if(range[1]==-1){ else if(range[1]==-1){
game.players[i].classList.add('selected'); players[i].classList.add('selected');
ui.selected.targets.add(game.players[i]); ui.selected.targets.add(players[i]);
} }
else{ else{
game.players[i].classList.remove('selectable'); players[i].classList.remove('selectable');
} }
} }
else{ else{
game.players[i].classList.remove('selectable'); players[i].classList.remove('selectable');
if(range[1]==-1){ if(range[1]==-1){
game.players[i].classList.remove('selected'); players[i].classList.remove('selected');
ui.selected.targets.remove(game.players[i]); ui.selected.targets.remove(players[i]);
} }
} }
if(game.players[i].classList.contains('selected')){ if(players[i].classList.contains('selected')){
game.players[i].classList.add('selectable'); players[i].classList.add('selectable');
} }
else if(!selectableTargets&&game.players[i].classList.contains('selectable')){ else if(!selectableTargets&&players[i].classList.contains('selectable')){
selectableTargets=true; selectableTargets=true;
} }
if(game.players[i].instance){ if(players[i].instance){
if(game.players[i].classList.contains('selected')){ if(players[i].classList.contains('selected')){
game.players[i].instance.classList.add('selected'); players[i].instance.classList.add('selected');
} }
else{ else{
game.players[i].instance.classList.remove('selected'); players[i].instance.classList.remove('selected');
} }
if(game.players[i].classList.contains('selectable')){ if(players[i].classList.contains('selectable')){
game.players[i].instance.classList.add('selectable'); players[i].instance.classList.add('selectable');
} }
else{ else{
game.players[i].instance.classList.remove('selectable'); players[i].instance.classList.remove('selectable');
} }
} }
} }
@ -30291,20 +30371,20 @@
} }
if(event.isMine()){ if(event.isMine()){
if(game.chess&&game.me&&get.config('show_distance')){ if(game.chess&&game.me&&get.config('show_distance')){
for(var i=0;i<game.players.length;i++){ for(var i=0;i<players.length;i++){
if(game.players[i]==game.me){ if(players[i]==game.me){
game.players[i].node.action.hide(); players[i].node.action.hide();
} }
else{ else{
game.players[i].node.action.show(); players[i].node.action.show();
var dist=get.distance(game.me,game.players[i],'pure'); var dist=get.distance(game.me,players[i],'pure');
var dist2=get.distance(game.me,game.players[i]); var dist2=get.distance(game.me,players[i]);
game.players[i].node.action.innerHTML='距离:'+dist2+'/'+dist; players[i].node.action.innerHTML='距离:'+dist2+'/'+dist;
if(dist>7){ if(dist>7){
game.players[i].node.action.classList.add('thunder'); players[i].node.action.classList.add('thunder');
} }
else{ else{
game.players[i].node.action.classList.remove('thunder'); players[i].node.action.classList.remove('thunder');
} }
} }
} }
@ -30372,13 +30452,15 @@
ui.selected.cards.length=0; ui.selected.cards.length=0;
_status.event.player.node.equips.classList.remove('popequip'); _status.event.player.node.equips.classList.remove('popequip');
} }
var players=game.players.slice(0);
if(_status.event.deadTarget) players.addArray(game.dead);
if((args.length==0||args.contains('target'))){ if((args.length==0||args.contains('target'))){
for(j=0;j<game.players.length;j++){ for(j=0;j<players.length;j++){
game.players[j].classList.remove('selected'); players[j].classList.remove('selected');
game.players[j].classList.remove('selectable'); players[j].classList.remove('selectable');
if(game.players[j].instance){ if(players[j].instance){
game.players[j].instance.classList.remove('selected'); players[j].instance.classList.remove('selected');
game.players[j].instance.classList.remove('selectable'); players[j].instance.classList.remove('selectable');
} }
} }
ui.selected.targets.length=0; ui.selected.targets.length=0;
@ -30404,8 +30486,8 @@
} }
ui.canvas.width=ui.arena.offsetWidth; ui.canvas.width=ui.arena.offsetWidth;
ui.canvas.height=ui.arena.offsetHeight; ui.canvas.height=ui.arena.offsetHeight;
for(var i=0;i<game.players.length;i++){ for(var i=0;i<players.length;i++){
game.players[i].unprompt(); players[i].unprompt();
} }
for(var i=0;i<_status.dragline.length;i++){ for(var i=0;i<_status.dragline.length;i++){
if(_status.dragline[i]) _status.dragline[i].remove(); if(_status.dragline[i]) _status.dragline[i].remove();
@ -38467,11 +38549,11 @@
var li2=document.createElement('li'); var li2=document.createElement('li');
var li3=document.createElement('li'); var li3=document.createElement('li');
var trimurl=function(str){ var trimurl=function(str){
if(str==lib.updateURL){ if(str==lib.updateURLS.github){
return 'GitHub'; return 'GitHub';
} }
if(str==lib.mirrorURL){ if(str==lib.updateURLS.coding){
return 'GitLab'; return 'Coding';
} }
var index; var index;
index=str.indexOf('://'); index=str.indexOf('://');
@ -39295,7 +39377,7 @@
var nodeturnover=ui.create.div('.menubutton','翻面',row1,clickrow1); var nodeturnover=ui.create.div('.menubutton','翻面',row1,clickrow1);
var noderevive=ui.create.div('.menubutton','复活',row1,clickrow1); var noderevive=ui.create.div('.menubutton','复活',row1,clickrow1);
var nodereplace=ui.create.div('.menubutton','换人',row1,clickrow1); var nodereplace=ui.create.div('.menubutton','换人',row1,clickrow1);
if(lib.config.mode!='identity'&&lib.config.mode!='guozhan'){ if(lib.config.mode!='identity'&&lib.config.mode!='guozhan'&&lib.config.mode!='doudizhu'){
nodereplace.classList.add('unselectable'); nodereplace.classList.add('unselectable');
} }
@ -41159,6 +41241,7 @@
}); });
} }
} }
lib.updateURL=lib.updateURLS[lib.config.update_link]||lib.updateURLS.coding;
lib.init.cssstyles(); lib.init.cssstyles();
@ -46989,6 +47072,7 @@
}, },
modetrans:function(config,server){ modetrans:function(config,server){
if(config.mode=='doudizhu') return '欢乐斗地主'; if(config.mode=='doudizhu') return '欢乐斗地主';
if(config.mode=='stone') return '炉石传说';
if(config.mode=='versus'){ if(config.mode=='versus'){
switch(config.versus_mode){ switch(config.versus_mode){
case '1v1':return '单人对决'; case '1v1':return '单人对决';

View File

@ -1,23 +1,24 @@
window.noname_update={ window.noname_update={
version:'1.9.97.7.1', version:'1.9.97.8.1',
update:'1.9.97.7', update:'1.9.97.7.1',
changeLog:[ changeLog:[
'新的Coding镜像下载点',
'BUG修复', 'BUG修复',
], ],
files:[ files:[
'card/extra.js', 'card/extra.js',
//'card/huanlekapai.js', //'card/huanlekapai.js',
//'card/sp.js', //'card/sp.js',
//'card/standard.js', 'card/standard.js',
//'card/swd.js', //'card/swd.js',
'card/guozhan.js', 'card/guozhan.js',
//'card/gwent.js', //'card/gwent.js',
//'character/diy.js', 'character/diy.js',
'character/extra.js', 'character/extra.js',
//'character/hearth.js', //'character/hearth.js',
//'character/gujian.js', //'character/gujian.js',
//'character/gwent.js', //'character/gwent.js',
'character/mobile.js', //'character/mobile.js',
//'character/mtg.js', //'character/mtg.js',
//'character/old.js', //'character/old.js',
'character/refresh.js', 'character/refresh.js',
@ -29,7 +30,7 @@ window.noname_update={
//'character/xianjian.js', //'character/xianjian.js',
'character/xinghuoliaoyuan.js', 'character/xinghuoliaoyuan.js',
'character/yijiang.js', 'character/yijiang.js',
//'character/yxs.js', 'character/yxs.js',
//'extension/boss/extension.js', //'extension/boss/extension.js',
//'layout/default/layout.css', //'layout/default/layout.css',
//'mode/identity.js', //'mode/identity.js',
@ -37,8 +38,8 @@ window.noname_update={
'mode/guozhan.js', 'mode/guozhan.js',
//'mode/single.js', //'mode/single.js',
//'mode/stone.js', //'mode/stone.js',
//'mode/brawl.js', 'mode/brawl.js',
//'mode/versus.js', 'mode/versus.js',
//'mode/boss.js', //'mode/boss.js',
'game/game.js', 'game/game.js',
//'game/NoSleep.js', //'game/NoSleep.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

View File

@ -1110,6 +1110,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
content:{ content:{
cardPile:function(list){ cardPile:function(list){
lib.config.bannedcards.remove('du');
if(game.bannedcards) game.bannedcards.remove('du');
var num=Math.ceil(list.length/10); var num=Math.ceil(list.length/10);
while(num--){ while(num--){
list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']); list.push([['heart','diamond','club','spade'].randomGet(),Math.ceil(Math.random()*13),'du']);
@ -1777,23 +1779,199 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
} }
} }
}, },
// baiyudujiang:{ baiyidujiang:{
// name:'白衣渡江', name:'白衣渡江',
// mode:'versus', mode:'versus',
// submode:'2v2', submode:'2v2',
// intro:[ showcase:function(init){
// '玩家在选将时可从6-8张的武将牌里选择两张武将牌一张面向大家可见加入游戏另一张是隐藏面孔暗置', var node=this;
// '选择的两张武将牌需满足以下至少两个条件1.性别相同2.体力上限相同3.技能数量相同', var player1,player2;
// '每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏' if(init){
// ], player1=ui.create.player(null,true).init('lvmeng');
// content:{ player2=ui.create.player(null,true).init('guanyu');
// submode:'two', player1.node.marks.remove();
// chooseCharacterNum:2, player1.node.hp.remove();
// chooseCharacterAfter:function(){ player2.node.marks.remove();
// player2.node.hp.remove();
// } player1.style.left='20px';
// } player1.style.top='20px';
// } player1.style.transform='scale(0.9)';
player1.node.count.innerHTML='2';
player1.node.count.dataset.condition='mid';
player2.style.left='auto';
player2.style.right='20px';
player2.style.top='20px';
player2.style.transform='scale(0.9)';
player2.node.count.innerHTML='2';
player2.node.count.dataset.condition='mid';
this.appendChild(player1);
this.appendChild(player2);
this.player1=player1;
this.player2=player2;
}
else{
player1=this.player1;
player2=this.player2;
}
var rect1=player1.getBoundingClientRect();
var rect2=player2.getBoundingClientRect();
var left1=rect1.left+rect1.width/2-ui.arena.offsetLeft;
var left2=rect2.left+rect2.width/2-ui.arena.offsetLeft;
var top1=rect1.top+rect1.height/2-ui.arena.offsetTop;
var top2=rect2.top+rect2.height/2-ui.arena.offsetTop;
var func=function(){
//game.linexy([left1,top1,left2,top2]);
setTimeout(function(){
player1.reinit(player1.name,'re_lvmeng');
player2.reinit(player2.name,'re_guanyu');
//game.linexy([left2,top2,left1,top1],'green');
},1500);
setTimeout(function(){
player1.reinit(player1.name,'sp_lvmeng');
player2.reinit(player2.name,'jsp_guanyu');
//game.linexy([left1,top1,left2,top2],'thunder');
},3000);
setTimeout(function(){
player1.reinit(player1.name,'shen_lvmeng');
player2.reinit(player2.name,'shen_guanyu');
//game.linexy([left2,top2,left1,top1],'fire');
},4500);
setTimeout(function(){
player1.reinit(player1.name,'lvmeng');
player2.reinit(player2.name,'guanyu');
},6000);
};
node.showcaseinterval=setInterval(func,6000);
func();
},
intro:[
'玩家在选将时可从8张武将牌里选择两张武将牌一张面向大家可见加入游戏另一张是隐藏面孔暗置',
'选择的两张武将牌需满足以下至少两个条件1.性别相同2.体力上限相同3.技能数量相同',
'每名玩家在其回合开始或回合结束时,可以选择将自己的武将牌弃置,然后使用暗置的武将牌进行剩余的游戏'
],
content:{
submode:'two',
chooseCharacterBefore:function(){
lib.skill._changeCharacter={
trigger:{player:['phaseBefore','phaseAfter']},
forced:true,
silent:true,
popup:false,
filter:function(event,player){
return player._backupCharacter!=undefined;
},
content:function(){
"step 0"
player.chooseControl('确定','取消').set('dialog',['是否替换自己的武将牌?',[[player._backupCharacter],'character']]).set('ai',function(){
return Math.random()<0.15?'确定':'取消';
});
"step 1"
if(result.control=='确定'){
game.log(player,'将',player.name,'替换为了',player._backupCharacter);
player.reinit(player.name,player._backupCharacter);
player.changeGroup(lib.character[player._backupCharacter][1],false);
delete player._backupCharacter;
}
},
},
game.addGlobalSkill('_changeCharacter');
game.chooseCharacterTwo=function(){
var next=game.createEvent('chooseCharacter',false);
next.setContent(function(){
'step 0'
ui.arena.classList.add('choose-character');
for(var i in lib.skill){
if(lib.skill[i].changeSeat){
lib.skill[i]={};
if(lib.translate[i+'_info']){
lib.translate[i+'_info']='此模式下不可用';
}
}
}
var bool=Math.random()<0.5;
var bool2=Math.random()<0.5;
var ref=game.players[0];
ref.side=bool;
ref.next.side=bool2;
ref.next.next.side=!bool;
ref.previous.side=!bool2;
var firstChoose=game.players.randomGet();
if(firstChoose.next.side==firstChoose.side){
firstChoose=firstChoose.next;
}
_status.firstAct=firstChoose;
for(var i=0;i<4;i++){
firstChoose.node.name.innerHTML=get.verticalStr(get.cnNumber(i+1,true)+'号位');
firstChoose=firstChoose.next;
}
for(var i=0;i<game.players.length;i++){
if(game.players[i].side==game.me.side){
game.players[i].node.identity.firstChild.innerHTML='友';
}
else{
game.players[i].node.identity.firstChild.innerHTML='敌';
}
game.players[i].node.identity.dataset.color=game.players[i].side+'zhu';
}
var list=[];
for(i in lib.character){
if(!lib.filter.characterDisabled(i)){
list.push(i);
}
}
var choose=[];
_status.characterlist=list;
event.filterChoice=function(name1,name2){
var info1=lib.character[name1];
var info2=lib.character[name2];
if(!info1||!info2) return;
return info1[0]==info2[0]||get.infoMaxHp(info1[2])==get.infoMaxHp(info2[2])||info1[3].length==info2[3].length;
};
var list2=list.randomGets(8);
var next=game.me.chooseButton(2,true,['请选择您的武将牌',[list2,'character']]);
next.set('onfree',true);
next.set('filterButton',function(button){
if(!ui.selected.buttons.length){
for(var i=0;i<list2.length;i++){
if(list2[i]!=button.link&&event.filterChoice(button.link,list2[i])) return true;
}
return false;
}
return event.filterChoice(button.link,ui.selected.buttons[0].link)
});
'step 1'
game.me.init(result.links[0]);
game.me._backupCharacter=result.links[1];
_status.characterlist.removeArray(result.links);
var list=_status.characterlist;
for(var i=0;i<game.players.length;i++){
if(game.players[i]!=game.me){
list.randomSort();
var bool=false;
for(var k=0;k<list.length;k++){
for(var j=i+1;j<list.length;j++){
if(event.filterChoice(list[k],list[j])){
bool=true;
game.players[i].init(list[k]);
game.players[i]._backupCharacter=list[j];
break;
}
}
if(bool) break;
}
}
}
setTimeout(function(){
ui.arena.classList.remove('choose-character');
},500);
});
};
}
}
},
scene:{ scene:{
name:'创建场景', name:'创建场景',
content:{ content:{

View File

@ -2141,7 +2141,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
player:"gainEnd", player:"gainEnd",
}, },
filter:function (event,player){ filter:function (event,player){
return event.source&&event.source!=player&&event.cards.length==player.countCards('h')&&player!=_status.currentPhase; return event.source&&event.source!=player&&!event.bySelf&&event.cards.length==player.countCards('h')&&player!=_status.currentPhase;
}, },
content:function (){ content:function (){
player.storage.new_kongcheng=player.storage.new_kongcheng.concat(player.getCards('h')); player.storage.new_kongcheng=player.storage.new_kongcheng.concat(player.getCards('h'));
@ -3768,13 +3768,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
} }
}, },
xuanlve:{ xuanlve:{
trigger:{player:'loseEnd'}, trigger:{player:'loseAfter'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
for(var i=0;i<event.cards.length;i++){ return event.es&&event.es.length>0;
if(event.cards[i].original=='e') return true;
}
return false;
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -4151,33 +4148,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
return lib.filter.filterCard(card,player,_status.event.getParent()); return lib.filter.filterCard(card,player,_status.event.getParent());
}, },
check:function(button){ check:function(button){
if(['chiling','xietianzi','lianjunshengyan'].contains(button.link[2])) return 0; if(['chiling','xietianzi','tiesuo','lulitongxin','diaohulishan','jiedao'].contains(button.link[2])) return 0;
var player=_status.event.player; return _status.event.player.getUseValue(button.link[2]);
var players=game.filterPlayer();
var shunshou=false;
var guohe=false;
var juedou=false;
var huoshao=false;
for(var i=0;i<players.length;i++){
if(!players[i].isOut()){
if(player.canUse('huoshaolianying',players[i])&&get.attitude(player,players[i])<0&&get.effect(players[i],{name:'huoshaolianying'})>0) huoshao=true;
if(players[i].hp==1&&get.damageEffect(players[i],player,player)>0&&!players[i].hasSha()){
juedou=true;
}
if(player.canUse('shunshou',players[i])&&get.attitude(player,players[i])<-1){
shunshou=true;
}
if(players[i].countCards('j')&&get.attitude(player,players[i])>2){
guohe=true;
}
}
}
if(huoshao&&button.link[2]=='huoshaolianying') return 3.5;
if(juedou&&button.link[2]=='juedou') return 3;
if(guohe&&button.link[2]=='guohe') return 2;
if(shunshou&&button.link[2]=='shunshou') return 1.5;
if(button.link[2]=='wuzhong'||button.link[2]=='yuanjiao') return 1;
return 0;
}, },
backup:function(links,player){ backup:function(links,player){
return { return {

View File

@ -140,6 +140,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
} }
// game.delay(); // game.delay();
"step 2" "step 2"
if(!_status.connectMode&&_status.brawl&&_status.brawl.chooseCharacterBefore){
_status.brawl.chooseCharacterBefore();
}
if(_status.connectMode){ if(_status.connectMode){
if(lib.configOL.versus_mode=='1v1'){ if(lib.configOL.versus_mode=='1v1'){
game.randomMapOL('hidden'); game.randomMapOL('hidden');
@ -268,9 +271,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else{ else{
game.chooseCharacter(); game.chooseCharacter();
} }
if(!_status.connectMode&&_status.brawl&&_status.brawl.chooseCharacterBefore){
_status.brawl.chooseCharacterBefore();
}
"step 3" "step 3"
var players=get.players(lib.sort.position); var players=get.players(lib.sort.position);
var info=[]; var info=[];