孙翎鸾, 乐綝, audio for Yusa and Shiina

This commit is contained in:
Spmario233 2023-08-22 01:10:55 +08:00
parent fe369f23f1
commit 3f5f5f61e6
15 changed files with 212 additions and 23 deletions

BIN
audio/die/key_abyusa.mp3 Normal file

Binary file not shown.

BIN
audio/die/key_shiina.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.

View File

@ -6472,6 +6472,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
group:'abyusa_jueqing_rewrite',
subSkill:{
rewrite:{
audio:'abyusa_jueqing',
trigger:{source:'damageBefore'},
forced:true,
charlotte:true,
@ -6518,6 +6519,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
abyusa_dunying:{
audio:2,
trigger:{player:['phaseZhunbeiBegin','phaseJieshuBegin']},
forced:true,
filter:function(event,player){
@ -9476,6 +9478,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
shiina_qingshen:{
audio:1,
trigger:{
player:'damageEnd',
source:'damageSource',
@ -9522,6 +9525,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
shiina_feiyan:{
audio:1,
animalList:['key_inari','key_doruji'],
trigger:{global:'phaseBegin'},
direct:true,
@ -9555,6 +9559,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
shiina_retieji:{
audio:1,
shaRelated:true,
trigger:{player:'useCardToPlayered'},
check:function(event,player){

View File

@ -7,7 +7,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dc_wuban:['male','shu',4,['dcyouzhan'],['clan:陈留吴氏','unseen']],
yue_caiwenji:['female','qun',3,['dcshuangjia','dcbeifen']],
liuchongluojun:['male','qun',3,['dcminze','dcjini']],
yuechen:['male','wei',4,['dcporui','dcgonghu'],['unseen']],
yuechen:['male','wei',4,['dcporui','dcgonghu']],
zhangkai:['male','qun',4,['dcxiangshu']],
gaoxiang:['male','shu',4,['dcchiying'],['unseen']],
yuanyin:['male','qun',3,['dcmoshou','dcyunjiu'],['unseen']],
@ -618,10 +618,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
trigger:{global:'phaseJieshuBegin'},
filter:function(event,player){
if(player==event.player) return false;
if(player.hasSkill('dcporui_round')) return false;
if(player.countMark('dcporui_round')>=(player.hasMark('dcgonghu_basic')?2:1)||player.countCards('h')==0) return false;
return game.hasPlayer(current=>{
if(current==player||current==event.player) return false;
return current.getHistory('lose').length>0;
return current.hasHistory('lose',function(evt){
return evt.cards.length>0;
});
})&&(_status.connectMode||player.hasCard({type:'basic'},'h'));
},
direct:true,
@ -638,7 +640,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
selectCard:1,
targets:game.filterPlayer(current=>{
if(current==player||current==trigger.player) return false;
return current.getHistory('lose').length>0;
return current.hasHistory('lose',function(evt){
return evt.cards.length>0;
});
}),
filterTarget:function(card,player,target){
return _status.event.targets.contains(target);
@ -656,9 +660,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
event.target=target;
player.logSkill('dcporui',target);
player.discard(cards);
event.num2=Math.max(0,player.hp);
event.num2=Math.min(5,target.getHistory('lose').reduce(function(num,evt){
return num=evt.cards2.length;
},0));
event.num=event.num2+1;
player.addTempSkill('dcporui_round','roundStart');
player.addMark('dcporui_round',1,false);
}
else event.finish();
'step 2'
@ -677,11 +684,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
else if(cards.length<=event.num2) event._result={bool:true,cards:cards};
else player.chooseCard('破锐:交给'+get.translation(target)+get.cnNumber(event.num2)+'张手牌',true,event.num2);
}
else event.goto(6)
else event.finish();
'step 5'
if(result.bool){
player.give(result.cards,target);
}
event.finish();
'step 6'
if(player.hasMark('dcgonghu_basic')){
if(!target.hasHistory('damage',evt=>{
@ -692,7 +700,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
subSkill:{
round:{charlotte:true}
round:{charlotte:true,onremove:true}
},
ai:{
expose:0.4,
@ -708,13 +716,24 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
forced:true,
filter:function(event,player){
if(!_status.currentPhase||_status.currentPhase==player) return false;
if(event.name=='damage'){
if(player.hasMark('dcgonghu_damage')) return false;
return _status.currentPhase&&_status.currentPhase!=player;
var num=0;
player.getHistory('damage',evt=>num+=evt.num);
player.getHistory('sourceDamage',evt=>num+=evt.num);
return num>1;
}
if(player.hasMark('dcgonghu_basic')) return false;
var evt=event.getl(player);
return evt&&evt.cards2&&evt.cards2.some(i=>get.type2(i,player)=='basic');
if(!evt||!evt.cards2||!evt.cards2.some(i=>get.type2(i,player)=='basic')) return false;
var num=0;
player.getHistory('lose',function(evtx){
if(num<2){
if(evtx&&evtx.cards2) num+=evtx.cards2.filter(i=>get.type2(i,player)=='basic').length;
}
});
return num>=2;
},
group:['dcgonghu_basic','dcgonghu_trick'],
content:function(){
@ -9817,7 +9836,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return str;
},
dcporui:function(player){
return '每轮限一次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':'然后你交给其X张手牌')+'X为你的体力值)。'+(player.hasMark('dcgonghu_basic')?'若其没有因此受到伤害你回复1点体力。':'');
return '每轮限'+(player.hasMark('dcgonghu_basic')?'两':'')+'次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】'+(player.hasMark('dcgonghu_damage')?'':'然后你交给其X张手牌')+'X为其本回合失去的牌数且至多为5。';
},
},
perfectPair:{},
@ -10236,9 +10255,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcjini_info:'当你受到伤害后你可以重铸至多Y张手牌Y为你的体力上限减本回合你以此法重铸过的牌数。若你以此法获得了【杀】你可以对伤害来源使用一张无视距离且不可被响应的【杀】。',
yuechen:'乐綝',
dcporui:'破锐',
dcporui_info:'每轮限一次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】然后你交给其X张手牌X为你的体力值)。',
dcporui_info:'每轮限一次。其他角色的结束阶段你可以弃置一张基本牌并选择另一名于此回合内失去过牌的其他角色你视为对其依次使用X+1张【杀】然后你交给其X张手牌X为其本回合失去的牌数且至多为5)。',
dcgonghu:'共护',
dcgonghu_info:'锁定技。①当你于回合外失去基本牌后你于〖破锐〗后增加“若其没有因此受到伤害你回复1点体力”。②当你于回合外造成或受到伤害后你删除〖破锐〗中的“然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
dcgonghu_info:'锁定技。你的回合外①当你失去基本牌后若你本回合内失去基本牌的数量大于1你将〖破锐〗改为每轮限两次。②当你造成或受到伤害后若你本回合内造成或受到的伤害大于1你删除〖破锐〗中的“然后你交给其X张手牌”。③当你使用红色基本牌/红色普通锦囊牌时,若你已发动过〖共护①〗和〖共护②〗,则此牌不可被响应/可额外增加一个目标。',
yue_caiwenji:'乐蔡琰',
dcshuangjia:'霜笳',
dcshuangjia_tag:'胡笳',

View File

@ -4,6 +4,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
name:'xianding',
connect:true,
character:{
sunlingluan:['female','wu',3,['dclingyue','dcpandi']],
dc_duyu:['male','wei',4,['dcjianguo','dcdyqingshi']],
ganfurenmifuren:['female','shu',3,['dcchanjuan','dcxunbie']],
dc_ganfuren:['female','shu',3,['dcshushen','dcshenzhi']],
@ -77,7 +78,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
sp2_huangjia:['caomao','liubian','dc_liuyu','quanhuijie','dingshangwan','yuanji','xielingyu','sunyu','ganfurenmifuren','dc_ganfuren','dc_mifuren'],
sp2_zhangtai:['guozhao','fanyufeng','ruanyu','yangwan','re_panshu'],
sp2_jinse:['caojinyu','re_sunyi','re_fengfangnv','caohua','laiyinger','zhangfen'],
sp2_yinyu:['zhouyi','luyi'],
sp2_yinyu:['zhouyi','luyi','sunlingluan'],
sp2_doukou:['re_xinxianying','huaman','xuelingyun','dc_ruiji','duanqiaoxiao'],
sp2_jichu:['zhaoang','dc_liuye','dc_wangyun','yanghong','huanfan','xizheng'],
sp2_yuxiu:['dongguiren','dc_tengfanglan','zhangjinyun'],
@ -86,6 +87,162 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
},
skill:{
//孙翎鸾
dclingyue:{
audio:2,
trigger:{global:'damageSource'},
forced:true,
filter:function(event,player){
if(!event.source||!event.source.isIn()) return false;
var history=event.source.actionHistory;
for(var i=history.length-1;i>=0;i--){
if(i==history.length-1){
if(history[i].sourceDamage.indexOf(event)>0) return false;
}
else if(history[i].sourceDamage.some(evt=>evt!=event)) return false;
if(history[i].isRound) break;
}
return true;
},
content:function(){
var num=1,current=_status.currentPhase;
if(current&&trigger.player!=current){
var num=0,players=game.players.slice(0).concat(game.dead);
for(var target of players){
target.getHistory('sourceDamage',function(evt){
num+=evt.num;
});
}
}
player.draw(num);
},
},
dcpandi:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
var players=event.dcpandi;
if(!players||!players.length) return false;
var source=player.storage.dcpandi_effect;
return get.itemtype(source)!='player'||!source.isIn();
},
onChooseToUse:function(event){
if(!game.online&&event.type=='phase'){
var players=game.filterPlayer(function(current){
return current!=event.player&&current.getHistory('sourceDamage').length==0;
})
event.set('dcpandi',players)
}
},
filterTarget:function(card,player,target){
var players=_status.event.dcpandi;
if(!players||!players.length) return false;
return players.contains(target);
},
content:function(){
if(target.isIn()){
player.storage.dcpandi_effect=target;
player.addTempSkill('dcpandi_effect','phaseUseAfter');
}
},
subSkill:{
effect:{
audio:'dcpandi',
charlotte:true,
priority:Infinity,
onremove:true,
mark:'character',
intro:{
content:'下一张牌视为由$使用',
},
trigger:{player:'useCardBefore'},
forced:true,
filter:function(event,player){
var source=player.storage.dcpandi_effect;
return get.itemtype(source)=='player'&&source.isIn();
},
logTarget:(event,player)=>player.storage.dcpandi_effect,
content:function(){
trigger.player=player.storage.dcpandi_effect;
trigger.noai=true;
player.removeSkill('dcpandi_effect');
game.delay(0.5);
},
mod:{
selectCard:function(card,player,range){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
var range,info=get.info(card);
var select=get.copy(info.selectTarget);
if(select==undefined){
if(info.filterTarget==undefined) return [0,0];
range=[1,1];
}
else if(typeof select=='number') range=[select,select];
else if(get.itemtype(select)=='select') range=select;
else if(typeof select=='function') range=select(card,source);
game.checkMod(card,source,range,'selectTarget',source);
},
cardEnabled2:function(card,player,event){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
var check=game.checkMod(card,source,event,'unchanged','cardEnabled2',source);
return check;
},
cardEnabled:function(card,player,event){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
if(event==='forceEnable'){
var mod=game.checkMod(card,source,event,'unchanged','cardEnabled',source);
if(mod!='unchanged') return mod;
return true;
}
else{
var filter=get.info(card).enable;
if(!filter) return;
var mod=game.checkMod(card,player,source,'unchanged','cardEnabled',source);
if(mod!='unchanged') return mod;
if(typeof filter=='boolean') return filter;
if(typeof filter=='function') return filter(card,player,event);
}
},
cardUsable:function(card,player,num){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
var event=_status.event;
if(event.type=='chooseToUse_button') event=event.getParent();
if(source!=_status.event.player) return true;
if(info.updateUsable=='phaseUse'){
if(event.getParent().name!='phaseUse') return true;
if(event.getParent().player!=source) return true;
}
event.addCount_extra=true;
var num=info.usable;
if(typeof num=='function') num=num(card,source);
num=game.checkMod(card,source,num,event,'cardUsable',source);
if(typeof num!='number') return true;
if(source.countUsed(card)<num) return true;
if(game.hasPlayer(function(current){
return game.checkMod(card,source,current,false,'cardUsableTarget',source);
})){
return true;
}
return false;
},
playerEnabled:function(card,player,target){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
return lib.filter.targetEnabledx(card,source,target);
},
targetInRange:function(card,player,target){
var source=player.storage.dcpandi_effect;
if(!source.isIn()||get.itemtype(source)!='player'||get.itemtype(source.storage.dcpandi_effect)=='player') return;
return lib.filter.targetInRange(card,source,target);
},
},
},
},
},
//杜预
dcjianguo:{
audio:2,
@ -10518,7 +10675,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhangjinyun:'张瑾云张星彩的妹妹刘禅的第二任皇后238年正月立为皇后。景耀六年263年蜀汉灭亡刘禅被俘此后受封为安乐公。张皇后也随之成为安乐公夫人咸熙元年264年随刘禅到洛阳。',
duanqiaoxiao:'段巧笑,三国时代魏国魏文帝时的宫人,甚受到魏文帝的宠爱。传说她以原有的化妆品中的米粉和胡粉,再加入葵花子汁,发明了女性化妆用的脂粉。',
ruanji:'阮籍公元210年263年字嗣宗陈留尉氏今河南省开封市三国时期魏国诗人、竹林七贤之一。阮瑀之子门荫入仕累迁步兵校尉世称阮步兵。崇奉老庄之学政治上则采取谨慎避祸的态度。景元四年公元263年阮籍去世享年五十三岁。作为“正始之音”的代表著有《咏怀八十二首》、《大人先生传》等其著作收录在《阮籍集》中。',
ganfurenmifuren:'甘夫人,刘备起兵后于沛城娶之为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月刘备病死于白帝城追谥甘夫人为“昭烈皇后”。<br>糜夫人,刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。'
ganfurenmifuren:'甘夫人,刘备起兵后于沛城娶之为妾。后来,甘夫人随刘备到荆州,生了阿斗(也就是后主刘禅)。223年四月刘备病死于白帝城追谥甘夫人为“昭烈皇后”。<br>糜夫人,刘备夫人。徐州别驾糜竺之妹。长坂兵败,她怀抱年仅两岁的刘禅在乱军中走散,被赵云发现;但麋夫人因为赵云只有一匹马,不肯上马,在将阿斗托付给赵云后投井而亡。',
sunlingluan:'孙翎鸾,孙坚与妾室丁氏的女儿,孙策的妹妹,孙权、孙尚香的姐姐。孙翎年幼时曾得杜夔点化,窥得音律玄妙,丝竹八音,擅长琵琶,每次弹奏琵琶时,经常引来百鸟,称为奇观。早年孙翎鸾出游,山林巧遇葛玄,葛玄观其面相为吉,特传授修行辟谷之法,可令其身心洗涤,容颜久存。孙翎鸾有恋人名张奋,两人情投意合,可惜造化弄人,张奋病死外域,孙翎鸾倚楼盼归,日复一日、年复一年。后有五彩孔雀自东南而来,绕楼而鸣,其声如慕,孙翎鸾泪染笑靥,与孔雀耳语几句后乘翎而去。',
},
characterTitle:{
// wulan:'#b对决限定武将',
@ -11017,6 +11175,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcjianguo_info:'出牌阶段限一次。你可以选择一名角色并选择一项1.令其摸一张牌然后其弃置一半的手牌2.令其弃置一张牌,然后其摸等同于手牌数一半的牌(均向下取整)。',
dcdyqingshi:'倾势',
dcdyqingshi_info:'当你于回合内使用【杀】或普通锦囊牌指定第一个目标后若目标角色包括其他角色且此牌为你本回合使用的第X张牌你可以对其中一名不为你的目标角色造成1点伤害X为你的手牌数。',
sunlingluan:'孙翎鸾',
dclingyue:'聆乐',
dclingyue_info:'锁定技。一名角色于一轮内首次造成伤害后你摸一张牌。若此时是该角色回合外则改为摸X张牌X为本回合全场造成的伤害值。',
dcpandi:'盻睇',
dcpandi_info:'出牌阶段,你可以选择一名本回合内未造成过伤害的角色。你本阶段内使用的下一张牌改为以该角色为基准判断使用目标合法性,且使用者改为该角色。',
sp2_yinyu:'隐山之玉',
sp2_huben:'百战虎贲',

View File

@ -28463,19 +28463,19 @@
if(player==undefined) player=_status.event.player;
if(!player) return false;
if(get.itemtype(card)=='card'){
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
var mod2=game.checkMod(card,player,event,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
}
card=get.autoViewAs(card,null,player);
if(event==='forceEnable'){
var mod=game.checkMod(card,player,'unchanged','cardEnabled',player);
var mod=game.checkMod(card,player,event,'unchanged','cardEnabled',player);
if(mod!='unchanged') return mod;
return true;
}
else{
var filter=get.info(card).enable;
if(!filter) return;
var mod=game.checkMod(card,player,'unchanged','cardEnabled',player);
var mod=game.checkMod(card,player,event,'unchanged','cardEnabled',player);
if(mod!='unchanged') return mod;
if(typeof filter=='boolean') return filter;
if(typeof filter=='function') return filter(card,player,event);
@ -28492,7 +28492,7 @@
}
if(player==undefined) player=_status.event.player;
if(get.itemtype(card)=='card'){
var mod2=game.checkMod(card,player,'unchanged','cardEnabled2',player);
var mod2=game.checkMod(card,player,event,'unchanged','cardEnabled2',player);
if(mod2!='unchanged') return mod2;
}
var mod=game.checkMod(card,player,'unchanged','cardRespondable',player);
@ -28511,7 +28511,7 @@
}
var num=info.usable;
if(typeof num=='function') num=num(card,player);
num=game.checkMod(card,player,num,'cardUsable',player);
num=game.checkMod(card,player,num,event,'cardUsable',player);
if(typeof num!='number') return true;
else return(player.countUsed(card)<num);
},
@ -28529,7 +28529,7 @@
var num=info.usable;
if(typeof num=='function') num=num(card,player);
num=game.checkMod(card,player,num,'cardUsable',player);
if(typeof num!='number') return true;
if(typeof num!='number') return get.itemtype(num)=='boolean'?num:true;
if(player.countUsed(card)<num) return true;
if(game.hasPlayer(function(current){
return game.checkMod(card,player,current,false,'cardUsableTarget',player);
@ -28602,7 +28602,7 @@
var filter=info.filterTarget;
if(!info.singleCard||ui.selected.targets.length==0){
var mod=game.checkMod(card,player,target,'unchanged','playerEnabled',player);
if(mod==false) return false;
if(mod!='unchanged') return mod;
var mod=game.checkMod(card,player,target,'unchanged','targetEnabled',target);
if(mod!='unchanged') return mod;
}
@ -29773,8 +29773,10 @@
current.getStat().isRound=true;
}
};
player.getHistory().isMe=true;
player.getStat().isMe=true;
if(!player.phaseSkipped){
player.getHistory().isMe=true;
player.getStat().isMe=true;
}
if(isRound){
game.getGlobalHistory().isRound=true;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 178 KiB

BIN
image/character/yuechen.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 180 KiB