v1.9.117.2

This commit is contained in:
Spmario233 2022-12-22 11:19:22 +08:00
parent 5c6643e2ab
commit 88de608580
74 changed files with 2265 additions and 446 deletions

BIN
audio/die/chengui.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_huangquan.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_huban.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_liru.mp3 Normal file

Binary file not shown.

BIN
audio/die/dingshangwan.mp3 Normal file

Binary file not shown.

BIN
audio/die/kebineng.mp3 Normal file

Binary file not shown.

BIN
audio/die/quanhuijie.mp3 Normal file

Binary file not shown.

BIN
audio/die/re_zhuhuan.mp3 Normal file

Binary file not shown.

BIN
audio/die/yinfuren.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchongyi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcchongyi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dccongshi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dccongshi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfencheng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfencheng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfengyan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfengyan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfudao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcfudao2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dchuishu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dchuishu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcligong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcligong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcmieji1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcmieji2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcquanjian1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcquanjian2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctujue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dctujue2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingtu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingtu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingyu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyingyu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyishu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyishu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyongbi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcyongbi2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/kousheng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/kousheng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/refenli1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/refenli2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/repingkou1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/repingkou2.mp3 Normal file

Binary file not shown.

View File

@ -596,15 +596,19 @@ game.import('card',function(lib,game,ui,get,ai,_status){
cardSkill:true,
unique:true,
trigger:{player:'phaseDrawBegin'},
silent:true,
popup:false,
charlotte:true,
forced:true,
content:function(){
trigger.num--;
},
group:'caomu_skill2'
},
caomu_skill2:{
cardSkill:true,
popup:false,
forced:true,
trigger:{player:'phaseDrawAfter'},
silent:true,
content:function(){
var targets=game.filterPlayer(function(current){
return get.distance(player,current)<=1&&player!=current;

View File

@ -2583,11 +2583,9 @@ game.import('card',function(lib,game,ui,get,ai,_status){
else{
trigger.neutralize();
if(event.guowuxie==true){
if(trigger.target.identity!='ye'&&trigger.target.identity!='unknown'){
trigger.getParent().excluded.addArray(game.filterPlayer(function(current){
return current.identity==trigger.target.identity;
}));
}
trigger.getParent().excluded.addArray(game.filterPlayer(function(current){
return current.isFriendOf(trigger.target);
}));
}
}
}

View File

@ -176,6 +176,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_guohuai:['male','wei',3,['rejingce']],
junk_zhangrang:['male','qun',3,['junktaoluan']],
old_bulianshi:['female','wu',3,['anxu','zhuiyi']],
junk_sunquan:['male','shen',4,['junkyuheng','junkdili'],['wei']],
},
characterFilter:{
key_jojiro:function(mode){
@ -210,7 +211,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_default:["diy_yuji","diy_caiwenji","diy_lukang","diy_zhenji"],
diy_noname:['noname'],
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","key_yuu","key_ryoichi","key_kotori","key_jojiro","key_shiroha","key_shizuku","key_hiroto","key_sakuya","key_youta","key_rumi","key_chihaya","key_yukito","key_asara","key_kotomi","key_mia","key_kano","db_key_liyingxia","key_erika","key_satomi"],
diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi'],
diy_trashbin:['old_jiakui','ol_guohuai','junk_zhangrang','old_bulianshi','junk_sunquan'],
},
},
characterIntro:{
@ -6368,20 +6369,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
kyoko_juwu:{
trigger:{global:['loseAfter','cardsDiscardAfter','loseAsyncAfter']},
trigger:{global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter']},
direct:true,
filter:function(event,player){
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
return player!=event.player&&player!=_status.currentPhase&&event.cards&&event.cards.filter(function(card){
return get.position(card,true)=='d'&&get.type(card,false)=='equip';
}).length>0;
if(player==_status.currentPhase) return false;
var cards=event.getd();
if(!cards.length) return false;
cards.removeArray(event.getd(player));
for(var card of cards){
if(get.position(card,true)=='d'&&get.type(card,null,false)=='equip') return true;
}
return false;
},
content:function(){
'step 0'
if(trigger.delay==false) game.delay();
'step 1'
var cards=trigger.cards.filter(function(card){
return get.position(card,true)=='d'&&get.type(card,false)=='equip';
var cards=trigger.getd();
cards.removeArray(trigger.getd(player));
cards=cards.filter(function(card){
if(get.position(card,true)=='d'&&get.type(card,null,false)=='equip') return true;
});
player.chooseButton([get.prompt('kyoko_juwu'),cards],[1,cards.length]).set('ai',function(){return 1});
'step 2'
@ -8946,14 +8953,14 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audioname2:{
wufan:'refenyin_wufan',
},
trigger:{global:['loseAfter','cardsDiscardAfter']},
trigger:{global:['loseAfter','cardsDiscardAfter','equipAfter']},
forced:true,
filter:function(event,player){
if(player!=_status.currentPhase) return false;
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
var cards=event.getd();
var list=[];
for(var i=0;i<event.cards.length;i++){
var card=event.cards[i];
for(var i=0;i<cards.length;i++){
var card=cards[i];
list.add(card.suit);
}
game.getGlobalHistory('cardMove',function(evt){
@ -8969,8 +8976,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
var list=[];
var list2=[];
for(var i=0;i<trigger.cards.length;i++){
var card=trigger.cards[i];
var cards=trigger.getd();
for(var i=0;i<cards.length;i++){
var card=cards[i];
var suit=card.suit;
list.add(suit);
list2.add(suit);
@ -16147,6 +16155,214 @@ game.import('character',function(lib,game,ui,get,ai,_status){
result:{target:-1},
},
},
//比原版更令人难以吐槽的神孙权
junkyuheng:{
audio:'yuheng',
trigger:{player:'phaseBegin'},
forced:true,
keepSkill:true,
filter:function(event,player){
return player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'junkyuheng');
},'he');
},
content:function(){
'step 0'
player.chooseToDiscard('he',true,[1,4],function(card,player){
if(!ui.selected.cards.length) return true;
var suit=get.suit(card,player);
for(var i of ui.selected.cards){
if(get.suit(i,player)==suit) return false;
}
return true;
}).set('complexCard',true).set('ai',function(card){
if(!player.hasValueTarget(card)) return 5;
return 5-get.value(card);
});
'step 1'
if(result.bool){
var skills=lib.skill.junkyuheng.derivation.randomGets(result.cards.length);
player.addAdditionalSkill('junkyuheng',skills);
game.log(player,'获得了以下技能:','#g'+get.translation(skills));
}
},
group:'junkyuheng_remove',
derivation:['bingyi','shenxing','xiashu','anxu','rezhiheng','xinanguo','lanjiang','xinfu_guanwei','oldimeng','xindiaodu'],
subSkill:{
remove:{
audio:'yuheng',
trigger:{player:'phaseEnd'},
forced:true,
filter:function(event,player){
return player.additionalSkills.junkyuheng&&player.additionalSkills.junkyuheng.length>0;
},
content:function(){
player.draw(player.additionalSkills.junkyuheng.length);
game.log(player,'失去了以下技能:','#g'+get.translation(player.additionalSkills.junkyuheng));
player.removeAdditionalSkill('junkyuheng');
},
},
},
},
junkdili:{
audio:'dili',
trigger:{player:'logSkill'},
forced:true,
juexingji:true,
skillAnimation:true,
animationColor:'wood',
filter:function(event,player){
if(event.skill!='junkyuheng') return false;
var skills=player.getSkills(null,false,false).filter(function(i){
var info=get.info(i);
return info&&!info.charlotte;
});
return skills.length>player.maxHp;
},
content:function(){
'step 0'
player.awakenSkill('junkdili');
player.loseMaxHp();
'step 1'
var skills=player.getSkills(null,false,false).filter(function(i){
if(i=='junkdili') return false;
var info=get.info(i);
return info&&!info.charlotte;
});
var list=[];
for(var skill of skills){
list.push([
skill,
'<div class="popup text" style="width:calc(100% - 10px);display:inline-block"><div class="skill">【'+get.translation(skill)+'】</div><div>'+lib.translate[skill+'_info']+'</div></div>',
])
}
var next=player.chooseButton([
'请选择失去任意个技能',
[list,'textbutton'],
]);
next.set('forced',true);
next.set('selectButton',[1,skills.length]);
next.set('ai',function(button){
var skill=button.link,skills=_status.event.skills.slice(0);
skills.removeArray(['xinanguo','lanjiang','rezhiheng','junkyuheng']);
switch(ui.selected.buttons.length){
case 0:
if(skills.contains(skill)) return 2;
if(skill=='junkyuheng') return 1;
return Math.random();
case 1:
if(skills.length<2) return 0;
if(skills.contains(skill)) return 2;
if(skill=='junkyuheng') return 1;
return 0
case 2:
if(skills.contains(skill)) return 2;
if(skill=='junkyuheng') return 1;
return 0;
default: return 0;
}
});
next.set('skills',skills)
'step 2'
if(result.bool){
var skills=result.links;
game.log(player,'失去了以下技能:','#g'+get.translation(skills));
player.removeSkill(skills.slice(0));
}
var list=lib.skill.junkdili.derivation;
for(var i=0;i<Math.min(skills.length,list.length);i++){
player.addSkillLog(list[i]);
}
},
derivation:['junkshengzhi','junkquandao','junkchigang'],
},
junkshengzhi:{
audio:'dili_shengzhi',
trigger:{player:['logSkill','useSkillAfter']},
forced:true,
filter:function(event,player){
if(event.type!='player') return false;
var skill=event.sourceSkill||event.skill;
if(get.is.locked(skill)) return false;
var info=get.info(skill);
return !info.charlotte;
},
content:function(){
player.addTempSkill('junkshengzhi_effect');
},
subSkill:{
effect:{
mod:{
cardUsable:()=>Infinity,
targetInRange:()=>true,
},
trigger:{player:'useCard1'},
forced:true,
charlotte:true,
popup:false,
firstDo:true,
content:function(){
if(trigger.addCount!==false){
trigger.addCount=false;
player.getStat().card[trigger.card.name]--;
}
player.removeSkill('junkshengzhi_effect');
},
mark:true,
intro:{content:'使用下一张牌无距离和次数限制'},
},
},
},
junkquandao:{
audio:'dili_quandao',
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
return event.card.name=='sha'||get.type(event.card,null,false)=='trick';
},
content:function(){
'step 0'
var filter1=function(card){
return get.name(card)=='sha';
},filter2=function(card){
return get.type(card)=='trick';
};
var num1=player.countCards('h',filter1),num2=player.countCards('h',filter2);
if(num1!=num2){
var delta=num1-num2;
player.chooseToDiscard('h',true,Math.abs(delta),delta>0?filter1:filter2,'驭衡:请弃置'+get.cnNumber(Math.abs(delta))+'张'+(delta>0?'【杀】':'普通锦囊牌'));
}
'step 1'
player.draw();
},
},
junkchigang:{
audio:'dili_chigang',
trigger:{player:'phaseJudgeBefore'},
forced:true,
zhuanhuanji:true,
mark:true,
marktext:'☯',
content:function(){
player.changeZhuanhuanji('junkchigang');
trigger.cancel();
var next=player[player.storage.junkchigang?'phaseDraw':'phaseUse']();
event.next.remove(next);
trigger.getParent().next.push(next);
},
ai:{
effect:{
target:function(card,player,target){
if(get.type(card)=='delay') return 'zerotarget';
},
},
},
intro:{
content:function(storage){
return '转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的'+(storage?'出牌阶段':'摸牌阶段')+'。'
},
},
},
},
dynamicTranslate:{
nsjiquan:function(player){
@ -16201,6 +16417,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(player.storage.nstaiping) return '一名角色的判定牌生效前,你可以打出一张牌替换之。';
return '一名角色的判定牌生效前,你可以打出一张黑色牌替换之。';
},
junkchigang:function(player){
if(player.storage.junkchigang) return '转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的:阴,摸牌阶段;<span class="bluetext">阳,出牌阶段。</span>';
return '转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的:<span class="bluetext">阴,摸牌阶段</span>;阳,出牌阶段。';
},
},
characterReplace:{
key_yuri:['key_yuri','sp_key_yuri'],
@ -17136,6 +17356,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_caimao:'蔡瑁',
nsdingzhou:'定州',
nsdingzhou_info:'出牌阶段限一次你可以选择一名区域内有牌的其他角色。你随机获得其区域内的一张牌然后摸一张牌。若你以此法获得了两张颜色不同的牌则你失去1点体力。',
junk_sunquan:'改版神孙权',
junk_sunquan_ab:'神孙权',
junkyuheng:'驭衡',
junkyuheng_info:'锁定技。①回合开始时,你须弃置任意张花色不同的牌,从<span style="font-family: yuanli">东吴命运线·改</span>中随机获得等量的技能。②回合结束时,你失去所有因〖驭衡①〗获得的技能,然后摸等量的牌。',
junkdili:'帝力',
junkdili_info:'觉醒技。当你发动〖驭衡①〗后若你拥有的技能数大于你的体力上限则你减1点体力上限选择失去任意个其他技能然后获得以下技能中的前等量个〖圣质〗/〖权道〗/〖持纲〗。',
junkshengzhi:'圣质',
junkshengzhi_info:'锁定技。当你发动非锁定技后,你令你本回合使用的下一张牌无距离和次数限制。',
junkquandao:'权道',
junkquandao_info:'锁定技。当你使用【杀】或普通锦囊牌时若你手牌中的【杀】或普通锦囊牌的数量之差X不为0则你弃置X张数量较多的一种牌然后你摸一张牌。',
junkchigang:'持纲',
junkchigang_info:'转换技,锁定技。判定阶段开始前,你取消此阶段。然后你获得一个额外的:阴,摸牌阶段;阳,出牌阶段。',
ol_guohuai_ab:'郭淮',
junk_zhangrang_ab:'张让',
old_jiakui_ab:'贾逵',
@ -17150,7 +17382,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_yijiang2:'设计比赛2021',
diy_yijiang3:'设计比赛2022',
diy_fakenews:'假新闻',
diy_trashbin:'垃圾桶',
diy_trashbin:'杀海拾遗',
old_jiakui:'贾逵重制',
ol_guohuai:'三血郭淮',
ns_chengpu:'铁索程普',

View File

@ -63,6 +63,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
shen_zhangliao:['shen_zhangliao','ol_zhangliao'],
shen_zhaoyun:['shen_zhaoyun','boss_zhaoyun'],
shen_guanyu:['shen_guanyu','tw_shen_guanyu'],
shen_sunquan:['shen_sunquan','junk_sunquan'],
},
characterFilter:{
shen_diaochan:function(mode){
@ -4949,66 +4950,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return target!=player&&target.countCards('h');
},
content:function(){
"step 0"
event.videoId=lib.status.videoId++;
'step 0'
var cards=target.getCards('h');
if(player.isOnline2()){
player.send(function(cards,id){
ui.create.dialog('攻心',cards).videoId=id;
},cards,event.videoId);
}
event.dialog=ui.create.dialog('攻心',cards);
event.dialog.videoId=event.videoId;
if(!event.isMine()){
event.dialog.style.display='none';
}
player.chooseButton().set('filterButton',function(button){
return get.suit(button.link)=='heart';
}).set('dialog',event.videoId);
"step 1"
player.chooseButton(2,[
'攻心',
cards,
[['弃置此牌','置于牌堆顶'],'tdnodes'],
]).set('filterButton',function(button){
var type=typeof button.link;
if(ui.selected.buttons.length&&type==typeof ui.selected.buttons[0].link) return false;
return type=='string'||get.suit(button.link)=='heart';
});
'step 1'
if(result.bool){
event.card=result.links[0];
var func=function(card,id){
var dialog=get.idDialog(id);
if(dialog){
for(var i=0;i<dialog.buttons.length;i++){
if(dialog.buttons[i].link==card){
dialog.buttons[i].classList.add('selectedx');
}
else{
dialog.buttons[i].classList.add('unselectable');
}
}
}
if(typeof result.links[0]!='string') result.links.reverse();
var card=result.links[1],choice=result.links[0];
if(choice=='弃置此牌') target.discard(card);
else{
player.showCards(card,get.translation(player)+'对'+get.translation(target)+'发动了【攻心】');
target.lose(card,ui.cardPile,'visible','insert');
}
if(player.isOnline2()){
player.send(func,event.card,event.videoId);
}
else if(event.isMine()){
func(event.card,event.videoId);
}
player.chooseControl('gongxin_discard','gongxin_top');
}
else{
if(player.isOnline2()){
player.send('closeDialog',event.videoId);
}
event.dialog.close();
event.finish();
}
"step 2"
if(player.isOnline2()){
player.send('closeDialog',event.videoId);
}
event.dialog.close();
var card=event.card;
if(result.control=='gongxin_top'){
player.showCards(card,'置于牌堆顶');
target.lose(card,ui.cardPile,'insert','visible');
game.log(player,'将',event.card,'置于牌堆顶');
}
else{
target.discard(card);
}
},
ai:{

View File

@ -18,7 +18,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji","re_xunyu","re_dianwei"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"],
mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"],
mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
mobile_yijiang3:["re_liru","xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou"],
mobile_yijiang5:['xin_sunxiu','xin_quancong'],
mobile_yijiang67:["re_jikang"],
@ -26,6 +26,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
character:{
re_liru:['male','qun',3,['rejuece','remieji','xinfencheng']],
re_dianwei:["male","wei",4,["reqiangxi"]],
xin_mamidi:['male','qun',3,['chengye','buxu']],
ruanhui:['female','wei',3,['mingcha','jingzhong']],
@ -643,7 +644,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
return false;
},
trigger:{global:['useCardAfter','loseAfter','cardsDiscardAfter','loseAsyncAfter']},
trigger:{global:['useCardAfter','loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter']},
forced:true,
filter:function(event,player){
if(player==event.player) return false;
@ -652,14 +653,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var cards=event.cards.filterInD();
if(!cards.length) return false;
}
else if(event.name.indexOf('lose')==0){
if(event.getlx===false||event.position!=ui.discardPile) return false;
var cards=(event.cards2||event.cards).filter(function(card){
if(card.original=='j'||get.position(card,true)!='d') return false;
else if(event.name!='cardsDiscard'){
var cards=event.getd(null,'cards2').filter(function(card){
if(get.position(card,true)!='d') return false;
var type=get.type(card,false);
return type=='delay'||type=='equip';
});
cards.removeArray(event.getl(player).cards);
cards.removeArray(event.getd(player,'cards2'));
if(!cards.length) return false;
}
else{
@ -687,13 +687,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(trigger.name=='useCard'){
cards=trigger.cards.filterInD();
}
else if(trigger.name.indexOf('lose')==0){
cards=(trigger.cards2|trigger.cards).filter(function(card){
if(get.position(card,true)!='d') return false;
else if(trigger.name!='cardsDiscard'){
cards=trigger.getd().filter(function(card){
if(card.original=='j'||get.position(card,true)!='d') return false;
var type=get.type(card,false);
return type=='delay'||type=='equip';
});
cards.removeArray(trigger.getl(player).cards);
cards.removeArray(trigger.getd(player));
}
else{
cards=trigger.cards.filter(function(card){
@ -3547,7 +3547,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return card==lib.skill.jibing_backup.card;
},
selectCard:-1,
position:'s',
position:'x',
viewAs:{name:name},
card:card,
}
@ -3633,7 +3633,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skillAnimation:true,
animationColor:'metal',
filter:function(event,player){
return player.getStorage('jibing').length>=game.countGroup();
return player.getExpansions('jibing').length>=game.countGroup();
},
content:function(){
player.awakenSkill('moucuan');
@ -5967,17 +5967,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
discard:{
trigger:{
global:['loseAfter','cardsDiscardAfter','loseAsyncAfter'],
global:['loseAfter','cardsDiscardAfter','loseAsyncAfter','equipAfter'],
},
forced:true,
locked:false,
filter:function(event,player){
return player.storage.yizhu&&player.storage.yizhu.length&&(event.name=='cardsDiscard'||(event.position==ui.discardPile&&event.getlx!==false))&&event.cards.filter(function(i){
return player.storage.yizhu&&player.storage.yizhu.length&&event.getd().filter(function(i){
return player.storage.yizhu.contains(i);
}).length>0;
},
content:function(){
var list=trigger.cards.filter(function(i){
var list=trigger.getd().filter(function(i){
return player.storage.yizhu.contains(i);
});
player.unmarkAuto('yizhu',list);
@ -13575,14 +13575,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
rebiaozhao2:{
trigger:{
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter"],
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter",'equipAfter'],
},
forced:true,
audio:"biaozhao",
filter:function(event,player){
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile||event.getParent(2).name=='rebiaozhao3')) return false;
var cards=player.getExpansions('rebiaozhao');
if(!cards.length) return false;
var cards=player.getExpansions('rebiaozhao'),cards2=event.getd();
if(!cards.length||!cards2.length) return false;
var num=get.number(cards[0]);
for(var i=0;i<event.cards.length;i++){
if(get.number(event.cards[i])==num) return true;

View File

@ -1296,25 +1296,23 @@ game.import('character',function(lib,game,ui,get,ai,_status){
delete player.storage.xinfu_yanyu2;
},
trigger:{
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter"],
global:["loseAfter","cardsDiscardAfter","loseAsyncAfter","equipAfter"],
},
direct:true,
filter:function (event,player){
filter:function(event,player){
if(player.storage.xinfu_yanyu2>=3) return false;
if(event.name.indexOf('lose')==0&&(event.getlx===false||event.position!=ui.discardPile)) return false;
var type=player.storage.xinfu_yanyu;
var cards=event.cards;
var type=player.storage.xinfu_yanyu,cards=event.getd();
for(var i=0;i<cards.length;i++){
if(get.type(cards[i],'trick')==type&&get.position(cards[i],true)=='d') return true;
}
return false;
},
content:function (){
content:function(){
'step 0'
event.logged=false;
event.cards=[];
var type=player.storage.xinfu_yanyu;
var cards=trigger.cards;
var cards=trigger.getd();
for(var i=0;i<cards.length;i++){
if(get.type(cards[i],'trick')==type&&get.position(cards[i],true)=='d') event.cards.push(cards[i]);
}

View File

@ -532,6 +532,8 @@ window.noname_character_rank={
'fengfang',
'prp_zhugeliang',
'dukui',
'quanhuijie',
'yinfuren',
],
bp:[
'chess_diaochan',
@ -819,6 +821,11 @@ window.noname_character_rank={
'zhangfen',
'ol_dianwei',
'wangyan',
'chengui',
'dc_huangquan',
'dc_huban',
'dingshangwan',
're_zhuhuan',
],
b:[
'diy_feishi',
@ -1060,6 +1067,8 @@ window.noname_character_rank={
're_sp_taishici',
'dc_lvkuanglvxiang',
'dengzhong',
'dc_liru',
'kebineng',
],
bm:[
'diy_xizhenxihong',
@ -1295,6 +1304,7 @@ window.noname_character_rank={
'wangxiang',
'duji',
'bianxi',
'junk_sunquan',
],
rarity:{
legend:[
@ -1419,6 +1429,7 @@ window.noname_character_rank={
'shen_machao',
'tw_shen_guanyu',
'huojun',
'quanhuijie',
'key_tomoya',
'key_masato',
'key_shiorimiyuki',
@ -2042,6 +2053,10 @@ window.noname_character_rank={
'guanhai',
'dukui',
'ol_dianwei',
'chengui',
'dingshangwan',
're_zhuhuan',
'yinfuren',
],
junk:[
'sunshao',
@ -2065,6 +2080,7 @@ window.noname_character_rank={
'duji',
'dc_liuba',
'bianxi',
'junk_sunquan',
],
}
};

View File

@ -11,8 +11,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_shan:['ol_jiangwei','ol_caiwenji','ol_liushan','re_zhangzhang','re_zuoci','re_sunce','ol_dengai','re_zhanghe'],
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','dc_liru','re_manchong','re_fuhuanghou','re_guanping','re_liufeng'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou','re_zhuhuan'],
refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi','re_liuchen'],
refresh_yijiang6:['re_guohuanghou'],
refresh_xinghuo:['re_duji','dc_gongsunzan','re_sp_taishici'],
@ -20,6 +20,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
connect:true,
character:{
dc_liru:['male','qun',3,['xinjuece','dcmieji','dcfencheng']],
re_zhuhuan:['male','wu',4,['refenli','repingkou']],
ol_dianwei:['male','wei',4,['olqiangxi','olningwu']],
re_sp_taishici:['male','qun',4,['rejixu']],
re_liufeng:['male','shu',4,['rexiansi']],
@ -55,7 +57,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ol_dengai:['male','wei',4,['oltuntian','olzaoxian']],
re_gongsunzan:['male','qun',4,['reqiaomeng','reyicong']],
re_manchong:['male','wei',3,['rejunxing','yuce']],
re_liru:['male','qun',3,['rejuece','remieji','xinfencheng']],
xin_yufan:['male','wu',3,['xinzhiyan','xinzongxuan']],
dc_bulianshi:['female','wu',3,['dcanxu','dczhuiyi']],
re_hanhaoshihuan:['male','wei',4,['reshenduan','reyonglve']],
@ -149,6 +150,256 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//李儒
dcmieji:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
return player.hasCard(lib.skill.dcmieji.filterCard,'eh');
},
position:'he',
filterCard:function(card){
if(get.subtype(card)=='equip1') return true;
return get.color(card)=='black'&&get.type(card,'trick')=='trick';
},
filterTarget:function(card,player,target){
return target!=player&&target.countCards('h')>0;
},
discard:false,
delay:false,
check:function(card){
return 8-get.value(card);
},
loseTo:'cardPile',
insert:true,
visible:true,
content:function(){
'step 0'
player.showCards(cards);
'step 1'
target.chooseToDiscard('he',true).set('prompt','请弃置一张锦囊牌,或依次弃置两张非锦囊牌。');
'step 2'
if((!result.cards||get.type(result.cards[0],'trick',result.cards[0].original=='h'?target:false)!='trick')&&target.countCards('he',function(card){
return get.type(card,'trick')!='trick';
})){
target.chooseToDiscard('he',true,function(card){
return get.type(card,'trick')!='trick';
}).set('prompt','请弃置第二张非锦囊牌');
}
},
ai:{
order:9,
result:{
target:-1
}
}
},
dcfencheng:{
skillAnimation:'epic',
animationColor:'fire',
audio:2,
enable:'phaseUse',
filterTarget:function(card,player,target){
return player!=target;
},
limited:true,
line:'fire',
content:function(){
"step 0"
player.awakenSkill('dcfencheng');
event.num=1;
event.targets=game.filterPlayer((current)=>current!=player);
event.targets.sortBySeat(target);
"step 1"
if(event.targets.length){
var target=event.targets.shift();
if(!target.isIn()){
event.redo();
return;
}
event.target=target;
player.line(target,'fire');
var res=get.damageEffect(target,player,target,'fire');
target.chooseToDiscard('he','弃置至少'+get.cnNumber(event.num)+'张牌或受到2点火焰伤害',[num,Infinity]).set('ai',function(card){
if(ui.selected.cards.length>=_status.event.getParent().num) return -1;
if(_status.event.player.hasSkillTag('nofire')) return -1;
if(_status.event.res>=0) return 6-get.value(card);
if(get.type(card)!='basic'){
return 10-get.value(card);
}
return 8-get.value(card);
}).set('res',res);
}
else{
event.finish();
}
"step 2"
if(!result.bool){
event.target.damage(2,'fire');
event.num=1;
}
else{
event.num=result.cards.length+1;
event.goto(1);
}
"step 3"
game.delayx();
event.goto(1);
},
ai:{
order:1,
result:{
player:function(player,target){
if(player.hasUnknown(2)) return 0;
var num=0,eff=0,players=game.filterPlayer(function(current){
return current!=player;
}).sortBySeat(target);
for(var target of players){
if(get.damageEffect(target,player,target,'fire')>=0){num=0;continue};
var shao=false;
num++;
if(target.countCards('he',function(card){
if(get.type(card)!='basic'){
return get.value(card)<10;
}
return get.value(card)<8;
})<num) shao=true;
if(shao){
eff-=4*(get.realAttitude||get.attitude)(player,target);
num=0;
}
else eff-=num*(get.realAttitude||get.attitude)(player,target)/4;
}
if(eff<4) return 0;
return eff;
}
}
},
},
//朱桓
refenli:{
audio:2,
group:['refenli_draw','refenli_use','refenli_discard'],
subfrequent:['discard'],
subSkill:{
draw:{
audio:'refenli',
trigger:{player:'phaseJudgeBefore'},
prompt:'是否发动【奋励】跳过判定和摸牌阶段?',
filter:function(event,player){
return player.isMaxHandcard();
},
check:function(event,player){
if(player.hasJudge('lebu')||player.hasJudge('bingliang')) return true;
if(player.getHistory('skipped').length>0) return false;
return game.hasPlayer(function(current){
return get.attitude(player,current)<0&&current.hp==1&&get.damageEffect(current,player,player)>0;
});
},
content:function(){
trigger.cancel();
player.skip('phaseDraw');
}
},
use:{
audio:'refenli',
trigger:{player:'phaseUseBefore'},
prompt:'是否发动【奋励】跳过出牌阶段?',
filter:function(event,player){
return player.isMaxHp();
},
check:function(event,player){
if(!player.needsToDiscard()||(player.countCards('e')&&player.isMaxEquip())) return true;
if(player.getHistory('skipped').length>0) return false;
return game.hasPlayer(function(current){
return get.attitude(player,current)<0&&current.hp==1&&get.damageEffect(current,player,player)>0;
});
},
content:function(){
trigger.cancel();
}
},
discard:{
audio:'refenli',
trigger:{player:'phaseDiscardBefore'},
prompt:'是否发动【奋励】跳过弃牌阶段?',
frequent:true,
filter:function(event,player){
return player.isMaxEquip()&&player.countCards('e');
},
content:function(){
trigger.cancel();
}
}
},
ai:{
combo:'repingkou'
}
},
repingkou:{
audio:2,
trigger:{player:'phaseEnd'},
direct:true,
filter:function(event,player){
return player.getHistory('skipped').length>0;
},
content:function(){
'step 0'
player.chooseTarget([1,player.getHistory('skipped').length],get.prompt2('repingkou'),'对至多'+get.cnNumber(num)+'名其他角色各造成1点伤害。若你选择的角色数小于最大角色数则你可以弃置其中一名目标角色装备区内的一张牌',function(card,player,target){
return target!=player;
}).set('ai',function(target){
var player=_status.event.player;
return get.damageEffect(target,player,player);
});
'step 1'
if(result.bool){
player.logSkill('repingkou',result.targets);
event.targets=result.targets.slice(0).sortBySeat();
event.num=0;
}
else{
event.finish();
}
'step 2'
var target=targets[event.num];
if(target.isIn()) target.damage();
event.num++;
if(event.num<targets.length) event.redo();
else if(event.num==player.getHistory('skipped').length) event.finish();
'step 3'
var targets2=targets.filter(function(target){
return target.countDiscardableCards(player,'e')>0;
});
if(targets2.length>0){
player.chooseTarget('是否弃置一名目标角色的一张装备牌?',function(card,player,target){
return _status.event.targets.contains(target);
}).set('targets',targets2).set('ai',function(target){
var att=get.attitude(player,target),eff=0;
target.getCards('e',function(card){
var val=get.value(card,target);
eff=Math.max(eff,-val*att);
});
return eff;
});
}
else event.finish();
'step 4'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
player.discardPlayerCard(target,'e',true);
}
},
ai:{
combo:'fenli',
effect:{
target:function(card){
if(card.name=='lebu'||card.name=='bingliang') return 0.5;
}
}
}
},
//典韦
olqiangxi:{
audio:'qiangxi',
@ -5243,7 +5494,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(event.type!='discard') return false;
var evt=event.getl(player);
return evt&&evt.cards2&&evt.cards2.filter(function(i){
return get.name(i,evt.hs.contains(i)?player:false)==true;
return get.name(i,evt.hs.contains(i)?player:false)=='sha';
}).length>0;
};
if(event.name=='gain'&&event.player==player) return false;
@ -12471,7 +12722,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
decadechunlao:'醇醪',
decadechunlao2:'醇醪',
decadechunlao_info:'你可以对其他角色使用【酒使用方法②】。当你需要使用【酒】时若你的武将牌未横置则你可以将武将牌横置然后视为使用【酒】。当你受到或造成伤害后若伤害值大于1且你的武将牌横置则你可以重置武将牌。',
re_liru:'李儒',
re_liru:'手杀李儒',
rejuece:'绝策',
rejuece_info:'结束阶段你可以对一名本回合内失去过牌的角色造成1点伤害。',
remieji:'灭计',
@ -12701,6 +12952,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olqiangxi_info:'出牌阶段限两次。你可以弃置一张武器牌或受到1点无来源伤害然后对一名本回合内未成为过〖强袭〗目标的其他角色造成1点伤害。',
olningwu:'狞恶',
olningwu_info:'锁定技。当一名角色A于一回合内第二次受到伤害后若A或伤害来源为你则你摸一张牌然后弃置其装备区或判定区内的一张牌。',
re_zhuhuan:'界朱桓',
refenli:'奋励',
refenli_info:'若你的手牌数为全场最多,你可以跳过摸牌阶段和摸牌阶段;若你的体力值为全场最多,你可以跳过出牌阶段;若你的装备区里有牌且数量为全场最多,你可以跳过弃牌阶段。',
//破界石不值钱了 就逮着免费突破硬削是吧
repingkou:'平寇',
repingkou_info:'回合结束时你可以对至多X名其他角色各造成1点伤害X为你本回合跳过的阶段数。若你选择的角色数小于X则你可以弃置其中一名角色装备区内的一张牌',
dc_liru:'界李儒',
dcmieji:'灭计',
dcmieji_info:'出牌阶段限一次,你可以展示一张武器牌或黑色锦囊牌。你将此牌置于牌堆顶,然后令一名有手牌的其他角色选择一项:⒈弃置一张锦囊牌;⒉依次弃置两张非锦囊牌。',
dcfencheng:'焚城',
dcfencheng_info:'限定技。出牌阶段你可以指定一名其他角色令从其开始的其他角色依次选择一项⒈弃置至少X张牌X为上一名角色弃置的牌数+1。⒉你对其造成2点伤害。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

View File

@ -657,6 +657,85 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//吕范
xindiaodu:{
audio:"diaodu",
group:'xindiaodu_use',
frequent:true,
preHidden:true,
isFriendOf:function(player,target){
if(get.mode()=='guozhan') return player.isFriendOf(target);
return player.group==target.group;
},
subSkill:{
temp:{},
use:{
trigger:{
global:"useCard",
},
filter:function(event,player){
return get.type(event.card)=='equip'&&event.player.isAlive()&&
lib.skill.xindiaodu.isFriendOf(player,event.player)&&(player==event.player||player.hasSkill('xindiaodu'))&&!event.player.hasSkill('xindiaodu_temp');
},
direct:true,
content:function(){
'step 0'
var next=trigger.player.chooseBool('是否发动【调度】摸一张牌?');
if(player.hasSkill('xindiaodu')) next.set('frequentSkill','xindiaodu');
if(player==trigger.player) next.setHiddenSkill('xindiaodu');
'step 1'
if(result.bool){
player.logSkill('xindiaodu',trigger.player);
trigger.player.draw('nodelay');
trigger.player.addTempSkill('xindiaodu_temp');
}
},
},
},
trigger:{
player:"phaseUseBegin",
},
filter:function(event,player){
return game.hasPlayer(function(current){
return lib.skill.xindiaodu.isFriendOf(current,player)&&current.countGainableCards(player,'e')>0;
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){
return lib.skill.xindiaodu.isFriendOf(current,player)&&current.countGainableCards(player,'e')>0;
}).setHiddenSkill(event.name).ai=function(target){
var num=1;
if(target.hasSkill('gzxiaoji')) num+=2.5;
if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5;
if(target.hasSkill('xuanlve')) num+=2;
return num;
};
'step 1'
if(result.bool){
event.target1=result.targets[0];
player.logSkill('xindiaodu',event.target1);
player.line(event.target1,'xindiaodu');
player.gainPlayerCard(event.target1,'e',true);
}
else event.finish();
'step 2'
if(result.bool&&player.getCards('h').contains(result.cards[0])){
event.card=result.cards[0];
player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){
return current!=player&&current!=_status.event.target1&&lib.skill.xindiaodu.isFriendOf(current,player)
}).set('target1',event.target1);
}
else event.finish();
'step 3'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
target.gain(card,player,'give');
}
},
},
//夏侯玄
olhuanfu:{
audio:2,
@ -775,7 +854,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i=0;i<result.length;i++){
var current=event.list[i],card=result[i].cards[0];
lose_list.push([current,result[i].cards]);
card.classList.remove('glow');
cards.push(card);
}
var type=get.type2(cards[0]);
@ -4729,7 +4807,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish();
'step 3'
event.count--;
if(player.canUse('sha',target,false)) player.useCard({name:'sha',isCard:true},target,false);
if(target.isIn()&&player.canUse('sha',target,false)) player.useCard({name:'sha',isCard:true},target,false);
if(event.count>0) event.redo();
else if(event.num<targets.length) event.goto(1);
},
@ -20183,6 +20261,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olqingyi_info:'①出牌阶段限一次,你可以选择至多两名有牌的其他角色。你和这些角色同时弃置一张牌,然后若这些牌类型均相同,则你重复此流程。②结束阶段开始时,若你本回合内发动〖清议①〗弃置的牌包含两种颜色,则你获得每种颜色的牌各一张。',
olzeyue:'迮阅',
olzeyue_info:'限定技。准备阶段你可以选择一名于你的上个回合结束后对你造成过伤害的角色A及其武将牌上的一个非锁定技B令A的B失效。然后每轮游戏开始时A依次视为对你使用X张【杀】X为B失效状态下经过的完整轮数。当你因这些【杀】受到伤害后你令A恢复技能B。',
xindiaodu:"调度",
xindiaodu_info:"①每回合限一次,与你势力相同的角色使用装备牌时,其可以摸一张牌。②出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。",
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

File diff suppressed because it is too large Load Diff

View File

@ -500,7 +500,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return targets1.isEmpty(get.subtype(button.link));
}
}).set('ai',function(button){
var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets[0];
var player=_status.event.player,target=_status.event.targets1,source=_status.event.targets0;
var att=get.attitude(player,source);
if(get.position(card)=='e'){
var val=get.value(card);
@ -749,7 +749,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
twcongji:{
audio:2,
trigger:{player:'loseAfter'},
trigger:{
player:'loseAfter',
global:'loseAsyncAfter',
},
direct:true,
filter:function(event,player){
if(player==_status.currentPhase||event.type!='discard'||event.getlx===false||!game.hasPlayer((current)=>current!=player)) return false;
@ -761,7 +764,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
var cards=[],cards2=trigger.getl(player);
var cards=[],cards2=trigger.getl(player).cards2;
for(var i of cards2){
if(get.color(i,player)=='red'&&get.position(i,true)=='d') cards.push(i);
}

View File

@ -13,10 +13,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yijiang_2015:['caoxiu','caorui','zhongyao','xiahoushi','liuchen','zhangyi','zhuzhi','quancong','sunxiu','gongsunyuan','guotufengji'],
yijiang_2016:['guohuanghou','sunziliufang','huanghao','liyan','sundeng','cenhun','zhangrang','liuyu'],
yijiang_2017:['xinxianying','jikang','wuxian','qinmi','xuezong','xushi','caiyong','caojie'],
yijiang_2022:['lukai'],
yijiang_2022:['lukai','kebineng'],
},
},
character:{
kebineng:['male','qun',4,['kousheng']],
lukai:['male','wu',4,['lkbushi','lkzhongzhuang']],
xin_fazheng:['male','shu',3,['xinenyuan','xinxuanhuo'],['die_audio']],
old_guanzhang:['male','shu',4,['old_fuhun']],
@ -101,6 +102,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yujin:["male","wei",4,["yizhong"],[]],
},
characterIntro:{
kebineng:'轲比能235年为中国三国时期的鲜卑首领之一。轲比能出身鲜卑支部因他作战勇敢执法公平不贪财物所以被鲜卑民众推举为大人。轲比能因其部落近塞所以他抓住有利条件积极学习汉族先进技术和文化促进了鲜卑族的进步和北方的民族融合。轲比能统率下的部众战守有法战斗力相当强大。自曹操北征后向曹氏进贡表示效忠。魏文帝时轲比能受封附义王。轲比能在进行部落统一战争时受魏国干涉受沉重打击于是对魏怀贰献书魏帝表忠以麻痹魏庭使之放松警惕。此后轲比能的部众变得强盛控弦十余万骑为害魏国边境。每次钞略得财物轲比能都公开透明地均平分配所以得部众死力各部大人都敬畏之。实力强大后他继续部落统一战争于是威行诸部落建立起强大的鲜卑族政权。深感威胁的魏国幽州刺史王雄派刺客韩龙将其刺杀其政权立刻崩溃鲜卑民族再次陷入混战。',
lukai:'陆凯198269年字敬风吴郡吴县今江苏省苏州市人。三国时期吴国重臣丞相陆逊的族侄大司马陆抗的族兄。黄武年间举孝廉出身曾任永兴县长、诸暨县长颇有治绩。拜建武都尉、儋耳太守与聂友率军讨伐朱崖和儋耳迁建武校尉。五凤二年255年讨斩零陵山贼陈毖拜偏将军、巴丘督册封都乡侯。迁武昌右部督随军进入寿春。后拜荡魏将军加号绥远将军。吴景帝孙休继位拜征北将军、假节、领豫州牧。孙皓即位迁任镇西大将军都督巴丘又领荆州牧进封嘉兴侯。宝鼎元年266年迁左丞相。以正直及屡次劝谏孙皓而闻名。建衡元年269年去世时年七十二。',
caozhi:'字子建,沛国谯人,三国曹魏著名文学家,建安文学代表人物。魏武帝曹操之子,魏文帝曹丕之弟,生前曾为陈王,去世后谥号“思”,因此又称陈思王。南朝宋文学家谢灵运更有“天下才有一石,曹子建独占八斗”的评价。王士祯尝论汉魏以来二千年间诗家堪称“仙才”者,曹植、李白、苏轼三人耳。',
gaoshun:'中国东汉末年将领,吕布帐下中郎将。史载高顺为人清白有威严,不好饮酒,所统率的部队精锐非常,号称“陷阵营”。屡进忠言于吕布,吕布虽知其忠而不能用。曹操击破吕布后,高顺被曹操所杀。',
@ -197,6 +199,113 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhonghui:['jiangwei'],
},
skill:{
//轲比能
kousheng:{
audio:2,
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0;
},
content:function(){
'step 0'
player.chooseCard('h',[1,player.countCards('h')],get.prompt('kousheng'),'你可以选择任意张手牌,这些手牌于本回合内视为无次数限制的【杀】。但当有角色受到这些【杀】的伤害后,其可以用所有手牌交换剩余的牌。').set('standard',player.getUseValue({name:'sha'},null,true)).set('ai',function(card){
var player=_status.event.player,standard=_status.event.standard;
if(standard<=0) return 0;
var eff=player.getUseValue(card,null,true);
if(eff<=standard) return standard-eff+0.1;
return 0;
});
'step 1'
if(result.bool){
player.logSkill('kousheng');
player.addGaintag(result.cards,'kousheng');
player.addTempSkill('kousheng_effect');
game.delayx();
}
},
subSkill:{
effect:{
audio:'kousheng',
trigger:{player:'useCard1'},
forced:true,
charlotte:true,
firstDo:true,
filter:function(event,player){
if(event.card.name!='sha') return false;
return player.hasHistory('lose',function(evt){
if(evt.getParent()!=event) return false;
for(var i in evt.gaintag_map){
if(evt.gaintag_map[i].contains('kousheng')) return true;
}
return false;
});
},
content:function(){
if(!trigger.card.storage) trigger.card.storage={};
trigger.card.storage.kousheng=true;
if(trigger.addCount!==false){
trigger.addCount=false;
player.getStat('card').sha--;
}
},
onremove:function(player){
player.removeGaintag('kousheng');
},
mod:{
cardUsable:function(card,player,target){
if(card.name!='sha'||!card.cards) return;
for(var i of card.cards){
if(i.hasGaintag('kousheng')) return Infinity;
}
},
cardname:function(card){
if(card.hasGaintag('kousheng')) return 'sha';
},
cardnature:function(card){
if(card.hasGaintag('kousheng')) return false;
},
},
group:'kousheng_damage',
},
damage:{
audio:'kousheng',
trigger:{source:'damageSource'},
forced:true,
filter:function(event,player){
if(!event.card.storage||!event.card.storage.kousheng||event.getParent().type!='card') return false;
var target=event.player;
return target.isIn()&&player.hasCard(function(card){
return card.hasGaintag('kousheng');
},'h');
},
content:function(){
'step 0'
var target=trigger.player;
event.target=target;
var cards=player.getCards('h',function(card){
return card.hasGaintag('kousheng');
});
event.cards=cards;
var str=get.translation(player);
player.showCards(cards,str+'的【寇胜】牌');
if(target.countCards('h')>0) target.chooseBool('是否交换“寇胜”牌?','用你的所有手牌交换'+str+'的下列“寇胜”牌:'+get.translation(cards)).set('ai',function(){
var player=_status.event.player,target=_status.event.getParent().player;
if(player.hasShan()||player.countCards('hs',{name:['tao','jiu']})>0||get.attitude(player,target)>=0) return false;
var hs1=player.getCards('h'),hs2=_status.event.getParent().cards;
if(hs2.length>=player.hp) return true;
if(get.value(hs1,player)>=get.value(hs2,target)) return false;
return true;
});
else event.finish();
'step 1'
if(result.bool){
player.swapHandcards(target,cards,target.getCards('h'));
}
},
},
},
},
//陆凯
lkbushi:{
audio:2,
@ -946,42 +1055,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
"step 0"
event.videoId=lib.status.videoId++;
var func=function(card,id,bool){
var list=[
'为XXX多指定一个目标',
'令XXX无视防具',
'令XXX不可被抵消',
'当XXX造成伤害时摸一张牌',
];
var choiceList=ui.create.dialog('【奔袭】:请选择一至两项','forcebutton');
choiceList.videoId=id;
for(var i=0;i<list.length;i++){
list[i]=list[i].replace(/XXX/g,card);
var str='<div class="popup text" style="width:calc(100% - 10px);display:inline-block">';
if(i==0&&!bool) str+='<div style="opacity:0.5">';
str+=list[i];
if(i==0&&!bool) str+='</div>';
str+='</div>';
var next=choiceList.add(str);
next.firstChild.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
next.firstChild.link=i;
for(var j in lib.element.button){
next[j]=lib.element.button[j];
}
choiceList.buttons.add(next.firstChild);
}
return choiceList;
};
if(player.isOnline2()){
player.send(func,get.translation(trigger.card),event.videoId,lib.skill.xinbenxi.filterx(trigger,player));
var list=[
'为XXX多选择一个目标',
' 令XXX无视防具牌 ',
' 令XXX不可被抵消 ',
'当XXX造成伤害时摸牌',
],card=get.translation(trigger.card);
for(var i=0;i<list.length;i++){
list[i]=[i,list[i].replace(/XXX/g,card)];
}
event.dialog=func(get.translation(trigger.card),event.videoId,lib.skill.xinbenxi.filterx(trigger,player));
if(player!=game.me||_status.auto){
event.dialog.style.display='none';
}
var next=player.chooseButton();
next.set('dialog',event.videoId);
var next=player.chooseButton([
'奔袭:请选择一至两项',
[list.slice(0,2),'tdnodes'],
[list.slice(2,4),'tdnodes'],
]);
next.set('forced',true);
next.set('selectButton',[1,2]);
next.set('filterButton',function(button){
@ -1028,10 +1115,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
});
"step 1"
if(player.isOnline2()){
player.send('closeDialog',event.videoId);
}
event.dialog.close();
var map=[
function(trigger,player,event){
player.chooseTarget('请选择'+get.translation(trigger.card)+'的额外目标',true,function(card,player,target){
@ -5221,6 +5304,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
xinjuece:{
audio:'juece',
audioname:['dc_liru'],
trigger:{player:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
@ -5230,7 +5314,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('xinjuece'),'对一名没有手牌的其他角色造成1点伤害',function(card,player,target){
player.chooseTarget(get.prompt('xinjuece'),'对一名没有手牌的角色造成1点伤害',function(card,player,target){
return target.countCards('h')==0;
}).set('ai',function(target){
var player=_status.event.player;
@ -10321,7 +10405,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
check:function(trigger,player){
if(trigger.getParent(3).name!='phaseDiscard'||!game.hasPlayer(function(current){
return current.isDamaged()&&get.recoverEffect(current,player,player)>0;
}))
})) return false;
var evt=trigger.getl(player);
for(var i=0;i<evt.cards2.length;i++){
if(get.position(evt.cards2[i],true)=='d'&&get.type(evt.cards2[i],false)=='equip'){
@ -12382,7 +12466,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
panzhangmazhong:['xin_panzhangmazhong','re_panzhangmazhong','panzhangmazhong'],
yufan:['xin_yufan','re_yufan','yufan'],
zhuran:['re_zhuran','xin_zhuran','zhuran','old_zhuran'],
liru:['re_liru','xin_liru','liru'],
liru:['re_liru','dc_liru','xin_liru','liru'],
fuhuanghou:['re_fuhuanghou','xin_fuhuanghou','fuhuanghou','old_fuhuanghou'],
chenqun:['chenqun','re_chenqun','old_chenqun'],
hanhaoshihuan:['re_hanhaoshihuan','hanhaoshihuan'],
@ -13002,6 +13086,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lkbushi_info:'①你使用♠牌无次数限制。②当你使用或打出♥牌后,你摸一张牌。③当你成为♣牌的目标后,你可以弃置一张牌,令此牌对你无效。④结束阶段开始时,你从牌堆或弃牌堆获得一张♦牌。⑤准备阶段开始时,你可调整此技能中四种花色的对应顺序。',
lkzhongzhuang:'忠壮',
lkzhongzhuang_info:'锁定技。当你因执行【杀】的效果而造成伤害时若你的攻击范围大于3则此伤害+1小于3则此伤害改为1。',
kebineng:'轲比能',
kousheng:'寇胜',
kousheng_info:'①出牌阶段开始时,你可以选择任意张手牌,这些牌称为“寇胜”直到回合结束。②你的“寇胜”均视为【杀】且无次数限制。③当你因执行对应实体牌包含“寇胜”的【杀】的效果而造成伤害后,你展示所有“寇胜”牌,然后目标角色可以用所有手牌交换这些牌。',
yijiang_2011:'一将成名2011',
yijiang_2012:'一将成名2012',

View File

@ -160,7 +160,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
player.chooseTarget(get.prompt('zhefu'),'令一名有手牌的其他角色弃置一张【'+get.translation(trigger.card.name)+'】否则受到你造成的1点伤害。',function(card,player,target){
return target!=player&&target.countCards('he')>0;
return target!=player&&target.countCards('h')>0;
}).set('ai',function(target){
var player=_status.event.player;
return get.damageEffect(target,player,player)/Math.sqrt(target.countCards('h'));
@ -369,13 +369,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player!=event.player&&event.player.countCards('he')>0&&player.countCards('he')>=player.countMark('xiongshu_count');
return player!=event.player&&event.player.countCards('h')>0&&player.countCards('he')>=player.countMark('xiongshu_count');
},
content:function(){
'step 0'
event.target=trigger.player;
var num=player.countMark('xiongshu_count');
if(num>0) player.chooseToDiscard('he',num,get.prompt('xiongshu',trigger.player),'弃置'+get.cnNumber(num)+'张牌并展示其一张牌').set('goon',get.attitude(player,event.target)<0).set('ai',function(card){
if(num>0) player.chooseToDiscard('he',num,get.prompt('xiongshu',trigger.player),'弃置'+get.cnNumber(num)+'张牌并展示其一张牌').set('goon',get.attitude(player,event.target)<0).set('ai',function(card){
if(!_status.event.goon) return 0;
return 6-_status.event.player.countMark('xiongshu_count')-get.value(card);
}).logSkill=['xiongshu',trigger.player];
@ -388,8 +388,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.addTempSkill('xiongshu_count','roundStart');
player.addMark('xiongshu_count',1,false);
}
if(result.bool&&target.countCards('he')>0){
player.choosePlayerCard(target,true,'he');
if(result.bool&&target.countCards('h')>0){
player.choosePlayerCard(target,true,'h');
}
else event.finish();
'step 2'
@ -3685,10 +3685,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dezhang:'德彰',
dezhang_info:'觉醒技。准备阶段若你没有“绥”则你减1点体力上限并获得〖卫戍〗。',
weishu:'卫戍',
weishu_info:'锁定技。①当你于摸牌阶段外不因〖卫戊①〗而摸牌后,你令一名角色摸一张牌。②当你于弃牌阶段外不因〖卫戊②〗而弃置牌后,你弃置一名其他角色的一张牌。',
weishu_info:'锁定技。①当你于摸牌阶段外不因〖卫戍①〗而摸牌后,你令一名角色摸一张牌。②当你于弃牌阶段外不因〖卫戍②〗而弃置牌后,你弃置一名其他角色的一张牌。',
jin_jiachong:'贾充',
xiongshu:'凶竖',
xiongshu_info:'其他角色的出牌阶段开始时你可弃置X张牌X为你本轮内此前已发动过此技能的次数为0则不弃并展示其一张然后你预测“其本阶段内是否会使用与展示牌牌名相同的牌”。此阶段结束时若你的预测正确则你对其造成1点伤害否则你获得展示牌。',
xiongshu_info:'其他角色的出牌阶段开始时你可弃置X张牌X为你本轮内此前已发动过此技能的次数为0则不弃并展示其一张然后你预测“其本阶段内是否会使用与展示牌牌名相同的牌”。此阶段结束时若你的预测正确则你对其造成1点伤害否则你获得展示牌。',
jianhui:'奸回',
jianhui_info:'锁定技。当你造成伤害后若受伤角色为A则你摸一张牌当你受到伤害后若伤害来源为A则A弃置一张牌。A为除本次伤害外最近一次对你造成过伤害的角色',
xinxuanbei:'选备',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.117',
'v1.9.117.2',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -194,6 +194,15 @@ window.noname_asset_list=[
'audio/die/wangyan.mp3',
'audio/die/xiahouxuan.mp3',
'audio/die/zhangfen.mp3',
'audio/die/chengui.mp3',
'audio/die/dc_huangquan.mp3',
'audio/die/dc_huban.mp3',
'audio/die/dc_liru.mp3',
'audio/die/dingshangwan.mp3',
'audio/die/kebineng.mp3',
'audio/die/quanhuijie.mp3',
'audio/die/re_zhuhuan.mp3',
'audio/die/yinfuren.mp3',
'audio/die/baosanniang.mp3',
'audio/die/beimihu.mp3',
@ -1093,6 +1102,42 @@ window.noname_asset_list=[
'audio/skill/sanku2.mp3',
'audio/skill/yangkuang1.mp3',
'audio/skill/yangkuang2.mp3',
'audio/skill/dcchongyi1.mp3',
'audio/skill/dcchongyi2.mp3',
'audio/skill/dccongshi1.mp3',
'audio/skill/dccongshi2.mp3',
'audio/skill/dcfencheng1.mp3',
'audio/skill/dcfencheng2.mp3',
'audio/skill/dcfengyan1.mp3',
'audio/skill/dcfengyan2.mp3',
'audio/skill/dcfudao1.mp3',
'audio/skill/dcfudao2.mp3',
'audio/skill/dchuishu1.mp3',
'audio/skill/dchuishu2.mp3',
'audio/skill/dcligong1.mp3',
'audio/skill/dcligong2.mp3',
'audio/skill/dcmieji1.mp3',
'audio/skill/dcmieji2.mp3',
'audio/skill/dcquanjian1.mp3',
'audio/skill/dcquanjian2.mp3',
'audio/skill/dctujue1.mp3',
'audio/skill/dctujue2.mp3',
'audio/skill/dcyingtu1.mp3',
'audio/skill/dcyingtu2.mp3',
'audio/skill/dcyingyu1.mp3',
'audio/skill/dcyingyu2.mp3',
'audio/skill/dcyishu1.mp3',
'audio/skill/dcyishu2.mp3',
'audio/skill/dcyongbi1.mp3',
'audio/skill/dcyongbi2.mp3',
'audio/skill/juece_dc_liru1.mp3',
'audio/skill/juece_dc_liru2.mp3',
'audio/skill/kousheng1.mp3',
'audio/skill/kousheng2.mp3',
'audio/skill/refenli1.mp3',
'audio/skill/refenli2.mp3',
'audio/skill/repingkou1.mp3',
'audio/skill/repingkou2.mp3',
'audio/skill/aichen1.mp3',
'audio/skill/aichen2.mp3',
@ -5771,6 +5816,16 @@ window.noname_asset_list=[
'image/character/wangyan.jpg',
'image/character/xiahouxuan.jpg',
'image/character/zhangfen.jpg',
'image/character/chengui.jpg',
'image/character/dc_huangquan.jpg',
'image/character/dc_huban.jpg',
'image/character/dc_liru.jpg',
'image/character/dingshangwan.jpg',
'image/character/junk_sunquan.jpg',
'image/character/kebineng.jpg',
'image/character/quanhuijie.jpg',
'image/character/re_zhuhuan.jpg',
'image/character/yinfuren.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -13090,8 +13090,12 @@
var evt=event;
if(evt.animate!=false){
evt.discardid=lib.status.videoId++;
game.broadcastAll(function(list,id){
game.broadcastAll(function(list,id,cards){
for(var i of list){
for(var j of i[1]){
j.classList.remove('glow');
j.classList.remove('glows');
}
i[0].$throw(i[1],null,'nobroadcast');
}
var cardnodes=[];
@ -13105,7 +13109,7 @@
}
}
ui.todiscard[id]=cardnodes;
},event.lose_list,evt.discardid);
},event.lose_list,evt.discardid,cards);
if(lib.config.sync_speed&&cards[0]&&cards[0].clone){
if(evt.delay!=false){
var waitingForTransition=get.time();
@ -15586,6 +15590,8 @@
}
}
}
event.sourceSkill=logInfo.sourceSkill;
event.type=logInfo.type;
player.getHistory('useSkill').push(logInfo);
"step 1"
var info=get.info(event.skill);
@ -20923,6 +20929,17 @@
}
}
next.setContent('gain');
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
var cards=[],event=this;
game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||evt.position!=position||evt.getParent()!=event) return;
if(player&&player!=evt.player) return;
cards.addArray(evt[key]);
});
return cards;
};
next.getl=function(player){
var that=this;
var map={
@ -20990,6 +21007,17 @@
}
}
next.setContent('addToExpansion');
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
var cards=[],event=this;
game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||evt.position!=position||evt.getParent()!=event) return;
if(player&&player!=evt.player) return;
cards.addArray(evt[key]);
});
return cards;
};
next.getl=function(player){
var that=this;
var map={
@ -21070,6 +21098,12 @@
next.cards=next.cards.slice(0);
}
next.setContent('lose');
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
if(this.getlx===false||this.position!=position||(player&&this.player!=player)||!Array.isArray(this[key])) return [];
return this[key].slice(0);
};
next.getl=function(player){
if(this.getlx!==false&&this.player==player) return this;
return {
@ -21449,6 +21483,17 @@
next.setContent(lib.element.content.equip);
if(get.is.object(next.card)&&next.card.cards) next.card=next.card.cards[0];
next.cards=[next.card];
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
var cards=[],event=this;
game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||evt.position!=position||evt.getParent()!=event) return;
if(player&&player!=evt.player) return;
cards.addArray(evt[key]);
});
return cards;
};
next.getl=function(player){
var that=this;
var map={
@ -21492,6 +21537,17 @@
}
next.player=this;
next.setContent('addJudge');
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
var cards=[],event=this;
game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||evt.position!=position||evt.getParent()!=event) return;
if(player&&player!=evt.player) return;
cards.addArray(evt[key]);
});
return cards;
};
next.getl=function(player){
var that=this;
var map={
@ -21860,6 +21916,17 @@
}
}
}
var next=game.createEvent('logSkill',false),evt=_status.event;
next.player=player;
next.forceDie=true;
evt.next.remove(next);
if(evt.logSkill) evt=evt.getParent();
for(var i in logInfo){
if(i=='event') next.log_event=logInfo[i];
else next[i]=logInfo[i];
}
evt.after.push(next);
next.setContent('emptyEvent');
player.getHistory('useSkill').push(logInfo);
}
if(this._hookTrigger){
@ -22823,9 +22890,12 @@
game.broadcastAll(function(player,skill){
player.skills.remove(skill);
player.hiddenSkills.remove(skill);
delete player.tempSkills[skill];
for(var i in player.additionalSkills){
player.additionalSkills[i].remove(skill);
}
},this,skill);
this.checkConflict(skill);
delete this.tempSkills[skill];
if(info){
if(info.onremove){
if(typeof info.onremove=='function'){
@ -26486,6 +26556,9 @@
if(zoom) buttons.classList.add('smallzoom');
this.buttons=this.buttons.concat(ui.create.buttons(item,'player',buttons,noclick));
}
else if(item[1]=='textbutton'){
ui.create.textbuttons(item[0],this,noclick);
}
else{
var buttons=ui.create.div('.buttons',this.content);
if(zoom) buttons.classList.add('smallzoom');
@ -29376,6 +29449,17 @@
},
loseAsync:function(arg){
var next=game.createEvent('loseAsync');
next.getd=function(player,key,position){
if(!position) position=ui.discardPile;
if(!key) key='cards';
var cards=[],event=this;
game.getGlobalHistory('cardMove',function(evt){
if(evt.name!='lose'||evt.position!=position||evt.getParent()!=event) return;
if(player&&player!=evt.player) return;
cards.addArray(evt[key]);
});
return cards;
};
next.getl=function(player){
var that=this;
var map={
@ -29431,6 +29515,9 @@
var next=game.createEvent('cardsDiscard');
next.cards=type=='cards'?cards.slice(0):[cards];
next.setContent('cardsDiscard');
next.getd=function(player,key,position){
return this.cards.slice(0);
};
return next;
},
cardsGotoOrdering:function(cards){
@ -33770,151 +33857,152 @@
}
},
loop:function(){
var event=_status.event;
var step=event.step;
var source=event.source;
var player=event.player;
var target=event.target;
var targets=event.targets;
var card=event.card;
var cards=event.cards;
var skill=event.skill;
var forced=event.forced;
var num=event.num;
var trigger=event._trigger;
var result=event._result;
if(_status.paused2||_status.imchoosing){
if(!lib.status.dateDelaying){
lib.status.dateDelaying=new Date();
while(true){
var event=_status.event;
var step=event.step;
var source=event.source;
var player=event.player;
var target=event.target;
var targets=event.targets;
var card=event.card;
var cards=event.cards;
var skill=event.skill;
var forced=event.forced;
var num=event.num;
var trigger=event._trigger;
var result=event._result;
if(_status.paused2||_status.imchoosing){
if(!lib.status.dateDelaying){
lib.status.dateDelaying=new Date();
}
}
}
if(_status.paused||_status.paused2||_status.over){
return;
}
if(_status.paused3){
_status.paused3='paused';
return;
}
if(lib.status.dateDelaying){
lib.status.dateDelayed+=lib.getUTC(new Date())-lib.getUTC(lib.status.dateDelaying);
delete lib.status.dateDelaying;
}
if(event.next.length>0){
var next=event.next.shift();
if(next.player&&next.player.skipList.contains(next.name)){
event.trigger(next.name+'Skipped');
next.player.skipList.remove(next.name);
if(lib.phaseName.contains(next.name)) next.player.getHistory('skipped').add(next.name);
if(_status.paused||_status.paused2||_status.over){
return;
}
else{
next.parent=event;
_status.event=next;
if(_status.paused3){
_status.paused3='paused';
return;
}
}
else if(event.finished){
if(event._triggered==1){
if(event.type=='card') event.trigger('useCardToOmitted');
event.trigger(event.name+'Omitted');
event._triggered=4;
if(lib.status.dateDelaying){
lib.status.dateDelayed+=lib.getUTC(new Date())-lib.getUTC(lib.status.dateDelaying);
delete lib.status.dateDelaying;
}
else if(event._triggered==2){
if(event.type=='card') event.trigger('useCardToEnd');
event.trigger(event.name+'End');
event._triggered=3;
}
else if(event._triggered==3){
if(event.type=='card') event.trigger('useCardToAfter');
event.trigger(event.name+'After');
event._triggered++;
}
else if(event.after&&event.after.length){
var next=event.after.shift();
if(event.next.length>0){
var next=event.next.shift();
if(next.player&&next.player.skipList.contains(next.name)){
event.trigger(next.name+'Skipped');
next.player.skipList.remove(next.name);
if(lib.phaseName.contains(next.name)) next.player.getHistory('skipped').add(next.name)
if(lib.phaseName.contains(next.name)) next.player.getHistory('skipped').add(next.name);
}
else{
next.parent=event;
_status.event=next;
}
}
else{
if(event.parent){
if(event.result){
event.parent._result=event.result;
}
_status.event=event.parent;
else if(event.finished){
if(event._triggered==1){
if(event.type=='card') event.trigger('useCardToOmitted');
event.trigger(event.name+'Omitted');
event._triggered=4;
}
else{
return;
else if(event._triggered==2){
if(event.type=='card') event.trigger('useCardToEnd');
event.trigger(event.name+'End');
event._triggered=3;
}
}
}
else{
if(event._triggered==0){
if(event.type=='card') event.trigger('useCardToBefore');
event.trigger(event.name+'Before');
event._triggered++;
}
else if(event._triggered==1){
if(event.type=='card') event.trigger('useCardToBegin');
if(event.name=='phase'&&!event._begun){
var next=game.createEvent('phasing',false,event);
next.player=event.player;
next.skill=event.skill;
next.setContent('phasing');
event._begun=true;
}
else{
event.trigger(event.name+'Begin');
else if(event._triggered==3){
if(event.type=='card') event.trigger('useCardToAfter');
event.trigger(event.name+'After');
event._triggered++;
}
}
else{
if(player&&player.classList.contains('dead')&&!event.forceDie&&event.name!='phaseLoop'){
game.broadcastAll(function(){
while(_status.dieClose.length){
_status.dieClose.shift().close();
}
});
if(event._oncancel){
event._oncancel();
else if(event.after&&event.after.length){
var next=event.after.shift();
if(next.player&&next.player.skipList.contains(next.name)){
event.trigger(next.name+'Skipped');
next.player.skipList.remove(next.name);
if(lib.phaseName.contains(next.name)) next.player.getHistory('skipped').add(next.name)
}
event.finish();
}
else if(player&&player.removed&&event.name!='phaseLoop'){
event.finish();
}
else if(player&&player.isOut()&&event.name!='phaseLoop'&&!event.includeOut){
if(event.name=='phase'&&player==_status.roundStart&&!event.skill){
_status.roundSkipped=true;
else{
next.parent=event;
_status.event=next;
}
event.finish();
}
else{
if(_status.withError||lib.config.compatiblemode||(_status.connectMode&&!lib.config.debug)){
try{
if(event.parent){
if(event.result){
event.parent._result=event.result;
}
_status.event=event.parent;
}
else{
return;
}
}
}
else{
if(event._triggered==0){
if(event.type=='card') event.trigger('useCardToBefore');
event.trigger(event.name+'Before');
event._triggered++;
}
else if(event._triggered==1){
if(event.type=='card') event.trigger('useCardToBegin');
if(event.name=='phase'&&!event._begun){
var next=game.createEvent('phasing',false,event);
next.player=event.player;
next.skill=event.skill;
next.setContent('phasing');
event._begun=true;
}
else{
event.trigger(event.name+'Begin');
event._triggered++;
}
}
else{
if(player&&player.classList.contains('dead')&&!event.forceDie&&event.name!='phaseLoop'){
game.broadcastAll(function(){
while(_status.dieClose.length){
_status.dieClose.shift().close();
}
});
if(event._oncancel){
event._oncancel();
}
event.finish();
}
else if(player&&player.removed&&event.name!='phaseLoop'){
event.finish();
}
else if(player&&player.isOut()&&event.name!='phaseLoop'&&!event.includeOut){
if(event.name=='phase'&&player==_status.roundStart&&!event.skill){
_status.roundSkipped=true;
}
event.finish();
}
else{
if(_status.withError||lib.config.compatiblemode||(_status.connectMode&&!lib.config.debug)){
try{
event.content(event,step,source,player,target,targets,
card,cards,skill,forced,num,trigger,result,
_status,lib,game,ui,get,ai);
}
catch(e){
game.print('游戏出错:'+event.name);
game.print(e.toString());
console.log(e);
}
}
else{
event.content(event,step,source,player,target,targets,
card,cards,skill,forced,num,trigger,result,
_status,lib,game,ui,get,ai);
}
catch(e){
game.print('游戏出错:'+event.name);
game.print(e.toString());
console.log(e);
}
}
else{
event.content(event,step,source,player,target,targets,
card,cards,skill,forced,num,trigger,result,
_status,lib,game,ui,get,ai);
}
event.step++;
}
event.step++;
}
}
game.loop();
},
pause:function(){
clearTimeout(_status.timeout);
@ -45952,6 +46040,18 @@
},
button:function(item,type,position,noclick,node){
switch(type){
case 'tdnodes':
node=ui.create.div('.shadowed.reduce_radius.pointerdiv.tdnode.tdnodes',position);
if(Array.isArray(item)){
node.innerHTML='<span>'+(item[1])+'</span>';
node.link=item[0];
}
else{
node.innerHTML='<span>'+(item)+'</span>';
node.link=item;
}
break;
case 'blank':
node=ui.create.div('.button.card',position);
node.link=item;
@ -46170,18 +46270,6 @@
}
}
break;
case 'text':
node=ui.create.div('.button.text',position);
node.link=item;
node.innerHTML=item;
break;
case 'textButton':
node=ui.create.div('.caption',position);
node.link=item;
node.innerHTML=item;
break;
}
if(!noclick){
node.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
@ -46223,6 +46311,27 @@
}
return buttons;
},
textbuttons:function(list,dialog,noclick){
for(var item of list){
var str,link;
if(Array.isArray(item)){
str=item[1];
link=item[0];
}
else{
str=item;
link=item;
}
if(str.indexOf('<div')!=0) str='<div class="popup text textbutton">'+str+'</div>';
var next=dialog.add(str);
if(!noclick) next.firstChild.addEventListener(lib.config.touchscreen?'touchend':'click',ui.click.button);
next.firstChild.link=link;
for(var j in lib.element.button){
next[j]=lib.element.button[j];
}
dialog.buttons.add(next.firstChild)
}
},
player:function(position,noclick){
var node=ui.create.div('.player',position);
node.node={

View File

@ -1,12 +1,11 @@
window.noname_update={
version:'1.9.117.1',
update:'1.9.117',
version:'1.9.117.2',
update:'1.9.117.1',
changeLog:[
'露娜Q',
'OL界典韦、邓忠、王衍、夏侯玄',
'十周年刘徽、蔡阳、吕旷吕翔、杜夔、张奋',
'其他技能调整和bug修复',
'players://["dc_caiyang","dc_lvkuanglvxiang","dengzhong","dukui","key_kiyu","liuhui","ol_dianwei","wangyan","xiahouxuan","zhangfen"]',
'新的dialog Button',
'OL神孙权',
'十周年界李儒、界朱桓、陈珪、黄权、胡班、丁尚涴、柯比能、全惠解、尹夫人',
'其他技能调整和bug修复', 'players://["chengui","dc_huangquan","dc_huban","dc_liru","dingshangwan","junk_sunquan","kebineng","quanhuijie","re_zhuhuan","yinfuren"]',
],
files:[
//'card/extra.js',
@ -15,43 +14,43 @@ window.noname_update={
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
//'card/standard.js',
'card/sp.js',
'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
//'card/yingbian.js',
//'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
//'character/diy.js',
//'character/extra.js',
'character/diy.js',
'character/extra.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
//'character/mobile.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
'character/offline.js',
//'character/old.js',
//'character/ow.js',
//'character/rank.js',
'character/rank.js',
'character/refresh.js',
//'character/sb.js',
//'character/shenhua.js',
//'character/sp.js',
//'character/sp2.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
//'character/tw.js',
'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
//'character/yingbian.js',
//'character/yijiang.js',
'character/yingbian.js',
'character/yijiang.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'font/suits.ttf',
//'layout/default/layout.css',
//'layout/default/menu.css',
'layout/default/layout.css',
'layout/default/menu.css',
//'layout/long2/layout.css',
//'layout/mobile/equip.css',
//'layout/mobile/layout.css',
@ -62,13 +61,13 @@ window.noname_update={
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
//'mode/guozhan.js',
'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',
//'game/game.js',
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',
//'game/config.js',

BIN
image/character/chengui.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

BIN
image/character/dc_liru.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

View File

@ -1448,10 +1448,13 @@ div:not(.handcards)>.card>.info>span,
.button.card.button>.intro {
top: 69px;
}
.buttons {
width: 100%;
}
.buttons.guanxing {
min-height: 106px;
width: 90%;
margin: 0px;
width: 90%;
}
.buttons.smallzoom {
display: block;
@ -1733,7 +1736,8 @@ div:not(.handcards)>.card>.info>span,
margin: 8px;
}
.content>.caption + .buttons:not(*:last-child){
margin: 0
margin-top: 0;
margin-bottom: 0;
}
.content>.config {
height: 20px;
@ -1770,6 +1774,7 @@ div:not(.handcards)>.card>.info>span,
display: block;
width: 100%;
font-size: 0px;
overflow-x: hidden;
}
.content>*{
font-size: 16px;
@ -3473,6 +3478,8 @@ div:not(.handcards)>.card>.info>span,
#arena.selecting:not(.video) #me .card:not(.selectable)>.gaintag,
#arena.selecting:not(.video) #me .card:not(.selectable)>.addinfo,
#arena.selecting:not(.video) .dialog:not(.noselect) .button:not(.selectable):not(.noclick):not(.replaceButton),
#arena.selecting:not(.video) .dialog:not(.noselect) .textbutton:not(.selectable):not(.noclick):not(.replaceButton),
#arena.selecting:not(.video) .dialog:not(.noselect) .tdnodes:not(.selectable):not(.noclick):not(.replaceButton),
.dead,.likedead {
opacity: 0.6;
}
@ -4569,7 +4576,7 @@ div[data-decoration="bronze"]::after{
opacity: 1;
}
.selected:not(.player):not(.card):not(.button),.selectedx {
.selected:not(.tdnodes):not(.text):not(.player):not(.card):not(.button),.selectedx {
box-shadow: rgba(0, 0, 0, 0.2) 0 0 0 1px,rgba(255, 0, 0, 0.4) 0 0 5px, rgba(255, 0, 0, 0.4) 0 0 12px, rgba(255, 0, 0, 0.8) 0 0 15px !important;
}

View File

@ -1083,6 +1083,8 @@ input.fileinput::-webkit-file-upload-button {
.menubutton.blue{
background-image: linear-gradient(rgba(47,101,150,1), rgba(43, 90, 132,1));
}
.tdnodes.selected,
.text.selected,
.bluebg{
background-image: linear-gradient(rgba(47,101,150,1), rgba(43, 90, 132,1)) !important;
}

View File

@ -993,7 +993,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
for(var i of result.cards) list.add(get.type2(i));
if(list.length==result.cards.length){
target.draw();
player.getStat('skill').sanchen--;
player.getStat('skill').gzsanchen--;
player.addMark('gzsanchen',1);
}
}
@ -1630,7 +1630,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
forced:true,
trigger:{source:'damageBegin1'},
filter:function(event,player){
return event.card&&(event.card.name=='sha'||event.card.name=='juedou')
return event.card&&(event.card.name=='sha'||event.card.name=='juedou')&&event.getParent().type=='card';
},
content:function(){
trigger.num++;
@ -5196,6 +5196,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var next=trigger.player.chooseBool('是否对'+get.translation(player)+'发动【米道】?','令该角色修改'+get.translation(trigger.card)+'的花色和伤害属性');
next.set('ai',()=>false);
if(player==next.player) next.setHiddenSkill(event.name);
'step 1'
if(result.bool){
@ -5878,80 +5879,6 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
},
},
xindiaodu:{
audio:"diaodu",
group:'xindiaodu_use',
frequent:true,
preHidden:true,
subSkill:{
temp:{},
use:{
trigger:{
global:"useCard",
},
filter:function(event,player){
return get.type(event.card)=='equip'&&event.player.isAlive()&&
event.player.isFriendOf(player)&&(player==event.player||player.hasSkill('xindiaodu'))&&!event.player.hasSkill('xindiaodu_temp');
},
direct:true,
content:function(){
'step 0'
var next=trigger.player.chooseBool('是否发动【调度】摸一张牌?');
if(player.hasSkill('xindiaodu')) next.set('frequentSkill','xindiaodu');
if(player==trigger.player) next.setHiddenSkill('xindiaodu');
'step 1'
if(result.bool){
player.logSkill('xindiaodu',trigger.player);
trigger.player.draw('nodelay');
trigger.player.addTempSkill('xindiaodu_temp');
}
},
},
},
trigger:{
player:"phaseUseBegin",
},
filter:function(event,player){
return game.hasPlayer(function(current){
return current.isFriendOf(player)&&current.countGainableCards(player,'e')>0;
});
},
direct:true,
content:function(){
'step 0'
player.chooseTarget(get.prompt2('xindiaodu'),function(card,player,current){
return current.isFriendOf(player)&&current.countGainableCards(player,'e')>0;
}).setHiddenSkill(event.name).ai=function(target){
var num=1;
if(target.hasSkill('gzxiaoji')) num+=2.5;
if(target.isDamaged()&&target.getEquip('baiyin')) num+=2.5;
if(target.hasSkill('xuanlve')) num+=2;
return num;
};
'step 1'
if(result.bool){
event.target1=result.targets[0];
player.logSkill('xindiaodu',event.target1);
player.line(event.target1,'xindiaodu');
player.gainPlayerCard(event.target1,'e',true);
}
else event.finish();
'step 2'
if(result.bool&&player.getCards('h').contains(result.cards[0])){
event.card=result.cards[0];
player.chooseTarget('是否将'+get.translation(event.card)+'交给一名其他角色?',function(card,player,current){
return current!=player&&current!=_status.event.target1&&current.isFriendOf(player);
}).set('target1',event.target1);
}
else event.finish();
'step 3'
if(result.bool){
var target=result.targets[0];
player.line(target,'green');
target.gain(card,player,'give');
}
},
},
gzbuyi:{
trigger:{global:'dyingAfter'},
usable:1,
@ -12566,9 +12493,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
huibian_info:'出牌阶段限一次,你可以选择一名魏势力角色和另一名已受伤的魏势力角色。若如此做,你对前者造成一点伤害,然后其摸两张牌,然后后者回复一点体力。',
gzzongyu:'总御',
gzzongyu_info:'当【六龙骖驾】进入其他角色的装备区后,你可以将你装备区内所有坐骑牌(至少一张)与【六龙骖驾】交换位置。锁定技,当你使用坐骑牌后,若场上或弃牌堆中有【六龙骖驾】,则将【六龙骖驾】置入你的装备区。',
xindiaodu:"调度",
"xindiaodu_info":"每回合限一次,与你势力相同的角色使用装备牌时,其可以摸一张牌;出牌阶段开始时,你可以获得与你势力相同的一名角色装备区内的一张牌,然后你可以将此牌交给另一名与你势力相同的其他角色。",
yigui:"役鬼",
"yigui_info":"当你首次明置此武将牌时,你将剩余武将牌堆的两张牌扣置于游戏外,称为“魂”;你可以展示一张“魂”并将其置入剩余武将牌堆,视为使用了一张本回合内未以此法使用过的基本牌或普通锦囊牌。(此牌需指定目标,且目标须为未确定势力的角色或野心家或与此“魂”势力相同的角色)",
"yigui_init":"役鬼",