Sunflower

This commit is contained in:
Spmario233 2020-10-09 11:37:02 +08:00
parent 3092b87111
commit 34d1c820e3
16 changed files with 667 additions and 464 deletions

View File

@ -1735,11 +1735,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}); });
next.logSkill='guanshi_skill'; next.logSkill='guanshi_skill';
next.set('ai',function(card){ next.set('ai',function(card){
var evt=_status.event.getParent(); var evt=_status.event.getTrigger();
if(get.attitude(evt.player,evt._trigger.target)<0){ if(get.attitude(evt.player,evt.target)<0){
if(evt.player.hasSkill('jiu')|| if(evt.baseDamage+evt.extraDamage>=Math.min(2,evt.target.hp)){
evt.player.hasSkill('tianxianjiu')||
evt._trigger.target.hp==1){
return 8-get.value(card) return 8-get.value(card)
} }
return 5-get.value(card) return 5-get.value(card)

View File

@ -57,6 +57,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kaori:['female','key','3/4',['kaori_siyuan']], key_kaori:['female','key','3/4',['kaori_siyuan']],
key_akiko:['female','key',3,['akiko_dongcha']], key_akiko:['female','key',3,['akiko_dongcha']],
key_abyusa:['female','key',3,['abyusa_jueqing','abyusa_dunying']], key_abyusa:['female','key',3,['abyusa_jueqing','abyusa_dunying']],
key_godan:['male','key',6,['godan_yuanyi','godan_feiqu','godan_xiaoyuan']],
key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']], key_kud:['female','key',3,['kud_qiaoshou','kud_buhui']],
key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']], key_misuzu:['female','key',3,['misuzu_hengzhou','misuzu_nongyin','misuzu_zhongxing']],
@ -151,7 +152,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"], "ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
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","ns_zhangwei"], 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","ns_zhangwei"],
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_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa"], diy_key:["key_lucia","key_kyousuke","key_yuri","key_haruko","key_umi","key_rei","key_komari","key_yukine","key_yusa","key_misa","key_masato","key_iwasawa","key_kengo","key_yoshino","key_yui","key_tsumugi","key_saya","key_harukakanata","key_inari","key_shiina","key_sunohara","key_rin","key_sasami","key_akane","key_doruji","key_yuiko","key_riki","key_hisako","key_hinata","key_noda","key_tomoya","key_nagisa","key_ayato","key_ao","key_yuzuru","sp_key_kanade","key_mio","key_midori","key_kyoko","key_shizuru","key_shiorimiyuki","key_miki","key_shiori","key_kaori","sp_key_yuri","key_akiko","key_abyusa","key_godan"],
diy_yongjian:["ns_chendao","yj_caoang"], diy_yongjian:["ns_chendao","yj_caoang"],
}, },
}, },
@ -167,6 +168,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。', diy_tianyu:'字国让,渔阳雍奴(今天津市武清区东北)人。三国时期曹魏将领。初从刘备,因母亲年老回乡,后跟随公孙瓒,公孙瓒败亡,劝说鲜于辅加入曹操。曹操攻略河北时,田豫正式得到曹操任用,历任颖阴、郎陵令、弋阳太守等。',
}, },
characterTitle:{ characterTitle:{
key_godan:'#rAngel Beats!',
key_abyusa:'#rAngel Beats!', key_abyusa:'#rAngel Beats!',
key_akiko:'#bKanon', key_akiko:'#bKanon',
key_kaori:'#bKanon', key_kaori:'#bKanon',
@ -319,6 +321,38 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_lucia:['key_shizuru'], key_lucia:['key_shizuru'],
}, },
skill:{ skill:{
godan_yuanyi:{
trigger:{player:'phaseBegin'},
forced:true,
content:function(){
'step 0'
var num=game.roundNumber;
if(num&&typeof num=='number') player.draw(Math.min(3,num));
'step 1'
var next=player.phaseUse();
event.next.remove(next);
trigger.next.push(next);
},
},
godan_feiqu:{
inherit:'doruji_feiqu',
},
godan_xiaoyuan:{
trigger:{player:'changeHp'},
forced:true,
juexingji:true,
skillAnimation:true,
animationColor:'soil',
filter:function(event,player){
return event.num<0&&player.hp<4;
},
content:function(){
player.awakenSkill('godan_xiaoyuan');
player.loseMaxHp(3);
player.draw(3);
player.removeSkill('godan_feiqu');
},
},
abyusa_jueqing:{ abyusa_jueqing:{
audio:'jueqing', audio:'jueqing',
trigger:{source:'damageBegin2'}, trigger:{source:'damageBegin2'},
@ -4291,7 +4325,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ai:{ ai:{
effect:{ effect:{
player:function(card,player,target){ player:function(card,player,target){
if(get.attitude(player,target)>0&&get.tag(card,'damage')) return 'zeroplayertarget'; if(target&&get.attitude(player,target)>0&&get.tag(card,'damage')) return 'zeroplayertarget';
}, },
}, },
}, },
@ -10325,6 +10359,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_kaori:'美坂香里', key_kaori:'美坂香里',
key_akiko:'水濑秋子', key_akiko:'水濑秋子',
key_abyusa:'游佐', key_abyusa:'游佐',
key_godan:'松下护騨',
lucia_duqu:'毒躯', lucia_duqu:'毒躯',
lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。<br>②当你因【毒】失去体力时,你改为回复等量的体力。<br>③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。', lucia_duqu_info:'锁定技,①当你对其他角色造成伤害或受到其他角色的伤害时,你和对方各获得一张花色点数随机的【毒】。<br>②当你因【毒】失去体力时,你改为回复等量的体力。<br>③当你处于濒死状态时,你可以使用一张【毒】(每回合限一次)。',
lucia_zhenren:'振刃', lucia_zhenren:'振刃',
@ -10567,6 +10602,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
abyusa_jueqing_rewrite_info:'锁定技,你即将造成的伤害均视为失去体力。', abyusa_jueqing_rewrite_info:'锁定技,你即将造成的伤害均视为失去体力。',
abyusa_dunying:'遁影', abyusa_dunying:'遁影',
abyusa_dunying_info:'锁定技,其他角色计算与你的距离时+X。准备阶段和结束阶段你摸X张牌X为你已损失的体力值。', abyusa_dunying_info:'锁定技,其他角色计算与你的距离时+X。准备阶段和结束阶段你摸X张牌X为你已损失的体力值。',
godan_yuanyi:'远忆',
godan_yuanyi_info:'锁定技回合开始时你摸X张牌并进行一个额外的出牌阶段。X为游戏轮数且至多为3',
godan_feiqu:'肥躯',
godan_feiqu_info:'锁定技,当你使用【杀】时,或你成为【杀】的目标后,你令此【杀】不可被响应。',
godan_xiaoyuan:'消元',
godan_xiaoyuan_info:'觉醒技当你扣减体力时若你的体力值小于4则你减3点体力上限并摸三张牌失去【肥躯】。',
key_kud:'库特莉亚芙卡', key_kud:'库特莉亚芙卡',
kud_qiaoshou:'巧手', kud_qiaoshou:'巧手',

View File

@ -5615,7 +5615,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shixin:'释衅', shixin:'释衅',
shixin_info:'锁定技,当你受到火属性伤害时,你防止此伤害。', shixin_info:'锁定技,当你受到火属性伤害时,你防止此伤害。',
zhaohuo:'招祸', zhaohuo:'招祸',
zhaohuo_info:'锁定技当其他角色进入濒死状态时你将体力上限调整为1点。若你的体力上限因此减少则你摸张牌。X为你以此法减少的体力上限', zhaohuo_info:'锁定技当其他角色进入濒死状态时你将体力上限调整为1点。若你的体力上限因此减少则你摸X张牌。X为你以此法减少的体力上限',
yixiang:'义襄', yixiang:'义襄',
yixiang_info:'每名角色的回合限一次,当你成为一名角色使用牌的目标后,若该角色的体力值大于你的体力值,你可以随机获得牌堆里的一张你没有的基本牌。', yixiang_info:'每名角色的回合限一次,当你成为一名角色使用牌的目标后,若该角色的体力值大于你的体力值,你可以随机获得牌堆里的一张你没有的基本牌。',
yirang:'揖让', yirang:'揖让',

View File

@ -2407,7 +2407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
mod:{ mod:{
judge:function(player,result){ judge:function(player,result){
if(_status.event.card&&_status.event.card.name=='lebu'&&player.countMark('sishu2')%2==1){ if(_status.event.cardname=='lebu'&&player.countMark('sishu2')%2==1){
if(result.bool==false){ if(result.bool==false){
result.bool=true; result.bool=true;
} }
@ -4249,11 +4249,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
"new_repaoxiao":{ "new_repaoxiao":{
audio:"paoxiao", audio:"paoxiao",
inherit:"paoxiao", firstDo:true,
audioname2:{old_guanzhang:'old_fuhun'},
audioname:['re_zhangfei','guanzhang','xiahouba'],
trigger:{player:'useCard1'},
forced:true,
filter:function(event,player){
return (!event.audioed||!player.hasSkill('new_repaoxiao2'))&&event.card.name=='sha';
},
content:function(){
trigger.audioed=true;
player.addTempSkill('new_repaoxiao2');
},
mod:{ mod:{
targetInRange:function (card,player){
if(card.name=='sha'&&get.cardCount({name:'sha'},player)>0) return true;
},
cardUsable:function (card,player,num){ cardUsable:function (card,player,num){
if(card.name=='sha') return Infinity; if(card.name=='sha') return Infinity;
}, },
@ -4267,6 +4275,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
}, },
new_repaoxiao2:{
charlotte:true,
mod:{
targetInRange:function (card,player){
if(card.name=='sha') return true;
},
},
},
"new_tishen":{ "new_tishen":{
trigger:{ trigger:{
player:"phaseUseEnd", player:"phaseUseEnd",
@ -6975,9 +6991,41 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return true; return true;
}, },
prompt:'将一张黑桃手牌当酒使用', prompt:'将一张黑桃手牌当酒使用',
check:function(card){ check:function(cardx){
if(_status.event.type=='dying') return 1; if(_status.event.type=='dying') return 1;
return 4-get.value(card); var player=_status.event.player;
var shas=player.getCards('h','sha');
if(shas.length>1&&(player.getCardUsable('sha')>1||player.countCards('h','zhuge'))){
return 0;
}
shas.sort(function(a,b){
return get.order(b)-get.order(a);
});
var card;
if(shas.length){
for(var i=0;i<shas.length;i++){
if(shas[i]!=cardx&&lib.filter.filterCard(shas[i],player)){
card=shas[i];break;
}
}
}
if(card){
if(game.hasPlayer(function(current){
return (get.attitude(player,current)<0&&
!current.hasShan()
&&current.hp+current.countCards('h',{name:['tao','jiu']})>1+(player.storage.jiu||0)
&&player.canUse(card,current,true,true)&&
!current.hasSkillTag('filterDamage',null,{
player:player,
card:card,
jiu:true,
})&&
get.effect(current,card,player)>0);
})){
return 4-get.value(cardx);
}
}
return 0;
}, },
ai:{ ai:{
skillTagFilter:function(player){ skillTagFilter:function(player){

View File

@ -15,7 +15,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
}, },
character:{ character:{
old_zhoutai:['male','wu',4,['gzbuqu']], old_zhoutai:['male','wu',4,['buqu','new_fenji']],
old_caoren:['male','wei',4,['moon_jushou','jiewei']], old_caoren:['male','wei',4,['moon_jushou','jiewei']],
xuhuang:['male','wei',4,['gzduanliang']], xuhuang:['male','wei',4,['gzduanliang']],
re_pangde:['male','qun',4,['mashu','jianchu']], re_pangde:['male','qun',4,['mashu','jianchu']],
@ -816,11 +816,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
forced:true, forced:true,
filter:function(event,player){ filter:function(event,player){
var num=player.getStat('damage'); var num=0;
player.getHistory('sourceDamage',function(evt){
if(evt.getParent('phaseUse')==event) num+=evt.num;
});
return !num||num>1; return !num||num>1;
}, },
content:function(){ content:function(){
var numx=player.getStat('damage'); var numx=0;
player.getHistory('sourceDamage',function(evt){
if(evt.getParent('phaseUse')==trigger) numx+=evt.num;
});
if(!numx){ if(!numx){
var num=player.hp-player.countCards('h'); var num=player.hp-player.countCards('h');
if(num>0) player.draw(num); if(num>0) player.draw(num);
@ -2719,8 +2725,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shaRelated:true, shaRelated:true,
mod:{ mod:{
targetInRange:function(card,player,target){ targetInRange:function(card,player,target){
if(card.name=='sha'&&card.number){ if(card.name=='sha'&&typeof get.number(card)=='number'){
if(get.distance(player,target)<=card.number) return true; if(get.distance(player,target)<=get.number(card)) return true;
} }
} }
}, },
@ -6502,6 +6508,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger[trigger.name=='gain'?'source':'player'].draw(2); trigger[trigger.name=='gain'?'source':'player'].draw(2);
}, },
}, },
new_fenji:{
audio:"fenji",
trigger:{
global:"phaseJieshuBegin",
},
filter:function (event,player){
if(event.player.countCards('h')==0&&event.player.isAlive()) return true;
return false;
},
check:function (event,player){
return get.attitude(player,event.player)>2;
},
content:function (){
player.line(trigger.player,'green');
trigger.player.draw(2);
player.loseHp();
},
},
leiji:{ leiji:{
audio:2, audio:2,
trigger:{player:['useCard','respond']}, trigger:{player:['useCard','respond']},
@ -7530,6 +7554,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guhuo_info:'每名角色的回合限一次你可以扣置一张手牌当一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌若为假则此牌作废若为真则质疑角色获得技能“缠怨”锁定技你不能质疑于吉只要你的体力值为1你失去你的武将技能', guhuo_info:'每名角色的回合限一次你可以扣置一张手牌当一张基本牌或普通锦囊牌使用或打出。其他角色依次选择是否质疑。一旦有其他角色质疑则翻开此牌若为假则此牌作废若为真则质疑角色获得技能“缠怨”锁定技你不能质疑于吉只要你的体力值为1你失去你的武将技能',
fenji_info:'当一名角色的手牌被其他角色弃置或获得后你可以失去1点体力然后令该角色摸两张牌。', fenji_info:'当一名角色的手牌被其他角色弃置或获得后你可以失去1点体力然后令该角色摸两张牌。',
new_fenji:"奋激",
new_fenji_info:"一名角色的结束阶段开始时若其没有手牌你可以令其摸两张牌然后你失去1点体力。",
gzduanliang:'断粮', gzduanliang:'断粮',
gzduanliang_info:'你可以将一张黑色基本牌或黑色装备牌当【兵粮寸断】使用你可以对距离为2的角色使用【兵粮寸断】', gzduanliang_info:'你可以将一张黑色基本牌或黑色装备牌当【兵粮寸断】使用你可以对距离为2的角色使用【兵粮寸断】',
"xinfu_guhuo":"蛊惑", "xinfu_guhuo":"蛊惑",

View File

@ -879,62 +879,57 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinjingong:{ xinjingong:{
audio:'jingong', audio:'jingong',
enable:'phaseUse', enable:'phaseUse',
usable:1,
filter:function(event,player){ filter:function(event,player){
return player.countCards('he',function(card){ return event.xinjingong_list&&player.countCards('he',function(card){
return card.name=='sha'||get.type(card)=='equip'; return card.name=='sha'||get.type(card)=='equip';
}); });
}, },
delay:false, onChooseToUse:function(event){
usable:1, if(!game.online){
content:function(){ var evt=event.getParent();
'step 0' if(evt.name!='phaseUse') return;
var list=get.inpile('trick').randomGets(2); if(!evt.xinjingong_list){
if(Math.random()<0.5){ var list=get.inpile('trick').randomGets(2);
list.push('wy_meirenji'); if(Math.random()<0.5){
list.push('wy_meirenji');
}
else{
list.push('wy_xiaolicangdao');
}
evt.xinjingong_list=list;
}
if(!event.xinjingong_list) event.set('xinjingong_list',evt.xinjingong_list);
} }
else{ },
list.push('wy_xiaolicangdao'); chooseButton:{
} dialog:function(event,player){
for(var i=0;i<list.length;i++){ var list=[];
list[i]=['锦囊','',list[i]]; for(var i of event.xinjingong_list) list.push(['锦囊','',i]);
} return ui.create.dialog('矜功',[list,'vcard']);
player.chooseButton(['矜功',[list,'vcard']]).set('filterButton',function(button,player){ },
return game.hasPlayer(function(current){ filter:function(button,player){
return player.canUse(button.link[2],current,true,false); return lib.filter.filterCard({name:button.link[2]},player,_status.event.getParent());
}); },
}).set('ai',function(button){ check:function(button){
var player=_status.event.player; return _status.event.player.getUseValue({name:button.link[2]});
return player.getUseValue(button.link[2]); },
}); backup:function(links,player){
'step 1' return {
if(result.bool){ audio:'xinjingong',
var name=result.links[0][2]; filterCard:true,
event.fakecard={name:name}; position:'he',
player.chooseCardTarget({ viewAs:{name:links[0][2]},
check:function(card){
return 6-get.value(card);
},
filterCard:function(card){ filterCard:function(card){
return card.name=='sha'||get.type(card)=='equip'; return card.name=='sha'||get.type(card)=='equip';
}, },
position:'he', };
filterTarget:lib.filter.filterTarget, },
selectTarget:lib.filter.selectTarget, prompt:function(links,player){
ai1:function(card){ return '将一张【杀】或装备牌当做'+get.translation(links[0][2])+'使用';
return 7-get.value(card);
},
ai2:function(target){
var card=_status.event.fakecard;
var player=_status.event.player;
return get.effect(target,card,player,player);
},
_get_card:event.fakecard,
prompt:'将一张装备牌或【杀】当作'+get.translation(name)+'使用'
}).set('fakecard',event.fakecard);
}
else{
event.finish();
}
'step 2'
if(result.bool){
player.useCard(event.fakecard,result.cards,result.targets);
} }
}, },
ai:{ ai:{
@ -5236,6 +5231,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
info.audioname2.old_yuanshu='weidi'; info.audioname2.old_yuanshu='weidi';
} }
},map.skills); },map.skills);
'step 3'
if(player.isMinHp()) player.recover();
}, },
}, },
refanghun:{ refanghun:{
@ -9779,8 +9776,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){ filter:function(event,player){
if(player.countCards('he')==0) return false; if(player.countCards('he')==0) return false;
if(event.card.name=='sha') return true; if(event.card.name=='sha') return true;
var type=get.type(event.card,'trick'); return get.type(event.card)=='trick';
return type=='trick';
}, },
autodelay:true, autodelay:true,
content:function(){ content:function(){
@ -10328,8 +10324,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(card){return 6-get.value(card)}, check:function(card){return 6-get.value(card)},
content:function(){ content:function(){
'step 0' 'step 0'
var list=lib.group.slice(0); var list=lib.group.filter(function(group){
list.remove('shen'); return ['wei','shu','wu','qun'].contains(group)||game.hasPlayer(function(current){
return current.group==group;
})
});
if(player.storage.xiemu2) list.removeArray(player.storage.xiemu2); if(player.storage.xiemu2) list.removeArray(player.storage.xiemu2);
var list2=list.slice(0); var list2=list.slice(0);
list2.sort(function(a,b){ list2.sort(function(a,b){
@ -11143,19 +11142,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
qiangwu3:{ qiangwu3:{
mod:{ mod:{
aiOrder:function(player,card,num){ aiOrder:function(player,card,num){
if(card.name=='sha'&&card.number>player.storage.qiangwu) return num+2; if(card.name=='sha'&&get.number(card)>player.storage.qiangwu) return num+2;
}, },
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'&&get.number(card)<player.storage.qiangwu) return true;
}, },
cardUsable:function(card,player){ cardUsable:function(card,player){
if(_status.currentPhase==player&&card.name=='sha'&&card.number>player.storage.qiangwu) return Infinity; if(_status.currentPhase==player&&card.name=='sha'&&get.number(card)>player.storage.qiangwu) return Infinity;
} }
}, },
trigger:{player:'useCard1'}, trigger:{player:'useCard1'},
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&&event.addCount!==false) return true; get.number(event.card)>player.storage.qiangwu&&event.addCount!==false) return true;
return false; return false;
}, },
forced:true, forced:true,
@ -15194,7 +15193,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
canshi_info:'摸牌阶段开始时你可以改为摸X张牌X为已受伤的角色数若如此做当你于此回合内使用基本牌或锦囊牌时你弃置一张牌。', canshi_info:'摸牌阶段开始时你可以改为摸X张牌X为已受伤的角色数若如此做当你于此回合内使用基本牌或锦囊牌时你弃置一张牌。',
recanshi:'残蚀', recanshi:'残蚀',
recanshi2:'残蚀', recanshi2:'残蚀',
recanshi_info:'摸牌阶段开始时你可以多摸X张牌X为已受伤的角色数若如此做当你于此回合内使用【杀】或锦囊牌时,你弃置一张牌。', recanshi_info:'摸牌阶段开始时你可以多摸X张牌X为已受伤的角色数若如此做当你于此回合内使用【杀】或普通锦囊牌时,你弃置一张牌。',
zhuiji_info:'锁定技你与体力值不大于你的角色的距离视为1。', zhuiji_info:'锁定技你与体力值不大于你的角色的距离视为1。',
kunfen:'困奋', kunfen:'困奋',
kunfen_info:'锁定技结束阶段开始时你失去1点体力然后摸两张牌。', kunfen_info:'锁定技结束阶段开始时你失去1点体力然后摸两张牌。',
@ -15317,6 +15316,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinmoucheng:'谋逞', xinmoucheng:'谋逞',
xinmoucheng_info:'觉醒技准备阶段若你已经发动了3次以上的〖连计〗则你失去〖连计〗并获得〖矜功〗。', xinmoucheng_info:'觉醒技准备阶段若你已经发动了3次以上的〖连计〗则你失去〖连计〗并获得〖矜功〗。',
xinjingong:'矜功', xinjingong:'矜功',
xinjingong_backup:'矜功',
xinjingong_info:'出牌阶段限一次,你可以将一张【杀】或装备牌当做三张随机锦囊牌中的一张使用。', xinjingong_info:'出牌阶段限一次,你可以将一张【杀】或装备牌当做三张随机锦囊牌中的一张使用。',
caiyang:'蔡阳', caiyang:'蔡阳',
yinka:'印卡', yinka:'印卡',

View File

@ -3139,14 +3139,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
pingjian_temp:{ pingjian_temp:{
onremove:true, onremove:true,
trigger:{player:'useSkillAfter'}, trigger:{player:['useSkillBegin','useCard1']},
silent:true, silent:true,
firstDo:true, firstDo:true,
filter:function(event,player){ filter:function(event,player){
return event.skill==player.storage.pingjian_temp; if(!lib.skill[event.skill]) return false;
if(event.skill==player.storage.pingjian_temp) return true;
if(lib.skill[event.skill].sourceSkill==player.storage.pingjian_temp) return true;
return false;
}, },
content:function(){ content:function(){
player.removeSkill(trigger.skill); player.removeSkill(player.storage.pingjian_temp);
player.removeSkill('pingjian_temp'); player.removeSkill('pingjian_temp');
}, },
}, },
@ -3999,14 +4002,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}, },
content:function(){ content:function(){
'step 0' 'step 0'
var list=[]; var list=lib.group.filter(function(group){
for(var i=0;i<lib.group.length;i++){ return ['wei','shu','wu','qun'].contains(group)||game.hasPlayer(function(current){
if(lib.group[i]=='shen') continue; return current.group==group;
if(lib.group[i]=='western'&&!game.hasPlayer(function(current){ })
return current.group=='western' });
})) continue;
list.push(lib.group[i]);
}
player.chooseControl(list).set('prompt','秉诏:请选择一个势力').set('ai',function(){ player.chooseControl(list).set('prompt','秉诏:请选择一个势力').set('ai',function(){
var listx=list.slice(0); var listx=list.slice(0);
list.sort(function(a,b){ list.sort(function(a,b){

View File

@ -7851,7 +7851,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{player:'phaseUseEnd'}, trigger:{player:'phaseUseEnd'},
direct:true, direct:true,
filter:function(event,player){ filter:function(event,player){
return player.getStat().skill.yanyu>=2; return player.getHistory('lose',function(evt){
var evt2=evt.getParent();
return evt2.name=='useSkill'&&evt2.skill=='yanyu'&&evt.getParent(3)==event;
}).length>=2;
}, },
content:function(){ content:function(){
'step 0' 'step 0'
@ -12452,7 +12455,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhiyu:'智愚', zhiyu:'智愚',
qice:'奇策', qice:'奇策',
qice_backup:'奇策', qice_backup:'奇策',
jiangchi:'将', jiangchi:'将',
jiangchi_less:'少摸一张', jiangchi_less:'少摸一张',
jiangchi_more:'多摸一张', jiangchi_more:'多摸一张',
zishou:'自守', zishou:'自守',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[ window.noname_asset_list=[
'v1.9.104.1', 'v1.9.105.1',
'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',
@ -3379,6 +3379,7 @@ window.noname_asset_list=[
'image/character/xin_caozhang.jpg', 'image/character/xin_caozhang.jpg',
'image/character/xin_gongsunzan.jpg', 'image/character/xin_gongsunzan.jpg',
'image/character/xin_liaohua.jpg', 'image/character/xin_liaohua.jpg',
'image/character/key_godan.jpg',
'image/character/baiwuchang.jpg', 'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg', 'image/character/baosanniang.jpg',

View File

@ -126,10 +126,10 @@ window.config={
right_click:'pause', right_click:'pause',
sort:'type_sort', sort:'type_sort',
cards:['standard','ex','extra','sp','classic','basic','zhulu'], cards:['standard','ex','extra','sp','classic','basic'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra'], characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra'],
connect_characters:[], connect_characters:['diy'],
connect_cards:[], connect_cards:['huanlekapai','guozhan','sp','zhulu'],
plays:[], plays:[],
extensions:[], extensions:[],
banned:[], banned:[],

View File

@ -837,23 +837,23 @@
} }
}, },
// fewplayer:{ // fewplayer:{
// name:'启用人数', // name:'启用人数',
// intro:'设置启用新版布局的最小人数(不足时切换至默认布局)', // intro:'设置启用新版布局的最小人数(不足时切换至默认布局)',
// init:'3', // init:'3',
// // unfrequent:true, // // unfrequent:true,
// item:{ // item:{
// '2':'两人', // '2':'两人',
// '3':'三人', // '3':'三人',
// '4':'四人', // '4':'四人',
// '5':'五人', // '5':'五人',
// '6':'六人', // '6':'六人',
// '7':'七人', // '7':'七人',
// '8':'八人', // '8':'八人',
// }, // },
// onclick:function(item){ // onclick:function(item){
// game.saveConfig('fewplayer',item); // game.saveConfig('fewplayer',item);
// if(ui.arena) ui.arena.setNumber(ui.arena.dataset.number); // if(ui.arena) ui.arena.setNumber(ui.arena.dataset.number);
// } // }
// }, // },
player_height:{ player_height:{
name:'角色高度', name:'角色高度',
@ -3772,43 +3772,43 @@
// onclick:function(){ // onclick:function(){
// if(this.innerHTML!='已隐藏'){ // if(this.innerHTML!='已隐藏'){
// this.innerHTML='已隐藏'; // this.innerHTML='已隐藏';
// var pack=lib.config.all.cards.slice(0); // var pack=lib.config.all.cards.slice(0);
// if(Array.isArray(lib.config.hiddenCardPack)){ // if(Array.isArray(lib.config.hiddenCardPack)){
// for(var i=0;i<lib.config.hiddenCardPack.length;i++){ // for(var i=0;i<lib.config.hiddenCardPack.length;i++){
// pack.add(lib.config.hiddenCardPack[i]); // pack.add(lib.config.hiddenCardPack[i]);
// } // }
// } // }
// for(var i=0;i<pack.length;i++){ // for(var i=0;i<pack.length;i++){
// if(lib.config.all.sgscards.contains(pack[i])){ // if(lib.config.all.sgscards.contains(pack[i])){
// pack.splice(i--,1); // pack.splice(i--,1);
// } // }
// } // }
// game.saveConfig('hiddenCardPack',pack); // game.saveConfig('hiddenCardPack',pack);
// //
// var pack=lib.config.all.characters.slice(0); // var pack=lib.config.all.characters.slice(0);
// if(Array.isArray(lib.config.hiddenCharacterPack)){ // if(Array.isArray(lib.config.hiddenCharacterPack)){
// for(var i=0;i<lib.config.hiddenCharacterPack.length;i++){ // for(var i=0;i<lib.config.hiddenCharacterPack.length;i++){
// pack.add(lib.config.hiddenCharacterPack[i]); // pack.add(lib.config.hiddenCharacterPack[i]);
// } // }
// } // }
// for(var i=0;i<pack.length;i++){ // for(var i=0;i<pack.length;i++){
// if(lib.config.all.sgscharacters.contains(pack[i])){ // if(lib.config.all.sgscharacters.contains(pack[i])){
// pack.splice(i--,1); // pack.splice(i--,1);
// } // }
// } // }
// game.saveConfig('hiddenCharacterPack',pack); // game.saveConfig('hiddenCharacterPack',pack);
// //
// var pack=lib.config.all.mode.slice(0); // var pack=lib.config.all.mode.slice(0);
// if(Array.isArray(lib.config.hiddenModePack)){ // if(Array.isArray(lib.config.hiddenModePack)){
// for(var i=0;i<lib.config.hiddenModePack.length;i++){ // for(var i=0;i<lib.config.hiddenModePack.length;i++){
// pack.add(lib.config.hiddenModePack[i]); // pack.add(lib.config.hiddenModePack[i]);
// } // }
// } // }
// for(var i=0;i<pack.length;i++){ // for(var i=0;i<pack.length;i++){
// if(lib.config.all.sgsmodes.contains(pack[i])){ // if(lib.config.all.sgsmodes.contains(pack[i])){
// pack.splice(i--,1); // pack.splice(i--,1);
// } // }
// } // }
// game.saveConfig('hiddenModePack',pack); // game.saveConfig('hiddenModePack',pack);
// //
// var that=this; // var that=this;
@ -9885,14 +9885,14 @@
var info=get.info(card); var info=get.info(card);
var range; var range;
if(!info.notarget){ if(!info.notarget){
var select=get.copy(info.selectTarget); var select=get.copy(info.selectTarget);
if(select==undefined){ if(select==undefined){
range=[1,1]; range=[1,1];
} }
else if(typeof select=='number') range=[select,select]; else if(typeof select=='number') range=[select,select];
else if(get.itemtype(select)=='select') range=select; else if(get.itemtype(select)=='select') range=select;
else if(typeof select=='function') range=select(card,player); else if(typeof select=='function') range=select(card,player);
game.checkMod(card,player,range,'selectTarget',player); game.checkMod(card,player,range,'selectTarget',player);
} }
if(info.notarget||range[1]==-1){ if(info.notarget||range[1]==-1){
if(!info.notarget&&range[1]==-1){ if(!info.notarget&&range[1]==-1){
@ -10142,7 +10142,8 @@
cardsGotoOrdering:function(){ cardsGotoOrdering:function(){
game.getGlobalHistory().cardMove.push(event); 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].fix();
ui.ordering.appendChild(cards[i]);
} }
var evt=event.relatedEvent||event.getParent(); var evt=event.relatedEvent||event.getParent();
if(!evt.orderingCards) evt.orderingCards=[]; if(!evt.orderingCards) evt.orderingCards=[];
@ -10337,9 +10338,9 @@
} }
player.ai.tempIgnore=[]; player.ai.tempIgnore=[];
_status.globalHistory.push({ _status.globalHistory.push({
cardMove:[], cardMove:[],
custom:[], custom:[],
}); });
game.countPlayer2(function(current){ game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[]}); current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[]});
current.stat.push({card:{},skill:{}}); current.stat.push({card:{},skill:{}});
@ -14261,7 +14262,7 @@
// game.playAudio('effect','draw'); // game.playAudio('effect','draw');
// } // }
// game.broadcast(function(){ // game.broadcast(function(){
// if(lib.config.background_audio){ // if(lib.config.background_audio){
// game.playAudio('effect','draw'); // game.playAudio('effect','draw');
// } // }
// }); // });
@ -15079,12 +15080,12 @@
// player.removeEquipTrigger(); // player.removeEquipTrigger();
// for(var i in lib.skill.globalmap){ // for(var i in lib.skill.globalmap){
// if(lib.skill.globalmap[i].contains(player)){ // if(lib.skill.globalmap[i].contains(player)){
// lib.skill.globalmap[i].remove(player); // lib.skill.globalmap[i].remove(player);
// if(lib.skill.globalmap[i].length==0&&!lib.skill[i].globalFixed){ // if(lib.skill.globalmap[i].length==0&&!lib.skill[i].globalFixed){
// game.removeGlobalSkill(i); // game.removeGlobalSkill(i);
// } // }
// } // }
// } // }
game.broadcastAll(function(player){ game.broadcastAll(function(player){
@ -15591,76 +15592,76 @@
var from=this; var from=this;
if(from==to||from.hasSkill('undist')||to.hasSkill('undist')) return false; if(from==to||from.hasSkill('undist')||to.hasSkill('undist')) return false;
if(!game.players.contains(from)&&!game.dead.contains(from)) return false; if(!game.players.contains(from)&&!game.dead.contains(from)) return false;
if(!game.players.contains(to)&&!game.dead.contains(to)) return false; if(!game.players.contains(to)&&!game.dead.contains(to)) return false;
var mod1=game.checkMod(from,to,'unchanged','inRange',from); var mod1=game.checkMod(from,to,'unchanged','inRange',from);
if(mod1!='unchanged') return mod1; if(mod1!='unchanged') return mod1;
var mod2=game.checkMod(from,to,'unchanged','inRangeOf',to); var mod2=game.checkMod(from,to,'unchanged','inRangeOf',to);
if(mod2!='unchanged') return mod2; if(mod2!='unchanged') return mod2;
if(from.getAttackRange()<1) return false; if(from.getAttackRange()<1) return false;
var player=from,m,n=1,i; var player=from,m,n=1,i;
var fxy,txy; var fxy,txy;
if(game.chess){ if(game.chess){
fxy=from.getXY(); fxy=from.getXY();
txy=to.getXY(); txy=to.getXY();
n=Math.abs(fxy[0]-txy[0])+Math.abs(fxy[1]-txy[1]); n=Math.abs(fxy[0]-txy[0])+Math.abs(fxy[1]-txy[1]);
} }
else if(to.isMin(true)||from.isMin(true)){} else if(to.isMin(true)||from.isMin(true)){}
else{ else{
var length=game.players.length; var length=game.players.length;
var totalPopulation=game.players.length+game.dead.length+1; var totalPopulation=game.players.length+game.dead.length+1;
for(var iwhile=0;iwhile<totalPopulation;iwhile++){ for(var iwhile=0;iwhile<totalPopulation;iwhile++){
if(player.nextSeat!=to){ if(player.nextSeat!=to){
player=player.nextSeat; player=player.nextSeat;
if(player.isAlive()&&!player.isOut()&&!player.hasSkill('undist')&&!player.isMin(true)) n++; if(player.isAlive()&&!player.isOut()&&!player.hasSkill('undist')&&!player.isMin(true)) n++;
} }
else{ else{
break; break;
} }
} }
for(i=0;i<game.players.length;i++){ for(i=0;i<game.players.length;i++){
if(game.players[i].isOut()||game.players[i].hasSkill('undist')||game.players[i].isMin(true)) length--; if(game.players[i].isOut()||game.players[i].hasSkill('undist')||game.players[i].isMin(true)) length--;
} }
if(from.isDead()) length++; if(from.isDead()) length++;
if(to.isDead()) length++; if(to.isDead()) length++;
var left=from.hasSkillTag('left_hand'); var left=from.hasSkillTag('left_hand');
var right=from.hasSkillTag('right_hand'); var right=from.hasSkillTag('right_hand');
if(left===right) n=Math.min(n,length-n); if(left===right) n=Math.min(n,length-n);
else if(left==true) n=length-n; else if(left==true) n=length-n;
} }
n=game.checkMod(from,to,n,'globalFrom',from); n=game.checkMod(from,to,n,'globalFrom',from);
n=game.checkMod(from,to,n,'globalTo',to); n=game.checkMod(from,to,n,'globalTo',to);
m=n; m=n;
m=game.checkMod(from,to,m,'attackFrom',from); m=game.checkMod(from,to,m,'attackFrom',from);
m=game.checkMod(from,to,m,'attackTo',to); m=game.checkMod(from,to,m,'attackTo',to);
var equips1=from.getCards('e',function(card){ var equips1=from.getCards('e',function(card){
return !ui.selected.cards||!ui.selected.cards.contains(card); return !ui.selected.cards||!ui.selected.cards.contains(card);
}),equips2=to.getCards('e',function(card){ }),equips2=to.getCards('e',function(card){
return !ui.selected.cards||!ui.selected.cards.contains(card); return !ui.selected.cards||!ui.selected.cards.contains(card);
}); });
for(i=0;i<equips1.length;i++){ for(i=0;i<equips1.length;i++){
var info=get.info(equips1[i]).distance; var info=get.info(equips1[i]).distance;
if(!info) continue; if(!info) continue;
if(info.globalFrom){ if(info.globalFrom){
m+=info.globalFrom; m+=info.globalFrom;
n+=info.globalFrom; n+=info.globalFrom;
} }
if(info.attackFrom){ if(info.attackFrom){
m+=info.attackFrom; m+=info.attackFrom;
} }
} }
for(i=0;i<equips2.length;i++){ for(i=0;i<equips2.length;i++){
var info=get.info(equips2[i]).distance; var info=get.info(equips2[i]).distance;
if(!info) continue; if(!info) continue;
if(info.globalTo){ if(info.globalTo){
m+=info.globalTo; m+=info.globalTo;
n+=info.globalTo; n+=info.globalTo;
} }
if(info.attaclTo){ if(info.attaclTo){
m+=info.attaclTo; m+=info.attaclTo;
} }
} }
return m<=1; return m<=1;
}, },
inRangeOf:function(source){ inRangeOf:function(source){
return source.inRange(this); return source.inRange(this);
@ -15695,22 +15696,22 @@
return next; return next;
}, },
chooseToEnable:function(){ chooseToEnable:function(){
var next=game.createEvent('chooseToEnable'); var next=game.createEvent('chooseToEnable');
next.player=this; next.player=this;
next.setContent('chooseToEnable'); next.setContent('chooseToEnable');
return next; return next;
}, },
chooseToDisable:function(horse){ chooseToDisable:function(horse){
var next=game.createEvent('chooseToDisable'); var next=game.createEvent('chooseToDisable');
next.player=this; next.player=this;
if(horse) next.horse=true; if(horse) next.horse=true;
next.setContent('chooseToDisable'); next.setContent('chooseToDisable');
return next; return next;
}, },
countDisabled:function(){ countDisabled:function(){
if(!this.storage.disableEquip) return 0; if(!this.storage.disableEquip) return 0;
return this.storage.disableEquip.length; return this.storage.disableEquip.length;
}, },
isPhaseUsing:function(notmeisok){ isPhaseUsing:function(notmeisok){
if(!notmeisok&&_status.currentPhase!=this) return false; if(!notmeisok&&_status.currentPhase!=this) return false;
return _status.event.name=='phaseUse'||_status.event.getParent('phaseUse').name=='phaseUse'; return _status.event.name=='phaseUse'||_status.event.getParent('phaseUse').name=='phaseUse';
@ -19206,6 +19207,7 @@
} }
if(next.judge==undefined) next.judge=function(){return 0}; if(next.judge==undefined) next.judge=function(){return 0};
if(next.position==undefined) next.position=ui.discardPile; if(next.position==undefined) next.position=ui.discardPile;
if(next.card) next.cardname=next.card.viewAs||next.card.name;
var str=''; var str='';
if(next.card) str=get.translation(next.card.viewAs||next.card.name); if(next.card) str=get.translation(next.card.viewAs||next.card.name);
@ -20533,14 +20535,14 @@
list.push(all[j]); list.push(all[j]);
} }
else{ else{
if(!filter) list.addArray(all[j][key]); if(!filter) list.addArray(all[j][key]);
else{ else{
var history=all[j][key].slice(0); var history=all[j][key].slice(0);
if(last) history=history.slice(0,history.indexOf(last)+1); if(last) history=history.slice(0,history.indexOf(last)+1);
for(var i=0;i<history.length;i++){ for(var i=0;i<history.length;i++){
if(filter(history[i])) list.push(history[i]); if(filter(history[i])) list.push(history[i]);
} }
} }
} }
} }
return list; return list;
@ -23602,12 +23604,12 @@
if(filter(info.trigger[i])){bool=true;break} if(filter(info.trigger[i])){bool=true;break}
} }
if(!bool) return; if(!bool) return;
var priority=0; var priority=0;
if(info.priority){ if(info.priority){
priority=info.priority*100; priority=info.priority*100;
} }
if(info.silent){ if(info.silent){
priority++; priority++;
} }
if(info.equipSkill) priority-=25; if(info.equipSkill) priority-=25;
if(info.cardSkill) priority-=50; if(info.cardSkill) priority-=50;
@ -25647,9 +25649,9 @@
}, },
exec:function(func){ exec:function(func){
// if(typeof func=='function'){ // if(typeof func=='function'){
// var args=Array.from(arguments); // var args=Array.from(arguments);
// args.shift(); // args.shift();
// func.apply(this,args); // func.apply(this,args);
// } // }
}, },
log:function(){ log:function(){
@ -27321,13 +27323,53 @@
game.importedPack=obj; game.importedPack=obj;
} }
}, },
createDir:function(dir,success,error){
var nullFC=function(){};
success=success||nullFC;
error=error||nullFC;
dir=dir.split("/");
if(window.resolveLocalFileSystemURL){
window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
(function redo(entry){
var i=dir.shift();
entry.getDirectory(i,{create:true},function(dirEntry){
if(dir.length) redo(dirEntry);
else success();
});
})(entry);
},error);
}
else{
var fs=require("fs");
var str=__dirname;
(function redo(){
str+="/";
str+=dir.shift();
fs.exists(str,function(exists){
if(exists){
//已存在此目录
if(dir.length) redo();
else success();
}
else{
fs.mkdir(str, function(){
if(dir.length) redo();
else success();
});
}
});
})();
}
},
importExtension:function(data,finishLoad,exportext,pkg){ importExtension:function(data,finishLoad,exportext,pkg){
//by 来瓶可乐加冰
if(!window.JSZip){ if(!window.JSZip){
lib.init.js(lib.assetURL+'game','jszip',function(){ lib.init.js(lib.assetURL+'game','jszip',function(){
game.importExtension(data,finishLoad,exportext,pkg); game.importExtension(data,finishLoad,exportext,pkg);
}); });
} }
else if(get.objtype(data)=='object'){ else if(get.objtype(data)=='object'){
//导出
var zip=new JSZip(); var zip=new JSZip();
var filelist=[]; var filelist=[];
var filelist2=[]; var filelist2=[];
@ -27420,17 +27462,23 @@
} }
} }
else{ else{
//导入
function UHP(){
alert("导入失败");
};
var zip=new JSZip(); var zip=new JSZip();
try{ try{
zip.load(data); zip.load(data);
// alert(zip.file('文件夹/加扩展.js').asText())
var str=zip.file('extension.js').asText(); var str=zip.file('extension.js').asText();
if(str===""||undefined) throw('你导入的不是扩展!请选择正确的文件');
_status.importingExtension=true; _status.importingExtension=true;
eval(str); eval(str);
_status.importingExtension=false; _status.importingExtension=false;
if(!game.importedPack) throw('err'); if(!game.importedPack) throw('err');
var extname=game.importedPack.name; var extname=game.importedPack.name;
if(lib.config.all.plays.contains('extname')){ if(lib.config.all.plays.contains(extname)){
throw('err'); throw('禁止安装游戏原生扩展');
} }
if(lib.config.extensions.contains(extname)){ if(lib.config.extensions.contains(extname)){
game.removeExtension(extname,true); game.removeExtension(extname,true);
@ -27446,16 +27494,36 @@
if(game.download){ if(game.download){
var filelist=[]; var filelist=[];
for(var i in zip.files){ for(var i in zip.files){
if(i[0]!='.'&&i[0]!='_'){ //alert(zip.files[i].dir+i)
if(!zip.files[i].dir&&i[0]!='.'&&i[0]!='_'){
filelist.push(i); filelist.push(i);
} }
} }
//alert(filelist)
if(lib.node&&lib.node.fs){ if(lib.node&&lib.node.fs){
//电脑端
//具备nodeJS环境
game.ensureDirectory('extension/'+extname,function(){ game.ensureDirectory('extension/'+extname,function(){
var writeFile=function(){ var writeFile=function(e){
if(e){
finishLoad();
UHP();
return;
}
if(filelist.length){ if(filelist.length){
var filename=filelist.shift(); var filename=filelist.shift();
lib.node.fs.writeFile(__dirname+'/extension/'+extname+'/'+filename,zip.files[filename].asNodeBuffer(),null,writeFile); //filename 数组 ...dir+/+file
var zipdir=filename;
filename=filename.split("/");
var name=filename.pop();
if(filename.length) game.createDir('extension/'+extname+"/"+filename.join("/"),function(){
//这里需要个创文件夹的函数
Letgo(filename.join("/")+"/"+name);
},UHP);
else Letgo(name);
function Letgo(name){
lib.node.fs.writeFile(__dirname+'/extension/'+extname+"/"+name,zip.file(zipdir).asNodeBuffer(),null,writeFile);
}
} }
else{ else{
finishLoad(); finishLoad();
@ -27464,24 +27532,36 @@
writeFile(); writeFile();
}); });
} }
else{ else{
window.resolveLocalFileSystemURL(lib.assetURL,function(entry){ window.resolveLocalFileSystemURL(lib.assetURL,function(entry){
entry.getDirectory('extension/'+extname,{create:true},function(dirEntry){ entry.getDirectory('extension/'+extname,{create:true},function(dirEntry){
var writeFile=function(){ //扩展文件夹
if(filelist.length){ writeFile();
var filename=filelist.shift(); function writeFile(){
dirEntry.getFile(filename,{create:true},function(fileEntry){ if(filelist.length){
var filename=filelist.shift();
//filename 数组 ...dir+/+file
var zipdir=filename;
filename=filename.split("/");
var name=filename.pop();
if(filename.length) game.createDir('extension/'+extname+"/"+filename.join("/"),function(){
Letgo(filename.join("/")+"/"+name);
},UHP);
else Letgo(name);
function Letgo(name){
dirEntry.getFile(name,{create:true},function(fileEntry){
fileEntry.createWriter(function(fileWriter){ fileEntry.createWriter(function(fileWriter){
fileWriter.onwriteend=writeFile; fileWriter.onwriteend=writeFile;
fileWriter.write(zip.files[filename].asArrayBuffer()); fileWriter.write(zip.file(zipdir).asArrayBuffer());
}); });
}); },UHP);
}
} }
else{ else{
finishLoad(); finishLoad();
} }
}; };
writeFile();
}); });
}); });
} }
@ -27527,7 +27607,7 @@
alert('导入失败'); alert('导入失败');
return false; return false;
} }
} };
}, },
export:function(textToWrite,name){ export:function(textToWrite,name){
var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'}); var textFileAsBlob = new Blob([textToWrite], {type:'text/plain'});
@ -31606,8 +31686,8 @@
// var pilecfg=lib.config.customcardpile[get.config('cardpilename')]; // var pilecfg=lib.config.customcardpile[get.config('cardpilename')];
// if(pilecfg){ // if(pilecfg){
// lib.config.bannedpile=pilecfg[0]||{}; // lib.config.bannedpile=pilecfg[0]||{};
// lib.config.addedpile=pilecfg[1]||{}; // lib.config.addedpile=pilecfg[1]||{};
// } // }
_status.event={ _status.event={
@ -35177,15 +35257,15 @@
var expanded=false; var expanded=false;
if(hiddenNodes.length){ if(hiddenNodes.length){
// ui.create.div('.config.more','更多 <div>&gt;</div>',page,function(){ // ui.create.div('.config.more','更多 <div>&gt;</div>',page,function(){
// if(expanded){ // if(expanded){
// this.classList.remove('on'); // this.classList.remove('on');
// this.parentNode.classList.remove('expanded'); // this.parentNode.classList.remove('expanded');
// } // }
// else{ // else{
// this.classList.add('on'); // this.classList.add('on');
// this.parentNode.classList.add('expanded'); // this.parentNode.classList.add('expanded');
// } // }
// expanded=!expanded; // expanded=!expanded;
// }); // });
page.classList.add('morenodes'); page.classList.add('morenodes');
for(var k=0;k<hiddenNodes.length;k++){ for(var k=0;k<hiddenNodes.length;k++){
@ -37979,7 +38059,7 @@
editnode.classList.add('disabled'); editnode.classList.add('disabled');
delnode.innerHTML='取消'; delnode.innerHTML='取消';
delete delnode.button; delete delnode.button;
container.code='card={\n \n}\n\n\/*\n示例\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; container.code='card={\n \n}\n\n\/*\n示例\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
} }
newCard=ui.create.div('.new_character',page); newCard=ui.create.div('.new_character',page);
@ -38193,7 +38273,7 @@
}; };
var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput); var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput);
var editor=ui.create.div(editorpage); var editor=ui.create.div(editorpage);
container.code='card={\n \n}\n\n\/*\n示例\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; container.code='card={\n \n}\n\n\/*\n示例\ncard={\n type:"basic",\n enable:true,\n filterTarget:true,\n content:function(){\n target.draw()\n },\n ai:{\n order:1,\n result:{\n target:1\n }\n }\n}\n此例的效果为目标摸一张牌\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
var editnode=ui.create.div('.menubutton.large.new_card.disabled','创建卡牌',newCard,function(){ var editnode=ui.create.div('.menubutton.large.new_card.disabled','创建卡牌',newCard,function(){
var name=page.querySelector('input.new_name').value; var name=page.querySelector('input.new_name').value;
@ -38544,7 +38624,7 @@
editnode.classList.add('disabled'); editnode.classList.add('disabled');
delnode.innerHTML='取消'; delnode.innerHTML='取消';
delete delnode.button; delete delnode.button;
container.code='skill={\n \n}\n\n\/*\n示例\nskill={\n trigger:{player:"phaseJieshuBegin"},\n frequent:true,\n content:function(){\n player.draw()\n }\n}\n此例为闭月代码\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; container.code='skill={\n \n}\n\n\/*\n示例\nskill={\n trigger:{player:"phaseJieshuBegin"},\n frequent:true,\n content:function(){\n player.draw()\n }\n}\n此例为闭月代码\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
if(page.fromchar=='add'){ if(page.fromchar=='add'){
page.fromchar=true; page.fromchar=true;
} }
@ -38645,7 +38725,7 @@
}; };
var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput); var saveConfig=ui.create.div('.editbutton','保存',editorpage,saveInput);
var editor=ui.create.div(editorpage); var editor=ui.create.div(editorpage);
container.code='skill={\n \n}\n\n\/*\n示例\nskill={\n trigger:{player:"phaseJieshuBegin"},\n frequent:true,\n content:function(){\n player.draw()\n }\n}\n此例为闭月代码\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; container.code='skill={\n \n}\n\n\/*\n示例\nskill={\n trigger:{player:"phaseJieshuBegin"},\n frequent:true,\n content:function(){\n player.draw()\n }\n}\n此例为闭月代码\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
var citebutton=document.createElement('button'); var citebutton=document.createElement('button');
citebutton.innerHTML='引用代码'; citebutton.innerHTML='引用代码';
@ -38873,10 +38953,10 @@
} }
} }
else{ else{
dashes.content.node.code='function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项见选项代码参数2为扩展定义的武将、卡牌和技能等可在此函数中修改\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; dashes.content.node.code='function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项见选项代码参数2为扩展定义的武将、卡牌和技能等可在此函数中修改\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
dashes.precontent.node.code='function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; dashes.precontent.node.code='function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
dashes.config.node.code='config={\n \n}\n\n\/*\n示例\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; dashes.config.node.code='config={\n \n}\n\n\/*\n示例\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
dashes.help.node.code='help={\n \n}\n\n\/*\n示例\nhelp={\n "帮助条目":"<ul><li>列表1-条目1<li>列表1-条目2</ul><ol><li>列表2-条目1<li>列表2-条目2</ul>"\n}\n帮助内容将显示在菜单选项帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'; dashes.help.node.code='help={\n \n}\n\n\/*\n示例\nhelp={\n "帮助条目":"<ul><li>列表1-条目1<li>列表1-条目2</ul><ol><li>列表2-条目1<li>列表2-条目2</ul>"\n}\n帮助内容将显示在菜单选项帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/';
} }
}; };
var dashes={}; var dashes={};
@ -38998,10 +39078,10 @@
} }
}; };
page.content={} page.content={}
createCode('主','主代码',page,clickCode,'content','function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项见选项代码参数2为扩展定义的武将、卡牌和技能等可在此函数中修改\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); createCode('主','主代码',page,clickCode,'content','function(config,pack){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之后、界面加载之前\n参数1扩展选项见选项代码参数2为扩展定义的武将、卡牌和技能等可在此函数中修改\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/');
createCode('启','启动代码',page,clickCode,'precontent','function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); createCode('启','启动代码',page,clickCode,'precontent','function(){\n \n}\n\n\/*\n函数执行时机为游戏数据加载之前且不受禁用扩展的限制\n除添加模式外请慎用\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/');
createCode('选','选项代码',page,clickCode,'config','config={\n \n}\n\n\/*\n示例\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); createCode('选','选项代码',page,clickCode,'config','config={\n \n}\n\n\/*\n示例\nconfig={\n switcher_example:{\n name:"示例列表选项",\n init:"3",\n item:{"1":"一","2":"二","3":"三"}\n },\n toggle_example:{\n name:"示例开关选项",\n init:true\n }\n}\n此例中传入的主代码函数的默认参数为{switcher_example:"3",toggle_example:true}\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/');
createCode('帮','帮助代码',page,clickCode,'help','help={\n \n}\n\n\/*\n示例\nhelp={\n "帮助条目":"<ul><li>列表1-条目1<li>列表1-条目2</ul><ol><li>列表2-条目1<li>列表2-条目2</ul>"\n}\n帮助内容将显示在菜单选项帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/'); createCode('帮','帮助代码',page,clickCode,'help','help={\n \n}\n\n\/*\n示例\nhelp={\n "帮助条目":"<ul><li>列表1-条目1<li>列表1-条目2</ul><ol><li>列表2-条目1<li>列表2-条目2</ul>"\n}\n帮助内容将显示在菜单选项帮助中\n导出时本段代码中的换行、缩进以及注释将被清除\n*\/');
return page; return page;
}()); }());
@ -39825,7 +39905,7 @@
game.checkForUpdate(null,true); game.checkForUpdate(null,true);
}; };
// if(lib.config.dev){ // if(lib.config.dev){
// li1.lastChild.appendChild(button3); // li1.lastChild.appendChild(button3);
// } // }
(function(){ (function(){
@ -41004,14 +41084,14 @@
}, },
characterDialog:function(){ characterDialog:function(){
// if(lib.config.character_dialog_style=='newstyle'){ // if(lib.config.character_dialog_style=='newstyle'){
// for(var i=0;i<arguments.length;i++){ // for(var i=0;i<arguments.length;i++){
// if(arguments[i]=='thisiscard'){ // if(arguments[i]=='thisiscard'){
// break; // break;
// } // }
// } // }
// if(i==arguments.length){ // if(i==arguments.length){
// return ui.create.characterDialog2.apply(this,arguments); // return ui.create.characterDialog2.apply(this,arguments);
// } // }
// } // }
var filter,str,noclick,thisiscard,seperate,expandall,onlypack,heightset,precharacter; var filter,str,noclick,thisiscard,seperate,expandall,onlypack,heightset,precharacter;
for(var i=0;i<arguments.length;i++){ for(var i=0;i<arguments.length;i++){
@ -42012,10 +42092,10 @@
// ui.arena.classList.remove('player_autolong'); // ui.arena.classList.remove('player_autolong');
// } // }
// if(game.layout=='long'&&parseInt(num)<parseInt(lib.config.fewplayer)){ // if(game.layout=='long'&&parseInt(num)<parseInt(lib.config.fewplayer)){
// this.classList.add('fewplayer'); // this.classList.add('fewplayer');
// } // }
// else{ // else{
// this.classList.remove('fewplayer'); // this.classList.remove('fewplayer');
// } // }
} }
@ -46308,10 +46388,10 @@
} }
if(lib.config.background_speak&&e!=='init'){ if(lib.config.background_speak&&e!=='init'){
var audioname=this.link; var audioname=this.link;
if(info.audioname2&&info.audioname2[playername]){ if(info.audioname2&&info.audioname2[playername]){
audioname=info.audioname2[playername]; audioname=info.audioname2[playername];
info=lib.skill[audioname]; info=lib.skill[audioname];
} }
var audioinfo=info.audio; var audioinfo=info.audio;
var that=this; var that=this;
var getIndex=function(i){ var getIndex=function(i){
@ -47867,16 +47947,16 @@
var indent=''; var indent='';
var str; var str;
for(var i=0;i<level;i++){ for(var i=0;i<level;i++){
indent+=' '; indent+=' ';
} }
if(get.objtype(obj)=='object'){ if(get.objtype(obj)=='object'){
str='{\n'; str='{\n';
for(var i in obj){ for(var i in obj){
if(/[^a-zA-Z]/.test(i)){ if(/[^a-zA-Z]/.test(i)){
str+=indent+' "'+i+'":'+get.stringify(obj[i],level+1)+',\n'; str+=indent+' "'+i+'":'+get.stringify(obj[i],level+1)+',\n';
} }
else{ else{
str+=indent+' '+i+':'+get.stringify(obj[i],level+1)+',\n'; str+=indent+' '+i+':'+get.stringify(obj[i],level+1)+',\n';
} }
} }
str+=indent+'}'; str+=indent+'}';
@ -47885,7 +47965,7 @@
else{ else{
if(typeof obj=='function'){ if(typeof obj=='function'){
str=obj.toString(); str=obj.toString();
str=str.replace(/\t/g,' '); str=str.replace(/\t/g,' ');
var i=str.lastIndexOf('\n'); var i=str.lastIndexOf('\n');
var num=0; var num=0;
for(var j=i+1;j<str.length&&str[j]==' ';j++){ for(var j=i+1;j<str.length&&str[j]==' ';j++){
@ -47893,7 +47973,7 @@
} }
num=Math.floor(num/4); num=Math.floor(num/4);
for(i=0;i<num-level;i++){ for(i=0;i<num-level;i++){
str=str.replace(/\n /g,'\n'); str=str.replace(/\n /g,'\n');
} }
} }
else{ else{
@ -48809,7 +48889,9 @@
}, },
number:function(card,player){ number:function(card,player){
//啥时候狗卡出相关技能我再完善 //啥时候狗卡出相关技能我再完善
return card.number; if(typeof card.number=='number') return card.number;
else if(card.cards&&card.cards.length==1) return get.number(card.cards[0]);
return null;
}, },
nature:function(card,player){ nature:function(card,player){
if(get.itemtype(player)=='player'||player!==false){ if(get.itemtype(player)=='player'||player!==false){
@ -49844,23 +49926,23 @@
} }
} }
// if(get.is.phoneLayout()){ // if(get.is.phoneLayout()){
// var storage=node.storage; // var storage=node.storage;
// for(i in storage){ // for(i in storage){
// if(get.info(i)&&get.info(i).intro){ // if(get.info(i)&&get.info(i).intro){
// intro=get.info(i).intro; // intro=get.info(i).intro;
// if(node.getSkills().concat(lib.skill.global).contains(i)==false&&!intro.show) continue; // if(node.getSkills().concat(lib.skill.global).contains(i)==false&&!intro.show) continue;
// var name=intro.name?intro.name:get.translation(i); // var name=intro.name?intro.name:get.translation(i);
// if(typeof name=='function'){ // if(typeof name=='function'){
// name=name(storage[i],node); // name=name(storage[i],node);
// } // }
// translation='<div><div class="skill">『'+name.slice(0,2)+'』</div><div>'; // translation='<div><div class="skill">『'+name.slice(0,2)+'』</div><div>';
// var stint=get.storageintro(intro.content,storage[i],node,null,i); // var stint=get.storageintro(intro.content,storage[i],node,null,i);
// if(stint){ // if(stint){
// translation+=stint+'</div></div>'; // translation+=stint+'</div></div>';
// uiintro.add(translation); // uiintro.add(translation);
// } // }
// } // }
// } // }
// } // }
if(lib.config.right_range&&_status.gameStarted){ if(lib.config.right_range&&_status.gameStarted){
@ -51023,21 +51105,21 @@
else temp3=undefined; else temp3=undefined;
if(temp2&&typeof temp2.effect=='function'){ if(temp2&&typeof temp2.effect=='function'){
if(!player.hasSkillTag('ignoreSkill',true,{ if(!player.hasSkillTag('ignoreSkill',true,{
card:card, card:card,
target:target, target:target,
skill:skills2[i], skill:skills2[i],
isLink:isLink, isLink:isLink,
})) temp2=temp2.effect(card,player,target,result2,isLink); })) temp2=temp2.effect(card,player,target,result2,isLink);
else temp2=undefined; else temp2=undefined;
} }
else if(temp2&&typeof temp2.effect=='object'&&typeof temp2.effect.target=='function'){ else if(temp2&&typeof temp2.effect=='object'&&typeof temp2.effect.target=='function'){
if(!player.hasSkillTag('ignoreSkill',true,{ if(!player.hasSkillTag('ignoreSkill',true,{
card:card, card:card,
target:target, target:target,
skill:skills2[i], skill:skills2[i],
isLink:isLink, isLink:isLink,
})) temp2=temp2.effect.target(card,player,target,result2,isLink); })) temp2=temp2.effect.target(card,player,target,result2,isLink);
else temp2=undefined; else temp2=undefined;
} }
else temp2=undefined; else temp2=undefined;
if(typeof temp2=='object'){ if(typeof temp2=='object'){
@ -51185,21 +51267,21 @@
else temp3=undefined; else temp3=undefined;
if(temp2&&typeof temp2.effect=='function'){ if(temp2&&typeof temp2.effect=='function'){
if(!player.hasSkillTag('ignoreSkill',true,{ if(!player.hasSkillTag('ignoreSkill',true,{
card:card, card:card,
target:target, target:target,
skill:skills2[i], skill:skills2[i],
isLink:isLink, isLink:isLink,
})) temp2=temp2.effect(card,player,target,result2,isLink); })) temp2=temp2.effect(card,player,target,result2,isLink);
else temp2=undefined; else temp2=undefined;
} }
else if(temp2&&typeof temp2.effect=='object'&&typeof temp2.effect.target=='function'){ else if(temp2&&typeof temp2.effect=='object'&&typeof temp2.effect.target=='function'){
if(!player.hasSkillTag('ignoreSkill',true,{ if(!player.hasSkillTag('ignoreSkill',true,{
card:card, card:card,
target:target, target:target,
skill:skills2[i], skill:skills2[i],
isLink:isLink, isLink:isLink,
})) temp2=temp2.effect.target(card,player,target,result2,isLink); })) temp2=temp2.effect.target(card,player,target,result2,isLink);
else temp2=undefined; else temp2=undefined;
} }
else temp2=undefined; else temp2=undefined;
if(typeof temp2=='object'){ if(typeof temp2=='object'){

View File

@ -1,3 +1,3 @@
window.bannedKeyWords=[ window.bannedKeyWords=[
'ghs','直肠','性交','做爱','http','吃奶','骚逼','哈巴狗','美眉','癌','屁眼','艹','傻逼','操你','做鸡','奸','姦','华为','屄','狗子','屎', 'ghs','直肠','性交','做爱','http','吃奶','骚逼','哈巴狗','美眉','癌','屁眼','艹','傻逼','操你','做鸡','奸','姦','华为','屄','狗子','屎','同性恋','肖战','鸡巴','精液','粪水','挂月亮中','贱骨头',
]; ];

View File

@ -1,8 +1,8 @@
window.noname_update={ window.noname_update={
version:'1.9.105', version:'1.9.105.1',
update:'1.9.104.1', update:'1.9.105',
changeLog:[ changeLog:[
'动态技能描述(dynamicTranslate)', '松下护騨',
'bug修复', 'bug修复',
], ],
@ -11,16 +11,16 @@ window.noname_update={
//'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/mtg.js', //'card/mtg.js',
//'card/gujian.js', //'card/gujian.js',
//'card/guozhan.js', //'card/guozhan.js',
'card/gwent.js', //'card/gwent.js',
//'card/yunchou.js', //'card/yunchou.js',
//'card/zhenfa.js', //'card/zhenfa.js',
'card/zhulu.js', //'card/zhulu.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',
@ -33,17 +33,17 @@ window.noname_update={
'character/sp.js', 'character/sp.js',
'character/sp2.js', 'character/sp2.js',
//'character/tw.js', //'character/tw.js',
'character/standard.js', //'character/standard.js',
//'character/swd.js', //'character/swd.js',
//'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',
//'layout/nova/layout.css', //'layout/nova/layout.css',
//'mode/identity.js', //'mode/identity.js',
'mode/doudizhu.js', //'mode/doudizhu.js',
'mode/guozhan.js', 'mode/guozhan.js',
//'mode/chess.js', //'mode/chess.js',
//'mode/tafang.js', //'mode/tafang.js',
@ -51,11 +51,11 @@ window.noname_update={
//'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/keyWords.js', 'game/keyWords.js',
//'game/NoSleep.js', //'game/NoSleep.js',
//'game/config.js', 'game/config.js',
//'game/package.js', //'game/package.js',
//'game/asset.js', //'game/asset.js',
//'game/source.js', //'game/source.js',

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -2797,7 +2797,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
logTarget:'source', logTarget:'source',
content:function(){ content:function(){
trigger.source.damage().nature=lib.linked.randomGet(); trigger.source.damage().nature=['fire','thunder'].randomGet();
}, },
}, },
boss_pingdeng:{ boss_pingdeng:{

View File

@ -211,6 +211,9 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
vanish:true, vanish:true,
derivation:'guozhan', derivation:'guozhan',
}, },
zhulian_card:{
cardimage:'wuzhong',
},
}, },
aozhanRank:{ aozhanRank:{
'8':[], '8':[],
@ -1167,7 +1170,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else{ else{
if(get.attitude(player,trigger.source)>=0) check=false; if(get.attitude(player,trigger.source)>=0) check=false;
} }
player.chooseCard(get.prompt('gzfudi'),'交给其一张手牌然后对其势力中体力值最大且不小于你的一名角色造成1点伤害').set('aicheck',check).set('ai',function(card){ player.chooseCard(get.prompt('gzfudi',trigger.source),'交给其一张手牌然后对其势力中体力值最大且不小于你的一名角色造成1点伤害').set('aicheck',check).set('ai',function(card){
if(!_status.event.aicheck) return 0; if(!_status.event.aicheck) return 0;
return 9-get.value(card); return 9-get.value(card);
}); });
@ -2227,24 +2230,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
expose:0.1, expose:0.1,
}, },
}, },
"new_fenji":{
audio:"fenji",
trigger:{
global:"phaseAfter",
},
filter:function (event,player){
if(event.player.countCards('h')==0&&event.player.isAlive()) return true;
return false;
},
check:function (event,player){
return get.attitude(player,event.player)>2;
},
content:function (){
player.line(trigger.player,'green');
trigger.player.draw(2);
player.loseHp();
},
},
"new_luanji":{ "new_luanji":{
audio:"luanji", audio:"luanji",
enable:"phaseUse", enable:"phaseUse",
@ -3532,12 +3517,12 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
game.countPlayer(function(current){current.addSkill('aozhan')}); game.countPlayer(function(current){current.addSkill('aozhan')});
}, },
}, },
"xianqu_skill":{ "_xianqu_skill":{
ruleSkill:true, ruleSkill:true,
enable:"phaseUse", enable:"phaseUse",
//filter:function (event,player){ filter:function (event,player){
//return player.countCards('h')<4; return player.hasMark('_xianqu_skill');
//}, },
usable:1, usable:1,
mark:true, mark:true,
intro:{ intro:{
@ -3545,9 +3530,14 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
content:function (){ content:function (){
"step 0" "step 0"
player.removeMark('_xianqu_skill',1);
game.log(player,'移去了','#g先驱','标记');
var num=4-player.countCards('h'); var num=4-player.countCards('h');
if(num) player.draw(num); if(num) player.draw(num);
player.chooseTarget('是否观看一名其他角色的一张暗置武将牌?',function(card,player,target){ "step 1"
if(game.hasPlayer(function(current){
return current!=player&&current.isUnseen(2);
})) player.chooseTarget('是否观看一名其他角色的一张暗置武将牌?',function(card,player,target){
return target!=player&&target.isUnseen(2); return target!=player&&target.isUnseen(2);
}).set('ai',function(target){ }).set('ai',function(target){
if(target.isUnseen()){ if(target.isUnseen()){
@ -3557,7 +3547,8 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
} }
return -get.attitude(_status.event.player,target); return -get.attitude(_status.event.player,target);
}); });
"step 1" else event.finish();
"step 2"
if(result.bool){ if(result.bool){
event.target=result.targets[0]; event.target=result.targets[0];
player.line(event.target,'green'); player.line(event.target,'green');
@ -3570,10 +3561,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
if(controls.length==0) event.finish(); if(controls.length==0) event.finish();
} }
else{ else{
player.removeSkill('xianqu_skill'); player.removeSkill('_xianqu_skill');
event.finish(); event.finish();
} }
"step 2" "step 3"
if(result.control){ if(result.control){
if(result.control=='主将'){ if(result.control=='主将'){
player.viewCharacter(event.target,0); player.viewCharacter(event.target,0);
@ -3588,7 +3579,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
else{ else{
player.viewCharacter(event.target,1); player.viewCharacter(event.target,1);
} }
player.removeSkill('xianqu_skill');
}, },
ai:{ ai:{
order:1, order:1,
@ -3602,78 +3592,93 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
"zhulianbihe_skill":{ "zhulianbihe_skill":{
ruleSkill:true, ruleSkill:true,
group:["zhulianbihe_skill_draw","zhulianbihe_skill_tao"],
mark:true, mark:true,
intro:{ intro:{
content:"◇出牌阶段,你可以弃置此标记 然后摸两张牌。<br>◇你可以将此标记当做【桃】使用。", content:"◇出牌阶段,你可以弃置此标记 然后摸两张牌。<br>◇你可以将此标记当做【桃】使用。",
}, },
}, },
"yinyang_skill":{ "yinyang_skill":{
ruleSkill:true,
group:["yinyang_skill_draw","yinyang_skill_add"],
mark:true, mark:true,
intro:{ intro:{
content:"◇出牌阶段,你可以弃置此标记,然后摸一张牌。<br>◇弃牌阶段,你可以弃置此标记,然后本回合手牌上限+2。", content:"◇出牌阶段,你可以弃置此标记,然后摸一张牌。<br>◇弃牌阶段,你可以弃置此标记,然后本回合手牌上限+2。",
}, },
}, },
"zhulianbihe_skill_draw":{ "_zhulianbihe_skill_draw":{
ruleSkill:true, ruleSkill:true,
enable:"phaseUse", enable:"phaseUse",
usable:1, filter:function(event,player){
content:function (){ return player.hasMark('zhulianbihe_skill');
player.draw(2); },
player.removeSkill('zhulianbihe_skill'); chooseButton:{
dialog:function(event,player){
return ui.create.dialog('珠联璧合',[[
['摸牌','','zhulian_card'],
['基本','','tao']
],'vcard'],'hidden');
},
filter:function(button,player){
if(button.link[2]!='tao') return true;
return lib.filter.filterCard({name:'tao',isCard:true},player,_status.event.getParent());
},
check:function(button){
var player=_status.event.player;
if(button.link[2]=='tao') return get.effect_use(player,{name:'tao'},player)>0?2:0;
if(player.getHandcardLimit()-player.countCards('h')>1&&!game.hasPlayer(function(current){
return current!=player&&current.isFriendOf(player)&&current.hp+current.countCards('h','shan')<=2;
})) return 1;
return 0;
},
backup:function(links,player){
if(links[0][2]=='tao') return get.copy(lib.skill._zhulianbihe_skill_tao);
return {
content:function(){
player.draw(2);
player.removeMark('zhulianbihe_skill',1);
},
};
},
}, },
ai:{ ai:{
order:function (item,player){ order:function(item,player){
var cards=player.getCards('h'); if(get.effect_use(player,{name:'tao'},player)>0) return get.order({name:'tao'},player)-0.1;
if(player.hp>=3){ return 7.2;
if(cards.length>=3){
for(var i=0;i<cards.length;i++){
if(get.tag(cards[i],'recover')>=1) return 7.2;
}
return 1;
}
else return 7.2;
}
if(player.hp=2){
if(cards.length<2){
for(var i=0;i<cards.length;i++){
if(get.tag(cards[i],'recover')>=1) return 7.2;
}
return 1;
}
}
return 1;
}, },
result:{ result:{
player:2, player:1,
}, },
}, },
}, },
"zhulianbihe_skill_tao":{ "_zhulianbihe_skill_tao":{
ruleSkill:true, ruleSkill:true,
enable:"chooseToUse", enable:"chooseToUse",
filter:function(event,player){
return event.type!='phase'&&player.hasMark('zhulianbihe_skill');
},
viewAs:{ viewAs:{
name:"tao", name:"tao",
isCard:true,
}, },
filterCard:function (){return false}, filterCard:function(){return false},
selectCard:-1, selectCard:-1,
precontent:function (){ precontent:function(){
player.removeSkill('zhulianbihe_skill'); player.removeMark('zhulianbihe_skill',1);
}, },
ai:{ ai:{
save:true, save:true,
respondTao:true, skillTagFilter:function(player){
if(!player.hasMark('zhulianbihe_skill')) return false;
},
}, },
}, },
"yinyang_skill_draw":{ "_yinyang_skill_draw":{
ruleSkill:true, ruleSkill:true,
enable:"phaseUse", enable:"phaseUse",
usable:1, filter:function(event,player){
content:function (){ return player.hasMark('yinyang_skill');
},
content:function(){
player.draw(); player.draw();
player.removeSkill('yinyang_skill'); player.removeMark('yinyang_skill',1);
}, },
ai:{ ai:{
order:function (item,player){ order:function (item,player){
@ -3690,18 +3695,18 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
}, },
}, },
"yinyang_skill_add":{ "_yinyang_skill_add":{
ruleSkill:true, ruleSkill:true,
trigger:{ trigger:{
player:"phaseDiscardBefore", player:"phaseDiscardBegin",
}, },
filter:function (event,player){ filter:function (event,player){
return player.needsToDiscard(); return player.hasMark('yinyang_skill')&&player.needsToDiscard();
}, },
prompt:"是否弃置【阴阳鱼】标记,使本回合的手牌上限+2", prompt:"是否弃置一枚【阴阳鱼】标记,使本回合的手牌上限+2",
content:function (){ content:function (){
player.addTempSkill('yinyang_add','phaseAfter'); player.addTempSkill('yinyang_add','phaseAfter');
player.removeSkill('yinyang_skill'); player.removeMark('yinyang_skill',1);
}, },
}, },
"yinyang_add":{ "yinyang_add":{
@ -7436,20 +7441,24 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌当做“魂”扣置于游戏外。", jihun_info:"当你受到伤害后,或与你势力不同的角色脱离濒死状态后,你可以将剩余武将牌堆的一张牌当做“魂”扣置于游戏外。",
"xianqu_skill":"先驱", "_xianqu_skill":"先驱",
"xianqu_skill_info":"", "_xianqu_skill_info":"",
"zhulianbihe_skill":"珠联璧合", "zhulianbihe_skill":"珠联璧合",
"zhulianbihe_skill_info":"", "zhulianbihe_skill_info":"",
_zhulianbihe_skill_draw_backup:'珠联',
zhulian_card:'摸两张牌',
zhulian_card_info:'弃置【珠联璧合】标记并摸两张牌',
zhulian_card_bg:'摸',
"yinyang_skill":"阴阳鱼", "yinyang_skill":"阴阳鱼",
"yinyang_skill_info":"", "yinyang_skill_info":"",
"zhulianbihe_skill_draw":"珠联•摸牌", "_zhulianbihe_skill_draw":"珠联",
"zhulianbihe_skill_draw_info":"", "_zhulianbihe_skill_draw_info":"",
"zhulianbihe_skill_tao":"珠联•桃", "_zhulianbihe_skill_tao":"珠联",
"zhulianbihe_skill_tao_info":"", "_zhulianbihe_skill_tao_info":"",
"yinyang_skill_draw":"阴阳鱼", "_yinyang_skill_draw":"阴阳鱼",
"yinyang_skill_draw_info":"", "_yinyang_skill_draw_info":"",
"yinyang_skill_add":"阴阳鱼", "_yinyang_skill_add":"阴阳鱼",
"yinyang_skill_add_info":"", "_yinyang_skill_add_info":"",
"yinyang_add":"阴阳鱼", "yinyang_add":"阴阳鱼",
"yinyang_add_info":"", "yinyang_add_info":"",
@ -7459,8 +7468,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
"new_duanliang_info":"出牌阶段你可以将一张黑色基本牌或黑色装备牌当做【兵粮寸断】使用。你使用【兵粮寸断】没有距离限制。若你对距离超过2的角色发动了〖断粮〗则本回合不能再发动〖断粮〗。", "new_duanliang_info":"出牌阶段你可以将一张黑色基本牌或黑色装备牌当做【兵粮寸断】使用。你使用【兵粮寸断】没有距离限制。若你对距离超过2的角色发动了〖断粮〗则本回合不能再发动〖断粮〗。",
"new_shushen":"淑慎", "new_shushen":"淑慎",
"new_shushen_info":"当你回复1点体力后你可令一名其他角色摸一张牌。", "new_shushen_info":"当你回复1点体力后你可令一名其他角色摸一张牌。",
"new_fenji":"奋激",
"new_fenji_info":"一名角色的结束阶段开始时若其没有手牌你可以令其摸两张牌然后你失去1点体力。",
"new_luanji":"乱击", "new_luanji":"乱击",
"new_luanji_info":"你可以将两张与你本回合以此法转化的花色均不相同的手牌当【万箭齐发】使用。当一名与你势力相同的角色因响应此牌而打出【闪】时,该角色摸一张牌。", "new_luanji_info":"你可以将两张与你本回合以此法转化的花色均不相同的手牌当【万箭齐发】使用。当一名与你势力相同的角色因响应此牌而打出【闪】时,该角色摸一张牌。",
"new_qingcheng":"倾城", "new_qingcheng":"倾城",
@ -7950,8 +7957,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
player.$removeCharacter(event.num); player.$removeCharacter(event.num);
}, },
doubleDraw:function(){ doubleDraw:function(){
game.log(player,'获得了','#g【阴阳鱼】','标记'); if(!player.hasMark('yinyang_skill')) player.addMark('yinyang_skill',1);
player.addSkill('yinyang_skill');
}, },
changeViceOnline:function(){ changeViceOnline:function(){
'step 0' 'step 0'
@ -8028,8 +8034,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}, },
zhulian:function(){ zhulian:function(){
player.popup('珠联璧合'); player.popup('珠联璧合');
game.log(player,'获得了','#g【珠联璧合】','标记'); if(!player.hasMark('zhulianbihe_skill')) player.addMark('zhulianbihe_skill',1);
player.addSkill('zhulianbihe_skill');
}, },
}, },
player:{ player:{
@ -8430,8 +8435,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
this.draw(2).log=false; this.draw(2).log=false;
} }
else{ else{
this.addSkill('xianqu_skill'); this.addMark('_xianqu_skill',1);
game.log(this,'获得了','#g【先驱】','标记');
} }
_status.initshown=true; _status.initshown=true;
} }