v1.9.115.1

merged PR #85 and #87
This commit is contained in:
Spmario233 2022-09-02 22:37:30 +08:00
parent 79f93bed23
commit 5cdd1a9b46
74 changed files with 1443 additions and 414 deletions

BIN
audio/die/dc_gongsunzan.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_huangzu.mp3 Normal file

Binary file not shown.

BIN
audio/die/dc_yanghu.mp3 Normal file

Binary file not shown.

BIN
audio/die/gz_dc_yanghu.mp3 Normal file

Binary file not shown.

BIN
audio/die/ns_zanghong.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/die/ruiji.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/effect/ignotus.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/skill/dcdeshao1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcdeshao2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjinggong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjinggong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcmingfa1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcmingfa2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcqiaomeng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcqiaomeng2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxiaojuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcxiaojuan2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/qiaoli1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/qiaoli2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/qingliang1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/qingliang2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -247,16 +247,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(target==player){
if(typeof _status.event.filterCard=='function'&&
_status.event.filterCard({name:'huogong'},player,_status.event)){
return -1.5;
return -1.15;
}
if(_status.event.skill){
var viewAs=get.info(_status.event.skill).viewAs;
if(viewAs=='huogong') return -1.5;
if(viewAs&&viewAs.name=='huogong') return -1.5;
if(viewAs=='huogong') return -1.15;
if(viewAs&&viewAs.name=='huogong') return -1.15;
}
return 0;
}
return -1.5;
return -1.15;
}
},
tag:{

View File

@ -95,6 +95,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_chentai:['male','wei',4,['nsweiyuan','nsjuxian']],
ns_zhangning:['female','qun',3,['nsfuzhou','nsguidao','nstaiping']],
ns_yanghu:['male','jin',3,['nsbizhao','nsqingde','nsyidi'],['hiddenSkill']],
ns_zanghong:['male','qun',4,['nsshimeng']],
ns_ruanji:['male','wei',3,['nsshizui','nsxiaoye']],
ns_zhangwei:['female','shu',3,['nsqiyue','nsxuezhu']],
diy_wenyang:['male','wei','4/6',['lvli','choujue']],
@ -196,6 +198,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"ns_huangchengyan","ns_sunchensunjun","ns_yuanxi","ns_caoshuang"],
diy_yijiang2:["key_yuuki","key_tenzen","key_kyouko","key_kotarou","key_kyou",
"ns_chentai","ns_huangwudie","ns_sunyi","ns_zhangning","ns_yanghu"],
diy_yijiang3:['ns_ruanji','ns_zanghong'],
diy_tieba:["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_luyusheng"],
diy_fakenews:["diy_wenyang","ns_zhangwei","ns_caimao","ns_chengpu"],
diy_xushi:["diy_feishi","diy_hanlong","diy_liufu","diy_liuyan","diy_liuzan","diy_tianyu","diy_xizhenxihong","diy_yangyi","diy_zaozhirenjun"],
@ -307,6 +310,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
ns_sunyi:'#g无民氏4251',
ns_zhangning:'#g如颍隋行1314',
ns_yanghu:'#ginCenv',
ns_ruanji:'#g伯约的崛起',
ns_zanghong:'#g阿七',
ns_luyusheng:'#g猫咪大院 - 魚と水',
ns_caimao:'#gP尔号玩家◆',
@ -514,6 +519,141 @@ game.import('character',function(lib,game,ui,get,ai,_status){
key_lucia:['key_shizuru'],
},
skill:{
//阮籍
nsshizui:{
trigger:{target:'useCardToTargeted'},
usable:1,
direct:true,
filter:function(event,player){
var type=get.type(event.card,null,false);
return (type=='basic'||type=='trick')&&player.countCards('he')>0&&player.hasUseTarget({name:'jiu'},null,true);
},
content:function(){
'step 0'
var suit=get.suit(trigger.card),cards=trigger.cards.filterInD();
var str='弃置一张牌并视为使用一张【酒】';
if(lib.suit.contains(suit)) str+=(';若弃置'+get.translation(suit)+'牌,则'+get.translation(trigger.card)+'对你无效');
if(cards.length) str+=(';若弃置♣牌则获得'+get.translation(cards));
str+='。';
var next=player.chooseToDiscard('he',get.prompt('nsshizui'),str);
next.set('val1',cards.length?get.value(cards,player):0);
next.set('val2',-get.effect(player,trigger.card,trigger.player,player));
next.set('suit',suit);
next.set('ai',function(card){
var base=2,suit=get.suit(card);
if(suit=='club') base+=_status.event.val1;
if(suit==_status.event.suit) base+=_status.event.val2;
return base-get.value(card);
}).logSkill='nsshizui';
'step 1'
if(result.bool){
event.suit1=get.suit(result.cards[0],player);
player.chooseUseTarget('jiu',true);
}
else{
player.storage.counttrigger.nsshizui--;
event.finish();
}
'step 2'
var suit1=event.suit1,suit2=get.suit(trigger.card,false);
if(suit1==suit2&&lib.suit.contains(suit1)) trigger.excluded.add(player);
if(suit1=='club'){
var cards=trigger.cards.filterInD();
if(cards.length>0) player.gain(cards,'gain2');
}
},
},
nsxiaoye:{
trigger:{global:'phaseJieshuBegin'},
direct:true,
filter:function(event,player){
return player.hasHistory('useCard',function(evt){
return evt.card.name=='jiu';
})&&event.player.hasHistory('useCard',function(evt){
return (evt.card.name=='sha'||get.type(evt.card)=='trick')&&player.hasUseTarget({
name:evt.card.name,
nature:evt.card.nature,
isCard:true,
});
})
},
content:function(){
'step 0'
var list=[];
trigger.player.getHistory('useCard',function(evt){
if(evt.card.name!='sha'&&get.type(evt.card)!='trick') return;
if(evt.card.name=='sha'&&evt.card.nature) list.add('sha:'+evt.card.nature);
else list.add(evt.card.name);
});
for(var i=0;i<list.length;i++){
if(list[i].indexOf('sha:')==0) list[i]=['基本','','sha',list[i].slice(4)];
else list[i]=[get.type(list[i]),'',list[i]];
}
player.chooseButton([get.prompt('nsxiaoye'),[list,'vcard']]).set('filterButton',function(button){
return player.hasUseTarget({name:button.link[2],nature:button.link[3],isCard:true});
}).set('ai',function(button){
return player.getUseValue({name:button.link[2],nature:button.link[3],isCard:true});
});
'step 1'
if(result.bool){
player.logSkill('nsxiaoye');
player.chooseUseTarget(true,{name:result.links[0][2],nature:result.links[0][3],isCard:true});
}
},
},
//臧洪
nsshimeng:{
enable:'phaseUse',
usable:1,
selectTarget:[1,Infinity],
filterTarget:true,
contentBefore:function(){
event.getParent()._nsshimeng_count=[0,0];
},
content:function(){
'step 0'
if(!target.isIn()){
event.finish();
return;
}
target.chooseToUse('使用一张【杀】,或摸一张牌',function(card,player){
if(get.name(card)!='sha') return false;
return lib.filter.cardEnabled.apply(this,arguments);
}).set('addCount',false);
'step 1'
if(result.bool){
event.getParent()._nsshimeng_count[0]++;
}
else{
event.getParent()._nsshimeng_count[1]++;
target.draw();
}
},
contentAfter:function(){
var list=event.getParent()._nsshimeng_count;
if(list[0]<list[1]){
player.changeHujia(1);
player.loseHp();
}
},
ai:{
order:3.05,
result:{
player:function(player,target){
var att=get.attitude(player,target);
if(att<=0) return 0;
if(player.hp>1||player.countCards('hs',['tao','jiu'])) return 1;
if(!ui.selected.targets.length){
if(target!=player) return 0;
if(player.hasSha()) return 1;
return 0;
}
if(ui.selected.targets.length>1&&!target.hasSha()) return 0;
return 1;
},
},
},
},
tenzen_fenghuan:{
trigger:{global:'useCardAfter'},
direct:true,
@ -16216,6 +16356,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
moshou_info:'锁定技,你不能成为乐不思蜀和兵粮寸断的目标。',
xicai_info:'你可以立即获得对你造成伤害的牌',
diyjianxiong_info:'锁定技,在身份局中,在你回合内死亡的角色均视为反贼,国战中,在你回合内死亡的角色若与你势力相同则随机改为另一个势力',
ns_zanghong:'臧洪',
nsshimeng:'誓盟',
nsshimeng_info:'出牌阶段限一次你可以选择任意名角色。这些角色依次选择一项⒈摸一张牌。⒉使用一张【杀】。然后若选择前者角色数大于选择后者的角色数则你获得1点护甲并失去1点体力。',
ns_ruanji:'阮籍',
nsshizui:'酾醉',
nsshizui_info:'每回合限一次。当你成为基本牌或普通锦囊牌的目标后,你可以弃置一张牌,然后视为使用一张【酒】。若你弃置的牌与其使用的牌花色相同,则此牌对你无效;若你弃置的牌为♣,则你获得其使用的牌。',
nsxiaoye:'啸野',
nsxiaoye_info:'一名角色的结束阶段开始时,若你于当前回合內使用过【酒】,则你可以视为使用一张其于本回合内使用过的【杀】或普通锦囊牌。',
junk_zhangrang:'四花张让',
junktaoluan:'滔乱',
junktaoluan3:'滔乱',
@ -16238,6 +16388,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
diy_key:'论外',
diy_yijiang:'设计比赛2020',
diy_yijiang2:'设计比赛2021',
diy_yijiang3:'设计比赛2022',
diy_fakenews:'假新闻',
diy_trashbin:'垃圾桶',
old_jiakui:'贾逵重制',

View File

@ -5973,7 +5973,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dengji_info:'觉醒技准备阶段若你武将牌上的「储」数不小于3则你减1点体力上限并获得所有「储」然后获得技能〖天行〗和〖奸雄〗',
tianxing:'天行',
tianxing_info:'觉醒技准备阶段若你武将牌上的「储」数不小于3则你减1点体力上限并获得所有「储」然后失去技能〖储元〗选择获得以下技能中的一个〖仁德〗/〖制衡〗/〖乱击〗/〖行动〗',
shen_zhenji:'神甄',
shen_zhenji:'神甄',
shenfu:'神赋',
shenfu_info:'回合结束时若你的手牌数为奇数你可对一名其他角色造成1点伤害。若其死亡你可重复此流程。偶数你可选择一名角色你令其摸一张牌或弃置一张手牌。若其手牌数等于体力值你可重复此流程。',
qixian:'七弦',

View File

@ -1910,13 +1910,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
//每个音符的开始时间点(毫秒,相对未偏移的开始播放时间)
timeleap:[1047,3012,4978,5469,5961,6452,6698,7435,8909,10875,12840],
//开始播放时间的偏移量(毫秒)
current:-546,
current:-110,
//判定栏高度(相对整个对话框高度比例)
judgebar_height:0.14,
judgebar_height:0.16,
//Good/Great/Prefect的位置判定范围百分比相对于整个对话框。以滑条的底部作为判定基准
range1:[86,110],
range2:[92,104],
range3:[96,100],
range1:[84,110],
range2:[90,104],
range3:[94,100],
//滑条每相对于整个对话框下落1%所需的时间(毫秒)
speed:25,
},
@ -1924,13 +1924,40 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'竹取飛翔 ~ Lunatic Princess',
filename:'taketori_hishou',
timeleap:[1021,1490,1959,2896,3834,4537,4771,5709,6646,7585,8039,8494,9403,10291,11180,11832,12049,12920,13345,13771,14196],
current:-500,
judgebar_height:0.14,
range1:[86,110],
range2:[92,104],
range3:[96,100],
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
judgebar_color:'linear-gradient(rgba(240, 120, 123, 1), rgba(230, 115, 113, 1))',
node_color:'linear-gradient(rgba(250, 170, 190, 1), rgba(240, 160, 180, 1))',
judgebar_color:'linear-gradient(rgba(240, 120, 243, 1), rgba(245, 106, 230, 1))',
},
{
name:'ignotus',
filename:'ignotus',
timeleap:[0,1412,2824,4235,5647,5824,7059,8294,8471,9882,10941,11294,12000,12706,13412,14118,14824,15529,15882,16059,16235,16412,16588],
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(rgba(240, 250, 240, 1), rgba(230, 240, 230, 1))',
judgebar_color:'linear-gradient(rgba(161, 59, 150, 1), rgba(58, 43, 74, 1))',
},
{
name:'Super Mario 3D World Theme',
filename:'sm3dw_overworld',
timeleap:[0,1071,1518,2054,4018,4286,5357,6429,7500,8571,9643,10714,11786,12321,12589,12857,13929,15000,16071,17143,18214,18482,18750,19018,19286,20357],
current:-110,
judgebar_height:0.16,
range1:[84,110],
range2:[90,104],
range3:[94,100],
speed:25,
node_color:'linear-gradient(rgba(120, 130, 240, 1), rgba(100, 100, 230, 1))',
judgebar_color:'linear-gradient(rgba(230, 40, 30, 1), rgba(220, 30, 10, 1))',
},
],
derivation:'chongxu_faq',
@ -9460,7 +9487,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
//界伏皇后
//界伏寿
xinzhuikong:{
audio:2,
trigger:{global:'phaseZhunbeiBegin'},
@ -16256,7 +16283,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinduodao_info:'当你受到伤害后,你可以获得伤害来源装备区里的武器牌。',
xinanjian:'暗箭',
xinanjian_info:'锁定技当你使用【杀】指定目标后若你不在目标角色攻击范围内你选择一项1. 令其无法响应此【杀】2. 其受到此【杀】造成的伤害+1。',
xin_fuhuanghou:'手杀伏皇后',
xin_fuhuanghou:'手杀伏寿',
xinzhuikong:'惴恐',
xinzhuikong_info:'每轮限一次,其他角色的回合开始时,若其体力值不小于你,你可与其拼点。若你赢,其本回合无法使用牌指定除其以外的角色为目标;若你没赢,你获得其拼点的牌,然后其视为对你使用一张【杀】。',
xinqiuyuan:'求援',
@ -16615,7 +16642,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
chongxu:'冲虚',
chongxu_info:'出牌阶段限一次你可以随机演奏一首音乐并根据完成度来获得相应的分数至多五分。然后你可修改〖妙剑〗或〖莲华〗消耗3分并使用剩余的分数进行摸牌每张2分。',
chongxu_faq:'目前的曲库',
chongxu_faq_info:' <br>《鸟之诗》- 折户伸治<br>《竹取飛翔 ~ Lunatic Princess》- ZUN',
chongxu_faq_info:' <br>《鸟之诗》- 折户伸治<br>《竹取飛翔 ~ Lunatic Princess》- ZUN<br>《ignotus》- ak+q<br>《Super Mario 3D World Theme》- 横田真人',
miaojian:'妙剑',
miaojian_info:'出牌阶段限一次。你可将一张【杀】当做刺【杀】使用,或将一张锦囊牌当做【无中生有】使用。',
miaojian1:'妙剑·改',
@ -16695,7 +16722,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
duanbi_info:'出牌阶段限一次。若场上所有角色的手牌数之和大于角色数之和的二倍则你可以令所有其他角色各弃置X张手牌X为该角色手牌数的一半且向下取整且至多为3。然后你可选择一名角色令其随机获得三张以此法被弃置的牌。',
tongduo:'统度',
tongduo_info:'每回合限一次。当你成为其他角色使用牌的唯一目标后,你可令一名角色重铸一张牌。',
xin_jushou:'沮授',
xin_jushou:'手杀沮授',
xinjianying:'渐营',
xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。',

View File

@ -516,6 +516,8 @@ window.noname_character_rank={
'tenggongzhu',
'sp_menghuo',
'ruiji',
're_liuchen',
'dc_gongsunzan',
],
bp:[
'chess_diaochan',
@ -787,6 +789,8 @@ window.noname_character_rank={
'shen_machao',
'sb_yujin',
'sb_huangzhong',
'dc_yanghu',
'dc_gongsunzan',
],
b:[
'diy_feishi',
@ -983,7 +987,7 @@ window.noname_character_rank={
'xin_caozhen',
'ol_dengzhi',
'sundeng',
'duji',
're_duji',
'sp_chendong',
'sp_zongyu',
'old_yangyan',
@ -1019,6 +1023,7 @@ window.noname_character_rank={
'sb_huaxiong',
'shen_sunquan',
're_jushou',
'dc_huangzu',
],
bm:[
'diy_xizhenxihong',
@ -1248,6 +1253,7 @@ window.noname_character_rank={
'old_chenqun',
'duanwei',
'wangxiang',
'duji',
],
rarity:{
legend:[
@ -1548,7 +1554,6 @@ window.noname_character_rank={
'ns_yanghu',
'ol_huaxin',
'longyufei',
're_guyong',
're_panshu',
'db_wenyang',
'qiaozhou',
@ -1566,6 +1571,8 @@ window.noname_character_rank={
'dc_luotong',
'dc_huangchengyan',
'laiyinger',
'ns_ruanji',
'ns_zanghong',
'key_kano',
'key_haruko',
'key_akiko',
@ -1966,6 +1973,10 @@ window.noname_character_rank={
're_jushou',
'xin_jushou',
'yj_jushou',
're_guyong',
'dc_yanghu',
're_duji',
're_liuchen',
],
junk:[
'sunshao',
@ -1986,6 +1997,7 @@ window.noname_character_rank={
'sp_xujing',
'fanjiangzhangda',
'wangxiang',
'duji',
],
}
};

View File

@ -13,12 +13,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
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'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','re_jushou'],
refresh_yijiang5:['re_zhangyi','re_quancong','re_caoxiu','re_sunxiu','re_gongsunyuan','re_guotufengji','re_xiahoushi'],
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'],
},
},
connect:true,
character:{
re_liuchen:['male','shu',4,['rezhanjue','reqinwang'],['zhu']],
dc_gongsunzan:['male','qun',4,['reyicong','dcqiaomeng']],
re_duji:['male','wei',3,['reandong','reyingshi']],
re_jushou:['male','qun',3,['dcjianying','dcshibei']],
re_zhanghe:['male','wei',4,['reqiaobian']],
dc_xushu:['male','shu',4,['rezhuhai','xsqianxin']],
@ -143,6 +147,376 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//刘谌
rezhanjue:{
audio:2,enable:'phaseUse',
filterCard:function(card){
return !card.hasGaintag('reqinwang');
},
selectCard:-1,
position:'h',
filter:function(event,player){
var stat=player.getStat().skill;
if(stat.rezhanjue_draw&&stat.rezhanjue_draw>=3) return false;
var hs=player.getCards('h',function(card){
return !card.hasGaintag('reqinwang');
});
if(!hs.length) return false;
for(var i=0;i<hs.length;i++){
var mod2=game.checkMod(hs[i],player,'unchanged','cardEnabled2',player);
if(mod2===false) return false;
}
return true;
},
viewAs:{name:'juedou'},
onuse:function(links,player){
player.addTempSkill('rezhanjue_effect','phaseUseEnd');
},
ai:{
order:1,
tag:{
respond:2,
respondSha:2,
damage:1,
},
result:{
target:-1.5,
player:function(player,target){
if(player.hasSkillTag('directHit_ai',true,{
target:target,
card:{name:'juedou'},
},true)){
return 0;
}
if(get.damageEffect(target,player,target)>0&&get.attitude(player,target)>0&&get.attitude(target,player)>0){
return 0;
}
var hs1=target.getCards('h','sha');
var hs2=player.getCards('h',function(card){
return card.hasGaintag('reqinwang')&&get.name(card)=='sha';
});
if(hs1.length>hs2.length+1){
return -2;
}
var hsx=target.getCards('h');
if(hsx.length>2&&hs2.length==0&&hsx[0].number<6){
return -2;
}
if(hsx.length>3&&hs2.length==0){
return -2;
}
if(hs1.length>hs2.length&&(!hs2.length||hs1[0].number>hs2[0].number)){
return -2;
}
return -0.5;
}
}
},
},
rezhanjue_effect:{
audio:false,
trigger:{player:'useCardAfter'},
forced:true,
popup:false,
charlotte:true,
filter:function(event,player){
return event.skill=='rezhanjue';
},
content:function(){
"step 0"
var stat=player.getStat().skill;
if(!stat.rezhanjue_draw) stat.rezhanjue_draw=0;
stat.rezhanjue_draw++;
player.draw('nodelay');
var list=game.filterPlayer(function(current){
if(current.getHistory('damage',function(evt){
return evt.card==trigger.card;
}).length>0){
if(current==player){
stat.rezhanjue_draw++;
}
return true;
}
return false;
});
if(list.length){
list.sortBySeat();
game.asyncDraw(list);
}
"step 1"
game.delay();
}
},
reqinwang:{
audio:2,
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(!player.hasZhuSkill('reqinwang')) return false;
return game.hasPlayer(function(current){
return current!=player&&current.group=='shu'&&player.hasZhuSkill('reqinwang',current);
});
},
selectTarget:-1,
filterTarget:function(card,player,current){
return current!=player&&current.group=='shu'&&player.hasZhuSkill('reqinwang',current);
},
content:function(){
'step 0'
if(target.hasCard(function(card){
return _status.connectMode||get.name(card,target)=='sha';
},'h')){
target.chooseCard('是否交给'+get.translation(player)+'一张【杀】?',function(card,player){
return get.name(card,player)=='sha';
},'h').set('goon',get.attitude(target,player)>0).set('ai',function(card){
return _status.event.goon?1:0;
});
}
else event.finish();
'step 1'
if(result.bool){
var card=result.cards[0];
player.gain(card,target,'give').gaintag.add('reqinwang');
player.addTempSkill('reqinwang_clear');
player.chooseBool('是否令'+get.translation(target)+'摸一张牌?');
}
else event.finish();
'step 2'
if(result.bool) target.draw();
},
ai:{
order:5,
result:{player:1},
},
subSkill:{
clear:{
charlotte:true,
onremove:function(player){
player.removeGaintag('reqinwang');
},
},
},
},
//公孙瓒
dcqiaomeng:{
audio:2,
trigger:{player:'useCardToPlayered'},
direct:true,
filter:function(event,player){
if(!event.isFirstTarget||get.color(event.card)!='black') return false;
for(var i of event.targets){
if(i!=player&&i.hasCard(function(card){
return lib.filter.canBeDiscarded(card,player,i);
},'he')) return true;
}
return false;
},
content:function(){
'step 0'
player.chooseTarget(get.prompt('dcqiaomeng'),'选择一名不为自己的目标角色,然后弃置其一张牌。若以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令'+get.translation(trigger.card)+'不可被响应。',function(card,player,target){
return target!=player&&_status.event.getTrigger().targets.contains(target)&&target.hasCard(function(card){
return lib.filter.canBeDiscarded(card,player,target);
},'he');
}).set('ai',function(target){
var player=_status.event.player;
return get.effect(target,{name:'guohe_copy2'},player,player)
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('dcqiaomeng',target);
player.discardPlayerCard(target,true,'he');
}
else event.finish();
'step 2'
if(result.bool&&result.cards&&result.cards.length){
//为了体现白马义从野性纯真的美 直接获取卡牌原类型 不考虑维系区域
var card=result.cards[0],type=get.type2(card,false);
if(type=='trick') trigger.directHit.addArray(game.filterPlayer((current)=>current!=player));
if(type=='equip'&&get.position(card,true)=='d') player.gain(card,'gain2');
}
},
},
//杜畿
reandong:{
audio:2,
trigger:{player:'damageBegin2'},
filter:function(event,player){
return event.source&&event.source.isIn();
},
logTarget:'source',
content:function(){
'step 0'
var target=trigger.source,str=get.translation(player);
var bool=player.storage.reandong;
if(bool) str='自己';
var choiceList=['防止'+str+'即将受到的伤害,且本回合内红桃牌不计入'+(bool?get.translation(target):'自己')+'的手牌上限。'];
if(!target.countCards('h')) choiceList.push('令'+str+'下次发动〖安东〗时改为自行选择');
else choiceList.push('令'+str+'观看你的手牌并获得所有红桃牌');
if(bool){
delete player.storage.reandong;
player.chooseControl().set('choiceList',choiceList).set('prompt','安东:请选择一项');
}
else{
target.chooseControl().set('choiceList',choiceList).set('prompt','安东:请选择一项').set('ai',function(event,player){
var target=_status.event.getParent().player;
var player=_status.event.player;
if(get.attitude(player,target)>0) return 0;
return 1;
});
}
'step 1'
var target=trigger.source;
if(result.index==0){
target.addTempSkill('reandong_ignore');
trigger.cancel();
game.delayx();
}
else{
if(!target.countCards('h')){
player.storage.reandong=true;
game.delayx();
}
else{
player.viewHandcards(target);
var cards=target.getCards('h',function(card){
return get.suit(card,target)=='heart';
});
if(cards.length>0) player.gain(cards,target,'give');
}
}
},
ai:{
maixie:true,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing',false,target)) return [1,-1];
if(get.tag(card,'damage')&&player!=target&&get.attitude(player,target)<0){
var cards=player.getCards('h',function(cardx){
return card!=cardx&&(!card.cards||!card.cards.contains(cardx))&&get.suit(cardx)=='heart';
});
if(!cards.length) return;
for(var i of cards){
if(get.name(i,target)=='tao') return 'zeroplayertarget';
}
if(get.value(cards,target)>=(6+target.getDamagedHp())) return 'zeroplayertarget';
return [1,0.6];
}
},
},
},
subSkill:{
ignore:{
mod:{
ignoredHandcard:function(card,player){
if(get.suit(card)=='heart'){
return true;
}
},
cardDiscardable:function(card,player,name){
if(name=='phaseDiscard'&&get.suit(card)=='heart') return false;
}
},
charlotte:true,
marktext:'♥',
intro:'红桃牌于本回合内不计入手牌上限',
},
},
},
reyingshi:{
audio:2,
trigger:{player:'phaseUseBegin'},
direct:true,
filter:function(event,player){
return player.countCards('h')>0&&game.countPlayer()>1;
},
content:function(){
'step 0'
player.chooseCardTarget({
prompt:get.prompt('reyingshi'),
prompt2:'操作提示选择一张作为赏金的手牌然后选择作为赏金猎人的角色A和作为出杀目标的其他角色B',
filterCard:true,
selectTarget:2,
position:'h',
filterTarget:function(card,player,target){
if(!ui.selected.targets.length) return true;
return target!=player;
},
complexTarget:true,
targetprompt:['出杀','被杀'],
complexSelect:true,
ai1:function(card){
return 1/Math.max(1,get.value(card));
},
ai2:function(target){
var player=_status.event.player;
if(!ui.selected.targets.length){
var att=get.attitude(player,target);
if(att<0) return 0;
if(target.hasSha()) return Math.pow(target.countCards('h')+1,1.1)*(player==target?3:1);
return Math.sqrt(1+target.countCards('h'));
}
return get.effect(target,{name:'sha'},ui.selected.targets[0],player);
},
});
'step 1'
if(result.bool){
var targets=result.targets;
event.targets=targets;
player.logSkill('reyingshi',targets[1]);
var card=result.cards[0];
event.card=card;
player.showCards(card,get.translation(player)+'对'+get.translation(targets[1])+'发动了【应势】');
player.line(targets[0],'fire');
}
else event.finish();
'step 2'
var next=targets[0].chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.cardEnabled.apply(this,arguments)&&lib.filter.targetEnabled(card,player,(event||_status.event).sourcex);
},'###是否对'+get.translation(targets[1])+'使用一张【杀】?###若选择使用,则获得赏金('+get.translation(card)+')。若造成伤害,则再从牌堆中获得与此牌花色点数相同的牌作为额外赏金。');
next.set('addCount',false);
next.set('complexSelect',true);
next.set('filterTarget',function(card,player,target){
if(target!=_status.event.sourcex&&!ui.selected.targets.contains(_status.event.sourcex)) return false;
return lib.filter.targetEnabled.apply(this,arguments);
});
next.set('sourcex',targets[1]);
'step 3'
var target=targets[0]
if(result.bool&&target.isIn()){
var cards=[],slice=0;
if(player!=target&&player.getCards('h').contains(card)){
cards.push(card);
slice++;
}
if(target.hasHistory('useCard',function(evt){
if(evt.getParent(2)!=event) return false;
return target.hasHistory('sourceDamage',function(evtx){
return evtx.card==evt.card;
});
})){
var suit=get.suit(card),number=get.number(card);
for(var i=0;i<ui.cardPile.childNodes.length;i++){
var card=ui.cardPile.childNodes[i];
if(card.suit==suit&&card.number==number) cards.push(card);
}
if(cards.length>0){
if(!slice) target.gain(cards,'gain2');
else{
setTimeout(function(){
target.$gain2(cards.slice(slice),true);
},get.delayx(200,200));
target.gain(cards,player,'give');
}
}
}
else{
if(cards.length>0) target.gain(cards,player,'give');
}
}
},
},
//十周年沮授
dcshibei:{
trigger:{player:'damageEnd'},
@ -244,7 +618,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filter:function(event,player){
var evt=lib.skill.dcjianying.getLastUsed(player,event);
if(!evt||!evt.card) return false;
return get.suit(evt.card)!='none'&&get.suit(evt.card)==get.suit(event.card)||
return lib.suit.contains(get.suit(evt.card))&&get.suit(evt.card)==get.suit(event.card)||
typeof get.number(evt.card,false)=='number'&&get.number(evt.card,false)==get.number(event.card);
},
content:function(){
@ -8522,7 +8896,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var i of cards){
if(get.name(i,target)=='tao') return [1,5];
}
if(get.value(cards,target)>=(6+player.getDamagedHp())) return [1,3];
if(get.value(cards,target)>=(7+target.getDamagedHp())) return [1,3];
return [1,0.6];
}
},
@ -11462,7 +11836,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_sunquan:'界孙权',
re_sunshangxiang:'界孙尚香',
re_zhugeliang:'界诸葛亮',
re_zhenji:'界甄',
re_zhenji:'界甄',
re_huaxiong:"界华雄",
"ol_sp_zhugeliang":"界卧龙",
@ -11817,7 +12191,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_manchong:'界满宠',
rejunxing:'峻刑',
rejunxing_info:'出牌阶段限一次你可以弃置任意张手牌并选择一名其他角色。该角色选择一项1.弃置X张牌并失去1点体力。2.翻面并摸X张牌。X为你弃置的牌数',
re_gongsunzan:'公孙瓒',
re_gongsunzan:'OL公孙瓒',
reqiaomeng:'趫猛',
reqiaomeng_info:'当你使用【杀】对一名角色造成伤害后,你可以弃置该角色区域内的一张牌。若此牌为坐骑牌,则你于此弃置事件结算结束后获得此牌。',
ol_dengai:'界邓艾',
@ -11845,7 +12219,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
reenyuan_info:'当你获得一名其他角色的至少两张牌后你可以令其摸一张牌。当你受到1点伤害后你可令伤害来源选择一项①失去1点体力。②交给你一张手牌。若此牌不为♥则你摸一张牌。',
rexuanhuo:'眩惑',
rexuanhuo_info:'摸牌阶段结束时你可以交给一名其他角色两张手牌然后该角色选择一项1. 视为对你选择的另一名角色使用任意一种【杀】或【决斗】2. 交给你所有手牌。',
re_fuhuanghou:'界伏皇后',
re_fuhuanghou:'界伏寿',
reqiuyuan:'求援',
reqiuyuan_info:'当你成为【杀】的目标时,你可选择另一名其他角色。除非该角色交给你一张除【杀】以外的基本牌,否则其也成为此【杀】的目标且该角色不能响应此【杀】。',
rezhuikong:'惴恐',
@ -12007,6 +12381,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcshibei_info:'锁定技当你于一回合内第一次受到伤害后你回复1点体力当你于一回合内第二次受到伤害后你失去1点体力。',
dcjianying:'渐营',
dcjianying_info:'当你使用与你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。',
re_duji:'界杜畿',
reandong:'安东',
reandong_info:'当你受到其他角色造成的伤害时,你可以令伤害来源选择一项:⒈防止此伤害。然后其♥牌不计入本回合的手牌上限;⒉你观看其手牌并获得其中的所有♥牌,若其没有手牌,则你下次发动〖安东〗时改为自行选择。',
reyingshi:'应势',
reyingshi_info:'出牌阶段开始时你可以展示一张手牌选择一名角色A和一名其他角色B。A可以对B使用一张【杀】然后获得你展示的牌。若A因此【杀】造成过伤害则A获得牌堆中与展示牌花色点数相同的其他牌。',
dcqiaomeng:'趫猛',
dcqiaomeng_info:'当你使用黑色牌指定第一个目标后,你可以弃置目标角色中一名其他角色的一张牌。若你以此法弃置的牌为:装备牌,你获得此牌;锦囊牌,你令此牌不可被响应。',
dc_gongsunzan:'界公孙瓒',
re_liuchen:'界刘谌',
rezhanjue:'战绝',
rezhanjue_effect:'战绝',
rezhanjue_info:'出牌阶段若你本阶段内因〖战绝〗获得过的牌数小于3则你可以将所有不具有“勤王”标记的手牌当做【决斗】使用。此【决斗】使用结算结束后你摸一张牌。然后所有因此【决斗】受到过伤害的角色也各摸一张牌。',
reqinwang:'勤王',
reqinwang_info:'主公技。出牌阶段限一次,你可以令所有其他蜀势力角色依次选择是否交给你一张【杀】,然后你可以令选择是的角色摸一张牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',
@ -12019,6 +12407,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_yijiang4:'界限突破·将4',
refresh_yijiang5:'界限突破·将5',
refresh_yijiang6:'界限突破·原6',
refresh_xinghuo:'界限突破·星火',
},
};
});

View File

@ -89,6 +89,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
equipSkill:false,
inherit:'qinggang_skill',
charlotte:true,
nopop:true,
mod:{
targetInRange:function(card){
if(card.name=='sha') return true;

View File

@ -516,7 +516,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.finish();
}
else{
var prompt='罪论:将'+get.cnNumber(num)+'牌置于牌堆顶';
var prompt='罪论:将'+get.cnNumber(num)+'牌置于牌堆顶';
if(num<3) prompt+='并获得其余的牌';
var next=player.chooseToMove(prompt,true);
if(num<3){
@ -1703,7 +1703,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
list.push(trigger.cards[i]);
}
}
player.give(list,zhu);
zhu.gain(list,'gain2');
zhu.chooseBool().set('ai',function(){
if(get.attitude(zhu,player)>0) return true;
return false;
@ -7252,7 +7252,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
card:{},
dynamicTranslate:{
nzry_juzhan:function(player){
if(player.storage.nzry_juzhan1==true) return '转换技,阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。<span class="bluetext">阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。</span>';
if(player.storage.nzry_juzhan==true) return '转换技,阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。<span class="bluetext">阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。</span>';
return '转换技,<span class="bluetext">阴:当你成为其他角色【杀】的目标后,你可以与其各摸一张牌,然后其本回合内不能再对你使用牌。</span>阳:当你使用【杀】指定一名角色为目标后,你可以获得其一张牌,然后你本回合内不能再对其使用牌。';
},
nzry_zhenliang:function(player){

View File

@ -99,7 +99,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
maliang:['male','shu',3,['zishu','xinyingyuan']],
zhugedan:['male','wei',4,['gongao','juyi']],
sp_jiangwei:['male','wei',4,['kunfen','fengliang']],
sp_machao:['male','qun',4,['zhuiji','ol_shichou']],
sp_machao:['male','qun',4,['olzhuiji','ol_shichou']],
sunhao:['male','wu',5,['recanshi','rechouhai','guiming'],['zhu']],
shixie:['male','qun',3,['rebiluan','relixia']],
mayunlu:['female','shu',4,['fengpo','mashu']],
@ -592,10 +592,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skills:['zhuangshu_basic'],
forceDie:true,
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
}
},
equipDelay:false,
loseDelay:false,
@ -610,10 +612,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forceDie:true,
skills:['zhuangshu_trick'],
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
}
},
equipDelay:false,
loseDelay:false,
@ -629,16 +633,62 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forceDie:true,
inherit:'zhuangshu_basic',
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
if((!event.getParent(2)||event.getParent(2).name!='swapEquip')&&(event.getParent().type!='equip'||event.getParent().swapEquip)){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
}
},
equipDelay:false,
loseDelay:false,
},
},
skill:{
//群马超
olzhuiji:{
mod:{
globalFrom:function(from,to){
if(from.hp>=to.hp) return -Infinity;
},
},
trigger:{player:'useCardToPlayered'},
shaRelated:true,
filter:function(event,player){
return event.card.name=='sha'&&event.target.countCards('he')>0&&get.distance(player,event.target)==1;
},
forced:true,
logTarget:'target',
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
if(target.countCards('e')==0) event._result={index:0};
else target.chooseControl().set('choiceList',[
'弃置一张牌',
'重铸装备区的所有牌',
]).set('ai',function(card){
var min=Infinity,equ=0,es=player.getCards('e'),hs=player.getCards('he');
for(var i of hs){
var val=get.value(i);
min=Math.min(min,val);
if(es.contains(i)) equ+=val;
}
equ/=es.length;
if(min<equ-1) return 0;
return 1;
});
'step 1'
if(result.index==0){
target.chooseToDiscard('he',true);
}
else{
var cards=target.getCards('e');
target.loseToDiscardpile(cards);
target.draw(cards.length)
}
},
},
//蒲元
olshengong:{
audio:2,
@ -2186,7 +2236,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return eff_left;
}
else if(right3){
if(bool) return eff_right>0?'↖顺时针':'cancel2';
if(bool) return eff_right>0?'逆时针↗':'cancel2';
return eff_right;
}
else return bool?'cancel2':0;
@ -3036,7 +3086,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
list.sort().reverse();
if(!list.length) return 0;
return list[0]+(list[1]||0);
return list[0]+(list[1]||0)+(list[2]||0);
});
'step 1'
if(result.bool){
@ -3050,27 +3100,45 @@ game.import('character',function(lib,game,ui,get,ai,_status){
for(var name of lib.inpile){
var info=lib.card[name];
if(!info||info.type!='trick'||info.notarget||(info.selectTarget&&info.selectTarget!=1)) continue;
if(!player.canUse(name,target)) continue;
list.push(name);
}
if(!list.length) event.finish();
else player.chooseButton(['视为对'+get.translation(target)+'使用至多两种牌',[list,'vcard']],[1,2],true).set('ai',function(button){
var evt=_status.event.getParent();
return get.effect(evt.target,{name:button.link[2]},evt.player,evt.player);
});
else{
event.list=list;
event.count=0;
}
'step 3'
if(result.bool){
target.addTempSkill('oljuanxia_counter',{player:'phaseAfter'});
if(!target.storage.oljuanxia_counter) target.storage.oljuanxia_counter={};
if(!target.storage.oljuanxia_counter[player.playerid]) target.storage.oljuanxia_counter[player.playerid]=0;
target.storage.oljuanxia_counter[player.playerid]+=result.links.length;
event.links=result.links;
var list=event.list.filter(function(name){
return player.canUse(name,target);
});
if(list.length){
var next=player.chooseButton(['视为对'+get.translation(target)+'使用一张牌',[list,'vcard']]).set('ai',function(button){
var evt=_status.event.getParent();
return get.effect(evt.target,{name:button.link[2]},evt.player,evt.player);
});
if(event.count==0) next.set('forced',true);
}
else{
event.stopped=true;
event.goto(5);
}
'step 4'
if(target.isIn()){
var name=event.links.shift()[2];
if(result.bool){
event.count++;
var name=result.links[0][2];
event.list.remove(name);
player.useCard({name:name,isCard:true},target,false);
if(event.links.length) event.redo();
}
else event.stopped=true;
'step 5'
if(target.isIn()&&event.count>0){
if(event.count<3&&!event.stopped&&event.list.length>0) event.goto(3);
else{
target.addTempSkill('oljuanxia_counter',{player:'phaseAfter'});
if(!target.storage.oljuanxia_counter) target.storage.oljuanxia_counter={};
if(!target.storage.oljuanxia_counter[player.playerid]) target.storage.oljuanxia_counter[player.playerid]=0;
target.storage.oljuanxia_counter[player.playerid]+=event.count;
}
}
},
subSkill:{
@ -4079,7 +4147,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
var target=result.targets[0];
event.target=target;
player.line(target,'fire');
target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”并令'+get.translation(player)+'');
target.chooseBool('许身:是否将自己的一张武将牌替换为“关索”');
'step 3'
if(result.bool){
if(target.name2!=undefined){
@ -4090,6 +4158,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.finish();
'step 4'
target.reinit(result.control,'guansuo');
if(target.name=='guansuo'&&target.group!='shu') target.changeGroup('shu');
if(_status.characterlist){
_status.characterlist.add(result.control);
_status.characterlist.remove('guansuo');
@ -6784,13 +6853,13 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
var num=Math.max(1,player.getDamagedHp());
player.chooseTarget('是否发动【誓仇】,令至多'+num+'名其他角色也成为此【杀】的目标?',[1,num],function(card,player,target){
var num=player.getDamagedHp()+1;
player.chooseTarget('是否发动【誓仇】','为'+get.translation(trigger.card)+'添加至多'+get.cnNumber(num)+'个目标',[1,num],function(card,player,target){
var evt=_status.event.getTrigger();
return target!=player&&!evt.targets.contains(target)&&lib.filter.targetEnabled2(evt.card,player,target)&&lib.filter.targetInRange(evt.card,player,target);
}).ai=function(target){
return get.effect(target,{name:'sha'},_status.event.player);
};
}).set('ai',function(target){
return get.effect(target,_status.event.getTrigger().card,_status.event.player);
});
'step 1'
if(result.bool&&result.targets&&result.targets.length){
var targets=result.targets;
@ -17553,6 +17622,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tianyu:['tw_tianyu','tianyu'],
huangchengyan:['huangchengyan','dc_huangchengyan'],
puyuan:['puyuan','ol_puyuan'],
huangzu:['dc_huangzu','huangzu'],
},
translate:{
"xinfu_lingren":"凌人",
@ -17772,7 +17842,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"new_luoyan_liuli":"流离",
"new_luoyan_liuli_info":"",
ol_shichou:"誓仇",
ol_shichou_info:"当你使用【杀】时你可以令至多X名角色也成为此【杀】的目标。此牌结算结束后若你未因【杀】造成过伤害则你获得此【杀】X为你已损失的体力值且至少为1。每回合限获得三次)",
ol_shichou_info:"当你使用【杀】时你可以令至多X+1名角色也成为此【杀】的目标。此牌结算结束后若你未因【杀】造成过伤害则你获得此【杀】X为你已损失的体力值。每回合限获得三次",
"zhenwei_three":"镇卫",
"zhenwei_three_info":"锁定技,敌方角色至己方其他角色的距离+1。",
"huanshi_three":"缓释",
@ -18347,7 +18417,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yanxiao_card:'言笑',
yanxiao_global:'言笑',
yanxiao_card_info:'判定阶段开始时,你获得判定区内的所有牌。',
huangzu:'黄祖',
huangzu:'OL黄祖',
wangong:'挽弓',
wangong2:'挽弓',
wangong_info:'锁定技,当你使用基本牌时,你获得如下效果:当你使用下一张牌时,若此牌为【杀】,则此牌无次数和距离限制且伤害+1。',
@ -18397,7 +18467,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lisi_info:'当你于回合外使用的牌结算结束后,你可将其交给一名手牌数不大于你的其他角色。',
ol_yangyi:'杨仪',
oljuanxia:'狷狭',
oljuanxia_info:'结束阶段,你可选择一名其他角色,并依次视为对其使用至多两种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。',
oljuanxia_info:'锁定技。结束阶段,你选择一名其他角色。你依次视为对其使用至多三种单目标普通锦囊牌。然后其下回合结束时,可视为对你使用等量的【杀】。',
oldingcuo:'定措',
oldingcuo_info:'每回合限一次。当你受到或造成伤害后,你可摸两张牌。若这两张牌颜色不同,则你弃置一张手牌。',
fengfangnv:'OL冯妤',
@ -18506,6 +18576,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
olshengong_info:'出牌阶段每项限一次。你可以弃置一张武器牌/防具牌/其他装备牌,并发起一次“锻造”。然后你从锻造结果中选择一张牌,置于一名角色的装备区内(可替换原装备)。当有因你发动〖神工〗而加入游戏的牌进入弃牌堆后,你将此牌移出游戏,然后你于当前回合结束后摸一张牌。',
olqisi:'奇思',
olqisi_info:'①游戏开始时,你获得两张副类别不同的牌,并将这些牌置入你的装备区。②摸牌阶段开始时,你可以少摸一张牌并声明一种装备牌的副类别,然后从牌堆或弃牌堆中获得一张该副类别的牌。',
olzhuiji:'追击',
olzhuiji_info:'锁定技。①你至体力值不大于你的角色的距离为1。②当你使用【杀】指定距离为1的角色为目标后你令其选择一项⒈弃置一张牌。⒉重铸装备区内的所有牌。',
sp_tianji:'天极·皇室宗亲',
sp_sibi:'四弼·辅国文曲',

View File

@ -4,6 +4,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'sp2',
connect:true,
character:{
dc_yanghu:['male','wei',3,['dcdeshao','dcmingfa']],
dc_huangzu:['male','qun',4,['dcjinggong','dcxiaojuan']],
caimaozhangyun:['male','wei',4,['lianzhou','jinglan']],
yanrou:['male','wei',4,['choutao','xiangshu']],
zhangyao:['female','wu',3,['yuanyu','xiyan']],
@ -151,10 +153,224 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp_xuzhou:['re_taoqian','caosong','zhangmiao','qiuliju'],
sp_zhongyuan:['re_hucheer','re_zoushi','caoanmin','re_dongcheng'],
sp_xiaohu:['haomeng','yanfuren'],
sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu','yanrou','caimaozhangyun','zhangyao'],
sp_decade:['wulan','leitong','huaman','wangshuang','wenyang','re_liuzan','caobuxing','re_maliang','xin_baosanniang','re_xinxianying','dongxie','guozhao','fanyufeng','ruanyu','re_dongzhao','yangwan','re_panshu','dufuren','zhouyi','caojinyu','re_sunyi','re_zhangbao','re_fengfangnv','mamidi','dc_jiben','licaiwei','dc_luotong','dc_zhuling','tengyin','dc_gaolan','guanning','caomao','laiyinger','dc_huangchengyan','tenggongzhu','yanrou','caimaozhangyun','zhangyao','dc_huangzu'],
}
},
skill:{
//羊祜
dcdeshao:{
audio:2,
usable:2,
trigger:{target:'useCardToTargeted'},
filter:function(event,player){
return player!=event.player&&get.color(event.card)=='black';
},
logTarget:'player',
check:function(event,player){
var eff=get.effect(player,{name:'wuzhong'},player,player)/2;
if(player.countCards('h')+1<=event.player.countCards('h')&&event.player.countCards('he')>0) eff+=get.effect(event.player,{name:'guohe_copy2'},player,player);
return eff;
},
content:function(){
'step 0'
player.draw();
'step 1'
var target=trigger.player;
if(player.countCards('h')<=target.countCards('h')&&target.countCards('he')>0){
player.discardPlayerCard(target,true,'he');
player.addExpose(0.2);
}
},
},
dcmingfa:{
audio:2,
trigger:{player:'useCardAfter'},
direct:true,
filter:function(event,player){
return player.isPhaseUsing()&&(event.card.name=='sha'||get.type(event.card)=='trick')&&event.cards.filterInD().length>0&&!player.getExpansions('dcmingfa').length;
},
content:function(){
'step 0'
var str,cards=trigger.cards.filterInD(),card=trigger.card;
if(cards.length==1&&card.name==cards[0].name&&(card.nature||false)==(cards[0].nature||false)) str=get.translation(cards[0]);
else str=(get.translation(trigger.card)+''+get.translation(cards)+'');
var cardx={
name:trigger.card.name,
nature:trigger.card.nature,
isCard:true,
};
player.chooseTarget(lib.filter.notMe,get.prompt('dcmingfa'),'将'+str+'作为“明伐”牌置于武将牌上,并选择一名其他角色。该角色下回合结束时对其执行〖明伐〗的后续效果。').set('card',cardx).set('goon',function(){
var getMax=function(card){
return Math.max.apply(Math,game.filterPlayer(function(current){
return current!=player&&lib.filter.targetEnabled2(card,player,current);
}).map(function(i){
return get.effect(i,card,player,player)*Math.sqrt(Math.min(i.getHandcardLimit(),1+i.countCards('h')));
}).concat([0]));
}
var eff1=getMax(cardx);
if(player.hasCard(function(card){
if((card.name!='sha'&&get.type(card)!='trick')||!player.hasValueTarget(card,null,true)) return false;
return getMax({
name:get.name(card),
nature:get.nature(card),
isCard:true,
})>=eff1;
},'hs')) return false;
return true;
}()).set('ai',function(target){
if(!_status.event.goon) return 0;
var player=_status.event.player,card=_status.event.card;
if(!lib.filter.targetEnabled2(card,player,target)) return 0;
return get.effect(target,card,player,player)*Math.sqrt(Math.min(target.getHandcardLimit(),1+target.countCards('h')));
});
'step 1'
if(result.bool){
var target=result.targets[0];
player.logSkill('dcmingfa',target);
var card={
name:trigger.card.name,
nature:trigger.card.nature,
isCard:true,
};
player.storage.dcmingfa_info=[card,target];
player.addToExpansion(trigger.cards.filterInD(),'gain2').gaintag.add('dcmingfa');
}
},
group:'dcmingfa_use',
ai:{expose:0.2},
intro:{
mark:function(dialog,storage,player){
var cards=player.getExpansions('dcmingfa');
if(!cards.length) return '没有“明伐”牌';
else dialog.add(cards);
var info=player.storage.dcmingfa_info;
if(info){
dialog.addText('记录牌:'+get.translation(info[0])+'<br>记录目标:'+get.translation(info[1]));
}
},
content:'expansion',
},
onremove:function(player,skill){
var cards=player.getExpansions(skill);
if(cards.length) player.loseToDiscardpile(cards);
delete player.storage.dcmingfa_info;
},
subSkill:{
use:{
audio:'dcmingfa',
trigger:{global:['phaseEnd','die']},
forced:true,
filter:function(event,player){
if(!player.storage.dcmingfa_info||!player.getExpansions('dcmingfa').length) return false;
return event.player==player.storage.dcmingfa_info[1];
},
content:function(){
'step 0'
var target=trigger.player;
event.target=target;
var card=player.storage.dcmingfa_info[0];
delete player.storage.dcmingfa_info;
event.card=card;
event.count=Math.min(5,target.countCards('h'));
if(event.count<=0) event.goto(2);
'step 1'
event.count--;
if(target.isIn()&&lib.filter.targetEnabled2(card,player,target)){
player.useCard(get.copy(card),target);
if(event.count>0) event.redo();
}
'step 2'
var cards=player.getExpansions('dcmingfa');
if(cards.length>0) player.loseToDiscardpile(cards);
},
},
},
},
//黄祖
dcjinggong:{
audio:2,
enable:'chooseToUse',
mod:{
targetInRange:function(card){
if(card.storage&&card.storage.dcjinggong) return true;
},
},
viewAsFilter:function(player){
return player.hasCard(function(card){
return get.type(card)=='equip';
},'ehs');
},
position:'hes',
filterCard:{type:'equip'},
viewAs:{
name:'sha',
storage:{dcjinggong:true},
},
check:function(card){
return 6-get.value(card);
},
ai:{
respondSha:true,
skillTagFilter:function(player){
return player.hasCard(function(card){
return get.type(card)=='equip';
},'ehs');
},
},
group:'dcjinggong_base',
subSkill:{
base:{
trigger:{player:'useCard1'},
forced:true,
popup:false,
firstDo:true,
filter:function(event,player){
return event.skill=='dcjinggong'&&event.targets.length>0;
},
content:function(){
trigger.baseDamage=get.distance(player,trigger.targets[0]);
},
},
},
},
dcxiaojuan:{
audio:2,
trigger:{player:'useCardToPlayered'},
logTarget:'target',
filter:function(event,player){
return event.targets.length==1&&player!=event.target&&event.target.countCards('h')>1;
},
check:function(event,player){
var target=event.target;
if(get.attitude(player,target)>=0) return false;
if(get.color(event.card)=='none') return true;
return Math.floor(target.countCards('h')/2)>=Math.floor(player.countCards('h')/2);
},
content:function(){
'step 0'
var target=trigger.target;
event.target=target;
var num=Math.floor(target.countCards('h')/2);
if(num>0) player.discardPlayerCard(target,'h',num,true);
else event.finish();
'step 1'
var color=get.color(trigger.card);
if(result.bool&&color!='none'&&player.countCards('h')>1){
var bool=false;
for(var i of result.cards){
if(get.color(i,target)==color){
bool=true;
break;
}
}
if(!bool) event.finish();
}
else event.finish();
'step 2'
var num=Math.floor(player.countCards('h')/2);
if(num>0) player.chooseToDiscard('h',num,true);
},
},
//蔡瑁张允
lianzhou:{
audio:2,
@ -5170,7 +5386,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 2'
var cards=[];
while(cards.length<2){
var card=get.cardPile(function(card){
var card=get.cardPile2(function(card){
return !cards.contains(card)&&get.number(card)==6;
});
if(!card) break;
@ -9371,6 +9587,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else event.goto(4);
'step 3'
target.reinit(result.control,'guansuo');
if(target.name=='guansuo'&&target.group!='shu') target.changeGroup('shu');
if(_status.characterlist){
_status.characterlist.add(result.control);
_status.characterlist.remove('guansuo');
@ -16084,6 +16301,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
lianzhou_info:'锁定技。准备阶段,你横置你的武将牌。然后你可横置任意名体力值等于你的角色。',
jinglan:'惊澜',
jinglan_info:'锁定技。当你造成伤害后若你的手牌数大于体力值你弃置三张手牌等于体力值你弃置一张手牌并回复1点体力小于体力值你受到1点无来源火焰伤害并摸四张牌。',
dc_huangzu:'黄祖',
dcjinggong:'精弓',
dcjinggong_info:'你可以将一张装备牌当做无距离限制的【杀】使用。当你声明使用此【杀】时你将此杀的伤害值基数改为XX为你至此【杀】第一个目标角色的距离且至多为3。',
dcxiaojuan:'骁隽',
dcxiaojuan_info:'当你使用牌指定其他角色为唯一目标后,你可以弃置其一半的手牌(向下取整)。若这些牌中有与你使用牌花色相同的牌,则你弃置一半的手牌(向下取整)。',
dc_yanghu:'羊祜',
dcdeshao:'德劭',
dcdeshao_info:'每回合限两次。当你成为其他角色使用的黑色牌的目标后,你可以摸一张牌,然后若其手牌数不小于你,则你弃置其一张牌。',
dcmingfa:'明伐',
dcmingfa_info:'①出牌阶段限一次。当你使用【杀】或普通锦囊牌结算结束后若你的武将牌上没有“明伐”牌则你可以将此牌作为“明伐”牌置于武将牌上并选择一名其他角色记录该角色和此牌的名称。②一名角色的回合结束时若其是你〖明伐①〗记录的角色则你视为对其依次使用X张〖明伐①〗记录的牌然后移去“明伐”牌X为其手牌数且至多为5。③一名角色死亡时若其是你〖明伐①〗记录的角色则你移去“移去”牌。',
sp_whlw:"文和乱武",
sp_zlzy:"逐鹿中原",

View File

@ -2390,7 +2390,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.bool){
event.target=result.targets[0];
player.line(event.target,'green');
player.give(event.card,event.target);
player.give(card,event.target,true);
}
else ui.cardPile.appendChild(event.card);
game.updateRoundNumber();
@ -2455,7 +2455,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
huatuo:['re_huatuo','old_huatuo','huatuo'],
huaxiong:['re_huaxiong','old_huaxiong','huaxiong','ol_huaxiong'],
yuanshu:['yl_yuanshu','yuanshu','re_yuanshu','old_yuanshu','ol_yuanshu'],
gongsunzan:['re_gongsunzan','xin_gongsunzan','sp_gongsunzan','gongsunzan'],
gongsunzan:['dc_gongsunzan','re_gongsunzan','xin_gongsunzan','gongsunzan'],
},
translate:{
caocao:'曹操',
@ -2475,7 +2475,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangliao:'张辽',
xuzhu:'许褚',
guojia:'郭嘉',
zhenji:'甄',
zhenji:'甄',
liubei:'刘备',
guanyu:'关羽',
zhangfei:'张飞',

View File

@ -4,18 +4,18 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'xinghuoliaoyuan',
connect:true,
character:{
wangcan:["male","qun",3,["xinfu_sanwen","xinfu_qiai","xinfu_denglou"],[]],
sp_taishici:["male","qun",4,["xinfu_jixu"],[]],
re_jsp_pangtong:["male","wu",3,["xinfu_guolun","xinfu_songsang"],[]],
lvdai:["male","wu",4,["xinfu_qinguo"],[]],
re_zhangliang:["male","qun",4,["xinfu_jijun","xinfu_fangtong"],[]],
lvqian:["male","wei",4,["xinfu_weilu","xinfu_zengdao"],[]],
panjun:["male","wu",3,["xinfu_guanwei","xinfu_gongqing"],[]],
duji:["male","wei",3,["xinfu_andong","xinyingshi"],[]],
zhoufang:["male","wu",3,["xinfu_duanfa","xinfu_youdi"],[]],
yanjun:["male","wu",3,["xinfu_guanchao","xinfu_xunxian"],[]],
liuyao:["male","qun",4,["xinfu_kannan"],[]],
liuyan:["male","qun",3,["xinfu_tushe","xinfu_limu"],[]],
wangcan:["male","qun",3,["xinfu_sanwen","xinfu_qiai","xinfu_denglou"]],
sp_taishici:["male","qun",4,["xinfu_jixu"]],
re_jsp_pangtong:["male","wu",3,["xinfu_guolun","xinfu_songsang"]],
lvdai:["male","wu",4,["xinfu_qinguo"]],
re_zhangliang:["male","qun",4,["xinfu_jijun","xinfu_fangtong"]],
lvqian:["male","wei",4,["xinfu_weilu","xinfu_zengdao"]],
panjun:["male","wu",3,["xinfu_guanwei","xinfu_gongqing"]],
duji:["male","wei",3,["xinfu_andong","xinfu_yingshi"]],
zhoufang:["male","wu",3,["xinfu_duanfa","xinfu_youdi"]],
yanjun:["male","wu",3,["xinfu_guanchao","xinfu_xunxian"]],
liuyao:["male","qun",4,["xinfu_kannan"]],
liuyan:["male","qun",3,["xinfu_tushe","xinfu_limu"]],
},
characterIntro:{
wangcan:"王粲177年217年2月17日字仲宣。山阳郡高平县今山东微山两城镇人。东汉末年文学家“建安七子”之一太尉王龚曾孙、司空王畅之孙。",
@ -1560,9 +1560,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
characterReplace:{
duji:['re_duji','duji'],
},
translate:{
xinghuoliaoyuan:'星火燎原',
"sp_taishici":"SP太史慈",
wangcan:"王粲",
"re_jsp_pangtong":"SP庞统",

View File

@ -44,7 +44,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
manchong:['male','wei',3,['junxing','yuce']],
chenqun:['male','wei',3,['pindi','faen']],
sunluban:['female','wu',3,['chanhui','jiaojin']],
guyong:['male','wu',3,['shenxing','bingyi']],
guyong:['male','wu',3,['shenxing','olbingyi']],
caifuren:['female','qun',3,['qieting','xianzhou']],
yj_jushou:['male','qun',3,['jianying','shibei']],
zhangsong:['male','shu',3,['qiangzhi','xiantu']],
@ -194,6 +194,53 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhonghui:['jiangwei'],
},
skill:{
//顾雍
olbingyi:{
audio:'bingyi',
trigger:{player:'loseAfter'},
filter:function(event,player){
return event.type=='discard'&&player.countCards('h')>0&&!player.hasSkill('olbingyi_blocker',null,null,false);
},
prompt2:function(event,player){
var str='展示所有手牌,然后',hs=player.getCards('h');
var color=get.color(hs);
if(color=='none') return str+'无事发生';
str+=('令至多'+get.cnNumber(hs.length)+'名其他角色和自己各摸一张牌');
return str;
},
check:function(event,player){
var color=get.color(player.getCards('h'));
return color!='none';
},
content:function(){
'step 0'
player.addTempSkill('olbingyi_blocker',['phaseZhunbeiAfter','phaseJudgeAfter','phaseDrawAfter','phaseUseAfter','phaseDiscardAfter','phaseJieshuAfter']);
player.showHandcards(get.translation(player)+'发动了【秉壹】');
if(get.color(player.getCards('h'))=='none') event.finish();
'step 1'
var num=player.countCards('h');
player.chooseTarget([1,num],'令至多'+get.cnNumber(num)+'名角色也各摸一张牌',lib.filter.notMe).set('ai',function(target){
var player=_status.event.player;
var att=get.attitude(player,target)/Math.sqrt(1+target.countCards('h'));
if(target.hasSkillTag('nogain')) att/=10;
return att;
});
'step 2'
var targets=[player];
if(result.bool){
targets.addArray(result.targets);
player.line(targets,'green');
game.asyncDraw(targets.sortBySeat());
}
else{
player.draw();
event.finish();
}
'step 3'
game.delayx();
},
subSkill:{blocker:{charlotte:true}},
},
//孙体
xinzhaofu:{
mark:false,
@ -8744,14 +8791,50 @@ game.import('character',function(lib,game,ui,get,ai,_status){
filterCard:true,
selectCard:2,
prompt:'弃置两张牌并摸一张牌',
check:function(card){return 4-get.useful(card)},
check:function(card){
var player=_status.event.player;
if(!player.hasSkill('olbingyi')||player.hasSkill('olbingyi_blocker',null,null,false)) return 4-get.value(card);
var red=0,black=0,hs=player.getCards('h');
for(var i of hs){
if(ui.selected.cards.contains(i)) continue;
var color=get.color(i,player);
if(color=='red') red++;
if(color=='black') black++;
}
if(red>2&&black>2) return 4-get.value(card);
if(red==0||black==0) return 8-get.value(card);
var color=get.color(red);
if(black<=red) return ((color=='black'&&get.position(card)=='h')?8:4)-get.value(card);
return ((color=='red'&&get.position(card)=='h'?8:4))-get.value(card);
},
content:function(){
player.draw();
},
ai:{
order:1,
order:9,
result:{
player:1
player:function(player,target){
if(!ui.selected.cards.length) return 1;
if(!player.hasSkill('olbingyi')||player.hasSkill('olbingyi_blocker',null,null,false)) return 1;
var red=0,black=0,hs=player.getCards('h');
for(var i of hs){
if(ui.selected.cards.contains(i)) continue;
var color=get.color(i);
if(color=='red') red++;
if(color=='black') black++;
}
var val=0;
for(var i of ui.selected.cards) val+=get.value(i,player);
if(red==0||black==0){
if(red+black==0) return 0;
var num=Math.min(red+black,game.countPlayer(function(current){
return current!=player&&get.attitude(player,current)>0&&!current.hasSkillTag('nogain');
}))+1;
if(num*7>val) return 1;
}
if(val<8) return 1;
return 0;
},
},
},
},
@ -12086,9 +12169,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guotufengji:['re_guotufengji','guotufengji'],
guanping:['re_guanping','guanping'],
caifuren:['xin_caifuren','re_caifuren','caifuren'],
guyong:['re_guyong','xin_guyong','guyong'],
guyong:['guyong','re_guyong','xin_guyong'],
yj_jushou:['re_jushou','xin_jushou','yj_jushou'],
guohuanghou:['re_guohuanghou','guohuanghou'],
liuchen:['re_liuchen','liuchen'],
},
translate:{
old_huaxiong:'华雄',
@ -12111,7 +12195,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
caochong:'曹冲',
bulianshi:'步练师',
handang:'韩当',
fuhuanghou:'伏皇后',
fuhuanghou:'伏寿',
caifuren:'蔡夫人',
zhonghui:'钟会',
old_zhonghui:'旧钟会',
@ -12668,6 +12752,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinkuangbi_info:'出牌阶段限一次。你可以令一名其他角色交给你至多三张牌(不计入你本回合的手牌上限)。然后其于其的下回合开始时摸等量的牌。',
xinzhaofu:'诏缚',
xinzhaofu_info:'主公技,限定技。出牌阶段,你可选择至多两名其他角色。这两名角色视为在所有其他吴势力角色的攻击范围内。',
olbingyi:'秉壹',
olbingyi_info:'每阶段限一次。当你因弃置而失去牌后你可以展示所有手牌。若这些牌的颜色均相同则你可以与至多X名其他角色各摸一张牌X为你的手牌数。',
yijiang_2011:'一将成名2011',
yijiang_2012:'一将成名2012',

View File

@ -3490,7 +3490,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
jin_simashi:['jin_xiahouhui','jin_yanghuiyu'],
},
characterReplace:{
yanghu:['jin_yanghu','sp_yanghu'],
yanghu:['dc_yanghu','jin_yanghu','sp_yanghu'],
jiachong:['jin_jiachong','jiachong'],
yangyan:['yangyan','old_yangyan'],
yangzhi:['yangzhi','old_yangzhi'],

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.115',
'v1.9.115.1',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -192,6 +192,16 @@ window.noname_asset_list=[
'audio/die/shen_sunquan.mp3',
'audio/die/tengfanglan.mp3',
'audio/die/weizi.mp3',
'audio/die/dc_gongsunzan.mp3',
'audio/die/dc_huangzu.mp3',
'audio/die/dc_yanghu.mp3',
'audio/die/gz_dc_yanghu.mp3',
'audio/die/ns_zanghong.mp3',
'audio/die/re_masu.mp3',
'audio/die/re_zhangyi.mp3',
'audio/die/ruiji.mp3',
'audio/die/yangyi.mp3',
'audio/die/yj_ganning.mp3',
'audio/die/baosanniang.mp3',
'audio/die/beimihu.mp3',
@ -933,6 +943,40 @@ window.noname_asset_list=[
'audio/die/zumao.mp3',
'audio/die/zuoci.mp3',
'audio/die/zuofen.mp3',
'audio/effect/damage.mp3',
'audio/effect/damage_female.mp3',
'audio/effect/damage_male.mp3',
'audio/effect/damage2.mp3',
'audio/effect/die_female.mp3',
'audio/effect/die_male.mp3',
'audio/effect/discard.mp3',
'audio/effect/draw.mp3',
'audio/effect/drawx.mp3',
'audio/effect/equip1.mp3',
'audio/effect/equip2.mp3',
'audio/effect/equip3.mp3',
'audio/effect/equip4.mp3',
'audio/effect/equip5.mp3',
'audio/effect/ignotus.mp3',
'audio/effect/judge.mp3',
'audio/effect/link.mp3',
'audio/effect/lose.mp3',
'audio/effect/loseHp.mp3',
'audio/effect/recover.mp3',
'audio/effect/sm3dw_overworld.mp3',
'audio/effect/taketori_hishou.mp3',
'audio/effect/throw_egg1.mp3',
'audio/effect/throw_egg2.mp3',
'audio/effect/throw_flower1.mp3',
'audio/effect/throw_flower2.mp3',
'audio/effect/throw_shoe1.mp3',
'audio/effect/throw_shoe2.mp3',
'audio/effect/throw_wine1.mp3',
'audio/effect/throw_wine2.mp3',
'audio/effect/tie.mp3',
'audio/effect/tori_no_uta.mp3',
'audio/effect/win.mp3',
'audio/skill/bingxin1.mp3',
'audio/skill/bingxin2.mp3',
@ -1006,6 +1050,42 @@ window.noname_asset_list=[
'audio/skill/yuanzi2.mp3',
'audio/skill/yuheng1.mp3',
'audio/skill/yuheng2.mp3',
'audio/skill/dcdeshao1.mp3',
'audio/skill/dcdeshao2.mp3',
'audio/skill/dcjinggong1.mp3',
'audio/skill/dcjinggong2.mp3',
'audio/skill/dcmingfa1.mp3',
'audio/skill/dcmingfa2.mp3',
'audio/skill/dcqiaomeng1.mp3',
'audio/skill/dcqiaomeng2.mp3',
'audio/skill/dcxiaojuan1.mp3',
'audio/skill/dcxiaojuan2.mp3',
'audio/skill/duoduan1.mp3',
'audio/skill/duoduan2.mp3',
'audio/skill/gnjinfan1.mp3',
'audio/skill/gnjinfan2.mp3',
'audio/skill/gnsheque1.mp3',
'audio/skill/gnsheque2.mp3',
'audio/skill/gongsun1.mp3',
'audio/skill/gongsun2.mp3',
'audio/skill/ns_nsshimeng1.mp3',
'audio/skill/ns_nsshimeng2.mp3',
'audio/skill/qiaoli1.mp3',
'audio/skill/qiaoli2.mp3',
'audio/skill/qingliang1.mp3',
'audio/skill/qingliang2.mp3',
'audio/skill/resanyao1.mp3',
'audio/skill/resanyao2.mp3',
'audio/skill/rewurong1.mp3',
'audio/skill/rewurong2.mp3',
'audio/skill/reyicong_dc_gongsunzan.mp3',
'audio/skill/reyicong_dc_gongsunzan1.mp3',
'audio/skill/sanyao1.mp3',
'audio/skill/sanyao2.mp3',
'audio/skill/zhiman_re_masu1.mp3',
'audio/skill/zhiman_re_masu2.mp3',
'audio/skill/zhiyan_xin_yufan1.mp3',
'audio/skill/zhiyan_xin_yufan2.mp3',
'audio/skill/anguo1.mp3',
'audio/skill/anguo2.mp3',
@ -3363,8 +3443,6 @@ window.noname_asset_list=[
'audio/skill/tongduo2.mp3',
'audio/skill/tongji1.mp3',
'audio/skill/tongji2.mp3',
'audio/skill/tongqu1.mp3',
'audio/skill/tongqu2.mp3',
'audio/skill/tongyuan1.mp3',
'audio/skill/tongyuan2.mp3',
'audio/skill/tspowei1.mp3',
@ -5464,6 +5542,13 @@ window.noname_asset_list=[
'image/character/sb_yujin.jpg',
'image/character/shen_machao.jpg',
'image/character/shen_sunquan.jpg',
'image/character/dc_gongsunzan.jpg',
'image/character/dc_huangzu.jpg',
'image/character/dc_yanghu.jpg',
'image/character/ns_ruanji.jpg',
'image/character/ns_zanghong.jpg',
'image/character/re_duji.jpg',
'image/character/re_liuchen.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -134,7 +134,7 @@ window.config={
sort:'type_sort',
cards:['standard','extra'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian'],
characters:['standard','shenhua','sp','sp2','yijiang','refresh','xinghuoliaoyuan','mobile','extra','yingbian','sb'],
connect_characters:['diy'],
connect_cards:['huanlekapai','guozhan','sp','zhulu','yingbian','yongjian'],
plays:[],

View File

@ -5689,6 +5689,12 @@
}
}
},
wss_mode:{
name:'使用WSS协议',
init:false,
frequent:true,
intro:'在用户填写的IP地址没有直接指定使用WS/WSS协议的情况下默认使用WSS协议而非WS协议来连接到联机服务器。<br>请不要轻易勾选此项!',
},
}
},
boss:{
@ -9419,24 +9425,6 @@
localStorage.removeItem(lib.configprefix+'background');
}
},
parsex:function(func){
var k;
var str='(';
str+=func.toString();
if(str.indexOf('step 0')==-1){
str=str.replace(/\{/,'{{if(event.step==1) {event.finish();return;}');
}
else{
for(k=1;k<99;k++){
if(str.indexOf('step '+k)==-1) break;
str=str.replace(new RegExp("'step "+k+"'",'g'),"break;case "+k+":");
str=str.replace(new RegExp('"step '+k+'"','g'),"break;case "+k+":");
}
str=str.replace(/'step 0'|"step 0"/,'if(event.step=='+k+') {event.finish();return;}switch(step){case 0:');
}
str+='})';
return str;
},
parsex:function(func){
var str=func.toString();
str=str.slice(str.indexOf('{')+1);
@ -10569,7 +10557,7 @@
break;
}
};
document.addEventListener(lib.config.touchscreen?'touchend':'click',click);
document.addEventListener(lib.config.touchscreen?'touchstart':'mousedown',click);
game.pause();
game.countChoose();
@ -12720,9 +12708,33 @@
if(ok){
ui.click.ok();
}
else if(ai.basic.chooseCard(event.ai)){
ui.click.ok();
event._aiexcludeclear=true;
else if(ai.basic.chooseCard(event.ai1||event.ai)){
if(ai.basic.chooseTarget(event.ai2)){
ui.click.ok();
event._aiexcludeclear=true;
}
else{
if(!event.norestore){
if(event.skill){
var skill=event.skill;
ui.click.cancel();
event._aiexclude.add(skill);
var info=get.info(skill);
if(info.sourceSkill){
event._aiexclude.add(info.sourceSkill);
}
}
else{
get.card(true).aiexclude();
game.uncheck();
}
event.redo();
game.resume();
}
else{
ui.click.cancel();
}
}
}
else if(event.skill&&!event.norestore){
var skill=event.skill;
@ -15895,11 +15907,18 @@
},get.delayx(gain2t,gain2t));
}
else if(event.source&&(event.animate=='give'||event.animate=='giveAuto')){
if(event.animate=='give') event.source['$'+event.animate](cards,player);
var evtmap=event.relatedLose;
if(event.animate=='give'){
if(evtmap&&evtmap.cards&&evtmap.cards.length>0) event.source.$give(evtmap.cards,player);
else event.source.$give(cards,player);
}
else{
var givemap={hs:[],ots:[]};
for(var i=0;i<cards.length;i++){
givemap[event.relatedLose&&event.relatedLose.hs&&event.relatedLose.hs.contains(cards[i])?'hs':'ots'].push(cards[i]);
if(evtmap&&evtmap.hs&&evtmap.cards){
for(var i=0;i<cards.length;i++){
if(evtmap.hs.contains(cards[i])) givemap.hs.push(cards[i]);
else if(evtmap.cards.contains(cards[i])) givemap.ots.push(cards[i]);
}
}
if(givemap.hs.length) event.source.$giveAuto(givemap.hs,player);
if(givemap.ots.length) event.source.$give(givemap.ots,player);
@ -18270,14 +18289,14 @@
if(i=='global'){
lib.skill.global=skills[i];
}
else if(i=='skillinfo'){
for(var j in skills[i]){
if(!lib.skill[j]){
lib.skill[j]={};
}
lib.skill[j].chooseButton=skills[i][j];
}
}
//else if(i=='skillinfo'){
// for(var j in skills[i]){
// if(!lib.skill[j]){
// lib.skill[j]={};
// }
// lib.skill[j].chooseButton=skills[i][j];
// }
//}
else if(i=='stat'){
this.stat=[skills.stat];
}
@ -19425,6 +19444,7 @@
}
}
next.position='hs';
if(next.ai2==undefined) next.ai2=(()=>1);
next.setContent('chooseToRespond');
next._args=Array.from(arguments);
return next;
@ -20843,6 +20863,7 @@
give:function(cards,target,visible){
var next=target.gain(cards,this);
next.animate=visible?'give':'giveAuto';
next.giver=this;
},
lose:function(){
var next=game.createEvent('lose');
@ -21600,66 +21621,68 @@
else if(info&&info.logv!==false){
game.logv(this,name,targets);
}
var player=this;
var players=player.getSkills(null,false,false);
var equips=player.getSkills('e');
var global=lib.skill.global.slice(0);
var logInfo={
skill:name,
targets:targets,
event:_status.event,
};
if(info.sourceSkill){
logInfo.sourceSkill=name;
if(global.contains(name)){
logInfo.type='global';
}
else if(players.contains(name)){
logInfo.type='player';
}
else if(equips.contains(name)){
logInfo.type='equip';
}
}
else{
if(global.contains(name)){
if(info){
var player=this;
var players=player.getSkills(null,false,false);
var equips=player.getSkills('e');
var global=lib.skill.global.slice(0);
var logInfo={
skill:name,
targets:targets,
event:_status.event,
};
if(info.sourceSkill){
logInfo.sourceSkill=name;
logInfo.type='global';
}
else if(players.contains(name)){
logInfo.sourceSkill=name;
logInfo.type='player';
}
else if(equips.contains(name)){
logInfo.sourceSkill=name;
logInfo.type='equip';
if(global.contains(name)){
logInfo.type='global';
}
else if(players.contains(name)){
logInfo.type='player';
}
else if(equips.contains(name)){
logInfo.type='equip';
}
}
else{
var bool=false;
for(var i of players){
var expand=[i];
game.expandSkills(expand);
if(expand.contains(name)){
bool=true;
logInfo.sourceSkill=i;
logInfo.type='player';
break;
}
if(global.contains(name)){
logInfo.sourceSkill=name;
logInfo.type='global';
}
if(!bool){
else if(players.contains(name)){
logInfo.sourceSkill=name;
logInfo.type='player';
}
else if(equips.contains(name)){
logInfo.sourceSkill=name;
logInfo.type='equip';
}
else{
var bool=false;
for(var i of players){
var expand=[i];
game.expandSkills(expand);
if(expand.contains(name)){
bool=true;
logInfo.sourceSkill=i;
logInfo.type='equip';
logInfo.type='player';
break;
}
}
if(!bool){
for(var i of players){
var expand=[i];
game.expandSkills(expand);
if(expand.contains(name)){
logInfo.sourceSkill=i;
logInfo.type='equip';
break;
}
}
}
}
}
player.getHistory('useSkill').push(logInfo);
}
player.getHistory('useSkill').push(logInfo);
if(this._hookTrigger){
for(var i=0;i<this._hookTrigger.length;i++){
var info=lib.skill[this._hookTrigger[i]].hookTrigger;
@ -29665,7 +29688,9 @@
game.ws.close();
delete game.ws;
}
game.ws=new WebSocket('ws://'+ip+'');
var str='';
if(ip.indexOf('wss://')!=0&&ip.indexOf('ws://')!=0) str=(get.config('wss_mode','connect')?'wss://':'ws://');
game.ws=new WebSocket(str+ip+'');
}
catch(e){
alert('错误:无效联机地址');
@ -42257,7 +42282,17 @@
});
}
else{
lib.init.js(extensionURL.replace(/raw\.githubusercontent\.com/,'rawgit.com')+'catalog.js',null,loaded,function(){
lib.init.req(extensionURL.replace(/raw\.githubusercontent\.com/,'rawgit.com')+'catalog.js',function(){
try{
eval(this.responseText);
}
catch(e){
delete window.extension;
loading.innerHTML='连接失败';
return;
}
loaded();
},function(){
delete window.extension;
loading.innerHTML='连接失败';
});
@ -51445,11 +51480,11 @@
storage:lib.playerOL[i].storage,
}
}
for(var i in lib.skill){
if(lib.skill[i].chooseButton&&lib.skill[i].enable){
skillinfo[i]=lib.skill[i].chooseButton;
}
}
//for(var i in lib.skill){
// if(lib.skill[i].chooseButton&&lib.skill[i].enable){
// skillinfo[i]=lib.skill[i].chooseButton;
// }
//}
skills.skillinfo=skillinfo;
if(player){
skills.stat=player.getStat();

View File

@ -1,30 +1,29 @@
window.noname_update={
version:'1.9.115',
update:'1.9.114.4.1',
version:'1.9.115.1',
update:'1.9.115',
changeLog:[
'OL神孙权',
'十周年神马超、界沮授',
'移动版谋黄忠、谋华雄、谋于禁',
'阮籍、臧洪入选稿公布',
'十周年界公孙瓒、界杜畿、界刘谌、黄祖、羊祜',
'技能调整与bug修复',
],
files:[
//'card/extra.js',
'card/gujian.js',
'card/guozhan.js',
'card/extra.js',
//'card/gujian.js',
//'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
//'card/mtg.js',
//'card/sp.js',
'card/standard.js',
//'card/standard.js',
//'card/swd.js',
//'card/yunchou.js',
'card/yingbian.js',
//'card/yingbian.js',
//'card/yongjian.js',
//'card/zhenfa.js',
//'card/zhulu.js',
'character/diy.js',
'character/extra.js',
'character/hearth.js',
//'character/hearth.js',
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
@ -36,17 +35,17 @@ window.noname_update={
'character/rank.js',
'character/refresh.js',
'character/sb.js',
//'character/shenhua.js',
'character/shenhua.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
'character/standard.js',
//'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
'character/xinghuoliaoyuan.js',
//'character/yingbian.js',
'character/yijiang.js',
'character/yxs.js',
//'character/yxs.js',
//'extension/boss/extension.js',
//'layout/default/layout.css',
//'layout/newlayout/global.css',
@ -58,7 +57,7 @@ window.noname_update={
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
//'mode/guozhan.js',
'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
//'mode/stone.js',
@ -68,9 +67,9 @@ window.noname_update={
//'game/keyWords.js',
//'game/NoSleep.js',
'game/config.js',
'game/package.js',
//'game/package.js',
//'game/asset.js',
'game/source.js',
//'game/source.js',
//'theme/style/hp/custom.css',
//'theme/style/hp/emotion.css',
//'theme/style/hp/glass.css',

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

BIN
image/character/re_duji.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 77 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@ -363,7 +363,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
guozhan_single:['gz_re_xushu','gz_yanbaihu','gz_wujing','gz_dongzhao','gz_huangzu','gz_zhugeke','gz_liuba','gz_zhuling'],
guozhan_double:['gz_tangzi','gz_liuqi','gz_mengda','gz_mifangfushiren','gz_zhanglu','gz_shixie','gz_xuyou','gz_xiahouba','gz_panjun','gz_xf_sufei','gz_wenqin','gz_pengyang'],
guozhan_yexinjia:['gz_zhonghui','gz_simazhao','gz_gongsunyuan','gz_sunchen'],
guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi','gz_re_xunchen'],
guozhan_zongheng:['gz_huaxin','gz_luyusheng','gz_zongyu','gz_miheng','gz_fengxi','gz_dengzhi','gz_re_xunchen','gz_dc_yanghu'],
guozhan_others:["gz_lingcao","gz_lifeng","gz_beimihu","gz_jianggan","gz_key_ushio","gz_sp_duyu","gz_re_nanhualaoxian","gz_zhouyi","gz_lvlingqi","gz_liaohua","gz_zhugejin","gz_yangxiu","gz_chendao","gz_fuwan","gz_zumao"],
}
},
@ -519,6 +519,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
gz_zhouyi:['female','wu',3,['gzzhukou','gzduannian','gzlianyou']],
gz_re_xunchen:['male','qun',3,['gzfenglve','gzanyong']],
gz_lvlingqi:['female','qun',4,['guowu','gzshenwei','gzzhuangrong']],
gz_dc_yanghu:['male','wei',3,['gzdeshao','gzmingfa']],
gz_cuimao:['male','wei',3,['gzzhengbi','gzfengying'],[]],
gz_yujin:['male','wei',4,['gzjieyue'],['gzskin']],
@ -555,6 +556,75 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
}
},
skill:{
//十周年羊祜
gzdeshao:{
audio:'dcdeshao',
trigger:{target:'useCardToTargeted'},
preHidden:true,
countUnseen:function(player){
var num=0;
if(player.isUnseen(0)) num++;
if(player.isUnseen(1)) num++;
return num;
},
filter:function(event,player){
if(player==event.player||event.targets.length!=1||get.color(event.card)!='black') return false;
if(lib.skill.gzdeshao.countUnseen(event.player)<lib.skill.gzdeshao.countUnseen(player)||!event.player.countCards('he')) return false;
return player.getHistory('useSkill',function(evt){
return evt.skill=='gzdeshao';
}).length<player.hp;
},
check:function(event,player){
return get.effect(event.player,{name:'guohe_copy2'},player,player)>0;
},
logTarget:'player',
content:function(){
player.discardPlayerCard(trigger.player,true,'he');
},
},
gzmingfa:{
audio:'dcmingfa',
enable:'phaseUse',
usable:1,
filterTarget:function(card,player,target){
return player!=target&&target.isEnemyOf(player);
},
content:function(){
player.markAuto('gzmingfa',targets);
game.delayx();
},
onremove:true,
ai:{
order:1,
result:{target:-1},
},
group:'gzmingfa_effect',
subSkill:{
effect:{
audio:'dcmingfa',
trigger:{global:'phaseEnd'},
forced:true,
filter:function(event,player){
return player.getStorage('gzmingfa').contains(event.player);
},
logTarget:'player',
content:function(){
var target=trigger.player;
player.unmarkAuto('gzmingfa',[target]);
if(target.isIn()){
var num=player.countCards('h')-target.countCards('h');
if(num>0){
target.damage();
player.gainPlayerCard(target,true,'h');
}
else if(num<0){
player.draw(Math.min(5,-num));
}
}
},
},
},
},
//海外服国战
//杨修
gzdanlao:{
@ -567,6 +637,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
},
gzjilei:{
inherit:'jilei',
preHidden:true,
content:function(){
'step 0'
player.chooseControl('basic','trick','equip','cancel2',function(){
@ -9086,223 +9157,90 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
ai:{
threaten:2,
},
group:['zhangwu_gain','zhangwu_clear','zhangwu_count1','zhangwu_count2','zhangwu_count3'],
subSkill:{
gain:{
audio:'zhangwu',
trigger:{global:['discardAfter','respondAfter','useCardAfter','equipAfter',
'judgeAfter','useSkillAfter','phaseDrawBegin','phaseAfter']},
forced:true,
filter:function(event,player){
if(player.storage.zhangwu){
for(var i=0;i<player.storage.zhangwu.length;i++){
if(get.owner(player.storage.zhangwu[i])==player) continue;
var position=get.position(player.storage.zhangwu[i]);
if(position&&position!='s'&&position!='c'){
return true;
}
}
}
if(event.name=='equip'&&player!=event.player&&event.card.name=='feilongduofeng') return true;
//if(game.hasPlayer(function(current){
// return current!=player&&current.getEquip('feilongduofeng');
//})){
// return true;
//}
if(['discard','respond','useCard'].contains(event.name)&&event.cards){
for(var i=0;i<event.cards.length;i++){
if(event.cards[i].name=='feilongduofeng'&&get.position(event.cards[i])=='d'){
return true;
}
}
}
for(var i=0;i<ui.discardPile.childElementCount;i++){
if(ui.discardPile.childNodes[i].name=='feilongduofeng') return true;
trigger:{
global:['loseAfter','cardsDiscardAfter','equipAfter'],
},
forced:true,
filter:function(event,player){
if(event.name=='equip'){
if(player==event.player) return false;
if(event.card.name=='feilongduofeng'&&event.player.getCards('e').contains(event.card)) return true;
return event.player.hasHistory('lose',function(evt){
if(evt.position!=ui.discardPile||evt.getParent().name!='equip') return false;
for(var i of evt.cards){
if(i.name=='feilongduofeng'&&get.position(i,true)=='d') return true;
}
return false;
},
content:function(){
'step 0'
if(trigger.name=='equip'||trigger.name=='respond'||trigger.delay==false) game.delay();
'step 1'
var list=[];
/*game.countPlayer(function(current){
if(current!=player){
var es=current.getEquip('feilongduofeng');
if(es){
list.add(es);
}
}
});*/
if(trigger.name=='equip'&&player!=trigger.player) list.add(trigger.card);
if(['discard','respond','useCard'].contains(trigger.name)&&trigger.cards){
for(var i=0;i<trigger.cards.length;i++){
if(trigger.cards[i].name=='feilongduofeng'&&get.position(trigger.cards[i])=='d'){
trigger.cards[i].fix();
list.add(trigger.cards[i]);
ui.special.appendChild(trigger.cards[i]);
}
}
})
}
if(event.name=='lose'&&(event.position!=ui.discardPile||event.getParent().name=='equip')) return false;
for(var i of event.cards){
if(i.name=='feilongduofeng'&&get.position(i,true)=='d') return true;
}
return false;
},
logTarget:function(event,player){
if(event.name=='equip'&&event.card.name=='feilongduofeng'&&event.player.getCards('e').contains(event.card)) return event.player;
return [];
},
content:function(){
game.delayx();
var cards=[];
if(trigger.name=='equip'){
if(trigger.card.name=='feilongduofeng'&&trigger.player.getCards('e').contains(trigger.card)) cards.push(trigger.card);
trigger.player.getHistory('lose',function(evt){
if(evt.position!=ui.discardPile||evt.getParent()!=trigger) return false;
for(var i of evt.cards){
if(i.name=='feilongduofeng'&&get.position(i,true)=='d') cards.push(i);
}
for(var i=0;i<ui.discardPile.childElementCount;i++){
if(ui.discardPile.childNodes[i].name=='feilongduofeng'){
list.add(ui.discardPile.childNodes[i]);
ui.special.appendChild(ui.discardPile.childNodes[i]);
}
}
var list2=[];
if(player.storage.zhangwu){
for(var i=0;i<list.length;i++){
if(player.storage.zhangwu.contains(list[i])){
player.storage.zhangwu.remove(list[i]);
list2.add(list[i]);
list.splice(i--,1);
}
}
for(var i=0;i<player.storage.zhangwu.length;i++){
if(get.owner(player.storage.zhangwu[i])==player) continue;
var position=get.position(player.storage.zhangwu[i]);
if(position&&position!='s'&&position!='c'){
list2.add(player.storage.zhangwu[i]);
}
}
}
if(list.length){
player.gain(list);
var owner=get.owner(list[0]);
if(trigger.name!='respond'&&owner){
player.line(owner,'green');
owner.$give(list,player);
}
else{
player.$gain2(list,true);
}
event.delay=true;
}
if(list2.length){
player.showCards(get.translation(player)+'发动了【章武】',list2);
for(var i=0;i<list2.length;i++){
var owner=get.owner(list2[i]);
if(owner){
owner.lose(list2[i],ui.special);
event.delay=true;
}
}
event.list2=list2;
}
'step 2'
if(event.delay){
game.delay();
}
'step 3'
if(event.list2&&event.list2.length){
for(var i=0;i<event.list2.length;i++){
event.list2[i].fix();
ui.cardPile.appendChild(event.list2[i]);
}
game.log(player,'将',event.list2,'置于牌堆底');
player.draw(2);
}
}
},
count1:{
trigger:{player:'loseAfter'},
silent:true,
filter:function(event,player){
if(event.type!='gain'&&event.type!='equip') return true;
if(event.parent.player==player) return true;
return false;
},
content:function(){
if(!player.storage.zhangwu){
player.storage.zhangwu=[];
}
for(var i=0;i<trigger.stockcards.length;i++){
if(trigger.stockcards[i].name=='feilongduofeng'){
player.storage.zhangwu.add(trigger.stockcards[i]);
}
}
}
},
count2:{
audio:'zhangwu',
trigger:{player:'loseAfter'},
forced:true,
filter:function(event,player){
if(lib.skill.zhangwu_count1.filter(event,player)){
return false;
}
for(var i=0;i<event.stockcards.length;i++){
if(event.stockcards[i].name=='feilongduofeng'){
return true;
}
}
},
content:function(){
'step 0'
var list=[];
for(var i=0;i<trigger.stockcards.length;i++){
if(trigger.stockcards[i].name=='feilongduofeng'){
list.add(trigger.stockcards[i]);
}
}
if(list.length){
if(trigger.type=='gain'){
for(var i=0;i<list.length;i++){
trigger.parent.cards.remove(list[i]);
}
}
else if(trigger.type=='equip'){
trigger.parent.cancelled=true;
}
player.showCards(get.translation(player)+'发动了【章武】',list);
event.list=list;
}
else{
event.finish();
}
'step 1'
for(var i=0;i<event.list.length;i++){
event.list[i].fix();
ui.cardPile.appendChild(event.list[i]);
}
game.log(player,'将',event.list,'置于牌堆底');
player.draw(2);
}
},
count3:{
audio:'zhangwu',
trigger:{global:'equipBefore'},
forced:true,
filter:function(event,player){
return event.card&&event.card.name=='feilongduofeng'&&event.player!=player&&
player.storage.zhangwu&&player.storage.zhangwu.contains(event.card);
},
content:function(){
'step 0'
trigger.cancel();
trigger.card.fix();
player.showCards(get.translation(player)+'发动了【章武】',[trigger.card]);
var owner=get.owner(trigger.card);
if(owner){
owner.lose(trigger.card,ui.special);
}
player.storage.zhangwu.remove(trigger.card);
'step 1'
trigger.card.fix();
ui.cardPile.appendChild(trigger.card);
game.log(player,'将',trigger.card,'置于牌堆底');
player.draw(2);
}
},
clear:{
trigger:{global:'phaseAfter'},
silent:true,
content:function(){
delete player.storage.zhangwu;
})
};
if(trigger.name=='lose'){
for(var i of trigger.cards){
if(i.name=='feilongduofeng'&&get.position(i,true)=='d') cards.push(i);
}
}
}
var owner=get.owner(cards[0]);
if(owner) player.gain(cards,'give',owner);
else player.gain(cards,'gain2');
},
group:'zhangwu_draw',
subSkill:{
draw:{
audio:'zhangwu',
trigger:{
player:'loseEnd',
global:['equipEnd','addJudgeEnd','gainEnd','loseAsyncEnd','addToExpansionEnd'],
},
filter:function(event,player){
if(event.name=='lose'&&event.getParent().name=='useCard') return false;
var evt=event.getl(player);
return evt&&evt.player==player&&evt.cards2.filter(function(i){
return i.name=='feilongduofeng'&&get.owner(i)!=player;
}).length>0;
},
forced:true,
content:function(){
'step 0'
var cards=[],evt=trigger.getl(player);
cards.addArray(evt.cards2.filter(function(i){
return i.name=='feilongduofeng'&&get.owner(i)!=player;
}));
player.showCards(cards,get.translation(player)+'发动了【章武】');
for(var i of cards){
var owner=get.owner(i);
if(owner) owner.lose(i,ui.cardPile)._triggered=null;
else{
i.fix();
ui.cardPile.appendChild(i);
}
}
'step 1'
player.draw(2);
},
},
},
},
shouyue:{
unique:true,
@ -10411,6 +10349,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
list[i].setIdentity();
}
},yelist,player.group);
game.tryResult();
}
else event.finish();
'step 2'
@ -11652,6 +11591,10 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
quanjin_info:'出牌阶段限一次,你可将一张手牌交给一名本回合内受到过伤害其他角色,然后令其执行一项“军令”。若其执行,则你摸一张牌。若其不执行,则你将手牌摸至与全场最多相等(至多摸五张)。',
zaoyun:'凿运',
zaoyun_info:'出牌阶段限一次你可以弃置X张牌并选择一名距离为X+1的敌方角色。你对其造成1点伤害且至其的距离视为1至回合结束。',
gzdeshao:'德劭',
gzdeshao_info:'每回合限X次X为你的体力值。其他角色使用黑色牌指定你为唯一目标后若其暗置的武将牌数大于等于你则你可以弃置其一张牌。',
gzmingfa:'明伐',
gzmingfa_info:'出牌阶段限一次你可以选择一名敌方角色。该角色的下个回合结束时若其手牌数小于你你对其造成1点伤害并获得其一张手牌大于你你摸X张牌X为你与其的手牌数之差且至多为5。',
gz_cuimao:'崔琰毛玠',
gzzhengbi:'征辟',
@ -11847,7 +11790,7 @@ game.import('mode',function(lib,game,ui,get,ai,_status){
wuhujiangdaqi_bg:'旗',
wuhujiangdaqi_info:'存活的蜀势力角色的技能按以下规则改动:<br><strong>武圣</strong>:将“红色牌”改为“任意牌”<br><strong>咆哮</strong>:增加描述“你使用的【杀】无视其他角色的防具”<br><strong>龙胆</strong>:增加描述“你发动〖龙胆〗使用或打出牌时摸一张牌”<br><strong>烈弓</strong>:增加描述“你的攻击范围+1”<br><strong>铁骑</strong>:将“一张明置的武将牌”改为“所有明置的武将牌”',
zhangwu:'章武',
zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区时,你获得之。当你失去【飞龙夺风】时,展示之,然后将此牌置于牌堆底并摸两张牌',
zhangwu_info:'锁定技。当【飞龙夺凤】进入弃牌堆或其他角色的装备区后,你获得之。当你不因使用而失去【飞龙夺风】时,你展示此牌,将此牌置于牌堆底并摸两张牌',
shouyue:'授钺',
shouyue_info:'君主技。只要此武将牌处于明置状态,你便拥有“五虎将大旗”。',
jizhao:'激诏',