This commit is contained in:
Spmario233 2022-08-18 22:57:28 +08:00
parent 28cca71a60
commit 79f93bed23
95 changed files with 2099 additions and 463 deletions

BIN
audio/die/ol_lusu.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/die/re_jiaxu.mp3 Normal file

Binary file not shown.

BIN
audio/die/re_jushou.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_huangzhong.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_huaxiong.mp3 Normal file

Binary file not shown.

BIN
audio/die/sb_yujin.mp3 Normal file

Binary file not shown.

BIN
audio/die/shen_machao.mp3 Normal file

Binary file not shown.

BIN
audio/die/shen_sunquan.mp3 Normal file

Binary file not shown.

BIN
audio/die/tengfanglan.mp3 Normal file

Binary file not shown.

BIN
audio/die/weizi.mp3 Normal file

Binary file not shown.

BIN
audio/skill/aichen1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/aichen2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjianying1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcjianying2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshibei1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dcshibei2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dili1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/dili2.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.

BIN
audio/skill/hengwu1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/hengwu2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/huaping.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/liejie1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/liejie2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/luochong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/luochong2.mp3 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
audio/skill/qibaodao2.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.

BIN
audio/skill/rw_tengjia1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/rw_tengjia2.mp3 Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/skill/sbjieyue1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbjieyue2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbjieyue3.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbjieyue4.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbliegong1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbliegong2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbxiayuan1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbxiayuan2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbyangwei1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/sbyangwei2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/shouli1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/shouli2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuanzi1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuanzi2.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuheng1.mp3 Normal file

Binary file not shown.

BIN
audio/skill/yuheng2.mp3 Normal file

Binary file not shown.

View File

@ -384,19 +384,21 @@ game.import('card',function(lib,game,ui,get,ai,_status){
equipValue:4
}
},
yuheng:{
yuheng:{fullskin:true},
gjyuheng:{
fullskin:true,
cardimage:'yuheng',
type:'equip',
subtype:'equip5',
nopower:true,
nomod:true,
unique:true,
skills:['yuheng_skill'],
skills:['gjyuheng_skill'],
ai:{
equipValue:6
}
},
yuheng_plus:{
gjyuheng_plus:{
fullskin:true,
type:'equip',
subtype:'equip5',
@ -405,12 +407,12 @@ game.import('card',function(lib,game,ui,get,ai,_status){
nomod:true,
epic:true,
cardimage:'yuheng',
skills:['yuheng_plus_skill'],
skills:['gjyuheng_plus_skill'],
ai:{
equipValue:7
}
},
yuheng_pro:{
gjyuheng_pro:{
fullskin:true,
type:'equip',
subtype:'equip5',
@ -419,7 +421,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
nomod:true,
legend:true,
cardimage:'yuheng',
skills:['yuheng_pro_skill'],
skills:['gjyuheng_pro_skill'],
ai:{
equipValue:8
}
@ -1591,7 +1593,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
},
},
},
yuheng_skill:{
gjyuheng_skill:{
enable:'phaseUse',
usable:1,
filterCard:{suit:'spade'},
@ -1621,17 +1623,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){
current[0].give(current[1].randomGet(),player,true);
}
'step 1'
var card=player.getEquip('yuheng');
var card=player.getEquip('gjyuheng');
if(card){
if(typeof card.storage.yuheng!='number'){
card.storage.yuheng=1;
if(typeof card.storage.gjyuheng!='number'){
card.storage.gjyuheng=1;
}
else{
card.storage.yuheng++;
card.storage.gjyuheng++;
}
if(card.storage.yuheng>=3){
card.init([card.suit,card.number,'yuheng_plus',card.nature]);
player.addTempSkill('yuheng_plus_temp');
if(card.storage.gjyuheng>=3){
card.init([card.suit,card.number,'gjyuheng_plus',card.nature]);
player.addTempSkill('gjyuheng_plus_temp');
}
}
},
@ -1642,8 +1644,8 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
}
},
yuheng_plus_temp:{},
yuheng_plus_skill:{
gjyuheng_plus_temp:{},
gjyuheng_plus_skill:{
enable:'phaseUse',
usable:1,
filterCard:{color:'black'},
@ -1651,7 +1653,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return 8-get.value(card);
},
filter:function(event,player){
// if(player.hasSkill('yuheng_plus_temp')) return false;
// if(player.hasSkill('gjyuheng_plus_temp')) return false;
if(!player.countCards('h',{color:'black'})) return false;
var enemies=player.getEnemies();
for(var i=0;i<enemies.length;i++){
@ -1674,16 +1676,16 @@ game.import('card',function(lib,game,ui,get,ai,_status){
current[0].give(current[1].randomGet(),player,true);
}
'step 1'
var card=player.getEquip('yuheng_plus');
var card=player.getEquip('gjyuheng_plus');
if(card){
if(typeof card.storage.yuheng!='number'){
card.storage.yuheng=1;
if(typeof card.storage.gjyuheng!='number'){
card.storage.gjyuheng=1;
}
else{
card.storage.yuheng++;
card.storage.gjyuheng++;
}
if(card.storage.yuheng>=7){
card.init([card.suit,card.number,'yuheng_pro',card.nature]);
if(card.storage.gjyuheng>=7){
card.init([card.suit,card.number,'gjyuheng_pro',card.nature]);
}
}
},
@ -1694,7 +1696,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
}
}
},
yuheng_pro_skill:{
gjyuheng_pro_skill:{
enable:'phaseUse',
filterCard:{color:'black'},
check:function(card){
@ -1723,17 +1725,17 @@ game.import('card',function(lib,game,ui,get,ai,_status){
current[0].give(current[1].randomGet(),player,true);
}
'step 1'
var card=player.getEquip('yuheng');
var card=player.getEquip('gjyuheng');
if(card){
if(typeof card.storage.yuheng!='number'){
card.storage.yuheng=1;
if(typeof card.storage.gjyuheng!='number'){
card.storage.gjyuheng=1;
}
else{
card.storage.yuheng++;
card.storage.gjyuheng++;
}
if(card.storage.yuheng>=3){
card.init([card.suit,card.number,'yuheng_plus',card.nature]);
player.addTempSkill('yuheng_plus_temp');
if(card.storage.gjyuheng>=3){
card.init([card.suit,card.number,'gjyuheng_plus',card.nature]);
player.addTempSkill('gjyuheng_plus_temp');
}
}
},
@ -1825,18 +1827,18 @@ game.import('card',function(lib,game,ui,get,ai,_status){
yunvyuanshen_info:'出牌阶段对一名角色使用,目标在下一次进入濒死状态时回复一点体力',
ziyangdan:'紫阳丹',
ziyangdan_info:'出牌阶段对一名角色使用目标获得3点护甲此后每个准备阶段失去1点护甲直到首次失去所有护甲或累计以此法失去3点护甲',
yuheng:'玉衡',
yuheng_plus:'玉衡',
yuheng_pro:'玉衡',
yuheng_skill:'玉衡',
yuheng_plus_skill:'玉衡',
yuheng_pro_skill:'玉衡',
yuheng_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)',
yuheng_plus_info:'由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”',
yuheng_pro_info:'由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制',
yuheng_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
yuheng_plus_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
yuheng_pro_skill_info:'出牌阶段限,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
gjyuheng:'玉衡',
gjyuheng_plus:'玉衡',
gjyuheng_pro:'玉衡',
gjyuheng_skill:'玉衡',
gjyuheng_plus_skill:'玉衡',
gjyuheng_pro_skill:'玉衡',
gjyuheng_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌(此牌在本局游戏中第三次和第七次发动效果后,分别自动获得一次强化)',
gjyuheng_plus_info:'由普通玉衡强化得到,将玉衡技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”',
gjyuheng_pro_info:'由普通玉衡二次强化得到,将玉横技能描述中的“弃置一张黑桃手牌”改为“弃置一张黑色手牌”,并去掉使用次数限制',
gjyuheng_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑桃手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
gjyuheng_plus_skill_info:'出牌阶段限一次,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
gjyuheng_pro_skill_info:'出牌阶段限,若敌方角色有黑桃手牌,你可以弃置一张黑色手牌,然后获得一名随机敌方角色的一张随机黑桃手牌',
shujinsan:'舒筋散',
shujinsan_info:'出牌阶段对任意角色使用,目标可弃置任意张牌,并摸等量的牌',
mutoumianju:'木头面具',
@ -1888,7 +1890,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
['heart',4,'mapodoufu'],
['spade',8,'yuanbaorou'],
['spade',7,'yuheng'],
['spade',7,'gjyuheng'],
['club',4,'mutoumianju'],
['spade',2,'heilonglinpian'],
['spade',1,'mianlijinzhen'],

View File

@ -920,14 +920,13 @@ game.import('card',function(lib,game,ui,get,ai,_status){
return true;
},
filterTarget:function(card,player,target){
if(get.mode()!='guozhan') return player!=target;
if(get.mode()!='guozhan') return target.group!=player.group;
if(target.identity=='unknown'||player.identity=='unknown') return false;
if(player==target) return false;
if(player.identity=='ye') return true;
return player.identity!=target.identity;
return player.isEnemyOf(target);
},
content:function(){
game.asyncDraw([target,player],[1,get.mode()=='guozhan'?3:1]);
target.draw(1,'nodelay');
player.draw(3);
},
ai:{
basic:{
@ -1844,8 +1843,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
huoshaolianying_info_guozhan:'出牌阶段,对你的下家和与其处于同一队列的角色使用,每名角色受到一点火焰伤害',
huoshaolianying_info:'对离你最近的一名横置角色使用(若无横置角色则改为对距离你最近的所有角色使用),对目标造成一点火焰伤害',
yuanjiao:'远交近攻',
yuanjiao_info_guozhan:'对一名不同势力的角色使用对方摸一张牌然后你摸3张牌',
yuanjiao_info:'对一名其他角色使用,你与其各摸一张牌',
yuanjiao_info:'出牌阶段,对一名与你势力不同的角色使用。其摸一张牌,然后你摸三张牌。',
yuanjiao_bg:'交',
zhibi:'知己知彼',
zhibi_info:'出牌阶段对一名其他角色使用,观看其手牌或武将牌',

View File

@ -2087,6 +2087,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
content:function(){
trigger.target.addTempSkill('qinggang2');
trigger.target.storage.qinggang2.add(trigger.card);
trigger.target.markSkill('qinggang2');
},
ai:{
unequip_ai:true,
@ -2121,7 +2122,6 @@ game.import('card',function(lib,game,ui,get,ai,_status){
player.storage.qinggang2.remove(trigger.card);
if(!player.storage.qinggang2.length) player.removeSkill('qinggang2');
},
mark:true,
marktext:'※',
intro:{content:'当前防具技能已失效'},
},

View File

@ -278,7 +278,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
if(player.countCards('he',function(cardx){
return cardx!=card;
})>0){
player.logSkill('tianjitu');
player.logSkill('tianjitu_skill');
player.chooseToDiscard(true,function(card){
return card!=_status.event.card;
},'he').set('card',card);
@ -293,7 +293,7 @@ game.import('card',function(lib,game,ui,get,ai,_status){
next.player=player;
next.setContent(function(){
if(player.countCards('h')<5){
player.logSkill('tianjitu');
player.logSkill('tianjitu_skill');
player.drawTo(5);
}
});

View File

@ -550,7 +550,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(num<=0) return [cards.length,cards.length+1];
}
return [cards.length+1,cards.length+1];
}).set('cardNumber',num).set('logSkill',['tenzen_fenghuan',trigger.player]);
}).set('cardNumber',num).set('logSkill',['tenzen_fenghuan',trigger.player]).set('effect',get.effect(trigger.player,card,player,player)).set('ai',function(card){
var eff=_status.event.effect;
if(eff<=0) return 0;
for(var i of ui.selected.cards) eff-=get.value(i)/Math.sqrt(get.number(i)/3);
return eff-get.value(card)/Math.sqrt(get.number(card)/3);
});
'step 1'
if(result.bool){
var card={
@ -565,17 +570,28 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tenzen_retianquan:{
trigger:{player:'useCardToPlayered'},
filter:function(event,player){
return event.card.name=='sha'&&(player.hp>0||player.countCards('he')>0);
return event.card.name=='sha'&&(player.hp>0||player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'tenzen_retianquan');
},'he'));
},
logTarget:'target',
usable:1,
check:function(event,player){
return get.attitude(player,event.target)<0;
if(get.attitude(player,event.target)>=0) return false;
if(player.hp>player.maxHp/2) return true;
if(player.hasCard(function(card){
return lib.filter.cardDiscardable(card,player,'tenzen_retianquan')&&get.value(card)<6;
},'he')) return true;
return true;
},
prompt2:'你可失去1点体力或弃置一张牌展示牌堆顶的三张牌若你的体力值小于体力上限的50%,则改为展示五张牌)。每有一张基本牌,其所需使用的【闪】的数量便+1。然后若此牌造成过伤害则你获得展示牌中的所有非基本牌。',
content:function(){
'step 0'
player.chooseToDiscard('弃置一张牌,或点「取消」失去一点体力','he');
player.chooseToDiscard('弃置一张牌,或点「取消」失去一点体力','he').set('goon',(player.hp>player.maxHp/2)).set('ai',function(card){
var val=get.value(card);
if(_status.event.goon) return 0.1-val;
return 6-val;
});
'step 1'
if(!result.bool) player.loseHp();
'step 2'

View File

@ -13,14 +13,16 @@ game.import('character',function(lib,game,ui,get,ai,_status){
extra_yin:['shen_liubei','shen_luxun'],
extra_lei:['shen_ganning','shen_zhangliao'],
extra_key:['key_kagari','key_shiki','db_key_hina'],
extra_decade:['shen_jiangwei'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji'],
extra_decade:['shen_jiangwei','shen_machao'],
extra_ol:['ol_zhangliao','shen_caopi','shen_zhenji','shen_sunquan'],
extra_mobilezhi:['shen_guojia','shen_xunyu'],
extra_mobilexin:['shen_taishici','shen_sunce'],
extra_offline:['shen_diaochan','boss_zhaoyun'],
},
},
character:{
shen_machao:['male','shen',4,['shouli','hengwu'],['shu']],
shen_sunquan:['male','shen',4,['dili','yuheng'],['wei']],
shen_jiangwei:['male','shen',4,['jiufa','tianren','pingxiang'],['shen']],
key_kagari:['female','shen',3,['kagari_zongsi'],['key']],
key_shiki:['female','shen','3/5',['shiki_omusubi'],['key']],
@ -65,6 +67,736 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
shouli:{
audio:2,
mod:{
cardUsable:function(card){
if(card.storage&&card.storage.shouli) return Infinity;
},
},
enable:['chooseToUse','chooseToRespond'],
hiddenCard:function(player,name){
if(player!=_status.currentPhase&&(name=='sha'||name=='shan')) return true;
},
filter:function(event,player){
if(event.responded||event.shouli||event.type=='wuxie') return false;
if(game.hasPlayer(function(current){
return current.getEquip(4);
})&&event.filterCard({
name:'sha',
storage:{shouli:true},
},player,event)) return true;
if(game.hasPlayer(function(current){
return current.getEquip(3);
})&&event.filterCard({
name:'shan',
storage:{shouli:true},
},player,event)) return true;
return false;
},
delay:false,
locked:true,
filterTarget:function(card,player,target){
var event=_status.event,evt=event;
if(event._backup) evt=event._backup;
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
if(equip3&&evt.filterCard(get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]),player,event)) return true;
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(equip4&&evt.filterCard(sha,player,event)){
if(!evt.filterTarget) return true;
return game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})
};
return false;
},
prompt:'将场上的一张坐骑牌当做【杀】或【闪】使用或打出',
content:function(){
'step 0'
var evt=event.getParent(2);
evt.set('shouli',true);
var list=[];
var equip3=target.getEquip(3);
var equip4=target.getEquip(4);
if(equip3&&evt.filterCard(get.autoViewAs({
name:'shan',
storage:{shouli:true},
},[equip3]),player,evt)) list.push('shan');
var sha=get.autoViewAs({
name:'sha',
storage:{shouli:true},
},[equip4]);
if(equip4&&evt.filterCard(sha,player,evt)){
if(!evt.filterTarget||game.hasPlayer(function(current){
return evt.filterTarget(sha,player,current);
})) list.push('sha');
};
if(list.length==1) event._result={
bool:true,
links:[list[0]=='shan'?equip3:equip4],
}
else player.choosePlayerCard(true,target,'e').set('filterButton',function(button){
var type=get.subtype(button.link);
return type=='equip3'||type=='equip4';
});
'step 1'
var evt=event.getParent(2);
if(result.bool&&result.links&&result.links.length){
var name=get.subtype(result.links[0])=='equip3'?'shan':'sha';
if(evt.name=='chooseToUse'){
game.broadcastAll(function(result,name){
lib.skill.shouli_backup.viewAs={
name:name,
cards:[result],
storage:{shouli:true},
};
lib.skill.shouli_backup.prompt=('选择'+get.translation(name)+''+get.translation(result)+')的目标');
},result.links[0],name);
evt.set('_backupevent','shouli_backup');
evt.backup('shouli_backup');
evt.set('openskilldialog','选择'+get.translation(name)+''+get.translation(result.links[0])+')的目标');
evt.set('norestore',true);
evt.set('custom',{
add:{},
replace:{window:function(){}}
});
}
else{
delete evt.result.skill;
delete evt.result.used;
evt.result.card=get.autoViewAs({
name:name,
cards:[result],
storage:{shouli:true},
},result.links);
evt.result.cards=[result.links[0]];
target.$give(result.links[0],player,false);
if(player!=target) target.addTempSkill('fengyin');
target.addTempSkill('shouli_thunder');
player.addTempSkill('shouli_thunder');
evt.redo();
return;
}
}
evt.goto(0);
},
ai:{
respondSha:true,
respondShan:true,
skillTagFilter:function(player,tag){
var subtype=(tag=='respondSha'?'equip4':'equip3');
return game.hasPlayer(function(current){
return current.getEquip(subtype);
});
},
order:2,
result:{
player:function(player,target){
var att=Math.max(8,get.attitude(player,target));
if(_status.event.type!='phase') return 9-att;
if(!player.hasValueTarget({name:'sha'})) return 0;
return 9-att;
},
},
},
group:'shouli_init',
subSkill:{
thunder:{
charlotte:true,
trigger:{player:'damageBegin1'},
forced:true,
mark:true,
content:function(){
trigger.num++;
trigger.nature='thunder';
},
marktext:'⚡',
intro:{
content:'受到的伤害+1且改为雷属性',
},
},
init:{
trigger:{
global:'phaseBefore',
player:'enterGame',
},
forced:true,
filter:function(event,player){
return event.name!='phase'||game.phaseNumber==0;
},
logTarget:()=>game.filterPlayer(),
content:function(){
'step 0'
var targets=game.filterPlayer().sortBySeat(player.getNext());
event.targets=targets;
event.num=0;
'step 1'
var target=event.targets[num];
if(target.isIn()){
var card=get.cardPile2(function(card){
if(get.cardtag(card,'gifts')) return false;
var type=get.subtype(card);
if(type!='equip3'&&type!='equip4'&&type!='equip6') return false;
return target.canUse(card,target);
});
if(card) target.chooseUseTarget(card,'nopopup','noanimate',true);
}
event.num++;
if(event.num<targets.length) event.redo();
},
},
},
},
shouli_backup:{
sourceSkill:'shouli',
precontent:function(){
'step 0'
delete event.result.skill;
var cards=event.result.card.cards;
event.result.cards=cards;
var owner=get.owner(cards[0]);
event.target=owner;
owner.$give(cards[0],player,false);
player.popup(event.result.card.name,'metal');
game.delayx();
event.getParent().addCount=false;
'step 1'
if(player!=target) target.addTempSkill('fengyin');
target.addTempSkill('shouli_thunder');
player.addTempSkill('shouli_thunder');
},
filterCard:function(){return false},
prompt:'请选择【杀】的目标',
selectCard:-1,
},
hengwu:{
audio:2,
trigger:{player:['useCard','respond']},
frequent:true,
filter:function(event,player){
var suit=get.suit(event.card);
if(!lib.suit.contains(suit)||player.hasCard(function(card){
return get.suit(card,player)==suit;
},'h')) return false;
return game.hasPlayer(function(current){
return current.hasCard(function(card){
return get.suit(card,current)==suit;
},'e')
})
},
content:function(){
var suit=get.suit(trigger.card);
player.draw(game.countPlayer(function(current){
return current.countCards('e',function(card){
return get.suit(card,current)==suit;
});
}));
},
},
changandajian_equip5:{
equipSkill:true,
mod:{maxHandcard:(player,num)=>num+2},
},
changandajian_destroy:{
trigger:{
player:'loseAfter',
global:['equipAfter','addJudgeAfter','gainAfter','loseAsyncAfter','addToExpansionAfter'],
},
forced:true,
charlotte:true,
equipSkill:true,
filter:function(event,player){
var evt=event.getl(player);
if(!evt||!evt.es||!evt.es.length) return false;
for(var i of evt.es){
if(i.name.indexOf('changandajian_equip')==0) return true;
}
return false;
},
getEffect:function(player,target){
if(player==target) return 0;
var getRaw=function(){
var att=get.attitude(player,target);
if(att>0){
if(target.countCards('j',function(card){
var cardj=card.viewAs?{name:card.viewAs}:card;
return get.effect(target,cardj,target,player)<0;
})>0) return 3;
if(target.getEquip('baiyin')&&target.isDamaged()&&
get.recoverEffect(target,player,player)>0){
if(target.hp==1&&!target.hujia) return 1.6;
}
if(target.countCards('e',function(card){
if(get.position(card)=='e') return get.value(card,target)<0;
})>0) return 1;
}
var es=target.getCards('e');
var noe=(es.length==0||target.hasSkillTag('noe'));
var noe2=(es.filter(function(esx){
return get.value(esx,target)>0;
}).length==0);
if(noe||noe2) return 0;
if(att<=0&&!target.countCards('e')) return 1.5;
return -1.5;
}
return getRaw()*get.attitude(player,target);
},
content:function(){
'step 0'
var num=0,recover=0;
var evt=trigger.getl(player);
for(var i of evt.es){
if(i.name.indexOf('changandajian_equip')==0) num++;
if(i.name=='changandajian_equip2') recover++;
}
if(recover>0) player.recover(recover);
event.count=num;
if(!game.hasPlayer(function(current){
return current.countCards('ej')>0;
})) event.finish();
'step 1'
event.count--;
player.chooseTarget(true,'选择一名装备区或判定区有牌的角色',function(card,player,target){
return target.countCards('ej')>0;
}).set('ai',function(target){
return lib.skill.changandajian_destroy.getEffect(_status.event.player,target);
});
'step 2'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.line(target,'green');
player.choosePlayerCard(target,true,'ej');
}
else event.finish();
'step 3'
if(result.bool){
var card=result.cards[0];
var num=get.number(card);
if([1,11,12,13].contains(num)){
if(lib.filter.canBeGained(card,player,target)) player.gain(card,target,'give');
}
else if(lib.filter.canBeDiscarded(card,player,target)) target.discard(card);
}
else event.finish();
'step 4'
if(event.count>0&&game.hasPlayer(function(current){
return current.countCards('ej')>0;
})) event.goto(1);
},
},
dili:{
audio:2,
trigger:{
global:'phaseBefore',
player:'enterGame',
},
forced:true,
filter:function(event,player){
if(player.storage.dili) return false;
if(event.name!='phase') return true;
if(game.phaseNumber==0) return true;
//让神山识能够获得东吴命运线
return player.name=='key_shiki';
},
content:function(){
player.storage.dili=true;
var skill=['dili_shengzhi','dili_chigang','dili_qionglan','dili_quandao','dili_jiaohui','dili_yuanlv'].randomGet();
player.addSkill(skill);
game.log(player,'解锁了<span style="font-family: yuanli">东吴命运线</span>','#g【'+get.translation(skill)+'】');
},
derivation:['dili_shengzhi','dili_chigang','dili_qionglan','dili_quandao','dili_jiaohui','dili_yuanlv','gzyinghun','hongde','rebingyi','xinfu_guanwei','bizheng','xinanguo','shelie','wengua','rebotu','rezhiheng','jiexun','reanxu','xiashu','rejieyin','oldimeng','xinfu_guanchao','drlt_jueyan','lanjiang'],
subSkill:{
shengzhi:{
audio:2,
trigger:{player:'useCard'},
forced:true,
filter:function(event,player){
var num=get.number(event.card);
if(typeof num!='number') return false;
if(num<=1) return false;
for(var i=2;i<=Math.sqrt(num);i++){
if(num%i==0) return false;
}
if(!player.storage.yuheng) return false;
var list=['gzyinghun','hongde','rebingyi'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return false;
}
return true;
},
content:function(){
trigger.directHit.addArray(game.filterPlayer(function(current){
return current!=player;
}));
},
init:function(player,skill){
player.markAuto('yuheng_current',['gzyinghun','hongde','rebingyi']);
},
mark:true,
ai:{
directHit_ai:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.card){
var num=get.number(arg.card);
if(typeof num!='number') return false;
if(num<=1) return false;
for(var i=2;i<=Math.sqrt(num);i++){
if(num%i==0) return false;
}
return true;
}
return false;
},
},
intro:{
name:'命运线:圣质',
content:function(storage,player){
var finished=[],unfinished=['gzyinghun','hongde','rebingyi'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技。若你因〖驭衡〗获得过〖英魂〗〖弘德〗〖秉壹〗,则当你使用点数为质数的牌时,此牌不可被响应。';
return str;
},
},
},
chigang:{
audio:2,
trigger:{player:'phaseJudgeBefore'},
forced:true,
filter:function(event,player){
if(!player.storage.yuheng) return false;
var list=['xinfu_guanwei','bizheng','xinanguo'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return false;
}
return true;
},
content:function(){
trigger.cancel();
var next=player.phaseDraw();
event.next.remove(next);
trigger.getParent().next.push(next);
},
init:function(player,skill){
player.markAuto('yuheng_current',['xinfu_guanwei','bizheng','xinanguo']);
},
ai:{
effect:{
target:function(card){
if(get.type(card)=='delay') return 'zerotarget';
},
},
},
mark:true,
intro:{
name:'命运线:持纲',
content:function(storage,player){
var finished=[],unfinished=['xinfu_guanwei','bizheng','xinanguo'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技。若你因〖驭衡〗获得过〖观微〗〖弼政〗〖安国〗,则当你的判定阶段开始前,你跳过此阶段并获得一个额外的摸牌阶段。';
return str;
},
},
},
qionglan:{
audio:2,
init:function(player,skill){
player.markAuto('yuheng_current',['shelie','wengua','rebotu']);
},
trigger:{player:'useSkillAfter'},
forced:true,
limited:true,
filter:function(event,player){
if(!player.storage.yuheng||event.skill!='yuheng') return false;
var list=['shelie','wengua','rebotu'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return false;
}
return true;
},
content:function(){
player.awakenSkill('dili_qionglan');
var list=['dili_shengzhi','dili_chigang','dili_quandao','dili_jiaohui','dili_yuanlv'];
var list2=list.randomRemove(2);
if(list2.contains('dili_quandao')&&list2.contains('dili_jiaohui')){
list2.randomRemove(1);
list2.push(list.randomGet());
}
for(var skill of list2){
player.addSkill(skill);
game.log(player,'解锁了<span style="font-family: yuanli">东吴命运线</span>','#g【'+get.translation(skill)+'】');
}
},
mark:true,
intro:{
name:'命运线:穹览',
content:function(storage,player){
var finished=[],unfinished=['shelie','wengua','rebotu'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技,限定技。若你因〖驭衡〗获得过〖涉猎〗〖问卦〗〖博图〗,则当你发动的〖驭衡〗结算结束后,你随机获得两条其他<span style="font-family: yuanli">东吴命运线</span>。';
return str;
},
},
},
quandao:{
audio:2,
mod:{
cardname:function(card,player){
if(player.storage.yuheng&&[1,11,12,13].contains(card.number)){
var list=['rezhiheng','jiexun','reanxu'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return;
}
return 'tiaojiyanmei';
}
},
},
init:function(player,skill){
player.markAuto('yuheng_current',['rezhiheng','jiexun','reanxu']);
},
mark:true,
intro:{
name:'命运线:权道',
content:function(storage,player){
var finished=[],unfinished=['rezhiheng','jiexun','reanxu'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技。若你因〖驭衡〗获得过〖制衡〗〖诫训〗〖安恤〗,则你手牌区内点数为字母的牌的牌名视为【调剂盐梅】。';
return str;
},
},
},
jiaohui:{
audio:2,
mod:{
cardname:function(card,player){
if(player.countCards('h')==1&&player.storage.yuheng){
var list=['xiashu','rejieyin','oldimeng'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return;
}
return 'yuanjiao';
}
},
},
init:function(player,skill){
player.markAuto('yuheng_current',['xiashu','rejieyin','oldimeng']);
},
mark:true,
intro:{
name:'命运线:交辉',
content:function(storage,player){
var finished=[],unfinished=['xiashu','rejieyin','oldimeng'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技。若你因〖驭衡〗获得过〖下书〗〖结姻〗〖缔盟〗且你的手牌数为1则此牌的牌名视为【远交近攻】。';
return str;
},
},
},
yuanlv:{
audio:2,
init:function(player,skill){
player.markAuto('yuheng_current',['xinfu_guanchao','drlt_jueyan','lanjiang']);
},
trigger:{player:'useCardToTargeted'},
forced:true,
filter:function(event,player){
if(get.type(event.card,false)!='equip'||player!=event.target||event.card.name.indexOf('changandajian_equip')==0) return false;
if(!player.storage.yuheng) return false;
var list=['xinfu_guanchao','drlt_jueyan','lanjiang'];
for(var i of list){
if(!player.storage.yuheng.contains(i)) return false;
}
var type=get.subtype(event.card);
if(lib.card['changandajian_'+type]&&!player.isDisabled(type)) return true;
return false;
},
content:function(){
var cards=trigger.cards.filterInD();
if(cards.length>0) game.cardsDiscard(cards);
var type=get.subtype(trigger.card);
var card=game.createCard('changandajian_'+type,Math.random()<0.5?'spade':'heart',10);
player.useCard(card,player);
},
mark:true,
intro:{
name:'命运线:渊虑',
content:function(storage,player){
var finished=[],unfinished=['xinfu_guanchao','drlt_jueyan','lanjiang'];
if(player.storage.yuheng){
for(var i=0;i<unfinished.length;i++){
if(player.storage.yuheng.contains(unfinished[i])){
finished.push(unfinished[i]);
unfinished.splice(i--,1);
}
}
}
var str='';
if(unfinished.length) str+=('<li>未获得:'+get.translation(unfinished)+'<br>');
if(finished.length) str+=('<li>已获得过:'+get.translation(finished)+'<br>');
str+='<li>锁定技。若你因〖驭衡〗获得过〖观潮〗〖决堰〗〖澜江〗,则当你成为自己使用的装备牌的目标后,你将此牌置于弃牌堆,然后使用一张与此装备牌副类别相同的【长安大舰】。';
return str;
},
},
},
},
},
yuheng:{
audio:2,
enable:'phaseUse',
usable:1,
content:function(){
var skills=player.getSkills(null,false,false).filter(function(i){
if(i=='yuheng') return false;
var info=get.info(i);
return info&&!info.charlotte&&!get.is.locked(i);
});
if(skills.length){
for(var i of skills) player.removeSkill(i);
}
//初始化技能库
var list1=['dili_shengzhi','dili_chigang','dili_qionglan','dili_quandao','dili_jiaohui','dili_yuanlv'];
var list2=['gzyinghun','hongde','rebingyi','xinfu_guanwei','bizheng','xinanguo','shelie','wengua','rebotu','rezhiheng','jiexun','reanxu','xiashu','rejieyin','oldimeng','xinfu_guanchao','drlt_jueyan','lanjiang'];
var list3=[];
if(!player.storage.yuheng_full) player.storage.yuheng_full=list2.slice(0);
if(player.getStorage('yuheng_current').length==0){
for(var i=0;i<list1.length;i++){
if(player.hasSkill(list1[i])){
for(var j=0;j<3;j++){
list3.add(list2[i*3+j]);
}
}
}
if(!player.storage.yuheng_current) player.storage.yuheng_current=list3.slice(0);
}
var fullskills,currentskills;
//决定抽选技能范围
if(player.storage.yuheng_full&&player.storage.yuheng_full.length) fullskills=player.storage.yuheng_full;
else fullskills=list2.slice(0);
if(player.storage.yuheng_current&&player.storage.yuheng_current.length) currentskills=player.storage.yuheng_current;
else currentskills=list3.slice(0);
var skills=[];
//在没有发动过其他非锁定技时抽选技能
var evtx=event.getParent('phaseUse');
if(currentskills.length>0&&!player.hasHistory('useSkill',function(evt){
if(evt.skill=='yuheng'||evt.type!='player'||!evt.sourceSkill) return false;
var info1=get.info(evt.skill);
if(info1.charlotte) return false;
var info=get.info(evt.sourceSkill);
if(info.charlotte||get.is.locked(evt.skill)) return false;
return evt.event.getParent('phaseUse')==evtx;
})){
fullskills.randomSort();
currentskills.randomSort();
for(var i=0;i<fullskills.length;i++){
for(var j=0;j<currentskills.length;j++){
if(fullskills[i]!=currentskills[j]||(i==fullskills.length-1&&j==currentskills.length-1)){
skills.add(fullskills.splice(i--,1)[0]);
skills.add(currentskills.splice(j--,1)[0]);
break;
}
}
if(skills.length>0) break;
}
}
//在已经发动过其他非锁定技时抽选技能
else{
skills.add(fullskills.randomRemove(1)[0]);
}
for(var i of skills){
player.addSkillLog(i);
}
player.markAuto('yuheng',skills);
},
ai:{
order:function(item,player){
var evtx=_status.event.getParent('phaseUse');
if(!player.hasHistory('useSkill',function(evt){
if(evt.skill=='yuheng'||evt.type!='player'||!evt.sourceSkill) return false;
var info1=get.info(evt.skill);
if(info1.charlotte) return false;
var info=get.info(evt.sourceSkill);
if(info.charlotte||get.is.locked(evt.skill)) return false;
return evt.event.getParent('phaseUse')==evtx;
})) return 11;
return 0.8;
},
result:{player:1},
},
group:'yuheng_losehp',
subSkill:{
losehp:{
trigger:{player:'phaseUseEnd'},
forced:true,
locked:false,
filter:function(event,player){
return !player.hasHistory('useSkill',function(evt){
if(evt.skill!='yuheng') return false;
return evt.event.getParent('phaseUse')==event;
});
},
content:function(){
player.loseHp();
},
},
},
},
jiufa:{
audio:2,
trigger:{player:'useCardAfter'},
@ -4807,6 +5539,196 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
card:{
changandajian_equip1:{
fullskin:true,
derivation:'shen_sunquan',
type:'equip',
subtype:'equip1',
distance:{attackFrom:-5},
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
changandajian_equip2:{
fullskin:true,
cardimage:'changandajian_equip1',
derivation:'shen_sunquan',
type:'equip',
subtype:'equip2',
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
changandajian_equip3:{
fullskin:true,
cardimage:'changandajian_equip1',
derivation:'shen_sunquan',
type:'equip',
subtype:'equip3',
distance:{globalTo:2},
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
changandajian_equip4:{
fullskin:true,
cardimage:'changandajian_equip1',
derivation:'shen_sunquan',
type:'equip',
subtype:'equip4',
distance:{globalFrom:-2},
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
changandajian_equip5:{
fullskin:true,
cardimage:'changandajian_equip1',
derivation:'shen_sunquan',
type:'equip',
subtype:'equip5',
skills:['changandajian_equip5'],
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
changandajian_equip6:{
fullskin:true,
cardimage:'changandajian_equip1',
derivation:'shen_sunquan',
type:'equip',
subtype:'equip6',
distance:{globalTo:2,globalFrom:-2},
onLose:function(){
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
player.addTempSkill('changandajian_destroy');
},
ai:{
value:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
equipValue:function(card,player){
if(game.hasPlayer(function(current){
return lib.skill.changandajian_destroy.getEffect(player,current)>0;
})) return 0;
return 8;
},
basic:{
equipValue:2,
}
},
},
qizhengxiangsheng:{
enable:true,
type:'trick',
@ -5117,6 +6039,44 @@ game.import('character',function(lib,game,ui,get,ai,_status){
tianren_info:'锁定技。①当有一张基本牌或普通锦囊牌不因使用而进入弃牌堆后你获得一枚“天任”标记。②当你获得“天任”标记或体力上限变化后若你的“天任”数不小于X则你移去X枚“天任”加1点体力上限并摸两张牌X为你的体力上限。',
pingxiang:'平襄',
pingxiang_info:'限定技。出牌阶段,若你的体力上限大于⑨,则你可减⑨点体力上限,视为使用至多⑨张火【杀】,然后失去〖九伐〗,并将手牌上限基数改为体力上限直到游戏结束。',
shen_sunquan:'神孙权',
dili:'帝力',
dili_info:'锁定技。游戏开始时,你随机获得一条<span style="font-family: yuanli">东吴命运线</span>。',
yuheng:'驭衡',
yuheng_info:'①出牌阶段限一次。你可以失去所有不为〖驭衡〗的非锁定技,然后随机获得全部<span style="font-family: yuanli">东吴命运线</span>涉及的一个技能。若你本阶段内没有发动过其他非锁定技,则你随机获得当前<span style="font-family: yuanli">东吴命运线</span>涉及的一个内容。②出牌阶段结束时若你未于本阶段内发动过〖驭衡①〗则你失去1点体力。',
yuheng_append:'<span style="font-family: yuanli">天下英雄谁敌手?曹刘。生子当如孙仲谋!</span>',
dili_shengzhi:'圣质',
dili_shengzhi_info:'锁定技。若你因〖驭衡〗获得过〖英魂〗〖弘德〗〖秉壹〗,则当你使用点数为质数的牌时,此牌不可被响应。',
dili_chigang:'持纲',
dili_chigang_info:'锁定技。若你因〖驭衡〗获得过〖观微〗〖弼政〗〖安国〗,则当你的判定阶段开始前,你跳过此阶段并获得一个额外的摸牌阶段。',
dili_qionglan:'穹览',
dili_qionglan_info:'锁定技,限定技。若你因〖驭衡〗获得过〖涉猎〗〖问卦〗〖博图〗,则当你发动的〖驭衡〗结算结束后,你随机获得两条其他<span style="font-family: yuanli">东吴命运线</span>。',
dili_quandao:'权道',
dili_quandao_info:'锁定技。若你因〖驭衡〗获得过〖制衡〗〖诫训〗〖安恤〗,则你手牌区内点数为字母的牌的牌名视为【调剂盐梅】。',
dili_jiaohui:'交辉',
dili_jiaohui_info:'锁定技。若你因〖驭衡〗获得过〖下书〗〖结姻〗〖缔盟〗且你的手牌数为1则此牌的牌名视为【远交近攻】。',
dili_yuanlv:'渊虑',
dili_yuanlv_info:'锁定技。若你因〖驭衡〗获得过〖观潮〗〖决堰〗〖澜江〗,则当你成为自己使用的不为【长安大舰】的装备牌的目标后,你将此牌置于弃牌堆,然后使用一张与此装备牌副类别相同的【长安大舰】。',
changandajian_equip1:'长安大舰',
changandajian_equip2:'长安大舰',
changandajian_equip3:'长安大舰',
changandajian_equip4:'长安大舰',
changandajian_equip5:'长安大舰',
changandajian_equip6:'长安大舰',
changandajian_destroy:'长安大舰',
changandajian_equip1_info:'锁定技。当你失去装备区内的【长安大舰】后,你销毁之。然后你选择场上的一张牌。若此牌点数为字母,则你获得之,否则弃置之。',
changandajian_equip2_info:'锁定技。当你失去装备区内的【长安大舰】后你销毁之并回复1点体力。然后你选择场上的一张牌。若此牌点数为字母则你获得之否则弃置之。',
changandajian_equip3_info:'锁定技。其他角色至你的距离+2。当你失去装备区内的【长安大舰】后你销毁之。然后你选择场上的一张牌。若此牌点数为字母则你获得之否则弃置之。',
changandajian_equip4_info:'锁定技。你至其他角色的距离-2。当你失去装备区内的【长安大舰】后你销毁之。然后你选择场上的一张牌。若此牌点数为字母则你获得之否则弃置之。',
changandajian_equip5_info:'锁定技。你的手牌上限+2。当你失去装备区内的【长安大舰】后你销毁之。然后你选择场上的一张牌。若此牌点数为字母则你获得之否则弃置之。',
changandajian_equip6_info:'锁定技。你至其他角色的距离-2其他角色至你的距离+2。当你失去装备区内的【长安大舰】后你销毁之。然后你选择场上的一张牌。若此牌点数为字母则你获得之否则弃置之。',
shen_machao:'神马超',
shouli:'狩骊',
shouli_backup:'狩骊',
shouli_info:'锁定技。①游戏开始时,你令场上所有角色从你的下家起,依次使用牌堆中的一张不为赠物的坐骑牌。②你可以将场上的一张进攻坐骑牌当做【杀】(无任何次数限制),防御坐骑牌当做【闪】使用或打出。若此坐骑牌的拥有者不为你,则其非锁定技于本回合内失效。且当你或其于本回合内受到伤害时,此伤害+1且改为雷属性。',
hengwu:'横骛',
hengwu_info:'当你使用或打出有花色的牌时若你的手牌区内没有与此牌花色相同的牌则你可以摸X张牌X为场上装备区内花色与此牌相同的牌数。',
hengwu_append:'<span style="font-family: yuanli">棘手,怀念,摧毁!</span>',
key_kagari:'篝',
kagari_zongsi:'纵丝',

View File

@ -3161,7 +3161,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
if(!lib.character.stone_misha){
lib.character.stone_misha=['male','shu',3,['lslschaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']];
lib.character.stone_misha=['male','shu',3,['lschaofeng'],['minskin','stone','mode:stone'],[3,3,'hunter']];
}
if(!lib.character.stone_huofu){
lib.character.stone_huofu=['male','qun',2,['stone_chongfeng'],['minskin','stone','mode:stone'],[3,4,'hunter']];

View File

@ -13,20 +13,20 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijiren:['caizhenji','xiangchong','sp_huaxin','sp_xujing','zhangzhongjing','sp_zhangwen','liuzhang','qiaogong'],
mobile_shijiyong:['db_wenyang','sp_chendong','yuanhuan','sp_zongyu','sp_wangshuang','sunyi','sp_gaolan','sp_huaman'],
mobile_shijiyan:['sp_cuiyan','sp_zhangchangpu','sp_jiangwan','sp_jiangqing','sp_lvfan','sp_huangfusong','sp_zhujun','liuba'],
mobile_mougongtong:['sp_yangwan','liucheng'],
mobile_sunben:["re_sunben"],
mobile_standard:["xin_xiahoudun","xin_zhangfei"],
mobile_shenhua:["re_pangtong","re_guanqiujian","xin_yuanshao","re_liushan","re_dongzhuo","re_sp_zhugeliang","re_sunjian","re_dengai","re_jiangwei","re_zhurong","re_caiwenji"],
mobile_yijiang1:["re_xusheng","re_lingtong","ol_yujin","re_wuguotai","re_gaoshun"],
mobile_yijiang2:["xin_liaohua","xin_caozhang","re_liubiao","re_handang","xin_chengpu","xin_gongsunzan","re_zhonghui","re_bulianshi"],
mobile_yijiang3:["xin_jianyong","xin_zhuran","xin_guohuai","xin_panzhangmazhong","xin_fuhuanghou","re_yufan"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen"],
mobile_yijiang4:["xin_zhoucang","xin_caifuren","xin_guyong","xin_sunluban","xin_caozhen","xin_jushou"],
mobile_yijiang5:['xin_sunxiu',],
mobile_yijiang67:["re_jikang"],
mobile_sp:["old_yuanshu","re_wangyun","re_baosanniang","re_weiwenzhugezhi","re_zhanggong","re_xugong","re_heqi","liuzan","xin_hansui"],
},
},
character:{
xin_jushou:['male','qun',3,['xinjianying','shibei']],
liuba:['male','shu',3,['duanbi','tongduo']],
re_bulianshi:['female','wu',3,['reanxu','zhuiyi']],
re_caiwenji:['female','qun',3,['rebeige','duanchang']],
@ -37,8 +37,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xin_sunxiu:['male','wu',3,['mobileyanzhu','mobilexingxue','zhaofu'],['zhu']],
sp_maojie:['male','wei',3,['bingqing','yingfeng']],
sp_zhujun:['male','qun',4,['yangjie','zjjuxiang','houfeng']],
liucheng:['female','qun',3,['splveying','spyingwu']],
sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']],
sp_huangfusong:['male','qun',4,['spzhengjun','spshiji','sptaoluan']],
yj_huangzhong:['male','qun',4,['spshidi','spyishi','spqishe']],
sp_lvfan:['male','wu',3,['spdiaodu','spdiancai','spyanji']],
@ -619,6 +617,100 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
skill:{
//沮授
xinjianying:{
audio:'jianying',
audioname:['xin_jushou'],
subfrequent:['draw'],
group:['xinjianying_draw'],
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(!player.countCards('he')) return false;
for(var i of lib.inpile){
if(i!='du'&&get.type(i,false)=='basic'){
if(event.filterCard({name:i},player,event)) return true;
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true;
}
}
}
}
return false;
},
onChooseToUse:function(event){
if(event.type=='phase'&&!game.online){
var last=event.player.getLastUsed();
if(last&&last.getParent('phaseUse')==event.getParent()){
var suit=get.suit(last.card,false);
if(suit!='none') event.set('xinjianying_suit',suit);
}
}
},
chooseButton:{
dialog:function(event,player){
var list=[];
var suit=event.xinjianying_suit||'',str=get.translation(suit);
for(var i of lib.inpile){
if(i!='du'&&get.type(i,false)=='basic'){
if(event.filterCard({name:i},player,event)) list.push(['基本',str,i]);
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) list.push(['基本',str,i,j]);
}
}
}
}
return ui.create.dialog('渐营',[list,'vcard']);
},
check:function(button){
if(button.link[2]=='jiu') return 0;
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
},
backup:function(links,player){
var next={
audio:'jianying',
audioname:['xin_jushou'],
filterCard:true,
popname:true,
position:'he',
viewAs:{
name:links[0][2],
nature:links[0][3],
},
ai1:function(card){
return 7-_status.event.player.getUseValue(card,null,true);
},
precontent:function(){
event.getParent().addCount=false;
var evtx=event.getParent(2);
if(player.hasHistory('useCard',function(evt){
return evt.skill=='xinjianying_backup'&&evt.getParent(2)==evtx;
})){
alert('检测到您安装了十周年UI等具有出牌特效的扩展。该扩展会导致【渐营】出现无视次数限制发动的bug。为避免无限循环即将重启游戏。请卸载相关扩展以解决此问题。');
game.reload();
}
},
};
if(_status.event.xinjianying_suit) next.viewAs.suit=_status.event.xinjianying_suit;
return next;
},
prompt:function(links){
return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+(_status.event.xinjianying_suit?('('+get.translation(_status.event.xinjianying_suit)+')'):'')+'使用';
},
},
ai:{
order:function(item,player){
if(_status.event.xinjianying_suit) return 16;
return 3;
},
result:{player:1},
},
subSkill:{
draw:{inherit:'jianying'},
},
},
//刘巴
duanbi:{
audio:2,
@ -1413,198 +1505,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
},
},
//刘赪
splveying:{
audio:2,
trigger:{player:'useCardAfter'},
forced:true,
filter:function(event,player){
return event.card.name=='sha'&&player.countMark('splveying')>1;
},
logTarget:'targets',
content:function(){
player.removeMark('splveying',2);
for(var i of trigger.targets) player.discardPlayerCard(i,true,'he');
},
marktext:'椎',
intro:{
name:'椎(掠影/莺舞)',
name2:'椎',
content:'mark',
},
group:'splveying_add',
subSkill:{
add:{
trigger:{player:'useCardToPlayered'},
forced:true,
usable:2,
filter:function(event,player){
return event.card.name=='sha'&&player.isPhaseUsing();
},
content:function(){
player.addMark('splveying',1);
},
},
},
},
spyingwu:{
group:'spyingwu_add',
audio:2,
trigger:{player:'useCardAfter'},
forced:true,
locked:false,
filter:function(event,player){
return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1;
},
content:function(){
player.removeMark('splveying',2);
player.chooseUseTarget('sha',false);
},
ai:{combo:'splveying'},
subSkill:{
add:{
trigger:{player:'useCardToPlayered'},
forced:true,
locked:false,
usable:2,
filter:function(event,player){
return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.isPhaseUsing();
},
content:function(){
player.addMark('splveying',1);
},
},
},
},
//手杀杨婉
spmingxuan:{
audio:2,
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
var list=player.getStorage('spmingxuan');
return player.countCards('h')>0&&game.hasPlayer(function(current){
return current!=player&&!list.contains(current);
});
},
content:function(){
'step 0'
var suits=[],hs=player.getCards('h');
for(var i of hs) suits.add(get.suit(i,player));
var list=player.getStorage('spmingxuan'),num=Math.min(suits.length,game.countPlayer(function(current){
return current!=player&&!list.contains(current);
}));
player.chooseCard('h',true,[1,num],'瞑昡:请选择至多'+get.cnNumber(num)+'张花色各不相同的手牌',function(card,player){
if(!ui.selected.cards.length) return true;
var suit=get.suit(card);
for(var i of ui.selected.cards){
if(get.suit(i,player)==suit) return false;
}
return true;
}).set('complexCard',true).set('ai',(card)=>6-get.value(card));
'step 1'
if(result.bool){
var list=player.getStorage('spmingxuan'),cards=result.cards.randomSort();
var targets=game.filterPlayer((current)=>(current!=player&&!list.contains(current))).randomGets(cards.length).sortBySeat();
player.line(targets,'green');
for(var i=0;i<targets.length;i++){
targets[i].gain(cards[i],player);
player.$giveAuto(cards[i],targets[i]);
}
event.targets=targets;
event.num=0;
}
else event.finish();
'step 2'
game.delayx();
'step 3'
if(num<targets.length){
var target=targets[num];
event.num++;
if(target.isIn()){
event.target=target;
target.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},'对'+get.translation(player)+'使用一张杀,否则交给其一张牌,且其摸一张牌').set('targetRequired',true).set('complexSelect',true).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);
}).set('sourcex',player).set('addCount',false);
}
else{
if(event.num<targets.length) event.redo();
else event.finish();
}
}
'step 4'
if(result.bool){
player.markAuto('spmingxuan',[target]);
if(event.num<targets.length) event.goto(3);
else event.finish();
}
else{
var he=target.getCards('he');
if(he.length){
if(he.length==1) event._result={bool:true,cards:he};
else target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌')
}
else{
if(event.num<targets.length) event.goto(3);
else event.finish();
}
}
'step 5'
if(result.bool){
player.gain(result.cards,target,'giveAuto');
player.draw();
}
if(event.num<targets.length) event.goto(3);
},
intro:{content:'已被$使用过杀'},
},
spxianchou:{
audio:2,
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return event.source&&event.source.isIn()&&game.hasPlayer(function(current){
return current!=player&&current!=event.source;
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt2('spxianchou'),function(card,player,target){
return target!=player&&target!=_status.event.getTrigger().source;
}).set('ai',function(target){
return get.attitude(target,_status.event.player)*Math.sqrt(target.countCards('he'));
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('spxianchou',target);
player.line2([target,trigger.source]);
target.chooseToDiscard('he','是否弃置一张牌,视为对'+get.translation(trigger.source)+'使用一张【杀】?').set('ai',function(card){
if(_status.event.goon) return 8-get.value(card);
return 0;
}).set('goon',((target.canUse('sha',trigger.source,false)?get.effect(trigger.source,{name:'sha',isCard:true},target,target):0)+get.recoverEffect(player,target,target))>0);
}
else event.finish();
'step 2'
if(result.bool){
if(target.canUse('sha',trigger.source,false)) target.useCard({name:'sha',isCard:true},trigger.source,false);
else event.finish();
}
else event.finish();
'step 3'
if(target.hasHistory('sourceDamage',function(evt){
var card=evt.card;
if(!card||card.name!='sha') return false;
var evtx=evt.getParent('useCard');
return evtx.card==card&&evtx.getParent()==event;
})) player.recover();
},
},
//手杀皇甫嵩
spzhengjun:{
audio:2,
@ -16753,16 +16653,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
spshiji_info:'当你对其他角色造成属性伤害时,若你的手牌数不为全场唯一最多,则你可以观看其手牌。你令其弃置其中的所有红色牌,然后摸等量的牌。',
sptaoluan:'讨乱',
sptaoluan_info:'每回合限一次。一名角色的判定牌生效后,若判定结果的花色为♠,则你可以终止导致此判定发生的上级事件。然后选择一项:①获得判定牌对应的实体牌。②视为对判定角色使用一张火【杀】(无距离和次数限制)',
sp_yangwan:'杨婉',
spmingxuan:'瞑昡',
spmingxuan_info:'锁定技。出牌阶段开始时你须选择至多X张花色各不相同的手牌X为未选择过选项一的角色将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项⒈对你使用一张【杀】。⒉交给你一张牌然后你摸一张牌。',
spxianchou:'陷仇',
spxianchou_info:'当你受到有来源的伤害后你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌然后视为对伤害来源使用一张【杀】无距离限制。若其因此【杀】造成了伤害则你回复1点体力。',
liucheng:'刘赪',
splveying:'掠影',
splveying_info:'锁定技。①每回合限两次当你使用【杀】指定目标后你获得一个“椎”。②当你使用的【杀】结算结束后若你的“椎”数大于1则你弃置两个“椎”然后弃置所有目标角色的各一张手牌。',
spyingwu:'莺舞',
spyingwu_info:'若你拥有〖掠影〗①每回合限两次当你使用非伤害类普通锦囊牌指定目标后你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后若你的“椎”数大于1则你弃置两个“椎”然后可以视为使用一张【杀】。',
sp_zhujun:'手杀朱儁',
yangjie:'佯解',
yangjie_info:'出牌阶段限一次你可以摸一张牌并和一名其他角色A拼点。当你以此法展示你的拼点牌时你令此牌点数-XX为你已损失的体力值。若你没赢则你可以令另一名其他角色B获得两张拼点牌然后其视为对A使用一张火【杀】。',
@ -16805,6 +16695,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
duanbi_info:'出牌阶段限一次。若场上所有角色的手牌数之和大于角色数之和的二倍则你可以令所有其他角色各弃置X张手牌X为该角色手牌数的一半且向下取整且至多为3。然后你可选择一名角色令其随机获得三张以此法被弃置的牌。',
tongduo:'统度',
tongduo_info:'每回合限一次。当你成为其他角色使用牌的唯一目标后,你可令一名角色重铸一张牌。',
xin_jushou:'界沮授',
xinjianying:'渐营',
xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。',
mobile_standard:'手杀异构·标准包',
mobile_shenhua:'手杀异构·神话再临',
@ -16820,7 +16713,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
mobile_shijixin:'始计篇·信',
mobile_shijiyong:'始计篇·勇',
mobile_shijiyan:'始计篇·严',
mobile_mougongtong:'谋攻篇·同',
}
};
});

View File

@ -784,6 +784,9 @@ window.noname_character_rank={
'laiyinger',
'yanrou',
'weizi',
'shen_machao',
'sb_yujin',
'sb_huangzhong',
],
b:[
'diy_feishi',
@ -1013,6 +1016,9 @@ window.noname_character_rank={
'jin_guohuai',
'tw_tianyu',
'zhangyao',
'sb_huaxiong',
'shen_sunquan',
're_jushou',
],
bm:[
'diy_xizhenxihong',
@ -1361,6 +1367,9 @@ window.noname_character_rank={
'guanning',
'shen_jiangwei',
'ol_puyuan',
'sb_huangzhong',
'shen_sunquan',
'shen_machao',
'key_tomoya',
'key_masato',
'key_shiorimiyuki',
@ -1492,7 +1501,6 @@ window.noname_character_rank={
'tw_beimihu',
'sp_machao',
'wutugu',
'yj_jushou',
'zhangrang',
'jikang',
'xushi',
@ -1545,7 +1553,6 @@ window.noname_character_rank={
'db_wenyang',
'qiaozhou',
'lvlingqi',
'xin_jushou',
'wangtao',
'wangyue',
're_pangdegong',
@ -1956,6 +1963,9 @@ window.noname_character_rank={
'weizi',
'yanrou',
'zhangyao',
're_jushou',
'xin_jushou',
'yj_jushou',
],
junk:[
'sunshao',
@ -1965,7 +1975,6 @@ window.noname_character_rank={
'chengpu',
'zangba',
'tianfeng',
'zhangwen',
'dingyuan',
'caiyong',
'xin_chengpu',

View File

@ -12,19 +12,19 @@ game.import('character',function(lib,game,ui,get,ai,_status){
refresh_yijiang1:['xin_wuguotai','xin_gaoshun','re_caozhi','yujin_yujin','re_masu','xin_xusheng','re_fazheng','xin_lingtong','re_zhangchunhua','dc_xushu'],
refresh_yijiang2:['re_madai','re_wangyi','guanzhang','xin_handang','xin_zhonghui','re_liaohua','re_chengpu','re_caozhang','dc_bulianshi','xin_liubiao'],
refresh_yijiang3:['re_jianyong','re_guohuai','re_zhuran','re_panzhangmazhong','xin_yufan','re_liru','re_manchong','re_fuhuanghou','re_guanping'],
refresh_yijiang4:['re_sunluban','re_wuyi','re_hanhaoshihuan','re_caozhen','re_zhoucang','re_chenqun','re_caifuren','re_guyong','xin_jushou'],
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_yijiang6:['re_guohuanghou'],
},
},
connect:true,
character:{
re_jushou:['male','qun',3,['dcjianying','dcshibei']],
re_zhanghe:['male','wei',4,['reqiaobian']],
dc_xushu:['male','shu',4,['rezhuhai','xsqianxin']],
xin_gaoshun:['male','qun',4,['decadexianzhen','decadejinjiu']],
re_guohuanghou:['female','wei',3,['rejiaozhao','redanxin']],
re_xiahoushi:['female','shu',3,['reqiaoshi','reyanyu']],
xin_jushou:['male','qun',3,['xinjianying','shibei']],
ol_lusu:['male','wu',3,['olhaoshi','oldimeng']],
re_jiaxu:['male','qun',3,['rewansha','luanwu','reweimu']],
re_guyong:['male','wu',3,['reshenxing','rebingyi']],
@ -143,6 +143,114 @@ game.import('character',function(lib,game,ui,get,ai,_status){
re_xushu:['zhaoyun','sp_zhugeliang'],
},
skill:{
//十周年沮授
dcshibei:{
trigger:{player:'damageEnd'},
forced:true,
audio:2,
check:function(event,player){
return player.getHistory('damage').indexOf(event)==0;
},
filter:function(event,player){
var index=player.getHistory('damage').indexOf(event);
return index==0||index==1;
},
content:function(){
if(player.getHistory('damage').indexOf(trigger)>0){
player.loseHp();
}
else{
player.recover();
}
},
subSkill:{
damaged:{},
ai:{}
},
ai:{
maixie_defend:true,
threaten:0.9,
effect:{
target:function(card,player,target){
if(player.hasSkillTag('jueqing')) return;
if(target.hujia) return;
if(player._shibei_tmp) return;
if(target.hasSkill('shibei_ai')) return;
if(_status.event.getParent('useCard',true)||_status.event.getParent('_wuxie',true)) return;
if(get.tag(card,'damage')){
if(target.getHistory('damage').length>0){
return [1,-2];
}
else{
if(get.attitude(player,target)>0&&target.hp>1){
return 0;
}
if(get.attitude(player,target)<0&&!player.hasSkillTag('damageBonus')){
if(card.name=='sha') return;
var sha=false;
player._shibei_tmp=true;
var num=player.countCards('h',function(card){
if(card.name=='sha'){
if(sha){
return false;
}
else{
sha=true;
}
}
return get.tag(card,'damage')&&player.canUse(card,target)&&get.effect(target,card,player,player)>0;
});
delete player._shibei_tmp;
if(player.hasSkillTag('damage')){
num++;
}
if(num<2){
var enemies=player.getEnemies();
if(enemies.length==1&&enemies[0]==target&&player.needsToDiscard()){
return;
}
return 0;
}
}
}
}
}
}
}
},
dcjianying:{
audio:2,
locked:false,
mod:{
aiOrder:function(player,card,num){
if(typeof card=='object'&&player.isPhaseUsing()){
var evt=lib.skill.dcjianying.getLastUsed(player);
if(evt&&evt.card&&(get.suit(evt.card)&&get.suit(evt.card)==get.suit(card)||evt.card.number&&evt.card.number==get.number(card))){
return num+10;
}
}
},
},
trigger:{player:'useCard'},
frequent:true,
getLastUsed:function(player,event){
var history=player.getAllHistory('useCard');
var index;
if(event) index=history.indexOf(event)-1;
else index=history.length-2;
if(index>=0) return history[index];
return false;
},
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)||
typeof get.number(evt.card,false)=='number'&&get.number(evt.card,false)==get.number(event.card);
},
content:function(){
player.draw();
},
},
//十周年步练师
dcanxu:{
enable:'phaseUse',
@ -1514,100 +1622,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
}
},
//沮授
xinjianying:{
audio:'jianying',
audioname:['xin_jushou'],
subfrequent:['draw'],
group:['xinjianying_draw'],
enable:'phaseUse',
usable:1,
filter:function(event,player){
if(!player.countCards('he')) return false;
for(var i of lib.inpile){
if(i!='du'&&get.type(i,false)=='basic'){
if(event.filterCard({name:i},player,event)) return true;
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) return true;
}
}
}
}
return false;
},
onChooseToUse:function(event){
if(event.type=='phase'&&!game.online){
var last=event.player.getLastUsed();
if(last&&last.getParent('phaseUse')==event.getParent()){
var suit=get.suit(last.card,false);
if(suit!='none') event.set('xinjianying_suit',suit);
}
}
},
chooseButton:{
dialog:function(event,player){
var list=[];
var suit=event.xinjianying_suit||'',str=get.translation(suit);
for(var i of lib.inpile){
if(i!='du'&&get.type(i,false)=='basic'){
if(event.filterCard({name:i},player,event)) list.push(['基本',str,i]);
if(i=='sha'){
for(var j of lib.inpile_nature){
if(event.filterCard({name:i,nature:j},player,event)) list.push(['基本',str,i,j]);
}
}
}
}
return ui.create.dialog('渐营',[list,'vcard']);
},
check:function(button){
if(button.link[2]=='jiu') return 0;
return _status.event.player.getUseValue({name:button.link[2],nature:button.link[3]});
},
backup:function(links,player){
var next={
audio:'jianying',
audioname:['xin_jushou'],
filterCard:true,
popname:true,
position:'he',
viewAs:{
name:links[0][2],
nature:links[0][3],
},
ai1:function(card){
return 7-_status.event.player.getUseValue(card,null,true);
},
precontent:function(){
event.getParent().addCount=false;
var evtx=event.getParent(2);
if(player.hasHistory('useCard',function(evt){
return evt.skill=='xinjianying_backup'&&evt.getParent(2)==evtx;
})){
alert('检测到您安装了十周年UI等具有出牌特效的扩展。该扩展会导致【渐营】出现无视次数限制发动的bug。为避免无限循环即将重启游戏。请卸载相关扩展以解决此问题。');
game.reload();
}
},
};
if(_status.event.xinjianying_suit) next.viewAs.suit=_status.event.xinjianying_suit;
return next;
},
prompt:function(links){
return '将一张牌当做'+(get.translation(links[0][3])||'')+get.translation(links[0][2])+(_status.event.xinjianying_suit?('('+get.translation(_status.event.xinjianying_suit)+')'):'')+'使用';
},
},
ai:{
order:function(item,player){
if(_status.event.xinjianying_suit) return 16;
return 3;
},
result:{player:1},
},
subSkill:{
draw:{inherit:'jianying'},
},
},
//虞翻
xinzongxuan:{
audio:2,
@ -8930,6 +8944,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
//priority:1,
audio:2,
audioname:['sb_huaxiong'],
filter:function (event){
return event.card&&event.card.name=='sha'&&(get.color(event.card)!='red'||event.source&&event.source.isAlive());
},
@ -11551,7 +11566,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
"new_reqingnang":"青囊",
"new_reqingnang_info":"出牌阶段,你可以弃置一张手牌,令一名本回合内未成为过〖青囊〗的目标的角色回复一点体力。若你弃置的是黑色牌,则你本回合内不能再发动〖青囊〗。",
"new_reyaowu":"耀武",
"new_reyaowu_info":"锁定技当一名角色使用【杀】对你造成伤害时若此杀为红色该角色回复1点体力或摸一张牌。否则你摸一张牌。",
"new_reyaowu_info":"锁定技当一名角色使用【杀】对你造成伤害时若此杀为红色该角色回复1点体力或摸一张牌。否则你摸一张牌。",
reyaowu:'耀武',
reyaowu_info:'锁定技,当你受到牌造成的伤害时,若此牌为红色,则伤害来源摸一张牌;否则你摸一张牌。',
reqingguo:'倾国',
@ -11935,9 +11950,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
xinzongxuan_info:'当你的牌因弃置而进入弃牌堆后,你可将其中的任意张牌置于牌堆顶。若剩余的牌中有锦囊牌,则你可以令一名其他角色获得其中的一张。',
xinzhiyan:'直言',
xinzhiyan_info:'结束阶段开始时你可令一名角色摸一张牌正面朝上移动。若此牌为基本牌则你摸一张牌。若此牌为装备牌则其回复1点体力并使用此装备牌。',
xin_jushou:'界沮授',
xinjianying:'渐营',
xinjianying_info:'锁定技。①当你于出牌阶段内使用与此阶段你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。②出牌阶段限一次,你可以将一张牌当做任意基本牌使用(不计入次数限制)。若你于此阶段内使用的上一张牌有花色,则此牌的花色视为上一张牌的花色。',
re_xiahoushi:'界夏侯氏',
reqiaoshi:'樵拾',
reqiaoshi_info:'其他角色的结束阶段开始时,若你的手牌数与其相等,则你可以与其各摸一张牌。若这两张牌花色相同,则你可以重复此步骤。',
@ -11990,6 +12002,11 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcanxu_info:'出牌阶段限一次你可以选择两名手牌数不同的其他角色令其中手牌少的角色获得手牌多的角色的一张手牌并展示之。然后若此牌不为黑桃则你摸一张牌若这两名角色手牌数相等则你回复1点体力。',
dczhuiyi:'追忆',
dczhuiyi_info:'当你死亡时你可以令一名不为击杀者的其他角色摸X张牌X为存活角色数然后其回复1点体力。',
re_jushou:'界沮授',
dcshibei:'矢北',
dcshibei_info:'锁定技当你于一回合内第一次受到伤害后你回复1点体力当你于一回合内第二次受到伤害后你失去1点体力。',
dcjianying:'渐营',
dcjianying_info:'当你使用与你使用的上一张牌点数或花色相同的牌时,你可以摸一张牌。',
refresh_standard:'界限突破·标',
refresh_feng:'界限突破·风',

487
character/sb.js Normal file
View File

@ -0,0 +1,487 @@
'use strict';
game.import('character',function(lib,game,ui,get,ai,_status){
return {
//strategy and battle, "sb" in short
name:'sb',
connect:true,
character:{
sb_yujin:['male','wei',4,['sbxiayuan','sbjieyue']],
sb_huaxiong:['male','qun','3/4/1',['new_reyaowu','sbyangwei']],
liucheng:['female','qun',3,['splveying','spyingwu']],
sp_yangwan:['female','shu',3,['spmingxuan','spxianchou']],
sb_huangzhong:['male','shu',4,['sbliegong']],
},
skill:{
//于禁
sbxiayuan:{
audio:2,
trigger:{global:'damageEnd'},
direct:true,
filter:function(event,player){
return event.hujia&&!event.player.hujia&&event.player.isIn()&&player.countCards('h')>1&&!player.hasSkill('sbxiayuan_round',null,false,false);
},
content:function(){
'step 0'
player.addTempSkill('sbxiayuan_round','roundStart');
player.chooseToDiscard(2,'h',get.prompt('sbxiayuan',trigger.player),'弃置两张手牌,令其获得'+get.cnNumber(trigger.hujia)+'点护甲').set('goon',get.attitude(player,trigger.player)>0).set('ai',function(card){
if(!_status.event.goon) return 0;
return 5-get.value(card);
}).logSkill=['sbxiayuan',trigger.player];
'step 1'
if(result.bool){
var target=trigger.player;
player.logSkill('sbxiayuan',target);
target.changeHujia(trigger.hujia);
game.delayx();
}
else player.removeSkill('sbxiayuan_round');
},
subSkill:{round:{charlotte:true}},
ai:{expose:0.2},
},
sbjieyue:{
audio:2,
trigger:{player:'phaseJieshuBegin'},
direct:true,
content:function(){
'step 0'
player.chooseTarget(lib.filter.notMe,get.prompt('sbjieyue'),'令一名其他角色获得1点护甲然后该角色可以交给你一张牌。').set('ai',function(target){
return get.attitude(_status.event.player,target)/Math.sqrt(Math.min(1,target.hp+target.hujia));
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('sbjieyue',target);
target.changeHujia(1);
target.chooseCard('he','是否交给'+get.translation(player)+'一张牌?').set('ai',(card)=>0.1-get.value(card));
}
else event.finish();
'step 2'
if(result.bool){
player.gain(result.cards,target,'giveAuto');
}
},
ai:{
threaten:2.7,
expose:0.2,
},
},
//华雄
sbyangwei:{
audio:2,
enable:'phaseUse',
filter:function(event,player){
return !player.hasSkill('sbyangwei_counter',null,null,false);
},
content:function(){
player.draw(2);
player.addTempSkill('sbyangwei_effect');
player.addSkill('sbyangwei_counter');
},
ai:{
order:9,
result:{player:1},
},
subSkill:{
effect:{
audio:'sbyangwei',
equipSkill:false,
inherit:'qinggang_skill',
charlotte:true,
mod:{
targetInRange:function(card){
if(card.name=='sha') return true;
},
cardUsable:function(card,player,num){
if(card.name=='sha') return num+1;
},
},
mark:true,
marktext:'威',
intro:{content:'使用【杀】的次数上限+1且无距离限制且无视防具'},
},
counter:{
trigger:{player:'phaseJieshu'},
silent:true,
popup:false,
forced:true,
charlotte:true,
onremove:true,
content:function(){
if(!player.storage.sbyangwei_counter) player.storage.sbyangwei_counter=true;
else player.removeSkill('sbyangwei_counter');
},
},
},
},
//黄忠
sbliegong:{
audio:2,
mod:{
cardnature:function(card,player){
if(!player.getEquip(1)&&get.name(card,player)=='sha') return false;
},
},
trigger:{player:'useCardToPlayered'},
filter:function(event,player){
return !event.getParent()._sbliegong_player&&event.targets.length==1&&event.card.name=='sha'&&player.getStorage('sbliegong').length>0;
},
prompt2:function(event,player){
var str='',storage=player.getStorage('sbliegong');
if(storage.length>1){
str+=('展示牌堆顶的'+get.cnNumber(storage.length-1)+'张牌并增加伤害;且');
}
str+=('令'+get.translation(event.target)+'不能使用花色为');
for(var i=0;i<storage.length;i++){
str+=get.translation(storage[i]);
}
str+=('的牌响应'+get.translation(event.card));
return str;
},
logTarget:'target',
check:function(event,player){
var target=event.target;
if(get.attitude(player,target)>0) return false;
if(target.hasSkillTag('filterDamage',null,{
player:player,
card:event.card,
})) return false;
var storage=player.getStorage('sbliegong');
if(storage.length>=4) return true;
if(storage.length<3) return false;
if(target.hasShan()) return storage.contains('heart')&&storage.contains('diamond');
return true;
},
content:function(){
var storage=player.getStorage('sbliegong').slice(0);
var num=storage.length-1;
var evt=trigger.getParent();
if(num>0){
if(typeof evt.baseDamage!='number') evt.baseDamage=1;
var cards=get.cards(num);
player.showCards(cards.slice(0),get.translation(player)+'发动了【烈弓】');
while(cards.length>0){
var card=cards.pop();
if(storage.contains(get.suit(card,false))) evt.baseDamage++;
ui.cardPile.insertBefore(card,ui.cardPile.firstChild);
}
game.updateRoundNumber();
}
evt._sbliegong_player=player;
player.addTempSkill('sbliegong_clear');
var target=trigger.target;
target.addTempSkill('sbliegong_block');
if(!target.storage.sbliegong_block) target.storage.sbliegong_block=[];
target.storage.sbliegong_block.push([evt.card,storage]);
},
ai:{
threaten:3.5,
directHit_ai:true,
halfneg:true,
skillTagFilter:function(player,tag,arg){
if(arg&&arg.card&&arg.card.name=='sha'){
var storage=player.getStorage('sbliegong');
if(storage.length<3||!storage.contains('heart')||!storage.contains('diamond')) return false;
var target=arg.target;
if(target.hasSkill('bagua_skill')||target.hasSkill('bazhen')||target.hasSkill('rw_bagua_skill')) return false;
return true;
}
return false;
},
},
intro:{
content:'已记录花色:$',
onunmark:true,
},
group:'sbliegong_count',
subSkill:{
clear:{
trigger:{player:'useCardAfter'},
forced:true,
charlotte:true,
popup:false,
filter:function(event,player){
return event._sbliegong_player==player;
},
content:function(){
player.unmarkSkill('sbliegong');
},
},
block:{
mod:{
cardEnabled:function(card,player){
if(!player.storage.sbliegong_block) return;
var suit=get.suit(card);
if(suit=='none') return;
var evt=_status.event;
if(evt.name!='chooseToUse') evt=evt.getParent('chooseToUse');
if(!evt||!evt.respondTo||evt.respondTo[1].name!='sha') return;
for(var i of player.storage.sbliegong_block){
if(i[1].contains(suit)) return false;
}
},
},
trigger:{
player:['damageBefore','damageCancelled','damageZero'],
target:['shaMiss','useCardToExcluded','useCardToEnd'],
global:['useCardEnd'],
},
forced:true,
firstDo:true,
charlotte:true,
onremove:true,
filter:function(event,player){
if(!event.card||!player.storage.sbliegong_block) return false;
for(var i of player.storage.sbliegong_block){
if(i[0]==event.card) return true;
}
return false;
},
content:function(){
var storage=player.storage.sbliegong_block;
for(var i=0;i<storage.length;i++){
if(storage[i][0]==trigger.card){
storage.splice(i--,1);
}
}
if(!storage.length) player.removeSkill('sbliegong_block');
},
},
count:{
trigger:{
player:'useCard',
target:'useCardToTargeted',
},
forced:true,
filter:function(event,player,name){
if(name!='useCard'&&player==event.player) return false;
var suit=get.suit(event.card);
if(!lib.suit.contains(suit)) return false;
if(player.storage.sbliegong&&player.storage.sbliegong.contains(suit)) return false;
return true;
},
content:function(){
player.markAuto('sbliegong',[get.suit(trigger.card)]);
},
},
},
},
//刘赪
splveying:{
audio:2,
trigger:{player:'useCardAfter'},
forced:true,
filter:function(event,player){
return event.card.name=='sha'&&player.countMark('splveying')>1;
},
logTarget:'targets',
content:function(){
player.removeMark('splveying',2);
for(var i of trigger.targets) player.discardPlayerCard(i,true,'he');
},
marktext:'椎',
intro:{
name:'椎(掠影/莺舞)',
name2:'椎',
content:'mark',
},
group:'splveying_add',
subSkill:{
add:{
trigger:{player:'useCardToPlayered'},
forced:true,
usable:2,
filter:function(event,player){
return event.card.name=='sha'&&player.isPhaseUsing();
},
content:function(){
player.addMark('splveying',1);
},
},
},
},
spyingwu:{
group:'spyingwu_add',
audio:2,
trigger:{player:'useCardAfter'},
forced:true,
locked:false,
filter:function(event,player){
return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.countMark('splveying')>1;
},
content:function(){
player.removeMark('splveying',2);
player.chooseUseTarget('sha',false);
},
ai:{combo:'splveying'},
subSkill:{
add:{
trigger:{player:'useCardToPlayered'},
forced:true,
locked:false,
usable:2,
filter:function(event,player){
return player.hasSkill('splveying')&&(get.type(event.card)=='trick'&&!get.tag(event.card,'damage'))&&player.isPhaseUsing();
},
content:function(){
player.addMark('splveying',1);
},
},
},
},
//手杀杨婉
spmingxuan:{
audio:2,
trigger:{player:'phaseUseBegin'},
forced:true,
filter:function(event,player){
var list=player.getStorage('spmingxuan');
return player.countCards('h')>0&&game.hasPlayer(function(current){
return current!=player&&!list.contains(current);
});
},
content:function(){
'step 0'
var suits=[],hs=player.getCards('h');
for(var i of hs) suits.add(get.suit(i,player));
var list=player.getStorage('spmingxuan'),num=Math.min(suits.length,game.countPlayer(function(current){
return current!=player&&!list.contains(current);
}));
player.chooseCard('h',true,[1,num],'瞑昡:请选择至多'+get.cnNumber(num)+'张花色各不相同的手牌',function(card,player){
if(!ui.selected.cards.length) return true;
var suit=get.suit(card);
for(var i of ui.selected.cards){
if(get.suit(i,player)==suit) return false;
}
return true;
}).set('complexCard',true).set('ai',(card)=>6-get.value(card));
'step 1'
if(result.bool){
var list=player.getStorage('spmingxuan'),cards=result.cards.randomSort();
var targets=game.filterPlayer((current)=>(current!=player&&!list.contains(current))).randomGets(cards.length).sortBySeat();
player.line(targets,'green');
for(var i=0;i<targets.length;i++){
targets[i].gain(cards[i],player);
player.$giveAuto(cards[i],targets[i]);
}
event.targets=targets;
event.num=0;
}
else event.finish();
'step 2'
game.delayx();
'step 3'
if(num<targets.length){
var target=targets[num];
event.num++;
if(target.isIn()){
event.target=target;
target.chooseToUse(function(card,player,event){
if(get.name(card)!='sha') return false;
return lib.filter.filterCard.apply(this,arguments);
},'对'+get.translation(player)+'使用一张杀,否则交给其一张牌,且其摸一张牌').set('targetRequired',true).set('complexSelect',true).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);
}).set('sourcex',player).set('addCount',false);
}
else{
if(event.num<targets.length) event.redo();
else event.finish();
}
}
'step 4'
if(result.bool){
player.markAuto('spmingxuan',[target]);
if(event.num<targets.length) event.goto(3);
else event.finish();
}
else{
var he=target.getCards('he');
if(he.length){
if(he.length==1) event._result={bool:true,cards:he};
else target.chooseCard('he',true,'交给'+get.translation(player)+'一张牌')
}
else{
if(event.num<targets.length) event.goto(3);
else event.finish();
}
}
'step 5'
if(result.bool){
player.gain(result.cards,target,'giveAuto');
player.draw();
}
if(event.num<targets.length) event.goto(3);
},
intro:{content:'已被$使用过杀'},
},
spxianchou:{
audio:2,
trigger:{player:'damageEnd'},
direct:true,
filter:function(event,player){
return event.source&&event.source.isIn()&&game.hasPlayer(function(current){
return current!=player&&current!=event.source;
});
},
content:function(){
'step 0'
player.chooseTarget(get.prompt2('spxianchou'),function(card,player,target){
return target!=player&&target!=_status.event.getTrigger().source;
}).set('ai',function(target){
return get.attitude(target,_status.event.player)*Math.sqrt(target.countCards('he'));
});
'step 1'
if(result.bool){
var target=result.targets[0];
event.target=target;
player.logSkill('spxianchou',target);
player.line2([target,trigger.source]);
target.chooseToDiscard('he','是否弃置一张牌,视为对'+get.translation(trigger.source)+'使用一张【杀】?').set('ai',function(card){
if(_status.event.goon) return 8-get.value(card);
return 0;
}).set('goon',((target.canUse('sha',trigger.source,false)?get.effect(trigger.source,{name:'sha',isCard:true},target,target):0)+get.recoverEffect(player,target,target))>0);
}
else event.finish();
'step 2'
if(result.bool){
if(target.canUse('sha',trigger.source,false)) target.useCard({name:'sha',isCard:true},trigger.source,false);
else event.finish();
}
else event.finish();
'step 3'
if(target.hasHistory('sourceDamage',function(evt){
var card=evt.card;
if(!card||card.name!='sha') return false;
var evtx=evt.getParent('useCard');
return evtx.card==card&&evtx.getParent()==event;
})) player.recover();
},
},
},
translate:{
sp_yangwan:'手杀杨婉',
spmingxuan:'瞑昡',
spmingxuan_info:'锁定技。出牌阶段开始时你须选择至多X张花色各不相同的手牌X为未选择过选项一的角色将这些牌随机交给这些角色中的等量角色。然后这些角色依次选择一项⒈对你使用一张【杀】。⒉交给你一张牌然后你摸一张牌。',
spxianchou:'陷仇',
spxianchou_info:'当你受到有来源的伤害后你可选择一名不为伤害来源的其他角色。该角色可以弃置一张牌然后视为对伤害来源使用一张【杀】无距离限制。若其因此【杀】造成了伤害则你回复1点体力。',
liucheng:'刘赪',
splveying:'掠影',
splveying_info:'锁定技。①每回合限两次当你使用【杀】指定目标后你获得一个“椎”。②当你使用的【杀】结算结束后若你的“椎”数大于1则你弃置两个“椎”然后弃置所有目标角色的各一张手牌。',
spyingwu:'莺舞',
spyingwu_info:'若你拥有〖掠影〗①每回合限两次当你使用非伤害类普通锦囊牌指定目标后你获得一个“椎”。②当你使用的非伤害类普通锦囊牌结算结束后若你的“椎”数大于1则你弃置两个“椎”然后可以视为使用一张【杀】。',
sb_huangzhong:'谋黄忠',
sbliegong:'烈弓',
sbliegong_info:'①若你的装备区内没有武器牌则你手牌区内所有【杀】的属性视为无属性。②当你使用牌时或成为其他角色使用牌的目标后你记录此牌的花色。③当你使用【杀】指定唯一目标后若你〖烈弓②〗的记录不为空则你可亮出牌堆顶的X张牌X为你〖烈弓②〗记录过的花色数-1令此【杀】的伤害值基数+YY为亮出牌中被〖烈弓②〗记录过花色的牌的数量且目标角色不能使用〖烈弓②〗记录过花色的牌响应此【杀】。此【杀】使用结算结束后你清除〖烈弓②〗的记录。',
sb_huaxiong:'谋华雄',
sbyangwei:'扬威',
sbyangwei_info:'出牌阶段,你可以摸两张牌,令此技能于你的下下个结束阶段前失效,且你获得如下效果直到回合结束:使用【杀】无距离限制,次数上限+1且无视防具。',
sb_yujin:'谋于禁',
sbxiayuan:'狭援',
sbxiayuan_info:'每轮限一次。其他角色受到伤害后若其因此伤害触发过护甲效果且其没有护甲则你可弃置两张手牌令其获得X点护甲X为其因此伤害触发护甲效果而失去的护甲数量。',
sbjieyue:'节钺',
sbjieyue_info:'结束阶段你可以令一名其他角色获得1点护甲。然后其可以交给你一张牌。',
},
};
});

View File

@ -592,12 +592,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
skills:['zhuangshu_basic'],
forceDie:true,
onLose:function(){
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,'被销毁了');
}
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
},
equipDelay:false,
loseDelay:false,
@ -612,12 +610,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forceDie:true,
skills:['zhuangshu_trick'],
onLose:function(){
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,'被销毁了');
}
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
},
equipDelay:false,
loseDelay:false,
@ -633,12 +629,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
forceDie:true,
inherit:'zhuangshu_basic',
onLose:function(){
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,'被销毁了');
}
card.fix();
card.remove();
card.destroyed=true;
game.log(card,'被销毁了');
},
equipDelay:false,
loseDelay:false,
@ -826,7 +820,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(subtype!='equip1'&&subtype!='equip2') subtype='others';
var card_map={
equip1:['wushuangfangtianji','guilongzhanyuedao','chixueqingfeng','bintieshuangji','wutiesuolian','wuxinghelingshan'],
equip2:['linglongshimandai','hongmianbaihuapao','qimenbazhen','guofengyupao','huxinjing','heiguangkai'],
equip2:['linglongshimandai','hongmianbaihuapao','qimenbagua','guofengyupao','huxinjing','heiguangkai'],
others:['shufazijinguan','xuwangzhimian','tianjitu','taigongyinfu','sanlve','zhaogujing'],
};
if(!_status.olshengong_map) _status.olshengong_map={};
@ -909,7 +903,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cards.push(i);
}
}
game.cardsGotoOrdering(cards);
game.cardsGotoSpecial(cards);
game.log(cards,'被移出了游戏');
player.addTempSkill('olshengong_draw');
player.addMark('olshengong_draw',cards.length,false);
@ -943,7 +937,6 @@ game.import('character',function(lib,game,ui,get,ai,_status){
},
content:function(){
'step 0'
trigger.num--;
player.chooseControl('equip1','equip2','equip6','equip5').set('prompt','选择获得一种副类别的装备牌').set('ai',function(card){
if(player.isEmpty(2)) return 'equip2';
if(player.isEmpty(5)) return 'equip5';
@ -956,7 +949,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(result.control=='equip6') return (type=='equip3'||type=='equip4');
return type==result.control;
});
if(card) player.gain(card,'gain2');
if(card){
trigger.num--;
player.gain(card,'gain2');
}
},
group:'olqisi_init',
subSkill:{
@ -1228,10 +1224,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return player.hp>0;
},
prompt2:function(event,player){
var prompt='失去1点体力然后'
var prompt='失去1点体力然后';
var cards=event.cards.filterInD();
if(cards.length) prompt+=('获得'+get.translations(cards)+'、');
prompt+='摸一张牌、本回合使用【杀】的次数上限+1'
if(cards.length) prompt+=('获得'+get.translation(cards)+'、');
prompt+='摸一张牌、本回合使用【杀】的次数上限+1';
return prompt;
},
check:function(event,player){
@ -13803,6 +13799,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
'step 1'
trigger.player.storage.rezhoufu2_markcount++;
if(trigger.player.storage.rezhoufu2_markcount>=2){
delete trigger.player.storage.rezhoufu2_markcount;
var cards=trigger.player.getExpansions('rezhoufu2');
player.gain(cards,trigger.player);
}
@ -18495,7 +18492,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guofengyupao_info:'锁定技,你不是其他角色使用普通锦囊牌的合法目标。',
shufazijinguan:'束发紫金冠',
shufazijinguan_skill:"束发紫金冠",
shufazijinguan_skill_info:"准备阶段你可以对一名其他角色造成1点伤害。",
shufazijinguan_info:"准备阶段你可以对一名其他角色造成1点伤害。",
sanlve:'三略',
sanlve_skill:'三略',
sanlve_info:'锁定技。你的攻击范围+1。你的手牌上限+1。你使用【杀】的次数上限+1。',

View File

@ -526,8 +526,8 @@ game.import('character',function(lib,game,ui,get,ai,_status){
}
else event.finish();
'step 2'
if(player.countCards('he')>0){
player.chooseCard('he',[1,Math.min(player.countCards('h'),event.num)],'请选择要展示的牌').set('ai',()=>1+Math.random());
if(player.countCards('h')>0){
player.chooseCard('h',[1,Math.min(player.countCards('h'),event.num)],'请选择要展示的牌').set('ai',()=>1+Math.random());
}
else event.finish();
'step 3'
@ -5177,7 +5177,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
cards.push(card);
}
if(!cards.length){
player.draw();
player.draw(6);
event.finish();
}
else if(cards.length==1){
@ -5882,7 +5882,17 @@ game.import('character',function(lib,game,ui,get,ai,_status){
content:function(){
'step 0'
var num=Math.min(game.countPlayer()-1,Math.max(1,player.getDamagedHp()));
player.chooseTarget([1,num],get.prompt('rehuoshui'),'令至多'+get.cnNumber(num)+'名角色的非锁定技失效直到回合结束',lib.filter.notMe).set('ai',function(target){
var str;
if(num>1){
str='选择至多'+get.cnNumber(num)+'名其他角色。';
var list=['第一名角色的非锁定技失效直到回合结束',';第二名角色交给你一张手牌',';第三名及之后角色弃置装备区内的所有牌'];
for(var i=0;i<Math.min(3,num);i++){
str+=list[i];
}
str+='。';
}
else str='令一名其他角色的非锁定技本回合内失效';
player.chooseTarget([1,num],get.prompt('rehuoshui'),str,lib.filter.notMe).set('ai',function(target){
var att=-get.attitude(_status.event.player,target);
if(att<=0) return 0;
if(target.hasSkillTag('maixie')||target.hasSkill('maixie_hp')||target.hasSkill('maixie_defed')) att*=3;
@ -5890,11 +5900,26 @@ game.import('character',function(lib,game,ui,get,ai,_status){
});
'step 1'
if(result.bool){
var targets=result.targets.sortBySeat();
var targets=result.targets;
player.logSkill('rehuoshui',targets);
for(var i of targets) i.addTempSkill('fengyin');
game.delayx();
event.targets=targets;
targets[0].addTempSkill('fengyin');
if(targets.length<2) event.goto(5);
}
else event.finish();
'step 2'
if(targets[1].countCards('h')==0) event.goto(targets.length>2?4:5);
else targets[1].chooseCard('h',true,'交给'+get.translation(player)+'一张手牌');
'step 3'
if(result.bool){
player.gain(result.cards,targets[1],'giveAuto');
}
if(targets.length<3) event.goto(5);
'step 4'
var num=targets[2].countCards('e');
if(num>0) targets[2].chooseToDiscard('e',true,num);
'step 5'
game.delayx();
},
},
reqingcheng:{
@ -13128,7 +13153,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
enable:'phaseUse',
filter:function(event,player){
return !player.hasSkill('songshu_reflectionblue')&&player.countCards('h')>0;
return !player.hasSkill('songshu_reflectionblue',null,null,false)&&player.countCards('h')>0;
},
filterTarget:function(card,player,target){
return target!=player&&player.canCompare(target);
@ -13138,13 +13163,42 @@ game.import('character',function(lib,game,ui,get,ai,_status){
player.chooseToCompare(target).set('small',get.attitude(player,target)>0);
'step 1'
if(!result.bool){
player.draw(2,'nodelay');
target.draw(2);
player.addTempSkill('songshu_reflectionblue');
player.addTempSkill('songshu_reflectionblue','phaseUseAfter');
}
else{
target.addTempSkill('songshu_ai');
}
},
ai:{
basic:{
order:1
},
expose:0.2,
result:{
target:function(player,target){
if(target.hasSkill('songshu_ai',null,null,false)) return 0;
var maxnum=0;
var cards2=target.getCards('h');
for(var i=0;i<cards2.length;i++){
if(get.number(cards2[i])>maxnum){
maxnum=get.number(cards2[i]);
}
}
if(maxnum>10) maxnum=10;
if(maxnum<5&&cards2.length>1) maxnum=5;
var cards=player.getCards('h');
for(var i=0;i<cards.length;i++){
if(get.number(cards[i])<maxnum) return 1;
}
return 0;
}
}
}
},
songshu_reflectionblue:{
},
songshu_ai:{charlotte:true},
songshu_reflectionblue:{charlotte:true},
sibian:{
audio:2,
trigger:{player:'phaseDrawBegin1'},
@ -13167,12 +13221,12 @@ game.import('character',function(lib,game,ui,get,ai,_status){
if(mx.contains(cards[i].number)) gains.addArray(cards.splice(i--,1));
}
player.gain(gains,'gain2');
if(cards.length!=2||Math.abs(gains[0].number-gains[1].number)>=game.players.length) event._result={bool:false};
else player.chooseTarget('是否令一名手牌数最少的角色获得'+get.translation(cards),function(card,player,target){
if(cards.length>0) player.chooseTarget('是否令一名手牌数最少的角色获得'+get.translation(cards),function(card,player,target){
return target.isMinHandcard();
}).ai=function(target){
}).set('ai',function(target){
return get.attitude(_status.event.player,target);
}
});
else event.finish();
'step 2'
if(result.bool){
var target=result.targets[0];
@ -15398,9 +15452,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
pyzhuren_shandian_info:'当你使用【杀】指定目标后可令其进行判定若结果为黑桃其受到3点雷属性伤害梅花其受到1点雷属性伤害你回复1点体力并摸一张牌。',
songshu:'颂蜀',
songshu_info:'出牌阶段,你可以和其他角色拼点。若你没赢,其摸两张牌,且你本阶段内不能再发动〖颂蜀〗',
songshu_info:'出牌阶段,你可以和其他角色拼点。若你没赢,你与摸两张牌,且你本阶段内不能再发动〖颂蜀〗',
sibian:'思辩',
sibian_info:'摸牌阶段,你可以放弃摸牌,改为亮出牌堆顶的四张牌,然后获得其中所有点数最大与点数最小的牌。若获得的牌是两张且点数之差小于存活人数,则你可以将剩余的牌交给手牌数最少的角色。',
sibian_info:'摸牌阶段,你可以放弃摸牌,改为亮出牌堆顶的四张牌,然后获得其中所有点数最大与点数最小的牌,且可以将剩余的牌交给手牌数最少的角色。',
lslixun:'利熏',
lslixun_fate:'利熏',
lslixun_info:'锁定技,当你受到伤害时,你防止此伤害,然后获得等同于伤害值的“珠”标记。出牌阶段开始时,你进行判定,若结果点数小于“珠”的数量,你弃置等同于“珠”数量的手牌(若弃牌的牌数不够,则失去剩余数量的体力值)。',
@ -15772,7 +15826,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
zhiwei_info_guozhan:'你明置此武将牌时,选择一名其他角色。该角色造成伤害后,你摸一张牌,该角色受到伤害后,你随机弃置一张手牌。你弃牌阶段弃置的牌均被该角色获得。该角色死亡时,若你的两个武将牌均明置,你暗置此武将牌。 ',
re_zoushi:'邹氏',
rehuoshui:'祸水',
rehuoshui_info:'准备阶段,你可以令至多X名角色的非锁定技无效直到回合结束X为你已损失的体力值且至少为1。',
rehuoshui_info:'准备阶段,你可以选择至多X名角色X为你已损失的体力值且至少为1。你令这些角色中第一名角色的非锁定技失效直到回合结束第二名角色交给你一张手牌第三名及之后角色弃置装备区内的所有牌。',
reqingcheng:'倾城',
reqingcheng_info:'出牌阶段限一次,你可以与一名手牌数小于你的男性角色交换手牌。',
re_panshu:'潘淑',
@ -15804,7 +15858,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
rexingluan:'兴乱',
rexingluan_info:'出牌阶段限一次,当你使用的仅指定一个目标的牌结算完成后,你可以获得场上一张与此牌点数相同的牌,或获得牌堆中随机一张点数与此牌相同的牌。',
xinxingluan:'兴乱',
xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后你可选择一项①观看牌堆中的两张点数为6的牌并获得其中一张没有则改为摸张牌②令一名其他角色弃置一张点数为6的牌或交给你一张牌③获得场上的一张点数为6的牌。',
xinxingluan_info:'出牌阶段限一次。当你使用牌结算结束后你可选择一项①观看牌堆中的两张点数为6的牌并获得其中一张没有则改为摸张牌②令一名其他角色弃置一张点数为6的牌或交给你一张牌③获得场上的一张点数为6的牌。',
zhouyi:'周夷',
zhukou:'逐寇',
zhukou_info:'①当你于一名角色的出牌阶段第一次造成伤害后你可以摸X张牌X为本回合你已使用的牌数。②你的结束阶段若你本回合没有造成伤害你可以对两名其他角色各造成1点伤害。',
@ -16012,7 +16066,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
dcyinshi_info:'锁定技。①每回合限一次,当你受到伤害时,若此伤害的渠道不为有颜色的牌,则你防止此伤害。②当有因〖八卦阵〗发起的判定的判定牌生效时,你获得此判定牌。',
tenggongzhu:'滕公主',
xingchong:'幸宠',
xingchong_info:'一轮游戏开始时你可声明两个自然数X和Y且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。',
xingchong_info:'一轮游戏开始时你可声明两个自然数X和Y且(X+Y)≤min(5, 你的体力上限)。你摸X张牌并展示Y张牌。若如此做,当你于本轮内失去一张以此法展示的牌后,你摸两张牌。',
liunian:'流年',
liunian_info:'锁定技。牌堆第一次洗牌后你于回合结束时加1点体力上限牌堆第二次洗牌后你于本回合结束时回复1点体力且本局游戏内的手牌上限+10。',
zhangyao:'张媱',

View File

@ -11684,14 +11684,10 @@ game.import('character',function(lib,game,ui,get,ai,_status){
audio:2,
audioname:['xin_jushou'],
check:function(event,player){
return player.getHistory('damage',function(evt){
return evt!=event
}).length==0;
return player.getHistory('damage').indexOf(event)==0;
},
content:function(){
if(player.getHistory('damage',function(evt){
return evt!=trigger
}).length>0){
if(player.getHistory('damage').indexOf(trigger)>0){
player.loseHp();
}
else{
@ -12091,7 +12087,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
guanping:['re_guanping','guanping'],
caifuren:['xin_caifuren','re_caifuren','caifuren'],
guyong:['re_guyong','xin_guyong','guyong'],
yj_jushou:['xin_jushou','yj_jushou'],
yj_jushou:['re_jushou','xin_jushou','yj_jushou'],
guohuanghou:['re_guohuanghou','guohuanghou'],
},
translate:{

View File

@ -37,7 +37,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
yxs_fuermosi:['male','wei',3,['yanyi','jiean']],
yxs_guiguzi:['male','qun',3,['baihe','yinyang','xiushen']],
yxs_xiaoqiao:['female','wu',3,['chujia','zhijie']],
yxs_luzhishen:['male','wei',4,['dili','kuangchan']],
yxs_luzhishen:['male','wei',4,['yxsdili','kuangchan']],
yxs_zhaoyong:['male','shu',3,['zyhufu','hanbei']],
yxs_yangguang:['male','qun',3,['shiqin','yaoyi']],
yxs_tangbohu:['male','qun',3,['luobi','fengliu']],
@ -812,7 +812,7 @@ game.import('character',function(lib,game,ui,get,ai,_status){
return 8-get.value(card);
}
},
dili:{
yxsdili:{
trigger:{player:'phaseDrawBegin'},
forced:true,
filter:function(event,player){
@ -2983,9 +2983,9 @@ game.import('character',function(lib,game,ui,get,ai,_status){
hanbei_info:'锁定技,你的装备区有马时,你的杀不可闪避',
kuangchan:'狂禅',
kuangchan_info:'锁定技,你做主公时,不增加体力上限',
dili:'底力',
// dili_info:'锁定技摸牌阶段你额外摸X张牌X为你已损失的体力值',
dili_info:'锁定技摸牌阶段你额外摸X张牌X为你已损失的体力值的一半向上取整且最多为2',
yxsdili:'底力',
// yxsdili_info:'锁定技摸牌阶段你额外摸X张牌X为你已损失的体力值',
yxsdili_info:'锁定技摸牌阶段你额外摸X张牌X为你已损失的体力值的一半向上取整且最多为2',
chujia:'初嫁',
chujia_info:'出牌阶段限一次你可以弃置两张相同颜色的手牌指定任意一名角色摸X张牌。(X为该角色已损失的体力值) ',
zhijie:'知节',

View File

@ -1,5 +1,5 @@
window.noname_asset_list=[
'v1.9.114.4',
'v1.9.115',
'audio/background/aozhan_chaoming.mp3',
'audio/background/aozhan_online.mp3',
'audio/background/aozhan_rewrite.mp3',
@ -182,6 +182,16 @@ window.noname_asset_list=[
'audio/die/wenyang.mp3',
'audio/die/yanrou.mp3',
'audio/die/zhangyao.mp3',
'audio/die/ol_lusu.mp3',
'audio/die/re_jiaxu.mp3',
'audio/die/re_jushou.mp3',
'audio/die/sb_huangzhong.mp3',
'audio/die/sb_huaxiong.mp3',
'audio/die/sb_yujin.mp3',
'audio/die/shen_machao.mp3',
'audio/die/shen_sunquan.mp3',
'audio/die/tengfanglan.mp3',
'audio/die/weizi.mp3',
'audio/die/baosanniang.mp3',
'audio/die/beimihu.mp3',
@ -944,6 +954,58 @@ window.noname_asset_list=[
'audio/skill/yongjin_xin_lingtong2.mp3',
'audio/skill/yuanyu1.mp3',
'audio/skill/yuanyu2.mp3',
'audio/skill/aichen1.mp3',
'audio/skill/aichen2.mp3',
'audio/skill/dcjianying1.mp3',
'audio/skill/dcjianying2.mp3',
'audio/skill/dcshibei1.mp3',
'audio/skill/dcshibei2.mp3',
'audio/skill/dili_chigang1.mp3',
'audio/skill/dili_chigang2.mp3',
'audio/skill/dili_jiaohui1.mp3',
'audio/skill/dili_jiaohui2.mp3',
'audio/skill/dili_qionglan1.mp3',
'audio/skill/dili_qionglan2.mp3',
'audio/skill/dili_quandao1.mp3',
'audio/skill/dili_quandao2.mp3',
'audio/skill/dili_shengzhi1.mp3',
'audio/skill/dili_shengzhi2.mp3',
'audio/skill/dili_yuanlv1.mp3',
'audio/skill/dili_yuanlv2.mp3',
'audio/skill/dili1.mp3',
'audio/skill/dili2.mp3',
'audio/skill/hengwu1.mp3',
'audio/skill/hengwu2.mp3',
'audio/skill/huaping.mp3',
'audio/skill/liejie1.mp3',
'audio/skill/liejie2.mp3',
'audio/skill/luochong1.mp3',
'audio/skill/luochong2.mp3',
'audio/skill/new_reyaowu_sb_huaxiong1.mp3',
'audio/skill/new_reyaowu_sb_huaxiong2.mp3',
'audio/skill/qibaodao2.mp3',
'audio/skill/rw_bagua_skill.mp3',
'audio/skill/rw_baiyin_skill.mp3',
'audio/skill/rw_renwang_skill.mp3',
'audio/skill/rw_tengjia1.mp3',
'audio/skill/rw_tengjia2.mp3',
'audio/skill/rw_zhuge_skill.mp3',
'audio/skill/sbjieyue1.mp3',
'audio/skill/sbjieyue2.mp3',
'audio/skill/sbjieyue3.mp3',
'audio/skill/sbjieyue4.mp3',
'audio/skill/sbliegong1.mp3',
'audio/skill/sbliegong2.mp3',
'audio/skill/sbxiayuan1.mp3',
'audio/skill/sbxiayuan2.mp3',
'audio/skill/sbyangwei1.mp3',
'audio/skill/sbyangwei2.mp3',
'audio/skill/shouli1.mp3',
'audio/skill/shouli2.mp3',
'audio/skill/yuanzi1.mp3',
'audio/skill/yuanzi2.mp3',
'audio/skill/yuheng1.mp3',
'audio/skill/yuheng2.mp3',
'audio/skill/anguo1.mp3',
'audio/skill/anguo2.mp3',
@ -4413,6 +4475,7 @@ window.noname_asset_list=[
'image/card/bintieshuangji.png',
'image/card/sanlve.png',
'image/card/zhaogujing.png',
'image/card/changandajian_equip1.png',
'image/card/bagua.png',
'image/card/baihupifeng.png',
@ -5395,6 +5458,12 @@ window.noname_asset_list=[
'image/character/weizi.jpg',
'image/character/yanrou.jpg',
'image/character/zhangyao.jpg',
'image/character/re_jushou.jpg',
'image/character/sb_huangzhong.jpg',
'image/character/sb_huaxiong.jpg',
'image/character/sb_yujin.jpg',
'image/character/shen_machao.jpg',
'image/character/shen_sunquan.jpg',
'image/character/baiwuchang.jpg',
'image/character/baosanniang.jpg',

View File

@ -21,7 +21,7 @@ window.config={
zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'],
connect_zhinang_tricks:['guohe','wuxie','wuzhong','dongzhuxianji'],
all:{
sgscharacters:['standard','shenhua','xinghuoliaoyuan','refresh','yijiang','sp','sp2','extra','old','mobile','tw','yingbian','offline'],
sgscharacters:['standard','shenhua','xinghuoliaoyuan','refresh','yijiang','sp','sp2','extra','old','mobile','tw','yingbian','offline','sb'],
sgscards:['standard','extra','sp','guozhan','zhulu','yingbian','yongjian'],
sgsmodes:['identity','guozhan','versus','doudizhu','single','brawl','connect'],
stockmode:['identity','guozhan','versus','boss','doudizhu','single','chess','stone','connect','brawl','tafang'],

View File

@ -11055,7 +11055,7 @@
}
},
orderingDiscard:function(){
var cards=event.relatedEvent.orderingCards;
var cards=event.relatedEvent.orderingCards.slice(0);
for(var i=0;i<cards.length;i++){
if(get.position(cards[i],true)!='o') cards.splice(i--,1);
}
@ -11273,7 +11273,7 @@
custom:[],
});
game.countPlayer2(function(current){
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[]});
current.actionHistory.push({useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]});
current.stat.push({card:{},skill:{}});
if(event.parent._roundStart){
current.getHistory().isRound=true;
@ -12592,6 +12592,9 @@
}
event.resume();
if(event.result){
if(event.result._sendskill){
lib.skill[event.result._sendskill[0]]=event.result._sendskill[1];
}
if(event.result.skill){
var info=get.info(event.result.skill);
if(info&&info.chooseButton){
@ -12742,6 +12745,9 @@
"step 2"
event.resume();
if(event.result){
if(event.result._sendskill){
lib.skill[event.result._sendskill[0]]=event.result._sendskill[1];
}
if(event.result.skill){
var info=get.info(event.result.skill);
if(info&&info.chooseButton){
@ -15370,6 +15376,66 @@
player.syncStorage(roundname);
player.markSkill(roundname);
}
var name=event.skill;
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)){
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';
}
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(!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);
"step 1"
var info=get.info(event.skill);
if(info&&info.contentBefore){
@ -15655,7 +15721,8 @@
target.$giveAuto(event.cards2,player);
'step 1'
event.cards=event.cards1;
var next=player.lose(event.cards,ui.ordering).getlx=false;
var next=player.lose(event.cards,ui.ordering);
next.getlx=false;
next.relatedEvent=event.getParent();
if(player==game.me){
event.delayed=true;
@ -15665,7 +15732,8 @@
}
'step 2'
event.cards=event.cards2;
var next=target.lose(event.cards,ui.ordering).getlx=false;
var next=target.lose(event.cards,ui.ordering);
next.getlx=false;
next.relatedEvent=event.getParent();
if(target==game.me){
event.delayed=true;
@ -21532,6 +21600,66 @@
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)){
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';
}
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(!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);
if(this._hookTrigger){
for(var i=0;i<this._hookTrigger.length;i++){
var info=lib.skill[this._hookTrigger[i]].hookTrigger;
@ -45867,7 +45995,7 @@
node.damagepopups=[];
node.judging=[];
node.stat=[{card:{},skill:{}}];
node.actionHistory=[{useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[]}];
node.actionHistory=[{useCard:[],respond:[],skipped:[],lose:[],gain:[],sourceDamage:[],damage:[],custom:[],useSkill:[]}];
node.tempSkills={};
node.storage={};
node.marks={};
@ -52007,9 +52135,11 @@
return get.suit(card.cards,player);
}
else{
var owner=player||get.owner(card);
if(owner){
return game.checkMod(card,card.suit,'suit',owner);
if(player!==false){
var owner=player||get.owner(card);
if(owner){
return game.checkMod(card,card.suit,'suit',owner);
}
}
return card.suit;
}
@ -52033,17 +52163,22 @@
},
number:function(card,player){
//狗卡你是真敢出啊
var number;
if(card.hasOwnProperty('number')){
number=card.number;
if(typeof number!='number') return null;
}
else{
if(card.cards&&card.cards.length==1) return get.number(card.cards[0]);
return null;
}
if(player!==false){
var number=card.number;
var owner=player||get.owner(card);
if(owner){
return game.checkMod(card,owner,number,'cardnumber',owner);
}
return number;
}
if(typeof card.number=='number') return card.number;
else if(card.cards&&card.cards.length==1) return get.number(card.cards[0]);
return null;
return number;
},
nature:function(card,player){
if(get.itemtype(player)=='player'||player!==false){

View File

@ -10,6 +10,7 @@ window.noname_package={
sp2:'系列专属',
extra:'神将',
mobile:'移动版',
sb:'谋攻篇',
offline:'线下武将',
old:'怀旧',
diy:'DIY',

View File

@ -26,6 +26,7 @@ window.noname_source_list=[
'character/ow.js',
'character/rank.js',
'character/refresh.js',
'character/sb.js',
'character/shenhua.js',
'character/sp.js',
'character/sp2.js',

View File

@ -1,14 +1,15 @@
window.noname_update={
version:'1.9.114.4.1',
update:'1.9.114.4',
version:'1.9.115',
update:'1.9.114.4.1',
changeLog:[
'OL蒲元、芮姬、王祥、卫兹',
'十周年蔡瑁张允、阎柔、张媱',
'bug修复',
'OL神孙权',
'十周年神马超、界沮授',
'移动版谋黄忠、谋华雄、谋于禁',
'技能调整与bug修复',
],
files:[
'card/extra.js',
//'card/gujian.js',
//'card/extra.js',
'card/gujian.js',
'card/guozhan.js',
//'card/gwent.js',
//'card/huanlekapai.js',
@ -27,48 +28,49 @@ window.noname_update={
//'character/gujian.js',
//'character/gwent.js',
//'character/hearth.js',
//'character/mobile.js',
'character/mobile.js',
//'character/mtg.js',
//'character/offline.js',
//'character/old.js',
//'character/ow.js',
'character/rank.js',
'character/refresh.js',
'character/shenhua.js',
'character/sb.js',
//'character/shenhua.js',
'character/sp.js',
'character/sp2.js',
//'character/standard.js',
'character/tw.js',
//'character/tw.js',
//'character/swd.js',
//'character/xianjian.js',
//'character/xinghuoliaoyuan.js',
'character/yingbian.js',
//'character/yijiang.js',
//'character/yxs.js',
//'character/yingbian.js',
'character/yijiang.js',
'character/yxs.js',
//'extension/boss/extension.js',
//'layout/default/layout.css',
//'layout/newlayout/global.css',
//'layout/default/menu.css',
//'layout/nova/layout.css',
//'layout/mobile/equip.css',
'mode/boss.js',
//'mode/boss.js',
//'mode/brawl.js',
//'mode/chess.js',
//'mode/connect.js',
//'mode/doudizhu.js',
'mode/guozhan.js',
//'mode/guozhan.js',
//'mode/identity.js',
//'mode/single.js',
'mode/stone.js',
//'mode/stone.js',
//'mode/tafang.js',
//'mode/versus.js',
'game/game.js',
//'game/keyWords.js',
//'game/NoSleep.js',
//'game/config.js',
//'game/package.js',
'game/config.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: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB